Да, от #shell у меня плавно отпочковался терминал для него #shitty, но #shitty готов, и теперь можно вернуться к родительскому проекту!
У проекта теперь новый дом, и новое название - #impulse!
https://github.com/impulse-desktop/shell - собственно шелл
https://github.com/impulse-desktop/suite - набор пользовательский программ, типа просмотрщика изображений и прочего, все поверх #imgui.
Собственно, про просмотрщик изображений далее и пойдет речь.
Год назад я бы взял image magick, тем самым, поддержал бы все форматы, и был бы доволен, как слон после трехведерной клизмы.
Но:
* У IM плохая
* #LLM позволяют славно заебаться, на пустом месте
Поэтому я сделал #изящно - собрал IM в #WebAssembly, и запускаю декодер изображений в песочнице.
В целом, это похоже на то, что делает firefox, со своим https://rlbox.dev/, но, как обычно, есть нюанс - мне удалось собрать такой IM, который не зависит от host системы, ни через emscripten API, ни через #WASI. То есть, в вашу FS этот артефакт не попадет ни при каких обстоятельствах!
Ровно одна экспортируемая функция -
decode(ptr, len) -> ptr, чистый WebAssembly! AFAIK так еще никто не делал, и это было не супер просто, несмотря на то, что мой #ix умеет в кросс в WebAssembly.Что?! Как?! А вот так!
Мне показалось, что этот артефакт может быть полезен широкому кругу людей, особенно тем, кто занимается обработкой изображений в облаках, поэтому я из этого сделал отдельный проект, со своим CI, и со своим релизным циклом - https://github.com/pg83/decode
Все просто - качаете оттуда decode.wasm, и встраиваете куда хотите, в любой #wasm runtime, так как, повторю, у артефакта 0 зависимостей от host системы.
На КДПВ - #perf конструкции, если встраивать через wasm2c.
В целом, замедление небольшое, учитывая bounds check на каждый memory access, не так уж и плохо. Ну и нет нужды в переписывании всего и вся на almost blazingly fast, probably memory safe.
