❌

Normal view

Выгрузка данных в Google‑таблицу из 1С в 2026 году

Понадобилось выгружать данные в Google-таблицу.

Мне пришлось долго прорываться через дебри нюансов Google-авторизации и доступов, часто с помощью ИИ. Но все же в итоге удалось победить эту заградительную конструкцию. Делюсь с Вами, как организовать доступ к Google-таблицам в 2026 году.

Читать далее

Как построить self‑hosted RAG‑систему с LangGraph‑агентом на локальных LLM

Обычно стек для RAG‑систем и AI‑агентов строится вокруг облачных API (OpenAI, Anthropic) и управляемых векторных баз. Но для ряда задач критически важна полная автономность: устойчивость к санкциям и независимость от внешних провайдеров.

В этой статье я расскажу, как спроектировал и собрал аналитическую систему, которая за две недели работы агрегировала более 12 000 новостей: от сбора RSS‑лент до умного агента, который сам вызывает инструменты. Мы пройдем путь от архитектуры до граблей, на которые я наступил.

Стек: Python 3.12, FastAPI, PostgreSQL + pgvector, Celery, LangGraph, Ollama (Qwen 2.5 14B, BGE‑M3), Streamlit, Langfuse, Docker.

Читать далее

Статистика скачиваний релизов GitHub одним окном: WinForms-утилита в одном .cs-файле без Visual Studio

GitHub показывает звёзды и форки, но не показывает, сколько раз скачали файлы из релизов. Цифра есть в API, поле download_count у каждого ассета. Я захотел видеть её сразу по всем своим проектам, да ещё с историей, и написал утилиту. Ниже — как она устроена и на что я налетел.

Читать далее

Как написать свой AnyDesk на C++ и не сойти с ума: битва с OLE, GDI+ и нейросетями

Привет, Хабр!

Каждый, кто работает с удаленными машинами, знает эту боль. Ты подключаешься к серверу, у которого три монитора, а AnyDesk или TeamViewer показывают тебе один общий экран. Или того хуже — заставляют переключаться между ними. Работать с базами данных или версткой в таких условиях — это пытка.

Так родилась идея написать свою программу для удаленного доступа. Без тяжелых Electron.js оберток, весом в 200 МБ, а нативное приложение на Win32 API, которое весит меньше мегабайта и показывает каждый монитор в отдельном окне.

В этой статье я расскажу, как мы (я и нейросети) строили OmniDesk с нуля, какие костыли пришлось изобретать для буфера обмена и почему TCP_NODELAY — это спасение.

Читать далее

Claude Fable 5.1 или GPT-6 Astra для базы знаний: считаем стоимость 20 обращений и границу экономии

Расчет стоимости 20 обращений к базе знаний: почему четырехкратная разница в цене чтения кэша дает лишь 16,7% экономии, когда преимущество исчезает и как пересчитать сценарий с помощью Python.

Читать далее

Чёрный октябрь уязвимостей: что задело мой сервер, как я закрыл дыры и почему ушёл на статику без инлайн-скриптов

У меня круглосуточно работают агенты мониторинга: они собирают бюллетени безопасности и сверяют их с тем, что стоит на серверах. В октябре они подняли сводку: 15 уязвимостей за месяц, все «critical» и «high» — PHP, Nginx, Node.js, Next.js, Java, GitLab. Я проверил каждую строку руками: что это на самом деле, задевает ли меня и чем это лечится.

Итог: две строки меня действительно задели — Node.js был не обновлён четыре дня, а заплатки Nginx не стояли, хотя автообновление включено. Две строки оказались не тем, чем кажутся. А PHP-уязвимости меня не задели по самой простой причине: PHP на сервере нет.

В статье — разбор всех 15 с командами проверки и лечения, почему я снял с сайта все сторонние скрипты и не оставил ни одного инлайн-скрипта, строгая CSP целиком, дыры, которые я нашёл у себя за два месяца, и чек-лист.

Читать руководство

GPT-6 Astra восстанавливает Electron-приложение: результаты и расходы через OpenAI, OpenRouter и TeamoRouter

Одна задача, три API: разобрать дистрибутив Pomotroid, восстановить настольный таймер и добавить импорт и экспорт состояния. Сравниваю готовые приложения, автоматические проверки, время выполнения и фактические списания через OpenAI, OpenRouter и TeamoRouter.

Читать далее

Как генератор трёх слов на баннере вырос в веб-сервис: Ghostscript, CMYK и производственные грабли

На фрилансе регулярно просят сверстать простой баннер «АРЕНДА + телефон». Брать за три слова 2 000 рублей неловко, а запускать CorelDRAW, выставлять миллиметры и переводить шрифты в кривые всё равно приходится. Рассказываю, как внутренний скрипт для генерации валидного CMYK PDF вырос в производственный сервис с динамическим разрешением Ghostscript, инспектором структуры PDF, пакетной сборкой из CSV и партнёрским режимом для типографий.

Читать далее

Системное программирование на C++: процессы, C-API и WinAPI

Привет, Хабр!

Это вторая статья цикла про C++. В первой я разбирал базу для тех, кто начинает с нуля: переменные, циклы, классы, контейнеры. Здесь идём на уровень ниже — как обычная C+±программа договаривается с операционной системой.

Сразу скажу, зачем я вообще полез в эту тему. В колледже была лаба, где нужно было поднять процесс, дождаться его и снять код возврата. Я неделю не понимал, почему fork() в одном случае возвращает ноль, а в другом — PID, и почему после exec ребёнок «исчезает». Препод объяснил это минут за десять — и я понял, что половину объяснений всё равно не понял. С тех пор я пишу такие вещи с расстановкой: не «fork() создаёт процесс», а что именно он возвращает, что происходит в коде после вызова и что будет, если забыть закрыть дескрипторы. Поэтому статей будет много, а примеров в каждой — ещё больше.

Что дальше в цикле, чтобы было понятно, куда мы движемся:

Читать далее

Web search/fetch API нейросетей для бизнеса: что это, какие ошибки возникают и как подключить с оплатой в рублях

Страница документации размером всего 100 КБ обходится языковой модели примерно в 25 000 токенов. Такую оценку Anthropic приводит в описании своего инструмента web fetch, а для обычной страницы на 10 КБ — около 2 500 токенов. Если агент без ограничений загружает пять таких страниц подряд, он за один шаг съедает заметную часть контекстного окна и бюджета. Добавьте к этому то, Cloudflare по умолчанию блокирует ИИ-краулеры и может отвечать им кодом 402 Payment Required.

Читать далее

Я сделал сайт, где можно самому пролистать Вселенную: от 490-метрового астероида до границы наблюдаемого космоса

Помните Size of Life от Нила Агарвала? Листаешь вправо, и рядом с каждым существом появляется следующее, побольше. Мне захотелось такого же, но про космос: начать с крошечного астероида и пролистать всё до самой границы того, что мы вообще можем увидеть.

Получилось 79 объектов и 24 порядка величины, от астероида Бенну диаметром 490 метров до наблюдаемой Вселенной в 93 миллиарда световых лет. Всё рисуется в реальном времени прямо в браузере, а под капотом есть трассировка лучей, ray marching, реальные карты поверхностей от NASA и генеративная музыка. Ниже расскажу, как это устроено и на какие грабли я наступил.

Читать далее

Как устроен Managed Kubernetes в MWS Cloud Platform

Развернуть кластер Kubernetes вручную — задача не столько сложная, сколько продолжительная: поднять виртуальные машины, установить компоненты Control Plane, настроить CNI, CSI, DNS, разложить сертификаты. Понять, что надо было иначе, удалить, сделать заново, и так раза три.

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

Managed-сервис снимает эту нагрузку

Как мы перестали хардкодить модели: effort-маршрутизация, авто-выбор сложности, фолбэки и лимиты расходов

Самая дорогая строчка в микросервисе с LLM — model="gpt-4o". За ней тянутся свой ключ вендора, свои ретраи и счёт, который потом некому разобрать.

Расскажу об одной идее, которая это убирает: сервис не должен знать, какая модель ему отвечает. Вокруг неё четыре механизма: правила маршрутизации, автоматический выбор сложности, поведение при сбоях вендоров и контроль денег. Примеры — из нашего open-source шлюза Keystone (KTMS) на Go, но схему можно повторить в любом шлюзе.

Читать далее

Как голосовой робот принимает заявки на ремонт и передаёт их мастеру в Битрикс24

Привет, Хабр! В этом материале сделаем сервис, который разгрузит диспетчера сервисного центра по ремонту бытовой техники. Голосовой робот будет принимать входящий звонок и собирать детали обращения. На каждое обращение в Битрикс24 будет создаваться карточка с назначенным мастером.

Стек проекта: Python 3.10+, FastAPI, Pydantic, SQLite, HTTPX, Битрикс24, Яндекс Геокодер, голосовой робот и SMS API от МТС Exolve.

Читать далее

Почему Idempotency‑Key не спасает от двойного списания и как это исправить

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

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

Разобрать решение

Выгрузка истории чата через Telegram API в браузере: было 29 минут, стало две с половиной

Я делаю сайт, который считает статистику переписки прямо в браузере. Обычно для этого нужен экспорт чата Telegram из Desktop, а с телефона его не сделать. Поэтому у меня есть второй путь, без компьютера и без файла. Человек входит со своего телефона, а страница сама выкачивает историю выбранного чата через Telegram API, то есть MTProto, как настоящий клиент. Работает это на mtcute поверх WebSocket к серверам веб-клиента Telegram, со своими api_id и api_hash с my.telegram.org.

Три недели всё работало, но медленно. Я посмотрел в свою аналитику. Чат на 100–250 тысяч сообщений выгружался в среднем 33 минуты, а самый долгий занял 100. Всё это время человек должен держать вкладку открытой с горящим экраном, потому что в фоне телефон останавливает загрузку. Почти три четверти всего ожидания приходилось на большие чаты, хотя их всего пятая часть.

Потом я сам выгрузил с телефона переписку на 52 тысячи сообщений, и страница честно написала, что осталось около 29 минут.

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

Читать далее
❌