Habr.com

Ленты новостей Хабр
Все публикации подряд на Хабре
Обновлено: 1 час 6 мин. назад

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

8 часов 38 мин. назад

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

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

Загадка

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

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

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

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

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

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

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

Читать далее

Сколько нужно парадигм, чтобы вкрутить лампочку?

9 часов 8 мин. назад

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

Узость кругозора программиста, застрявшего в одной парадигме, проявляется во всем. Он будет городить циклы там, где достаточно одной функции высшего порядка. Плодить классы и наследование там, где хватило бы чистой функции и композиции. Попытается решить задачу верификации корректности алгоритма отладчиком и тестами вместо того, чтобы доказать её формально на уровне типов. Такой разработчик похож на туриста, который знает только одно слово на иностранном языке и пытается с его помощью объяснить таксисту маршрут через весь город. И хорошо еще, если это слово — не обсценно.

Я список парадигм прочёл до середины

Нас окружают «невозможные» кубики Рубика

9 часов 36 мин. назад

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

Крутить далее...

[Перевод] Как взломать систему банка с помощью газового баллончика и выключенного принтера

9 часов 45 мин. назад

802.1x и двери по картам — это должно быть надёжно. Пентестер зашёл в банк ночью, «обманул» ИК-датчик баллончиком, стал принтером в сети и нашёл заполненные чеки. Это не теория. Это отчёт по реальному тесту на проникновение.

Читать далее

Достаточно надёжный и научно обоснованный алгоритм проверки текста на AI

16 часов 46 мин. назад

Кажется, я изобрёл алгоритм, при помощи которого можно достаточно надёжно отличить авторский текст от AI‑текста.
Помимо надёжности, алгоритм очень нетребователен к вычислительным ресурсам и способен эффективно работать даже на 8‑битных микроконтроллерах в связке с W5100.

Суть его в следующем. Ваше вычислительное устройство открывает web‑страницу и ищет на ней четырёхзначные числа. Если таких чисел нет или если на странице попадается хотя бы одно число, большее чем 2023, такая web‑страница с вероятностью 50% AI‑сгенерирована.
Если же все найденные четырёхзначные числа меньше, либо равны 2022, то вероятность AI‑генерации данной страницы равна 1%.

Ниже я расскажу, как мне пришла в голову идея столь простого, но в тоже время эффективного алгоритма.

распознать AI с первого взгляда

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

17 часов 1 мин. назад

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

Читать далее

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

17 часов 48 мин. назад

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

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

Читать далее

Лошадка мохноногая торопится бежит…

17 часов 49 мин. назад

Чисто DIY-статья как я делал электронно-механическую новогоднюю лошадку. Под катом – кинематика, механика, электроника и всякое шитьё. Кому интересно рукоделие и самоделки в стиле Юных техников...

Иго-го!

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

18 часов 38 мин. назад

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

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

Читать далее

Очень странные дела или подключаем YDB в AWS NoSQL Workbench

чт, 01/08/2026 - 23:39

При работе с Yandex Database (YDB) часто возникает потребность в удобном визуальном инструменте для работы с данными. AWS NoSQL Workbench — популярное приложение для моделирования и тестирования NoSQL баз можно использовать и с YDB благодаря DynamoDB-совместимому Document API.

Читать далее

Преобразование Фурье и спектр излучения — одно и то же?

чт, 01/08/2026 - 22:55

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

Рассмотрим базовую ситуацию для любого радиоканала.

Передатчик излучает немодулированную несущую (Рис. 1)

Читать далее

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

чт, 01/08/2026 - 22:04

Девять месяцев назад я начал вести свой канал t.me/siliconchannel. Писал статьи для Хабра на свою профессиональную тему - Go-разработку - и задумался: а могут ли эти статьи и вложенный в них труд приносить кратно больше пользы и мне, и Хабру? В итоге это привело к блогу на 4000 подписчиков с 0 рублей вложений.

Читать далее

Изнанка бэкапов YDB: что остаётся за кадром

чт, 01/08/2026 - 22:03

Решил собрать нюансы создания резервных копий и восстановления таблиц в YDB. Это не замена документации, а раскрытие деталей, которые не очевидны для тех, кто начинает работать с этой базой данных.

Читать далее

Kawai-Focus 2.1: переезд на новый стек

чт, 01/08/2026 - 21:35

В данной статье я попытаюсь переписать часть приложения Kawai-Focus на стек: FastAPI + Vue.js + Tauri + Ionic. Также я соберу приложение только с экраном «Таймеры» под Linux в AppImage, которое подойдёт для большинства Linux-дистрибутивов. Реализация одного экрана не будет слишком долгим процессом, а финальная сборка приложения позволит оценить сложность и удобство полного цикла разработки.

Эта cтатья не будет подробным гайдом, так как размер переписанного кода и его описание слишком велики для одной статьи. Однако я покажу часть кода проекта и расскажу о выбранном стеке, а также о трудностях и преимуществах, с которыми я столкнулся в процессе переписывания проекта. Я буду использовать часть кода старого проекта, который не касается Kivy и KivyMD, поэтому его душа не умрёт, а обновится.

Заваривайте чай, доставайте вкусняшки — пора «старый стек превращать в удобрение для новых помидор»!

Паттерн Newtype и Deref-coercion в Rust

чт, 01/08/2026 - 21:14

Как отличить строку «имя» от строки «e-mail»? К примеру, чтобы не ошибиться в передаче в функцию. На помощь приходит паттерн Newtype, но его не очень удобно использовать. В статье разберем как добавить удобства.

Читать далее

JavaScript: заметка об Anchor Positioning API

чт, 01/08/2026 - 21:05

Привет, друзья!

В этой небольшой статье мы вместе с вами немного пощупаем новый Web API - Anchor Positioning.

Anchor Positioning API предоставляет новые возможности для связывания элементов между собой. Одни элементы являются якорями (якорными, anchor elements), другие - позиционируемыми относительно якорей (закрепленными, anchor-positioned elements). Размер и положение позиционируемого элемента может определяться размером и положением якорного элемента.

Кроме того, с помощью CSS можно:

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

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

На сегодняшний день этот API поддерживается всеми основными браузерами (в Safari пока только в качестве экспериментальной возможности).

Читать далее

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

чт, 01/08/2026 - 20:37

Заходишь на Хабр.Карьеру, открываешь вакансии системных аналитиков, а в требованиях всё как обычно: построение информационных систем, понимание архитектуры, ТЗ, BPMN, базовый SQL. Нигде ни слова о знании GPT или умении промптить. Формально профессия как будто не изменилась. 

Тем временем в свежем отчёте OpenAI о корпоративном применении ИИ опубликовали статистику: использование ChatGPT в корпоративной среде за год выросло в 8 раз, а объём запросов от одного человека — в среднем на 30%.

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

Читать далее

Делай Bench: мой опыт слепого human-eval бенчмарка нейросетей для юристов

чт, 01/08/2026 - 20:01

Привет и с Новым годом, Хабр! Меня зовут Екатерина, я практикующий юрист, исследую эффективное применение нейросетей в юридических задачах. В декабре ушедшего года я провела необычный для себя и российского LegalTech-рынка эксперимент: с помощью одиннадцати коллег-оценщиков организовала небольшоенезависимое слепое сравнение пяти нейросетевых сервисов. В этой публикации хочу рассказать о вызовах human-eval бенчмарка в домене, где зачастую нет единственно правильных ответов, интересных выводах исследования, полученной мной обратной связи и дальнейших планах.

Читать далее

Лоботомия нейросети: удалил 7 слоёв из LLM — она стала на 30% быстрее

чт, 01/08/2026 - 19:55

Эксперимент по хирургическому удалению слоёв из языковой модели

Современные LLM переобучены — многие слои делают одно и то же. Я проверил эту гипотезу на практике: взял TinyLlama (1.1B параметров, 22 слоя) и измерил, как удаление каждого слоя влияет на perplexity.

Результаты:
• Удаление 1 среднего слоя: +10% скорость, -4% качество
• Удаление 7 «безопасных» слоёв: +32% скорость, -2.5% качество
• Удаление первого слоя: модель полностью ломается

Неожиданно: Layer 2 важнее Layer 0 (perplexity +6.67 vs +3.92 при удалении).

Статья с кодом на PyTorch, графиками и практическими рекомендациями — какие слои можно удалять для ускорения инференса.

Читать далее

«Длительность жизни» у мифов

чт, 01/08/2026 - 19:51

У людей главный признак, наряду с орудиями труда ( особенно состоящими из 2-3-4 частей ) это умение обучать друг друга через мифологию, присказки, легенды. Какова древность известных мифов? Ответ науки, основанный на массовом изучении всех мифов мира и прогоне их через компьютерные программы и географические карты - больше 40 000 лет некоторые мифы-сюжеты живут.

У мифов есть особенность - это не просто сказка. Это по сути обучение древним знаниям. Письменности не было у людей вплоть до 5 000 лет назад, большая часть населения планеты вплоть до 1000 лет назад знала только устную передачу информации. Те же саги Скандинавов это устные, заучиваемые наизусть сказания-мифы, записали их на бумагу только в 1200 - 1300 годах. Поэтому знать мифы вплоть до 1000 лет назад, это знать историю, культуру, тайны всякие и так далее. Это была основа обучения всех людей на протяжении десятков тысяч лет.

Читать далее

Сейчас на сайте

Сейчас на сайте 0 пользователей и 0 гостей.