Обновить
1024K+

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

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

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

Сторис рендерились 1080×1920, а публиковались 1080×1350. Я два раза чинил не ту причину

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

У нас есть конвейер, который раз в день собирает кадр для Stories в Instagram (фото + выжженная поверх подпись) и публикует его через Graph API на два бренд-аккаунта. 2 сентября в моей ленте всплыла своя же сторис, и подпись «посчитал сколько стоит перевезти сестру в москву» была обрезана с обеих сторон — первые и последние буквы срезаны краем экрана. Я это почти сразу починил. 5 сентября мне снова написали, что сторис «кривые». Я почти сразу починил снова. Обе правки были правильными и обе не имели отношения к тому, что жаловались на самом деле.

Читать далее

Новости

Сборщик мусора в Dart. Часть 3: старое поколение

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

В первой части мы разобрали, как Dart отличает число от объекта, а во второй – как убирается молодое поколение. Там все держалось на одном приеме: живых переносим в соседнее полупространство, а всю старую половину выбрасываем целиком.

Почему в старом поколении переезд не подходит

В молодом поколении все было просто – отбрасываем мертвые объекты и забываем про них, в старом поколении все по-другому. Для старого поколения такая операция слишком дорогая. Количество живых объектов больше, чем неживых, а это значит, что нам бы пришлось копировать почти всю память с места на место. Также необходимо было бы держать вторую половину пространства запасам такого же размера как и занятую часть полупространства. Для решения этой проблемы существует mark-sweep (Пометка-очистка).

Читать далее

Задача взяла lock() и остановила весь рантайм: пять ошибок с блокировками в async Rust

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

В async Rust одна неудачно взятая блокировка может остановить весь рантайм — вместе с таймерами и задачами, которые должны были её отпустить. Разберём пять типичных ловушек с Mutex и RwLock и посмотрим, почему привычки из синхронного кода здесь дают сбой.

Читать разбор

Java Digest #39: 91 CVE в Spring, Value Objects в Java и AI-native разработка

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

У Spring за один день вышел 91 CVE — больше, чем за весь прошлый год, — и нашел их в основном AI-сканер. Oracle впервые за двадцать лет выпустила патч безопасности вне квартального цикла. А еще уже совсем скоро (15 сентября) выходит JDK 27. Обо всем этом и не только рассказываем в свежем выпуске 🙂

Читать далее

Один ИИ уже не справляется. Как работают ИИ‑оркестраторы

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

Представьте себе систему, которая позволят собрать разных ИИ‑агентов в команду и дать им задачу, над которой они будут работать вместе. Каждый агент будет делать то, в чем лучше всего разбирается. Это называется ИИ‑оркестрацией.

Сегодня мы поговорим о том, что такое ИИ‑оркестратор. И чем он реально полезен.

Ответим на главные вопросы:

Чем оркестратор отличается от обычного агента? Как устроены мультиагентные системы? Где оркестраторы работают хорошо — и где не очень?

Читать далее

Интерпретатор Python в 1024 байтах

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

Чтобы всё ещё ощущать себя человеком, по выходным я пишу код вручную.

Недавно я поставил перед собой задачу создания интерпретатора в 512 1024 байта старого доброго кода на C. И да, без хитростей с макросами и библиотеками.

def buzz():
for n in range(101):
if n % 15 == 0:
print("FizzBuzz")
else:
if n % 3 == 0:
print("Fizz")
else:
if n % 5 == 0:
print("Buzz")
else:
print(n)
buzz()

Наверно, мне не удастся уместить весь язык Python в интерпретатор такого размера. Так что же можно уместить в этот код?

Эта программа fizzbuzz явно выглядит, как Python. В ней есть def, двоеточия, отступы и отсутствуют скобки в операторах if. Мне кажется, это вполне походит на Python! Разумеется, наряду с использованием только подмножества синтаксиса придётся добавить и другие ограничения.

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

Читать далее

Как ADR помог мне не утонуть в первой крупной архитектурной задаче

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

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

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

Читать далее

Что такое n8n и как с ним работать

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

Как использовать ИИ в бизнесе?

Представьте гипотетический запрос клиента: «Где мой заказ и когда он будет доставлен?». Чтобы ответить на него, одной ИИ-модели мало. Сначала нужно найти клиента в базе, получить информацию о заказе, при необходимости обратиться к другому сервису, и только затем сгенерировать и отправить ответ. Приходится задействовать множество систем, которые как-то должны работать в унисон, и всей системе желательно быть гибкой и легко масштабируемой.

Обычный чат-бот тут не справится. Дело для серьезного дяди n8n.

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

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

Читать далее

Как проверить компанию до собеседования: мой чек‑лист из 7 шагов

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

«Сначала проверь компанию, а потом уже трать на неё время». Звучит просто, но многие делают наоборот: откликаются, ходят на собеседования, готовятся к вопросам — и только потом, уже на месте, начинают понимать, куда попали. Иногда это заканчивается разрушенными ожиданиями, а иногда испорченной трудовой и незапланированной сменой работы. Поэтому небольшая разведка до похода на интервью — не паранойя, а способ сэкономить время и нервы.

В этой статье я собрал свой чек‑лист проверки компании перед собеседованием. Он состоит из двух блоков: базовая проверка через открытые интернет‑ресурсы и дополнительная — через реестры и базы.

Читать далее

Песочница для кодинга на образовательной платформе: как безопасно запустить Python и ничего не сломать

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

Проблема любого онлайн-движка исполнения кода в том, что он должен принять чужой код и выполнить его как есть — а этот код может оказаться вредоносным. Поэтому нужно спроектировать всё так, чтобы при запуске кода мы могли свести к минимуму негативные последствия, которые «враждебный» код может вызвать. Например, если кто-то попытается вызвать команду вроде rm -rf /, то это не удалит нам всю систему.

Читать далее

QML и CSS не нужны. Использование QStyle (QStyleFactory) для изменения дизайна Qt приложения с выбором для пользователя

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

В статье рассказывается о функционале, о котором забыли даже разработчики Qt. Дело в том, что этот функционал даёт уникальные возможности стилизации. В отличие от QML и CSS, использование QStyleFactory позволяет предоставить пользователю широкий выбор QStyle-дизайнов виджетов без затрат времени на настройку QML и CSS. Я много раз видел, как программисты тратят много времени на настройку дизайна через QML и CSS, хотя в Qt 5 и Qt 6 есть база уже готовых дизайнов, которую никто не предоставляет пользователю в качестве выбора. Считаю необходимым рассказать об этом очень удобном и даже ленивом способе настройки дизайна.

Читать далее

Уборщик резервов кадров жил по таймеру в 15 минут. Генерация укладывалась в 16

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

Баг всплыл не из мониторинга, а из жалобы: клиент написал, что AI-карточка сгенерировалась и легла в пикер, а счётчик кадров в пакете при этом не уменьшился — как будто генерация не потрачена. Разбор лога занял вечер 5 сентября, потому что первая гипотеза (двойной клик на кнопке) не подтвердилась: id генерации был один.

Читать далее

Программирование — это искусство

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

Программистам нравится писать код, проектировать, продумывать логику, исправлять баги и понимать всю систему целиком. Им нравится сам процесс. И они никогда не отдадут этот процесс ИИ агентам.

Для них программирование это искусство. И никакие аргументы о том, что ИИ помогает в написании кода, не применимы для людей искусства. Им не нужно, чтобы ИИ в чём-то им помогал.

Читать далее

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

Свои книжные метаданные: Pivot-архитектура, Spring Boot и бесплатный API для Obsidian

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

Как я собрал бесплатный сервис метаданных книг на Java и Spring Boot — с EAV/Pivot-схемой БД вместо ALTER TABLE на каждое новое поле, агрегацией нескольких открытых источников. Плюс обновлённый плагин для Obsidian.

Читать далее

Четыре зелёных релиза поверх неверной сущности

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

Постмортем Electron-редактора меню: SceneTree, PDFKit и тесты, которые доказали не то

Я вернул «Объём» в поле, для которого он был задуман.

Текст наполз на цену.

Четыре релиза подряд проходили автоматические тесты. Зелёный статус только подтверждал обходной путь, который модель сама придумала, реализовала и затем закрепила проверками.

Когда визуально все выглядело хорошо, пошла проверка деталей, на этапе которой результаты тестов разошлись с реальностью. Проверил руками и увидел, что объём лежит не там, где должен. Не в Position.volume, а внутри PriceNote. Четыре релиза. Четыре зелёных гейта. Четыре раза процесс сказал «всё правильно» тому, что правильным не было. После этого пришлось разбираться не только с багом, но и с контрактом, который его пропустил.

Читать далее

context.Context в Go. Суть и частые ошибки

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

Привет, Хабр! Сегодня поговорим о контексте: о его тонкостях и ошибках, которые возникают при его использовании.

Читать далее

Ручного курьера приняли за чужого: почему ID оказался плохим признаком происхождения записи

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

04.09 в 09:06:45 UTC ночной опрос Fleet нашёл одного «нового» курьера. Дальше автоматика отработала без единой ошибки: new_ids: 1, dispatch_alerted: 1, sms_sent: 1. В Google Sheet появилась строка 1248, в служебную группу пришёл алерт, человеку ушла SMS с просьбой подтвердить налоговый статус.

Читать далее

Rust: Макетирование форм для Iced 14

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

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

Некоторое время назад у меня образовалось немного (вернее много) свободного времени, и я между моментами серфинга на известном сайте HH решил посмотреть в сторону освоения Rust. Кроме всего прочего мне очень интересует тема библиотек графических интерфейсов.

В Rust есть несколько подобных библиотек, я решил остановиться на Iced — текущая версия Iced 0.14. Прежде всего понадобилось понять принципы построения библиотеки и архитектурную философию паттерна ELM, которая реализована в библиотеке.

В процессе изучения родился описываемый ниже PET‑проект Iced Forms Pack. Проект представляет собой конструктор форм из базовых элементов Iced.

Читать далее

Плагины в Picodata

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

В каждой уважающей себя СУБД должна быть возможность программировать на тьюринг-полном языке программирования. Вот и у нас в Picodata есть возможность написать плагин на Rust, а как это делать — расскажу под катом.

Читать далее

Мутационное тестирование: прекрасная концепция, которой вы редко будете пользоваться на практике

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

В новом переводе от команды Spring АйО на простом Java-примере показываем:

– как работает мутационное тестирование с Pitest;  
– почему 100% покрытия недостаточно;  
– откуда берутся выжившие мутанты;  
– почему не стоит прогонять MT по всему проекту;  
– и в каких случаях этот подход действительно окупается.

А ещё как поручить настройку и запуск Pitest AI-агенту с помощью готового skill.

Читать далее