Смертные машины

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

Заводная

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

Шантарам

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

Remmina: unable to connect

Внезапно Remmina перестала подключаться к терминальному серверу по RDP. Сообщение об ошибке было не очень-то внятным:

[16:05:37:017] [3681:4047] [INFO][com.freerdp.client.common.cmdline] - loading channelEx cliprdr
[16:05:37:017] [3681:4047] [INFO][com.freerdp.client.common.cmdline] - loading channelEx drdynvc
[16:05:38:527] [3681:4047] [ERROR][com.winpr.timezone] - Unable to get current timezone rule
[16:05:38:539] [3681:4047] [INFO][com.freerdp.core] - ERRINFO_LICENSE_HWID_DOESNT_MATCH_LICENSE (0x00000104):The Client Access License ([MS-RDPELE] section 1.1) stored by the client has been modified.
[16:05:38:539] [3681:4047] [ERROR][com.freerdp.core.transport] - transport_check_fds: transport->ReceiveCallback() - -1
 libfreerdp returned code is 00010104

Но при внимательном изучении становится понятно, что дело где-то в libfreerdp, а точнее — в изменении сохраненной лицензии. Решил проблему топорно:

mv .config/freerdp/ .config/freerdp-old

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

STM32: OpenOCD semihosting

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

  • В Makefile меняем параметры линкера: вместо -specs=nano.specs пишем -specs=rdimon.specs, вместо -lnosys пишем -lrdimon. Мне также пришлось добавить -Wl,—no-wchar-size-warning, т. к. размерность wchar где-то не совпала.
  • В коде до main объявляем функцию extern void initialise_monitor_handles(void) и вызываем её в начале main. Важный момент — при отсутствии принимающей стороны на хосте этот вызов приведёт к HardFault, т. е. система сможет работать только под отладчиком.
  • Запускаем OpenOCD с командой arm semihosting enable и в его выводе увидим сообщения от printf. Ещё один важный момент — вывод будет в отладочных сообщениях, по telnet его не видно.
  • Для младших контроллеров может стать проблемой увеличение размера прошивки. В STM32F030 пришлось уменьшить размер Min_Heap_Size в LD-скрипте.

Видоизменённый углерод

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

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

Хорошие книги

https://avegera.github.io/epic-thread/rodoss/books.html

Интересная подборка книг. В первой десятке присутствуют как классические «Автостопом по Галактике» и «1984», так и «Ложная слепота» и «Задача трёх тел», которые я с огромным удовольствием прослушал недавно. Предвкушаю много интересного.

Как прошить Nordic NRF52 с помощью ST-Link и OpenOCD

Во-первых, понадобится собрать последнюю версию openocd из исходников:

git clone https://github.com/ntfreak/openocd.git
cd openocd
./boorstrap
./configure
make

По умолчанию configure включит поддержку некоторых программаторов, в том числе st-link. Если этого не произошло, значит не хватает каких-то зависимостей.

Далее, пишем скрипт:

#!/bin/sh
OPENOCD=/path/to/openocd
SOFTDEVICE=/path/to/nRF5_SDK_14.2.0_17b948a/components/softdevice/s132/hex/s132_nrf52_5.0.0_softdevice.hex

FW=$1
[ -z "$FW" ] && (echo "No fw given!" ; exit 1)

${OPENOCD}/src/openocd \
    -s ${OPENOCD}/tcl \
    -f interface/stlink.cfg \
    -f target/nrf52.cfg \
    -c init \
    -c "reset init" \
    -c halt \
    -c "nrf5 mass_erase" \
    -c "flash write_image ${SOFTDEVICE}" \
    -c "flash write_image ${FW}" \
    -c reset \
    -c exit

Цель для Makefile для Nordic SDK может выглядеть так:

OPENOCD := /path/to/openocd
SOFTDEVICE := /path/to/nRF5_SDK_14.2.0_17b948a/components/softdevice/s132/hex/s132_nrf52_5.0.0_softdevice.hex

flashst: $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hex
    @echo Flashing: $<
    $(OPENOCD)/src/openocd -s $(OPENOCD)/tcl -f interface/stlink.cfg -f target/nrf52.cfg \
            -c init \
            -c "reset init" \
            -c halt \
            -c "nrf5 mass_erase" \
            -c "flash write_image $(SOFTDEVICE)" \
            -c "flash write_image $<" \
            -c reset \
            -c exit

STM8 StdPeriph_Lib: UART1_ITConfig()

Для общего развития ковыряю STM8 + SDCC + StdPeriph_Lib. Дошёл до уарта и обнаружил, что контроллер виснет на инициализации прерываний. Проблема где-то в uart.c:UART1_ITConfig(). Если вместо вызова функции сделать запись в регистр, то инициализация проходит и контроллер начинает работать. Выглядит функция не очень. Особенно меня впечатлила вот такая строка:

itpos = (uint8_t)((uint8_t)1 << (uint8_t)((uint8_t)UART1_IT & (uint8_t)0x0F));

Дело в том, что библиотека универсальная, а контроллеры могут сильно отличаться. Так что функция настройки прерываний сначала выясняет в каком регистре и с каким смещением находится нужный бит. Посчитать в уме что делает этот код я не смог и просто засунул его в сишник на компе, скомпилировал и запустил. Результат - 32, т.е. 5-й бит (RXNE), что сходится с даташитом. Смещение регистра вычисляется проще:

uartreg = (uint8_t)((uint16_t)UART1_IT >> 0x08);

UART1_IT в данном случае равен 0x255, т.е. в итоге мы должны получить 0x02, что тоже верно, флаг лежит в регистре UART1_CR2. Однако что-то всё равно идет не так. В итоге вместо вызова функции написал:

//UART1_ITConfig(UART1_IT_RXNE, ENABLE);
UART1->CR2 |= (uint8_t)UART1_FLAG_RXNE;

Так работает.

+++ UPD
На форуме ST пишут, что проблема с ассертом.

Муки выбора MP3 плеера

Уже много лет не могу найти mp3-плеер, который бы меня устроил. Долгое время моим идеалом были iRiver’ы, последним хорошим плеером — Cowon iAudio 7. С тех пор хороших плееров мне не попадалось. Иногда я делаю попытки купить что-то подходящее, но каждый раз разочаровываюсь. В итоге решил составить список требований и опробованных плееров, чтобы не забыть.

Мой идеальный плеер:

  1. Запоминает место остановки и при включении продолжает с него;
  2. Перематывает треки быстро, 5-10 секунд за секунду. В идеале скорость настраивается;
  3. При перемотке назад из первых секунд файла перескакивает в конец предыдущего файла;
  4. Сортирует треки по алфавиту, а не по порядку попадания в FAT;
  5. Позволяет регулировать громкость сразу, без хождений по меню;
  6. Имеет большой экран на котором видно приличный кусок имени файла;
  7. После включения начинает играть музыку.

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

Digma S3

  1. Фатальный недостаток — плеер всегда включается на первом файле. Сразу в помойку;
  2. Скорость перемотки приемлемая;
  3. Перемотку назад не проверял;
  4. Сотрировка по алфавиту возможна через отдельный пункт меню;
  5. Громкость регулируется сразу;
  6. Большой экран занят фальшивым спектром, на имя файла остается 10, если не 7, символов;
  7. После включения попадаешь в главное меню. Явно воспроизведение музыки не было приоритетом.

Итог: 4 из 7, но всё множится на 0 первым пунктом.

BENJIE C-ONE

  1. Место остановки запоминает, но иногда сбивается. Почему — не понял;
  2. Скорость перемотки терпимая;
  3. При перемотке назад попадает в начало предыдущего файла. Т.е. в конец длинного файла можно попасть только перемотав его от начала до конца;
  4. Файлы сортируются только по фату, даже при выборе альбома/исполнителя;
  5. Громкость регулируется через меню. Если держал кнопку недостаточно долго, то попадаешь в главное меню и долго из него выходишь;
  6. Большой экран занят фальшивым спектром, но для имени файла остается много места;
  7. Включается плеер на паузе, нужно нажать кнопку воспроизведения.

Итог: 3.5 из 7. Тем не менее с этим плеером я хожу каждый день, потому что Cowon слушаю перед сном. Разделение именно такое из-за того, что у Cowon бесшумное сенсорное управление, а у Benjie очень громкие металлические кнопки, которые будят жену.

xDuoo X2

  1. Вроде бы запоминает место остановки;
  2. Скорость перемотки никакая, что сразу выкидывает этот плеер из кандидатов в хорошие;
  3. Поведение при перемотке назад не проверял;
  4. Порядок сортировки не проверял;
  5. Громкость, вроде, регулируется сразу;
  6. Экран небольшой, под имя файла отдана строка;
  7. Поведение после включения не помню.

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

Космическая Atmega

http://www.microchip.com/wwwproducts/en/ATMEGAS64M1

Microchip’s ATmegaS64M1 AVR® microcontroller (MCU) brings the automotive-leading AVR core with CAN capabilities to the aerospace industry. The ATmegaS64M1 MCU is designed for enhanced radiation, extended temperature and increased reliability in critical aerospace applications.

Ждем спутников на ардуине 🙂

Питер Уоттс — Ложная слепота, Эхопраксия

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

Игра про скрепки

Эта простая с виду игра отняла у меня сутки! Помесь кликера с экономической стратегией. Начинаешь с ручного производства скрепок и внезапно оказываешься повелителем мировой экономики. Рекомендую!

http://www.decisionproblem.com/paperclips/index2.html

CH376 — file manage control chip

Наткнулся на интересную платку и решил открыть рубрику интересных компонентов. Сегодня у нас аппаратная реализация FAT для работы с флешками и SD-картами.

Внешний вид платы:

Структурная схема:

Поддерживаются 3 интерфейса для взаимодействия с микрокнотроллером: параллельная шина, SPI и UART. Подключить можно USB-накопитель или карту SD/MMC. Выпускается в двух корпусах, отличающихся наличием/отсутствием параллельной шины.

Даташит

Модуль на Али

Двуполярное питание от USB

Нашёл интересную схему получения двуполярного питания с помощью step-up преобразователя.

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

Если хотите получать кэшбэк за покупки в онлайн-магазинах, а заодно поблагодарить меня — зарегистрируйтесь по моей реферальной ссылке на letyshops.ru

Дешевый LCD экран 128×64

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

// MOSI – Arduino pin 11
// SCLK – Arduino pin 13
// A0 – Arduino pin 9
// RST – Arduino pin 8
// CS – Arduino pin 10
// LED-/+ to GND and 3.3V with 15 Ohm resistor
#include "U8glib.h"
U8GLIB_MINI12864 u8g(10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RESET = 8
void draw(void) {
 u8g.setFont(u8g_font_unifont);
 u8g.drawStr( 0, 22, "Hello World!");
}
void setup(void) {
 u8g.setContrast(190);
}
void loop(void) {
 u8g.firstPage(); 
 do {
 draw();
 } while( u8g.nextPage() );
 delay(50);
}

А вот результат:

Плата для удобной распайки разных шлейфов на алиэкспрессе.

Если хотите получать кэшбэк за покупки в онлайн-магазинах, а заодно поблагодарить меня — зарегистрируйтесь по моей реферальной ссылке на letyshops.ru

NetworkManager: отбираем контроль над интерфесами

Чтобы заставить NetworkManager оставить в покое ваш любимый интерфейс, нужно в файле /etc/NetworkManager/NetworkManager.conf добавить раздел [keyfile] со строкой unmanaged-devices, в которой перечислить мак-адреса освобожденный интерфейсов. Необходимо удостовериться, что плагин keyfile включен в список.

[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasq

[ifupdown]
managed=false

[keyfile]
unmanaged-devices=mac:c4:6e:1f:04:54:cc;mac:60:e3:27:02:55:34;mac:fc:75:16:85:93:94