Pull to refresh
4
0
Send message

Введение в атомики. C++

Level of difficultyMedium
Reading time13 min
Reach and readers12K

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

Читать далее

Coroutines в C++20

Level of difficultyHard
Reading time11 min
Reach and readers10K

В С++ 20 появились coroutines (далее буду называть их корутинами, по‑русски). Если кратко — они позволяют писать асинхронный код также как мы пишем синхронный. При этом асинхронный код это не обязательно должен работать с несколькими потоками. Асинхронным может быть код исполняемый в одном потоке.

Под капотом компилятора корутины — это просто синтактический сахар (syntax sugar). Т.е. корутины не создадут дополнительных потоков. Компилятор заменит корутины вызовом нескольких функций и не более того. Но давайте посмотрим как корутины выглядят в коде.

В этой статье я буду делать простейший таймер на основе корутин. При этом напишу классы, для Awaitable и Promise, которые необходимы для работы корутин.

Читать далее

Путеводитель по матанализу, который скрывали от вас в вузе

Level of difficultyEasy
Reading time46 min
Reach and readers43K

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

Идея непрерывности.

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

Также вы сегодня, возможно, впервые узнаете о том, что победа формализации анализа по Коши вместо альтернативной по Гейне является самой главной причиной того, что понятия и идеи математического анализа остаются непонятными для основной массы студентов. От наглядного и понятного языка, предложенного Гейне, для которого совершенно не нужно использовать эпсилоны и дельты, в учебнике осталось только определение предела по Гейне — и то только потому. что некоторые теоремы без него никак не доказать. Но что еще интереснее — определение предела по Коши вообще не нужно для доказательств!

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

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

Читать далее

.NET 10 File-Based App: скрипты на C#?

Level of difficultyEasy
Reading time6 min
Reach and readers12K

Вышедший .NET 10 заинтриговал возможностью запускать одиночные .cs файлы подобно скриптам - без проектов и решений. Я решил разобраться как это использовать, что внутри, и действительно ли C# теперь можно отнести к скриптовым языкам.

Читать далее

Форматируем строку по-человечески: C++ и его <format>

Level of difficultyEasy
Reading time8 min
Reach and readers9.5K

Когда-то давным-давно (то есть до C++20) мы форматировали вывод либо по-старинке через printf, либо используя громоздкие стримы ввода-вывода из <iostream>. Оба подхода, мягко говоря, не очень. printf работал шустро и лаконично, но требовал строгого соответствия типов, забудешь правильный %d или %s в формате, и получишь неопределённое поведение вплоть до падения программы. Компиляторы иногда предупреждают о несоответствиях, но полностью проблему не решают (особенно если форматируемая строка не литерал). Кроме того, printf не умеет выводить пользовательские классы, только примитивы.

Сейчас ситуация изменилась. В C++20 завезли библиотеку <format>, современный подход к форматированию строк, сочетающий лаконичность printf с безопасностью iostream. Инструмент называется std::format и объявлен в заголовке <format>. По сути, это адаптация популярной библиотеки fmt.

Читать далее

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

Reading time7 min
Reach and readers27K

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

Вот, казалось бы, что может быть проще: создать базу треков и исполнителей. Пишем имя артиста/группы, название альбома, список треков и даем возможность по ним искать. Но потом натыкаемся на исполнителя Prince, который изменил своё имя на знак, который не существует и начинаем печалиться, потому что непонятно, как его искать после переименования. Фанаты вроде как нашли выход и предложили использовать 4 спец.символа юникода Ƭ̵̬̊, что тоже похоже на костыль, а задавать старое имя как псевдоним, вроде как концептуально неправильно. Ну или попадаются металлюги Brouillard, у которых каждый альбом называется так же - Brouillard. А каждый трек внутри альбома имеет такое же название.

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

Читать далее

Пишем свою мобильную ОС с нуля на Rust

Level of difficultyMedium
Reading time22 min
Reach and readers34K

Почему бы не запустить своё ядро прямо на смартфоне? Без Android, без Linux — только Rust, загрузчик и паяльник. В этой статье расскажу о результатах своего эксперимента, как оживить голое ARM-железо, увидеть первые символы в UART и даже вывести что-нибудь на экран.

Читать далее

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

Level of difficultyEasy
Reading time10 min
Reach and readers26K

Менеджмент без коучинга и теории — показываю рабочие фреймворки, которые закрывают 70% задач руководителя.

Читать далее

Мои личные скрипты для повседневной работы

Level of difficultyEasy
Reading time9 min
Reach and readers52K

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

Читать далее

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

Level of difficultyEasy
Reading time7 min
Reach and readers32K

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

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

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

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

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

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

Читать далее

Сам себе breakpoint

Level of difficultyEasy
Reading time15 min
Reach and readers17K

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

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

Читать далее

Заглядываем под капот FrozenDictionary: насколько он быстрее Dictionary и почему

Level of difficultyMedium
Reading time9 min
Reach and readers10K

С релизом .NET 8 в арсенале C# разработчиков появилась новая коллекция – FrozenDictionary. Особенность этого словаря в том, что он неизменяемый, но при этом обеспечивает более быстрое чтение по сравнению с обычным Dictionary. Я неспроста разбил результаты на обложке по типам – используемые во FrozenDictionary алгоритмы сильно зависят от типа ключа, размера словаря или даже, например, количества строковых ключей одинаковой длины. В этой статье подробно разберем, насколько FrozenDictionary быстрее и почему.

Заглянуть под капот

Заморозили и полетело: всё, что нужно знать про Frozen-коллекции в C#

Level of difficultyEasy
Reading time9 min
Reach and readers8.4K

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

В проде полно таблиц и маппингов, которые создаются один раз и потом живут годами на чистом чтении. Раньше выбирали между ReadOnlyDictionary и Immutable*. Первый не ускоряет доступ и просто прикрывает исходную коллекцию, второй дает чистые апдейты, но платит временем построения и lookup. В .NET 8 появился третий путь для такого профиля: System.Collections.Frozen.

Задача у Frozen простая и приземленная. Заплатить за построение структуры один раз на старте, а дальше получать быстрый TryGetValue/Contains и предсказуемое перечисление без блокировок. Контейнер неизменяемый, потокобезопасен для чтения и специально заточен под lookup. Стоимость сборки выше обычной, это ожидаемо, поэтому применять его есть смысл там, где чтений на порядки больше, чем конструирований.

С .NET 9 стало еще удобнее: появился alternate lookup. Теперь словарь со строковыми ключами может принимать ReadOnlySpan<char> прямо на lookup, без лишних аллокаций. Это хорошо заходит в веб-пути, парсеры заголовков и любые сценарии, где строка у вас уже как span.

Узнать, как ускорить C# коллекции

Про асинхронное программирование микроконтроллеров и программирование аппаратных функций периферии процессора

Level of difficultyHard
Reading time15 min
Reach and readers11K

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

Читать далее

Ассемблер: рассматриваем каждый байт «Hello, World!». Как на самом деле работают программы на уровне процессора и ОС

Level of difficultyMedium
Reading time25 min
Reach and readers30K

Что на самом деле происходит, когда вы запускаете программу? Мы привыкли воспринимать это как данность, но за кадром скрывается целая вселенная — от регистров процессора и системных вызовов Linux до формата ELF и модели памяти процесса. Присоединяйтесь к погружению, где мы прольём свет на каждый байт программы «Hello, World!» и поймём, каким образом ОС её выполняет.

Читать далее

Умный вайб-кодинг или семь раз отмерь, один раз сгенерь

Level of difficultyEasy
Reading time10 min
Reach and readers27K

Помните старую поговорку про семь раз отмерь? В мире AI-кодинга она обрела новый смысл.

Сегодня расскажу о практике AI-Driven разработки (AIDD), которую мы у себя в команде ежедневно применяем для разработки ИИ-решений. Она успешно зарекомендовала себя в различных проектах и задачах — будь то стартапы или легаси, приложения на Python, Java или даже 1C.

Разбирать методику будем в AI редакторе Cursor, но повторить ее вы сможете в любом кодовом ассистенте. Поехали...

Читать далее

Jailbreak ChatGPT-5, системный промпт, и скрытый контекст

Reading time7 min
Reach and readers20K

Сегодня рассмотрим недавно вышедшую модель ChatGTP-5.

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

Читать далее

Prompt engineering от А до Я: как получать максимум от ИИ с примерами и советами

Level of difficultyEasy
Reading time16 min
Reach and readers18K

Хотите получать максимум от ChatGPT и других ИИ? Узнайте, как правильно формулировать запросы, избегать типичных ошибок и применять продвинутые техники вроде Few Shot Prompting и Chain of Thought. Практические примеры, сравнение ответов и секреты эффективного общения с нейросетями — в этом руководстве!

Читать далее

Ссылка на git в резюме соискателя

Level of difficultyEasy
Reading time10 min
Reach and readers19K

Как анализировать GitHub соискателя, указанный в резюме? Какие pet-проекты встречаются чаще всего и о чём они могут рассказать?

Я и так знаю, но интересно
1
23 ...

Information

Rating
Does not participate
Registered
Activity