Собачий возраст
Сегодня были у мамы жены, повод печальный, но я не хочу об этом. У неё живёт лабрадор Челси, которой 16 лет. Я не раз уже слышал, что возраст собаки надо умножать на семь, чтобы получить эквивалентный человеческий возраст.
Мне всегда это казалось сомнительным, ведь очевидно, что хотя бы в начале и конце этой шкалы соответствия нет — половая зрелость у собак наступает в год или полтора, а шестнадцатилетний лабрадор не ведёт себя и не двигается так, как человек, которому за сто.
Погуглил и нашёл более точную форуму — надо взять натуральный логарифм от возраста собаки, умножить на 16 и прибавить 31. Таким образом, «человеческий» возраст Челси — 16 × ln(16) + 31 ≈ 75 лет. Это куда больше похоже на правду.
Сгорели две GaN-зарядки
Сгорели в момент включения с разницей всего в несколько дней. Вставлялись в две разные розетки, я их посмотрел потом тестером розеток — ничего необычного. Ничего не понимаю. Что это? Дефект партии (я их сразу две покупал)? Запланированное старение?
М. Г.
Рассматривали тут с приятелем книгу с дореволюционными шрифтами, заметили непривычное сокращение — «М. Г.». Долго думали что это такое, потом меня осенило, что это «милостивый государь» или «милостивая государыня».
Опять голова болит
Блин, какой день уже болит голова, лишая сил. Внутри всё рвётся от миллиона дел, которые хочется сделать, но сил никаких нет. Не то, чтобы я лежу пластом, рутину вполне удаётся делать,
Головная боль вообще мой бич — иногда голова так болит, что не сплю несколько дней. Такое было несколько раз в жизни. К счастью не в этот раз.
К сожалению, врачи не нашли у меня ничего им понятного, такого что можно было бы исправить и эти боли прекратились бы. Она так меня достаёт, что одна из первых заметок на этом сайте была о головной боли.
Как же я устал.
Конец ускоренной strlen на «Флиппере»
В итоге, эпопея с ускорением функции замера длины строки в кодировке
У меня с самого начала этой затеи были сомнения. Я понимал, что для того, чтобы решить
Тем не менее, я с удовольствием повозился инструкциями SIMD. До этого
Моя функция, кстати, претерпела некоторые изменения:
size_t furi_string_utf8_length(FuriString* str) {
size_t len = string_size(str->string);
const char * cstr = string_get_cstr(str->string);
const char* end = cstr + len;
if(len >= sizeof(uint8x4_t)) {
const char* vend = end - sizeof(uint8x4_t);
int8x4_t zero = 0x00000000;
int8x4_t one = 0x01010101;
int8x4_t threshold = -1077952577; // -65, -65, -65, -65
do {
int8x4_t vec = *(int8x4_t*)cstr;
__ssub8(threshold, vec);
uint8x4_t result = __sel(one, zero);
len -= __usada8(result, zero, 0);
cstr += sizeof(uint8x4_t);
} while(cstr <= vend);
}
while(cstr < end) {
signed char c = *cstr++;
len -= c < -64;
}
return len;
}Оказалось, что тип FuriString хранит в себе бинарную длину строки, поэтому я переделал код, чтобы он не пытался читать чужую память. В векторизованой части это было вероятно, но своих рассуждений и дискуссии по коммиту я сделал вывод, что в случае «Флиппера» это не имеет
Тем не менее, если использовать бинарную длину, код получается более аккуратным и немного упрощается, так что грех не воспользоваться. Интересно бы, кстати, измерить наивный алгоритм без векторной части, но с использованием бинарной длины, наверное займусь этим в ближайшее время.
В итоге, решая эту, возможно несуществующую, проблему, я опробовал на практике векторные инструкции расширений NEON и DSP SIMD, научился делать два параллельных запроса на вливание в «Гитхабе» и ещё раз вспомнил как компилировать и заливать свою прошивку во «Флиппер Зеро».
Обновление прошивки автомобиля
Казалось бы, пора привыкнуть — у меня дома даже выключатели имеют прошивку, на которую иногда прилетают обновления через интернет.
При этом ещё больше изумляет, что в машине появляются новые возможности, которых раньше не было. Хотя мне, как будто бы, по роду занятий положено воспринимать это вполне обыденно.
Опасаюсь, что подсяду на эти положительные эмоции, и без них, когда обновления кончатся, будет
«Телефон»
Я мало пользуюсь приложением «Телефон». Звоню только своим родителям и нескольким друзьям. В основном предпочитаю общаться через мессенджеры —
Туда же вынесены и СМС — за месяцы я иногда не пишу ни одной, правда частенько их получаю от разных сервисов, но в этом случае я их читаю из уведомлений, поэтому само приложение запускаю нечасто.
По моим наблюдениям, у большинства людей, с которыми я общаюсь ситуация та же — звонят они очень мало,
Если вы тоже редко звоните, оно там лишнее. Поместите туда
Спойлеры по длине
Как правило, я спокойно отношусь к спойлерам. Не раз были случаи, когда случайно при мне раскрывали твист сериала или фильма, которые я смотрел или только собирался смотреть. Меня это особо не трогало и ничего не меняло в ощущении от просмотра.
Но я знаю людей, которые очень чувствительны к любого вида спойлерам, некоторые — вплоть до эмоционального срыва. Люди, подсевшие на эмоции от сюжетных поворотов. Пишу это безо всякого осуждения, кстати.
Интересно как на них влияет самый главный спойлер — длина произведения. Надо будет спросить.
Я прямо сейчас отложил чтение книги «Идеальный хищник» супругов Стефани Стратди и Тома Паттерсона, чтобы написать этот текст. Это документальная книга о том как жена боролось за своего мужа, подхватившего во время путешествия по Египту супербактерию, устойчивую ко всем известным антибиотикам.
В начале книги мы читаем завязку, потом происходит кризис и вот, казалось бы, больной идёт к выздоровлению, видимо скоро финал. Но я только на середине книги, поэтому понимаю, что, судя по количеству оставшихся страниц, финалом и не пахнет.
В этой книге есть ещё и ненавистная многими любителями твистов «сценарная броня» — главный герой книги гарантированно не умрёт, иначе как бы он смог поучаствовать в написании книги.
Кстати, «сценарную броню» обожает моя дочка — если она начинает сопереживать
Книга против компьютера
У меня ноутбук и я частенько дрейфую по дому с ним — либо работаю, либо развлекаюсь. Так просто одно от другого не отличить. Для моих близких это создаёт проблему — совершенно непонятно можно меня отвлечь или нет.
В эти выходные попробовал
В итоге, я думаю, что в эти выходные мне удалось нащупать рецепт. Моя онлайновая активность слишком разнообразная, поэтому это не методика, а только направление в котором надо двигаться.
Кстати, спасибо Фросту, в голове начал созревать план развлекательного похода выходного дня — опробовать всякой походной дичи, купленной на Алиэкспрессе. К лету можно было бы осуществить.
Канал Марка Робера
Марк Робер — американский
Дочка, однажды посмотрев у меня через плечо один из роликов, попросила показать ей все остальные и теперь всё новенькое мы смотрим вместе.
У Марка есть лаборатория «Кранч Лабс», — это такой инженерный детский лагерь на стероидах. Лаборатория выпускает детские инженерные наборы для самостоятельной сборки. Их реклама звучит в каждом ролике Марка.
В один момент реклама подействовала, и дочка начала просить купить один из наборов. Я не стал сопротивляться — самому интересно как выглядят наборы вживую и насколько их будет интересно собирать. Выбрали на «Ебее» подешевле — из подержанного. Я решил новый не брать, вдруг собирать их не понравится.
Взяли «Охоту на уток». Двадцать дней ожидания и вчера, наконец, получили. Думаю в выходные попробуем собрать.
Управление «Алисой»
Хочу попробовать решить одну прикладную задачу, пока не буду описывать какую. Для этого надо научиться управлять яндексовской «Алисой» из локальной сети. В идеале — проговаривать произвольную фразу. Почитал интернет, посмотрел как это делается.
Официальный документации нет, но хорошие люди провели обратную разработку и задача выглядит как будто бы не очень сложно. Получаем токен, в сети через mDNS по имени _yandexio._tcp.local. ищем нужную колонку, находим, команды отдаём по протоколу WebSocket.
Так как я сейчас стараюсь больше времени проводить за книгой, чем за компьютером, всё, что успел — освоить модуль zeroconf для Гоу, чтобы по имени колонки получать её
Получившийся код выглядит так:
import "github.com/grandcat/zeroconf"
// …тут остальные импорты…
const Service = "_yandexio._tcp"
const Domain = "local."
func getAlisaAddr(instance string) (*zeroconf.ServiceEntry, error) {
resolver, err := zeroconf.NewResolver(nil)
if err != nil {
log.Fatalln("Failed to initialize resolver:", err)
}
entries := make(chan *zeroconf.ServiceEntry)
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
err = resolver.Lookup(ctx, instance, Service, Domain, entries)
if err != nil {
return nil, err
}
entry := <-entries
cancel()
<-ctx.Done()
if entry == nil {
return nil, fmt.Errorf(
"Failed to lookup for service instance '%s'",
instance
)
}
return entry, nil
}Теперь надо разобраться где взять токен и как выглядят команды.
«Охота на уток» Марка Робера
Дочка собрала конструктор Марка Робера, который мы недавно получили. Я был готов помочь
Очень здорово всё сделано — инструкция очень понятная, детали очень хорошо узнаются на картинках (даже в детских конструкторах так бывает не всегда), да и собирать было очень интересно, по словам дочки.
Теперь дилемма — дочка хочет ещё, но, блин, в данном случае ей больше понравилось собирать, чем играть в него. Получается
Думаю, может купить, раз дочке нравится, но после сборки разбирать и продавать как б/у?
Юникод во «Флиппере»: глубока ли кроличья нора
Юникод во «Флиппере» неисчерпаем, как атом.
Сначала мне стало просто интересно почему для «Флиппера» нет ни одного русскоязычного приложения, потом я выяснил что мешает это сделать и научился обходить эти ограничения, потом написал русскоязычную игру, после чего залез в прошивку и начал добавлять в неё поддержку Юникода, погружаясь всё глубже и глубже.
К моим коммитам отнеслись довольно благосклонно, но в один момент дело застопорилось — авторы прошивки решили обновить сторонний фреймворк для вывода на экран, что могло повлиять на мои изменения, поэтому работу над ними я отложил. Но уже тогда у меня возникла мысль, что надо бы добавить Юникод и в библиотеку работы со строками, которую использует «Флиппер Зеро».
Пока я ждал обновления, занял себя векторизацией функции подсчёта длины строки в кодировке
И вот сегодня я получил новый комментарий к моему коммиту от авторов прошивки — мне порекомендовали заняться тем, о чём я
Размер доработок всё ширится, а результат всё дальше. Интересно, насколько глубока кроличья нора?
Научная нотация
Недавно я узнал, что некоторые люди не воспринимают числа, записанные в так называемой «научной нотации» (она же — экспоненциальная запись). Ну то есть числа 1,9×10⁹ или 1,602176634E−19 им ни о чём не говорят.
Честно говоря, я совершенно не могу понять почему. Для меня это примерно так же странно, если бы человек умел читать заглавные буквы, но капитель для него оставалась бы загадкой.
Меня это ставит в тупик.
Личное пространство
Увидел недавно случайно сцену из фильма «Антон Иванович сердится»
Романтических отношений у них нет, они в этой сцене довольно натянуто разговаривают: торгуются
Известно, чем скученнее живут люди, тем меньше у них личное пространство. Сначала у меня родилось предположение, что
Поэтому у меня родилось другое объяснение: возможно дело в объективе камеры — видно, что угол небольшой, поэтому чтобы в крупном плане поместились два человека, им приходится играть почти нос в нос с друг другом.
Купил ещё зарядку GaN
Недавно жаловался, что у меня сгорели две из трёх GaN-зарядок «Сяоми», купленных в одно время. Недавно сгорела и третья. Точно так же — с громким хлопком и вышибанием автомата. Все три в разных розетках, так что, думаю, вину розеток можно исключить.
То ли партия такая, то ли мне сказочно не повезло. В интернете я
Все три зарядки иногда немного хлопали, когда я их вставлял в розетку. У меня есть ещё «Базеус» (Baseus) той же мощности, с ней такого эффекта нет. Так что я
Моя вера в качество продукции компании «Сяоми» сильно пошатнулась. Не то, чтобы я решил совсем ничего не покупать, но их зарядки точно брать не буду. Купил пока на пробу ещё одну «Базеуса», стоваттную, посмотрим как она будет работать.