Все потоки
Поиск
Написать публикацию
Обновить
1001.23

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

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

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

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

Время на прочтение2 мин
Количество просмотров1.6K

Кажется, ещё вчера искусственный интеллект был чем-то из фильмов и фантазий. А сегодня - он везде: в чатах, в рабочих инструментах, в личных помощниках. Мы удивительно легко впустили его в свою жизнь - с интересом, с восхищением, с доверием. И, казалось бы, что может пойти не так?

Читать далее

Покрытие процедурного кода в ООП проекте юнит-тестами в C++

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

Legacy проекты на С++ зачастую являются многокомпонентными, когда продукт использует несколько библиотек, которые имеют различную архитектуру для работы с ними.
Обычно это:

библиотеки, поставляемые как ООП решение (Некоторые модули boost, SOCI как пример)

библиотеки, реализованные в функциональном стиле (OpenGL через С API, POSIX как пример)

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

Читать далее

Чем опасен apply() и почему его стоит заменить

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

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

Сегодня рассмотрим почему DataFrame.apply() — это так себе инструмент в 2025 году, чем его заменять и как писать dataframe-логику так, чтобы она летала вместо того, чтобы жечь CPU и бюджет.

Читать далее

Функции и методы в Go

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров4.2K

Go — язык, который ценится за простоту и чёткость. Однако даже при минимальном синтаксисе здесь есть нюансы. Особенно это касается работы с функциями и методами. В этой статье хочу поделиться личными наблюдениями и выводами по нескольким ключевым темам: выбор типа получателя, использование именованных параметров результата, распространённые ошибки при возврате nil, проблемы с файлами в качестве входных данных и поведение defer.
ps. Обложку нейронка сгенерировала. Очень странно, но мне понравилось.

Читать далее

Архитектурные принципы Spring Security. Часть вторая

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

Команда Spring АйО перевела и адаптировала доклад Даниэля Гарнье-Муару “Spring Security Architecture Principles”, в котором на наглядных примерах рассказывается, как пользоваться возможностями Spring Security, не запутываясь на каждом шагу и не зарабатывая себе головную боль. 

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

Читать далее

SmartCaptcha Yandex на iOS: инструкция по внедрению

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров840

Привет! Меня зовут Александр, я iOS-разработчик в IT-компании SimbirSoft. В этой статье я расскажу, как интегрировать Yandex SmartCaptcha в iOS-приложение — от подготовки до решения возможных трудностей.

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

Материал предназначен для iOS-разработчиков, у которых уже есть базовые знания мобильной разработки, и кто хочет быстро и корректно внедрить капчу от Яндекса в свое iOS-приложение.

Читать далее

8 ошибок в лицензировании софта, которые могут обходиться дорого

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

Привет, Хабр! Сегодня хочу поговорить о том, как компании-разработчики сами себе «ставят палки в колеса» — выбирают неэффективные модели лицензирования собственного ПО и теряют выручку. Казалось бы, что сложного? Настроил защиту от несанкционированного использования, прикрутил проверку лицензий, добавил пару условий в договор — и готово. Но на практике ошибки в лицензировании обходятся дорого: теряется выручка из-за пиратства и негибких продаж, растут операционные расходы, а клиенты уходят к конкурентам. Почему это важно? Лицензирование — не просто «замок» на софте. Это инструмент монетизации, который защищает код от нелегального использования, формирует стабильный доход (подписки, продажа обновлений и модулей ПО), автоматизирует процессы и делает конечных пользователей счастливыми.

Читать далее

Template Method в Go без наследования

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров2.1K

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

В статье рассмотрим, как реализовать Template Method-паттерн в Go без наследования, зачем он вообще нужен.

Читать далее

Как service discovery ломается в Kubernetes (и почему DNS не всегда помогает)

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

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

В этой статье рассмотрим, как и почему в Kubernetes может сломаться service discovery — даже когда DNS вроде бы работает.

Читать далее

Nocode с MWS Tables: кейсы объединения разных команд в одном пространстве, системы выдачи пропусков и геймификации

Время на прочтение6 мин
Количество просмотров701

Привет, Хабр! Меня зовут Александр Антипов, я продакт-оунер MWS Tables.

Современный бизнес требует быстрых и эффективных решений для управления проектами, задачами и данными. И далеко не всегда есть возможность разрабатывать с нуля сложные системы или интегрировать дорогостоящий софт. Именно для таких случаев создан MWS Tables, чтобы быстро делать приложения без привлечения разработчиков.

В прошлом посте я рассказал, как MWS Tables помог внедрить единый реестр для работы с качеством данных, централизовать управление проектами и заменил таск-трекер. Сегодня будут еще три кейса: создание общего календаря и списка задач в распределенных региональных командах, единая система допусков и внедрение механики рейтингов.

Читать далее

10 техник оптимизации Java, которые выведут вас на новый уровень

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

Когда Java-приложение внезапно начинает «подвисать», причина почти всегда кроется в прозаичных деталях: неоптимизированных циклах, неудачном выборе коллекций, забытом кэше или агрессивном GC. В этой статье — 10 практических техник, которые помогут выжать максимум из JVM без преждевременной микрооптимизации и шаманства. Только доказавшие свою эффективность подходы, которые реально работают в проде — от финтеха до высоконагруженных API.

Читать далее

Может, если бы у C++ было больше времени, он стал бы лучше?

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

В своей предыдущей статье [перевод на Хабре] я говорил о множестве недостатков C++, которые, по сути, устранил Rust. Благодаря этому код теперь легко использовать правильно и сложно использовать неверно. Я не говорил о безопасности по памяти, просто привёл пример того, что пользователь функции не может случайно поменять местами аргументы количества и цены.

На написание статьи меня вдохновил доклад Мэтта Годболта о том, как можно сделать интерфейсы C++ более надёжными: Correct by Construction: APIs That Are Easy to Use and Hard to Misuse. Вам стоит его посмотреть!

В той статье я сказал, что Rust гораздо лучше помогает разработчику, возможно, благодаря тому, что у него были десятки лет, чтобы учиться. В конце концов, первая версия C++ была выпущена в начале 80-х, а Rust — в начале 2010-х. Если дать C++ несколько десятков лет для обучения, то, разумеется, появятся новые структуры, которые будут обладать высоким качеством и которые сложно использовать неправильно.

Но так ли это?

Читать далее

Как Яндекс и ИТМО сделали магистратуру по программированию, которая подойдёт и новичкам, и опытным специалистам

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

В сентябре 2025 года Яндекс и ИТМО открывают онлайн-магистратуру «Фронтенд- и бэкенд-разработка». Анастасия Ждановская, руководитель программы со стороны Яндекса, рассказала, как устроена магистратура для начинающих и опытных программистов, что входит в программу, как создаются учебные материалы и как на неё поступить.

Читать далее

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

Контейнер с нуля

Уровень сложностиСложный
Время на прочтение9 мин
Количество просмотров3.9K

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

Читать далее

Application Layer на примере Go — зачем он нужен, если уже есть сервисы?

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров4.3K

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

Сегодня разберёмся, зачем Go-проекту слой Application / Use-Case: как он герметично изолирует бизнес-логику, позволяет переключаться между HTTP, gRPC, Cron-джобами и очередями, а заодно экономит тесты и нервные клетки.

Читать далее

Каждому сотруднику по личному помощнику: как мы подружились с AI-ревью

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

Вы любите делать код-ревью? 

«Не могу дождаться следующего PR!», — ответит абсолютно никто.

Понимаю! Ревью — штука необходимая, но давайте честно: утомляет, забирает время и ресурс, который можно потратить на другие задачи. Делегировать, казалось бы, хорошая идея… но кому? Личного ревьюера на полную ставку ни у кого нет.

Меня зовут Александр Федотов, я руководитель группы разработки в «Лаборатории Касперского». В своей команде я уже не раз пытался упростить ревью: менял подходы, вводил правила, подключал автоматизацию. Но все равно ощущение такое, что можно сделать еще лучше. Тем временем, коллеги реализовали интеграцию TFS с внутренней AI-моделью ЛК. И вот одним морозным зимним днем, во время настройки каких-то доступов, я попал в раздел Manage Features, где наткнулся на неприметный пунктик Pull Request AI, который позволял воспользоваться преимуществами этой интеграции.

Не теряя времени, я активировал фичу и стал счастливым обладателем раздела AI в каждом PR. С тех пор ревью стало другим. И теперь я не просто верю в автоматизацию — я ею пользуюсь и хочу поделиться с вами своими мыслями об этом.

Читать далее

Нейрошиза: как мы потеряли голову из-за искусственного интеллекта

Время на прочтение3 мин
Количество просмотров46K

Пока вы это читаете, кто-то уже делает стартап за выходные с помощью AI, поднимает раунд и продаёт компанию самому себе. Всё это — в эпоху нейрошизы.

Читать далее

xk6-browser как секретное оружие для умного исследования производительности

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.2K

Привет, Хабр. Меня зовут Антон, я работаю в группе нагрузочного тестирования ЮMoney и занимаюсь исследованием производительности. В статье расскажу про xk6-browser — что у нас было до него, какие у этого решения преимущества и метрики.

Читать далее

Использование библиотек для программирования ПАК Рудирон

Уровень сложностиПростой
Время на прочтение24 мин
Количество просмотров652

Продолжим серию статей про ПАК «Рудирон» и его программирование. Сегодня мы осветим тему использования библиотек при создании своего программного обеспечения.

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

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

Шаблоны и примеры проектов ПАК Рудирон размещены в репозитории: https://gitflic.ru/project/akvarius-rudiron/rudiron-projects

Читать далее

Spring Data Ahead of Time репозитории

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

Команда Spring АйО перевела статью про новую версию AOT-репозиториев, которые позволяют генерировать реализацию методов запросов на этапе сборки. Это ускоряет запуск приложений, снижает потребление памяти и делает поведение репозиториев более прозрачным для разработчиков.

Читать далее

Вклад авторов