LINUX.ORG.RU

Мой процесс велосипедостроения

 ,


0

2

Решил поделиться тем, как я изобретаю свой ляс изучаю устройство различных форматов изображений и алгоритмов сжатия в процессе ожидания заказанных мою плат.

Конкретно на данном скрине я костылю изучаю png-zlib-deflate. Получается довольно неплохо. По крайней мере, я наконец-таки понял, как работает алгоритм Хаффмана. До этого было представление в лишь общих чертах.

Для вывода декодированного изображения традиционно (для меня, разумеется) использую связку ppm+Nomacs. Формат изображений ppm настолько прост, что мне гораздо проще в очередной раз построить очередной ляс написать его реализацию, чем реализовать вывод картинки в окне в каком-либо тулките. Nomacs - отличный просмотровщик картинок. Для моих целей подходит ещё и тем, что он отслеживает изменения файла и при перезаписи автоматически обновляет картинку на экране. Таким образом, на скрине виден декодированный моим лясом кодом png из одной статьи с хабра.

Код пишу на сишке иначе сишные дырени закончатся и местные тролли сдохнут с голоду в Geany. Собираю код обычным мейком в urxvt. Не использую «продвинутые» IDE просто потому что лень в них разбираться.

Обычно слева расположено окно программы с документацией. Как правило это Qpdfview с даташитом на какую-нибудь микруху, но в данном случае это Firefox с RFC1951 на алгоритм Deflate.

asmCalc - самопальный калькулятор, который я когда-то навелосипедил написал в контексте изучения Tcl/Tk. Потом я немного увлёкся и добавил там ещё ассемблерных вставок для доступа к cpuflags. Изначально хотел сделать его как обычный калькулятор, но чтоб он мог одновременно отображать значения в двоичном, десятичном и шестнадцатеричном представлении. В процессе написания немного (даже слишком немного xD) увлёкся ассемблером и в итоге все операции сделал ассемблерными вставками. Хотя больше я использую этот калькулятор для «визуализации» данных, когда нужно видеть, как выглядят биты у того или иного числа.

Скрин выкладываю, разумеется, для набития скора, поэтому жду ваших клоунов, дизлайков и фейспалмов, а также традиционных заявлений про ШГ. А писать свою реализацию того, для чего есть уже готовые библиотеки - так вообще уууу… А если серьёзно, то хочется просто разбавить галерею скринами рабочего процесса, т.к. скринов «просто рабочего стола», я уверен, многие из вас повидали достаточно и, возможно, будут рады, увидив что-то другое.

★★★

Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от Kolins

То, что в него загрузишь. R0, R1 и R2 - это регистры. В них можно вводить произвольные значения, а потом выполнять различные операции - вычитание/сложение, умножение/деление, логические И/ИЛИ/НЕ и сдвиговые операции. Мне в нём удобней считать байтики, чем в обычных калькуляторах в режиме «программист».

u5er ★★★
() автор топика
Последнее исправление: u5er (всего исправлений: 1)

А писать свою реализацию того, для чего есть уже готовые библиотеки - так вообще уууу…

А ты свои реализации в опенсорс выложил? Если да – то не уууу, а нормально :)))

hobbit ★★★★★
()

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

$ forth
: bin 2 base ! ;  ok
: dec 10 base ! ;  ok
: thi 13 base ! ;  ok

\ Число 123 в двоичной системе это 1111011
\ в десятичной это 123
\ в тринадцетеричной это 96. 
123 dup bin . dup dec . thi . 1111011 123 96  ok

\ Число 96 записанное в тринадцетеричной системе счисления
\ это 1111011 в двоичной
96 bin . 1111011  ok
Ограничений нету, можно и с двадцатеричной системой работать:
$ forth
: twe 20 base ! ;  ok

\ Число 123456 в двадцатеричной системе это F8CG
123456 twe . F8CG  ok

Ну и понятное дело доступны все функции которые есть в ассемблере, idiv, rol, shr, поэтому можно смотреть как они применяются. У меня включен автовывод стека после каждой операции, поэтому мне печатать не нужно как я делал в примерах.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

asmCalc ещё полезен для визуализации. В нём видно порядок байт. Я специально сделал так, чтоб он выводил байты в том порядке, в котором они лежат в памяти. На скрине это не видно, но вот ещё пример https://0x0.st/KblO.png Ну и писался он в контексте изучения тикля на замену предыдущей версии, которая была на гтк-3. Гтк, кстати, я совсем не оценил.

Инструкции на асме я прикрутил скорее по фану. Просто в то время читал про cpuflags. Чуть копнул поглубже, глаза загорелись и вот результат xD

u5er ★★★
() автор топика
Ответ на: комментарий от densss

Потому что у них разбор форматов дальше заголовков не идёт xD Но картинку взял как пример, потому что она простая и закодирована так, что её легко было раскодировать - лишних чанков нет, блок IDAT идёт целиком и т.д.

u5er ★★★
() автор топика

Тебе для изучения форматов вот такая штука будет интересна: https://github.com/kaitai-io

Где-то там ещё репозиторий был с описаниями форматов разных

aol ★★★★★
()

Конкретно на данном скрине я костылю изучаю png-zlib-deflate. Получается довольно неплохо. По крайней мере, я наконец-таки понял, как работает алгоритм Хаффмана. До этого было представление в лишь общих чертах.

Rust обогнал Сишечку по скорости распаковки (комментарий):

Я когда-то написал о существовании https://www.hanshq.net/zip.html.
Марк Адлер добавил это великолепие в «Related External Links» на сайте https://zlib.net.

Ну и https://www.hanshq.net/zip2.html не помешает.

dataman ★★★★★
()
Ответ на: комментарий от nuxster

Так думай, я ж не возражаю. Я-то тут при чём?

u5er ★★★
() автор топика

Почему gif, а не какой-нибудь JPEG XL? И ZST вместо deflate.

Почему Firefox а не ladybird? Вижу кнопку с ним.

Lrrr ★★★★★
()
Последнее исправление: Lrrr (всего исправлений: 1)
Ответ на: комментарий от Lrrr

JPEG

JPEG шакалит. Не люблю его. Много раз видел зашакаленные вусмерть картинки, где отдельные участки картинки превращались в сплошное мыло. Особенно фатально, если там ещё содержится и текст. Может быть, позже им займусь, когда решу сделать второй подход к модифицированному дискретному косинусному преобразованию. В своё время я пытался написать декодер ogg vorbis и споткнулся на нём.

ZST вместо deflate

Потому что в png используется deflate, а не zst.

u5er ★★★
() автор топика
Ответ на: комментарий от Lrrr

ladybird

Он ещё даже в альфу не вышел. Кнопка - это группа вкладок. Периодически поглядываю за новостями и за issue в гитхабе. Периодически делаю git pull и собираю новую версию для потыкать. Сайты типа лора он отображает уже довольно точно. Даже сам гитхаб на нём открывается. «Серьёзные» сайты открываются с попеременным успехом. Так что в целом, работает он неплохо, но пока ещё не готов для использования на постоянку.

u5er ★★★
() автор топика
Ответ на: комментарий от dataman

Довольно интересное чтиво, спасибо. Прочитал zip.html. Любопытен тот факт, что мой код реализации распаковки deflate оказался местами очень похож на тот, который представлен в статье. А некоторые участки кода так вообще идентичны. А ещё содержимое вот этого https://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html заставило меня сильно призадуматься.

u5er ★★★
() автор топика

традиционных заявлений про ШГ

А вот на удивление не! Тут совсем не ШГ, причём даже на моих 1366×768.

Аффтар жжош!

Про окружение понятно, теперь про процесс, и уже в Статьи. У тебя интересное происходить собирается!

Сейчас в статьях какая-то жижа, и железячников не заставишь писать свои интересности (у них лапки на это просто нет времени ☺).

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

У тебя интересное происходить собирается!

Но только линукс не причём. Сам же знаешь;) Там у меня даже фряха не той системы xD

u5er ★★★
() автор топика
Ответ на: комментарий от u5er

Ты там вскользь упомянул про какие-то платы. Значит планируется происходить что-то железячное, а это уже далеко не (по крайней мере пока, смузихлёбы зохватиле мир!) оффтопик на этом сайте.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Ты там вскользь упомянул про какие-то платы.

Это те самые платы :) И линукс там никаким боком. Сам же знаешь.

u5er ★★★
() автор топика

хафман крут, я не смог заставить себя по нему сжималку текста сделать, словарь слов и по хафману в зависимости от редкости закодировать, по форматам изображений у меня классная бумажная книга для раздербания и генерации gif файлов до появления linux и имадже маджик пригодилась

s-warus ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.