Остатки мельницы

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

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

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

Обнажённые бетонные фундаменты и пни деревьев на высохшем, потрескавшемся дне водоёма.
Жернова на дне высохшей реки

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

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

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

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

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

2,0

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

Несмотря на то, что можно делать это плавно, я особо не заморачивался — просто в один момент сделал базовой скоростью ×1,5, откатываясь назад, когда мне было сложно что-то понять (всё-таки у людей бывает очень разный темп речи). А потом так же перешёл на ×2,0.

Вот уже пару месяцев базовая скорость у меня 2,0. В скором времени планирую попробовать ещё чуть-чуть её увеличить. Один приятель сказал в разговоре, что знает кого-то, кто слушает на ×4,0, но мне такое кажется маловероятным.

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

Патроны

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

Вчера по моей просьбе мне прислали фотографию трёх из них с двух сторон, специально для публикации. Сказали, что патроны финские японские. По калибру видно, что для винтовки Мосина (7,62 мм), других подробностей нет.

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

Дополнено: оказалось, неправильно расслышал по телефону, не финские патроны, японские.

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

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

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

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

А тут в школе дочке выдали доступ к платформе «Учи.ру», — там школьники выполняют задания по различным дисциплинам в игровой форме. После выполнения основных ученика подталкивают к дополнительным трекам. Дочка уже несколько дней занимается и в один момент попала на курс по программированию.

Скриншот интерфейса: слева — игровое поле с велосипедом, плотом и оленем, справа — код на Python для управления объектами (bike.right(5), raft.down(2) и др.)

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

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

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

Упоминание Константина Степанищева

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

Обменялись накопленными данными, и, в процессе переписки, она мне прислала упоминание наших с ней предков. В 1744 году мой предок Константин Мартинович Степанищев (родился в 1711) побил своего двоюродного брата Якова Жилина, предка моей собеседницы.

К сожалению, описания самого конфликта нет, только запись о случившемся.

Рукописный текст: «О приключении побоев, учиненных телом Средней школы по слову Жилина, дворянина-братского кон. отандиона Степанкищевыча. 1929.
Выписка из РГАДА, фонд 580, опись 1 часть 1, позиция 1929

Не знаю как она наткнулась на эту строчку (в описи несколько почти три с половиной сотни страниц), но я бы на неё точно не набрёл.

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

Рукописный текст: «О деревнях Семеновых Степановских было крестьянина Почитина Гладкова». Слева — номер 27 и цифра 118, справа — цифра 4.
Выписка из РГАДА, фонд 580, опись 1 часть 1, позиция 1118

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

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

Снова о Константине Степанищеве

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

Бьёт челом Староосколького уезду, села Средней Апочки житель Яков Жилин, того ж села на брата своего двоюродного кирасирского полку драгуна Константина Степанищева сотенного голову на Ивана Золотухина. Вместо Якова писал староосколец Андрей Емельянов.

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

Игната Григорьева отправили ехать в Апочку за обидчиками и привезти их в Старый Оскол. Допросить и записать. А они не поехали с ним! Значит дальше написано, что Константин обещает никуда не скрываться. Он тоже неграмотный, за него подписался Пётр Редькин. Если уедет, значит признает себя виноватым.

Военные в кирасирских шлемах с султанами скачут на лошадях в атаку, неся сабли наперевес, на фоне дыма и пыли боя.
«Атакующие кирасиры», художник — Апсит Александр Петрович (1880—1944)

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

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

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

Ещё из тексте упоминается, что Константин был неграмотным, впрочем, это обычное дело для того времени.

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

«Numb»

Как правило, у меня всегда есть песня, которую я могу крутить на повторе хоть постоянно, месяцы подряд. В настоящее время это «Намб» группы «Линкин Парк» («Numb», «Linkin Park»).

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

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

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

Кроме одного.

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

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

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

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

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

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

Железный лом

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

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

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

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

Сегодня опять об этом вспомнил.

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

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

Программирую под Flipper Zero

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

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

Белый многофункциональный инструмент Flipper Zero с оранжевым экраном, на котором написано «99 bottles of beer on the wall», лежит на деревянной поверхности.
Попробую написать «Песню о пиве»

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

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

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

Моя первая программа под Flipper Zero

Вчера вечером разобрался-таки с прокруткой экрана для «песни про пиво» под Флиппер Зеро и выложил всё в репозиторий.

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

Белый многофункциональный инструмент Flipper Zero с оранжевым экраном, на котором отображается текст песни «58 bottles of beer on the wall», и оранжевыми кнопками управления.

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

void beer_render_callback(Canvas* canvas, void* ctx) {
    // …
    elements_scrollbar(canvas, BEER_MAX - pos, BEER_MAX + 1);
    // …
}

int32_t beer_main(void* p) {
    // …
    switch (event.key) {
        case InputKeyDown:
            if (app->pos > 0) app->pos--;
            break;

        case InputKeyUp:
            if (app->pos < BEER_MAX) app->pos++;
            break;

        default:
            break;
    }

    view_port_update(app->view_port);
    // …
}

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

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

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

Кхе-кхе

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

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

Все, с кем я об этом говорил, предполагают, что это какая-то форма Ковида. Эти люди не доктора, но любопытно, что покашливающих заметили все и теория у всех одна и та же. Post hoc, ergo propter hoc. Знает ли кто-то что это на самом деле?

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

Куртка с подогревом

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

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

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

Тепловизионное изображение футболки на полу: максимальная температура 43,2°C в нижней части, 30,2°C в центре; фон — тёмный пол с текстурой.
Моя куртка, снятая камерой с тепловизором

Сказано — сделано!

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

Буду носить как обычную жилетку, хоть какой-то толк.

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

Пишем на «Флиппере Зеро» по-русски ★

Вкратце: в русским текстом работать можно, но сложно, код лежит на «Гитхабе».

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

Flipper Zero

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

На экране Flipper Zero отображается текст: «Привет, мир! Пишем по-русски на Флиппере Зеро. Евгений Степаницев, 2023». Устройство показано в оранжевом стиле на тёмном фоне.
Вывод русских букв (трансляция с экрана через оболочку qFlipper)

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

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

Под капотом у этого АПИ — очень известная в своей нише библиотека U∞g2, у которой по историческим, видимо, причинам есть два набора функций для работы со строками. Одни принимают только однобайтовую кодировку ASCII, другие работают в Юникоде.

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

Первый из них — canvas_set_custom_u8g2_font.

Чтобы что-то написать русскими буквами, нужен шрифт, который их содержит. Стандартный вывод canvas_set_font позволяет выбрать один из нескольких шрифтов, ни одни из которых кириллицу не поддерживает. Тут и приходит на помощь canvas_set_custom_u8g2_font. Он позволяет выбрать произвольный шрифт пакета U∞g2, — внутри их целая куча и некоторые в названии содержат слово «cyrillic».

Вот как я это делаю:

#include <u8g2/u8g2_fonts.c>
// …
canvas_set_custom_u8g2_font(canvas, u8g2_font_haxrcorp4089_t_cyrillic);

Файл u8g2/u8g2_fonts.c внутри себя содержит шрифты в особом формате, можно открыть его прямо в текстовом виде и посмотреть как всё устроено.

Шрифт мы выбрали, теперь надо что-нибудь вывести. Тут на помощь приходит canvas_draw_glyph. «Под капотом» у него лежит u8g2_DrawGlyph, которая понимает символы Юникода почти без танцев с бубном. Думаю, это чистое везение — наверняка эта функция появилась сильно позднее, поэтому у неё нет двух вариантов для работы с разными кодировками.

Плохая новость в том, что строки в коде мы обычно пишем в кодировке UTF-8, а canvas_draw_glyph ожидает их в UCS-2. Но есть и хорошая новость — в прошивке доступно АПИ для перекодирования, как обычно, великолепно документированное на языке Си.

Но canvas_draw_glyph, как можно понять из названия, выводит только один символ. Как же вывести строку? Достаточно просто — надо вывести её посимвольно, сдвигая координату на ширину символа. Звучит просто, но как это сделать?

Тут нас ждёт очередная засада. Дело в том, что canvas_glyph_width, которая должна бы это делать, принимает на вход только char, при том, что нижележащая u8g2_GetGlyphWidth преспокойно работает с Юникодом.

Поэтому я сделал просто — выдрал реализацию u8g2_GetGlyphWidth себе в исходники. В итоге мякотка моего решения выглядит вот так:

void unicode_draw_utf8_str(Canvas* canvas, uint8_t x, uint8_t y, char* str) {
    FuriStringUTF8State state = FuriStringUTF8StateStarting;
    FuriStringUnicodeValue value = 0;

    for(; *str; str++) {
        furi_string_utf8_decode(*str, &state, &value);
        if(state == FuriStringUTF8StateError) furi_crash(NULL);

        if(state == FuriStringUTF8StateStarting) {
            canvas_draw_glyph(canvas, x, y, value);
            x += unicode_GetGlyphWidth(&canvas->fb, value);
        }
    }
}

Тут unicode_GetGlyphWidth — скопированная реализация u8g2_GetGlyphWidth, а furi_string_utf8_decode используется для кодирования UTF-8-строки в последовательные символы UCS-2.

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

Написали с дочкой игру

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

Раздумывал недолго, выбрал для реализацию игру «Виселица» (некоторые знают её под названием «Балда»), в которую когда-то мы играли в детстве.

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

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

Человек с кудрявыми волосами работает за ноутбуком, на экране которого отображается оранжевый фон с пиксельным логотипом и надписью «РУБРИК».
Дочка рисует виселицу для нашей игры, это первый вариант, в игру не вошёл

Я подумал, что вполне смогу использовать то, что она нарисует в прототипе, но получилось вполне симпатично и я оставил её графику как есть.

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

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

Цифровая диета

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

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

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

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

← сюда туда →