Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Позднее Ctrl + ↑

А что «Флиппер»?

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

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

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

Сосуд-мухоловка

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

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

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

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

99 бутылок: bootBASIC

Очередная «песня о пиве», в последнее время я что-то прям зачастил.

78. bootBASIC — интерпретатор простенького диалекта Бейсика, занимающий 512 байт. В наше время, когда некоторые программы занимают гигабайты, удивительно видеть что-то настолько крошечное.

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

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

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

Обидно, что нет gosub для перехода к подпрограмме, вместо этого приходится использовать goto на переменную. Ладно хоть такая возможность есть. Комментариев нет, но можно использовать для этого команду print""; — дальше неё интерпретатор в строке ничего не видит.

1 print""; Written by Evgeny Stepanischev https://bolknote.ru
10 b=99
20 r=30
21 goto 200

30 print"of beer on ";
31 print"the wall, ";

40 r=50
41 goto 200

50 print"of beer."
60 b=b-1

70 print"Take one do";
71 print"wn and pass";
72print" it around, ";

80 r=90
81 goto 200

90 print"of beer on ";
91 print"the wall."

100 if b goto 20
110 goto 900

200 if b goto 203
201 print"no";
202 goto 210
203 print b;
210 print" bottle";
220 if b-1 goto 250
230 print" ";
240 goto r
250 print"s ";
299 goto r

900print"No more bott";
901print"les of beer ";
902print"on the wall,";
903print" no more bot";
904print"tles of beer."
905print"Go to the st";
906print"ore and buy ";
907print"some more, 9";
908print"9 bottles of";
909print" beer on the";
910print" wall.

Библиотека itertools для PHP

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

Пример использования теперь стал выглядеть вот так:

use Itertools\Itertools as it;

foreach (it::islice(it::cycle('ABC'), 10) as $element) {
    echo $element;
}

Справочник случайных чисел

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

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

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

Разворот со случайными числами из ГОСТа 11.003—73 «Прикладная статистика. Равномерно распределённые случайные числа»

Например, в ГОСТе 1973 года дан ряд случайных чисел и описана методика их использования, а так же несколько примеров, где они могли бы пригодиться. Вот один из них:

Пример случайного отбора изделий в выборку при статистическом контро­ле качества продукции. Партия состоит из 90 изделий. Требуется случайным образом отобрать для контроля пять изделий.

Решение. Пронумеруем все изделия партии номерами от 1 до 90. Соста­вим достаточно короткий ряд случайных чисел в диапазоне от 1 до 100. Отбро­сим из этого ряда все числа, большие 90. Выберем из оставшихся первые пять различных чисел — это будут номера изделий для контроля.

В Йошкар-Олу

В выходные собираемся в Йошкар-Олу. Мы там уже были в 2013-м, ещё до рождения дочки. На этот раз поедем втроём.

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

Настраиваюсь в этот раз на спокойный семейный отдых.

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

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

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

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

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

После всех перипетий, когда поставили палатку и развели костёр

Кирпич «…LA и Ко»

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

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

Найденный кирпич с частью надписи «…LA и Ко»

Ноль-ноль

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

Пример использования мною верхнего индекса в реальной переписке

99 бутылок: mkdir + find

77. mkdir + find — тут некий японец придумал как писать программы, используя только утилиты mkdir и find. Мне такое очень нравится, поэтому и я решил что-нибудь написать на связке этих утилит. Сразу вспомнил, что давно у меня не было «песни о пиве». Есть у меня такое развлечение — писать её на всём подряд.

Программу вы можете видеть на экране, а как она работает расскажу чуть ниже.

# Written by Evgeny Stepanischev https://bolknote.ru

rm -rf bottles; mkdir bottles
find bottles -maxdepth 98 -execdir mkdir bottles/bottles \;
find bottles -empty -name bottles -execdir mkdir bottles/bottle \;

find bottles \
        -empty -printf "1 bottle of beer on the wall, 1 bottle of beer.
Take one down and pass it around, no bottles of beer on the wall.

No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.\n" -o \
        -regex '.*/bottles/bottles' \
        -execdir find . \
                -empty -printf "%d bottles of beer on the wall, %d bottles of beer.\n" \; \
        -execdir find bottles \
                -empty -printf "Take one down and pass it around, %d %f of beer on the wall.\n\n" \;

# Clean up
rm -rf bottles

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

Команда mkdir, наверное, многим знакома — это создание директория, а find — утилита для поиска файлов и директориев по различным критериям. Причём с найденным она может делать некоторые простые действия.

Чтобы писать программы, автор оригинальной статьи использует несколько находок.

Во-первых, создание вложенных директориев командой find с параметром -execdir mkdir имя.

Параметр запускает указанную команду в директории, который сейчас просматривает find. Эти вложенные директории в дальнейшем используются как конечный цикл для следующей команды find. Вложенность при этом можно регулировать параметром -maxdepth.

Во-вторых, параметр -printf поддерживает аргумент %d, который позволяет вывести текущий уровень вложенности и полезен в тех же циклах.

В-третьих, фильтры команды find, а так же директивы -o («ИЛИ») и -and («И») можно использовать для организации условий.

Мне пришлось дополнительно решить ещё две проблемы.

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

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

Во-вторых, мне нужно поддержать окончание множественного числа. Тут я немного смухлевал и слегка замёл эту проблему в конец — там я вывожу дополнительные строки «1 bottle of beer on the wall, 1 bottle of beer. / Take one down and pass it around, no bottles of beer on the wall».

Но в строке перед этим текстом у меня сделано более честно. Как видно, структура директориев у меня такая: 98 раз созданы вложенные bottles, а конечная директория называется bottle.

Это мне позволяет в одном из «циклов», огранизованных через find, использовать аргумент %f параметра -printf, который выводит имя текущего директория. Таким образом в самом конце я получаю bottle вместо bottles.

Добавлено: мне подсказали, что обратный цикл можно огранизовать проще, через ключ -depth, переделал программу под него:

# Written by Evgeny Stepanischev https://bolknote.ru

rm -rf start; mkdir -p start/bottle/bottles
find start/bottle -maxdepth 97 -name bottles -execdir mkdir bottles/bottles \;

find start -mindepth 1 -depth \
        -empty -printf "%d %f of beer on the wall, %d %f of beer.\n" -o \
        ! -empty -printf "Take one down and pass it around, %d %f of beer on the wall.\n\n" \
        -printf "%d %f of beer on the wall, %d %f of beer.\n" \
        -name bottle -printf "Take one down and pass it around, no bottles of beer on the wall.

No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.\n"

rm -rf start

Это другое!

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

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

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

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

Видимо это другое.

Забрали дочку из лагеря

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

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

Мы с дочкой решили посчитать сколько прожило это дерево по кольцам на спилах

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

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

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

Упоминание насечек на монетах

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

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

Мой друг Олег Петрович случайно набрёл в газете «Волжский вестник» на заметку, где, как кажется, есть упоминание таких монет:

Заметка об испорченных монетах в газете «Волжский вѣстникъ», № 215, 1888 года

Похудел

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

С «пополнел» похоже, но там это менее явно ощущается, чувствуется едва заметно. Полнота — плохо, но если не связано с весом, то хорошо. Например, полное понимание — это отличная штука.

Ещё и ещё «Костин»

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

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

Кирпичи торгового дома «И. А. Костинъ с племянниками»

Интересно сколько же их из Нижнего Новгорода везли, что у нас так много их обнаруживается? Причём не только в Казани, но и по берегам реки в нескольких часах езды.

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

Добавлено позднее. В справочниках есть множество упоминаний лавки торгового дома Ивана Афанасьевича в Казани, один из примеров:

«Справочная книга „Вся Казань“ на 1910 годъ», Казань, типо-литографія И. С. Перова, 1910
Ранее Ctrl + ↓