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

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

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

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

Wake Up Remix: Перезагрузка фреймворка для современного веба

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

На конференции React прошлым летом команда объявила, что Remix «уходит в спячку».

К тому моменту Remix v2 стал настолько тонкой обёрткой над React Router, что между проектами возникло искусственное разделение. Чтобы упростить архитектуру фреймворка, команда перенесла код сборщика и серверного рантайма из Remix непосредственно в React Router v7, объединив всё лучшее из фреймворка в так называемый “framework mode” для роутера. Также было объявлено о планах добавить ограниченную поддержку React Server Components (RSC) в React Router.

Эта работа была завершена: версия 7 была выпущена в ноябре прошлого года, а в конце мая была представлена предварительная поддержка RSC. Теперь разработчики, использовавшие Remix v1, v2 или более ранние версии React Router, могут рассчитывать на стабильную платформу с долгосрочной поддержкой.

Теперь же, пришло время заняться Remix!

Читать далее

Структурированная генерация в LLM

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

Привет. Меня зовут Андрей Соколов, я руководитель команды LLM в AI VK, которая обучает и дорабатывает модели, а потом помогает другим командам интегрировать их в свои продукты. И сегодня я расскажу про такое направление в LLM, как структурированная генерация. 

Читать далее

Код-ревью: борьба или мотивация?

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

Привет! Меня зовут Илья, последние 7 лет я занимаюсь фронтендом и наконец решил отметиться на Хабре. Стартую с темы, которая, как кажется, уже успела приесться, но всё ещё вызывает жаркие споры — код ревью (CR). Не смотря на сотни статей и мануалов, каждая команда подходит к этому процессу по‑своему. Хочется зафиксировать и осмыслить собственный опыт, показать, как мы подходили к настройке процесса в реальном проекте, и почему, на мой взгляд, код‑ревью не может быть универсальным, а должен опираться на контекст команды.

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

Читать далее

«Я слышу свой код»: как работает Java-программист, потерявший зрение

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

Константин Евтеев @beginner760собирает Java-код с помощью диктора NVDA, редактирует его в Блокноте и передает на Linux по SSH через самописные bash-скрипты. Он рассказал нам, почему после потери зрения не потерял интереса к жизни и желания быть полезным и как выстроил собственную инженерную экосистему: оглавления по строкам .txt-файлами, навигация по main и маленьким методам, отладка на слух.

Читать далее

Flutter & Dart: Май 2025 — Главное за месяц

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

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

Читать далее

Философия программирования зашла в тупик

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

Никто давно не пытается выводить теорий о том как правильно писать код.

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

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

Читать далее

Что может пойти не так с merge() — дубли, потери, ошибки типов

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

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

Тонкое скрещивание DataFrame-ов в pandas по-прежнему остаётся источником прелестных багов: случайных дубликатов, потерянных строк и неуловимых NaN-ов. В статье рассмотрим эти проблемы.

Читать далее

Mystical: визуальный язык программирования. Что это и как работает?

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

В мире разработки хватает экзотики: одни языки создаются ради скорости и эффективности, другие — ради красоты или даже чистого искусства. Mystical — как раз из последних. Он превращает исходный код в необычные кольцевые структуры, за которыми скрывается синтаксис PostScript. Давайте разбираться, почему он так странно выглядит и что полезного можно сделать со всей этой красотой.

Читать далее

Великая иллюзия Copilot

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

Глава 1: мой коллега, программист

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

«Постой-ка. У меня появилась идея. Дай мне клавиатуру.»

Идея. Ага. Как у младенца появляется «идея» засунуть вилку в розетку. Я почти доделал нечто прекрасное; стройную, изящную логику, пронзающую сложность подобно ножу, режущему масло. И тут появился он — бьёт по клавиатуре, как будто она ему деньги должна, копипастит код-франкенштейн из комментария на StackOverflow, написанный последователем Дяди Боба в 2014 году.

Знает ли он, что делает наша система? Нет.

Прочитал ли он тикет? Разумеется, нет.

Ощущает ли он уверенность, когда безрассудно корёжит глобальное состояние? Разумеется, да.

Читать далее

Возможное расширение языка C++ операцией скалярного произведения

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

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

C[>i][>j] = A[i][>k] * B[>k][j];

Насколько мне известно, сочетания операторов [> и [< вроде бы нигде не используются. Их можно применить для декларации индексов, которые существуют только в пределах данного выражения. Сочетание [> используется для декларации индекса, который пробегает от начала до конца массива в прямом направлении, а сочетание [< для декларации индекса, который пробегает в обратном направлении. Для повторяющихся индексов в произведении подразумевается суммирование - они аналогичны немым индексам в тензорных обозначениях.

Разберём на примерах, как это будет работать.

Читать далее

Как я учил жёлтый ИИ торговать и обманывать друг друга

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

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

Читать

Новая проблема с ИИ?

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

ИИ шагает по планете и входит в нашу повседневную жизнь. Но иногда преподносит сюрпризы.  Некоторые из них - неприятные.

Моя заметка - об одном таком сюрпризе.

Читать далее

Как устроен reflect.Value и что происходит, когда вы вызываете .Field(i)

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

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

Сегодня разберём, как устроен reflect.Value изнутри и что на происходит, когда вы вызываете .Field(i).

Читать далее

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

Плохие паттерны в типах — «Утка-дублер»

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

Почему люди не используют типы чаще? Возможно все связано с тем, что опытные разработчики перестали использовать нерабочие паттерны, не оставляя за собой следов для новичков. В этой статье более детально разбирается недавно удаленный мной код с паттерном, который я называю «утка‑дублер». Вы сможете проследить процесс разработки типа, а также причину его удаления. Также мне хотелось бы попросить разработчиков на Rust документировать и делиться своими ошибками, чтобы мы все могли на них учиться.

Читать далее

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

Время на прочтение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.3K

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

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

Читать далее

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

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

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

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

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

Читать далее

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