Интервью с Александром Савиным об 111items.com и не только
августа 29, 2011 | Published in Интервью | 4 Comments
Доброго времени суток ув. читатели RubyDev!
Сегодня в моей виртуальной студии веб-разработчик Александр Савин. Александр сегодня расскажет нам о себе и об интересном проекте, аналогов которого я не встречал — .
- Александр, здравствуй! Представься пожалуйста читателям RubyDev.ru.
Меня зовут Александр Савин, я живу в Эспоо, Финляндия. В настоящий момент работаю в небольшой компании Boogie Software. Еще увлекаюсь стереофотографией и парашютами.
- В одном из комментариев на RubyDev ты упоминал о том, что работаешь над сервисом , расскажи пожалуйста что это и кому будет интересно. Как вообще появилась идея разработки такого сервиса?
, или 111 штук появились из идеи одного известного на просторах сети минималиста. Он пытался свести количество своих личных вещей к списку с менее чем 100 штук. К сожалению 100items.com был уже занят, поэтому я остановился на ближайшем красивом числе.
Идея в следующем. Когда покупаешь новую кофеварку, обычно к ней в нагрузку прилагается чек, серийный номер и гарантия. Чек бумажный, остальные данные тоже имеют тенденцию теряться в складках вселенной. Так вот, эти данные можно вбить на 111 штук. Чек можно сфоткать, или просто закачать его в виде pdf, если кофеварка была куплена через интернет. Также можно забить серийный номер и контакты поддержки. Еще можно закачать фотку самой кофеварки.
Помимо того что все это будет храниться для себя, штуки можно расшарить в публичной френдленте. Друзья смогут увидеть вашу новую кофеварку и оставить релевантный коммент. Или можно ничего не шарить — тогда штуки останутся приватными.
Само собой, даже когда шаришь что-то друзьям, часть информации о штуки желательно оставить при себе. Например, серийный номер. Это тоже предусмотрено — у каждой штуки есть поле с секретной информацией, которая всегда останется приватной.
Система друзей сейчас сделана предельно просто и безопасно — через Facebook Graph. Как только ваш фейсбук френд начнет пользоваться 111 штуками, его публичные штуки автоматически появятся в вашей френдленте. Фактически, посторонний человек не сможет просматривать даже ваши публичные штуки. По-крайней мере пока.
Изначально мы делали этот проект на пару с другом. Он делал айфон клиент, я делал приложение на рельсах. Затевалось это как самообразовательный проект. Он учился программить под iOS, я учил рельсы, CSS, JS, и весь остальной зверинец. Специально для iOS клиента я даже сделал небольшой OАuth интерфейс, сначала на XML, потом на JSON. В какой-то момент другу это надоело и его клиент так и остался без поддержки синхронизации с моим сервисом. Тем не менее я собираюсь закончить и опубликовать API. Хотя бы в предельно простой, работающей реализации.
Все это разрабатывается силами одного девелопера вечерами и выходными.
- Почему регистрация только через facebook, и почему такая ориентация на запад? Кстати, что используешь для аутентификации через facebook и планируешь ли добавить другие способы аутентификации, например аутентификацию через другие соц. сети?
В первой альфа версии была локальная регистрация через devise. Ближе к бете я задумался о друзьях и социальных фишках. Сразу же всплыло несколько проблем. Во-первых система друзей подразумевает что надо реализовать сразу тучу фишек. Нужно как-то френдить людей, одобрять френд реквесты, уметь разфрендить и забанить отдельных личностей. Нужно уметь искать потенциальных друзей, и вообще как-то их искать. При всем этом все эти фишки не воспринимаются юзерами как что-то реально прикольное и приносящее пользу. Более того, необходимость в очередной раз звать всех своих друзей на отдельный сервис, френдить друг друга воспринимается чуть ли не как оскорбление.
При всем этом существует Facebook Graph. Он отлично задокументирован, здорово реализован, под него существуют готовые gem’ы. Он берет на себя всю заботу о друзьях и избавляет от головной боли. Мой принцип разработки — сделать что-то работающее как можно быстрее. Facebook Graph как нельзя лучше подходил для этого. Поэтому был подключен gem Koala, через него наштамповано несколько тестовых юзеров (приятный сюрприз в реализации FB Graph), и вскоре на 111 штуках появилась работающая френд лента.
В перспективе, конечно же, было бы здорово подключить несколько альтернативных способов логина. FB остается самой популярной сетью в мире, но для России было бы здорово подключить вконтакт. Заодно изучить как у них обстоят дела с API.
- Я так понимаю, проект находится еще в пубертатном состоянии. Когда планируется релиз готовый к использованию?
В настоящий момент проект находится на стадии активно допиливаемой беты. Иногда за один вечер случается по три деплоя. У меня есть направление, в котором я все это двигаю. В остальном конкретных дедлайнов нет. Так как сам активно пользуюсь сервисом, то довольно ясно представляю чего не хватает и что работает не так. Вдобавок к этому кнопочка Quick feedback доступна для всех пользователей сервиса. Некоторые пользователи на самом деле ей пользуются.
Так как у меня нет сотен тысяч пользователей, стресса что-то менять тоже меньше. Думаю, пользователи сами понимают, что сервис активно развивается. Конечно, все основные фишки будут сохраняться. Плюс все то что пользователь забьет в систему также тщательно оберегается. Даже думаю сделать фишку одним кликом экспортить все свои данные из системы в какой-нибудь удобный формат.
- Что планируешь добавить/исправить в проекте в ближайшее время?
Сейчас доделываю основные штуки из разряда «а что, это еще не работает?». Делаю более удобную систему уведомлений если кто-то комментит на чьих-то штуках. Хочу сделать удобную выделенную страничку для каждой штуки, которую было бы удобно шарить на внешних сайтах (по желанию пользователя). Есть мысли насчет внедрения игровой механики и превращения всего этого в сервис вроде Foursquare. Только в мире вещей.
- Очень важно иметь контакт с пользователем, чтобы быстро реагировать на жалобы и предложения. Расскажи пожалуйста как налажена связь с пользователями на ?
Связь с пользователями налажена в виде большой и дружелюбной кнопки Quick feedback. Послав с ее помощью гневный коммент пользователь рискует получить ответ от меня на свой емайл. Пока вроде хватает. Да, еще есть твиттер канал (#111items), и страничка на фейсбуке.
- Весьма интересно узнать о процессе разработки 111items.com, расскажи как начинал, как пришел к тому, что сейчас мы видим. Как происходил процесс прототипирования, использовал специальное ПО или рисовал что и как должно выглядеть на бумаге?
Начиналось все с простого листа вещей. Лист был приватным. Можно было добавлять новые штуки. Еще через jQuery UI все штуки можно было перетаскивать и менять местами. Только новый порядок не запоминался.
Процесс у меня довольно прямолинейный. Придумывается прикольная фишка. Потом я пытаюсь ее оценить по сложности и времени. Если она укладывается в разумные сроки, тогда программлю и запускаю. Если фишка серьезная и касается переделывания UI или структурных изменений в базе данных, тогда начинаю рисовать все на бумаге. Это здорово помогает.
Дальше почеркушек на бумаге не захожу. Стараюсь выдерживать баланс между реальным миром и «проектированием ради проектирования». Опыт показывает что можно напланировать все что угодно, и точно также потом выбросить просто потому что изменился главный концепт приложения. Или потому что людям не нравится.
- Расскажи пожалуйста об ошибках, которые допускал при разработке 111items.com, да и вообще при разработке, как справлялся с ними?
Из-за своего крайне скудного опыта в разработке подобных социальных сервисов, периодически проскальзывают вещи настолько очевидные, что потом остается только стучать себя по голове и поспешно фиксить напрограмленное.
Один раз я переделывал систему букмарков для штук. Каждая штука может принадлежать какому-то букмарку. Первая версия этой фишки была очень статичной, у букмарков не было никаких атрибутов и вообще они не существовали как отдельная модель. С необходимостью апгрейдить букмарки я столкнулся в тот момент, когда решил быстренько заимплементить их названия. Там сейчас 5 статичных букмарков разных цветов, и первоначально у них не было никаких подписей. «Ага», подумал я. «Раз букмарк сможет иметь свое название, то имеет смысл его выделить в отдельную модель. А там ему можно добавить позицию, цвет и всякие другие плюшки». Сказано-сделано. Завел новую модель букмарков, приделал зависимость штук к букмаркам. Тут столкнулся с новой задачей — простой миграции базы данных не хватало, надо было апгрейдить уже существующие записи штук у каждого юзера. Для каждого юзера надо было создать по 5 уникальных букмарка, и все существующие штуки приписать уже к ним. Пара постов на stackoverflow, и у меня на руках скрипт, который неплохо справился с задачей. Все работает, ура, можно деплоить.
Все и работало, до тех пор пока один из моих знакомых не попытался зарегистриться как новый юзер. Система жалко корчилась и не пускала его. Оказалось что кейс с новыми юзерами я хотя и вспомнил, но совершенно забыл доделать его до конца. Для каждого нового юзера система создавала 5 букмарков и одну дефолтную штуку. В ней-то и была проблема. Штука не использовала id новых букмарков.
Тестинг у меня как бы отсутствует. Чем больше становится система, тем больше потенциал для подобного. Тут, конечно, тру руби разработчик скажет про автоматизированное тестирование. Но с моими ресурсами я лучше буду девелопить новые фишки. Если что, кто-нибудь пожалуется :)
- Если не секрет, расскажи, как планируешь монетизировать 111items.com?
Пока это больше смутные идеи. Как говорил один знакомый стартапщик, сначала надо набрать аудиторию. В том виде в каком оно сейчас монетизировать довольно сложно. Но у меня есть идеи про разные фишки. Например, 111 штук могли бы служить каналом фидбека производителям товаров. Ты покупаешь кофеварку, она ломается. Ты комментируешь об этом в 111 штуках. Производитель кофеварки оперативно видит, что об этом закомментило туча народа из определенной страны. Фиксит баг. Все счастливы.
- Читателей RubyDev, как разработчиков очень интересует техническая сторона 111items.com, расскажи пожалуйста что используется (версия ruby, rails, гемы, база данных, серверное железо, ОС, и т.д.).
Рельсы 3.0, Ruby 1.9.2, MySQL, Passenger, Nginx. Все это хостится на VPS машине в Лондоне с Ubuntu 10.04 LTS на борту. Был очень познавательный опыт когда все это настраивал. Деплой через капистрано. Одно время был большой соблазн сделать все на Heroku. Очень здорово у них все, хотя и дороже.
Из значимых gem’ов — Koala, Devise, Simple Form, Paperclip. Набор из OAuth gem’ов для реализации API.
Есть соблазн мигрировать на рельсы 3.1. Не придется лазить в public/stylesheets за css файлами. Да и сами css’ки можно будет мигрировать на sass. То как в данный момент выглядит моя главная css’ка лучше вообще никому не видеть.
- Почему выбрал именно Ruby и Rails из PHP, Python, Perl и т.д. и множества фреймворков на этих языках? Вообще как ощущения от работы с Ruby и Rails? Программировал ли в прошлом, какие языки/платформы использовал?
До последнего года практически не занимался кодированием под веб. В прошлом у меня лет 7 работы в платформе Nokia Series 60, это сплошной Symbian C++. Последний год, правда, мы перешли на Qt + QML. Когда-то немножко пробовал Python и Perl.
Ruby и Rails подкупили своей простотой и скоростью разработки. Еще логичностью модулей и читаемостью кода. Настолько человеческого кода как в Руби я не видел еще нигде. Python когда-то произвел похожее впечатление — можно писать код и не бояться ударов тока из клавиатуры за неочищенный стек )) Рельсы — вполне полноценный фреймворк, с кучей энтузиастов, инструментов и туториалсов. Сайт railscasts.com был последней каплей после которой я окончательно принял религию Руби.
Да, и еще видеокурс Rails for Zombies. Просто улет. Говорят, Envy Labs готовят продолжение.
Ощущения хорошие. По мере того как приложение пухнет, все чаще задумываюсь о более правильном использовании хелперов, контроллеров и моделей. Рельсы все это предоставляют, проблема скорее в отдельно взятом неопытном девелопере.
- В своем блоге я люблю иногда опускать PHP. Расскажи пожалуйста каково твое мнение о PHP, может ли Ruby стать таким же популярным и занять нишу PHP — массово используемые CMS, движки форумов и социальных сетей, почему?
Боюсь у меня не хватает опыта с самим PHP чтобы иметь какое-то мнение. Сорри.
- Часто при разработке новых проектов рождаются новые технологии, гемы, библиотеки, появилось ли что-то новенькое при разработке 111items.com?
Пока нет.
- Александр, часто при разработке более-меннее сложных проектов разработчик сталкивается с некоторыми проблемами решение которых выходит за банальное прочтение документации, сталкивался ли ты с такими проблемами, расскажи как ты их решил?
Надо отдать должное, рельсы отлично задокументированы и добавлены множеством постов от разработчиков. Каждый раз когда я заходил в тупик и постил вопрос на StackOverflow, ответы и наводящие на них хинты появлялись буквально в течение нескольких часов. Некоторые вещи требовали более вдумчивого поиска. Пожалуй, пока что самой комплексной задачей было добавление OAuth интерфейса с раздачей ключей для программ-клиентов и авторизированием этих клиентов пользователем. С нуля писать ничего не пришлось, но чтобы заставить работать все OAuth gem’ы вместе пришлось немного попотеть.
- Несмотря на молодость 111items.com, производилась ли какая-нибудь оптимизация производительности? В чем она заключалась, и какие инструменты/решения ты использовал?
Пока еще нет, но скорее всего придется. Собираюсь прикрутить нормальный кэшинг к запросам в рельсах.
- В начеле разговора ты упомянул о том, что работаешь в Финландии. Очень интересно, как это жить и работать за границей. Расскажи пожалуйста как тебе пришла идея мигрировать в Финляндию, почему именно в Финляндию? На родину не тянет?
Я переехал в Финляндию в возрасте 15 лет, на учебу по обмену. Сначала проф училище, потом институт, летняя практика, работа. Так и прижился. Сейчас мне 28, и скоро будет момент когда половина жизни прожита тут. По-началу страна довольно чужая, со странным языком и характером. Первое время мы жили дружной семьей русскоязычных студентов в общежитии. Активно осуждали окружающий мир, людей, обычаи, язык. После второго курса универа у меня была летняя практика на заводе Фортум. Там я оказался полностью окружен финско-шведскими коллегами, с которыми пришлось общаться по-фински. С той поры разделение на «мы» и «они» как-то прошло в моей голове. Появилось много друзей. Основательно свой уровень местного языка я подтянул в парашютном клубе. Там от понимания слов, можно сказать, зависела твоя жизнь. Хотя нет, если не сдашь письменный экзамен в самолет все-равно бы не пустили.
После Фортума и универа я попал в Нокию. В большой по меркам страны город Тампере. В 2003-м только-только начиналась платформа Symbian Series 60. Первый телефон с камерой, многозадачность. Первые смартфоны Было очень круто. В Нокии работать неплохо, но учитывая масштабы компании и проектов довольно часто ты представляешь из себя микроскопический винтик на обшивке огромного Шаттла. Кому-то это нравится, кому-то не очень. Конечно, всегда есть principal architects, lead developers. Их решения весят гораздо больше. Но это был не мой случай. Хотя, даже если ты самый крутой архитектор к мнению которого все прислушиваются, это все еще не гарантирует того что твой проект не прикроют сверху, просто потому что он не укладывается в глобальную стратегию компании.
Отработав то ли 7, то ли 8 лет на Нокию в конце прошлого года я решил двигаться дальше. Логичным шагом была столица. Сюда-то я и переехал из Тампере. Сейчас работаю архитектором-консультантом в небольшой компании Boogie Software. Цены в столице выше, жизнь бурлит. В эту субботу приезжает Далай Лама.
- Какие планы на будущее, планируешь изучать какие-то новые технологии в рамках Ruby или что-то другое? Собираешься ли создавать какие-нибудь новые собственные проекты?
111 штук это такой проект, на котором я постоянно чему-то учусь. По мере его роста постоянно всплывают всякие штуки, требующие более углубленного подхода. Тогда раскапываются книжки, туториалы. В ближайшем будущем мне грозит оптимизация работы с базой данных, нормальный кешинг. Плюс более тесная интеграция с фейсбуком.
Насчет новых проектов. Некоторое время у меня бродит мысль сделать frustration wall. Такое место, где народ мог бы постить вещи, которые их.. мм.. огорчают в жизни. Такая стена, куда можно быстро чего-то написать. Каждый день в полночь стена бы самоочищалась, а юзеры, оставившие свой емайл получали бы сообщение — «All your frustrations are gone now».
Домен я уже забил.
- Традиционный вопрос для интервью, что можешь пожелать начинающим Ruby/Rails разработчикам?
О, если кто-то думает не попробовать ли Ruby/Rails — смело пробуйте. Настолько дружелюбной экосистемы вокруг этих технологий вы вряд ли найдете где-то еще. Да, все это опен соурс, и нет больших мегакорпораций с суппортом. Зато есть множество живых людей, которые с радостью вам помогут если вы зайдете в тупик. Рельсы уже прошли несколько инкарнаций, каждый раз шагая в ногу с прогрессом. Версия 3.1 даже использует SASS и CoffeeScript по умолчанию. Честно говоря, я про них даже не слышал до этого.
Рельсы невероятно популярны среди стартапов. Даже тут, в Хельсинки, постоянно кого-то набирают. На них можно в разумные сроки сваять что-то работающее, показать живым юзерам и получить от них настоящее «фу». А получить «фу» вовремя невероятно полезно для любого успешного стартапа.
Итоги
Как мне кажется, интервью получилось очень интересным и содержательным, Александр оказался очень сговорчивым и интересным собеседником, по этому большое ему спасибо за потраченное время. Хочу также пожелать Александру удачи с 111items.com, и другими, будущими проектами.
Rails оказывается очень удачной платформай для разработки различных сервисов и не только сервисов, но и того, что называют контентными сайтами. Из интервью вы должны были заметить какие хорошие эмоции Rails вызывает у программистов, которые на него перешли, в частности у Александра Савина. Надеюсь это и следующие интервью с Ruby/Rails разработчиками только убедят вас в том, что следует переходить на Ruby и Rails.
Если вы любите порядок и следите за состоянием своего кошелька, то проект — то, что вам нужно. А еще вы можете хвастаться своими приобритениями перед друзьями =)
P.S. С момента публикации вы можете пару дней позадавать вопросы Александру в комментариях. Гарантия того, что Александр ответит на глупый вопрос или вопросы заданные после 2-х дневного периода отсутствует.
P.P.S. Что за интервью и как принять участие можно узнать здесь — http://rubydev.ru/2011/08/besplatnaya-reklama-na-rubydev-interesnyx-proektov-developerov-i-dizajnerov/, там же можно узнать о бесплатной рекламе на RubyDev своих услуг, проектов и т.д. RubyDev рад сотрудничать со всеми людьми на этой планете ибо все мы братья.
августа 30, 2011 at 13:31 (#)
Александ, а о том, что не юзаете RSpec не жалеете?
августа 30, 2011 at 17:32 (#)
Вполне возможно что пожалею в будущем. Но у меня правда выбор — писать тесты или новые фишки. На то и другое не хватает ресурсов.
августа 31, 2011 at 11:18 (#)
Спасибо за интересное интервью! Александр, удачи Вам с 111Items.com.
августа 31, 2011 at 15:40 (#)
Спасибо!