Обновить
1024K+

Программирование *

Искусство создания компьютерных программ

1 697,56
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Безумие препроцессора: внедряем do-нотацию для монад из Haskell в C++

Уровень сложностиСложный
Время на прочтение12 мин
Охват и читатели8.9K

Добро пожаловать в чистилище препроцессора — место, где здравый смысл уступает место макросам. Сегодня мы заставим C++ притвориться Haskell-ем и внедрим do-нотацию, за которую любой адепт «чистого языка» предаст нас анафеме.

Программисты на C++ делятся на два типа: те, кто боится препроцессора, и те, кто познал сие древнее чудо с сишных времён.

Сегодня мы перейдем черту. Функциональное программирование манит своими абстракциями, но когда дело доходит до цепочек вычислений в монадах, C++ встречает нас бесконечными лямбдами и вложенностью, от которой рябит в глазах. В Haskell эта проблема решена элегантным do-синтаксисом. А что, если я скажу, что мы можем получить то же самое в C++, используя лишь тёмную магию макросов, простые шаблоны и полное пренебрежение здравым смыслом?

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

Запустить конвейер безумия

Как собрать Physical AI-конвейер на манипуляторе за 30 тысяч рублей: ROS2, LeRobot и end-to-end imitation learning

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели8.6K

Вокруг Physical AI сейчас много шума, но если отбросить красивые слова, у большинства разработчиков до сих пор нет главного — воспроизводимого конвейера на реальном роботе, который можно поднять своими руками, покрутить, записать данные, обучить policy и вернуть её обратно в железо. Обычно всё рассыпается на отдельные куски: где-то есть teleop, где-то есть датасеты, где-то крутится ML-модель, но цельного ROS2-native пути от демонстрации до исполнения почти не видно. В статье вы получите решение, как собрать такой манипулятор самостояетельно и запустить все необходимые программные компоненты из open-source ROS2 пакетов.

Читать далее

Искусство просить отзывы: как легально поднять рейтинг до 4.9 и не взбесить пользователя

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели5.2K

Вы открываете приложение, чтобы быстро проверить баланс или забронировать стол, и тут же получаете в лицо: «Вам нравится наше приложение? Оцените нас!». Ваша реакция? В лучшем случае - машинальное нажатие на крестик, в худшем - удаление. Моя личная боль - открываешь банковское приложение для оплаты на кассе по СБП и получаешь аж три баннера один за другим на экран. Я не хочу прямо сейчас оформить кредит, не хочу оценивать ваши продукты. Я только открыл приложение, я покупки оплатить хочу. И такое поведение если уж не каждый запуск, то каждый второй точно.

В 2026 году Apple и Google стали еще жестче фильтровать накрутки, а пользователи - еще чувствительнее к прерыванию их «флоу». Тем не менее, рейтинг 4.9 - это не магия, а математика, психология и вовремя вызванный системный метод.

Давайте попробуем разобраться, как построить систему сбора отзывов, которая не превращает ваш продукт в назойливого попрошайку, и почему иногда лучший способ поднять рейтинг — отправить пользователя в чат поддержки.

Продолжим

Что такое dataLayer на самом деле: от аналитиков — разработчикам

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели4.7K

Если спросить разработчика, что такое dataLayer, чаще всего ответ будет примерно такой: «Ну это что-то из GTM». Я понимаю, что вот вы, конкретно вы, уважаемый читатель, так не отвечаете, и никто так не отвечает, но у меня вот такая статистика. А если спросить аналитика, что нужно для настройки событий, ответ будет: «Нужно просто пушнуть это в dataLayer» Здесь начинается легкое раздражение с обеих сторон. Разработчику кажется, что это часть Google Tag Manager, которую он не обязан понимать. Аналитику кажется, что это очевидная вещь уровня «объявить переменную». В итоге dataLayer превращается в некий черный ящик, за который отвечает «кто-то другой».

Спойлер: никто.

Главная мысль этой статьи простая: dataLayer — это просто глобальная переменная в window. Все остальное — это уже работа разработчика по задачам аналитика и последующий тюнинг аналитиком в тег-менеджере.

Читать далее

Создание библиотеки на C++. Часть III

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.3K

Привет! Меня зовут Николай, я C++-разработчик в SimbirSoft. Это третья часть цикла статей о проектировании библиотек на примере решения геометрических задач.

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

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

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

Для комфортного чтения потребуется уверенное понимание шаблонов, частичной специализации и базовых принципов обобщённого программирования в C++. Материал ориентирован на разработчиков уровня middle и выше, которые интересуются проектированием расширяемых библиотек и архитектурой современных C++-систем.

Читать далее

Технический директор играет по-взрослому: JavaFX в хобби-проектах

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели9K

В первой статье я уже говорил о своей любви к компьютерным играм — что, в общем‑то, неудивительно. Но всерьёз, вплоть до создания собственных небольших прототипов (так называемых демок), я занялся этим только в довольно зрелом возрасте — где‑то с 2021 года и до сих пор. Всё началось с того, что я открыл для себя мир Java: для моих программистских навыков он оказался на удивление простым. Ну и да, про 2 млн устройств — это, конечно, избитая шутка. Больше всего в разработке приложений на JavaFX меня впечатлила простота реализации: приложения получаются легко и быстро. Конечно, можно допустить ошибки, и тогда производительность окажется низкой. Но я по‑прежнему считаю, что это очень удобная технология для создания настольных приложений.

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

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

Читать далее

Халява уходит из разработки Агентов

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели11K

Сегодня каждый норовит написать универсального агента и объявить это революцией. Рынок переполнен поделками вроде OpenClaw и его клонов: IronClaw, ZeroClaw, MicroClaw, NullClaw, GitClaw, AstrBot, GripAi, Moltis...

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

В статье разберем все грехи status quo и предложим другой подход, более требовательный к компетенциям в области разработки ПО.

Читать далее

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

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели7.8K

Качество работы 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, а сильные аналитические способности модели позволяют извлечь из неё пользу, а не утонуть в шуме.

Читать далее

.NET под микроскопом | процессы, метаданные, AOT и GC

Уровень сложностиСложный
Время на прочтение21 мин
Охват и читатели11K

Эта статья скорее всего будет полезна тем, кто продолжает разбираться или работать на платформах .NET . Предупреждаю! Здесь будет далекое плавание в разные места, и с точки ОС будет упомянуто достаточно много!

На просторах Хабра есть несколько хороших статей про устройство и поведение .NET. Мне хотелось бы стать "чем-то по связующим" между ними.

Спустить шлюпку

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

Уровень сложностиСложный
Время на прочтение6 мин
Охват и читатели13K

Всем привет!

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

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

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

Читать далее

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

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели17K

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

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

Читать далее

Обесценивание и эксплуатация: к чему пришёл Open Source

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели20K

Уже около двадцати лет я говорю о многих проблемах, характерных для среды опенсорса. Компании часто применяют открытое ПО или библиотеки, не соблюдая условия лицензий. В стремлении оградить себя от лишних проблем они уже привыкли применять дешёвые сторонние продукты, перекладывая ответственность на их авторов. В итоге труд определённых категорий опытных специалистов утратил ценность, так как предполагается, что плоды этого труда будут доступны бесплатно.

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

Читать далее

Elvis-модификатор доступа в C#

Уровень сложностиСредний
Время на прочтение37 мин
Охват и читатели8.3K

Доброго здоровья!

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

Эти темы и затрагиваются в предлагаемом «Elvis-модификаторе доступа», реализованным через Roslyn Analyzer. Все исходники и nuget пакеты прилагаются.

Читать далее

Ближайшие события

ProcessEvent на стероидах: сериализуемые вызовы функций в UE5 или как я готовлю материал для статей

Время на прочтение7 мин
Охват и читатели5.8K

В предыдущих двух статьях я разбирал K2Node - как устроены ноды Blueprint изнутри - и Blueprint VM: байткод, опкоды, стековую машину. Следующая на очереди - Reflection: UClass, UFunction, FProperty и вся система метаданных, на которой стоит движок.

Готовясь к ней, я решил, что лучше всего разобраться в теме поможет практика. И тут подвернулся юзкейс: мне нужен был способ сконфигурировать вызов произвольной функции в редакторе и выполнить его в рантайме. Без хардкода, без кодогенерации, без десятка одинаковых обёрток. Так появился FunctionHandler - плагин для UE 5.6, в котором пригодилось всё, о чём я писал раньше: CustomThunk'и, ExpandNode, работа с FFrame и MostRecentProperty.

Эта статья - про то, как всё сошлось в одном плагине, какие решения сработали, и на какие грабли я наступал.

Читать далее

Запускаем LLM на AMD RX580: разбор проблем ROCm, Ollama и реальный GPU inference

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели12K

3 дня борьбы с ROCm, RX580 и Ollama: как я запустил LLM на домашней видеокарте

Я попытался запустить LLM inference на старой AMD RX580 через ROCm и Ollama в Kubernetes. GPU определялся, VRAM занималась, контейнеры запускались — но inference падал с ошибками hipMemGetInfo, а иногда просто выдавал бессмысленный текст.

В статье — полный инженерный разбор:как диагностировать реальный GPU compute (а не просто VRAM usage), почему Vulkan помог найти root cause, какие версии ROCm и kernel оказались рабочими, и как добиться стабильной генерации ~42 tokens/sec на RX580.

Читать расследование

Собрал EdTech-платформу за неделю. Разбираю свой workflow по шагам

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели8.4K

В марте 2023 я написал статью «ChatGPT: новый инструмент в борьбе с багами». Показал как нейросеть генерирует тест-кейсы, ищет XPath-локаторы и пишет SQL-запросы. 40 000+ просмотров. Первая статья на эту тему в рунете.

Ты сейчас подумал «ну и что, таких статей теперь тысячи». И ты прав. Но подожди.

За 3 года я прошёл путь от «вау, ChatGPT написал мне 10 тест-кейсов» до «я один собрал образовательную платформу за неделю». И это НЕ кликбейт.

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

Читать далее

Python Standard Library для спортивного программирования

Время на прочтение3 мин
Охват и читатели8K

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

Читать далее

Эмуляция АСУ ТП: технические решения и практические аспекты реализации

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели9.5K

Эта статья продолжает цикл воспоминаний разработчика тренажёрных комплексов. Несколько лет назад наша команда столкнулась с задачей создания эмулятора автоматизированной системы управления технологическим процессом (АСУ ТП) для одной из тепловых электростанций. Задача выглядела стандартной и несложной: воспроизвести логику контроллеров, разработать мнемосхемы и запустить модель.

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

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

Читать далее

DevOps в 2026 году: перспективы профессии и как онлайн-магистратура помогает прокачать нужные рынку навыки

Время на прочтение5 мин
Охват и читатели8.8K

Привет! Это команда Яндекс Практикума, сегодня мы вместе с вами рассмотрим, что из себя представляет DevOps в 2026 году и расскажем про онлайн-магистратуру ИТМО в партнёрстве с Яндекс Практикумом «DevOps‑инженер облачных сервисов»: кому подойдёт программа, как поступить в 2026 году, какие навыки вы будете изучать, какие у вас будут перспективы в этой области и при чём тут искусственный интеллект.

Читать далее

Три попытки, академ и истерика перед собесом: как я поступала в Школу анализа данных Яндекса

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели6.3K

Привет! Меня зовут Яна, я студентка ВМК МГУ и ШАДа. В этой статье хочу поделиться своей историей поступления в Школу анализа данных (ШАД) Яндекса. Получилось долго, больно, но очень ценно. Уверена, многим абитуриентам мой опыт (и ошибки) будут полезны.

Откуда я и как узнала про ШАД

Про Школу анализа данных я узнала еще в школе. Случайно наткнулась на YouTube: смотрела интервью Владимира Оксфорда с Еленой Буниной (бывший руководителем ШАДа и ген директором Яндекса). Также я загорелась идеей поступить на ВМК МГУ, участвовала в олимпиадах, поэтому ШАД был на слуху как что-то недостижимо крутое.

Сама я из обычной школы Калининграда. Никаких продвинутых курсов по программированию у нас не было, я готовилась только к математике (олимпиады дали 100 баллов за ДВИ). Поэтому, когда я поступила на ВМК, учеба с первого курса давалась мне очень и очень тяжело, базы катастрофически не хватало.

Первая попытка (1-й курс): «Просто попробовать»

Первый раз я подала заявку в ШАД в конце первого курса. Назвать это попыткой язык не поворачивается. Шла зачетная неделя, и я чисто физически успела только зарегистрироваться и в последний день «порешать наугад» задания первого этапа.

Читать далее