-
Notifications
You must be signed in to change notification settings - Fork 0
Layout
В прошлом году относительно неплохо (хотя были сложности, см. ниже) показала себя система 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>
В прошлом году была проблема с тем, что код несколько запоздало попадал в продакшон. В частности, никаких вспомогательных инструментов (генераторов карт и прогонялок солверов) там так и не было до конца. И заслуженно на самом деле (например я, к своему стыду, просил Дайсбота прогонять мои солверы на всех картах, вместо того чтобы это делать самому, потому что это делалось как-то не совсем удобно; а вникнуть и сделать совсем удобно ленился).
Поэтому на этот раз уделите внимание тому, чтобы всякие полезные штуки выкладывать в продакшон как можно раньше (доводя их до приемлемого качества при этом). Главное чтобы другие начали пользоваться, а потом они уже допилят под конкретные нужды.