ISO 3166-1
ISO 3166-1 — это такой глобальный справочник, в котором серьёзные дяди в дорогих костюмах, заседающие в Женеве, пытаются натянуть сову реальной геополитической карты мира на глобус сухих компьютерных стандартов, присваивая каждому клочку суши, возомнившему себя государством, уникальный идентификатор. Если вы думали, что страна — это гимн, флаг и армия, то вы безнадёжно отстали от жизни, ибо в цифровом концлагере двадцать первого века страна существует только тогда, когда ей присвоили двухбуквенный, трёхбуквенный или цифровой код в этом самом стандарте, а до тех пор ты можешь хоть обвешаться флагами и объявить войну США, но для базы данных Oracle ты будешь всего лишь null pointer exception.
Сакральный смысл[править]
Давным-давно, когда компьютеры были большими, а программы писались на перфокартах, люди жили в счастливом неведении и называли страны как бог на душу положит. Германия была Германией, Дойчландом, Алеманией или Неметчиной, и всем было похуй. Почтальоны страдали, логисты пили горькую, а дипломаты строчили ноты протеста, потому что письмо, отправленное в Republic of China, могло улететь как в Тайвань, так и в коммунистический Китай, в зависимости от политических взглядов сортировщика на почте. В этот момент на сцену выходит ISO — организация, чья цель существования заключается в том, чтобы сделать мир квадратным, перпендикулярным и пронумерованным. Они решили, что хватит терпеть этот лингвистический бардак, и постановили, что каждой территории нужно выдать бирку, как корове в стойле, чтобы любой индусский код, написанный за миску риса, мог однозначно понять, куда слать контейнер с резиновыми изделиями номер два.
Стандарт ISO 3166-1 родился в муках в 1974 году, и с тех пор он является тем самым фундаментом, на котором держится вся мировая логистика, интернет, банковские переводы SWIFT и даже твоя возможность заказать чехол для айфона с AliExpress. Суть его проста до безобразия, но реализация сложна, как квантовая механика для гуманитария. Идея в том, чтобы взять название страны на английском или французском (потому что ISO сидит в Швейцарии, и они там все полиглоты), и превратить его в уникальный набор символов. Казалось бы, чего проще? Но тут в дело вступает политика, история и человеческая тупость.
Три лика дьявола[править]
Этот стандарт не един, он трилик, как Брахма, Вишну и Шива, только вместо созидания и разрушения они занимаются кодированием. У нас есть двухбуквенные коды, которые знает каждый школьник, потому что они стали основой для доменов интернета типа ru, us или de. Это самый попсовый слой стандарта, его лицо, его витрина. Но за этим фасадом скрывается трёхбуквенный монстр, который нужен тем, кому двух букв мало, и кто хочет чувствовать себя важным, например, машиночитаемые зоны в загранпаспортах, где места дофига и можно не экономить. И, наконец, есть цифровой код — самое днище, придуманное ООН для тех систем, которые вообще не понимают букв или где есть проблемы с кодировками, потому что цифры арабские, они и в Африке цифры, и никакой Unicode их не испортит.
Вся эта система работает как швейцарские часы, пока в нее не попадает песок реальности. Например, Великобритания. О, эти островные снобы! В стандарте они записаны как United Kingdom, поэтому им дали код GB (от Great Britain), что уже вызывает вопросы у жителей Северной Ирландии, но всем плевать. При этом в интернете они захватили домен .uk, который в стандарте вообще-то зарезервирован, но не назначен официально. Это создает лютую путаницу, когда программист пишет парсер и не знает, мапить ему GB на UK или сразу застрелиться. Или взять Францию, которая получила код FR. Просто, лаконично, со вкусом. Но у Франции есть куча ошметков империи по всему миру, и каждый из них хочет свой код, поэтому в стандарте есть отдельные записи для Гваделупы, Реюньона и прочих островов, где кроме пальм и французских жандармов ничего нет.
Я не знаю, где находится Буркина-Фасо, но если у них нет кода в базе данных, то для нашей биллинговой системы этой страны не существует, и мы не можем списать с них деньги за подписку на порно.
Геополитический цирк[править]
Самое вкусное в ISO 3166-1 — это то, как он отражает политические срачи. Стандарт заявляет, что он вне политики, но это такая же ложь, как фраза я только спросить в очереди в поликлинику. Источником истины для ISO является ООН. Если вы есть в списках ООН — вы получаете код. Если вас нет — идите лесом.
Вот, например, Тайвань. Это жирная, развитая, технологичная страна, которая делает половину электроники мира. Но КНР считает их своей провинцией. Поэтому в стандарте Тайвань записан с унизительной припиской Taiwan, Province of China. Тайваньцы бесятся, шлют петиции, но бюрократы из ISO разводят руками и кивают на ООН. В итоге программисты по всему миру вынуждены писать специальные костыли, чтобы в выпадающем списке на сайте показывать просто Taiwan, иначе можно потерять рынок, но в базе данных хранить это как TW, чтобы не нарушать стандарт. Двойные стандарты в действии.
Или Палестина. Долгое время они висели в статусе Occupied Palestinian Territory, что как бы намекало. Потом им дали статус State of Palestine, и код PS. Израиль (IL) скрипит зубами, но поделать ничего не может, потому что буквы в алфавите общие. А вот Косово — это вообще песня. Страна вроде как есть, ее признала куча народу, но в ООН их не пускают (спасибо России и Китаю). Поэтому официального кода у Косово НЕТ. Вообще. Пустота. Но банкам нужно переводить туда деньги, таможне нужно оформлять грузы. И что делает мир? Мир использует User-assigned коды, которые начинаются на букву X. Обычно это XKX. Это такой костыль, типа мы знаем, что вы есть, но официально мы этого не признаем, поэтому вот вам временный номерок, постойте в коридоре.
А что происходит, когда страна исчезает? Это отдельная драма. Был СССР. У него был великий и могучий код SU. Потом Союз нерушимый распался на 15 кусков. Код SU должен был умереть. Его торжественно похоронили, перенесли в специальный стандарт-кладбище ISO 3166-3. Но! Интернету похуй на смерть государств. Домен .su до сих пор жив, в нем сидят киберпреступники, ностальгирующие коммунисты и просто фрики. ISO требует удалить, ICANN мнётся, а домен живёт как зомби, напоминая нам о том, что то, что мертво, умереть не может.
Ад для разработчика[править]
Если вы думаете, что внедрить ISO 3166-1 в свой проект — это просто скачать табличку и залить в SQL, то вы наивный летний ребёнок. Проблемы начинаются сразу. Во-первых, названия. Они меняются. Свазиленд решил, что он теперь Эсватини. Македония после многолетнего срача с Грецией стала Северной Македонией. Чехия попросила называть себя Czechia вместо Czech Republic. И каждый раз, когда какой-нибудь царек в Африке решает переименовать свою страну в честь любимой козы, вам нужно обновлять базу данных.
Во-вторых, коллизии. Знаете, какой код у Намибии? NA. А знаете, как большинство языков программирования воспринимают строку NA? Как Not Available или Null. Представьте себе лицо джуниора, который написал скрипт импорта данных, и у него внезапно исчезла целая страна, потому что Python решил, что это просто отсутствие данных.
В-третьих, макрорегионы и исключения. Есть код EU, который зарезервирован для Европейского союза, хотя это не страна. Есть код UN для ООН. Есть коды для островов, на которых живет три чайки и один метеоролог, но им нужен отдельный код, потому что это Внешние малые острова США. И ваша форма доставки должна это учитывать, иначе посылка улетит в никуда.
А еще есть проблема языков. Стандарт дает названия на английском и французском. А вам нужно на русском, китайском и суахили. И вы начинаете искать сторонние библиотеки, которые мапят коды на названия, и находите там такую дичь, что хочется плакать. Например, когда Georgia (страна Грузия) переводится как штат Джорджия, и ваши грузы вместо Тбилиси едут в Атланту. Или когда Турция (Turkey) превращается в индейку.
Вывод[править]
Это необходимое зло. Без него мир погрузился бы в хаос, где каждый называет страны как хочет, и международная торговля встала бы колом. Но это также памятник человеческой гордыне, попытка загнать живую, меняющуюся историю в прокрустово ложе ASCII-таблицы. Это мир, где государства рождаются и умирают по решению клерков, где две буквы могут стоить миллионы долларов (спросите у Тувалу, продавшего свой домен .tv телевизионщикам), и где программисты сходят с ума, пытаясь понять, почему код валюты ЮАР (ZAR) совпадает с кодом уже несуществующего Заира. Это Матрица, в которой мы живем, и у нас нет выбора, кроме как принять эти коды и надеяться, что завтра вашу страну не переименуют в честь какого-нибудь овоща, сломав продакшн во всем мире.