Гласовете на Америка – брой 16

Post Syndicated from Йоанна Елми original https://www.toest.bg/glasovete-na-amerika-broy-16/

Гласовете на Америка – брой 16

Светът гледа футбол, а европейските футболни фенове се сблъскват с американската действителност. Социалните мрежи изобилстват от мнения, отзиви, възмущения, възхищения. Как е възможно американците да не седят на пейки и по маси в заведенията с часове? Защо порциите са толкова големи? Защо има толкова много вериги за бързо хранене? Защо има петдесет вида безалкохолно в супермаркета? Защо градският транспорт е в такова състояние, ако изобщо го има? 

Разбира се, това е само едната страна на монетата. Другата е радост от гостоприемството на американците, удивление от красотата и разнообразието на природата, удобствата, добрите ресторанти и вкусната храна. Една от най-големите шеги, родена от Световното, е свързана със соса ранч – млечен сос със сол, чесън, лук, черен пипер и билки, популярен в САЩ. Европейците са обсебени от него до такава степен, че Американската служба за транспортна безопасност (TSA) публикува шеговити напомняния в социалните мрежи, че ранчът е течност, която следва да се опакова в чекирания багаж.  

Гласовете на Америка – брой 16
„0 дни от последния инцидент с ранч на летището“

От една страна, сблъсъкът с реалността има положително влияние върху европейците, които виждат, че въпреки апокалиптичните заглавия Америка все още е Америка, а не Русия например; от друга, 80% от хотелиерите, участвали в проучване на пазара, заявяват, че има по-малко заети места от очакваното. Данните са от доклад на Американската асоциация на хотелиерите, в който се казва още, че 65–70% от респондентите смятат визовите пречки и геополитическата ситуация за решаващи за ниския международен интерес. 

На този фон Фреди (Freddy), футболен фен от Германия (самоличността на акаунта не е потвърдена) получава официална покана от Белия дом. Причината е, че публикува свръхположителни отзиви за престоя си в САЩ по време на Световното. Специалният президентски пратеник по въпросите на американския туризъм, американската изключителност и ценностите (истинска позиция в администрацията на президента Тръмп) Ник Адамс потвърди поканата към Фреди. 

Коя е истинската Америка? 

Това е въпросът, който си задават много американци и европейци не само в контекста на Световното първенство по футбол, но и седмици преди отбелязването на 250-годишнината от независимостта на САЩ на 4 юли. Като част от честванията пред Белия дом се проведе бой на UFC (Ultimate Fighting Championship) – най-голямата организация за смесени бойни изкуства (ММА) в света. Айзък Саул, редактор в една от популярните центристки независими медии Tangle пише

Някои журналисти вляво не успяха да се въздържат от цитиране на френски теоретици от XX в. в опитите си да обяснят защо хората харесват зрелища с насилие. Нуждата да се посяга към академични теоретични рамки, за да разберем шоуто на една бойна вечер на UFC, показва колко чуждо и далечно е подобно нещо за част от коментиралите.

В същото време анализатори отдясно се опитват да внушат, че „истинската Америка“ е изградена изцяло от карикатурни каубои и хора, които се наливат с енергийни напитки, а после настояват, че подобно събитие (с 16% обществено одобрение) по някакъв начин представлява най-чистото въплъщение на същността на страната.

После други леви журналисти пък настояват, че именно това – един глупав, пълен с насилие и конспиративно мислене спектакъл – всъщност е „истинската Америка“, а междувременно автори отдясно настояват, че това не е истинската Америка, защото сме станали твърде изнежени, твърде образовани и твърде чувствителни.

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

Някои хора харесват бойни спортове, като UFC или бокс, защото човешкият вид е склонен към насилие и в продължение на хилядолетия сме се обезглавявали за какво ли не – от дребни престъпления до териториални завоевания. Естественият подбор е благоприятствал както хората, способни да си сътрудничат, така и онези, които са можели успешно да се съревновават за храна, територия и партньори, а насилието е било ефикасен начин за придобиване на тези ресурси.

Не мисля, че е чак толкова сложно. Спортовете с насилие – UFC, боксът, хокеят, американският футбол, ръгбито, кечът, са здравословен отдушник за най-първичните ни инстинкти в рамките на едно цивилизовано общество. Човек може да смята, че разрешаването на спорове чрез насилие е нещо лошо, но същевременно и да разбира контролираната агресия като форма на развлечение през 2026 г.

Разбира се, някои хора не обичат да гледат как други човешки същества си разбиват лицата и се окървавяват. И това е напълно нормално. Америка! Плурализъм! Ако страната ни (или дори човешкият вид) се състоеше единствено от груби, агресивни типове, които обичат да мачкат физиономии и да решават проблемите си с насилие, то Америка би била ужасно място за живот.

Неизличимо американски ли са някои културни елементи на UFC и неговата фенска общност? Разбира се. Но представлява ли UFC самата Америка в нейната същност? Очевидно не. Това е част от нашата култура, едно от многото неща, които изграждат цялото. Не разбирам защо е необходимо да му се приписва някакво по-грандиозно значение.

UFC Свобода 250“ се проведе на рождения ден на президента – 14 юни. Според анализ в The Conversation решението на Доналд Тръмп да организира галавечер на UFC на територията на Белия дом е символичен политически жест отвъд спортното събитие. В  статията се казва още, че Тръмп използва бойния спорт като визуален език на сила, доминантност и лидерство, превръщайки Белия дом в сцена, на която президентът не просто представлява нацията, а се стреми да се отъждестви с нея като неин рицар. Авторът проследява и по-широка промяна в американската политическа култура – от идеала за президента като слуга на народа към образа на лидера като победител и силен мъж.

В този контекст UFC се разглежда като културен символ на съревнование, физическа йерархия и хипермъжественост, който резонира с част от електоралната коалиция на Тръмп (ММА спортовете от години носят същия символен заряд в неоконсервативното движение). Спорът около събитието надхвърля самия спорт и поставя въпроса кой има правото да определя националните символи и ценности – политическият лидер, който претендира да ги въплъщава, или гражданите, независимо от дефинициите им за нация, народ и принадлежност. 

От насилието като зрелище към насилието като реалност

На 17 юни Съединените щати и Иран подписаха меморандум за разбирателство, който трябва да сложи край на продължилата над 100 дни война между двете държави. Споразумението предвижда възстановяване на корабоплаването през Ормузкия проток, постепенно премахване на американските ограничения върху иранския петролен износ, размразяване на ирански активи и участие на САЩ във фонд за възстановяване на Иран на стойност 300 млрд. долара. В замяна Техеран потвърждава, че няма да разработва ядрено оръжие, докато двете страни продължават преговорите за по-трайно уреждане на отношенията си.

Споразумението предизвика критики както отляво, така и отдясно в американския политически спектър. Леви коментатори го определиха като стратегическо поражение за администрацията на Доналд Тръмп, твърдейки, че Иран е излязъл от конфликта с малко отстъпки и с укрепени регионални позиции. Някои автори посочиха и разочарованието сред иранските опозиционери, които са очаквали по-сериозна подкрепа от Вашингтон срещу режима. Други разглеждат развоя като знак за отслабване на американското влияние и за потенциална промяна в баланса на световните сили.

Консервативните реакции са разделени. Част от коментаторите смятат, че Съединените щати са направили значителни отстъпки, без да постигнат първоначалните си военни цели, свързани с иранската ядрена програма, ракетния арсенал и регионалните проксита на Техеран. Други обаче виждат в споразумението възможност за преосмисляне на американската стратегия в Близкия изток и постепенно намаляване на прякото военно ангажиране на Вашингтон в региона.

Иран запазва значителна част от военния и политическия си потенциал, докато Вашингтон се отказва от редица първоначални искания и поема сериозни финансови ангажименти. Независимо че прекратяването на бойните действия се определя като положително развитие, eкспертите са единодушни, че регионът е по-нестабилен след конфликта, а Иран вероятно ще има по-силни позиции, отколкото преди началото на войната. 

Лошата сделка вероятно е по-добра от никаква сделка за една напълно безсмислена и непопулярна война, която не постигна каквато и да е цел – все пак да не забравяме, че САЩ се подготвят за междинни избори наесен.

В Ню Йорк кандидати, подкрепяни от настоящия кмет Зоран Мамдани, спечелиха първичните избори, които ще определят кой ще се кандидатира за места в Камарата на представителите и в Сената през ноември. За някои анализатори това е повод за прогнози, че в Демократическата партия се задава нова вълна – на прогресивните демократи (социалдемократи, но не в европейския смисъл; по-скоро по-ориентирани към социални и леви политики). 

Сред победителите в Ню Йорк са бившият главен финансов инспектор Брад Ландер и демократ-социалистите Дариализа Авила Шевалие и Клер Валдес. Двама от тях успяха да победят действащи конгресмени, което се разглежда като сериозен успех за прогресивното движение в града, пише „Ню Йорк Таймс“. Мамдани представи победите като доказателство, че успехът му на кметските избори не е бил еднократно събитие, а част от ново политическо движение, което едва сега започва. По време на празненствата негови поддръжници скандираха името на организацията DSADemocratic Socialists of America (Демократични социалисти на Америка, ДСА), а самият кмет заяви, че традиционните политически подходи не действат при обществените проблеми и предизвикателства на настоящето. 

През последните месеци кандидати, свързани с ДСА, постигат все по-големи успехи в първичните избори на Демократическата партия. Сред най-разпознаваемите лица на това течение са Бърни Сандърс, Александрия Окасио-Кортес и кметът на Ню Йорк Мамдани. Кандидати, подкрепяни от ДСА, побеждават в Ню Йорк, Вашингтон и Лос Анджелис, което подхранва дебата дали Демократическата партия навлиза в нов етап на идеологическо преструктуриране. 

Поддръжниците на тази тенденция твърдят, че възходът на демократическите социалисти отразява нарастващото недоволство от икономическото неравенство, кризата с жилищата и високите разходи за живот в големите градове. Според тях младите избиратели все по-често подкрепят политики като разширяване на социалните програми, по-високо данъчно облагане на богатите и по-активна роля на държавата в икономиката. Някои анализатори дори предполагат, че демократическите социалисти могат да станат трайно крило на Демократическата партия.

Критиците предупреждават, че успехите засега са концентрирани предимно в силно демократически райони и не гарантират по-широка национална подкрепа. Според консервативни коментатори част от предлаганите политики са трудно приложими на практика, а по-радикалните позиции по социални и културни въпроси могат да отблъснат умерените избиратели. Други автори поставят под въпрос самата идея за демократически социализъм, свързвайки я с историческия опит на социалистическите режими през XX век. 

Възходът на ДСА е едновременно реакция срещу статуквото в Демократическата партия и своеобразен отговор на популистката мобилизация, постигната от MAGA около Доналд Тръмп. Двете движения споделят недоверие към политическия елит и използват силно антисистемна реторика, макар да предлагат коренно различни решения. Остава открит въпросът дали демократическите социалисти ще успеят да превърнат успехите си в традиционно либералните градски центрове в по-широко национално политическо влияние, или ще останат явление, ограничено до определени части от американския електорат. 

След ремонт за милиони водното огледало пред Мемориала на Линкълн във Вашингтон се заблати 

Президентът Тръмп обвини вандали, но към момента няма официално потвърдена информация за арестувани въпреки твърденията на администрацията. Наскоро туристи заляха социалните мрежи със снимки, на които току-що положената боя се бели. 

Но все пак е лято – баровете са пълни, политиката и войната винаги се случват другаде, а светът гледа футбол. И зрелища. 

Америка ще празнува 250-тия си рожден ден. А след това зрелището почти със сигурност ще загрубее. Въпросът е дали има кой да му обърне внимание. И колко още празните спорове, зрелищата, риалитито на войната и политиката ще отлагат належащите ремонти на институциите и обществата. Или ще се слага нова и нова боя, която дни по-късно ще се бели. 


Абонирайте се, за да получавате този бюлетин на електронната си поща в момента, в който излезе!

Вече сте регистриран потребител на Toest.bg? Може директно от настройките на бюлетините в своя профил да изберете „Гласовете на Америка“ или да натиснете бутона по-долу:

Още нямате профил в Toest.bg? Регистрирайте се само с няколко клика:


Баба Алино: Светеца, мъченикът и украинецът

Post Syndicated from Веселин Златков original https://www.toest.bg/baba-alino-svetetsa-muchenikut-i-ukrainetsut/

Баба Алино: Светеца, мъченикът и украинецът

Месец след избухването на скандала с Баба Алино прокурорите излязоха пред Съдебната палата във Варна и казаха, че няма достатъчно доказателства за повдигане на обвинения по случая. Работи се, може и да има в бъдеще, ама засега – нищо.

Аз, признавам си, това не го разбирам. 

Нали говорим за „незаконния град“, охраняван с оръжие от мъже, които не говорят български, строен без никакви разрешения; за най-яркия пример за корупция и беззаконие; за поредния варненски ужас, който телевизиите ни показват всеки ден по няколко пъти? 

Ами да, но доказателствата не стигат за обвинение, какво да се прави. Не стигат дори да се обвини инвеститорът на комплекса Олег Невзоров. От очевиден извършител на безобразието в гората над Златните пясъци той изведнъж грейна в нова светлина, целия в бяло, в качеството си на свидетел. 

Е, как така свидетел, нали неговата корпорация е построила тайно този незаконен град с въоръжената охрана, която не пуска и чиновник да прехвръкне? 

За момента няма доказателства той да е извършил лично някое от тези престъпления,

това ни казаха прокурорите. 

В същото време вътрешният министър Иван Демерджиев излезе и съобщи, че свидетелят Невзоров всичко си е казал и показанията му били „доста интересни“. 

Е, и? Аз като един ядосан варненец си чакам обвиненията за виновниците, които и да са те. Но това, което леко лъсна изпод изказванията и на прокуратурата, и на МВР, е, че май самият украински бизнесмен няма да е сред тях. Стига да натопи достатъчно качествено тези, които новата ни родна власт ще обвини и евентуално ще осъди с много по-голямо удоволствие.

Месец след избухването на скандала името Баба Алино стана нарицателно за беззаконие. А това може би не е съвсем справедливо. Във Варна и околностите има далеч по-сериозни беззакония. 

Новите проблеми на Варна

Варна като разказ за пропуснат шанс и за системно разминаване между амбиция и реалност. В града се строи повече, отколкото се живее, обещава се повече, отколкото се изпълнява. Между морето, имотите и провалените проекти наднича въпросът „Къде потъна потенциалът?“. От Веселин Златков.

От незаконното застрояване в Баба Алино никой не е умрял. А не беше така с незаконното застрояване на дерето в квартал „Аспарухово“, заради което 13 души изгубиха живота си в пороя през 2014 г. Незаконното застрояване в Баба Алино нанесе щети на гората, но тя ще се възстанови бързо, ако постройките изчезнат. Гората северно от Варна е прекрасна и силна въпреки постоянните опити да бъде завладявана от „курортите“, които в последните години са се превърнали де факто в жилищни квартали. 

Незаконното застрояване в Баба Алино не предизвика и свлачище, което е по-скоро изключение от многобройните случаи на подобно строителство край морето. Разбира се, това изобщо не прави беззаконието по-малко отвратително.

Тук ще отворя една скоба за местен варненски колорит. Местността Баба Алино всъщност трябва се нарича Светеца – така твърдят (или твърдяха) от „Възраждане“. Преди много време, още като редови общински съветник, Костадин Костадинов поиска смяната на 215 топонима във Варна и околностите с български имена и думи. В битката му местности като Манда гьолджу, Узун келеме, Кьор дермен, Боклук тарла, Балъм дере и т.н. да получат разбираеми или поне произносими наименования имаше смисъл. Тогава Костадинов превърна идеята в една от най-устойчивите си каузи, а медии и опоненти веднага я нарекоха иронично „възродителен процес“. Проблемът беше в това, че наред с изброените по-горе примери нови имена трябваше да получат и добре познати варненски места, като Джанавара, Паша дере, Кабакум, а Гръцката махала, сърцето на града, трябваше да се прекръсти на Стария квартал.

Баба Алино: Светеца, мъченикът и украинецът
Баба Алино ©Веселин Златков

От 2012 г., когато въпросът е поставен за пръв път пред Общинския съвет, решението за топонимите е приемано и връщано от областния управител, гласувано наново, отхвърляно, пак приемано, и така цели 11 пъти, докато е окончателно прието през 2019-та. 

Но за да влезе реално в сила, новите имена на местностите трябва да се впишат в кадастъра. А кое, как и кога се вписва там, както си знаем, е сложен въпрос.

Та според виждането на „Възраждане“ Баба Алино трябва да се прекръсти на Светеца, защото местността била наречена на уважаван и почитан човек (Баба Али), който явно има нещо общо (не е много ясно какво) с мястото. 

Трябва да признаем, че „Възраждане“ има основната заслуга за разкриването на безобразието в гората. 

Не друг, а активисти, общински съветници и депутати от партията вдигнаха шума около Баба Алино, което доведе до отварянето на станалите прословути „широко затворени очи“.

Мотивите на последователите на Костадинов обаче са отделна тема. Всички сме наясно, че скандалът нямаше да е толкова „вкусен“ за медиите и политиците, ако в основата му не беше украински бизнесмен. Тази подробност е най-важната. 

Невзоров за възможна двойна употреба

Незаконното селище в Баба Алино не се появи изведнъж. То е там от години – пред очите на институции, медии и общество. Защо тогава се превръща във водеща тема точно сега? Коментар на Светла Енчева за избирателното внимание, политическата употреба на фактите и моделирането на обществения дневен ред.

Антиукраинските настроения във Варна съществуват, при това още от началото на бежанската вълна. Още от първите дни на войната в Украйна обществеността в града се раздели. Мнозина доброволно и всеотдайно започнаха да помагат на преминаващите границата украинци и доказаха, че гражданското общество във Варна може само да се гордее с реалните си действия. 

Друга група от градската общественост обаче гледаше отстрани с очевидно недоверие към бежанците. Коментираха скъпите коли, с които част от тях пристигат, възмущаваха се, че имали претенции към хазяите си, мрънкаха за поведението им в магазини и заведения. 

Признавам си, не разбирам ксенофобията, но имам предположение защо украинците и цветовете на знамето им толкова бодат очите на много българи, в частност на варненци. 

Става въпрос за форма на завист, да я наречем национална завист. 

След нахлуването на руската армия в Украйна масовото мнение у нас беше, че украинците ще се предадат, при това по-скоро рано, отколкото късно. Мисленето ни е такова, схващанията ни за силните и слабите в този свят са такива и сме с ясното съзнание, че ако външен враг нападне България, страната ни ще развее белия флаг на третия ден. Поведението на Украйна просто не се вмести в матрицата на родните ни предразсъдъци. Завистта от това, че друг народ и друга държава имат смелостта и твърдостта да устоят на агресора се прехвърли върху украинските бежанци.

Не бива да отричаме и очевидното – сред украинците, укрили се у нас от мобилизацията, има и „сенчести“ бизнесмени, перачи на пари, вероятно контрабандисти и всякакви други криминални елементи. Ясно е, че такива хора са първите, които ще избягат, когато страната им е подложена на военна агресия. А да се заселиш в България, световноизвестна с рехавото си правосъдие и всевластната си корупция, е логичен избор.

При наличието на всички тези фактори антиукраинските настроения могат да се обяснят, макар да си остават все така срамни. 

И тук идват политиците, които видяха потенциала на скандала в Баба Алино и възможността да спечелят от него. 

„Възраждане“ вече ги споменахме, те са ясни. Но дали „победата“ ще е тяхна, или на „Прогресивна България“, ще се разбере в крайна сметка на местните избори догодина. А Радев и хората му искат антиукраинския електорат – в това няма съмнение. Ето защо и министрите толкова ентусиазирано коментираха скандала, подклаждайки го до такава степен, че на телевизиите им се наложи да предават на живо премахването на ограда – все едно е разбит наркокартел. 

Обобщението направи министър Шишков, който обяви, че за Баба Алино е виновна „сглобката“. Тоест ГЕРБ, ДПС, ПП–ДБ – тези, които ще са основна конкуренция на новите управляващи за местните избори. Те са „лошите“, те са защитавали беззаконието, което изведнъж стана „невиждано“, макар явно да не е, защото, както споменахме още в началото, „не са събрани достатъчно доказателства“. С възможността всички конкуренти да бъдат натикани под общ знаменател, Баба Алино се превърна в златен шанс за „Прогресивна България“.

Залезът на варненския популизъм

Варна не е монополист в местното производство на популисти, но често им дава първата сцена. Местни конфликти, бизнес интереси, недоверие към центъра и вкус към политическия тарикатлък превръщат „варненското“ в удобен модел за по-големи амбиции. От Веселин Златков.

Най-големият губещ от ситуацията се оказа кметът на Варна Благомир Коцев. Миналата година той получи ореола на политически мъченик, след като кисна с месеци в ареста, което си беше безобразна репресия. Дори Бойко Борисов настояваше да го пуснат при семейството, а гласове в ПП–ДБ (тогава единни и сплотени) даже го сочеха за потенциален кандидат-президент. Но ореолът на Коцев угасна безвъзвратно след Баба Алино. Не защото непременно лично има нещо общо с незаконното строителство, а просто защото това е станало и в рамките на неговото управление.

Въпросът „Недобросъвестност или некомпетентност?“ вече е безсмислен във Варна. Градът е в лошо състояние, нито транспортът, нито почистването са задоволителни, избуялите треви вбесяват гражданите, туристи няма, няма и смислени опити нещо да се направи, че да се поизлъска имиджът на нашата „перла на Черноморието“. А „незаконният град“ просто сложи капака на цялата каша.

Иначе, Коцев се зае да действа енергично – издава заповеди за събаряне на къщите (за които прокуратурата „няма достатъчно доказателства“), уволнява общинари, дава интервюта… Не че има какво друго да направи при така стеклите се обстоятелства. А те вероятно ще станат още по-сложни. 

Почти сигурно е, че през следващите месеци „Прогресивна България“ ще проникне и ще получи влияние във Варненския общински съвет. В него има достатъчно съветници и фракции, които с лекота ще се извъртят и ще се наредят зад новите управляващи. И те задължително ще стъжнят живота на кмета допълнително, за да се докажат. В момента формацията на Радев няма изявени лидери на местно ниво, така че опитни играчи в местния парламент могат да се окажат на изненадващо високи позиции. 

А накрая ще добавя нещо, за което ми е неприятно да пиша, но не трябва да се пропуска. Става въпрос за трагикомичните вопли по темата Баба Алино на бившия варненски кмет Иван Портних. Човекът, който почти еднолично загуби Варна за ГЕРБ, буквално опищя орталъка колко е невинен за този скандал. Едва ли някой му вярва. А изглежда, има и доказателства – според прокуратурата обаче недостатъчни за обвинения, – че тъкмо по негово време е започнала цялата далавера. Да не забравяме все пак, че Благомир Коцев е кмет, защото варненци казаха на предишните избори: 

Всеки друг, само да не е Портних!

А иначе във Варна месец след избухването на най-шумния скандал в държавата става все по-хубаво – морето вече е топло, забранен за къпане е само един от плажовете, липите ухаят опияняващо… А законността и справедливостта се задават откъм София по автомагистрала „Хемус“, но малко бавно, че още не е завършена. Ще дойдат някога, само да се съберат достатъчно доказателства. 

Тихото достойнство. Какво е да остарееш в България

Post Syndicated from Лина Кривошиева original https://www.toest.bg/tihoto-dostoynstvo-kakvo-e-da-ostareesh-v-bulgariya/

Тихото достойнство. Какво е да остарееш в България

Доста време мина, откакто започнах да занимавам себе си и околните с тази тема. Извън дългия процес на личното ми осъзнаване, преосмисляне и проучване филмът „Какво е да остарееш в България“ премина и през целия технологичен цикъл – от продукцията и монтажа, през множеството прожекции из цяла България, до качването му в YouTube канала на „Тоест“. Филмът вече е достъпен за гледане:

Срещите с публиката по време на това турне бяха естествена част от целия процес. Тъкмо в тях се крие смисълът на този документален филм. Той съвсем логично привлече публиката, за която говореше, но и изключително много млади хора. А реакцията на всички беше дълбоко вълнуваща.

В много от интервютата, които дадох преди прожекциите, ми направи впечатление как медиите инстинктивно търсеха потвърждение на познатия социален стереотип. Очакваха шумни оплаквания и гръмки изказвания за мизерията и забравата около остаряването в България.

Нашият разказ обаче се движи по съвсем различна, по-фина линия. Филмът ни се старае да говори за тихото достойнство въпреки средата. Да прокара нишка между демографската статистика и реалните преживявания на отделните хора.

Възприятието на различните поколения

Голямата неочаквана реакция дойде от младата публика. Част от двайсетгодишните, дошли на прожекциите, споделиха нещо стряскащо за мен: че от някои проблеми, приписвани традиционно на старостта, страдат и самите те.

Например самотата. При все че живеем във времена на хиперсвързаност, страхът, че няма да успеем да постигнем стойностно общуване, а без жива връзка с другите ще потънем в изолация, се оказва обща тема за поколенията. При възрастните хора обаче този емоционален дефицит бързо добива и физическо измерение. Може би именно заради това младите изразиха същите притеснения.

Възрастните зрители пък идваха в салоните с предпазливото любопитство на хора, които искат да чуят как се говори за тях. И си тръгваха изненадани. Те припознаха и харесаха тъкмо този мост между сухите данни, очертаващи мащаба на демографската криза, и реалните екранни образи.

Нарочно избягахме от крайностите. Потърсихме герои от т.нар. среда на обществото – хора, които имат своите проблеми, но не са крайно отчаяни. Тези герои, със своята мекота и искреност, заговориха на публиката тъкмо защото не бяха едноизмерни образи. Във всеки от тях има различна история, която зрителите могат да дописват сами в умовете си.

Оказа се, че няма нужда да показваме драстични крайности, за да бъде болката осезаема и видима.

Когато средата изключва

Пътуването из страната ни изправи и пред реалността, за която говорим във филма. В почти всяко населено място откривахме добре запазена и подходяща за прожекция читалищна зала. И тогава ни застигаше иронията: как да покажем филм за старостта и нейните предизвикателства, когато голяма част от хората, за които е предназначен, физически трудно могат да стигнат до залата, защото тя е например на втория етаж, а няма асансьор? Както казва 93-годишната Къна Георгиева във филма,

никъде не е помислено за това, че човек ще остарее.

В малките градове усещането за изоставеност и институционално безхаберие е истински болезнено. Но паралелно с това там все още я има близостта, има го доброто съседско познанство и навика да се помага.

С много от посетителите на прожекциите се разминаваме радикално в политическите си виждания и житейски избори. Но в секундата, в която темата за достойните старини беше поставена на масата, различията като че ли изчезнаха. Това беше сред най-силните моменти от представянето на филма пред разнообразната публика. Да видиш как тази история може да скъси дистанцията между хора, разделени от иначе дълбоки пропасти.

До кого всъщност трябва да достигне този филм?

Редовният, почти дежурен въпрос след прожекциите беше: „А не може ли този филм да се прожектира в парламента?“ В това питане намирам една блага наивност. С публиката на почти всяко място обаче се обединявахме около тъжното заключение, че хората във властова позиция вероятно отдавна са загубили сетивността, нужна за разбирането на подобен разказ.

Понякога разговорите след филма прерастваха в дискусия как възрастните носят цялото знание и мъдрост на света, а младите арогантно отказват да черпят вдъхновение от тях. За мен обаче нещата стоят по съвсем различен начин. Не е важно кой е прав и кой е крив, кои поколения са по-стойностни и кои знания са по-нужни. А как да живеем заедно въпреки различията във възгледите, нуждите и темпото. Как да изградим среда, в която ако не всички, то колкото може повече хора да бъдат добре, да се чувстват пълноценни.

Това далеч не е абстрактна философия, а води до съвсем практически въпроси: Как да проектираме градовете си така, че хората с ограничена подвижност да имат равноправен достъп? Как да структурираме институциите си, за да не бъдат изолирани цели групи от обществото? Как да изградим общност, в която във всеки етап от житейския си път човек да има усещане за принадлежност, полезност и достойнство? Как да споим и да укрепим нашето общество, с цялото му разнообразие и цветност?

Какво следва?

Разговорът ни за българското общество не спира дотук. Естественото продължение на темата е следващият голям въпрос: Какво е да си млад в България? Какво е да си част от поколение, което се опитва да планира утрешния ден в постоянна несигурност?

За да създадем следващия филм със същата честност и качество, в „Тоест“ стартираме независима кампания за набиране на средствата.

Краудфъндинг кампания за следващия филм на „Тоест“

Всяко евро, което дарите в тази кампания, отива директно за заснемането, озвучаването, историята и екипа, който ще я разкаже. Подкрепете следващия ни документален филм „Какво е да си млад в България“!

Подкрепете документалния ни филм „Какво е да си млад в България“. Всяко дарение ни помага да заснемем историята и отново да пътуваме до малки и големи места в България, за да я покажем и обсъдим.

Нека го направим заедно!

Молитва

Post Syndicated from Тоест original https://www.toest.bg/molitva/

Молитва

Да бъда, боже, помогни ми днес,
за утре аз ще се погрижа.
Дари ме близкото да виждам,
в пресекването на дъха ми слез.

Прибягват другите от миг към миг,
трепти окото, сводът от звезди пулсира,
дискретното сърце замира,
пунктир от мрак е дневният светлик.

Шуртят на тласъци като кръвта
и цял света така познават.
А мене в паузите си оставил,
да слепвам с крясък пропастта.

Добре, за викане си ме създал.
Кажи сега, немилостиви,
как миг един да бъда жива
и вечността ще си ми дал.

Миглена Николчина
из „Дневниците на Ружа Доцинска“


Миглена Николчина е професор в Софийския университет „Св. Климент Охридски“ и автор на множество теоретични изследвания (сред които „Човекът-утопия“, „Смисъл и майцеубийство. Прочит на Вирджиния Улф през Юлия Кръстева“, „Изгубените еднорози на революцията“ и „Бог с машина. Изваждане на човека“), поезия и проза. Стихосбирките ѝ включват „Три след полунощ“, „Скръб по Далчев“, „Асимволия“, „Кратки разкази за любовта и писането“ и „Градът на амазонките“.


Според Екатерина Йосифова „четящият стихотворение сутрин… добре понася другите часове“ от деня. Убедени, че поезията държи умовете ни будни, а сърцата – отворени, в края на всеки месец ви предлагаме по едно стихотворение. Защото и в най-смутни времена доброто стихотворение е добра новина.

Build reliable voice analytics workflows with AWS Lambda durable functions and Amazon Bedrock

Post Syndicated from Mehdi Amrane original https://aws.amazon.com/blogs/compute/build-reliable-voice-analytics-workflows-with-aws-lambda-durable-functions-and-amazon-bedrock/

Contact centers handle millions of voice interactions monthly, but transforming raw call recordings into actionable insights remains a manual and fragile process. With voice analytics workflows, you can decrease the average handle time of a voice call from minutes to seconds and increase the efficiency and productivity of your support agents.

Today, these workflows often require custom code to handle non-functional requirements such as retry logic, state management and failure handling across multiple services. In addition, as the selection/determination of insights is derived from specific business objectives, it often needs to be customized for each organization.

In this post, we show a solution using AWS Lambda durable functions to create the following insights: summarization, sentiment analytics and key topics. AWS Lambda durable functions is a capability of AWS Lambda, that simplifies building multi-step applications and AI workflows. It lets you write sequential code with automatic checkpointing, built-in retries, and simplified error handling, so you can focus on the business logic rather than managing the orchestration.

The solution also simplifies the visualization of the conversation transcriptions and insights, with a web application.

Solution overview

In this post, we provide an operational overview of the solution, and then describe how to set it up with the following services:

The solution architecture is illustrated in the following diagram:

Architecture diagram showing the solution components and data flow for voice analytics with AWS Lambda durable functions and Amazon Bedrock

Step 1 (Option 1): Transcription segments are sent by an external system. The segments are stored in a stream (Amazon Kinesis Streams).

Step 1 (Option 2): Voice calls are sent by an external system to the Contact Lens Connector in AWS. The voice calls are then transcribed using Amazon Connect Contact Lens, to generate transcriptions and send these transcriptions to the stream.

  • Step 1a: The external system sends a copy of the voice call to a Contact Lens Connector.
  • Step 1b: The Contact Lens Connector routes the voice call to Amazon Connect Contact Lens.
  • Step 1c: Amazon Connect Contact Lens generates transcriptions from a voice call.
  • Step 1d: The transcription segments are stored in a stream (Amazon Kinesis Streams).

Step 2: A transcription processor function (AWS Lambda function) consumes transcription segments from the stream.

Step 3: The transcription processor function (AWS Lambda function) stores transcription segments in a transcription table in Amazon DynamoDB.

Step 4: A durable function (AWS Lambda Durable function) is triggered when new transcription segments are stored in the transcription table (the trigger is implemented using Amazon DynamoDB Streams). It orchestrates the processing of transcriptions in 5 steps.

  • Step 4a: The durable function fetches the segments received for a given transcription. If all the segments of voice call are available, the processing continues to Step 4b. Otherwise, the Lambda function is stopped (since the transcription is not complete yet).
  • Step 4b: The durable function summarizes the voice transcription using Amazon Bedrock.
  • Step 4c: The durable function generates sentiment analytics for the voice transcription using Amazon Bedrock.
  • Step 4d: The durable function extracts key topics from the voice transcription using Amazon Bedrock.
  • Step 4e: The durable function stores the conversational insights in an analytics table in Amazon DynamoDB.

Step 5 and 6: The user accesses the web application and authenticates.

Step 7: Amazon Cognito validates the authentication details.

Step 8: Once the user is logged in, the web application sends a request to an API (Amazon API Gateway) to fetch the voice transcriptions and conversational insights.

Step 9: The API calls a Lambda authorizer to confirm that the user is authorized to retrieve the voice transcriptions and conversational insights.

Step 10: The request is sent from the API to a retriever function (AWS Lambda function to retrieve transcriptions from the transcription table and conversational insights from the analytics table).

Step 11: The Lambda function retrieves transcriptions from the transcription table and conversational insights from the analytics table.

After Step 11, the user can now consult the transcriptions and conversational insights from the web application.

Prerequisites

  • An AWS account.
  • A Unix based device (or Windows device with WSL setup to run bash scripts) with access to your AWS account with the following tools/libraries installed:
    • Node.js and npm installed.
    • Python 3.12 installed.
    • Docker (for front-end containerization).
    • AWS Command Line Interface (AWS CLI) configured with appropriate permissions.
    • CDK installed.
  • Clone the GitHub repository:
    git clone https://github.com/aws-samples/sample-sca-with-lambda-durable-and-bedrock.git

Set up network and backend infrastructure

In this section, we setup the networking and backend resources of the solution.

Navigate inside the repository and complete the following steps to create these resources:

  1. Install dependencies and build project:
    npm install
    npm run build
    cdk bootstrap

  2. Create networking infrastructure resources (Amazon Virtual Private Cloud (Amazon VPC), subnets, IAM roles, security groups and VPC endpoints):
    cdk deploy ScaNetworkStack

  3. Create backend resources (Amazon Kinesis Data Streams stream, Amazon DynamoDB tables, AWS Lambda functions, Amazon API Gateway, Amazon Cognito):
    cdk deploy ScaBackendStack

Create the web application

In this section, we create the web application of the solution.

Complete the following steps to create the web application:

  1. Create an Amazon Elastic Container Registry (Amazon ECR) repository to host the container image of the web application:
    cdk deploy ScaEcrStack

  2. Build and deploy container image in the Amazon ECR repository:
    chmod +x scripts/deploy-container.sh
    bash ./scripts/deploy-container.sh us-west-2

    Note: Replace us-west-2 with your deployment region.

  3. Deploy the web application:
    cdk deploy ScaWebAppStack

  4. Deploy CloudFront Access stack (optional). This stack adds public subnets, an internet gateway, and an Amazon CloudFront distribution.Important note: This stack allows access to the web application from a public endpoint using an Amazon CloudFront distribution. You can use this stack if you currently cannot access a web application behind a private ALB with an existing private connection (virtual private network (VPN), AWS Direct Connect, etc.).
    cdk deploy ScaCloudFrontAccessStack -c enableCloudFrontAccess=true

The web application is now available for testing.

If your web application is private, the application is deployed behind a private ALB. Access it from within the VPC using the ALB DNS name:

aws cloudformation describe-stacks --stack-name ScaWebAppStack --query 'Stacks[0].Outputs[?OutputKey==`AlbDnsName`].OutputValue' --output text

If your web application is public, the application is deployed behind an Amazon CloudFront distribution. You can access it using the CloudFront distribution URL:

aws cloudformation describe-stacks --stack-name ScaCloudFrontAccessStack --query 'Stacks[0].Outputs[?OutputKey==`CloudFrontUrl`].OutputValue' --output text

Configure the Amazon Cognito user pool

In this section, we create a user in our Amazon Cognito user pool. This user will log in to our web application.

Run the script setup-test-user.sh to create the user (make sure to provide your email address):

chmod +x scripts/setup-test-user.sh
./scripts/setup-test-user.sh [email protected]

Note: Replace [email protected] with your email address.

After you create the user, you should receive an email with a temporary password in this format: “Your username is #your-email-address# and temporary password is #temporary-password#.”

Keep note of these login details (email address and temporary password) to use later when testing the web application.

Test the solution

In this section, we test the solution by ingesting a transcription in the stream (Amazon Kinesis Data Streams) and visualize the results in the web application.

  1. Run the script ingest-transcriptions.sh to ingest a sample transcription in the stream:
    chmod +x scripts/ingest-transcriptions.sh
    ./scripts/ingest-transcriptions.sh

  2. Open the URL of the web application in your web browser (either CloudFront distribution URL or ALB DNS name as mentioned in previous section).
  3. Enter your login information (your email and the temporary password you received earlier while configuring the user pool in Amazon Cognito) and choose Sign in.
  4. When prompted, enter a new password and choose Change Password.
  5. You should now be able to see a web interface with a transcription as illustrated in the following screenshot:Web interface displaying a list of voice transcriptions
  6. Select a transcription to visualize the conversational insights as shown in the following screenshot.Conversational insights detail view showing summary, sentiment, and key topics for a selected transcription

If you want to explore an alternative option by placing a voice call using Amazon Connect (with Amazon Connect Contact Lens to generate the transcriptions):

Clean up

To make sure that no additional cost is incurred, remove the resources provisioned in your account. Make sure you’re in the correct AWS account before deleting the resources.

Important note: You should exercise caution when performing the preceding steps. Make sure you are deleting the resources in the correct AWS account.

You can navigate to the AWS CloudFormation console to delete the CloudFormation stacks associated to the resources provisioned.

You can also destroy the stacks using cdk destroy in reverse dependency order:

  1. If you deployed the optional CloudFront access stack:
    cdk destroy ScaCloudFrontAccessStack -c enableCloudFrontAccess=true

  2. If you deployed the optional Connect integration stack:
    cdk destroy ScaConnectStack -c enableConnect=true

  3. To destroy the core stacks:
    cdk destroy ScaWebAppStack
    cdk destroy ScaEcrStack
    cdk destroy ScaBackendStack
    cdk destroy ScaNetworkStack

Conclusion

In this post, we walked through a solution to create a web application to visualize voice transcriptions and related conversational insights. First, we created network and backend resources. Then we created the web application. We also configured a user pool to grant a user access to the web application. Finally, we tested solution by ingesting transcriptions then visualize them in the web application.

For further information, consult the documentation of the following services: Amazon Bedrock, AWS Lambda durable functions, Amazon ECS, Amazon API Gateway, AWS Lambda, Amazon Kinesis Streams, Amazon DynamoDB and Amazon Cognito.

To dive deeper into this solution, a GitHub repository is available at this location.

Mastodon Stories for systemd v261

Post Syndicated from Lennart Poettering original https://0pointer.net/blog/mastodon-stories-for-systemd-v261.html

On June 19 we released systemd v261 into the wild.

In the weeks leading up to that release (and since then) I have posted
a series of serieses of posts to Mastodon about key new features in
this release, under the
#systemd261
hash tag. In case you aren’t using Mastodon, but would like to
read up, here’s a list of all 27 posts:

I intend to do a similar series of serieses of posts for the next
systemd release (v262), hence if you haven’t left tech Twitter for
Mastodon yet, now is the opportunity. My series for v262 will begin in
a few weeks most likely, under the
#systemd262
hash tag.

In case you are interested, here is the corresponding blog story for
systemd v260
,
here for
v259
,
here for
v258
,
here for
v257
,
and here for
v256
.

[$] A look at MinIO alternatives: Ceph and Garage

Post Syndicated from jzb original https://lwn.net/Articles/1077739/

MinIO is
a popular object-storage server that offered compatibility with the Amazon Simple Storage Service (S3)
API. In December 2025, the company behind the project (also named MinIO)
announced
that the project was in maintenance mode and would not accept new changes; it
was archived
completely
in February 2026. MinIO users have been hunting for alternatives
since then, but the array of choices can be baffling. While many other projects
aim to fill the space, their strengths and areas of focus tend to vary. Two of
the alternatives—Ceph and Garage—are particularly compelling,
and both offer solid S3 compatibility.

AI and Liability

Post Syndicated from Bruce Schneier original https://www.schneier.com/blog/archives/2026/06/ai-and-liability.html

Earlier this month, a German court ruled that Google is liable for its AI search summaries. Rejecting defenses like “users can check for themselves,” and that they generally know “that information generated with AI should not be blindly trusted,” the court held that the AI’s summaries are reflections of the company and “above all an expression of Google’s business activities.”

This is the latest skirmish in a decades-old battle over internet publishing. Historically, there were two different types of information distributors: carriers and publishers. A phone company is a carrier. It’ll transmit whatever you say, even discussions about committing a crime. Words are words, and the phone company does not know—nor is it liable for—the words you choose to speak. A newspaper, on the other hand, is a publisher. It decides the words it publishes, and what quotes to include in its articles. If those words or quotes are defamatory or otherwise illegal, it’s liable.

Internet companies have long tried to play both ends of this distinction. They claim to be a carrier when it suits them, and also to be a publisher when that is advantageous. Section 230 of the 1996 Communication Decency Act enshrined this straddling when it shielded internet providers from liability for the speech of others on their platforms: “No provider or user of an interactive computer service shall be treated as the publisher or speaker of any information provided by another information content provider.”

For years, a debate has continued about how to apply this law to social media platforms. When platforms merely displayed people’s posts and comments in reverse-chronological order, they behaved largely like carriers, relaying people’s words without regard to their contents. But the next generation of platforms, like Facebook, curated feeds with algorithms and thereby acted more like publishers, making editorial decisions about who sees what. Some experts think section 230 has gone too far and needs reform; others think that it’s what holds the modern internet together.

Google’s AI overviews are far less nuanced. They work differently from traditional search, which courts have held involves archiving and facilitating access to the editorial content of third parties. AI overviews don’t just quote and republish words from different websites. With overviews, the AI rewrites other people’s words, exercising editorial discretion like a newspaper article or an original essay on a topic.

It’s not only Google’s AI that falls into this category. Imagine a restaurant review site that provides AI summaries, or a site summarizing laws and government procedures. Or a traditional publisher that uses AI to summarize its own publication. Accuracy matters, and liability is one of the most important ways we as a public can demand accuracy and hold companies accountable when they cause harm.

Two years ago, Air Canada learned this lesson. Its AI chatbot promised a discount the company later rescinded, arguing in court that the airline wasn’t responsible for the promises the bot made because it was a “separate legal entity that is responsible for its own actions.” The court sided with the flyer, saying that the airline was just as responsible for what its chatbot says as what’s on its website. The potential precedent here is that corporations have a duty of care for the performance of the AI chatbots they employ.

AI agents are agents of the person or organization that deploys them—and should be treated by the law as such. If a company hired human writers to write its summaries, that company would be liable for inaccuracies in those summaries. If a company’s human agent signed contracts in the company’s name, that company would be bound by those contracts. And if a doctor gave dangerously wrong medical advice, they would be liable for malpractice.

To allow businesses to hide behind the excuse of faulty AI in those same circumstances would be a massive handout to companies, and would introduce disastrous incentives for corporate misbehavior. Why hire human writers, lawyers or doctors when AIs are not only cheaper, but also absolve employers whenever they make a mistake?

We are rapidly moving to a world where AI-powered chatbots will be at the other end of all sorts of corporate communications channels. It makes no sense for a company to be able to honor its statements when it wants to and disavow them when it doesn’t.

Visa and OpenAI recently announced a partnership to build personal AI agents to, among other things, make purchases on our behalf. This is just one of many similar projects in the works, as companies race to provide us all with AI assistants. Will Visa take responsibility when its AI makes a purchase in your name that you don’t want? And if Visa won’t, why would anyone trust the system? Properly allocating liability is key to make this kind of thing work.

If the German ruling holds, it could be devastating for Google’s AI Overview feature. Tests from earlier this year found that it had mistakes about 10% percent of the time. At more than 5tn searches per year, that’s 16,000 erroneous summaries every second. And while most of those errors are benign, some of them will cause harm, be defamatory, or otherwise trigger liability.

Earlier this year, Google’s AI summary falsely identified the Canadian fiddler Ashley MacIsaac of being a sex offender. His lawsuit, filed in Ontario, is ongoing. If Google is forced to invest in improving its AI system until those kinds of errors are exceedingly rare, that seems like a good outcome for users, as well as the subjects of search, like MacIsaac.

More generally, liability concerns could mean that many current use cases for agents won’t be commercially viable. Companies may not be able to profitably operate AI lawyers, doctors and media influencers if they are held responsible for what they say and do.

We’re OK with this outcome. There’s nothing in the law that requires us to accommodate AI systems if they are fundamentally untrustworthy, just as we don’t need to accommodate untrustworthy human systems. Any company that won’t stand by the statements its agents make—whether human or AI—doesn’t deserve users’ time or money.

Podman 6.0 released

Post Syndicated from jzb original https://lwn.net/Articles/1079600/

Version 6.0.0 of the Podman
container-management tool has been released. Notable new features
include the ability to set multiple static IP addresses for
containers, improvements in network isolation that make Podman more
compatible with Docker, changes to the way Quadlet
commands function, many new options for many existing podman
commands, and a
rewrite of Podman’s configuration file handling
. There are many
breaking changes; see the release
notes
for a full list of all new features, changes, and bug fixes.

Build an AI-powered real estate assistant on WhatsApp using Strands Agents SDK and AWS End User Messaging

Post Syndicated from Ruchikka Chaudhary original https://aws.amazon.com/blogs/messaging-and-targeting/build-an-ai-powered-real-estate-assistant-on-whatsapp-using-strands-agents-sdk-and-aws-end-user-messaging/

Most real estate websites collect form submissions and route them to sales teams who respond hours or days later. Customers who expect immediate answers often move on. This post shows how to close that gap with a WhatsApp assistant that responds instantly. We show you how to build a real estate assistant powered by AI that delivers property discovery, home loan pre-approval, and site visit booking entirely within WhatsApp. The solution uses the Strands Agents SDK to orchestrate specialized AI agents on Amazon Bedrock, with AWS End User Messaging Social for WhatsApp integration. The serverless backend runs on AWS Lambda and Amazon DynamoDB.

Prerequisites

You need an AWS account with permissions for AWS CloudFormation, Lambda, Amazon Simple Notification Service (Amazon SNS), Amazon Bedrock, and DynamoDB. You also need a WhatsApp Business account integrated with AWS End User Messaging. For instructions to locate your WhatsApp phone number ID, see View a phone number’s ID in AWS End User Messaging Social.

For more information about how to set up WhatsApp using AWS End User Messaging Social, refer to Automate workflows with WhatsApp using AWS End User Messaging Social.

AWS Serverless Application Model (AWS SAM) CLI is required to deploy the demo solution. For installation instructions, see the AWS SAM CLI installation guide.

Overview of solution

The architecture uses four AI agents built with the Strands Agents SDK. Each agent handles a specific task: identity verification, credit scoring, fraud detection, or property valuation. The agents use Strands SDK decorators to access external data sources. The agents run on Amazon Bedrock with the Nova Lite model and are deployed to AWS Lambda using the official Strands Agents Lambda Layer. AWS End User Messaging Social handles WhatsApp Business API integration, publishing incoming messages to Amazon SNS for routing. The webhook handler Lambda function processes these events and invokes the supervisor agent. The supervisor agent orchestrates the conversation flow, maintains session state in Amazon DynamoDB, and sends rich interactive messages back to customers on WhatsApp.

For this post, we use a demo landing page to simulate the “Enquire Now” button on a real estate website. In a production scenario, you can add this integration point to any existing website. The only requirement is a WhatsApp click-to-chat link that pre-fills the initial message with the property details.

The following diagram illustrates the solution architecture:

Solution architecture diagram: WhatsApp messages flow through AWS End User Messaging Social and Amazon SNS to a Lambda webhook handler and supervisor agent that orchestrates four Strands agents on Amazon Bedrock with session state in Amazon DynamoDB.

Strands Agents SDK — multi-agent pipeline

The Strands Agents SDK is an open source framework from AWS for building AI agents. Each agent gets a system prompt and tools. The agent then decides when to use those tools based on what the user asks.

This solution uses four specialized agents, each with its own tools:

  • Identity Agent – uses the verify_identity tool to validate the customer’s tax identification number.
  • Credit Scoring Agent – uses check_credit_score and get_loan_offers tools to assess creditworthiness and generate lending offers.
  • Fraud Detection Agent – uses check_fraud_risk to evaluate application risk.
  • Property Valuation Agent – uses validate_property to check regulatory registration and market value.

The following example shows how to define agents using the Strands @tool decorator pattern. Each tool is region-agnostic by design. You adapt the implementation for your local tax authority, credit bureau, and property registry.

from strands import Agent, tool
from strands.models.bedrock import BedrockModel

MODEL_ID = "amazon.nova-lite-v1:0"

def get_model():
    return BedrockModel(model_id=MODEL_ID, region_name="us-east-1")

@tool
def verify_identity(tax_id: str) -> dict:
    """Verify customer identity using their tax identification number.
    Adapt for your region: PAN (India), SSN (US), NIN (UK), TFN (Australia)."""
    # Call your regional tax authority API here
    return {"tax_id": tax_id, "valid": True,
            "holder_name": "Customer", "status": "Active"}

@tool
def check_credit_score(tax_id: str) -> dict:
    """Fetch customer credit score from a credit bureau.
    Adapt for your region: CIBIL (India), FICO (US), Experian (Global)."""
    # Call your regional credit bureau API here
    return {"credit_score": 782, "risk_category": "Low"}

@tool
def get_loan_offers(property_price: int, credit_score: int) -> dict:
    """Get mortgage offers from partner lending institutions.
    Adapt for your region's banks and lending regulations."""
    # Call your partner bank APIs here
    return {"offers": [...]}

@tool
def validate_property(name: str, registration_id: str, price: int) -> dict:
    """Validate property registration with the local regulatory authority.
    Adapt for your region: RERA (India), Land Registry (UK), MLS (US)."""
    # Call your regional property registry API here
    return {"registration_valid": True, "investment_rating": "good"}

You then orchestrate the agents in a pipeline:

def run_full_pipeline(tax_id, phone, project):
    # Agent 1: Identity Verification
    agent = Agent(
        model=get_model(),
        system_prompt="You are an Identity Verification Agent. "
                      "Use verify_identity to check the customer's tax ID.",
        tools=[verify_identity],
        callback_handler=None
    )
    identity = agent(f"Verify tax ID: {tax_id}")

    # Agent 2: Credit Scoring + Loan Offers
    agent = Agent(
        model=get_model(),
        system_prompt="You are a Credit Scoring Agent. "
                      "Use check_credit_score then get_loan_offers.",
        tools=[check_credit_score, get_loan_offers],
        callback_handler=None
    )
    credit = agent(f"Check credit for {tax_id}, "
                   f"get offers for price {project['price']}")

    # Agent 3: Fraud Detection
    # Agent 4: Property Valuation
    # ... similar pattern
    return consolidated_results

AWS End User Messaging Social

AWS End User Messaging Social handles WhatsApp Business API integration. Incoming messages arrive as events. Outgoing messages, including text, buttons, lists, and location cards, go through the SendWhatsAppMessage API.

Message routing with Amazon SNS

An SNS topic receives events from AWS End User Messaging Social whenever customers send WhatsApp messages.

Webhook handler – AWS Lambda

The webhook handler Lambda function parses the EUM Social event envelope, extracts the WhatsApp message payload, and routes it based on message type.

Supervisor agent – AWS Lambda with Strands Agents

The supervisor agent orchestrates the full conversation flow. It maintains session state in Amazon DynamoDB and sends rich WhatsApp messages back to the customer. When the customer submits their identification, the supervisor invokes the Strands agent pipeline, which runs four agents sequentially on Amazon Bedrock.

The supervisor sends interactive WhatsApp messages using the EUM Social API:

def send_list(self, to_phone, body, button_text, sections):
    payload = {
        "messaging_product": "whatsapp",
        "to": to_phone,
        "type": "interactive",
        "interactive": {
            "type": "list",
            "body": {"text": body},
            "action": {
                "button": button_text,
                "sections": sections
            }
        }
    }
    response = self.client.send_whatsapp_message(
        originationPhoneNumberId=self.phone_number_id,
        message=json.dumps(payload).encode('utf-8'),
        metaApiVersion='v21.0'
    )

Lambda Layer for Strands Agents

The Strands Agents SDK provides an official Lambda Layer that includes all required dependencies pre-built for the Lambda runtime.

Session state – Amazon DynamoDB

Two DynamoDB tables store conversation state. The sessions table tracks the full conversation state machine (INITIATED, AWAITING_PROJECT_SELECT, AWAITING_ACTION, AWAITING_ID, LOAN_APPROVED, VISIT_CONFIRMED), with a 30-minute TTL.

Conversation flow

The customer journey unfolds across four steps in WhatsApp.

Step 1: Property discovery

When the customer sends the initial message, the supervisor agent sends a welcome message followed by an interactive list picker showing properties grouped by developer. The list picker uses WhatsApp’s native interactive message format.

Step 2: Property detail with action buttons

When the customer selects a property, the supervisor sends a rich detail card with key highlights, regulatory registration, and three action buttons:

eum.send_buttons(phone, body, [
    {"id": "check_loan", "title": "Check Loan"},
    {"id": "book_visit", "title": "Book Site Visit"},
    {"id": "talk_sales", "title": "Talk to Sales"}
])

Step 3: Loan pre-approval with Strands Agents

When the customer chooses Check Loan and submits their tax identification number, the supervisor invokes the Strands agent pipeline. Four agents run sequentially on Amazon Bedrock, each using its specialized tools. The following log output shows the pipeline in action:

Running Strands agent pipeline for ID: ABCD****
Identity agent: True
Credit agent: score=782, offers=3
Fraud agent: low
Property agent: good

The customer receives a loan approval card with offers from multiple lending institutions, each with personalized interest rates based on the credit score returned by the credit agent. The full pipeline typically runs in under 10 seconds.

Step 4: Site visit booking

The customer selects a time slot from an interactive list picker and receives a confirmation with relationship manager details and a location card.

Demo implementation: India real estate market

This demo uses India-specific implementations: PAN validation for identity, CIBIL scores for credit (300-900 range), example bank offers with EMI in Rupees, RERA registration validation, and free cab pickup for site visits.

To adapt this solution for another region, you replace the tool implementations with calls to your local tax authority, credit bureau, lending institutions, and property registry. The agent architecture, WhatsApp integration, and conversation flow remain unchanged.

Deployment

To deploy the demo solution, run the following commands:

git clone https://github.com/aws-samples/sample-ai-powered-real-estate-agent.git
cd sample-ai-powered-real-estate-agent
./deploy.sh --env=demo \
    --phone-number-id <your-phone-number-id> \
    --business-number +14155552671 \
    --region us-east-1

After deployment, in the AWS End User Messaging Social console, route incoming messages for your phone number ID to the SNS topic demo-whatshome-incoming-messages created by the stack.

Test the solution

open demo/real-estate-landing.html

Select Enquire Now on any property card. WhatsApp opens at the configured business number with a prefilled message. Send the message and finish the loan pre-approval flow on WhatsApp.

Sample conversation

The following images show how a customer interacts with the real estate AI assistant.

WhatsApp screen showing the customer’s prefilled enquiry message and the AI assistant’s welcome reply with a list picker of available properties.

The customer lands on WhatsApp with a predefined message from the website, and the AI assistant greets them with a welcome message.

WhatsApp screen showing a property detail card with three action buttons: Check Loan, Book Site Visit, and Talk to Sales.

The customer selects the Check Loan option for one of the properties listed.

 

WhatsApp screen showing a loan approval card with offers from SBI, HDFC, and LIC Housing Finance, each with personalized interest rates.

The agents are invoked to verify the customer details and provide loan quotations.

WhatsApp screen showing a site visit confirmation with the assigned relationship manager’s details and a pinned location card.

The customer books a site visit after selecting a suitable time slot.

Clean up

To avoid ongoing charges, delete the resources you created during this walkthrough:

sam delete --stack-name whatshome-demo --region us-east-1

Deleting the CloudFormation stack removes the Lambda functions, DynamoDB tables, Amazon SNS topics, Amazon Simple Queue Service (Amazon SQS) queue, AWS Key Management Service (AWS KMS) key, and AWS Identity and Access Management (IAM) roles. If you deployed the demo landing page to Amazon Simple Storage Service (Amazon S3) and Amazon CloudFront, delete those resources separately.

Conclusion

You can combine the Strands Agents SDK, Amazon Bedrock, AWS End User Messaging Social, and Lambda to build an end-to-end WhatsApp assistant. The multi-agent architecture has specialized agents for identity verification, credit scoring, fraud detection, and property valuation. This decomposition shows how you can break complex business workflows into focused AI agents that collaborate to deliver instant results.

The same pattern works for banking loan applications, insurance claims, healthcare appointments, and ecommerce order tracking.

To get started, see the AWS End User Messaging Social documentation and the Strands Agents SDK on GitHub.


About the authors

Maximize Amazon EC2 Capacity Reservations with Capacity Manager data exports

Post Syndicated from Venu Geddam original https://aws.amazon.com/blogs/compute/maximize-amazon-ec2-capacity-reservations-with-capacity-manager-data-exports/

In our previous post, we introduced Amazon EC2 Capacity Manager and its data export capability. Amazon EC2 Capacity Manager provides centralized visibility into your Amazon Elastic Compute Cloud (Amazon EC2) capacity usage across all accounts and Regions in your organization. It tracks capacity usage for three types of EC2 capacity: On-Demand instances, Spot instances, and On-Demand Capacity Reservations (ODCR). On the AWS Management Console, it provides 90 days of historical capacity data. With data exports to Amazon Simple Storage Service (Amazon S3), you can retain and analyze capacity trends beyond this period using your preferred analytics tools.

In this post, we demonstrate how to configure EC2 Capacity Manager data exports to Amazon S3 and query historical capacity data using Amazon Athena. This approach helps you identify long-term usage patterns, plan capacity needs, and optimize resource allocation across your organization.

Solution overview

The following diagram illustrates the solution architecture. EC2 Capacity Manager exports capacity data to Amazon S3, where Amazon Athena queries it using SQL with automatic partition discovery.

Architecture diagram showing EC2 Capacity Manager exporting capacity data to Amazon S3 on a scheduled basis, and Amazon Athena querying the data directly from S3 using SQL with partition projection for automatic partition discovery

The solution involves the following steps:

  1. Set up an S3 bucket for capacity data export.
  2. Configure EC2 Capacity Manager data export.
  3. Set up Amazon Athena to query the exported data.
  4. Run queries to analyze capacity patterns.

Prerequisites:

  • An AWS account with permissions to create S3 buckets and configure EC2 Capacity Manager.
  • AWS Command Line Interface (AWS CLI) installed and configured (optional, for CLI-based setup).
  • Familiarity with SQL for querying data in Athena.

Setting up data export to Amazon S3

EC2 Capacity Manager can export capacity data in compressed CSV (Gzip) or compressed Parquet (Snappy) format. Use Parquet format for query performance in Athena (Parquet’s columnar format is designed to optimize analytical queries).

Configure the data export

You can configure data export through the EC2 Capacity Manager console or AWS CLI.

To configure data export using the console:

  1. Open the Amazon EC2 console at https://console.aws.amazon.com/ec2/.
  2. In the navigation pane, choose Capacity Manager.
  3. Choose the Data exports tab.
  4. Choose Create data export.
  5. For Output format, select Parquet.
  6. For S3 bucket, choose Create bucket for me to create a new bucket with the required permissions, or select an existing bucket from the list.
  7. If you selected an existing bucket, add the bucket policy shown in the following section to grant EC2 Capacity Manager write access.
  8. (Optional) For S3 prefix, enter a prefix to organize your exported files (for example, capacity-data/).
  9. For Schedule, select Hourly.
  10. Choose Create.

Screenshot of EC2 Capacity Manager Create data export page in AWS Console showing export properties: Data export name, output format set to Parquet, S3 location for export delivery and Tags

After you create the data export, EC2 Capacity Manager displays the export details.

Screenshot showing EC2 Capacity Manager data export status with ‘Latest Delivery’ column displaying ‘delivered’ status, indicating the export is ready for Athena setup

Update the S3 bucket policy (existing buckets only)

If you use an existing S3 bucket, you must add the bucket policy shown in the following example to grant EC2 Capacity Manager write access.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ec2.capacitymanager.amazonaws.com"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<BUCKET_NAME>",
                "arn:aws:s3:::<BUCKET_NAME>/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "<AWS_ACCOUNT_NUMBER>"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:ec2:<AWS_REGION>:<AWS_ACCOUNT_NUMBER>:capacity-manager-data-export/*"
                }
            }
        }
    ]
}

Replace <AWS_ACCOUNT_NUMBER> with your AWS account number, <AWS_REGION> with your AWS Region (for example, us-west-2), and <BUCKET_NAME> with your bucket name.

To configure data export using the AWS CLI :

aws ec2 create-capacity-manager-data-export \
    --s3-bucket-name <BUCKET_NAME> \
    --s3-bucket-prefix <BUCKET_PREFIX>/ \
    --schedule hourly \
    --output-format <FORMAT> \
    --region <AWS_REGION>

# Replace:
# <BUCKET_NAME> with your bucket name,
# <BUCKET_PREFIX> with your bucket prefix (for example, capacity-data/),
# <FORMAT> with parquet or csv, and
# <AWS_REGION> with your AWS Region (for example, us-west-2)

# The output of the above command would give you a Data Export ID

{ "CapacityManagerDataExportId": "cmde-00a7d0e64e43889f1" }

After creating the data export, wait for the first export to complete before proceeding to set up Athena. You can check the export status using the following command:

aws ec2 describe-capacity-manager-data-exports --region <AWS_REGION>

The command returns details about your data export configuration, including the delivery status:

{
    "CapacityManagerDataExports": [
        {
            "CapacityManagerDataExportId": "cmde-00a7d0e64e43889f1",
            "S3BucketName": "capacity-manager-exports-123456789012",
            "S3BucketPrefix": "capacity-data/",
            "Schedule": "hourly",
            "OutputFormat": "parquet",
            "CreateTime": "2026-04-10T19:04:36.824000+00:00",
            "LatestDeliveryStatus": "delivered",
            "LatestDeliveryStatusMessage": "Successfully delivered to s3://capacity-manager-exports-123456789012/y=2026/m=04/d=10/h=15/...",
            "LatestDeliveryTime": "2026-04-10T19:05:39.176000+00:00"
        }
    ]
}

Wait until LatestDeliveryStatus shows "delivered" before proceeding to the next section. The first export typically appears in your S3 bucket in a couple of hours. Subsequent exports follow your configured schedule.

Setting up Amazon Athena to query capacity data

After EC2 Capacity Manager exports data to your S3 bucket, you can use Amazon Athena to query the data using standard SQL. Athena uses AWS Glue as its metadata store. Specifically, it relies on the AWS Glue Data Catalog, which contains table definitions that tell Athena where you have stored your data in S3 and how you have structured it. When you create tables in Athena, you’re actually creating metadata entries in the Data Catalog that Athena references when running queries.

Create an Athena database and table

You can create the table using AWS Glue crawler or manually with SQL. AWS Glue crawler automatically discovers the complete schema from your exported Parquet files, including optional fields like resource tags if enabled. It helps minimize manual schema definition efforts. If the export format changes in the future, you can re-run the crawler to update the table definition. For detailed instructions on creating a Glue Crawler, see Use a crawler to add a table in the Amazon Athena User Guide.

In this post, we create the table manually using a SQL statement. We also use partition projection for automatic partition discovery. We do this because EC2 Capacity Manager continuously adds new partitions to the S3 bucket according to your configured schedule. As new partitions arrive in S3, Athena doesn’t know about them until you run MSCK REPAIR TABLE or ALTER TABLE ADD PARTITION to update the AWS Glue Data Catalog. This becomes an overhead when data arrives frequently.

With partition projection, you define the partition scheme and specify its range/rules in the table properties. Athena then computes the partitions at query time instead of looking them up in the Glue Data Catalog. So partition projection automatically makes new partitions visible as soon as EC2 Capacity Manager exports the data to S3, eliminating the need for you to update metadata. The CREATE TABLE statement that follows defines the schema for EC2 Capacity Manager exports. If your capacity reservations are already tagged, add the corresponding tag columns (for example, tag_environment string or tag_costcenter string). Alternatively, use an AWS Glue crawler to automatically discover your complete schema, including tag columns.

  1. Open the Athena console at https://console.aws.amazon.com/athena/
  2. If prompted, configure a query result location in S3. This is where Athena writes query output. It is separate from the S3 bucket that stores your capacity data.
  3. Run the following query to create a database:
CREATE DATABASE IF NOT EXISTS capacity_manager_db;
  1. Create a table for Parquet format data:
CREATE EXTERNAL TABLE IF NOT EXISTS capacity_manager_db.capacity_data (
    metricgroupname string,
    periodstarttimestamp string,
    periodendtimestamp string,
    orgid string,
    accountid string,
    region string,
    `az-id` string,
    instancefamily string,
    instancetype string,
    platform string,
    tenancy string,
    reservationid string,
    `reservation arn` string,
    unusedfinancialowner string,
    reservationtype string,
    instancematchcriteria string,
    reservationcreatetimestamp string,
    reservationstarttimestamp string,
    reservationendtimestamp string,
    reservationenddatetype string,
    reservationstate string,
    reservationtotalcapacityhrsvcpu string,
    reservationtotalcapacityhrsinst string,
    reservationtotalestimatedcost string,
    reservationmaxsizevcpu string,
    reservationmaxsizeinst string,
    reservationminsizevcpu string,
    reservationminsizeinst string,
    reservationunusedtotalcapacityhrsvcpu string,
    reservationunusedtotalcapacityhrsinst string,
    reservationunusedtotalestimatedcost string,
    reservationmaxunusedsizevcpu string,
    reservationmaxunusedsizeinst string,
    reservationminunusedsizevcpu string,
    reservationminunusedsizeinst string,
    reservationmaxutilization string,
    reservationminutilization string,
    reservationavgutilizationvcpu string,
    reservationavgutilizationinst string,
    reservationavgfuturesizevcpu string,
    reservationavgfuturesizeinst string,
    reservationmaxfuturesizevcpu string,
    reservationmaxfuturesizeinst string,
    reservationminfuturesizevcpu string,
    reservationminfuturesizeinst string,
    reservationavgcommittedsizevcpu string,
    reservationavgcommittedsizeinst string,
    reservationmaxcommittedsizevcpu string,
    reservationmaxcommittedsizeinst string,
    reservationmincommittedsizevcpu string,
    reservationmincommittedsizeinst string,
    reservedtotalusagehrsvcpu string,
    reservedtotalusagehrsinst string,
    unreservedtotalusagehrsvcpu string,
    unreservedtotalusagehrsinst string,
    reservedtotalestimatedcost string,
    unreservedtotalestimatedcost string,
    spottotalusagehrsvcpu string,
    spottotalusagehrsinst string,
    spottotalestimatedcost string,
    spotavgruntimebeforeinterruptioninst string,
    spotmaxruntimebeforeinterruptioninst string,
    spotminruntimebeforeinterruptioninst string,
    spottotalinterruptionsinst string,
    spottotalinterruptionsvcpu string,
    spottotalcountinst string,
    spottotalcountvcpu string,
    spotinterruptionrateinst string,
    spotinterruptionratevcpu string
)
PARTITIONED BY (
    y string,
    m string,
    d string,
    h string
)
ROW FORMAT SERDE
    'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
    'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
    'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
    's3://<BUCKET_NAME>/'
TBLPROPERTIES (
    'projection.enabled' = 'true',
    'projection.y.type' = 'integer',
    'projection.y.range' = '2024,2030',
    'projection.y.digits' = '4',
    'projection.m.type' = 'integer',
    'projection.m.range' = '01,12',
    'projection.m.digits' = '2',
    'projection.d.type' = 'integer',
    'projection.d.range' = '01,31',
    'projection.d.digits' = '2',
    'projection.h.type' = 'integer',
    'projection.h.range' = '00,23',
    'projection.h.digits' = '2',
    'storage.location.template' = 's3://<BUCKET_NAME>/y=${y}/m=${m}/d=${d}/h=${h}/'
);

Replace <BUCKET_NAME> in the LOCATION clause and storage.location.template property with your bucket name, and capacity-data/ with table name of your choice.

Now that your table is set up, you can explore how to query the exported data.

Example queries for common use cases

The following queries demonstrate how to analyze your EC2 capacity data for cost optimization and capacity planning. The queries use date values (year=‘2026’, month=‘04’) and table name capacity_data. Adjust the partition values to match your actual data’s time period and table name to match your value. When querying EC2 Capacity Manager export data:

  1. Metric group filtering: EC2 Capacity Manager exports contain two types of data that the metricgroupname column identifies: Reservation Usage for analyzing ODCR utilization and optimization opportunities, and Instance Usage for analyzing overall capacity consumption across reserved, unreserved, and Spot instances. Always filter by the appropriate metric group for your analysis needs.
  2. Partition filtering: Always include partition filters (y, m, d, h) to improve query performance.
  3. Numeric operations: Use CAST to convert string columns to numeric types for proper comparison and sorting (for example, CAST(reservationavgutilizationinst AS double)).
  4. NULL handling: Use COALESCE to handle NULL values in calculations (for example, COALESCE(CAST(column AS double), 0)) to prevent NULL results in totals. Without COALESCE, when you add a column value NULL to a non-NULL value, the result is NULL.

Use case 1: Identify underutilized ODCRs

Discover On-Demand Capacity Reservations with low utilization that are generating cost waste. Identify specific reservations to downsize, cancel, or share with other teams to reduce unnecessary spending.

SELECT
    reservationid,
    instancetype,
    region,
    "az-id",
    reservationstate,
    ROUND(CAST(reservationavgutilizationinst AS double) * 100, 2) AS utilization_pct,
    CAST(reservationtotalcapacityhrsinst AS double) AS total_capacity_hrs,
    CAST(reservationunusedtotalcapacityhrsinst AS double) AS unused_capacity_hrs,
    ROUND(CAST(reservationunusedtotalestimatedcost AS double), 4) AS wasted_cost_usd
FROM capacity_data
WHERE metricgroupname = 'Reservation Usage'
    AND CAST(reservationavgutilizationinst AS double) < 0.5
    AND reservationavgutilizationinst IS NOT NULL
    AND y = '2026'
    AND m = '04'
ORDER BY wasted_cost_usd DESC
LIMIT 3;

Sample output:

reservationid instancetype region az-id reservationstate utilization_pct total_capacity_hrs unused_capacity_hrs wasted_cost_usd
cr-041aedfba865106c1 m5.8xlarge us-west-2 usw2-az2 active 0 1 1 1.536
cr-089f17dc178e993a8 m5.8xlarge us-west-2 usw2-az1 active 0 1 1 1.536
cr-089f17dc178e993a8 m5.8xlarge us-west-2 usw2-az1 active 0 1 1 1.536

Use case 2: ODCR utilization summary by instance type

Get a comprehensive view of ODCR utilization across instance types to identify which instance families have the worst utilization rates. This helps prioritize optimization efforts on the reservations with the highest cost impact.

SELECT
    instancetype,
    COUNT(DISTINCT accountid) AS account_count,
    COUNT(DISTINCT reservationid) AS reservation_count,
    ROUND(SUM(COALESCE(CAST(reservationtotalcapacityhrsinst AS double), 0)), 2) AS total_odcr_capacity,
    ROUND(SUM(COALESCE(CAST(reservationunusedtotalcapacityhrsinst AS double), 0)), 2) AS total_unused_capacity,
    ROUND(AVG(COALESCE(CAST(reservationavgutilizationinst AS double), 0)) * 100, 2) AS avg_utilization_pct,
    ROUND(SUM(COALESCE(CAST(reservationunusedtotalestimatedcost AS double), 0)), 2) AS total_unused_cost_usd
FROM capacity_data
WHERE metricgroupname = 'Reservation Usage'
    AND y = '2026'
    AND m = '04'
GROUP BY instancetype
ORDER BY total_unused_cost_usd DESC
LIMIT 3;

Sample output:

instancetype account_count reservation_count total_odcr_capacity total_unused_capacity avg_utilization_pct total_unused_cost_usd
m5.8xlarge 1 2 311.99 311.99 0.0 479.22
c5.9xlarge 1 1 211.0 211.0 0.0 322.83
t3.micro 1 1 1055.0 1055.0 0.0 10.97

Use case 3: Identify peak usage patterns

Analyze average hourly usage patterns across reserved, unreserved, and Spot capacity to identify when your workloads typically hit peak demand. This breakdown helps you understand your capacity mix, plan for peak periods, and optimize your purchasing strategy.

SELECT
    h AS hour,
    ROUND(AVG(COALESCE(CAST(reservedtotalusagehrsinst AS double), 0)), 2) AS avg_reserved_usage_hours,
    ROUND(AVG(COALESCE(CAST(unreservedtotalusagehrsinst AS double), 0)), 2) AS avg_unreserved_usage_hours,
    ROUND(AVG(COALESCE(CAST(spottotalusagehrsinst AS double), 0)), 2) AS avg_spot_usage_hours,
    ROUND(AVG(COALESCE(CAST(reservedtotalusagehrsinst AS double), 0) + COALESCE(CAST(unreservedtotalusagehrsinst AS double), 0) + COALESCE(CAST(spottotalusagehrsinst AS double), 0)), 2) AS avg_total_usage_hours
FROM capacity_data
WHERE metricgroupname = 'Instance Usage'
    AND y = '2026'
    AND m = '04'
GROUP BY h
ORDER BY avg_total_usage_hours DESC
LIMIT 3;

Sample output:

hour avg_reserved_usage_hours avg_unreserved_usage_hours avg_spot_usage_hours avg_total_usage_hours
09 0.75 0.5 0 1.25
10 0.75 0.5 0 1.25
15 0.75 0.5 0 1.25

Use case 4: Regional capacity distribution

Understand how your ODCR capacity is distributed across AWS Regions and instance types. This geographic view helps you identify Regions with excess capacity that could be redistributed or consolidated to improve utilization and reduce costs.

SELECT
    region,
    instancetype,
    ROUND(SUM(COALESCE(CAST(reservationtotalcapacityhrsinst AS double), 0)), 2) AS total_reserved_capacity,
    ROUND(SUM(COALESCE(CAST(reservationunusedtotalcapacityhrsinst AS double), 0)), 2) AS unused_reserved_capacity,
    ROUND(AVG(COALESCE(CAST(reservationavgutilizationinst AS double), 0)) * 100, 2) AS avg_utilization_pct
FROM capacity_data
WHERE metricgroupname = 'Reservation Usage'
    AND y = '2026'
    AND m = '04'
GROUP BY region, instancetype
ORDER BY region, total_reserved_capacity DESC
LIMIT 3;

Sample output:

region instancetype total_reserved_capacity unused_reserved_capacity avg_utilization_pct
us-west-2 t2.nano 1484.0 1060.0 33.34
us-west-2 t3.micro 1060.0 1060.0 0.0
us-west-2 t2.micro 848.0 636.0 25.0

Use case 5: Unused capacity reservations by Region and Availability Zone

Pinpoint exactly where you have unused ODCR capacity at the Availability Zone level. This granular view enables you to share unused capacity with other teams in the same AZ or modify reservations to better match actual usage patterns.

SELECT
    region,
    "az-id",
    instancetype,
    ROUND(SUM(COALESCE(CAST(reservationunusedtotalcapacityhrsinst AS double), 0)), 2) AS unused_capacity_instances,
    ROUND(AVG(COALESCE(CAST(reservationavgutilizationinst AS double), 0)) * 100, 2) AS avg_utilization_pct,
    ROUND(SUM(COALESCE(CAST(reservationunusedtotalestimatedcost AS double), 0)), 2) AS unused_cost_usd
FROM capacity_data
WHERE metricgroupname = 'Reservation Usage'
    AND y = '2026'
    AND m = '04'
    AND CAST(reservationunusedtotalcapacityhrsinst AS double) > 0
GROUP BY region, "az-id", instancetype
ORDER BY unused_cost_usd DESC
LIMIT 3;

Sample output:

region az-id instancetype unused_capacity_instances avg_utilization_pct unused_cost_usd
us-west-2 usw2-az1 c5.9xlarge 212.0 0.0 324.36
us-west-2 usw2-az2 m5.8xlarge 157.0 0.0 241.15
us-west-2 usw2-az1 m5.8xlarge 157.0 0.0 241.15

Clean up

To avoid incurring future charges, delete the resources you created:

Warning: This permanently deletes the table definition. Verify that you no longer need to query this data before proceeding.

  1. Delete the Athena table by running the following query: DROP TABLE IF EXISTS capacity_manager_db.capacity_data;
  2. Delete the database by running the following query: DROP DATABASE IF EXISTS capacity_manager_db;
  3. Navigate to the Athena console settings.
  4. Note the query result location S3 bucket.
  5. If you created this bucket specifically for this tutorial:
    1. Empty the S3 bucket by running: aws s3 rm s3://<QUERY_RESULT_BUCKET_NAME> --recursive
    2. Delete the S3 bucket by running: aws s3 rb s3://<QUERY_RESULT_BUCKET_NAME>
  6. Delete the data export configuration by using AWS Management Console or AWS CLI.
    1. If using AWS Console, select the “Delete data export” option in the Actions menu.

Screenshot of AWS Management Console showing the Delete option in the Actions menu for an EC2 Capacity Manager data export configuration

  1. To delete the configuration using AWS CLI:
    # List your data export configurations to find the export ID.
    aws ec2 describe-capacity-manager-data-exports --region <AWS_REGION>
    
    # The output shows details for export configuration which has the Data Export ID
    # Sample output is shown in the configure data export section above.
    
    # Then delete the export configuration using the ID from the output
    aws ec2 delete-capacity-manager-data-export \
        --data-export-id <EXPORT_ID> \
        --region <AWS_REGION>

    Replace <EXPORT_ID> with your data export ID and <AWS_REGION> with your AWS Region.

    Warning: Deleting the S3 bucket permanently removes all exported capacity data. Verify that you have backed up any data you need before proceeding.

  1. (Optional) Delete the S3 bucket and data: If you no longer need the exported data, complete the following steps:
    1. Empty the S3 bucket by running: aws s3 rm s3://<BUCKET_NAME> --recursive
    2. Delete the S3 bucket by running: aws s3 rb s3://<BUCKET_NAME>

Conclusion

In this post, we demonstrated how to configure EC2 Capacity Manager data exports to Amazon S3 and query historical capacity data using Amazon Athena. This approach enables you to retain capacity data beyond the 90-day console limit.

As you scale your capacity management practices, consider integrating these exports with your existing analytics and monitoring workflows. By combining EC2 Capacity Manager data with your broader infrastructure metrics, you can make data-driven decisions about capacity allocation and optimization across your organization.

To deepen your understanding, explore the EC2 Capacity Manager documentation for additional features, learn more about Amazon Athena for advanced query capabilities, and review EC2 capacity optimization best practices. Share your feedback and tell us how you’re using EC2 Capacity Manager data exports to optimize your capacity planning in the comments.

[$] Hardening the kernel with allocation tokens and bootpatch-SLR

Post Syndicated from corbet original https://lwn.net/Articles/1078699/

There is a lot of work going into eliminating exploitable bugs from the
kernel and preventing the addition of new ones. Even if this work is
maximally successful, though, there is no chance that the kernel will be
free of these bugs anytime soon. Thus, there is also ongoing interest in
hardening the kernel to make the existing bugs more difficult to exploit.
The upcoming 7.2 kernel release will include a change to how dynamically
allocated structures are placed in memory to make them harder to overwrite,
while a project to randomize structure layout at boot time has a rather
longer timeline.

Как Русия унищожава българската идентичност в окупираните територии на Украйна

Post Syndicated from original https://www.toest.bg/kak-rusiya-unishtozhava-bulgarskata-identichnost-v-okupiranite-teritorii-na-ukrayna/

Как Русия унищожава българската идентичност в окупираните територии на Украйна

Украинските българи са най-голямата историческа българска общност извън границите на държавата. Общият им брой е над 200 000, а по-голямата част от тях живеят в Одеска област. Около 30 000 етнически българи населяват Запорожка, Херсонска и Донецка област и след февруари 2022 г. се намират под временна руска военна окупация. За съдбата на тези 30 000 души през последните четири години се знае твърде малко, а българското общество и политиците у нас очевидно смятат темата за доста неудобна заради нуждата от пряка конфронтация с руската държава. 

Крайно време е това да се промени. 

Украинските българи са успели да запазят народните си обичаи, езика и културата си още от средата на XIX век, когато на вълни се преместват от Балканите на север към дивата степ, каквато е представлявала тогава Южна Украйна. Техните общности са преминали през изключителни исторически изпитания, включително сталинския терор в СССР, Гладомор и целенасочена съветска политика за изличаване на българската им идентичност. България като свободна страна, членка на ЕС и НАТО е длъжна да защити украинските българи под руска окупация чрез максимален дипломатически натиск върху Русия и чрез допълнителна военна помощ за Киев и да не допусне унищожаване на националната им идентичност. Това е въпрос на национален интерес, но преди всичко на морал.

Руската доктрина за изличаване на идентичност

За да се разбере в дълбочина трагедията на българското малцинство, живеещо в момента под вражеска окупация в Украйна, случващото се трябва да бъде разгледано през призмата на общата стратегия на Кремъл. Руската политика във временно окупираните области на Украйна не се изчерпва с военен контрол на територии и заграбване на ресурси. Целта ѝ е пълно асимилиране на местното население с целенасочена, системна и брутална кампания.

В анализ на Atlantic Council тези действия от страна на Москва се дефинират като опит за „изличаване на идентичността“ на окупираното население. Крайната цел на Владимир Путин е изграждането на нова изкуствена демографска реалност, в която няма място за национално самоопределяне, различно от официалния имперски наратив на Москва.

В тази доктрина на културен геноцид образованието и администрацията са превърнати в оръжие. Веднага след установяването на военен контрол в Запорожка, Херсонска и Донецка област окупационните власти задействат насилствена русификация. Местните училищни програми са заменени с руските държавни стандарти. Руският език е наложен като единствен език на администрацията, образованието и публичните институции, а използването на украински е системно ограничавано и репресирано.

Този жесток подход не е нов. Исторически е познат от германизацията на окупираните полски територии през Втората световна война, русификацията на Полша, Литва и Украйна в Руската империя през XIX век, съветизацията на балтийските държави след 1940 г., дори и отвъд океана, в САЩ и Канада през XIX и XX век, когато деца от коренните народи са извеждани насилствено от семействата им и са настанявани в интернати, където им се забранява да говорят на родния си език и да практикуват традиционната си култура в опит да им се наложи нова национална идентичност. В тези интернати много от тях загиват.

Руската окупационна политика е насочена както срещу украинците като по-голяма част от населението на окупираните територии, така и срещу десетки хиляди хора, които не са етнически украинци, но представляват неразделна част от културната мозайка на региона. Такива са местните българи, гърци, татари и др. Именно в капана на тази безмилостна машина за заличаване на идентичност и език днес са уловени и 30-те хиляди таврийски българи, чиито вековни традиции са на път да бъдат унищожени от Русия.

Българската реакция – твърде скромна и много закъсняла

Преди руската инвазия през 2022 г. таврийските българи в Украйна имат пълни граждански права и свободно се възползват от образование на български език и от широко развити български културни дейности. Местните общности с подкрепата на властите в Киев активно работят за запазване на българското народно самосъзнание в Запорожка област, координирайки откриването на неделни училища и културни центрове с подкрепата на София.

Сред най-важните места на тези общности са училище „Васил Левски“ в Бердянск, неделното българско училище в Мелитопол и украинско-българският лицей в град Приморск. През 2023 г. образователният център в Приморск е ограбен от руски военни, които изнасят от сградата компютърна техника и ценно имущество, както свидетелстват очевидци. Учебното заведение има 27-годишна история, като близо половината от неговите над 1000 завършили ученици са продължили образованието си в университети в България.

След разпадането на СССР и обявяването на украинската независимост таврийските българи успяват да изградят мемориална мрежа, посветена на националните ни герои, а тези паметници стават центрове на ежегодни събори, фестивали и чествания на Деня на бесарабските българи. До началото на войната регионът се развива като свободна и сигурна среда, в която българската култура и език съжителстват в пълен синхрон с украинската гражданска идентичност. 

Населените с българи украински територии в Запорожка област са окупирани от руската армия още в първите дни и седмици на пълномащабната инвазия след 24 февруари 2022 г. През юли 2022 г. разследване на „Свободна Европа“ разкрива руската окупационна политика в Южна Украйна, под чиито удари попадат всички български училища и културни центрове в региона. Москва прехвърля пропагандни методи, които десетилетия наред са прилагани в самата Русия.

Според документирани свидетелства на Human Rights Watch и други международни организации окупационните власти са налагали руските учебни програми чрез натиск върху родители и учители. В отделни случаи родители са били заплашвани с глоби, задържане или отнемане на родителски права, ако откажат да запишат децата си в училища под руски контрол или ако продължат обучението им по украинската програма.

Тази принудителна русификация и заличаване на украинския, българския и други езици в областта протича в почти пълен информационен вакуум поради блокирани комуникации с външния свят в условията на война. През септември 2022 г. в интервю по Нова телевизия проф. Владимир Милчев, етнически българин и декан на Историческия факултет в Запорожкия университет, за първи път официално алармира, че в окупираните територии руските власти са наложили пълна забрана на българския език.

Всички неделни училища, културни центрове и дружества в Мелитополски и Бердянски район – сърцето на таврийските българи, са затворени. Учебните програми по български език, история и традиции са ликвидирани, а на местните преподаватели е поставен ултиматум: да преминат изцяло към руските държавни стандарти или да напуснат. 

Тази политика на етническо заличаване на българите от страна на руските нашественици в Украйна получава своето институционално потвърждение в България няколко месеца по-късно. През декември 2022 г. Агенцията за българите в чужбина официално обобщава мащаба на образователната катастрофа под руска окупация. Данните сочат, че руската окупационна администрация е прекратила дейността на 13 български неделни училища в Запорожка област, в които дотогава са се обучавали над 1000 деца.

Според руската посланичка у нас Елеонора Митрофанова забрана за изучаване на български език в училищата в Запорожка област, Мариупол и Бердянск няма. Има специфична организация.

Нямаме никакви забрани за изучаване на езици, но имаме специфична система за организиране на този процес. По-конкретно, това зависи от броя на децата, които искат да изучават български, литовски, грузински или друг език. Ако се достигне необходимият брой деца, училището винаги ще се съобрази с техните желания. Но тъй като българската страна повдигна този въпрос, аз, разбира се, ще изясня ситуацията с ръководството и хората, отговорни за тези региони, за да се разбере реалната ситуация,

казва Митрофанова в интервю за ТАСС, цитирано от OffNews.bg.

Физически терор, репресии и заплахи за сексуално насилие

Зад фасадата на административните забрани и затварянето на училища обаче се крие далеч по-мрачна реалност – физически терор, изтезания и страх за живота, които принуждават местните българи масово да напускат домовете си. Специален доклад на украинския омбудсман за правата на националните малцинства в условията на руска агресия разкрива шокиращи лични свидетелства на етнически българи, преминали през ада на окупацията в Запорожка и Херсонска област.

Един от основните мотиви за бягство на жените от българската общност е постоянният страх от сексуално насилие от страна на руските окупатори. За армията на Путин изнасилванията на жени в Украйна са просто още едно оръжие във войната, средство за унижение и мъчение на нападната страна. Цитирана в доклада представителка на българското малцинство от окупираната част на Запорожието разказва пред разследващите за системния натиск, на който са подложени жените на публични места в Мелитопол от страна на руските военни формирования и в частност от т.нар. кадировци:

Пътувах от селото до пазара в Мелитопол, за да продавам мляко и да изкарам пари. Често вземах дъщеря си с мен, защото училището в селото вече не работеше – окупаторите го превърнаха във военна база, а ме беше страх да я оставя сама. В един момент в града дойдоха много кадировци. Постоянно се заканваха и тормозеха младите жени на пазара, по улиците, по спирките. Пияни, с оръжие в ръце, те се държаха с нас като с робини и демонстрираха пълната си власт.

Българите в окупираните територии са обект на политически репресии, филтрация и затваряне в тайни центрове за изтезания (т.нар. мъчилища). В доклада е документиран тежкият случай на мъж с български корени от Херсон, задържан от руските сили заради участие в проукраински протести, доброволческа дейност и изразяване на позиции в социалните мрежи. Той отказва да напусне града преди окупацията, защото се грижи за 77-годишния си баща, болен от рак. Свидетелството му за момента на ареста показва абсолютната безмилостност на окупационния режим:

Към 5 сутринта се събудих от ярка светлина в прозореца и крясъци в двора, последвани от силно блъскане по вратата. Петима въоръжени окупатори с маски нахлуха в къщата, докато други петима чакаха отвън. Наредиха на мен и баща ми да седнем на дивана, докато обискират. Когато ме натикаха в колата, видях как баща ми изскочи на улицата – викаше и плачеше. Той е на 77 години, с онкологично заболяване, много слаб. Един от войниците го удари с автомат в гърдите. Видях как падна на земята. Това беше последният път, в който го видях.

Тези и други свидетелства, събрани от кабинета на украинския омбудсман, категорично доказват, че руската окупационна политика спрямо таврийските българи е част от кампания на терор, при която отстояването на човешкото достойнство, свободната воля или каквато и да е идентичност, различна от наложената от Кремъл, се наказват с насилие, отвличания и масов страх.

Срещу това унищожаване на българската идентичност държавата ни реагира едва през 2025 г., когато в отговор на депутатски въпрос Георг Георгиев, министър на външните работи, потвърждава, че над 30 000 таврийски българи в окупираните Запорожка, Херсонска и Донецка област са подложени на системно и грубо погазване на основните човешки права от страна на Москва.

България официално отчита, че окупационните власти целенасочено унищожават възможностите за изучаване на майчиния език и затварят българските неделни училища и центрове. От външното ни министерство подчертават, че тези действия на Кремъл представляват грубо нарушение на международното хуманитарно право и са директен опит за насилствено заличаване на етническата и културна идентичност на българската общност в Украйна.

България на Радев като съучастник във войната срещу българите

В контекста на доказаното унищожаване на част от най-старата българска общност, опазила българския дух от XIX век насам, позицията на държавата изглежда, меко казано, неадекватна и клони към национално предателство. Румен Радев практически от началото на политическата си кариера повтаря опорните точки на руската пропаганда и се доказва като един от най-близките до Путин европейски политици.

Руският терор срещу българите под окупация е тема, която властта активно прикрива с мълчанието си, помагайки по този начин за унищожаването на общността на таврийските българи. Това престъпно мълчание превръща българските управляващи в директни съучастници в етническото прочистване на нашите сънародници под руска окупация. Докато таврийските българи биват подложени на терор и насилствена русификация, София позорно си затваря очите заради зависимостта на Румен Радев от Москва. Подобно абдикиране от националния интерес е исторически срам и унижение, което с всеки изминал ден заличава вековната история на българите в Украйна и обрича сънародниците ни на забвение.

The collective thoughts of the interwebz