Random Rust Dev
392 subscribers
99 photos
44 videos
1 file
33 links
Разработка на языке Rust.
Пишу простыни со своими мыслями о Rust и проектах на нем.
Download Telegram
Абсолютно точное значение длины чего-то в метрах это рациональное или иррациональное число?
Тестируем как вам зайдет матъюмор
😁14🤔5🔥2👍1🥱1
Сжимаю картинку.

Было 101 мегабит.
LZP жмёт её до 78 мегабит
LZ78 жмёт её до 57 мегабит

Обратимо фильтруем
LZP жмёт до 63 мегабит
LZ78 жмёт до 24 мегабит!!!

Как назло LZ78 разжимать на GPU намного менее удобно.
Думаем дальше
🔥3👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Столько разных боевых искусств. Я даже названий некоторых не знаю.

Самурай прям анимешный получился.

Но больше всего вариант Шаолинь понравился.
🥴83😁3
Искал адрес больницы на яблокартах.

Поиск: Hospital
Яблокарты:
😁11
Ну вот.
Теперь я трижды отец.
22👏21🤯5🍾3😱1😎1
Я и 3д принтер
🤝19😁4👍2😢1
Я придумал как еще чуть-чуть variance убавить у картинки.

Идея в том что бы просто взять и вычесть нафиг канал G из R и B.
Особенно хороший эффект, когда там уже остаток от прошлого фильтра.
👍6
А вот настоящая текстура.
Тут эффект от нового фильтра даже больше, чем от Paeth
👍4
Одна проблема, LZ88 не так уж хорошо работает на GPU
В вашей игре физика должна позволять делать так
This media is not supported in your browser
VIEW IN TELEGRAM
😁13🙊2😱1
Плохие советы для краболюдов.

Часто бывает так, что в функции, которая принимает self нужно вызвать функцию, которая принимает &mut self.
fn final(self) {
self.mutating_foo();
}


Есть очевидный способ это сделать - объявить аргумент как мутируемым.
Для вызывающего кода это ни на что не влияет.
fn final(mut self) {
self.mutating_foo();
}


Или (менее популярно) перебиндить в теле функции
fn final(self) {
let mut me = self;
me.mutating_foo();
}


Но есть способ для того что бы инкрементить WTF_COUNT у читателя.

fn final(self) {
{ self }.mutating_foo(); 💀
}
😁175
Почему на самом деле мы пишем игры на Расте
😁13💯6🔥1
Пора бы уже закончить жать картинки, но я всё никак не могу :)

Настрогал еще вариантов.
1. Реализовал rANS алгоритм
2. Поменял LZ77 и LZ78 на выдачу токенов.
3. Реализовал компрессию этих токенов через rANS.

Ну и в итоге как-то грустно, потому что от шага LZ* толку нету даже там, где, казалось бы, больше всего его должно было быть.
В итоге rANS сам по себе переплюнул LZ77 и LZ77+rANS на отфильтрованной картинке с кучей заливки.
Почему? А потому что энтропии очень мало. И не смотря на то что в токенах LZ средняя длина "повтора" около 95, rANS умудряется быть более эффективным.
Лучший результат буквально меньше, чем PNGшка
👍1
А вот уже настоящая текстура.
Здесь токены LZ77 имеют среднюю длину "повтора" в 1.77 в лучшем случае. Что приводит к результату даже большему, чем у несжатых данных.

А вот rANS опять сжал картинку лучше чем PNG.
🔥1