memory heap
375 subscribers
2.56K photos
526 videos
52 files
3.16K 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-SMC теперь умеет показывать статистику резольвера процедур — эта функциональность встроена в утилиту smc, которая устанавливается вместе с Guile-SMC.

Например, следующая команда, как можно видеть, показывать, какие процедуры удалось разрезольвить из модулей. а какие — нет:

$ cat ../guile-ini/modules/ini/fsm.puml | smc context -r 
;;; Resolver status:
;;; #<directory (smc puml) 563c6a7af500>
;;; #<procedure #{guard:#t}# (ctx event)>
;;; #<procedure action:no-op (ctx event)>
;;; #<procedure action:store (ctx event)>
;;; #<procedure action:syntax-error (ctx ch)>
;;; #<procedure action:update-stanza (ctx event)>
;;; #<procedure guard:eof-object? (ctx ch)>
;;; #<procedure guard:equals-sign? (ctx ch)>
;;; #<procedure guard:left-square-bracket? (ctx ch)>
;;; #<procedure guard:letter? (ctx ch)>
;;; #<procedure guard:newline? (ctx ch)>
;;; #<procedure guard:right-square-bracket? (ctx ch)>
;;; #<procedure guard:space? (ctx ch)>
;;;
;;; Unresolved procedures:
;;; action:start-section
;;; action:append-comment
;;; action:append-property
;;; guard:comment?
;;; guard:comment/read?



Далее хочу добавить функциональность, позволяющую генерировать заготовку контекста исходя из описания ДКА в PlantUML.
memory heap
Guile-SMC теперь умеет показывать статистику резольвера процедур — эта функциональность встроена в утилиту smc, которая устанавливается вместе с Guile-SMC. Например, следующая команда, как можно видеть, показывать, какие процедуры удалось разрезольвить из…
Сделал генерацию шаблона контекста на основе описания ДКА. На примере Guile-INI:

$ cat ../guile-ini/modules/ini/fsm.puml | smc context -G "(context)"
(define-module
(context)
#:export
(action:start-section
action:append-comment
action:append-property
guard:comment?
guard:comment/read?))




;; Guards.
(define (guard:comment? ctx event) #t)

(define (guard:comment/read? ctx event) #t)




;; Actions.
(define (action:start-section ctx event) ctx)

(define (action:append-comment ctx event) ctx)

(define (action:append-property ctx event) ctx)
По мотивам https://t.iss.one/NeuralShit/2821

Сгенерировал в колабе несколько картинок по запросу "Cyberomnichord", с разными значениями параметра seed.

Что такое "Omnichord"?
This media is not supported in your browser
VIEW IN TELEGRAM
Завёл в колледже старый RepRap с OctoPrint. RepRap Prusa Mendel был первым 3D-принтером, который здесь появился — он был заказан из Китая в виде набора запчастей и коллективно собран сотрудниками НРТК. Это было примерно 7 лет назад.

Принтер исправно работал, мы его возили на разные мероприятия, обучали работать на нём студентов. Тем не менее, напечатанные детали для принтера, которые пришли к нему в комплекте из Китая, были плохого качества, мы постепенно их перепечатывали и ставили новые на замену.

Потом решено было его улучшить — привлекли студентов, поднатаревших в 3D-моделировании, вместе добавили дополнительное ребро жёсткости, экспериментировали с деталями.

К сожалению, из-за ряда факторов (в том числе, пандемии) пересборка принтера затянулась. Поскольку я уже имел некоторый опыт в работе с 3D-принтерами (в том числе, со сборкой), то в этом году решил довести эту задачу до конца самостоятельно. Смоделировал корпус для электроники, дабы закрепить её на корпусе принтера — через несколько неудачных дизайнов понял, как надо делать корпус, выложил получившуюся модель на Thingiverse.

Установил на принтер электронику, вместе с коллегами выяснили, как лучше крепить получившийся корпус (дополнительный крепёж скоро также опубликую.) Сейчас занимаюсь калибровкой принтера и настройкой ПО. Для подготовки заданий использую PrusaSlicer (бывший Slic3r Prusa Edition.) Задания запускаю через OctoPrint, работающий на Raspberry Pi 2 Model B.

Можно сказать, что принтер, после доработки и настройки, снова готов печатать. Хоть он и не может на данный момент посоревноваться в качестве печати с Picaso 3D Designer (который также есть в колледже), плюс RepRap в том, что он открыт, все програмы доступны подо все платформы, он легко обслуживается, более неприхотлив (думаю попробовать печатать на нём PETG, которым Picaso постоянно давится), и нагляден — все внутренности доступны для изучения, что очень важно в контексте обучения.
Ууъ! Понял, как программно во FreeCAD программно (через Python) удалить избыточные ограничения (constraints) — у объекта Sketch есть метод autoRemoveRedundants — если его вызвать, он делает как раз то, что нужно.

В итоге, программно удаление избыточных ограничений можно сделать так:
Gui.runCommand('Sketcher_SelectRedundantConstraints', 0)
for sketch in Gui.Selection.getSelection():
sketch.autoRemoveRedundants()
Под Android обновился K-9 Mail в F-Droid — интерфейс выглядит теперь более аккуратно.

K-9 Mail (Full-featured email client) - https://f-droid.org/packages/com.fsck.k9
https://www.youtube.com/watch?v=t705r8ICkRw

Примерно на 13:30 Илон Маск объясняет процесс из пяти шагов, которого он старается придерживаться в своих проектах:
1. Make your requirements less dumb — делайте ваши требования менее тупыми.
2. Try very hard to delete parts of the process — старайтесь изо всех сил удалить части процесса.
3. Simplify or optimize — упрощайте или оптимизируйте.
4. Accelerate — ускоряйтесь.
5. Automate — автоматизируйте.
Новое применение для Guile-SMC:
$ cat ~/Pictures/image.png | ./test.scm 
<15>Aug 7 16:35:32 guile-smc: [read_header] -> [read_chunk]
<15>Aug 7 16:35:32 guile-smc: [read_chunk] -> [handle_ihdr_chunk]
<15>Aug 7 16:35:32 guile-smc: [handle_ihdr_chunk] -> [read_chunk]
<15>Aug 7 16:35:32 guile-smc: [read_chunk] -> [handle_iccp_chunk]
<15>Aug 7 16:35:32 guile-smc: [handle_iccp_chunk] -> [read_chunk]
<15>Aug 7 16:35:32 guile-smc: [read_chunk] -> [handle_phys_chunk]
<15>Aug 7 16:35:32 guile-smc: [handle_phys_chunk] -> [read_chunk]
<15>Aug 7 16:35:32 guile-smc: [read_chunk] -> [handle_time_chunk]
<15>Aug 7 16:35:32 guile-smc: [handle_time_chunk] -> [read_chunk]
<15>Aug 7 16:35:32 guile-smc: [read_chunk] -> [handle_text_chunk]
<15>Aug 7 16:35:32 guile-smc: [handle_text_chunk] -> [read_chunk]
<15>Aug 7 16:35:32 guile-smc: [read_chunk] -> [handle_idat_chunk]
<15>Aug 7 16:35:32 guile-smc: [handle_idat_chunk] -> [read_chunk]
<15>Aug 7 16:35:32 guile-smc: [read_chunk] -> [handle_iend_chunk]
<15>Aug 7 16:35:32 guile-smc: [handle_iend_chunk] -> [*]
PNG chunks:
#<png-chunk #(73 72 68 82) IHDR: Image header 5625db224750>
#<png-chunk #(105 67 67 80) iCCP: Embedded ICC profile 5625db260cc0>
#<png-chunk #(112 72 89 115) pHYs: Physical pixel dimensions 5625db260240>
#<png-chunk #(116 73 77 69) tIME: Image last-modification time 5625db2767b0>
#<png-chunk #(116 69 88 116) tEXT: Textual data 5625db286d20>
#<png-chunk #(73 68 65 84) IDAT: Image data 5625db2862a0>
#<png-chunk #(73 69 78 68) IEND: Image trailer 5625db2e8810>