Иногда в разработке случается баг, который не просто не даёт спать, а заставляет пересмотреть свои жизненные ценности.
У меня это произошло со скромным всплывающим окном внутри WebView.
Задача была максимально скучной: на экране с WebView пользователь нажимает кнопку “Exit”, а веб-страница показывает попап подтверждения. На старом коде — всё идеально. На браузере — идеально. На новом инфраструктурном слое WebView — попап появляется на миг и тут же закрывается сам, как будто кто-то тайно играет в “крестики” за пользователя.
Никаких ошибок. Никаких исключений.
Просто “блип”… и пустота.
То самое чувство, когда ты нажимаешь кнопку, а мир делает вид, что “ничего не было”.
И это — пролог к истории о том, как два дня моей жизни сгорели на алтаре WebView.
Читать далееПродолжаю погружаться в Reinforcement Learning. Здесь продолжение статьи Intro Reinforcement Learning.
Если предыдущая часть помогла вам понять, что такое среда, агент, награды и функции ценности, то здесь мы сделаем шаг дальше: мы переходим к model-free алгоритмам и Deep Reinforcement Learning, где агент учится оптимальной стратегии, не имея прямого доступа к модели среды.
Читать далееНа свете есть не так много вещей, способных выбесить программиста. И лишь одна делает это с гарантией: оборзевшая в край машина, возомнившая себя умнее человека.
А значит снова пришло время карать и патчить!
Читать далееСетевой протокол канального уровня Spanning Tree достаточно широко распространен в современных сетях. Его используют для борьбы с закольцовыванием сетевой топологии. Однако, STP не позволяет полностью использовать каналы, к которым подключены несколько линков. Плюс к этому у STP относительно большое время сходимости и необходимость передавать трафик через корневой коммутатор, то есть единая точка отказа.
В качестве одной из альтернатив Spanning Tree можно воспользоваться MLAG. Multi-Chassis Link Aggregation (MLAG) — технология, обеспечивающая балансировку нагрузки и надежность каналов. В этой статье рассматриваются значение, важность и потенциальные варианты использования MC-LAG на различных уровнях сети.
Читать далееКогнитивная сложность — это понятие, описывающее сложность процесса познания и мышления. Оно используется в разных областях: в психологии оно характеризует индивидуальную способность к восприятию и обработке информации. Более высокая когнитивная сложность означает, что система (будь то человек или программа) требует больше усилий для понимания и может быть трудной в поддержке.
Когнитивная сложность при проектировании приложения часто возникает из‑за смешения архитектуры кода и архитектуры приложения. В большинстве случаев эти термина никак не разделены, а также эти термины не имеют однозначного толкования, как по содержанию так и по контексту использования. В практике и литературе эти понятия часто используются как синонимы или в пересекающихся контекстах, что приводит к неоднозначности. В зависимости от контекста (например, обсуждение микросервисов, монолитов, паттернов проектирования или рефакторинга), один и тот же термин может обозначать как уровень организации кода, так и более высокий уровень организации приложения или системы. В профессиональной литературе и стандартах (например, TOGAF, ArchiMate) архитектура программного обеспечения охватывает оба аспекта и организацию кода, и организацию приложения, что еще больше стирает границы между этими понятиями.
Пора этой порочной практике сказать решительное НЕТ!
Сказать решительное НЕТМы привыкли к слову «купить» как к чему-то окончательному. Купил — значит моё. Но в цифровом пространстве это не всегда так работает. Многие, кто ушёл от пиратских сайтов и стал платить за фильмы на стримингах, после 2022 года вдруг обнаружили, что часть купленных фильмов бесследно исчезла из библиотек. Оказалось, что никакой настоящей «покупки» не было. На деле речь шла о сублицензионном соглашении, которое перестаёт действовать в тот момент, когда у сервиса вроде «Кинопоиска» заканчиваются права на показ.
Как это работает на самом деле? Тот же «Кинопоиск» заключает лицензионные договоры с правообладателями, одни фильмы он включает в подписку, другие предлагает «в аренду» или «в продажу». Но когда пользователь «покупает» фильм, юридически это не покупка в привычном смысле, а заключение сублицензионного договора. И стоит основному договору между сервисом и правообладателем закончиться, рушится и вся цепочка — вместе с вашей «покупкой». Фильм попросту исчезает из библиотеки, как будто его там никогда не было.
Можно ли вообще называть это покупкой и обещать доступ «навсегда», если срок действия прав никто не раскрывает? С точки зрения здравого смысла — вряд ли. В европейской практике компании обязаны быть честными с потребителями и прямо указывать, на какой срок предоставляются права. В противном случае это воспринимается как обман: пользователь уверен, что приобрёл вещь, а по факту получил лишь временное разрешение ею пользоваться.
Неудивительно, что подобные истории вызвали волну возмущения и в игровой индустрии. Так появилась инициатива с красноречивым названием Stop Killing Games. Её участники возмущены тем, что издатели продают игры, но при этом оставляют за собой право в любой момент их «убить» — например, закрыть серверы, без которых даже одиночный режим становится недоступным. Игра вроде бы куплена, но по факту она исчезает вместе с отключённой инфраструктурой.
Читать далее18 ноября 2025 Google представил новую связку: модель Gemini 3 Pro и IDE Google Antigravity. Первая - про управляемое рассуждение, длинный контекст и мультимодальность. Вторая - про мультиагентную разработку с артефактами и «прозрачными» шагами. В ленте мгновенно пошли заголовки «Cursor мертв».
В этой статье разбираем, что именно Google запустил, почему слова "самая умная модель" - преувеличение, чем Antigravity отличается от Cursor, какие сценарии разработки уже меняются, и где пока еще рано бросать привычный стек.
Читать далееА вот кстати еще один способ подключить IPv6, без регистрации у туннельных брокеров, даже если хостер не выдает адресов:
Для обычных IPv4-адресов выделена специальная сеть в формате IPv6, адреса в ней имеют вид 2002:XXXX:XXXX::/48.
То есть, если у вас есть выделенный 1 IP-адрес - считайте, что вам выделена и вот такая сеть IPv6, или 65536 подсетей /64 - просто вам об этом забыли рассказать.
Напомню, что мы исследуем историю релейной автоматики и, неразрывно связанной с ней, релейной логики. И пытаемся понять, как в первой половине ХХ века огромные заводы работали, выполняли сложнейшие операции и почти не сбоили. Хотя все современные инженеры IIoT на тот момент еще даже не родились, а устройства ПЛК только шли в разработку.
В первой части мы узнали, что главной хитростью автоматизаторов тех лет оказалось реле. Именно с помощью этих простых устройств делали ооочень непростые вещи. Но ХХ век шел вперед и инженеры сталкивались вызовами, масштаб которых раньше сложно было представить.
Читать далееНад Москвой сильный туман. Самолет начинает заходить на посадку, пилоту ничего не видно. Вдруг из-за тумана появляется небоскреб, в окне кто-то маячет. Летчик высовывается и кричит: - Где мы?
В ответ: - В самолете!
Летчик кивает и уверенно, с точностью до метра, сажает самолет. После посадки второй пилот спрашивает: - Как тебе это удалось?
- Я задал простой вопрос и получил на него 100% правильный, но совершенно бесполезный ответ. Тогда я понял, что мы пролетаем офис техподдержки Авито. А дорогу дальше я знаю!
В очередной раз откровенно наплевательское отношение техподдержки Авито к собственным клиентам и мои безуспешные (в очередной раз) попытки эту систему переломить привели к рождению этой статьи о том, КАК за несколько шагов и с минимальными затратами времени разрушить чужой предпринимательский труд на Авито (ну или как минимум поставить его "на паузу" на несколько месяцев).
Читать далееЭто вторая часть из цикла про популяризацию ASO среди разработчиков. В первой, вводной части, я рассказывал, как любой мобильный разработчик может увеличить количество скачиваний своего приложения. Сейчас же, предлагаю пойти дальше и на примере простого приложения разобрать основные понятия, оценить потенциал ниши и понять, зачем "якорь" нужен любому приложению.
В качестве примера мобильного приложения для предметного рассмотрения темы, предлагаю представить, что мы делаем простенькое приложение для трекинга собственного веса - минималистичное, с графиками, возможностью записывать цифры веса и, возможно, уведомлениями. В общем, такое, чтобы была мотивация делать, можно было бы "завайбкодить", но без претензий на миллиардерство. Идея привычная, но как её оценить с точки зрения потенциала в App Store? Будут ли его скачивать и сможем ли мы заработать? Давайте посмотрим.
Читать далееСалют, Хабр!
Сегодня мы представили новые умные телевизоры Sber серии 7000 с голосовым управлением без пульта. Его обеспечивает технология Farfield. Этим телевизорам достаточно дать голосовую команду, чтобы включить фильм, поставить его на паузу, изменить громкость и так далее.
Сегодня расскажем, что нового (и как именно) реализовали в серии 7000. В статье:
• Farfield, loopback и особенности настройки звука в умных ТВ;
• зачем обходить дерево для голосового управления в сторонних приложениях;
• ГигаЧат в умных ТВ.
Читать далееДело было вечером, делать было нечего... Я, как и многие в IT, периодически просматриваю вакансии, чтобы держать руку на пульсе рынка. И знаете, что бросается в глаза? Огромное количество позиций "Аналитик данных". Хоть это и не моя основная специализация (я больше по ML), теоретическая база у меня есть. И вот я подумал: а как бы мне сделать интересный пет-проект в этой области, чтобы и навыки прокачать, и самому не заскучать?
Читать далееПривет от Хабра! Несем вам буквально космическую новость — мы подвели итоги конкурса космических статей и выбрали те, что отправятся в настоящий КОСМОС
Всем привет! На связи Сергей Баширов, ведущий разработчик из R&D-команды Cloud.ru. Сегодня поговорим о фильтрах чтения и отображения в TShark. Поделюсь лайфхаком: как быстро и просто посмотреть доступные поля для любого протокола без AI-ассистентов и поиска. Но сначала пара слов о том, как я докатился до такой жизни.
Статья будет интересна тем, кто хочет анализировать сетевой трафик в командной строке или в скрипте. Этот навык может пригодиться как в процессе разработки и отладки, так и в процессе тестирования программ. Ведь современные приложения и сервисы сложно представить без сетевых функций.
ПоехалиСтатья о разработчиках, чья работа пришлась на эпоху до расцвета фреймворков. О том, как они держали индустрию на дисциплине, прямолинейности и технической смелости, и почему некоторые их подходы стоит возвращать в современную практику, хотя бы частично.
Иногда я ловлю себя на странном ощущении: будто многие современные инструменты исполняют роль такого мягкого пуха, через который мы перестали чувствовать остроту реального программирования. И тут я не о ностальгии, а скорее о том, что те, кто начинал путь в девяностых или в начале нулевых, делали свою работу в куда более жестком окружении. Без фреймворков, без бесконечных библиотек, без удобных механизмов вроде ленивых генераторов и автоматических сборщиков. Даже если вы сами не пережили ту эпоху, наверняка хотя бы слышали истории, как кто-то руками поднимал сетевой стек или писал собственный шаблонизатор, просто потому что другого варианта не было.
Эта статья — попытка вспомнить те подходы, которые формировались в условиях почти аскетической разработки. И да, я знаю, что мы все давно живем в другом времени. Но есть такие вещи, которые переживают эпохи. Иногда мне кажется, что забытые практики разработчиков девяностых и нулевых могут дать современному программисту куда больше, чем кажется на первый взгляд.
Читать далееВы наверняка сталкивались с системами хранения данных семейства TATLIN или серверами VEGMAN, хотя можете об этом даже не подозревать. Например, делая заказ в интернет-магазине или пользуясь другими популярными онлайн-сервисами — в глубине ИТ-инфраструктуры для них можно обнаружить продукты YADRO.
Всем привет, меня зовут Александр Чуриков, я технический эксперт отдела сервисного дизайна YADRO. Мы служим мостиком между сервисом и нашим R&D, который разрабатывает продукты — изучаем все боли сервиса, которые возникают при обслуживании, в том числе при обновлении и замене компонентов, и транслируем их в R&D. Предлагаю подробно разобраться в процессе обновления СХД TATLIN.UNIFIED: от операционной системы и до прошивок аппаратных компонентов.
Читать далееTransactional Outbox часто подаётся как простой рецепт: записали событие в отдельную таблицу, фоновый воркер разберётся. В реальности именно этот «временный костыль» неожиданно превращается во вторую очередь со своей конкуренцией за блокировки, дубликатами, нарушенным порядком и тихо растущими таблицами.
В статье разберемся, что именно начинает ломаться в outbox-паттерне под нагрузкой, как выбирать и блокировать события в разных СУБД, почему ретранслятор стоит отделить от API и какие гарантии доставки на самом деле получаются. А ещё — почему консюмеры должны быть идемпотентными, как следить за внутренней очередью в базе и не узнавать о проблемах уже после инцидента.
Разобрать outboxПри разборе продакшн heap dump я обнаружил странность: Hibernate Query Plan Cache занимал почти треть памяти. Обычный IN (:ids) внезапно генерировал тысячи SQL-планов и раздувал heap.
Почему так происходит и как полностью решить проблему с помощью ANY(:ids) — разбираю пошагово на реальном примере
Читать далееРазмышление о том, как изменилась инженерная культура, почему сегодняшние инструменты радикально расширили горизонты разработки и что делает молодых инженеров способными создавать системы, которые раньше выглядели мягко сказать нереально.
Читать далее