to post messages and comments.

Не знаю, что меня бесит больше, авторизация через так называемое мобильное устройство, которого обычно нет под рукой, или через SMS, которые возьми да и не приди. Я б лучше токен купил нормальный, чем это страдание. Есть такие токены, циферки меняющиеся два раза минуту показывают. Никаких тебе проблем с пробросом USB в Xen domU. Никаких тебе проблем с ломающимися СМС. Никаких тебе проблем с ломающимися Андроидами. Просто, дёшево и надёжно. Ну что ещё нужно?!! Если есть ЭЦП токены, подключающиеся по Ethernet, тоже согласен.

Сбербанк, похоже, сегодня SMS так и не научится посылать. И R01, похоже, так и не подключит PayPal. Наверное, стоит поискать более прогрессивного регистратора.

Собрался наконец положить конец неотсканированности книги «Programming with DirectToSOM C++». Человек, которому давал изначально, так и не сделал, сам тоже так и не сделал, ну а книга оказалась не столь монументальна. Но всё же почему бы и нет, пусть другие оценят немонументальность.

Нашёл того, кто готов подработать на профессиональном сканере. Сканер широкий, специально для книг. Придавливает сразу весь разворот, отдельно плиты для левой и правой страниц на разной высоте. И картинка получается прямая, крутить страницы не надо. На простом A4 сканере так хорошо не будет. Но OCR надо всё же будет самому делать.

Долбаный Google Chrome, похоже, по HTTP/2 пытается мультиплексировать соединения на разные домены (!). А оно возьми, да и не получись. То Апач вместо Амазона S3 ответит, что у него такого нет, то S3 вместо Апача. В новой вкладке откроешь — вот там новая HTTP/2 сессия идёт к нужному серверу, и всё находится. Отключил QUIC в chrome://flags/ , вообще не помогло.

Ленился, ел замороженные овощные смеси оттаявшими, с солью и маслом, как салаты. Как-то всё варю да варю, либо сырое ем, либо консервы, а если жарить, то без опыта надо постоянно смотреть, как идёт процесс, запоминать, учиться. Не жарил, наверное, со времён НГУ, лет десять уже, да и там готовил совсем другое. Но вот расчехлил сковороду, решил попробовать сделать как написано на упаковке: и пожарить, и потушить. Это был рататуй (помидоры, баклажаны, кабачки). Вот уж не ожидал, что вкус так сильно будет отличаться! Вкуснее и сырой оттаявшей смеси с маслом, и консерв типа баклажанной икры, венгерской закуски и т.п. Говорят, что после обжарки в еде появляются соединения аминокислот с углеводами. Наверное, это оно.

Сегодня попробую повторить, но с подливкой. Как я понимаю, подливка получается, если пропитанную чем-то вкусным воду жарить с мукой. Не очевидно, надо ли перед этим разделять воду и то, что её пропитало.

Какое-то время не мог понять, как меняет кривизну окружающего пространства массивное тело. Вот время-то идёт медленнее. А объём? А кривизна пространства? Мысленный эксперимент поставить несколько сложно из-за принципиальных противоречий между ньютоновской механикой и релятивистской. По Ньютону, если взять два точечных объекта, развести на какое-то расстояние и отправить вперёд, то геодезики пересекутся. А если этот объект — гирька или любой протяжённый, сопротивляющийся сближению, то он будет чувствовать центростремительную силу в направлении к оси движения. Наоборот, в гиперболическом пространстве, прямые будут расходиться. Однако, если взять релятивистские модели де Ситтера и анти-де Ситтера, там кривизна пространства действует наоборот: в мире де Ситтера рвёт всё на части, хотя пространство с положительной кривизной, а в анти-де Ситтера всё ко всему притягивается и движется по орбитам, что совсем не похоже на гиперболическое пространство. Вот и угадай, что из этого применить к гравитации.

Если пытаться подсмотреть кривизну в формулах ОТО, то там всплывают тензор Риччи, гравитационный тензор и тензор кривизны, и как-то по простому, взяв положительную плотность вещества, не получается понять, а как это перетечёт именно в тензор кривизны. Тем более, кропотливо проследить, как меняется знак (у пространства и времени знаки-то разные) и что это значит. Надо быть натасканным на это студентом, чтобы корректно проследить вывод.

При попытке найти готовый ответ можно найти такие издевательские формулировки:
При высоте полёта спутника в 642 километра длина окружности его орбиты превышает 40 тыс. км. Полёт аппарата показал, что точное значение этой длины примерно на три сантиметра меньше, чем следует из евклидовой геометрии, то есть рассчитанное по известной любому школьнику формуле 2πR.
Оу, оу, оу, а это вы по линейке прямо из центра Земли откладывали R по кривому пространству или как-то из удалённых не сильно кривых областей пространства посмотрели, что вот если по кривому пространству издалека спуститься на такую высоту, то по идее должен получиться радиус R? А пока вы это делали, у вас погрешность 3 см не могла намотаться по радиус-вектору? Нет, есть ещё один вариант, самый простой, это измерить периметр, поделить на 2π и назвать это радиусом, но он же не может отличаться на 3 сантиметра по определению. В общем, если по радиус-вектору пространство ровное, то всё хорошо, но оно же как-то во все стороны кривое. С одной стороны посмотришь, площадь сферы не та, с другой стороны посмотришь, радиус-вектор не тот. Как это всё вместе работает? Нашёл ответ здесь:

Стоит напомнить, что угловые координаты Шварцшильда θ и φ полностью аналогичны полярному и азимутальному углам в обычных сферических координатах, однако величина радиальной координаты r отнюдь не равна длине радиус-вектора. В метрике Шварцшильда длина окружности с центром в начале координат выражается евклидовской формулой 2πr, однако расстояние между двумя точками с радиусами r1 и r2, находящимися на одном радиус-векторе, всегда превышает арифметическую разность r2−r1. Отсюда сразу видно, что шварцшильдовское пространство неевклидово — отношение длины окружности к длине её радиуса меньше, чем 2π.

Переоценил я libyaml. Думал, универсальный движок и для JSON, и для YAML, но обнаружились нюансы.

Почему-то сложно оказалось добиться от libyaml форматированного JSON. Что-то я смутно припоминаю, что там чуть ли не реконструировать весь синтаксис оригинального документа можно было вместе с пробелами и табуляциями. Настолько можно всем порулить. И не нашёл, где это было. Надо отступы в поточный синтаксис (соответствующий подмножеству JSON) добавить, и никак. Только в блочном синтаксисе отступы есть. Хакнул libyaml, получил такое:

[4.0, "abc"
, {"x": -5.0, "z": 20.0
}
]

Скаляры где-то в другом буфере копятся. Если пытаться делать переносы перед ними, то перед «, {"x"» становится больше переносов.

Егор Клинаев… 18 лет.
Из интервью: «Иногда сталкиваешься с непониманием, но я держусь. Хочу стать хорошим музыкантом и успешным актёром».
Он снялся в трилогии ЧАСТНОЕ ПИОНЕРСКОЕ. Сначала ему 12 лет, затем 14, потом 16…. Только вернулся с кинофестиваля в Екатеринбурге… Строил планы и мечтал о будущем.
Он такой, он всегда готов прийти на помощь. Увидел аварию и остановился помочь. А другая машина не заметила и сбила. Насмерть. Скорбь…
Егор, любим и помним!

Сыграл в «угадай реквизиты» и не угадал. Сейчас НЭБ починили генератор платёжки, и там реквизиты оказались в ВТБ 24. А всё, через 2-3 дня будет уже заведомо поздно.

Некоторые факты.

Из описания ко второй редакции «Brad J. Cox. Object-Oriented Programming: An Evolutionary Approach »
This new second edition covers the changes that have occurred in Objective C version 4.0, the newest release, and the tools that assist in developing object-oriented software.
То есть, Objective-C 2.0 перезагрузил нумерацию, на самом деле он пятый или шестой, в зависимости от того, считать ли версию с дефисом в имени следующей версией после версии с пробелом в имени.

И он был не один. Кроме модификаций C++ (Sun OBI, SGI Delta/C++, DirectToSOM C++, ZL), ранее было, можно сказать, целое поколение модификаций C.

C-talk — это запатентованный язык для MS-DOS и Apple Macintosh, созданный отделом программных продуктов фирмы CNS Inc, специализирующейся на продуктах диагностики для медицины. Синтаксис языка основан на Си с дополнительными конструкциями, поддерживающими классы и методы, наследование и посылку сообщений. Предоставляется набор основных классов для структур данных типа Buffer, Stream и ByteArray. Он поставляется в виде пакета, содержащего препроцессор для преобразования файлов на C-talk в исходные тексты на Си, и среды программирования, называемой C-talk Browser, основанной на оконном интерфейсе.
Complete Computer Corporation, New York работает над созданием объектно-ориентированной среды разработки программ, называемой Complete C. Она состоит из прекомпилятора, генерирующего стандартный Ansi С из объектно-ориентированного Си, набора инструментов (отладчика, компоновщика, генератора документов) и библиотеки основных классов.

Устанавливать старый опасный OCaml 3.12.1 не пришлось, FAR arclite справился с форматом NSIS. Директорию выбрал C:\ocamlmgw, как зашито в бинарники, потому что они там ищут библиотеки. Пришлось выжечь калёным HIEW из каждого flexlink.exe аргумент -mno-cygwin, который современный gcc не в силах потерпеть. Доустановить hg clone git+https://gitlab.camlcity.org/gerd/lib-findlib.git . Поставить make и perl из msys2. Закомментировать строчку 2202 в cpc.ml. И получилось собрать!

Без pthread и libev под Windows примеры не работают, но я всё равно под Windows только препроцессор хотел. Перловая обёртка вполне успешно собирает ошки, в том числе с сохранением промежуточных файлов. Для того, чтоб собрать ошки, рабочая реализация рантайма не нужна. Нужно отпрепроцессировать выбранным транслятором, потом отпрепроцессировать cpc cilly, потом оттранслировать обычным транслятором, вот такие этапы делает перловая обёртка. Смотрел промежуточный результат, вроде похоже на правду.

Промежуточный результат не такой оптимальный, как я надеялся. Скажем, g() в loops.cpc делает cps_yield(), имея аргумент c и переменную i. Я бы ожидал, что c и i между cps_yield() как сидели в контексте, так и оставались, но вместо этого __g_while_continue_2_push() постоянно принимает на вход c и i, перевыделяет под них место и копирует из своих аргументов в структуру. А процедуры, на которые ссылаются продолжения, постоянно открывают структуры со своими аргументами, вытаскивают оттуда c и i и под конец вызывают одну из _push() с этими c и i. И так по кругу. Чем больше стек процедуры, преобразованной в асинхронный вид, тем больше круговорот.

То чувство, когда нет вменяемой системы модулей и жёстко привязанной к ним системы пространств имён.

#include <Object.h>
#define Object XtObject
#include <X11/Intrinsic.h>
#include <X11/IntrinsicP.h>
#undef Object

Ещё, помню, заголовки Qt вываливают в пространство имён помойку из WinAPI, а вместе с ней — #define GetComputerName GetComputerNameW, и в самом Qt ломается класс с таким методом, вот просто взять и собрать Qt не получается, там тоже хаки против таких конфликтов, работающие с переменным успехом.

Даже, если для целевой системы нет обычного транслятора Ады, а заголовки — только на Це, только ради того, чтоб не страдать такой ерундой, имеет смысл конвертировать цешные заголовочные файлы в адские интерфейсные пакеты, писать на Аде и транслировать средствами AdaMagic.

Разработка ПО похоже на переплывание реки из бурлящей кислоты, и мы строим корабли с толстыми стенами, и мы делаем толстые иллюминаторы, а кислота сильна, кислота разъедает, а мы строим корабли всё толще. Выбрать Аду — значит, отгородиться хотя бы с точки зрения пространств имён от творящихся снаружи ужасов.

Прошлый раз потерпел неудачу с запуском Continuation Passing C, и вроде это было связано с устареванием CPC и встроенной в него версии CIL относительно OCaml. Так что в этот раз пытаюсь взять старый OCaml. В cpc/README указан Ocaml >= 3.12. Вот, значит, лучше всего и взять. Нашёл установщик OCaml 3.12.1. В предупреждении написано, что он уничтожит PATH, если переменные среды занимают больше 1024 байт, но я к этому могу подготовиться. На установщиках IBM VisualAge и Apple WebObjects уже натренирован.

Всё же я погорячился насчёт BridgeSupport XML как аналога IDL/TLB/SOMIR для Objective-C. Например:

<function name='NSStringFromClass'>
<arg type='#'/>
<retval type='@'/>
</function>

Здесь видно, что на вход должен идти потомок NSClass, но это по историческим причинам. Видимо, не всегда в Objective-C поддерживались метаклассы, и ссылки на классы, как в Delphi, были разных типов со ссылками на объекты. Кроме NSClass, другие классы и протоколы чести попасть в кодирование типов не удостоились, а каким-то другим образом имена не пробрасываются. Вот, например, в данном примере потеряна информация о том, что результат — ссылка на NSString.Таким образом, это даже хуже, чем CORBA TypeCode, которые мне не нравились за то, что там терялась информация о пространстве имён класса и структуры.

Вот ещё пример метода NSString:

<method selector='getCString:maxLength:encoding:'>
<arg c_array_length_in_arg='1' index='0' type_modifier='o'/>
<retval type='B'/>
</method>

Я здесь вообще не могу понять, какого типа первый и второй аргумент. o значит out. А больше тут ничего и нету. А есть ещё третий, NSStringEncoding, между прочим.

Внимательно всмотрелся в кодирование типов на предмет char32_t, char16_t или wchar_t. Нету! А что же тогда будет возвращать NSString, если читать её по кусочкам? Пошёл смотреть сигнатуру метода в NSString.h:
— (unichar)characterAtIndex:(unsigned)index;А в Foundation.bridgesupport такого метода тупо нету. Интересный вопрос, почему. Если бы он как-то ставился в игнор, я бы его увидел в исключениях BridgeSupport\exceptions\Foundation.xml, но там тоже нету. Впрочем, учитывая, что
typedef unsigned short unichar;… я бы должен был увидеть S, формально не отличимый от unsigned short, и только эвристически, зная, что программисты становятся идиотами, экономящими два байта, только когда работают со строками, и что-то очень редко, работая с целыми числами и даже массивами из них, думают, ой нет, 4 байта-то многовато будет, надо два, понять, что S следует проецировать на Standard.Wide_Character в языке Ада и System.WideChar в языке Делфи, а не Interfaces.Unsigned_16 или Interfaces.C.unsigned_short в языке Ада и System.Word в языке Делфи.

Подводя итог, парсер для Objective-C придётся делать. Или делать clang -ast-dump или GCC-XML, если там Objective-C поддерживается, а BridgeSupport — вспомогательный инструмент.

Впрочем, довольно полезный с учётом того, что там промаркировали c_array_length_in_arg и модификаторы in, out, in out, имеющие синтаксическую поддержку в таких сравнительно более продвинутых нативных языках программирования, как Делфи и Ада. Первое в языке Делфи называется «открытыми массивами», а в языке Ада недоопределённые массивы — вообще органичная часть языка, ведь самые обычные строки там такие, и передача их как аргумент — это просто частный случай того, что можно сделать. Ну и когда сишную звёздочку не понятно, проецировать ли на in out, out или именно на указатель, это весьма раздражает. Если спроецируешь на in out или out, то нельзя без хаков передать null в языке Ада или nil в языке Делфи, а в некоторых API это можно и нужно, а в некоторых API — нельзя, и если язык мешает это сделать без хаков, то это к лучшему. Проекция на указатель более универсальна, но по сравнению с окружающим кодом, который нередко вообще без указателей, выглядит как что-то инопланетное.

Приготовил на соевом молоке овсянку с клюквой и оливковым маслом. Сравнить по вкусу с тем, что давно не ел, не смогу, но в общем нормально, и само молоко, и каша. Действительно, соевое молоко в жидком виде — совсем не то, что порошок. Плотная белая жидкость, в процессе готовки ведёт себя похожим образом, впитывается в овёс, образует с ним липкую массу, сквозь которую с трудом проходят пузыри пара. И запах — просто отпад. Я даже жалею, что купил молока только на кашу.

Сегодня заметил, что на 720° картах звук-то по координатам считается, без учёта связи секторов. И монстры агрятся на координаты. На E2L11 в одном месте вход и карта на стене, а на 360° вокруг центра от него — выход, изображение космоса и автоматический уменьшатель. Стоя перед картой, я слышу, как стреляет уменьшатель, вокруг меня ходит недовольный монстр и периодически напарывается на уменьшатель. Но только слышу. Затоптать «невидимку», к счастью, не получается.

Забавно, что могло бы получиться, если совместить перекрытие секторов с зазеркальем. В зазеркалье можно проложить дорогу из секторов, в том числе не через зеркало. Ходить можно при этом только по незеркальным секторам. При этом эти незеркальные сектора отрисовываются с высоким приоритетом, а зазеркальное изображение — по остаточному принципу. Поэтому, если в зеркальном отражении стоит угол дома, а дорога в зазеркалье обходит угол, она через него просвечивает, но тогда можно в самом зазеркалье поставить стены в том месте, где должно быть отражение угла, тогда дорога через такую стену не видна, и вроде бы как это потому что её загородил угол. Редактор BUILD — не NanoCAD, точно всё позиционировать там замаешься, ну или я, когда занимался этим, не осилил. А надо отражение углов точно сделать, высоту пола и потолка подогнать. Сложно, но можно.

И устроить карту, где игрок(-и) ходят как призраки по карте в зазеркалье. Телепорты им поставить, чтоб стрельнешь в них RPG, а вылетело в настоящем мире. Кнопочки понаставить, чтоб давило и стреляло в настоящем мире. Одно и то же настоящее место можно отзеркалить несколько раз. Если плоскость зеркал одинаковая, то и координаты в зазеркальях можно полностью перекрыть. Зеркало в зазеркалье не пробовал. Забавно, если получится сделать, чтоб две части карты были зазеркальями друг для друга.

Насколько мне известно, даже и сейчас на BUILD делают игры, по крайней мере, инди. Клон SCP-087 видел. Может быть, 720° местному ИИ непонятен, но в остальном ИИ достаточно вменяем. Явно лучше, чем у тех, кто первый раз сам делает, и даже не первый, но всё равно попадает на канал к Мармоку.

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

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

Поспрашивав на тему других продуктов, в частности, соевого молока, которое я нигде найти не мог, получил наводку на один магазин на Малахова рядом с депо и на «Метро» (Кэш энд Кэрри). Магазина на поверку давно нет, там только столовая и маленький заставленный наркотой магазинчик с характерным тошнотным душком. А в «Метро» так просто не попасть, документы оформлять нужно. Начать хотя бы с выписки из ОГРНИП. Плюс, на месте я поузнавал, что какого-то веганского отдела там нет, ну и не торопился туда. Было забавно, когда менеджер для уточнения вопроса о соевом мясе позвонила в мясной отдел. Это было месяца три назад.

Неделю назад собрался всё же на разведку, вчера получил свою выписку, оформил документы и получил карточку «Метро». Обнаружил там соевое молоко. Где-то в Бельгии делают. Я вообще какое-нибудь китайское больше бы ожидал, они вроде массово увлекаются. Но китайского не увидел. И обнаружил его в молочном отделе, рядом с кедровыми, овсяными, кокосовыми и пр., а сразу же, буквально на тех же полках правее стоит коровье. Идея обнаружить соевое мясо в мясном отделе уже не казалась такой забавной. Проверил, нету. Где-то среди салатов тоже не нашёл.

Зато нашёл хумус, и это просто победа! Я его первый раз увидел году в 2012м, когда ещё даже не думал, что вегетарианцем стану, в «Терезе» на Георгиева-Павловском, в холодильнике рядом с рыбой и икрой. Даже, помню, специально коллеге возил попробовать. Хумус там через пару месяцев кончился, а сейчас и вовсе этой «Терезы» нет, там сейчас «Ярче». Так с тех пор и не ел. На местном рынке (там же, где и корейские салаты) веганский отдел холодильниками не располагает, поэтому всякую всячину вроде веганских шоколадок с кэробом и пророщенной гречкой там можно раздобыть, а хумус — нет. Ещё, помню, пытался нут (турецкий горох) готовить, ведь хумус из толчёного нута делается. Удачно, в отличие от чечевицы, пока не получалось приготовить самому.

И молоко на рынке только, которое разводить нужно (овсяное, кедровое) и, это, на мой взгляд, совсем не то, как если купить жидкое. В сухих смесях нет жиров, и не всё, что можно осушить, образует растворимый порошок, значит, если купить порошок и развести, он не будет как то, что можно купить в жидком виде. Когда я разводил эти смеси, у меня не получалось нормально. Всё как-то слоями, сверху преснее, снизу гуще, как ни старайся перетереть, перемешать комки. Не очень понятно, какое лучше масло добавлять. Было мнение, что если купить жидкое молоко, то оно откалибровано, и с ним таких проблем не будет.

На фотографиях с Венеры находят какую-то дичь, не менее забористую, чем лицо на Марсе

Также оттуда:
На Венере все горы, кроме горы Максвелл, имеют женские имена.Гору Максвелл заметили давно, а вот потом Венеру изучили получше, в частности, плотность 90 атмосфер, температуру 500 градусов по Цельсию и серную кислоту в атмосфере, и решили, чтоб на Венере было всё женским. Нулевой меридиан ещё назвали Евой.

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