Как стать автором
Обновить
20
0
Владимир Столяров @xakep666

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

Отправить сообщение

Более того, эти самые арены в 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/ есть реализация на основе открытой адресации. Судя по бенчмаркам, оно иногда даже быстрее, чем стандартная мапа. Возможно, это связано с тем, что при последовательном расположении элементов кеш процессора работает эффективнее.

Уже давно существуют смарт-часы со стрелками. Сам такие ношу (Garmin Vivomove Style), кто в первый раз видит, думает, что ничего необычного нет, но потом удивляются.

Go-разработчики договорились

Это, мягко говоря, не совсем так (https://github.com/golang-standards/project-layout/issues/117#issue-854742264).

Я сделал так: порты 80, 8080, 8888, 443 tcp и 443 udp для всех адресов, кроме ru, направил в впн. Можно ещё icmp добавить, чтобы корректно работал traceroute. Список ru подсетей берётся тут https://stat.ripe.net/data/country-resource-list/data.json?resource=RU и обновляется периодически по крону. Конкретная реализация - openwrt, wireguard, mwan3, ipset. Спокойно работает на обычном домашнем роутере.

tzdata можно не копировать, начиная вроде бы с 1.16 при

import _ "time/tzdata" 

или же добавке билд тега tzdata в бинарник будет встроена эта база целиком в сжатом виде. Документация обещает увеличение размера бинарника где-то на 450 КБ.

Сколько лет народ ждёт generics, но, к счастью, этот ужас ещё не добрался до golang. И мы будем продолжать ждать.

Осталось ждать недолго, в марте новый релиз с ними обещают.

Есть же вот такая библиотека https://github.com/Binject/universal, где, в том числе, реализована работа на M1 и винде.

Имея в наличии модель CECH-4208C (непрошиваемая superslim) когда-то с удивлением узнал, что и там можно запускать хоумбрю (HFW и PS3Xploit). В какой-то момент перекидывать файлы с помощью внешнего диска надоело, решил изучить возможности установки по сети, благо WebMAN и IrisMAN такое позволяли. Не без проблем и патчинга удалось собрать ps3netsrv. И тут мне стало интересно, как же там устроен обмен. В качестве транспорта там TCP, поверх которого сделан простенький бинарный протокол типа "запрос-ответ" с фиксированными размерами заголовков запроса и ответа. Но нашлась там и очень интересная деталь: сервер позвалял устанавливать дисковые игры в распакованном виде (эта функция в исходниках называется netiso). Сам сервер был написан так, что умел "эмулировать" iso-образ без его непосредственного сохранения в памяти или на диске. Попробовал написать собственную реализацию сервера на go для упрощения сборки и кроссплатформенности, вышло вот такое https://github.com/xakep666/ps3netsrv-go

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность