Обновить

Разработка

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

Структуры данных на практике. Глава 1: Разрыв в производительности

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

Часть I: Основы

«В теории теория и практика одинаковы. На практике это не так». — авторство приписывается разными специалистам по computer science

Загадка

Два часа утра. Я смотрю на совершенно нелогичные данные профилирования.

В процессе работы над загрузчиком для SoC RISC-V у нас возникла проблема с производительностью. Загрузчик должен был искать конфигурации устройств в таблице: примерно пятьсот элементов, каждый с 32-битным ID устройства и указателем на данные конфигурации. Всё просто.

Мой коллега реализовал эту систему с помощью хэш-таблицы. «Поиск за O(1), — сказал он уверенно, — лучше уже некуда».

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

Я попробовал использовать очевидную оптимизацию: заменить хэш-таблицу двоичным поиском по отсортированному массиву. Двоичный поиск занимает O(log n), что теоретически хуже, чем O(1). Так написано в учебниках. Мой преподаватель алгоритмов был бы разочарован.

Но в результате загрузчик оказался на 40% быстрее.

Как O(log n) смогло победить O(1)? Что происходит?

Читать далее

Карьерный потолок в IT: почему я перестал стремиться в менеджмент и начал делать свой продукт

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

Каждый разработчик в начале пути видит перед собой ясную лестницу: Junior → Middle → Senior. Рост компетенций сопровождается ощутимым ростом зарплаты, и это даёт мощный заряд мотивации. Но что происходит, когда вы достигаете уровня Senior? Зарплата упирается в «стеклянный потолок», задачи становятся однотипными, а привычный драйв исчезает.

Читать далее

Нескучное программирование.История концептов

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

История концептов в C++ – один из самых показательных примеров того, как язык развивается не линейно, а через десятилетия экспериментов, откатов и переосмыслений. Первые идеи, которые мы сегодня называем концептами, появились ещё в конце 1990-х, когда стало очевидно, что шаблоны C++ имеют колоссальную выразительность, но практически не дают средств для описания намерений программиста. Шаблон можно было инстанцировать почти с любым типом, но ошибка проявлялась либо в виде километров сообщений компилятора, либо в виде неожиданного поведения в рантайме. Уже тогда Страуструп сформулировал проблему как «отсутствие контрактов для шаблонов», когда программист знает, что от типа требуется оператор + или ==, но язык этого не выражает.

Ранние предложения концептов были чрезвычайно амбициозными и стремились описывать не только синтаксис, но и семантику. Например, концепт EqualityComparable должен был означать не просто наличие operator==, но и выполнение математических свойств эквивалентности: рефлексивности, симметричности и транзитивности. Аналогично, концепты для упорядоченных типов предполагали строгую слабую упорядоченность, а для итераторов корректное поведение при многократном проходе. Это отражало академический взгляд на обобщённое программирование, сильно вдохновленный функциональными языками и работами Степанова.

Читать далее

Счастливые автобусные билетики. Магия чисел для советских школьников

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

В детстве каждое лето я проводил на даче. Из Ленинграда до дачи мы добирались на пригородном автобусе. Особой удачей я считал занять место напротив кассы и смотреть на то, как люди покупают себе билеты. Но не с целью контроля, а с целью наблюдения за самим процессом. И за билетами.

Очень меня интересовали эти самые билетики! Я их коллекционировал. На даче у меня был специальный дерматиновый красивый полупрозрачный конверт (от старых фломастеров), в котором я хранил все свои билеты. Номера автобусных билетов состояли из шести цифр, и я отдельно выделял те, у которых сумма первых трёх цифр была равна сумме трёх последних. Конечно, самыми ценными были бы те билеты, у которых все цифры одинаковые...

Читать далее

AI убила бизнес Tailwind CSS. Компания сократила 75% разработчиков

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

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

Читать далее

Нейро-дайджест: ключевые события мира AI за 1-ю неделю января 2026

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

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

Неделя выдалась насыщенной: китайцы выкатили MiniMax-M2.1 для кодинга и агентных задач, новая мультимодальная опенсорс LTX-2 и обновлённый Qwen-Image-2512. ИИ для документаций, озвучка текста в браузере и штрафы за нейро-видео.

Всё самое важное — в одном месте. Поехали!

Читать дайджест →

Как измерили Землю без GPS: дуга Струве длиной 2820 км

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

О том, что Земля имеет форму шара, знали задолго до Нового времени. Но одно дело общее представление, и совсем другое — точные измерения размеров и формы планеты.

Для этого нужны были не рассуждения, а масштабные геодезические работы: измерения углов, расстояний и сложные вычисления на тысячах километров. В XIX веке такую «линейку» создал астроном Василий Струве, построив величайшую геодезическую дугу своего времени — цепочку из 265 треугольников от Северного Ледовитого океана до Чёрного моря.

В этой статье разберёмся, как работала «Дуга Струве» и почему без неё современная геодезия выглядела бы иначе.

Читать далее

Взлом RDP в STM8/32 методом PowerGlitch

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

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

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

Читать далее

Как я установил таксофон у себя дома

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

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

Из книги Big Secrets и нескольких выпусков журнала 2600 я знал пару фактов о кредитных картах. Номера карт American Express всегда состояли из 15 цифр и начинались с тройки, а номера карт Visa состояли из 16 цифр и начинались с четвёрки. Первая пара цифр обозначала банк-эмитент, затем шёл номер счёта; последняя цифра вычислялась при помощи алгоритма Луна и использовалась как контрольная сумма всех предыдущих цифр.

Читать далее

Если ИИ не мыслит, то как он решает математические задачи?

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

Самый частый вопрос к тезису о том, что языковые модели не думают - чисто практический.

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

Самым частым возражением было не философское, а практическое:

«Если это правда, то как ИИ удается заниматься арифметикой?»

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

Но его там нет. Однако происходит кое-что весьма любопытное.

Читать далее

Logitech забыла продлить сертификат разработчика — и миллионы мышек на Mac превратились в кирпичи

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

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

Читать далее

JavaScript: практическое руководство по Blob, File API и оптимизации памяти

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

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

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

правильное создание Blob

разбивка больших файлов на части (chunks)

сжатие и конвертация изображений

реализация надежных превью файлов

экспорт данных в виде загружаемых файлов

управление памятью во избежание утечек Blob URL

Цель руководства — сделать работу с файлами быстрой, стабильной и готовой к продакшну.

Читать далее

GTA VI (опять), пародия на The Sims, Бэтмэн в LEGO и другие: самые ожидаемые игровые релизы в 2026 году

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

2025 вышел богатым на игровые релизы. Геймеры получили Clair Obscur: Expedition 33, Kingdom Come: Deliverance II, Split Fiction, Battlefield 6, Death Stranding 2, Borderlands 4, Hollow Knight: Silksong, переиздание Doom и другие новинки. А вот GTA VI, увы, не получили, хотя именно эта премьера от Rockstar должна была затмить собой вообще все. Что ж, давайте же посмотрим, что нам обещает игровая индустрия в 2026.

Читать далее

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

Топовые фишки в LaTeX часть 1/4

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

Меня зовут Виталий и я пишу уже который год самую большую книгу по математике для 411 классов, а так же автор поста (рекомендую почитать) о ней. Пишу я ее в LaTeX и считаю, что современный учебник не должен быть черно-белым, а так же должен быть удобен для использования и учеником и учителем. Здесь я собрал базовые фишки, которые я использую (что-то чаще, что-то реже). Надеюсь, вы найдете что-нибудь полезное для себя :-)

Постараюсь все подробно описать, но не гарантирую идеального кода. Компиляция в основном с помощью pdflatex, но есть места, где требуется lualatex. Для себя я сделал около 35 стилевых файлов для использования в преамбуле, но тут я написал полный код чтобы в каждом случае можно было запустить «из коробки».

Кстати, в следующем посте будут еще <<круче>> функции.

Читать далее

Как работает чистый код

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

Как работает чистый код?

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

Click to reveal the Clean Rant

Подсмотрел PIN от двери, а затем воткнул Wi-Fi-жучка за принтер — и ты внутри сети банка

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

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

Читать далее

Процессор, которого не существует. Читаем и пишем ПЗУ

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

Автомобильные блоки управления полны компонентов, промаркированных нестандартно. Например, встречались микросхемы, на которых выбито "Toyota", хотя ежу понятно, что Toyota никаких процессоров не производит. Но в мире электроники при больших партиях производители чипов имеют возможность выбить на чипе ваш логотип, или маркировку, и разработчики ЭБУ этим активно пользуются, хотя цели их не совсем ясны.

Но нестандартная маркировка - это еще цветочки! Существует огромный пласт кастомных компонентов, выполненных "под заказ" для конкретного производителя ЭБУ. Такие проприетарные компоненты зачастую не только не имеют открытой документации, но и отсутствуют в линейке производителя.

Не так давно мы разбирались с процессором TMS470R1A256, очень популярный в блоках SRS 2007-2010 г.в.. На нём выбивают маркировки: TMS470R1VF3482 или TMS470AVF3482, однако достаточно подключиться к этому процессору посредством отладчика чтобы понять, что это процессор TMS470R1A256. Дело в том, что согласно datasheet на эти процессоры, в каждом процессоре есть device identification code register, прочитав который, вы сможете узнать part number данного процессора, который уже можно отыскать в datasheet.
Например, для TMS470R1A256: `The assigned device-specific part number for the A256 device is 0001010` что при переводе в hex = 0x0A. Много разработчиков написало программы для чтения данных процессоров, но почему-то блоки с процессорами, записанными этими программами, не выходили на связь. Пришлось разбираться с этим вопросом самостоятельно, результатом чего стала версия программы JLinkZReader, в которой проблема чтения и записи данных CPU была решена.

Читать далее

Как мы ввели автосертификацию дашбордов в Авито

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

Привет, Хабр! Меня зовут Евгений Мичурин, я senior BI-разработчик в Авито.

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

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

Читать далее

FastAPI: 5 практичных архитектурных решений, о которых я пожалел, что не узнал раньше

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

Привет, Хабр! Когда начинаешь новый проект на FastAPI, всё кажется простым: пара моделей Pydantic, несколько эндпоинтов — и готово. Но через полгода и 20 000 строк кода оказывается, что базовая валидация размазана по всему приложению, бизнес-логика перемешана с обращениями к БД, а тесты пишутся со скрипом.

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

Читать далее

Универсальная простота FAR. Как настроить и кастомизировать пользовательское меню

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

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

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

В статье я расскажу о том, как можно настроить и кастомизировать пользовательское меню файлового менеджера FAR.

Читать далее