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

Знакомые ищут team lead для нового проекта в Москве. Python, lean development, agile. Проект околосоциально-политический, использующий краудсорсинг. Нужно набрать небольшую мобильную команду (2-3 человека) и сделать прототип за 1.5 месяца. Зарплата + equity. Обращайтесь к alex.shevchenko@sciworth.com (один из основателей Sciworth Labs, в которой я сейчас работаю).

Книга Акио Морита "Сделано в Японии"

Акио Морито - руководитель и со-основатель компании SONY. Интересная история жизни удивительного человека. Я даже задумался - а не купить ли следующим ноутбуком Sony Vaio (вместо макбука, который служит мне уже третий год).

Вот пара цитат про путешествия. Семейный подход к образованию (притом что большинство детей училось в лучших университетах):

Мой отец следовал примеру своего отца. Он часто говорил, что никакие деньги в мире не могут дать человеку образование, если только он сам не захочет сесть за книги и прилежно учиться. Но деньги позволяют получить один из видов образования — это образование, которое дают путешествия.

И после того как Морита пожил в США, а его дети отучились в разных странах мира:

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

Спасибо akve за такой подарок на ДР!

Сильнодействующее средство - компактные спецназ-команды

Пожалуй самый известный мне мощный ход в стартап-проектах - “компактные спецназ-команды”. Компактные = не больше 10 человек. Спецназ - где каждый участник десятерых стоит. Примеры: серверная команда youtube из 9 человек (на момент покупки гуглом), reddit (3 человека), github (их было вначале от 2 до 4 человек), stackoverflow (всех победили втроем, после получения инвестиций их стало уже 27), friendfeed (начали вчетвером, а на момент покупки фейсбуком их было 12).

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

Скорость

“Три мушкетера”, дуэль д’Артаньяна и де Жюссака

Эта борьба в конце концов вывела де Жюссака из терпения. Разъяренный тем, что ему не удается справиться с противником, которого он счел юнцом, он разгорячился и начал делать ошибку за ошибкой. Д’Артаньян, не имевший большого опыта, но зато помнивший теорию, удвоил быстроту движений. Жюссак, решив покончить с ним, сделал резкий выпад, стремясь нанести противнику страшный удар. Но д’Артаньян ловко отпарировал, и, в то время как Жюссак выпрямлялся, гасконец, словно змея, ускользнул из-под его руки и насквозь пронзил его своей шпагой. Жюссак рухнул как подкошенный.

Одним из осознанных направлений моего развития, как разработчика, я вижу скорость. Делать за месяц то, что раньше делал за год. В этом направлении я вижу два главных аспекта: развитие мышления и овладение наиболее эффективными инструментами.

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

Переехали в Киев

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

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

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

А про Киев подробнее я напишу попозже, пока я слишком влюблен в него, чтобы быть хоть немного объективным :) Киевляне, привет!

Умными рождаются?

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

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

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

Точка входа в юнит-тесты

Если вы давно хотели попробовать писать юнит-тесты для своих проектов, но не могли пересилить лень, стремление к простоте или что-то еще, то у меня есть совет для вас. Попробуйте написать юнит-тесты для API - тех вьюх, которые не открыть в браузере, не протестить глазами и мышкой. Особенно это касается API, которое вызывается из сторонней системы (например из вашего приложения ВКонтакте). Локальные тесты позволят быстро выявить кучу ошибок, снизят время тестирования в сложной внешней системе, а также (о радость для искателей простоты и неизбыточности!) - будут логичными и простыми.

Я первый раз по-настоящему оценил юнит-тесты, когда писать веб-сервис для банка. Сейчас пишу приложение для ВКонтакте, и сначала забыл про тесты, в результате много раз обновлял приложение, много всего выводил в консоль. А как напишешь новый код - опять что-то не работает! И не посмотреть красивое сообщение об ошибке, которое рисует django, когда тестируешь странички веб-сайта! Написал тесты, всего 21 строчку, и процесс пошел в разы быстрее.

Махатма Ганди о веб-сервисах

Цитата из “Автобиографии” Ганди:

“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 all other pleasures and possessions pale into nothingness before service which is rendered in a spirit of joy.”

Несмотря на то, что написано в доинтернетовскую эпоху, применимо и к веб-сервисам. Радует душу? Спрограммируешь и люди будут рады. Не радует? Шансы невелики.

Слабые места Javascript

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

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

  2. итераторы по массивам довольно неудобные, но это решается библиотеками

  3. очень странные соглашения по работе оператора ==

  4. местами черезчур агрессивное приведение типов друг в друга, типа превращений строки в число и обратно

  5. конечная запятая в словаре или массиве сводит с ума некоторые браузеры

  6. необязательная “;” в конце строки

А плюсы огромные: компактное мощное ядро языка, V8, Canvas и т.д.

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

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

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

Пока компилится 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

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

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