Undefined parameter first что значит в гугл картах

Функции Google Maps, о которых вы могли не знать

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

Google Maps имеет очень много скрытых функций

Узнайте обо всех опасностях на маршруте следования

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

Планируйте поездки на общественном транспорте и запоминайте места

Вы можете использовать Google Maps и для того, чтобы узнать маршруты передвижения общественного транспорта. При этом сервис укажет вам номера автобусов и даже нужные ветки метро. Вы можете запланировать маршрут и нажать на кнопку в виде автобуса. Тогда Google Maps проложит вам оптимальный маршрут со всеми пересадками. Более того, вы можете установить требуемое вам время прибытия в определенное место и сервис подскажет вам, во сколько нужно выйти из дома.

Помимо этого вы можете также отмечать на карте понравившиеся вам места, достопримечательности и заведения. И при этом у вас есть возможность, скажем, устроить тур по барам в определенном районе. Google Maps самостоятельно построит вам оптимальный маршрут.

Скачивайте карты для работы в режим офлайн

Google Maps позволяет вам скачивать карты и пользоваться ими в тот момент, когда у вас нет интернета. Это довольно полезная функция и мы даже посвящали ей отдельную статью. Так что рекомендуем ознакомиться с материалом, доступном по этой ссылке.

Отправляйте маршруты на смартфон

Если вы пользуетесь Google Maps на персональном компьютере для того, чтобы найти какое-то место, а потом ищите то же самое на смартфоне, то вы просто тратите время зря. Если вы войдете в одну и ту же учетную запись Google на вашем компьютере и на смартфоне, вы сможете просто выбрать маршрут и отправить его на свой телефон прямо в интерфейсе Google Maps.

Посмотрите историю перемещений

Хотите немного заглянуть в прошлое? Откройте меню настроек (выполненное в виде трех точек, расположенных друг над другом) и выберете пункт «Хронология». Здесь вы можете перейти в любой день и увидеть, где именно вы были. При этом вы всегда можете удалить историю ваших перемещений, если нужно.

Увеличить масштаб карты гораздо проще, чем кажется

В следующий раз, когда вы хотите увеличить масштаб, просто быстро дважды коснитесь экрана. Удерживайте палец на экране после второго нажатия, а затем переместите его вниз, чтобы уменьшить масштаб. Для увеличения переместите палец вверх. Это действительно очень удобно и позволяет пользоваться картами буквально одним касанием. Кстати, если вы знаете какие-то лайфхаки, упрощающие использование Google Maps, обязательно напишите об этом в нашем чате в Телеграм.

Управляйте музыкой, не выходя из Google Maps

Google Maps позволяет вам получить доступ к вашей музыке прямо внутри картографического приложения. Поддерживаются популярные сервисы Apple Music, Google Play Music и Spotify. Чтобы включить эту функцию, перейдите в раздел «Настройки» — «Настройки навигации» и включите пункт «Управление воспроизведением мультимедиа». Теперь на активном экране навигации у вас будет значок музыки, который позволит переключать треки или ставить их на паузу.

Сохраняйте парковки

На сегодняшний день очень трудно найти парковочное место. Особенно в крупном городе. Однако если вы часто используете автомобиль, Google Maps позволяет вам запоминать расположение парковочных мест и наносить их на карту. В последствии вы можете просто выбрать нужное место из списка и направиться к нему. Для включения этой функции перейдите в «Настройки» — «Навигация», промотайте страницу в самый низ и там вы обнаружете пункт «Парковки». Включите опцию «Сохранять парковки».

Советы и хитрости для Google Maps

Советы и хитрости для Google Maps

Советы

Где мы были бы без Google Maps? Ну, мы, вероятно, будем там, где нам надо, хотя нам понадобилось бы немного больше времени на то, чтобы попасть в это место. Картографический сервис Google меняет способы наших путешествий. С помощью нескольких советов вы можете получить больше пользы от этого приложения.

Найдите популярные места в городах

Возможно, вы заметили яркие бежевые / оранжевые выделенные области на картах Google, но знаете ли вы, что это означает? На самом деле так выделяются популярные районы в городах (районы с высокой концентрацией людей). В большинстве случаев эти районы заполнены барами, ресторанами и магазинами. Это поможет вам легко отфильтровать области, которые могут быть интересными для изучения.

Советы и хитрости для Google Maps фото 1

Бежевые области в Google Maps означают, что там есть много чего интересного.

Станьте местным гидом

Google Maps показывает вам время открытия, обзоры и фотографии многих магазинов и ресторанов. Это не только официальные записи от их владельцев, но также записи от множества пользователей Google Maps. Google полагается на помощь многих добровольцев, создав программу Local Guide, чтобы поощрять ценных пользователей.

Советы и хитрости для Google Maps фото 2

Оцените магазины и рестораны в вашем регионе.

Исследуйте вашу шкалу времени

Если вы включили службы определения местоположения и используете Google Maps, Google будет знать почти обо всех ваших недавних движениях. Если вы хотите проследить ваши маршруты, ознакомьтесь с функцией «Обзор вашей шкалы времени», которая покажет вам, где вы были, и фотографии, которые вы сделали в указанном месте (если вы привязали их к геотегам и загрузили их в Google Photo).

Данные накапливаются из вашего профиля движения (который необходимо активировать – в большинстве случаев, это делается при настройке телефона), а также геотег-данных из ваших фотографий. Немного необычная фишка от Google, но, тем не менее, весьма полезная.

Советы и хитрости для Google Maps фото 3

Следы, где вы были вместе с Google Maps.

Создание / Совместное использование / Импорт списков местоположений

У вас есть друг, которому пригодились бы советы для путешествий? Если вы хотите ему помочь, вы можете создать список в Google Maps и поделиться им напрямую с вашим приятелем. Вы можете сделать так, пройдя по схеме «Мои места> Сохраненные> Новый список». Затем вы можете пометить местоположения на карте по одному и добавить их в ваш список. Когда вы закончите, вы можете отправить ссылку на список вашему другу.

Советы и хитрости для Google Maps фото 4

Делитесь местоположениями с другими людьми.

Выберите ваш режим транспорта

В Google Maps есть несколько режимов транспорта, к которым вы можете получить доступ, нажав на значок в правом нижнем углу экрана. Его внешний вид зависит от того, что в данный момент выбрано: если выбрано «Вождение», вы увидите значок автомобиля, если «Общественный транспорт», вы увидите поезд, «Частный транспорт» – такси, «Пешеход» – человека, «Езда на велосипеде» – велосипедиста. После того, как вы нажмете на значок, вы можете изменить режим, нажав соответствующий значок в верхней части экрана.

Советы и хитрости для Google Maps фото 5

«Частный транспорт» – новейший вид транспорта, который стал доступен в Google Maps.

Избегайте раздражения

На этом же экране, нажав на «Опции», вы можете выставить дополнительные критерии, например, избегать платных трасс или использовать предпочтительный вид общественного транспорта (например, поезд или автобус).

Проверка графиков общественного транспорта

Советы и хитрости для Google Maps фото 6

Google Maps знает расписание общественного транспорта для широкого спектра вариантов поездок.

Еще одна популярная функция: если вы путешествуете на общественном транспорте, Google Maps может отображать время прибытия и отбытия для различных доступных видов транспорта, а также время продолжительности любых поездок.

Сохранение данных только в режиме Wi-Fi

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

Нажмите на меню-гамбургер, откройте «Настройки», и второй вариант (если вы используете Google Maps версии 9.32 или выше) будет отображен как «Только Wi-Fi». Активируйте переключатель, чтобы Google Maps работали только при активном подключении Wi-Fi, либо используйте ранее загруженные карты в режиме офлайн.

Советы и хитрости для Google Maps фото 7

Использование только сети Wi-Fi может сэкономить вам немалый объем мобильных данных.

Планируйте заранее

Если вы собираетесь отбыть туда, где может быть слабый сигнал для пользования мобильными данными или подключиться к роумингу в стране, где доступ к нему стоит больших денег, вы можете сохранять карты для использования в офлайн-режиме, будь то район, город или штат. Просто нажмите на иконку меню в виде трех полосок в левом верхнем углу, затем нажмите на пункт «Карты офлайн» и кликните по значку «плюс» в нижней части экрана, чтобы добавить новую область карты.

Советы и хитрости для Google Maps фото 8

Будете там, где сигнал для мобильных данных может быть слабым? Сохраните вашу карту для просмотра в автономном режиме.

Поделитесь вашим текущим местоположением

В Google Maps есть очень классная функция, которая позволяет вам делиться вашим местоположением с другом или даже с группами. Если вы планируете встретиться где-нибудь, или если вы в поездке и хотите, чтобы друзья и семья знали, где вы, это отличный вариант. Чтобы поделиться вашим местоположением, все, что вам нужно сделать – зайти в меню «Карты Google> Поделиться», а затем выбрать, хотите ли вы поделиться им в течение определенного периода времени или до деактивации функции. Затем вы можете указать контакты, с которыми вы намерены поделиться вашим местоположением.

Советы и хитрости для Google Maps фото 9

Поделитесь вашим текущим местоположением с друзьями.

Поделитесь местоположением или направлениями

Схема совместного использования местоположения выглядит так: вам нужно нажать на интересующее место на карте, затем на значок в виде трех точек в правом верхнем углу, затем нажать на пункт «Поделиться». Это позволит вам делиться вашим местоположением через Bluetooth, по электронной почте или с помощью Google Drive.

Вы также можете делиться направлениями. Для этого задайте желаемую начальную точку и пункт назначения, выберите ваш вид транспорта, а затем нажмите на иконку в виде трех точек в правом верхнем углу, прежде чем нажать на надпись «Поделиться». Получатель общих направлений увидит краткое изложение инструкций, а также соответствующую ссылку. Когда ссылка будет нажата, он сможет увидеть маршруты в Google Maps, чтобы он мог начать свое передвижение. Также можно открыть маршруты в другом картографическом приложении, например Waze, или просмотреть их в интернете.

Советы и хитрости для Google Maps фото 10

Вы можете легко обмениваться конкретным местоположением или направлениями.

Сохраните важные адреса

В приложении пройдите по схеме «Меню> Ваши места» и выберите пункт «Дом» или «Работа», чтобы сохранить адреса. Это ускоряет процесс отображения маршрутов, (а также не дает простаивать мощному интеллекту Google Now и его транспортным картам).

Советы и хитрости для Google Maps фото 11

Добавление ваших домашних и рабочих адресов упрощает работу.

Используйте стикеры и ярлыки, чтобы вам было проще найти и запомнить

Вы можете использовать стикеры, чтобы определенным образом выделить ваш дом и место работы на карте. Просто нажмите на кнопку меню в виде трех полосок, затем кликните по пункту «Ваши места». Далее нажмите на три точки справа от вашего дома или работы, а затем выберите значок «Изменить». Здесь вы найдете множество стикеров на выбор.

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

Советы и хитрости для Google Maps фото 12

Стикеры выделяются на карте, добавляя ей персональности.

Опция Street View

Опция Street View для просмотра улиц не исчезла в приложении Google Maps, она просто немного изменила свое положение. Чтобы воспользоваться ею, нажмите на выбранное местоположение или найдите его. Над строкой с именем и рейтингом местоположения будет небольшое прямоугольное окно с изображением и круговой стрелкой. Нажмите на них, чтобы получить доступ к Street View.

Советы и хитрости для Google Maps фото 13

Опция Street View по-прежнему находится в Google Maps, и теперь ее легче найти, чем раньше.

Использование жестов

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

Вы также можете наклонить карту, используя два пальца: движение вверх – для большего наклона, вниз – для меньшего, плюс, можно повернуть карту, делая двумя пальцами круговое движение. Плоская карта многих городских районов станет 3D-моделью, если вы ее наклоните.

Советы и хитрости для Google Maps фото 14

Вы можете управлять увеличением и наклоном, используя жесты пальцев.

Использование Google Earth

Нажмите на кнопку «Меню» и выберите пункт Google Earth, чтобы увидеть мир в формате 3D. Как и в случае с Google Maps, вы можете перемещаться, выполнять прокрутку, изменять масштаб (сдвигая и раздвигая пальцы и делая двойные нажатия). Обратите внимание, что для этого вам нужно будет загрузить и установить приложение Google Earth.

Определение неудобных маршрутов

Одна из наших самых любимых вещей в приложении Google Maps – это способ предоставить нам информацию о траффике в режиме реального времени. Разные цветовые оттенки дают полное представление о ситуации: зеленый цвет означает отсутствие пробок, желтый – умеренные пробки, красный – сильные пробки, (в этом случае вам следует предпочесть другой маршрут или же набраться терпения). Если вышеуказанная информация не отображается, перейдите по схеме «Меню> Трафик» для активации данной опции.

Советы и хитрости для Google Maps фото 15

Использование цветовой палитры помогает определить, каких маршрутов следует избегать.

Добавление объездных маршрутов

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

Варианты пит-стопов будут отображаться вдоль вашего маршрута, наряду с указанием времени, которое займет ваш дополнительный маршрут, кроме вашего основного маршрута, поэтому вы можете выбрать наиболее удобный.

Советы и хитрости для Google Maps фото 16

Нужна остановка, чтобы заправить автомобиль или перекусить? Карты Google Maps помогут вам.

Использование голоса

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

  • включить голос;
  • отключить голос;
  • отключение звука;
  • включение звука;
  • тихий режим;
  • отключить голосовое управление;
  • показать / включить / отобразить спутник;
  • скрыть / выключить / скрыть спутник;
  • показать / включить / отобразить трафик;
  • скрыть / отключить / очистить трафик;
  • показать альтернативные маршруты;
  • показать другие маршруты;
  • как еще я могу попасть туда?
  • следующий поворот;
  • когда будет мой следующий поворот?
  • что мне делать дальше?
  • где мне повернуть?
  • где мне выйти?
  • как долго до следующего поворота?
  • какое у меня ожидаемое время прибытия?

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

Советы и хитрости для Google Maps фото 17

Управление голосом: вещь полезная, но не идеальная.

Удаление истории местоположений

Если вы предпочитаете не хранить информацию о том, что вы были там-то или где-то, вы можете удалить вашу историю местоположений. На устройстве перейдите по схеме «Настройки> Местоположение> История местоположений Google» и используйте переключатель, чтобы решить, хотите ли вы включить или выключить эту опцию. Как вариант, вы можете посмотреть в нижнюю часть экрана и нажать на иконку «Удалить историю местоположений», если вы хотите удалить всю информацию о ваших прошлых передвижениях.

Знаете какие-то другие полезные советы? Расскажите нам о них в комментариях.

7 советов по обработке undefined в JavaScript

undefined в JavaScript — настоящий кошмар начинающего фронтендера. В чём отличие undefined и null , если даже сравнение null == undefined выводит true , и как обрабатывать ошибку undefined ? Давайте разбираться.

Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.

Что такое undefined в JavaScript

undefined является специальным значением. Согласно спецификации ECMAScript, undefined в JavaScript можно получить при доступе к неинициализированным переменным, несуществующим свойствам объекта, несуществующим элементам массива, etc. Пример:

Как видим, undefined выводится при попытке доступа к:

  • неинициализированной переменной number ;
  • несуществующему свойству объекта movie.year ;
  • несуществующему элементу массива movies[3] .

Оператор typeof возвращает строку undefined для неопределённого значения:

Оператор typeof отлично подходит для проверки значения undefined в JavaScript:

Как избежать undefined в JavaScript

Неинициализированная переменная

Объявленная переменная, которая еще не имеет значения (не инициализирована), по умолчанию undefined . Пример:

Переменная myVariable уже объявлена, но ещё не имеет присвоенного значения. Попытка обратиться к ней закончится выводом undefined . Чтобы это исправить, достаточно присвоить переменной значение. Чем меньше переменная существует в неинициализированном состоянии, тем лучше.

Ниже приведены способы решения проблемы.

1. const и let вместо var

Объявленные таким образом объекты и переменные находятся в области видимости, ограниченной текущим блоком кода, и находятся во временной мёртвой зоне до момента присвоения им значения.

При использовании неизменяемых данных (констант) рекомендуется инициализировать их как const :

Константа не подвергается неинициализированному состоянию, и получить значение undefined в этом случае невозможно.

Frontend-разработчик

Если вам нужно менять значение переменной, то обозначьте её как let и также присваивайте ей начальное значение:

Проблема var заключается в поднятии переменных: где бы ни находилось объявление, это равнозначно тому, что переменную объявили в начале кода.

В этом случае переменная myVariable содержит undefined до получения значения:

Если же переменную объявить как let , она останется недоступной до момента присвоения ей значения. Таким образом, использование const или let снизит риск получения значения undefined в JavaScript.

2. Усиление связности

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

  • сфокусированным и понятным;
  • легко поддерживаемым и поддающимся рефакторингу;
  • многоразовым;
  • простым для тестирования.

undefined в JavaScript и связность

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

Вот классический пример того, как не надо делать:

index , item и length объявляются в начале функции, но используются они лишь ближе к концу. Всё время между объявлением переменной в начале и до использования её в цикле index и item не инициализируются и выводят undefined . Разумнее переместить переменные ближе к месту их применения:

Доступ к несуществующему свойству

Попытка получить доступ к несуществующему свойству объекта JavaScript заканчивается undefined . Пример:

favoriteMovie — объект с одним значением title . Доступ к несуществующему свойству actors приведёт к выводу undefined .

Сам по себе доступ к не вызовет ошибку, а вот при попытке получить значение из несуществующего свойства выведется ошибка:

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

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

Реализуем функцию append(array, toAppend) , которая добавляет в начале и/или в конце массива новые элементы:

Поскольку объект toAppend может удалять первые или последние свойства, необходимо проверить их существование с помощью условий if(toAppend.first) и if(toAppend.last) .

Вот только undefined , как false , null , 0 , NaN и ‘ ‘ , является ложными значением, а в текущей реализации функция append() не позволяет вставлять ложные элементы:

0 и false — ложные значения, потому что if (toAppend.first) и if (toAppend.last) фактически сравниваются с ложными значениями, и эти элементы не вставляются в массив. Функция возвращает исходный массив [10] без изменений.

1. Наличие свойства

К счастью, JavaScript предлагает множество способов определить, имеет ли объект определённое свойство:

  • obj.prop !== undefined в JavaScript позволяет проверить undefined , сравнив с ним объект;
  • typeof obj.prop !== ‘undefined’ проверяет тип значения свойства;
  • obj.hasOwnProperty(‘prop’) проверяет объект на наличие собственного свойства;
  • ‘prop’ in obj проверяет объект на наличие собственного или унаследованного свойства.

Рекомендацией в этом случае будет использование оператора in , чтобы проверить, имеет ли объект определённое свойство, не обращаясь к фактическому значению этого свойства:

‘first’ in toAppend ( как и ‘last’ in toAppend ) выводит true , независимо от существующего свойства. В других случаях выводится — false .

Использование оператора in устраняет проблему со вставкой ложных элементов 0 и false . Теперь добавление элементов в начале и в конце массива [10] приводит к ожидаемому результату: [0, 10, false] .

2. Деструктуризация доступа к свойствам объекта

Деструктуризация объекта позволяет устанавливать значение по умолчанию, если свойство не существует: удобно для исключения прямого контакта с undefined :

Применяя преимущества деструктуризации объекта, реализуем quote() :

const = config в одной строкe извлекает свойства char и skipIfQuoted из объекта config .

Если некоторые свойства недоступны в объекте config , деструктуризация задаёт значения по умолчанию: ‘»‘ для char и false для skipIfQuoted . К счастью, функцию можно улучшить.

Переместим деструктуризацию в раздел параметров и установим значение по умолчанию (пустой объект ) для параметра config , чтобы пропустить второй аргумент, когда будет достаточно значений по умолчанию:

Деструктурирующее присваивание гарантирует, что используется пустой объект, если второй аргумент не указан вообще. В результате вы избегаете возникновения значения undefined в JavaScript.

3. Свойство по умолчанию

Есть простой способ установить значения по умолчанию для свойств объекта, и имя ему Spread syntax:

Инициализатор объекта распространяет свойства из исходных объектов defaults и unsafeOptions . Важен порядок, в котором указаны исходные объекты: свойства более позднего исходного объекта перезаписывают более ранние. Независимо от ситуации, объект всегда содержит полный набор свойств, и появление undefined невозможно.

Параметры функции

Функция, имеющая определённые параметры, должна вызываться с одинаковым количеством аргументов. В таком случае параметры получают ожидаемые значения:

При вызове функции multiply(5, 3) параметры a и b получают соответствующие значения 5 и 3 . Умножение рассчитывается как ожидаемое: 5 * 3 = 15 .

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

Лучшим подходом является использование параметров по умолчанию из ES2015:

Значение b = 2 в сигнатуре функции гарантирует, что если b получит значение undefined , то по умолчанию параметр изменится на 2 .

Возвращаемое значение функции

В JavaScript функция, которая не имеет оператора return , возвращает значение undefined :

То же происходит, если return присутствует, но без какого-либо выражения рядом:

Указывая значение для return , можно получить желаемый результат:

Теперь вызов функции выведет нужное значение.

Оператор void

Оператор void выполняет выражение и возвращает undefined вне зависимости от результата:

Одним из вариантов использования оператора void является переопределение результата выполнения выражения и возврат undefined в случае возникновения неожиданных результатов выполнения функции.

Значение undefined в массивах

Вы получаете undefined при попытке доступа к элементу массива с индексом вне пределов массива.

Массив colors имеет 3 элемента, поэтому корректные индексы равны 0 , 1 и 2 . Поскольку в индексах массива 5 и -1 нет элементов, значения colors[5] и colors[-1] получают значение undefined .

В JavaScript вы можете столкнуться с так называемыми разрежёнными массивами. Эти массивы имеют пробелы, то есть на некоторых индексах не определены никакие элементы. Когда делаем попытку получить доступ к пустому значению в разрежённом массиве, на выходе получаем undefined :

sparse1 создается путем вызова конструктора Array с числовым первым аргументом. Он имеет 3 пустых элемента. sparse2 создается с литералом массива, второй элемент которого отсутствует. В любом из этих массивов доступ к пустому элементу оценивается как undefined .

Отличие null и undefined в JavaScript

Основное отличие в том, что undefined представляет значение переменной, которая ещё не была инициализирована, а null — намеренное отсутствие объекта.

Допустим, переменная number определена, но ей не назначено начальное значение:

То же самое произойдёт при попытке доступа к несуществующему свойству объекта:

Или переменная должна ожидать возвращение объекта функции, но по какой-то причине создание объекта невозможно. В этом случае null является значимым индикатором недостающего объекта. Например, clone() — это функция, которая клонирует простой объект JavaScript. Ожидается, что функция вернёт объект:

Но clone() может быть вызван с пустым аргументом: 15 или null . В этом случае функция не может создать клон, поэтому возвращает null — индикатор отсутствующего объекта.

В JavaScript существуют проверки на null и undefined . Оператор typeof демонстрирует различие между двумя значениями:

Строгий оператор равенства === также отличает undefined от null :

Вам также может быть интересна наша статья про обработку ошибок в JavaScript.

Undefined parameter first что значит в гугл картах

Для определения запросов какой-либо компании требуется специальный идентификатор. Это и есть Google API. С его помощью можно использовать интерфейс всем знакомых карт Google, добавлять их в различные приложения, да еще и подстраивать под свой бренд.

Четыре эффективных инструмента позволят быстро и легко настроить карты под свои нужды с использованием APIs.

Как настроить Google Maps

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

Сначала нужно перейти на страницу cloud.google.com/maps-platform/ и нажать Get started.

Нас перенаправляют на страницу, где нужно выбрать страну и согласиться с условиями:

На следующей странице потребуют создать платежный аккаунт.

Заполнили информацию об аккаунте? Теперь следует внести платежные данные. Когда все готово, останется кликнуть «Начать бесплатный пробный период».

Если появится фраза «включить платформу Google Maps», это значит, что все сделали правильно. Чтобы активировать API Key, нужно нажать Next. В конце Google покажет сам ключ, а закрыть окошко можно с помощью кнопки Done.

Как настроить ключ

Создание ключа – это лишь начало. Теперь его нужно правильно настроить. Он не должен попасть в чужие руки, да и за бюджетом следить не помешает.

Начать следует с ссылки «Учетные данные», которая находится в левом меню. Здесь находится сам ключ. Настроить его можно, нажав на значок карандаша. Имя можно поменять на название проекта. Например, многие пишут имя сайта. Лимиты и границы настраивают в разделе «Ограничения ключа». Здесь всего две вкладки: первая для приложений, вторая для API. В этих вкладках нужно настроить службы и веб-сайты. Чтобы изменения вступили в силу, настройки следует сохранить.

Здесь же обязательно следует включить кредит от Google. Эта кнопка находится в самом низу поля редактирования бюджета. Именно эта возможность позволяет использовать сервис бесплатно.

Можно установить не только общие ограничения, но и отдельные.

В чем польза для разработчиков

С помощью Google Maps API можно успешно развивать backend-направления и оптимизировать запросы.

API для программно-административной части

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

Чтобы напрямую обращаться к серверам Google, используют службу Geocoding. Она работает с HTTP-запросами.

Хотя для обработки данных можно применять и другие инструменты. Бесплатно работать с серверной частью помогают:

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

Для эффективной оптимизации используют два варианта:

Как на этом сэкономить

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

Альтернативные сервисы

Когда по каким-то причинам Google не подходит, используют другие сервисы. У них тоже достаточно приличная коллекция инструментов и служб, а по деньгам иногда выходит значительно дешевле.

Пожалуй, это главный конкурент Google. Отлично подойдет российским организациям и разработчикам, которым не требуется детальная прорисовка зарубежных объектов. И здесь тоже присутствует четыре службы:

Их можно использовать абсолютно бесплатно. Конечно, если соблюдать некоторые правила :

Если сравнить цены у Яндекса и Google, у первого услуги выходят дешевле.

Еще одним важным преимуществом является то, что сервис предлагает электронные и бумажные отчеты для бухгалтерии.

Здесь встречаются тарифные планы, которые действуют специально для тех, кто переходит к ним с Google.

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

Бесплатный тарифный план называется Freemium. Он предлагает 250 000 запросов в месяц. Если лимит превысить, то за каждую 1000 придется платить по одному доллару.

По статическим изображениям API здесь количество месячных запросов – 50 000 штук. Дополнительная оплата за 1000 запросов сверх лимита составляет 1 доллар.

Здесь тоже можно подстроить интерфейс под себя, а также создавать визуальные 2D- и 3D-модели карт. Геокодинг, навигация и многие другие функции тоже доступны.

Расширенный функционал предлагает еще больше возможностей. Среди них спутниковые данные, преобразование для среды Unity и других игровых платформ, визуализация в Power BI.

Среди знаменитых почитателей этого сервиса можно выделить Facebook и Twitter.

Этот поставщик онлайн-карт использует собственную библиотеку MapBox.js, а информацию он берет с разных источников. Сюда входит NASA и OpenStreetMap.

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

Но здесь следует учитывать некоторые особенности работы:

Возможностей здесь мало, зато и деньги платить не нужно.

Остальные сервисы тоже пользуются спросом и имеют свои преимущества. Это:

Заключение

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

Функции Google Maps, о которых вы могли не знать

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

Undefined parameter first что значит в гугл картах

Google Maps имеет очень много скрытых функций

Узнайте обо всех опасностях на маршруте следования

Undefined parameter first что значит в гугл картах

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

Планируйте поездки на общественном транспорте и запоминайте места

Undefined parameter first что значит в гугл картах

Вы можете использовать Google Maps и для того, чтобы узнать маршруты передвижения общественного транспорта. При этом сервис укажет вам номера автобусов и даже нужные ветки метро. Вы можете запланировать маршрут и нажать на кнопку в виде автобуса. Тогда Google Maps проложит вам оптимальный маршрут со всеми пересадками. Более того, вы можете установить требуемое вам время прибытия в определенное место и сервис подскажет вам, во сколько нужно выйти из дома.

Помимо этого вы можете также отмечать на карте понравившиеся вам места, достопримечательности и заведения. И при этом у вас есть возможность, скажем, устроить тур по барам в определенном районе. Google Maps самостоятельно построит вам оптимальный маршрут.

Скачивайте карты для работы в режим офлайн

Undefined parameter first что значит в гугл картах

Google Maps позволяет вам скачивать карты и пользоваться ими в тот момент, когда у вас нет интернета. Это довольно полезная функция и мы даже посвящали ей отдельную статью. Так что рекомендуем ознакомиться с материалом, доступном по этой ссылке.

Отправляйте маршруты на смартфон

Undefined parameter first что значит в гугл картах

Если вы пользуетесь Google Maps на персональном компьютере для того, чтобы найти какое-то место, а потом ищите то же самое на смартфоне, то вы просто тратите время зря. Если вы войдете в одну и ту же учетную запись Google на вашем компьютере и на смартфоне, вы сможете просто выбрать маршрут и отправить его на свой телефон прямо в интерфейсе Google Maps.

Посмотрите историю перемещений

Undefined parameter first что значит в гугл картах

Хотите немного заглянуть в прошлое? Откройте меню настроек (выполненное в виде трех точек, расположенных друг над другом) и выберете пункт «Хронология». Здесь вы можете перейти в любой день и увидеть, где именно вы были. При этом вы всегда можете удалить историю ваших перемещений, если нужно.

Увеличить масштаб карты гораздо проще, чем кажется

В следующий раз, когда вы хотите увеличить масштаб, просто быстро дважды коснитесь экрана. Удерживайте палец на экране после второго нажатия, а затем переместите его вниз, чтобы уменьшить масштаб. Для увеличения переместите палец вверх. Это действительно очень удобно и позволяет пользоваться картами буквально одним касанием. Кстати, если вы знаете какие-то лайфхаки, упрощающие использование Google Maps, обязательно напишите об этом в нашем чате в Телеграм.

Управляйте музыкой, не выходя из Google Maps

Undefined parameter first что значит в гугл картах

Google Maps позволяет вам получить доступ к вашей музыке прямо внутри картографического приложения. Поддерживаются популярные сервисы Apple Music, Google Play Music и Spotify. Чтобы включить эту функцию, перейдите в раздел «Настройки» — «Настройки навигации» и включите пункт «Управление воспроизведением мультимедиа». Теперь на активном экране навигации у вас будет значок музыки, который позволит переключать треки или ставить их на паузу.

Сохраняйте парковки

Undefined parameter first что значит в гугл картах

На сегодняшний день очень трудно найти парковочное место. Особенно в крупном городе. Однако если вы часто используете автомобиль, Google Maps позволяет вам запоминать расположение парковочных мест и наносить их на карту. В последствии вы можете просто выбрать нужное место из списка и направиться к нему. Для включения этой функции перейдите в «Настройки» — «Навигация», промотайте страницу в самый низ и там вы обнаружете пункт «Парковки». Включите опцию «Сохранять парковки».

История одного репорта в Google или как манипулировать данными в Google Maps

Undefined parameter first что значит в гугл картах

Предисловие

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

Опустим, пожалуй, подробное начало этой истории т. к. не обо всех аспектах я могу говорить в связи с моей работой, но это и не важно. Перейдем к сути этой истории…

Начала

Думаю, многие из вас пользуются Картами Google т. к. они установлены по умолчанию во многих устройствах и многие доверяют компании Google, что она выдает релевантные ответы на ваши запросы. Но мы с коллегами обнаружили, что в системе на наш взгляд есть логические ошибки, как Карты Google проверяют информацию, которую выдают пользователю. Мы предположили интересный вектор, а что, если информация, которую выдает Карты Google не проверяется (на первый взгляд это уже смешно звучит!).

Я начал ковырять Карты Google, стал пользовать карты пару дней. И то, что я нашел меня озадачило. Я смог вносить изменения в информацию, которую выдает Google карты. Объясню, человек, который допустим пользуется Google картами вводит поисковый запрос, ну к примеру ему нужно найти компанию «Ростелеком-Солар» (коллегам привет!).

Undefined parameter first что значит в гугл картах

В теории

Человек, который ввел запрос надеется, что вся информация, которая выдается ему должна быть проверена и соответствовать действительности ( Google врать не будет ) и по идее он может спокойно доверяться всей предоставленной информации и пользоваться ей.

Реальность

Но увы (я должен вас расстроить компания Google позволяет манипулировать данными, которые выдает сама же.

Далее будет описан метод, который позволил манипулировать данными любой организации, которую выдает Карты Google. Но перед всем этим, так же хотелось бы отметить.

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

В путь

Открываем Google Chrome посмотрим версию (на всякий случай)

Undefined parameter first что значит в гугл картах

Далее вбиваем нужный нам запрос к примеру «Ростелеком Солар»

Undefined parameter first что значит в гугл картах

На выдаче получаем официальный сайт «Ростелеком-Солар» и замечательную карточку справа (я ее выделил) в которой содержится информация об организации. Это карточка берется из Google карт, и если мы на нее переходим, то проваливаемся в сами Google карты. На этой карточке представлена полезная информация об организации (сайт, адрес и др.).

Undefined parameter first что значит в гугл картах

Если ткнем на кнопку сайт на карточке, то нас по идее должно перенаправить на официальный сайт. https://rt-solar.ru/

Так оно и работает примерно. Далее попробуем найти «Ростелеком-Солар» через Google карты.

Undefined parameter first что значит в гугл картах

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

В поисковике, где делали запрос предложим исправления для информации на карточке организации.

Undefined parameter first что значит в гугл картах

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

Так видим официальный сайт.

Undefined parameter first что значит в гугл картах

Меняем на что ни будь мене прозаичное так сказать )

Undefined parameter first что значит в гугл картах

Жамкаем на отправить.

Undefined parameter first что значит в гугл картах

Обратим внимание, что нам выдала система «Предложенное изменение рассматривается». Ну значит все ок, наш эксперимент по идее должен на этом закончиться неудачей, ведь компания Google ответственная и все тщательно проверяет (подумал я с ухмылкой на своем лице). Ну что же, подождав пару минут я начал проверять результат наших манипуляций и что я обнаружил меня очень сильно порадовало. Буквально через пару минут я увидел, что внесенные нами изменения уже применились и их выдавали Google карты и поисковик в карточке.

Переходим на карточку выдачи Google и жамкаем на кнопку «сайт»:

И тут же нас перенаправило куда?! Да на https://www.vodafone.ua/ru

Undefined parameter first что значит в гугл картах

Я не поверил, что такое возможно и решил оставить пока все так как есть, чтобы посмотреть, что будет с выдачей поисковика и Google картами.

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

«Контур СКБ» https://kontur.ru/ серьезная организация, которая занимается выдачей электронных подписей (кто в курсе тот поймет)

Undefined parameter first что значит в гугл картах

Проверяем, что поиск выдал нам нормальную информацию

Undefined parameter first что значит в гугл картах

Сайт официальный все хорошо. Смотрим карточку, которая справа

Undefined parameter first что значит в гугл картах

Жамкаем на кнопку сайт и действительно перенаправляется на официальный сайт

Undefined parameter first что значит в гугл картах

Проделываем все описанные мною манипуляции для изменения официального сайта. Предлагаем исправления:

Undefined parameter first что значит в гугл картах

Проверяем какой сайт указан в карточке:

Undefined parameter first что значит в гугл картах

Undefined parameter first что значит в гугл картах

Применяем ее, жамкнув кнопку «Отправить» и получаем вывод:

Undefined parameter first что значит в гугл картах

Проверяем карточку, которую выдал нам поисковик:

Undefined parameter first что значит в гугл картах

Ждем пару минут и проверяем еще раз, и переходим по кнопке «Сайт» на карточке:

Undefined parameter first что значит в гугл картах

Жамкаем по кнопке «Сайт» и нас перенаправляет на https://www.cryptopro.ru/

Undefined parameter first что значит в гугл картах

Середина

Что имеем в результате нашего эксперимента: вроде получается, что можем манипулировать данными любой организации, которые выдает карты Google, хоть Google и пишет, что предложенные изменения рассматриваются, но по факту они применяются буквально моментально (проходит 2-3 минуты). В конце статьи будут ссылки на видео, если кто-то скажет, что это все подстроено и Компания Google не могла так делать. Но суть вопроса от этого не поменялась.

И далее наступает самое интересное

Как человек работающий в ИБ я знал, что у Google есть программа bug bounty.

https://www.google.com/about/appsecurity/reward-program/ я в первый день как нашел ошибку, сразу отправил отчет о найденной ошибке и стал ждать. Первые дня 2 я надеялся, что со мной свяжутся и скажут что-то типа «Дружище ты молодец, мы благодарны тебе за то, что ты дал знать об этом». Все то время, что я ждал, тестировал и смотрел как продолжает работать эта дырка, я стал замечать, что предложенный мною вариант перестал работать через день после моего репорта. Я подумал «какие они молодцы закрыли ошибку и теперь нельзя манипулировать данными организаций просто так». Так как со мной не выходили на связь уже 5 день, а я вижу, что мой сценарий не работает, я начал дальше копаться в картах Google, чтобы понять, как теперь применяются изменения и можно ли все это еще раз повторить. Но об этом чуть позже, не будем нарушать последовательность моего рассказа.

Спустя 7 дней от подачи отчета мне на конец то написали.

Undefined parameter first что значит в гугл картах

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

Кто ни будь из вас вообще понял, что они имели в виду?!**

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

Несмотря на все это, я начал дальше отрабатывать другие возможности манипуляцией информацией в картах Google. Но как я понял, из их ответа что мол у них МЛ который не дает вносить изменения просто так + команда цензоров, которая проверяет изменения.

Я ушел с головой в изучение логики Google карт. Обо всем писать не буду, но могу констатировать печальный факт их МЛ работает плохо и если есть, какие то команды рецензентов, то они явно не готовы предотвращать манипуляции с данными в Google картах.

Кульминация

Я покажу как мне удавалось манипулировать данными после заявления Google о том, что у них все работает корректно.

По первому сценарию внесения изменений у меня ничего не получилось т.к. команда Google явно включила какую-то обработку изменений т. к. теперь выдавалось сообщение, что внесенные мною правки находятся на рассмотрении и они не применялись сразу и даже после долгого ожидания (до 24 часов). Но как говорится, не зря же мы изучали логику работы карт.

Попробуем проверить манипуляцию на Контур СКБ, т.к. у них много представительств в разных регионах.

На этот раз заходим в карты Google и ищем СКБ Контур, так же предлагаем внести изменения.

Undefined parameter first что значит в гугл картах

Напомню, что официальный сайт СКБ контур https://kontur.ru/

Undefined parameter first что значит в гугл картах

Меняем якобы на конкурента, который не аффилирован к СКБ контур:

Undefined parameter first что значит в гугл картах

Далее «Отправить» и ждем. Делаем поиск в поисковике Google Chrome и смотрим карточку:

Undefined parameter first что значит в гугл картах

Ждем пару часов и видим, что уже есть какой те прогресс. Наверное, Google отправила оповещение собственнику сайта или в организацию, подумал я и стал далее изучать. Было принято решение ковырять дальше карты ведь МЛ как-то же обрабатывает изменения.

Undefined parameter first что значит в гугл картах

Через 10-12 часов ковыряний я имел успех в своих манипуляциях (описывать конкретный сценарий здесь из соображений безопасности не буду), но факт на лицо мне удавалось производить манипуляции и далее.

Undefined parameter first что значит в гугл картах

Мне удалось манипулировать данными организации после того, как мне ответили из Google, что все работает нормально и это нормально для карт Google. Но в добавок еще и выдача в поиске выдавала нашу манипуляцию в карточке. И тут надо отметить, что изменения отражаются на Google картах по регионам, в которых можно вносить изменения. Что это значит? На момент моего исследования я находился в Калининградской области соответственно все изменения, которые я вносил, применялись тока на Google картах этого региона и поисковая выдача выдавала карточку организации для этого региона.

Undefined parameter first что значит в гугл картах

По итогу я понял, что компания Google что-то исправила в результате моего первого отчета, но не так хорошо, как это нужно сделать. Я продолжал им писать и говорить: «Ей, парни. Кто ни будь свяжитесь со мной, у вас не работает это должным образом, а до сих пор могу манипулировать данными в Google картах!». Последнее что я получил от них это

Undefined parameter first что значит в гугл картах

Меня это очень обидело, скажем честно. Столько времени потрачено на описание ошибки для отчета, на эту переписку с поддержкой.

И всем тем кто в будущем захочет подавать отчеты об ошибках в программе Google делайте это лучше с почты, которая привязана к структуре Google, иначе вас ждет одно разочарование (по итогу очень долго отвечают на письма не с их адресацией + вам не дадут доступ к панели отслеживания https://issuetracker.google.com/ там идет привязка к почте с которой вы отправляете отчет.

Вектор атаки

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

Undefined parameter first что значит в гугл картах

Делаем клон сайта для сбора данных которые возможны и потом (после заполнения всех форм) перенаправляем всех на официальны сайт.

Undefined parameter first что значит в гугл картах

Я не буду описывать все возможные сценарии, могу только сказать, что пару таких вариантов мы проверили и они работают. А самая прелесть в том, что это можно делать на определенный период времени и таргетированно на определенные регионы (куда мы вносим изменения), чтобы официально ничего не заметили. То есть мы можем поменять электронный адрес и официальный сайт на то, что, хотим на определенный промежуток времени и в определенном регионе, а потом все вернуть как было, чтобы владельцы организации не заметили эту подмену на выдаче карт Google. Так же хочется отметить, что все приложения которые берут данные из Google карт или используют их в своей выдаче берут и все манипуляции, которые проходят на Google картах (отдельный привет Booking.com, TripAdvisor и др.).

Вывод

Что по итогу, что я хотел здесь сказать. Это, наверное, больше крик души, потому что жаль видеть, как относятся корпорации к твоим отчетам об ошибках. По итогу на сегодня описанная мною ошибка позволяла манипулировать данными на Google картах. Из программы Google bug bounty. https://www.google.com/about/appsecurity/reward-program/ ответ «this report is not in scope for our VRP». То есть ни спасибо, ни чего, и нет упоминания, что они что-либо правили, тока что все работает как надо! Я не являюсь профессиональным «Багбаунтером», но занимаюсь время от времени этим ради фана, может я и не прав и Google карты действительно работают как надо. Но написав эту статью я хочу, чтобы эта информация стала публична (организации задумались о таком векторе атаки) и Google все-таки поправила эту ошибку до конца (ограничили действия об изменении данных организации без ее ведома). И да я бы не отказался, если все-таки компания Google хоть как-то сказала: «Спасибо» за мой отчет и потраченное время, но кто я такой в конце концов.

P.S.
Undefined parameter first что значит в гугл картах

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *