Обновить
1335.66

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

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

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

Технический гайд по сторис — часть 3: как мы написали свою библиотеку

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

Привет! Меня зовут Владислав Фальзан, я работаю android-разработчиком в М2. Наша команда мобильной разработки развивает приложение — онлайн-платформу для решения вопросов с недвижимостью. Основные пользователи приложения — физические лица (B2C) и риелторы (B2B2C). Эта статья — технический гайд для android-разработчиков о том, как использовать нашу новую библиотеку по сторис с деталями и нюансами реализации. Из статьи вы поймете: как использовать библиотеку на полную мощность для своих задач и как она устроена изнутри.

Для удобства изучения статьи я решил разбить ее на блоки:

Читать далее

Как мы распилили монстр-сервис за месяц: опыт команды из 10 разработчиков

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

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

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

Главный спойлер: результат превзошёл ожидания. Сервис стал быстрее, команды — автономнее, а система наконец-то обрела масштабируемость.

Читать далее

Переводим проекты с Python на Node.js: на что способна локальная LLM на самом деле

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

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

Всем привет! Меня зовут Максим, и я работаю в ООО РТК ИТ руководителем направления в департаменте разработки и развития систем поддержки бизнеса (ОП ЮГ). В этой статье расскажу, как с помощью локальной языковой модели автоматизировал перевод Python-проектов в Node.js.Опишу технические детали реализации от сборки контекста до генерации файлов с кодом. Подниму вопрос масштабируемости, ограничений LLM при работе с большими проектами и возможных улучшений для повышения точности перевода.

Читать далее

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

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

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

Читать далее

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

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

Всем привет!

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

Аннотация

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Всем привет!

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

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

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

Узнать итоги

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