Отправляет email-рассылки с помощью сервиса Sendsay

RSS-канал «Евгений Степанищев»

Доступ к архиву новостей RSS-канала возможен только после подписки.

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

   

Подписаться на другой RSS-канал, зная только его адрес или адрес сайта.

Код формы подписки на этот канал для вашего сайта:

Форма для любого другого канала

Последние новости

Управление «Алисой»
2024-03-21 21:19

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

Официальный документации нет, но хорошие люди провели обратную разработку и задача выглядит как будто бы не очень сложно. Получаем токен, в сети через 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
}

Теперь надо разобраться где взять токен и как выглядят команды.

Канал Марка Робера
2024-03-19 08:50

Набор для самостоятельного изготовления «Охоты на уток» Марка Робера

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

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

У Марка есть лаборатория «Кранч Лабс», — это такой инженерный детский лагерь на стероидах. Лаборатория выпускает детские инженерные наборы для самостоятельной сборки. Их реклама звучит в каждом ролике Марка.

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

Взяли «Охоту на уток». Двадцать дней ожидания и вчера, наконец, получили. Думаю в выходные попробуем собрать.

Книга против компьютера
2024-03-18 08:53

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

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

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

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

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

Свил себе вчера у дочки в комнате гнездо и читал в нём книжки

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

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

Кстати, спасибо Фросту, в голове начал созревать план развлекательного похода выходного дня — опробовать всякой походной дичи, купленной на Алиэкспрессе. К лету можно было бы осуществить.

Спойлеры по длине
2024-03-16 10:04

Как правило, я спокойно отношусь к спойлерам. Не раз были случаи, когда случайно при мне раскрывали твист сериала или фильма, которые я смотрел или только собирался смотреть. Меня это особо не трогало и ничего не меняло в ощущении от просмотра.

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

Интересно как на них влияет самый главный спойлер — длина произведения. Надо будет спросить.

Я прямо сейчас отложил чтение книги «Идеальный хищник» супругов Стефани Стратди и Тома Паттерсона, чтобы написать этот текст. Это документальная книга о том как жена боролось за своего мужа, подхватившего во время путешествия по Египту супербактерию, устойчивую ко всем известным антибиотикам.

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

В этой книге есть ещё и ненавистная многими любителями твистов «сценарная броня» — главный герой книги гарантированно не умрёт, иначе как бы он смог поучаствовать в написании книги.

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

«Телефон»
2024-03-14 08:59

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

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

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

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

Экран моего смартфона — приложение «Телефон» на первом экране, но не в строке самых частых приложений

Обновление прошивки автомобиля
2024-03-12 08:49

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

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

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

Бортовой компьютер сообщает, что доступно обновление

Конец ускоренной strlen на «Флиппере»
2024-03-11 09:00

В итоге, эпопея с ускорением функции замера длины строки в кодировке UTF-8 на «Флиппере Зеро» подошла к концу — коммит не взяли.

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

Тем не менее, я с удовольствием повозился инструкциями 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, научился делать два параллельных запроса на вливание в «Гитхабе» и ещё раз вспомнил как компилировать и заливать свою прошивку во «Флиппер Зеро».

Опять голова болит
2024-03-09 18:19

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

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

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

Как же я устал.

«Жгонский язык» А. В. Громова
2024-02-24 10:09

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

Я ему попытался помочь и в некоторых позициях даже преуспел. Особенно хочу выделить книжку Александра Вячеславовича Громова «Жгонский язык», которую каким-то чудом удалось отыскать в одном из антикварных онлайн-магазинов и купить за 700 рублей.

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

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

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

Разворот книги «Жгонский язык» А. В. Громова

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

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

Если нет, подарю книжку своему другу, уберу соблазн с глаз долой.

Надо бы добавить мой strlen во «Флиппер»
2024-02-22 08:47

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

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

Будем считать, что с этим вопросом я закончил, хочу теперь попробовать добавить этот код в прошивку «Флиппера». Остались сделать два шага.

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

Второй шаг для меня сложнее. У меня уже есть выписанная прошивка «Флиппера», в которой торчит непринятый коммит. Я никогда раньше не создавал на «Гитхабе» два разных запроса в рамках одного чужого проекта, не знаю как это делается. Если кто-то умеет, расскажите в комментариях.

Шутка, которая не работает
2024-02-21 07:16

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

Проблема тут в том, что вызов os.remove умеет удалять только файл, тогда как System32 — папка, знакомая многим пользователям Виндоуз. Я не уверен точно, но думаю, что при её удалении система будет сопротивляться. Она, вроде, как-то защищена от такого.

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

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

В Линуксе или МакОСи надо в любом месте, где будет запускаться эта программа, создать папку C:, в ней — папку Windows, а в ней — файл System32, который и удалится, если выпадет искомое число на рандомайзере.

Киргизский самовар
2024-02-20 08:49

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

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

Выглядит оно довольно простенько, но меня сильно зацепил там один нюанс. Дело в том, что на первой линии там стоят огромные дровяные самовары, которые я рассматривал бы, наверное, часами, дай мне волю.

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

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

Дореволюционный самовар на дороге на Иссык-Куль, таких там несколько десятков