Зима, угомонись

Когда мы были первый раз в Турции, помню, поразило, что, при всей компактности страны, можно за один день, сев в автомобиль, побывать в трёх климатических зонах.

У нас Казань вчера сменила по меньшей мере две, хотя мы никуда не ездили. Днём было тепло, в рубашке с длинными руковами еа улице было комфортно, вечером похолодало и пошёл дождь, а ночью начался снегопад. Всё покрыл довольно заметный слой снега.

P. S. Это новый для меня опыт — страдать аллергией на цветение посреди снегопада.

2 комментария

Первая дочкина программа

Время не сохранило мою первую программу. Из своих дневников жизни я прочитал, что она была на Бейсике для компьютера «Радио-86РК». Я едва помню сам этот факт, не говоря уже о том, что же я тогда написал. Жаль я не записал в дневник что делала та программа, сейчас мне самому интересно было бы взглянуть.

Поэтому я решил сохранить первую дочкину самостоятельную программу. Она написана на языке «Скретч». Два дня назад мы вместе попробовали написать программу по уроку на «Ютубе», а вчера дочка перед сном написала свою собственную.

Конечно, очень простая — нажимаешь на пробел, собака лает. Фон и звук взят из стандартной библиотеки.

Скриншот интерфейса Scratch с блоками кода: при нажатии пробела повторяется 3 раза смена фона и воспроизводится звук Bark, справа — спрайт собаки на фоне кирпичной стены.

2 комментария

Интернет всё мертвее

Теория мёртвого интернета — моя любимая конспирологическая теория, я полюбил её за то, что она единственная из всех может со временем стать реальностью. В этом году мы стали к её осуществлению немного ближе. Компания «Имперва» опубликовала исследование, согласно которому 51% всех пользователей интернета — это боты. Судя по опубликованным графикам, их доля от года к года растёт.

Инфографика «Профиль глобального интернет-трафика в 2024»: автоматизированный трафик (51%) превысил человеческий (49%), включая 37% злых ботов и 14% добрых.
51 процент всех пользователей интернета — боты

Ну и вдогонку.

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

Если ещё вспомнить, что в Солнечной системы всего две населённые планеты — Земля и Марс, причём последняя населена исключительно роботами…

В общем, роботы уже общаются больше нас, программируют больше нас и отжали себе целую планету, где людям не место!

2 комментария

Старый Новый Завет

Чуть больше года назад у жены умерла бабушка со стороны мамы. Она была очень хорошей, доброй женщиной, мы все её очень любили. Дочка до сих пор плачет иногда, когда её вспоминает.

Мы попросили отдать нам какие-нибудь её вещи, чтобы в нашей семье осталась память о ней и получили старинный Новый Завет. Он в плохом состоянии, титульник утрачен, но по очень характерному рисунку на обложке я определил издание — это вторая половина 19-го века, синоидальная типография Санкт-Петербурга. Сейчас книга находится на реставрации в мастерской «Ваш реставратор».

Старинная книга с текстом Евангелия от Матфея, страницы повреждены и оторваны; на левой странице рукописные цифры «070» и «42113», книга лежит на деревянном столе.

Этот Новый Завет достался семье жены от прадедушки по линии мамы — Александра Ивановича Андриянова. В молодости, ещё до революции Александр батрачил, а его будущая жена была дочерью богатых купцов Шуралёвых, живших в Арском районе. Её родители активно жертвовали на храм Казанской иконы Божией Матери, построенный в 1830 году в селе Старое Чурилино.

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

Чёрно-белое фото: пожилой мужчина с длинной бородой сидит в центре, окружённый шестью детьми разного возраста на фоне деревянного забора и деревьев.
Александр Иванович Андриянов (4 ноября 1903—20 июля 1989) в центре, чуть правее — брат жены

В 1930 году храм закрыли: после последней службы чекисты выдворили верующих, а монахов и монахинь арестовали. Здание превратили в зернохранилище, позже — в склад ГСМ и резервный объект Казанского завода. Новый Завет, вероятно, попал к Александру Ивановичу в те годы, когда угроза закрытия церкви стала очевидной. Мама жены, его внучка вспоминает, что, по рассказам дедушки, он получил книгу ещё до брака. Значит это произошло до 1924 года, когда у него родился первый ребёнок. В советские годы книгу не афишировали, она лежала дома.

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

Оставить комментарий

Аллергия-2025

Каждый год весной меня мучает аллергия. В этом году из-за тёплой весны она до меня добралась раньше, чем в прошлом — сразу по прилёте из Китая. Таблетки, как водится, помогают лишь ограниченно. Вроде должны были с прошлого года где-то остаться медицинские маски, но куда они подевались — непонятно, не нашёл. Заказал на «Озоне» новые, завтра должны прийти, дотерплю на таблетках.

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

4 комментария

С днём старого программиста!

Сегодня, оказывается старый день программиста или, как его ещё называют в шутку, «день старого программиста». 22 апреля совпадало когда-то с номером специальности 2204 или «Программное обеспечение вычислительной техники и автоматизированных систем», на которой учились советские ещё программисты, поэтому праздник праздновали в эти даты.

Скриншот: выделен номер 2204 «Программное обеспечение...». Заголовок: «190. ХАРЬКОВСКИЙ ОРДЕНА ЛЕНИНА АВИАЦИОННЫЙ ИНСТИТУТ им. Н. Е. ЖУКОВСКОГО (Гособразование СССР)».
«Справочник для поступающих в высшие учебные заведения Российской Федерации в 1990 году», гос. из-во «Советская наука», 1990

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

Тем не менее название «День старого программиста» мне кажется смешным и, кажется, я больше чувствую этот праздник своим, чем тот, который в мой день рождения.

12 комментариев

Кроссплатформенность и bc

Как мы все знаем, в мире существует две версии bc — более скромная по возможностям версия GNU, которая используется в Линуксе, и более развитая, которая, например, используется в командной строке МакОСи.

Они довольно серьёзно различаются — когда я писал игру «Виселица» на этом языке, мне пришлось сделать две версии для разных синтаксисов.

В принципе, можно писать кроссплатформенно, если использовать подмножество, которое поддерживают обе версии, но есть одна неприятность — функция получения случайного числа в гну-версии называется random(), а в более продвинутой — rand() (точнее там их целое семейство, но функции random() там нет).

Поскольку в языке нет способа узнать определена функция или нет, нужно каким-то образом отличать одну версию от другой и вызывать, в зависимости от результата, ту или другую функцию.

Каким же образом мы можем это сделать?

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

Такую особенность я нашёл — она заключается в приоритете обработки операции отрицания, которая записывается как восклицательный знак.

Из-за этой разницы две версии по-разному вычисляют конструкцию !1+1. В продвинутой версии порядок выполнения следующий: (!1)+1, что даёт нам единицу, а в гнушной приоритет другой и конструкция выполнится так: !(1+1), что даёт нам ноль.

Основываясь на этом, мы можем написать универсальную функцию для получения случайного числа:

define rnd() {
    /* Checking the bc version */
    if (!1+1) {
        return rand()
    } else {
        return random() * random()
    }
}

P. S. Надо помнить, что в гну-версии функция получения случайного числа сломана, но есть надежда, что скоро её починят и ей можно будет пользоваться.

P. P. S. Я умножаю random() на random(), чтобы хоть немного выровнять по диапазону значений rand() и random(), правда распределение, конечно, изменится.

12 комментариев

Джетлаг

В черновиках у меня давно лежала заметка как я прекрасно справляюсь с джетлагом.

В самом деле, обычно мне хватало дня-двух, чтобы перестроиться. Я считал, что это оборотная сторона моей «совиности» — как «сова» я привязан к суточному ритму солнца, что помогает мне справляться со сдвигом времени. По прилёте в Китай так и было.

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

Непонятно что такое во мне сломалось, может ли быть, что я потихоньку теряю свою «совиность» из-за того, что встаю не в своё время вот уже почти 14 лет?

Может быть и другое объяснение, конечно. Мы очень рано встали в день перелёта — в 4³⁰ утра, очень долго ждали посадки, потом ещё дольше летели. Может быть это просто сильная усталость от перелёта, наложившаяся на сдвиг часового пояса.

Ночной вид на курортный комплекс с освещёнными бассейнами, пальмами, беседками и густой растительностью на фоне тёмного неба и моря.
Последняя фотография, сделанная в Китае. Мы встали в 4³⁰ утра, чтобы сдать номер

Оставить комментарий

Анонимные функции в PHP

Относительно недавно в ПХП появился новый способ создания анонимных функций. Раньше мы писали array_filter($strs, 'strlen'), теперь можем писать array_filter($strs, strlen(...)).

В первом случае у нас указывается строка, во втором — анонимная функция. Последнее намного лучше, конечно, потому что помогает строгой типизации и лучше понимается редакторами кода.

Когда этот синтаксис появился, в моей голове он стал частным случаем стрелочного синтаксиса. В самом деле, ведь fn($t) => sin($t) и sin(...) — это одно и то же. Но недавно я понял, что у второго синтаксиса есть побочный эффект. По какой-то причине раньше мне это было не очевидно.

Если посмотреть на код ниже, всё должно стать понятно, но если нет, то я поясню.

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

Этот код позволяет проиллюстрировать разницу.

В случае создания анонимной функции через fn(), конструктор будет вызван каждый раз заново на любой вызов функции.

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

То есть каждый способ имеет особенности, которые надо учитывать.

class Sample
{
    public function __construct()
    {
        $bt = debug_backtrace();
        ['line' => $line, 'file' => $filename] = end($bt);

        echo file($filename)[$line - 1];
    }

    public function method(): void
    {
    }
}

$a = fn() => (new Sample)->method(); // не выведет ничего
$b = (new Sample)->method(...); // выведется «$b = (new Sample)->method(...);»

$a(); $a(); // выведется «$a(); $a();» два раза
$b(); $b(); // не выведет ничего

5 комментариев

GNU bc и random()

Я не задумывался об этом раньше, но это здорово сбивает с толку, что в мире есть две различающиеся версии bc — одна является частью проекта GNU и поставляется в дистрибутивах Линукса, а вторая развивается другим коллективом авторов и входит, например, в состав МакОСи.

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

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

Я подумал — чем чёрт не шутит? Если предложить своё исправление и в этот проект, то, может, его тоже примут? Так как открытого репозитория кода у bc проекта GNU нет, свой патч я отправил на почту мантейнеру.

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

Оставить комментарий

Задача «Шпионы и яд»

Давно хотел проверить не забыл ли я язык «Эр» («R»). В 2017-м много на нём программировал — было интересно изучить, но с тех пор как-то и не трогал. Интересно было посмотреть что в мозге осталось, а что улетучилось за восемь лет.

А тут — оказия, у Романа Парпалака в блоге появилась небольшая заметка о задаче «Шпионы за круглым столом»:

На банкете за круглым столом сидят n шпионов. Каждый шпион независимо от остальных случайным образом выбирает одного из двух соседей — левого или правого — и подсыпает яд ему в бокал. Каково математическое ожидание числа выживших шпионов?

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

Таблица результатов скрипта survivors.R: столбцы n, Expected, Computed, Error (%) для n от 2 до 18, погрешность до ±0.23%.

Написал сначала, разумеется, «в лоб» — цикл в цикле в цикле: для каждого числа шпионов цикл по количеству экспериментов, где каждый шпион в цикле решает кого он будет травить. Получилось медленно — «Эр» не очень быстрый язык.

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

С матрицами получилось намного быстрее, но недостаточно. Поэтому я применил ещё и модуль parallel, который умеет раскидывать задачи по ядрам. Там используются немного другие функции, но в остальном всё работает так же.

Если кому-нибудь хочется посмотреть на синтаксис «Эра», код есть у меня в репозитории.

2 комментария

Переводчик с китайского

Настоящая китайская загадка — где китайцы берут переводчик, которым переводят свои надписи. Больше половины надписей везде, куда ни кинь в Китае взгляд, написаны с какими-то совершенно дикими ошибками. Причём, не просто орфографическими, а смысловыми — иногда слова выглядят взятыми просто наобум.

При этом для общения там используют какой-то другой переводчик, который, судя по результату, переводит очень прилично. Я только один раз не понял что имеет ввиду собеседник, он наговаривал голосом, думаю что-то не так распозналось.

Почему бы им не пользоваться так же и для перевода надписей — непонятно, ответа нет.

Миниатюрные бутылки Hennessy VSOP и Martell VSOP на стеклянной полке с ценниками: 98 и 68 юаней за 50 мл, надписи на русском и китайском.
Не желаете ли скачать торрент?

7 комментариев

75 дней с «совой»

Когда я говорю, что занимаюсь английским с «Дуолиго», все почему-то жалеют или жалуются — такое ощущение, что остальные люди не занимаются, а страдают. Мне вполне комфортно, так что картинка, нарисованная мне «ЧатомГПТ», — ироничная.

Я занимаюсь уже 75 дней. Правда, без понятия много это считается или мало — хвастаться или ещё рано? Каждый день делаю обязательные задания, плюс что-нибудь сверху — в этом смысле игровые механики, которые должны помочь мне заниматься языком больше минимума, на мне работают отлично, я удовольствием им подчиняюсь — для моей же пользы.

Чувствую ли я изменения в моём уровне владения языком? О, да! Правда как их количественно измерить я не знаю. Качественно разница безусловно есть.

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

Самый длинный диалог с внеотельным китайцем у меня случился в супермаркете, где я покупал плавки. Он сам подошёл ко мне пообщаться:

— Oh, is it for swimming?..
— Huh? Oh, yeah, that’s right!
— Ah, okay-okay…
— Excuse me, do you know where the changing room is? No one here speaks English… :-(
— Sorry… my English is not… good…

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

Кроме того, мне легче читать англоязычные тексты. До занятий с «Дуолинго» у меня были трудности — я понимал текст какое-то время, потом мне резко становилось сложно его понимать, как будто исчерпывался какой-то ресурс мозга.

Зелёная сова Duolingo говорит: «You need to learn English!», а уставший мужчина с бородой печатает за ноутбуком Apple.

4 комментария

Мысли о происхождении языка

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

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

Отсюда, по логике, должно вытекать следующее: все короткие слова должны быть давным-давно заняты и самые короткие слова должны быть самыми древними.

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

Почему же так? Наверное потому, что звукоподражательных слов наделать можно довольно мало — в конце-концов звучащего вокруг гораздо меньше немого. Думаю, остальные слова получались их комбинацией и превратились со временем в корни, приставки, суффиксы и так далее.

Но каким же образом могли получаться слова для описания «немых» понятий? Вряд ли когда-то некий хомо сапиенс посмотрел как-то в небо и сказал — красивый цвет, давайте будем его называть «голубой».

Думаю, это могло происходить как-то так.

Какая-нибудь зелёная жаба, важная для пропитания, могла бы стать «плюх». Так как зелёный цвет был очень важен для определения незрелости плодов, его тоже понадобилось как-то назвать. Его стали называть «плюх», как и жабу. А чтобы отличить жабу от плодов, жабу стали звать «плюх-ква». Позже слово «плюх» перестало ассоциироваться с жабой и стало обозначать просто «зелёное». Слово «ква» стала при этом значить «жаба».

Большие жирные жабы имели много мяса и были вкуснее. Это было достаточно важно, чтобы хотеть общаться на эту тему, — всем хотелось больших жаб. Поэтому большие жабы стали называться «ква-ква», так как они много квакали, куда больше мелких. Так в язык вошла концепция удвоения слова для его усиления. Например, всё темно-зелёное стало зваться «плюх-плюх».

Переход «пл» показался очень неудобным для речевого аппарата тех людей и со временем «п» произносить перестали. Конечная «х» произносилась в том языке нечётко, на выдохе, вскоре она стала совсем не слышна и «очень зелёное» стало произноситься со временем как «люлю».

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

Похожим образом образовалось означающее животное слово «и» — сначала оно означало конкретное животное, издающее такой звук, потом его значение распространилось на животных вообще.

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

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

Со временем оказалось, что рядом живёт другое племя, которое не очень-то радо новым соседям. Чтобы отделять своих от чужих, потребовалось слово для обозначения своего племени. Соседи одежду не красили, поэтому появилось слово «люлю-т-и» — «много животных в тёмно-зелёных одеждах». Племя не отделяло себя от остального животного мира, называя животными и себя тоже.

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

Так появились «люди».

5 комментариев

Зумеры в 1988

Однако не только «черные» игры беспокоят сегодня преподавателей компьютерной грамотности.

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

В то же время многие родители безнадежно пытаются понять своих малышей, которые «еще не могут хорошо написать пустячное поздравление, однако по два-три часа в день невозмутимо стучат по клавишам домашних ЭВМ»

— журнал «Вычислительная техника и её применение», №3, 1988

Компьютеры портят нам детей уже четвёртое десятилетие!

4 комментария

99 бутылок: Входной язык ПЭВМ Искра-1256

Сегодня у меня рубрике «99 бутылок» язык настолько редкий, что у него даже отдельного названия нет. Иногда его называют «русскоязычным Бейсиком Искры-1256», но это вряд ли верно — на какой-либо Бейсик он едва ли похож. Там где на нём много программировали, конечно, выдумывали какие-то локальные названия — например, «Дуб» за дубовость синтаксиса или «Кузик».

В редкой профессиональной литераторе по теме его называют «входной язык…» или «символьный язык ПЭВМ „Искра-1256“».

83. Входной язык ПЭВМ «Искра-1256» — язык программирования с операторами на русском языке, который использовался на отечественных портативных (по тем временам) ЭВМ «Искра-1256», эта машина выпускалась на заводе «Счётмаш» в Курске с 1981 по 1989 год.

Машина работала с алфавитно-цифровым дисплеем, загружала программы с кассетного магнитофона и выпускалась в нескольких модификациях — с оперативной памятью от 4 до 64 килобайт.

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

Страница руководства с описанием программ 8 и 9: вычисление НОК двух чисел и генератор псевдослучайных чисел, включая формулы, код и примеры использования.

Строки нумеруются подряд, видимо в этом кто-то углядел сходство с Бейсиком, но дальше идут сплошные различия.

Номер строки тут, кажется, используется только для удобства набора текста программы, переход же в языке делается не на номер строки, а на метку, причём их минимум два вида — метка для передачи управления, начинающаяся с буквы «М» (например — M01), и метка подпрограммы, которая начинается с «П» (П01).

Операторы записываются русскими буквами. Например ПЕРЕХ П01 — вызов подпрограммы, перед которой стоит метка П01. Оператор перехода часто используется с условным оператором, у которого нет какого-то явно обозначенного начала. Это просто сравнение с переходом, причём оператор перехода записывается впритык, без пробела: И12=0ПЕРЕХ П01.

Переменные так же записываются русскими буквами, их буквенные префиксы значимы. Со всеми префиксами разобраться не удалось, но некоторые я понял: например, буквами «И» и «А» обозначаются переменные, содержащие числа. Разница, кажется, в том, что на вторые каким-то образом отображается массивы, которые имею префикс «АИ». Помимо того есть префиксы «СА» и «СИ» — так обозначаются символьные переменные, второе, думаю, тоже массив.

Необычно выглядит присваивание — оно тут записывается как => и присваивает левое значение правому операнду.

Но самое странное — это функции.

Во-первых, тут они почему-то записываются английскими буквами. Во-вторых, могут стоять после аргумента. В-третьих, тут есть функции, которым, прямо как в Перле, можно присваивать значение: СИ01=>STR(СА00, И02, 1). В-четвёртых, и это самое, наверное, странное, их можно записывать подряд без пробела: (1.234567↑2+8.76543-0.551122)ABSINTLNEXP.

Вот какая программа получилась у меня после попытки освоить этот язык. Не факт, что она написана без ошибок, но попробовать, как вы догадываетесь, негде:

1 ПЕЧАТЬ(HEX(03),,)
2 ЦИКЛ(И01,0,98)
3 И01-99=>A01
4 ПЕРЕХ П02
5 ПЕЧАТЬ(" ON THE WALL, ",,)
6 ПЕРЕХ П02
7 ПЕЧАТЬ("!",HEX(0A0D),"TAKE ONE DOWN, PASS IT AROUND,",)
8 А01-1=>А01
9 ПЕРЕХ П02
10 ПЕЧАТЬ(" ON THE WALL!",)
11 ЦИКЛ*
12 ПЕЧАТЬ("NO MORE BOTTLES OF BEER ON THE WALL,",)
13 ПЕЧАТЬ("NO MORE BOTTLES OF BEER!",)
14 ПЕЧАТЬ("GO TO THE STORE AND BUY SOME MORE,",)
15 ПЕЧАТЬ("99 ON THE WALL!",)
16 П01
17 "S"=>СА01
18 А01=1ПЕРЕХ М01
19 ""=>СА01
20 М01
21 П02
22 A01=0ПЕРЕХ М02
23 ПЕЧАТЬ(А01(2.0),,)
24 ПЕРЕХ М03
25 М02
26 ПЕЧАТЬ("NO",,)
27 М03
28 ПЕРЕХ П01
29 ПЕЧАТЬ(" BOTTLE",СА01," OF BEER",,)

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

  • «Комплекс вычислительный „Искра 1256“. Комплект контрольных тест-программ. 1.320.118 Д15»;
  • «Процессор интерпретирующий „Искра-1256“. Библиотека программ. 3.050.187 Д14»;
  • «Задачник по аналитической химии», Н. Ф. Клещев, Е. А. Алферов и другие, М., «Химия», 1993;
  • Журнал «Вычислительная техника и её применение», №3, 1988.

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

Добавлено позднее: действительно, оператор СЕЛЕКТ() чего только не делал, например через него можно было производить смену режимов дисплея или указывать задержку.

3 комментария

Электромобили

Вообще я зарёкся писать в блог в отпуске, но что-то не удержался.

Когда мы купили гибридный автомобиль, я понял, что он очень тихий — если не работает бензиновый генератор, шума от него очень мало. Тогда я задумался — насколько тихо было бы в городах, если бы в своё время победили не машины с двигателем внутреннего сгорания, а электромобили.

Мы сейчас в Китае, уже чуть больше недели живём в города Санья, на юге острова Хайнань. Тут уже несколько лет нельзя поставить на учёт автомобили с бензиновыми или дизельными двигателями, они потихоньку доживают своё век, а весь новый автопром, которого тут очень много — электрический. Ещё тут много электрических мотоциклов.

Два человека идут по тротуару вдоль дороги, где едет белый минивэн; по обеим сторонам растут пальмы и зелёные кустарники под облачным небом.
К вопросу о том ездят ли китайцы сами на автомобилях, которые продают нам: автомобилей «Войя» здесь очень много

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

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

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

3 комментария

TODO: попросить chatgpt сгенерировать сюда заголовок

Белый логотип в виде стилизованной буквы «W» внутри круга на чёрном фоне.
Я тут придумал, а Григорий Козырь нарисовал русскоязычный логотип для искусственного интеллекта — две буквы «И» в виде цифрового сигнала

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

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

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

14 комментариев

RedBoot

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

В салоне самолёта, которым мы летели, в подголовники кресел встроена система развлечений, крайне тормозная, но неплохая. Я пытался с её помощью отвлечься от тягот полёта, пока, совершенно случайно не научился её перезагружать. Из-за низкой производительности не стал её исследовать (каждый раз она загружается примерно 15 минут), но что уловил — на старте запускается загрузчик «RedBoot», который запускает образ какого-то Линукса.

Само приложение, похоже, написано с использованием веб-технологий — под прогрессом загрузки время от времени мелькают строчки про CSS и предзагрузку картинок.

Экран развлекательной системы самолёта показывает загрузочное сообщение Linux (Red Hat), а не рабочий интерфейс; видны кнопки управления и порты USB/Ethernet на панели.

8 комментариев

Давай, до свидания!

Да это уже невозможно, я прямо-таки чувствую, как чёртовы развлекательные ресурсы выжигают мою творческую энергию! Мне нужен какой-то «взрослый режим», по аналогии с детским, где развлекательные сайты можно было бы посещать за день только ограниченное время.

Стоит задуматься, как руки сами набирают адрес «Пикабу»! Если вы думаете, что это какое-то иносказание, что я шучу или преувеличиваю, ничего подобного! Я это говорю буквально. Сегодня добавил себе в hosts на ноуте строку, которая не даёт ресолвить адрес «Пикабу», чтобы это прекратить:

sudo tee -a /etc/hosts <<<"::1 pikabu.ru"

19 комментариев