Skip to content
Vlad-Shcherbina edited this page Aug 5, 2013 · 2 revisions

В прошлом году относительно неплохо (хотя были сложности, см. ниже) показала себя система scratches-production:

  • Есть экспериментальный код (username_scratch/), который может быть сколь угодно грязным. Не предполагается, что он войдёт в финальное решение или будет использоваться кем-либо помимо автора.
  • И есть продакшон-код (production/). Делайте его читаемым и удобным для использования другими (например, не помешают простой пример использования или CLI под "if name == 'main':", докстринги, минимальные тесты). В идеале все вспомогательные инструменты (визуализаторы и т.п.), если они попадают в продакшон, должны работать "из коробки".

Продакшон-код не должен импортировать ничего из экспериментального.

Избегайте изменений, внезапно ломающих продакшон-код. Там будет скрипт production/test_all.py, который прогоняет все тесты из продакшона (т.е. все функции, у которых имя и имя модуля матчатся регэксом r'(?:^|[\b_\.-])[Tt]est.*', а также все доктесты).

Изменения в продакшоне могут поломать скратчи, и чинить это придётся владельцам скратчей (если то что сломалось им вообще ещё нужно). По идее изменения в продакшон тестах должны иллюстрировать, как именно чинить.

Данные тоже делятся на чистые (и полезные для всех) и грязные. Чистые данные живут в каталоге 'data/', поэтому доступны как из продакшона, так и из скратчей по относительному пути '../data/' (для удобства скрипты, которые полагаются на текущую директорию, должны работать когда запускаются из той директории, в которой лежат (например так их запускает эклипс при нажатии Ctrl-F11)). Грязные данные живут в скратчах и структурируются владельцем как угодно.

Историю коммитов в продакшон можно посмотреть командой 'gitk production'.

В целом, структура каталогов должна выглядеть примерно так:

icfpc2013-tbd
    production (eclipse project)
        <nice, clean and reusable code>
        module.py
        module_tests.py
        script.py
    data (bare directory)
        <nice, clean and canonical data>
    *_scratch (eclipse projects)
        <put here whatever you want>

В прошлом году была проблема с тем, что код несколько запоздало попадал в продакшон. В частности, никаких вспомогательных инструментов (генераторов карт и прогонялок солверов) там так и не было до конца. И заслуженно на самом деле (например я, к своему стыду, просил Дайсбота прогонять мои солверы на всех картах, вместо того чтобы это делать самому, потому что это делалось как-то не совсем удобно; а вникнуть и сделать совсем удобно ленился).

Поэтому на этот раз уделите внимание тому, чтобы всякие полезные штуки выкладывать в продакшон как можно раньше (доводя их до приемлемого качества при этом). Главное чтобы другие начали пользоваться, а потом они уже допилят под конкретные нужды.

Clone this wiki locally