А. Аксенов "Как мы разрабатываем Сфинкс", dump-2014
DESCRIPTION
TRANSCRIPT
Как мы разрабатываем Sphinx
Аксенов Андрей
Sphinx Technologies Inc
Про доклад
• Nsk12…Ekb14• Что? Сфинкс (сервер такой)• Кто? Команда!• Как? Удаленно!• Что хорошо? Что плохо?• Выводов не будет!
Структура компании
• Консультанты, 2• Разработка, 6 (*)
• Консультации тоже• (*) Условно включая меня…
• Продажи, 2• Инфра, 2• – А чо так мало? – А вот!!!
Мы говорим Ленин...
• Команда разработчиков
Мы говорим Ленин...
• Команда разработчиков• Маленькая, очень• Удаленная, полностью• Звездочка, исторически• Диктатура, вынужденно
• Ничто не религия – так сложилось• Работа по домам – и плюсы и
минусы
Вольно пасущиеся коты
• Внешняя часть• Mantis, форум
• Внутренняя часть• IRC, Skype, email, телефон• Eventum, Wiki, Mantis• Google Docs
Кафка. «Процесс».- Холст, сыр, масло
• Как устроен процесс “про код”?• Какие именно Мега Практики
есть?• Каких нету, каких зря, каких
спецом?• Как и почему именно так
получилось?• Полтора выстраданных опытом
фокуса
“Мы е…и все на свете”
• Waterfall ?• Agile ?• SCRUM ?• Kanban ?• Six Sigma ?
. . .
“Мы е…и все на свете”
• Waterfall ?• Agile ?• SCRUM ?• Kanban ?• Six Sigma ?
. . .• X3M !
“Do the reasonable thing”
• По-русски, возможно, “включи мозг”
• Раскидываем баги, фичи, редкий R&D
• Мини-лекции и “атаки” по потребности
• Отчитываемся (еженедельный звонок)
• Итерации типично короткие• Результаты типично прозрачные• Ничего особенного, как и обещал
Зоопарк VCS
• Публичный svn (R/O зеркало, Gcode)
• Был внутренний hg• Стал внутренний git-svn
• Для длинных веток• Для секретных веток• Для промежуточных патчей
• Когда-нибудь будет чисто Github
Зоопарк сред разработки
• Каждый строчит, как он хочет• gcc + emacs + …, MSVC
2008/2012• MSVS 2005, Xcode, Codeblocks
• Довольно кроссплатформенно• Платформо-зависимого кода...
МАЛО
Про кодстиль
for ( int i=0; i<m_tSchema.GetAttrsCount(); i++ )
{
const CSphColumnInfo & tCol = m_tSchema.GetAttr(i);
ESphAttr eAttrType = tCol.m_eAttrType;
if ( eAttrType==SPH_ATTR_UINT64SET )
{
if ( tCol.m_eSrc==SPH_ATTRSRC_FIELD )
bHaveFieldMVAs = true;
dMvaIndexes.Add ( i );
dMvaLocators.Add ( tCol.m_tLocator );
Про кодстиль
• Своеобразный• Пробелы• Мини-венгерская нотация• Смесь систем именования
типов• Но оправданный!
• Мгновенный контекст• Читаемость без подсветки и в
целом
Про кодстиль
• Форсирую стиль• Форсирую компактность
• Политика?• Религия?• Прагматика!
• Ревью на старте. Типично ~1 мес• Линт и сразу и потом. Google ftw
Про библиотеки итп STL
• STL, boost исторически не пользуемся• Было нельзя, сейчас незачем• Только вручную, только
хардкор!• Сторонние библиотеки, эээ, по
ситуации• libstemmer, libre2 линкуем• libaot, часть стеммеров
переписали
Про ревью
• Все еще без спецтулзов• Git бранчи FTW• NB, важно осознавать цели
• Баги так ловить нельзя• Проверка стиля итп дури• Проверка “туда ли идем”• Двойные проверки особо
важного
Внутренняя документация
• Есть полупубличная, полудохлая• doc/internals*.txt
• Есть совсем внутренняя• Особо секретная, так надо!!!• Маленькая, всего 10 18
страниц• Пишется по ситуации (найм /
новое / хорошо забытое старое)
Внешняя документация
• Неизменно БОЛЬ• Программисты плохо пишут• Пользователи плохо спрошают• Нужен уникальный спец-человек
• Штоп разбирался• Штоп интересовался
• Все еще пока не нашли!
Про тестирование
• Внутреннее, автоматизированное• Функциональные тесты• 200+ штук, 4000+ запросов
• Юнит-тесты• Тесты производительности
(***)• Спецтестеров нет, вряд ли будет• Плюс фидбэк! (когда бывает)
“Толька! Этого мало!”
• Все равно проникают адовые баги :)
• Баги бывают трех классов, A, B, C• Но иногда! бывают баги класса Ы
• issue-72, issue-136, …• bug-660, bug-1117, …
• И отдельной строкой performance issues• prefork spin, O(n^2) zones, …
Специфика удаленки
+ Спокойно, нету геопривязки, офиса, свободный график…
– Спокойно, ограниченный контакт, свободный график…
• Ключевое, самодисциплина• Push модель vs pull модель• В остальном – вроде обычный
orgchart
Стоит ли так жить?
• Не знаю!!!• Но вот – иногда возможно