Valhalla's Things: Emergency Camisole
Tags: madeof:atoms, craft:sewing, FreeSoftWear


#remotees
channel at work asked about WFH setups and given quite a few things changed in mine, I thought it's time to post an update.
But first, a picture!
[Colleagues] approached me to talk about a reproducibility issue they d been having with some R code. They d been running simulations that rely on generating samples from a multivariate normal distribution, and despite doing the prudent thing and using set.seed()
to control the state of the random number generator (RNG), the results were not computationally reproducible. The same code, executed on different machines, would produce different random numbers. The numbers weren t just a little bit different in the way that we ve all wearily learned to expect when you try to force computers to do mathematics. They were painfully, brutally, catastrophically, irreproducible different. Somewhere, somehow, something broke.
Thanks to David Wheeler for posting about this article on our mailing list
present attestable builds, a new paradigm to provide strong source-to-binary correspondence in software artifacts. We tackle the challenge of opaque build pipelines that disconnect the trust between source code, which can be understood and audited, and the final binary artifact, which is difficult to inspect. Our system uses modern trusted execution environments (TEEs) and sandboxed build containers to provide strong guarantees that a given artifact was correctly built from a specific source code snapshot. As such it complements existing approaches like reproducible builds which typically require time-intensive modifications to existing build configurations and dependencies, and require independent parties to continuously build and verify artifacts.The authors compare attestable builds with reproducible builds by noting an attestable build requires only minimal changes to an existing project, and offers nearly instantaneous verification of the correspondence between a given binary and the source code and build pipeline used to construct it , and proceed by determining that t he overhead (42 seconds start-up latency and 14% increase in build duration) is small in comparison to the overall build time.
However, the popular scripting language ecosystems potentially face unique issues given the systematic difference in distributed artifacts. This Systemization of Knowledge (SoK) [paper] provides an overview of existing research, aiming to highlight future directions, as well as chances to transfer existing knowledge from compiled language ecosystems. To that end, we work out key aspects in current research, systematize identified challenges for software reproducibility, and map them between the ecosystems.Ultimately, the three authors find that the literature is sparse , focusing on few individual problems and ecosystems, and therefore identify space for more critical research.
debian-policy
package in order to delve into an issue affecting Debian s support for cross-architecture compilation, multiple-architecture systems, reproducible builds SOURCE_DATE_EPOCH
environment variable and the ability to recompile already-uploaded packages to Debian with a new/updated toolchain (binNMUs). Ian identifies a specific case, specifically in the libopts25-dev
package, involving a manual page that had interesting downstream effects, potentially affecting backup systems. The bug generated a large number of replies, some of which have references to similar or overlapping issues, such as this one from 2016/2017.
There is now a Reproducibility Status link for each app on f-droid.org
, listed on every app s page. Our verification server shows or based on its build results, where means our rebuilder reproduced the same APK file and means it did not. The IzzyOnDroid repository has developed a more elaborate system of badges which displays a for each rebuilder. Additionally, there is a sketch of a five-level graph to represent some aspects about which processes were run.
Hans compares the approach with projects such as Arch Linux and Debian that provide developer-facing tools to give feedback about reproducible builds, but do not display information about reproducible builds in the user-facing interfaces like the package management GUIs.
295
, 296
and 297
to Debian:
--walk
argument being available, and only add that argument on newer versions after we test for that. [ ]lzma
comparator from Will Hollywood. [ ][ ]0.6.0-1
.
Lastly, Vagrant Cascadian updated diffoscope in GNU Guix to version 296 [ ][ ] and 297 [ ][ ], and disorderfs to version 0.6.0 [ ][ ].
SOURCE_DATE_EPOCH
example page [ ]SOURCE_DATE_EPOCH
snippet from Sebastian Davis, which did not handle non-integer values correctly. [ ]LICENSE
file. [ ]SOURCE_DATE_EPOCH
page. [ ]SOURCE_DATE_EPOCH
page. [ ]jenkins.debian.net
server AMD Opteron to Intel Haswell CPUs. Thanks to IONOS for hosting this server since 2012.i386
architecture has been dropped from tests.reproducible-builds.org. This is because that, with the upcoming release of Debian trixie, i386
is no longer supported as a regular architecture there will be no official kernel and no Debian installer for i386
systems. As a result, a large number of nodes hosted by Infomaniak have been retooled from i386
to amd64
.ionos17-amd64.debian.net
, which is used for verifying packages for all.reproduce.debian.net (hosted by IONOS) has had its memory increased from 40 to 64GB, and the number of cores doubled to 32 as well. In addition, two nodes generously hosted by OSUOSL have had their memory doubled to 16GB.riscv64
architecture boards, so now we have seven such nodes, all with 16GB memory and 4 cores that are verifying packages for riscv64.reproduce.debian.net. Many thanks to PLCT Lab, ISCAS for providing those.ppc64el
architecture due to RAM size. [ ]nginx_request
and nginx_status
with the Munin monitoring system. [ ][ ]rebuilderd-cache-cleanup.service
and run it daily via timer. [ ][ ][ ][ ][ ]$HOSTNAME
variable in the rebuilderd logfiles. [ ]equivs
package on all worker nodes. [ ][ ]sudo
tool to fix up permission issues. [ ][ ]riscv64
, FreeBSD, etc.. [ ][ ][ ][ ]ntpsec-ntpdate
(instead of ntpdate
) as the former is available on Debian trixie and bookworm. [ ][ ]ControlPath
for all nodes. [ ]munin
user uses the same SSH config as the jenkins
user. [ ]debrebuild
line number. [ ]rebuilder-debian.sh
script. [ ] ]rebuildctl
to sync only arch-specific packages. [ ][ ]cmake/musescore
netdiscover
autotrace
, ck
, cmake
, crash
, cvsps
, gexif
, gq
, gtkam
, ibus-table-others
, krb5-appl
, ktoblzcheck-data
, leafnode
, lib2geom
, libexif-gtk
, libyui
, linkloop
, meson
, MozillaFirefox
, ncurses
, notify-sharp
, pcsc-acr38
, pcsc-asedriveiiie-serial
, pcsc-asedriveiiie-usb
, pcsc-asekey
, pcsc-eco5000
, pcsc-reflex60
, perl-Crypt-RC
, python-boto3
, python-gevent
, python-pytest-localserver
, qt6-tools
, seamonkey
, seq24
, smictrl
, sobby
, solfege
, urfkill
, uwsgi
, wsmancli
, xine-lib
, xkeycaps
, xquarto
, yast-control-center
, yast-ruby-bindings
and yast
libmfx-gen
, libmfx
, liboqs
jabber-muc
.golang-github-lucas-clemente-quic-go
.--mtime
and --clamp-mtime
to bsdtar
.python3
requested enabling a LTO-adjacent option that should improve build reproducibility.freezegun
for a timezone issue causing unit tests to fail during testing.tutanota
in an attempt to resolve a long-standing reproducibility issue.0xFFFF
: Use SOURCE_DATE_EPOCH
for date in manual pages.#reproducible-builds
on irc.oftc.net
.
rb-general@lists.reproducible-builds.org
built on Rust with (Bitcoin style) encryption, whole new architecture. Maybe this time they've got it right?
Series: | Library Trilogy #3 |
Publisher: | ACE |
Copyright: | 2025 |
ISBN: | 0-593-43799-3 |
Format: | Kindle |
Pages: | 367 |
venv
on a Debian stable container. Voice requires a lot more binary components, and I want to have voice satellites in more than one location, so I set about trying to understand a bit better what I was deploying, and actually building the binary bits myself.
This is the start of a write-up of that. I ll break it into a bunch of posts, trying to cover one bit in each, because otherwise this will get massive. Let s start with some requirements:
$ diff -u m5stack-atom-echo.yaml assistant.yaml
--- m5stack-atom-echo.yaml 2025-04-18 13:41:21.812766112 +0100
+++ assistant.yaml 2025-01-20 17:33:24.918585244 +0000
@@ -1,7 +1,7 @@
substitutions:
- name: m5stack-atom-echo
+ name: study-atom-echo
friendly_name: M5Stack Atom Echo
- micro_wake_word_model: okay_nabu # alexa, hey_jarvis, hey_mycroft are also supported
+ micro_wake_word_model: hey_jarvis # alexa, hey_jarvis, hey_mycroft are also supported
esphome:
name: $ name
@@ -16,15 +16,26 @@
version: 4.4.8
platform_version: 5.4.0
+# Enable logging
logger:
+
+# Enable Home Assistant API
api:
+ encryption:
+ key: "TGlrZVRoaXNJc1JlYWxseUl0Rm9vbGlzaFBlb3BsZSE="
ota:
- platform: esphome
- id: ota_esphome
+ password: "itsnotarealthing"
wifi:
+ ssid: "My Wifi Goes Here"
+ password: "AndThePasswordGoesHere"
+
+ # Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
+ ssid: "Study-Atom-Echo Fallback Hotspot"
+ password: "ThisIsRandom"
captive_portal:
venv
and get it to build + flash the image for you:
noodles@sevai:~$ python3 -m venv esphome-atom-echo
noodles@sevai:~$ . esphome-atom-echo/bin/activate
(esphome-atom-echo) noodles@sevai:~$ cd esphome-atom-echo/
(esphome-atom-echo) noodles@sevai:~/esphome-atom-echo$ pip install esphome==2024.12.4
Collecting esphome==2024.12.4
Using cached esphome-2024.12.4-py3-none-any.whl (4.1 MB)
Successfully installed FontTools-4.57.0 PyYAML-6.0.2 appdirs-1.4.4 attrs-25.3.0 bottle-0.13.2 defcon-0.12.1 esphome-2024.12.4 esphome-dashboard-20241217.1 freetype-py-2.5.1 fs-2.4.16 gflanguages-0.7.3 glyphsLib-6.10.1 glyphsets-1.0.0 openstep-plist-0.5.0 pillow-10.4.0 platformio-6.1.16 protobuf-3.20.3 puremagic-1.27 ufoLib2-0.17.1 unicodedata2-16.0.0
(esphome-atom-echo) noodles@sevai:~/esphome-atom-echo$ esphome compile assistant.yaml
INFO ESPHome 2024.12.4
INFO Reading configuration assistant.yaml...
INFO Updating https://github.com/esphome/esphome.git@pull/5230/head
INFO Updating https://github.com/jesserockz/esphome-components.git@None
Linking .pioenvs/study-atom-echo/firmware.elf
/home/noodles/.platformio/packages/toolchain-xtensa-esp32@8.4.0+2021r2-patch5/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: missing --end-group; added as last command line option
RAM: [= ] 10.6% (used 34632 bytes from 327680 bytes)
Flash: [======== ] 79.8% (used 1463813 bytes from 1835008 bytes)
Building .pioenvs/study-atom-echo/firmware.bin
Creating esp32 image...
Successfully created esp32 image.
esp32_create_combined_bin([".pioenvs/study-atom-echo/firmware.bin"], [".pioenvs/study-atom-echo/firmware.elf"])
Wrote 0x176fb0 bytes to file /home/noodles/esphome-atom-echo/.esphome/build/study-atom-echo/.pioenvs/study-atom-echo/firmware.factory.bin, ready to flash to offset 0x0
esp32_copy_ota_bin([".pioenvs/study-atom-echo/firmware.bin"], [".pioenvs/study-atom-echo/firmware.elf"])
==================================================================================== [SUCCESS] Took 130.57 seconds ====================================================================================
INFO Successfully compiled program.
(esphome-atom-echo) noodles@sevai:~/esphome-atom-echo$ esphome upload --device /dev/serial/by-id/usb-Hades2001_M5stack_9552AF8367-if00-port0 assistant.yaml
INFO ESPHome 2024.12.4
INFO Reading configuration assistant.yaml...
INFO Updating https://github.com/esphome/esphome.git@pull/5230/head
INFO Updating https://github.com/jesserockz/esphome-components.git@None
INFO Upload with baud rate 460800 failed. Trying again with baud rate 115200.
esptool.py v4.7.0
Serial port /dev/serial/by-id/usb-Hades2001_M5stack_9552AF8367-if00-port0
Connecting....
Chip is ESP32-PICO-D4 (revision v1.1)
Features: WiFi, BT, Dual Core, 240MHz, Embedded Flash, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 64:b7:08:8a:1b:c0
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash will be erased from 0x00010000 to 0x00176fff...
Flash will be erased from 0x00001000 to 0x00007fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x00009000 to 0x0000afff...
Compressed 1470384 bytes to 914252...
Wrote 1470384 bytes (914252 compressed) at 0x00010000 in 82.0 seconds (effective 143.5 kbit/s)...
Hash of data verified.
Compressed 25632 bytes to 16088...
Wrote 25632 bytes (16088 compressed) at 0x00001000 in 1.8 seconds (effective 113.1 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 134...
Wrote 3072 bytes (134 compressed) at 0x00008000 in 0.1 seconds (effective 383.7 kbit/s)...
Hash of data verified.
Compressed 8192 bytes to 31...
Wrote 8192 bytes (31 compressed) at 0x00009000 in 0.1 seconds (effective 813.5 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
INFO Successfully uploaded program.
$ picocom --quiet --imap lfcrlf --baud 115200 /dev/serial/by-id/usb-Hades2001_M5stack_9552AF8367-if00-port0
I (29) boot: ESP-IDF 4.4.8 2nd stage bootloader
I (29) boot: compile time 17:31:08
I (29) boot: Multicore bootloader
I (32) boot: chip revision: v1.1
I (36) boot.esp32: SPI Speed : 40MHz
I (40) boot.esp32: SPI Mode : DIO
I (45) boot.esp32: SPI Flash Size : 4MB
I (49) boot: Enabling RNG early entropy source...
I (55) boot: Partition Table:
I (58) boot: ## Label Usage Type ST Offset Length
I (66) boot: 0 otadata OTA data 01 00 00009000 00002000
I (73) boot: 1 phy_init RF data 01 01 0000b000 00001000
I (81) boot: 2 app0 OTA app 00 10 00010000 001c0000
I (88) boot: 3 app1 OTA app 00 11 001d0000 001c0000
I (96) boot: 4 nvs WiFi data 01 02 00390000 0006d000
I (103) boot: End of partition table
I (107) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=58974h (362868) map
I (247) esp_image: segment 1: paddr=0006899c vaddr=3ffb0000 size=03400h ( 13312) load
I (253) esp_image: segment 2: paddr=0006bda4 vaddr=40080000 size=04274h ( 17012) load
I (260) esp_image: segment 3: paddr=00070020 vaddr=400d0020 size=f5cb8h (1006776) map
I (626) esp_image: segment 4: paddr=00165ce0 vaddr=40084274 size=112ach ( 70316) load
I (665) boot: Loaded app from partition at offset 0x10000
I (665) boot: Disabling RNG early entropy source...
I (677) cpu_start: Multicore app
I (677) cpu_start: Pro cpu up.
I (677) cpu_start: Starting app cpu, entry point is 0x400825c8
I (0) cpu_start: App cpu up.
I (695) cpu_start: Pro cpu start user code
I (695) cpu_start: cpu freq: 160000000
I (695) cpu_start: Application information:
I (700) cpu_start: Project name: study-atom-echo
I (705) cpu_start: App version: 2024.12.4
I (710) cpu_start: Compile time: Apr 18 2025 17:29:39
I (716) cpu_start: ELF file SHA256: 1db4989a56c6c930...
I (722) cpu_start: ESP-IDF: 4.4.8
I (727) cpu_start: Min chip rev: v0.0
I (732) cpu_start: Max chip rev: v3.99
I (737) cpu_start: Chip rev: v1.1
I (742) heap_init: Initializing. RAM available for dynamic allocation:
I (749) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (755) heap_init: At 3FFB8748 len 000278B8 (158 KiB): DRAM
I (761) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (767) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (774) heap_init: At 40095520 len 0000AAE0 (42 KiB): IRAM
I (781) spi_flash: detected chip: gd
I (784) spi_flash: flash io: dio
I (790) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
[I][logger:171]: Log initialized
[C][safe_mode:079]: There have been 0 suspected unsuccessful boot attempts
[D][esp32.preferences:114]: Saving 1 preferences to flash...
[D][esp32.preferences:143]: Saving 1 preferences to flash: 0 cached, 1 written, 0 failed
[I][app:029]: Running through setup()...
[C][esp32_rmt_led_strip:021]: Setting up ESP32 LED Strip...
[D][template.select:014]: Setting up Template Select
[D][template.select:023]: State from initial (could not load stored index): On device
[D][select:015]: 'Wake word engine location': Sending state On device (index 1)
[D][esp-idf:000]: I (100) gpio: GPIO[39] InputEn: 1 OutputEn: 0 OpenDrain: 0 Pullup: 0 Pulldown: 0 Intr:0
[D][binary_sensor:034]: 'Button': Sending initial state OFF
[C][light:021]: Setting up light 'M5Stack Atom Echo 8a1bc0'...
[D][light:036]: 'M5Stack Atom Echo 8a1bc0' Setting:
[D][light:041]: Color mode: RGB
[D][template.switch:046]: Restored state ON
[D][switch:012]: 'Use listen light' Turning ON.
[D][switch:055]: 'Use listen light': Sending state ON
[D][light:036]: 'M5Stack Atom Echo 8a1bc0' Setting:
[D][light:047]: State: ON
[D][light:051]: Brightness: 60%
[D][light:059]: Red: 100%, Green: 89%, Blue: 71%
[D][template.switch:046]: Restored state OFF
[D][switch:016]: 'timer_ringing' Turning OFF.
[D][switch:055]: 'timer_ringing': Sending state OFF
[C][i2s_audio:028]: Setting up I2S Audio...
[C][i2s_audio.microphone:018]: Setting up I2S Audio Microphone...
[C][i2s_audio.speaker:096]: Setting up I2S Audio Speaker...
[C][wifi:048]: Setting up WiFi...
[D][esp-idf:000]: I (206) wifi:
[D][esp-idf:000]: wifi driver task: 3ffc8544, prio:23, stack:6656, core=0
[D][esp-idf:000]:
[D][esp-idf:000][wifi]: I (1238) system_api: Base MAC address is not set
[D][esp-idf:000][wifi]: I (1239) system_api: read default base MAC address from EFUSE
[D][esp-idf:000][wifi]: I (1274) wifi:
[D][esp-idf:000][wifi]: wifi firmware version: ff661c3
[D][esp-idf:000][wifi]:
[D][esp-idf:000][wifi]: I (1274) wifi:
[D][esp-idf:000][wifi]: wifi certification version: v7.0
[D][esp-idf:000][wifi]:
[D][esp-idf:000][wifi]: I (1286) wifi:
[D][esp-idf:000][wifi]: config NVS flash: enabled
[D][esp-idf:000][wifi]:
[D][esp-idf:000][wifi]: I (1297) wifi:
[D][esp-idf:000][wifi]: config nano formating: disabled
[D][esp-idf:000][wifi]:
[D][esp-idf:000][wifi]: I (1317) wifi:
[D][esp-idf:000][wifi]: Init data frame dynamic rx buffer num: 32
[D][esp-idf:000][wifi]:
[D][esp-idf:000][wifi]: I (1338) wifi:
[D][esp-idf:000][wifi]: Init static rx mgmt buffer num: 5
[D][esp-idf:000][wifi]:
[D][esp-idf:000][wifi]: I (1348) wifi:
[D][esp-idf:000][wifi]: Init management short buffer num: 32
[D][esp-idf:000][wifi]:
[D][esp-idf:000][wifi]: I (1368) wifi:
[D][esp-idf:000][wifi]: Init dynamic tx buffer num: 32
[D][esp-idf:000][wifi]:
[D][esp-idf:000][wifi]: I (1389) wifi:
[D][esp-idf:000][wifi]: Init static rx buffer size: 1600
[D][esp-idf:000][wifi]:
[D][esp-idf:000][wifi]: I (1399) wifi:
[D][esp-idf:000][wifi]: Init static rx buffer num: 10
[D][esp-idf:000][wifi]:
[D][esp-idf:000][wifi]: I (1419) wifi:
[D][esp-idf:000][wifi]: Init dynamic rx buffer num: 32
[D][esp-idf:000][wifi]:
[D][esp-idf:000]: I (1441) wifi_init: rx ba win: 6
[D][esp-idf:000]: I (1441) wifi_init: tcpip mbox: 32
[D][esp-idf:000]: I (1450) wifi_init: udp mbox: 6
[D][esp-idf:000]: I (1450) wifi_init: tcp mbox: 6
[D][esp-idf:000]: I (1460) wifi_init: tcp tx win: 5760
[D][esp-idf:000]: I (1471) wifi_init: tcp rx win: 5760
[D][esp-idf:000]: I (1481) wifi_init: tcp mss: 1440
[D][esp-idf:000]: I (1481) wifi_init: WiFi IRAM OP enabled
[D][esp-idf:000]: I (1491) wifi_init: WiFi RX IRAM OP enabled
[C][wifi:061]: Starting WiFi...
[C][wifi:062]: Local MAC: 64:B7:08:8A:1B:C0
[D][esp-idf:000][wifi]: I (1513) phy_init: phy_version 4791,2c4672b,Dec 20 2023,16:06:06
[D][esp-idf:000][wifi]: I (1599) wifi:
[D][esp-idf:000][wifi]: mode : sta (64:b7:08:8a:1b:c0)
[D][esp-idf:000][wifi]:
[D][esp-idf:000][wifi]: I (1600) wifi:
[D][esp-idf:000][wifi]: enable tsf
[D][esp-idf:000][wifi]:
[D][esp-idf:000][wifi]: I (1605) wifi:
[D][esp-idf:000][wifi]: Set ps type: 1
[D][esp-idf:000][wifi]:
[D][wifi:482]: Starting scan...
[D][esp32.preferences:114]: Saving 1 preferences to flash...
[D][esp32.preferences:143]: Saving 1 preferences to flash: 1 cached, 0 written, 0 failed
[W][micro_wake_word:151]: Wake word detection can't start as the component hasn't been setup yet
[D][esp-idf:000][wifi]: I (1646) wifi:
[D][esp-idf:000][wifi]: Set ps type: 1
[D][esp-idf:000][wifi]:
[W][component:157]: Component wifi set Warning flag: scanning for networks
[I][wifi:617]: WiFi Connected!
[D][wifi:626]: Disabling AP...
[C][api:026]: Setting up Home Assistant API server...
[C][micro_wake_word:062]: Setting up microWakeWord...
[C][micro_wake_word:069]: Micro Wake Word initialized
[I][app:062]: setup() finished successfully!
[W][component:170]: Component wifi cleared Warning flag
[W][component:157]: Component api set Warning flag: unspecified
[I][app:100]: ESPHome version 2024.12.4 compiled on Apr 18 2025, 17:29:39
[C][logger:185]: Logger:
[C][logger:186]: Level: DEBUG
[C][logger:188]: Log Baud Rate: 115200
[C][logger:189]: Hardware UART: UART0
[C][esp32_rmt_led_strip:187]: ESP32 RMT LED Strip:
[C][esp32_rmt_led_strip:188]: Pin: 27
[C][esp32_rmt_led_strip:189]: Channel: 0
[C][esp32_rmt_led_strip:214]: RGB Order: GRB
[C][esp32_rmt_led_strip:215]: Max refresh rate: 0
[C][esp32_rmt_led_strip:216]: Number of LEDs: 1
[C][template.select:065]: Template Select 'Wake word engine location'
[C][template.select:066]: Update Interval: 60.0s
[C][template.select:069]: Optimistic: YES
[C][template.select:070]: Initial Option: On device
[C][template.select:071]: Restore Value: YES
[C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Button'
[C][gpio.binary_sensor:016]: Pin: GPIO39
[C][light:092]: Light 'M5Stack Atom Echo 8a1bc0'
[C][light:094]: Default Transition Length: 0.0s
[C][light:095]: Gamma Correct: 2.80
[C][template.switch:068]: Template Switch 'Use listen light'
[C][template.switch:091]: Restore Mode: restore defaults to ON
[C][template.switch:057]: Optimistic: YES
[C][template.switch:068]: Template Switch 'timer_ringing'
[C][template.switch:091]: Restore Mode: always OFF
[C][template.switch:057]: Optimistic: YES
[C][factory_reset.button:011]: Factory Reset Button 'Factory reset'
[C][factory_reset.button:011]: Icon: 'mdi:restart-alert'
[C][captive_portal:089]: Captive Portal:
[C][mdns:116]: mDNS:
[C][mdns:117]: Hostname: study-atom-echo-8a1bc0
[C][esphome.ota:073]: Over-The-Air updates:
[C][esphome.ota:074]: Address: study-atom-echo.local:3232
[C][esphome.ota:075]: Version: 2
[C][esphome.ota:078]: Password configured
[C][safe_mode:018]: Safe Mode:
[C][safe_mode:020]: Boot considered successful after 60 seconds
[C][safe_mode:021]: Invoke after 10 boot attempts
[C][safe_mode:023]: Remain in safe mode for 300 seconds
[C][api:140]: API Server:
[C][api:141]: Address: study-atom-echo.local:6053
[C][api:143]: Using noise encryption: YES
[C][micro_wake_word:051]: microWakeWord:
[C][micro_wake_word:052]: models:
[C][micro_wake_word:015]: - Wake Word: Hey Jarvis
[C][micro_wake_word:016]: Probability cutoff: 0.970
[C][micro_wake_word:017]: Sliding window size: 5
[C][micro_wake_word:021]: - VAD Model
[C][micro_wake_word:022]: Probability cutoff: 0.500
[C][micro_wake_word:023]: Sliding window size: 5
[D][api:103]: Accepted 192.168.39.6
[W][component:170]: Component api cleared Warning flag
[W][component:237]: Component api took a long time for an operation (58 ms).
[W][component:238]: Components should block for at most 30 ms.
[D][api.connection:1446]: Home Assistant 2024.3.3 (192.168.39.6): Connected successfully
[D][ring_buffer:034]: Created ring buffer with size 2048
[D][micro_wake_word:399]: Resetting buffers and probabilities
[D][micro_wake_word:195]: State changed from IDLE to START_MICROPHONE
[D][micro_wake_word:107]: Starting Microphone
[D][micro_wake_word:195]: State changed from START_MICROPHONE to STARTING_MICROPHONE
[D][esp-idf:000]: I (11279) I2S: DMA Malloc info, datalen=blocksize=1024, dma_buf_count=4
[D][micro_wake_word:195]: State changed from STARTING_MICROPHONE to DETECTING_WAKE_WORD
noise_psk
key you use the same string as I have under api/encryption/key
in my diff above (obviously do your own, I used dd if=/dev/urandom bs=32 count=1 base64
to generate mine).
If you re like me and a compulsive VLANer and firewaller even within your own network then you need to allow Home Assistant to connect on TCP port 6053 to the ATOM Echo, and also allow access to/from UDP port 6055 on the Echo (it ll send audio from that port to Home Assistant, then receive back audio to the same port).
At this point you can now shout Hey Jarvis, what time is it? at the Echo, and the white light will turn flashing blue (indicating it s heard the wake word). Which means we re ready to teach Home Assistant how to do something with the incoming audio.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
campus
and tlali
, and one computer pending installation, ollin
. The
credit for their names is not mine.
campus
: A mighty SPARCstation
5! Because it was the
main (and for some time, the only!) server in our campus.tlali
: A regular PC used as a Linux server. Tlali means something
like lands in n huatl, the prehispanic language spoken in central
Mexico. My workplace was Iztacala, which translates as the place
where there are white houses ; tlali and cali are related words.ollin
: was a big IBM RS/6000 system running AIX. It came to us,
probably already obsolete, as a (useless) donation from Fundaci n
UNAM; I don t recall the exact model, but it looked very much like
this one. Ran on
AIX. We had no software for it, and frankly never really got it to
be productive. Funnily, its name Ollin means movement in N huatl.
I added some servers to the lineup during the two years I was in Iztacala:tlamantli
: An Alpha
21164 server that doubled
as my desktop. Given the tradition in Iztacala of naming things in
N huatl, but trying to be somewhat funny, tlamantli
just means a
thing; I understand the word is usually bound to a quantifier.tepancuate
: A regular PC system we set up with OpenBSD as a
firewall. It means wall in N huatl.ajusco
, managed by
V ctor, named after the mountain on whose
slopes our campus was). But my only computer there was:
shmate
: , meaning old rag in yiddish. The word shmate is used like
thingy, although it would usually mean old and slightly worn-out
thingy. It was a quite nice machine, though. I had a Pentium 4 with
512MB RAM, not bad for 2003!mosca
: is my desktop. It has changed hardware several times (of
course) over the years, but it s still the same Debian Sid install I
did in January 2005 (I must have reinstalled once, when I got it
replaced by an AMD64). Its name is the Spanish name for the common
fly. I have often used it to describe my work, since I got in the early
1990s an automated bilingual translator called TRANSLATE
; it came on
seven 5.25 floppies. As a teenager, I somehow got my hands on a copy,
and installed it in my 80386SX. Fed it its own README to see how it
fared. And the first sentence made me burst in laughter: TRANSLATE
performs on the fly translation TRADUCE realiza traducci n sobre la
mosca . Starting then, I always think of on the fly as sobre la
mosca . As Groucho said, I guess Time flies like an arrow, but
fruit flies like a banana.lafa
When I got there, we didn t have any servers; for some time, I
took one of the computer lab s systems to serve our web page and
receive mail. But when we got some budget approved, we bought a
fsckin-big server. Big as in four-rack-units. Double CPUs (not
multicore, but two independent early Xeon CPUs, if I m not
mistaken. Still, it was still a 32 bits system).
(lafa
) is a
big, more flexible kind of Arab bread than pita; I loved it when I
lived in Israel. And there is an album (and song) by
Teapacks, an Israeli group I am very
fond of, hajaim shelja belafa (your life in a lafa), saying, hey,
brother! Your life is in a lafa. You throw everything in a big
pita. You didn t have time to chew, you already swallowed it .joma
: Our firewall.
means wall in Hebrew.baktun
: lafa
was great, but over the years, it got old. After many
years, I finally got the Institute to buy a second server. We got it in
December 2012. There was a lot of noise around then because the world
was supposed to end on 2012.12.21, as the Mayan calendar reached a
full long cycle. This long cycle is called /baktun/. So, it was fitting
as the name of the new server.teom
: As lafa
was almost immediately decomissioned and turned into
a virtual machine in the much bigger baktun,
, I wanted to split
services, make off-hardware backups, and such. Almost two years later,
my request was approved and we bought a second server. But instead of
buying it from a regular provider, we got it off a stash of machines
bought by our university s central IT
entity. To my surprise, it had the exact same
hardware configuration as baktun
, bought two years earlier. Even the
serial number was absurdly close. So, I had it as baktun
s long-lost
twin. Hence,
(transliterated as teom
), the Hebrew word for
twin. About a year after teom
arrived to my life, my twin children
were also born, but their naming followed a completely different logic
process than my computers pato
: The earliest system I had that I remember giving a name to. I
built a 80386SX in 1991, buying each component separately. The box had
a 1-inch square for integrators to put their branding And after some
time, I carefully printed and applied a label that said Catarm quina
PATO (the first word, very small). Pato (duck) is how we d call a
no-brand system. Catarm quina because it was the system where I ran
my BBS, CatarSYS (1992-1994).malenkaya
: In 2008 I got a 9 Acer Aspire One
netbook
(Atom N270 i386, 1GB RAM). I really loved that machine! Although it was
quite limited, it was my main computer while on the road for almost
five years. malenkaya
means small (for female) in Russian.matlalli
: After malenkaya
started being too limited for my regular
use, I bought its successor Acer Aspire One
model. This
one was way larger (10.1 inches screen) and I wasn t too happy about
it at the beginning, but I ended up loving it. So much, in fact, that
we bought at least four very similar such computers for us and our
family members. This computer was dirt cheap, and endured five further
years of lugging everywhere. matlalli
is due to its turquoise color:
it is the N huatl word for blue or green.cajita
: In 2014 I got a beautiful Cubox i4
Pro
computer. It took me some time to get it to boot and be generally
useful, but it ended up being my home server for many years, until I
had a power supply malfunction which bricked it. cajita
means little
box in Spanish.pitentzin
: Another 10.1 Acer Aspire One (the last in the lineup; the
CPU is a Celeron 877, so it does run AMD64, and it supports up to 16GB
RAM, I think I have it with 12). We originally bought it for my family
in Argentina, but they didn t really use it much, and after a couple of
years we got it back. We decided it would be the computer for the kids,
at least for the time being. And although it is a 2013 laptop, it s
still our everyday media station driver. Oh, and the name pitentzin
?
N huatl for /children/.tliltik
: In 2018, I bought a second-hand Thinkpad X230. It was my
daily driver for about three years. I reflashed its firmware with
CoreBoot, and repeated the experience for seven people IIRC in
DebConf18. With it, I learned to love the Thinkpad keyboard. Naturally
for a thinkpad, tliltik
means black in N huatl.uesebe
: When COVID struck, we were all sent home, and my university
lent me a nice recently bought Intel i7 HP laptop. At first, I didn t
want to mess up its Windows install (so I set up a USB-drive-based
installation, hence the name uesebe
); when it was clear the lockdown
was going to be long (and that tliltik
had too many aches to be used
for my daily work), I transferred the install to its HDD and used it
throughout the pandemic, until mid 2022.bolex
: I bought this computer for my father in 2020. After he passed
away in May 2022, I took his computer, and named it bolex
because
that s the brand of the 8mm cinema camera he loved and had since 1955,
and with which he created most of his
films. It is really an entry-level machine,
though (a single-core, dual-threaded Celeron), and it was too limited
when I started distance-teaching again, so I had to store it as an
emergency system.yogurtu
: During the pandemics, I spent quite a bit of time fiddling
with the Raspberry Pi family. But all in all, while they are nice
machines for many uses, they are too limited to be daily drivers. Or
even enough for taking i.e. to Debconf and have them be my conference
computer. I bought an almost-new-but-used ( 2 year old) Yoga C630 ARM
laptop. I
often brag about my happy experience with it, and how it brings a
reasonably powerful ARM Linux system to my everyday life. In our last
DebConf, I didn t even pick up my USB-C power connector every day; the
battery just lasts over ten hours of active work. But I m not here
doing ads, right? yogurtu
naturally is derived from the Yoga brand
it has, but is taken from Yogurtu
Ngh , a fictional
character by the Argentinian comical-musical group Les
Luthiers, that has marked my life.misnenet
: Towards mid 2023, when it was clear that bolex
would not
be a good daily driver, and considering we would be spending six months
in Argentina, I bought a new desktop system. It seems I have something
for small computers: I decided for a refurbished HP EliteDesk 800 G5
Mini
i7
system. I picked it because, at close to 18 18 3.5cm it perfectly fits
in my DebConf18 bag. A laptop, it is clearly not, but it can easily
travel with me when needed. Oh, and the name? Because for this model,
HP uses different enclosures based on the kind of processor: The i3
model has a flat, black aluminum top But mine has lots of tiny
holes, covering two areas of roughly 15 7cm, with a tiny hole every
~2mm, and with a solid strip between them. Of course,
(misnenet
, in Hebrew) means strainer.Dear Luke,Nowhere on the "OSI s board of directors in 2025: details about the elections" page do they list a timezone for closure of nominations; they simply list Monday 17 February. The OSI's contact address is in California, so it seems arbitrary and capricious to retroactively define all of these processes as being governed by UTC.I was not able to participate in the "potential board director" info sessions accordingly, but people who attended heard that the importance of accommodating differing TZ's was discussed during the info session, and that OSI representatives mentioned they try to accommodate TZ's of everyone. This seems in sharp contrast with the above policy. I urge the OSI to reconsider this policy and allow me to stand for an Individual seat in the current cycle. Upd, N.B.: to people writing about this, I use they/them pronouns
Thank you for your interest in the OSI Board of Directors election. Unfortunately, we are unable to accept your application as it was submitted after the official deadline of Monday Feb 17 at 11:59 pm UTC. To ensure a fair process, we must adhere to the deadline for all candidates.
We appreciate your enthusiasm and encourage you to stay engaged with OSI s mission. We hope you ll consider applying in the future or contributing in other meaningful ways.
Best regards,
OSI Election Teams
Courtesy of my CRANberries, there is also a diffstat report for this release. For questions, suggestions, or issues please use the issue tracker at the GitHub repo.Changes in version 0.2.3 (2025-03-08)
- Correct the minimum version of Rcpp to 1.0.8 (Walter Somerville)
- The package now uses Authors@R as mandated by CRAN
- Updated 'whitespace in literal' issue upsetting clang++-20
- Continuous integration updates including simpler r-ci setup
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can now sponsor me at GitHub.
examples/
to
avoid having to add half a dozen packages to Suggests: for no real usage
gain in the package.
The short NEWS entry for this release follows.
Courtesy of my CRANberries, there is also a diffstat report for this release. For questions, suggestions, or issues please use the issue tracker at the GitHub repo.Changes in version 0.1.13 (2025-03-07)
- A call to
std::string::erase
is now guarded (Daniel)- The package now uses Authors@R as mandated by CRAN (Dirk)
- simdjson was upgraded to version 3.12.2 (Dirk)
- Continuous integration updated to more compilers and simpler setup
- Two demos are now in
inst/examples
to not inflate Suggests
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can now sponsor me at GitHub.
clang++-20
. One upstream PR
already addressed this in the files tickled by some CRAN packages, I followed this up
with another
upstream PR addressing this in a few more occurrences.
Courtesy of my CRANberries, there is also a diffstat report for the most recent release. More information is available at the repository or the package page.Changes in version 0.0.5 (2025-03-06)
- Updated to upstream version 3.0.3
- Updated 'whitespace in literal' issue upsetting clang++-20; this is also fixed upstream via two PRs
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can sponsor me at GitHub.
stat(1)
), and those are my
notes. I suspect people will have Opinions about my comments here. Do
not comment unless you have some Constructive feedback to provide: I
don't want to know if you think I am holding it Wrong. Consider that I
might have used UNIX shells for longer that you have lived.
I'm not sure I'll keep using fish, but so far it's the first shell
that survived heavy use outside of zsh(1)
(unless you count
tcsh(1)
, but that was in another millenia).
My normal shell is bash(1)
, and it's still the shell I used
everywhere else than my laptop, as I haven't switched on all the
servers I managed, although it is available since August 2022 on
torproject.org
servers. I first got interested in fish because they
ported to Rust, making it one of the rare shells out there
written in a "safe" and modern programming language, released after an
impressive ~2 year of work with Fish 4.0.
~/wikis/anarc.at/software/desktop/wayland
shows up as
~/w/a/s/d/wayland
Autocompletion rocks.
Default prompt rocks. Doesn't seem vulnerable to command injection
assaults, at least it doesn't trip on the git-landmine.
It even includes pipe status output, which was a huge pain to
implement in bash. Made me realized that if the last command succeeds,
we don't see other failures, which is the case of my current prompt
anyways! Signal reporting is better than my bash implementation too.
So far the only modification I have made to the prompt is to add a
printf '\a'
to output a bell.
By default, fish keeps a directory history (but separate from the
pushd
stack), that can be navigated with cdh
, prevd
, and
nextd
, dirh
shows the history.
foo() true
) are unsupported. Instead,
fish uses whitespace-sensitive definitions like this:
function foo
true
end
This means my (modest) collection of POSIX functions need to be ported
to fish. Workaround: simple functions can be turned into aliases,
which fish supports (but implements using functions).
EOF heredocs are considered to be "minor syntactic sugar". I find
them frigging useful.
Process substitution is split on newlines, not whitespace. you need to
pipe through string split -n " "
to get the equivalent.
<(cmd)
doesn't exist: they claim you can use cmd foo -
as a
replacement, but that's not correct: I used <(cmd)
mostly where
foo
does not support -
as a magic character to say 'read from
stdin'.
Documentation is... limited. It seems mostly geared the web docs
which are... okay (but I couldn't find out about
~/.config/fish/conf.d
there!), but this is really inconvenient when
you're trying to browse the manual pages. For example, fish thinks
there's a fish_prompt
manual page, according to its own completion
mechanism, but man(1)
cannot find that manual page. I can't find the
manual for the time command (which is actually a keyword!)
Fish renders multi-line commands with newlines. So if your terminal
looks like this, say:
anarcat@angela:~> sq keyring merge torproject-keyring/lavamind-
95F341D746CF1FC8B05A0ED5D3F900749268E55E.gpg torproject-keyrin
g/weasel-E3ED482E44A53F5BBE585032D50F9EBC09E69937.gpg wl-copy
... but it's actually one line, when you copy-paste the above, in
foot(1), it will show up exactly like this, newlines and all:
sq keyring merge torproject-keyring/lavamind-
95F341D746CF1FC8B05A0ED5D3F900749268E55E.gpg torproject-keyrin
g/weasel-E3ED482E44A53F5BBE585032D50F9EBC09E69937.gpg wl-copy
Whereas it should show up like this:
sq keyring merge torproject-keyring/lavamind-95F341D746CF1FC8B05A0ED5D3F900749268E55E.gpg torproject-keyring/weasel-E3ED482E44A53F5BBE585032D50F9EBC09E69937.gpg wl-copy
Note that this is an issue specific to foot(1), alacritty(1) and
gnome-terminal(1) don't suffer from that issue. I have already filed
it upstream in foot and it is apparently fixed already.
Globbing is driving me nuts. You can't pass a *
to a command
unless fish agrees it's going to match something. You need to escape
it if it doesn't immediately match, and then you need the called
command to actually support globbing. 202[345]
doesn't match
folders named 2023
, 2024
, 2025
, it will send the string
202[345]
to the command.
()
is like $()
: it's process substitution, and not a
subshell. This is really impractical: I use ( cd foo ; do_something)
all the time to avoid losing the current directory... I guess I'm
supposed to use pushd
for this, but ouch. This wouldn't be so bad if
it was just for cd
though. Clean constructs like this:
( git grep -l '^#!/.*bin/python' ; fdfind .py ) sort -u
Turn into what i find rather horrible:
begin; git grep -l '^#!/.*bin/python' ; fdfind .py ; end sort -ub
It... works, but it goes back to "oh dear, now there's a new
langage again". I only found out about this construct while trying:
git grep -l '^#!/.*bin/python' ; fdfind .py sort -u
... which fails and suggests using begin
/end
, at which point: why
not just support the curly braces?
FOO=bar
is not allowed. It's actually recognized syntax, but creates
a warning. We're supposed to use set foo bar
instead. This really
feels like a needless divergence from standard.
Aliases are... peculiar. Typical constructs like alias mv="\mv -i"
don't work because fish treats aliases as a function definition, and
\
is not magical there. This can be worked around by specifying the
full path to the command, with e.g. alias mv="/bin/mv -i"
. Another
problem is trying to override a built-in, which seems completely
impossible. In my case, I like the time(1)
command the way it
is, thank you very much, and fish provides no way to bypass that
builtin. It is possible to call time(1)
with command time
, but
it's not possible to replace the command
keyword so that means a lot
of typing.
Again: you can't use \
to bypass aliases. This is a huge annoyance
for me. I would need to learn to type command
in long form, and I
use that stuff pretty regularly. I guess I could alias command
to
c
or something, but this is one of those huge muscle memory challenges.
alt . doesn't always work the way i expect.
Next.