Random Rust Dev
Відкрити в Telegram
Разработка на языке Rust. Пишу простыни со своими мыслями о Rust и проектах на нем.
Показати більше216
Підписники
-124 години
-27 днів
+230 день
Триває завантаження даних...
Схожі канали
Хмара тегів
Немає даних
Виникли проблеми? Будь ласка, оновіть сторінку або зверніться до нашого support-менеджера.
Вхідні та вихідні згадування
---
---
---
---
---
---
Залучення підписників
грудень '24
грудень '24
+3
в 0 каналах
листопад '24
+7
в 0 каналах
Get PRO
жовтень '24
+25
в 2 каналах
Get PRO
вересень '24
+21
в 0 каналах
Get PRO
серпень '240
в 0 каналах
Get PRO
липень '240
в 2 каналах
Get PRO
червень '24
+78
в 2 каналах
Get PRO
травень '240
в 0 каналах
Get PRO
квітень '24
+90
в 0 каналах
| Дата | Залучення підписників | Згадування | Канали | |
| 21 грудня | 0 | |||
| 20 грудня | 0 | |||
| 19 грудня | +1 | |||
| 18 грудня | +1 | |||
| 17 грудня | 0 | |||
| 16 грудня | 0 | |||
| 15 грудня | +1 | |||
| 14 грудня | 0 | |||
| 13 грудня | 0 | |||
| 12 грудня | 0 | |||
| 11 грудня | 0 | |||
| 10 грудня | 0 | |||
| 09 грудня | 0 | |||
| 08 грудня | 0 | |||
| 07 грудня | 0 | |||
| 06 грудня | 0 | |||
| 05 грудня | 0 | |||
| 04 грудня | 0 | |||
| 03 грудня | 0 | |||
| 02 грудня | 0 | |||
| 01 грудня | 0 |
Дописи каналу
Чего можно добиться изменением параметров в SnarlStyle и перегрузкой цвета фрейма хедера по типу ноды
| 2 | Для интересующихся возможностями кастомных пинов.
Реализация метода draw_input_pin и draw_output_pin - вызывается одинаковая функция в 20 строчек | 159 |
| 3 | Что-то я разошелся сегодня.
Добавил варианты расположения пинов.
Внутри - как было, пины внутри фрейма ноды.
На грани - центр пина на краю фрейма ноды
Снаружи - пины вне ноды. | 159 |
| 4 | Что-то я разошелся сегодня.
Добавил варианты расположения пинов.
Внутри - как было
На грани - центр прямо на краешке ноды
Снаружи - совсем не в ноде | 1 |
| 5 | Реализовал новый лайаут для нод.
Раньше ноды всегда выстраивались как на первой картинке.
Но был запрос на построение как на правой. Когда пины и тело широкие, нода может занимать целый экран.
Теперь в SnarlStyle есть node_layout, контролирующий разметку в ноде. И каждая нода может перегрузить этот параметр через метод SnarlViewer::node_layout. | 166 |
| 6 | Что делать, если хотя бы одна из размерностей окна стала 0?
В вулкане есть требование, что бы image и swapchain были больше 0 по всем осям.
А еще есть требование, что бы размер swapchain-а был между текущими min и max, которые можно получить у девайса.
Которые могут быть с нулями.
Как тогда создать swapchain? Или пересоздать при изменении размера.
mev предлагает пользователю API Surface, который прячет все ужасы вулканского WSI, включая семафоры, пересоздание swapchain-ов с использование механизма retire, SUBOPTIMAL и OUT_OF_DATE ситуации.
При запросе следующего фрейма mev::Surface может пересоздать swapchain на лету если тот устарел... или его вообще еще нет.
А так же удалит старые, когда можно будет - спасибо VK_EXT_swapchain_maintenance1 - без ожидания остановки всего девайса.
Итак, swapchain безнадежно устарел, пора пересоздать. А максимальная высота и/или ширина сейчас 0. Что делать?
Отдавать ошибку пользователю? Как он ее будет хэндлить? Не хотелось бы вообще думать об этом.
Может создать image размера 1х1 и притвориться, что это и есть картинка для этого surface? А почему бы и нет. Как пользователь узнает? Surface же в 0 пикселей. | 266 |
| 7 | Посмотрел запись стрима, на котором человек взял egui-snarl и попробовал сделать на нем UI для логических цепей.
Очень интересно наблюдать, как человек без предварительной подготовки просто берет и пробует использовать API, который я придумал.
Для меня то он очевиден, а как для других людей… для меня это всегда было загадкой. Письменный фидбэк не дает полной картины. Что ж, завеса тайны слегка приоткрыта.
Ссылка на запись стрима
https://www.youtube.com/watch?v=zigPWkPm00U | 259 |
| 8 | Абсолютно случайно опубликовал новый crate - "vtid", что значит Volatile Type ID.
"А что ж это за зверь такой?" - подумали вы, наверное.
А это очень простая и совершенно ненужная 99.9% программистам вещь - это расширенный TypeId, который точно-точно меняется, если крейт перекомпилировался.
Нужен он для горячих перезагрузок, а точнее для их ускорения.
Идея проста, если Vtid типа остался прежним, то и тип никак не мог поменяться, потому что тогда его крейт бы перекомпилировался и Vtid поменялся.
А раз тип не изменился, то можно взять да и переиспользовать его старые инстансы. В частности загруженные ассеты.
Конечно Vtid меняется все же чаще чем хотелось бы. Любое изменение в крейте меняет Vtid всех типов из него и зависимых крейтах, даже если меняется только код какой-нить функции.
Поэтому для уменьшения количества перезагружаемых ассетов я постараюсь типы с большими ассетами объявлять в отдельныйх крейтах-плагинах с минимумом плагинов-зависимостей.
Ссылка на сам крейт https://crates.io/crates/vtid | 268 |
| 9 | Пришлось пойти на крайние меры, что бы сжать эту траву.
Никакие предсказания не помогали с ней, хотя некоторые картинки и жались лучше.
Нет, мне пришлось, образно выражаясь, расщепить атом бит! | 315 |
| 10 | 1. В процессе обучения.
2. И доучилась.
Слева-направо
Картинка в bc1
Предсказание первого цвета из каждого блока.
Абсолютная ошибка предсказания. | 310 |
| 11 | Просили больше нейронок? Получайте!
На видео микронейронка учится предсказывать картинку по соседям.
Цвета всех блоков на 3й картинке предсказаны нейронкой на основе соседей слева и сверху.
А точнее на входе квадрат 4х4 без правого-нижнего, а на выходе собственно правый-нижний. | 277 |
| 12 | Я кстати понял, почему трава такая несжимаемая.
Она в жипеге весит столько же, сколько bc1, там энтропия чуть ли максимальная. | 242 |
| 13 | Безумная идея.
Сделать маленькую нейронку, которая будет пытаться предсказать следующий пиксель и после каждого пикселя чуть-чуть обучаться.
Если предсказания будут точны, то разница с фактическим значением будет мала. А если почти все кодируемые значения малы, то и повторяемость последовательностей будет больше.
В файл веса класть не надо. При декодировании она точно так же должна обучаться | 239 |
| 14 | LZ78 -> LZW
873KiB -> 799KiB | 245 |
| 15 | Заменил байт-ориентированный выход из кромпрессора на бит-ориентированный.
И сразу результат.
Пришлось попотеть чуть, за то теперь у меня есть std::io::{Read, Write} врапперы, чтоб писать и читать битики | 236 |
| 16 | Все же в сжимателе я напортачил.
И compression ratio оставляет желать лучшего на сложных картинках.
На простых, где много одного тона, там конечно да. | 282 |
| 17 | Реализовал компрессию блоков формата BC1 для экономии на IO.
BC1 size: 362952 - 354KiB
JKL size: 13151 - 12.8KiB
Если я нигде не накосячил, то очень даже неплохой такой результат. | 336 |
| 18 | Продолжаю работать над сжатием картинок.
Прочитал два папируса сегодня: по кодам Хаффмана и работы Лемпеля и Зива.
Буду использовать сжатие без потерь, что бы пожать блоки, выданные блочными сжимателями.
При чем таким образом, что бы разжать можно было эффективно на gpu | 315 |
| 19 | Попробовал интегрировать texpresso.
Из минусов:
1. Какие-то белые пиксели.
2. Очень долго сжимает - на видео видно пролаг при нажатии на чекбокс. | 316 |
| 20 | На стриме я реализовывал импортер картинок в базовый RGB, что в общем-то сильно неоптимально.
Поэтому время пришло для того что бы жать картинки.
Как известно, GPU нативно поддерживают блочные сжатые форматы.
Реализовал сжатие в BC1.
Очень простое.
GUI что бы видеть результаты.
Слева картинка из файла, справа она же пожатая и разжатая обратно. | 273 |
