r/ретранслятор
Запоминаем: Pregnant r/#funnyvideos
Просто опупенно, хочу весь альбом.
В Inkscape 1.0 добавили отличную штуку для функции трассировки растровых изображений — "Centerline tracing". Благодаря ей можно готовить задачи к резке на фрезере с ЧПУ таким образом, чтобы за один проход все лини резались.
В Ubuntu 20.04 для того, чтобы получить Inkscape 1.1, надо добавить PPA:
В Ubuntu 20.04 для того, чтобы получить Inkscape 1.1, надо добавить PPA:
sudo add-apt-repository ppa:inkscape.dev/stableВ GNU Guix уже есть версия Inkscape 1.1.1. Можно поставить так:
sudo apt update
sudo apt install inkscape
guix install inkscape#cnc #software
r/ретранслятор
Запоминаем: Pregnant r/#funnyvideos
А вот и оригинал видео, кстати:
https://www.youtube.com/watch?v=NDvaRF4HQHQ
https://www.youtube.com/watch?v=NDvaRF4HQHQ
YouTube
Turning Yahoo Answers Into Beautiful Music — internet drama part 6 (feat. @CharlotteCardin )
can u get pregante...? feat. @CharlotteCardin !inspired by this classic youtube video by J.T. Sexkik: https://youtu.be/EShUeudtaFg🎧 spotify/apple music/tida...
Выпустил релиз Guile-SSH 0.15.0:
https://lists.gnu.org/archive/html/guile-user/2022-01/msg00004.html
В предыдущей версии была ошибка с обновлением версии библиотеки
Официальная справка по обновлению версии библиотек, использующих
https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info
#dev #guile #ssh
https://lists.gnu.org/archive/html/guile-user/2022-01/msg00004.html
В предыдущей версии была ошибка с обновлением версии библиотеки
libguile-ssh, не первый раз уже забываю эту версию обновить вместе с версией проекта. Для надёжности переместил строчку с версией библиотеки в самый верх configure.ac, чтобы на глаза всегда попадалась.Официальная справка по обновлению версии библиотек, использующих
libtool:https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info
#dev #guile #ssh
www.gnu.org
Updating version info (Libtool)
Next: Managing release information, Previous: Libtool’s versioning system, Up: Library interface versions [Contents][Index]
Нашёл в @gnu_guix_ru:
"Nyxt is a keyboard-driven web browser designed for power users. Inspired by Emacs and Vim, it has familiar key-bindings (Emacs, vi, CUA), and is infinitely extensible in Lisp."
https://github.com/atlas-engineer/nyxt
Браузер на Common Lisp, между прочим!
Вспоминается другой похожий браузер под названием "Conkeror", которым я пользовался когда-то давно — правда, он основывается на технологиях Mozilla и написан на JavaScript, в основном.
#lisp #software
"Nyxt is a keyboard-driven web browser designed for power users. Inspired by Emacs and Vim, it has familiar key-bindings (Emacs, vi, CUA), and is infinitely extensible in Lisp."
https://github.com/atlas-engineer/nyxt
Браузер на Common Lisp, между прочим!
Вспоминается другой похожий браузер под названием "Conkeror", которым я пользовался когда-то давно — правда, он основывается на технологиях Mozilla и написан на JavaScript, в основном.
#lisp #software
GitHub
GitHub - atlas-engineer/nyxt: Nyxt - the hacker's browser.
Nyxt - the hacker's browser. Contribute to atlas-engineer/nyxt development by creating an account on GitHub.
Добавил профилирование работы ДКА через анализ логов в Guile-SMC:
#dev #guile #lisp #smc
$ smc profile examples/parenthesis-check/out.log
Total transitions: 99
Total time: 20553 us
Stats:
read_state_transition_to: 4690 us (22.8191 %)
read_state_transition_guard: 2355 us (11.4582 %)
read_word: 1597 us (7.7702 %)
read_state_description: 1548 us (7.5317 %)
read: 1404 us (6.8311 %)
read_state_right_arrow: 1049 us (5.1039 %)
search_state_transition: 988 us (4.8071 %)
search_state_transition_to: 977 us (4.7536 %)
read_state_transition_action: 779 us (3.7902 %)
read_start_tag: 699 us (3.4010 %)
search_state_transition_guard: 639 us (3.1090 %)
search_state_transition_action: 223 us (1.0850 %)
search_state_action_arrow: 201 us (.9780 %)
read_state_action_arrow: 192 us (.9342 %)
read_end_tag: 164 us (.7979 %)
read_state: 163 us (.7931 %)
#dev #guile #lisp #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.
А вот и первые результаты использования профилировщика — нашёл узкое место в парсере PlantUML и оптимизировал его. Было (коммит fb26247):
Стало (коммит dea3e6d):
Итого ускорение работы парсера на ~25% по моим прикидкам за счёт кэша резольвера процедур на базе хэш-таблицы.
#dev #guile #lisp #smc
$ /usr/bin/smc profile examples/parenthesis-check/out.log
Total transitions: 99
Total time: 20553 us
Stats:
read_state_transition_to: 4690 us (22.8191 %)
read_state_transition_guard: 2355 us (11.4582 %)
read_word: 1597 us (7.7702 %)
read_state_description: 1548 us (7.5317 %)
read: 1404 us (6.8311 %)
read_state_right_arrow: 1049 us (5.1039 %)
search_state_transition: 988 us (4.8071 %)
search_state_transition_to: 977 us (4.7536 %)
read_state_transition_action: 779 us (3.7902 %)
read_start_tag: 699 us (3.4010 %)
search_state_transition_guard: 639 us (3.1090 %)
search_state_transition_action: 223 us (1.0850 %)
search_state_action_arrow: 201 us (.9780 %)
read_state_action_arrow: 192 us (.9342 %)
read_end_tag: 164 us (.7979 %)
read_state: 163 us (.7931 %)
Стало (коммит dea3e6d):
$ /usr/bin/smc profile examples/parenthesis-check/out-3.log
Total transitions: 99
Total time: 14925 us
Stats:
read: 3158 us (21.1591 %)
read_state_transition_guard: 1663 us (11.1424 %)
read_state_transition_to: 1483 us (9.9363 %)
read_word: 1259 us (8.4355 %)
read_state_description: 1014 us (6.7940 %)
read_state_right_arrow: 839 us (5.6214 %)
search_state_transition_to: 670 us (4.4891 %)
search_state_transition: 638 us (4.2747 %)
read_state_transition_action: 536 us (3.5913 %)
read_start_tag: 535 us (3.5846 %)
search_state_transition_guard: 428 us (2.8677 %)
read_state: 178 us (1.1926 %)
search_state_transition_action: 139 us (.9313 %)
read_state_action_arrow: 139 us (.9313 %)
search_state_action_arrow: 132 us (.8844 %)
read_end_tag: 125 us (.8375 %)
Итого ускорение работы парсера на ~25% по моим прикидкам за счёт кэша резольвера процедур на базе хэш-таблицы.
#dev #guile #lisp #smc
GitHub
smc/cli/command-profile (command-profile): Improve · artyom-poptsov/guile-smc@fb26247
* modules/smc/cli/command-profile.scm (command-profile): Improve output
formatting.
formatting.
Guile-Udev обновился до версии 0.2.3 в GNU Guix:
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=3c86268004fce434c71c27c4ee84152de087ad22
#guile #udev #guix #dev
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=3c86268004fce434c71c27c4ee84152de087ad22
#guile #udev #guix #dev
В коммитах на
При копировании в модулях происходит замена зависимостей так, чтобы они все указывали на скопированные модули. Например, было:
#guile #smc #dev #lisp #fsm
master в Guile-SMC добавил standalone-режим для компилятора машин состояний, теперь все необходимые модули копируются в отдельный каталог.$ treeДалее выполняем компиляцию в standalone-режиме:
.
├── context.scm
├── fsm.puml
├── main.scm
└── README.org
0 directories, 5 files
$ cat fsm.puml | /usr/bin/smc compile -L . -U "((context))" -m "(custom-fsm)" \Содержимое каталога теперь выглядит так:
-t guile-standalone --debug > custom-fsm.scm
$ treeОбратите внимание, что появился каталог с именем модуля, в котором указано расположить целевой ДКА — "custom-fsm". В этот каталог были скопированы модули Guile-SMC, необходимые для работы целевого ДКА, плюс зависимости из списка дополнительных модулей (
.
├── context.scm
├── custom-fsm
│ ├── context.scm
│ └── smc
│ ├── context
│ │ ├── char-context.scm
│ │ └── context.scm
│ ├── core
│ │ ├── common.scm
│ │ ├── log.scm
│ │ ├── stack.scm
│ │ ├── state.scm
│ │ └── transition.scm
│ └── fsm.scm
├── custom-fsm.scm
├── fsm.puml
├── main.scm
└── README.org
4 directories, 14 files
-U "((context))").При копировании в модулях происходит замена зависимостей так, чтобы они все указывали на скопированные модули. Например, было:
$ head -4 context.scmСтало:
(define-module (context)
#:use-module (oop goops)
#:use-module (ice-9 textual-ports)
#:use-module (smc context char-context)
$ head -4 custom-fsm/context.scmТакой автомат можно запускать без наличия Guile-SMC в системе.
(define-module (custom-fsm context)
#:use-module (oop goops)
#:use-module (ice-9 textual-ports)
#:use-module (custom-fsm smc context char-context)
#guile #smc #dev #lisp #fsm
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.
Пример профилирования ДКА в Guile-INI 0.3.0 через Guile-SMC профилировщик.
Тестовая программа:
Тестовая программа:
$ cat test.scmЗапуск парсера с выводом лога в файл:
#!/usr/bin/guile-3.0 \
-L modules -e main -s
!#
(use-modules (ice-9 pretty-print)
(oop goops)
(logging logger)
(smc core log)
(ini))
(define (main args)
(log-clear-handlers!)
(log-add-handler! (make <port-log/us>
#:port (open-output-file "ini.log")))
(let ((data (ini->scm (current-input-port) #:debug-mode? #t)))
(pretty-print data)
(scm->ini data)))
$ cat /etc/php/7.4/apache2/php.ini | ./test.scmЛог:
$ wc ini.logСобственно профилирование:
3528 21168 280750 ini.log
$ head ini.log
2022-01-07 17:06:27.338353 (DEBUG): [*] -> [read]
2022-01-07 17:06:27.339380 (DEBUG): [read] -> [read_section_title]
2022-01-07 17:06:27.339982 (DEBUG): [read_section_title] -> [read_section_content]
2022-01-07 17:06:27.340274 (DEBUG): [read_section_content] -> [read_comment]
2022-01-07 17:06:27.340710 (DEBUG): [read_comment] -> [read_section_content]
2022-01-07 17:06:27.340888 (DEBUG): [read_section_content] -> [read_comment]
2022-01-07 17:06:27.341363 (DEBUG): [read_comment] -> [read_section_content]
2022-01-07 17:06:27.341504 (DEBUG): [read_section_content] -> [read_comment]
2022-01-07 17:06:27.341728 (DEBUG): [read_comment] -> [read_section_content]
2022-01-07 17:06:27.341860 (DEBUG): [read_section_content] -> [read_comment]
$ smc profile ini.log#guile #smc #dev #lisp #fsm #profiling
Total transitions: 3528
Total time: 630510 us
Stats:
read_comment: 416994 us (66.1360 %)
read_section_content: 153088 us (24.2800 %)
read_section_property_value: 17230 us (2.7327 %)
read_section_property_key: 16376 us (2.5973 %)
trim_section_property_key: 14990 us (2.3774 %)
trim_section_property_value: 6673 us (1.0583 %)
read_section_title: 4132 us (.6553 %)
read: 1027 us (.1629 %)
GitHub
GitHub - artyom-poptsov/guile-ini: GNU Guile INI library.
GNU Guile INI library. Contribute to artyom-poptsov/guile-ini development by creating an account on GitHub.
Lisp SBCL vs Java - Which programs are fastest? | Computer Language Benchmarks Game
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/lisp.html
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/lisp.html
benchmarksgame-team.pages.debian.net
Lisp SBCL vs Java - Which programs are fastest?
Lisp SBCL Java - Which programs have fastest performance?
Со студентами программированием музыки занимаемся.
(Болт на динамик положен для улучшения звучания.)
(Болт на динамик положен для улучшения звучания.)