Как стать автором
Обновить

Как мы столкнулись с версионированием и осознали, что вариант «просто проставить цифры» не работает

Время на прочтение7 мин
Количество просмотров12K

Всем привет, я Алексей Некрасов - Lead направления Python в МТС и старший архитектор в MTS AI.

Хочу поделиться своим опытом внедрения версионирования и рассказать, как сделать первый шаг в реализации стратегии blue/green или канареечного развертывания, что для этого нужно и какие есть инструменты.

Если вы используете в docker-образах тег latest, или у вас недоступна система во время деплоя нового релиза, то эта статья — отправная точка для улучшения вашего продукта.

Читать далее
Всего голосов 12: ↑11 и ↓1+10
Комментарии32

Версионирование API или единая кодовая база для всех версий

Время на прочтение13 мин
Количество просмотров34K

За 21 год существования в SuperJob разработали три версии реализации API для интеграций с бэкендом. Во время разработки последней они решили пересмотреть подход к версионированию. Сейчас в актуальной реализации порядка 379 эндпойнтов, более 900 моделей сущностей и 11 поддерживаемых мажорных версий. Когда проект развивается, вместе с ним меняются и требования к API, а значит неизбежно нарушение обратной совместимости.

Опытом решения этой проблемы поделился Антон Золотилин из SuperJob. Вы увидите самые распространенные решения проблемы версионирования web-API и подход, который реализовал у себя SuperJob. А в качестве бонуса узнаете, как это решение помогает значительно сократить рост затрат на тестирование версий с помощью Impact-анализа.

Читать далее
Всего голосов 44: ↑42 и ↓2+40
Комментарии13

Байки о несовместимых приложениях

Время на прочтение7 мин
Количество просмотров11K
Это отрывки из бесплатной главы из бумажной книги «The Old New Thing». Они ничему не пытаются научить; это просто короткие забавные эпизоды из будней борцов за совместимость новых версий Windows со старыми приложениями.

Изменяем номер версии Windows


Изменить номер версии, который Windows сообщает программам, не просто, как кажется. Например, некоторые программы проверяют номер версии так:
UINT Ver = GetVersion();
UINT MajorVersion = LOBYTE(uVer);
UINT MinorVersion = HIBYTE(uVer);
if (MajorVersion < 3 || MinorVersion < 10) {
    Error("This program requires Windows 3.1");
}

Представьте себе, как этот код отработает на Windows 95, у которой номер версии 4.0. Вторая проверка срабатывает из-за того, что 0 меньше 10.
И ладно бы программа просто выводила сообщение об ошибке и завершалась. Многие рушились: очевидно было, что их поведение на «неподдерживаемых» версиях Windows никогда не тестировалось.

Таких программ оказалось настолько много, что мы перестали исправлять их по одной, и просто изменили возвращаемый номер версии с 4.0 на 3.95.

Программы для MS-DOS тоже не все гладко реагировали на изменение версии ОС. Это удивительно потому, что к тому времени у MS-DOS уже были десятки выпущенных версий и под-версий, и разработчикам пора было бы уже научиться проверять номер версии. Но например, один пакет программ использовал номер версии DOS как индекс в таблице функций: по собственной функции для каждой вышедшей версии. В таблице было пять функций: от MS-DOS 1.x до 5.x. Когда программа запускалась под MS-DOS 6.0, она вызывала адрес за пределами таблицы, и рушилась.

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

Читать дальше →
Всего голосов 147: ↑140 и ↓7+133
Комментарии144

Изменения способа установки расширений в Firefox 4

Время на прочтение1 мин
Количество просмотров1.6K
Следующая бета-версия Firefox 4 будет содержать изменения того способа, которым Firefox устанавливает и использует расширения. Прежде файлы, взятые из XPI-файла расширения, распаковывались в собственный каталог их (в файловой системе) и прочитывались оттуда, а теперь по умолчанию сохраняться будет просто XPI, а файлы будут читаться из него напрямую.

Множеству расширений эта перемена не принесёт проблем; однако, если код вашего расширения пытается напрямую читать его файлы, или если расширение содержит двоичный код, или поисковые плагины, или словари, или значки заголовков окон, тогда вам придётся либо внести в расширение изменения, поддерживающие новый метод установки, или же запросить, чтобы Firefox продолжал распаковывать файлы вашего расширения, используя директиву <em:unpack> в install.rdf.

Подробнее про это изменение и о способах, позволяющих поддерживать его в своём расширении, рассказано на странице «Firefox 4 for Developers».
Всего голосов 53: ↑41 и ↓12+29
Комментарии71

Вышел движок MediaWiki 1.17. Моё расширение, подменяющее jQuery, по-прежнему работоспособно в нём. Но в будущем (для MediaWiki 1.18) появится более элегантное решение. 

Время на прочтение3 мин
Количество просмотров1.2K
22 июня 2011 года Фондом Викимедиа выпущена в свет очередная стабильная версия движка MediaWiki — версия 1.17. Соответствующую новость на английском языке вы без труда найдёте в рассылке mediawiki-announce, снабжённую гиперссылками на подробный список изменений и инструкции по апгрейду.

Одной из основных (и даже ключевых) новостей этой версии стало появление и внедрение уникального движка ResourceLoader, целью которого является автоматическая сборка «ресурсов» (конгломератов джаваскрипта и CSS, из которых собирается один общий файл CSS и один общий файл джаваскриптов) с учётом их взаимной зависимости (например, jQuery UI зависит от jQuery) и с последующей минификацией. Два ресурса, содержащие служебные скрипты MediaWiki и библиотеку jQuery 1.4.2, подключаются автоматически в любом случае.

Те из вас, кто хочет использовать более новую версию jQuery, по-прежнему могут для этого воспользоваться тем моим способом и расширением, о котором я рассказывал 12 дней назад вот в этом же блоге. Как ни странно, мне не пришлось переменить ни буквы в его коде PHP для обеспечения работоспособности в MediaWiki 1.17 — это приятная удача, несмотря на то, что (в силу сложности ResourceLoader) прежняя возможность несложно «выкусить» вызов библиотеки jQuery, встроенной в MediaWiki, исчезла совершенно. Так что теперь моё расширение «побеждает» всего лишь потому, что вставляет вызов новой jQuery чуть раньше, чем ResourceLoader начинает грузить старую. По-видимому, библиотека jQuery 1.4.2 достаточно разумна для того, чтобы не подменять новую версию себя самóй. Однако печально, что теперь (в отличие от 1.16) моё расширение не позволяет загрузить одну версию jQuery (свою) вместо другой (встроенной в движок): в 1.17 они грузятся совместно, что неэкономно.

Читать дальше →
Всего голосов 17: ↑4 и ↓13-9
Комментарии0

C#: обратная совместимость и перегрузки

Время на прочтение8 мин
Количество просмотров10K
Здравствуйте, коллеги!

Напоминаем всем, что у нас вышла отличная книга Марка Прайса "C# 7 и .NET Core. Кросс-платформенная разработка для профессионалов". Обратите внимание: перед вами уже третье издание, первое издание было написано по версии 6.0 и на русском языке не выходило, а 3-е издание вышло в оригинале в ноябре 2017 года и охватывает версию 7.1.


После выхода такого компендиума, который прошел отдельную научную редактуру для проверки обратной совместимости и прочей корректности изложенного материала, мы решили перевести интересную статью Джона Скита о том, какие известные и малоизвестные сложности с обратной совместимостью могут возникать в языке C#. Приятного чтения.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии5