Знаете, что происходит, когда вы ставите «Telega», «альтернативный клиент Telegram от ВКонтакте»? Ваш Telegram ID тихо уезжает в инфраструктуру OK/VK Calls. Без уведомлений. Без галочки «я согласен». Просто раз, и вы в индексе. Навсегда.Я решил проверить, сколько людей в моих чатах уже засветились. Руками долго. Через плагин exteraGram можно по одному профилю за раз. Хотелось масштаба. Так появился antitelega: Go userbot, который сканирует целый чат и выдаёт список «засвеченных» прямо в Saved M…
Большинство программистов, работая с многопоточным кодом, осведомлены о примитивах синхронизации. При этом мало кто задумывается о существующей за этим сложной теории.Привет, Хабр! Меня зовут Игорь Панасюк, я работаю в Яндекс, преподаю в ИТМО и ШАД, а также в свободное время выступаю на конференциях, делюсь опытом в соцсетях и помогаю развитию Go-сообщества, веду Telegram-канал и YouTube-канал.В этой статье по мотивам моего доклада для Golang Conf я расскажу про Go Memory Model, понятным языком…
Дисклеймер: самая большая ошибка в этой истории даже не выбор Dart, порядок действий. Вместо того чтобы в первый же день сделать честный raw benchmark на нашем production-like сценарии, я поверил в AOT, в статическую типизацию и в обещания ready for cloud - и сразу начал переносить сервис. Поэтому этот текст не только про Dart, но и про очень дорогой инженерный урок: сначала валидируй runtime-гипотезу, потом строй архитектуру вокруг неё. Чтобы не превращать текст в войну микрооптимизаций — все …
Когда вы ставите в VS Code популярные агентные расширения (Cline, Roo Code, Kilo), быстро выясняется одна мерзкая вещь. Обычно начинаешь подключать к ним новые инструменты быстрее , чем LLM под их капотом способна их адекватно переварить.Сначала все выглядит безобидно. Вы подключаете к редактору пару MCP-серверов: один для файлов, другой для поиска. Агент радуется, вы радуетесь, всё работает. Но потом начинается: "О, прикручу-ка я еще сервер для базы данных... и GitHub... и внутреннюю Jira…
Несколько недель назад я описал на Хабре идею «честного российского мессенджера» с открытым кодом и прозрачным compliance. Та статья была про «зачем». Эта — про «как получилось». Web-клиент и Android-приложение полностью переписаны и работают в production, серверная часть развёрнута и обслуживает реальные подключения. iOS пока не трогали. Ниже — разбор архитектуры, решения, которые мы приняли, грабли, на которые наступили, и открытый набор людей в проект.Что готовоBackend (Tinode) — Личные чаты…
Рис. 1. dc.send(file) не означает, что файл уже доставлен.Самая опасная иллюзия в WebRTC-файлообмене выглядит примерно так:const dc = pc.createDataChannel('file'); for (let offset = 0; offset < file.size; offset += CHUNK) { dc.send(file.slice(offset, offset + CHUNK)); } dc.send(JSON.stringify({ type: 'transfer_done' })); // Готово! ...или нет?Выглядит правдоподобно. DataChannel открыт, чанки летят, transfer_done отправлен. В туториале этого достаточно. В продакшене – нет. Н…
Огромное число авторов используют хэштеги для пометки своих постов. А также для заголовков, вносят эту информацию на картинки, в инфографику для видео и всячески применяют для поиска. Хочу рассказать о наблюдаемом мной парадоксе этой технологии с точки зрения IT и обычной жизни.Этот термин состоит из конкатенации двух слов: hash и tag. Hash - это прежде всего понятие про уникальность с шифрованием. Изначально, для того, чтобы добиться создания строки, которая точно будет отличаться от других, п…
Привет, коллеги! Сегодня делимся историей, которая отлично показывает, как AI ускоряет старт, но человеческий опыт и внимание к деталям делают продукт по-настоящему крутым.Недавно нам для одного из проектов понадобился DatePicker. Сам компонент под NDA, поэтому показать его не можем. Но чтобы поделиться процессом, мы специально для статьи собрали похожий концепт - с открытым кодом и возможностью потыкать вживую (ссылка ждет в конце).Так вот, казалось бы, компонент простой, но мы решили не прост…
Python берут за скорость реализации. C++ - за производительность и контроль над памятью.А Go? Go выбирают те, кто любит Go. Я один из них. Долгое время я использовал связку bufio.Scanner + ScanWords + strconv.Atoi. Но стоит в задаче смешать числа, строки или посимвольный ввод - начинаются “танцы с бубном”. В какой-то момент мне надоело, и я написал contestio. Решения оказались простыми. То чувство, когда: “Чёрт возьми! Почему мне это не пришло в голову раньше!?”Мотивация: хочется удобно и быстр…