Получи случайную криптовалюту за регистрацию!

Типа про IT

Логотип телеграм канала @tipaproit — Типа про IT Т
Логотип телеграм канала @tipaproit — Типа про IT
Адрес канала: @tipaproit
Категории: Технологии
Язык: Русский
Количество подписчиков: 1.24K
Описание канала:

Типа про IT и вот это вот всё. Авторский блог exclusively for Telegram.

Рейтинги и Отзывы

1.50

2 отзыва

Оценить канал tipaproit и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

0

3 звезд

0

2 звезд

1

1 звезд

1


Последние сообщения 2

2022-05-10 20:28:58 Никогда в жизни не занимался бы ничем подобным, если бы лицензия на свежие mbtiles не стоила 1800 долларов в год. Покажется дикостью, но это всё равно дешевле, чем MapTiler Cloud, MapBox Tile API или Google Maps. Точнее, существует фиксированная цена вместо динамического подсчёта per 1000 tiles. Просто открыть карту это уже около 10 тайлов, если что.

Как и с любым open-source, короче. Хочешь трахаться? На здоровье. Не хочешь? Вот тебе коммерческая поддержка и решения вокруг открытых данных и продуктов. Но если хоть немного разобраться, а полная карта мира не нужна, можно настроить собственный pipeline и сэкономить кучу денег. Ну а для полной карты можно арендовать хороший CPU-инстанс и посчитать всё там, дня за 2-3 он должен справиться.

Карты — это долго, дорого и довольно сложно. В целом, не удивительно, что платные решения платные. Но не настолько же.
463 viewsedited  17:28
Открыть/Комментировать
2022-05-10 20:28:58 Ядро проекта Громада — интерактивная карта Украины.

За последний месяц я узнал об экосистеме OpenStreetMap чуть больше, чем мне хотелось бы. Кажется, что существует какой-то заговор, чтобы при формальной бесплатности и открытости OSM-данных self-hosting оставался уделом больших корпораций с большими мощностями, а все остальные могут пойти нахуй, то есть могут ежемесячно заносить деньги Mapbox или какому-нибудь Google за использование картографических API.

По факту, мне не нужна карта всего мира, к тому же постоянно скачивать 115 гиг данных и рендерить их целую неделю в надежде, что в процессе ничего не упадёт с segfault я себе позволить не могу. К счастью, Geofabrik, дай бох им здоровья, предлагает data extract по регионам и Украина весит всего 666 мегабайт. С тем только нюансом, что extract строго ограничен bounding box’ом региона, то есть я не получу даже контуры других стран, не говоря уже про всякие прочие реки-океаны.

Для дополнительных полигонов, чтобы вокруг Украины не было сплошного серого пятна, существует другой источник данных — Natural Earth. Оттуда скачиваются недостающие shape-файлы, которые участвуют в дальнейшем тяжеловесном процессинге.

Чтобы сырые данные превратились в красивую векторную карту, необходимо:

1. Сконвертировать shp-файлы в geojson-файлы с помощью инструмента ogr2ogr
2. Сконвертировать geojson-файлы в формат mbtiles через tippecanoe
3. Отрендерить основные osm.pbf данные в mbtiles с помощью tilemaker
4. Смёржить два mbtiles через tippecanoe

Возможен вариант подключения shp-файлов непосредственно в tilemaker, но для этого придётся изучить и модифицировать его конфиг на Lua, который занимается процессингом точек и полигонов. Из коробки, разумеется, ничего не работает, часть данных не отображается, требуется поправка на уровни масштабирования и прочее.

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

Для этого готовим тайловый сервер, он будет резать всё на тайлы в реальном времени и порционно выдавать клиенту для рендеринга. После недолгих экспериментов я остановился на mbtileserver, потому что zero configuration и простое горизонтальное масштабирование.

Ну а чтобы отобразить тайлы в браузере с привычным look-and-feel, используем MapLibre, форк уже коммерческой Mapbox GL. Для работы ему нужна тема, которая описывает движку как именно отображать эти самые тайлы (шрифты, толщина линий, цвета и многое другое). В своём проекте я использую симпатичную, на мой вкус, OSM Bright.

Интересный факт, конфигурация темы не включает в себя нумерацию зданий, которую, как мне кажется, все хотят по-умолчанию. Также интересный факт, что иногда не понятно где зарыта собака — в процессинге или в рендеринге? Поэтому для анализа mbtiles приходится расчехлять полновесную QGIS.

Ну и на react-map-gl мы заканчиваем нашу цепочку преобразований сырых OSM-данных в красивые перелёты по карте в браузере.
414 viewsedited  17:28
Открыть/Комментировать
2022-04-07 15:50:39 На Громаде первое большое обновление — интеграция с Прихистком. Хороший результат, осталось только доработать поисковую механику дополнительными фильтрами. Но у Громады есть свой канал с новостями, я к вам не с этим, я к вам с наболевшим.

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

Тот же Helm для чего придумали? Чтобы ты такой helm install bla/blabla и у тебя через пару минут на кластере завёлся blabla, automagically. На деле же, у меня не возникло проблем только с bitnami/postgresql и спасибо им за это.

Вот например. В качестве геокодинг-движка активно используется Nominatim, о котором я упоминал в прошлом посте. Сам по себе продукт тоже вызывает у меня вопросы, но ничего более зрелого я не нашёл, поэтому маємо шо маємо. У Nominatim довольно лаконичный API, из которого я использую только /reverse и /lookup. Их полнотекстовый /search абсолютно непригоден для адресного автокомплита (они где-то писали, что так и надо), поэтому для полей ввода адреса, которые вы видите на сайте, у меня собственный набор materialized views с индексами под капотом с дальнейшим реверсом через Nominatim.

Для обработки данных с Прихистка мне потребовалось использовать в том числе и /search, потому что люди на Прихистке вбивают свою локацию в произвольной форме, точно известен только регион, а мне нужен как бы longitude и latitude, чтобы отобразить маркер. И когда настало время выкатываться, стало понятно, что с Nominatim в кластере что-то не так. Приложение, которое делает reverse geocoding через /search падает. Кубер его пытается переподнять, оно снова падает, ну вы поняли.

Смотрю логи контейнера, а там от Nominatim прилетает какой-то непонятный html, потому и падает (оно и должно падать в таком случае). Но почему? Локально работает, остальные endpoint’ы работают, pod явно видит Nominatim… короче странно это всё.

Запрос к API на /search , как я понял, зачем-то редиректился на UI, отчего два вопроса — почему у них такой конфиг Apache и зачем мне на сервере какой-то UI? Оказалось, что в Helm chart’е UI включен по-дефолту. Выключаем. Падает весь Nominatim. Включаем обратно Форкаю chart, разбираюсь. Вырезаю весь намёк на UI, чищу немного остальные ямлы, раскатываю уже свою версию. Работает, но не /search. При чём не работает он как-то по-тихому. Смотрю логи Nominatim, а ему нужен какой-то tokenizer.php, но по нужному пути его нет. Гугление ничем не помогло… но почему всё работает локально?

Потому что локально в одном контейнере поднимаются и Postgres, и сервис, а в Dockerfile есть такой интересный трюк, который нельзя применить в случае, когда у тебя база и приложение разнесены. Да, chart сломан. Простое решение — берём локально tokenizer и доставляем его через ConfigMap по адресу. Ура, всё работает! Вот и ночь прошла.

Короче говоря, K8s — это весело.
524 views12:50
Открыть/Комментировать
2022-04-04 10:51:00 ​​ Где-то на третий день войны, когда в полной мере пришло осознание ужаса происходящего, я всерьёз озадачился желанием сделать хоть что-нибудь, чтобы помочь своей стране в сложившейся ситуации.

Моя информационная поддержка, учитывая размер моей аудитории, находится где-то на уровне “всё это абсолютно бесполезно”, а моя финансовая поддержка ВСУ — капля в океане военных расходов. Что с этим всем делать — непонятно.

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

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

Hromada.me — это интерактивная карта Украины, на которую любой желающий может наносить информационные маркеры с запросом о помощи или предложением помочь, без регистрации и СМС. Кажется, у меня получилось создать простой, но достаточно функциональный MVP, которым можно пользоваться уже сегодня.

Пришлось собрать в кучу вообще весь свой опыт и быстро добрать новый. Из интересного:

- Карты полностью self-hosted, на базе OpenStreetMap и MapLibre. Геокодинг на базе Nominatim и PostGIS. Это даёт мне полную свободу в том, как карта выглядит, какие данные использует и как с этим всем работать.

- Kubernetes-кластер, вопреки традициям и здравому смыслу, я поднял на DigitalOcean. Разумеется, нет никакой разницы где у тебя Кубер, кроме цены. Статика там же, в Spaces. Прошёл заодно CKAD-сертификацию, потому что хрен бы я это всё правильно развернул. Ну и Helm, конечно.

- На фронтенде всё довольно стандартно: React, TypeScript, styled-components и так далее. Кода прилично, есть куда рефакторить.

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

Все буде Україна
1.2K views07:51
Открыть/Комментировать
2022-02-28 01:04:12 Мы сделали очень простую страницу на английском языке для тех, кто хочет помочь Украинской Армии в войне с Россией.
Принимаем платежи с карты любого банка мира.

Пожалуйста, очень-очень вас прошу максимальный репост.
Передайте ссылку всем вашим друзьям иностранцам.
Но и сами можете платить, она работает и для Украинцев.
Огромное количество запросов на помощь из-за рубежа.
Нам так сильно нужна ваша поддержка, дорогие Друзья!

Слава Украине!

Ссылка:
https://uahelp.monobank.ua/
458 views22:04
Открыть/Комментировать
2022-02-24 14:26:05 Наш день сегодня начался в 6 утра с тревожных звонков и сообщений — Путин пошёл с войной на Украину.

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

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

Украинцам же хочу напомнить, что Путин это не вся Россия и мало кто из россиян действительно хочет этой войны.

Держитесь и берегите себя
484 viewsedited  11:26
Открыть/Комментировать
2022-02-01 21:36:10 Коллега подкинул задачку, которую я хрен бы когда решил самостоятельно, такое тыком не решается.

Дан массив неважно каких данных фиксированного размера:
['1', '2', '3', 'a', 'b', 'c', 'd', 'e']

И дано некое число K. Нужно реализовать функцию rotate_left, которая смещает элементы списка на K элементов влево:
['a', 'b', 'c', 'd', 'e', '1', '2', '3']

Можем заодно и rotate_right запилить, чтобы двигать таким же образом вправо:
['c', 'd', 'e', '1', '2', '3', 'a', 'b']

И если вам кажется, что всё очень просто, алгоритм должен отработать за O(n) по времени и O(1) по памяти.

#алкоритмы
474 viewsedited  18:36
Открыть/Комментировать
2022-01-25 19:41:10 Сегодня задачка простая, но очень популярная на собеседованиях.

Дано бинарное дерево, нужно найти все его пути от головы до пят. Например:

1
/ \
2 3
/ \
4 5


Решением будет матрица вида [[1, 2], [1, 3, 4], [1, 3, 5]]. Неважно как именно это будет реализовано, лишь бы работало.

#алкоритмы
399 views16:41
Открыть/Комментировать
2022-01-25 15:50:40 Kubernetes: The Documentary (пока что есть только Part 1)
442 views12:50
Открыть/Комментировать
2022-01-24 18:20:17 Новая задача вам, со звёздочкой.

Предположим, имеется X гетеросексуальных мужчин и X гетеросексуальных женщин. Как у мужчин, так и у женщин есть свой личный “краш-рейтинг”, отсортированный в порядке предпочтения, от большего к меньшему. Нам нужно их всех успешно переженить таким образом, чтобы создать устойчивые пары. Например:

guy_preferences = {
'andrew': ['caroline', 'abigail', 'betty'],
'bill': ['caroline', 'betty', 'abigail'],
'chester': ['betty', 'caroline', 'abigail'],
}

gal_preferences = {
'abigail': ['andrew', 'bill', 'chester'],
'betty': ['bill', 'andrew', 'chester'],
'caroline': ['bill', 'chester', 'andrew']
}


Andrew предпочёл бы Caroline, но если не сложится, готов и на Abigail. На худой конец — Betty. У самой Caroline этот наш Andrew на последнем месте, так что скорее всего она остановится на Bill’е.

Алгоритм нахождения “устойчивых пар”, он же “алгоритм отложенного согласия”, “stable marriage problem“, “алгоритм Гэйла-Шепли”, в 2012-м отмечен Нобелевской премией по экономике, хотя сам он не нов и был разработан ещё в 1962-м. В русской Википедии всё как-то замуточно описано, но простыми словами происходит следующее.

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

#алкоритмы
508 views15:20
Открыть/Комментировать