Pull to refresh
22
Владимир Столяров@xakep666

Бэкенд разработчик

8
Subscribers
Send message

Там, все-же, заявлениа поддержка трансляции экрана, но как эксперимент

А не тестировали https://github.com/alexballas/go2tv? Кажется, что он решает ту же проблему, но при этом написан на go и распространяется в виде 1 файла с опциональной зависимостью от ffmpeg.

Эксплуатирую его на BPI-R4 с 4Гб памяти, вполне успешно. Самые ресурсоемкие задачи - определение лиц на фото и транскодирование видео, можно отключить, если нет необходимости. Для одного пользователя вполне хватает, все это делается в фоне.

Если вам не нужен полноценный скриптовый язык, а нужно вычислить выражение, проверить правило, сгенерировать структуру, etc., то я бы посоветовал обратить внимание на https://github.com/google/cel-go. Интерпретатор написан на чистом go, неплохо кастомизируется. Крутим в проде больше полугода, полёт нормальный.

Поделюсь тогда и своими результатами по Midea, модель пульта RG10B(B)/BGEF. Из интересного: для выключения нужно отправить специальную комбинацию параметров, а не просто поменять определенный бит, как может показаться. Также для кодирования некоторых параметров используется кастомный код Грея. Зачем такие заморочки, не очень понятно.

С пультами от телевизоров всё довольно просто ещё. Куда интереснее имхо пульты от кондиционеров. Отличаются они тем, что имеют состояние и отпрвляют целиком его при нажатии. Соответственно, надо вычислить, как кодируется режим работы, температура, скорость вентилятора и прочее. Реверсил не так давно такой при помощи Flipper Zero и Excel, собрав в итоге под первый отдельное приложение. Забавное занятие вышло, однако.

Более того, эти самые арены в Go есть, но экспериментальные и под флагом https://go.dev/src/arena/arena.go

Я подобное предусматривал: запуск пропатченного бинарника происходит силами библиотеки, все аргументы пробрасываются без изменений, дополнительно делать ничего не требуется.

Чтобы не мучаться с перезаписью кода в памяти уже работающего приложения, я попробовал другой метод: сделать копию бинарника, в котором тело (даже не всё, хватило самого начала) "оригинальной" функции поменять на JMP в ту, на которую подменяем и запустить уже его с дополнительной переменной. Это делается существенно проще, однако теряется возможность вызвать оригинал. Даже библиотеку написал под это.

У task, в отличие от make, есть огромный плюс - он максимально кроссплатформенный засчет того, что, во-первых, тоже написан на go, а во-вторых - имеет внутри bash интерпретатор, засчет чего скрипты одинаково работают на всех платформах, включая винду.

Имхо пока что самое понятное и детальное объяснение проблемы установления соединений через NAT и способы ее решения описаны у Tailscale https://tailscale.com/blog/how-nat-traversal-works/.

Чтобы убрать пути, надо использовать флаг -trimpath

Попробовать заменить провайдерскую ONU можно модулями, которые упоминаются вот тут https://github.com/Anime4000/RTL960x.
Эти модули позволяют прописать все нужные идентификаторы в себя, чтобы от провайдерского терминала было никак не отличить.
Но понадобится либо роутер с sfp, либо "медиаконвертер" с sfp.

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

Порекомендую также посмотреть на https://github.com/sourcegraph/conc
субъективно, оказалось удобнее, чем errgroup и semaphore

Можно еще добавить, что фильтр Блума дает возможность свести объединение и пересечение множеств к побитовому "или" и побитовому "и" соответственно. Но при условии, что наборы хеш-функций и длины векторов одинаковы.

Вместо преобразования указателя к uintptr лучше использовать https://pkg.go.dev/unsafe#Add (и в описании к Ponter сказано, почему)
Получится примерно такое

dstAddr := unsafe.Pointer(&dstPaletted.Pix[0])
srcAddr := unsafe.Add(unsafe.Pointer(&srcRGBA.Pix[0])), 2) 
for y := 0; y < imageHeight; y++ {
	for x := 0; x < imageWidth; x++ {
		*(*uint8)(dstAddr) = *(*uint8)(srcAddr)
		dstAddr = unsafe.Add(dstAddr, 1)
		srcAddr = unsafe.Add(srcAddr, 4)
	}
}

А вообще, проблеме с удалением bounds check уже немало лет, https://github.com/golang/go/issues/14808

Вот тут https://github.com/tidwall/hashmap/ есть реализация на основе открытой адресации. Судя по бенчмаркам, оно иногда даже быстрее, чем стандартная мапа. Возможно, это связано с тем, что при последовательном расположении элементов кеш процессора работает эффективнее.

Information

Rating
5,282-nd
Location
Москва, Москва и Московская обл., Россия
Registered
Activity