Непрочитанные сообщения

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

Мне от такого почти физически плохо. Я, если беру смартфон в руки, не успокоюсь, пока не прочту важное и не помечу прочитанным неважное.

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

Инженерный пароль от «Войи»

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

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

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

Оранжево-белое устройство с жёлтым экраном, на котором написано «Today's passwords: 2928 or 2929 or 2927» и логотип в виде крыльев.
Пароль от инженерного меню «Войи» на сегодня

Полезное упражнение, подзабыл некоторые особенности, как самой сборки, так и наличествующего АПИ.

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

Ещё про инженерный пароль от «Войи»

Ну началось 😅 Теперь меня не отпускают мысли как можно доработать приложение для получения инженерного пароля, которое я написал вчера.

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

Я пока не стал заморачиваться, просто показываю три кода из трёх разных дней. Это, конечно, не совсем правильно. Учитывая, что часовые пояса у нас бывают от GMT-12:00 до GMT+14:00, есть небольшое окошко, где можно показать не три, а два кода. Но вряд ли это существенно что-то меняет, поэтому я этого делать не стал.

В общем, решил сделать как все — окошко с настройкой часового пояса. Если пояс задан, он будет показан на кнопке и выводиться будет только один код, если нет, на кнопке будет написано что-то типа «set timezone» и кодов будет три.

Скетч интерфейса выбора времени: блок «03:00» с стрелками, подписями «Black», «Gray», «GMT+3» и рукописными пометками на фоне расписания дня.
Проектирование интерфейса для установки часового пояса

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

Оператор «__has_include»

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

А именно — в манифесте приложения, в директиве fap_icon_assets мы указываем папку, каждая картинка в которой, позже, на этапе сборки, будет преобразована в специальный массив. Этот массив всегда называется I_имя_файла_картинки. Массивы засовываются в файл со специальным именем, который надо импортировать в код через #include.

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

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

Код на C для приложения на WatchMaker: вычисление координат и отрисовка иконки &I_logo_38x54 и текста "Today's passwords:" на холсте.
Пример того как отображаются упомянутые ошибки в приложении «Пароль для Войи»

В «Виселице» я с этим смирился, а сегодня каким-то чудом вспомнил про нестандартную директиву __has_include, которую как-то не доводилось использовать прежде. Она проверяет как раз то, что мне нужно — доступен файл для импорта или нет.

Условная компиляция: если определён макрос __has_include и заголовок "voyah_pass_icons.h" доступен, он подключается; иначе объявляется внешняя константа Icon I_logo_38x54.
Реальный пример того как можно сделать, чтобы редактор не считал, что у меня ошибка

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

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

Доделал приложение пароля для «Войи»

Глаза боятся, руки делают. Что-то я сначала приуныл, когда понял сколько возни предстоит, чтобы сделать интерфейс ввода часового пояса, который я решил добавить в программу для получения инженерного пароля «Войи» под «Флиппер».Flipper Zero Даже как-то руки опустились.

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

Белый гаджет Flipper с оранжевым экраном, на котором написано «Today's password: 29211» и таймер +03:00, рядом — оранжевый джойстик и кнопка.
Программа, запущенная на «Флипере Зеро». Виден указанный часовой пояс — GMT+03:00

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

Чтобы получить стрелку в другу строну, повернул её в редакторе, проделал всё то же, что с первой, но при отображении стрелка получалась в какую-то неравномерную крапинку.

Экран настройки часового пояса с надписью «Set your timezone», значением «+03:00» и кнопкой «Set».
Интерфейс задания часового пояса

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

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

Сначала я решил это проверить. Поводил «пипеткой» на картинке, не нашёл. Нарисовал заново. Это ситуацию не исправило. Решил посмотреть в бинарном виде сконвертированные файлы, оказалось сложновато, плюнул. Пошёл смотреть в чём разница у исходных файлов. Оказалось, что один у меня в формате 1-bit colormap PNG, а второй (который с дырками) — 1-bit grayscale PNG.

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

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

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

Баббитовый слиток

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

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

Рука держит прямоугольный металлический брусок с надписью «NORIKENO ANTI FRICTION METAL» и знаком «©», на фоне размытых деталей и упаковки.
Баббитовый слиток для шрифтоотливочной машины от военной-полевой японской типографии, вес — 1125 грамм

На фотографии — слиток типографского сплава, применяемого в полиграфическом производстве. Из него делают литеры, стереотипы, типографские линейки и так далее.

Правда, этот слиток я купил для своего друга и на его деньги. Он занялся изучением печатного дела в Казани и я, встретив сегодня на блошке, эту штуковину, позвонил ему и спросил не надо ли её для него купить.

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

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

Нашествие ахатин

У нас тут пополнение случилось, наши Найгер и Тайгер стали родителем №1 и родителем №2 и наплодили целую кучу маленьких улитят. Причём двумя кладками в течение двух дней. Учитывая, что ахатины — гермафродиты, это, наверное, закономерно.

Что теперь делать с выводком, ума не приложу, я как-то был не готов. Наверное попробуем отдать за так на «Авито», может надо кому-нибудь. А Найгера и Тайгера, видимо, пора рассаживать.

Черный пластиковый контейнер с салатом из моркови, посыпанным черными крошками и украшенным маленькими улитками, на деревянном столе.

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

Я и спутник

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

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

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

Мужчина в серебристой куртке стоит рядом с макетом спутника с золотистым теплоизоляционным покрытием и солнечными панелями на выставке «Газпром космические системы».

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

Электрическая типография

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

Один из листков заставил улыбнуться — он напечатан в «электрической типографіи Л. П. Антонова» и это сильно напоминает проект «Электрический издательский дом», который мы как-то пытались запустить вместе с моим другим другом Василием Балакиным. Я про него тоже недавно писал.

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

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

Записка о выборах в Казани: №1 — проф. Капустин, №2 — проф. Разумовский.

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

Чтение по губам

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

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

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

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

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

Пытаюсь достать The Sensor Watch

Пытаюсь заполучить себе The Sensor Watch. Напомню, это платка с возможностью программирования, которая вставляется в классические часы «Касио».

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

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

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

Серебристые цифровые наручные часы Casio с металлическим браслетом на запястье в белом рукаве; на дисплее время 17:21, дата 13.05, день недели FR.

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

У вас голова не кружится?

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

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

Это было много лет назад, мы с женой гуляли в Москве по ВДНХ и в одном из павильонов увидели кое-что необычное. Рекламировался массаж от электрической массажной кровати. Это сейчас каких только массажёров нет, а тогда они были в диковинку. Мы из интереса попробовали и пошли дальше.

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

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

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

Эффект Манделы

Одна из самых забавных вещей, с которыми я когда-либо сталкивался, это, конечно, эффект Манделы.

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

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

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

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

Женщина в белом платье в горошек танцует на сцене перед огромными часами, показывающими 11:55; на заднем плане музыканты в светлых костюмах играют на скрипках и виолончели.
Кадр из кинофильма «Карнавальная ночь» (1956), где Гурченко поёт песню «Пять минут»

Недавно я опять столкнулся с этим эффектом в чьём-то посте — там обсуждалось стихотворение «Узник», начальные строки из которого все, наверное, помнят ещё со школы:

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

Так вот, я, как и многие в комментариях к тому посту, был уверен, что стихотворение написал Лермонтов, тогда как на самом деле его автор — Пушкин.

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

Замена цифр

Придумал тут штуку интересную. Как у я уже писал ранее, полюбилось мне что-то писать время с минутами в верхнем индексе. Для этого мне пришлось решить проблему ввода всего набора таких символов.

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

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

Настройки ввода текста: источники Russian - Ilya Birman Typography и English - Ily..., кнопки «Изменить...» и «Замены текста...», слева — опции быстрого переключения пользователей.

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

print("""
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>""")

trans = str.maketrans("0123456789", "⁰¹²³⁴⁵⁶⁷⁸⁹")

for i in range(0, 60):
	print(f"""
	<dict>
		<key>phrase</key>
		<string>{f"{i:02d}".translate(trans)}</string>
		<key>shortcut</key>
		<string>:{i:02d}</string>
	</dict>""")


print("</array></plist>")

Чтобы его импортировать, нужно перейти в «Системные настройки…», оттуда в  «Клавитуру», там нажать на кнопку «Замены текста…» и перетащить на открывшийся список получившийся файл.

После этого можно проверить что получилось, — если написать в любом месте «13:00», оно должно само преобразоваться в «13⁰⁰».

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

UTM

Люблю посмотреть на программы далёкого прошлого.

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

Мужчина в костюме работает за ретро-компьютером PERQ: на мониторе — геометрическая фигура, рядом — графический планшет и телефон.
Внешний вид компьютера из брошюры «PERQ. The powerful, scientific, graphics computer» (декабрь 1981 года)

К сожалению, первая попытка провалилась — эмулятор не заработал на моём «Макбуке» (думаю потому, что у меня ARM). Я не сдался — попробовал виртуализировать «Винду» и запустить его там, но и тут меня ждал неуспех. Теперь я решил скачать эмулятор x86, запустить «Виндоуз» там. Это уже третий подход к снаряду.

Как это сделать я не знал, поэтому пришлось гуглить. Из того, что быстро нашлось, мне понравилась программа UTM (это обёртка над QEMU). Поставилось всё без нерешаемых проблем, единственное, в одном месте инструкцию по установке пришлось скорректировать:

brew install aria2

brew tap minacle/chntpw
brew install cabextract wimlib cdrtools minacle/chntpw/chntpw

sh uup_download_macos.sh

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

«Виндоуз» внутри UTM еле ворочается, но работает. Попробую попозже вечером запустить эмулятор в эмуляторе и посмотреть на интересующую меня операционку. Надеюсь хоть это сработает.

Интерфейс UTM с настройками виртуальной машины Windows: статус «Запущено», архитектура x86_64, машина Q35, память 8 ГБ, ISO-образы Windows и UTM Guest Tools подключены.

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

Three Rivers PERQ

Ура! Несмотря на все сложности, мне всё-таки удалось запустить эмулятор PERQ, про который я писал вчера.

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

Скриншот рабочего стола Windows с открытым редактором кода Editor 2.6, показывающим программу на Pascal для получения статуса дискеты через IOGetStatus и вывода её параметров.
Эмулятор компьютера Three Rivers PERQ в «Видоузе», запущенном в эмуляторе компьютера с процессором Intel

Что же мы имеем после запуска?

В системе доступно всего несколько команд, список которых можно посмотреть, набрав ?. Среди них есть знакомые ls, cd и понятная edit. На скриншоте как раз видно как я вызвал на редактирование программу на Паскале, которая лежит в домашней папке. Рядом лежит скомпилированный бинарник, но программу можно скомпилировать и самостоятельно.

Экран у системы вертикальный, это было заметно ещё на том снимке рабочей системы, который я публиковал вчера. Судя по спецификации, разрешение экрана — 1024×768 точек. В брошюре записано именно в таком порядке, хотя как будто бы должно быть указано наоборот, — 768×1024.

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

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

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

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

Одноглазый Дисплей

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

Я не фанат конного спорта, поэтому просто прогулялся рядом. Пока гулял, заметил, что у коня жены, гнедого Дисплея, что-то не то с левым глазом.

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

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

Двое детей в шлемах едут верхом на лошадях по двору конюшни, рядом стоит красная сани, на заднем плане — деревянные постройки и лес.
Дисплей и Дакота везут моих девочек на прогулку

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

Тёмная и светлая темы

Теперь, надеюсь, никто не будет говорить, что тёмная и светлая темы — это какая-то новая мода?

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

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

Выбор происходит командой LOGIN /CursorFunction=5.Тут «5» как раз означает, что надо выбрать «тёмную». И это в 1982-м году, судя по тому что написано в верхнем правом углу!

Скриншоты интерфейса PERQ: слева — меню команд и пример логина, справа — древовидная структура каталогов sys: с папками user, boot, extra и их содержимым
Тёмная и светлая темы в операционной системе компьютера PERQ

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

Редактор в PERQ

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

Двигаюсь с черепашьей скоростью.

Скриншот программы на Паскале «BOTTLES_OF_BEER» от Евгения Степанищева (2024), реализующей песню «99 бутылок пива на стене» с циклом от 99 до 0 и функцией склонения слова «bottle».
Нерабочая программа в процессе редактирования

Редактор очень похож на знаменитый vi. Как и в vi, тут присутствуют два режима — набора текста и команд. Правда большинство команд другие, но некоторые точно такие же. Например, надо нажать Q, чтобы выйти.

Очень удобно, что некоторые команды написаны прямо вверху окна редактирования — это I (вставка), D (удаление), F (поиск), R (замена) и S (замена выделенного).

Как видите, если знать английский, то запомнить их элементарно.

Все команды работы с текстом работают c выделенным участком. Например, чтобы удалить какой-то кусок текста, его надо сначала найти в редакторе командой F (или выделить другим способом, коих масса), а потом нажать D.

Учится всё это очень быстро, мне понравилось. Единственное, к чему пришлось привыкать дольше — ввод параметров для команд завершается клавишей Escape, а не Enter. Это, по всей видимости, сделано для того, чтобы можно было работать с многострочными участками текста.

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

«99 бутылок пива» на PERQ Pascal

Мои читатели знают, что последние несколько дней я возился с эмулятором PERQ. PERQ — это персональный компьютер, выпускавшийся в начале 1980-х годов, первый коммерчески успешный ПК с графическим интерфейсом. Такой олдскул мил моему сердцу, поэтому я потратил несколько вечеров, чтобы попробовать хоть на базовом уровне разобраться что из себя представляла операционная система тех компьютеров.

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

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

Не думаю, что кто-то, кроме редких энтузиастов языка, сейчас выберет «Паскаль» для чего-то нового, но со старыми проектами на нём я иногда сталкиваюсь. Например, в начале этого года видел электронный документооборот, написанный на «Делфи» (это визуальная среда программирования и название диалекта «Турбо Паскаля»).

{$MESSAGE Written by Evgeny Stepanischev, 2024}
PROGRAM BOTTLES_OF_BEER;

const
    MAX_BOTTLES = 99;

Function BotStr(count: integer): string;
begin
    if count = 1 then
        BotStr := ' bottle of beer'
    else
        BotStr := ' bottles of beer';
end;

Procedure SingSong;
var
    i: integer;
    b: string;
begin
    for i := MAX_BOTTLES downto 1 do
    begin
        b := BotStr(i);
        writeln(i:0, b, ' on the wall,');
        writeln(i:0, b, '!');
        writeln('Take one down, pass it around,');
        if i > 1 then
        begin
            b := BotStr(i-1);
            writeln((i - 1):0, b, ' on the wall!')
        end
        else
            writeln('No more bottles of beer on the wall!');
        writeln;
    end;
    
    writeln('No more bottles of beer on the wall,');
    writeln('No more bottles of beer!');
    writeln('Go to the store and buy some more,');
    b := BotStr(MAX_BOTTLES);
    writeln(MAX_BOTTLES:0, b, ' on the wall!');
end;

begin
    SingSong;
end.

Из того, с чем мне пришлось столкнуться, когда я писал программу.

Больше всего ушло времени на ошибку Error 116: Error in type of standard procedure parameter. Речь тут, вроде, идёт о том, что я какой-то процедуре передаю параметры не того типа. Несмотря на то, что в ошибке был указан номер строки, мне всё равно не удавалось понять, что я делаю не так.

Оказалось, что вызов функции BotStr нельзя напрямую поместить во writeln, надо обязательно использовать промежуточную переменную (у меня это b). Учитывая, что скорость работы с эмулятором не позволяет быстро попробовать разные варианты, пришлось изрядно поскрипеть мозгом, чтобы дойти до сути.

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

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

import pyautogui, time

FILE_PATH = '99.pas'

time.sleep(5)

with open(FILE_PATH, 'r') as file:
    for line in file:
        for x in line.lstrip():
            pyautogui.typewrite(x)
            time.sleep(.6)

        time.sleep(1)

Вчера ночью всё наконец запустилось и я смог посмотреть как работает моя первая (и наверняка единственная) программа для PERQ.

Кстати, вот ещё одна интересная деталь.

Чтобы получить исполняемый файл, надо исходный код программы сначала скомпилировать командой COMPILE в объектный файл (.SEG), потом скомпоновать командой LINK в исполняемый (.RUN). У обеих команд есть параметр, где указывается имя файла, с которым мы работаем.

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

Текст песни «99 бутылок пива на стене» в терминале: от 14 до 1, затем «нет бутылок», «пойди купи ещё», снова 99. Заголовок: sys:User>Guest>, POS F.1 a-boot, 08 Aug 08 00:22:40.
Результат запуска «Песни о пиве» под эмулятором компьютера PERQ

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

Вечная мышь

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

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

Это беспроводная и безбатареечная мышь компании «A4Tech», которая питается индуктивным образом от специального коврика. Сносу ей нет, работает без нареканий и, если помрёт, попробую найти и купить такую же, они вроде ещё даже производятся.

Серебристо-черная беспроводная оптическая мышь A4Tech на коврике с надписями «Magic Magnetism» и «Battery FREE», лежащем на цветном рисунке и деревянном столе.

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

Программа с именем 0xFF

В ДОСе, как может кто-то ещё помнит, была своя, отличная от всего, кодировка русских букв, так называемая CP866. Это однобайтовая кодировка, то есть в таблице символов всего 256 позиций.

Поэтому странно, что пробельных символов в ней два, один из них — обычный пробел с кодом 32, именно его операционная система считает пробелом, второй — с кодом 255, он выводится как пробел, но считается обычным символом.

Не помню, использовалось ли это свойство для чего-то полезного или интересного, но на днях прочитал как развлекались с его помощью в те времена:

А 255 символ запретили? 30 лет назад, еще под MSDOS, переименовали утилиту переворота экрана в 255 символ и вставили в autoexec.bat. Хозяин компа уже психовать начал и монитор переворачивать :)) Показали ему прикол…

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

Мне стало интересно проверить — действительно ли это работает? Благо ДОС можно сейчас запустить даже в браузере.

Тут надо пояснить, что «настоящий» пробел для этого не годится — ДОС просто не распознает его в автозагрузке как имя файла для запуска.

Я не знаю как раньше вводили символ с кодом 255 в командную строку, поэтому просто набросал программу на ассемблере, которая переименовывает файл mem.exe (которая обычно есть в составе ДОСа) в  .com:

org 100h

section .data
    oldName db 'MEM.EXE', 0
    newName db 255, '.COM', 0

section .text
global _start

_start:
    mov ah, 56h
    lea dx, oldName
    lea di, newName
    int 21h

    mov ax, 4C00h
    int 21h

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

На следующем шаге я скомпилировал программу у себя прямо в «МакОСи» и вывел в шестнадцатеричном виде:

$ hexdump -C <(nasm -f bin rename.asm -o /dev/stdout)
00000000  b4 56 8d 16 14 01 8d 3e  1c 01 cd 21 b8 00 4c cd  |.V.....>...!..L.|
00000010  21 00 00 00 4d 45 4d 2e  45 58 45 00 ff 2e 43 4f  |!...MEM.EXE...CO|
00000020  4d 00                                             |M.|
00000022

Далее набрал её в кодах при помощи команды DEBUG и запустил. В текущей директории появилась программа с нужным именем:

Скриншот интерфейса MS-DOS 6: вывод команды dir для диска C:\ с файлами COMMAND.COM, WINA20.386, CONFIG.SYS, AUTOEXEC.BAT и другими, объёмом 96 653 байт, свободно 42 786 816 байт.

Для последнего шага мне нужно было как-то снова получить символ 255 в командной строке. Для этого я перенаправил вывод команды DIR в файл START.BAT и отредактировал получившееся при помощи команды EDIT — убрал всё лишнее, кроме символа с именем команды (кажется у меня в файл попали ещё и лишние переводы строки, но они роли не играют).

Попробовал запустить, сработало!

Скриншот командной строки DOS: после выполнения команды TYPE start.bat и запуска start отображается таблица распределения памяти (640K всего, 64K использовано, 576K свободно).

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

Письма в спектрумовские журналы

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

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

Список читателей, приславших объёмные коллекции POKES и благодарственных писем за книги по машинным кодам, с указанием имён и городов.
«ZX-Форум», №1, Москва, 1994, страница 122

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

Письмо Е.В. Степанишева (Лениногорск) о прохождении игры ADVENTURELAMD: трудности с медведем в THRONE-ROOM и загадками в MOVIE (IMAGINE).
«ZX-Ревю», №6, 1994, Москва, страница 67
Ответы на вопросы из «Перекрестка» от таинственного любителя адвентюр и Булгакова: в ADVENTURELAND — команда HOLLO, в MOVIE — найти девушку, у рыцаря с попугаем — OPEN.
«ZX-Ревю», №3, 1995, Москва, страница 60

Adventureland — текстовый квест 1983 года. Локации рисуются картинкой, к которой даётся текстовое описание. Все команды так же вводятся текстом. Игрушки этого жанра обычно понимали крайне упрощённые англоязычные конструкции вида «глагол», либо «глагол существительное».

Movie — изометрическая аркадная игра 1986 года, где действие происходит в криминальном Нью-Йорке 1930-х годов.

Степанишева Е.В. (Лениногорск): результаты «лечения» игр на «Компаньоне» из-за ошибок обработки прерываний 2 рода.
«ZX-Ревю», №4, 1994, Москва, страница 51

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

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

Прерывание второго рода — это вид аппаратных прерываний. Обычно через него в «Спектруме» делались какие-нибудь фоновые процессы, типа проигрывания звука в играх. Адрес, куда передаётся управление при прерывании вычислялся достаточно сложно: старший байт адреса брался из регистра I, младший — из какого-то порта (по умолчанию там было число 255), по этому адресу читался адрес на который уже и передавалось управление.

Так как ПЗУ в «Спектруме» находится в младших адресах, то какие-то значения регистра I приводили к чтению адреса из ПЗУ. Большинство авторов игр знать не знали, где-то в России в ПЗУ вносят какие-то изменения и считали его неизменным (оно действительно было постоянным и не обновлялось). Поэтому в играх нередко использовались адреса из ПЗУ для адресации прерываний второго рода, что приводило к проблемам в российских клонах.

Эти проблемы приходилось чинить самостоятельно. Мы с братишкой читали ассемблерный код, находили использование таких прерываний и подбирали им другой адрес. Либо записывали нужный адрес куда-то в ОЗУ (так сделано для игры «Саботёр 2», пробелы там нужны, так как адрес записывается в область для встроенного Бейсика).

Статья «Старые» программы: обсуждение багов MONS-3, критика старых версий MONS/GENS, защита классики и упоминание TASM 128.
ZX-Ревю, №6, 1994, Москва, страница 56

MONS-3 — ассемблерный отладчик, почему он вис, понятно, в общем-то: команда ассемблера HALT переводит процессор в состояние паузы до наступления прерывания. Так как во время выполнения MONS-3 прерыванию поступить неоткуда, программа зависала навсегда, нужно было перезагружаться. Думаю, в следующих версии отладчик просто игнорировал эту команду, поэтому и не зависал.

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

Карбон перепилился

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

Чёрная гофрированная труба с диагональным узором лежит на плитке с черно-белым орнаментом в стиле ар-деко.

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

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

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

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

Американская народная игра «Убей вампира»

Сегодня знаменательный день! Сегодня закрылся мой детский гештальт, а именно — я нашёл игру, в которую играл на компьютере «Радио-86РК» в 1991-м году. Я не смогу объяснить чем она меня зацепила, но мне почему-то всё это время мучительно хотелось сыграть в неё ещё раз.

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

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

Это мало что дало, разве что объяснило почему в игре моего детства было прилагательное «американская». Позже я пытался найти хоть что-нибудь по словам «Вампус Радио-86РК», но безрезультатно.

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

Сегодня я предпринял очередную попытку и преуспел! Для начала я снова выкачал все программы для «Радио-86РК», какие нашёл, но в полученных архивах «Вампира» не было, а после начал смотреть программы для «Микроши».

И вот на одном из сайтов я нашёл её — Американскую народную игру «Убей вампира»! Это точно она, та самая игра!

Правила игры: игрок может перемещаться или стрелять кривыми стрелами по вампиру; если стрела попадёт в вампира — победа, в игрока — поражение; проигрыш также наступает, если…
На чёрном фоне белым пиксельным шрифтом написано: «А НУ-КА УБЕЙ ВАМПИРА» и ниже «АМЕРИКАНСКАЯ НАРОДНАЯ ИГРА». Слева внизу — мигающий курсор.
Та самая заставка, которую я искал столько лет! Игра запущена в эмуляторе Emu80

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

Второклассница

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

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

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

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

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

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

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

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

Может что-то ещё отвалится, посмотрим.

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

Запахи

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

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

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

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

← сюда туда →