memory heap
373 subscribers
2.54K photos
521 videos
52 files
3.12K links
science ∩ art = wonder

all memory blocks here are allocated by @a_v_p

GitHub: https://github.com/artyom-poptsov
Mastodon: https://fosstodon.org/@avp

https://memory-heap.org/~avp/
Download Telegram
#guile #scheme #lisp #dsv #csv

Добавил в утилиту dsv, которая идёт в составе Guile-DSV, поддержку указания формата для точек соединения "рамок" таблицы при печати.

Пример исходных данных:
$ cat data.csv 
root,x,0,0,root,/root,/bin/bash
daemon,x,1,1,daemon,/usr/sbin,/usr/sbin/nologin
bin,x,2,2,bin,/bin,/usr/sbin/nologin
sys,x,3,3,sys,/dev,/usr/sbin/nologin


Пример вывода от утилиты dsv в формате таблицы:
$ dsv -b "v=|,h=-,j=+" data.csv
root | x | 0 | 0 | root | /root | /bin/bash |
-------------+--------+--------+--------+-------------+----------------+------------------------+
daemon | x | 1 | 1 | daemon | /usr/sbin | /usr/sbin/nologin |
-------------+--------+--------+--------+-------------+----------------+------------------------+
bin | x | 2 | 2 | bin | /bin | /usr/sbin/nologin |
-------------+--------+--------+--------+-------------+----------------+------------------------+
sys | x | 3 | 3 | sys | /dev | /usr/sbin/nologin |
-------------+--------+--------+--------+-------------+----------------+------------------------+
Выпустил релиз Guile-DSV 0.4.1 с новыми возможностями отрисовки таблиц на основе DSV-данных в консоли:
https://lists.gnu.org/archive/html/guile-user/2021-12/msg00007.html

Репозиторий:
https://github.com/artyom-poptsov/guile-dsv

#dev #guile #scheme #dsv
Внезапно ещё один релиз Guile-DSV 0.5.0 с поддержкой вывода таблиц в формат Emacs org-mode и возможностью использовать первую строку входных данных, как заголовок таблицы.

https://lists.gnu.org/archive/html/guile-user/2021-12/msg00009.html

#dev #guile #scheme #dsv
Выпустил релиз Guile-DSV 0.5.1 с возможностью вывода данных в формате DSV/CSV в формат таблиц Markdown, и также возможностью применять произвольный код на Scheme на каждую ячейку таблицы, и фильтровать строки/столбцы табличных данных.

#guile #scheme #projects #dsv
Guile-DSV теперь позволяет задать тень для вывода таблицы в стиле псевдографики:
$ echo -e "a,b,c\na1,b1,c1\na2,b2,c2\n" | dsv -H -b graphic-with-shadow
┏━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┓
┃ a ┃ b ┃ c ┃░░
┡━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━┩░░
│ a1 │ b1 │ c1 │░░
├─────────┼─────────┼─────────┤░░
│ a2 │ b2 │ c2 │░░
└─────────┴─────────┴─────────┘░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

Спецификатор тени задаётся достаточно просто. Вот часть пресета graphic-with-shadow:
...
(shadow . "░")
(shadow-offset . "2,1") ; x,y
...

Для тени можно выставить смещение по осям X и Y.

#projects #guile #scheme #lisp #dsv
Выпустил релиз Guile-DSV 0.5.2:
https://mail.gnu.org/archive/html/guile-user/2023-04/msg00012.html

Основные изменения:

0. Исправлен баг с обработкой пустых полей в конце строки, при использовании формата RFC 4180. Если раньше таблица
  a,b
c,
давала результат '(("a" "b") ("c")), то теперь результат будет '(("a" "b") ("c" "")).

1. Утилита dsv теперь обрабатывает опцию --table-presets-path, которая позволяет задать путь к каталоку с пресетами таблиц. Этот же параметр теперь можно задать переменной окружения GUILE_DSV_TABLE_PRESETS_PATH.

2. Теперь для таблиц можно задавать "тень" (как видно на скриншоте.) Для теней можно задавать символ отрисовки и смещение по двум осям в формате x;y.

3. Таблицы теперь позволяют задавать стили для отображения границ таблиц, для текста внутри, для заголовков и для тени.

4. Параметры пресетов могут быть перезаписаны. Например:
$ dsv -b "graphic-with-shadow,bs=107;100,ts=107;100" /etc/passwd

5. Обновлена справочная документация.

#dev #projects #guile #dsv #lisp
Теперь Guile-DSV умеет форматировать таблицы так, чтобы они умещались в указанную ширину; содержимое ячеек делится на строки при необходимости. Ширина таблицы задаётся опцией --width (-w.)

Новая функция будет в следующем релизе, пока на свой страх и риск можете пробовать собрать Guile-DSV с ветви master.

В GNU Guix после клонирования репозитория можно установить Git-версию из guix.scm, находящегося в корне репозитория:
$ guix package -f guix.scm


#dev #projects #guile #dsv #csv #lisp
2
Улучшил алгоритм форматирования таблиц в Guile-DSV — теперь при вписывании таблицы в указанное количество символов по ширине, ширина столбцов таблицы сглаживается, чтобы место распределялось более равномерно.

UPD: Конечно же указание формата -F rfc4180 здесь избыточно и неправильно, т.к. файл /etc/passwd в Unix-формате, с двоеточияи в качестве разделителей. Но Guile-DSV автоматически может определить разделитель в большинстве случаев, поэтому принудительное указание неправильного формата не повлияло на интерпретацию файла.

#dev #projects #guile #dsv
Выпустил релиз Guile-DSV 0.6.0.

Анонс:
https://mail.gnu.org/archive/html/guile-user/2023-05/msg00015.html

В утилите dsv через опцию --width (-w) теперь можно задавать желаемую ширину таблицы. Guile-DSV попытается уместить таблицу в указанную ширину, при этом содержимое ячеек будет разбиваться на несколько строк, если это необходимо. Если ширина таблицы выставлена в auto, используется ширина экрана в качестве максимальной ширины (если таблица уже, чем ширина экрана, она не будет "растягиваться" по ширине, а "обтекать" элементы в ней.)

Если же ширину выставтиь в ноль, то тогда никакого изменения размера таблицы и переноса строк выполняться не будет, и потенциально таблица может быть шире терминала, что приведёт к переносу строк в его окне.

Если же заданная ширина таблицы меньше минимальной ширины для вывода её столбцов, будет выдана ошибка.

#dev #projects #guile #dsv
Guile-DSV 0.6.0 теперь в GNU Guix:
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=43510204c631e59b9a5a38e09caeea94d7a94de2

Поставить/обновить можно командой:
guix install guile-dsv


#dev #projects #guile #dsv #guix
1
memory heap
Переписываю детерминированные конечные автоматы (ДКА) парсеров в проекте Guile-DSV с написанного вручную кода на Guile-SMC. По ходу дела дорабатываю описание ДКА в формате PlantUML, т.к. именно из этого описания теперь будет герерироваться программный код…
Сравнение скорости обработки текстовых данных через Guile-DSV.

В первом случае (верхняя синяя линия на графике) тест проходил на оригинальной версии Guile-DSV с рукописным ДКА, а во втором случае (оранжевая нижняя линяя на графике) — с ДКА, сгенерированным через Guile-SMC. Отладочный лог выключен. Используется реальное время работы программы, в секундах.

Размер тестового текстового файла:
$ wc datasets/covid.csv 
53591 54463 3985948 datasets/covid.csv
$ du -h datasets/covid.csv
3,9M datasets/covid.csv

Скрипт сбора статистики:
https://gist.github.com/artyom-poptsov/d53c10875e85cb735dd34e5a0f428bbe

#dev #guile #dsv
1
memory heap
Сравнение скорости обработки текстовых данных через Guile-DSV. В первом случае (верхняя синяя линия на графике) тест проходил на оригинальной версии Guile-DSV с рукописным ДКА, а во втором случае (оранжевая нижняя линяя на графике) — с ДКА, сгенерированным…
Исправил ошибки в профилировщике детерминированных конечных автоматов из поставки Guile-SMC, исправления пойдут в следующий релиз.

Использование профилировщика на примере Guile-DSV:
$ dsv --log-driver file --log-opt=file=smc.log -F rfc4180 --to unix datasets/covid.csv > test.csv
$ smc profile smc.log
Total transitions: 1661324
Total time: 84173181 us
Stats:
read_quote: 30647003 us (36.4095 %)
read_quoted_field: 27615130 us (32.8075 %)
read_field_first_char: 23677038 us (28.1290 %)
add_row: 2233946 us (2.6540 %)
add_final_row: 35 us (.0000 %)
read_first_field_first_char: 29 us (.0000 %)


Кусок файла smc.log:
$ head smc.log
2023-08-10 21:19:05.522313 (DEBUG): [*] -> [read_first_field_first_char]
2023-08-10 21:19:05.522342 (DEBUG): [read_first_field_first_char] -> [read_quoted_field]
2023-08-10 21:19:05.522377 (DEBUG): [read_quoted_field] -> [read_quote]
2023-08-10 21:19:05.522427 (DEBUG): [read_quote] -> [read_field_first_char]
2023-08-10 21:19:05.522448 (DEBUG): [read_field_first_char] -> [read_quoted_field]
2023-08-10 21:19:05.522483 (DEBUG): [read_quoted_field] -> [read_quote]
2023-08-10 21:19:05.522508 (DEBUG): [read_quote] -> [read_field_first_char]
2023-08-10 21:19:05.522527 (DEBUG): [read_field_first_char] -> [read_quoted_field]
2023-08-10 21:19:05.522556 (DEBUG): [read_quoted_field] -> [read_quote]
2023-08-10 21:19:05.522585 (DEBUG): [read_quote] -> [read_field_first_char]


#dev #projects #guile #dsv #smc
1
memory heap
Сравнение скорости обработки текстовых данных через Guile-DSV. В первом случае (верхняя синяя линия на графике) тест проходил на оригинальной версии Guile-DSV с рукописным ДКА, а во втором случае (оранжевая нижняя линяя на графике) — с ДКА, сгенерированным…
Провёл ещё один замер производительности Guile-DSV с новым ДКА, сделанным на базе Guile-SMC, используя датасет "Feed Grains: Yearbook Tables" на почти полмиллиона строк (498929 строк, если быть точным.)

Время на графиках в секундах.

Новая версия парсера работает быстрее старого на этом примере примерно в 15 раз.

Конечно, сорость обработки данных ещё зависит от самих данных и их формата. Например, парсер Unix-формата DSV работает быстрее, поскольку там нюансов меньше, и следовательно сам ДКА для Unix-формата проще.

#dev #projects #guile #dsv
1