<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блог Антона Репушко</title>
<link>https://repushko.com/</link>
<description>Блог Антона Репушко</description>
<author>Антон Репушко</author>
<language>ru</language>
<generator>E2 (v3565; Aegea)</generator>

<itunes:owner>
<itunes:name>Антон Репушко</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Блог Антона Репушко</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Ubuntu и nvidia-container-toolkit</title>
<guid isPermaLink="false">61</guid>
<link>https://repushko.com/all/ubuntu-i-nvidia-container-toolkit/</link>
<pubDate>Sun, 30 Mar 2025 01:33:41 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/ubuntu-i-nvidia-container-toolkit/</comments>
<description>
&lt;p&gt;Из неочевидного: для того, чтобы в Docker-контейнерах заработал доступ к GPU, нужно использовать &lt;i&gt;docker-ce&lt;/i&gt;, а не &lt;i&gt;docker&lt;/i&gt; из Snap. Это связано с тем, что пакеты из snap’a работают в песочнице snap’a и не имеют прямого доступа к системе.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/docker/genai-stack/issues/95"&gt;Вот тут описание проблемы&lt;/a&gt;.&lt;/p&gt;
</description>
</item>

<item>
<title>Аналоговый календарь на корте в Тайване</title>
<guid isPermaLink="false">60</guid>
<link>https://repushko.com/all/analogovy-kalendar-taiwan/</link>
<pubDate>Sun, 05 Jan 2025 18:24:44 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/analogovy-kalendar-taiwan/</comments>
<description>
&lt;p&gt;Интересно выглядит система бронирования публичных кортов на Тайване. Пишешь свое имя и вставляешь бумажку в нужный слот. Аналоговый shared calendar.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="960" data-ratio="0.75"&gt;
&lt;img src="https://repushko.com/pictures/tennis_taiwan_2.jpg" width="960" height="1280" alt="" /&gt;
&lt;img src="https://repushko.com/pictures/tennis_taiwan_1.jpg" width="1280" height="960" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Cons Cells в Lisp</title>
<guid isPermaLink="false">59</guid>
<link>https://repushko.com/all/cons-cells-v-lisp/</link>
<pubDate>Thu, 12 Jan 2023 02:30:13 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/cons-cells-v-lisp/</comments>
<description>
&lt;p&gt;Если вам (как и мне) поначалу было тяжеловато понять концепт Cons Cells в Lisp, то на &lt;a href="https://stackoverflow.com/questions/1317023/what-is-the-definition-of-a-lisp-cons-cell"&gt;Stack Overflow&lt;/a&gt; есть емкое и краткое объяснение:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Cons cells in general hold two pointers that can point to anything. General usage of course is to point to a «value» with the left one, and to another Cons cell (or nil) with the «right» one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;car и cdr соответственно вернут первый элемент или второй.&lt;/p&gt;
</description>
</item>

<item>
<title>Formula E</title>
<guid isPermaLink="false">58</guid>
<link>https://repushko.com/all/final-formula-e/</link>
<pubDate>Mon, 16 Aug 2021 00:41:24 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/final-formula-e/</comments>
<description>
&lt;p&gt;Сходил на финал сезона &lt;a href="https://www.fiaformulae.com"&gt;Formula E&lt;/a&gt; в Берлине. Это как F1, только полностью на электрических машинах, без ДВС. У них больше крутящий момент, они быстрее разгоняются, а максимальная скорость доходит до 280 км/ч. Особенно понравился звук электрического мотора.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe src="https://www.youtube.com/embed/RFh3ucTD2qM" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
</description>
</item>

<item>
<title>newprojectname.dev</title>
<guid isPermaLink="false">57</guid>
<link>https://repushko.com/all/newprojectname-dev/</link>
<pubDate>Fri, 08 Jan 2021 23:47:43 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/newprojectname-dev/</comments>
<description>
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/readme_image.jpeg" width="1280" height="729" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="newprojectname.dev"&gt;&lt;a href="https://newprojectname.dev"&gt;https://newprojectname.dev&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Есть забавная традиция называть проекты/библиотеки именами различных мифических существ и божеств. И у меня давно лежала идея хелпера по подбору таких названий, но реализовал её только сейчас.&lt;/p&gt;
&lt;p&gt;Я напарсил &lt;a href="https://github.com/repushko/mythology_names_dataset"&gt;самый большой список названий божеств&lt;/a&gt; из 43 пантеонов, что дало 4096 уникальных имён (и 9000 если считать все алиасы). Ну а чтобы избежать коллизий, проект на лету ищет эти имена в названиях репозиториев на Гитхабе и показывает топ-результаты.&lt;/p&gt;
&lt;p&gt;Из интересной инженерии: проект на &lt;a href="https://svelte.dev/"&gt;Svelte&lt;/a&gt;, имеются &lt;a href="https://github.com/repushko/newprojectname.dev"&gt;исходники&lt;/a&gt;. Внутри есть база на 1Мб сырого json’a, которая затаскивается в общий бандл приложения и ужимается до 150кб. И из-за этого хака всё успешно хостится как статика на Digital Ocean’e за 0.00$ в месяц. Дизайн тоже корявенько делал я. Запросы к Гитхабу — клиентские, лимиты запросов — тоже на клиенте. Легчайшая поддержка.&lt;/p&gt;
</description>
</item>

<item>
<title>Rejection sampling и Reservoir sampling</title>
<guid isPermaLink="false">54</guid>
<link>https://repushko.com/all/rejection-sampling-i-reservoir-sampling/</link>
<pubDate>Wed, 14 Oct 2020 21:28:27 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/rejection-sampling-i-reservoir-sampling/</comments>
<description>
&lt;p&gt;Разобрался на днях с двумя интересными алгоритмами про выборки.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Rejection_sampling"&gt;Rejection sampling&lt;/a&gt; находил в задачах вроде «с помощью функции, которая гарантирует равновероятное выпадение целого числа в интервале [1...7], создайте функцию, которая делает тоже самое, но в интервале от [1...10]».  Ещё такая же задача была однажды у меня на собесе в Яндексе: дана монетка с вероятностью выпадения орла/решки ½. С помощью этой монетки нужно смоделировать вероятность ⅓. Я интуитивно дошёл до решения и доказал, что это работает, но конкретно названия группы алгоритмов не знал.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Reservoir_sampling"&gt;Reservoir sampling&lt;/a&gt; про то, как смоделировать равновероятный выбор элемента при неизвестной конечной размерности множества вариантов.&lt;/p&gt;
</description>
</item>

<item>
<title>Аудиозаметка №3</title>
<guid isPermaLink="false">53</guid>
<link>https://repushko.com/all/audiozametka-3/</link>
<pubDate>Tue, 06 Oct 2020 23:21:39 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/audiozametka-3/</comments>
<description>
&lt;p&gt;Станция Нойкёльн.&lt;/p&gt;
&lt;div class="e2-text-audio"&gt;
&lt;a class="jouele" data-space-control="true" data-length="26" href="https://repushko.com/audio/audio_note3.mp3" &gt;5 октября, Берлин&lt;/a&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>[Идея] Voice-control для RPG-игр</title>
<guid isPermaLink="false">52</guid>
<link>https://repushko.com/all/ideya-voice-control-dlya-rpg-igr/</link>
<pubDate>Mon, 28 Sep 2020 17:20:46 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/ideya-voice-control-dlya-rpg-igr/</comments>
<description>
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/fallout.jpg" width="800" height="450" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Современные технологии уже позволяют реализовать самую клёвую штуку, которую можно придумать в RPG-играх — открытые диалоги.&lt;/p&gt;
&lt;p&gt;Вместо того, чтобы выбирать колёсиком (как в MassEffect или Fallout) вариант ответа в диалоге, можно настроить возможность произносить его голосом в микрофон. Система бы матчила семантику сказанного к максимально близком варианту ответа в сценарии и запускала скрипт реакции на этот вариант ответа. Было бы интересно попробовать.&lt;/p&gt;
&lt;p&gt;А вообще игры с голосовой механикой не новость.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe src="https://www.youtube.com/embed/L5-o6iODptU" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="e2-text-caption"&gt;Scream Go Hero&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Чьи-то зарисовки</title>
<guid isPermaLink="false">51</guid>
<link>https://repushko.com/all/zarisovki/</link>
<pubDate>Sun, 16 Aug 2020 22:37:45 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/zarisovki/</comments>
<description>
&lt;p&gt;На берлинской барахолке полгода назад получилось бесплатно взять виниловый проигрыватель и аудиосистему к нему. Ещё в придачу отдавался набор старых пластинок: в основном латинской музыки и пара классических произведений.&lt;/p&gt;
&lt;p&gt;В куче этих пластинок был блокнот с зарисовками интерьеров и какими-то записями (непонятно какого срока давности). Я так рисовать не умею, поэтому кажется очень красивым.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1280" data-ratio="1.5023474178404"&gt;
&lt;img src="https://repushko.com/pictures/photo_2020-08-16_18-41-38-(8).png" width="1280" height="852" alt="" /&gt;
&lt;img src="https://repushko.com/pictures/photo_2020-08-16_18-41-38-(7).png" width="916" height="1280" alt="" /&gt;
&lt;img src="https://repushko.com/pictures/photo_2020-08-16_18-41-38-(6).png" width="930" height="1280" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-caption"&gt;Интерьеры&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1280" data-ratio="1.3793103448276"&gt;
&lt;img src="https://repushko.com/pictures/photo_2020-08-16_18-41-38-(3).png" width="1280" height="928" alt="" /&gt;
&lt;img src="https://repushko.com/pictures/photo_2020-08-16_18-41-38-(5).png" width="1280" height="916" alt="" /&gt;
&lt;img src="https://repushko.com/pictures/photo_2020-08-16_18-41-38-(4).png" width="1280" height="934" alt="" /&gt;
&lt;img src="https://repushko.com/pictures/photo_2020-08-16_18-41-38-(2).png" width="1280" height="908" alt="" /&gt;
&lt;img src="https://repushko.com/pictures/photo_2020-08-16_18-41-38-(1).png" width="1280" height="920" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/photo_2020-08-16_18-41-38.png" width="860" height="1280" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>[Идея] Физический калейдоскоп для latent spaces</title>
<guid isPermaLink="false">50</guid>
<link>https://repushko.com/all/ideya-fizicheskiy-kaleydoskop-dlya-ganov/</link>
<pubDate>Wed, 12 Aug 2020 13:06:38 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/ideya-fizicheskiy-kaleydoskop-dlya-ganov/</comments>
<description>
&lt;p&gt;Клёво сделать физический калейдоскоп (как в детстве), вращение которого бы приводило к движению внутри latent space всяких GANов. Внутри собственно экран.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/kalejdoskop.jpeg" width="576" height="406" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Дневник соревнования OpenEDS 2020</title>
<guid isPermaLink="false">49</guid>
<link>https://repushko.com/all/openeds2020/</link>
<pubDate>Tue, 04 Aug 2020 21:38:13 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/openeds2020/</comments>
<description>
&lt;p&gt;Мы со &lt;a href="https://www.linkedin.com/in/sviatoslav-skoblov"&gt;Святославом Скобловым&lt;/a&gt; 2 месяца решали &lt;a href="https://research.fb.com/programs/openeds-2020-challenge/"&gt;OpenEDS 2020 Challenge&lt;/a&gt;, где в одном треке заняли первое место, а во втором восьмое. Про второй трек тут не будет, потому что он скучный и не очень интересный. И ещё нас изредка консультировал Вова Михеюшкин по всяким CV-вопросам. Может быть кому-то тоже будет интересно почитать, как проходят соревнования по ML.&lt;/p&gt;
&lt;h2&gt;Про соревнование&lt;/h2&gt;
&lt;p&gt;На основе &lt;a href="https://arxiv.org/abs/2005.03876"&gt;датасета OpenEDS2020&lt;/a&gt;, собранного &lt;a href="https://research.fb.com/category/augmented-reality-virtual-reality/"&gt;Facebook Reality Labs&lt;/a&gt;, запустили два трека. Оба связаны с VR/AR, Oculus и всем таким. Треки шли в рамках &lt;a href="https://openeyes-workshop.github.io/"&gt;воркшопа к ECCV 2020&lt;/a&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/099.png" width="640" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Один из тысяч кадров&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;В первом треке&lt;/b&gt; даны последовательности по 100 (трейн) и 55 (валидация) фотографий глаз с gaze-векторами каждого кадра. Представьте, что вы умеет стрелять лазерами из глаз. Вот отнормированный вектор из вашего зрачка до объекта на VR/AR экране и есть gaze-vector.&lt;br /&gt;
Частота записи последовательности — 100Гц. В тесте были те же последовательности по 50 кадров, но уже без настоящих векторов. Общая задача — научиться предсказывать по 50 кадрам последовательности в тесте следующие 5 кадров (т.e. 50мс). Нужно это для &lt;a href="https://en.wikipedia.org/wiki/Foveated_rendering"&gt;foveated rendering&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Во втором треке&lt;/b&gt; нужно было сегментировать части глаза (бэкграунд, склеру, радужку и зрачок) по кривой разметке 5% данных в каждой последовательности из 200 кадров. Многие (по отзывам других участников) боролись именно с кривой разметкой, мы же начали решать второй трек за 2 недели до конца и не слишком преуспели, хотя разрыв между топом очень маленький. Важнее и интереснее для нас был именно первый трек.&lt;/p&gt;
&lt;h2&gt;Технические особенности&lt;/h2&gt;
&lt;p&gt;Соревнование проводилось на платформе &lt;a href="https://evalai.cloudcv.org/"&gt;EvalAI&lt;/a&gt;. Там можно скрывать свои сабмиты, но перед этим на какую-то долю секунды они попадают на общую таблицу. Поэтому было решено написать своего бота, который бы мониторил изменения лидерборда, генерировал красивые картинки и присылал их в наш общий диалог. С помощью него мы могли трекать и отслеживать настоящих лидеров, а не те результаты, которые были показаны вручную.&lt;br /&gt;
Был только 1 сабмит в день, каждую ночь предыдущая возможность сабмита сгорала.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/lb.jpg" width="1280" height="897" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Команда BTSD скрыла свой сабмит&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Своего железа у нас было не очень много, поэтому мы время от времени арендовали машины на &lt;a href="https://vast.ai/"&gt;vast.ai&lt;/a&gt;. Потратили на это около 230 долларов за 2 месяца соревнования.&lt;/p&gt;
&lt;h2&gt;Дневник&lt;/h2&gt;
&lt;p&gt;&lt;i&gt;1 июня&lt;/i&gt;&lt;br /&gt;
Создан чат в Телеграме, начали разбираться в предметной области, с платформой, читать правила. Выяснили, как части глаза называются на английском. Создали репозиторий на Гитхабе и настроили всем доступы.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/eye.jpg" width="500" height="239" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;3 июня&lt;/i&gt;&lt;br /&gt;
Выкачиваются данные, визуально посмотрели gaze-вектора. Появляется идея классическими CV-методами поисков контуров искать зрачок на изображении и смотреть на изменение его положение внутри склеры. Разбираемся в типах движения глаза (саккады, скольжения, статичное положение и т. д.). Наконец-то понимаем вообще в чём суть трека.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;4 июня&lt;/i&gt;&lt;br /&gt;
Нашли &lt;a href="https://pupil-labs.com/"&gt;pupil-labs&lt;/a&gt;, с помощью оборудования которых Facebook генерировал свой датасет. Ничего полезного, но очень интересно.&lt;br /&gt;
Научились находить зрачок обычными CV методами. В итоге это потом использовалось только в визуализациях.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/pupil_center.jpg" width="399" height="133" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Пытались добавить ещё всяких контуров, но ничего не получилось.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/countur_orig.jpg" width="640" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Оригинальный кадр&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/countur.jpg" width="657" height="417" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Посчитанный контур&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Важное решение&lt;/b&gt;: посчитали правильным разделить пайплайн на две части: gaze-estimator (модель, которая по кадру предсказывает его gaze-вектор) и gaze-predictor (модель, которая по истории gaze-векторов предсказывает gaze-вектора следующих 5 кадров).&lt;/p&gt;
&lt;p&gt;&lt;i&gt;6 июня&lt;/i&gt;&lt;br /&gt;
Начали визуализировать вектора, чтобы посмотреть на всю последовательность целиком. Нам нужен gaze-predictor, но насколько сложным он будет? Если в данных в основном статичное положение глаза, то тогда сложная модель тут не нужна (так в итоге и оказалось).&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/static_gaze.jpg" width="518" height="281" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Глаз практически неподвижен&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/saccade.jpg" width="423" height="358" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;А тут уже двигается&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Где-то тут было решено для обучения эстиматора (модели, которая будет по кадру предсказывать gaze-вектор) использовать &lt;a href="https://habr.com/ru/company/smartengines/blog/264677/"&gt;аугментации&lt;/a&gt;. Но проблема в том, что при изменении изображения нужно будет менять и изначальный вектор: вращаешь изображение -&gt; вращаешь вектор. Решили патчить &lt;a href="https://github.com/albumentations-team/albumentations"&gt;albumentations&lt;/a&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/vector_visualize.jpg" width="391" height="251" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Проекция вектора&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;11 июня&lt;/i&gt;&lt;br /&gt;
Начали гонять первые модели, оптимизировать параметры. Стали разбираться с предиктором. Попробовали всякие стандартные штуки для форкаста временных рядов типа &lt;a href="https://facebook.github.io/prophet/"&gt;prophet&lt;/a&gt;, но они предсказуемо не зашли из-за специфики данных: нельзя вытащить сезонность (которой нет), другие фичи вроде дней недели, времени и прочего, что активно эксплуатируется в таких местах.&lt;br /&gt;
Обучили первый resnet для эстиматора.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;12 июня&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt;0.1556&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/submit.jpg" width="949" height="355" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Сделали первый сабмит (команда baccaddes)&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Начали глубже разбираться с метрикой и сравнивать предикты модели с реальными данными, чтобы понять, где косяк. Настроили честную локальную валидацию эстиматора.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;15 июня&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt; 0.0786&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Засабмитили улучшенную модель (VAR поверх хорошего эстиматора).&lt;br /&gt;
Это приблизило нас к остальным на ЛБ.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;16 июня&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt;0.0747&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Написан и запущен Big Brother — бот, который следит за ЛБ. С этого момента до конца соревнования он работал с одним перебоем на полдня, после без ошибок.&lt;br /&gt;
Засабмитили скользящее среднее по 5 последним кадрам.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/submit_bot.jpg" width="1280" height="708" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Бот отрабатывает как надо&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;17 июня&lt;/i&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/ezgif.com-video-to-gif.gif" width="256" height="160" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Начали смотреть глазами на глаза (это анимация одной последовательности)&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Посмотрели на статические генераторы таких данных (NVGaze и UnityEyes). В итоге для сореванования их так и не использовали.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;22 июня&lt;/i&gt;&lt;br /&gt;
Предикт эстиматора очень грязный: колбасит вектора между кадрами и получается, что между ними как будто бы сильное движение глаза.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;28 июня&lt;/i&gt;&lt;br /&gt;
Подумали, что было бы классно научиться группировать авторов одних и тех же последовательностей (количество участников при сборе датасета на порядки меньше числа последовательностей), чтобы вытаскивать оттуда какие-то фичи специфичные для конкретного участника. Эту идею так и не доделали.&lt;/p&gt;
&lt;p&gt;Начали думать про классическое CV снова: хотели вытаскивать крайние точки глаз и прочее.&lt;/p&gt;
&lt;p&gt;Обучили LSTM для предиктора. Сработало чуточку хуже средних по 5 кадрам.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;29 июня&lt;/i&gt;&lt;br /&gt;
Закончили патчить albumentations.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/orig.jpg" width="387" height="251" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Оригинальный кадр&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/flipped.jpg" width="385" height="249" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Сработавший Vertical Flip (и пересчитанный вектор)&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/shift_scale_rotate.jpg" width="380" height="247" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Живой ShiftScaleRotate&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;1 июля&lt;/i&gt;&lt;br /&gt;
Начали подозревать, что в тесте всё таки в основном статика. И что самый большой буст тут даст улучшение эстиматора, а не предиктора.&lt;/p&gt;
&lt;p&gt;Нафигачили для эстиматора аугментаций.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;4 июля&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt;0.0613&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Стали думать, как сделать интереснее предиктор. Взяли потыкать &lt;a href="https://github.com/unit8co/darts"&gt;darts&lt;/a&gt; — это такой враппер над всякими стандартными моделями для форкаста.&lt;/p&gt;
&lt;p&gt;Запустили старый метод среднего по кадрам (или какую-то оч простую эвристику) над данными нового эстиматора. Очень сильно улучшились.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;5 июля&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt;0.0570&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Выучили пачку effnet’ов (до этого был resnet). Начали дробить на фолды и мешать предикты с разных фолдов.&lt;/p&gt;
&lt;p&gt;Сняли тачку на &lt;a href="https://vast.ai"&gt;vast.ai&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Посмотрели на тестовые данные на основе более-менее нормальных предиктов эстиматора. Оказалось, что какая-то динамика в последних 10 кадрах последовательности есть всего в 600-700 последовательностях из 6400.&lt;/p&gt;
&lt;p&gt;Засабмитил старые методы предикта на среднем фолдов effnet’а. Почти до самого конца это было нашим лучшим результатом и первым местом на ЛБ.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;9 июля&lt;/i&gt;&lt;br /&gt;
Обучили mobnet. Стали экспериментировать с предиктором: ExponentialSmoothing, VAR, ARIMA и т. д.&lt;br /&gt;
Методы ничего не докинули, а некоторые и ухудшили скор относительно просто среднего.&lt;br /&gt;
Скор самого предиктора при этом был очень хороший, около 0.000400+ на кадр по их метрике.&lt;/p&gt;
&lt;p&gt;Первый раз открыли данные второго трека, порисовали маски.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/mask.jpg" width="1098" height="1034" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;10 июля&lt;/i&gt;&lt;br /&gt;
Засабмитили скользящее среднее по 3 кадрам на куче разных фолдов — не сработало.&lt;/p&gt;
&lt;p&gt;Постарались достраивать вектора регрессией. Тоже не сработало.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;11 июля&lt;/i&gt;&lt;br /&gt;
Начали играться с фильтрами над сигналом, чтобы сгладить разницу предиктов эстиматора между соседними кадрами. Получалось хорошо, использовали &lt;a href="https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter"&gt;фильтр Савицки-Голая&lt;/a&gt;. Кажется, что всякие неровности эстиматора очень красиво сглаживаются.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/savgol_2.jpg" width="751" height="558" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;12 июля&lt;/i&gt;&lt;br /&gt;
Разбирались с предиктором. Выяснили, что наша регрессия багованная и искали ошибку в разнице валидаций друг у друга. Нашли. Смотрели глазами на фильтрованные предикты и думали, что делать дальше.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;14 июля&lt;/i&gt;&lt;br /&gt;
Нарисовали красивые картинки градиентов по разным осям между двумя соседними кадрами по предиктам на всём тесте. Выяснили, что у нас действительно всё — статика. Поэтому опять же нет смысла во всяких сложных моделях предиктора.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/gradient_x.jpg" width="664" height="422" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Выяснили, что локальная метрика эстиматора напрямую коррелирует с результатами на ЛБ и что результат одного хорошего фолда лучше, чем его же со смесью фолдов чуть-чуть хуже. Опять упёрлись в то, что надо дотюнивать эстиматор. Вернулись к resnet’у.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;14 июля — 23 июля&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt;0.0552&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Разбирались с сегментацией, удивлялись кривой разметке, сложным случая с закрытыми глазами и т. д.&lt;/p&gt;
&lt;p&gt;Вытюнили 1 фолд для эстиматора до ошибки 0.000197 (в 3 раза лучше прошлых). В предиктор засунули простую эвристику: если статика, то скользящее среднее по 2 последним кадрам, а если была динамика в последних 5 кадрах, то добавляем градиент дальше до упора (из-за особенностей движения глаза, там бОльшая часть движений — линейная).&lt;/p&gt;
&lt;p&gt;&lt;i&gt;23 июля — 29 июля&lt;/i&gt;&lt;br /&gt;
Тюнили и думали над сегментацией. Смотрели на то, как нам применить синтетические данные в сегментаци. Генерировали синтетику.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/unity_eye.jpg" width="1148" height="648" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Типичный несуществующий глаз&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Из интересного: один сабмит пропустили, потому что кое-кто заснул от усталости и не слышал звонков с просьбой прислать данные. Два сабмита в два дня были сделаны за 30 и 20 секунд до сгорания.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/sega.png" width="720" height="720" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Кусочек каких-то сравнений моделей по сегментации&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;30 июля — 31 июля&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt;0.0537&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Смотрели и думали над всякими сложными случаями в сегментации&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/sega2.jpg" width="1280" height="287" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/sega3.jpg" width="1280" height="277" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;По первому треку доучили остальные бленды эстиматора, сблендили и засабмитили. Так и осталось нашим лучшим результатом.&lt;/p&gt;
&lt;p&gt;По сегментации остались на 8ом месте.&lt;/p&gt;
&lt;h2&gt;Что хотели попробовать, но не попробовали&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Не использовали никакую синтетику, а скорее всгео надо было бы. Можно и в обоих треках&lt;/li&gt;
&lt;li&gt;Надо было учить LSTM на чистых данных (в том числе из теста и из трейна) и сразу на векторах. Наши эвристики в итоге были по каждой оси отдельно&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>

<item>
<title>Аудиозаметка №2</title>
<guid isPermaLink="false">48</guid>
<link>https://repushko.com/all/audiozametka-2/</link>
<pubDate>Sun, 02 Aug 2020 00:21:02 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/audiozametka-2/</comments>
<description>
&lt;p&gt;1 августа 2020. Звуковая инсталляция в Бергхайне.&lt;/p&gt;
&lt;div class="e2-text-audio"&gt;
&lt;a class="jouele" data-space-control="true" data-length="33" href="https://repushko.com/audio/berghain.mp3" &gt;1 августа 2020, Берлин&lt;/a&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/berghain.jpg" width="1280" height="960" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Как работает очистка данных со stat.gibdd.ru</title>
<guid isPermaLink="false">47</guid>
<link>https://repushko.com/all/data-cleaning-stat-gibdd-ru/</link>
<pubDate>Thu, 25 Jun 2020 23:15:15 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/data-cleaning-stat-gibdd-ru/</comments>
<description>
&lt;p&gt;Год назад &lt;a href="https://repushko.com/all/dtp-stat-helpers/"&gt;написал скрипты&lt;/a&gt; для очистки данных статистики ДТП, потому что изначальные данные (именно GPS-координаты) были очень грязными  и их практически нельзя было визуализировать. Сорцы на Гитхабе &lt;a href="https://github.com/repushko/dtp_stat_helpers"&gt;имеются&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Сейчас скрипты временно неработоспособны, так как Яндексовский геокодер теперь требует ключ для использования API, но скоро я их поправлю.&lt;/p&gt;
&lt;p&gt;Я расскажу про красивый и аккуратный способ, как нам точку с неправильными координатами аккуратно подвинуть прямо на улицу, где произошло ДТП.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/graph_explanation.jpg" width="1280" height="960" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Алгоритм очистки данных&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Описаниме по шагам&lt;/h2&gt;
&lt;p&gt;Изначально нам дана синяя точка слева внизу. Это GPS-координаты, которые мы получили из исходных данных. Наша основная зацепка — адрес. Он заполняется вручную и обычно верный.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Шаг 1.&lt;/b&gt; Воспользуемся геокодером. Это такая программа, которая переводит географическое название (город/село/улицу + дом) в географические координаты. Я обычно пользуюсь &lt;a href="https://tech.yandex.com/maps/geocoder/"&gt;геокодером Яндекса&lt;/a&gt;, потому что он точнее для СНГ, но ещё есть &lt;a href="https://nominatim.org/"&gt;бесплатный от OpenStreetMap&lt;/a&gt;. Так мы получаем чистую координату дома по адресу (красная точка на рисунке).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Шаг 2.&lt;/b&gt; В OSM хранится граф дорог, при этом они привязаны к географическим координатам (у графа есть точное положение на плоскости). И есть классная особенность: мы можем ввести координаты точки на плоскости и получить кусок графа в радиусе n от этой точки. Общая идея такая:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;вводим координаты дома после геокодирования -&gt; получаем круг примерно как на картинке,&lt;/li&gt;
&lt;li&gt;выбираем все дороги, попавшие в радиус (можно считать их просто линиями),&lt;/li&gt;
&lt;li&gt;строим перпендикуляры из точки до каждой из линий (на рисунке x и y),&lt;/li&gt;
&lt;li&gt;выбираем кратчайший (в нашем случае x),&lt;/li&gt;
&lt;li&gt;наша красная точка получает новые координаты (уже на ребре графа из OSM) и становится жёлтой точкой,&lt;/li&gt;
&lt;li&gt;profit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Так мы кривые координаты ДТП по одному лишь адресу аккуратно перенесли прямо на улицу. Теперь при визуализации всё будет аккуратно и ровно.&lt;/p&gt;
</description>
</item>

<item>
<title>Типы улиц Тулы</title>
<guid isPermaLink="false">46</guid>
<link>https://repushko.com/all/street-types-tula/</link>
<pubDate>Sun, 07 Jun 2020 23:54:35 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/street-types-tula/</comments>
<description>
&lt;p&gt;Раз уж пошла такая мода (&lt;a href="https://erdavis.com/2019/09/20/the-beautiful-hidden-logic-of-cities-worldwide/"&gt;оригинальная идея Эрина Дэвиса&lt;/a&gt;, &lt;a href="https://t.me/pathetic_low_freq/319"&gt;Москва&lt;/a&gt;, &lt;a href="https://vk.com/astr.city.data?w=wall-51262629_141"&gt;Астрахань&lt;/a&gt;), то и я нарисовал карту типов улиц Тулы.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/map.png" width="2560" height="2560" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Интересно выглядят плотные участки, состоящие только из проездов. Вроде как согласно СНиП (Строительные нормы и правила), к проездам меньше требований по ширине полос, допустимым углам поворота, наибольшему допустимому уклону, ширине пешеходной части.&lt;/p&gt;
&lt;p&gt;А ещё в Туле есть особенный тип: «обвод». Он всего один (&lt;a href="https://yandex.ru/maps/15/tula/search/%D0%92%D0%BE%D1%81%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BE%D0%B1%D0%B2%D0%BE%D0%B4/?ll=37.662604%2C54.185500&amp;z=14.64"&gt;Восточной обвод&lt;/a&gt;), но всё таки существует. И целых два проспекта.&lt;/p&gt;
</description>
</item>

<item>
<title>Датасет структуры сети Lightning</title>
<guid isPermaLink="false">44</guid>
<link>https://repushko.com/all/dataset-struktury-seti-lightning/</link>
<pubDate>Fri, 22 May 2020 02:02:05 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/dataset-struktury-seti-lightning/</comments>
<description>
&lt;p&gt;Ковыряю в свободное время интересную тему и задачу, которую курирует &lt;a href="https://cs.hse.ru/en/lambda/"&gt;LAMBDA&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Вводная&lt;/h2&gt;
&lt;p&gt;Есть сеть &lt;a href="https://lightning.network/"&gt;Лайтнинг&lt;/a&gt;, которая является надстройкой над майннетом Биткоина. Придумывалась для более мелких транзакций, которые не позволял делать Биткоин. Например, тебе нужно заплатить за кофе или совершить какую-то маленькую операцию.&lt;/p&gt;
&lt;p&gt;Основная терминология:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;нода — узел сети. Получатель денег в общем,&lt;/li&gt;
&lt;li&gt;канал — ребро сети. Общий кошелёк в майннете Биткоина между двумя нодами.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В Лайтнинге интересный механизм поиска пути транзакции. Eсли тебе надо перевести деньги из &lt;i&gt;А&lt;/i&gt; в &lt;i&gt;С&lt;/i&gt;, то не обязательно открывать новый общий кошелёк в майннете Биткоина.&lt;/p&gt;
&lt;p&gt;Предположим у тебя уже есть канал &lt;i&gt;А&lt;-&gt;B&lt;/i&gt; и есть канал &lt;i&gt;B&lt;-&gt;C&lt;/i&gt;. В таком случае ты можешь сделать перевод &lt;i&gt;A-&gt;B-&gt;C&lt;/i&gt;, где &lt;i&gt;B&lt;/i&gt; за проход транзакции через себя возьмёт какую-то комиссию. А можно перевести и предположим по пути &lt;i&gt;A&gt;D-&gt;B-&gt;C&lt;/i&gt;, если такой существует.&lt;/p&gt;
&lt;p&gt;Но не всё так просто. Помимо комиссии, на транзакцию накладываются дополнительные условия. У канала есть «ёмкость»: сколько можно переслать денег между двумя нодами без создания нового общего кошелька в майннете. И «ёмкость» &lt;i&gt;А-&gt;B&lt;/i&gt; и &lt;i&gt;B-&gt;A&lt;/i&gt; не одно и то же.&lt;/p&gt;
&lt;p&gt;Подробнее и больше можно почитать &lt;a href="https://lightning.network/"&gt; в документации&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Цель&lt;/h2&gt;
&lt;p&gt;Основная идея ресёча — заменить глупый перебор результатов DFS для проведения транзакции на что-то более умное. Кажется, что это можно сделать, имея статистику «прошедших» транзакций и варианты альтернативных путей. Получиться должно что-то вроде статистического роутинга на основе прошлых транзакций.&lt;br /&gt;
Для этого нужно собирать датасет таких транзакций и их альтернатив, но это упирается в некоторые технические сложности и проблемы. Я собственно сейчас пытаюсь их решить, проверяя вообще работоспособность идеи сбора таких данных. Если получится, то будет очень классное и необычное решение.&lt;/p&gt;
&lt;h2&gt;Датасет&lt;/h2&gt;
&lt;p&gt;До этого этапа хотелось посмотреть (и посмотрели) просто на динамику сети, как она меняется и насколько стабильна. Написал простенький парсер и в итоге получился &lt;a href="https://www.kaggle.com/grisme/hourly-snapshots-of-lightning-network"&gt;датасет на 10 Gb&lt;/a&gt; «слепков» сети: рёбра графа и всякая метаинфа нод (ip-адрес, алиас в сети и гео-координаты).&lt;/p&gt;
&lt;p&gt;Парсилось каждый час с 10.12.2019 до 04.03.2020 (84 дня), всего 2022 записи. Каждый результат в отдельном файле со своим временем.&lt;/p&gt;
&lt;p&gt;На этом датасете можно построить интересные визуализации динамики графа и прочие клёвые штуки. Почему бы собственно им не поделиться, да?&lt;/p&gt;
</description>
</item>

<item>
<title>Падения астронавтов на Луне</title>
<guid isPermaLink="false">42</guid>
<link>https://repushko.com/all/the-falls-of-astronauts/</link>
<pubDate>Sun, 10 May 2020 17:00:30 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/the-falls-of-astronauts/</comments>
<description>
&lt;p&gt;NASA пару лет назад показало падения астронавтов на Луне во время операций Apollo 15 и Apollo 16.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/moon.gif" width="320" height="240" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>«Средненько». Проверка гипотезы</title>
<guid isPermaLink="false">41</guid>
<link>https://repushko.com/all/srednenko-poc/</link>
<pubDate>Sun, 26 Apr 2020 01:05:52 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/srednenko-poc/</comments>
<description>
&lt;h2&gt;Мотивация&lt;/h2&gt;
&lt;p&gt;Я 3-4 года назад услышал про исследование &lt;a href="https://strelka-kb.com/"&gt;КБ «Стрелка»&lt;/a&gt;, в котором они скрапили фото из социальных сетей (Инстаграм и ВК) и рисовали хитмапы на картах по ним. Оказывается, это называется &lt;a href="https://strelkamag.com/ru/article/est-takaya-professiya-cifrovoi-antropolog"&gt;цифровой антропологией&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Идея кейса, который вдохновил меня, в том, что такое исследование помогло в каком-то там городе РФ выбрать лучшую точку для открытия общественного пространства. Гипотеза такая: если люди где-то делают фото, значит уже проводят там время, а значит там и так всё хорошо с социальной жизнью. В итоге администрации посоветовали открыть новую точку интереса на противоположном конце города от существующей.&lt;/p&gt;
&lt;p&gt;Загорелся идеей сделать нечто похожее, но в сферу каких-то постоянных событий идея оставалась идеей без реализации.&lt;/p&gt;
&lt;p&gt;Закрывая гештальт (как Инстаграм своё API для доступа к гео-информации о фотографиях в 2016-ом) достиг успеха.&lt;/p&gt;
&lt;h2&gt;Реализация&lt;/h2&gt;
&lt;p&gt;Т. к. API Инстаграма оказалось закрытым, решил воспользоваться &lt;a href="https://www.flickr.com/"&gt;Flickr’ом&lt;/a&gt;.&lt;br /&gt;
Суть идеи:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;берем 2019ый год,&lt;/li&gt;
&lt;li&gt;cкрапим фотографии с Flickr для конкретной локации (т.e. города),&lt;/li&gt;
&lt;li&gt;аккуратно накладываем на карту,&lt;/li&gt;
&lt;li&gt;видим места, где люди много фотографируют,&lt;/li&gt;
&lt;li&gt;делаем какие-то выводы.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Например&lt;/b&gt;: люди фотографируют -&gt; там что-то интересное -&gt; логично поселиться во время поездки.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Другой например&lt;/b&gt;: можно увидеть места, которые недостаточно освещены туристически (с точки зрения наличия фотографий) и можно выбрать наоборот район, где живут местные. На примере Берлина эта теория вроде как работает.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/berlin_flickr_project_2019.jpg" width="1280" height="684" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Фотографии в Берлине за 2019ый год&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Найденные подводные камни:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API Flickr’a частично не завелось из python-обертки, которую я нашёл,&lt;/li&gt;
&lt;li&gt;фотографий не так много (250к за год), как в Инстаграме. С геопозицией — еще меньше. За 2019ый год только 44к для Берлина,&lt;/li&gt;
&lt;li&gt;на карте прямыми линиями из фотографий заметны фотопрогулки, когда один человек шел и фотографировал всё, что видел. Так получается много фотографий одного места, хотя это всего лишь от одного человека. В планах написать кастомную функцию хитмапа, которая бы давала больший вес участкам, где фотографии от разных людей. Так получится сильно честнее.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;«Средненько»&lt;/h2&gt;
&lt;p&gt;В процессе возникла идея — сопоставить кучу фотографий одной достопримечательности для получения её «усреднённого» вида. Итог получился сильно лучше, чем я ожидал.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/ansgar-scheffold-cyUf9E_mhFc-unsplash.jpg" width="2560" height="1701" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Оригинальные Бранденбургские ворота&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/average_brandenburg_gates.jpg" width="1280" height="774" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Усреднённые 55 фотографий Бранденбургских ворот&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Когда-то вероятно продолжу и сделаю для других городов.&lt;/p&gt;
</description>
</item>

<item>
<title>У меня есть картина. Я вам ее покажу</title>
<guid isPermaLink="false">40</guid>
<link>https://repushko.com/all/u-menya-est-kartina/</link>
<pubDate>Sun, 26 Apr 2020 00:40:03 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/u-menya-est-kartina/</comments>
<description>
&lt;p&gt;«Яндекс» несколько месяцев назад организовал &lt;a href="https://yandex.ru/lab/ganart" class="nu"&gt;«&lt;u&gt;Галерею нейросетевого искусства&lt;/u&gt;»&lt;/a&gt; и на старте раздавал картины. Успел взять «Нейроподъезд 21».&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/Neyropodezd-0021.png" width="1024" height="1024" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Нейроподъезд 21&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Баркоды сериала «Tales from the Loop»</title>
<guid isPermaLink="false">37</guid>
<link>https://repushko.com/all/barkody-seriala-tales-from-the-loop/</link>
<pubDate>Tue, 21 Apr 2020 15:24:26 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/barkody-seriala-tales-from-the-loop/</comments>
<description>
&lt;p&gt;Сделал баркоды, как и с &lt;a href="https://repushko.com/all/barkody-seriala-chernobyl/"&gt;сериалом «Чернобыль»&lt;/a&gt;. Каждая полоса — средний цвет кадра в этот момент времени.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/S1E1.jpg" width="1700" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;«Loop»&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/S1E2.jpg" width="1700" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;«Transpose»&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/S1E3.jpg" width="1700" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;«Stasis»&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/S1E4.jpg" width="1700" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;«Echo Sphere»&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/S1E5.jpg" width="1700" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;«Control»&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/S1E6.jpg" width="1700" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;«Parallel»&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/S1E7.jpg" width="1700" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;«Enemies»&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/S1E8.jpg" width="1700" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;«Home»&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Кадры из «Tales from the Loop». Часть 2</title>
<guid isPermaLink="false">38</guid>
<link>https://repushko.com/all/kadry-iz-tales-from-the-loop-chast-2/</link>
<pubDate>Tue, 21 Apr 2020 01:14:14 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/kadry-iz-tales-from-the-loop-chast-2/</comments>
<description>
&lt;p&gt;Уже писал про сериал и показывал &lt;a href="https://repushko.com/all/tales-from-the-loop-part-1/"&gt;первую часть&lt;/a&gt; красивых кадров. Теперь — вторая часть. А еще есть &lt;a href="https://repushko.com/all/barkody-seriala-tales-from-the-loop/"&gt;баркоды&lt;/a&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/s5_1.jpg" width="2560" height="1440" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;«Control»&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/s6_2.jpg" width="2560" height="1440" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;«Parallel»&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="2560" data-ratio="1.7777777777778"&gt;
&lt;img src="https://repushko.com/pictures/s7_1.jpg" width="2560" height="1440" alt="" /&gt;
&lt;img src="https://repushko.com/pictures/s7_2.jpg" width="2560" height="1440" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-caption"&gt;«Enemies»&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="2560" data-ratio="1.7777777777778"&gt;
&lt;img src="https://repushko.com/pictures/s8_1.jpg" width="2560" height="1440" alt="" /&gt;
&lt;img src="https://repushko.com/pictures/s8_2.jpg" width="2560" height="1440" alt="" /&gt;
&lt;img src="https://repushko.com/pictures/s8_3.jpg" width="2560" height="1440" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-caption"&gt;«Home»&lt;/div&gt;
&lt;/div&gt;
</description>
</item>


</channel>
</rss>