memory heap
368 subscribers
2.48K photos
504 videos
52 files
3.06K 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
GIF
sketch.zip
3.8 KB
Скетч для Arduino.
memory heap
GIF
Собственно проект в wokwi.com (не знаю, сколько он там будет храниться, правда):
https://wokwi.com/arduino/projects/325234963568919124?dark=1
В очередной раз вспомнилась древняя мудрость от гигантов мысли "Red Hot Chili Peppers":

"Throw away your television,
Time to make this big decision,
Throw away your television
Now!"

Уже
более 14 лет телевизор не смотрю, чего и вам советую.
Forwarded from ЗаТелеком 🌐
Еще один рескью-сет на случай жестких блокировок и отключения интернета: https://start.chatv3.ru/

Там указаны адреса локальных серверов, инструкции и дистрибутивы всякого разного софта, который предназначен как раз для таких случаев. Даже когда интернет отключат и ни один VPN не работает:

— Matrix - Element
— Delta Chat
— Briar
— браузер CENO
— NewNode VPN

Список сервисов для коммуникации по локальной сети. Они помогут наладить связь с друзьями и семьей, а также в тех случаях, когда в вашем регионе отсутствует интернет-подключение к Telegram, Whatsapp, FB и т.д. Приложения размещены на серверах по России. Если у вас есть доступ к одному из них, значит вы можете общаться друг с другом!

Максимально распространяем и вот это всё.
На случай блокировки конкретно вот этого адреса — есть план Б, не преживайте
#music

I'm out on a new road in search for a land with no name
And I never look back cause I'm walking through sunshine and rain
I'm a man who has lived in the tombs and who's broken the chains

Amen
Amen

I was blind and now I see
What if god is not for me
And I know it's time to go
I've been used and I've been played
I've been spat on and betrayed
And I know it's time to go

(Watch out) I defeat the pain
(Watch out) I'm alive again
The past is gone for good, it's time to say:

Amen
Amen
Amen
Amen

At last, I believe I will be found
In the silence of my nights
I can hear a distant voice
Someone out there is calling my name
(Watch out) I'm not afraid
Watch out
I'm beyond the dread
It's time to turn the page and love again
(Watch out) I defeat the pain
(Watch out) In a crying game
I'm leaving all my shadows behind

Amen
Amen
Amen
Amen

Tentanda via ad incognita

https://www.youtube.com/watch?v=ZYlNjQ5TTF4
Работаю над новой функциональностью для моего компилятора машин состояний — Guile-SMC.

Итоги работы: получилось сделать преобразование ДКА в код на Scheme, который никаким образом не зависит от самого Guile-SMC. На выходе получается самодостаточный код (который можно записать в одном файле), который похож на тот, который я мог бы написать руками.

Для того, чтобы получить подобный самодостаточный код, я копирую ядро Guile-SMC в выходной код, при этом сам ДКА преобразуется в подобное представление (реальный пример):
(define (run-fsm context)
""
(define (DEFAULT context)
"Count parenthesis."
(let ((event (event-source context)))
(cond ((guard:eof-object? context event)
(let ((context (action:validate context event)))
(log-debug "[~a] -> [*]" 'DEFAULT)
context))
((guard:semicolon? context event)
(let ((context (action:no-op context event)))
(log-debug "[~a] -> [~a]" 'DEFAULT 'COMMENT)
(COMMENT context)))
((guard:double-quote? context event)
(let ((context (action:no-op context event)))
(log-debug "[~a] -> [~a]" 'DEFAULT 'STRING)
(STRING context)))
((#{guard:#t}# context event)
(let ((context (action:count context event)))
(DEFAULT context))))))
(define (STRING context)
"Skip a string."
(let ((event (event-source context)))
(cond ((guard:double-quote? context event)
(let ((context (action:no-op context event)))
(log-debug "[~a] -> [~a]" 'STRING 'DEFAULT)
(DEFAULT context)))
((#{guard:#t}# context event)
(let ((context (action:no-op context event)))
(STRING context))))))
(define (COMMENT context)
"Skip a comment."
(let ((event (event-source context)))
(cond ((guard:newline? context event)
(let ((context (action:no-op context event)))
(log-debug "[~a] -> [~a]" 'COMMENT 'DEFAULT)
(DEFAULT context)))
((#{guard:#t}# context event)
(let ((context (action:no-op context event)))
(COMMENT context))))))
(DEFAULT context))


Из интересного: получилось также сделать некую "оптимизацию" выходного кода путём удаления неиспользуемых процедур.

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

Пример запуска с указанием цели компиляции:
$ cat fsm.puml | smc compile -L .  -U "((context))" -t guile-standalone -m "(custom-fsm)"  > custom-fsm.scm


#projects #guile #smc #compiler
👍1
Добавил ещё один пример кода для работы с компилятором Guile-SMC:
https://github.com/artyom-poptsov/guile-smc/tree/master/examples/compiler

На выходе, в файле fsm.scm, после выполнения следующей команды:
$ guile -L . main.scm > fsm.scm

будет самодостаточный Guile-код, который можно запустить без наличия Guile-SMC в системе:
$ echo "hello world" | guile -L . run.scm

#guile #smc #fsm #projects
Выпустил релиз Guile-SMC 0.4.0:
https://lists.gnu.org/archive/html/guile-user/2022-03/msg00041.html

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

#guile #smc #fsm #projects #dev
👍1
Forwarded from CADR SPACE (Artyom "avp" Poptsov)
Кадровчане, в это воскресенье (13-го марта) с ~11 до ~15 будем гравировать значки из алюминия на фрезере. Приглашаются все желающие, также принимаются идеи изображений для гравировки. Расскажем и покажем процесс подготовки заданий на фрезер. Приходите.

#cnc #mill
Доступ по SSH к системе с возможностью расшаривания ресурсов с клиента:
https://book.linuxboot.org/cpu/

При использовании данной команды, в сессии на сервере можно использовать ресурсы (например, файлы) с локальной машины, откуда произведено подключение.

Аналог команды cpu с операционной системы Plan9.

#tools
#music

How did I get to here?
A random chain of events
Or chemical and elements
Conspiring, divining

From the star I've been pulled apart
By weightless love
And the heavy hearts
Of sadness

Oh, I was born blown minded
With an eye on oblivion
oh, I was born blown minded
With an eye on oblivion

In my heart I have lived without aught
It's been the war of attrition
Between a small-minded fool
And sublime intuition

I believe there's a meteor out there
With my name on it
Hurtling through space
And nothing can stop it

Oh, I was born blown minded
With an eye on oblivion
Oh, I was born blown minded
With an eye on oblivion


https://www.youtube.com/watch?v=rumNQRfCoqw
Выпустил релиз Guile-INI 0.4.0 — парсера INI-формата для GNU Guile:
https://lists.gnu.org/archive/html/guile-user/2022-03/msg00053.html

В новой версии обеспечена совместимость с Guile-SMC 0.4.0.

#guile #ini #parser #projects #dev