Pull to refresh

Comments 6

Часто, для обозначения версии программы, используется две или три цифры. Например: 1.2 или 1.2.3. При этом удобно, чтобы первые две были короткими (для того чтобы можно было произнести их устно без особых усилий). Версия 200.2013 более труднопроизносима, чем, например 2.13.
При этом четвертая цифра версии используется редко — в ней-то и можно без проблем записать дату.
Например в таком формате:
X.Y.Z.0403, где 0403 означает 3 апреля.
Чтобы не было префиксных нулей и чтобы сортировка по версии осуществлялась правильно, можно добавить номер Build
X.Y.Z.10403, где 1 означает первый билд, 0403 — 3 апреля.
Можно пойти еще дальше и предложить в номер релиза записать год
X.Y.213.10403, где 213 означает 2 релиз и 2013 год, 1 — первый билд, 0403 — 3 апреля.
В итоге получаем, что можно использовать такое правило:
X.Y.ZYY.BMMDD, где X — Major version, Y — Minor version, Z — Release [1..9], YY — Year, B — Build [1..3], MM — Month, DD — Day.

При этом, если максимальное значение версии не может превышать 32767, то Build может принимать то значения 1, 2 или 3.
У меня номер года работает как маркер, чтобы без подсказок после номера версии различалась дата. Любое слепление и шифрование даты действует плохо, а добавление номера билда впереди — ещё больше. Поэтому дату оставлял макимально разборчивой. Добавление минора, конечно, нарушает это правило и делает день неузнаваемым в любом случае. Но эти миноры рассматриваются как редкое исключение, когда в один день надо выпустить больше 1 версии и при этом не менять номер версии в первом числе. А читается такой номер для произношения просто как <первое число> от <lt; дата>, кроме случаев с минорами, которые можно называть «билд XX». Там, где не требуется строго числовой записи, разделитель в виде 0 лучше заменить на другой символ (дефис, точку).
А вариант пронумеровать дни начиная с какой-то даты не подходит? Тогда в одной позиции 0..32767 у вас почти 100 лет поместится.
Важно, чтобы версия была читаемой для человека. Кому будут нужны дни от начала проекта или даже дни года, если никто по ним не ориентируется? А увидеть версию с читаемой датой — это всегда удобно.
Конвертер для даты в данном случае пишется в одну строчку, да и без конвертера можно прекрасно обойтись, если в календарике у первого числа каждого месяца вписать целое соответствующее число — проблемы нет никакой и повода городить огород с не очевидными правилами и писать статьи — отпадает сам собой. Сколько вы на это все времени убили? Вот всегда говорил — все проблемы от того что вещи используются не по назначению.
А вариантов для упрощения и тут много — зарезервировать под каждый год 500 дней под каждый месяц 40 — тогда двумя простыми делениями любую дату на ходу в голове преобразуете.
Сделано ведь ради интереса. Все 2 регекспа заняли около часа, именно в таком порядке: написано сложное, не захотелось использовать — написано переделанное (полчаса подборов). А потом в качестве иллюстрации того, как работать с регекспами при такой сложноватой постановке задачи, записано это с фиддлами — часов 7 эксперименты и статья. Фиддлы, кстати, помогли устранить баги и дали очень хороший способ отладки, такое подобие TDD.

Обычно да, идут на компромиссы, чтобы сделать быстрее, программируют по-быстрому (минут 10-15). В этом месте, где нужна версия программы, было 3 таких прежних итерации за последний год, и каждая — вот такая быстрая, но задачи уложиться в какой-то формат не стояло. А тут вдруг появилась такая совершенно «левая» идея уложить в формат Хрома. Ну и хаб для статьи выбран соотвествующий.
Sign up to leave a comment.

Articles