Обновить
1024K+

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

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

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

Деконструкция GO: CPU, RAM и что там происходит. Оптимизации на CPU. Часть 1.4

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

Первые великие оптимизаторы появились уже на таком низком уровне, как железо. По факту, задача выжимки ресурсов в программировании есть на любом уровне. В этой статье мы разберем оптимизации на уровне CPU такие как NUMA, prefetch, TLB и alignment.

Статья получится немного неоднородной и больше про “высокие материи”, что в принципе намекает на то, что разбор “железной” составляющей скоро подойдет к концу!

Вводная

Как мы рассматривали некогда ранее обращение на RAM – это достаточно дорого. CPU пытается это “скрыть”, чтобы работа казалась куда более быстрой.

Одним из таких механизмов, естественно, является иерархия кэшей!

Но вот не возникало ли у вас вообще вопроса – “А почему память – это в принципе проблема? Почему дорого?”. Все очень просто – доступ к памяти медленный

Тактовая частота например моего ноута – 2,70 ГГц, то есть 2,7 миллиарда циклов/операций в секунду

Доступ к ОЗУ имеет задержку аж в 150–350 циклов! То есть за это время мы могли бы выполнить 200 операций. 

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

Prefetch

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

На всякий случай зафиксируем:

Читать далее

Вайб-кодинг как серфинг между хайпом и нейрослопом

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

В этой статье я расскажу о том, как не потерять голову от LLM-инструментов и при этом сократить цикл разработки в 8–12 раз без потери качества. Поделюсь реальными цифрами и подходом, апробированным моей командой в targetai.

Читать далее

Claude Code теперь требует паспорт, а Codex умеет работать с (почти) любыми приложениями

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

Десятый выпуск еженедельных IT-новостей от OpenIDE! Qwen Code перестал быть бесплатным, Claude Code под запретом для детей и релиз Opus 4.7 с аппетитом на 30% больше предыдущей версии модели.

Читать далее

Топ техник атак на веб-приложения: как разработчику защититься от нетривиальных уязвимостей

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

В ежегодный рейтинг Top 10 web hacking techniques попадают материалы об инновациях в области поиска и эксплуатации уязвимостей. Некоторые из них показывают целые категории проблем и новые методы атак. В этой статье хочу рассказать о самых интересных исследованиях из топа прошедшего года, а заодно поделиться собственными идеями о том, как защититься от описанных уязвимостей.

Читать далее

REST умер? Почему Java-разработчики уходят в GraphQL

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

Один экран в приложении, а на бэкенде несколько REST-вызовов, куча эндпоинтов и ответы, где 90% полей не используются. Теряем в скорости, усложняется фронтенд и приходится версионировать контракт, когда меняется формат данных.

GraphQL предлагает другой подход: один API-эндпоинт и запрос, в котором клиент сам указывает, какие поля ему нужны. Это снижает overfetching, уменьшает количество сетевых затрат и упрощает договоренности между фронтом и бэком за счет схемы как явного контракта и живой документации.

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

Читать далее

Kotlin Корутины + БД connection pool. Как не получить каскадное падение

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

Почему Dispatchers.IO + Hikari + чуть-чуть лагов БД = каскадная деградация всего сервиса, и как bulkhead-паттерн в одну строку это лечит.

Читать далее

Как я научил торгового бота рисовать свечные графики и перестал спамить текстом

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

Привет, Хабр! Меня зовут Николай Пискунов, я руководитель направления Big Data и эксперт курса Cloud DevSecOps по безопасной разработке от Академии вАЙТИ Beeline Cloud. Сегодня расскажу о разработке системы, которая строит свечные графики для трейдинг-бота на Python. Это полноценный инструмент анализа, который помогает принимать торговые решения в реальном времени. Важная часть этой системы — быстрая связь с пользователем через бота в Телеграме. 

Читать далее

Как я экономлю 80% контекста нейросетей при работе с логами

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

Разаработанная фоновая утилита позволяет производить вставку сжатых логов с абсолютной прозрачностью для восприятия AI агентами. В статье описал свой путь к оптимизации сжатия до 80%.

Читать далее

Deckhouse Prom++: как мы посадили Prometheus на RAM-диету и сэкономили 89 % памяти в хранилище данных

Уровень сложностиСложный
Время на прочтение16 мин
Охват и читатели7.7K

Утро: 3,8 ТБ памяти на кластеры Prometheus. Вечер: 0,6 ТБ. Между ними — переход на Deckhouse Prom++.

Мы потратили месяцы на внимательный анализ данных и разработку: писали свои структуры данных на С++, экономя каждый байт и охотясь за каждой наносекундой производительности. Разнообразные энкодеры для специфических данных, вектор с дырками и упакованные структуры — в статье делимся деталями реализации Open Source-проекта, который вы можете уже сейчас использовать для реальной экономии на мониторинге.

Читать далее

Почему пользователи врут на интервью и что мы увидели, когда начали за ними наблюдать

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

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

Мы — Кирилл Улитин, руководитель UX-направления и исследований в департаменте дизайна, и Стася Кабанова, исследователь пользовательского взаимодействия в МойОфис. В компании есть целая экосистема офисных решений на разных платформах, поэтому пользовательские сценарии здесь исследуют регулярно и обычно опираются на привычные методы: глубинные интервью и usability-тестирования.

Но в какой-то момент стало ясно: глубинные интервью дают красивую, связную и при этом сильно отредактированную версию реальности. Тогда мы попробовали другой подход — начали смотреть не на то, что пользователи говорят, а на то, что они действительно делают. И увидели вещи, которые невозможно было бы получить ни из одного интервью. Подробности под катом.

Читать далее

The Xcode build system has crashed, или Почему рекурсия — это плохо. Используем swift‑build со своими патчами

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

Представьте ситуацию: вы работаете в огромном проекте, где количество модулей давно перевалило за тысячу. Вы решаете обновиться до свежего Xcode 26.2, ожидая прироста производительности, но вместо заветного «Build Succeeded» получаете молчаливое падение: SWBBuildService quit unexpectedly.

Всем привет, меня зовут Алексей Севко, я ведущий разработчик программного обеспечения из команды Delivery & Performance Яндекс Go. В этой статье я расскажу почти детективную историю о том, как:

— Искать иголку в стоге сена: когда падает закрытый бинарник Xcode.

— Стать контрибьютором swift-build: почему иногда проще переписать системный поиск макросов в swift-build, чем ждать фикса от Apple.

— Использовать свою версию билд-системы: как мы внедрили инфраструктуру прозрачной подмены компонентов Xcode через XCBBUILDSERVICE_PATH, чтобы не ждать релиза Xcode со Swift 6.3 и работать стабильно уже сегодня.

Если ваш проект тоже перерос стандартные инструменты Apple или вам просто интересно, как превратить рекурсию в итерацию и не сойти с ума от 45-минутных дебаг-сессий, — добро пожаловать под кат!

Читать далее

Как я парсил банковские платёжки всех российских банков на Python: история боли, костылей и XML-матрёшек

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

Привет, Хабр! (И тебе, случайный бухгалтер, который думает, что «выгрузить из банка» - это нажать одну кнопку. И тебе, 1С-разработчик, который слышит «парсинг PDF» и сразу уходит на больничный. И тебе, Python-разработчик, который уверен, что pip install magic_solution решит любую проблему.)

Сегодня расскажу, как мне поставили задачу, от которой у SAP-а ушло, видимо, несколько команд и много времени, а мне дали на это… ну, скажем так, поменьше. Задача звучала элегантно, но всегда есть но, и не одно))

(Спойлер для тех, кому лень читать: я узнал, что Сбербанк формирует WORD-документы с такой XML-вложенностью, что в ней можно заблудиться, ВТБ зачем-то маскирует WORD под RTF, а файл на 10 000 платёжек из 37 мегабайт разворачивается в 1 гигабайт XML. И да, всё по итогу заработало.)

Читать далее

Кризис инструментария API: почему разработчики бегут от Postman и его клонов?

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

Всю свою карьеру разработчика я пользовался Postman. Помню его ещё простым расширением Chrome, слегка облегчавшим тестирование API. Жизнь в времена была гораздо проще. Сегодня я присоединяюсь к растущей толпе разработчиков, отказывающихся от этих инструментов, потому что они продались.

Великое предательство: как наши любимые инструменты обернулись против нас

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

Postman, когда-то бывший любимцем всех разработчиков, стал наглядным примером такой трансформации. Переломным для многих моментом стало удаление Scratchpad (офлайн-режим). После этого — снижение производительности и привязка к облачному сервису. Внезапно мы оказались вынуждены синхронизировать свою работу с облаком Postman для доступа к базовому функционалу (привет, Microsoft?). Во-первых, это вставляет палки в колёса разработчиков, работающих над конфиденциальными проектами в сфере банкинга и здравоохранения, а также в государственном секторе. В этом и есть смысл — заставить их платить за инструмент, максимизировать прибыль руководства, поэтому наносимый отрасли сопутствующий ущерб не учитывается.

Читать далее

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

Perl — зря забытый язык программирования?

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

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

Читать далее

Labeled break and continue в C# 15 — разбор плохого примера и поиск реального кейса

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

Всем привет. В последнее время в одной профессиональной соцсети я все чаще стал натыкаться на посты, связанные с dotnet C# тематикой. К сожалению, эти посты в большинстве своем не содержат полезной информации. Скорее всего они создаются для охвата аудитории с целью привлечения трафика на сторонние платформы по продаже курсов для разработчиков. По-моему, этот способ называется "воронка продаж" (поправьте, если я ошибаюсь). Как правило, эти посты затрагивают какую-то не очень сложную тему и содержат примеры кода. Недавно мне попался очередной пост, в котором автор пытался показать пример использования новой фичи labeled break and continue. Это новая фича, которую добавили в C# 15 (dotnet 11). На момент написания она была принята в Working Set, но финального релиза ещё не было. Ниже код, похожий на оригинал из поста. Он разделен на 2 секции: "как делали раньше" и "как сделать используя новый подход":

Стандартный способ:

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

Выделение регистров процессора при помощи генетического алгоритма

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

Эксперимент, который многое объясняет

Оригинал этого поста также вошёл в число документов по проектированию платформы .NET: lsra-heuristic-tuning.

Читать далее

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

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

Привет! Меня зовут Максим Иванков, я развиваю школы программирования и робототехники для детей уже 9 лет. Сегодня расскажу про то, над чем работал последние 9 месяцев с перерывами — про свой собственный скрейч. Назвал я его Кубоша. Это визуальный редактор блочного программирования в стиле майнкрафта, в который я встроил задачи с автоматической проверкой и интегрировал в свою онлайн школу.

Читать далее

Эксперименты с распараллеливанием Java-автотестов

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

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

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

Будем анализировать выводы полученные в ходе эксперимента, а не голую теорию из документации. После прочтения сможете повторить все самостоятельно как на готовом примере из статьи, так и на своих проектах.

Читать далее

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

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

Дисклеймер: не претендую ни на что, просто делюсь результатами размышлений с коллегами и приглашаю к диалогу. Примеры сгенерированы на 100% в ChatGPT в режиме Plus — Thinking.

Мне хочется помочь новичкам структурированно думать и для этого я предлагаю Vibe++ — язык намерений, язык промпт программирования, слабо структурированное описание задач в виде промпта на человеческом языке, обеспечивающих более хороший результат.

Vibe++, так Vibe++, ну, давай посмотрим...

Объяснение лямбда исчисления через Python

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

Реализация ключевых конструкций лямбда‑исчисления на Python и объяснение их работы. Подойдёт даже тем, кто не очень знаком с Python.

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

Читать далее