
Как я собрал интерактивную карту 13 000 исторических событий и научил её определять архетип любого города
truer_xd 20 минут назад Как я собрал интерактивную карту 13 000 исторических событий и научил её определять архетип любого города Средний 4 мин 1.3K JavaScript * Веб-дизайн * Веб-разработка * Кейс Из песочницы...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. truer_xd 20 минут назад Как я собрал интерактивную карту 13 000 исторических событий и научил её определять архетип любого города Средний 4 мин 1. 3K JavaScript * Веб-дизайн * Веб-разработка * Кейс Из песочницы HistoryPrint берёт любой город и говорит, какая часть человеческой истории случилась в его радиусе. ~13 000 событий за 5 000 лет, 12 категорий (войны, революции, пандемии, открытия), скоринг по экспоненциальному убыванию расстояния, и в финале — один из 20 архетипов: «Born in Fire», «Plague Walker», «Heir of Enlightenment».
Прод: truer-history-print. appМейн экранСтек — Next. js 14 App Router, Mapbox GL JS в проекции глобуса, Tailwind, Vercel Functions + Vercel KV для лидерборда.
Технические детали
Никакого ML, чистая математика. В этом посте — три неочевидные вещи, которые в этом проекте оказались интересными:Как разруливать многорегиональные события (Чёрная смерть достигла Флоренции в 1348-м, Москвы — в 1353-м: оба должны быть «локально верными» в зависимости от запрашивающего города). Как защитить публичный лидерборд от curl’а одной HMAC-подписью без аутентификации.
Как генерить per-city OG-картинки на @vercel/og + кешировать на CDN. Формула скорингаДля каждого события рядом с пользователем вклад считается так:score = (significance / 100)² × exp(−distance / decay) × era_weight × category_weight × 1000decay = 500 км для войн (битвы — точечные события, далеко не радиируют), 1500 км для всего остального (революции, пандемии, технологии распространяются волнами). era_weight даёт +вес древним событиям: 2.
Это компенсирует bias датасета: про новое истории вообще пишут больше. category_weight отражает «исторический радиус» категории: pandemic = 3. битв много и они локальны — иначе они бы доминировали везде).
Отраслевые последствия
Multi-regional eventsЧёрная смерть в датасете — одна запись, но Москва увидела её в 1353-м, а Флоренция — в 1348-м. Если просто хранить главную точку (Бухарест 1347), то любой запрос будет отдавать неправильный год. Решение — таблица overrides по id события:export const AFFECTED_CITIES: Record = { // Black Death (id=5) 5: , }; Скоринг при расчёте выбирает ближайший к пользователю кандидат из (главная точка + overrides), и берёт его дату:function resolveLocalLocation(event, userLat, userLng) { const overrides = AFFECTED_CITIES; const candidates = ; if (overrides) candidates.
overrides); // Haversine + min-by-distance return candidates. reduce((best, c) => { const d = haversine(userLat, userLng, c. lng); return d < best.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





