Обновить
1050.55

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

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

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

Автоматизация Laravel: как сделать процесс разработки быстрым и надежным

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

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

Материал рассчитан на разработчиков с опытом работы с Laravel, которые хотят внедрить автоматические проверки, статический анализ, единый стиль кода и готовую сборку Docker Compose для быстрого старта проектов. Я поделюсь своим опытом, конкретными инструментами и практическими примерами.

Читать далее

Хватит писать «чистый» код. Пора писать понятный код

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

Да, это очередная статья по чистому коду. Но по разным источникам, соотношение времени, затрачиваемого на чтение и написание кода, может достигать 7 к 1 и даже больше. Когда вы исправляете ошибку, добавляете новую функциональность или проводите рефакторинг, вы сначала погружаетесь в логику, написанную другими людьми (или вами же, но несколько месяцев назад). Именно поэтому читаемость кода становится более важным фактором, чем скорость его первоначального написания. Нечитаемый код — это технический долг, который замедляет всю команду и увеличивает стоимость разработки в долгосрочной перспективе.

Читать далее

DIY Open Source принтер. Часть 2. Логика управления печатающей головой HP123

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

Привет, Хабровчане!

Это продолжение моего дневника разработки DIY струйного принтера. Предыдущие части:

DIY Open Source принтер. Часть 0
DIY Open Source принтер. Часть 1. Покоряем USB Printer Class и имитируем печать текста

В прошлый я рассказывал как наладить интерфейс между ПК и STM32 таким образом чтобы ПК понимал что мы подключили к нему принтер, а не неизвестное устройство. В этой статье я предлагаю разобраться с тем как работает печатающая голова в картриджеHP123, каким образом сформировать управляющие сигналы для неё и как удержаться в рамках субмикросекундных таймингов.

Основным источником информации для меня выступают:

статья на Hackaday и проект PrintSpider_Arduino от нашего товарища по Хабру @lichnost
— cтатья Magic Printer Cartridge Paintbrush и проект printercart_simple от Spritetm

Речь пойдёт только об отработке логики! Подключение железа пока невозможно — затронем в следующий раз — я работаю в этом направлении.

Читать далее

Как я строил API для выгрузки и обработки FHIR-данных на Go

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

FHIR (Fast Healthcare Interoperability Resources) - это стандарт обмена медицинскими данными, разработанный HL7. Сегодня он является основой для взаимодействия между EHR-системами, мобильными приложениями и медицинскими сервисами. Последние актуальные версии стандарта - R4 (2019) и R5 (2023).

Если очень коротко: FHIR описывает ресурсы (Patient, Observation, Encounter, MedicationRequest и т. д.), которые доступны через REST API в JSON или XML. Поверх этого можно строить и пациентские приложения, и интеграции между медицинскими организациями.

На этой базе появились так называемые patient-facing API - интерфейсы, через которые сам пациент или доверенные приложения могут получить доступ к медицинским данным: диагнозам, назначениям, результатам лабораторных анализов, изображениям, выпискам. Для США эту модель дополнительно закрепили регуляторы (ONC Cures Act), а для разработчиков удобные инструменты предлагает инициатива SMART on FHIR (OAuth2, scopes вида patient/*.read, PKCE и рефреш-токены).

Однако реальность заметно сложнее, чем стандарты на бумаге. Даже если два провайдера «поддерживают FHIR R4», API у них могут радикально отличаться:

Читать далее

Состояние HTTP-клиентов в Spring

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

В новом переводе от команды Spring АйО команда Spring делает важное объявление — RestTemplate уходит в прошлое. С выходом Spring Framework 7.0 разработчики официально заявляют о плане поэтапного прекращения поддержки одного из самых популярных HTTP-клиентов в экосистеме. Его место занимает RestClient, современный fluent-клиент с расширенными возможностями: API-версионирование, гибкая конфигурация конвертеров, группы HTTP-интерфейсов и новый тестовый клиент RestTestClient.

Кроме того, в Spring Boot 4.0 появятся отдельные стартеры для каждого типа клиента, а RestClient теперь можно удобно переиспользовать с уже существующей инфраструктурой RestTemplate.

Читать далее

Ускоряем CLI-утилиты с помощью io_uring

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

Привет, Хабр! Уже давненько вокруг ходит тема про io_uring — новую высокопроизводительную модель асинхронного I/O в Linux. В теории это обещает минимальные системные вызовы и очереди отправки/завершения, но как это в деле работает с привычными утилитами? Я решил разобраться на примере типичной задачи — копирования файлов (и немного упомянем хеширование) – переписав её под liburing и сравнив с традиционной синхронной версией.

Узнать все детали эксперимента

Наследие цифрового детства: как код, написанный студентом 5 лет назад, живёт в инфраструктуре сегодня

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

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

Читать далее

DevSecOps за 20 миллионов? Я сделал свой сканер и выложил бесплатно

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

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

Тимлид: «У нас релиз в пятницу, отстань со своим сканированием».
Менеджер: «В бюджете только Jira и пицца, какие ещё 15 миллионов за софт?»
Разработчик: «Код сгенерил AI, билд прошёл, значит, всё норм».

Читать далее

Грустная история о том как я Telegram Miniapp интегрировал

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

История о создании Telegram Miniapp с нуля: боль, костыли и необычные решения.

- Как превратить обычный сайт в миниапп малыми усилиями
- Как передавать данные в миниапп чтобы ничего не сломалось.
- Как реализовать версионирование в миниапп

Читать далее

Разбираемся с Feature Toggle на примере Unleash

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

Привет, хабр! Меня зовут Егор, я бэкенд разработчик в команде ЦФА в Альфа-Банке. 

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

В статье пробежимся по основным понятиям и сущностям в Unleash, разберем примеры кода на Java и также с помощью метрик проверим, работает ли это на самом деле.

В конце будет ссылка на демо-проект, в котором можно одной командой поднять все окружение и поэкспериментировать с настройками Unleash.

Читать далее

Оптимизация выравнивания и заполнения структур в Go. В 2025 г. всё ещё экономим на спичках

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

Здравствуйте!

В большинстве своём мы не думаем о том, как Go размещает поля структуры в памяти. И правильно делаем, пока наши структуры не используются в миллионах экземпляров, не передаются в каналах или не сериализуются каждую миллисекунду.

Также неправильное выравнивание может негативно сказаться на кеш-памяти процессора и скорости доступа к данным. На 32-битных платформах некорректное выравнивание 64-битных атомарных переменных (например, int64 для sync/atomic) вообще способно привести к панике.

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

Читать далее

Больше, чем BI: 23 фичи Luxms BI, которыми мы гордимся. Часть 1: платформенные, архитектурные возможности

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

Мы давно работаем на рынке BI и, как любой зрелый продукт, регулярно сравниваем себя с другими системами, которых с каждым годом появляется всё больше и больше — каждая со своими сильными и слабыми сторонами. И мы решили задать себе простой, но важный вопрос: а чем мы в Luxms BI действительно гордимся? Что нравится не только нам, как разработчикам, но и экспертам, которые делают на нашей платформе десятки проектов? Какие особенности мы сами считаем важными и удобными?

Так появилась эта серия: 23 фичи Luxms BI, которыми мы гордимся. Это не список «всё, что у нас есть», и не подборка базовых возможностей, которые сегодня есть почти в каждом BI-инструменте. Мы собрали то, что нас самих вдохновляет, и то, что мы чаще всего видим в успешных проектах наших клиентов.

Для удобства мы разделили эти фичи на четыре тематических блока. Начнём с первого блока — архитектура и платформенность, с того, на чём держится всё остальное. В этой статье мы расскажем, как устроена платформа Luxms BI, почему мы сделали ставку на датацентричную модель, как устроена быстрая кастомизация интерфейсов, что такое BI-Magic-Resources, и зачем внутри BI-платформы observable-сервисы. 

Читать далее

Как мы запретили писать код с багами в локализации или «Без права на bug»

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

Привет, Хабр! Я работаю фронтенд-разработчиком в ЛАНИТ. В этой статье я поделюсь опытом изменения подхода к интернационализации и опытом внедрения автоматизированной проверки переводов, что позволяет снизить риски появления багов и ускорить релизы приложения.

Читать далее

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

Как появилась программа багбаунти? История развития

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

Привет, Хабр! Я — Ксюша, младший специалист по ИБ в Selectel. 22 сентября 2012 года в России появилась первая программа багбаунти. Сегодня в индустрии уже работают несколько отечественных платформ, которые объединяют тысячи исследователей и десятки компаний. С каждым годом интерес к багбаунти увеличивается: все больше людей принимают в этом участие, а бизнес активнее разрабатывает собственные программы. Если впервые слышите об этих программах или хотите узнать, как они появились, вы обратились по адресу. В статье поделюсь историей возникновения и расскажу, как уже сегодня можно зарабатывать (и учиться) на чужих ошибках.

Читать далее

Что нового в PostgreSQL 18? Взгляд разработчика

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

Команда Go for Devs подготовила перевод обзора PostgreSQL 18. Новый релиз не ограничился громкой подсистемой асинхронного ввода-вывода — он принёс ряд функций, заметных именно в повседневной разработке. Нативная поддержка UUID v7, виртуальные генерируемые столбцы, расширенные возможности RETURNING и новые средства диагностики делают жизнь разработчиков проще и продуктивнее.

Читать далее

DX в процедурных макросах на Rust

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

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

Сегодня поговорим про процедурные макросы как про инструмент разработчика, который заботится о DX.

Процедурные макросы внедряют в исходники произвольный Rust-код на этапе компиляции. Это часть языка: атрибутные, derive и функциональные макросы работают через proc_macro и получают токены оригинального кода на вход. Формально это расширение языка строго до границ токенов, а не грамматики, что и позволяет Rust менять синтаксис без глобальных поломок макросов.

Процедурные макросы не гигиеничны в полном смысле: их результат ведет себя так, как будто вы написали этот код прямо в месте вызова. Это значит, он влияет на внешние use, сам зависит от окружения и легко цепляет конфликты имён, если не думать заранее. Для этого нам пригодятся Span::call_site и его друзья.

Читать далее

Как я, не разработчик, читаю туториал, который ты, разработчик, написал для меня

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

«Привет! Я разработчик. Для начала расскажу о своём важном для этой статьи опыте: я пишу код на Hoobijag, иногда на jabbernocks и, разумеется, на ABCDE++++ (но никогда — на ABCDE+/^+; вы что, шутите?); мне нравится работать с Shoobababoo и иногда с клептомитронами. Я устроился на работу в Компанию1 и занимаюсь там кодом для Shoobaboo, поэтому перешёл к использованию Snarfus. Давайте разбираться!

Читать далее

От консоли к 3D: Как написать игру «Сапер» на Python с нуля версия 3D (часть третья)

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

Создайте 3D-версию легендарного «Сапёра» на Python с использованием OpenGL. В этом руководстве вы шаг за шагом реализуете полностью трехмерную игру: от создания меню со слайдерами до 3D-визуализации игрового поля

Вы освоите работу с камерой в трехмерном пространстве, настройку динамического освещения, создание объемных мин с шипами и 3D-флагов, а также реализуете классическую игровую механику в трехмерной среде

Читать далее

Shadcn для Vue: норм или стрём?

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

Опыт использования shadcn-vue в продакшн проекте: что работает хорошо, а с чем придется помучиться. Честный обзор популярной UI библиотеки от практикующего разработчика.

Стек: Vue/Nuxt 3, Tailwindcss 3, Typescript, Telegram WebApp.

Читать далее

SolidJS для React-разработчиков: как реактивная библиотека устроена под капотом

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

Команда JavaScript for Devs подготовила перевод статьи о SolidJS — реактивной UI-библиотеке, которая выглядит знакомо для React-разработчиков, но работает совсем иначе. Автор разбирает ключевые отличия: почему в Solid нет виртуального DOM, как устроены сигналы, эффекты и прокси-хранилища, а также какие привычки из React ломают реактивность. Если вы давно хотели понять, как SolidJS работает под капотом, эта статья — отличный старт.

Читать далее

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