Habr.com

  • user warning: Table './drupal/sessions' is marked as crashed and last (automatic?) repair failed query: SELECT COUNT(sid) AS count FROM sessions WHERE timestamp >= 1789414773 AND uid = 0 in /var/www/html/includes/session.inc on line 157.
  • user warning: Table './drupal/sessions' is marked as crashed and last (automatic?) repair failed query: SELECT COUNT(DISTINCT s.uid) FROM sessions s WHERE s.timestamp >= 1789414773 AND s.uid > 0 in /var/www/html/modules/user/user.module on line 808.
Syndicate content Хабр
Все публикации подряд на Хабре
Updated: 14 min 30 sec ago

Как не потерять интеграцию с Docker в IDE после блокировки JetBrains

Thu, 09/10/2026 - 16:11

Те, кто работал в IntelliJ IDEA, PyCharm, GoLand или WebStorm, привыкли управлять Docker прямо из IDE: запускать и останавливать контейнеры, смотреть логи, работать с томами не выходя из редактора.

В 2022 году JetBrains приостановила продажи и поддержку для пользователей из России. IDE стали недоступны через официальные каналы, а плагины из JetBrains Marketplace (в том числе и Docker-плагин) вместе с ними.

Именно по этой причине консорциум OpenIDE принял решение реализовать поддержку Docker с нуля!

Про неё сегодня и поговорим.

Читать далее

Смартфон-шпион: почему даже отключение интернета не мешает смартфону отправлять хакерам данные

Thu, 09/10/2026 - 16:09

Есть такое уютное заблуждение: выключил Wi-Fi и мобильные данные – и все, ты невидимка. Спокойно можно строить теории заговора. На деле всё немного иначе. Даже в полном офлайне встроенные датчики смартфона продолжают исправно работать и копить информацию о том, чем вы занимались. Разбираемся, как смартфоны на самом деле следят за нами без сети, чего стоит опасаться по-настоящему, а что — просто повод для паранойи.

Жми, а то не узнаешь

Как создавать необычные усложнения для часов на Wear OS

Thu, 09/10/2026 - 16:08

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

Читать далее

Vivaldi 8.2 для мобильных устройств: Ваш браузер. Ваши правила. Ваши расширения

Thu, 09/10/2026 - 16:07

Vivaldi предоставляет вам все необходимые инструменты для работы в сети. С нашим последним обновлением Vivaldi 8.2 мы даём вам больше — с полной поддержкой расширений на Android, так что вы можете настроить свой мобильный браузер именно так, как вам нужно.

Читать далее

Проектный офис — не отдел отчетности

Thu, 09/10/2026 - 16:06

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

Тут возникает вопрос о способности формулировать управленческие запросы на уровне руководства. Но ещё более важный вопрос - к тому, кто запускает проектный офис: хочет ли он быть Head of PMO или им казаться?

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

Читать далее

Идемпотентность в платёжном конвейере: «повтори запрос» — это архитектура, а не retry

Thu, 09/10/2026 - 16:04

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

Клиент нажимает «Оплатить». Приложение отправляет POST /payments. Проходит пять секунд, и HTTP-клиент падает по таймауту. Ретрай-политика, которую кто-то настроил год назад по гайду, ждёт двести миллисекунд и отправляет запрос ещё раз. Через минуту клиент видит в выписке два списания.

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

Первый вывод: надо выключить retry на POST. Хорошо, выключили. Теперь у нас платежи, про которые никто не знает, прошли они или нет. Поддержка разбирает их руками. Ущерб никуда не делся, он просто переехал на другой счёт.

Второй вывод: надо добавить заголовок Idempotency-Key. Добавили. Дедупликацию сделали в middleware поверх Redis. Через полгода двойное списание случается снова. Потому что Redis пережил failover и потерял ключи. Или потому что повтор пришёл через сутки из файла клиринга, а в файле никакого HTTP-заголовка нет.

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

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

Читать далее

Спустя 13 лет я всё‑таки опубликовал своё первое приложение. Без малейшего навыка программирования

Thu, 09/10/2026 - 16:02

В 2013 году я купил книгу про то, как делать приложения, и загорелся. И вот спустя 13 лет, я все же выпустил свое первое приложение — дневник тренировок, от первого запроса в Claude Code до публикации в RuStore и Google Play. Рассказываю, как без навыков программирования я сделал свое первое рабочее приложение.

Читать далее

Как рост команды сломал редакционные процессы — и как я собирала их заново

Thu, 09/10/2026 - 16:00

В Russian Business меня позвали, чтобы я наладила процессы внутри команды.

До перезапуска проект много лет существовал под брендом Rusbase. В сентябре 2024 года Альфа-Банк стал стратегическим партнёром RB.RU и приобрёл долю в компании, а 7 августа 2025 года медиа перезапустилось под новым брендом Russian Business.

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

Очень быстро у этой системы обнаружились четыре больных места.

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

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

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

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

Держать всё это в голове невозможно. А увидеть полную рабочую картину, если она разбросана по чатам, — тем более.

Читать далее

Не пишите свой маленький BI

Thu, 09/10/2026 - 15:54

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

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

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

Читать далее

FUSE простым языком: как обычные программы притворяются файловыми системами

Thu, 09/10/2026 - 15:51

Вы наверняка сталкивались с этим эффектом: монтируете sshfs, rclone mount или gocryptfs — и после этого файловый менеджер, редактор, архиватор и бэкапилка работают с появившимся каталогом так, будто перед ними самая обычная файловая система. Хотя байты могут жить на сервере, в S3, внутри шифрованного каталога или вообще рождаться на лету.

Как программа из userspace умудряется встать между open() и данными так, чтобы остальная система ничего особенного не заметила? Сегодня разберёмся. Заваривайте чай покрепче (ядро любит крепкий), устраивайтесь поудобнее — поговорим про FUSE.

Сразу одна оговорка, чтобы не заложить мину в фундамент статьи: не всякая «сетевая папка» или подключённый телефон в файловом менеджере — это FUSE. GNOME GVfs, KDE KIO и MTP умеют показывать похожую картину на уровне приложений. FUSE идёт глубже: он подключается к файловому стеку ядра, поэтому смонтированное дерево видят обычные программы через привычные open(2), read(2), stat(2) и компанию.

Читать далее

Life Cycle: что остаётся после того, как тебя больше нет

Thu, 09/10/2026 - 15:46

Две недели назад я ехал к отцу и не успел примерно на сорок минут.

Ему было 84 года, последние месяцы он был совсем плох, поэтому сама возможность такого исхода не была неожиданностью. Я девятый ребёнок в семье и самый младший. Я метис: отец был кумыком, мама русской. Маму я похоронил в 2016 году. Из всей большой семьи именно я жил в Ставропольском крае, и когда близкие сообщили, что отец совсем плох, я выехал к нему.

Когда приехал, его уже не было.

Я спокойно могу говорить об этом. Не потому, что мне всё равно, и не потому, что смерть близкого человека можно рационализировать несколькими красивыми фразами. Просто мне не хочется делать из этой истории просьбу о жалости. Отец прожил очень длинную жизнь. У меня была возможность знать его, разговаривать с ним, спорить с ним. Это уже огромное количество времени.

Но эти сорок минут почему-то заставили меня думать не столько о смерти, сколько о времени.

Меня зовут Артур Валиев. Я программист. Раньше я уже пытался разговаривать через Rust о совсем не технических вещах — например, о любви. И чем дольше я пишу код, тем чаще ловлю себя на довольно странной профессиональной деформации: я начинаю смотреть на собственную жизнь как на систему, которую желательно хотя бы не оставлять в заведомо некорректном состоянии.

На этот раз мне захотелось попробовать описать не любовь.

Мне захотелось описать конец жизненного цикла.

Читать далее

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

Thu, 09/10/2026 - 15:42

Документация устаревает быстрее, чем код успевает писаться? Рассказываем, как мы построили конвейер из Python-скриптов и нейросетей, который сам находит изменения в PHP-контроллерах и обновляет документацию API Invapi.

Читать далее

Почему игра лагает, хотя показывает 200 fps

Thu, 09/10/2026 - 15:25

Средний fps – вещь, которая к реальной плавности геймплея может не иметь никакого отношения. Вообще. Даже если вы собрали топовый ПК и имеете стабильные 180 кадров в счетчике картинка все равно может дергаться. А все потому, что глаз реагирует не на количество кадров, а на равномерность их появления. И вот эту равномерность средний показатель – тот самый AVG – как раз и прячет. Значит, надо смотреть на другие цифры. Но на какие?

Читать далее

А чё, так можно было? Dictionary == List

Thu, 09/10/2026 - 15:21

Ключ-структура из числа и строки. Поиск по словарю на 10 000 таких ключей занимает 74 975 микросекунд. Тот же ключ, объявленный record struct, — 3,354 микросекунды.

Разница в 22 354 раза, и берётся она не из сравнения ключей.

Читать далее

Мы сделали свой UI Kit: 6 компонентов превратились в 30+, а одна ошибка сломала разметку во всех проектах

Thu, 09/10/2026 - 15:21

Мы сделали свой UI Kit: 6 компонентов превратились в 30+, а одна ошибка сломала разметку во всех проектах

С чего всё начиналось

Когда в проекте начинает появляться всё больше одинаковых элементов интерфейса, рано или поздно возникает вопрос: зачем каждый раз создавать один и тот же Button, Input или Select?

Мы рассматривали готовые решения, в том числе Ant Design и Material UI, но они не закрывали наши требования. Нам требовался больший контроль над внешним видом и поведением компонентов, возможность детально адаптировать их под наши задачи и учитывать требования проекта к безопасности.

Читать далее

Маскирование данных: 8 вопросов, которые волнуют бизнес и разработчиков

Thu, 09/10/2026 - 15:13

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

На связи Дмитрий Ларин, я руковожу продуктовым направлением по защите баз данных, в Гарде.

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

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

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

Итак, поехали.

Читать далее

Я не заметил, что у моего терапевта выросли усы

Thu, 09/10/2026 - 15:08

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

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

У такой модели есть довольно неприятное свойство. Она не только описывает человека, но и меняет его. Если я достаточно уверен, что при настоящей близости меня рано или поздно начнут контролировать, я буду вести себя так, что меня действительно начнут контролировать. И тогда модель перестанет быть просто ошибочной. В той системе отношений, которую она сама помогла построить, она начинает верно предсказывать реальность.

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

Читать далее

Практический опыт применения отечественного ТИМ-контура при сопровождении проекта на стадии «Проектная документация»

Thu, 09/10/2026 - 15:01

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

В статье представлен практический опыт реализации одного из первых в России проектов по комплексной разработке всех основных разделов проектной документации многоквартирного жилого комплекса с использованием отечественной ТИМ/BIM-платформы nanoCAD BIM Строительство и nanoCAD Инженерный BIM1 (далее – nanoCAD BIM). На момент подготовки статьи проект успешно прошел экспертизу и получил разрешение на строительство.

Читать далее

От исходных данных до аналитической витрины: что происходит между ними

Thu, 09/10/2026 - 15:00

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

На практике до дашборда было ещё далеко.

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

В итоге в проекте появились BI-витрина, модель данных и отчётность, которая использовалась для анализа динамики и поиска расхождений. Но самым важным результатом для меня стал не сам дашборд. Я на практике увидел, что аналитическая витрина начинается не с SELECT и не с выбора схемы данных. Она начинается в тот момент, когда мы решаем, во что именно должна превратиться исходная запись.

Читать далее

Who's online

There are currently users and guests online.