#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 |
-------------+--------+--------+--------+-------------+----------------+------------------------+
GitHub
GitHub - artyom-poptsov/guile-dsv: Delimiter-separated values (DSV) format parser for GNU Guile.
Delimiter-separated values (DSV) format parser for GNU Guile. - artyom-poptsov/guile-dsv
Выпустил релиз 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
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.1 с возможностью вывода данных в формате DSV/CSV в формат таблиц Markdown, и также возможностью применять произвольный код на Scheme на каждую ячейку таблицы, и фильтровать строки/столбцы табличных данных.
#guile #scheme #projects #dsv
#guile #scheme #projects #dsv
Guile-DSV 0.5.1 теперь и в GNU Guix:
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=35d56676db0988aad6d1a5b52dc4efef578885f2
#guile #guix #dsv #dev
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=35d56676db0988aad6d1a5b52dc4efef578885f2
#guile #guix #dsv #dev
Guile-DSV теперь позволяет задать тень для вывода таблицы в стиле псевдографики:
#projects #guile #scheme #lisp #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:...Для тени можно выставить смещение по осям X и Y.
(shadow . "░")
(shadow-offset . "2,1") ; x,y
...
#projects #guile #scheme #lisp #dsv
GitHub
GitHub - artyom-poptsov/guile-dsv: Delimiter-separated values (DSV) format parser for GNU Guile.
Delimiter-separated values (DSV) format parser for GNU Guile. - artyom-poptsov/guile-dsv
memory heap
Guile-DSV теперь позволяет задать тень для вывода таблицы в стиле псевдографики: $ echo -e "a,b,c\na1,b1,c1\na2,b2,c2\n" | dsv -H -b graphic-with-shadow ┏━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┓ ┃ a ┃ b ┃ c ┃░░ ┡━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━┩░░ │…
Теперь Guile-DSV умеет использовать стили для вывода таблиц и переопределять параметры готовых пресетов.
#guile #dsv #lisp #projects
#guile #dsv #lisp #projects
⚡2
Выпустил релиз Guile-DSV 0.5.2:
https://mail.gnu.org/archive/html/guile-user/2023-04/msg00012.html
Основные изменения:
0. Исправлен баг с обработкой пустых полей в конце строки, при использовании формата RFC 4180. Если раньше таблица
1. Утилита
2. Теперь для таблиц можно задавать "тень" (как видно на скриншоте.) Для теней можно задавать символ отрисовки и смещение по двум осям в формате
3. Таблицы теперь позволяют задавать стили для отображения границ таблиц, для текста внутри, для заголовков и для тени.
4. Параметры пресетов могут быть перезаписаны. Например:
#dev #projects #guile #dsv #lisp
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/passwd5. Обновлена справочная документация.
#dev #projects #guile #dsv #lisp
Теперь Guile-DSV умеет форматировать таблицы так, чтобы они умещались в указанную ширину; содержимое ячеек делится на строки при необходимости. Ширина таблицы задаётся опцией
Новая функция будет в следующем релизе, пока на свой страх и риск можете пробовать собрать Guile-DSV с ветви
В GNU Guix после клонирования репозитория можно установить Git-версию из
#dev #projects #guile #dsv #csv #lisp
--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: Конечно же указание формата
#dev #projects #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
В утилите
Если же ширину выставтиь в ноль, то тогда никакого изменения размера таблицы и переноса строк выполняться не будет, и потенциально таблица может быть шире терминала, что приведёт к переносу строк в его окне.
Если же заданная ширина таблицы меньше минимальной ширины для вывода её столбцов, будет выдана ошибка.
#dev #projects #guile #dsv
Анонс:
https://mail.gnu.org/archive/html/guile-user/2023-05/msg00015.html
В утилите
dsv через опцию --width (-w) теперь можно задавать желаемую ширину таблицы. Guile-DSV попытается уместить таблицу в указанную ширину, при этом содержимое ячеек будет разбиваться на несколько строк, если это необходимо. Если ширина таблицы выставлена в auto, используется ширина экрана в качестве максимальной ширины (если таблица уже, чем ширина экрана, она не будет "растягиваться" по ширине, а "обтекать" элементы в ней.)Если же ширину выставтиь в ноль, то тогда никакого изменения размера таблицы и переноса строк выполняться не будет, и потенциально таблица может быть шире терминала, что приведёт к переносу строк в его окне.
Если же заданная ширина таблицы меньше минимальной ширины для вывода её столбцов, будет выдана ошибка.
#dev #projects #guile #dsv
memory heap
Переписываю детерминированные конечные автоматы (ДКА) парсеров в проекте Guile-DSV с написанного вручную кода на Guile-SMC. По ходу дела дорабатываю описание ДКА в формате PlantUML, т.к. именно из этого описания теперь будет герерироваться программный код…
Сравнение скорости обработки текстовых данных через Guile-DSV.
В первом случае (верхняя синяя линия на графике) тест проходил на оригинальной версии Guile-DSV с рукописным ДКА, а во втором случае (оранжевая нижняя линяя на графике) — с ДКА, сгенерированным через Guile-SMC. Отладочный лог выключен. Используется реальное время работы программы, в секундах.
Размер тестового текстового файла:
https://gist.github.com/artyom-poptsov/d53c10875e85cb735dd34e5a0f428bbe
#dev #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:
Кусок файла
#dev #projects #guile #dsv #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
GitHub
GitHub - artyom-poptsov/guile-smc: GNU Guile State Machine Compiler
GNU Guile State Machine Compiler. Contribute to artyom-poptsov/guile-smc development by creating an account on GitHub.
⚡1
memory heap
Сравнение скорости обработки текстовых данных через Guile-DSV. В первом случае (верхняя синяя линия на графике) тест проходил на оригинальной версии Guile-DSV с рукописным ДКА, а во втором случае (оранжевая нижняя линяя на графике) — с ДКА, сгенерированным…
Провёл ещё один замер производительности Guile-DSV с новым ДКА, сделанным на базе Guile-SMC, используя датасет "Feed Grains: Yearbook Tables" на почти полмиллиона строк (498929 строк, если быть точным.)
Время на графиках в секундах.
Новая версия парсера работает быстрее старого на этом примере примерно в 15 раз.
Конечно, сорость обработки данных ещё зависит от самих данных и их формата. Например, парсер Unix-формата DSV работает быстрее, поскольку там нюансов меньше, и следовательно сам ДКА для Unix-формата проще.
#dev #projects #guile #dsv
Время на графиках в секундах.
Новая версия парсера работает быстрее старого на этом примере примерно в 15 раз.
Конечно, сорость обработки данных ещё зависит от самих данных и их формата. Например, парсер Unix-формата DSV работает быстрее, поскольку там нюансов меньше, и следовательно сам ДКА для Unix-формата проще.
#dev #projects #guile #dsv
⚡1