В 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?
Со студентами программированием музыки занимаемся.
(Болт на динамик положен для улучшения звучания.)
(Болт на динамик положен для улучшения звучания.)
This media is not supported in your browser
VIEW IN TELEGRAM
Ещё одно видео с практики -- изучали со студентами широтно-импульсную модуляцию (ШИМ.)
А так мы разбирали инкремент и декремент на практике по Arduino в НРТК.
Случай из практики прошлых лет: пришёл студент на задачу экзамена, говорю ему -- напиши цикл. Он написал. Спрашиваю, а что такое у тебя в коде за i++. Отвечает -- это, мол, "экскремент". С тех пор всем студентам эту байку рассказываю -- помогает в запоминании.
Чтобы в коде небыло "экскрементов" учите термины правильно! :-)
Случай из практики прошлых лет: пришёл студент на задачу экзамена, говорю ему -- напиши цикл. Он написал. Спрашиваю, а что такое у тебя в коде за i++. Отвечает -- это, мол, "экскремент". С тех пор всем студентам эту байку рассказываю -- помогает в запоминании.
Чтобы в коде небыло "экскрементов" учите термины правильно! :-)
Сравнение вычислительной мощности современных компьютеров и компьютеров прошлого: https://spectrum.ieee.org/ibm-mainframe
IEEE Spectrum
A Quadrillion Mainframes on Your Lap
Your laptop is way more powerful than you might realize