День тисяча триста вісімдесят восьмий
Чекаю на перемогу.
Забавно наблюдать как все обсуждают сходку двух консильери Трампа в лице его зятя и друга, партнера по гольфу и недвижимости у мафиозного гангстера / криминального пахана Путина. Поехали отчитаться, а пахан еще и поиздевался над этими засранцами, заставил три часа ждать, а потом еще и выслушать полуторачасовую лекцию о Полтавской битве. Затем отправил их домой с ценными указаниями по разделу зон влияния. А уже через два дня после сходки в Кремле, Министерство финансов США частично приостановило санкции против России, объявленные в октябре прошлого года, как минимум до 29 апреля в отношении АЗС под брендом «Лукойл» за пределами России. Быстро Трамп отреагировал. А тут еще и Турция - ключевой посредник в переговорах, вызвала послов из Украины и России после того, как Киев взял на себя ответственность за атаки беспилотников на связанные с Россией танкеры в Черном море. Тогда как турки погрозили нам пальчиком и сказали больше так не поступать, Румыния уничтожила наш морской дрон. Российские дроны сбивать над территорией Румынии они боятся, а наш уничтожили, спасая очередной танкер. Путин сразу угрожает отрезать Украину от моря.
( Read more... )


Куда подевалися друзья в дискурсе вообще?
Вот здесь любопытнейшая картинка частоты употребления слова "друг"
А вот здесь автор пишет, что сочетание "верный друг" вообще вышло из дискурса в нашем веке. Вместо этого водятся "личные друзья" (у диктаторов и богатеев) и "близкие друзья" - те избранные, что не через фесбук сконнектились, а в реале.
Я вообще давно уже подозревал, что сама идея "верных друзей" и т.п. была внесена в русскую литературу советскими литераторами. Знаете, это, с приторной улыбочкой, голосом шпрехшталмейстера - "а теперь, дорогие друзья, выслушайте вашу любимую песню "Валенки"." Ну и все эти песни, где "верные друзья" преодолевают препятствия, борясь с врагами социализма и перестройки.
Но куда съебались все верные друзья в последние пару десятков лет - загадка! Что характерно, с friends всё практически буквально almost exactly наоборот.
Загадка!
Я побачив це недавно, але коїтися воно почалосі біля року тому. На деяких уйоб-сайтах звичайний теґ img став раптом виглядати як божевільне майкрософтське ікстеншона Інторнет Іксплореру 1998 року:
<img src="blob:https://example.com/b501e863-fe43-4b63-ae5d-dac14cac097e">
Уйоб-сторінка, яка його містить, наочно рендерить зображення без
жодних прублем, але коли наївний користувач збросіт лінк в чят, з
того вийде нічого--блоб, на який посилається <img>, існує лише ув
пам'ті конкретного інстансу бовзера, а на https://example.com/UUID
сервер відповість 404.
Навіщо це роблять? Деякі люди кожні n років починають боятися хотлінкінґу (сволочі воруют наш трафік), борці з ЕйАй намагаються зіпсувати бізнес злим корпораціям, а поціновувачі іграшкових DRM тішаться від нової скіми.
Якщо подивиться на fetch-ріквести такої сторінки, там будуть ресурси які схожі на зображення, але насправді не є ними:
$ url='https://ia800206.us.archive.org/🙈.jpg' $ curl -sI "$url" | grep -e type -e length -e obfuscate content-type: image/jpeg content-length: 267470 x-obfuscate: 1|uoEV6/PZOWtGhOZdVM898w== $ curl -s "$url" | head -c25 | file - /dev/stdin: data
Такий .jpg є зашифрований. Частковий ключа є ув X-Obfuscate хедері,
але про це не знає ані скрейпера рендомної ЕйАй контори, ані
будь-яка соцсіточка. Шифр також не афішується, і кожний уйоб-сайт може
мати який завгодно, дотримання рекомендацій тут зводить нанівець мету
обфускації.
Алгоритм малювання зображень тоді стає таким:
URL.createObjectURL;img, у якого атрібута src дорівнює
новому посиланню.Для збільшення ентропії можна написати кастомного елемента:
<img-blob alt="a fluffy cat" src="cat.bin"></img-blob>
який буде робити все перелічене самотужки.
Ув якості економії, аркайв.орґ AES-CTR-шифрує лише перші 1024 байт зображення. Бовзери знають про AES, але суворо вимагають secure context, що може дратувати під час тестування, тому для мікімаусного DRM можна взяти xor-шифра.
Обфускатувати X-Obfuscate хедера можна ще більше. Наприклад
x-obfuscate: rlW2MKWmnJ9hVwbtZFjtVzgyrFV6VPVkZwZ0AFW9Pt==
виглядає як рядок ув base64, але
$ echo rlW2MKWmnJ9hVwbtZFjtVzgyrFV6VPVkZwZ0AFW9Pt== | base64 -d | xxd
base64: invalid input
00000000: ae55 b630 a5a6 9c9f 6157 06ed 6458 ed57 .U.0....aW..dX.W
00000010: 3832 ac55 7a54 f564 6706 7400 55bd 3e 82.UzT.dg.t.U.>
Я спитав вініпухівський ДіпСік розібратися: він витратив 9 хвилин і залишив без води 2 села ув провінції Чжецзян, був кілька разів дуже близько від мети, але зрештою зазнав невдачі.
Рядок був оброблений напилком rot13:
$ alias rot13="tr 'A-Za-z' 'N-ZA-Mn-za-m'"
$ echo rlW2MKWmnJ9hVwbtZFjtVzgyrFV6VPVkZwZ0AFW9Pt== | rot13 | base64 -d
{"version": 1, "key": "12345"}
Ув якості домашнього завдання, до кастомного елементу можна додати
еквівалента loading="lazy" за допомогою Інтерсекційного
Спостерігача.
try/catch, а є перевірка прямо там, де вони можуть виникнути. Особисто я і в інших мовах намагаюсь так робити, не доводячи до try/catch в яких ти легко можеш загубити серйозну проблему. Тим більше що раніше, вони були дорогі в java.my_object = {
"method": lambda: print("Hello...")
}
my_object["method"]()І на чистому С теж можна використати цей підхід. Тобто об’єкт за такого підходу є — це те, що він може робити (це ще називається качина типізація), а не класична ієрархія класів. /В Python та JavaScript ми маємо качину типізацію з ієрархією класів — жахливу і тормозну суміш/. А тут все швиденько.string як читабельну строку і вводити для роботи з цим різні сутності не дуже добре. В Java зробили простіше String — це юнікод, який за потреби просто перетворюється в те, що потрібно.Optional, як у Java. Я люблю його за те, що це свідомий контракт, який потрібно обробити. В Go можна для цього використати кортеж, але на мій смак Optional краще тим, що такі б’є по рукам. Це один з тих нечастих випадків, коли я підтримую цю практику.