memory heap
369 subscribers
2.48K photos
508 videos
52 files
3.07K 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
memory heap
Полное интервью с Джоном Кармаком: https://www.youtube.com/watch?v=I845O57ZSy4
Досмотрел/дослушал интервью. ~5 часов Джона Кармака на 1.00x, 1.25x и 1.50x. Было очень интересно.
memory heap
Работаю над портированием Guile-ICS на мой компилятор детерминированных конечных автоматов (ДКА) Guile-SMC: https://github.com/artyom-poptsov/guile-ics Интересная задача, которая позволяет выявить недостатки Guile-SMC и понять сам процесс проектирования и…
Почти завершил работу по портированию Guile-ICS на Guile-SMC. Код получается более понятный и легко адаптируемый. Часть вопросов решается правкой ДКА в формате PlantUML, иногда даже без правки Scheme-кода.

По ходу дела похоже исправил недоработку в старой версии Guile-ICS — теперь парсер способен читать все поддерживаемые типы компонентов календаря, согласно RFC5545.

Одна из проблем, которые остались — сборка в отдельном каталоге при make distcheck не может найти некоторые файлы.

Ещё думаю, что надо в ближайшее время зарелизить новую версию Guile-SMC, чтобы было, от чего отталкиваться при работе над связанными проектами.

#guile #smc #dev #projects
Выпустил релиз Guile-SMC 0.5.0 — компилятора детерминированных конечных автоматов (ДКА) для GNU Guile:
https://github.com/artyom-poptsov/guile-smc/releases/tag/v0.5.0

Официальный анонс в списке рассылки Guile:
https://lists.gnu.org/archive/html/guile-user/2022-08/msg00071.html

Основные возможности:
- Таблица переходов между состояниями может быть автоматически проверена на наличие тупиковых и недостижимых состояний.
- ДКА Guile-SMC при работе собирают статистику — можно узнать, сколько шагов и переходов делала машина состояний при работе.
- Guile-SMC включает в себя профилировщик, который позволяет по логам работы ДКА узнать, сколько система провела в каждом состоянии времени и какой процент от общего времени работы это составляет. Это позволяет находить "узкие места" и оптимизировать ДКА на основе цифр, полученных в реальной работе.
- Поддержка разных "целей" для компиляции — есть три цели: обычная "guile", которая даёт на выходе код ДКА, который для работы будет требовать наличие Guile-SMC в целевой системе; "автономный" режим ("guile-standalone"), который позволяет получить на выходе код ДКА, который не зависит от наличия Guile-SMC в целевой системе (и также по виду близок к тому, который мог бы быть написан в ручном режиме, где переход между состояниями по сути представлен рекурсивным вызовом процедур, каждая из которых представляет одно из состояний ДКА); и наконец "автономный" режим с сохранением Guile-SMC основы ("guile-standalone-copy"), который копирует в вместе с ДКА часть Guile-SMC, которая необходима для его работы.
- Возможность запустить ДКА напрямую из PlantUML-файла (см. команду smc run)

Цель проекта — автоматизировать и упростить разработку ДКА для различных задач (в первую очередь различных парсеров, как раз одна из областей моих интересов), избежать дублирования работы.

Основные изменения в версии 0.5.0:
- Для цели компиляции guile-standalone добавлены недостающие зависимости в целевой код.
- Для цели компиляции guile-standalone также изменён API: теперь в целевом коде процедура для запуска называется fsm-run!, которая функционирует также, как и при цели компиляции guile — что позволяет обеспечить одинаковый интерфейс запуска ДКА, который не зависит от цели компиляции.
- При компиляции для цели guile-standalone выходной код теперь имеет более аккуратный вид.
- Команда smc context теперь позволяет генерировать промежуточный контекст, который можно использовать для обеспечения минимальной зависимости от внутренней структуры модулей Guile-SMC (это необходимо для совместимости различных целей компиляции, что опять же позволяет использовать разные цели без переписывания пользовательского кода.) В будущем рекомендуется использовать именно этот промежуточный контекст, а не прямой доступ к модулям Guile-SMC.
- smc context теперь может читать описание ДКА в PlantUML из файла.
- Модуль (smc core stack) удалён.
- Исправлены справочные сообщения от команд.
- В команду smc run добавлены дополнительные проверки корректности параметров запуска.
- Документация в Texinfo обновлена.

#guile #smc #fsm #dev #projects
memory heap pinned «Выпустил релиз Guile-SMC 0.5.0 — компилятора детерминированных конечных автоматов (ДКА) для GNU Guile: https://github.com/artyom-poptsov/guile-smc/releases/tag/v0.5.0 Официальный анонс в списке рассылки Guile: https://lists.gnu.org/archive/html/guile-user/2022…»
memory heap
Выпустил релиз Guile-SMC 0.5.0 — компилятора детерминированных конечных автоматов (ДКА) для GNU Guile: https://github.com/artyom-poptsov/guile-smc/releases/tag/v0.5.0 Официальный анонс в списке рассылки Guile: https://lists.gnu.org/archive/html/guile-user/2022…
И вот выяснилось, что логирование в Guile-SMC надо переделывать, поскольку при сборке в GNU Guix оказывается, что syslog недоступен, приходится патчить модуль логирования. Проблема решена, но осадок остался.

К сожалению, система логирования в Guile, на мой взгляд, находится в зачаточном состоянии — вот кстати, одна из возможных тем для полезного проекта: сделать нормальную систему логирования, как в популярных ЯП (стоит наверное посмотреть в сторону Java для вдохновения, или какого-нибудь C/C++.)

Если кто знает больше про системы логирования в GNU Guile/Scheme, киньте в меня ссылкой. Может, какой-то стандарт, мне неведомый есть (напр. SRFI)? Также интересен опыт использования подсистем логирования в других функциональных языках (Common Lisp, к примеру.)

Из достаточно интересных систем логирования для C/C++/C#/Python, с которыми довелось работать, могу назвать libP7-Baical:
https://baical.net/

Но официальный процесс разработки не прозрачен (библиотека распространяется в виде архивов с исходным кодом, доступа к репозиторию нет), и продвинутая часть инструментов анализа логов проприетарная (хотя сама библиотека под GNU LGPL.)

Немудрено, что появляются форки, вроде такого:
https://github.com/CMakePorts/libp7-baical

В общем, вроде и круто, но если копнуть глубже — есть недостаки (впрочем, как и везде.) Я бы мог написать обёртку вокруг P7 Baical для GNU Guile, однако это ещё один крупный проект, который сейчас тянуть в одиночку не хотелось бы (но, возможно, придётся.)

Из систем логирования ещё стоит отметить библиотеку Qt — у них там реально продуманная инфраструктура в плане модулей (взять тот же механизм IPC a.k.a. "сигналы/слоты", который просто огонь.)

Завершая данные размышления могу сказать, что двигателем для полезных и продуманных вещей обычно является практическая необходимость (и зачастую коммерческая, чего уж тут.) Когда GNU Guile выйдет на уровень популярности, сравнимый с JavaScript/Python, сразу вопросы с ключевыми модулями будут решаться быстрее (GNU Guix здесь имеет неплохой шанс способствовать этому.)

#gnu #guile #dev #thoughts
👍1
Ещё один генератор конечных автоматов:
https://en.wikipedia.org/wiki/Ragel

#fsm
Во FreeCAD параметр Shape.Volume задаётся в кубических миллиметрах.
Чтобы пересчитать это в систему СИ, надо умножить это число на 1E-9, или же разделить на 1'000'000.

Вот так это выглядит в консоли Python внутри FreeCAD:
>>> obj = doc.getObject("some-object")
>>> obj.Shape.Volume / 1000000
0.004515176998353076

#freecad #notes
👍3
memory heap
Во FreeCAD параметр Shape.Volume задаётся в кубических миллиметрах. Чтобы пересчитать это в систему СИ, надо умножить это число на 1E-9, или же разделить на 1'000'000. Вот так это выглядит в консоли Python внутри FreeCAD: >>> obj = doc.getObject("some-object")…
Попытка посчитать характеристики деталей сборки во FreeCAD.

Считается объём в кубических метрах, и масса в граммах.

Чтобы посчитать массу, использую формулу:
Shape.Volume / 1000 * 1.27

Где 1.27 — плотность PETG.

Сборка выполнена на верстаке A2Plus. Для вывода информации по сборке используется дополнение FreeCAD Reporting.

В общем виде, запрос выглядит так:
select Label, sourceFile as 'File', Shape.Volume / 1000000 as 'Volume (m^3)', Shape.Volume / 1270  as 'Mass (g)' from document where sourceFile != Null

#freecad #notes
memory heap
Попытка посчитать характеристики деталей сборки во FreeCAD. Считается объём в кубических метрах, и масса в граммах. Чтобы посчитать массу, использую формулу: Shape.Volume / 1000 * 1.27 Где 1.27 — плотность PETG. Сборка выполнена на верстаке A2Plus. Для…
Разумеется, нет цели напечатать полностью все детали сборки на 3D-принтере, это был просто эксперимент, чтобы понять процесс работы с верстаком A2Plus и дополнением FreeCAD Reporting.

Результат просто огонь, хотя я предполагаю, что где-то мог допустить ошибки.

Также при рассчёте веса гипотетической напечатанной детали не учитывается тот факт, что 3D-печать обычно не делается со 100%-м заполнением, и фактический вес изделия будет в несколько раз меньше.

На фото — вид сборки, по которой выполнялся запрос в Reporting.

Версия FreeCAD, кстати — 0.20.1, установлен из GNU Guix на Ubuntu 22.04.

#freecad #notes
#music

Opeth — "In My Time of Need" (Live 2018)
https://www.youtube.com/watch?v=LlrwHuIffGE

Очень красивая композиция, в красивом исполнении.

Текст песни:
I can't see the meaning of this life I'm leading
I try to forget you as you forgot me
This time there is nothing left for you to take
This is goodbye
Summer is miles and miles away
And no one would ask me to stay
And I should contemplate this change
To ease the pain
And I should step out of the rain
Turn away
Close to ending it all
I am drifting through the stages
Of the rapture born within this loss
Thoughts of death inside
Tear me apart from the core of my soul
Summer is miles and miles away
And no one would ask me to stay
And I should contemplate this change
To ease the pain
And I should step out of the rain
Turn away
At times the
Dark's fading slowly
But it never sustains
Would someone watch over me
In my time of need
Summer is miles and miles away
And no one would ask me to stay
And I should contemplate this change
To ease the pain
And I should step out of the rain
Turn away
Пробую смоделировать крышку на аккумуляторный отсек велосипеда. Работы ещё много, но вот промежуточный результат.

#freecad
Оригинал.
Очень красивый — в музыкальном и визуальном плане — клип Марии Франц и её проекта EUZEN:
https://www.youtube.com/watch?v=oq7oCR8l8Z0

Мария Франц также является вокалисткой в группе "техно-викингов" (как говорит один мой друг) — Heilung:
https://www.youtube.com/watch?v=GPV38e7yfSo

#music
This media is not supported in your browser
VIEW IN TELEGRAM
Сегодня приготовил соевое мясо -- можно сказать, одно из моих фирменных блюд.

#cooking
👍3