Остатки мельницы
С конца лета Волга
Тем более, что пересохшее ещё и хорошо подсохло, поэтому можно прогуляться по бывшему дну, не боясь
В прошлые выходные с товарищем
Тот, который лежит подальше, по окружности окован железом, в ближнем, сломанном, есть выемка, видимо под перекладину в оси, на которую он был надет.
Любопытно, чем мельница приводилась в движение, — судя по карте, стояла она на окраине села, очень далеко от ближайшей реки.
Мельница исчезла
Дополнено: давно я так не смеялся над собственным текстом. Разумеется мельница приводилась в движение ветром. Дописывал последнюю строчку в спешке, думая о том, что жена и дочка идут сегодня на занятия по конному спорту. Отсюда в моём тексте появились лошади.
2,0
Полгода назад я писал о том, что слушаю ролики на Ютьюбе на скорости 1,25. В комментариях мне подсказали, что это совершенно не предел, —
Несмотря на то, что можно делать это плавно, я особо не заморачивался — просто в один момент сделал базовой скоростью ×1,5, откатываясь назад, когда мне было сложно
Вот уже пару месяцев базовая скорость у меня 2,0. В скором времени планирую попробовать ещё
Патроны
Как я недавно писал, в одной из поездок нашёл небольшую кучку целых патронов. Видимо времён Гражданской войны. Поскольку взять себе я их не имел права, оставил старшему по группе, к которой я отношусь в нашем
Вчера по моей просьбе мне прислали фотографию трёх из них с двух сторон, специально для публикации. Сказали, что патроны финские японские. По калибру видно, что для винтовки Мосина (7,62 мм), других подробностей нет.
Железка, в которую они вставлены, действительно обойма, как предположил в комментариях один из читателей. В ней должно быть пять патронов, два, видимо, выпали — отдельно от этих я нашёл ещё шесть штук.
Дополнено: оказалось, неправильно расслышал по телефону, не финские патроны, японские.
Первые дочкины программы
У меня нет никакого желания специально делать
А тут в школе дочке выдали доступ к платформе «Учи.ру», — там школьники выполняют задания по различным дисциплинам в игровой форме. После выполнения основных ученика подталкивают к дополнительным трекам. Дочка уже несколько дней занимается и в один момент попала на курс по программированию.
Мне, конечно, было очень интересно посмотреть как у неё получается. Пока задания самые простые — передвинуть различные средства передвижения по клеткам так, чтобы забрать звёздочки. Сначала можно было двигать только на один шаг, потом появился параметр — количество шагов. Попутно, кстати, увидел как дочка провела первую в своей жизни оптимизацию кода — объединила две одинаковые операции в одну.
По сути, этот курс учит в концепции «черепашьей графики» — так учили программировать ещё в моём детстве. Правда я напрямую с ней не сталкивался, но знаю о ней.
Упоминание Константина Степанищева
В очередной раз убеждаюсь в полезности публикации всего, над чем работаешь, в интернете — сегодня получил письмо от девушки, которая, как и я, исследует своё родовое дерево. Она пишет, что наши предки
Обменялись накопленными данными, и, в процессе переписки, она мне прислала упоминание наших с ней предков. В 1744 году мой предок Константин Мартинович Степанищев (родился в 1711) побил своего двоюродного брата Якова Жилина, предка моей собеседницы.
К сожалению, описания самого конфликта нет, только запись о случившемся.
Не знаю как она наткнулась на эту строчку (в описи несколько почти три с половиной сотни страниц), но я бы на неё точно не набрёл.
Добавлено позднее: оказывается существует волонтёрский проект по вычитыванию различных фондов. Там можно найти эту и ещё одну запись. Во второй записи речь идёт, по всей видимости, о брате моего прямого предка, Семёне Марковиче Степанищеве (родился около 1660 года).
В найденной записи 1729 года написано «о держании Семёном Степанищевым беглого крестьянина помещика Гладкова», видимо Семён Маркович укрывал
Снова о Константине Степанищеве
К вчерашнему упоминанию моего предка, Константина Степанищева подъехали некоторые подробности. Оказывается исследовательница, с которой мы обменялись накопленными данными, заказывала выписку из дела, где есть подробности драки. Точной копии нет, только вольное изложение.
Бьёт челом Староосколького уезду, села Средней Апочки житель Яков Жилин, того ж села на брата своего двоюродного кирасирского полку драгуна Константина Степанищева сотенного голову на Ивана Золотухина. Вместо Якова писал староосколец Андрей Емельянов.
Да, его били Константин и группа крестьян, таскали за волосы, пинали, били палками, кулаками, за что он не знает. Писал императрице жалобу, тут эту жалобу в канцелярию отправили, там отписались о приёме, что надо найти этого Константина и крестьян.
Игната Григорьева отправили ехать в Апочку за обидчиками и привезти их в Старый Оскол. Допросить и записать. А они не поехали с ним! Значит дальше написано, что Константин обещает никуда не скрываться. Он тоже неграмотный, за него подписался Пётр Редькин. Если уедет, значит признает себя виноватым.
В тексте есть несколько важных, но ничего не значащих для современного человека слов, проливающих свет на жизнь моего предка.
Прежде всего сказано, что он служил в «кирасирском полку». Кирасир — всадник тяжёлой конницы, которые использовали в качестве защиты кирасу, — крупный доспех для защиты торса. Дальше встречается слово «драгун». Драгун — конный стрелок, обученный действовать как в конном, так и в пешем строю.
В полку Константин служил, как мы видим из текста, под началом сотника, то есть командира военного подразделения. Из чего делаем вывод, что он был чином младше, чисто статистически, — рядовым, скорее всего.
Ещё из тексте упоминается, что Константин был неграмотным, впрочем, это обычное дело для того времени.
«Numb»
Как правило, у меня всегда есть песня, которую я могу крутить на повторе хоть постоянно, месяцы подряд. В настоящее время это «Намб» группы «Линкин Парк» («Numb», «Linkin Park»).
Песня мне очень нравится и я постоянно слушаю её, когда гуляю с собакой. Я часто думаю о том, что этот факт наверное
Вероятно она
При этом я хоть и знаю слова, но особо в них не вслушиваюсь и не вдумываюсь, — преимущество плохого знания английского. Значит дело скорее в музыке и эмоциональных интонациях голоса. На этом месте мои способности к самокопанию буксуют и я никакого вывода не делаю.
Кроме одного.
Возможно в будущем интеллектуальным помощникам, которые точно появятся, чтобы изменить нашу жизнь, даже не придётся использовать датчики, чтобы понять наше состояние.
Как акинатор угадывает персонажа всего за двадцать пять вопросов или меньше, так и ИИ достаточно будет того, что он уже имеет.
То, что мы слушаем, то, что заказываем в интернете, момент, когда мы включаем обогреватель, чтобы согреться, лампа, которую мы оставили гореть, хотя мы вышли из комнаты и её свет нам не нужен, всё это, возможно, расскажет о нас достаточно, чтобы сделать
Большой вопрос что потом с этими выводами делать. Я не параноик и не люблю продумывать вред от технологий, мне ближе их светлая сторона, так что, я надеюсь, они пригодятся
С друзьями и соседями мы уже разучились говорить, а с психологами ещё не научились, может хоть роботы нас спасут.
Железный лом
Месяц назад рассказал в одной компании о том, что в некоторых районах Татарстана люди промышляют добычей чёрного металла из земли. Ходят с металлоискателями, иногда даже самодельными, выкапывают всякое и сдают в пункты приёма металлолома.
Я одного такого человека даже лично знаю, а ещё несколько видел за работой издалека, когда ездил по сёлам по делам военного поиска или к друзьям, покопать старину в огородах.
В общем, пришлось к слову, рассказал, а в ответ меня огорошили тем, что килограмм металла стоит меньше двадцати рублей. Я тогда в первый раз всерьёз задумался о том сколько именно металла надо проволочь, чтобы хотя бы окупить бензин.
Сегодня опять об этом вспомнил.
Гуляя с собакой я обычно прохожу мимо кустарного забора, сделанного из старых металлических спинок кроватей, залитых цементом. А сегодня обратил внимание, что
Программирую под Flipper Zero
Мне месяц назад на день рождения подарили «Флиппер Зеро» — «перочинный ножик для хакера». Довольно известное в узких кругах устройство, очень занятное. Но об этом
Давно подмывало
В интернете есть несколько статей о том как начать, которые мне очень помогли. Довольно быстро я научился собирать первое приложение, которые выводит строчку текста и опрашивает клавиатуру. По пути поразился сколько бойлерплейта (шаблонного почти одинакового для каждого приложения кода) пришлось написать. Очень не хватает
Пока застопорился — не пойму как прокручивать экран и есть ли
Моя первая программа под Flipper Zero
Вчера вечером
Как я уже писал, документации на удивление мало, пришлось налегать на чужие исходники. Если касаться темы прокрутки экрана, то, по всей видимости, существуют два способа: перерисовывать экран самостоятельно, вызывая каждый раз компонент полосы прокрутки с нужным значением или заморочиться с созданием так называемой «сцены», разместить на ней виджет прокручиваемого текста и засунуть туда весь текст, который надо прокручивать, целиком.
Второй способ больше подходит для многоэкранных приложений, поэтому его я не выбрал — для моих целей там слишком много мороки. Поэтому в этой части всё получилось достаточно просто:
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);
// …
}В цикле опроса клавиатуры ловим клавиши «вверх» и «вниз», в соответствии с клавишей увеличиваем или уменьшаем счётчик, после чего вызываем перерисовку, в коллбеке которой выводим экран и полосу прокрутки с правильной позицией.
Возможно сделаю ещё автоскроллинг экрана на длинное нажатие клавиши, но пока не уверен, что мне хочется — может лучше
Кхе-кхе
Как «испанка», мутировав, полностью растворилась в других заболеваниях, так и ослабевший Ковид уже никого всерьёз не беспокоит — в мире ходят
Интересно, что вокруг стало
Все, с кем я об этом говорил, предполагают, что это
Куртка с подогревом
К сожалению, китайские размеры — та ещё лотерея, не повезло — рукава оказались слишком короткими.
Поскольку куртка стоила
Сказано — сделано!
На днях протестировал получившуюся жилетку с подогревом. К сожалению, результат функционирует ровно на свою цену. Не особо греет на улице — зоны подогрева слишком маленькие, зато бесполезно поджаривает спину и бока в машине, когда сидишь плотно прижав своим весом нагревательные элементы к телу.
Буду носить как обычную жилетку, хоть
Пишем на «Флиппере Зеро» по-русски
★
Вкратце: в русским текстом работать можно, но сложно, код лежит на «Гитхабе».
Не мог не обратить внимание, что несмотря на приличное количество русскоязычных авторов программ для «Флиппера Зеро» и российское происхождение устройства, в софте под него нигде не обнаружилось ни одной буквы
Стало интересно — а есть ли вообще в устройстве поддержка русского языка? Сел вечерком за исходники прошивки и оказалось, что однозначного ответа на заданный вопрос нет. Частичная поддержка есть и её можно заставить работать, но она работает как будто по недосмотру — никто её не собирался делать, так случайно вышло.
Сейчас расскажу, что я имею ввиду и постараюсь покороче, никто сейчас не любит длинные тексты.
Внутри «Флиппера» довольно много всякого АПИ для вывода текста, от незатейливого, выводящего строку в заданные координаты, до довольно навороченного, умеющего переносить и выравнивать текст. К сожалению, с русскими буквами оно работать не умеет.
Под капотом у этого АПИ — очень известная в своей нише библиотека U∞g2, у которой по историческим, видимо, причинам есть два набора функций для работы со строками. Одни принимают только однобайтовую кодировку ASCII, другие работают в Юникоде.
АПИ «Флиппера», к сожалению, использует функции, которые с Юникодом работать не умеют. К счастью,
Первый из них — canvas_set_custom_u8g2_font.
Чтобы
Вот как я это делаю:
#include <u8g2/u8g2_fonts.c>
// …
canvas_set_custom_u8g2_font(canvas, u8g2_font_haxrcorp4089_t_cyrillic);Файл u8g2/u8g2_fonts.c внутри себя содержит шрифты в особом формате, можно открыть его прямо в текстовом виде и посмотреть как всё устроено.
Шрифт мы выбрали, теперь надо
Плохая новость в том, что строки в коде мы обычно пишем в кодировке
Но 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 используется для кодирования
Написали с дочкой игру
После того как я обнаружил, что на «Флиппере Зеро» можно писать программы с поддержкой русского языка, никак не мог отделаться от желания написать
Раздумывал недолго, выбрал для реализацию игру «Виселица» (некоторые знают её под названием «Балда»), в которую
Правила там простые — один игрок загадывает слово и рисует чёрточки по количеству букв в нём. Второй пытается отгадать побуквенно. Если названная буква в слове есть, на бумаге рисуется позиция или позиции этих букв, если нет, то рисуется часть виселицы. Если виселица нарисована полностью, отгадывающий проиграл, если слово угадано раньше, — выиграл.
Пока программировал, подсела дочка, спросила чем я занимаюсь, я рассказал с примерами. Мы даже пару раз сыграли на бумаге, после чего вызвалась мне помочь нарисовать графику к игре.
Я подумал, что вполне смогу использовать то, что она нарисует в прототипе, но получилось вполне симпатично и я оставил её графику как есть.
Так что у нас с дочкой теперь есть первая совместная игра — я программировал и разрабатывал интерфейс, она нарисовала виселицу и иконку приложения, а так же выступила первым тестером.
Цифровая диета
Заметил за собой одну проблему — чрезмерное увлечение листанием лент как будто выжигает во мне всю творческую энергию и непропорционально расходует время. В моём случае такой эффект имеют «Пикабу» и короткие истории «Ютуба», больше я нигде так не залипаю.
В этом году несколько раз проверил на себе — стоит запретить себе времяпрепровождение в подобных местах и у меня как будто даже жизнь меняется. Появляется время для своих интересных проектов, а главное — идеи и желание их реализовывать.
Стоит, по всей видимости, задуматься об упорядочивании потребления информационной нямки и сесть