Ещё о кирпиче с клеймом «.А.»
Одно из моих увлечений — ищу, фотографирую и пытаюсь атрибутировать кирпичные клейма на казанских кирпичах. В последние годы случаев, когда я нахожу новые клейма, всё меньше и меньше, тем не менее, тему я не забрасываю.
В основном, казанские кирпичные клейма — это две буквы инициалов владельца завода с минимумом украшательств. Очень редко встречаются три буквы и только один раз встретилась одна — «А». Не в том смысле, что я встретил её только на одном кирпиче, а просто других одиночных букв на кирпичах Казани не попадалось.
Была попытка атрибутировать это клеймо как завод А. Ф. Амлонга, но версия слабая — непонятно почему почти на всех казанских кирпичах по две буквы, а тут — одна. Ну, может быть, это
Недавно у меня родилась новая версия, опять же, бездоказательная, но в этом направлении можно бы покопать. Я подумал, что «.А.» может быть не инициалами владельца завода, а сокращением названия заведения при котором был завод или для которого делались кирпичи.
Недавно я видел кирпичи с клеймом «.А.» в стенах торгового центра, построенного на месте и из кирпичей снесённых казарм, которые были предназначены для размещения военных полков, передислоцированных в Казань перед Первой мировой войной. Возможно букву «А» стоит искать в названии
Doom на bc
Давно хотел повысить градус безумия своих приложений и изобразить
Писать начал, разумеется, на одном из самых далёких от вывода графики на экран языков — bc, я ведь теперь всё на нём пишу
Как вообще устроен вывод графики в текстовый терминал? Надо сказать, что как правило, терминал у нас текстовый число номинально. Да, там выводятся
Обычно мы отсылаем в терминал
ESC ] 1337 ; File = [необязательные параметры] : изображение в формате base64 ^GХорошо, с этим разобрались. Но как нарисовать картинку именно из bc? Тут надо решить несколько очевидных проблем.
BMP — это, как водится во многих старых форматах, внутренне не один формат хранения графики, а несколько. В данном случае я взял самый простой и примитивный — BMP Core с индексированной палитрой из двух цветов.
Его плюс — у него очень простой заголовок и его относительно дёшево формировать. Тем более, что мне не хотелось возиться со сжатием, количество вычислений для этого могло превысить все разумные пределы.
Теперь надо было решить что же я буду писать. На самом деле к этому моменту я уже внутренне определился. В начале двухтысячных локальный фурор произвела игрушка «Wolf5k», написанная на ДжаваСкрипте. Чтобы понять, чем она крута, надо знать, что ДжаваСкрипт тогда графику выводить не умел — не существовало ни тега CANVAS, ни, тем более, WebGL или WebGPU.
Изображение формировалось в текстовом формате XBM, которое, через весьма остроумный хак, показывалось в браузере. На настоящий момент поддержки этого формата давно уже нет ни в одном современном браузере.
Это как будто могло быть очень символично — сделать порт игрушки, которая выводила свою графику на языке, для этого в те годы непригодном, на язык, который так же непригоден для этого сейчас.
К несчастью, исходный код игры обфусцирован и, когда я в самом начале сел за его чтение, был в отчаянии — мне казалось, что за отведённый самому себе суточный срок разобраться не получится. К счастью, раскопки
Не буду описывать все сложности, с которыми пришлось столкнуться, но примерно к полуночи у меня получился код, который умел рендерить картинку покадрово — к тому времени я ещё не решил проблему опроса клавиатуры и мой «игрок» просто крутился на одном месте. В рендере я увидел несколько проблем, но не критичных.
Самой большой проблемой была производительность. Но это я отложил на следующий день — решил, что работающая, но немного глючащая и сильно подтормаживающая игра, написанная за сутки — удовлетворительный результат. До окончания хакатона мне предстояло решить ещё одну проблему — проблему опроса клавиатуры.
«Wolf5k» — динамичная игра, а во всём языке bc единственная функция ввода — read(), которая требует нажатия на «Энтер» после каждого ввода. Такой себе интерактив.
В самом языке это никак не решить, так что, признаюсь, тут я немного смухлевал — написал на zsh запускающую часть, которая сама читает клавиатуру и пересылает нажатия в bc, «нажимая» на «Энтер»:
#!/bin/zsh
x=/*
while {}; do
v=
read -rs -k1 -t0.4 v
case "${v:l}" in
[wasdljkm\ ]) printf "%d\n" "'${v:l}";;
*) echo 0;;
esac
done | bc -g -Ll -f "$0"
exit; */1
/* тут программа на bc */Да, не очень честно, но какой выбор?
К трём ночи у меня была игрушка, в которой всё работало на три с плюсом, особенно, если на экране было не так много объектов. Правда, при поворотах враги иногда пропадали, а иногда взлетали и улетали за пределы экрана. Но в это уже можно было играть.
У меня был соблазн опубликовать её на следующий же день, но хорошо, что я дал коду «отлежаться».
Результат выложил в свой репозиторий. Несмотря на то, что это порт «Wolf5k», игра называется