Как стать автором
Поиск
Написать публикацию
Обновить
973.87

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

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

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

Кастомные WPF-контролы (часть 1). Стили, кнопки и переключатели

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

Относительно недавно мне поставили задачу разработать достаточно простое Windows приложение. При выборе технологии я решил использовать проверенный временем WPF, с которым я работал раньше. Как правило, при разработке WPF-приложения, я использовал контролы от Telerik или DevExpress и разработкой своих контролов не занимался. Но в текущей ситуации приобрести их проблематично и не факт, что не будет проблем с лицензией в будущем. Проект, над которым я работал, небольшой, навороченных гридов в нем не было, поэтому я решил использовать то, что есть в WPF “из коробки”. При этом потребуется написать DateTimePicker и доработать Button, ToggleButton, ComboBox и ListBox. Задача казалась не особо сложной. В результате все оказалось не все так просто и очевидно, как я думал. Это навело меня на мысль написать серию статей с описанием проблем, с которыми я столкнулся. Может быть это поможет другим разработчикам на наступать на те же грабли, что и я. В планах 3 статьи. В первой расскажу про подключение стилей и изменение дизайна у стандартных кнопки и переключателя. Во второй - про расширение функционала стандартного ComboBox и разработку DateTimePicker. В третьей про добавление в ListBox анимированного drag’n’drop, масштабирования и сортировки содержимого.

Читать далее

Новости

Меньше магии, больше кода: мой способ писать Django views

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

Команда Python for Devs подготовила перевод статьи о том, как автор выбирает способ написания представлений в Django. Он считает, что обобщённые классовые представления (CBV) скрывают слишком много магии, усложняют чтение кода и отладку. Вместо них он использует базовый View, чтобы сохранять контроль, но при этом избегать громоздких if в функциях.

Читать далее

Векторный поиск в Elasticsearch: dense_vector, HNSW и фильтрация по атрибутам

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

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

В современном поиске всё чаще используется поиск «по смыслу» с помощью векторных эмбеддингов. Вместо привычного анализа текста по словам мы представляем документы и запросы в виде многомерных векторов и ищем ближайших соседей по евклидовому или косинусному расстоянию. Это позволяет, например, находить документы, схожие по смыслу, а не только по точному совпадению слов. В Elasticsearch поддержка такого поиска реализована через поле dense_vector и алгоритм HNSW (Hierarchical Navigable Small World) для быстрого приближённого поиска ближайших соседей.

В этой статье разберём, как настроить индекс с векторным полем, добавить документы с векторами и выполнять запросы kNN с возможностью фильтрации по дополнительным атрибутам.

Читать далее

Локальные LLM модели: обзор и тестирование

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

В ★5УГЛОВ мы часто работаем с языковыми моделями — как облачными, так и локальными. И если про онлайн‑сервисы знают все, то локальные LLM до сих пор остаются недооцененным инструментом. Я решил поделиться личным опытом: какие модели можно запускать прямо на ПК, чем они полезны и зачем их вообще использовать в реальных проектах.

Большие языковые модели (Large Language Model, LLM) уже давно не являются громоздкими программными продуктами, закрытыми от пользовательских доработок и требующими огромных вычислительных мощностей. Многие ИИ можно скачать и запустить на обычном компьютере без интернета. Популярны так называемые «дистиллированные» модели — сжатые версии основных нейросетей, имеющие меньше параметров. Они требуют меньше ресурсов и могут работать даже на не самых мощных настольных ПК или ноутбуках. За последнее время локальные ИИ заметно улучшились: они стали быстрее, стабильнее и качественнее. Если раньше многие из них стремились отвечать по‑китайски (если явно не указать язык), то сегодня выбор значительно шире и работать с ними удобнее. Попробуем оценить самые популярные на разных задачах и выбрать лучшую.

Читать далее

Пишем переиспользуемые инпуты для реактивных форм с ControlValueAccessor + NgControl/Injector

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

ControlValueAccessor - это то, что отделяет профессиональную дизайн‑систему от набора костылей. Но как грамотно связать его с состоянием контрола (invalid, touched), не создав циклических зависимостей? Эта статья - не просто «ещё один туториал». Это пошаговое руководство по созданию универсального инпута на современном стеке: SignalsOnPush и безопасный инжект NgControl. Разбираем раз и навсегда.

Освоить CVA раз и навсегда

Доктор Алан Кей о смысле «объектно-ориентированного программирования»

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

Оригинал

В 2003 году Алан Кей, признанный автор термина «объектно-ориентированное программирование», ответил на вопросы исследователя Штефана Рама. В этом письме он раскрывает первоначальный замысел ООП, который значительно отличается от того, чему большинство из нас учат сегодня. Публикуем перевод этого исторического документа.

Читать далее

DIY Open Source принтер. Часть 0

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

Привет, Хабровчане! Этот цикл (надеюсь) статей будет посвящён моему пути в создании своего собственного решения по струйной печати. Это будет что-то вроде блога или дневника разработчика в котором постараюсь изучить как же всё таки работает печатающая головка у принтера и как ей можно управлять с помощью микроконтроллера. А также нас ждёт интригующий ответ на вопрос: "Если ли место DIY и OpenSourse в мире струйной печати".

Читать далее

Claude Code: субагенты

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

Субагенты в Claude Code — обзор вопроса и немного деталей.

Расскажу про одну из самых примечательных фич Claude Code — инструмент Суб‑Агентов (Sub‑Agents), чем он отличается от обычного Task, и как его можно использовать для создания своих систем на базе ИИ агентов.

Читать далее

Механизм запуска процесса в Linux

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

В этой статье я расскажу о том, что происходит внутри ядра Linux, когда процесс вызывает execve(), как ядро подготавливает стек и как затем передаёт управление пользовательскому процессу для выполнения.

Изучил я этот механизм, когда разрабатывал Zapper — инструмент Linux, удаляющий все параметры командной строки из любого процесса без прав root.

Читать далее

Подставляем TOTP в Chrome c помощью Yubikey

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

Надоело каждый раз подставлять TOTP на сайтах и у вас есть yubikey? Тогда добро пожаловать под кат. Поделюсь самописным расширением, которое позволяет автоматизировать эту рутину.

Читать далее

Как работает память: что происходит в мозге, когда мы забываем пароль от Wi-Fi

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

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

Читать далее

Проектирование REST API: проблемы, решения, практические рекомендации

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

API — это не просто техническая прослойка. Это продукт. Его пользователи — другие разработчики. И, как у любого продукта, у него может быть ужасный или превосходный пользовательский опыт. Плохой API — это источник постоянной боли, багов и потраченного времени. Хороший API интуитивно понятен, предсказуем и прощает ошибки. Он становится продолжением мыслей разработчика.

Читать далее

С помощью ИИ этот парень запустил конкурента Google прямо у себя в кладовке

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

Почти тридцать лет назад, когда Google только выходил на свою победную тропу, у её основателей почти не было железа.

Компания, сначала известная как Backrub и работающая на кампусе Стэнфорда, держала свой первый экспериментальный сервер в коробе из кубиков Duplo. Сервер вмещал 40 гигабайт данных. Позже удалось перейти на скромную серверную стойку. А в 2025 году весь поиск Google уже невозможно уместить даже в одном дата‑центре — и так давно.

И всё же, если включить смекалку и вложить немало труда, можно собрать нечто почти сравнимое с современным Google — на машине, по размеру близкой к тому самому первому серверу. И даже разместить её… в собственной прачечной.

Читать далее

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

День программиста: готовимся к празднику и составляем список антиподарков для кодеров

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

13 сентября в России отмечают День программиста. Рассказываем, как появился этот праздник и что никогда не стоит дарить, если вы искренне хотите порадовать программиста. 

Читать далее

Модернизация древнего драйвера Linux с помощью Claude Code

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

В качестве одного из своих увлечений я помогаю людям восстанавливать данные со старых ленточных кассет, например QIC-80, которые в 90-е годы часто применялись для резервного копирования. Ими пользовались отдельные люди, компании, операторы досок объявлений и не только. К ленточным кассетам я испытываю очень тёплые чувства. Есть нечто особое в том тактильном ощущении, которое возникает, когда держишь эту кассету в руках. Нечто такое, что делает сам процесс её использования приятным несмотря на все огрехи дизайна, которыми славилась технология QIC. Причём, если вникнуть в процесс и воссоздать все необходимые условия, то данные на этих лентах, даже спустя столько времени, вполне можно восстановить.

Читать далее

Maven: verify или clean install?

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

Если вы автоматически пишете mvn clean install при сборке проекта, то вы такой точно не один — эта команда прочно укоренилась в привычке Java-разработчиков. Но действительно ли она всегда необходима? Что, если вместо неё использовать verify?

В новом переводе от команды Spring АйО мы погрузимся в детали жизненного цикла Maven, поведение реактора, инкрементные сборки и подводные камни использования clean и install. А главное — попробуем понять, когда можно (и нужно) обойтись без install и clean, чтобы ускорить сборку и сократить расходы памяти.

Читать далее

Open Source и ЖКХ

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

Привет, мы делаем doma.ai - это open source платформа для рынка ЖКХ, нами пользуется сейчас больше 4 000 юрлиц, а на сервера прилетает до 1 000 rps в пиковые моменты.

Расскажу историю нашего open source, что это дало компании и куда мы хотим развивать open source часть. Посмотреть код и поставить ⭐️ можно на GitHub.

Читать дальше

Как мы вшили нагрузочное тестирование в CI/CD, чтобы не хоронить фичи в проде глубокой ночью

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

Привет Хабр! Я Дима, DevOps-инженер в IT-компании.

Эпик-фейлы бывают разные. Можно забыть закоммитить config.json. А можно так упаковать новый эндпоинт, что всё апи ляжет костьми в час-пик и будет тихо плакать под лавиной реквестов. Ручные нагрузочные тесты — это как проверять тормоза на уже летящем с горы автомобиле. Сегодня говорим о том, как автоматизировать эту магию — вшивать проверку производительности прямо в CI/CD, чтобы не краснеть перед продом и спокойно спать по ночам.

Запускайте свои пайплайны, щупальцы в руки — погнали!

Читать далее

Instinct от Continue: будущее автоматического рефакторинга

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

Команда AI for Devs подготовила перевод статьи о том, как Continue обучила Instinct — открытую модель Next Edit для предсказания следующей правки кода. Разработчики собрали тысячи реальных правок, внедрили алгоритм SeleKT для обучения и показали, что их модель работает в 6,4 раза быстрее ручного редактирования.

Читать далее

A/B-тесты на SQL с уменьшением дисперсии

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

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

Каждому аналитику знакомо: при анализе A/B-тестов важно выжимать максимум информации из данных. Но высокая дисперсия шума часто заставляет нас наращивать выборку и затягивать эксперименты. Как ускорить получение результата и повысить чувствительность теста? Один из способов – сократить разброс метрики без изменения ее среднего. Классическая формула размера выборки показывает, что количество данных N прямо пропорционально дисперсии σ². Получается, уменьшая σ², мы автоматически уменьшаем нужный объем данных или можем детектировать меньший эффект при тех же N.

Поэтому методы снижения дисперсии в A/B-тестах становятся очень востребованными. В индустрии известны разные приемы: стратификация, бутстреп, сложные байесовские тесты, и, конечно же, ковариатный подход (CUPED/CUPAC и т.д.). Мы остановимся на одном из самых простых и эффективных приемов – CUPED (Controlled-experiment Using Pre-Experiment Data). Его суть проста и понятна: перед экспериментом у каждого пользователя была определенная метрика (скажем, прошлые покупки), и мы можем использовать эту информацию, чтобы скорректировать итоговую метрику и снизить шум.

Читать далее

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