«Электричка»
В последние лет пятнадцать слово «электричка», в значении «электропоезд» постепенно исчезало из лексикона людей в моём круге общения. Я сам на электричке в последний раз ездил
Пилю «Виселицу»
Не то, чтобы я не понимал, что сообщество владельцев «Флиппера» относительно небольшое, всё же это очень специфический инструмент, но всё же не ожидал, что написанная за выходные игрушка удостоится такого внимания.
Только выложил её на «Гитхаб», как мне написал автор одной из популярных альтернативных прошивок, прислал патч, исправляющий некую ошибку и попросил английскую версию, — хочет включить игру в свою прошивку.
Доброе слово и кошке приятно, поэтому вот уже несколько дней пилю поддержку других языков.
Для начала переделал сборку на другой инструментарий — ранее игра не собиралась через более распространённый uFBT, потому что мой код использовал
Для поддержки английского пришлось довольно много переделать, всё что осталось сейчас — вывести меню, наверное сегодня уже доделаю. Я замахнулся на конфигурируемую поддержку, по моей идее, можно будет очень просто добавить любой язык, для которого есть шрифт.
В итоге, файл описания выглядит как текстовый файл, где первой строкой написано название словаря, ниже стоит цифра, показывающая сколько букв будет выведено в строке, при рисовании клавиатуры, ещё ниже — зазор между буквами в угадываемом слове в пикселях, потом цифра, про которую я расскажу дальше, ниже — шестнадцатеричные коды букв в кодировке
Если открыть словарь для английского языка обычным текстовым редактором, то внутри будет текст, с русским такой номер не пройдёт. Объясню почему.
Когда я только начал программировать игру, начал я с упаковки русского словаря в программный код и генерации случайного слова. Оказалось, что быстро выбрать случайное слово
В словаре так и сделано. Поскольку внутри программы я храню различные состояния в виде массива, мне нужно знать минимальный получившийся код символа, чтобы вычитать его, преобразовывая код в смещение в массиве. Для русского языка минимальный код будет у буквы А — 0x10, как я показывал выше, то его и нужно записать в файл описания языка. Цифра 16 в нём — это и есть 0x10 в десятичной кодировке.
Надеюсь сегодня допишу всё что нужно и выложу новый вариант.
Тыквенный кальян
Прочитал тут хохму про тыквенный спас, который предлагается праздновать как альтернативу Хэллоуину. Название пришло
Народ уже вовсю облюбовал Хеллоуин, а как уж он называется — дело десятое. Тема тыквы вполне нам близка и хорошо продаётся — вчера, например, пил тыквенный латте в кофейне.
Можно развивать и дальше. Русский писатель Николай Николаевич Каразин в повести девятнадцатого века подсказывает нам идею скрестить тыкву и кальян. Впрочем, я не курю, возможно в кальянных в тыквенный спас вовсю это курят, а я просто не в курсе.
Анафема за кофе
Изучал на досуге по письменным источникам историю слов «кофе» и «кофей», ни к каким выводам не пришёл, но нашёл любопытный документ. Старообрядцам, оказывается,
В переводе на современный язык текст выглядит так:
Книга Иоанна Зонара, глава 16, лист 70. Ещё кто посмеет пить чай, тот отлучается от самого Бога и будет тоже предан анафеме, а ещё тот, кто посмеет пить кофе, в том будет коварство и лукавство, в сердце того не будет Бога и он будет предан анафеме десятикратно.
Кстати, тут, кажется, есть игра слов «кофъ» («кофе») и «ковъ» («коварство»), но возможно я
CFR[]
Прикольную штуку увидел на «Хабре» — минималистичный язык CFR[] для рисования картинок. Тамошнему народу
Синтаксис односимволный, C — циклическая смена цвета (доступно семь цветов), F — рисование со сдвигом по текущему направлению, R — смена направления на 45° по часовой стрелке и пара
Лучше всего таким способом рисовать
Состряпал небольшую программу, которой попереводил разные картинки в инструкции CFR[]. В ограничение до обидного мало что влезает, но небольшие надписи писать можно.
«Кибердеревня»
Девять лет назад я заказал кастомный свитер в компании «Свитеррариум». Свитер жив у меня до сих пор, надеваю его в походы или в холода, чтобы погулять с собакой. Не продырявился, не растянулся, но немного потерял внешний вид, что немудрено за такой срок.
С тех пор я время от времени думал заказать у этой компании
Со временем владелец компании отошёл от заказных свитеров к более массовой продукции, но из готовых изделий меня тоже
Пока сегодня у них канале не появилось объявление о распродаже свитеров с рисунком из сериала «Кибердеревня». Не то, чтобы я был большим фанатом этого сериала, но поглядываю. В основном
В общем, меня зацепило, после работы поехал примерять — ехал целый час, пробки, но очень уж хотелось приобрести. Сел, как влитой, будто на меня делался.
Про кости и скелеты
Когда я говорю, что иногда езжу покопать в составе
Находим, конечно, это как будто и есть основное занятие на выездах, по крайней мере на тех, куда меня приглашают. Костей не боюсь, для меня это вообще
Я, разумеется, видел как в фильмах люди вздрагивают и кричат при виде скелетов и костей, но в контексте это выглядит как испуг от неожиданного их появления.
А вы боитесь костей и скелетов? Это иррациональный страх или вы можете проследить
Капитан Крюк
Закончили на днях читать книжку про Питера Пена и дочка решила нарисовать в 3Д крюк по мотивам. Если кто не читал или не помнит, в книжке есть капитан пиратов, у которого крюк вместо одной руки. В детстве это интригует, как я понимаю.
Интересно как быстро,
Сжатие инструкций для CFR[]
Выложил свою программу для перевода растра в инструкции для интерпретатора CFR[]. Написана, к слову, на «Гоу».
Самая интересная часть там — про оптимизацию.
Я реализовал довольно очевидную идею — делаем две переменные, одна указывает на начало инструкций, вторая — на середину. Вырезаем подстроку между двумя этими индексами, ищем её сразу за правым индексом, если находим, заменяем на вырезанное, оборачивая в цикл и начинаем сканировать заново. Если не находим, сдвигаем сначала правый указатель к началу, повторяем поиск, потом левый к центру, повторяем поиск. Естественно по ходу надо отбрасывать куски, где не сбалансированы скобки, это совсем просто.
Кроме того, у нас есть восемь вариантов обхода картинки — по двум направлениям из каждого угла, что, если нет симметрии, даёт восемь разных наборов инструкций, которые сжимаются
При этом немного смещается координаты отрисовки картинки. Её можно было бы возвращать обратно, но зачем? Интерпретатор и так рисует в центре холста, так что сдвиг — это не принципиально, только размер кодирующей последовательности увеличится.
«Виселица» в каталоге программ
Нашу с дочкой игру для «Флиппера Зеро» «Виселица» включили сегодня в каталог программ для этого устройства. А ещё она есть в одной из альтернативных прошивок — от разработчика с ником RogueMaster!
Кстати, я думаю, что Ева является самым молодым соавтором игры для «Флиппера» в мире.
Сломал себе график
За школьные каникулы расслабился — дочку не надо было водить на школьный автобус, поэтому вставал на полчаса позже. Потом ещё полирнул длинными выходными и совсем сломал себе график. Когда каникулы кончились, вставать стало гораздо сложнее. Мне, сове, утро и так даётся непросто, а такие колебания совсем вышибают из колеи.
Утро третьего рабочего дня, а я чувствую себя так, как будто месяц работал круглые сутки без выходных. Видимо надо отказаться от идеи давать себе послабление в утреннем графике в школьные каникулы.
Тестирование на пользователях
В айти есть много шуток про тестирование на пользователях — когда недостаточно оттестированный или не тестируемый вовсе продукт передаётся в использование и ошибки правятся в реальном времени, по мере поступления их от пользователя.
Считается, что а) это плохо, б) это присуще исключительно айти.
Я не считаю, что это всегда плохо. Для домашних проектов это вообще, как правило, единственный путь — у меня много проектов, которые я делал в одиночку «на коленке» и выложил в общее пользование. Конечно там могут быть баги, я хоть и тестировал их, но не заморачивался прохождением всех сценариев.
Так что в пункте «а» есть много «но». А в прошлые выходные оказалось, что и пункт «б» не является абсолютной истиной.
Сфотографировал плакат, на котором рассказывается о нагрузочном тестировании зрительских места казанского цирка солдатами. Можно, конечно, возразить, что солдаты — не пользователи. Но, мне кажется, что это не совсем так.
Тот, кто профессионально занимается тестированием, от пользователя отличается одним фактором — ему платят за нахождение багов, это его работа, он от этого не страдает. Нагрузочное тестирование скамеек не является профессиональной деятельностью солдат, не думаю, что им за это заплатили и они пострадали бы, если бы «нашли баг» — если бы скамейки под ними провалились.
Доктор Чимс и Мистер Доге
Я, как заметно по моему блогу, частенько хожу в походы. В эти выходные был последний в этом году — впереди снег обещают, но перед этим все лето и осень я шарахался по всяким болотам. В последнее время — на ветру и холоде с товарищами
При этом, в тепле и комфорте дома я
Дело до того дошло, что я
Думаю, жёсткие условия
Очередное бытовое использование 3д-принтера
Дочка в слезах прибежала со двора, где гоняла собаку своей лазерной указкой — указка предательски развалилась, вывалились и потерялись маленькие пластиковые кнопочки. Указку жалко, но осенью в грязи кнопочки уже не найдёшь, разумеется.
Решил попробовать напечатать новые кнопки, благо форма там несложная. Я совсем в этом неопытен, но даже для меня это было просто — замерил линейкой, нарисовал модель, повторил её с разной высотой и поставил на печать в двух экземплярах.
Лучше всех подошли самые короткие. Вставил, заклеил всё суперклеем, теперь не развалится!
Для меня возможность вот так запросто напечатать деталь из пластика до сих пор выглядит как
Интересно, когда я привыкну?
«Кальцифер»
Никогда не понимал зачем люди дают имена бытовой обстановке. Несколько моих знакомых называют
А недавно сам дал имя измельчителю отходов. Теперь он у нас Кальцифер. Идея пришла, когда я кидал в него скорлупки от яиц — это мне напомнило демона Кальцифера
Свидетель хвойного экстракта
Люди, заставшие СССР в сознательном возрасте, нередко с большой теплотой вспоминают советский пломбир — говорят, он был
Я развал СССР встретил в пятнадцать лет, вполне сознательный возраст, но ничего особенного о советском пломбире сказать не могу. Сейчас продаётся совершенно разное по качеству мороженное, иногда со вкусом советского, иногда другим, иногда вкуснее, иногда нет.
Скучал же по совершенно другому продукту — хвойному экстракту. Это такой сложнорастворимый брусок какашечного цвета, дающий, тем не менее, ядрёный, устойчивый хвойный запах, который мне очень нравится.
Он ещё примерно пару десятилетий после распада СССР продавался в аптеках, потом внезапно навсегда исчез и я его очень долго не мог найти. Конечно я перебирал
И вот, свершилось! Я нашёл. Купил одну пачку на пробу и уже в пункте выдачи «Озона» по интенсивности запаха понял, — это оно. Если вы, как и я, балдели от того экстракта и не могли его найти, покупайте без сомнений, он ровно такой же, каким я его помню.
Коты и зеркало
Много раз натыкался на утверждение, что коты не узнают себя в зеркале. Пишущие это ссылаются на учёных, но я нигде никогда не читал описание метода, которым это выяснили. Можно было бы поискать самостоятельно, но мне не настолько интересно.
Честно говоря, сомневаюсь, что это так. В очередной раз сомнения меня одолели, когда
Там совершенно очевидно, что коты понимают, глядя на изображение в телефоне, что рядом с ними происходит
«Чёрная курица»
Никак не могу отделаться от мысли, что часть сюжета известной повести «Чёрная курица, или Подземные жители» 1829 года Антоний Погорельский мог подсмотреть у Видока.
В том и другом случае фигурирует чёрная курица, о которой нельзя рассказывать и некие блага, которые потеряешь, если расскажешь.
Думаю, «Чёрную курицу» многие помнят по книге, фильму или мультфильму, а Видока мало кто читал. Вот цитата из книги «Записки Видока» 1828 года:
Смотри не болтай, дочка; у отца есть черная курочка, которая несет ему денежки, но только ночью, и чтобы ее не рассердить, надо подходить к ней с таким же черным лицом, как ее перья. Но осторожно, если ты скажешь хоть слово, черная курица не придет больше.
В этом отрывке ничего волшебного — эту байку дочке рассказала жена одного из разбойников, состоящих в шайке поджаривателей, чтобы она не болтала откуда у их семьи берутся деньги. А чёрные лица там упоминаются потому что разбойники мазали себе лица сажей, чтобы не быть узнанными.
Интересно, искал ли
«Виселица»: правлю баги
Игрушка «Виселица» для «Флиппера Зеро», которую мы
Один из пользователей пожаловался, что слова с русской буквой «Р» отображаются иногда
Проблема оказалось в сочетании того как я кодирую символы русских слов и следующей строки кода:
furi_string_trim(line);Для экономии места и производительности словарь у меня хранится в кодировке
Вызов furi_string_trim мне нужен, чтобы срезать перевод строки, после её считывания. Только я не учёл, что срезаются там все пробельные символы, включая урезанную до одного байта букву «Р».
В общем, создал себе проблем на ровном месте. Надо было хранить буквы как есть и не выпендриваться. Впрочем, баг правится просто:
furi_string_trim(line, "\n");Печать вольной почты
Уникальная вещь попала в руки — печать главной конторы вольных почт
По размеру небольшая, — примерно пять на пять сантиметров,
Печать в плохом состоянии, и, чтобы прочитать текст, пришлось сильно заморочиться — подкрасить фон и буквы маркерами, плюс вывернуть цвета на фотографии. Поэтому она так
Прежде я никогда не слышал, чтобы наш участок Сибирского тракта называли
Я даже сомневался в правильности прочтения, но если поискать, такое наименование вполне себе встречается. Например оно есть в книге «Материалы по истории связи в России. XVIII — начало XX в.» 1966 года.
Но у читателя наверняка на языке вертится совсем другой вопрос — что такое «вольная почта»? Я его намеренно оставил на потом, так как тут придётся немного погрузиться в историю.
Каждый, кто читал русскую классику, мог заметить там необычный сейчас способ передвижения — «на переменных», «на перекладных» или «по почте».
Слово «почта» в те времена обозначало станции, располагающиеся на определённом расстоянии, между которыми ездили ямщики, доставляющие почтовые посылки и людей. Посылки или багаж перекладывали на станциях следующую повозку (отсюда, по всей видимости, «перекладные»), пока не будет достигнута точка назначения.
Это
Почта находилась в руках государства и, как любая монополия, работала из рук вон плохо — повозки и лошади были часто в плохом состоянии, а цена за перевозку очень высокой.
Вероятно это было одной из причин почему 22 марта 1770 года государство, в целях обустройства Нарвской дороги, учредило «вольные почты», то есть передало право извоза «вольным всякого звания надежным людям».
Когда термин вновь появился в 1831 году в Полном собрании законов Российской империи, там он стал означать передачу содержания почтовых станций, лошадей, перевозки почты и пассажиров в частые руки. Вероятно в это время произошло распространение «вольных почт» по всей России, в том числе и по Сибирскому тракту.
«Яндекс.Вебмастер» ругается
От сервиса «Яндекс.Вебмастер» пришло — у меня на сайте обнаружена некая фатальная ошибка. Я не стал вчитываться, пошёл разбираться.
Оказывается на первой странице моего сайта — «малополезный контент, обилие рекламы или спам». При этом, на всех остальных страницах, видимо, тишь да гладь, это несмотря на то, что этот самый контент «с рекламой и спамом» просто «сползает» дальше по мере появления новых публикаций.
Уведомление я получил давно, дождался момента, когда первая страница полностью обновится новыми заметками, и нажал на кнопку «я всё исправил». Посмотрим будет ли результат. Если нет, что ж, забью, ещё не хватало в своём личном дневнике подстраиваться под мнение
Геопозиция по вайфай-точкам
Ни для кого не секрет, что смартфоны и некоторые другие устройства, чтобы определить свою геопозицию внутри зданий, часто пользуются идентификаторами
Когда ваш смартфон видит рядом незнакомую такой базе точку, он сообщает её идентификатор и свои координаты «куда надо». Если достаточно много устройств обнаруживает эту точку
Что происходит, когда точка, до этого «светившаяся» несколько лет по некому адресу, в один момент уезжает с её хозяевами на другую квартиру? Когда координаты поменяются?
Ответ: я не знаю. В декабре прошлого года мы переехали и почти год все базы точек считают, что мы внезапно прыгаем на свой старый адрес, когда заходим домой. Очень неудобно и немного раздражает.
Например, когда дочка приезжает домой из школы, её часы сообщают мне, что она приехала домой, а ещё через несколько минут она чудесным образом, по мнению часов, оказывается в нескольких километрах от него.
«Ahorcado»
Загвоздка в том, что у меня в игре основной шрифт кириллический — я взял готовый шрифт из прошивки, а в этом шрифте нет «ñ» и других необходимых в испанском символов. Лучшее решение, которое мне пришло тогда в голову, — смотреть что за символ мы сейчас выводим и переключать шрифты, если в текущем нет нужного символа.
Посидел вечерок, всё неплохо заработало. Но когда рассказывал о своём решении братишке, он спросил меня почему я не попытался сделать свой шрифт, где есть все нужные мне символы. Такая мысль приходила мне в голову, но Си я знаю, а как создать свой шрифт для «Флиппера» — нет.
Но сказанное братом засело в голове и не давало покоя, тем более, что переключение шрифтов было очень похоже на крайне неизящный костыль. Пришлось разобраться с тем как собрать свой шрифт.
Оказалось, это совсем несложно — во фреймворке U∞g2 есть исходники тех же шрифтов, которые использует «Флиппер», и утилита bdfconv, которая умеет их пересобирать. А на специальной странице можно сгенерировать себе необходимую для сборки командную строку.
В ближайший свободный вечер хочу накидать код, который поможет собирать шрифт посимвольно — определит какие буквы используются у меня в программе и выдаст точные диапазоны. А то я пока помещаю символы целыми алфавитами, очень неэкономно.
Русская манга: «Чепуха» Голицына
В эти выходные ездили в Свияжск — поманили хорошая погода и цены на отели. Сейчас, видимо, низкий сезон, так что когда ещё интроверту вроде меня ехать в настолько туристическое место? Свияжск оказался очень крутым, обязательно приедем сюда ещё раз летом, чтобы распробовать его более вдумчиво.
В одном из музеев, которые посещали, дочка заметила на стене рисунок, который попросила сфотографировать — ей хотелось потом рассмотреть его подробнее, чтобы разобраться что на нём происходит.
Рисунок оказался частью небольшой рукописной книжицы «Чепуха», которую нарисовал в 1942 году князь Владимир Михайлович Голицын, работавший при советской власти
Книжица рассказывает о приключениях маленькой девочки и её друзей и была подарком дочке врача, которого Владимир Михайлович часто благодарил в письмах из заключения.
Меня рисунок тоже зацепил — я сразу увидел преувеличенно большие глаза, которые сейчас частенько используют в аниме и манге.
Насколько я знаю, в этих жанрах большие глаза символизируют молодость и открытый взгляд на мир, недаром в известнейшем аниме «Ходячий замок» (2004) глаза девочки, которая была превращена в старушку, изменились и стали гораздо меньше.
Вот интересно — что имел ввиду Голицын, рисуя девочкам большие глаза? Может быть ту же самую метафору? Было бы интересно, если да.
Впрочем иногда говорят, что японцы, рисуя большие глаза, подражают европейскому разрезу глаз, — якобы
Дополнено: в комментариях мне напомнили про раннюю диснеевскую анимацию, да, очень похоже. Но что ещё интереснее, как оказалось, большие глаза в аниме родом оттуда же — из Диснея.
Как убедиться, что коллеги тебя слушают
Надо позаимствовать приём для скучных, но важных совещаний:
Объяснюсь: когда в казармах
какой-нибудь рассказчик, желавший удостовериться в том, что его слушатели не уснули под его истории, выкрикивал слово «Крик!» — то общество отвечало ему единогласным: «Крак!», чтобы продемонстрировать свое внимание.
— «Записки Видока, начальника Парижской тайной полиции»,
Расширения GCC
Я с первого приложения использую атрибут __cleanup__, но там я ещё скромничал — он используется только один раз. А теперь осмелел и завёл себе макрос с __auto_type, о применении которого мечтал со времён случайного опыта программирования на Си++. Теперь и определения переменных идут стройными рядами, и задумываться о подходящих типах не приходится.
Братишка мне давно говорит, чтобы я не мучился со своим Си и писал на Си++, но ничего не могу с собой поделать: не люблю этот язык, просто
Large Language Brother
Мне тут попеняли, что я ничего не пишу про нейросети. Всё потому, что мой теоретический интерес перешёл в практическую плоскость. Это как
Так и с большими языковыми моделями и прочими генераторами контента. У меня в браузере всегда закреплены две вкладки — одна со списком бесплатно доступных языковых моделей, вторая —
Использую я их реже, чем смартфон, но тоже достаточно часто — иногда несколько раз
В «Виселице», которую я писал для «Флиппера Зеро» есть хороший пример — я попросил модель написать код для сворачивания чисел в диапазоны, потом я его немного видоизменил, но общий костяк получил почти без усилий.
Мечта, чтобы машина писала весь код за человека, как показывает практика, пока не достигнута,
Поддержка Юникода во «Флиппере Зеро»
Если помните,
Видно, что авторы не подумали о поддержке Юникода, поэтому он там работает
Ситуацию можно было бы немного улучшить простым патчем — надо всего лишь поменять в функции canvas_glyph_width тип входного параметра с char на uint16_t (эта функция возвращает ширину символа в пикселях) и она начнёт работать с кодировкой
Две недели назад я подумал — почему бы не попробовать предложить этот патч авторам прошивки. Если не примут, то может быть хоть в дискуссию вступят, всё польза. Скачал разработческую версию ядра, сделал правку и закинул патч.
Сегодня патч приняли без лишних слов. Вот это да, не ожидал! Справедливости ради, это небольшое изменение, которое не должно ничего сломать. Теперь хорошо бы подумать как сделать так, чтобы в остальном АПИ поддержка Юникода заработала. А там, кажется, малой кровью не обойдёшься.