Интервью с Дмитрием aka wyldrodney о SimpleReality CRM и не только
ноября 19, 2011 | Published in Интервью | 2 Comments
Сегодня в виртуальной студии RubyDev гость — Дмитрий aka wyldrodney. Дмитрий — администратор и разработчик на платформе Ruby on Rails и сегодня мы поговорим о разрабатываемой им CRM системе.
Дмитрий, представься пожалуйста читателям и расскажи немного о себе, своих хобби, интересах и т.д.
Привет! Знаешь, сейчас эра Интернета, всё что мы делаем для сети, отражается в первую очередь на сети, и потому мало кому будет действительно интересно кто я. Но друзья зовут по имени — Дима, хотя обычно предпочитаю ник wyldrodney :)
Если я не занимаюсь кодом или чтением книг по разработке, то я либо сплю, любо бегаю за девчонками, либо катаюсь на сноуборде. В этом году снег выпал на месяц позже обычного, потому потому кода вышло немного больше, чем я ожидал.
Последний год я трачу, наверное, 90% свободного времени на свои проекты. Первый из них уже закончен, он ней я и расскажу.
В своем сообщении ты упомянул о том, что разрабатываешь CRM систему. Расскажи пожалуйста о том, что такое CRM и чем твое решение отличается от существующих.
CRM, если верить Википедии, это инструмент для организации связей с клиентами. А если ближе к делу, то в моём случае это программа для риэлтерских компаний, позволяющая хранить запросы и извлекать данные из базы. Звучит как «это обычная морда к БД». Однако, это не так.
Огромную часть кода занимает интерфейс, он автоматически подстраивается под разные типы вводимой информации, по сути имитируя типовые ситуации (всего шаблонов несколько десятков и я, честно, просто не считал). Это, конечно, можно делать и на бумаге, но такой подход заметно экономит пользователю время. И, самое важное, даёт возможность за считанные секунды, даже во время телефонного разговора, извлечь подходящие под критерии запроса объекты. Что с обычными средствами вроде блокнота или Excel заняло бы кучу времени. Реализован многоуровневый поиск по базе: мы можем найти клиента, получить список его запросов, и через одно нажатие кнопки получить список предложений, которые его заинтересуют.
Эта программа крайне проста. При том обладает гибкостью, которой я не видел ни в одном из аналогов (ну и страшный же у них GUI!).
Внешний вид SimpleRealite CRM (картинка кликабельна)
Как вообще пришла идея разработать CRM для риэлтерского дела?
Какое-то время в писал софт для риэлторов, но в итоге мне сильно это разонравилось: платят мало, техзадания настолько расплывчаты, что говорить о каких-то сроках очень сложно. Так я решил воспользоваться тем, что знаю о продажах и написать . В худшем случае это была бы ещё одна строчка в резюме, в лучшем же — деньги с продаж. Последнее меня не особо интересовало (я просто ненавижу продажи), и я отложил это до тех пор, пока не закончу другой срочный и намного более интересный проект.
Дима, расскажи пожалуйста когда планируешь заняться продажам, какую модель продаж выберешь и что планируешь добавить в ближайшее время?
Время на то, чтобы заниматься продажами появилось совсем недавно. Наверное, со мной многие согласятся: писать документацию мы обычно не любим, а рассказывать людям с иным типом мышления о том, чем хороша программа — это просто смерть! :) Вот так я оказался перед тем фактом, что мне нужен продажник. В данный момент я в поисках того, кто захочет написать пресс-релиз, поможет с формированием цен, того, что станет списываться с клиентами и отвечать не все их вопросы.
Думается, в любом подобном проекте кроме привычных нам проектирования и создания есть последняя стадия — продвижение. Род деятельности здесь другой и лучше это передавать людям, которые на этом специализируются. Потому что без этого коммерческий проект попросту умрёт.
Расскажи почему в качестве фреймворка был выбран Ruby on Rails?
Rails просто потому что это быстро, гибко и всегда оставляет приятные ощущения. В любой момент мы можем переделать тех.задание на две трети и нам нужно будет переписывать код. Однако, здесь, в Rails, система соглашений ограничивает нас в написании не модульного кода, она просто толкает к тому, чтобы каждый контроллер и каждая модель занимались исключительно своим делом. И это помогает сэкономить время и нервы когда нам нужно переписать большой кусок кода.
Ты упоминал о том, что в разрабатываемой CRM используется большой объем JavaScript и большое количество взаимодействий с сервером по средством AJAX. Расскажи на сколько Rails способствует, или на сколько Rails удобен, или выгоден для разработки таких динамических приложений с большим объемом client-side кода?
Идея была в том, чтобы к приложению можно было получить доступ с любой машины, подключённой к сети. Этого нет у конкурентов. Ну и сделать программу настолько интерактивной, насколько это возможно. И это удалось.
Разница в отзывчивости между 10Кб/с (GPRS) и 2Мб/с каналом почти незаметна — траффика очень мало. Весь интерфейс: подгрузка, реакция на события и т. д. написаны на jQuery. Знаю что библиотека жирная, но мне жутко нравится jQuery-UI, она своей унификацией интерфейсов напоминает мне Ruby :)
Примерно на каждый второй клик оказалось нужно получать данные. И тут Rails предоставляет прекрасный инструмент — JSON, он очень прост и при этом достаточно гибок.
Для простой выборки телефонных номеров, к примеру, достаточно одной строки вроде render :json => @my_var чтобы отправить массив данных клиентов. Не намного сложнее чем рендер партиалов на серверной стороне, не правда ли?
Для чего-то посложнее, вроде толстых отчётов с данными из нескольких таблиц, используется тот же JSON, а генерация данных выносится из контроллера.
Какие библиотеки/ gem’ы используешь в своем проекте, почему из альтернатив выбор пал именно на них?
Разве что jQuery, так как это единственное что я знал на тот момент. Всё остальное написано с нуля. В какой-то момент хотелось взять will_paginate, но после чтения доков оказалось что быстрее и красивее будет реализовать свой паджинатор: нужна была разная реакция на несколько условий, что само по себе заняло половину кода, плюс, начиная, я не до конца представлял как это будет работать потому решил обойтись своим простым кодом вместо написания обёрток для will_paginate,
Возможно, я слишком склонен писать велосипеды, один мой друг так постоянно и говорит, но я думаю что лучше потратить час на свою реализацию, которую ты сможешь поправить, чем час на написание обёрток для чужой реализации, с которой, если не повезёт, придётся повозиться.
В процессе разработки были ли тобой разработаны какие-нибудь собственные gem’ы и планируешь ли ты превратить некоторые куски своего проекта в gem’ы которыми поделишься с сообществом?
Нет, ничего такого. Код чрезвычайно примитивен, и ничего что можно использовать где-то ещё в коде нет.
Дима, а все эти новомодные штуки типа SASS/SCSS, HAML, CoffeeScript и т.д. не обошли ли тебя стороной? Если нет — поделись своими впечатлениями от их использования.
Про SASS могу сказать только одно — он чудо — это как взять простой CSS и добавить в него наследование и функции. Он экономит время при разработке: у нас больше нет спагетти из стилей, есть чёткая структура, сокращающая число строк в 2-3 раза. Ещё одна приятная вещь в нём — это сжатие передаваемого файла, конечно, можно было сделать это в Rails 3.0 и более ранних, но теперь это почти стандартная возможность и я надеюсь что уже через год в туториалах будут упоминать её, так как она действительно увеличивает скорость загрузки.
Я не любитель HAML, он слишком, на мой взгляд, абстрагирован от того кода, который будет на конечной странице. И дело тут по большей части в AJAX’е — когда мы формируем страницу на клиентской стороне, мы используем JS + HTML, когда же мы формируем страницу на сервере — это HAML. Тут возникает просто мешанина.
Но с другой стороны, можно обойтись без этого и наслаждаться чётко структурированным HAML-кодом :)
Расскажи о своем рабочем месте. Какое железо и ПО используешь?
У меня 19-дюймовый монитор, 2 гигабайта памяти и процессор, никогда не выходящий из пониженных частот. В разработке нужны разве что хороший монитор и клавиатура. У нас ведь не Java.
Насчет ПО, я уже говорил что люблю минимализм? :D Vim, только он. Его хватает на одновременно редактирование 2-3 файлов, он очень гибок в настройке, и ещё более хорош в непосредственной работе с текстами. Для Ruby есть подсветка кода, авто расстановка отступов, подсветка скобочек… по сути это всё что мне нужно. Кто-то скажет про авто дополнение, но я скажу что за час редко получается выдать больше 40 хороших строк.
В качестве ОС в повседневной работе я использую Ubuntu. Некоторое время это ОС казалась лучшей в своём роде: достаточная стабильность, нужные пакеты, красивое оформление (никто не любит gnome-look.org!)… но в этом году с ней что-то не то, я и намереваюсь переехать на Дебиан. Он уже несколько лет исправно работает на боевых серверах и как по мне (я не самый опытный админ, если честно), это лучшее решение для тех, кому нужен стабильный софт, регулярные обновления и простота конфигурации.
Проповедуешь ли Agile — техники, например TDD или BDD и что используешь для тестирования?
Увы, у меня всегда хорошо получалось ломать вещи, начиная с первой работы админом. Обычно провожу только стресс-тестирование, функционал же тестировать предпочитаю доверять живым людям. Багов к бетам почти не остаётся, я довольно щепетильно отношусь к проработке деталей на бумаге. Да-да, я их тех мамонтов, кто рисует на бумаге юз-кейсы :) Тут как-то не получается накосячить, особенно если день за днём делаешь одно и то же.
Как ты пришел к выбору Ruby и Rails, тернист ли был путь? Какие языки и фреймворки использовал до Ruby/Rails и какие комбинируешь с работой на Ruby/Rails, кроме JavaScript?
Совсем нет. Я спросил в Google какой язык лучше всего подходит для быстрой разработки софта. Он выдал Ruby и оказалось что мне просто повезло. И пока что на хлеб с маслом хватает. Как в той штуке про риск получить солнечный удар, лёжа на пляже…
Выходит Google хороший советчик. Скажи пожалуйста, как относишься к нововведениям в Rails 3.1 и запланированным в Ruby 2.0?
Да, Google отлично подходит для поиска технической информации (для всего остального я использую Bing :)).
Новые акцессоры, Basic HTTP Auth, Assets, тюнинг ActiveRecord, новые хелперы вообще — всё это очень классно, иногда даже не понимаешь как кто-то может обходиться без всего этого — большей части оных можно без труда найти применение в любых проектах, и это облегчит жизнь. Команда Rails постаралась на славу!
Что касаемо Ruby 2.0, то тут я могу сказать только одно: сначала они определятся с планами, потому напишут код, а только через пару лет мы сможем попробовать это и понять стало ли значительно лучше. Но ведь… Ruby и так лучший язык в мире? :)
Поделись пожалуйста какими-нибудь своими успешными практиками и секретами разработки.
Рассказать как заставить себя работать по 15 часов каждые сутки в году — это плохая идея :) Но если честно, я просто хорошо замотивирован. Тут либо работаешь и получаешь то, что хочешь, либо мучаешься от скуки и только.
Что хочешь пожелать читателям RubDev и новичкам в Ruby/Rails и вообще новичкам в программировании?
Часто, в «запарке», люди теряют способность смотреть на проблему с разных сторон и искать решение. Помогает встать, пойти умыться холодной водой — отвлечь себя от происходящего на 5-10 минут. Мне это помогает привести мысли в порядок. А главное тут — простое упорство. И удача.
Ссылки:
ноября 25, 2011 at 05:46 (#)
Простите, но пассаж про страшный GUI при взгляде на скриншот Вашей CRM вызывает недоумение. Может, есть смысл перед подключением продажника привлечь еще и дизайнера? Красивей продукт продать проще.
ноября 27, 2011 at 21:23 (#)
ATimofeev, с одной стороны хорошо, что все на одной странице, но я бы сделал все это в виде мастера с 3-4 переходами, тогда его можно было бы на мобильные устройства портировать, а в данном формате только на больших разришениях можно смотреть, но это только, т.с. бета, Дмитрий его однозначно еще допиливать будет.