Обновить
1004.45

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

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

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

Chonkie: революция в RAG-чанкинге — скорость, лёгкость, удобство

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

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

Всем привет! Меня зовут Вадим, я Data Scientist в компании Raft. В этой статье я расскажу о Chonkie — библиотеке для простого и быстрого чанкирования документов, а также на практике применю её и сравню с другими популярными решениями: LangChain и LlamaIndex.

Читать далее

Слёзы, баги и C++: как Isaac стал легендарной игрой

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

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

Помню, как впервые запустил The Binding of Isaac: стартовая комната без подсказок, закрытые двери, на миникарте пусто. Пара забегов и у меня уже список технических вопросов по генерации этажей, приоритетам предметов, поведению врагов, рендеру и производительности. В тот момент я решил написать эту статью.

Сегодня я расскажу о разработке культовой инди-игры The Binding of Isaac и разберу технические нюансы: путь от Flash к C++, как собирается план этажа, как устроены большие комнаты и секретки, по каким правилам живут эффекты предметов и их синергии, как Lua-скрипты встраиваются в движок для модов, где в архитектуре сделаны осознанные компромиссы.

Читать полную историю

Как я искал работу бэкенд разработчика с одним годом опыта. Мысли, эмоции, статистика

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

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

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

Читать далее

Много спрашиваю и откладываю встречи на последний момент: мой опыт прохождения собеседований

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

Любое собеседование — это стресс, особенно если ты джун без опыта в небольшом городе. Никто не застрахован от неудачных интервью, токсичных работодателей и собственных провалов. К счастью, всё это можно пережить.

Привет! Меня зовут Ярослав, я бэкенд-разработчик в компании «Синимекс» и ревьюер на курсе «Java-разработчик» в Яндекс Практикуме. Я расскажу, как проходил первые собеседования и что помогло мне получить офферы после двух интервью из трёх.

Читать далее

Плагины на C# без рантайма: NativeAOT-экспорт и вызов из Rust/Python

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

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

Наткнулись на задачу: нужен плагин на C#, который можно грузить как обычную C-библиотеку без CLR и JIT, а вызывать из Rust и Python. Без обвязок, без CoreCLR-хостинга и прочего. Чистый C ABI, нормальные строки, предсказуемые структуры, обработка ошибок и нулевой JIT-прогрев. Это как раз случай для NativeAOT: компилируем библиотеку в нативный .dll/.so/.dylib, экспортируем функции через [UnmanagedCallersOnly], а дальше живём как с любой C-библиотекой. Нюансов хватает: что экспортируется и как назвать символ, как договориться по ABI, что делать со строками UTF-8, как возвращать ошибку, как освобождать память снаружи, почему исключения нельзя проталкивать за границу, и в каком месте «cdecl» реально что-то значит.

Ознакомиться с примером NativeAOT

Что нового в JUnit 6: ключевые изменения и улучшения

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

Спустя восемь лет после JUnit 5 выходит новая версия популярного фреймворка. JUnit 6 — это не просто обновление, а переход к современной экосистеме Java и Kotlin. В новом переводе от команды Spring АйО узнаем, что новая версия требует Java 17+, унифицирует версии компонентов, удаляет deprecated API и внедряет поддержку JSpecify для строгого null-safety.

Читать далее

std::simd: шаблоны векторизации без intrinsics в C++

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

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

Векторизация в C++ давно живёт на двух этажах. Внизу автоворожбы компилятора: достаточно аккуратно написать цикл, и при нужных флагах он соберёт SIMD-инструкции сам. Наверху низкоуровневые intrinsics, где вы контролируете каждый shuffle и predication, но платите за это портируемостью и временем на поддержку. Между ними появился удобный этаж: std::simd. Он даёт вам явные векторные типы и операции без прыжков по AVX/NEON-интринсикам и при этом остаётся переносимым. В 2025 году картина такая: полноценный std::simd принят в стандарт C++26, а использовать в проде уже сейчас можно std::experimental::simd из Parallelism TS v2, которая есть в libstdc++ (GCC 11+) и постепенно доезжает до остальных реализаций. Для чтателя это означает простую вещь: сегодня пишем под <experimental/simd>, а миграция на <simd> будет механической.

Посмотреть разбор

В поисках идеального стека для Enterprise проектов: почему Java плюс MACH

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

На протяжении многих лет команда Compo Soft успешно создавала eCommerce‑решения, клиентские порталы, PIM‑системы и другие решения малого и среднего бизнеса. Для этих задач было достаточно привычного стека на PHP и связанных с ним технологий. Когда в 2018 компания приняла стратегическое решение о выходе в сегмент Enterprise — встал вопрос о новом стеке. Им стала Java. В этой статье решили поделиться своим пониманием и опытом — почему сделан такой выбор, и почему PHP «не вывозит» Enterprise‑решения.

Читать далее

Эволюция языков программирования

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

История о том, как стремление человека управлять сложностью меняло сами основы программирования.

Перед тем как перейти непосредственно к языкам программирования, мне очень хочется осветить одно событие.

Итак, перенесёмся в далёкий 1843 год.

Читать далее

Поиск работы Java-разработчика в 2025 году

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

В статье рассматриваются этапы поиска работы Java-разработчиком в 2025 году. Требования к резюме. Советы по прохождению. Технические вопросы с собеседований. Варианты развития событий. Немножко мемов. Моральная сторона вопроса. В 2025 году вышло много статей про падение рынка айти. Давайте посмотрим, есть ли ещё шанс найти работу или пора на завод.

Читать далее

Семантический поиск на Laravel через pgvector

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

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

Предлагаю сегодня разобраться, как семантический поиск появился в Laravel и PostgreSQL.

Разобраться в деталях

Опыт гуманитария в дообучении LLM с помощью WebUI Text Generation

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

Продолжаю делиться опытом освоения нейросетей человеком с гуманитарным образованием и без IT-бэкграунда. На этот раз моей целью было разобраться, как происходит дообучение готовых LLM-моделей, как выстраивать процесс, какие использовать данные, модели, настройки и прочее. Зачем мне это понадобилось?

Во-первых, это вызов самому себе. Юристов, которые смогли бы дообучить языковую модель под свои задачи, думаю, единицы. Хотелось стать одним из тех, кому это по силам, тем более что тема мне интересна.

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

Но для этого нужно понимать, как устроен процесс обучения и из каких элементов он состоит. На момент, когда я взялся за эту тему, у меня были только идея и желание разобраться. Я понимал, что нужно начинать с малого, двигаться небольшими шагами от простого к сложному. Поскольку среди моего окружения не оказалось людей, разбирающихся в этой теме, а понятных гайдов по обучению я не нашел, все мои вопросы по обучению адресовались Grok, Qwen, Deepseek, Gemini и ChatGPT (только бесплатные версии).

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

Читать далее

Сам себе breakpoint

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

Когда отлаживаешь программу, речь идет про использование отладчика в студии или другой IDE, то почти всегда имеешь дело с точками останова (breakpoint, бряками) — механизмом, когда выполнение программы приостанавливается, чтобы можно было заглянуть внутрь и понять, что происходит. Точек останова есть всего два основных типа, программные и аппаратные, а остальные все сделаны на их основе. Эти два базовых типа могут вести себя похоже, но устроены по-разному.

Программные точки останова — это то, с чем сталкивается каждый разработчик, когда вы ставите красную точку в среде разработки (в основном я использую большую студию) или используете команду bp под WinDbg. В этом случае отладчик просто подменяет один байт машинного кода в нужной инструкции на команду int 3. Это специальная инструкция для вызова прерывания отладки (Debug Interrupt), имеет машинный код 0xCC и говорит процессору: “Остановись, я хочу передать управление отладчику”, соответственно когда выполнение доходит до этой инструкции, срабатывает прерывание, и управление передаётся в отладчик. Отладчик "просыпается" и видит, что программа остановилась из-за исключения EXCEPTION_BREAKPOINT , возникшего по конкретному адресу, проверяет свой внутренний список точек останова и находит ту, которая была установлена по этому адресу.

Читать далее

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

Несколько способов как упросить анализ отчета Allure при работе с инструментом АТ в 1С Vanessa-Automation

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

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

1) Статусы сценариев в Allure и как их можно использовать.

В Allure предусмотрены следующие статусы для сценариев:

Читать далее

Embox поддерживает новый российский микроконтроллер от компании Миландр с архитектурой RISC-V

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

Недавно мы добавили в открытую ОСРВ Embox поддержку российского микроконтроллера на RISC-V, о чем я и хочу рассказать в данной статье. Речь пойдет о микроконтроллере MDR1206FI от компании «Миландр».

Читать далее

Почему @starting-style не заменит keyframes (пока)

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

Команда JavaScript for Devs подготовила перевод статьи о новом CSS-правиле @starting-style — инструменте, который обещает упростить анимацию появления элементов. Но всё ли так гладко? Автор показывает, что за красивым синтаксисом скрываются подводные камни специфичности и неожиданные баги, из-за которых старые добрые keyframes по-прежнему оказываются надёжнее.

Читать далее

Отвлекать разработчиков ПО намного вреднее, чем считает большинство менеджеров

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

После COVID-19 наша культура труда в основном изменилась к лучшему, но были и негативные изменения, например, увеличение количества совещаний на 13,5%[1].

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

В своей знаменитой статье «Maker's Schedule, Manager’s Schedule» [2] Пол Грэм писал:

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

Эта проблема не решилась с появлением ИИ-помощников в кодинге; напротив, она усугубилась, потому что менеджеры теперь считают, что разработчики могут быть продуктивными в меньших временных интервалах.

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

Читать далее

ЧикиПуки — генератор развивающих заданий для детей

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

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

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

Меня зовут Коновалов Павел, я фулстек разработчик. В свободное время работаю над проектом ChikiPooki.com. Это образовательная онлайн-платформа для родителей детей дошкольного и младшего школьного возраста, где можно создавать и распечатывать развивающие задания, учитывая возраст и уровень знаний ребёнка.

Читать далее

Насколько быстр Go? Симуляция миллионов частиц на смарт-ТВ

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

Команда Go for Devs подготовила перевод статьи о том, насколько быстрым может быть Go. Автор проверил это на практике — написал симуляцию миллионов частиц с мультиплеером, только на CPU и так, чтобы оно работало даже на смарт-ТВ. Go оказался одновременно и разочарованием, и восторгом: он не дотягивает до Rust в вычислительных задачах, но удивляет своей простотой и тем, как легко масштабируется до сотен клиентов.

Читать далее

Java Digest #29

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

Всем привет! 👋👋👋👋👋 Мы — Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.

В этом выпуске обозреваем Java 25. Смотрим на новые числовые типы, которые появятся в языке. Узнаем, что лучше: verify или clean install. Наблюдаем, как Spring продолжает обрастать новыми фичами. Изучаем сборщик мусора Shenandoah. В очередной раз убеждаемся, что чтение кода занимает куда больше времени, чем его написание. И еще много всего интересного. Приятного чтения 🙂

Читать двадцать девятый выпуск

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