Сделал карту, где водители отмечают наличие бензина на АЗС
Уже несколько недель наблюдаю за баталиями в комментариях по поводу наличия бензина. И вот вчера вечером пришла мысль: а почему бы не сделать простой сервис с картой заправок.
В итоге за пол ночи и сегодняшний день набросал вот это: https://azsstatus.ru
Это простой браузерный сайт с народной картой АЗС, адаптированный под мобильные устройства. Все отметки оставляют сами водители, регистрация не требуется.
Что есть:
карта с заправками (в базе ~26к записей);
поиск по городам;
4 типа меток, разделённые по цветам:
есть топливо;
нет;
очередь;
мало (продажа с ограничениями);
история изменения меток;
фильтры по меткам (заправки без меток отображаются всегда)
светлая и тёмная темы.
Вот так выглядит добавление меток:
Чего не хватает:
не все заправки
разделение статусов по маркам топлива (92 - есть, 98 - нет)
дизайн
Пока это скорее MVP — просто хотел проверить, будет ли вообще такая идея кому-то полезна.
Буду рад фидбеку. Если найдёте ошибки пишите - постараюсь исправить.
- А на трубе сыграть бы смог?
Считать Пушкин не умел. Появление денег связывалось у него с представлением неиссякаемого Пактола, и быстро пропустив их сквозь пальцы, он с детской наивностью недоумевал перед совершившимся исчезновением. Карты неудержимо влекли его. Он зачастую давал себе зарок больше не играть, подкрепляя это торжественным обещанием жене, но при первом подвернувшемся случае благие намерения разлетались в прах, и до самой зари он не мог оторваться от зеленого поля. Часто вспоминала Наталья Николаевна крайности, испытанные ею с первых шагов супружеской жизни. Бывали дни, после редкого выигрыша или крупной литературной получки, когда мгновенно являлось в доме изобилие во всем, деньги тратились без удержа и расчета, точно всякий стремился наверстать скорее испытанное лишение. Муж старался не только исполнить, но предугадать ее желания. Минуты эти были скоротечны и быстро сменялись полным безденежьем, когда не только речи быть не могло о какой-нибудь прихоти, но требовалось все напряжение ума, чтобы извернуться и достать самое необходимое для ежедневного существования. Некоторые из друзей Пушкина, посвященные в его денежные затруднения, ставили в упрек Наталии Николаевне ее увлечение светскою жизнью и изысканность нарядов. Первое она не отрицала. Но всегда упорно отвергала обвинение в личных тратах. Все ее выездные туалеты, все, что у нее было роскошного и ценного, оказывалось подарками Екатерины Ивановны ( Загряжской, фрейлины, тетки . Ник-ны ) . Она гордилась красотою племянницы; ее придворное положение способствовало той благосклонности, которой удостоивала Наталью Николаевну царская чета, а старушку тешило, при ее значительных средствах, что ее племянница могла поспорить изяществом с первыми щеголихами. А. П. Арапова. Воспоминания. – Новое Время, 1907, № 11413, ил. прил., с. 5.
Карта ЧМ-2026 показывает турнир не по странам, а по местам рождения игроков
На Reddit пользователь PiggySVW из r/MapPorn сделал интерактивную карту чемпионата мира 2026 года. На ней отмечены места рождения игроков, тренеров и судей, а также сборные и стадионы турнира.
Обычно чемпионат мира воспринимается как соревнование стран: флаги, гимны, группы, таблицы и матчи. Но если смотреть не на эмблемы сборных, а на места рождения участников, картина получается гораздо интереснее.
Карта показывает, что современный футбол — это не только про национальные команды, но и про города, миграцию, футбольные академии и личные маршруты игроков.
Например, в обсуждении сразу обратили внимание на Францию. По подсчётам пользователей, на турнире много участников, родившихся во Франции, а особенно выделяются Париж и его пригороды. На такой карте Париж выглядит не просто как столица страны, а как один из главных футбольных центров мира.
Ещё одна интересная деталь — Кабо-Верде. У этой сборной есть игроки, родившиеся в Роттердаме. В обсуждении это связывают с большой кабо-вердианской общиной в Нидерландах: многие выходцы с островов переезжали туда ещё во второй половине XX века.
На карте можно найти и совсем неожиданные точки: игроков, которые выступают за одну страну, но родились в другой части мира.
В итоге получается не просто футбольная карта, а наглядная история о том, как глобально устроен современный спорт: семьи, переезды, академии, двойное гражданство и города, которые дают миру десятки игроков.
Карту можно открыть здесь
P.S. Больше таких коротких историй собираю в Telegram-канале Симулятория
Странный персонаж из Яндекс Карт
Искал в яндекс Картах магазины по Смоленской области и постоянно натыкался на одного и того же человека — Ruslan Just-Ruslan. Потом обнаружил что он практически по всей области. Открыл профиль на картах, а там 7500 фотографий, при чем на некоторых он прям криво вставлен.
Сам профиль. https://yandex.ru/maps/user/realRJR
Не понимаю смысла всего этого, может кто объяснить?





Сгенерированные карты доколониальных государств африканского континента
Как-то заинтересовался доколониальными государствами в Африке - мы ведь неплохо знаем историю Европы, а вот что касается африканского континента, то далее Древнего Египта обычно дело не идет - это проходят в школе. ну а далее или специалисты, или энтузиасты.
Попала мне в руки (ну как в руки... скачал с какого-то сайта) книга "Что такое Африка" российских африканистов Александры Архангельской и Кирилла Бабаева, где истории Африки посвящена целая глава.
На её основе я решил посмотреть расположение данных государств по эпохам, где чего мне помог GPT Image, сгенерировав вот такие винтажные карты под XIX-ый век.
Континент, конечно, несколько сплющен по размерам и с пропорциями и реками тоже напутано, но, на мой взгляд, смотрится отлично и прекрасно передает материал.
Телефонный навигатор для Forza Horizon 6. Как это было сделано - часть 3
Если первые две технические серии были про “как заставить это работать”, то эта - про “как заставить это не врать слишком уверенно”.
Самый неприятный враг самодельного навигатора оказался не там, где я ждал. Не UDP, не браузер на телефоне, не локальная сеть, не A*. Самый неприятный враг - развязка. Обычная такая игровая развязка, которая выглядит красиво, пока ты человек. А потом ты становишься алгоритмом, и начинается цирк.
Карта плоская, мир нет
Forza отдает PositionX, PositionY и PositionZ. Для обычной карты я использую X и Z, а Y - это высота. Проблема в том, что первый дорожный граф плоский. Он живет в координатах карты, а не в полноценном 3D.
И вот ловушка: если две дороги пересекаются на картинке, это не значит, что между ними есть поворот. Одна может быть сверху, другая снизу. Для человека это очевидно. Для 2D-графа - “о, линии рядом, значит дружим”.
Высота уже сохраняется в live state
raw_pos_x = float(telemetry.get("PositionX", 0.0))
raw_pos_y = float(telemetry.get("PositionY", 0.0)) # высота
raw_pos_z = float(telemetry.get("PositionZ", 0.0))
raw_map_x, raw_map_y = forza_to_map(raw_pos_x, raw_pos_z)
self.snapshot = TelemetrySnapshot(
position_x=pos_x,
position_y=pos_y,
position_z=pos_z,
map_x=map_x,
map_y=map_y,
)
Поэтому высоту я не выбрасываю. Сейчас она в основном диагностическая, но дальше из нее можно сделать слой уточнений для сложных мест: проехать развязку вручную, записать X/Y/Z/heading и потом сказать графу: “вот здесь верхняя дорога, здесь нижняя, тут не соединять, тут рампа”.
Снап к ближайшей дороге - опасная штука
Чтобы построить маршрут, нужно сначала приклеить машину к дорожному графу. Это называется snap. Берем текущую позицию, ищем ближайший узел дороги и считаем, что машина на нем.
На прямой дороге все отлично. На развязке это превращается в рулетку. Машина может ехать по эстакаде, а ближайший узел на карте окажется на дороге под ней. Если взять только один ближайший узел - навигатор может начать маршрут из параллельной реальности.
Поэтому я ищу не один узел, а несколько кандидатов вокруг точки.
Не один ближайший узел, а список кандидатов
def nearest_graph_nodes(graph, x, y, limit=10, max_distance=900.0):
coords = graph["coords"]
spatial = graph.get("spatial", {})
cell_size = float(graph.get("spatial_cell_size", 320.0))
cx, cy = int(x // cell_size), int(y // cell_size)
candidates = []
seen = set()
for ring in range(max_ring + 1):
for gx in range(cx - ring, cx + ring + 1):
for gy in range(cy - ring, cy + ring + 1):
for idx in spatial.get((gx, gy), []):
if idx in seen:
continue
seen.add(idx)
nx, ny = coords[idx]
d = math.hypot(nx - x, ny - y)
if d <= max_distance:
candidates.append((d, idx))
candidates.sort(key=lambda item: item[0])
return [(idx, dist) for dist, idx in candidates[:limit]]
Компоненты графа: не каждый кусок дороги должен победить
После этого стартовые и целевые кандидаты перебираются парами. Пара отбрасывается, если узлы лежат в разных компонентах графа. Еще добавляется штраф за маленькую компоненту, потому что рядом с машиной может быть крошечный ложный фрагмент дороги, который случайно выжил после распознавания.
Это примерно как не доверять подозрительному “короткому пути” через двор, если он на самом деле нарисован одним пикселем и честным словом.
Выбор разумных пар старта и цели
candidate_pairs = []
for start_idx, start_snap in start_candidates:
for goal_idx, goal_snap in goal_candidates:
if component and component[start_idx] != component[goal_idx]:
continue
comp_size = graph.get("component_sizes", [0])[component[start_idx]] if component else 0
component_penalty = 600.0 / math.sqrt(max(1, comp_size))
candidate_pairs.append((
start_snap + goal_snap + component_penalty,
start_idx, goal_idx, start_snap, goal_snap,
))
candidate_pairs.sort(key=lambda item: item[0])
Разрывы дорог и синтетические мостики
Карта не обязана быть удобной для алгоритма. Дорогу может перекрыть иконка, подпись, декоративный элемент, шов тайла. Человек видит, что дорога продолжается. Граф видит: “связи нет, до свидания”.
Для таких мест появились синтетические мостики. Но тут важный момент: они должны быть дорогими. Если сделать заплатки дешевыми, навигатор быстро превратится в короля телепортов. Поэтому короткая заплатка терпимая, средняя дорогая, длинная почти запретительная.
Заплатка есть, но она не должна стать любимой дорогой
ROAD_CLASS_MULTIPLIERS = {
"white": 1.00,
"orange": 1.08,
"orange_dashed": 2.60,
"synthetic_short": 2.40,
"synthetic_medium": 7.00,
"synthetic_bridge": 34.00,
"unknown": 9.50,
}
def _synthetic_multiplier_for_length(length, profile):
if length <= 70.0:
return float(profile.get("synthetic_short", 34.0))
if length <= 180.0:
return float(profile.get("synthetic_medium", 34.0))
return float(profile.get("synthetic_bridge", 34.0))
Один стиль маршрута не спасает
Еще выяснилось, что “идеального профиля” нет. Если слишком любить белые дороги, маршрут делает абсурдную петлю, лишь бы не использовать короткий оранжевый соединитель. Если разрешить все подряд, он начинает вести себя как раллист, которому сказали, что физика сегодня выходная.
Поэтому появились профили маршрута. Практичный асфальт, режим выхода из идиотского объезда и shortest sane - кратчайший вариант, но без полной потери совести.
Несколько профилей маршрутизации вместо одного самоуверенного
ROUTING_COST_PROFILES = {
"asphalt_practical": {
"white": 1.00,
"orange": 1.08,
"orange_dashed": 2.60,
"synthetic_short": 2.40,
"synthetic_medium": 7.00,
"synthetic_bridge": 34.00,
"heuristic_weight": 1.45,
},
"detour_escape": {
"white": 1.00,
"orange": 1.02,
"orange_dashed": 1.85,
"synthetic_short": 1.65,
"heuristic_weight": 2.10,
},
"shortest_sane": {
"white": 1.00,
"orange": 1.00,
"orange_dashed": 1.25,
"synthetic_short": 1.25,
"heuristic_weight": 3.00,
},
}
Лучше честная ошибка, чем красивая ложь
В ранних версиях очень хотелось, чтобы маршрут был всегда. Даже если граф не справился - ну нарисуем прямую линию, пользователь поймет.
Нет, пользователь не поймет. Прямая линия на экране выглядит как маршрут. Если она ведет сквозь все подряд, это уже не fallback, а ложь с хорошим дизайном.
Поэтому сейчас, если граф есть, но путь не найден, сервер не рисует диагональ. Он возвращает ошибку и пустую polyline. Лучше честно сказать “дорожный маршрут не найден”, чем нарисовать уверенную ерунду.
Честный fail вместо фальшивого маршрута
def graph_failed(mode: str, message: str, routing=None):
# Do not silently draw a diagonal when a road graph exists but cannot produce a path.
# A diagonal fallback looked like a real route and made debugging impossible.
return {
"ok": False,
"mode": mode,
"polyline": [],
"message": message,
"routing": routing or {},
}
Reroute тоже нельзя делать истеричным
Навигатор должен перестраивать маршрут, когда ты уехал не туда. Но если он будет перестраивать его при каждом чихе, получится не помощник, а тревожный диспетчер.
Поэтому появилась липкость. Чуть съехал с линии - навигатор сначала держит маршрут и просит вернуться. Сильно уехал или долго едешь мимо - пересчитывает. Это звучит как мелочь, но именно такие мелочи отличают “работает” от “почему оно дергается каждые две секунды”.
Липкое перестроение маршрута
const REROUTE_STICKY_OFF_PX = 170;
const REROUTE_STICKY_MS = 22000;
const REROUTE_HARD_OFF_PX = 360;
const REROUTE_HARD_MS = 9000;
function maybeRerouteNavigation(){
const off = distanceToCurrentRoute(px, py);
if(off <= REROUTE_STICKY_OFF_PX){
offRouteSince = 0;
return;
}
if(!offRouteSince) offRouteSince = now;
const offMs = now - offRouteSince;
const shouldReroute =
(off > REROUTE_HARD_OFF_PX && offMs > REROUTE_HARD_MS) ||
(off > REROUTE_STICKY_OFF_PX && offMs > REROUTE_STICKY_MS);
if(shouldReroute) requestRoute(routeTarget, false);
}
Итог серии
Вот почему развязки - это ад. Не потому, что их сложно красиво нарисовать. А потому что “дорога рядом” и “дорога доступна” - разные вещи.
Текущее решение - это набор защит: несколько кандидатов для snap, компоненты графа, штрафы, дорогие синтетические мостики, разные профили маршрута, честный fail и неистеричный reroute.
Следующий логичный уровень - Z-логгер. Проехать сложные развязки вручную, записать высоту и фактическую траекторию, а потом использовать это как слой уточнения. Игра высоту уже отдает. Осталось заставить ее работать на нас, а не просто лежать красивой цифрой в JSON.
В следующей серии будет менее больно и более красиво: приборка на телефоне, семисегментные цифры, мини-карта, ретро-киберпанк и мемные звуки на столкновения и прыжки.
Бесплатная реклама в интернете: 7 способов рассказать о себе, не потратив ни рубля
Бюджет закончился, или его ещё нет, или вы только запустили продукт и хотите проверить, зайдёт ли он, прежде чем вкладываться в таргет. Хорошая новость: продвигаться в интернете без денег реально. Плохая: это требует времени и последовательности.
Собрали 7 способов, которые работают.
Пишите туда, где сидит ваша аудитория
Самый доступный инструмент — тематические форумы и профессиональные сообщества. Там люди обсуждают рабочие проблемы, ищут решения, делятся опытом.
Главное правило: не рекламируйтесь в лоб. Отвечайте на вопросы, где вы реально разбираетесь, давайте полезный совет, а в подписи или в контексте упомяните, чем занимаетесь. Модераторы вычёркивают рекламу мгновенно, зато экспертные ответы читают и сохраняют.
Разместите компанию на картах
Это бесплатно, быстро, а эффект долгосрочный. Люди ищут услуги рядом с собой, и карточка компании с рейтингом и фотографиями работает круглосуточно без вашего участия.
Заполните всё: часы работы, описание, фотографии, ссылку на сайт. Чем полнее карточка, тем выше она в выдаче по локальным запросам.
Один момент: карточка работает круглосуточно, а у компании есть конкретный режим работы. Пропущенный звонок с карт или из объявления — это потерянный лид, который вы получили бесплатно, но не довели до разговора.
Если заявок становится больше, чем вы успеваете обрабатывать вручную, имеет смысл подключить приём входящих: звонки распределяются по свободным операторам, не теряются в нерабочее время и сразу попадают в одну систему вместе с историей обращения.
Работайте с досками объявлений и каталогами
Профильные площадки по нише допускают бесплатные размещения для бизнеса. Это особенно хорошо работает для локальных услуг, b2c-продуктов и всего, что люди ищут «здесь и сейчас». Для IT подойдут каталоги SaaS-решений, для услуг — профессиональные порталы, для розничных товаров — тематические маркетплейсы.
Используйте инфоповоды
Когда в вашей нише происходит что-то громкое — новый закон, резонансный кейс, технологический сдвиг — напишите комментарий, колонку или пост с вашей экспертной позицией. Журналисты и редакторы ищут таких людей, а вы получаете бесплатное упоминание в СМИ.
Мониторьте новости в своей теме: это занимает всего 10-15 минут в день, зато поможет держать руку на пульсе рынка и делиться своей экспертностью, когда она особенно востребована в инфополе.
Когда бесплатного мало: холодный прозвон дешевле рекламы
Бесплатные способы хорошо создают узнаваемость, но работают медленно и не дают предсказуемого потока заявок. Когда нужно быстро проверить спрос или дозагрузить отдел продаж, обычно идут в таргет или контекст — а там цена лида растёт с каждым месяцем, и платите вы за показы, а не за результат.
Холодный прозвон по базе — недооценённая альтернатива. Да, это платный канал, но в пересчёте на реальный диалог с потенциальным клиентом он чаще выходит дешевле рекламного клика, который ещё неизвестно во что конвертируется. Вы сразу слышите живую реакцию, снимаете возражения и квалифицируете лид в моменте.
Главная статья расходов здесь — время операторов и стоимость дозвонов по «пустым» контактам. В Скорозвоне это решает скоринг баз: он анализирует контакты и заранее предсказывает, кто с высокой вероятностью ответит, а кто нет. Затраты на МАВ и маркировку звонков сокращаются до 40%.
Предложите статью на чужую площадку
Гостевой постинг по бартеру — один из самых недооценённых инструментов. Вы пишете полезный материал для чужого блога или медиа, они публикуют с указанием автора и ссылкой на вас. Аудитория партнёра видит ваше имя, часть переходит к вам.
Работает медленно, но надёжно: репутация копится, а ссылки зачастую остаются.
Попросите клиентов об отзывах
Больше 80% людей читают отзывы перед покупкой. При этом большинство компаний просто ждут, когда клиенты напишут сами — и ждут долго.
Просите об отзыве сразу после завершения сделки: в письме, в мессенджере, по звонку. Если неловко просить вручную — автоматизируйте: короткий звонок-напоминание через день-два после покупки работает лучше, чем письмо, которое теряется во входящих.
Ведите соцсети с пользой, а не ради галочки
Соцсети работают, когда вы даёте контент, который хочется читать: кейсы, разборы ошибок, инструкции, честные истории из работы. Алгоритмы продвигают посты, которые читают и комментируют.
Что в итоге
Ни один из способов бесплатного продвижения не даст мгновенного результата, но в связке они формируют узнаваемость, доверие и трафик.
Помните: когда аудитория появится, важно не упустить контакт. Соберите базу, прозвоните тех, кто интересовался, но не купил, а также напоминайте о себе тем, кто давно не возвращался.
Реклама. ООО «Смартьюб». ИНН 6658407780. Erid: 2W5zFHKG9wo








