memory heap
340 subscribers
2.24K photos
468 videos
52 files
2.89K 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-INI 0.4.0 — парсера INI-формата для GNU Guile:
https://lists.gnu.org/archive/html/guile-user/2022-03/msg00053.html

В новой версии обеспечена совместимость с Guile-SMC 0.4.0.

#guile #ini #parser #projects #dev
Выпустил релиз Guile-ICS 0.3.0 — парсера для разбора формата iCalendar (RFC5545):
https://lists.gnu.org/archive/html/guile-user/2022-09/msg00004.html

iCalendar — это формат передачи данных календаря и планировщика между сервисами и приложениями.

Это первая версия, где детерминированный конечный автомат компилируется через Guile-SMC.

#dev #guile #parser #icalendar #rfc5545
Приняли мой патч в GNU Guix с обновлением Guile-INI до версии 0.5.2.
$ guix search guile-ini
name: guile-ini
version: 0.5.2
outputs:
+ out: everything else
systems: x86_64-linux i686-linux
dependencies: autoconf@2.69 automake@1.16.3 bash-minimal@5.1.8 guile-lib@0.2.7 guile-smc@0.5.2 guile@3.0.7 pkg-config@0.29.2 texinfo@6.7
location: gnu/packages/guile-xyz.scm:4937:2
homepage: https://github.com/artyom-poptsov/guile-ini
license: GPL 3
synopsis: Guile library for INI format support
description: `guile-ini' is a GNU Guile library for working with the INI format (https://en.wikipedia.org/wiki/INI_file). This library provides API for reading and writing INI data.
relevance: 22


#gnu #guix #guile #ini #parser
👍1
Пробую интегрировать работу с форматом vCard (RFC 6350) в Guile-ICS, поскольку этот формат крайне похож на iCalendar (RFC 5545.) Хочу ещё добавить также конвертацию табличных данных в vCard, чтобы массово можно было создавать карточки контактов на основе некой адресной книги (актуальная задача по работе сейчас.)

Для чтения табличных данных как раз можно использовать Guile-DSV. ^_^

Пример данных vCard:
BEGIN:VCARD
VERSION:4.0
UID:urn:uuid:4fbe8971-0bc3-424c-9c26-36c3e1eff6b1
FN;PID=1.1:J. Doe
N:Doe;J.;;;
EMAIL;PID=1.1:jdoe@example.com
EMAIL;PID=2.1:boss@example.com
TEL;PID=1.1;VALUE=uri:tel:+1-555-555-5555
TEL;PID=2.1;VALUE=uri:tel:+1-666-666-6666
CLIENTPIDMAP:1;urn:uuid:53e374d9-337e-4727-8803-a1e9c14e0556
END:VCARD


Пример описания содержимого vCard утилитой ics, которая идёт в комплекте к Guile-ICS:
$ ics describe vcard.vcf
;;; VCARD
;;; CLIENTPIDMAP (TEXT: Text type: RFC5545, 3.3.11)
;;; 1;urn:uuid:53e374d9-337e-4727-8803-a1e9c14e0556
;;; TEL (TEXT: Text type: RFC5545, 3.3.11)
;;; tel:+1-666-666-6666
;;; VALUE uri
;;; PID 2.1
;;; TEL (TEXT: Text type: RFC5545, 3.3.11)
;;; tel:+1-555-555-5555
;;; VALUE uri
;;; PID 1.1
;;; EMAIL (TEXT: Text type: RFC5545, 3.3.11)
;;; boss@example.com
;;; PID 2.1
;;; EMAIL (TEXT: Text type: RFC5545, 3.3.11)
;;; jdoe@example.com
;;; PID 1.1
;;; N (TEXT: Text type: RFC5545, 3.3.11)
;;; Doe;J.;;;
;;; FN (TEXT: Text type: RFC5545, 3.3.11)
;;; J. Doe
;;; PID 1.1
;;; UID (TEXT: Text type: RFC5545, 3.3.11)
;;; urn:uuid:4fbe8971-0bc3-424c-9c26-36c3e1eff6b1
;;; VERSION (TEXT: Text type: RFC5545, 3.3.11)
;;; 4.0


Режим "pretty print":
$ ics print vcard.vcf
BEGIN: VCARD
CLIENTPIDMAP: 1;urn:uuid:53e374d9-337e-4727-8803-a1e9c14e0556
TEL;VALUE=uri;PID=2.1: tel:+1-666-666-6666
TEL;VALUE=uri;PID=1.1: tel:+1-555-555-5555
EMAIL;PID=2.1: boss@example.com
EMAIL;PID=1.1: jdoe@example.com
N: Doe;J.;;;
FN;PID=1.1: J. Doe
UID: urn:uuid:4fbe8971-0bc3-424c-9c26-36c3e1eff6b1
VERSION: 4.0
END: VCARD


#projects #guile #ics #parser #rfc5545 #rfc6350
1
Выпустил релиз Guile-ICS 0.4.0:
https://github.com/artyom-poptsov/guile-ics/releases/tag/v0.4.0

Анонс в списке рассылки GNU Guile:
https://lists.gnu.org/archive/html/guile-user/2022-10/msg00075.html

Основные изменения:
- Добавлена базовая поддержка формата vCard (RFC 6350), используемого для передачи контактных данных.
- Улучшена утилита командной строки ics: теперь она лучше структуирована и поддерживает команды print, describe и convert.

С помощью ics convert теперь можно делать преобразование данных DSV (Delimiter-Separated Values) в iCalendar/vCard.

Например, пусть у вас в файле data.csv есть следующие данные:

ORG,TITLE,FN,EMAIL
Example Organisation,Programmer,Eva Luator,eva@example.org
Example Organisation,Programmer,Random J. Hacker,rjh@example.org

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

То из него можно получить легко контактные карточки через ics convert:

$ ics convert data.csv
BEGIN:VCARD
EMAIL:eva@example.org
FN:Eva Luator
TITLE:Programmer
ORG:Example Organisation
END:VCARD

BEGIN:VCARD
EMAIL:rjh@example.org
FN:Random J. Hacker
TITLE:Programmer
ORG:Example Organisation
END:VCARD

Если вывод ics convert перенаправить в файл, то получится файл с контактными данными. Потом этот файл можно загрузить в почтовый клиент, или приложение контактов в мобильном устройстве, и таким образом сделать массовую загрузку контактов (реальная задача, которая меня и сподвигла на реализацию этой возможности.)

Отправил также патч с обновлением Guile-ICS в GNU Guix:
https://mail.gnu.org/archive/html/guix-patches/2022-10/msg01846.html

#projects #guile #rfc5545 #rfc6350 #parser
👍1
Как оказалось, инверсия цветов в Guile-PNG не всегда работает корректно. В результате получаются вот такие артефакты.

(Парсер PNG, как же я тебя понимаю 😐)

#projects #guile #png #parser #lisp
😁3
Измеряю качество обработки изображений в самописной библиотеке PNG с помощью шакалов. 9 шакалов из 9, я считаю.

#projects #guile #png #parser #lisp
👍4
😈2❤‍🔥1
Уже лучше.

#projects #guile #png #parser
Наконец-то получилось корректно декодировать изображение PNG, где встречаются все 5 видов фильтров.

По поводу корректности обработки альфа-канала пока не уверен, нужны ещё тесты.

А вот здесь вы можете увидеть результат обработки декодированного изображения — инверсии цветов.

\o/

#projects #guile #png #parser
🔥4
Пример эффекта соларизации с порогом 100. Соларизация похоже на инверсию цветов, с той разницей, что при соларизации инверсия цветов применяется только для тех цветовых каналов, значения которых больше (или меньше, как в моём случае), чем пороговое. Знак больше-меньше выбирается вместе с пороговым значением и влияет на конечный эффект.

Кстати, эту картинку я сделал как-то давно для группы своих дипломников в Telegram.

Исходный код:
(use-modules (png)
(png image)
(png image-processing))

(define (main args)
(let* ((image (png->scm))
(result (png-image-filter-solarize image
100)))
(scm->png result)))

#projects #guile #png #parser #image_processing
3
Выпустил релиз Guile-PNG 0.3.0:
https://github.com/artyom-poptsov/guile-png/releases/tag/v0.3.0

В новом релизе:
- Улучшен парсер PNG.
- Улучшен кодировщик PNG.
- Библиотека теперь даёт возможность создавать PNG-изображения "с нуля", а не только загружать готовые.
- Добавлена возможность рисовать многоугольники и прямоугольники с заливкой.
- Обновлена и дополнена документация.
- Добавлены новые тесты.

#guile #png #parser #projects #dev
2👍2
Добавил возможность нумеровать столбцы и строки таблицы в Guile-DSV. Будет в следующем релизе.

#projects #guile #dsv #parser
5
Выпустил релиз Guile-DSV 0.7.1:
https://github.com/artyom-poptsov/guile-dsv/releases/tag/v0.7.1

В новом релизе реализована возможность добавлять нумерацию строкам и столбцам таблицы.

Анонс в рассылке Guile-User:
https://mail.gnu.org/archive/html/guile-user/2023-10/msg00082.html

#guile #projects #dsv #parser
1
#projects #guile #guile_smc #parser

Выпустил релиз Guile-SMC 0.6.3:
https://github.com/artyom-poptsov/guile-smc/releases/tag/v0.6.3

Ключевые изменения:
- Парсер PlantUML теперь обрабатывает многострочные комментарии.
- Исправление ошибки в (smc context functional char): теперь процедура pre-action правильно считает количество прочитанных строк (до этого количество прочитанных строк инкрементировалось каждый раз, когда читался любой новый символ.)
- Парсер PlantUML теперь пропускает блоки, начинающиеся с hide (например, hide empty description)
- Для блока legend парсер PlantUML теперь позволяет указывать конец блока, как end legend (в дополнении к endlegend.)
- Улучшение информативности ошибок в парсере PlantUML.
1
Выпустил релиз Guile-DSV 0.7.2:
https://github.com/artyom-poptsov/guile-dsv/releases/tag/v0.7.2

В новой версии:
- Исправлена ошибка обработки таблиц с неравномерным количеством столбцов в строках. Теперь Guile-DSV предоставляет возможность проверять корректность таблиц на этапе парсинга и перед выводом, и выдавать ошибку на более ранних этапах. Также ошибки теперь более понятные и указывают на проблемное место в исходных данных. Это поведение включено по-умолчанию для CLI. Для API же это по-умолчанию выключено, т.к. это во-первых сохраняет совместимость со старым поведением, и во-вторых позволяет пользователю самостоятельно решить, нужно ли выдавать ошибку при чтении проблемных данных, или же обработать это другим способом, уже после чтения.
- Исправлена ошибка с форматированием таблиц: теперь оно корректно работает для таблиц, чей размер меньше двух столбцов.
- Исправлен make distcheck — теперь оно корректно завершается.
- Добавлены новые файлы в репозиторий: ARCHITECTURE.org описывает архитектуру проекта (как предложено здесь); CODE_OF_CONDUCT.org описывает правила для сообщества разработчиков и контрибьюторов, как предложено здесь.

#guile #guile_dsv #parser #projects #scheme
2👾1