Сложности обучения

Учиться тяжело

Хорошее обучение - это выход за границы возможного, делание того, чего не делал раньше. Можно каждый день бегать 3 километра в комфортном режиме и не особо прогрессировать (иногда это нормально, если цель - расслабление после дневной "вахты" за компьютером), а можно каждый раз стараться пробежать немного быстрее и это непросто ...

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

Продуктивно ли считать себя самым умным и как решать действительно сложные задачи

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

Быть "самым умным"

Я закончил школу с отличием. И институт тоже. Побеждал ...

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

Про стэнфордские онлайн-классы

Этой осенью я обычно просыпаюсь в 5-6 часов утра, чтобы учиться в ai-class.com и ml-class.org. Позади 6 из 10-ти учебных недель. Уже десяток раз я восклицал "Ну почему же я не начал так учиться год назад?!". Эти курсы изменили меня - открыли новые интересные предметные области и помогли вспомнить ...

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

Programmers at work (1989)

С большим удовольствием читаю книгу "Programmers at work", выпущенную в 1989 году. Думаю, что она понравится всем тем, кому понравилась книга "Coders at work" (также известная как "Кодеры за работой"). Ниже - некоторые цитаты, которые я уже подчеркнул (а я еще в самом начале книги).

SIMONYI: I think the listing gives ...

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

Django Dash 2011, мои впечатления

Понедельничной ночью 1-го августа, примерно в 03:30 пять человек потихоньку укладывали ноутбуки в свои рюкзаки и выходили из офиса чтобы разъехаться по домам. Кто-то на такси, кто-то на своей машине. Еще трое ушли несколькими часами раньше. Закончились двое суток напряженного труда над созданием проектов в рамках конкурса Django Dash ...

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

Лев Валкин про Силиконовую долину

Вчера Лев рассказывал про то, что отличает Силиконовую долину от России-Украины и что нам делать чтобы появилась среда, благоприятная для стартапов.

Горизонтальная коммуникация

Первым большим сдерживающим фактором на постсоветском пространстве является остутствие горизонтальной коммункации.

Вертикальная коммуникация: разработчик - менеджер - сейлз - клиент.

Горизонтальная: программист компании Luxoft - программист компании Grammarly - студент университа - программист ...

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

Лев Валкин про ФП и Erlang

Вчера ходили с @vseloved и @matveym на выступление Льва Валкина про функциональное программирование в целом и Erlang в частности. Кратко запишу основные тезисы, которые мне очень актуальны.

Новый набор инженерных принципов, непривычных для императивных языков

Функциональные языки дают возможность поработать с другими способами построения программных систем. Эти новые способы позволяют ...

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

Стоит ли мне работать руководителем?

Меня давно интересует вопрос "Стоит ли мне работать руководителем?". В прошлую пятницу я был в Москве и разговаривал там с моим одноклассником Костей Кузнецовым. Много лет назад он был для меня проводником в мир компьютеров. Костя сам является отличным программистом, а сейчас руководит командой из 20 человек и скоро станет ...

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

Неопределенность и страх

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

Но у меня есть опыт таких проектов ...

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

Django Dash 9-10 июля

Django Dash - международный конкурс, в котором компактные спецназ-команды за 48 часов создают полноценный проект. Правила простые:

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

Интерактивная консоль для pyuno + django

Недавно я писал про то, как работать с документами LibreOffice из питона. Я сейчас работаю над исследовательским проектом, в котором django application обращается к LibreOffice через pyuno. В этом проекте натолкнулся на неприятную ошибку - ./manage.py shell при выполнении любых связанных с pyuno методов выдает сообщение "SystemError: pyuno runtime is ...

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

Рабочий процесс как поход

Вчера в разговоре с коллегой пришел образ гармоничного движения к большой цели. Утром каждого дня нужно находить/создавать интересный маршрут на сегодня. Такой чтобы:

Всё как в хорошем походе. У тебя ...

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

Использование Markdown

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

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

OpenOffice + Python, pабота с файлами MS Word

Пару недель назад для проекта Grammarly Handbook понадобилось импортировать много форматированного текста из документов MS Word. Текст находился в 40 файлах размером от одной до двадцати страниц. Первые несколько страниц я перенес вручную и несколько утомился - механическая работа меня не очень радует. Начал искать возможность читать вордовские документы из Питона ...

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

В Python 3.x работает старый способ форматирования строк

А старый добрый способ форматирования строк с помощью % в 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 - на 4-м месте

Python - самый популярный язык программирования после Java, C, C++ (именно в таком порядке).

таблица

график

Источник - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

if request.method == 'GET'

Наконец-то я понял, почему пишут так

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})

и не пишут ...

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

Блоги программистов

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

Не выражают свои эмоции, не самовыражаются, не зарабатывают, не продвигают, не продают. А продолжают традицию обмена новыми идеями, полученным ...

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

2010 - итоги года

Блог

Жизнь

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

В чем польза документоориентированных БД

Первый use-case использования документоориентированных БД, который не дает мне покоя.

Relational Solution

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

Подписался на 2 новых блога

http://codeascraft.etsy.com/ - компания Etsy делится своим опытом в разработке, мониторинге и прочих областях

http://www.laughingmeme.com/ - когда-то был архитектором Flickr'a, а теперь работает VP of Engineering at Etsy

Выбор инструментов

Короткая мысль:

Базовых принципов построения сложных систем немного. MVC, разделение на шаблоны и логику, разделение на сервера приложений и сервера данных, ... А вот инструментов для реализации каждого из принципов очень много. Много редакторов, шаблонных языков, key-value datastores, веб-фреймворков, инструментов тестирования разного уровня, систем контроля версий, языков программирования.

Мало пользы в ...

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

Akismet to Recaptcha

Внес небольшие изменения в код этого блога. Заметил, что Akismet (сервис проверки на спам, которым обрабатывались все входящие комментарии) перестал пропускать однострочные короткие комментарии. Отключил проверку на спам, вместо этого добавил Recaptcha. Если есть какие-то замечания - пишите в комментарии к этому посту или на roman.vorushin@gmail.com.

Шаблоны страниц глазами дизайнера

В новом проекте я много работаю в роли дизайнера-юзабилиста-фронтендщика. Пишу html, css, javascript. Думаю страницами, действиями, приоритетами. Хочу поделиться тем, что я успел увидеть глазами дизайнера в оформлении шаблонов страниц сайта.

Не уходить далеко от html, css

В случае статического сайта каждая страница - это один html файл. Это очень удобно ...

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

Бывают ли такие дизайнеры?

У меня есть больной вопрос, мои уважаемые читатели.

Я давно читаю блог команды 37signals Signal vs. Noise и я завидую тому, как много внимания они уделяют дизайну. Они рекомендуют использовать команды из 1 дизайнера и 2 программистов. Причем дизайнер сам правит шаблоны.

Я никогда еще не работал с такими дизайнерами ...

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

Team lead для проекта в Москве

Знакомые ищут 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

Все больше пишу на Javascript - сначала jQuery для всяких формочек, потом Google/Yandex Maps, сейчас большой проект с Canvas. Среди друзей больше всего работал с JS Дима Смолин, на днях обсуждали с ним слабые места Javascript:

  1. объявление переменных через var приводит к страшным ошибкам в коде (если забудешь var)

  2. итераторы ...

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

Жизнь и работа на море

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

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

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

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

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

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

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

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

Подробнее о Celery

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

Проблемная область

В каждом более-менее крупном веб-проекте появляются задачи, которые не укладываются в короткий цикл запроса-ответа HTTP. Отправка уведомлений по почте - сервер может не отвечать 20 секунд, зачем ...

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

django-compressor

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

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

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 ...

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

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

Я всегда был за работу в офисе. И коммуникации лучше, и общее поле команды, и разговоры за чаем, позволяющие наткнуться на нужную мысль. Когда мы делали Рисоваську, то сидели все в одном уютном офисе и нечеловечески трудились (нас даже начали называть киборгами, потому что не парились, не переживали, а дружно ...

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

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 ...

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

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

Когда я начинал работать на компьютере, то из развлечений были только игры и то их нужно было писать самому, потому что профессиональные игры нам загружали только по большим праздникам. Мы писали тогда на 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 ...

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

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

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

class DynamicForm(forms.Form):        
    def __init__(self, some_data, *args, **kwargs):
        super(DynamicForm, self).__init__(*args, **kwargs)
        for i, requisite ...

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

Декораторы Python

В питоне есть 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 дня в неделю в офис на собрания, а остальное время работать удаленно.

Какие проекты меня интересуют

Больше ...

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

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

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

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

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

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

Отпуск

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

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

Блог-итоги 2009

17 ноября запустил свой программистский блог vorushin.ru. Главный результат - я с удовольствием пишу на профессиональные темы и получаю фидбек. Очень интересно писать все более длинные и красивые статьи, а не просто слепки мыслей-состояний того, что есть в голове. Как отмечали многие интервьюируемые в Coders at Work, самый полезный навык ...

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

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

"За что вы любите программирование?". Этот вопрос я задавал вчера друзьям-киборгам, а потом снова и снова задавал его себе. Я помню, что с самого детства мне нравились инструменты, которыми можно делать всякие забавные штуки. Как-то мама принесла с работы калькулятор, с такими красными циферками, который работал от сети. Как я ...

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

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

  1. Не нужно ставить точки с запятыми и фигурные скобки повсюду (радует еще больше, чем при переходе с begin-end Паскаля к фигурным скобкам C).
  2. Очень легко читать чужой код (из-за п.1, стандартизированных отступов, компактности языка, а также благодаря специальному упору на читаемость в дизайне языка). По сравнению с C/C ...

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

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

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

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

Но "контроль" - непростая штука. Чем больше ограничения, тем скорее создается среда недоверия ...

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

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

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

Очистка кеша memcached

from memcache import Client
c = Client(('127.0.0.1:11211',))
c.flush_all()

AkismetModerator для комментариев в Django

В 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 ...

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

Coders at Work

Это замечательную книгу я начал читать по рекомендации Anatoly Vorobey. Автор провел 15 интервью с выдающимися программистами нашего времени: от Бреда Фитцпатрика (создатель ЖЖ и, насколько я знаю, самый молодой из интервьюируемых) до Дональда Кнута.

Типичная беседа строилась следующим образом - первую половину составляли расспросы о том как люди начинали свою ...

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

Рисоваська и Erlang

Сегодня получил письмо от Михаила:

Если есть такая возможность, напишите про Erlang. Как я понял, в "Рисоваське" он используется. Просто в Интернете катастрофически мало статей об Erlang-е на русском языке. А у Вас, наверняка, есть, чем поделиться. )

Про наш опыт использования Erlang Толик Востряков уже написал две статьи: Erlang в ...

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

Django Forms

pony powered

В джанге многое сразу покорило мое сердце - прекрасные модели, мощный URLconf, красивые шаблоны. Но вот джанго-формы открылись для меня во всей красе лишь недавно. Я быстро научился верстать и обрабатывать формы руками, поэтому не было надобности вникать в довольно большой посвященный им раздел документации (10 разделов!). В новом большом django-проекте ...

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

Python XML serializer

Потребовалось мне на днях сделать сериализацию простого 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 ...

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

Развертывание Django-проектов c помощью Fabric

В одном из проектов необходимо регулярно выкладывать код из ветки stage на staging сервер. Начали делать это вручную - входишь через ssh, делаешь git push origin stage, если нужно - обновляешь базу и затем перезапускаешь apache. К концу этой недели решили, что хорошо бы все эти действия выполнять одной командой. Я прошерстил ...

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

Python и скорость: Unladen Swallow, PyPy, Cython

Краткий перевод обсуждения Recommendation against Python?:

kng Я слышал, что сотрудникам Google не рекомендуют использовать Python для новых проектов, что мне кажется глупым, учитывая как много питоновского кода и поддержки самого языка Python исходит из Google. Я начал поиски информации, но ничего не нашел. Вы знаете что-то об этом или ...

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

Изменения в блоге - "Интересные ссылки"

Поскольку часть моих постов заключается в том, чтобы "дать ссылку на интересную статью", то сегодня я создал отдельный раздел блога "Интересные ссылки" (справа на главной странице). Часть постов я сконвертировал в статьи-ссылки и из-за этого вы могли получить в свои RSS-ридеры несколько старых записей. Сорри :))))

Программировать без лишней боли

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

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

Беседа-интервью "Из сытой корпорации - в рискованный стартап"

9 ноября я беседовал с ребятами из kamblog.ru, рассказывал про свой опыт перехода из сытой тёплой корпорации в свой рискованный стартап, где нужно было все делать самому и пули буквально свистели над головой :)))) Эту беседу-интервью ребята записали на видео. Разговор получился длинным - больше часа. Ниже я запишу основные тезисы ...

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

Каких программистов берут в GitHub

Один из создателей GitHub, Chris Wanstrath, выступил на конференции Ruby Hoedown 2008. Особенно порадовали слова о том, каким нужно быть (а точнее что нужно делать), чтобы начать делать интересные проекты с самыми лучшими разрабочиками со всего мира:

In fact, stop worrying so much about other people. Every time I've ...

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

Решил вести программерский блог

3 года назад я завел себе ЖЖ, основной функцией которого было отвечать на вопрос "Как дела?", который многочисленные друзья из разных городов задавали мне по аське с завидной регулярностью. Большинство моих постов были на личные темы, а редкие программерские посты не привлекали особого внимания.

В этом году я снова стал ...

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