Post Syndicated from The Atlantic original https://www.youtube.com/watch?v=da8UeSn1XeU
[$] Controlling memory-management with BPF
Post Syndicated from corbet original https://lwn.net/Articles/1072538/
Roman Gushchin began his session in the memory-management track of the
2026 Linux Storage,
Filesystem, Memory Management, and BPF Summit by saying that the
community has seen a lot of proposals adding BPF-based interfaces for
memory management. None of them have made their way into the mainline,
though. He wanted to explore the ways in which BPF might be helpful and
the obstacles that have kept BPF-based solutions out so far. This session
was followed by a discussion led by Shakeel Butt on what the requirements
for a new, BPF-based interface for memory control groups might look like.
Seven new stable kernels with patches for CVE-2026-46333
Post Syndicated from jzb original https://lwn.net/Articles/1073060/
Greg Kroah-Hartman has announced the 7.0.8, 6.18.31, 6.12.89, 6.6.139, 6.1.173, 5.15.207, and 5.10.256 stable kernels. These kernels
contain a patch for CVE-2026-46333
a vulnerability reported
by the Qualys Security Advisory team, though Jann Horn proposed
a patch in 2020. The vulnerability has a proof-of-concept
exploit published already. Some of the kernels have additional
patches for other bugs; as always, users are advised to upgrade.
[$] HugeTLB preservation over live update
Post Syndicated from corbet original https://lwn.net/Articles/1072531/
Recent times have seen a lot of effort put into the implementation of the kexec handover and live update orchestrator
features in the Linux kernel. But that work is not yet complete. At the
2026 Linux Storage,
Filesystem, Memory Management, and BPF Summit, Pratyush Yadav led a
memory-management-track session on adding the ability to preserve hugetlbfs-provided
memory during the live-update process.
Security updates for Friday
Post Syndicated from jzb original https://lwn.net/Articles/1073059/
Security updates have been issued by Debian (ffmpeg, gsasl, nodejs, postgresql-15, postgresql-17, python3.9, and thunderbird), Fedora (expat, firefox, freerdp, GitPython, kernel, php, rust-podman-sequoia, rust-rpm-sequoia, rust-sequoia-chameleon-gnupg, rust-sequoia-git, rust-sequoia-keystore-server, rust-sequoia-octopus-librnp, rust-sequoia-openpgp, rust-sequoia-sop, rust-sequoia-sq, and rust-sequoia-sqv), Mageia (awstats, libreoffice, perl-HTTP-Tiny, and tomcat), Oracle (corosync, freerdp, gimp, git-lfs, glib2, jq, kernel, krb5, libsoup3, libtiff, openexr, thunderbird, uek-kernel, and yggdrasil), Red Hat (podman and skopeo), SUSE (amazon-ssm-agent, avahi, c-ares, cairo, containerd, cpp-httplib, dnsmasq, dovecot24, ffmpeg-4, firefox, helm, ImageMagick, iproute2, kernel, krb5, libtpms, ongres-scram, ongres-stringprep, plexus-testing, maven, maven-doxia, mojo-parent, sisu, openCryptoki, openssh, perl-Text-CSV_XS, php8, python-lxml, python-Twisted-doc, python311-click, python311-GitPython, rclone, regclient, and syncthing), and Ubuntu (avahi).
Kaiser’s Coffins: The Casablanca Class
Post Syndicated from The History Guy: History Deserves to Be Remembered original https://www.youtube.com/watch?v=GVq56QRb9WQ
Команда „Равнис!“ смени вятъра на промяната
Post Syndicated from Емилия Милчева original https://www.toest.bg/komanda-ravnis-smeni-vyatura-na-promyanata/

Всичко тече, всичко се променя, само скоростта, с която в България всички се конвертират в поданици на новата власт, остава една и съща.
Така новите управляващи започват да изглеждат като страхотни реформатори, защото онова, за което са настоявали от години някои партии, за което са протестирали граждани и за което някои са плащали политическа цена, се случва от раз. Като по команда.
В режим на васалщина
Парадът на престрояването започна на третия ден след изборите с оттеглянето на и.ф. главен прокурор Борислав Сарафов от кабинета. Вече беше ясно, че Румен Радев и „Прогресивна България“ (ПБ) печелят власт, която няма да споделят с никого.
Сарафов обаче не излезе от прокуратурата. Причината е, че прокурорската колегия на настоящия Висш съдебен съвет (ВСС) с изтекъл отдавна мандат не образува дисциплинарно производство срещу него. Служебният правосъден министър Андрей Янкулов поиска уволнението на Сарафов на 31 март. Колегите на Сарафов си намериха основания да отхвърлят две от нарушенията на и.ф. главен прокурор с аргумент за изтекли давностни срокове и други като недоказани, макар и да не са проверени.
Министърът на правосъдието Николай Найденов, бивш главен секретар на Антикорупционната комисия и на ВСС в ерата на Сотир Цацаров като главен прокурор, не се ангажира дали ще атакува решението за Сарафов пред Върховния административен съд.
Националната служба за охрана свали охраната на лидерите на ГЕРБ и ДПС Бойко Борисов и на санкционирания за значима корупция от САЩ и Великобритания Делян Пеевски. Това беше сред исканията на „Продължаваме промяната“ (ПП) и „Демократична България“ (ДБ), но се осъществи при новото мнозинство, обявило го като „начало на процеса на нормализация в България“.
Пеевски и Борисов изгубиха специалния си статус да влизат скрито в парламента – с автомобил през вътрешния двор. Но мнозинството отхвърли предложението на ДБ за временна парламентарна комисия, която да разследва имуществото на лидера на ДПС. Самият той вече не е острие на групата си, а се подвизава като кротуващ на първия ред лидер, който изригва от време на време чрез социалните мрежи в някоя от придворните си медии… срещу ПП–ДБ (така ги вижда, с тире, макар да са официално разделени). А вместо него се изявяват депутатки от парламентарната група, същинска еманципация предвид предишните говорители.
Борисов също се е концентрирал върху Facebook комуникацията и по повод снетата охрана коментира в профила си:
Радвам се, че в българските служби вече няма данни за вътрешни и външни заплахи срещу мен. Радвам се, че от днес съм сигурен и свободен български гражданин.
Впрочем парламентарната група на ПБ в специална декларация се обърна към колегите си „отдясно“, за да каже, че „ние ще поправим това, което вие развалихте, и ще свършим онова, което вие не успяхте“.
Ние наистина работим в интерес на хората.
Неуспялата кандидат-депутатка на ДПС и бивша председателка на Българския олимпийски комитет (БОК) Стефка Костадинова връчи на избраната да оглави БОК Весела Лечева пълномощно да управлява до приключване на съдебните процедури. Всички искови молби срещу проведеното на 19 март 2025 г. общо събрание на БОК, които възпрепятстваха управлението на Лечева, са оттеглени.
Блокираният повече от година институционален конфликт в БОК пък внезапно се „разреши“, когато политическите пластове се пренаредиха. Но едва ли може да се очаква ревизия на извършеното от Костадинова за 19-те години нейно управление.
Даже ПФК „Левски“ изведнъж си намери нов собственик при новата власт – Атанас Бостанджиев, създател и управител на инвестиционната компания Gemcorp. През 2022 г. правителството на Кирил Петков (ПП) подписа меморандум с дружество, регистрирано от компанията Gemcorp Holdings Ltd.

Няколко месеца по-късно, след разразилия се скандал заради опасения в институционална непрозрачност, кабинетът „Петков“ в оставка прекрати споразумението, което беше в областта на енергетиката. Самият Бостанджиев твърди, че взел решението за „Левски“ за секунди.
В парламента ДПС подкрепя законопроекти на ПБ, но се въздържа при законодателни предложения на ПП и ДБ. Групата на Пеевски подкрепи предложението на ПБ за изменения на Закона за съдебната власт, свързани с критериите за подбор на членове на органите на съдебната власт и особено с избора на нов ВСС. На първо четене 52-рият парламент одобри мораториума върху назначенията в съдебната власт, при това без пререкания и в спокоен тон: ВСС с изтекъл мандат не можe да избира ръководители в съдебната система. Освен тримата големи – главния прокурор и председателите на върховните съдилища – съдебните кадровици няма да могат да избират и ръководители на районно и окръжно ниво.
Временната забрана идва, след като съдийската колегия на ВСС откри процедури за избор на председатели на 26 съдилища. Амбициите са до края на лятото, най-късно до есента, да има нов ВСС.
ДПС, но и ГЕРБ подкрепиха и двата законопроекта на ПБ за промени в Закона за защита на конкуренцията и Закона за защита на потребителите.
Много от тези действия обаче не преминават отвъд показната васалщина.
Цените не могат да козируват
Прокурори могат да се оттеглят, държавна охрана може да бъде сваляна, олигарси могат да се пренареждат, футболни клубове – да сменят собственици… Само цените отказват да изпълнят команда „Равнис!“. Защото икономиката не козирува, а когато го прави, следва национална катастрофа.
Пустите „несправедливи цени“ развалят имиджа, че държавата потегля към прогреса.
Гражданите очакват от новото управление да се справи с повишението на цените на хранителните стоки и услугите, но още не са проумели, че очакванията им са непосилни за изпълнение.
Какво направиха кабинетът и мнозинството на ПБ? Една дискусия, два законопроекта и обещание за спецзвено за цените, в което ще участват контролни и регулаторни органи.
ПБ предлага законодателни промени, с които държавата да удължи с още година режима срещу „необоснованото“ повишаване на цените и едновременно с това значително да разшири правомощията на регулаторите. Комисията за защита на конкуренцията (КЗК) ще може много по-лесно да разследва търговци за „прекомерно високи“ цени и „съвместно господстващо положение“, а Комисията за защита на потребителите (КЗП) – да налага двойно по-високи санкции. В законите вече влизат и нови понятия, например „справедлива цена“ и „прекомерно висока цена“, като държавата ще определя ориентир кое е допустима печалба и кое е потенциална спекула.
Под лозунга за „борба със спекулата“ управляващите на практика изграждат механизъм за постоянен контрол върху търговските вериги и цените. КЗК ще следи десетки нови „нелоялни практики“, а веригите ще подават ежедневно информация за цените на над 100 хранителни стоки.
В бъдеще държавата планира и пълна проследимост на храните – от производителя до щанда. Формално това се представя като защита на потребителите, но в действителност се разширява значително държавната намеса в пазара и се прехвърля все повече власт към регулатори, които ще решават коя цена е „справедлива“ и коя – подозрителна.

Но административният натиск върху „необосновано повишени цени“ води до още по-голямо изкривяване на пазара, който в България не е истински конкурентен, а олигополен. В ключови сектори, като горива, лекарства, някои хранителни стоки, мобилни услуги, пазарът е доминиран от малко на брой големи играчи. Така че дори държавата временно да потисне крайната цена, без повече конкуренция, по-добра логистика и по-къса верига между производител и магазин проблемът остава.
Идеята за „справедлива цена“ работи само ако има прозрачни разходи, силен контрол, бързо правосъдие и независими регулатори.
В България институции като КЗК и КЗП, чиито ръководства включват политически подбрани лоялни фигури, често са критикувани за бавни процедури и слаб контрол върху картелни споразумения. В такава среда, каквито и законодателни изменения да се приемат, законът няма да доведе до по-ниски цени, а до селективен натиск върху неудобни фирми и до чиновнически произвол, което ще създаде и корупционен риск.
Засега обаче правителството забавя темпото за мерките срещу високите цени – „за да се калибрират самите мерки“, както обясни вицепремиерът и министър на иновациите и растежа Александър Пулев. Той ще отговаря вече и за Българската банка за развитие (ББР), която се прехвърля под негова опека от Министерството на финансите. ББР разработва и инструмент за преференциални кредити за земеделски производители.
Кога и дали изобщо ще се усети ефектът от тези мерки, е трудно да се прогнозира. Законите още не са приети, а и никое правителство не може да контролира бъдещи енергийни шокове.
Разнопосочни сигнали
Въпреки реториката срещу еврото, която явно е служила за мотивиране на избиратели, ПБ подкрепи ратификацията на договора за присъединяване към Европейския механизъм за стабилност (ESM). На заседанието на парламентарната Бюджетна комисия срещу нея се възпротивиха само от „Възраждане“.
ESM е спасителният фонд на еврозоната, който предоставя нисколихвени заеми на държави във финансова криза. Гърция беше първата, която се възползва. Механизмът набира евтин ресурс от международните пазари и го отпуска при по-благоприятни условия от стандартното пазарно финансиране или от заемите от Международния валутен фонд. Срещу помощта държавите поемат ангажимент за реформи и по-строга фискална политика.
След присъединяването си България ще може да разчита на такова финансиране при евентуална криза, но едновременно с това ще участва в гарантирането на заемите за останалите страни от еврозоната.
Делът на България в капитала на Механизма ще бъде 8,68 млрд. евро, макар реалната вноска да е значително по-малка – близо 992 млн. евро, разсрочени за 12 години. Срещу това страната получава достъп до ESM, чийто общ капитал надхвърля 709 млрд. евро.
И така, България постепенно влиза в стария си политически режим на бързо пренареждане около новия център на властта.
А Румен Радев замина на първото си посещение като премиер, което беше в Германия по покана на канцлера Фридрих Мерц. Берлин е избран като първа голяма външнополитическа спирка на новата власт. На въпрос какво е посланието на България с тази визита, министърът на външните работи Велислава Петрова-Чамова отговори:
Ясно затвърждаване на силна европейския позиция и работа в рамките на Съюза. Искаме да виждаме Съюза все по-силен и по-силен.
Тези декларации обаче влизат в известно противоречие с действия на новата власт. На регионалната натовска среща на върха „Букурещката деветка“ (B9), на която присъстваха президентите на страните от Източния фланг на НАТО, България е представена от посланика си в Алианса Николай Милков (назначение на Румен Радев при един от служебните му кабинети). Другата държава, представена на такова ниско ниво, е била Унгария. Декларацията, приета на срещата на върха в Букурещ, съдържа ангажимент за продължаваща подкрепа за Украйна и увеличаване на средствата за отбрана от страните от НАТО.

Към подкрепата за Украйна Радев изразяваше определени резерви като президент, а два дни преди изборите на 19 април коментира в интервю за bTV:
През 2023 г. беше предложена инициатива ЕС да предостави един милион снаряда на Украйна и по това време, на ниво Съвет на ЕС, заявих, че България няма да се намесва в помощта на партньорите си за Украйна, но няма да участва в този процес. Същото важи и за въпроса за финансирането: който иска, може да плати. Ние няма да се намесваме или да налагаме вето, но не виждам смисъл ние да плащаме за тази помощ.
Новата власт изглежда силна, дисциплинирана и самоуверено налага дневния ред. Истинският тест ще дойде с решенията за бюджета за 2026 г. и съдебната система, цените и външнополитическите избори. Засега обаче прогресът прилича повече на добре изпълнена команда „Равнис!“, отколкото на нов политически курс.
Да не се посочваме!
Post Syndicated from Дарина Сарелска original https://www.toest.bg/da-ne-se-posochvame/

Почти всичко е различно в новия парламент. Румен Радев слезе от президентската ложа, мина за кратко през депутатските банки и все още всички свикваме да артикулираме новата му публична роля – премиерът Радев. Цяло поколение, израснало с Бойко Борисов, още не може да си обърне езика и да свикне, че премиер не е първото му име. Доживяхме да чуваме „госпожо президент“ в пленарната зала и ГЕРБ да чакат първо число на месеца, за да могат да вкарат своя законодателна инициатива от името на опозицията.
Изобщо, много неща се промениха в парламентарния пейзаж в последните дни и години. Даже и парламентът вече не е в парламента, а е настанен в бившия Партиен дом на БКП – като някакво преустроено Airbnb, наследено от номенклатурното ни минало и ремонтирано да приюти остатъците на дисфункционалната ни демократична република.
Но едно нещо си остава същото –
медиите са натикани в мазето на българския политически живот.
Буквално и метафорично. И макар това да не е заслуга на новото абсолютно мнозинство, нарекло себе си прогресивно, сега точно то има историческия шанс да се опита да поправи авторитарните щети, които бяха нанесени не просто на медиите, скроени по мярка на модела „Борисов–Пеевски“, а на самата идея за граждански контрол и институционална прозрачност.
Идеята, че журналистите трябва да имат свободен достъп до властта, за да я държат на светло и под публичен контрол, като ѝ задават неудобни въпроси и я показват извън режисираните усилия на нейните пиари, не е професионална или битова претенция на медиите, а един от фундаментите на модерната демокрация и на прогресивната идея за обществен контрол върху управляващите.
На теория Румен Радев и неговите функционери би трябвало да разбират това. Получили безпрецедентно обществено доверие на крилете на акумулирана нетърпимост към „кочината“ на арогантната и безконтролна власт и нарекли себе си „Прогресивна България“ (ПБ), в кампанията те говореха за прозрачност, за нов обществен договор, за граждански контрол, за възстановяване на доверието. Все едни и същи лишени от конкретика правилни клишета, с които се печелят избори. Сега идва сблъсъкът с реалността. И първите стъпки на новата власт по отношение на диалога с медиите, разбирайте гражданите, поне засега изглеждат неубедителни.
Още в първата си седмица в Партийния дом новоизбраният депутат Слави Василев (ПБ) обясни, че предстои медиите да бъдат сложени в ред. Сподели и своето виждане какъв да бъде този ред.
Няма да задавате въпроси, когато си искате
Когато имаме изявление пред медиите, ние идваме и ви казваме каквото имаме да ви казваме. Когато имаме време за въпроси, аз тогава ще посочвам няколко души, на които ще дам думата за въпроси.
Слави Василев, 7 май 2026 г.
Слави Василев е един от най-разпознаваемите публични говорители на Румен Радев и вече официално депутат от ПБ. Неговият личен публичен бранд беше изграден с активното съдействие на медиите, където той дълги години беше един от най-честите анализатори. Представяха го като политолог, без да е политолог и без да е ясна онази част от неговата кариера след завършването на международни отношения в Бостънския университет и магистратура по журналистика в СУ.
Според някои източници е работил в семейния бизнес на баща си – бизнесмена Васил Василев, приватизирал хладилния завод „Мраз“ по времето на Жан Виденов, а преди промените – кореспондент на БНТ в Париж и агент Паскал на Държавна сигурност, разкрит официално с проверка на Комисията по досиетата през 2009 г. Награден от президента Румен Радев с Почетен знак през 2024 г. Семейната биография на Слави Василев казва много, включително вероятно и за разбирането му за медиите.
От нея не става ясно обаче кога е станал политолог. Това за медиите, които той ще слага в ред, явно няма особено значение. За професионалните политолози, изглежда, има, защото в едно от последните си участия при Диана Найденова по „Нова нюз“ като уж независим наблюдател, на Слави Василев му се наложи да обяснява в какво професионално качество дефилира по студиата, след като седящият до него истински политолог – Георги Проданов, поиска да бъде представен като гинеколог с аргумента, че има интереси в тази област по същия начин, по който вероятно и събеседникът му има интереси към политологическата наука.
Ами как след тая случка да не се дразниш на непосочени въпроси. Дошли в случая не от журналистката в студиото. Защото медиите, които сега Василев ще слага в ред, преди това ред по ред се надпреварваха да го произвеждат в звезда, представяйки го като каквото си поиска и акуширайки така на него и на цяло едно професионално направление „независими“ анализатори, командировани от ясни, но непосочени политически интереси.
А в журналистиката, знаем, КОЙ говори, е точно толкова важно, колкото и КАКВО казва.
Но да не придиряме. Новият ред едва ли ще има проблем с тези подробности.
За да сме честни, в края на програмното си слово пред репортери бившият не-политолог, настоящ депутат, смекчи тона и каза все пак, че ще отговаря на всички въпроси. Сигурно имаше предвид посочените.
Хубаво е, че прословутото „няма да ходити където ришити, да шпионирати и да дразнити народнити придставитили“, казано в пика на протестите миналата година с характерната за Йордан Цонев и цяла Източна България вокална редукция, няма да присъства в парламента. Едва няколко дни трая радостта ни, че с неизбирането на Йордан Цонев в новото събрание ще се променят нравите, поне на повърхността, под формата на по-малко арогантно и просташко политическо говорене. И на сцената излезе друг обещаващ кадър, за да доразвие мисълта, че
не само няма да ходят където си поискат, но и няма да питат каквото си поискат.
А междувременно – не знам дали сте забелязали, – ама то питащи журналисти в парламента вече почти не ходят.
Отказаха ги опълченците на „Свободно слово“, ПИК и други проправителствени не-медии, които под прикритието на журналистически микрофони действат като ятаци в опазването я на своя „колега“ Делян Пеевски, я на г-н Борисов, защитавайки ги от въпросите на малцината тъжни и винаги за всичко виновни вестоносци, дошли в парламента да свършат някоя нормална журналистическа работа. Пред асансьора.
Как медиите се озоваха в мазето на историята?
Още с преместването си в Партийния дом – първо за кратко, после завинаги, депутатите се изкушиха да се върнат и към историческите особености на епохата, която той представлява. В сградата, строена да пази елита на БКП под червената петолъчка, зад дебели стени и заключени фоайета, през 2021-ва ключалката щракна окончателно и за акредитираните в парламента журналисти. Тогава се появиха табелите с надпис „Контролиран достъп“ в кулоарите и въженцата пред входовете на пленарната зала, които да разделят и бездруго малцината останали питащи от онези, пратени там от обществото уж за да отговарят.
Медиите бяха пратени в мазето и снабдени с телевизори, на които да си гледат заседанията. А при нужда биваха строявани пред асансьора, между заключените врати към офисите на народните представители, за да отразяват монолозите на Делян Пеевски, който в новата сграда се оказа далеч по-словоохотлив. Тогавашната парламентарна председателка Цвета Караянчева от ГЕРБ обясни, че правилата за достъп били „европейски“, и се оправда с предшественика си Георги Пирински (БСП), който така бил направил ремонта на сградата, че място за журналисти не останало.
Оттогава временното стана постоянно, а парламентът смени няколко председатели – Росен Желязков, Рая Назарян, Наталия Киселова, пак Рая Назарян, та до днес и Михаела Доцова, която се запомни с това, че макар и прогресивна, не била феминистка. Може би и медийните ѝ политики ще се окажат по-консервативни. Но да останем оптимисти. За ПБ има още време да се поправи, макар първите ѝ дни да не дадоха много надежда, поне по отношение на медиите.
Единство в многообразието
Прави впечатление, че след рекордния брой избори и както и да се завърташе прословутата „парламентарна рулетка“, мястото на медиите в „триъгълника на властта“ си остана все така незавидно.
Това, разбира се, е краят на един дълъг процес, започнал с кадрови „реподбор“, с назначаване на удобни медийни началници и с постепенно маргинализиране на неудобните студиа и платформи чрез партийните пиари, далеч извън пределите на парламента. Още преди физически да дръпнат въжето пред парламентарната журналистика, трите правителства на Борисов, с огромната медийна тежест на Пеевски и не без помощ вътре в гилдията, вече бяха успели до голяма степен да опразнят студиата от реални критични разговори.

Тактиката със столчетата действа по две линии: или опразваш столчетата на питащите, или демонстративно оставяш празно столчето на онзи, който трябва да отговаря. Така част от питащите се оказаха извън ефир, други се адаптираха към новото нормално, а най-инатливите останаха сами в студиото. Да си питат… Михаля.
А важните въпроси, по самата логика на либералнодемократичния модел на медиите, по принцип са насочени именно към властта.
Това прави още по-тревожна ситуацията с журналистиката на терен – там, където се случват новините. Заради ситуацията в студиата и овладените медии остава почти само репортажният жанр, където все още може да се разбере нещо изпод покривката на пропагандните наративи и опорните точки на партийните стратези.
Показателен е и фактът, че няколко изпуснати реплики пред неизчислена и непоканена камера в кулоарите на парламента в дните на големите протести миналата година (например прословутото „мършляци“ на Байрам Байрам) предизвикаха лавина от реакции в TikTok и се смятат за една от конкретните причини за безпрецедентно мощната обществена вълна, особено сред младите, която в крайна сметка свали управлението. В случая с Байрам в ролята на репортери влязоха млади административни сътрудници на опозицията, допуснати отвъд заключените за медиите врати, но това всъщност е работата на журналиста в кулоарите – да покаже ненапудреното лице на властта, когато тя не се е строила за пресконференция и не е редактирана от собствените си платени екипи. Това е и рискът за политиците.
В случая с парламентарния ресор кулоарите са мястото, където политическите репортери събират, трупат и анализират информация, работят с източници, изграждат контакти и доверие. При наплива на поне 131 непознати за обществото и медиите лица само от новата парламентарна група победител, професионалният интерес на журналистите да покажат хората зад плакатите е напълно разбираем. Разбираем е и интересът на пиар стратезите да ги скрият.
Скришно = безопасно
Практически всички парламенти след 49-тия работят вече в условията на този нов, значително по-ограничен медиен режим. Преместването в новата сграда беше през 2020-та и продължи около година. После депутатите пак се върнаха в познатото здание, през септември 2023 г. отново мигрираха към бившия Партиен дом и така до днес.
От първия момент на влизането в т.нар. нова сграда парламентарните журналисти започнаха системно да говорят за „затворените кулоари“, за невъзможността за неформален контакт с депутати, за монологичната комуникация, основно през пиари и официални брифинги, и най-вече за превръщането на парламентарните журналисти в „дръжки на микрофони“.
Журналисти като Полина Паунова например са говорили публично за отказа си да ходят в парламента, след като работата им се обезсмисли както от липсата на достъп, така и от внедрените „колеги“ кошаревци, акредитирани в парламента като партийни мажоретки. Това е сериозна промяна спрямо десетилетната практика в старата сграда на Народното събрание, където парламентарните репортери имаха възможност за пряк контакт с депутати, за неформални разговори или дори просто за наблюдение на процесите „зад кулисите“ на политиката. Благодарение именно на този достъп разбирахме за кафетата в кабинета на Пеевски по време на „сглобката“, сполучливо наречени от него по-късно „мазни“ и станали част от некролога на предишната „промяна“.

Според журналистически организации именно този тип достъп е ключов за събирането на независима информация и за работата на журналистите като четвърта власт. Тази власт е власт на думите, но и власт на достъпа. Можеш да покажеш само това, което си видял. Когато развържеш очите на Темида и завържеш тези на журналистиката, вече нищо не е истина и всичко е възможно. Журналистите работят с натрупвания, наблюдения, достъп до източници и бази данни, които да им осигуряват навременна и автентична информация, подбирана професионално и отговорно. За всичко друго вече има Facebook.
В подписка, обиколила няколко предишни парламента, и подновена в първия ден на новия парламент, ресорните журналисти сигнализират не само за лошите условия на труд, които се усещат като незаслужено наказание, но и за постепенното изпразване от съдържание на самата функция на парламентарната журналистика. Според тях сегашната организация на работа често води до абсурдни ситуации, при които репортерите са изолирани в „галерията за журналисти“ и изпускат събития от зоната пред пленарната зала. Освен ако не бъдат избирателно известени (нещо като „посочени“) от партийните пиари, че някой има да им казва нещо.
Ако те имат да питат някого или искат просто да видят народните избраници в естественото им публично местообитание, трябва да се примолят някой депутат да ги „вкара“. Разбирайте – да си поръча отразяване или едва ли не като опекун да ги пусне да си свършат работата или пък да ги насъска да гонят политически противник по стълбите. Според нуждата на властта и според морала на журналиста.
Снимащите екипи пък работят от т.нар. „кошари“ зад огромни колони, които закриват голяма част от залата и пречат на зрителите и читателите да виждат лицата на избраниците си, а не само гърбовете им.
Най-сериозният проблем според журналистите обаче остава затварянето на кулоарите. В подписката се казва директно, че така „парламентарната журналистика се свежда само до записване на изявления пред залата и опосредствана комуникация с ПР звената“, което „обезсмисля не само работата, но и принципа за запазване в тайна на източниците на информация“. Авторите посочват още, че ограниченията нарушават „духа на установената от десетилетия демократична практика на неформално общуване“.
Важно е, че журналистите не настояват за пълна липса на правила. Напротив, те самите предлагат компромисен модел: кулоарите да бъдат отворени за достъп, така че репортерите реално да могат да следят какво се случва в институцията, която отразяват, но без право да снимат.
Още по-важно е, че самите парламентарни журналисти признават нещо, което от години е публична тайна –
част от проблема действително идва от представители на т.нар. медии, които често функционират не като журналисти, а като политически мегафони.
Това е особено характерен за ерата „Пеевски“ модел, при който в публичното пространство се внедряват медийни мажоретки, чиято роля е не да задават въпроси, а да вдигат шум, да заглушават неудобните теми и да превръщат журналистиката в контролирано зрелище.
Проблемът е, че този модел работи като оръжие с двойна употреба. От една страна, подобни „репортери“ обслужват властта и помагат за дискредитирането на критичната журналистика. От друга, самото им поведение после се използва като аргумент срещу всички журналисти: че били агресивни, арогантни, непрофесионални и нарушавали реда. Което налага да ги заключим в коридора. Вместо да бъдат санкционирани конкретните злоупотреби.
Именно затова журналистите в подписката от години настояват, че проблемът може да бъде решен не чрез пълно затваряне на парламента, а чрез ясни, прозрачни и еднакво приложими правила за всички.
Засега без успех.
В последния отговор на парламента от далечната вече 2023 година им предлагат достъп до залата по график в посочени дни от седмицата, за да снимат депутатите и да си ги архивират за сезонно ползване. А за достъпа до кулоарите отказът е аргументиран със спазване на противопожарните изисквания на сградата. И така, за да не стават пожари, журналистите, акредитирани да отразяват и контролират властта, продължават да имат контрол само над нивото на звука на телевизорите в мазето, в което са затворени.
Новото парламентарно мнозинство, нарекло себе си прогресивно, би трябвало да разбира проблема на заключената и недостъпна за медиите власт – той далеч надхвърля удобството на журналистите или архитектурните ограничения и интериорния дизайн на сградата, на която вече не пише „Съединението прави силата“. Сега силата е в ръцете на Румен Радев и неговите функционери, заложили, между другото, разследващата журналистика като приоритет в предизборната си програма.
Bypassing On-Camera Age-Verification Checks
Post Syndicated from Bruce Schneier original https://www.schneier.com/blog/archives/2026/05/bypassing-on-camera-age-verification-checks.html
Some AI-based video age-verification checks can be fooled with a fake mustache.
Все още не пазим медицинските хеликоптери от дронове
Post Syndicated from Боян Юруков original https://yurukov.net/blog/2026/dronove-i-helikopteri-2/
Преди две години българската държава закупи първият си медицински хеликоптер. От тогава насам ги виждаме да прелитат редовно над големите градове и шумно в медиите се обявяват на кой спешен случай е било помогнато. Това, което се пропуска е, че въпросните хеликоптери се използват не по предназначение – да спасяват хора директно на мястото на инцидента, а като линейки между болниците. Също, че програмата закъснява значително със само половината машини купени, неизградени бази и отново рискуваме да загубим финансиране от 50 млн. евро.
За неефективността на сегашната ситуацията може да прочетете подробно в статията на Свободна Европа. Преди две години забелязах един значително по-дребен от описаното от тях детайл и го следя от тогава.
На страницата на Главна дирекция Гражданска въздухоплавателна администрация ще намерим списък с всички хеликоптерни площадки използвани от тази система. През януари бившият министър Караджов се похвалил, че са вече 18, а през март виждаме добавени още две – в Смолян и в Хасково. 9 от площадките са регистрирани преди повече от година, а едната в Русе беше спряна за известно време средата на миналата година. На картата долу ги виждате всички към днешна дата.

Нещо, което забелязах при пускането на първите хеликоптери в началото на 2024-та е, че на картата с ограниченията за летене на дронове на ГД ГВА няма ограничение за тези нови площадки за медицински хеликоптери. Има такива за други частни площадки, като тази на сградата Милениум в София, но не и на медицинската в съседство. През април 2024-та исках информация по ЗДОИ и ми отговориха, че е много сложно и всеки момент ще стане.
Миналата година през юли описах как все още няма такива ограничения за дронове, но тогава ми отговориха, че имало забавяне и но всъщност не пречило, че няма такова ограничение и нямало изискване за ограничение, за да могат да се използват площадките.
Към днешна дата площадките са вече 20 и само една има такова ограничение и то е от отдавна, тъй като площадката е регистрирана през 2022-ра. Нито една от първите въведени през 2024-та, за които ми казаха, че „всеки момент“ ще бъдат нанесени ограничения, няма такова две години по-късно. Извадки от картата на ГД ГВА към май 2026-та виждате в тази галерия:
Това е малък детайл около сагата с хеликоптерите, но предвид нездравия интерес на някои медии към тежки инциденти и катастрофи, нямам съмнение, че ще се сблъскаме със ситуация, в която дронове на папараци ще поставят в опасност медицинския персонал и пациентите. Доколкото тези ограничителни зони са инструкция определено са по-добра такава от сегашната ситуация „ами внимавайте“. Като цяло липсата на такива при условие, че признаха, че са нужни, добавя още един щрих към общата дезорганизация и забавяне на процеса и въздушното (не)спасяване в България.
How AI is transforming analytics at Grab
Post Syndicated from Grab Tech original https://engineering.grab.com/how-ai-is-transforming-analytics-at-grab.md
Introduction
At Grab, analytics sits close to almost every decision that matters. Our north star is the democratization of intelligence, ensuring that anyone making a business call has immediate access to trustworthy answers.
Over the last two years, model capability has crossed a threshold enabling this shift. Agents now do in minutes what used to take a week: preparing the data, writing queries, running deep analysis and surfacing insights for business opportunities, designing the experiment and interpreting the results, drafting the commentary that follows, and more. Our throughput is no longer rate-limited by how fast an individual can write code, build a deck, or run a deep-dive. It is rate-limited by how fast we can frame the right problem, judge the right answer, and influence the right decision.
As autonomy climbs, an analyst’s center of gravity moves from producing the artifact to owning the question and the call behind it, and the role evolves to become part builder, part advisor, part strategist, owning the loop rather than running it. That unlocks two things at once: work we already do, faster and at lower marginal cost, and work we could never staff before, sitting beside every product manager, business owner, and operator at the moment they decide.
The ladder
We were heavily inspired by Dan Shapiro’s framing of five levels for AI coding. We use a similar ladder that defines how much of the loop an agent should own and where human judgment stays for every analytics loop.
One distinction runs across every level: who owns the loop, and where human judgment is required.
| Level | What | Human role | Agent role |
|---|---|---|---|
| L2 | AI-Assisted | Owns and executes every step; uses AI to draft, suggest, summarize | Drafts SQL, suggests a visualization |
| L3 | Human plans, agent owns steps, human reviews | Frames the question, picks the metric, segment and comparison frame, reviews evidence, owns the recommendation | Discovers data, writes and runs the query, sanity checks, drafts the write-up, flags caveats |
| L4 | Agent plans, agent owns workflows, human reviews | Sets intent and guardrails; reviews at gates (anomaly, novel scope, sensitive cut); owns the stakeholder relationship and sign-off | Orchestrates discovery through query, analysis, validation, narrative and publish; runs validation, escalates exceptions |
| L5 | End-to-end autonomous | Sets objectives, quality bars, risk thresholds, escalation rules; reviews exceptions only | Detects anomalies and opportunities, runs the loop, surfaces insight, evolves the metric layer, context and skills |
Human judgment remains at every level, and autonomy never removes accountability. Humans own problem framing, canonical metric definitions, the causal story behind a move, business-case assumptions, the go/no-go, and the stakeholder relationship. A higher level means more of the mechanical loop sits with the agent and more human attention concentrates on the ambiguous, high-stakes work.
Making the climb
Five core capabilities move a workflow up the ladder. They also gate the climb in order: L3 needs execution and certified context, L4 needs gates and agentic review good enough that reviewing only at gates is honest, L5 needs a learning loop that closes.
- Execution: A stack that runs the loop end to end rather than a notebook/workflow a human drives.
- Knowledge: Metrics certified at the right grain, discoverable in our catalog, grounded in context an agent can read. Ambiguous definitions cause most analytics slop.
- Control: Repeatable expectations become mechanical checks, while human review handles what a rule cannot.
- Review and governance: Agents check their own output against the gates and escalate on defined triggers. We govern definitions, targets, risk and exceptions.
- Learning: When an agent fails the same way twice, we encode the fix into context documents, golden datasets, evals and gates.
What this looks like in practice
What follows is a set of explorations from the last two years. Some run in production today, while others are still teaching us where the limits are.
Loops that run end to end
Spartan is our end-to-end agentic analytics workflow, embedded across surface areas (like Slack), and most of its usage comes from people who are not analysts. On any given day, the Slack channel carries ads salespeople pulling spend breakdowns for a named merchant, campaign managers sizing audiences for a target segment, and country teams asking why a number moved week on week. All of it in plain business language.
Two requests from July best demonstrate how it works. A commercial manager asked why revenue fell in the Philippines mid-market segment in the last two weeks of June. Separately, a product manager asked for a summary of a frequency-cap experiment on the ads surface. Both arrived as natural language questions in Slack, then took entirely different routes through the system.
The router reads the first as a root-cause question and sends it down the diagnostic path. It loads the analysis framework for ads revenue, which is codified knowledge of how the metrics in that domain relate to each other, which dimensions are worth decomposing, and what counts as a meaningful move. Then it works through segment, market, and campaign type against certified metrics to isolate what changed. The second question never touches the data lake. The router reads it as an experiment question, selects the experiment skill, pulls the pre-computed scorecard and the test’s own metadata from our experiment platform, and summarizes the read rather than recomputing it. This is powered through more than 50 skills and 120 analysis frameworks that sit behind that routing decision. There is an index that tells the agent what to search, the context tells it how to query, and the framework tells it how to think. Because the frameworks are shared rather than living in an analyst’s head, the interpretation compounds instead of being re-derived every time someone asks.
The second example of such loops is Scarlet, which powers near self-healing pipelines (L4). When a pipeline fails, an agent runs the root-cause analysis, triages, and then either fixes it or hands it to the team that owns the upstream problem. It escalates when the failure sits outside its documented runbooks or the predefined gates fire.

Context that maintains itself
Context sets an agent’s ceiling. An agent that does not know a metric’s grain, its exclusions and its caveats will guess, and will produce outputs confidently and wrong with speed at scale.
Realizing the criticality of this, we have dedicated platform investment into this, as well as dedicated functional bandwidth to generate context docs. We maintain more than 5,000 certified tables and metrics, 4,000 context documents, and 2,000 golden records.

Context goes out of date faster than anyone maintains it by hand, so we build the maintenance into our workflows. We built ContextIQ, and its Context Lifecycle Manager, to treat context as something with a lifecycle rather than a document somebody wrote once. A newer skill of ours reads an instrumentation spec alongside the existing context, proposes the SQL changes that follow from it, and updates the context document in the same pass. We work the problem from the other direction too. When we categorize an agent failure in production, we patch the context document behind it.
Two analysts recently used our internal bots to understand how packaging fee is stored as a configuration. Having found the answer, the bot opened a merge request that committed both a certified-context table reference and a golden-dataset test case, so the next agent to ask the same question would find the answer already documented and the check already in place. One of the analysts spotted a false positive in it. The bot corrected itself and reopened the merge request. That is the learning capability working as designed, and it happened without anyone setting out to demonstrate it.
Loops that run unattended
The step from L3 to L4 is mostly the step from interactive to scheduled, and it is where we go down the path of autonomous execution, because no human is watching at the moment the work runs.
We already run automated metric and OKR commentaries in production, both for working and leadership teams. Our OKR bots push commentaries directly to stakeholders, and we have made this available to every team as a platform service. The agent reasons the way an analyst would: it reads the certified metric, judges whether the move is meaningful against standard deviation over six months and year over year, then decomposes it: which funnel stage moved, which operational metrics moved alongside it, which holiday or campaign falls in the window. It compares the seasonal pattern against the same transition a year earlier, so it can say a Songkran dip is amplified rather than merely expected. Importantly, it also scans across internal context to understand changes on the ground: delivery fee and incentive moves, merchant visibility shifts, experiments shipped in the same period. And it grounds all of that in our own context documents, which is what keeps the narrative about the business rather than generic model output. The analytics owner is tagged on every report, and edits sync back so corrections land in the system.

Analysts as builders
The clearest evidence that our center of gravity has moved is BriX, an internal portal we built and run ourselves.

The premise is to configure once, host everywhere. We configure a system prompt, a set of context files, a model, the MCP connections and an interface once, and what comes out is a purpose-built analytics surface for a particular team or job. Each one inherits certified data, permissions and reusable agent skills rather than being wired up from scratch, and it runs wherever the work already happens: in Slack, invoked from inside an IDE, or on a schedule with nobody watching. We have grown usage more than tenfold since September 2025, and every function at Grab now has users on it. Our aim is to put L3 workflows in the hands of people who are not advanced users.
We run it without a product manager, a technical program manager or a designer. Our data engineers own the product, the platform, the support queue and the eval loop, with Claude Design doing the interface work and the builders triaging their own bugs. In the first half of this year they shipped 31 production deployments, 283 merged requests and 60 features.
Two of our apps show the range:
-
Insights Lab is the general-purpose surface: a stakeholder asks for a metric, a breakdown or a root-cause in natural language, and the agent loads a specialist skill and answers off certified metrics rather than from memory.
-
We built Funnelytics so people would stop asking us to rebuild funnels. A funnel question used to mean an analyst writing the query and then assembling the view in Tableau or Power BI, and doing it again the next time someone wanted a slightly different path through the app. Now a stakeholder picks the events they care about and Funnelytics queries the raw event stream, builds the Sankey and funnel views, and writes the summary. If they cannot find the right instrumentation, which happens often on products still being redesigned, a live debugger lets them tap through the app on their own phone and watch the events fire.


Outside the portal, the same instinct shows up in smaller ways. Our analysts have been building more bespoke tools that enable better workflows for themselves and stakeholders.
The path forward
In February, 44% of the tickets our analysts closed were mechanical (data preparation, alerting, reporting); by June, that share fell to 30%. That capacity was redirected to other higher-leverage work. Building tools with AI to improve productivity increased ~4x.

Importantly, our cycle times reduced ~33%: median cycle time fell from 3 business days to 2, and the 75th percentile from 7 days to 6.

The sharpest version of this sits in a Slack channel where self-serve bots are enabled. In March, an analyst had to step into half of them; by May, it was under a quarter. The share answered with no human involvement rose from 53% to 67% for metric questions, 63% to 90% for data pulls, and 50% to 81% for SQL requests. Just under three in four of the threads were started by someone outside the analytics team, and 85% of them got a first response inside a minute. Nearly every thread is logged as a ticket on the team’s board, and roughly two-thirds of the data exploration tickets on that board now arrive through the channel rather than through an analyst. Even on the conservative assumption of 1-2 days queuing each, that is 230 to 470 business days of stakeholder waiting that did not happen, and 233 questions that never entered anyone’s backlog.
None of these arrived on a roadmap. They came from analysts who saw a loop worth automating and built it, which is why the climb is uneven. These have been strong proof points for us to believe our investments are working as many of these workflows are starting to operate at scale. We will keep experimenting and iterating, and we expect to get a fair amount of it wrong. An analyst who owns a loop, sets its quality bar and reviews its exceptions is doing a different job from one who answers questions. Most of our team is somewhere in that transition today, and we truly believe it is changing what analytics is at Grab.
Join us
Grab is a leading superapp in Southeast Asia, operating across the deliveries, mobility, and digital financial services sectors. Serving over 900 cities in eight Southeast Asian countries: Cambodia, Indonesia, Malaysia, Myanmar, the Philippines, Singapore, Thailand, and Vietnam. Grab enables millions of people every day to order food or groceries, send packages, hail a ride or taxi, pay for online purchases or access services such as lending and insurance, all through a single app. We operate supermarkets in Malaysia under Jaya Grocer and Everrise, which enables us to bring the convenience of on-demand grocery delivery to more consumers in the country. As part of our financial services offerings, we also provide digital banking services through GXS Bank in Singapore and GXBank in Malaysia. Grab was founded in 2012 with the mission to drive Southeast Asia forward by creating economic empowerment for everyone. Grab strives to serve a triple bottom line. We aim to simultaneously deliver financial performance for our shareholders and have a positive social impact, which includes economic empowerment for millions of people in the region, while mitigating our environmental footprint.
Powered by technology and driven by heart, our mission is to drive Southeast Asia forward by creating economic empowerment for everyone. If this mission speaks to you, join our team today!
Scaling developer experience: How we improved Android Studio in a large monorepo
Post Syndicated from Grab Tech original https://engineering.grab.com/how-we-improved-android-studio-in-large-monorepo
Introduction
Long integrated development environment (IDE) sync/indexing times can quietly erode developer productivity, making code navigation sluggish, spiking memory usage, and slowing down Jetpack Compose preview updates, turning the IDE into a bottleneck rather than a helpful tool. For Android engineers working in a large monorepo, this was a daily reality. In this post, we will share how we built a custom Focus plugin that dramatically reduced Android Studio sync times by leveraging our existing investments, such as the Gradle-to-Bazel migration workflow.
Our Android monorepo at scale
The Grab passenger Android (PAX) repository contains roughly 2,000 Android modules and 11,000,000 lines of code. As the repository grows year over year, a natural consequence of scaling our superapp, which combines ride-hailing, food delivery, payments, and more into a single application, is the increase in time required to build and sync the project.
What makes this growth especially pronounced today is the shift in how code gets written. Development assisted by artificial intelligence (AI) has enabled engineers to produce more code faster than before. At the same time, non-engineering personnel such as designers, product managers, and other non-technical contributors have started making changes to low-risk features under engineering provision. Together, these two forces are pushing the codebase to grow at its fastest rate ever, which in turn compounds the pressure on every developer’s IDE and build tooling to keep up.
We previously adopted Bazel to speed up incremental and cached builds, but build time was only part of the picture. We intentionally kept Android Studio syncing with Gradle, so developers get fast Bazel builds while the IDE uses the standard Gradle toolchain, thereby preserving compatibility and avoiding the friction and tooling gaps of full Bazel IDE integration. This trade-off gives us the best of both worlds, but it also means Gradle sync remains a first-class concern. Even though Bazel handles the builds, Android Studio still depends on Gradle sync to import the project model that powers IDE features such as code navigation, autocompletion, and error highlighting. That sync process, which evaluates every module declared in settings.gradle, had quietly become a major pain point.
The problem
Over time, we noticed a growing number of reports stating that IDE syncs were too slow and memory-intensive. A single full sync could take more than 35 minutes on a cold start. The pain was especially acute after a rebase or branch checkout. Since these operations often modify build configuration files, Android Studio would detect the changes and trigger a full re-sync just to restore basic IDE functionality.
We conducted a developer experience survey to quantify the issue. From 55 responses, the results painted a clearer picture:
- 76% said long sync times significantly or very significantly impacted their productivity.
- 60% were unsatisfied or very unsatisfied with IDE sync time.
- 47% were unsatisfied or very unsatisfied with Compose preview update speed.
- 82% said they would benefit from the option to exclude modules from syncing.

The survey validated our anecdotal feedback: developers were frustrated. Slow, sluggish IDE performance was eroding productivity and disrupting flow. We set out to determine whether developers really needed to load every module to work on just one.
Investigation
Root cause
The root cause was straightforward: module count. With roughly 2,000 modules in the codebase, a full sync required Gradle to configure every single module, including parsing build files, resolving dependencies, and generating IDE project models, regardless of whether the developer actually needed them. A developer working on the Payments feature still had to wait for Gradle to process Food, Transport, Mart, and every other module. The configuration time and resulting memory consumption grew roughly in proportion to module count, and the count kept rising.
Exploring community solutions
We looked at existing solutions in the Android community. One promising candidate was the Focus plugin from Dropbox. Here’s how the Focus plugin works:
- The developer runs a Gradle command to focus on a specific module (e.g.
./gradlew :module:focus). - The Gradle task calculates the dependency graph, generates a separate focused settings file, and writes a
.focusmarker file that tells Gradle to use it instead of the full project settings. - The developer syncs the IDE, which now only configures the focused modules.
This approach works because instead of syncing the entire repository, the developer only configures the module they are working on, along with its required dependencies. Everything else is excluded.
For example, if you are working on the Payments module, only Payments and its dependency chain get loaded. Food, Transport, and Mart modules are excluded entirely.

Depending on the size of the target module, this approach can cut the number of loaded modules by 50% or more, especially with a well-structured modularization architecture. We wanted to adopt this approach and saw an opportunity to improve it further by leveraging our existing Gradle-to-Bazel migration workflow.
Our solution: Building a custom Focus plugin
The Dropbox Focus plugin was a great starting point, but it introduced several friction points in our setup:
- We would need to move all non-essential declarations from
settings.gradleinto a separatesettings-all.gradlefile. - We would need guardrails to ensure new modules are declared in the correct file.
- Most critically, focusing on a module requires running a Gradle task (e.g.,
./gradlew :module:focus), which itself goes through Gradle’s configuration phase and adds a noticeable delay before a developer can even start an IDE sync.
We set out to address each of these issues.
Challenge 1: Eliminating the configuration phase
The Dropbox Focus plugin recalculates the dependency graph every time a developer runs the focus command. This means every Focus operation pays the cost of Gradle’s configuration phase, parsing every build.gradle file in the project to resolve the full dependency tree.
We realized we already had this information. Our build infrastructure includes Grazel, which migrates Gradle build files to their Bazel equivalents via a migrateToBazel task, and our Continuous Integration (CI) validations ensure that both are aligned. This task already traverses the full dependency graph for migration purposes.
Our insight: generate a dependency graph as a static file during migrateToBazel and reuse it for focus operations.

By pre-computing and persisting the dependency graph, we skip the Gradle configuration phase entirely. The focus operation becomes a fast, local file lookup instead of a lengthy Gradle computation. The developer simply selects their module and syncs.
The dependency graph is stored as a JSON file, which is lightweight and fast to read. The trade-off is that it requires a migrateToBazel run to stay up-to-date. When creating a new module or changing module dependencies, developers need to rerun ./gradlew migrateToBazel to regenerate the graph. We accepted this because developers already had to run migrateToBazel before merging to master (to ensure Bazel files are current). The graph stays fresh as part of their existing workflow, and no extra step is required.
Challenge 2: Minimizing developer friction with a Gradle plugin
We did not want to introduce a process that adds cognitive load. Migrating all module declarations to a new settings.gradle file would require every team to change their workflow. Instead, we adopted a more elegant approach.
The include shadow trick
In a standard Android project, modules are declared in settings.gradle using the include function:
include 'app'
include 'payment'
include 'food'
// ... hundreds more
The include function is part of the Gradle Settings API. In Groovy, you can define a local closure variable with the same name as an existing method. Since Groovy resolves local variables before delegate methods, the closure effectively shadows the original include method and all subsequent include calls in the script invoke the closure instead.
We created a custom Gradle plugin with a focusInclude function that decides whether to include or exclude a module based on the current focus configuration. By adding just three lines to the top of settings.gradle, we redirect all include calls through our plugin:
// After applying the focus plugin in the buildscript block
def include = { module ->
com.grab.focus.GradleFocusPluginKt.focusInclude(settings, module)
}
include 'app'
include 'payment'
include 'food'
The rest of the file remains untouched. Every existing include call now passes through focusInclude, which checks whether the module should be loaded based on the developer’s focus selection. If no focus is active, all modules are included as usual with zero behavior change.
This approach meant zero migration effort for feature teams. The settings.gradle file stays as-is, and the plugin integrates seamlessly.
Early implementation: Property-based focus
In the early days of this plugin’s development, the way to specify focus modules was via a Gradle property in the command line:
./gradlew build -Pmodules-to-sync=":app,:payment"
The focusInclude function reads this Gradle property. If present, it activates focus mode and only includes the specified modules (and their transitive dependencies resolved from the graph file). If absent, all modules are included normally.
Challenge 3: Making it seamless with an Android Studio plugin

Manually passing Gradle properties on the command line was functional but not ideal. We needed a better developer experience. The Gradle property approach opened the door to IDE integration; this led to an Android Studio plugin (an IntelliJ plugin) being built that automates the entire flow through a user interface (UI):
- Module selection: The plugin presents a list of all available modules, parsed from the pre-computed dependency graph file. Developers select which modules they want to work on.
- Dependency count indicator: Since we have the full dependency graph, the plugin displays how many transitive dependencies each module requires. This gives developers immediate visibility into module “weight” and encourages teams to keep their modules lean.
- Automatic argument injection: The plugin uses two IntelliJ Gradle extension points to inject the
-Pmodules-to-syncproperty: aGradleResolverExtensionthat adds the argument during project sync, and aGradleTaskManagerExtensionthat injects it before any Gradle task execution (including Compose preview builds). The developer just clicks sync; the plugin handles the rest.

Beyond the core functionality, we added several usability enhancements to the plugin:
- Indirect focus indicator: Modules that will be synced as a transitive dependency of a focused module are marked as “indirectly focused,” giving developers visibility into exactly what will be loaded.
- Search and filtering: With hundreds of modules, finding the right one matters. The plugin supports fuzzy matching and regular expression (regex) search to quickly narrow down the module list.
- Sort by dependency count: Modules can be sorted by name or by dependency count, making it easy to spot the heaviest modules at a glance.
- Status bar widget: A persistent “Focus: X/Y” indicator in the IDE status bar shows how many modules are currently focused out of the total, with a click-through to the Focus tool window.
- State persistence: The developer’s focus selection is saved and restored between IDE sessions, so they do not need to reselect modules after restarting Android Studio.
Encouraging lean module architecture
An unplanned but welcome side effect of the focus plugin was that it nudged teams toward a cleaner module architecture. With dependency counts now visible in the IDE, developers became more aware of their module’s size, which in turn encouraged a clearer separation between interface and implementation.
- Interface module (e.g.,
:payment-api): Contains only the public API definitions (interfaces, data classes, contracts). This is the module that other teams depend on. Because it has no implementation details, it carries very few transitive dependencies. - Implementation module (e.g.,
:payment-impl): Contains the actual implementation of those interfaces. This module typically has a larger dependency footprint, but only the owning team needs to load it.
By depending on the interface module rather than the implementation module, teams avoid pulling in a large tree of transitive dependencies. This keeps the dependency count low for consumers, which directly translates to faster focus sync times and leaner Compose preview builds.
How we measure
Instrumentation: The PAX IDE plugin
The PAX IDE plugin is a mandatory install for every PAX Android engineer in Grab. This gives us a consistent, organization-wide data collection baseline without requiring any opt-in. The plugin registers four IntelliJ Platform listeners that automatically capture metrics on every relevant IDE event:
| IntelliJ API | What it tracks |
|---|---|
GradleSyncListenerWithRoot |
Sync time |
ProjectIndexingActivityHistoryListener |
Indexing time |
ProjectIndexingActivityHistoryListener |
Scanning time |
PerformanceListener |
IDE freezes |
Each metric event is enriched with shared context captured at event time: IDE version and build number, heap memory usage, focus state (enabled/disabled, number of focused modules), Operating System (OS) info, and project name. This means every data point is automatically segmented by whether focus mode was active, which is exactly what we need for before/after comparisons.
What each metric captures
-
Sync time: We implement
GradleSyncListenerWithRootand calculate wall-clock duration fromsyncStarted()tosyncSucceeded()orsyncFailed(). This covers the full Gradle configuration, dependency resolution, and IDE model generation phase. -
Indexing time:
ProjectIndexingActivityHistoryListener.onFinishedDumbIndexing()provides aProjectDumbIndexingHistoryobject. We readhistory.times.totalUpdatingTime, the time IntelliJ spent updating its symbol index after the sync. -
Scanning time:
ProjectIndexingActivityHistoryListener.onFinishedScanning()provides aProjectScanningHistoryobject. We readhistory.times.totalUpdatingTimeandhistory.times.scanningType(full vs. partial) for additional segmentation. -
IDE freezes:
PerformanceListener.uiFreezeFinished(durationMs)is called by the platform whenever the Event Dispatch Thread (EDT) is blocked long enough to be classified as a freeze. The duration arrives directly as a parameter. -
IDE memory usage: Captured at the moment of each metric event via
Runtime.getRuntime(). Captures used memory (totalMemory – freeMemory) and max heap. Attached to every event as part of the shared context. -
IDE version: From
ApplicationInfo.getInstance(), captures version name, full version string, and build number. Also attached to every event, enabling per-version breakdowns.
Survey
After each successful sync, the plugin triggers an in-IDE notification prompting developers to fill out a short survey. The notification respects developer attention; it uses a weekly reset cycle with a “Don’t remind me again” option that appears after the second prompt. These periodic qualitative check-ins complement the telemetry data and help surface pain points that raw numbers alone may not capture.
Establishing the baseline
The plugin collects focus_enabled on every event. Therefore, baseline numbers come directly from the same pipeline; they are simply the subset of metric events where focus_enabled = false. This means the before/after comparison is an apples-to-apples measurement from the same instrumentation, same engineers, same codebase, with no separate manual benchmarking required.
Results
Compose preview build
The focus approach also improved Jetpack Compose preview builds. Compose previews require a module build to render, and with fewer modules loaded, the IDE has significantly less indexing overhead. A typical UI module has just 5–10 local dependencies. With the focus plugin, a developer configures only those modules instead of all 2,000. Developers consistently report that Compose previews feel significantly more responsive in focus mode.
As a best practice, we recommend that teams separate their UI into dedicated modules containing only composable functions and minimal dependencies. This maximizes the benefit of focus mode for preview builds.
Memory usage
In focus mode, excluded modules are not configured by Gradle and not indexed by the IDE, significantly reducing both build-process and editor memory consumption from approximately 10 GB down to 2 GB. This frees up memory for Bazel builds and other tooling. Developers reported fewer freezes, faster code navigation, and more responsive autocompletion.
Sync time
We observed a dramatic reduction in per-sync IDE sync time. A full sync previously took around 26 minutes at the 95th percentile (p95). With the Focus plugin, sync times dropped to under 2 minutes for typical feature work. The p95 remains higher for modules with deep dependency trees, but in practice, sync times vary significantly depending on module size. A typical UI module with 5 to 10 dependencies syncs in roughly 2 minutes, while heavier modules with deep dependency graphs take longer. For most developers working on focused feature work, the improvement is dramatic.
Tradeoffs
Focus mode does come with limitations. IDE features like “Find Usages” and cross-module refactoring only cover the focused modules; developers occasionally need to expand their focus set or temporarily switch to a full sync for repo-wide operations. In practice, this has been a minor inconvenience compared to the productivity gained.
Conclusion
IDE sync time is one of those problems that slowly degrades the developer experience without a single dramatic breaking point.
Our solution combined three key ideas:
-
Reuse existing infrastructure: By generating the dependency graph during
migrateToBazel, we eliminated the expensive Gradle configuration phase without adding a new build step. -
Minimize adoption friction: The Groovy include shadow trick let us integrate the focus mechanism with just three lines of code, requiring zero changes from feature teams.
-
Invest in user experience (UX): The Android Studio plugin turned a manual, error-prone process into a one-click operation with useful module health indicators.
The results spoke for themselves. IDE sync time dropped from 35 minutes to under 1 minute (depending on module size). IDE memory consumption fell from 10 GB down to 2 GB, freeing up headroom for Bazel builds to run alongside the IDE. Compose preview update times improved significantly due to reduced indexing overhead. And adoption was frictionless. Engineers went from a manual, multi-step process to a simple Select → Focus → Sync flow with native IntelliJ integration.
As the codebase continues to grow, accelerated by AI-assisted development and a broader contributor base, we are also investing in guardrails to keep quality in check. An area we are actively exploring is using skills.md to guide AI coding agents when they generate new modules, encoding architectural conventions and dependency rules directly into the context that AI tools consume. This helps ensure that AI-generated code lands in the right shape from the start, rather than accumulating structural debt that compounds the sync and build problems described above.
Join us
Grab is a leading superapp in Southeast Asia, operating across the deliveries, mobility, and digital financial services sectors, serving over 900 cities in eight Southeast Asian countries: Cambodia, Indonesia, Malaysia, Myanmar, the Philippines, Singapore, Thailand, and Vietnam. Grab enables millions of people every day to order food or groceries, send packages, hail a ride or taxi, pay for online purchases or access services such as lending and insurance, all through a single app. We operate supermarkets in Malaysia under Jaya Grocer and Everrise, which enables us to bring the convenience of on-demand grocery delivery to more consumers in the country. As part of our financial services offerings, we also provide digital banking services through GXS Bank in Singapore and GXBank in Malaysia. Grab was founded in 2012 with the mission to drive Southeast Asia forward by creating economic empowerment for everyone. Grab strives to serve a triple bottom line. We aim to simultaneously deliver financial performance for our shareholders and have a positive social impact, which includes economic empowerment for millions of people in the region, while mitigating our environmental footprint.
Powered by technology and driven by heart, our mission is to drive Southeast Asia forward by creating economic empowerment for everyone. If this mission speaks to you, join our team today!
Comic for 2026.05.15 – Rich
Post Syndicated from Explosm.net original https://explosm.net/comics/rich-2
New Cyanide and Happiness Comic
Speedrun
Post Syndicated from xkcd.com original https://xkcd.com/3246/

Amazon Bedrock introduces new advanced prompt optimization and migration tool
Post Syndicated from Channy Yun (윤석찬) original https://aws.amazon.com/blogs/aws/amazon-bedrock-introduces-new-advanced-prompt-optimization-and-migration-tool/
Today, we’re announcing Amazon Bedrock Advanced Prompt Optimization, a new tool that you can use to optimize your prompts for any model on Amazon Bedrock, while comparing your original prompts to optimized prompts across up to 5 models simultaneously. With the new prompt optimization, you can migrate to a new model or improve performance from your current model. You can test them to make sure they see no regressions on known use cases and also improve on underperforming tasks.

The new prompt optimizer takes in your prompt template, example user inputs for the variable values, ground truth answers, and an evaluation metric to use as a guide. You can even use this with multimodal user inputs – it supports png, jpg, and pdf as inputs to your prompt templates so you can optimize prompts for tasks like document and image analysis.
You can also provide an AWS Lambda function, LLM-as-a-judge rubric, or a short natural language description to guide the optimization. The prompt optimizer works in a metric-driven feedback loop to optimize the prompt and resulting model responses for the evaluation metric, and outputs the original and final prompt templates with evaluation scores, cost estimates, and latency.
Bedrock Advanced Prompt Optimization in action
To get started with the new prompt optimization, choose Create prompt optimization on the Advanced Prompt Optimization page of Amazon Bedrock console.

Pick up to 5 inference models for which to optimize your prompts. You can use this if you are migrating to a new model or just want to get better performance on their current model. If you’re changing models, you can select your current model as a baseline and up to 4 other models. If you aren’t changing models, then just select your current model to see before and after optimization.

You should prepare your prompt templates in JSONL format with example user data, ground truth answers, and an evaluation metric or rewriting guidance. For .jsonl files, each JSON object must be on a single line.
{
"version": "bedrock-2026-05-14", // required; Fixed value
"templateId": "string", // required
"promptTemplate": "string", // required
"steeringCriteria": ["string"], // optional
"customEvaluationMetricLabel": "string", // required if customLLMJConfig or evaluationMetricLambdaArn is used
"customLLMJConfig": { // optional
"customLLMJPrompt": "string", // required if customLLMJConfig present
"customLLMJModelId": "string" // required if customLLMJConfig present
},
"evaluationMetricLambdaArn": "string", // optional
"evaluationSamples": [ // required
{
"inputVariables": [ // required
{
"variableName1": "string",
"variableName2": "string"
}
],
"referenceResponse": "string" // optional
"inputVariablesMultimodal": [ // optional
{
"Arbitrary_Name": { // required for your multimodal variable.
"type": "string", // choose from "PDF" or "IMAGE". Acceptable filetypes for IMAGE = png, jpg,
"s3Uri": "string" // input the S3 path of the file
}
]
}
]
}
You can upload files directly or import prompt templates from Amazon Simple Storage Service (Amazon S3) and set an S3 output location where prompt optimization results and evaluation data will be stored. Then, choose Create optimization.
Amazon Bedrock automatically sends your prompt templates and example data with optional ground truth to your inference models, evaluates the responses with your evaluation metric, then rewrites the prompt in a feedback loop to optimize it for your inference models. You’ll see evaluation results based on your provided metric and your final optimized prompts.

As you noted, you can evaluate prompt quality in three ways: a Lambda function with your own Python scoring logic, LLM-as-a-Judge with a custom rubric, or natural-language steering criteria. You can just choose one per prompt template, but can do multiple prompt templates in a job, so they can use a different method for each prompt template if they want.
- Lambda function — If you have a concrete metric (accuracy, F1, execution accuracy, structured-JSON match, etc.), you can deploy a Lambda function containing your custom scoring logic and configure
evaluationMetricS3Urifield of the prompt template. Inside the Lambda, the core is a compute_score implementation that programmatically compares model outputs against reference responses. - LLM-as-a-Judge — If your task is open-ended (summarization, generation, reasoning explanations) and you want a rubric-based score, you can configure the S3 config file in the
customLLMJConfigfield of the prompt template to define named metrics with structured instructions and a rating scale. A Bedrock judge model evaluates each prompt-response pair and returns a score with reasoning. The default model is Claude Sonnet 4.6 and you can also select your own from a list of judge models. - Steering criteria — If you know the qualities you want (brand voice, format, safety constraints) but don’t want to author a full judge prompt, you can define criteria in the input dataset through the
steeringCriteriaarray of the prompt template. Instead of structured metrics with rating scales, you provide free-form natural language criteria that the LLM judge evaluates holistically. If you use this option, then a default LLM-as-a-judge prompt will evaluate the responses and incorporate your steering criteria into the judge prompt. The judge model in this case is Anthropic Claude Sonnet 4.6.
To learn more about how to use the advanced prompt optimization and migration, visit the advanced prompt optimization in Bedrock guide and the sample codes in Github.
Now available
Amazon Bedrock Advanced Prompt Optimization is available today in US East (N. Virginia, Ohio), US West (Oregon), Asia Pacific (Mumbai, Seoul, Singapore, Sydney, Tokyo), Canada (Central), Europe (Frankfurt, Ireland, London, Zurich), and South America (São Paulo) Regions. You are charged based on the Bedrock model-inference tokens consumed during optimization, at the same per-token rates as regular Bedrock inference. To learn more, visit the Amazon Bedrock pricing page.
Give the advanced prompt optimization a try in the Amazon Bedrock console or with CreateAdvancedPromptOptimizationJob API today and send feedback to AWS re:Post for Amazon Bedrock or through your usual AWS Support contacts.
— Channy
How the Fight Over Data Centers Could Spur Dissidence
Post Syndicated from The Atlantic original https://www.youtube.com/shorts/eWD3eVi6W9c
Fortinet FortiGate FG-40F Review Leveling-up Firewall Testing
Post Syndicated from Patrick Kennedy original https://www.servethehome.com/fortinet-fortigate-fg-40f-review-leveling-up-firewall-testing/
We review the Fortinet FortiGate FG-40F, taking it apart, testing its firewall capabilities, and more to see what makes it so popular
The post Fortinet FortiGate FG-40F Review Leveling-up Firewall Testing appeared first on ServeTheHome.
Storage for the AI Factory Era A Discussion
Post Syndicated from Patrick Kennedy original https://www.servethehome.com/storage-for-the-ai-factory-era-solidigm-nvidia-an-interview/
A key takeaway from a recent discussion you may have seen is that storage in the AI Factory Era is looking very different
The post Storage for the AI Factory Era A Discussion appeared first on ServeTheHome.
Regional routing for AWS access portals: Implementing custom vanity domains for IAM Identity Center
Post Syndicated from Georgi Baghdasaryan original https://aws.amazon.com/blogs/security/regional-routing-for-aws-access-portals-implementing-custom-vanity-domains-for-iam-identity-center/
AWS IAM Identity Center provides a web-based access portal that gives your workforce a single place to view their AWS accounts and applications. With the recent launch of IAM Identity Center multi-Region replication, customers can replicate their IAM Identity Center instance across multiple AWS Regions to improve resilience and reduce latency for a globally distributed workforce. As a result, users have a dedicated access portal URL in each Region where Identity Center is replicated, and where administrators need a consistent way to manage these portals to ensure that each user reaches the right one.
This post walks you through building a custom vanity domain (for example, aws.mycompany.com) that serves as a single, memorable entry point for access to IAM Identity Center through the AWS Management Console. The solution uses latency-based routing to automatically redirect users to their nearest healthy access portal endpoint and provides a mechanism to trigger failovers when a Regional Identity Center instance, or the broader AWS Region, is impaired. Because this solution operates outside of Identity Center—at the DNS and load balancer layer—users are transparently redirected to the appropriate Regional access portal URL. Note that the vanity domain itself will not appear in the browser’s address bar.
This guide is structured in three progressive phases: a single-Region redirect, multi-Region latency routing, and automatic health-based failover. You can adopt each phase independently, depending on your organization’s needs.
Note: While this guide focuses on IAM Identity Center access portal endpoints, the same approach using Amazon Route 53 latency-based routing, Application Load Balancer (ALB) redirects, and Amazon Application Recovery Controller (ARC) Region switch can be applied to build a custom vanity domain and intelligent routing layer for any other HTTP endpoint type.
Background
IAM Identity Center supports multiple access portal URL formats that resolve to the same web portal. The following table summarizes the supported formats in the standard AWS (classic) partition, along with their capabilities:
| Format | IPv4 | Dual-stack | Multi-Region* | Example |
| https://{directoryId}.awsapps.com/start | Yes | No | No | https://d-1234567890.awsapps.com/start |
| https://{alias}.awsapps.com/start | Yes | No | No | https://mycompany.awsapps.com/start |
| https://{idcInstanceId}.{region}.portal.amazonaws.com | Yes | No | Yes | https://ssoins-1234567890.us-west-2.portal.amazonaws.com |
| https://{idcInstanceId}.portal.{region}.app.aws ★ | Yes | Yes | Yes | https://ssoins-1234567890.portal.us-west-2.app.aws |
* Each Regional URL resolves only to its own Region’s portal instance and doesn’t fail over to another Region. Multi-Region here means the URL format is available in every Region where IAM Identity Center is replicated. To route users across Regions dynamically, use the vanity domain approach described in this post.
Note: The ★ highlighted row (https://{idcInstanceId}.portal.{region}.app.aws) is the recommended URL format. It supports both dual-stack (IPv4 and IPv6) and IAM Identity Center multi-Region replication. The
awsapps.comformats aren’t always available in newer Regions and don’t support multi-Region capabilities. In additional replicated Regions, the custom alias isn’t supported, and theawsapps.comparent domain isn’t available.
Working with multiple Regional endpoints
As you expand your IAM Identity Center footprint through multi-Region replication, each replicated Region provides a dedicated access portal URL—directing your users to the low-latency entry point closest to their location. A user connecting from Europe and one connecting from Asia Pacific each benefit from their respective Regional endpoint. To deliver the best experience, organizations need a consistent, centrally managed way to direct users to the correct Regional destination; there are a few common approaches you can use to achieve this.
Customers typically start with a single Regional endpoint, which is straightforward to configure, but users in distant Regions experience higher latency, and a Regional incident can affect all users regardless of location. Others maintain per-Region bookmarks or configuration, which gives each user population the right endpoint but requires ongoing IT coordination and clear communication to users.
Custom vanity domains give you full control over DNS routing, health checks, and failover of your access portal connections; all behind a single, brand-aligned domain name (for example, aws.mycompany.com) that users access. A vanity domain makes this start URL memorable and consistent for users, regardless of the underlying IAM Identity Center configuration – a single address to remember and share, compared to maintaining a separate bookmark for each Regional endpoint or managing a growing list of application tiles in your external identity provider. The rest of this guide walks you through how to deploy this solution step by step.
Solution overview
The solution builds a lightweight routing and redirect layer in front of the IAM Identity Center access portal Regional endpoints. The architecture has the following components:
- AWS IAM Identity Center – Your existing Identity Center instance
- Amazon Route 53 – Manages your vanity domain’s hosted zone, latency-based routing policy, and health checks
- AWS Certificate Manager (ACM) – Issues and automatically renews TLS certificates for your vanity domain in each Region
- Application Load Balancer (ALB) – Handles HTTP and HTTPS traffic, issuing 302 redirects to the appropriate Regional access portal endpoint
- Amazon Application Recovery Controller (ARC) Region switch – Orchestrates Regional failovers by controlling Route 53 health check states, so traffic is automatically shifted away from an unhealthy Region
This guide is structured in three progressive phases. You can adopt each phase incrementally based on your needs:
- Phase 1: Sets up the vanity domain with a redirect to a single Regional access portal endpoint. Suitable for organizations with a single-Region Identity Center deployment.
- Phase 2: Extends Phase 1 across multiple Regions with latency-based routing, so users are automatically directed to the nearest Regional endpoint. Requires IAM Identity Center multi-Region replication.
- Phase 3: Adds an ARC Region switch for managed Regional failover. Without Phase 3, a Regional impairment requires manual DNS updates to redirect traffic. ARC automates this with rehearsable, controlled failover plans.
Figure 1: Solution architecture for custom vanity domain routing with IAM Identity Center.
When a user navigates to aws.mycompany.com, the following happens:
- Route 53 evaluates the latency records and routes traffic to the ALB in the lowest-latency healthy Region.
- The ALB terminates TLS using an ACM-managed certificate and issues a 302 redirect to the corresponding Regional Identity Center access portal URL.
- The user’s browser follows the redirect and loads the access portal directly. Subsequent authentication traffic flows between the browser and AWS—the ALB isn’t in the path.
If you’ve implemented Phase 3, ARC controls Route 53 health check states for each Region. With this configuration, you can stop routing traffic to any Region considered unhealthy.
Prerequisites
Before you begin to build the solution, ensure you have the following in place:
- An existing top-level domain (TLD) (for example,
mycompany.com). - An AWS IAM Identity Center organization instance configured.
- For Phases 2 and 3, you need IAM Identity Center multi-Region replication configured with at least two Regions. See Setting up IAM Identity Center multi-Region replication for instructions.
- AWS Identity and Access Management (IAM) permissions on a dedicated networking or shared services account in your organization to manage Route 53, ACM, Amazon Elastic Compute Cloud (Amazon EC2), ALB (phase 1 and 2), and ARC (phase 3).
Phase 1: Redirect to a single predefined access portal endpoint
In this phase, you create the foundational infrastructure: a Route 53 hosted zone, an ACM-managed TLS certificate, and an internet-facing ALB that issues a 302 redirect to your Regional access portal URL. By the end, users who navigate to aws.mycompany.com will be seamlessly redirected to your Identity Center portal.
Create a Route 53 hosted zone for your vanity domain
The hosted zone holds the DNS records that control how aws.mycompany.com resolves. If your top-level domain (mycompany.com) is already registered in Route 53, you create a subdomain hosted zone. If it’s registered with another registrar, you create a public hosted zone and configure name server (NS) delegation manually.
- In the AWS Management Console, navigate to Route 53 and choose Hosted zones, then Create hosted zone.
- Enter your vanity domain in the Domain name field (for example,
aws.mycompany.com). - Select Public hosted zone as the type, then choose Create hosted zone.
- Note the four NS records that Route 53 creates for the new hosted zone. You will need these in the next step.
Figure 2: Route 53 hosted zone details
Delegate your subdomain from the parent domain
To make Route 53 authoritative for aws.mycompany.com, you must add an NS record in the parent zone (mycompany.com) pointing to the name servers of the new hosted zone.
- If mycompany.com is hosted in Route 53: Open the
mycompany.comhosted zone, choose Create record, set the record name toaws, the type to NS, and paste the four NS values from the previous step. Choose Create records. - If
mycompany.comis hosted elsewhere: Sign in to your registrar’s DNS management console and add an NS record foraws.mycompany.comusing the four name server values from the previous step.
Note: DNS propagation for NS delegation can take up to 48 hours, though it typically completes within a few minutes for Route 53-to-Route 53 delegation.
Figure 3: Create a NS record type to delegate your subdomain from the parent domain
Request an ACM certificate
Your ALB requires a TLS certificate for aws.mycompany.com to serve HTTPS traffic. ACM provides free public certificates with automatic renewal.
- Go to the Certificate Manager console in the primary Region of IAM Identity Center (for example, us-east-2) and choose Request a certificate.
- Select Request a public certificate and choose Next.
- Enter your domain name (for example,
aws.mycompany.com). Choose Add another name to this certificate and enter your Regional sub-domain (for example,us-east-2.aws.mycompany.com). - Leave other options as defaults (Disable export, DNS validation – recommended, and key algorithm – RSA 2048) and choose Request.
- In the certificate details page, choose Create records in Route 53. ACM will automatically add the validation CNAME records to your hosted zone. The certificate status changes to Issued within a few minutes.
Figure 4: Request an ACM certificate for your domain
Create a security group for Identity Center ALB
The security group needs to allow inbound HTTP and HTTPS traffic for both IPv4 and IPv6 from the public internet to make the load balancer reachable.
- Go to the Amazon EC2 console, navigate to Security Groups, and choose Create security group.
- Enter a Name (for example,
identitycenter-global-domain-alb-sg-us-east-2) and Description. Add four rules by choosing Add Rule under Inbound Rules.- Set Type to HTTP, and Source to Anywhere-IPv4 (0.0.0.0/0) and to Anywhere-IPv6 (::/0).
- Set Type to HTTPS, and Source to Anywhere-IPv4 (0.0.0.0/0) and to Anywhere-IPv6 (::/0).
- Choose Add Rule under Outbound Rules and set Type to All traffic and Source to Anywhere-IPv6 (::/0).
- Choose Create security group.
Figure 5: ALB security group rules
Create an ALB with an HTTP and HTTPS redirect rule
The ALB is the component that performs the actual redirect to your IAM Identity Center access portal URL. The ALB listener accepts HTTPS requests on port 443 and responds with a 302 redirect to the appropriate Regional Identity Center access portal endpoint.
- Go to the Amazon EC2 console, navigate to Load Balancers, and choose Create load balancer. Select Application Load Balancer.
- Enter a name for your ALB (for example,
identitycenter-redirect-alb). - Configure basic settings: Set the scheme to Internet-facing, IP address type to Dualstack (or IPv4 if IPv6 isn’t supported by your virtual private cloud (VPC)), and select at least two Availability Zones. Ensure that the load balancer is operating in a VPC and subnets that are internet-facing.
- Under Security Groups choose the Security Group created in the previous step.
- Configure an HTTP listener: Add a listener on port 80 (HTTP) with Redirect to URL option. Choose URL parts and set Protocol to HTTPS, Port to 443, and status code to 302 (Found).
Figure 6: Add an HTTP listener during ALB creation
- Configure an HTTPS listener: Add a listener on port 443 (HTTPS) with No pre-routing action (default) and Redirect to URL options. Choose Full URL and set the URL to your Regional Identity Center access portal endpoint (For example,
https://ssoins-1234567890.portal.<your-region>.app.aws, for this blog the region is us-east-1). Set status code to 302 (Found).
Figure 7: Add an HTTPS listener
- Under Default SSL/TLS certificate, select the ACM certificate you created in Step 3.
Note: Make sure to select 302 – Found as the Status code. Selecting 301 – Permanently moved will result in browser caching the redirect URL which will prevent failovers from working correctly until the cache expires.
Create Regional Route 53 records pointing to your ALB
Create a DNS record in your hosted zone that resolves <your-region>.aws.mycompany.com to your ALB.
- Open your Route 53 hosted zone for
aws.mycompany.comand choose Create record. - Set the record name to the AWS Region name (For example:
us-east-2) and the record type to A. - Toggle Alias and in the drop down menu Route traffic to, select the alias target to Alias to Application and Classic Load Balancer, select your Region (For example:
us-east-2), and select your ALB from the dropdown list. - Leave routing policy as Simple routing, and select the Region (For example:
us-east-2) and choose Create records. - Repeat steps 1 through 4 to create AAAA record types.
Figure 8: Route 53 record with simple routing policy
Add latency-based routing configurations
Finally, create a DNS record in your hosted zone that resolves aws.mycompany.com to your Regional Route 53 record.
- Open your Route 53 hosted zone for
aws.mycompany.comand choose Create record. - Keep the subdomain name for this record as
empty, soaws.mycompany.comis the fully qualified record and set the record type to A. - Enable alias: Set the Route traffic to Alias to another record in this hosted zone, and select the hosted zone you created earlier (
us-east-2.aws.mycompany.com). - Set Routing Policy to Latency and select the corresponding Region (
us-east-2in this example). - Add a clear name for the Record ID, such as
us-east-2--ipv4as a differentiator and choose Create records. - Repeat the steps 1 through 5 to create AAAA record types with
us-east-2--ipv6as the record ID.
Figure 9: Route 53 record with latency-based routing
Test the configuration by navigating to https://aws.mycompany.com in a browser. You should be redirected to your Identity Center access portal. You can also validate using:
curl -I https://aws.mycompany.com
Expected response:
HTTP/2 302
location: https://ssoins-1234567890.portal.<your-region>.app.aws
Tip: To deploy Phase 1 automatically, download the CloudFormation template from the Deploying with CloudFormation section below.
Phase 2: Automatically route to the nearest Regional access portal endpoint
Phase 2 extends the solution to support IAM Identity Center multi-Region replication by deploying an ALB in each replicated Region and configuring Route 53 latency-based routing. Users are automatically directed to the access portal in the Region that has the lowest network latency from their location, which matches the active-active behavior of the Identity Center access portal itself.
Request ACM certificates in each additional Region
Repeat the steps from Request an ACM Certificate for each additional Region (for example, us-west-2) where you’ve replicated IAM Identity Center.
Create a security group and an ALB in each additional Region
Repeat the steps from Create a security group for Identity Center ALB and Create an ALB with an HTTP and HTTPS redirect rule in each additional Region. In each ALB’s redirect rule, set the target URL to the access portal endpoint for that specific Region. For example:
- us-east-2 ALB redirects to
https://ssoins-1234567890.portal.us-east-2.app.aws - us-west-2 ALB redirects to
https://ssoins-1234567890.portal.us.west-2.app.aws
Create Regional and latency Route 53 records for the additional Region
For each additional Region where you’ve deployed an ALB and replicated Identity Center, create Regional and latency A and AAAA records as outlined in Create Regional Route 53 records pointing to your ALB and Add latency-based routing configurations.
Tip: To deploy Phase 2 automatically, download the CloudFormation template from the following Deploying with CloudFormation section.
Phase 3: Regional failover using ARC Region switch
Phase 3 introduces Amazon Application Recovery Controller (ARC) Region switch, a fully managed capability that you can use to plan, practice, and orchestrate Regional failovers with confidence. ARC Region switch vends Route 53 health checks directly as part of a Region switch plan. You attach these generated health checks to your Route 53 latency records, and ARC controls their healthy or unhealthy state during plan execution. You can further extend the solution to include custom automation triggered by Amazon CloudWatch alarms or synthetic canaries to update routing control state.
We recommend creating your ARC Region switch plan in the primary Region of your IAM Identity Center for ease of discovery.
Create an active-active instance of ARC Region switch plan
Create an ARC Region switch plan that will orchestrate failovers between your IAM Identity Center Regions and auto-generate the Route 53 health checks you will reference in the next step.
- Open the Application Recovery Controller console and choose Region switch in the navigation pane. Select Create Region Switch Plan.
- Enter a Plan name (for example,
idc-access-portal-failover) and an optional description. Choose Active/Active for Multi-Region recovery approach. Select the Regions where IAM Identity Center is replicated ,including the primary Region. - In the Execution Permission section, enter the Amazon Resource Name (ARN) of the IAM role that ARC will use to update Route 53 health check states during plan execution. If you don’t have an existing role, choose Create a new role to have ARC create one automatically. See AWS Managed Policy: AmazonApplicationRecoveryControllerRegionSwitchPlanExecutionPolicy for information about required permissions.
- Choose Create Plan and proceed to Build workflows. Enter optional descriptions and choose Save and continue.
Figure 10: Region switch plan
- Set the Workflow type to Activate and set the Region to the corresponding Region (
us-east-2orus-west-2). Within each workflow, choose Add step/Run in Sequence. Choose an execution block to Amazon Route 53 health check execution blog under Networking. - Choose Add and edit. Enter a Step name (for example,
Activate Route53 Record Set). - Set the Hosted zone to the hosted zone ID for your
aws.mycompany.comdomain, and set the Record name toaws.mycompany.com. - Expand Record set identifiers. Choose Add record set identifier and enter a unique identifier for the record set (for example,
us-east-2--ipv4andus-east2--ipv6) and select your Region. Add two record set identifiers (A and AAAA records) for each of your Regions. - Choose Save step.
- Repeat steps 5 and 6 for Deactivate and choose Save the plan.
Figure 11: Workflow builder
- Choose Save workflows.
- Select the newly created plan and choose the Monitoring tab. Note the IDs of the health checks created.
Figure 12: IAM Identity Center access portal plan
Update Route 53 record sets to reference ARC-managed health checks
Associate the ARC-generated health check IDs with the latency-based A and AAAA records you created in Phase 1 and 2. Route 53 uses these health checks—which are now controlled by ARC—to determine which Regions are eligible for DNS resolution. Route 53 still uses latency to choose from the healthy Regions.
-
- Go to the Route 53 console and choose Hosted zones.
- Select the hosted zone for
aws.mycompany.com. - Find the latency-based A record for us-east-2 that you created in Phase 2, and choose Edit record.
- In the Health check section, enable Associate with a health check. In the Health check ID dropdown, select the ARC-generated health check for us-east-2 that you noted at the end of the preceding procedure. Note: Ignore the warning This health check ID doesn’t belong to this AWS account. Make sure you have copied it accurately to use it.
- Choose Save changes.
- Repeat steps 3, 4, and 5 for A and AAAA records for each of your IAM Identity Center Regions.
Figure 13: Update Route53 record sets
Validate the setup by performing a failover
Validate the end-to-end configuration by executing a controlled failover. Because latency-based routing will always resolve aws.mycompany.com to us-east-2 for users in the primary geography, deactivating us-east-2 is the most direct way to confirm that Route 53 correctly fails over to us-west-2.
-
- Before executing the failover, confirm that
aws.mycompany.comis resolving to the us-east-2:
curl -I https://aws.mycompany.com
Expected: A record pointing to the us-east-2 access portal URL (for example,https://ssoins-1234567890.portal.us-east-2.app.aws:443/). - Go to the Amazon Application Recovery Controller console. In the left navigation pane, choose Region switch.
- Select your Region switch plan (
idc-access-portal-failover) to open the plan details page. - Choose Execute recovery.
- On the Execute plan page, select us-east-2 as the Region to fail out of.
- Select the Deactivate action and choose Start execution. ARC sets the us-east-2 health check to unhealthy. Route 53 stops resolving
aws.mycompany.comto the us-east-2 ALB and routes traffic to us-west-2 instead. - After a few seconds, confirm the failover has taken effect:
curl -I https://aws.mycompany.com
Expected: 302 redirect to the us-west-2 IAM Identity Center access portal URL - To fail back, choose Execute plan again. Select us-east-2, select the Activate action and choose Start execution. ARC marks the us-east-2 health check healthy and Route 53 resumes routing traffic to that Region.
- Before executing the failover, confirm that
Tip: To deploy Phase 3 automatically, download the CloudFormation template from the Deploying with CloudFormation section that follows.
Deploying with CloudFormation
As an alternative to the manual console steps described previously, we provide CloudFormation templates that you can download and deploy for each phase. Each template is self-contained and parameterized, so you only need to provide your environment-specific values (such as your vanity domain name, VPC, and subnet IDs). Download the templates from the following links:
- Phase 1 – Single-Region redirect: phase1-single-region-redirect.yaml
- Phase 2 – Multi-Region latency-based routing: phase2-multi-region-latency.yaml
- Phase 3 – ARC Region switch failover: phase3-arc-region-switch.yaml
To deploy a template, navigate to the AWS CloudFormation console, choose Create stack, select Upload a template file, and upload the downloaded YAML file. Follow the prompts to provide parameter values and create the stack. For Phase 2, deploy the template once in each additional Region.
Deploy all phases with a single scrip
As an alternative to deploying each CloudFormation template individually, you can use the provided deploy.sh bash script to deploy all three phases in sequence. The script automates stack creation across your primary and additional Region. To get started, download the deployment package, then unzip the file into a local directory:
Before running the script, open the deploy.sh file and update the following required parameters with your environment-specific values:
- TLD – Your top-level domain (for example,
mycompany.com) - TLD_HOSTED_ZONE_ID – The Route 53 hosted zone ID for your top-level domain
- IDC_SUBDOMAIN – The Identity Center subdomain name (for example,
aws) - IDC_INSTANCE_ID – Your IAM Identity Center instance ID (for example,
ssoins-1234567890) - PRIMARY_REGION – The primary Region for your Identity Center instance (for example,
us-east-2) - ADDITIONAL_REGIONS – The additional Region for multi-Region replication (for example,
us-west-2)
After updating the configuration, run the deployment script:
The script deploys Phase 1 (single-Region redirect), Phase 2 (multi-Region latency-based routing), and Phase 3 (ARC Region switch failover) in order. Monitor the terminal output for stack creation progress and any errors.
After completing the setup, you can integrate the vanity URL (for example, aws.mycompany.com) directly into your identity provider, such as Okta or Microsoft Entra ID, as a bookmark application or a chiclet URL. By configuring the vanity URL as the bookmark target, users who launch the application from their identity provider dashboard are always redirected to the nearest IAM Identity Center access portal endpoint through latency-based routing. If a Regional impairment occurs and a failover is necessary, administrators can execute an ARC Region switch to deactivate the impaired Region, and users will automatically be redirected to the active Identity Center endpoint without any change to the bookmark URL or end-user experience.
Conclusion
In this post, you learned how to build a custom vanity domain for an AWS IAM Identity Center access portal using Amazon Route 53, AWS Certificate Manager, Application Load Balancer, and an Amazon Application Recovery Controller (ARC) Region switch. The three-phase approach lets you start with a single-Region redirect, progressively add latency-based routing as your IAM Identity Center footprint grows with multi-Region replication, and then introduce an ARC Region switch to gain fully managed, rehearsable Regional failover.
For more information about IAM Identity Center multi-Region replication, see the IAM Identity Center User Guide. For more resilience patterns, visit the AWS Architecture Blog posts about Resilience. If you have feedback about this post, submit comments in the Comments section below. If you have questions about this post, contact AWS Support.
Resources
- IAM Identity Center User Guide – Multi-Region Replication
- Amazon Route 53 – Latency-Based Routing
- Amazon Application Recovery Controller – Region switch
- AWS Certificate Manager – Requesting a Public Certificate
CVE-2026-0265: Authentication Bypass in Palo Alto Networks PAN-OS
Post Syndicated from Rapid7 original https://www.rapid7.com/blog/post/etr-cve-2026-0265-authentication-bypass-in-palo-alto-networks-pan-os
Overview
On May 13, 2026, Palo Alto Networks published a security advisory for CVE-2026-0265, a signature verification vulnerability that facilitates authentication bypass on PAN-OS, the operating system that most Palo Alto Networks firewalls run. This vulnerability allows a remote unauthenticated attacker with network access to bypass authentication when Cloud Authentication Service (CAS) is enabled and attached to a login interface; the vulnerable configuration is non-default but common. CVE-2026-0265 affects PAN-OS on PA-Series and VM-Series firewalls, as well as Panorama (virtual and M-Series) appliances. Cloud NGFW and Prisma Access are not affected.
Palo Alto Networks assigned CVE-2026-0265 a “High” 7.2 CVSS score. The advisory states that the vulnerability’s severity scoring depends on interface exposure; according to the vendor, risk is highest for unrestricted management interfaces equipped with CAS, while other login portals, such as GlobalProtect gateways, are lower risk. However, the researcher who reported the vulnerability, Harsh Jaiswal of HacktronAI, publicly disputed the vendor’s severity rating. Jaiswal stated on social media that the vulnerability advisory misrepresents the criticality of the bug and the affected components; according to the HacktronAI research team, they successfully exploited CVE-2026-0265 to bypass authentication controls on multiple corporations’ GlobalProtect portals and establish VPN access. Jaiswal stated that internet-facing components are affected, and HacktronAI plans to disclose full technical details the week of May 18.
As of May 14, Palo Alto Networks has not confirmed exploitation in-the-wild of CVE-2026-0265, and there is no public proof-of-concept exploit available. However, given the researcher’s statements about the practical exploitability of this vulnerability and the pending disclosure of technical details, this will likely evolve. PAN-OS software has been a frequent target for threat actors; on May 6, 2026, the PAN-OS vulnerability CVE-2026-0300 was added to CISA’s Known Exploited Vulnerabilities (KEV) catalog. Patches for many affected version streams were published on May 13, and the remaining patches are expected on May 28, 2026.
Mitigation guidance
Organizations running PA-Series or VM-Series firewalls, or Panorama (virtual and M-Series) appliances, with Cloud Authentication Service (CAS) enabled should upgrade to a fixed version on an emergency basis. Patches are partially available, with many version stream fixes published on May 13 and additional version stream coverage expected on May 28. The following table outlines the affected and fixed versions:
|
PAN-OS version |
Affected |
Fixed |
|---|---|---|
|
12.1 |
< 12.1.4-h5 < 12.1.7 |
>= 12.1.4-h5 >= 12.1.7 (ETA: 05/28) |
|
11.2 |
< 11.2.4-h17 < 11.2.7-h13 < 11.2.10-h6 < 11.2.12 |
>= 11.2.4-h17 (ETA: 05/28) >= 11.2.7-h13 >= 11.2.10-h6 >= 11.2.12 (ETA: 05/28) |
|
11.1 |
< 11.1.4-h33 < 11.1.6-h32 < 11.1.7-h6 < 11.1.10-h25 < 11.1.13-h5 < 11.1.15 |
>= 11.1.4-h33 >= 11.1.6-h32 >= 11.1.7-h6 (ETA: 05/28) >= 11.1.10-h25 >= 11.1.13-h5 >= 11.1.15 (ETA: 05/28) |
|
10.2 |
< 10.2.7-h34 < 10.2.10-h36 < 10.2.13-h21 < 10.2.16-h7 < 10.2.18-h6 |
>= 10.2.7-h34 (ETA: 05/28) >= 10.2.10-h36 >= 10.2.13-h21 (ETA: 05/28) >= 10.2.16-h7 (ETA: 05/28) >= 10.2.18-h6 |
|
Cloud NGFW |
Not affected |
N/A |
|
Prisma Access |
Not affected |
N/A |
Older unsupported PAN-OS versions should be upgraded to a supported fixed version.
To determine if an environment is vulnerable, the official advisory provides instructions to verify whether an authentication profile using CAS is enabled and attached to a login interface. Due to discrepancies in the information shared by the vendor and reporting researchers, Rapid7 advises patching instead of implementing workarounds, wherever possible.
For the latest official mitigation guidance, please refer to the vendor advisory.
Rapid7 customers
Exposure Command, InsightVM, and Nexpose customers can assess exposure to CVE-2026-0265 with authenticated checks expected to be available in the May 15th content release.
Updates
- May 14, 2026: Initial publication.
























