SlideShare ist ein Scribd-Unternehmen logo
1 von 54
Как мы разрабатываем
Sphinx


Аксенов Андрей
Sphinx Technologies Inc
Что такое
 Sphinx?
Что такое Sphinx?

•   Программа такая
•   Для серверов (и мобильных телефонов)
•   Делает поиск
•   Бесплатная, открытая, итп

• Сам сервер ~90K строк, ~2.6 MB, C++
• И еще всякое (API, секретные тулы…)
Про что доклад

•   Как у нас устроен процесс разработки
•   И, местами, почему так (спрашивайте!)
•   Никаких революций
•   Все очень тупо и стандартно
•   Ничего нового не узнаете уот уаабще (1)
      • Russian marketing in action!!!

(1) Вопрос знатокам: как расшифровывается слово Sphinx?
Мы говорим Ленин...

• Команда разработчиков
Мы говорим Ленин...

• Команда разработчиков
Мы говорим Ленин...

• Команда разработчиков
    • Маленькая, очень
    • Удаленная, полностью
    • Звездочка, исторически
    • Диктатура, вынужденно
• Ничто не религия – так сложилось
• Работа по домам – и плюсы и минусы
Вольно пасущиеся коты (2)

• Внешняя часть
    • Mantis, форум, изредка IRC
• Внутренняя часть
    • IRC, Skype, email, телефон
    • Eventum, Wiki, Mantis
    • Google Docs

(2) Вопрос знатокам: кого рекламирует “заглавный” видеоролик?
Кафка. «Процесс».
  - Холст, сыр, масло

•   Как устроен процесс “про код”?
•   Какие именно Мега Практики есть?
•   Каких нету, каких зря, каких спецом?
•   Как и почему именно так получилось?
•   Полтора выстраданных опытом фокуса
“Мы е…и все на свете”

•   Waterfall ?
•   Agile ?
•   SCRUM ?
•   Kanban ?
•   Six Sigma ?
    ...
“Мы е…и все на свете”

• Waterfall ?
• Agile ?
• SCRUM ?
• Kanban ?
• Six Sigma ?
  ...
• X3M !
“Do the reasonable thing”

•   По-русски, возможно, “включи мозг”
•   Раскидываем баги, фичи, редкий R&D
•   Мини-лекции и “атаки” по потребности
•   Отчитываемся (еженедельный звонок)
•   Итерации типично короткие
•   Результаты типично прозрачные
•   Ничего особенного, как и обещал
Зоопарк VCS

• Внутренний svn
• Публичный svn (R/O зеркало, Gcode)
• Внутренний hg
    • Для длинных веток
    • Для секретных веток
    • Для промежуточных патчей
• Личный git
Эволюция зоопарка

• Было
    • svn исторически, зеркало очевидно
    • hg все (!) освоили “для себя”
    • git пока личный (?) эксперимент
• Будет… может быть
    • svn + git ?
    • git / github ?
Зоопарк сред разработки

• Каждый строчит, как он хочет
    • MSVS 2005+
    • gcc CLI
    • Codeblocks
    • Xcode
• Довольно кроссплатформенно
• Платформо-зависимого кода... МАЛО
Про кодстиль
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 исторически не пользуемся
    • Было нельзя, сейчас незачем
    • Только вручную, только хардкор! (3)
• Сторонние библиотеки, эээ, по ситуации
    • libstemmer, libre2 линкуем
    • libaot, часть стеммеров переписали

(3) Вопрос знатокам: чему равен номер “старой школы”?
Про ревью

• Пока (?) без спецтулзов
• Тупо обмен патчами (см. помойка)
• Цели?
    • Баги так ловить нельзя
    • Проверка стиля итп дури
    • Проверка “туда ли идем”
    • Двойные проверки особо важного
Внутренняя документация

• Есть полу-публичная,
    • doc/internals*.txt (4)
• Есть совсем внутренняя
    • Особо секретная, так надо!!!
    • Пока маленькая, всего 10 страниц
    • Авось будем расширять и углублять

(4) Вопрос знатокам: как расшифровывается “VLB”?
Программа != продукт

• Продукт = Программа +
    • Тестирование
    • Документация
    • Поддержка
Про документацию

• БОЛЬ
• Программисты (это я) плоховато пишут
• Юзеры (это вы) редко и мало спрошают
• Нужен уникальный спец-человек
    • Штоп разбирался
    • Штоп интересовался
• Пока не нашли!
Про платную поддержку

• Консультанты VS разработчики
• Читаем доки вслух
    • К должны, Р теоретически могут
• Помогаем придумать и внедрить фокусы
    • К должны, Р должны
• Фиксим в коде старое, делаем новое
    • К не при делах, Р должны
Про бесплатную поддержку

• Форум – чистая личная доблесть
   • Пит, Барри
• Mantis – политика партии!
   • Цель “смотреть все”
   • Получается пока не всегдец :(
   • Eventum, очевидно, приоритетнее
     • GPL=freemium, либо гринд, либо..
Про тестирование

• Внутреннее, мы сами
    • Автоматические тесты (см. Оч.Мал.)
    • Примерно 3-4 разных видов
• Внешнее, пользователи
    • 10 Баг (через Mantis или Eventum)
    • 20 Фикс [+ автоматический тест]
    • 30 GOTO 10
Ежеминутный дзен

• Регрессионная тест-сюита, test/
    • Не сразу, примерно через 1.5 года…
      Apr 2006 vs Nov 2007
    • Рождена комбинаторным взрывом
    • Сегодня ~200 тестов (5)
    • Сегодня 3000+ запросов
    • “1 клик” (на самом деле 2)
(5) Вопрос знатокам: сколько в точности тестов в 2.0.2-beta?
Ежеминутный дзен

• Регрессионная тест-сюита, test/
    • Написана на PHP, это минус
    • Заодно тестирует API, это плюс
      • PHP API, C API остальное
    • Тестируется вся система
    • Дескрипторы и мутаторы
      • Данные, запросы, варианты, QL
Ежеминутный дзен

• Юнит-тесты, src/tests.cpp
    • “Фреймворк” assert.h
    • Рождена внутренним рефактором
    • Используется для “точечных” тестов
    • Используется и для регрессий тоже
• Заодно там же микробенчмарки
    • Debug=test, Release=bench :)
Ежечасный дзен

•   1*regression ~= 2-3min
•   1*quick-regression ~= 1 min
•   2*(regression+unit+capi) ~= 5+min
•   Все в “1 клик”, но этого мало
•   Тесты и почта на каждый коммит
      • Либо исправляем почти сразу
      • Либо ревертим!!! (Это редко)
Ежеминутный дзен

• Регрессионная тест-сюита, test/
    • Написана на PHP, это, кхм, минус!!!
    • Заодно тестирует PHP API, это плюс
    • Тестируется вся система
    • Дескрипторы и мутаторы
      • Данные, запросы, варианты
      • API, QL
Еженощный дзен

• Acceptance: проверяем результаты
• Performance: мерим QPS
• 1M (1.3G) документов, 1K+ запросов
• Несколько режимов
    • fork, threads, prefork, ...
    • trunk, rel20, …
• “Вчерашняя” ачивка: графики!!!
“Толька! Этого мало!” (6)

• Все равно проникают адовые баги :)
• Баги бывают трех классов, A, B, C
• Но иногда! бывают баги класса Ы
    • issue-72, issue-136, …
    • bug-660, bug-1117, …
• И отдельной строкой performance issues
    • prefork spin, O(n^2) zones, …
(6) Вопрос знатокам: до скольки qps только что было на графике?
Про билды

• До июля 2010 считай не было
    • Только source + win32
    • Это плохо, так нельзя
• Постепенно научились собирать пакеты
    • Как обычно, россыпь виртуалок
    • Как обычно, скрипты в 1-клик
    • MacOS пока сопротивляется
Про цикл релизов

• Был заторможенный, 1 раз в год (ууу)
    • Всегда можно взять транк!!!
    • Но не всем, говорят, дают (хехе)
• Теперь разгоняем, раз в 1-2 мес
    • Очередная попытка maintenance
    • Пока что, тьфу-тьфу, получается!!!
• Следующая цель: разогнать “беты”
Про именование версий

• Dev
    • Тупо текущий “транк”
• Beta
    • “Известных” “крупных” багов нет
    • Добавляются новые фичи
      • Code-freeze пока не отличить
      • RC? Gamma? Нуегонафиг?
Про именование версий

• Release
    • 1-2 месяца после code-freeze beta
    • “Известных” багов уаабще нет
      • Но это ничего не значит!!!
    • После этого только багфиксы
    • Перед этим, в общем-то, тоже
Почему важны баги

• Ну...
• Нас пока еще меньше 1000 человек
• А разнообразные комбинаторные
  взрывы никто не отменял!
(7) Вопрос знатокам: как звали маму Дарта?
Виды багрепортов

• Бывают правильные
    • Вкратце – все нужные данные
    • Особый шок – когда прям сразу
• Бывают как обычно
    • “Ааа все пропало мы все умрем”
    • И, конечно, зачем отвечать на
      почту
Про 1 клик

• Билды в 1 клик
• Тесты в 1 клик
• Линт в 1 клик

• Промежуточные (!!!) эксперименты
  тоже в 1 клик
Про 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
Про 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
Про общую Мега Парадигму

• Стратегия, дизайн-принципы кода ядра
    • Пиши просто
    • Пиши кратко
    • Смерть “скрытым платежам”
      • Кто не пользуется – тот не платит
    • Крути гайки насмерть
      • Ослабить никогда не поздно
Про общую Мега Парадигму

• Тактика, полезные фокусы
    • Порядок. Кодстиль, линт, краткость
    • Автоматизация. Всякое в 1-клик
    • Тестирование. Тотальное и хуже
    • Багфиксы. Сначала они
Как отмазаться в понедельник

• Делайте тесты, иначе тяжело
• Автоматизируйте всякое, иначе тяжело
    • Запуск в 1-клик
    • Либо быстро исполняться
    • Либо настраивать автобота
• Пишите код хорошо, а плохо не пишите
• Не апгрейдитесь в пятницу!
Вопросы?


Аксенов Андрей
Sphinx Technologies Inc
shodan@sphinxsearch.com   (8)

+1 (888) 333-1345
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx

Weitere ähnliche Inhalte

Was ist angesagt?

14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?HappyDev-lite
 
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Ontico
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!PyNSK
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetOleg Tsarev
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testingbeched
 
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концомБинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концомDaniel Podolsky
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотомRoman Grebennikov
 
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)Ontico
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang productionAlina Dolgikh
 
Tk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosqlTk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosqlDaniel Podolsky
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"Yandex
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Oleg Tsarev
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)Ontico
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодRoman Grebennikov
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Ontico
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программистаSlach
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
 

Was ist angesagt? (20)

14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
 
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testing
 
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концомБинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотом
 
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
Tk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosqlTk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosql
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
 
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный код
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
 

Andere mochten auch

CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWHCodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWHCodeFest
 
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все граблиCodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все граблиCodeFest
 
CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...
CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...
CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...CodeFest
 
Codefest 2011. Панкратов С., Орлов А. — Практикум работы с неконструктивными ...
Codefest 2011. Панкратов С., Орлов А. — Практикум работы с неконструктивными ...Codefest 2011. Панкратов С., Орлов А. — Практикум работы с неконструктивными ...
Codefest 2011. Панкратов С., Орлов А. — Практикум работы с неконструктивными ...CodeFest
 
CodeFest 2011. Галин С. — Qt для разработки кроссплатформенных мобильных прил...
CodeFest 2011. Галин С. — Qt для разработки кроссплатформенных мобильных прил...CodeFest 2011. Галин С. — Qt для разработки кроссплатформенных мобильных прил...
CodeFest 2011. Галин С. — Qt для разработки кроссплатформенных мобильных прил...CodeFest
 
CodeFest 2011. Руколь Н. — Творческая мастерская по тестированию ПО
CodeFest 2011. Руколь Н. — Творческая мастерская по тестированию ПОCodeFest 2011. Руколь Н. — Творческая мастерская по тестированию ПО
CodeFest 2011. Руколь Н. — Творческая мастерская по тестированию ПОCodeFest
 
CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...
CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...
CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...CodeFest
 
CodeFest 2011. Климова Н. — FitNesse, полезный для проекта, или история одно...
CodeFest 2011. Климова Н. — FitNesse, полезный для проекта,  или история одно...CodeFest 2011. Климова Н. — FitNesse, полезный для проекта,  или история одно...
CodeFest 2011. Климова Н. — FitNesse, полезный для проекта, или история одно...CodeFest
 
CodeFest 2011. Уразбаев А. — Пробуем Kanban!
CodeFest 2011. Уразбаев А. — Пробуем Kanban!CodeFest 2011. Уразбаев А. — Пробуем Kanban!
CodeFest 2011. Уразбаев А. — Пробуем Kanban!CodeFest
 
CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правил...
CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правил...CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правил...
CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правил...CodeFest
 
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...CodeFest
 
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest
 
CodeFest 2011. Алфёрова А. — Рынок труда ИТ-специалистов: состояние, динамика...
CodeFest 2011. Алфёрова А. — Рынок труда ИТ-специалистов: состояние, динамика...CodeFest 2011. Алфёрова А. — Рынок труда ИТ-специалистов: состояние, динамика...
CodeFest 2011. Алфёрова А. — Рынок труда ИТ-специалистов: состояние, динамика...CodeFest
 
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игрCodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игрCodeFest
 
CodeFest 2011. Архипенков С. — Теория и практика адаптивного управления проектом
CodeFest 2011. Архипенков С. — Теория и практика адаптивного управления проектомCodeFest 2011. Архипенков С. — Теория и практика адаптивного управления проектом
CodeFest 2011. Архипенков С. — Теория и практика адаптивного управления проектомCodeFest
 
CodeFest 2011. Komarov, Brajnik — Mobile service — it's easy!
CodeFest 2011. Komarov, Brajnik — Mobile service — it's easy!CodeFest 2011. Komarov, Brajnik — Mobile service — it's easy!
CodeFest 2011. Komarov, Brajnik — Mobile service — it's easy!CodeFest
 
CodeFest 2011. Жердева А., Ложкин А. — Проектирование, пользователи, продукт....
CodeFest 2011. Жердева А., Ложкин А. — Проектирование, пользователи, продукт....CodeFest 2011. Жердева А., Ложкин А. — Проектирование, пользователи, продукт....
CodeFest 2011. Жердева А., Ложкин А. — Проектирование, пользователи, продукт....CodeFest
 
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...CodeFest
 
CodeFest 2011. Галако О. — О Scala и Lift для тех, кому мало Java, и не только
CodeFest 2011. Галако О. — О Scala и Lift для тех, кому мало Java, и не толькоCodeFest 2011. Галако О. — О Scala и Lift для тех, кому мало Java, и не только
CodeFest 2011. Галако О. — О Scala и Lift для тех, кому мало Java, и не толькоCodeFest
 
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...CodeFest
 

Andere mochten auch (20)

CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWHCodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
 
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все граблиCodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
 
CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...
CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...
CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...
 
Codefest 2011. Панкратов С., Орлов А. — Практикум работы с неконструктивными ...
Codefest 2011. Панкратов С., Орлов А. — Практикум работы с неконструктивными ...Codefest 2011. Панкратов С., Орлов А. — Практикум работы с неконструктивными ...
Codefest 2011. Панкратов С., Орлов А. — Практикум работы с неконструктивными ...
 
CodeFest 2011. Галин С. — Qt для разработки кроссплатформенных мобильных прил...
CodeFest 2011. Галин С. — Qt для разработки кроссплатформенных мобильных прил...CodeFest 2011. Галин С. — Qt для разработки кроссплатформенных мобильных прил...
CodeFest 2011. Галин С. — Qt для разработки кроссплатформенных мобильных прил...
 
CodeFest 2011. Руколь Н. — Творческая мастерская по тестированию ПО
CodeFest 2011. Руколь Н. — Творческая мастерская по тестированию ПОCodeFest 2011. Руколь Н. — Творческая мастерская по тестированию ПО
CodeFest 2011. Руколь Н. — Творческая мастерская по тестированию ПО
 
CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...
CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...
CodeFest 2012. Кашкута И. — Серебряная пуля кроссплатформенной разработки моб...
 
CodeFest 2011. Климова Н. — FitNesse, полезный для проекта, или история одно...
CodeFest 2011. Климова Н. — FitNesse, полезный для проекта,  или история одно...CodeFest 2011. Климова Н. — FitNesse, полезный для проекта,  или история одно...
CodeFest 2011. Климова Н. — FitNesse, полезный для проекта, или история одно...
 
CodeFest 2011. Уразбаев А. — Пробуем Kanban!
CodeFest 2011. Уразбаев А. — Пробуем Kanban!CodeFest 2011. Уразбаев А. — Пробуем Kanban!
CodeFest 2011. Уразбаев А. — Пробуем Kanban!
 
CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правил...
CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правил...CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правил...
CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правил...
 
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
 
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали Групон
 
CodeFest 2011. Алфёрова А. — Рынок труда ИТ-специалистов: состояние, динамика...
CodeFest 2011. Алфёрова А. — Рынок труда ИТ-специалистов: состояние, динамика...CodeFest 2011. Алфёрова А. — Рынок труда ИТ-специалистов: состояние, динамика...
CodeFest 2011. Алфёрова А. — Рынок труда ИТ-специалистов: состояние, динамика...
 
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игрCodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр
CodeFest 2012. Анкудинов Д. — О специфике мультиплатформенного тестирования игр
 
CodeFest 2011. Архипенков С. — Теория и практика адаптивного управления проектом
CodeFest 2011. Архипенков С. — Теория и практика адаптивного управления проектомCodeFest 2011. Архипенков С. — Теория и практика адаптивного управления проектом
CodeFest 2011. Архипенков С. — Теория и практика адаптивного управления проектом
 
CodeFest 2011. Komarov, Brajnik — Mobile service — it's easy!
CodeFest 2011. Komarov, Brajnik — Mobile service — it's easy!CodeFest 2011. Komarov, Brajnik — Mobile service — it's easy!
CodeFest 2011. Komarov, Brajnik — Mobile service — it's easy!
 
CodeFest 2011. Жердева А., Ложкин А. — Проектирование, пользователи, продукт....
CodeFest 2011. Жердева А., Ложкин А. — Проектирование, пользователи, продукт....CodeFest 2011. Жердева А., Ложкин А. — Проектирование, пользователи, продукт....
CodeFest 2011. Жердева А., Ложкин А. — Проектирование, пользователи, продукт....
 
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
 
CodeFest 2011. Галако О. — О Scala и Lift для тех, кому мало Java, и не только
CodeFest 2011. Галако О. — О Scala и Lift для тех, кому мало Java, и не толькоCodeFest 2011. Галако О. — О Scala и Lift для тех, кому мало Java, и не только
CodeFest 2011. Галако О. — О Scala и Lift для тех, кому мало Java, и не только
 
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
 

Ähnlich wie CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx

RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsDaniel Podolsky
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)Ontico
 
Как мы делаем Banki.ru
Как мы делаем Banki.ruКак мы делаем Banki.ru
Как мы делаем Banki.ruRoman Ivliev
 
Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Ontico
 
Всему своё время Highload Junior 2016
Всему своё время   Highload Junior  2016Всему своё время   Highload Junior  2016
Всему своё время Highload Junior 2016Roman Ivliev
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла0leGG
 
Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)Ontico
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU
 
DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...
DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...
DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...it-people
 
Социальный граф Одноклассников в Target Mail.Ru
Социальный граф Одноклассников в Target Mail.RuСоциальный граф Одноклассников в Target Mail.Ru
Социальный граф Одноклассников в Target Mail.RuCodeFest
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.ScrumTrek
 
Оптицизация: на грани и за
Оптицизация: на грани и заОптицизация: на грани и за
Оптицизация: на грани и заAnton Patrushev
 
Оптимизация на грани и за ней - Антон Патрушев, UNFCCC
Оптимизация на грани и за ней - Антон Патрушев, UNFCCCОптимизация на грани и за ней - Антон Патрушев, UNFCCC
Оптимизация на грани и за ней - Антон Патрушев, UNFCCCit-people
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest
 
Юрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услугаЮрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услугаSQADays_2009_Piter
 
Про качественный поиск
Про качественный поискПро качественный поиск
Про качественный поискAndrew Aksyonoff
 
UWDC'12, Александр Макаров, О командной разработке и фреймворках
UWDC'12, Александр Макаров, О командной разработке и фреймворкахUWDC'12, Александр Макаров, О командной разработке и фреймворках
UWDC'12, Александр Макаров, О командной разработке и фреймворкахAlexander Makarov
 
С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)Unigine Corp.
 

Ähnlich wie CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx (20)

RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwords
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
 
Как мы делаем Banki.ru
Как мы делаем Banki.ruКак мы делаем Banki.ru
Как мы делаем Banki.ru
 
Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)
 
Всему своё время Highload Junior 2016
Всему своё время   Highload Junior  2016Всему своё время   Highload Junior  2016
Всему своё время Highload Junior 2016
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла
 
Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
 
DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...
DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...
DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...
 
Социальный граф Одноклассников в Target Mail.Ru
Социальный граф Одноклассников в Target Mail.RuСоциальный граф Одноклассников в Target Mail.Ru
Социальный граф Одноклассников в Target Mail.Ru
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.
 
Оптицизация: на грани и за
Оптицизация: на грани и заОптицизация: на грани и за
Оптицизация: на грани и за
 
Оптимизация на грани и за ней - Антон Патрушев, UNFCCC
Оптимизация на грани и за ней - Антон Патрушев, UNFCCCОптимизация на грани и за ней - Антон Патрушев, UNFCCC
Оптимизация на грани и за ней - Антон Патрушев, UNFCCC
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается Yii
 
Юрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услугаЮрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услуга
 
Про качественный поиск
Про качественный поискПро качественный поиск
Про качественный поиск
 
UWDC'12, Александр Макаров, О командной разработке и фреймворках
UWDC'12, Александр Макаров, О командной разработке и фреймворкахUWDC'12, Александр Макаров, О командной разработке и фреймворках
UWDC'12, Александр Макаров, О командной разработке и фреймворках
 
Как разраба
Как разрабаКак разраба
Как разраба
 
С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)
 

Mehr von CodeFest

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита ПрокоповCodeFest
 
Денис Баталов
Денис БаталовДенис Баталов
Денис БаталовCodeFest
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена ГальцинаCodeFest
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр КалашниковCodeFest
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина ИвановаCodeFest
 
Marko Berković
Marko BerkovićMarko Berković
Marko BerkovićCodeFest
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис КортуновCodeFest
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр ЗиминCodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей ИгнатовCodeFest
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай КрапивныйCodeFest
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим СмирновCodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele RialdiCodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene GroeschkeCodeFest
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван БондаренкоCodeFest
 
Mete Atamel
Mete AtamelMete Atamel
Mete AtamelCodeFest
 

Mehr von CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx

  • 3.
  • 4. Что такое Sphinx? • Программа такая • Для серверов (и мобильных телефонов) • Делает поиск • Бесплатная, открытая, итп • Сам сервер ~90K строк, ~2.6 MB, C++ • И еще всякое (API, секретные тулы…)
  • 5. Про что доклад • Как у нас устроен процесс разработки • И, местами, почему так (спрашивайте!) • Никаких революций • Все очень тупо и стандартно • Ничего нового не узнаете уот уаабще (1) • Russian marketing in action!!! (1) Вопрос знатокам: как расшифровывается слово Sphinx?
  • 6. Мы говорим Ленин... • Команда разработчиков
  • 7. Мы говорим Ленин... • Команда разработчиков
  • 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”?
  • 25. Программа != продукт • Продукт = Программа + • Тестирование • Документация • Поддержка
  • 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
  • 36. Еженощный дзен • Acceptance: проверяем результаты • Performance: мерим QPS • 1M (1.3G) документов, 1K+ запросов • Несколько режимов • fork, threads, prefork, ... • trunk, rel20, … • “Вчерашняя” ачивка: графики!!!
  • 37.
  • 38.
  • 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 человек • А разнообразные комбинаторные взрывы никто не отменял!
  • 45. (7) Вопрос знатокам: как звали маму Дарта?
  • 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-клик • Либо быстро исполняться • Либо настраивать автобота • Пишите код хорошо, а плохо не пишите • Не апгрейдитесь в пятницу!
  • 53. Вопросы? Аксенов Андрей Sphinx Technologies Inc shodan@sphinxsearch.com (8) +1 (888) 333-1345