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

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

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

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

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

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

Relational Solution

Document Store Solution

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

Источник - http://codeascraft.etsy.com/2010/05/19/mongodb-at-etsy/

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

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

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

Akismet to Recaptcha

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

Upd. Комментарии уже давно переехали на Disqus и полет нормальный.

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

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

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

В случае статического сайта каждая страница - это один html файл. Это очень удобно. Хочешь поправить главную страницу - открывай start.html, профиль - profile.html и т.д. Поэтому всё (или почти всё), что относится к текущей странице, должно быть в одном файле шаблона. Даже javascript код лучше не выносить в отдельный файл, если он относится к дизайну-юзабилити страницы (а не к супер-сложной технологии, которую понимают только программисты). Исключения - методы или свойства моделей, возвращающие часто встречающиеся элементы (например, у меня в профайле есть свойство profile_link, которое собирает полное имя из first_name, last_name и оборачивает его в <a></a>), удобные фильтры и повторяющиеся виджеты (в виде отдельных файлов, добавляемых через {% include %} или inclusion tags - последние удобны тем, что их можно параметризовать).

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

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

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

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

Я никогда еще не работал с такими дизайнерами. Возможно ли это в xUSSR? Получалось ли у вас работать таким образом? Или дизайнер рисует красивый PSD, его отдают верстальщику, а программисты потом пытаются полученные html/css встроить в приложение? Или все-таки существую дизайнеры, которые так же плотно работают над проектом, как программисты?

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, которое решает эту задачу следующим образом:

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

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