memory heap
340 subscribers
2.21K photos
465 videos
52 files
2.86K 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
Christine Lemmer-Webber, "Spritely, Guile, Guix: a unified vision for user security":
https://fosdem.org/2024/schedule/event/fosdem-2024-2331-spritely-guile-guix-a-unified-vision-for-user-security/

Scheme в браузере через WASM! И другие классные штуки.

#scheme #guix #guile #wasm #lisp
🔥2
Lulu Cathrinus Grimalkin, "The evolution of a Scheme programmer":
https://erkin.party/blog/200715/evolution/

#scheme #lisp #humor
#guix_patches #scheme

Приняли мой патч, добавляющий в GNU Guix реализацию стандарта языка программирования Scheme R7RS под названием tr7.

Спасибо Nicolas Goaziou за ревью и мёрж.
6
Выпустил релиз Guile-SSH v0.17.0:
https://github.com/artyom-poptsov/guile-ssh/releases/tag/v0.17.0

В новой версии:
- Исправлена ошибка с порядком загрузки конфигурационного файла SSH: теперь опции, которые задаются явно при вызове make-session, имеют больший приоритет, нежели чем из конфигурационного файла. Таким образом, явно заданные опции перезаписывают опции из конфигурационного файла, который загружается первым.
- Процедура session-set! теперь позволяет задать опцию rsa-min-size.
- Обновлении документации.
- Обновление тестов.

#guile #guile_ssh #projects #scheme
1🎃1
Исправил ошибку в Guile-DSV, из-за которой фильтрация столбцов не работала, если в итоговой таблице оказывался только один столбец. Также ошибка проявлялась для таблиц, у которых был всего один столбец.

#guile #guile_dsv #projects #scheme
Сделал форк guile-web-driver, назвал guile-web-driver-ng (не слишком оригинально, да) наладил сборку через GNU Autotools, добавил манифест guix.scm для сборки через GNU Guix.

Добавляю постепенно тесты на SRFI-64, обновляю/дополняю документацию. Сейчас делаю MITM-proxy для GNU Guile, чтобы можно было в Guile-WebDriver-NG подменять заголовки запроса от браузера.

Вот так могу теперь:
#!/usr/bin/env -S guile -L . -e main
!#

(use-modules (web proxy)
(web proxy interceptor)
(oop goops))

(define (main args)
(let* ((interceptor
(make <proxy-interceptor>
#:chain '((request headers dump stderr)
(request headers replace
((host "ru.example.com" . #f)
(user-agent . "curl/8.5.0")
(accept (*/*)))))))
(proxy (make <proxy>
#:port 8081
#:interceptor interceptor)))
(proxy-start! proxy)
(while #t (sleep 5))))

Как только всё будет работать с приемлемым качеством, сделаю релиз.

#guile #scheme #projects
🔥11
Выпустил релиз 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
Наконец-то появилась штука наподобие Doxygen для Scheme, которая парсит комментарии и docstrings из кода в формате Texinfo и создаёт на базе этого документацию по API проекта:
https://luis-felipe.gitlab.io/guile-documenta/

Автор Luis Felipe.

#guile #scheme #tools
3
memory heap
Another Guile-PNG generative art: https://gist.github.com/artyom-poptsov/72fe27b7441f984262c99ee2b27082a8 #generative_art #art #guile_png #scheme
Экспериментальным способом получено изображение с повышенной шакальностью.

#generative_art #guile_png #scheme
🎃4
Я аделлс ,агммопрру акоортя адеелт викооррсту бвку в .авлосх

#!/usr/bin/env -S guile -L modules -e main -s
!#

(define (main args)
(let ((lst (string-split (cadr args) #\space)))
(for-each (lambda (word)
(display
(apply string
(sort (string->list word)
char<?)))
(display " "))
lst))
(newline))


#scheme
👾4
Выпустил релиз Guile-SSH 0.18.0:
https://github.com/artyom-poptsov/guile-ssh/releases/tag/v0.18.0

В новой версии:

1. Убрана поддержка libssh версий старше 0.8.0 (например, libssh 0.7)

2. Изменён интерфейс модуля (ssh popen): процедуры open-remote-pipe*, open-remote-input-pipe* и open-remote-output-pipe* теперь работают также, как и open-pipe*. Также это делает их поведение соответствующим тому, что описано в документации Guile-SSH.

Зарепорчено пользователем graywolf в #39.

3. make-session теперь правильно обрабатывает параметр #:config со значением #f. Теперь выставление данного параметра в #f (false) выключает чтение стандартных конфигурационных файлов SSH (как и должно было быть по документации Guile-SSH). При использовании старых версий libssh (до 0.9) выставление параметра #:config в #f приводит к тому, что используется файл /dev/null в качестве конфигурационного (таким образом, предотвращая чтение стандартных конфигурационных файлов.)

Зарепорчено пользователем graywolf в #38.

4. Исправление ошибки компиляции из-за использования ключевого слова bool в качестве имени переменной.

Зарепорчено и исправлено пользователем Peter Tillemans в #43.

5. Исправлена сборка с libssh < 0.8.3. Также добавлены новые тесты в GitHub CI, проверяющие работу Guile-SSH на старых версиях.

6. Проект получил новое лого, более минималистичное и лаконичное! Спасибо дизайнеру, художнику и моему другу (в одном лице) Darya Sev. за ценные советы по поводу дизайна нового логотипа.

7. Обновлена и дополнена документация.

8. Обновлены и исправлены тесты.

9. Добавлен файл CODE_OF_CONDUCT.org в репозиторий.

#projects #guile_ssh #guile #scheme
🔥5
memory heap
А вот кстати вылезла новая проблема: фигура не центрирована внутри изображения.
Переписал алгоритм отрисовки шестигранника, используя вот этот пример. Теперь кстати можно в целом многогранники реализовать, и сделать просто шестигранник частным случаем.

Красными точками отмечена стартовая точка.

#guile_png #scheme
Преисполнился (ice-9 match) :

(use-modules (ice-9 match) (srfi srfi-1))

(define (in-range? value ranges)
(and (number? value)
(match ranges
(((? number?) . (? number?))
(and (>= value (car ranges)) (<= value (cdr ranges))))
((((? number?) . (? number?)) ...)
(fold (lambda (range prev)
(or prev
(and (>= value (car range))
(<= value (cdr range)))))
#f
ranges)))))

(in-range? -1 '((1 . 10) (-2 . -1)))
=> #t

(in-range? -10 '((1 . 10) (-2 . -1)))
=> #f

(in-range? 10 '(1 . 10))
=> #t


#lisp #scheme
1🔥1
#projects #guile_ics #guile #scheme

Несколько дней работал над улучшением Guile-ICS (мне тут недавно написали issue на GitHub с просьбой реализовать нормальную поддержку RRULE — параметров повторяемости событий календаря.)

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

Вот, как пример, вывод консольной утилиты для работы с форматом iCalendar, базирующейся на API библиотеки и поставляющейся вместе с ней. Здесь можно видеть разобранный и затем склеянный обратно (для красивого вывода) параметр RRULE:
$ ./pre-inst-env ./utils/ics rrule.ics 
BEGIN: VCALENDAR
BEGIN: VEVENT
RRULE (RECUR): FREQ=YEARLY; INTERVAL=2; BYMINUTE=30; BYHOUR=8,9,10; BYDAY=SU; BYMONTH=1
END: VEVENT
END: VCALENDAR


Значения параметров повторения теперь не только парсятся, но и проверяются на корректность. Библиотека не только бросается ошибками при некорректных значениях, но ещё и выдаёт справку по использованию данных параметров — по сути, куски RFC.
🔥1
David Thompson, "Optimizing Guile Scheme":
https://dthompson.us/posts/optimizing-guile-scheme.html

Интересная статья про оптимизацию программ на моём любимом языке программирования.

#guile #scheme #programming
🔥2
Выпустил Guile-SMC 0.6.4 с исправлением ошибок:
https://github.com/artyom-poptsov/guile-smc/releases/tag/v0.6.4

Основное исправление — Make больше не запускает генерацию целевого файла puml-fsm.scm из исходгого puml.puml, когда исходный поменялся. Вместо этого генерация запускается только тогда, когда puml-fsm.scm удалён. Это позволяет избежать иногда возникающих ситуаций, когда система сборки пытается сгенерировать puml-fsm.scm из puml.puml без наличия установленного Guile-SMC в системе, что приводило к ошибке (так как для этого нужен Guile-SMC.)

#projects #guile #guile_smc #scheme
Наконец-то добрался до своих FOSS-проектов. Замёржил в Guile-DSV патч от Denis 'GNUtoo' Carikli, добавляющий возможность указывать собсвтенную процедуру для нарезки строк при форматировании таблицы.

Попутно внёс ещё несколько небольших улучшений.

#guile #scheme #projects #guile_dsv