Dervish

ок, мне не показалось, что в саундтреках witcher 3 есть не всё.

похоже, мне очень повезло играть в оригинал

это хорватская народная песня Naranca, из которой Персиваль (Marcin Przybylowicz) делал кавер под названием Widow Maker
https://www.youtube.com/watch?v=Gz3P4tN-Wvw

Oj divojko jabuko rumena
Pari da te ma naranča rodila
Nije mene naranča rodila
Za goru me mat moja rodila

Bura mi je ziparinka bila
Zipju špreje va morje stavjala
Mornari me va mrižu lovili
Prodali me biloj Katarini

Katarina dobra žena bila
Pa je mene ka vilu odgojila
Z bilim kruhom I čreljenim vinom
Z bilim kruhom I čreljenim vinom

украинский список из комментариев к каверу от Alina Gingertail
похоже песня не очень добрая (в оригинале явно «продали»)

Ой ти, діва, яблучко рум’яне,
Певно, відьма тебе народила?
Та не відьма мене народила,
За горою мати народила.

Буря мене та холодна била,
В море мене мати викидала,
Сіттю моряки мене ловили,
Віддавали білій Катерині.

Катерина добра жінка була,
Вона мене радо оживляла,
З білим хлібом і червленим вином,
З білим хлібом і червоним вином.


вот нудный лонгрид
https://www.gamepressure.com/newsroom/artist-accuses-cd-projekt-red-of-violating-copyrights-in-the-witc/z19ce
TL;DR душный хорватский отморозок Elvis Staniс зарегил на фолковую песню свой копирайт и доебался до CDPR, почему-то (хотя они просто взяли всего Персиваля скопом, в том числе и эту аранжировку)

смешной гуглотранслейт оттуда
https://www.youtube.com/watch?v=w4xZYPcSi6E

Very nice song. In 2015, when the PC game "The Witcher 3: Wild Hunt" by the prestigious Polish game making studio "CD Projekt" was released, this song was in play as an ambient soundtrack. The game is based on the Slavic mythology of Croatia, the Czech Republic, Poland, Bosnia, Serbia and other Slavic countries. Most of you are familiar with Witcher today because after the huge success of the game, the popular series of the same name began to be filmed. So, in the game we come across a handful of similar songs from the region, old Slavic folk songs like our Orange. And of course, as only we Croats have to turn out to be morons, we sued the copyright-based studio to remove the song from the game for copyright reasons. We, only us and no other country, so the team in the next "patch" of the game removed the same song so that they would not retreat to court with us morons.
It is a pity because the game was declared the game of the year in 2015 and, in addition to the "Game of the year", it won another 250 awards in various categories. And today, when the series of the same name came out, the game is played and bought even more than in 2015, when it came out. It is played by millions and millions of people who, among other songs within the game, could enjoy our beautiful Orange, which could promote us in this way in the world.
But not because, MI RVAT! I! ¯ \ _ (ツ) _ / (

остальные песни там всё же не народные, я неправильно запомнил
они, по-видимому, написаны Персивалем на мотив народных.
хотя например "Ой Лазоре Лазоре" похоже на явную кальку, как формулой (песня в статье про лазорование даже начинается точно так же), так и сюжетом игрушечной свадьбы

собственно в дополнение к старому посту, в котором конечно же умерли почти все ссылки
https://dervish-candela.livejournal.com/464103.html
Dervish

ок наконец понял что такое регулярные типы в с++

https://abseil.io/blog/20180531-regular-types

речь идёт о том, что если и семантика и синтаксис создания, копирования и сравнения value-объектов соответствуют семантике нативного типа («делай как int»), то такой тип называют регулярным.
его практическое свойство - можно использовать в стандартных контейнерах/алгоритмах
самое важное свойство - понятность происходящего с ним

PS
в конце статьи — очень смешно смотреть, как приходится извививаться, ну ей богу как ёрш на сковородке, чтобы определить константность для объекта.
Ага, если изначально назвать 40 лет назад (и с тех пор пор по привычке считать) «объектом» часть стека абстрактной машины без какой-либо изоляции.

дык нет у нас «объекта», народ. именно об этом трудность определения константности нам и говорит.
нет изоляции, нет референциальной прозрачности, нет контроля вторичных эффектов.
если ЛЮБАЯ операция может залезть в наш объект и нарушить его инварианты, то у нас нет «объекта»
если глобальное состояние, изменившись, может нарушить инвариант произвольного объекта без контракта - у нас нет «объекта».
о том и речь уж сколько лет-то.
Dervish

почитал тут свежее Made in Abyss

в общем это уже инстант классика гуро.
экранизировать это "как есть" конечно же никто не будет, полноценного второго сезона можно точно не ждать. либо покромсают, либо полностью отменят.
особенно странно смотрится нешуточная криповость линий с боди хоррором на фоне более традиционных злодейских линий и сёненоватых боёвок без итоговых побед и поражений.
трагичность боди хоррорных линий такая жуткая потому автор очень умело и жутко подчёркивает их искренней интимностью.
а боёвки между хорошими и плохими делать не умеет.
как ни смешно, именно в боёвках всегда по ощущениям МИНИМАЛЬНЫЕ stakes на фоне всего остального - очень дисконнект сильный получается
Dervish

shared pointers

давно подозревал, что постоянная возня руками с .data() умных указателей unique_ptr/QScopedPtr, особенно с передачей за пределы динамически созданного хозяина — намёк на плохой дизайн.
Время жизни жёстко контролируется в одном месте, а использование происходит в другом, и они никак не сцеплены.

Я преположил, что это хороший повод использовать Shared Pointers, но по сути дела они даже не размазывают контроль, а полностью лишают нас контроля — ведь любые ошибки обращения после уничтожения хозяина говорят о том, что МЫ не понимаем, как работает наша логика, а наш SharedPtr - это просто мини-сборщик мусора, который предотвратит падение программы но никак не починит наше неполное знание о её поведении.

Есть ещё вариант со схемой shared_ptr + weak_ptr - по сути дела это просто более технологический вариант проверки на NULL перед использованием указателя, и он тоже не никак не восполняет наше знание о поведении программы.

Есть подозрение, что сама схема «работник как ресурс» фундаментально эпистемологически порочна.
С другой стороны, чисто формально под эту категорию попадает... вообще всё
Dervish

Fire and Forget для транспортных слоёв

Пришлось за прошлый год работать над несколькими прикладными транспортными слоями.
Изначальная идея работы транспортов «мы тут пока набиваем очередь, а ты уже иди начинай отправлять», для краткости назовём эту идею Fire-and-Forget.

Она вероятно оказала нам очень плохую службу что в стеке синхронного протокола [redacted] over rs232, что (как я теперь понимаю) в универсальном транспорте over TCP.
Если наш код в однопоточном приложении чем-то занят и мы долго не будем заходить в универсальный транспорт по сигналу readyRead(), мы пропускаем получение комбинированной (транспорт + user) квитанции (на них выходит таймаут и мы признаём сообщение недоставленным). В синхронном протоколе [redacted] эту ситцацию я очень хорошо наблюдаю на стыке отправки первой короткой команды и второй длинной команды.

Так как на недоставленные сообщения всем похрен и все системы на всех уровнях делают вид что ничего не произошло и продолжают работать дальше, то это не приводит к потере функциональности (звоночек!), но мне эта ситуация не нравится — это индикатор того, что решалась не та задача, а настоящая задача решена случайно.

В синхронном протоколе [redacted] я отключил FnF
>> Отключаем раннюю отправку: пока клиент прикладного протокола не закончит закладку очереди полностью, протокол не начинает отправку через транспорт.
Пускай очередь набивается кусочками прикладных данных свои законные несколько сотен миллисекунд, подождём, некуда спешить.

Пропуски транспортных квитанций в универсальном транспорте:
Как я теперь понимаю, никаких подтверждений доставки в универсальном транспортном слое делать не нужно было - ни пользовательских, ни транспортных, ведь они не используются.
Мы уже работаем поверх надёжного сетевого транспорта TCP, а логически обрабатывать квитанции с точки зрения бизнес-логики реалистично никто не хочет, ведь это привело бы к безумному усложнению кода.
В результате от квитанций все просто отмахиваются - никого не интересует ни пользовательский ответ, ни вывод транспорта об успешности доставки.

Я не знаю, происходит ли буквально сценарий однопоточной блокировки при использовании универсального транспорта, или нет.
Но я вижу что пропуски квитанций продолжают происходить.
Уже чуть ранее мы пытались решать проблему недоставки, предположив что мы не успеваем обрабатывать сообщение на стороне получателя, и расцепляли (через таймер) колбек из универсального транспорта в прикладной код.

Решение: закрыть глаза лапками
я хотел предложить увеличить таймаут до одной секунды, но мне лень измерять глубину очереди под нагрузкой, и я не знаю не приведёт ли это к каким-то ещё неожиданным замедлениям работы, поэтому предлагаю ничего не делать и просто снять высокую категорию важности с логируемых сообщений об опоздавшей квитанции.

TL;DR: Fire and Forget плохая идея, если не доказано обратное.
Никогда такого не было, и вот опять — пустая погоня за воображаемой производительностью вылилась в логические ошибки.
Dervish

добавить *пустой* макрос в проект

вот например такой классический код, который я не хочу/не могу менять:


#if defined WIN32
#ifdef SUPER_API_EXPORTS
#define SUPER_API __declspec(dllexport)
#else
#define SUPER_API __declspec(dllimport)
#endif
#elif defined __linux
#define SUPER_API __attribute__ ((visibility ("default")))
#endif

class SUPER_API AwesomeApi {
...
}


если я хочу использовать код AwesomeApi напрямую, не собирая библиотеку, а просто добавив файлы в свой проект, мне будет мешать токен «SUPER_API», а просто так добавить в дефайны SUPER_API не прокатит!

[10.09.2019 15:52:44] я всегда думал что пустой дефайн ни во что не разворачивается в коде и таким образом никак не должен мешать. но это неверно.
[10.09.2019 15:52:50] By default, the value associated with a symbol is 1. For example, /Dname is equivalent to /Dname=1.
https://docs.microsoft.com/en-us/cpp/build/reference/d-preprocessor-definitions?redirectedfrom=MSDN&view=vs-2019

таким образом, нужно специально определить макрос SUPER_API как пробел:
для Microsoft Visual Studio (свойства проекта .vcxproj, C++ -> Препроцессор -> свойство Определения препроцессора):
SUPER_API= ; (пробел, затем точка с запятой!)
для QMake (синтаксис .pro-файла):
DEFINES += SUPER_API=" "
для MSVS, голая команданая строка компилятора cl.exe:
-DSUPER_API= (NB: обязательно дополнительный пробел после знака равенства!)
Dervish

Black Diamond, Dawn Patrol Shell



BD известны своим качественным скалолазным снаряжением, но так же они выпускают и отличную одежду. Я их очень люблю за красоту, функциональность и хорошо подходящую для меня посадку со стабильным размерным рядом. То есть "интересные цвета, не проклятый минимализм, и мне всегда подходит L".
Я очень давно пытаюсь найти себе нормальный осенний софтшелл. Dawn Patrol - не совсем то, что мне нужно (у него нет флисовой подкладки), но и отказаться я не смог. В ранних версиях заявлялся Schoeller, теперь же это безымянный stretch woven. Ветер держит отлично. Дышит очень хорошо (лучше Marmot M2, на уровне PowerShield). DWR очень хороший (но я пока не стирал). Ткань относительно тонкая, 235 г/м2, хотя и ощутимо толще эквилибриума; имеет микро-рельеф и микрофлисовую изнанку. Наружная поверхность имеет хорошую, плотную вязку, но не идеально ровную поверхность - неровности создают иллюзию рыхлой, матовой поверхности. Температурный диапазон на мой вкус - скорее тёплый (+20, до +15 со слоями)

Брал на трекине по "типа распродаже", а отправляли они мне его два месяца, Карл! неплохо так баблишко провернули!

Из неприятных моментов: традиционные паты на липучке цепляются буквально за всё, в том числе и за саму куртку. Думаю, что с этим говном делать, потому что затяжки явно вопрос времени.

Four-way stretch woven with brushed back and DWR finish (235 gsm, 63% nylon, 26% polyester, 11% elastane)
Dervish

приложухи для заметок

до сих пор мучаюсь.

× Evernote. При всём его удобстве, жирный крест из-за несерьёзного отношения к твоим заметкам как к кешу. Открыть посреди нигде нужный тебе «как добраться» и увидеть «упс, сервер недоступен» неприемлемо

2-/4 Google Keep. Для тех, кто относится к заметкам как к цветным post-it бумажкам на холодильник, всё честно. Для длинных и многочисленных заметок непригодно.

3+/4 Joplin. Прямой импорт из Evernote (.enex). Похож по дизайну и функционалу (есть вложенные блокноты и теги). Синхронизация на твой выбор (можно даже через WebDAV!). Десктопное приложение на Electron. Мобильное хз на чём (React Native?), но не очень удобное: нет отмены, зато есть автосохранение любых твоих ошибок копипасты... Пожалуй, самый интересный для меня кандидат

3-/4 Neutrinote. Малюсенький мобильный апп с гигантским скрытым функционалом для power user-ов. Нет блокнотов. Не «вложенных», а вообще никаких. Строку метаданных можно использовать в роли тегов, а теги в роли фильтра вместо блокнотов, но это сделано неудобно. Нет десктопного приложения, но на десктопе ты можешь класть текстовые файлы прямо в sync target приложения, например, кладёшь текстовый файл в dropbox - после синхронизации он прозрачно появится в аппе. Это очень круто что приложение позволяет тебе выставить своё хранилище заметок наружу в виде коллекции файлов для синхронизации и модификации, но это делает настройку синхронизации лишним гемором при смене телефона (сам апп не умеет). Я потратил много сил и времени чтобы разобраться в этом, всё не так просто и не из коробки, и жаль будет оставить это, но вероятно придётся.

2+/4 crypt.ee Функционально полная замена эверноту, очень модный дезигн, прям как медиум но только ещё плавнее, ещё больше круглых углов, пустого места, душевных фоточек, вот это всё. Только progressive app, только сервера приложухи, только ультрахардкор юнити мытищи. Разумеется, медленно, ведь ВсЁ ШиФруеТсЯ ПряМо в БРауЗере (хотя это первое нормальное «progressive app» которое я вижу, не считая телеги). Даже вход по ключу шифрования, а не «паролю». Рекомендуется для мамкиных анархистов.

2+/4 Standard notes. Как Google Keep, только чуть менее прибитый. Есть теги, они же выполняют роль блокнотов. Достаточно удобно.

3/4 обнаружил Notable. это брат-близнец Joplin/Evernote, но с локальным файловым бекэндом вместо базы данных!
К сожалению, метаданные хранятся в самих же файлах, что мягко говоря не очень удобно.
Dervish

карма и экология в Rain World - наблюдения (спойлер)

Cюжет имеет гораздо больше смысла, если считать что между открывающей сценой и началой игры прошло много времени. Тогда понятен acceptance dream и понятно, почему котик будет искать для себя именно окончательное решение сансары, а вовсе не «свою семью». Идея якобы «подтверждена автором» (где-то на каком-то стриме), но не является частью текста игры.

А реткон, даже авторский, это всего лишь реткон, и на патч авторы не решились, так ч то это остаётся неканоном, а мы остаёмся без цельного развития персонажа.
Более того, восприятие однозначно настраивает начинающийся сразу после открывающей сцены туториал, где нас учат таким базовым вещам как ходить, прыгать и кушоть, что однозначно создаёт образ несмышлёного котёнка.

Как часть этой интерператции, неожиданно обретает очень сильный смысл странная идея «NPC дают котику карму». Если воспримнимать «повышение уровня кармы» как освобождение (от собственных мирских привязанностей, страданий, желаний). Ведь он давно уже смирился с тем, что никогда не увидит не только свою семью, но и, вероятно, хотя бы просто другого котика.
Сюжетные встречи не «дают ему карму», но каждое взаимодействие добивает освобождает его.

про кармические блок-посты (и особенно Охрану на выходе)
@Blue Stars, Endless Cosmos #8433
I think the story has penultimate mystery in void, void sea, ascension, and void worms. this is RW story's intellectual black hole, a spiritual, evocative part (opposed to rationalistic "ecosystem" part)
Guardians strike me as quite weakly connected to ANYTHING else, not adding to the mystery aspect, and distracting from the rationalistic aspect, while also being a very specific gameplay gate

Гипотеза: Цветок кармы описывается как галлюциноген. Цикла, в котором котик съел цветок и затем умер, в буквальном смысле не было. Он приснился.

Гипотеза: Учитывая, что у них любили ГМО, то стервятники - это изначальный pest control. Причём более ранние (king vultures в сюжете Охотника) ещё и вооружены чем-то очень похожим на проволочный тазер.

P.S. Karma gates suck.