gabe /presentato-ma
public · Issues · Pulls · Labels · Forks · Compare · Actions success · Badges · Packages
⭐
Log in to mark this repository.
Card grid for the deck listings; A Summer: Palm/scanner photos, Casabeza, Devendra, Diogramos, TOC order; A History and A Feat edits
8d5e8fa · gmorell · 2026-11-02 03:13
Files changed
modified
content/presentations/a-summer.md
+276
−57
@@ -1,6 +1,6 @@
| 1 | 1 | +++ |
| 2 | −title = "A Summer" | |
| 3 | −description = "of Accelerated Development" | |
| 2 | +title = "2026" | |
| 3 | +description = "in Accelerated Development" | |
| 4 | 4 | date = 2026-08-27 |
| 5 | 5 | |
| 6 | 6 | [extra] |
@@ -8,33 +8,46 @@ reveal_theme = "black"
| 8 | 8 | reveal_transition = "slide" |
| 9 | 9 | +++ |
| 10 | 10 | |
| 11 | −# A Summer | |
| 11 | +# 2026 | |
| 12 | 12 | |
| 13 | −What I've been upto this summer | |
| 13 | +A summary of other things done this summer | |
| 14 | 14 | |
| 15 | 15 | --- |
| 16 | 16 | |
| 17 | −## Apollo's Crib (Updates) | |
| 17 | +<div class="cols"> | |
| 18 | +<div> | |
| 18 | 19 | |
| 19 | −## Apollo's Palm | |
| 20 | +### Apollo's Crib | |
| 20 | 21 | |
| 21 | −## Movie Monster | |
| 22 | +### Apollo's Palm | |
| 22 | 23 | |
| 23 | −## Tower Forever | |
| 24 | +### LambentFlex | |
| 24 | 25 | |
| 25 | −## GitGud | |
| 26 | +### Casabeza Clients | |
| 26 | 27 | |
| 27 | −## LambentFlex | |
| 28 | +### Devendra | |
| 28 | 29 | |
| 29 | −## Camerite | |
| 30 | +### Tower Forever | |
| 30 | 31 | |
| 31 | −## Angler | |
| 32 | +</div> | |
| 33 | +<div> | |
| 32 | 34 | |
| 33 | −## FeedPug | |
| 35 | +### GitGud | |
| 34 | 36 | |
| 35 | −## Waxx | |
| 37 | +### Movie Monster | |
| 36 | 38 | |
| 37 | −## Devendra | |
| 39 | +### Camerite | |
| 40 | + | |
| 41 | +### Angler | |
| 42 | + | |
| 43 | +### FeedPug | |
| 44 | + | |
| 45 | +### Waxx | |
| 46 | + | |
| 47 | +### Diogramos | |
| 48 | + | |
| 49 | +</div> | |
| 50 | +</div> | |
| 38 | 51 | |
| 39 | 52 | --- |
| 40 | 53 |
@@ -46,6 +59,15 @@ Here
| 46 | 59 | |
| 47 | 60 | Now |
| 48 | 61 | |
| 62 | +_with even more data sources_ | |
| 63 | + | |
| 64 | +-- | |
| 65 | + | |
| 66 | +## The need: | |
| 67 | + | |
| 68 | +- More Datasources | |
| 69 | +- Bigger Data | |
| 70 | + | |
| 49 | 71 | -- |
| 50 | 72 | |
| 51 | 73 | ## Every Data Source |
@@ -75,9 +97,32 @@ Now
| 75 | 97 | |
| 76 | 98 | -- |
| 77 | 99 | |
| 100 | +## Fun Challenges worked on | |
| 101 | + | |
| 102 | +<div class="cols"> | |
| 103 | +<div> | |
| 104 | + | |
| 105 | +#### Positive | |
| 106 | + | |
| 107 | +Germany has every single transit line on the same feed | |
| 108 | + | |
| 109 | +</div> | |
| 110 | +<div> | |
| 111 | + | |
| 112 | +#### Negative | |
| 113 | + | |
| 114 | +Germany has every single transit line on the same feed | |
| 115 | +</div> | |
| 116 | + | |
| 117 | +</div> | |
| 118 | + | |
| 119 | + | |
| 120 | +Note: Makes it easy to integrate, but orders of magnitude larger data than any other system | |
| 121 | +-- | |
| 122 | + | |
| 78 | 123 | ## Demo |
| 79 | 124 | |
| 80 | −<!-- .slide: data-background-iframe="https://ac.neiam.org/p/p/Hackspace" data-background-interactive --> | |
| 125 | +[//]: # (<!-- .slide: data-background-iframe="https://ac.neiam.org/p/p/Hackspace" data-background-interactive -->) | |
| 81 | 126 | |
| 82 | 127 | [ac.neiam.org/p/p/Hackspace](https://ac.neiam.org/p/p/Hackspace) |
| 83 | 128 |
@@ -100,6 +145,12 @@ In Your Hand
| 100 | 145 | |
| 101 | 146 | -- |
| 102 | 147 | |
| 148 | +## The want: | |
| 149 | + | |
| 150 | +### A desk widget that shows up to date information like the rest of the ecosystem | |
| 151 | + | |
| 152 | +-- | |
| 153 | + | |
| 103 | 154 | ## The Hardware |
| 104 | 155 | |
| 105 | 156 | - LilyGo T4-S3 <!-- .element: class="fragment" --> |
@@ -128,27 +179,145 @@ In Your Hand
| 128 | 179 | |
| 129 | 180 | --- |
| 130 | 181 | |
| 182 | +## LambentFlex | |
| 131 | 183 | |
| 132 | −## Movie Monster | |
| 184 | +A mulit-channel udp lighting reciever | |
| 133 | 185 | |
| 134 | −Every Movie, Every Theater, One Place | |
| 186 | +-- | |
| 187 | + | |
| 188 | +## The need: | |
| 189 | + | |
| 190 | +### Captive Portal | |
| 191 | +### LocationIndicator LED | |
| 192 | +### Reusability | |
| 193 | + | |
| 194 | +-- | |
| 195 | + | |
| 196 | +## Same Firmware, New Chips | |
| 197 | + | |
| 198 | +- ESP32-C3 (the original) <!-- .element: class="fragment" --> | |
| 199 | +- ESP32-C6 port <!-- .element: class="fragment" --> | |
| 200 | +- WS2812 strands over RMT <!-- .element: class="fragment" --> | |
| 201 | +- Over-the-air updates <!-- .element: class="fragment" --> | |
| 202 | + | |
| 203 | +-- | |
| 204 | + | |
| 205 | +## LambentFlex I2S | |
| 206 | + | |
| 207 | +- LilyGo T-QT (ESP32-S3) <!-- .element: class="fragment" --> | |
| 208 | +- MEMS microphone <!-- .element: class="fragment" --> | |
| 209 | +- Level meter & 7-band spectrum <!-- .element: class="fragment" --> | |
| 210 | +- Beat detection <!-- .element: class="fragment" --> | |
| 211 | +- Published over MQTT <!-- .element: class="fragment" --> | |
| 212 | + | |
| 213 | +--- | |
| 214 | + | |
| 215 | +## Casabeza Clients | |
| 216 | + | |
| 217 | +The House | |
| 218 | + | |
| 219 | +From Every Screen | |
| 220 | + | |
| 221 | +-- | |
| 222 | + | |
| 223 | +## On The Desktop | |
| 224 | + | |
| 225 | +- Rust + egui <!-- .element: class="fragment" --> | |
| 226 | +- Inventory, projects, bills, numerics <!-- .element: class="fragment" --> | |
| 227 | +- Prices and $/unit, plotted <!-- .element: class="fragment" --> | |
| 228 | +- Images & PDFs cached for offline <!-- .element: class="fragment" --> | |
| 229 | +- Follows the desktop's accent colour <!-- .element: class="fragment" --> | |
| 230 | +- Shipped as .debs from CI <!-- .element: class="fragment" --> | |
| 231 | + | |
| 232 | +-- | |
| 233 | + | |
| 234 | +## Remote Control | |
| 235 | + | |
| 236 | +- `cbz-remote` drives the desktop client over MQTT <!-- .element: class="fragment" --> | |
| 237 | +- Switch tabs, open images & documents <!-- .element: class="fragment" --> | |
| 238 | +- Page through PDFs, snap windows to a corner <!-- .element: class="fragment" --> | |
| 239 | + | |
| 240 | +-- | |
| 241 | + | |
| 242 | +## On The Phone | |
| 243 | + | |
| 244 | +- **Auth**: one sign-in, shared with every CBZ app <!-- .element: class="fragment" --> | |
| 245 | +- **Inventory**: items, locations, labels, tasks <!-- .element: class="fragment" --> | |
| 246 | +- **Lists**: live lists from templates, pushed as they change <!-- .element: class="fragment" --> | |
| 247 | +- **Numerics**: prices over time, scan a barcode to log one <!-- .element: class="fragment" --> | |
| 248 | +- **Scanner**: continuous barcode scanning, out over MQTT <!-- .element: class="fragment" --> | |
| 249 | + | |
| 250 | +-- | |
| 251 | + | |
| 252 | +## Auth | |
| 253 | + | |
| 254 | +- Sign in once, every CBZ app is signed in <!-- .element: class="fragment" --> | |
| 255 | +- Session shared through a permission-guarded provider <!-- .element: class="fragment" --> | |
| 256 | +- Pick the house you're working in <!-- .element: class="fragment" --> | |
| 257 | +- A rolling QR code to sign in other devices <!-- .element: class="fragment" --> | |
| 135 | 258 | |
| 136 | 259 | -- |
| 137 | 260 | |
| 261 | +## Inventory | |
| 262 | + | |
| 138 | 263 | <div class="cols"> |
| 264 | +<div> | |
| 139 | 265 | |
| 140 | − | |
| 266 | +- Items, locations, labels, tasks, projects <!-- .element: class="fragment" --> | |
| 267 | +- Cached on the phone with Room <!-- .element: class="fragment" --> | |
| 268 | +- Tap a tag on a reader, the item comes up <!-- .element: class="fragment" --> | |
| 269 | +- Readers publish card reads over MQTT <!-- .element: class="fragment" --> | |
| 141 | 270 | |
| 142 | − | |
| 271 | +</div> | |
| 143 | 272 | |
| 144 | − | |
| 273 | + | |
| 145 | 274 | |
| 146 | 275 | </div> |
| 147 | 276 | |
| 277 | +--- | |
| 278 | + | |
| 279 | +## Devendra | |
| 280 | + | |
| 281 | +Less Ansible | |
| 282 | + | |
| 283 | +More Daemon | |
| 284 | + | |
| 148 | 285 | -- |
| 149 | 286 | |
| 150 | −Live at https://monster.neiam.org | |
| 287 | +## The need: | |
| 288 | + | |
| 289 | +- The subset of ansible I cared about | |
| 290 | +- No SSH beyond initial setup | |
| 291 | +- Idempotency | |
| 292 | +- NAT Busting | |
| 293 | + | |
| 294 | + | |
| 295 | +-- | |
| 296 | + | |
| 297 | +## A Tiny Ansible, Embedded | |
| 298 | + | |
| 299 | +- Installs config files: quadlets, drop-ins, plain config <!-- .element: class="fragment" --> | |
| 300 | +- `daemon-reload` only when a unit changed <!-- .element: class="fragment" --> | |
| 301 | +- Starts, stops, enables, restarts services <!-- .element: class="fragment" --> | |
| 302 | +- Idempotent: a repeat apply changes nothing <!-- .element: class="fragment" --> | |
| 303 | + | |
| 304 | +-- | |
| 305 | + | |
| 306 | +## Controller → Agents | |
| 307 | + | |
| 308 | +- Desired state authored in a small web UI <!-- .element: class="fragment" --> | |
| 309 | +- Synced to agents over iroh-docs <!-- .element: class="fragment" --> | |
| 310 | +- Agents pull, converge, and report status back <!-- .element: class="fragment" --> | |
| 311 | +- Shipped as a .deb, amd64 & arm64 <!-- .element: class="fragment" --> | |
| 312 | + | |
| 313 | +-- | |
| 314 | + | |
| 315 | +## Adopt | |
| 151 | 316 | |
| 317 | +- Point it at a hand-configured host <!-- .element: class="fragment" --> | |
| 318 | +- It proposes what it finds <!-- .element: class="fragment" --> | |
| 319 | +- Accept the files you want <!-- .element: class="fragment" --> | |
| 320 | +- From then on, it's managed <!-- .element: class="fragment" --> | |
| 152 | 321 | |
| 153 | 322 | --- |
| 154 | 323 |
@@ -177,6 +346,14 @@ Of My Own
| 177 | 346 | Note: |
| 178 | 347 | 366 commits since May 13. |
| 179 | 348 | |
| 349 | +-- | |
| 350 | + | |
| 351 | +## The need: | |
| 352 | + | |
| 353 | +- Gitlab takes 5 minutes to restart a webservice | |
| 354 | +- Gitlab has become a beast to run | |
| 355 | + | |
| 356 | + | |
| 180 | 357 | -- |
| 181 | 358 | |
| 182 | 359 | ## Everything A Forge Does |
@@ -202,40 +379,54 @@ Note:
| 202 | 379 | |
| 203 | 380 | Hosting its own development at https://gg.neiam.co |
| 204 | 381 | |
| 382 | +since September 12 | |
| 383 | + | |
| 205 | 384 | --- |
| 206 | 385 | |
| 207 | −## LambentFlex | |
| 208 | 386 | |
| 209 | −Lights | |
| 387 | +## Movie Monster | |
| 210 | 388 | |
| 211 | −Over UDP | |
| 389 | +Every Movie, Every Theater, One Place | |
| 212 | 390 | |
| 213 | 391 | -- |
| 214 | 392 | |
| 215 | −## Same Firmware, New Chips | |
| 393 | +## The need: | |
| 216 | 394 | |
| 217 | −- ESP32-C3 (the original) <!-- .element: class="fragment" --> | |
| 218 | −- ESP32-C6 port <!-- .element: class="fragment" --> | |
| 219 | −- WS2812 strands over RMT <!-- .element: class="fragment" --> | |
| 220 | −- Over-the-air updates <!-- .element: class="fragment" --> | |
| 395 | +- Full Automation | |
| 396 | +- A Watchlist | |
| 397 | +- An API | |
| 398 | +- Reminders | |
| 399 | +- Links to purchase tickets | |
| 221 | 400 | |
| 222 | 401 | -- |
| 223 | 402 | |
| 224 | −## LambentFlex I2S | |
| 403 | +<div class="cols"> | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | +</div> | |
| 412 | + | |
| 413 | +-- | |
| 414 | + | |
| 415 | +Live at https://monster.neiam.org | |
| 225 | 416 | |
| 226 | −- LilyGo T-QT (ESP32-S3) <!-- .element: class="fragment" --> | |
| 227 | −- MEMS microphone <!-- .element: class="fragment" --> | |
| 228 | −- Level meter & 7-band spectrum <!-- .element: class="fragment" --> | |
| 229 | −- Beat detection <!-- .element: class="fragment" --> | |
| 230 | −- Published over MQTT <!-- .element: class="fragment" --> | |
| 231 | 417 | |
| 232 | 418 | --- |
| 233 | 419 | |
| 234 | 420 | ## Camerite |
| 235 | 421 | |
| 236 | −Every Camera | |
| 422 | +_Camerite: An aggregate stone made of cameras_ | |
| 423 | + | |
| 424 | +-- | |
| 425 | + | |
| 426 | +## The need: | |
| 237 | 427 | |
| 238 | −Live | |
| 428 | +- Support Public Cameras | |
| 429 | +- Support Cameras Behind NAT | |
| 239 | 430 | |
| 240 | 431 | -- |
| 241 | 432 |
@@ -264,12 +455,21 @@ Live at https://camerite.neiam.co
| 264 | 455 | |
| 265 | 456 | ## Angler |
| 266 | 457 | |
| 267 | −Pixelfed | |
| 458 | +Pixelfed, a PHP Instagram Clone | |
| 268 | 459 | |
| 269 | 460 | In Elixir |
| 270 | 461 | |
| 271 | 462 | -- |
| 272 | 463 | |
| 464 | +## The need: | |
| 465 | + | |
| 466 | +- I don't have any PHP hosting in 2026 | |
| 467 | +- I don't want to have any PHP hosting in 2026 | |
| 468 | +- The setup, is *entirely* manual | |
| 469 | + | |
| 470 | +-- | |
| 471 | + | |
| 472 | + | |
| 273 | 473 | ## Drop-In |
| 274 | 474 | |
| 275 | 475 | - Wire-compatible with the Pixelfed app <!-- .element: class="fragment" --> |
@@ -293,6 +493,13 @@ Together
| 293 | 493 | |
| 294 | 494 | -- |
| 295 | 495 | |
| 496 | +## The need: | |
| 497 | + | |
| 498 | +- Feedly.com making nervous moves | |
| 499 | + | |
| 500 | +-- | |
| 501 | + | |
| 502 | + | |
| 296 | 503 | ## Features |
| 297 | 504 | |
| 298 | 505 | - One newsfeed <!-- .element: class="fragment" --> |
@@ -313,6 +520,13 @@ With Rules
| 313 | 520 | |
| 314 | 521 | -- |
| 315 | 522 | |
| 523 | +## The need: | |
| 524 | + | |
| 525 | +- Trello replacement | |
| 526 | +- Lightweight to run | |
| 527 | + | |
| 528 | +-- | |
| 529 | + | |
| 316 | 530 | ## The Columns Are A Graph |
| 317 | 531 | |
| 318 | 532 | - Draw the workflow once, on a template <!-- .element: class="fragment" --> |
@@ -337,38 +551,43 @@ Live at https://waxx.neiam.co
| 337 | 551 | |
| 338 | 552 | --- |
| 339 | 553 | |
| 340 | −## Devendra | |
| 554 | +## Diogramos | |
| 341 | 555 | |
| 342 | −Less Ansible | |
| 556 | +Diagrams | |
| 557 | + | |
| 558 | +Together | |
| 343 | 559 | |
| 344 | −More Daemon | |
| 345 | 560 | |
| 346 | 561 | -- |
| 347 | 562 | |
| 348 | −## A Tiny Ansible, Embedded | |
| 563 | +## The need: | |
| 349 | 564 | |
| 350 | −- Installs config files: quadlets, drop-ins, plain config <!-- .element: class="fragment" --> | |
| 351 | −- `daemon-reload` only when a unit changed <!-- .element: class="fragment" --> | |
| 352 | −- Starts, stops, enables, restarts services <!-- .element: class="fragment" --> | |
| 353 | −- Idempotent: a repeat apply changes nothing <!-- .element: class="fragment" --> | |
| 565 | +- Draw.io is not multiplayer! | |
| 566 | +- Theme Token System | |
| 567 | +- Embeddable Diagrams | |
| 354 | 568 | |
| 355 | 569 | -- |
| 356 | 570 | |
| 357 | −## Controller → Agents | |
| 571 | +## The Canvas | |
| 358 | 572 | |
| 359 | −- Desired state authored in a small web UI <!-- .element: class="fragment" --> | |
| 360 | −- Synced to agents over iroh-docs <!-- .element: class="fragment" --> | |
| 361 | −- Agents pull, converge, and report status back <!-- .element: class="fragment" --> | |
| 362 | −- Shipped as a .deb, amd64 & arm64 <!-- .element: class="fragment" --> | |
| 573 | +- Shapes & connectors, anchor-aware routing <!-- .element: class="fragment" --> | |
| 574 | +- Live multi-user editing <!-- .element: class="fragment" --> | |
| 575 | +- Links on shapes: out to the web, or to another canvas <!-- .element: class="fragment" --> | |
| 576 | +- Folders, roles, share links <!-- .element: class="fragment" --> | |
| 577 | +- JSON export <!-- .element: class="fragment" --> | |
| 363 | 578 | |
| 364 | 579 | -- |
| 365 | 580 | |
| 366 | −## Adopt | |
| 581 | +## Embeds | |
| 367 | 582 | |
| 368 | −- Point it at a hand-configured host <!-- .element: class="fragment" --> | |
| 369 | −- It proposes what it finds <!-- .element: class="fragment" --> | |
| 370 | −- Accept the files you want <!-- .element: class="fragment" --> | |
| 371 | −- From then on, it's managed <!-- .element: class="fragment" --> | |
| 583 | +- Read-only, in any page <!-- .element: class="fragment" --> | |
| 584 | +- Frame mode: no cursors, scaled to fit, made for slides <!-- .element: class="fragment" --> | |
| 585 | +- The embedding page picks the theme, live <!-- .element: class="fragment" --> | |
| 586 | +- This deck's blueprint theme came from Diogramos <!-- .element: class="fragment" --> | |
| 587 | + | |
| 588 | +-- | |
| 589 | + | |
| 590 | +Live at https://diogramos.neiam.co | |
| 372 | 591 | |
| 373 | 592 | --- |
| 374 | 593 |
modified
?
+0
−0
Binary file — not rendered.
Parents: c86d3a9