Обновить
1012.3

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

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

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

RSC Explorer: что на самом деле летит по сети в React Server Components

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

Команда JavaScript for Devs подготовила перевод статьи о том, как на самом деле работают React Server Components. Автор разбирает RSC на уровне протокола: что именно стримится с сервера, как JSX путешествует по сети, почему состояние не ломается при обновлениях и зачем React вообще понадобился такой странный формат.

Читать далее

GitLab: Основы написания Pipeline 1/3

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

Всем привет!

Так вышло, что в месте, где я преподаю и занимаюсь менторством стажёров, начался переход с GitHub-репозиториев на GitLab, развёрнутый на собственных серверах. Пока что перенесли не все проекты, но даже этого оказалось достаточно, чтобы у стажёров возникло немало вопросов — особенно в части настройки CI/CD-процессов.

Формально CI/CD в GitHub и GitLab решают одну и ту же задачу, но на практике подходы, терминология и детали конфигурации отличаются. Из-за этого попытки «сделать как в GitHub Actions» часто приводят к путанице и ошибкам.

У меня уже есть статья про CI/CD и workflow, но она целиком посвящена GitHub Actions. Чтобы сократить количество вопросов, разночтений и бессонных ночей у стажёров, я решил написать отдельную статью про CI/CD именно в GitLab — с учётом его особенностей и типичных подводных камней.

Если вам интересны подобные материалы, подписывайтесь на Telegram-канал «Код на салфетке». Там я делюсь гайдами для новичков, полезными инструментами и практическими примерами из реальных проектов. А прямо сейчас у нас там ещё и проходит новогодний розыгрыш.

Читать далее

Генерация кроссвордов: «достаточно хорошее» решение NP-полной задачи

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

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

В конце 2021 года, уже сильно после начала локдауна, моя одержимость кроссвордом газеты The New York Times превратилась в хобби-проект. Я хотел написать приложение с кроссвордами, понял, что мне нужны сами кроссворды, попробовал сочинять их вручную, осознал унылость этого процесса и задался вопросом: можно ли генерировать их алгоритмически? В этом году я наконец-то выпустил Crosswarped для iOS и Android — игру в кроссворды, созданную на основе генератора, описываемого в этой статье.

Читать далее

Как устроено управление памятью в Python и какую роль в нём играют слабые ссылки

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

Команда Python for Devs подготовила перевод статьи о слабых ссылках в Python и управлении памятью. В материале разбирается, как работает подсчёт ссылок, почему циклические зависимости приводят к утечкам памяти и в каких случаях weak references становятся незаменимым инструментом.

Читать далее

От текста к токенам: как работают пайплайны токенизации

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

Команда AI for Devs подготовила перевод статьи о том, как поисковые системы превращают обычный текст в токены и почему этот процесс важнее, чем кажется. Разбираем каждый этап: нормализацию, токенизацию, стоп-слова, стемминг и то, как всё это влияет на качество поиска.

Читать далее

Надежное программирование — часть 6. Неудачники, выросшие и перспективные языки

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

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

Читать далее

Больше ядер, а не более быстрые ядра

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

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

Читать далее

Разделяй и тестируй: @DataJpaTest и @WebMvcTest для быстрых тестов Spring Boot

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

Привет, Хабр! Cегодня рассмотрим, как ускорить интеграционные тесты в Spring Boot с помощью специальных slice аннотаций.

Начнём с того, почему вообще тесты могут быть медленными. Используя @SpringBootTest, мы просим Spring Boot поднять весь контекст приложения для каждого тестового класса. У нас доступны все бины, но часто все это избыточно. Например, хочется протестировать контроллер, а Spring загружает ещё и базу данных, и сервисы, и шлёт запросы к Kafka. В результате простой тест метода контроллера может запускаться несколько секунд, пока поднимется веб‑сервер, инициализируется база, подтянутся все классы.

Эту проблему осознали и добавили так называемые test slice‑аннотации. Все простоб грузим не весь контекст, а только срез приложения, например, только веб‑слой или только слой доступа к данным. Spring Boot содержит готовые slice‑аннотации для основных слоёв: @WebMvcTest для веб, @DataJpaTest для JPA‑репозиториев, и ещё пачку для других случаев.

Рассмотрим на примерах двух интересных слайса: @DataJpaTest и @WebMvcTest.

Читать далее

Основы оптического потока в ML: от первых принципов к уравнениям Лукаса-Канаде и Хорна-Шанка

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

Аннотация

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

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

Читать далее

Ёлочная игрушка, на которой запустили Doom

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

Близятся Новый год и Рождество, а значит, ёлки и всё связанное с ними: гирлянды, украшения и, разумеется, игрушки. Праздник слишком уж весёлый, и я решил, что ему не хватает мрачной игры, поэтому напечатал маленькую ёлочную игрушку в виде модели IBM PC, засунул в неё самый маленький ЖК-дисплей, который смог найти, добавил туда процессор и логику, а также аккумулятор. Это устройство может висеть на ёлке и показывать демонстрационный режим Doom со звуком и музыкой. Но и это ещё не всё: если подключить ней любую BLE-клавиатуру или джойстик, то можно будет самому убивать миллиметровых зомби, какодемонов и импов.

Читать далее

Нейроучитель — NeuroTeacher

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

Всем привет!

Хочу рассказать об очередном своем пет-проекте, который может быть кому-то тоже полезен. А еще поделиться хорошим предновогодним настроением. Поэтому рассказывать буду в слегка позитивном и шуточном стиле :-)

Итак, перед вами — нейроучитель! Хех... Сразу говорю — к нейросетям он не имеет отношения (или опосредованное). Да и не учитель, собственно. Это моя собственная методика интервальных повторений, то есть зубрежки, увеличения словарного состава... Но обо всем по порядку — в статье я расскажу, почему это все же «нейро», зачем и каким образом.

Читать далее

Eventually-consistent СУБД — всё?

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

В начале 2010-х в профессиональном сообществе разработчиков и архитекторов распределенных систем широко обсуждалась идея, что мир баз данных вступает в новую эру. На фоне успехов крупных интернет-сервисов термин BASE начал использоваться как противопоставление классическому ACID. Хайп вокруг NoSQL, CAP-теоремы и масштабируемых систем породил лозунги вроде «SQL умер», «ACID — для банков, а мы делаем веб», «eventual consistency — это нормально».

Однако спустя полтора десятилетия крупные облачные и корпоративные платформы по-прежнему говорят языком транзакций, изолированных операций и строгой согласованности. 

Что же произошло? Была ли «битва ACID и BASE» реальным технологическим разломом или лишь отражала ограничения своего времени? 

В этой статье мы разберём, как возникли ACID и BASE, почему BASE быстро стал популярен и что на самом деле означает тезис «победил ACID» в 2020-е годы.

Читать далее

Развитие языка программирования Ü в 2025-м году

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

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

Читать далее

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

Spring MCP, лучший HTTP-клиент и поддержка MyBatis

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

Amplicode 2025.3 — релиз про новые фичи для Spring Data JDBC, улучшения для HTTP-клиента Connekt (между прочим, убийца Postman), поддержку MyBatis и новые возможности по работе с инфраструктурой вокруг Kubernetes и Terraform.

Ниже — ключевые изменения по блокам.

Читать далее

5 ключевых изменений в Python 3.14 глазами инженера

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

Команда Python for Devs подготовила перевод статьи о ключевых изменениях в Python 3.14. Автор разбирает релиз через призму внутреннего устройства интерпретатора и производительности: свободная многопоточность, конкурентные интерпретаторы, удалённая отладка, инкрементальная сборка мусора и новый Tail Calling интерпретатор.

Читать далее

Ваша работа — выпускать код, который доказанно работает

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

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

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

Ваша задача — выпускать код, который доказанно работает.

Мы, разработчики ПО, не просто производим код; сегодня даже можно сказать, что для этого предназначены LLM. Мы должны выпускать код, который работает, и приложить к нему доказательство его работы. Если вы этого не делаете, то просто сбрасываете бремя настоящей работы на того, кто должен будет проверять ваш код.

Читать далее

От квантового программирования до операционных систем для паяльников: итоги грантовой программы «Код без границ»

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

Open source даёт многое: творчество, свободу идей, среду для роста и обучения. А ещё снижает барьеры в науке, образовании и разработке и создаёт реально крутые и полезные продукты, инструменты и сервисы.

В рамках программы «Код без границ» российские разработчики показали, что открытый код сегодня — это квантовое программирование для управления производством, GraphRAG-движки нового поколения, ИИ для науки и образования, операционные системы для паяльного оборудования и много других инновационных проектов с реальным применением.

Пришло время подвести итоги — давайте узнаем, кто победил в грантовой программе, выбор был непростой!

Узнать итоги

Go, cgo и Docker: практичная кросс-платформенная сборка

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

Команда Go for Devs подготовила перевод статьи о том, как упростить сборку Go-проектов с cgo, используя Docker. Авторы на реальном примере показывают, как избавиться от платформенной боли, сложных зависимостей и ручной настройки окружения, при этом сохранив воспроизводимость продакшен-сборок. Практичный разбор для тех, кто сталкивался с cgo и кроссплатформенной сборкой.

Читать далее

Ассемблер для гоферов. Стек. Особенности amd64, arm64 и arm. Часть 3

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

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

Читать далее

Мечтают ли Архитекторы об электроовцах?

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

Было ли у вас озарение? Возникало ли ощущение вспышки, когда вы понимали, что нашли решение проблемы?

Знаменитая фраза «Эврика!» очень хорошо отражает суть этого ощущения.

Далее — мой отзыв о хайповой теме применения LLM в разработке ПО и всего, что с этим связано.

Читать далее

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