Ссылки о веб-разработке за октябрь 2022

JavaScript metaprogramming with the 2022-03 decorators API

This blog post covers the ECMAScript proposal “Decorators by Daniel Ehrenberg and Chris Garrett in its 2022-03 version (stage 3).

A decorator is a function func that we can apply to classes and members of classes (such as methods) by putting @func before them. We will explore how decorators work and look at many examples.

Knip: Find Unused Files, Dependencies and Exports in TypeScript Projects

— Knip’s creator tells us it’s Dutch for “cut” which is quite appropriate as it’s a new tool for trimming away things that aren’t being used in your project. If you just want to compare it to similar existing tools, there’s a handy comparison chart.

Making React Fast by Default with Legend-State

— “React renders too much, too often” kicks this off, before working through a series of steps toward the goal of getting “React to render only once”. The result is a state manager that digs deep into React’s internals — but you might appreciate their fresh take on things. GitHub repo.

Заблуждения программистов об адресах

У всех легковых автомобилей четыре колеса. Исключение из этого правила: Reliant Robin.

Если у автомобиля больше четырёх колёс, то это грузовик, автобус или вообще автопоезд. Исключение найдётся и здесь: Mercedes-AMG G 63 6x6.

Попытка описать окружающий мир легко обнаруживает ошибки восприятия, скрытые, словно слепое пятно на сетчатке глаза. Заблуждений много. По крайней мере, на списки про имена, телефонные номера или карты хватило. Настало время адресов и почтовых систем.

Заблуждение 0. Для доставки нужны адрес и имя

В мае 2016 года издание Skessuhorn рассказало трогательную историю: семья фермеров в Хоуларе на северо-западе Исландии получила письмо, на котором не были указаны ни имена получателей, ни адрес, по которому его нужно было доставить. Письмо отправил зарубежный турист, который гостил в посёлке Хоулар и точного адреса не знал. Вместо этого на конверте было изображено местоположение получателя с кратким описанием места, вместо имени — «датчанка, которая работает в супермаркете в Будардалюре».

Адрес называл точно только страну (Исландия) и посёлок (Будардалюр). Дальше шло текстовое описание: лошадиная ферма, где живёт исландская/датская семья с тремя детьми и большим количеством овец. Письмо турист отправил из столицы Исландии, Рейкьявика.

Skessuhornið

Да, почтальону пришлось немного попотеть. И вообще, в Будардалюре живёт 266 человек, поэтому эту пару он мог знать в лицо. Журналисты же сочинили к этому милому сюжету мораль: в Исландии всё возможно — дойдёт и письмо без адреса.

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

Заблуждение 1. Адреса не меняются

Меняют названия здания, улицы, города, регионы и страны. Менее очевидно, что отдельные образования меняют принадлежность или исчезают. К примеру, графство Гвент в Уэльсе официально существовало с 1 апреля 1974 года по 1 апреля 1996, после чего было разделено на несколько округов. За 22 года на свет появилось немало людей, место рождения которых формально исчезло. Сможет ли база данных корректно справиться с такой ситуацией?

Если откроют новое почтовое отделение или иным образом преобразуют структуру почтовой службы, сменится и индекс. Да что одно отделение — поменяться может хоть вся почтовая система страны. Так произошло, например, в Японии в 1998 году, в результате чего 3- и 5-символьные индексы подогнали под единый 7-значный формат, а у почты появился собственный символ — 〒.

При этом во всех этих случаях объект никуда не переезжает. Вопрос касается исключительно интерпретации данных.

Заблуждение 2. Индекс — это цифры, которые указывают на отделение почты

Во многих странах почтовый индекс состоит из цифр и букв. Даже если индекс состоит из цифр, это не число, и ведущий ноль отбрасывать нельзя.

Индекс лишь указывает на путь доставки или группу адресов, а не географическое местоположение объекта.

Почтового индекса может не оказаться вовсе. Такое случается, если в населённом пункте мало жителей; возможно, регион недостаточно экономически развит. В «Википедии» попытались перечислить тысячи таких мест.

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

Индекса может не быть временно, при этом довольно долго. Это справедливо для того же Eircode, получение которого растягивается на несколько месяцев. Если оператор сотовой связи требует корректный адрес, остаётся только жаловаться на форумах.

Даже в обычных схемах индексации у некоторых значимых сущностей бывает собственный, личный почтовый индекс. Например, такое справедливо как для важного государственного органа — Белого дома США (20500), — так и дорогого магазина Saks Fifth Avenue в Нью-Йорке (10022-SHOE). Собственный индекс иногда дают ради пиара: талисман лесной службы Медведь Смоки получает якобы настолько много писем, что ему выделили индекс 20252.

Зоны действия почтовых индексов могут перекрывать друг друга, быть подмножествами друг друга или указывать на вымышленные сущности, не имеющие привязки к территории. К примеру, в США для отправлений для военно-морских сил указывают индекс 095, хотя фиксированного местоположения у настолько глобального флота быть не может.

Это лишь в ранней рекламе повторяют, что индекс нужен для ускорения обработки почты. Индекс не факультативен. Например, в Устьянском районе Архангельской области деревня Бережная встречается три раза — без индекса здесь никак.

Вокруг почтовых индексов много мифов, есть специфичные для отдельных стран. Например, некоторые британцы свято уверены, что для доставки достаточно указать номер дома и почтовый индекс, поскольку семь знаков указывают на конкретную улицу или вообще получателя. Такого правила нет. К примеру, 1-4 Jubilee Cottages, Warwick Road, B94 6AZ и 1-4 Cedar Cottages, Warwick Road, B94 6AZ — это разные объекты, а индекс CV12 8UE покрывает несколько улиц с различными домами с совпадающими номерами.

Королевская почта

Бывает, что адрес получателя зависит от адреса отправителя. Вся корреспонденция для Санта-Клауса в США уходит в город Норт-Пол штата Аляска, в то время как в Канаде у деда заведён собственный индекс H0H 0H0.

В России в 1971 году ввели систему шестизначных почтовых индексов, которая за полвека изменилась слабо. Уже на ближних границах, в странах бывшего СССР, встречаются радикально другие форматы, уходящие от советского наследия. Например, в Казахстане с 2015 года пишут семизначные цифро-буквенные индексы, а впервые советские индексы в стране заменили в 2004 году.

Индексы дальнего зарубежья не должны удивлять разнообразием. К примеру, почтовый индекс Великобритании — это семизначная цифробуквенная последовательность, после первых четырёх идёт пробел: SW1A 2AA. Японский индекс предваряется символом почты 〒, за которым следует 7 цифр: 〒100-8994.

Заблуждение 3. Почтовый индекс описывает место жительства

Почтовый индекс указывает не на конкретное место, а на путь доставки почты.

Обыватели ошибочно полагают, что почтовый индекс хорошо соотносится с местоположением. Исследователи утверждают, что краткосрочный съём жилья в Airbnb более популярен там, где почтовый индекс «туристичен», то есть в него попадают популярные рестораны и развлекательные заведения.

По почтовым индексам в США всерьёз пытаются вести анализ социодемографических трендов, выявлять полезные для деловой активности закономерности и просто оценивать население. Вызвано это тем, что Бюро переписи США разработало собственную статистическую сущность ZIP Code Tabulation Area, полностью совпадающую с территорией действия конкретного почтового индекса. Статистические отчёты о доходах у себя на сайте выкладывают налоговики.

Кажется логичным, что если открывать новый магазин торговой сети, то в районе того почтового индекса, где средний доход выше. На деле разница в доходах среди обладателей одного индекса может оказаться огромной — десятки, сотни тысяч долларов в год. Полагаться настолько сильно на индексы не стоит.

Да что частный бизнес — к анализу по индексам всерьёз прибегают на государственном уровне и допускают смертельно опасные ошибки. К примеру, во время первых этапов кризиса с питьевой водой во Флинте исследователи оценивали уровень свинца в крови детей. На основе этих данных нужно было выявить паттерны распространения заражённой воды. Тем не менее при анализе данных несколько разных районов города объединили вместе. Не все из обладателей одного почтового индекса получают воду из одного источника. Получилось так, что повышенные уровни свинца «разбавили» жителями незатронутых территорий.

В результате власти посчитали, что вода на здоровье детей не влияет, хотя нужно было запросить полные адреса пациентов. Не стоит полагаться на почтовые индексы.

Треть домов с почтовым индексом Флинта находится за границами города, поэтому выборку наполовину испортили. Conversation

Заблуждение 4. Мир определился с порядком написания адресов

В мире нет единства, зато много неожиданных особенностей. Принятый порядок отличается от страны к стране. Иногда он зависит даже от числа доступных строчек для записи адреса.

К примеру, в Венгрии полный адрес назначения на конверте пишется в четыре строчки:

  1. Имя получателя;
  2. Название населённого пункта;
  3. Улица и дом или номер ящика;
  4. Четырёхзначный индекс.

Если строка одна, внезапно схема меняется на порядок от верхнего уровня к нижнему: индекс, город, улица, номер здания…

Если строчек две, адресация внутри города выходит на первый план:

  1. Улица и дом или номер ящика;
  2. Индекс, название населённого пункта, страна.

Заблуждение 5. Если человек не бездомный, у него есть основной постоянный адрес

Жизнь человека — исключение из иллюзорного свода правил.

Не все живут в недвижимых зданиях на суше. Некоторые не без комфорта постоянно проживают в автодомах или плавучих домах. Плавучие объекты без мотора или полноценные судна пришвартованы, жилые автомобили и прицепы где-то припаркованы. Даже эти люди находят способы получать корреспонденцию: для них создаются специальные сервисы приёма писем или просто абонентские ящики на марине.

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

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

Два адреса бывает даже у тех, кто никуда не выезжает. Например, если родители ребёнка в разводе, детскую стоматологическую клинику попросят присылать почтовые уведомления и счета каждому из них.

Заблуждение 6. Номер дома — это натуральное число с предсказуемыми характеристиками

На деле номер дома может оказаться любой текстовой последовательностью данных. В том числе он может содержать литеры, быть дробным или отрицательным числом.

В мире много схем нумерации зданий. В Европе домам всерьёз начали присваивать номера в середине XVIII века. В 1737 году было приказано вывесить в маленьких деревнях на дома таблички с номерами за день до того, как в них войдут войска. Так пытались упростить организацию расквартирования войск.

Как правило, номер дома — это натуральное число, которое последовательно увеличивается по мере хода улицы. Наиболее знакома нам так называемая европейская система. Историки, впрочем, указывают, что при создании этой системы французы взяли американское изобретение Клемента Биддла для переписи 1790 года.

В европейской системе на одной стороне находятся дома с увеличивающимися нечётными номерами (1, 3, 5…), на другой — с чётными (2, 4, 6…). Такая система встречается в собственно Европе, США, а также на территориях и в бывших колониях европейских держав.

Хотя современные британские государственные рекомендации предполагают использование европейской схемы, в Англии и Германии встречается последовательная нумерация, где дома получали номера последовательно в порядке расположения. Это легче для нумерации, поскольку участки земли и здания бывают разной ширины. Зато теперь такие исторические казусы усложняют жизнь. Напротив дома 126 стоит, например, дом 233, что затруднит навигацию.

Автор блога Chandler’s Ford Today рассказывает, как в Британии в поисках дома 18 она прошла мимо домов 2, 4, 6, 8, 10, а после перехода переулка очутилась около дома 32. Нужный дом обнаружился лишь в этом переулке, спрятанный за проходом, который всем внешним видом показывал, что это уже не та улица. В других случаях одна и та же прямая дорога внезапно начала отсчитывать дома с единицы, поскольку улица сменила название.

Ньюбери-роуд без предупреждения или дорожных знаков переходит в Ньюбери-стрит, потому что в средневековом городе street — это внутри города, road — за его границей. Отсчёт домов вновь начинается с 1. При этом остальные дороги в городе хоть и меняют road на street, но нумерацию таким образом не сбрасывают. Chandler's Ford Today

Может ли номер быть отрицательным? В качестве исключения из правил часто приводят дом −1 по улице Прайори-роуд в городе Ньюбери в графстве Беркшир Англии. Этот дом во всех онлайновых базах данных и дополнительно над входом именуется прописью Minusone (буквально «Минусодин»), хотя на основной табличке выведено «−1». Менее известны как минимум 15 домов под номером 0, ещё шесть домов под номером −1 и один –2 (минус второй) дом — и это только в Великобритании.

Растительность вокруг дома часто скрывает табличку с номером, но на некоторых снимках в Google Street View различимы обе надписи

Как правило, если между двумя домами построили ещё один, новенький получит номер одного из соседей и какую-нибудь литеру: 3а, 2б и так далее. Но и это не является нормой. Unusually Named Blog приводит 65 британских адресов с дробным номером дома. Часть из них записаны прописью (в поле номера стоит конструкция вида 12 & A Half, Forty Seven & A Half или The Red House 32 & A Half), некоторые — в виде числа (адрес имеет вид 6.5, St Peter’s Grove, York, YO30 6AQ). Также стоящие подряд дома 75, 75A, 75A½ 75B, 75 1, 75C по улице Хай-стрит в Эрл-Шилтоне в графстве Лестершир показывают, что возможно смешение литер и дробей.

Дроби изредка добавляют меньше ½. Впрочем, дома не согласны с этой картой: два из них считают себя третьим, а здание под номером 1¼ называет себя Windsor Cottage. Unusually Named Blog

В метрической схеме нумерации дом получает номер по удалённости от выбранной точки отсчёта на одном из концов улицы. Как и в европейской системе, чётные и нечётные номера находятся по разные стороны улицы. Здесь особых неожиданностей не добавится.

Номера зданий должны быть уникальными хотя бы в пределах улиц, но никто не отменял близости двух улиц с одинаковым названием. От дома 50 по Амманфорд-роуд до дома 50 по Амманфорд-роуд шагать около шести километров — это две разных улицы в двух городках вблизи Амманфорда.

На постсоветском пространстве у некоторых домов сохраняется двойная нумерация и два названия улицы, на пересечении которых этот дом находится. Но в виде дроби номер записывается не только в России.

В Чехии действует габсбургская система конскрипционных номеров: здания пронумерованы в порядке возведения уникальным для небольшого муниципалитета номером. Дополнительно многие здания снабжены номерами для ориентации, самострой и частные дома — регистрационным номером. При этом в адресе обычно будут стоять два номера через знак дроби, иногда — один.

Табличка с номером дома в Праге. Если нужно отыскать адрес, смотреть нужно на синюю табличку, где для ориентации указано číslo orientační. На красной табличке указано číslo popisné, дескриптивный номер, который изначально был нарисован или выгравирован на здании и указывает тоже не адресата, а всё здание. Функционально красную табличку можно назвать кадастровым номером строения. Prague Now

Здания особой значимости имеют название, по которому их адресуют: Royal Opera House, Covent Garden, London, WC2E 9DD, United Kingdom — адрес Королевского театра в Ковент-Гардене. Иногда у здания бывает и специальное название, и номер: [Ziggurat Building, 60-66 Saffron Hill, London, EC1N 8QX, United Kingdom](https://goo.gl/maps/RpJdpNN5ugwCroo79). Совмещать поля названия здания и его номера нельзя.

Важно понимать, что какой бы ни была система, никаких закономерностей в нумерации может и не оказаться. Иногда номер — это просто неизвестно откуда взявшееся число. К примеру, в городе Бекклс есть дом под номером 9156, и это не плотно застроенная улица, а сельская местность с небольшим числом домов. На этой дороге других домов нет. Другой объект с «крупным» номером — 2820 в Оулс-Грине, деревушке на 20 домов.

Дом 58 находится между домами 40 и 50. Nesta

Если номер дома — число, его всё равно нужно обрабатывать как строку. От номера нельзя отбрасывать ведущие нули. Например, в городе Электростали на проспекте Ленина находятся два разных дома 4 и 04, а в доме 101 Alma St, Palo Alto, CA 94301 квартиры 1 и 001 расположены на разных этажах.

Заблуждение 7. Все адреса следуют одной и той же структуре

В некоторых странах или в специальных случаях под адресом понимается особая последовательность символов.

Легко предположить, что город не нужно указывать для городов-государств, но в Сингапуре адрес выглядит ещё более необычно. Это государство, как и Ирландия, приняло в 1996 году систему, сопоставляющую каждый адрес с уникальным кодом.

Неплохо бы указать получателя, номер дома и улицу, но вообще строка 238801 или, для международных отправлений, Singapore 238801 точно укажет, куда доставить письмо.

Флекс необычным адресом в виде Eircode и успешной доставкой на адрес в Ирландии. O'Dea

Сложно воспринимать адреса Монголии. Поскольку многие поселения кочевые, устоявшейся системы адресации не было до 2016 года. Тогда страна переключилась на проприетарную систему What3words, которая разбивает поверхность Земли на квадраты 3×3 метра и кодирует их положение комбинацией 3 слов.

Общество может быть высокоурбанизированным, а система адресации — строгой и развитой, но полностью необычной для нас.

Японские адреса указывают префектуру и город, но затем идёт незнакомое для нас муниципальное деление либо на мати и районы, либо оадза, адза и коадза. Границы уровней размыты, одновременно продолжают работать несколько систем, а названия улиц почти не используются. В некоторые районы (Саппоро и Киото) сохраняют свои особенности деления.

Ни с кем не советуются по поводу своей системы адресов военные — наоборот, выдвигают собственные требования. Почта США прямо просит не указывать страну и город, в которой находится адресат, чтобы письмо не ушло по ошибке почтовой службе этой страны. Вместо этого в адресе будут почтовый индекс, идентификатор того, что письмо для военных (например, аббревиатура APO, Army Post Office), абонентский ящик и номер отделения/центра обработки почты/корабля.

Заблуждение 8. Если адрес знакомой нам системы, там обязательно будут дом и улица

Отсутствовать могут улица, указание дома или вообще любая из комбинаций этих компонентов.

Иногда адрес указывают в виде номера километра на дороге. Обычно это относится к ферме в глуши, где для адреса больше не за что зацепиться. Случается подобное и в более урбанизированных регионах. К примеру, кинотеатр Carribena Cimaas в городе Аресибо в Пуэрто-Рико расположен на 81 километре шоссе #2. В городе, о котором идёт речь, живёт более 80 тысяч человек.

В России дома без улицы часты в небольших посёлках. Далеко не факт, что каждая система разберётся, что улицы просто нет. Вместо «дер. Ескино, д. 1» некоторые укажут название деревни рядом с домом так, будто это улица. Отсутствовать может не только улица, но и номер дома — только название населённого пункта, микрорайон и корпус: [Звенигород, Супонево, корпус 1](https://yandex.ru/maps/-/CCUZEDrbPA).

Адрес у объекта недвижимости появляется не автоматически — его нужно получить, например, на «Госуслугах» в запросе к органу местного самооуправления. Иногда адрес у дома теряется из-за проблем бюрократии. Если бывает недвижимость без адреса, то таковой она может оставаться неограниченно долго. В домах без адреса кто-то живёт годами. И пусть с пропиской или продажей объекта до получения адреса будут проблемы, эти люди хотят получать письма, вызывать скорую помощь и вообще ни в чём себе не отказывать.

Заблуждение 9. Адрес не содержит непристойностей

Сайт Vaguely Rude Places («Слегка грубые места») собрал десятки примеров по всему глобусу. В Росии, например, есть деревня Вагина в Тюменской области.

Заблуждение 10. Один топоним — один объект

Ожидаемо, что в одном городе могут быть две улицы с одинаковым или схожим названием. Легко даже предугадать, что подобное будет в Берлине, поскольку не один десяток лет две его половины развивались независимо. Действительно, в городе 8 штук Berliner Straße.

Сложнее, когда улица одна, а названия два.

Случается, что у одной и той же дороги два названия: для движения в ту и другую сторону. Пример подобного — Хаддингтон-плейс и Элм-роу в Эдинбурге, столице Шотландии. Такие улицы бывают даже без отбойника посередине: Эшгроув-террас/Ричмонд-террас и другая подобная пара Кэмбридж-террас/Оксфорд-террас. Это значит, что напротив дома 1 по улице Ричмонд-террас находится дом 1 Эшгроув-террас. Не каждая система с подобным справляется.

В другом случае на улице Квин-стрит/Гросвенор-террас (Google Maps некорректно отображает положение Гросвенор-террас) по обеим сторонам дороги находятся дома с чётными номерами без повторов.

У городов бывает несколько равноценных официальных названий. Среди остальных сложных ситуаций Гаага стоит особняком: в нидерландском языке город называют как Den Haag, так и 's-Gravenhage — да, первым символом идёт апостроф.

Заблуждение 11. Адрес небольшой, его легко распарсить простейшими инструментами

Поскольку название организации и её структуры входят в поле адреса, возможно придумать адрес произвольной длины: Department For Environment Food & Rural Affairs (D E F R A), State Veterinary Service, Animal Health Office, Hadrian House, Wavell Drive, Rosehill Industrial Estate, Carlisle, CA1 2TB, United Kingdom. Такому адресу нужно поле ввода минимум в 200 символов. Улица Bischöflich-Geistlicher-Rat-Josef-Zinnbauer-Straße в Германии требует 50 символов для записи.

Даже в рамках обработки адресов одной страны регулярные выражения будут ошибаться. Наверное, в части случаев сработает .*. Но если серьёзно, то проблемы начнутся хотя бы потому, что улица может называться Street или содержать название из двух дескрипторов (Avenue Road в Торонто или Street Road в Сомерсете).

Открытые библиотеки и модули парсинга почтовых адресов есть под многие языки: PHP, C++ и Java, Python или Go. Инструменты парсинга подразделяются на те, которые полагаются только на алгоритмы, и те, у которых есть доступ к базам данных. Данные выдают почтовые службы, иногда это лицензирование или продажа за немалые деньги. Обработка самих датасетов трудна.

К примеру, японская почта публикует огромный файл CSV со всеми индексами страны. Жалобам на формат представления данных в этом файле даже посвящён отдельный блог ken-all.hatenadiary.com. Чтобы переварить ken_all.csv в более удобный пакет posuto, понадобились усилия стороннего разработчика, победившего все сложности. Вот лишь одна из них: если название округа в этой таблице выходит за предел символов, произойдёт перенос строки. При этом остальные поля повторятся примерно подобным образом:

12345,Kyoto,Kyoto,"North Town (Up Lower Godsroad from" 12345,Kyoto,Kyoto,"the West, Down Turtle Street from the" 12345,Kyoto,Kyoto,"East, Up Old Temple Road from the" 12345,Kyoto,Kyoto,"West)"

Часто проблемы парсинга адресов берут на себя сторонние сервисы валидации, которые успешно существуют и зарабатывают на этом деньги.

Заблуждение 12. Мне (не) придётся парсить почтовый адрес

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

Делать так нельзя. Если излишне вдохновиться подобными списками и оставить одно текстовое поле для адреса, пользователи укажут там только улицу и дом, а город и индекс забудут. Лучше всего запрашивать каждый пункт напрямую.

Распарсить адрес может понадобиться сервису по типу Google Maps. Зачем это хоть кому-то ещё?

Но есть и хорошие новости: нет смысла загружать себя всем богатством особенностей, если нужно написать форму службы доставки на районе. Для развоза суши в Люберцах знать муниципальное деление Японии ни к чему. В значительной степени подобные списки заблуждений в реальной жизни бесполезны.

По материалам блога Майкла Тэнди, Unusually Named Blog, kottke.org, блога компании CARTO, обсуждений в /r/programming и Hacker News.

The 'New Wave' of JavaScript Web Frameworks

— A few months ago he covered the new wave of React state management and now Rem is back trying to “make sense of the proliferation of new Javascript web frameworks.” As are we all. Vue, Svelte, Solid, Remix, Astro and Qwik all make an appearance here.
← предыдущий месяц