Pull to refresh
-4
Эдуард Зиганшин@e-zigread⁠-⁠only

Разработка электроники

1
Subscribers
Send message

RAG: как Филин Палыч-реранкер навел порядок в цифровом королевстве

Level of difficultyMedium
Reading time15 min
Reach and readers8.5K

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

В мире IT это называют «галлюцинациями», а лечат их с помощью RAG (Retrieval-Augmented Generation). Если просто: это способ дать модели «шпаргалку» из ваших документов, чтобы она не гадала, а опиралась на факты.

Но как эта сложная механика выглядит изнутри? Давайте разберем устройство RAG на примере одной поучительной истории из Цифрового Королевства, где один рыжий Кот чуть не довел Бизнес до нервного срыва своим враньем.

Читать далее

Процессор в вашем компьютере угадывает будущее. И ошибается в 5% случаев

Level of difficultyMedium
Reading time6 min
Reach and readers24K

В прошлую пятницу я объяснял джуну, почему его код на отсортированном массиве работает в шесть раз быстрее, чем на неотсортированном. Тот же массив, тот же алгоритм, и те же данные. Просто в другом порядке. Джун смотрел на меня как на сумасшедшего и, честно говоря, я его понимаю.

Потому что ответ звучит безумно: процессор внутри вашего ноутбука постоянно пытается предсказать будущее. Буквально. Он гадает, какая ветка if выполнится ещё до того, как условие будет вычислено. И на отсортированных данных ему угадывать проще.

Ну, давайте разбираться.

Читать далее

Как я сэкономил 57 000 ₽ на софте на маркетплейсах лицензий

Level of difficultyEasy
Reading time9 min
Reach and readers9.5K

Подписки на рабочие инструменты — ChatGPT, Claude, Cursor — легко набегают на 100 долларов в месяц. А с российской карты половину из них ещё и не оплатить. С осени 2025 я покупаю лицензии и подписки через маркетплейс цифровых товаров. Заплатил 19 000 ₽ за софт, который официально стоит 76 000 ₽. Разница — 57 000 ₽. Один лот слетел (Perplexity — забанили через неделю), но деньги вернули. Остальные пять работают. Разбираю механику: почему дешевле, какие схемы легитимны, где подвох, и показываю свои кейсы с цифрами.

Читать далее

Дремлющий демон GPIO: простой и надежный мониторинг событий в embedded-системах

Level of difficultyEasy
Reading time13 min
Reach and readers8.9K

Иногда старые проекты дают о себе знать в самый неожиданный момент — так случилось и с моим Linux GPIO Daemon. Коллеги из департамента методик и автоматизации тестирования в YADRO заинтересовались разработкой, и я наконец решил довести его до ума. Расскажу о демоне, который реагирует на события линий: текстовым сообщением об изменении состояния в сокет либо запуском скрипта. Это аналог incron-ng, только мониторит он не файлы, а линии GPIO. А в конце обсудим, как найти и затем не терять нужный нам gpiochip.

Читать далее

Работаем с Claude Code на десктопе из России

Level of difficultyMedium
Reading time12 min
Reach and readers22K

Недавно я, не выдержав микроскопических лимитов Cursor (в остальном прекрасный инструмент!) по доступу к передовым моделям Anthropic, захотел получить их по плоским тарифам от фирмы-разработчика. Это такие тарифы с помесячной/годовой оплатой, а не с оплатой за каждый запрос к API.

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

В итоге я всё настроил: Claude работает как родной, и в этой статье — мой опыт, а также тесты разных VPS-локаций.

Я опишу настройку под Linux-десктоп, но в конце в качестве бонуса будет настройка и под Windows.

Читать далее

Нескучное программирование. Обобщения (ч.2)

Level of difficultyHard
Reading time26 min
Reach and readers9.5K

Это не отдельная статья, а продолжение статьи про теорию объектов в с++, почему объекты в плюсах такие какие есть. Все завершенные главы я также выкладываю на github'e в английском и русском варианте. Продолжаем разбираться в теории С++...

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

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

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

Читать далее

Skills для Claude Code: огромный гайд от инженера Anthropic

Level of difficultyEasy
Reading time8 min
Reach and readers49K

Skills стали одной из самых популярных точек расширения в Claude Code. Они гибкие, их легко создавать и распространять.

Но эта гибкость усложняет понимание. Что работает лучше всего? Какие skills стоит делать? Как написать хороший skill? Когда имеет смысл делиться ими с другими?

Мы в Anthropic активно используем skills в Claude Code — сейчас у нас их сотни в работе. Ниже — уроки, которые мы извлекли из этого опыта.

Читать далее

Введение в высокопроизводительные вычисления на С++ для CPU

Level of difficultyMedium
Reading time15 min
Reach and readers17K

"Поскольку вы программист на C++, вероятность того, что вы слегка одержимы производительностью, выше среднего. А если нет, то вы, вероятно, по крайней мере с пониманием относитесь к такой точке зрения. (Если производительность вас совсем не интересует, аудитория Python разработчиков дальше по коридору)"
— Из пункта 42 книги С. Майерса “Effective Modern C++”, 2015.

Эта заметка описывает мой личный взгляд на то, как писать эффективный и надежный код для CPU. Статья ориентируется на С++, но значительная часть обсуждения CPU, кэшей, паттернов доступа к памяти и профилирования применима к Rust, Go и другим компилируемым языкам. Статья задумана как краткое введение и больше всего подходит студентам, имеющим опыт программирования на занятиях, но не в реальных проектах. Для профессионалов статья может быть полезной в качестве референса, чтобы не пугать новичков чем-то в духе Что каждый программист должен знать о памяти.

В статье опишу "набор новичка": godbolt.org, профилирование, бенчмарки, особенности CPU и его взаимодействия с памятью, когда есть смысл от асимптотических оптимизаций и почему важно при этом пользоваться санитайзерами, отслеживать coverage и вообще более трепетно относится к надёжности.

Читать далее

Слепое пятно LLM-разработки: контекст за пределами кода

Level of difficultyMedium
Reading time10 min
Reach and readers7.9K

Качество работы LLM — функция от качества контекста на входе. Это утверждение звучит банально, однако зачастую разработчики оптимизируют модель, выбирая между GPT, Claude или Gemini, и промпт, но не контекст в целом. Между тем, разница между «агент с правильным контекстом» и «агент без контекста» — не 20% и не 50%. Эта разница находится в дистанции вариантов между «решил задачу за 5 минут» и «потратил час, сломал два сервиса, и результат пришлось откатить из‑за массы новых проблем».

Я solo‑разработчик. В моей экосистеме десятки актуальных проектов: платформа из десятков микросервисов, AI‑инференс кластер на неспецифическом железе типа mac studio и dgx spark, масса shared‑библиотек, инфраструктура на нескольких физических и десятках виртуальных хостов.

Последний год «пишу» код почти исключительно через LLM и Cursor. Начинал с deepseek на уровне «подскажи как написать функцию для...» и дошел до полноценной оркестрации на Claude 4.6: я формулирую задачу, агент анализирует условия и кодовую базу, обсуждаем архитектурный план, агент пишет код и тесты, запускает тесты, фиксит ошибки, получает от меня обратную связь по результатам ручной проверки.

Это работает хорошо, когда агент глубоко понимает контекст. И катастрофически плохо, когда контекста недостаточно. Эта статья — про то, как я решаю проблему контекста системно.

Оговорка о применимости

Описанная методология разрабатывалась и обкатывалась на одной из наиболее сильных моделей для работы с кодом — Claude 4.6 Opus с контекстным окном в миллион токенов. Это важно зафиксировать: большое окно контекста означает, что агент физически способен «увидеть» knowledge base, а сильные аналитические способности модели позволяют извлечь из неё пользу, а не утонуть в шуме.

Читать далее

Как отменить или откатить коммит в Git командами reset, revert и restore

Level of difficultyHard
Reading time6 min
Reach and readers15K

Всем привет!

Если вы работаете с Git относительно недавно, почти наверняка у вас возникала потребность в отмене коммита. И, что печально, вы быстро поняли, что простого "откатить все назад" нет.

Где-то советуют git reset, где-то - git revert, а в третьих и вовсе пишется про checkout. По тому же правилу летят restore, amend, reflog и куча технологических формулировок, требующих знания git и после которых становится только сложнее, нежели понятнее.

На самом деле все это объясняется: под словами "отменить commit" можно иметь в виду совершенно разные действия, и мы разберем, для каких случаев, какая команда подходит.

Читать далее

Работаем с контейнерами в C++ с помощью библиотеки Ranges

Level of difficultyMedium
Reading time7 min
Reach and readers7.5K

Понятие контейнер сейчас активно применяется в контексте Docker и аналогичных решений по контейнеризации. Однако, в языке C++ контейнеры существуют уже очень давно и являются фундаментальной частью Standard Template Library (STL). Они предоставляют готовые реализации наиболее часто используемых структур данных, избавляя разработчика от необходимости писать их с нуля.

Контейнеры C++ можно разделить на несколько основных категорий. Последовательные контейнеры (Sequence Containers) хранят элементы в линейной последовательности, при этом порядок элементов определяется позицией добавления. Ассоциативные контейнеры (Associative Containers) автоматически сортируют элементы по ключу. При этом, они обеспечивают достаточно быстрый поиск (O(log n)). Неупорядоченные ассоциативные контейнеры (Unordered Associative Containers) хранят элементы в хеш-таблицах. Обеспечивают поиск в среднем за O(1). Адаптеры контейнеров (Container Adapters) предоставляют ограниченный интерфейс поверх других контейнеров.

В рамках данной статьи мы будем говорить об использовании библиотеки Ranges для работы с контейнерами.

Читать далее

8 уровней агентной инженерии

Level of difficultyMedium
Reading time12 min
Reach and readers19K

Способности AI в написании кода растут быстрее, чем наше умение этими способностями пользоваться. Поэтому рост баллов на SWE-bench не коррелирует с метриками продуктивности, которые волнуют инженерных руководителей. Когда команда Anthropic выкатывает продукт вроде Cowork за 10 дней, а другая команда не может довести до ума сломанный POC на тех же моделях, разница в одном: первые закрыли разрыв между возможностями моделей и практикой, вторые — нет.

Этот разрыв не закрывается за одну ночь. Он закрывается по уровням. Их 8. Большинство читающих эту статью, скорее всего, уже прошли первые несколько, и стоит стремиться к следующему, потому что каждый новый уровень — это резкий скачок производительности, а каждое улучшение моделей усиливает этот эффект ещё больше.

Читать далее

Claude Code бесплатно: как использовать ии бесплатно в 2026 году

Level of difficultyMedium
Reading time4 min
Reach and readers45K

31 марта из npm source maps утёк исходный код Claude Code. Через часы появился OpenClaude — форк с OpenAI-совместимым шимом, который позволяет подключить GPT-4o, DeepSeek, Llama через Ollama или любую модель. Разбираю, как это устроено, что реально работает, что нет, и почему «бесплатный Claude Code» — не совсем то, чем кажется.

Читать далее

Claude Code vs. Codex: исчерпывающее сравнение

Level of difficultyEasy
Reading time9 min
Reach and readers24K

Я использовал Claude Code несколько месяцев, потом перешёл на Codex. Недавно вернулся обратно — и причина не в бенчмарках. Также протестировал оба инструмента на одной и той же задаче.

В этой статье я разберу разные аспекты Claude Code и Codex, сравню флагманские модели Opus 4.6 и GPT-5.3-Codex, расскажу, что реально влияет на опыт AI-разработки, и покажу кейс-стади: построение RAG-пайплайна в обоих агентах.

Сразу предупрежу: читать ~12 минут. По-моему, это оправдано, если вы собираетесь платить $200/месяц за любой из них.

Читать далее

Я навайбкодил расширение для VS Code, чтобы не вайбкодить с Claude Code (и пример, как вообще нужно разрабатывать с AI)

Level of difficultyMedium
Reading time8 min
Reach and readers39K

Последние полтора года я использую Cursor IDE в качестве основной среды разработки. Сначала использовал её как среду с просто удобным автодополнением строк (относительно GitHub Copilot). Потом AI стал умнее, удобнее, появился режим планирования и Claude стал базовым атрибутом моего рабочего дня.

Неделю назад мой open source проект Databasus (инструмент для резервного копирования PostgreSQL, ~6k звёзд ⭐️ и ~275k Docker pulls) получил поддержку от Anthropic в рамках OSS программы: и теперь у меня есть Claude Code Max на ближайшие полгода. Следовательно, я переключился на него... и осознал, что очень сильно привык к UX в Cursor IDE. Самые умные безлимитные модели — это, конечно, классно. Но удобство и контроль за изменениями для меня в приоритете.

Поэтому я взял Opus и навайбкодил расширение для VS Code, которое приближает взаимодействие с CLI агентами к опыту Cursor IDE: когда ты видишь изменения и можешь точечно их корректировать. Пара потраченных часов сделали работу в ближайшие полгода для меня ощутимо комфортнее.

Что и как я делал — ниже.

Читать далее

Что можно понять, только написав своего агента для кодинга

Reading time9 min
Reach and readers18K

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

Чем интересен именно кодинг-агент? Это идеальная ловушка для самоуверенного разработчика.

Цель кристально ясна: читай код, пойми его, измени, проверь. Что может пойти не так? (Спойлер: вообще всё.) Под этой обманчивой простотой скрывается хаос — модели, которые обходят ваши ограничения с грацией уличного кота, инструменты, ломающиеся способами, о которых вы не подозревали, и промпты, которые прекрасно работают ровно до момента обновления модели на одну минорную версию.

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

Что я собственно построил

Назвал я его QuillCode. Звучит солидно, а внутри — вот что:

Читать далее

Способы повышения надежности встраиваемого ПО

Level of difficultyEasy
Reading time9 min
Reach and readers17K

В этом тексте я бы хотел перечислить способы повышения надежности для встраиваемого ПО. Cуществует много приемов, которые помогают повысить надежность встраиваемого ПО.

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

Читать далее

Структуры данных на практике. Глава 6: Стеки и очереди

Reading time9 min
Reach and readers6.8K

«Простота — требование, необходимое для обеспечения надёжности», — Эдсгер Дейкстра

Невидимая структура данных

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

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

Однажды я отлаживал вылет прошивки во встраиваемой системе RISC-V. У системы был планировщик задач, использующий очередь для управления ожидающими задачами. При большой нагрузке система вылетала с переполнением стека.

Переполнение стека? Очередь должна была находиться в куче, а не в стеке.

Проблема заключалась не в самой очереди, а в том, как она была реализована. Для очереди использовался связанный список, и каждый вызов malloc() выполнял распределение из пула памяти, делившего пространство со стеком. Под нагрузкой очередь разрасталась, пул фрагментировался и рано или поздно стеку не оставалось места для роста.

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

Читать далее

С плохим ИИ-кодом всё ясно, а как добиться хорошего?

Level of difficultyEasy
Reading time15 min
Reach and readers15K

О проблемах с ИИ-кодингом на Хабре написано уже много. Но хочется перейти к конструктивному подходу: да, наломать дров с ИИ легко, а вот как работать с ним наиболее профессионально?

Известные разработчики вроде Митчелла Хашимото (создателя Terraform и Ghostty) всё чаще говорят что-то в духе «вот тут уже ни строчки кода не написал вручную». При этом Хашимото — противник слопа, и он подчёркивает, что добился от ИИ качественного кода. А что помогает добиваться?

Мы в проекте Kodik подобные вопросы ощущаем особенно остро, потому что в редакторе кода с ИИ делаем… собственно, сам этот редактор кода с ИИ. Так что для нас все проблемы особенно наглядны, а их решения — особенно важны.

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

Читать далее

AbortController в Node.js: отмена чего угодно

Level of difficultyEasy
Reading time7 min
Reach and readers6.7K

Пока асинхронный код в Node.js работает штатно, про отмену операций обычно не вспоминают. Но как только запрос зависает, клиент разрывает соединение, а фоновая задача продолжает тратить ресурсы, выясняется, что без внятного механизма остановки всё это быстро превращается в источник лишней нагрузки и трудноуловимых ошибок. В этой статье разбираем, как AbortController решает эту проблему в Node.js, где он уже реально применим и как встроить поддержку отмены в собственный код без лишней магии.

Читать далее
1
23 ...

Information

Rating
Does not participate
Location
Мытищи, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Системный инженер, Инженер электронных устройств
Старший
From 225,000 ₽
C++
Qt
Verilog HDL
VHDL
Git
Linux
FPGA
Схемотехника
Altium designer
Разработка электроники