Mark's blog
327 subscribers
92 photos
2 videos
1 file
63 links
Thoughts of a part-time online troll and software engineer.

My DM — @difhel

@persikfanclub @MyTonWalletEn @elaning

https://difhel.dev
Download Telegram
Решил поделиться своими активно используемыми расширениями в VS Code. Если давно хотели мигрировать с JetBrains или обустроить себе полноценное окружение в Cursor, самое время.

🐈 https://difhel.dev/blog/vscode-extensions
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😁2
Возможно, я чего-то не понимаю, но почему блогеры на YouTube с русскоязычной аудиторией рекламируют VPN? Если человек из России уже смотрит этого блогера, значит, он уже является пользователем какого-нибудь другого VPN сервиса, и этот вопрос для него закрыт.

Да, реклама может мотивировать попробовать другой сервис — с более высокой скоростью, лучшей приватностью, большим выбором серверов. Но я не думаю, что хоть сколько нибудь значимый процент пользователей после подобной рекламы перейдет на что-то другое. VPN — это продукт, который либо работает приемлемо, либо не работает. Плюс, опять же, эффект привычки, который дополнительно стимулируется тем, что далеко не каждый VPN способен бесперебойно работать в России, и если уж пользователь нашел подходящий, вряд ли он горит желанием пробовать что-то еще.

В общем, я думаю, что реклама в запрещенных сервисах это довольно странный канал для поиска клиентов.
🗿6🤨1
Кстати, только что закончил смотреть стрим Roast Session #35 от TON CIS Hub.

Там выступал мой знакомый Даня (ему 14), представлял свою GameFi игру в Telegram с всем известной механикой ракетки.

Его проект на ранней стадии развития, но он уже пошел питчить свой проект экспертам, с чем мы его конечно же поздравляем 👏

Тут еще хочется похвалить организаторов. Я в последнее время часто смотрю Roast-сессии — посмотреть, что происходит в TON и потырить идеи. Я думаю это очень полезный формат как для зрителей-энтузиастов, так и для начинающих билдеров. Чувствую, что много упустил, от того что в возрасте Дани у меня не было подобных возможностей :)

Хотя, конечно, немного лукавлю, ведь я сам со своей командой в 8 классе представлял наш проект экспертам в компании КРОК на встрече в закрытом формате. Мы тогда потратили год на разработку внутренней соцсети для школы с упором в проектную деятельность, поэтому у нас было минимальное Bot API и даже мини-приложения. Несмотря на то, что проект так и не был доведен до конца, та встреча была полезной для нас с точки зрения фидбека по продукту и верификации нашей технической экспертизы, поэтому я рад, что в 2025 году у молодых разработчиков еще больше подобных возможностей.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
...и даже знать, как выглядит пропорция 45/50, разработчикам в Meta уже необязательно 😁
😁5🤯3
Почему добавление бота в Telegram-канал — более серьезно, чем вы думаете

На днях делая рассылку по пользователям бота я наткнулся на интересный баг. В Telegram-супергруппах (включая каналы) есть Recent Actions — список недавних действий админов. В том числе там отображаются отредактированные сообщения, что позволяет админам мониторить деятельность участников чата или админов канала и вовремя реагировать, если человек решил воспользоваться своими правами в некорректных целях.

Но при этом при редактировании кнопок у сообщения никаких записей нет! Например, бот для розыгрышей может поменять кнопку на участие в розыгрыше на фишинг, и админ канала никак это не увидит. Или какой-нибудь даже популярный и проверенный бот может быть взломан (как в истории с Fleep-ом) и добавить ко всем старым сообщениям в канале кнопки с какими-нибудь провокационными призывами, за которые в России можно огрести уголовку.

Еще есть старый баг еще с осени 2023, из-за которого все боты в канале, даже при отключении всех прав, могут кикать подписчиков. Ради интереса я проверил это сегодня, проблема до сих пор актуальна. По какой-то причине из UI выдачи прав боту скрыта опция "Ban users" (которая есть, например, при выдаче прав человеку в чате), а MTProto игнорирует флаг ban_users в конструкторе chatAdminRights для ботов, если выполнить запрос вручную.

Продолжение 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Что с этим делать, как не потерять всех подписчиков или физическую свободу из-за действий бота?

НЕ использовать всех ботов подряд.

1️⃣ Тщательно проверяйте MAU. Если не отображается — у бота меньше 10 тысяч ежемесячных пользователей. Лайфхак для разработчиков: если хотите повысить прозрачность вашего проекта и показывать MAU пользователям, но у вас он меньше 10 тысяч, можно включить партнерскую программу в настройках бота (можно выставить 1% комиссии для рефералов, если не хотите терять деньги), тогда MAU будет отображаться всегда.
2️⃣ Проверяйте дату создания бота. Ее нельзя определить точно (также как и дату регистрации пользователя), но можно узнать приблизительно с точностью до нескольких месяцев с помощью эвристик, привязанных к ID аккаунта. Самый простой способ — посмотреть прямо в профиле в клиенте Swiftgram.
3️⃣ Потратьте хотя бы 20 минут на поиск информации и проекте и его разработчике. Если видите какую-то политику или любые иные причины не доверять — не доверяйте. Удивительно, но в Telegram есть боты, которым доверяют сотни тысяч пользователей, хотя эти боты или их разработчики абсолютно не заслуживают доверия или занимались чернухой в прошлом. Я думаю, опытные админы прекрасно понимают, о каких ботах я говорю.

В идеале — разрабатывайте нужные инструменты самостоятельно, или обращайтесь к доверенным разработчикам. Но не забывайте про код-ревью: даже если вы не понимаете ни строчки в коде, ChatGPT поможет найти очевидные закладки или небезопасные места. Это не панацея, но лучше, чем ничего.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍52
Markdown-first

Вчера в Twitter лучшего JS рантайма ever я увидел пост: ребята подумали, что их доки часто читают нейросети, и решили отдавать им статьи в формате Markdown (вместо обычного HTML с client side рендерингом, как для реальных пользователей). Результат: token usage при чтении моделью документации упал в 10 раз 🔥. Это означает, что документация будет занимать в 10 раз меньше контекста, что значительно улучшает опыт вайбкодеров разработчиков.

Делается это просто: по заголовку Accept определяется, что значение text/plain или text/markdown есть и имеет больший приоритет, чем text/html (его отправляют обычные браузеры).

Уже даже советуют перегонять готовую HTML статику в Markdown через разные утилиты, вроде npx @wcj/html-to-markdown-cli. Но я считаю, это в корне неправильный подход: если сайт (блог, документация, что угодно) изначально не был ориентирован под разметку Markdown, то автоматизированные тулы будут терять форматирование и результат на выходе будет неточным. Я уже не говорю, что это будет работать только для static сайтов/SSR.

Более правильный подход? Markdown-first. Взять, к примеру, мой блог (🐈 difhel.dev/blog, 🧑‍💻 difhel/blog): все статьи в нем написаны в формате MDX, который объединяет Markdown для разметки и React JSX для сложных элементов (например, для карусели картинок). Это позволяет удобно встраивать компоненты любой сложности в статьи, в то время как сохраняет нейросетям возможность потреблять контент эффективно.

Планирую в свободное время тоже сделать отдачу MDX-исходников статей нейросетям для блога. Вероятно, придется поколдовать с Docusaurus/Vercel.

Кстати, вспомнил еще одну гениальную идею для уменьшения token usage: отдавать данные на китайском. По идее, это должно уменьшить в ~2 раза, но непонятно, как повлияет на поведение модели (например, если ей задали вопрос на английском, а после прочтения моего блога она заговорила на китайском — будет не круто), надо экспериментировать.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍2
> Privacy. By Default.
> Встроенный поиск — Яндекс

That makes sense 🥺
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8
Нужно ли блокировать приложения, позволяющие отслеживать местоположение сотрудников органов исполнительной власти США?
Anonymous Poll
43%
Да
57%
Нет
Казалось бы, да — в США есть большие проблемы с нелегальными мигрантами, и блокировка работы сотрудников ICE может быть выгодна только преступникам. В опросе я написал про органы исполнительной власти, а не конкретно про ICE, потому что недавно слышал про ещё похожий случай про отслеживание офицеров по контролю за парковкой в Сан-Франциско.

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

Но мне не нравится такой ответ тем, что он заставляет контролирующую компанию (Google/Apple) иметь какую-то политическую позицию касательно вопроса блокировки.

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

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

Есть ли у вас какие-нибудь более общие соображения по этому вопросу?
🕊1
Сегодня Саня Ильин 😁, очень уважаемый чувак, выступал на YouTube-программе Точка от канала The Breakfast Show (927K подписчиков) на тему недавнего интервью Дурова, бота для верификаций от РКН и его технических возможностей и мессенджере Max. Так как я консультировал Саню по техническим моментам в MTProto для ботов и возможностям бота для верификаций каналов российских блогеров от Роскомнадзора, решил раскрыть то, к чему я пришел, более подробно в отдельном посте.


1️⃣ Начнем с хорошего: бот не может назначать или удалять администраторов. На этом хорошее заканчивается.

2️⃣ Бот видит все посты, историю их редактирования и удаления. Также бот может поменять описание, название и юзернейм канала.

3️⃣ Боту требуется право «Добавление участников». Это значит, что в приватных каналах бот сможет отклонить или принять заявки на вступление, а также создавать пригласительные ссылки. Зачем это нужно? У меня две гипотезы: первая — упростить парсинг старых постов (до добавления бота в канал) для их проверки на экстремизм и терроризм добавлением отдельного юзербота; вторая — чтобы при обнаружении «нарушения» закона в вашем канале к вам мог добавиться товарищ майор, чтобы сделать нотариально заверенный скриншот и подвести вас под ответственность в соответствии с законодательной процедурой.

4️⃣ Бот может получить всех (~95%) подписчиков канала. Telegram ограничивает отображение подписчиков в крупных каналах до последних 200. Однако есть малоизвестный обход этого ограничения: присутствует функция поиска, которая также доступна ботам через MTProto, что позволяет перебирать поисковые строки (например, от a до z и потом от а до я) и собирать подписчиков в базу.

5️⃣ Бот может удалить всех подписчиков канала. Я писал об этом ранее.


Таким образом, потенциал злоупотреблений у этого бота колоссальный.

И вот, напоследок, еще история: когда бота запустили в тестовом режиме (сейчас, согласно разъяснениям Роскомнадзора, его использование обязательно), в нем была очень глупая, детская уязвимость — бот требовал отправить ваш номер телефона, чтобы связать аккаунт и профиль на Госуслугах, однако в нем не было необходимой проверки, из-за чего бот принимал любой контакт, а не ваш. Некоторые умельцы, используя слитый номер телефона Братишкина, который оказался привязан к Госуслугам, получили свои черные метки A+ на свои каналы.

Поэтому призываю подумать еще раз, хотите ли вы рискнуть потерять свой канал, добавив бота от Роскомнадзора с такими детскими ошибками. Традиционно в российской госухе зарплатный фонд кот наплакал, поэтому неудивительно, что программисты в РКН не особо замотивированы качественно работать на благо репрессивной машины. Просто представьте, что может быть, если вдруг токен этого бота попадет не в те руки.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍92
Заметки Мифуру 🎌
🌧 Облако — проклято Когда я вижу, как "потужные" разработчики вписывают в свои резюме фразы, по типу "AWS Specialist", "Google Cloud Partner" — сразу понимаешь, что перед тобой прожигатель денег. Один умный человек сказал — «дедики наше всё». С тех пор прошло…
Разберем по порядку:
1️⃣ Когда я вижу, как "потужные" разработчики вписывают в свои резюме фразы, по типу "AWS Specialist", "Google Cloud Partner" — сразу понимаешь, что перед тобой прожигатель денег.

Нет. Просто такой человек посмотрел, какие кейворды сканирует ATS и осознанно вписал их в резюме, чтобы не отлетать на авторазборе резюме, потому что HR мог просто бахнуть любые фильтры, чтобы не выполнять ответственно свою работу.

А ещё целые типы компаний используют облако, потому что... оно лучше подходит для текущих задач! Примеры:
1. Ты маленький стартап, и тебе дали грант на XX тысяч долларов на GCP/AWS. Можно забить на этот грант и поднять свои VPS-ки, но это потеря денег и времени в моменте, когда тебе нужно быстро запустить сервис, чтобы не быть позади конкурентов. Переехать на bare metal можно уже после того, как проект начнет приносить серьезные бабки, и можно будет сфокусироваться на оптимизации костов, а не на быстрой доставке фичей.
2. Когда нет стабильной нагрузки. Сегодня у тебя 10k юзеров в день, завтра 1m. Облако даёт тебе лёгкий автоскейлинг с pay as you go.

2️⃣ Мегакорпорации, привыкшие к AWS / Google / Azure, падают в "ноль" из-за криворуких Vibe-DevOps'ов, которым навязали новую "сверх-эффективную корпоративную культуру".

Такое, конечно, возможно, но сомневаюсь, что это глобальная картина. Бизнес не тупой, он использует то, что ему сейчас выгодно. Если сейчас ему выгоднее облака — будет найм "вайб-девопсов" и облака.

3️⃣ люди пересаживаются с облаков на bare metal (аренда выделенных серверов) и экономят по ~$230,000 в год на услугах, себестоимость которых МАКСИМУМ $10-20,000 в месяц.

Тут согласен. Вообще не хочу показаться адвокатом дьявола, я сам мягко говоря не особо люблю облака, во многом из-за того, что они оверпрайс и по настоящему нужны только довольно маленькой доле бизнесов. Но считать их глобально бесполезными нельзя. Это довольно специфичный инструмент, только и всего.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7💯2
Все каналы кричат о том, что российские операторы начали блокировать входящие SMS от Telegram с кодами для авторизации, ссылаясь на Код Дурова.

Судя по эксперименту, проведенному редакцией, предписание о блокировке уже начал исполнять Билайн. Видимо, блокировка другими операторами не за горами.

Что делать?
1. Убедитесь, что у вас всегда есть устройство, на которое может придти код, когда вам потребуется авторизация на новом устройстве. Учитывайте настройку времени автоматического уничтожения сессии при периоде отсутствия активности — возможно, на устройстве, на которое вы рассчитываете, вас уже давно разлогинило.
2. Если есть возможность, купите анонимный номер на Getgems или Fragment (требует KYC). Это недешево: стоит рассчитывать на минимальную цену от $2,500. Однако это даёт максимально возможную безопасность в Telegram и обеспечивает надёжный доступ к аккаунту, так как NFT-номер хранится на вашем криптокошельке и вы всегда можете получить код для входа, привязав этот кошелек к Fragment (в этом случае KYC не нужен).

Отдельно хочу прокомментировать новость о том, что для некоторых пользователей в России стала доступна программа получения бесплатной подписки Telegram Premium за то, что Telegram использует их сим-карты для рассылки кодов авторизации другим пользователям.

На текущий момент я настоятельно не рекомендую пользователям из России пользоваться этой программой. Согласно последним поправкам в законы (281 ФЗ), за это можно получить штраф на ощутимую сумму.

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

влечет наложение административного штрафа на граждан в размере от 30,000 до 50,000 рублей
👍72🤯1
Коттоблог
Сегодня великий праздник! Многие его не признают, но, на самом деле, это уникальный день. Сложно найти в истории дату, в которую не произошло вообще ничего, ну прямо совсем. Но ее нашли. Подозреваю, выбирали так: попросили молодого перспективного политика…
Концепция государственных праздников должна умереть.

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

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

У меня, кстати, не получилось — мой тренажерный зал оказался закрыт 20 минут назад.
110🔥4🐳3
Death to MCP (?)

Все, кто причастен к процессу, с легкой руки Андрея Карпаты названного вайб-кодингом, слышали про Model Context Protocol (MCP) — это стандартизированный протокол для того, чтобы LLM-агенты могли вызывать сторонние сервисы (tools) — например, чтобы автоматически подтянуть issue с GitHub по ссылке или найти что-то через веб-поиск по запросу.

MCP придумали в Anthropic и, честно говоря, название со словом «protocol» слишком громкое для простой идеи: давайте опишем формат JSON-ов и заставим LLM включать в выходных данных JSON-ы в заданном формате, чтобы потом провалидировать их и подсунуть на вход результат от внешнего сервиса.

Простота этой идеи оказалась настолько заманчива, что никто особо не задумывался над её практичностью. И вот тут всё очень-очень плохо:
• LLM непросто генерировать JSON-ы
• LLM непросто следовать инструкциям по structured output, чтобы сгенерировать корректный вызов tool
• JSON закладывает немалый оверхед на используемое число токенов моделью, из-за чего инференс дороже и быстрее съедает контекст
все входные и выходные данные для tool также засоряют контекст.

Например, вы попросили LLM с помощью тула fetch_logs достать логи вашего сервиса за последний день и потом вывести топ 10 ошибок с помощью тула analyze_logs. Что придется сделать модели в классическом MCP: сначала она вызовет fetch_logs, а потом составит запрос с кучей данных из fetch_logs для тула analyze_logs. Результат: модель сгаллюцинировала где-то посередине из-за неспособности поддерживать точность на заполненном контексте, миллионы токенов потрачены впустую на перегонку данных для вызова тула, а привязка карточки с автооплатой к аккаунту OpenAI оказалась очень грустным решением.

Получается, что MCP как способ дать LLM способность вызывать сторонние инструменты плох как с точки зрения эффективного использования контекста и максимального объёма полезной работы, так и с точки зрения cost efficiency (пишу пост на ночь глядя и забываю русский язык, что поделать).
1🔥3👍2
Как сказал когда-то Сталин, критикуешь — предлагай (c) Versus Battle, Oxxxymiron* vs. Слава КПСС, 6 августа 2017, Санкт-Петербург


И предложить на самом деле есть что. Индустрия придумала как минимум два более эффективных подхода, чем MCP.

1️⃣ Первый — это так называемый Code Mode. Можно почитать доклад от Cloudflare по этому подходу. Если коротко, то идея такая: мы даем модели .d.ts файлы с декларациями доступных API на TypeScript; LLM генерирует код на TypeScript, который использует эти API; далее этот код исполняется в безопасном окружении (Cloudflare предлагает подход с использованием инструментов изоляции в V8 JS engine; впрочем, если у вас бесконечно много денег от инвесторов, то можно просто поднимать виртуальную машину на Debian 12 с дохренищей ресурсов, как делает ChatGPT для запуска внутренних инструментов).

Почему это лучше? Потому что решает самые серьезные проблемы MCP:
• в обучающих данных по очевидным причинам гораздо больше примеров кода на TypeScript, чем примеров правильных вызовов тулов через JSON-овые structured outputs, поэтому LLM гораздо легче генерировать рабочие вызовы
• так как это программа на TypeScript, достаточно просто написать последовательный вызов тулов, и контекст не засоряется. Пример выше с анализом логов решается в пару строчек и ноль (0!!) лишних затраченных токенов (очень условно):
const logs = await FetchLogsService.fetchLogs();
const top = await AnalyzeLogsService.process({ $limit: 10, $sort: { count: DESCENDING } });
console.log(top);


2️⃣ Второй — это Skills, подход, выпущенный как дополнение (или альтернатива?) MCP. Подробнее почитать можно тут, но идея такая: вместо сложных спецификаций, как вызывать тот или иной тул по MCP, можно сделать папку, в которой будут лежать готовые скрипты и один Markdown файл с описанием, как этими скриптами пользоваться.

Недавно ChatGPT с радостью соглашался поделиться zip-архивом своей папки /home/oai, в которой было много всего вкусного: todo комментарии в коде с именами разработчиков и много-много исходного кода инструментов и костылей. Там как раз используется этот подход со Skills: есть папочка skills, в которой лежат папочки docx, pdfs и spreadsheets, в каждой из которых лежит набор скриптов и skill.md с описанием, как эти скрипты вызывать и что туда передавать. Это очень интересно поизучать, в посте ниже я скину этот архив, а то вдруг уже закрыли эту дыру.

Почему это лучше:
• тут тоже не нужно генерировать JSON-ы и structured outputs, сгенерировать sh-команду для запуска нужного скрипта очень просто
• тратится меньше токенов
• такие скиллы гораздо удобнее разрабатывать, использовать и поддерживать, чем тулы с MCP протоколом

* — так называемое министерство юстиции РФ считает так называемым иностранным агентом
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥1
ЖОСКИЙ СЛИВ /home/oai, как и обещал.
7🙈21