4. Что такое Sphinx?
• Программа такая
• Для серверов (и мобильных телефонов)
• Делает поиск
• Бесплатная, открытая, итп
• Сам сервер ~90K строк, ~2.6 MB, C++
• И еще всякое (API, секретные тулы…)
5. Про что доклад
• Как у нас устроен процесс разработки
• И, местами, почему так (спрашивайте!)
• Никаких революций
• Все очень тупо и стандартно
• Ничего нового не узнаете уот уаабще (1)
• Russian marketing in action!!!
(1) Вопрос знатокам: как расшифровывается слово Sphinx?
8. Мы говорим Ленин...
• Команда разработчиков
• Маленькая, очень
• Удаленная, полностью
• Звездочка, исторически
• Диктатура, вынужденно
• Ничто не религия – так сложилось
• Работа по домам – и плюсы и минусы
9. Вольно пасущиеся коты (2)
• Внешняя часть
• Mantis, форум, изредка IRC
• Внутренняя часть
• IRC, Skype, email, телефон
• Eventum, Wiki, Mantis
• Google Docs
(2) Вопрос знатокам: кого рекламирует “заглавный” видеоролик?
10. Кафка. «Процесс».
- Холст, сыр, масло
• Как устроен процесс “про код”?
• Какие именно Мега Практики есть?
• Каких нету, каких зря, каких спецом?
• Как и почему именно так получилось?
• Полтора выстраданных опытом фокуса
11. “Мы е…и все на свете”
• Waterfall ?
• Agile ?
• SCRUM ?
• Kanban ?
• Six Sigma ?
...
12.
13. “Мы е…и все на свете”
• Waterfall ?
• Agile ?
• SCRUM ?
• Kanban ?
• Six Sigma ?
...
• X3M !
14. “Do the reasonable thing”
• По-русски, возможно, “включи мозг”
• Раскидываем баги, фичи, редкий R&D
• Мини-лекции и “атаки” по потребности
• Отчитываемся (еженедельный звонок)
• Итерации типично короткие
• Результаты типично прозрачные
• Ничего особенного, как и обещал
15. Зоопарк VCS
• Внутренний svn
• Публичный svn (R/O зеркало, Gcode)
• Внутренний hg
• Для длинных веток
• Для секретных веток
• Для промежуточных патчей
• Личный git
16. Эволюция зоопарка
• Было
• svn исторически, зеркало очевидно
• hg все (!) освоили “для себя”
• git пока личный (?) эксперимент
• Будет… может быть
• svn + git ?
• git / github ?
17. Зоопарк сред разработки
• Каждый строчит, как он хочет
• MSVS 2005+
• gcc CLI
• Codeblocks
• Xcode
• Довольно кроссплатформенно
• Платформо-зависимого кода... МАЛО
18. Про кодстиль
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 );
19. Про кодстиль
• Своеобразный
• Пробелы
• Мини-венгерская нотация
• Смесь систем именования типов
• Но оправданный!
• Мгновенный контекст
• Читаемость без подсветки и в целом
20. Про кодстиль
• Форсирую стиль
• Форсирую компактность
• Политика?
• Религия?
• Прагматика!
• Ревью на старте. Типично ~1 мес
• Линт и сразу и потом. Google ftw
21. Про библиотеки итп STL
• STL, boost исторически не пользуемся
• Было нельзя, сейчас незачем
• Только вручную, только хардкор! (3)
• Сторонние библиотеки, эээ, по ситуации
• libstemmer, libre2 линкуем
• libaot, часть стеммеров переписали
(3) Вопрос знатокам: чему равен номер “старой школы”?
22.
23. Про ревью
• Пока (?) без спецтулзов
• Тупо обмен патчами (см. помойка)
• Цели?
• Баги так ловить нельзя
• Проверка стиля итп дури
• Проверка “туда ли идем”
• Двойные проверки особо важного
24. Внутренняя документация
• Есть полу-публичная,
• doc/internals*.txt (4)
• Есть совсем внутренняя
• Особо секретная, так надо!!!
• Пока маленькая, всего 10 страниц
• Авось будем расширять и углублять
(4) Вопрос знатокам: как расшифровывается “VLB”?
26. Про документацию
• БОЛЬ
• Программисты (это я) плоховато пишут
• Юзеры (это вы) редко и мало спрошают
• Нужен уникальный спец-человек
• Штоп разбирался
• Штоп интересовался
• Пока не нашли!
27.
28. Про платную поддержку
• Консультанты VS разработчики
• Читаем доки вслух
• К должны, Р теоретически могут
• Помогаем придумать и внедрить фокусы
• К должны, Р должны
• Фиксим в коде старое, делаем новое
• К не при делах, Р должны
29. Про бесплатную поддержку
• Форум – чистая личная доблесть
• Пит, Барри
• Mantis – политика партии!
• Цель “смотреть все”
• Получается пока не всегдец :(
• Eventum, очевидно, приоритетнее
• GPL=freemium, либо гринд, либо..
30. Про тестирование
• Внутреннее, мы сами
• Автоматические тесты (см. Оч.Мал.)
• Примерно 3-4 разных видов
• Внешнее, пользователи
• 10 Баг (через Mantis или Eventum)
• 20 Фикс [+ автоматический тест]
• 30 GOTO 10
31. Ежеминутный дзен
• Регрессионная тест-сюита, test/
• Не сразу, примерно через 1.5 года…
Apr 2006 vs Nov 2007
• Рождена комбинаторным взрывом
• Сегодня ~200 тестов (5)
• Сегодня 3000+ запросов
• “1 клик” (на самом деле 2)
(5) Вопрос знатокам: сколько в точности тестов в 2.0.2-beta?
32. Ежеминутный дзен
• Регрессионная тест-сюита, test/
• Написана на PHP, это минус
• Заодно тестирует API, это плюс
• PHP API, C API остальное
• Тестируется вся система
• Дескрипторы и мутаторы
• Данные, запросы, варианты, QL
33. Ежеминутный дзен
• Юнит-тесты, src/tests.cpp
• “Фреймворк” assert.h
• Рождена внутренним рефактором
• Используется для “точечных” тестов
• Используется и для регрессий тоже
• Заодно там же микробенчмарки
• Debug=test, Release=bench :)
34. Ежечасный дзен
• 1*regression ~= 2-3min
• 1*quick-regression ~= 1 min
• 2*(regression+unit+capi) ~= 5+min
• Все в “1 клик”, но этого мало
• Тесты и почта на каждый коммит
• Либо исправляем почти сразу
• Либо ревертим!!! (Это редко)
35. Ежеминутный дзен
• Регрессионная тест-сюита, test/
• Написана на PHP, это, кхм, минус!!!
• Заодно тестирует PHP API, это плюс
• Тестируется вся система
• Дескрипторы и мутаторы
• Данные, запросы, варианты
• API, QL
39. “Толька! Этого мало!” (6)
• Все равно проникают адовые баги :)
• Баги бывают трех классов, A, B, C
• Но иногда! бывают баги класса Ы
• issue-72, issue-136, …
• bug-660, bug-1117, …
• И отдельной строкой performance issues
• prefork spin, O(n^2) zones, …
(6) Вопрос знатокам: до скольки qps только что было на графике?
40. Про билды
• До июля 2010 считай не было
• Только source + win32
• Это плохо, так нельзя
• Постепенно научились собирать пакеты
• Как обычно, россыпь виртуалок
• Как обычно, скрипты в 1-клик
• MacOS пока сопротивляется
41. Про цикл релизов
• Был заторможенный, 1 раз в год (ууу)
• Всегда можно взять транк!!!
• Но не всем, говорят, дают (хехе)
• Теперь разгоняем, раз в 1-2 мес
• Очередная попытка maintenance
• Пока что, тьфу-тьфу, получается!!!
• Следующая цель: разогнать “беты”
42. Про именование версий
• Dev
• Тупо текущий “транк”
• Beta
• “Известных” “крупных” багов нет
• Добавляются новые фичи
• Code-freeze пока не отличить
• RC? Gamma? Нуегонафиг?
43. Про именование версий
• Release
• 1-2 месяца после code-freeze beta
• “Известных” багов уаабще нет
• Но это ничего не значит!!!
• После этого только багфиксы
• Перед этим, в общем-то, тоже
44. Почему важны баги
• Ну...
• Нас пока еще меньше 1000 человек
• А разнообразные комбинаторные
взрывы никто не отменял!
46. Виды багрепортов
• Бывают правильные
• Вкратце – все нужные данные
• Особый шок – когда прям сразу
• Бывают как обычно
• “Ааа все пропало мы все умрем”
• И, конечно, зачем отвечать на
почту
47. Про 1 клик
• Билды в 1 клик
• Тесты в 1 клик
• Линт в 1 клик
• Промежуточные (!!!) эксперименты
тоже в 1 клик
48. Про 1 клик
@echo off
set PATH=C:Program FilesMicrosoft
Visual Studio 8Common7IDE;%PATH%;
devenv sphinx05.sln /rebuild release
binreleaseindexer aot
echo diffing...
md5sum C:Worksphinxindexesaot.*
>cur.txt
diff cur.txt ref.txt
49. Про 1 клик
call hgrm
del src*.orig
del src*.rej
del doc*.orig
del doc*.rej
hg up -r 1309
hg merge -r %1
hg id
50. Про общую Мега Парадигму
• Стратегия, дизайн-принципы кода ядра
• Пиши просто
• Пиши кратко
• Смерть “скрытым платежам”
• Кто не пользуется – тот не платит
• Крути гайки насмерть
• Ослабить никогда не поздно
51. Про общую Мега Парадигму
• Тактика, полезные фокусы
• Порядок. Кодстиль, линт, краткость
• Автоматизация. Всякое в 1-клик
• Тестирование. Тотальное и хуже
• Багфиксы. Сначала они
52. Как отмазаться в понедельник
• Делайте тесты, иначе тяжело
• Автоматизируйте всякое, иначе тяжело
• Запуск в 1-клик
• Либо быстро исполняться
• Либо настраивать автобота
• Пишите код хорошо, а плохо не пишите
• Не апгрейдитесь в пятницу!