58 заметок с тегом

картостили

Внезапная топо-карта

На глагне новый слой карт — впервые с января 2021 (когда туда добавили CyclOSM). Он называется Tracestrack Topo, выглядит контрастнее и чище на близких масштабах, но топорно на z11 и дальше, где протекают его истоки из OSM Carto и OpenTopoMap. Из всех стилей на osm.org этот приятнее для глаз и удобнее, если планируешь поход. И он очень быстрый: три сервера для рендеринга и ещё пять кэширующих!

Откуда он взялся — загадка. Для начала, не было ни предупреждений, ни объявлений. Он просто появился. Слоя нет в списке предложений на вики — автор добавлял его в декабре и сразу удалил, а с мая Пол Норман вообще очистил все предложения и попросил писать напрямую OWG. Которая не публикует протоколы совещаний с января. Совет OSMF здесь ничего не решал. Короче, процессы в OpenStreetMap понемногу закрываются, в основном из-за непрозрачного OWG.

Автор — Qing Cai из Нидерландов. Это примерно всё, что можно узнать о нём и его компании Tracestrack из одного человека. Публичная история примерно такая:

  • 2015—2019 — интересовался записью и отображением GPS-треков, о чём написал пару постов в Medium.
  • 2020 — пришёл в OpenStreetMap и начал картировать Китай и улучшать страницы по нему в OSM Wiki.
  • 2021 — создал картостиль для своего приложения на базе OSM Carto.
  • 2022 — зарегистрировал компанию Tracetrack для продажи тайлов и сфокусировался на ней.
  • 2023 — открыл исходники TracesMap, как сообщил WeeklyOSM, а теперь ещё и добавил свой слой на osm.org.

Это довольно вдохновляющая история — не каждая компания может позволить себе достаточно серверов, чтобы справиться с нагрузкой от глагне! И слой на osm.org — лишь вершина айсберга. Если всмотреться в демонстрационный сайт, он собран из нескольких растровых и векторных слоёв: заменяемой подложки и надписей (выбор из 21 языка), плюс дополнительные слои типа велотрасс или машрутов общественного транспорта. Похоже на то, с чем мы экспериментировали лет десять назад, но, как видно, работает!

6 мес   osm.org   картостили

Микромаппинг улиц

Photo by Dario Ayala /Montreal Gazette

Как вы знаете, линии highway в осме нужно нещадно резать. Изменилось количество полос? Остановка запрещена? Пунктирная разделительная сменилась сплошной? Появилась стрелочка «прямо или направо»? Началось место для парковки? Режем и расставляем теги.

Когда я год назад уточнял по панорамам улицы в своём районе, я быстро наткнулся на проблемы такого подхода. Например, parking:lane:*:capacity — количество мест. Звучит разумно, пока с другой стороны дороги не меняются полосы, и дорогу не нужно разбивать прямо по парковке. И пересчитывать capacity. А если на улице ещё есть велополоса, то микромаппинг становится совсем изнурительным.

Об этом в 2019 году писала Эмили из команды SharedStreets. Они занимались картированием условий вдоль тротуаров: разрешений на остановку и стоянку, мест для разгрузки, и тому подобного. В Северной Америке любят понаставить знаков — и наслаивающиеся теги ограничений на линиях улиц начинают угрожающе трещать. Страшно двигать точки, того и гляди, сломаешь.

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

Увы, предложенный в статье тег никак не продвигали, и taginfo не может найти ни одного примера. Кто знает — идея разделить геометрию и атрибутику не так плоха. Может быть, мы бы и запреты обгона бы сейчас картировали через расположение знаков, а точек traffic_sign=city_limit хватило бы для неявного ограничения скорости в населённых пунктах.

Резать незачем

Год назад Алексу Сайделу (Supaplex030 в осме) понадобилось посчитать парковочные места в берлинском районе Нойкёльне. Для этого он разметил его весь (по снимкам, конечно) тегами parking:lane=*. Обработав данные в QGIS и посчитав отношение количества мест к зарегистрированным автомобилям, он сделал наглядную картинку. Для нас же важно то, как именно он рисовал эти места.

Он не отлавливал знаки на панорамах и не отмерял метры, чтобы поставить теги ровно на нужные отрезки дорог. Он не добавлял числа в capacity. Если посмотреть на район в OSM, удивляет, что свойства парковок стоят на целиковых отрезках от перекрёстка до перекрёстка. Алекс же в своём скрипте предобработки вырезает пять метров до перекрёстков, 15 м до автобусных остановок и прочие препятствия, а затем считает, сколько машин поместится с выбранным видом парковки (например, перпендикулярным).

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

Не остановиться

Почуствовав мощь предобработки и похожесть отрисованной карты на спутниковый снимок, Алекс продолжил. Как правильно показать велодорожки? Можно связать их с улицей через cycleway=lane и дополнительно описать в тегах bicycle:lanes и предложенном cycleway:separation. Несложно нарисовать стрелочки на полосах из значений turn:lanes.

Где этому предел? OpenStreetMap бесконечно глубок: можно мапить люки и уличные фонари. Автор выгреб из тегов и геометрии почти всё возможное. Особенно впечатлило, как он рисовал полосы вокруг островков безопасности: две линии проезжих частей превращал в один визуальный объект. А сам островок детально отрисовывал полигоном traffic_calming=island.

И это, конечно, микромапинг. Для нужного уровня детализации он оказался неизбежен. Всплыли и полигоны area:highway, которые не совсем про картографию. С их помощью отрисовываются стоп-линии на перекрёстках. А машинки вдоль дорог примыкают к поребрикам barrier=kerb. На эти линии предобработка полагается во многом — но, например, когда я вижу их в Москве, я вздыхаю и предпочитаю не смотреть. Ведь абсолютная практическая точность данных OSM не ниже полуметра и сопоставлять поребрики с другими объектами, часто нарисованными по разным источникам, больно.

Превосходство предобработки

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

Обработав OSM и наложив сверху немного местных открытых данных, Дастин Карлино сделал гениальный инструмент для дорожного планирования, симулятор трафика A/B Street. Машинки и велосипедисты ездят по правильным полосам, создают пробки, паркуются где надо. Даже и не скажешь, что это та же карта, что и у Mapbox, где одна линия на экране для дороги — уже достижение. Про A/B Street автор рассказал на SotM 2021, в том числе и про главную его проблему — отсутствие пользователей.

Когда в Maps.Me мне предложили вытащить из OSM данные для прокладки маршрутов через метро, я понимал невозможность задачи. Но формализация правил плюс предобработка — и навигация в двухстах городах у нас в кармане. Следующим шагом была бы навигация по остальному общественному транспорту, но я слишком выгорел, чтобы выдвинуть на голосование универсальную транспортную схему.

Профессиональное использование OpenStreetMap — это не только знание тегов и региональных особенностей. Это и умение правильно спланировать работу с данными, чтобы не нагрузить ни картографов, ни тайловый сервер. Предобработка — именно то волшебство, которое возносит данные OSM над коммерческими. Мы много говорим, что наша модель данных лучше других свободой в тегировании. Эта свобода требует знаний, алгоритмов и вычислительных ресурсов. Сложно. Но лучше несвободы.

 1 комментарий   2022   картостили   проекты   теги

Не только карта улиц, и не слишком открытая

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

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

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

Сложно представить человека, который рассматривает карту в навигаторе. Она не предназначена для долгого взгляда. Главное на экране — синяя лента маршрута, чуть менее важны все остальные дороги слева и справа по ходу движения. Остальные элементы неинтересны, потому что по ним нельзя ехать. Хорошо бы их убрать или затенить, чтобы не отвлекать водителя. Мобильная карта — карта для автомобилиста, это карта улиц.

Настольные карты тоже стремятся к утилитарности мобильных. Открой гугль — там белые дороги на светлом фоне, зато экран усыпан яркими булавками заведений: «кликни меня!» Карты яндекса красивее: дома, дворовые проезды, тропинки и велодорожки. Вроде как пёстро и интересно, но пяти минут достаточно, чтобы понять: эта карта тоже только для одной задачи: «проложи маршрут!» Невозможно уделять таким картам время, с ними нужно решить задачу и уйти.

Мне с детства нравится рассматривать карты. Следить за линиями и обозначениями и находить взаимосвязи. Но рассматривание карты ушло в прошлое вместе с атласами. Теперь печатные карты — лишь историческая ценность. Две коробки моего картографического архива спрятаны где-то в шкафу, толстые красивые атласы пылятся под потолком, карты из спинки автомобильного сиденья я не доставал лет пять. Всё устарело, стимула покупать новое нет: там то же самое, только на свежих данных.

Каждый год на конференциях State of the Map и FOSS4G устраивают конкурс плакатов. Кажется, вот оно: стой и рассматривай. Задерживаюсь у каждого на несколько минут — но это же не карты. Это либо исследовательские работы, поданные в форме плаката, с горой текста, несколькими графиками и парой простых обзорных карт. Либо художественные работы, которые не сколько рассматриваешь, сколько воспринимаешь. Да, встречаются красивые, «Pop Art» когда-то я утянул домой и не жалею об этом. Но карты — красивые, глубокие карты больше не вешают. Карта стала утилитарна; если она не выполняет предназначение, она не нужна.

Любопытные глаза теперь рассматривают спутниковые снимки. Присматриваются к контурам домов, прослеживают грунтовку через поля и леса. Находят правильные контуры военных объектов или деревню в глуши. Что это за пятно? Кто здесь живёт? Когда на одну точку есть шесть разных снимков, интересно их сравнить, посмотреть, как застраивался город или меняла русло речка. Снимки бесконечны как вширь, так и вглубь: всегда есть интересный район или история, которую открывают две спутниковые фотографии, разделённые десятилетием.

Для таких любопытных была сделана викимапия: люди просто подписывали все объекты на снимках, чтобы другие получили ответ на «а что здесь такое?» Подписывали без разбора, дом так же, как озеро, как военную часть или тропинку через лес. Оставляли комментарии: «о, я тут рыбу ловила, пока не заросло». Викимапия была уникальным проектом для любопытных — пока авторы проекта не забыли, кто к ним ходит, и не угробили проект рекламой и смещением фокуса на картографию.

Казалось, вот два очевидных решения: люди смотрят на карточки — баннер же не помешает? И обвесили рекламой всё по периметру и немного внутри, чтобы пользоваться сайтом без адблока стало противно. И второе, наши редакторы же обводят снимки, а тут один шаг до классификации, чтобы получилась карта. Сделали — офигеть, карта начинает получаться, люди трассируют дороги и обводят населённые пункты. Вот только эти люди перестали уделять время тому, чем сайт был полезен: подписывать снимки, описывать спрятанные чудеса. Теперь они зачем-то дублируют работу, которую делают пользователи НЯК, OSM, Here. Делают недо-карту. Викимапия из уникального источника превратилась в никому не нужное подобие. Теперь на неё заходишь из жалости.

Рассматривать викимапию неприятно, а карты гугля, яндекса и подобных — бессмысленно. Атласы ушли в прошлое, а на спутниковых снимках можно что-то различить, но не понять. Получается, рассматривать нечего? Напротив: ответ был перед нами все пятнадцать лет.

Это OpenStreetMap. В отсутствие альтернатив OpenStreetMap стал главным атласом для рассматривания. Откроешь глагне  — и залипнуть в карту можно надолго. Не только дороги и дома: тропинки, болота, фонтаны и места для пикника. Именно поэтому когда-то люди возмущались, что railway=abandoned убирают со стандартного стиля: да, эти линии обозначают снятые рельсы, это не-объекты. Но когда смотришь на карту, они многое рассказывают об истории. Объясняют, почему там просека или тропинка. Интересная карта рассказывает историю, и сотни тысяч редакторов своими кусочками историй превращают OpenStreetMap в величайшую сказку на земле.

Опытные участники знают, что наша карта внутри гораздо больше, чем снаружи. Модель данных OSM со свободными форматами и бесконечными схемами тегирования подталкивает редакторов к слишком детальному картированию. Они указывают номера квартир в подъездах, виды деревьев в парке и напряжение в ЛЭП. Загружая кусочек города в JOSM, никогда не знаешь, какие мелочи заинтересовали местного картографа. То дороги окажутся усыпаны пожарными гидрантами, а то придётся ворочаться промеж отрисованных поребриков.

Карта богата внутри, но увидеть это богатство непросто. Раньше был набор из нескольких десятков визуализаций Ito Map: они показывали ограничения скорости, колеи железных дорог, освещённость, адресацию и кучу других атрибутов. К сожалению, в июле этот проект закрыли. У нас остались несколько тематических проектов типа OpenRailwayMap и Parking Lanes. Проблема с ними в том, что их не найти. Ссылки рассыпаны по случайным страницам нашей вики, сайты включаются и выключаются в произвольные моменты времени. Они не столько углубляют представление об OpenStreetMap, сколько бросают: «а вот ещё какая штучка у нас есть». Вместо единой шкатулки драгоценностей получилась сеть музеев одной брошки.

OpenStreetMap сродни карьеру, полному смыслов и геоданных. Чтобы в него углубиться, картостилей недостаточно, нужны более точные инструменты. Такие как Taginfo и Overpass API. Нашли интересный тег — запустили запрос, чтобы выкопать подобные объекты в своём районе — раскрасили и сделали себе тематическую карту. Подождали, пока лимит на плотность запросов отпустит, и продолжили раскопки. Скачали GeoJSON или подкрутили карту в редакторе. Очень увлекательно, это как править «матрицу», смотря на стекающие зелёные буковки. Только Level0 не хватает для комплекта. Думаю, лишь 400-500 человек на весь мир умеют смотреть так глубоко.

Нормальные люди приходят на наш сайт и рассматривают картостиль OSM Carto. Они не знают о «подводной части» базы данных — а ведь в ней самое интересное. Мы уже победили всех остальных по глубине карты, по её залипательности. Но чтобы усилить эффект, нужно что-то делать. Одно из двух. Либо, подобно немецкой глагне, заменить карту стеной текста со ссылками. Правда, с нашим мастерством принятия решений за результат может быть стыдно: вывесят туда ссылки на вики, на форум и на планету. Разбирайтесь, мол, сами. Второй выход — заменить тайлы в карте векторными.

Любой картографический стиль делит классы объектов на карте надвое: те, что он отображает и те, что прячет. Это нормально: чем продуманнее картостиль, тем короче его легенда. И это свойственно печатным картам. Но у нас на сайте интерактивная карта с бесконечным количеством атрибутов. Глупо отображать для всех одно и то же, по-барски позволяя включить аж четыре других стиля. Сколько атрибутов — столько картостилей. Нас спасут только векторные тайлы. Каждый посетитель должен получать свой собственный срез данных, чтобы посмотреть и офигеть от разнообразия. Мы обсуждали этот подход во время прошлого State of the Map, но, кажется, никто не понимает, что нужно делать.

Карта OpenStreetMap — это не картинка, которую можно рассматривать только вширь. Это калейдоскоп: покрути фильтры — и рассматривай заново, потому что открываются новые слои и новые взаимосвязи. Такое невозможно даже представить в коммерческой или печатной картографии, но мы, редакторы открытой карты, настолько привыкли к многогранной и запутанной модели данных, что даже не задумываемся, насколько уникальна и завораживающа наша карта. Мы пользуемся специальными инструментами, чтобы рассматривать грани, — а хорошо бы рассматривать их невооружённым взглядом.

Улиц недостаточно. Пробки сиюминутны и потому не нужны. Важна общая картина. Карта обучает, просвещает, помогает найти себя в мире. Проект OpenStreetMap способен рассказать о твоём городе или маршруте столько, сколько не снилось атласам. Осталось придумать, как разрушить статус-кво с картостилями и недо-векторными тайлами от Mapbox. Мы можем сделать лучше. Карта должна быть свободной.

Адаптивные карты

Во время конференции YaC я восхитился примером адаптивных карт от яндекса, и читатели телеграма спросили, что это такое. Если коротко, это карты, которые адаптируются к контексту. Загвоздка в том, что под этим понимают и как нас ограничивают технологии. В публичной картографии две догмы:

  • равноугольная проекция и отсутствие искажений: проекция меркатора мгновенно считывается как ошибка, а фрагмент всегда может быть встроен в полную карту;
  • неизменность слоёв: если на карте видно кафе, то на ней будут все кафе, если видна улица — будут все улицы.

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

От этих ограничений много веков назад ушла инфографика: показывать статистику по регионам неудобно, когда Красноярский край в тысячу раз больше Санкт-Петербурга. Поэтому регионы показывают одинаковыми кубиками. С другой стороны, площадь и расстояние — тоже индикаторы, отсюда популярность в визуализациях уродливых картограмм (правильнее — анаморфоз, подсказывают в комментариях), где нашу страну сжимают в длинную кляксу. Интерактивной инфографике до такого кощунства ещё далеко, она ограничена теми же догмами.

Печатные карты часто искажают, адаптируя для человека. Очевидный пример — атлас трассы М10, где она вытянута в идеально прямую линию, или нарисованные от руки схемы проезда. Что люди создают инстинктивно, алгоритмы едва могут воспроизвести: в 2010 году исследователи из Microsoft, Adobe и колледжа Беркли опубликовали статью про автоматическую генерацию схем проезда (открывающая иллюстрация — из неё). Важность этой публикации затмевает только безразличие, с которым к нему отнеслись все картографы. Печать карты маршрута сейчас — всё ещё печать фрагмента привычной карты с подсвеченными линиями.

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

Контекстом в публичной картографии является viewport, окно вывода. Экран мобильного устройства или прямоугольник на веб-странице. «Контекстный поиск» — поиск в окне. И так далее. Поэтому когда Миша Высоковский начал рассказывать о новых функциях яндекс-навигатора, он использовал термин длиннее: «гиперконтекстность». Это отображение карты с учётом контекста, включающего не только состояние, но и намерения пользователя. И это — будущее карт.

На фрагментах слайдов выше отображены только те заведения, которые находятся на поворотах линии маршрута и могут помочь водителю сориентироваться. А на развязке справа подсвечены все выезды из него, а не только стрелка по нужному выезду. Так водитель лучше поймёт, куда не надо сворачивать. Всё это изменяет привычную карту и использует контекст, адаптируется к задачам пользователя. На слайдах мы увидели лучшую адаптивную карту и, кажется, первую в публичном приложении, доступном миллионам пользователей.

Такую карту не покажешь в виде тайлов на веб-сайте. Её с трудом можно сотворить в QGIS. Но теперь у нас есть векторные тайлы, которые содержат атрибутированную геометрию. Фильтровать их с учётом контекста, подсвечивать и искажать можно прямо на мобильном устройстве, учитывая показания разных датчиков. Будет увлекательно посмотреть, как сильно изменятся навигационные карты в погоне за максимальной информативностью для пользователя. Хорошо, что Яндекс сделал заметные шаги в направлении адаптивных карт, но хочется, чтобы потребители OpenStreetMap перехватили инициативу.

 2 комментария   2018   mobile   картостили   не про нас

Стиль бледный

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

Но не всё так просто, разумеется. Бледный стиль получается, когда дизайнеры перестают выбирать цвета и отображаемые элементы по наитию и подходят к стилю системно, определив задачи. Меньше цветов — легче выделить важные элементы, вроде парковок или заведений. Среди дорог достаточно различать главные и неглавные, а маршрут всё равно покажет линия. Тёмная заливка явно мешала замечать подписи.

Те же претензии, что появились у меня к новому стилю Mapbox, высказывали относительно стиля MAPS.ME, великолепно переделанного командой «Урбики». И действительно, в сравнении с феерверком цветов новые дороги выглядели бледновато. Но выкатить стиль — это половина работы, и «Урбика» потом ещё полгода дорабатывала цвета и линии по комментариям: чуть больше контрастности, чуть иные размеры.

У нового стиля навигации Mapbox много заметных проблем. Например, по исследованиям, текст легче читается не на белом, а на чуть менее контрастном фоне. А ночной стиль стал слишком ярким: на картинке в блоге выглядит красиво, но в машине ночью я бы предпочёл едва различимые дороги, как слева. Но раз навигационный стиль стал из обрубка презентационного стал самостоятельным, дизайнеры, я уверен, сгладят все проблемы по отзывам пользователей своего API.

Обледнение стиля свойственно всем веб-картам, от Google и Here до «Космоснимков» и OpenStreetMap. Кричащие цвета не помогают в использовании карты совместно с другими геоданными: маркерами, линиями, тепловыми картами. Переход от ярких дорог и выделяющихся точек заведений к белым линиям и унифицированным иконкам сродни смене высказывания «Смотрите! У нас дороги! И POI!» на «вот вам однородная карта, готовая к любым применениям». Другими словами, чем менее кричаще, более бледно выглядит карта, тем она взрослее и серьёзнее.

На этой иллюстрации вы видите самый взрослый стиль на основе OpenStreetMap в мире (если не считать MapSurfer Gray). Он красивый и не помешает ничему, что вы наложите поверх. Разумеется, это странный способ оценивать стили: цветовая гамма и количество элементов не являются мерилом качества.

Дизайн картостиля — это непрерывная работа по отделению важного от второстепенного. Медитирование над палитрой. Чтобы красиво, но неброско. Информативно, но не перегруженно. Привычно, но не копия. И поверх всего — задача для стиля, без которой не стоит даже начинать (но все начинают). Рано или поздно задача меняется или просто утверждается, и карта меняет вид. Это нормально и всегда к лучшему. Без задачи невозможно осмысленное улучшение, а с задачей... Ну да, получается бледно.

2018   картостили
Ранее Ctrl + ↓

Мнения, высказанные на этом сайте, отражают точку зрения лично автора сайта и ничью больше: ни его бывших или настоящих работодателей, ни семьи и знакомых.