Кисель в АйТи | AI и технологии
4.03K subscribers
174 photos
8 videos
62 links
Я – Александр, и это мой авторский канал, где я пишу про разработку, AI и работу в айти.

Купить рекламу: https://telega.in/c/kisel_it
Download Telegram
⚡️⚡️⚡️РАЗРАБОТЧИКИ ВСЁ ⚡️⚡️⚡️

Ладно, шучу. Больше никакого кликбейта (сегодня). Сейчас в очередной раз увидел новость от Антропика, что разработчики доживают свой последний год. И снова эти "эксперты" путают карту с местностью. Но у нас же с вами есть голова на плечах? Так что давайте сами и подумаем.

Типичный менеджер/аналитик - человек очень далёкий от кода и архитектуры. Да, двигает задачки, общается с бизнесом, делает красивые таблички, НО В КОДЕ НИЧЕРТА НЕ ПОНИМАЕТ. И не поймёт, даже если попросит ЧатГПТ объяснить. Почему? Да потому что даже если человек знает синтаксис - у него нет самого главного. Нужное мышление нарабатывается годами. Разработка это вообще не про "писать код", вот так открытие!

По какой-то необъяснимой для меня причине каждый раз упускается из вида самое главное. Рабочее приложение != "кнопочки жмутся, всё работает". Это верхушка айсберга, которую видно. Всё на самом деле сильно-сильно глубже. Все эти красивые сервисы, где ты натыкал в графе приложение и оно задеплоилось не применимы ни для одной серьезной компании. Это хорошо работает для стартапа или MVP, у которого трафик 1,5 колеки. И естественно, у человека "не из разработки" нет даже примерного понимания того, как это устроено изнутри. Чёрный ящик. Он не объяснит, почему выбрал тот или иной подход. Не заметит, что он был ошибочным. И это на проектах, в которых дай бог 2-3 сервиса, БД и nginx. Может ли такой человек довести проект до зрелого, стабильного состояния, который сможет развиваться годами? Сомневаюсь. Даже если допустить, что какой-нибудь Claude 5.7 будет в 10 раз умнее нынешнего - проблема не в этом.

Хороший инженер с хорошим инструментом может написать в 10 раз больше хорошего кода. Плохой инженер - напишет в 10 раз больше плохого кода. Пока что я не видел ни одного кейса, который мог бы опровергнуть это утверждение. Ты должен понимать, как работает твоё приложение и почему оно так работает. Это еще один скилл, который каждый разработчик приобретает годами. Это та самая "карта проекта" в голове, которая помогает тебе быстро и эффективно решать задачи. И это понимание спасает от многих проблем и ошибок, которые с ростом проекта становится нереально дорого исправлять. Даже с нейронками.

Еще свежи в памяти падения Cloudflare, AWS и десятка других сервисов. Почему? Потому что инженеры дали слишком много прав агенту, либо невнимательно проверили сгенерированный конфиг или код. НАСТОЯЩИЕ ИНЖЕНЕРЫ, КОТОРЫЕ ПОНИМАЛИ, ЧТО ДЕЛАЮТ. Лицо менеджера-вайбкодера, когда у него упал целый датацентр представили?) Сможет ли медсестра поставить диагноз с chatgpt точнее, чем опытный врач, который использует тот же инструмент? Нет. Получается, что сам "инструмент" - не решающий фактор. Почему все сравнивают "вот я с гпт такооое могу, увольняйте всех бэкендеров"? И что, я с тем же ГПТ могу больше и быстрее.

На самом деле именно разработчики выигрывают больше всех с развитием ИИ. Сделать нормальное приложение сложнее, чем оформить табличку в аналитике. И уж явно сложнее 99% задач, которые выполняют менеджеры. Думаю Клод с этим справится на ура. Всё потихоньку движется к концепции software-инженера, который сам отвечает за аналитику, сроки выполнения и разработку. Ну и конечно же акцент больше сместится на проектирование архитектуры. Мы просто будем тратить меньше времени на код. И этот подход будет в десятки раз эффективнее любого "менеджера-аналитика-вайбкодера".

Что думаете?
2👍94💯3
Сегодня участвовал в олимпиаде по программированию, но не простой. Это была битва на llm-ках. Что я могу сказать? Давно я с таким интересом не решал задачки. А ведь никто такое не проводит, хотя это самый логичный шаг - хватит запрещать использовать то, что все и так будут использовать Всем станет от этого только легче и интереснее.

Главное - подобрать задачки, которые не по зубам современным моделям. Из 6 задач было две таких - больше часа пришлось бороться за каждый процент производительности, чтобы набрать максимум баллов. Можешь жонглировать языками и нейронками, главное - результат.

Естественно кажется, что Opus 4.6 или Gemini 3.1 Pro быстро всех нагнут. По факту они практически бесполезны. High effort thinking играет с ними злую шутку. Оба уходят думать на 20 минут, а потом отваливаются по таймауту/лимиту токенов. Самый главный инсайт - в таких вещах ооочень сильно решает итеративный подход. Чем быстрее ты получишь первый результат, тем быстрее сможешь итеративно довести его до идеала. Пока Опус думал - Gemini Flash уже успела погуглить все самые эффективные стратегии, прогнать их на тестах и выбрать лучшее. Кое кто спустя 2 часа смог выбить 100 баллов в самых сложных задачках (всего два-три человека из пятидесяти). Видимо они догадались использовать более легковесные модели чуть раньше меня.

Что я могу сказать? Опыт крайне интересный. Классическая зубрежка алгоритмов отходит на второй план всё сильнее и сильнее. А новые подходы позволяют добиться такой эффективности, на достижение которой раньше бы просто не хватило времени.
2👍10🔥4💯2👎1
Есть тут у нас пользователи Клод Кода? Расскажите, какие используете скилы.
Они недавно даже плагин для их создания/тестирования выкатили. Но... Я так и не придумал ни одного полезного юзкейса.
2👍4👎1
ИИ хотя бы предупреждает, что может ошибаться. Интернет - нет. Прежде чем бояться галлюцинаций, подумайте, сколько горе-эксперты написали чепухи, которой люди верят до сих пор.

Раньше можно было всему слепо верить, потому что писали люди? Нет, нельзя. Получается, что ничего не изменилось?
1👍84
Зелёные тесты ≠ хорошие тесты

Впервые в истории писать тесты стало легко и совсем не страшно. Вокруг теперь у всех покрытие 80%, 90%, а то и вовсе 100%. И вот тут начинается проблема: зелёные тесты ≠ хорошие тесты.

Проблема в метрике, которой мы все привыкли доверять. Code coverage считает строку протестированной, если она выполнилась во время теста. Всё. Не "поймает ли тест баг в этой строке", не "проверяет ли он правильность результата" - просто выполнилась. Можно написать тест без единого assert, и покрытие вырастет. 500 тестов, 90% coverage, а пользы ноль.

Мутационное тестирование - это совершенно другой путь. В простейшей реализации этот инструмент тупо берёт твой код и намеренно ломает его: меняет > на >=, + на -, True на False. Каждая такая поломка - мутант. Если после мутации все тесты по-прежнему зелёные - значит они ничего не проверяют. Покрытие есть, защиты нет.

Почему это важно именно сейчас?

Потому что нейронка любит зелёненькое. Чем больше зелёных тестов — тем субъективно лучше. 100 тестов внушают больше доверия, чем 10, правда? А внутри там assert response.status_code == 200. assert result is not None. assert len(items) > 0. Тест проверяет, что функция вернула хоть что-то - и радостно зеленеет. Поменяй логику условия, перепутай знак, сломай граничный случай - тест всё равно зелёный. Потому что он проверяет не правильность, а наличие.

Мутационное тестирование - единственный автоматический способ это поймать. Метрика называется mutation score: процент убитых мутантов. 60% - плохо. 90%+ - тесты реально что-то защищают.

Кое-какие инструменты для такого тестирования уже есть: mutmut и cosmic-ray для Python, Stryker для JS/TS, PIT для Java. Медленно? Да, значительно медленнее обычного тест-рана. Но запускать его не нужно на каждый коммит - достаточно на PR в критические модули.

Но есть нюансы. А где их нет, правда?

Первый: мутации рандомные. Замена > на >= - это не баг, который кто-то реально допустит. Это синтетическая поломка. Половина мутантов генерирует код, который в реальности никогда не появится. Ты тратишь время на убийство мутантов, которые не имеют отношения к настоящим ошибкам. Это как тестировать замок, ковыряя его вилкой - формально проверка, по факту мимо.

Второй - ещё хуже. Чтобы убить мутанта, тест должен зафиксировать конкретное поведение. Каждую ветку, каждое значение, каждый edge case. Доведи mutation score до 100% - и ты прибил гвоздями каждую строчку кода. Буквально. Теперь попробуй отрефакторить. Переименовал внутренний метод - 40 тестов красные. Поменял порядок полей в ответе - ещё 20. Тесты превращаются из страховки в кандалы: код работает правильно, но тесты падают, потому что они проверяют не поведение, а реализацию.

Это реально ловушка. Слишком гонишься за mutation score - получаешь хрупкие тесты. Не гонишься - получаешь видимость тестирования.

Перемены - впереди!
И вот тут становится по-настоящему интересно. Представь, что мутации генерирует не тупой набор правил «замени плюс на минус», а нейронка, которая понимает контекст. Которая знает, какие баги реально встречаются в таком коде. Которая мутирует не синтаксис, а логику: меняет порядок проверок, путает граничные условия, забывает обработать edge case - ровно так, как ошибается человек. Или другая нейронка.

Сейчас есть явный сдвиг в сторону таких инструментов, но всё еще ничего достойного не вышло. Но уже скоро точно появится. И это будет совсем другой уровень. Не "выжили ли тесты после рандомной поломки", а "выжили ли тесты после правдоподобной ошибки".

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

Ждём, когда мутанты станут умнее.
211👍7🔥3
Нежданно-негаданно. Вот так вот вдруг Google выкатил TurboQuant — и это, возможно, главная новость с начала года в ML.

Освежим в памяти: когда LLM ведёт с тобой длинный диалог, она хранит в памяти GPU «заметки» обо всём, что уже обсудили. Это называется KV-кэш, и именно он сжирает всю память при длинных промптах.

TurboQuant сжимает этот кэш в 6 раз. Ускоряет вычисления до 8x. Без потери качества. Без дообучения модели. Просто подключил - и работает.

Открытого кода от Google пока нет, но статья уже принята на ICLR 2026.

Сейчас на потребительской GPU с 24 ГБ VRAM можно крутить 7B-модель, но с контекстом 4-8k. Если KV-кэш ужимается в 6 раз, тот же ноутбук тянет 32-64k контекста. Для локальных ассистентов и всего, где важна приватность - это качественный скачок, который открывает много новых дорог новым инструментам. Миллион токенов контекста перестанут быть роскошью. Возможно мы увидим модели с контекстом на порядки выше.

Что ж, посмотрим что нас ждёт дальше.
49👍5🔥5
Видимо в этом году нас удивит не только Google. Из-за ошибки в настройке CMS Anthropic слила 3000 внутренних документов в открытый доступ. И там было кое-что интересное про их новую модель.

Она засветилась там под именем «Claude Mythos». Так же появился новый таер выше Opus - «Capybara». Anthropic по итогу подтвердил существование модели, назвав её «step change» в возможностях и «самой мощной из когда-либо созданных ими».

По данным утёкшего черновика, по сравнению с Claude Opus 4.6 новая модель показывает значительно более высокие результаты в программировании, академическом рассуждении и кибербезопасности.

При этом в черновике прямо говорится, что модель «очень дорога в обслуживании» и компания работает над повышением эффективности перед любым массовым релизом.

В утёкшем же черновике Anthropic заявляет, что модель «создаёт беспрецедентные риски кибербезопасности» и способна находить и эксплуатировать уязвимости значительно быстрее защитников.

Как думаете, уже пора начинать волноваться? 🙊
2👍83🫡2
🥷 axios взломали. Да, тот самый axios.

Сегодня ночью кто-то угнал npm-аккаунт главного мейнтейнера axios и залил две отравленные версии — 1.14.1 и 0.30.4.

Схема элегантная: в зависимости тихо подсунули левый пакет plain-crypto-js. При npm install он ставит RAT - троян удалённого доступа. Под мак, винду и линукс. После установки подчищает за собой следы - в node_modules всё выглядит нормально.

Троян стучится на C2-сервер каждую минуту. Ждёт команд. Может запускать шелл, лазить по файлам, тащить данные. Полный контроль над машиной.

Окно было ~3 часа. Но у axios 100 миллионов загрузок в неделю. Так что потенциально зараженных машин очень много. Если не повезло - лучше ротируйте всё: SSH-ключи, токены, API-ключи. Откатитесь на 1.14.0 или 0.30.3. Пересоберите окружение с нуля.

А главный урок всё тот же: npm-токен мейнтейнера утёк — и весь CI/CD, код-ревью, подписанные коммиты оказались бесполезны. Атакующий просто зашёл через npm CLI мимо всего.

Такие дела.
Please open Telegram to view this post
VIEW IN TELEGRAM
1😱7🔥2😢2
Нашёл просто мега полезный сервис. Называется GitHub. Можно хранить код ПРЯМО В ИНТЕРНЕТЕ. Не на флешке, не в архиве на рабочем столе, не в письме самому себе - а на сервере. И он ещё и версии сохраняет. Я удалил файл - а он помнит. Я сломал всё - а там кнопка "откатить". Пять лет жизни среди папок "project_final_v3_ПОСЛЕДНИЙ_точно" - и всё это время решение было на расстоянии одного сайта.

Будущее наступило! Ура! 🥹
1😁17😱3🙏2👎1
Короче, я долго думал, писать об этом или нет. Решил, что да. Вы заслуживаете узнать об этом из первых уст.

Последние три месяца я проходил собеседования в Anthropic. Пять раундов. System design на салфетке в зуме в 3 часа ночи. Финальный созвон лично с Дарио Амодеи, где он спросил, как я отношусь к AGI. Оффер пришёл вчера вечером. Должность — Head of Applied Research. Пакет такой, что у меня от воодушевления до сих пор трясутся руки.

Только есть одно условие: полный информационный карантин. Никаких блогов про технологии и AI. Вообще. «Ты можешь писать про котиков и рецепты, но не про AI» — дословная цитата HR.

Я посмотрел на оффер. Посмотрел на подписчиков. На каждый пост в канале. На реакции. И снова на оффер.

И написал: «Thank you for the opportunity, but I have to decline.»

Я остаюсь с вами. Просто подпишитесь и поставьте лайк, наконец-то.
3😁30🤝105🌚3🫡3🤯1
Не оставляйте ваш Claude без присмотра 😂

Вот и моя базка дропнулась. Повезло, что только локальная. Логика агента железная - в БД были миграции с другой ветки. Вот он и нашел quick fix в виде DROP SCHEMA.

Справедливости ради - сработало, конечно. А если бы это был прод?)
Please open Telegram to view this post
VIEW IN TELEGRAM
1😁11
Anthropic выкатили Claude Managed Agents.

Теперь можно запускать AI-агентов прямо в облаке Anthropic. И это чудо уже в превью умеет плодить других агентов. Т.е у нас полноценная serverless-оркестрация агентов без виртуалки, Docker, танцев с LangChain.

Описываем агента: что он умеет, какие инструменты использует, в каком окружении работает. Дальше закидываем ему задачу - и он уходит работать. Сам читает файлы, пишет и запускает код, ходит в интернет, обрабатывает ошибки. Это может работать часами без участия с нашей стороны. Потом агент вернётся с результатом. Нам остается думать только о бизнес-логике, всё остальное просто работает.

Стоит это чудо $0.08/час активного рантайма + токены. Время простоя не считается.

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

Уже вымерли промпт-инженеры. Вымрут и агентные гуру или как там они себя называют? Рынок снова обогнал курсы быстрее, чем можно было предположить.
2👍7🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Вот теперь заживём, клавиатура от Anthropic 💪

Слава богу, что это всего лишь генерация. Но идею рано или поздно кто-то подхватит.
Please open Telegram to view this post
VIEW IN TELEGRAM
7🤣4
Ура, пятница! Впереди выходные, можно выдохнуть и отдохнуть, наконец-то.

Давайте выберем с вами фон для онлайн-собеседования, после которого точно не возьмут на работу. Я начну, кидайте варианты.
😁11
Сегодня такой сонный день, что даже Claude Code не проснулся 🛏

По уровню иногда кажется, что GPT 3.5 снова с нами
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5
Claude: тупой и еще тупеет

У меня давно были подозрения, что качество начало проседать. Но тут всплыла история, которая смогла подтвердить это на реальных цифрах. Senior AI Director из AMD проанализировала 6 852 сессии Claude Code за январь-март и выложила issue на GitHub с говорящим названием:"Claude Code is unusable for complex engineering tasks with the Feb updates" (Claude Code стал непригоден для сложных инженерных задач после февральских обновлений)

Главные факты оттуда:
1. Медианная длина reasoning упала с ~2200 до ~600 символов. Модель буквально стала меньше думать.
2. Read-per-edit (сколько файлов модель читает перед правкой) упал с 6.6 до 2.0. Claude правит код, не читая контекст.
3. 173 случая за 17 дней, когда модель «сдавалась» или спрашивала разрешения продолжить. До 8 марта - ноль.
4. При решении тех же задач от человека модель стала генерировать в разы больше внутренних запросов - ошибается, ретраит, ходит по кругу.

Anthropic это подаёт как «оптимизацию для среднего пользователя». На деле произошло два изменения: adaptive thinking (модель сама решает, сколько думать - иногда решает не думать вообще) и тихое понижение дефолтного effort с high до medium. Оба снижают нагрузку на GPU. Как именно модель решает сколько ей думать - загадка, но теперь качество зависит даже от времени суток. Всё это говорит само за себя - вычисления сжигают кучу денег, а мощностей на всех пользователей явно не хватает.
2🔥9👍6
Не ИИ единым, как говорится. Пора вспомнить, что за пределами LLM-ок тоже происходят безумные вещи. А они ведь происходят. Квантовая физика опять делает вещи, от которых у нормального человека плавится мозг.

Собрали первую в мире рабочую квантовую батарею. Не на бумаге, не в симуляции - реальный прототип. Лазер, фемтосекундная зарядка, наносекунды работы. Соотношение - миллион к одному. Секунда зарядки = 11 дней работы, если масштабировать.

Но главный прикол даже не в этом. У обычных аккумуляторов всё логично: больше ёмкость - дольше заряжать. У квантовых наоборот. Чем больше ячеек - тем быстрее зарядка. Физика буквально работает задом наперёд и это не баг, а фича 😂

Энергии в прототипе правда хватит разве что на 1/200 000 полёта комара. Но до вчерашнего дня эта штука существовала только в учебниках. А теперь - на столе в лаборатории. Путь от "теоретически возможно" до "мы это собрали" обычно самый сложный.

Статья в Nature (https://www.nature.com/articles/s41377-026-02240-6#citeas)
2🔥162
Лечим отупевший Claude

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

Для сложных сессий обязательно выставляем:
/effort max

Это поднимает reasoning на возможный максимум. Опция скрыта из доступных, т.к очень много жрёт. По дефолту сейчас почти всегда стоит medium - модель экономит на мышлении.

Так же мы можем попытаться перебить системный промпт, который склоняет модель к экономии даже когда это приносит больше вреда, чем пользы. В CLAUDE.md проекта добавить конструкцию в духе:
When implementing solutions, prioritize correctness and maintainability over brevity. Do not optimize for lines-of-code or quick resolution at the expense of correctness. Always read related files before editing.


Ещё мы можем явно выключить адаптивный режим размышлений:
export CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1

Этот адаптивный режим - "тёмная лошадка". С его появлением модель стала глупеть особо яростно именно тогда, когда Антропикам нужно снизить нагрузку на сервера. Модель думает с фиксированным бюджетом на каждом ходу вместо «а стоит ли вообще размышлять?». Да, это медленнее, но Boris Cherny (создатель Claude Code) лично подтвердил - именно на ходах с нулевым reasoning появлялись выдуманные SHA коммитов и несуществующие пакеты.
1👍6🔥42
Всё. Над роботами больше не шутим.

Год назад лучший робот пробежал полумарафон за 2 часа 40 минут. Вчера в Пекине - 50:26.

В три раза быстрее за 12 месяцев. Так еще и полностью автономно. За управление пультом теперь появился штраф с коэфицентом к финальному времени.

Для масштаба: действующий мировой рекорд у людей - 57:20 (Киплимо, март 2026). Сравнение конечно натянутое, у роботов своя трасса и инженеры рядом.

Под капотом связка, которая за последний год стала стандартом. Модель учат в симуляции: тысячи виртуальных копий одновременно бегут (за пивом) и миллионы раз падают. Снова бегут (за пивом), снова падают. И так пока не научатся нормально двигаться. Ну а чтобы модель не привыкала к стерильным виртуальным условиям, в симуляции постоянно подкручивают трение, ветер, вес, шум сенсоров. Это позволяет накатить готовую модель на робота сразу, без дообучения,

Важная деталь - победила команда Honor. У них даже нет своей робо-платформы. Всё обкатывали основе Unitree. Это подкрепляет мнение о том, что сейчас решают именно алгоритмы. Люди давно научились делать хорошее железо, только эффективно использовать его не научились. Так что не удивительно, что хороший софт сейчас даёт кратно большее преимущество и такие впечатляющие результаты.


Полный марафон тут
https://www.youtube.com/live/zqgc9C3cC6U?si=TxxjYQn5AagALabb
2👍85🔥4
Говорим с прошлым

talkie-1930 - языковая модель на 13B параметров, обученная только на текстах до 1931 года. Никаких упоминаний ядерной бомбы, интернета, полетов в космос. Зато много газет, журналов, писем и патентов того времени.
Это самая крупная винтажная LM на сегодня. Обучена на 260B токенов исторических текстов. Граница 1930-го выбрана не случайно: в США работы переходят в общественное достояние (public domain) через 95 лет после публикации - то есть в 2026-м легально доступны только тексты, изданные до конца 1930-го. Параллельно авторы тренировали "modern twin" на современных веб-данных - с той же архитектурой и тем же бюджетом FLOPs, чтобы было с чем сравнивать.

По факту - всё ещё эпоха GPT-2. До GPT-3 винтажные модели пока не дотягивают, и упирается всё в данные. 260B токенов - потолок текущего корпуса. Всё упирается в данные. Основанный на нейросетях OCR портит данные галлюцинациями о современных событиях. Классическое распознавание не дотягивает по качеству. Следующий шаг авторов - GPT-3-level модель к лету. До уровня GPT-3.5 можно будет добраться, только если расширить корпус до 1+ триллиона токенов исторических текстов.

Только вот зачем? Винтажные LM - это в первую очередь исследовательский инструмент, а не продукт. На них проверяют ровно то, что на современных моделях проверить нельзя из-за загрязнения данных:

- Способность предсказывать будущее.
Берут ~5000 описаний событий из рубрики New York Times "В этот день", считают "удивлённость" модели на каждом. Чем дальше во времени событие - тем более неожиданное оно для модели.
- Способность к открытиям. Может ли модель, обученная до 1911-го, самостоятельно прийти к общей теории относительности (Эйнштейн, 1915)? Пока нет. Но это конкретный эксперимент, а не философствование на конференциях.
- Обобщение за пределы обучения. Может ли модель, никогда не видевшая компьютера, написать код на Python по нескольким примерам в контексте? Оказывается, может - но пока только однострочники и мелкие правки чужих функций. В одном из тестов модель реализовала функцию декодирования шифра, получив в контексте функцию кодирования.
- Чистый сигнал о роли данных. Все современные LM так или иначе обучены на вебе - напрямую или через дистилляцию. Что в их поведении - про язык вообще, а что - про этот конкретные данные? На винтажных моделях можно выяснить как именно влияет тип данных на характер модели.

У них на сайте есть чат, очень интересно помучать его вопросами. Я вот спрашивал про полёт человека в космос, модель искренне считает, что это из разряда невозможного. Забавно. А ведь лет через 50 такой же эксперимент будут проводить с текущим Opus 4.7 или ChatGPT 😂
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍74🔥3😢1