Telegram Web Link
Forwarded from Ever Secure (Aleksey Fedulaev)
Друзья, это свершилось! 😱

Честно? Мы сами до конца не верили, что этот день настанет... но она — в печати!
Да-да, наша книга теперь существует в реальном, бумажном формате 📖🔥

Уже завтра мы забираем первую партию, и поверьте, она выглядит круче, чем мы ожидали!
А совсем скоро вы тоже сможете её заказать — предзаказ уже на подходе 👀

Следите за новостями, будет кое-что интересное… Может быть, даже небольшой сюрприз для первых заказов?🤔

👀@ever_secure
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17
Forwarded from Sergei
Бля, у меня на работе был недавно тоже кринж-пациент.

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

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

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

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

Титаническое усилие воли понадобилось мне, что бы сказать "а, окей, понятно", вместо "МИША БЛЯТЬ, ТЫ ЧТО, ДОЛБАЕБ? КАКОЙ БЛЯТЬ БЭНТЛИ, ЭТО БЛЯТЬ ГРАНТА НА МЕХАНИКЕ, В ЛУЧШЕМ СЛУЧАЕ. МИША, БЛЯТЬ, ГДЕ ТЫ СУКА ВИДЕЛ НАДЕЖНЫЕ ОФФРОАД-КОРЧИ? ОНИ СЕЙЧАС С НАМИ, В ОДНОЙ КОМНАТЕ? МИША, У ТЕБЯ МОНИТОРИНГ БЛЯТЬ НА КОЖАННЫХ МЕШКАХ, ПРОСНИСЬ, БЛЯТЬ, ТЫ СЕРИШЬ!"
🫡12😁10🔥4😭4💊31💔1
В эфире была нерегулярная рубрика "хуя пичот".
Извините за авторскую орфографию, и спасибо за внимание
🤝73😁3🫡3😱1💊1
Media is too big
VIEW IN TELEGRAM
Спасибо подписчику
😁10💯3
💊12😁7🫡5💔3
Мальчик: постит на линкедине, вылизывает там жопу своим коллегам и друзьям в комментариях под капитанскими постами
Мужчина: постит в Тяпкина

Шансы быть нанятым это добавляет одинаковые никакие🤷‍♂️
💯8😁6🤝5
Если говорить про опенсорс, то я хотел было в лоб рассказать вам про один опенсорс-проект.
Пользую его на ежедневной основе, но в лоб как-то тупо, поэтому давайте с предисловием.

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


Предположим, что вы ищете приложение для работы с картами на мобильный телефон и\или планшет.
Операционные системы, как водится, Android или iOS.
Требования\пожелания на первый взгляд кажутся довольно простыми:
- работа без сотовой сети
- адекватные outdoor-карты (тропки, изолинии, обрывы, пики, вот это все)
- городские карты (нормальные, а не палка-палка-огуречик)
- адекватная навигация по предыдущим двум пунктам, как автомобильная, так и пешеходная
- интерфейс, с юзабилити и скоростью работы из этого тысячелетия
- бесплатность, ну или хотя бы понятная модель покупки, а не бесконечные говноподписки

Ну не рокет-саенс же, правда? Го посмотрим, что есть на рынке
1) Гугл-карты. Хорош с автонавигацией, условно-неплох в городской навигации в больших городах, посредственная автономная работа, и абсолютно бесполезен на природе.
Существует отдельная категория еблан-туристов, "схожу на трехтысячник в сандалях и с гугл-картами". Почему-то часто встречаются со спасателями во время своих приключений 🤷‍♂️

2) Страва-коммуты. Мега-подписочное дерьмо, со своими авторскими алгоритмами работы с картами и навигацией. Умеренно-юзабельно на компе, но ужасно на мобилках. Автономность тоже сомнительная

3) Комбайны-убийцы а-ля OSMand или Locus Maps. Уровень глюкавости и тормознутости просто запредельный, а глаза кровоточат тупо по кд. Полная автономость (за денежку) и всратая навигация. Возможность (и как следствие, необходимость) настраивать тупо все

4) ????. Offline-first, использует легковесные карты, собранные на базе OSM. Круто делает навигацию на природе, чуть лучше среднего для авто. Быстрый и лаконичный интерфейс. Бесплатный и опенсорсный.

Собственно, последний пункт это CoMaps, ex OrganicMaps, ex ex MapsMe.
Первый из этой цепочки в свое время пошел по рукам, после чего появился органик.
Меньше года назад в опенсорсе произошел церковный раскол, и вот теперь у нас с вами новая итерация под названием CoMaps.

Так что если у вас закрадывались сомнения на тему удобства гугла для природных приключений, или есть потребность в оффлайн-картах без регистрации и смс, или же лагучие интерфейсы вызывают у вас нервный тик (как у меня, лол), то рекомендасьон.
Благо как раз первый релиз во всех сторах вышел.
🔥15🤝53
Что-то в нашем уютном инженерном канале давно не было нихуя инженерного (а местами и вообще нихуя не было).
Давайте в качестве исправления расскажу вам о том, как собрать свою собственную geoip базу.
Только давайте сразу решим, что вопрос "нахуя?" останется за скобками данного повествования, потому что я сам не знаю. И всё же.

Нам зачем-то понадобилась своя geoip база.

Разумеется, не платная maxmind geoip или её бесплатный огрызок geoilte, но и не уёбищный geofeed, который могут читать не только лишь все приложения. Настоящая, крафтовая, самолепная geoip база, заполненная своими данными в нужном только нам одним виде. высек отсылку? ебать ты не такой, как все

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

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

«А что они тогда продают за деньги?" - спросите вы. А продают они данные внутри этих баз, чем дороже, тем точнее и тем чаще приносят обновления. Но нам насрать, мы-то хотим СВОЮ, чтобы вообще свои данные и своя структура, а не бездушные тестовые пресеты от разработчика.

Ну а раз так, то погнали во вторую часть.
🔥43🫡2
первая часть

С чего начинается разработка собственного решения? Правильно, с тщательного изучения интернетов на предмет "спиздить себе чужое готовое решение".

Если посмотреть, что вообще есть вокруг geoip и обвязок, то можно найти реализацию writer’а базы с нуля на go, кучку каких-то конвертеров из csv и даже самописные writer’ы на разных языках и на питоне. И куда не загляни, везде лежат примеры, где из маленькой csv’шки с сетями и полями получается рабочая база. Но радоваться этому не стоит.

Начнём с того, что многие из этих штук безнадёжно устарели и пытаются создать базу в старом .dat формате. Не, её тоже многие хавают, но и сам код остался в тех же временах. Где-то придётся собирать бинарь из плюсового кода, где-то петухон2, что-то вообще не собирается, документации нет нигде. Но даже если поборете эти проблемы и попытаетесь собрать свою собственную geoip из csv, то скорее всего получите хуиту. Впрочем, всякие валидаторы, проверяторы и лукаперы geoip баз будут неплохо эту хуиту хавать и даже чот показывать, но не в реальных приложениях. А дело вот в чём.

Практически во всех примерах можно увидеть csv формата

net,country,city
172.16.5.0/24,HL,looserville


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

Если взять любую geoiplookup утилиту (а часто их вариации лежат рядом с кодом writer’а и их тоже можно собрать), то она схавает свежесозданную базу, ip для лукапа и отрапортует, что вот, да, ip 172.16.5.5 в подсети 172.16.5.0/24, поле country имеет значение HL, поле city имеет значение looserville.

Более того, если зайти в доку maxmind, там можно найти спеку по полям и там тоже будут и city, и country, и country_code_iso и ещё какая-то хуйня, много, очень много хуйни...

Которая для создания валидной geoip базы совершенно необязательна, лишь бы бинарь был правильно сформирован и там были какие-то данные. Это уже база, да, только пользоваться не получается. Потому что, читая ту же документацию, у вас может сложиться ошибочное мнение, что есть база уровня Country, со своими полями и схемой. Есть база уровня City, тоже со своей схемой, есть в них какие-то общие поля, айдишники и прочее, что надо повторить и всё заработает. Но это не так, как мы уже поняли.

На самом деле база MaxMind (что старая .dat, что актуальная .mmdb) имеет внутри неонку предсобранное бинарное дерево и значения, которые по этому дереву можно быстро искать. И ещё немного метадаты самой базы. Поэтому что вы туда положите, то у вас и будет в дереве (гусары, молчать!).

А эти вот красивые поля типа country_code_iso это по сути алиасы для удобства написания запросов к базе и они сработают, если под ними данные будут лежать в правильном виде. Именно поэтому у MaxMind на гитхабе лежит и поддерживается эталонная программная реализация writer’a, а не волшебный бинарь, кидающий нужные столбики из csv в правильные поля.

Так, с теорией вроде разобрались, практику продолжим ковырять в третьей части
🤝42🔥2
вторая часть

Да, первая часть получилась несколько суховатой, но сейчас мы разгоним немного повествование.

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

ip_range,city,isp


и перекладывает это в базу в формате

writer.insert_network(
IPSet(cidr),
{"country": index[0],
"isp": index[1]})


то есть для каждой подсети создаёт соответствующие поля country и isp. Но драма в том, что база выглядит несколько не так.

Первым делом надо понять, что у каждой страны, внезапно, может быть несколько названий. Во-первых, это двухсимвольное сокращения по ISO-какой-то-там, во-вторых ещё какое-то имя, точнее имена. Потому что никогда не нужно забывать про ЛОКАЛЬ.

То есть наше поле country выглядеть должно чуть-чуть посложнее

"country": {
"iso_code": "HL",
"names": {
"en": "Heartland",
"ru": "Хартланд"
}
}


Та же петрушка и с полем city

"city": {
"names": {
"en": "Looserville",
"ru": "Лузервиль"
}
}


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

 "location" : {
"accuracy_radius": 10,
"latitude": float(56.110977),
"longitude": float(47.475496)
}


Координаты, да. Хвала яйцам, хотя бы они в едином десятичном формате, почему нам и понадобился тип чтобы его корректно конвертировало в .mmdb совместимый.
Собираем всё в кучу, получаем код для добавления записи

geo_obj = {
"country": {
"iso_code": "HL",
"names": {
"en": "Heartland",
"ru": "Хартланд"
}
},
"city": {
"names": {
"en": "Looserville",
"ru": "Лузервиль"
}
},
"location" : {
"accuracy_radius": 10,
"latitude": float(56.110977),
"longitude": float(47.475496)
}
}

writer.insert_network(IPSet(cidr), geo_obj)


И так для каждой нашей подсети, для чего сгодится итератор по csv файлу. В итоге получается .mmdb файл базы, который С БОЛЬШОЙ ВЕРОЯТНОСТЬЮ заработает в вашем приложении, которое ожидает ПРИМЕРНО такой схемы. Почему так расплывчато? Потому что в спеке есть куча дополнительных полей типа is_in_european_union для country или timezone для location. Вариантов масса и что нужно конкретно вашем клиенту/приложению/либе придётся гадать по документации или даже по коду.

Такие дела. Тут ещё должен быть какой-то финал, я его не придумал, потому что все мы прекрасно понимаем, что пригодится это знание вам примерно никогда и даже на собесе им не выебнуться. Разве что в баре под пиво приятелю рассказать и то сомнительно.

Так что давайте лучше послушаем музыку:

https://music.yandex.ru/album/761300/track/7181422
🔥9😁43
😁82💔1
https://music.yandex.ru/album/822275/track/7863846
Честное слово, я хотел принести вам этих ребят до того, как на Я.Музыке остался только один их альбом.
Но теперь имеем то, что имеем 🤷‍♂️
💔3🔥2
Вместо тысячи постов про найм
😁13💯2🤝21🫡1
🤝3🫡3💊21
Forwarded from opennet.ru
Выпуск языка программирования Python 3.14

После года разработки опубликован значительный выпуск языка программирования Python 3.14. Новая ветка будет поддерживаться в течение полутора лет, после чего ещё три с половиной года для неё будут формироваться исправления с устранением уязвимостей.

https://www.opennet.ru/opennews/art.shtml?num=64017
Вот и дожили до отключения GIL. Что дальше? Обработка ошибок в Go?
😁5😱2💔2
2025/10/17 20:06:10
Back to Top
HTML Embed Code: