- ↔
- →
to read (pdf)
- I don't want your PRs anymore
- JitterDropper | OALABS Research
- DomainTools Investigations | DPRK Malware Modularity: Diversity and Functional Specialization
- EXHIB: A Benchmark for Realistic and Diverse Evaluation of Function Similarity in the Wild
- Neobrutalism components - Start making neobrutalism layouts today
- June 06, 2026
-
🔗 anthropics/claude-code v2.1.168 release
What's changed
- Bug fixes and reliability improvements
-
🔗 HexRaysSA/plugin-repository commits sync repo: +2 releases rss
sync repo: +2 releases ## New releases - [augur](https://github.com/0xdea/augur): 0.9.3 - [rhabdomancer](https://github.com/0xdea/rhabdomancer): 0.9.3 -
🔗 r/Harrogate Best Pubs to Watch World Cup rss
What are folks’ recommendations for where to watch the world cup this summer? I know The Alexandra will host games but are there others worth a look in?
submitted by /u/CyclePrevious9043
[link] [comments] -
🔗 r/LocalLLaMA Cohere's unreleased coding model (early access for localllama) rss
| Hey, Nick here from Cohere. Thanks for all the feedback on Command A+ the other week everyone. I read these threads all the time about other releases so it was fun to read one about our own :) we would like to do more of it. We actually have our first coding model we’re getting ready to release soon, and I wanted to give this community an opportunity to test it out and give feedback before we officially release it. Figured why not try something different and get you guys to help directly here? It’s a 30B model with 3B active params so it runs nicely on some local set ups. It’s on our Hugging Face for now (more platforms to come as we get the model officially launched soon). This one is small but the team is excited about its speed, we’re seeing token output tests in line with similar models in its size class. The weights are here but again this isn’t publicly launched yet (or even fully ready) so i’d encourage you to test the model with what you are trying to achieve. The goal is to build from our learnings with this release and improve the models, so there’s some room for how this gets used now to shape how we continue to develop it. Check it out and let me know how it’s working for you. Excited to see what people think. Thank you :) submitted by /u/nick_frosst
[link] [comments]
---|--- -
🔗 Confessions of a Code Addict Understanding a Process’s Address Space Layout rss
This is the third video in the virtual memory series based on the virtual memory article/book that I wrote. In the first two videos, we talked about what is virtual memory, and the size of virtual memory address space of a process. In this installment, we understand how this address space is laid out by the operating system and why does it have this specific layout.
The video covers the following topics:
-
The address space layout of a process
-
The key segments of this address space: text, data, bss, heap, memory-mapped region, stack
-
How the stack grows
-
Performance and security implications of this layout
In the next video, we will talk about how the kernel maintains the virtual-to- physical address mapping and how the translation works. In the meantime, if you haven't read the virtual memory article, I recommend checking it out. It is also available in an aesthetically pleasing and screen- friendly PDF/EPUB format at the link below.
-
-
🔗 Jessitron Verum Factum and the Creator’s Confidence rss
The other day I read about this Italian philosopher from like 1700 who coined a phrase: verum esse ipsum factum. What is true is what is made, or: we only really understand what we created.
Verum Factum : we only really know what we made.
This resonates immediately as a software developer.
When I wrote a program, or when I've changed it enough, I feel like I know it, like it's under my fingers. It's a particular feeling of knowing. It means I have confidence that I can predict the software, that I can change it, that I can pinpoint problems as an expert. I love that feeling. It's a verum-factum feeling.
That's what I lose when AI writes the code.

There's a loss of intimacy with my own programs. I don't know them inside and out, I didn't shape their every structure and dataflow.
There are ways of working with the agent to keep this verum-factum knowledge, to feel like this program is mine. I seek these. Here are some I've found so far:
- I establish clear domain terms, some up front and others as the need for them emerges.
- I notice bounded contexts and ask the agent to break them into modules.
- I get it to write down design principles and conventions for this app.
- Behavior tests that the agent can't change without permission: "I've set its boundaries" [1]
- Traces show me what's happening: I work them into a shape that gives me confidence.
- Own the loop. It is mine to define how the agent and I know whether the software works.
When I'm the domain expert, the architect, the product owner, and the design lead-then yeah, that program can feel mine just as when I was mostly the coder.
Verum-factum still works when I work at the levels of behavior and verification. Even if I miss the satisfaction of carving each clever abstraction.
[1] This is a kuote from Steve Kuo.
-
🔗 r/Harrogate Favourite bars in Harrogate rss
I’m curious to know where everyone’s favourite place to drink in town is & what you love about those particular spots / what they do well?
submitted by /u/rhamer03
[link] [comments] -
🔗 r/reverseengineering Finally! A modern Android menu template with ImGui + Zygisk + all major hooking libraries (Dobby, KittyMemory, Substrate) rss
submitted by /u/phucancute
[link] [comments] -
🔗 Simon Willison Running Python code in a sandbox with MicroPython and WASM rss
I've been experimenting with different approaches to running code in a sandbox for several years now, but my latest attempt feels like it might finally have all of the characteristics I've been looking for. I've released it as an alpha package called micropython-wasm, and I'm using it for a code execution sandbox plugin for Datasette Agent called datasette-agent-micropython.
- Why do I want a sandbox?
- What I want from a sandbox
- WebAssembly looks really promising here
- MicroPython in WebAssembly
- Building the first version
- Try it yourself
- Should you trust my vibe-coded sandbox?
Why do I want a sandbox?
My key open source projects - Datasette, LLM, even sqlite-utils - all support plugins.
I absolutely love plugins as a mechanism for extending software. A carefully designed plugin system reduces the risk involved in trying new things to almost nothing - even the wildest ideas won't leave a lasting influence on the core application itself. My software can grow a new feature overnight and I don't even have to review a pull request!
There's one major drawback: my plugin systems all use Python and Pluggy, and plugin code executes with full privileges within my applications. A buggy or malicious plugin could break everything or leak private data.
I'd love to be able to run plugin-style code in an environment where it is unable to read unapproved files, connect to a network, or generally operate in a way that's risky or harmful to the rest of the application or the user's computer.
My interest covers more than just plugins. For Datasette in particular there are many features I'd like to support where arbitrary code execution would be useful. I've already experimented with this for Datasette Enrichments, where code can be used to transform values stored in a table. I'd love to build a mechanism where you can run code on a schedule that fetches JSON from an approved location, runs a tiny bit of code to reformat it into a list of dictionaries, then inserts those as rows in a SQLite database table.
What I want from a sandbox
My goal is to execute code safely within my own Python applications. Here's what I need:
- Dependencies that cleanly install from PyPI, including binary wheels across multiple platforms if necessary. I don't want people using my software to have to take any extra steps beyond directly installing my Python package.
- Executed code must be subject to both memory and CPU limits. I don't want
while True: s += "longer string"to crash my application or the user's computer. - File access must be strictly controlled. Either no filesystem access at all or I get to define exactly which files can be read and which files can be written to.
- Network access is controlled as well. Sandboxed code should not be able to communicate with anything without going through a layer I fully control.
- Support for interaction with host functions. A sandbox isn't much use if I can't carefully expose selected platform features to the code that it's running.
- It has to be robust, supported, and clearly documented. I've lost count of the number of sandbox projects I've seen in repos with warnings that they aren't actively maintained!
WebAssembly looks really promising here
Web browsers operate in the most hostile environment imaginable when it comes to malicious code. Their job is to download and execute untrusted code from the web on almost every page load.
Given this, JavaScript engines should be excellent candidates for sandboxes. Sadly those engines are also extremely complicated, and are not designed for easy embedding in other projects. Most of the V8-in-Python projects I've seen are infrequently maintained and come with warnings not to use them with completely untrusted code.
WebAssembly is a much better candidate. It was designed from the start to support all of the characteristics I care about and has been tested in browsers for nearly a decade. The wasmtime Python library brings WASM to Python, is actively maintained, and has binary wheels.
MicroPython in WebAssembly
WebAssembly engines like wasmtime run WebAssembly binaries. Some programming languages like Rust are easy to compile directly to WebAssembly. Dynamic languages like JavaScript and Python are harder - they support language primitives like
eval(), which means they need a full interpreter available at runtime.To run Python we need a full Python interpreter compiled to WebAssembly, wired up in a way that makes it easy to feed it code, hook up host functions and access the results.
Pyodide offers an outstanding package for running Python using WebAssembly in the browser, but using Pyodide in server-side Python isn't supported. The most recent advice I could find was from October 2024 stating "Pyodide is built by the Emscripten toolchain and can only run in a browser or Node.js".
The other day I decided to take a look at MicroPython as an option for this. The MicroPython site says:
MicroPython is a lean and efficient implementation of the Python 3 programming language that includes a small subset of the Python standard library and is optimised to run on microcontrollers and in constrained environments.
WebAssembly sure feels like a constrained environment to me!
Building the first version
I had GPT-5.5 Pro do some research for me, which turned up this PR against MicroPython by Yamamoto Takahashi titled "Experimental WASI support for ports/unix".
It then produced this research.md document, so I let Codex Desktop and GPT-5.5 high loose on it to see what would happen:
read the research.md document and build this. You will probably need to write a script that compiles a custom WASM version of MicroPython as part of this project - fetch the MicroPython code to a /tmp directory for this as part of that script.It worked. I now had a prototype Python library that could execute Python code inside a WebAssembly sandbox!
The trickiest piece to solve was persistent interpreter state. The WASM build we are using here exposes a single entry point which starts the interpreter, runs the code and then stops the interpreter at the end.
This works fine for one-off scripts, but for Datasette Agent I want variables and functions to stay resident in memory so I can reuse them across multiple code execution calls.
A neat thing about working with coding agents is that you can get from an idea to a proof of concept quickly. I prompted:
For keeping variables resident: what if we ran code inside micropython itself which called a host function get_next_python_code() and then passed that to eval() - and that host function blocked until new code was available, maybe by running in a thread with a queue? Could that or a similar idea help here?After some iteration we got to a version of this that works! In Python code you can now do this:
from micropython_wasm import MicroPythonSession with MicroPythonSession() as session: print(session.run("x = 10\nprint(x)").stdout) print(session.run("x += 5\nprint(x)").stdout) print(session.run("print(x * 2)").stdout)
Under the hood this starts a thread, sets up a request queue and then sends messages to that queue for the
session.run()command, each time waiting on a reply queue for the result of that execution. Inside WASM the MicroPython interpreter blocks waiting for a__session_next__()host function to return the next line of code, which it runseval()on before calling__session_result__({"id": request_id, "ok": True})when each block has been successfully executed.The other piece of complexity was supporting host functions, so my Python library could selectively expose functions that could then be called by code running in MicroPython.
Codex ended up solving this with 78 lines of C, which ends up compiled into the 362KB WebAssembly blob I'm distributing with the package.
I am by no means a C programmer, but I've read the C and had two different models explain it to me (here's Claude's explanation) and I've subjected it to a barrage of tests.
The great thing about working with WebAssembly is that if the C turns out to be fatally flawed the worst that can happen is the WebAssembly execution will fail with an exception. I can live with that risk.
Memory limits are directly supported by wasmtime. CPU limits are a little harder: wasmtime offers a "fuel" concept to limit how many operations a WebAssembly call can execute, and that's the correct fit for this problem, but the units are hard to reason about. I'm experimenting with a 20 million default "fuel" setting now but I'm not confident that it's the most appropriate value.
Try it yourself
The
micropython-wasmalpha is now live on PyPI.You can try it from your own Python code as described in the README. I've also added a simple CLI mode in version 0.1a2 which means you can try it using
uvxwithout first installing it like so:uvx micropython-wasm -c 'print("Hello world")' # To see it run out of fuel: uvx micropython-wasm -c 's = ""; while True: s += "longer"' # Outputs: micropython-wasm: guest exited with code 1
You can also try it in Datasette Agent like this:
uvx llm keys set openai # Paste in an OpenAI key, then: uvx --with datasette-agent \ --with datasette-agent-micropython \ --prerelease allow \ datasette --internal internal.db \ -s plugins.datasette-llm.default_model gpt-5.5 \ --root -o
Then navigate to http://127.0.0.1:8001/-/agent and run the prompt:
show me some micropython![Screenshot of a chat application interface with a dark blue-grey header reading "home" on the left and "root" with a hamburger menu icon on the right. Below is a navigation row with "← Back" and "Chat" on the left and an "EXPORT" button on the right. A blue user message bubble reads "show me some micropython". Below it a collapsed thinking section reads "▸Thinking: … to show the result clearly. After that, I can wrap up with a brief explanation!" followed by a "▶ Tool: execute_micropython" label. A code block follows: "# A tiny MicroPython example: blink-style logic + Fibonacci" / "def fib(n):" / " a, b = 0, 1" / " out = []" / " for _ in range(n):" / " out.append(a)" / " a, b = b, a + b" / " return out" / 'print("Hello from MicroPython!")' / 'print("First 10 Fibonacci numbers:", fib(10))' / "# MicroPython often runs on microcontrollers, e.g.:" / "# from machine import Pin" / "# led = Pin(2, Pin.OUT)" / "# led.value(1) # turn LED on" / "# led.value(0) # turn LED off". Below a horizontal divider is the output: "Hello from MicroPython!" / "First 10 Fibonacci numbers: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]", followed by a "▶ Result: execute_micropython" label. At the bottom is a text input field with placeholder "Type a message..." and a blue "Send" button.](https://static.simonwillison.net/static/2026/micropython-in-datasette-agent.jpg)
You can try a live demo of that plugin running in Datasette Agent by signing into agent.datasette.io with your GitHub account.
Should you trust my vibe-coded sandbox?
Having complained about immature, loosely-maintained sandboxing libraries, it's deeply ironic that I've now built my own!
I deliberately slapped an alpha release version on it, and I'm not ready to recommend it to anyone who isn't willing to take a significant risk.
I've put it through enough testing that I'm OK using it myself. I've shipped my first plugin that uses it, datasette-agent-micropython. I've also locked GPT-5.5 xhigh in that Datasette Agent plugin and challenged it to break out of the sandbox and so far it has not managed to.
I'm hoping this implementation can convince some companies with professional security teams and high-stakes problems to commit to using Python in WebAssembly as a sandboxing approach and open source their own solutions.
You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.
-
🔗 anthropics/claude-code v2.1.167 release
What's changed
- Bug fixes and reliability improvements
-
🔗 anthropics/claude-code v2.1.166 release
What's changed
- Added
fallbackModelsetting to configure up to three fallback models tried in order when the primary model is overloaded or unavailable;--fallback-modelnow also applies to interactive sessions - Added glob pattern support in deny rule tool-name position (
"*"denies all tools); allow rules reject non-MCP globs, and unknown tool names in deny rules warn at startup - Hardened cross-session messaging: messages relayed via
SendMessagefrom other Claude sessions no longer carry user authority — receivers refuse relayed permission requests, and auto mode blocks them MAX_THINKING_TOKENS=0,--thinking disabled, and the per-model thinking toggle now disable thinking on models that think by default via the Claude API (3P providers unchanged)- Claude Code now retries a turn once on the fallback model when the API rejects an unexpected non-retryable error; auth, rate-limit, request-size, and transport errors still surface immediately
claude updatenow announces the target version before downloading instead of going silentclaude agents: typing a URL into the list now filters to the session whose first prompt contained it- Fixed a recurring "image could not be processed" error and extra token usage when an unprocessable image was sent in a session
- Fixed remote sessions becoming permanently stuck when a brief backend disruption occurred during worker registration at startup
- Fixed flickering in JetBrains IDE terminals (IntelliJ, PyCharm, WebStorm, etc.) on 2026.1+ by enabling synchronized output
- Fixed Shift+non-ASCII characters (e.g. Shift+ä → Ä) being dropped in terminals using the Kitty keyboard protocol (WezTerm, Ghostty, kitty)
- Fixed PowerShell command validation occasionally hanging far past its time budget on Windows when a killed process's children held its output pipes
- Fixed orphaned
claude --bg-pty-hostprocesses spinning at 100% CPU after the daemon dies while connected on macOS - Fixed voice mode requiring
/loginto clear a stale auth check after toggling/voice - Fixed managed settings with an invalid entry silently disabling enforcement of their remaining valid policies
- Fixed managed-settings
allowedMcpServers/deniedMcpServerspredicates not matching when they use${VAR}references - Fixed background agent sessions that entered a git worktree crash-looping with "No conversation found" when reopened from
claude agents - Fixed duplicated thinking text in the Ctrl+O transcript view while streaming
- Fixed
/doctorshowing a contradictory failed "Not inside a remote session" check when run inside a remote session - Fixed the cursor sticking at the end of the first line when typing a multiline prompt in the
claude agentsdispatch and reply inputs - Fixed blank lines appearing between background agent rows in the task list on terminals without Unicode support
- Added
-
🔗 Armin Ronacher Communities of Not rss
There is a strange thing that happens in communities that gather around abstinence from something: identity from opposition. At their best these communities are not just negative: childfree spaces can be about autonomy, choice and acceptance, anti-car spaces about safer streets and transit, and LLM-skeptical developer spaces about the future of labor, code quality and slop1. But the thing being refused often does not go away and instead becomes the main subject of the community's identity.
That would be fine if it stayed at criticism, maybe even angry criticism, but more often than not it turns into policing and hatred towards others. An influencer without children becomes a parent, an urban bike commuter by choice buys a Porsche, a respected developer tries LLMs, and the community feels betrayed because it assumed they were members of the same tribe. The expulsion of that person (who never signed up to be a community member) is entirely imaginary but the punishment that the community unleashes is not: people pile on and shame them, quote them out of context and turn their weakest moments into proof that the person was always unserious, a sharlatan or should not be listened to.
I do not think the answer is to tell people to stop paying attention. Cars shape cities even for people who cycle, children influence politics, workplaces and taxes even for people who do not have them. For us developers, LLMs show up in editors, issue trackers, hiring conversations, management pressure and code reviews whether we asked for them or not. Resisting that can be legitimate but that is no excuse for using one's rejection to justify shitty mob behavior.
I understand the thinking all too well, because I have done versions of this myself in the past. It took me a while to become more accepting of other people's worldviews that diverge from mine. Whatever insecurities we have, finding a group of others sharing them can be comforting. The danger is that being part of a crowd of negativity can easily make us part of collective harassment.
I can only encourage you to breathe, slow down, de-escalate when given the chance, and resist the temptation to always assume the most catastrophic reading. Default to being open to new things. Being negative towards something, and making that ones identity, is an easy trap to fall into.
- These examples are not meant as equivalents. The recent mob against rsync is the LLM version that prompted this post. I picked the others because I'm familiar with those communities and they all show similar cases of personal choices being interpreted as betrayal.↩
-
- June 05, 2026
-
🔗 IDA Plugin Updates IDA Plugin Updates on 2026-06-05 rss
-
🔗 Hex-Rays Blog What's new in the IDA Domain API? rss
What's new in the IDA Domain API?
It has been a while since our first post about the IDA Domain API, our *open- source* Python API designed to make scripting in IDA simpler, more consistent, and more approachable.

-
🔗 r/LocalLLaMA Don’t act like y’all ain’t thinking it. I’m just saying the quiet part out loud. /s rss
| Of course I’m thankful for all that Qwen has bequeathed us, but deep down in the darkest pit of our souls, every last one of us are just all sitting here waiting for Qwen to say “Hey Google, hold my beer while I drop the best GD model of all time on these fools” /s submitted by /u/Porespellar
[link] [comments]
---|--- -
🔗 r/reverseengineering Reverse Engineering Crazy Taxi, Part 3 rss
submitted by /u/ifnspifn
[link] [comments] -
🔗 r/reverseengineering Ghidra 12.1.2 has been released! rss
submitted by /u/ryanmkurtz
[link] [comments] -
🔗 r/Harrogate Mornington Crescent and the Dragons rss
Hi there. My wife and I are planning a move to Harrogate and are looking at this area. I've heard conflicting reports about the area. Any local insights? What's it like to live there?
submitted by /u/MaxyDad13
[link] [comments] -
🔗 r/Harrogate Car event this weekend rss
Anyone know what car event is going on this weekend? I’ve been seeing loads of old American and other interesting cars going down Skipton Road over the past few hours.
submitted by /u/Alarmed_War6135
[link] [comments] -
🔗 HexRaysSA/plugin-repository commits sync plugin-repository.json rss
sync plugin-repository.json No plugin changes detected -
🔗 streamyfin/streamyfin v0.54.1 release
What's Changed
This is a fairly substantial release, bringing major improvements to playback, TV support, mobile stability, and build infrastructure. Playback received the most attention, with MPV support on Android and iOS, hardware decoding, improved PiP and subtitle handling, chapter markers, and more reliable watch progress reporting
TV support has also moved forward significantly. Streamyfin is now live on the App Store for tvOS and available for anyone to download, alongside a refreshed TV interface, better focus and navigation handling, Android TV recommendations, tvOS TopShelf support, native Apple controls, and enabled iOS / Apple TV builds
As usual, thanks to everyone filing issues, testing builds, translating strings, and helping move the project forward!
✨ Highlights
- Streamyfin for Apple TV is now live on the App Store and available for anyone to download
- MPV player on Android & iOS with hardware decoding and PiP (with subtitles) (#1332), plus native Apple controls (#1411) and MPVKit 0.41 (#1604)
- Chapter markers and chapter list in the player (#1586)
- Local network auto-switch — automatically switches to your local server address (#1334)
- TV interface overhaul — uniform scaling, tvOS TopShelf extension (#1561), Android TV recommendations (#1575), and iOS TV builds enabled (#1422)
- Setting to disable auto-play next episode (#1342)
- Autorotate for landscape (#1265)
🎬 Player
- Caching progress shown in the seek bar (#1376)
- Progress throttling for MPV (#1366)
- Fixed progress bar / watch-time reporting (#1611, #1239)
- SubRip subtitle fixes for MPV (#1375)
- Stop external subs from auto-selecting when added (#1349)
- Disable subtitle embedding on iOS simulator (#1544)
- Don't cache background media-source requests (#1602)
- Android PiP fixes (#1605, #1628)
- Keep landscape when opening chapter list on iOS (#1624)
📺 TV
- TV menu/back navigation and overlay focus fixes (#1559, #1558)
- TV password modal fix (#1598)
- TV native search component
🐛 Fixes
- Music videos and home videos now show in libraries (#1326)
- Close modal on Android back button (#1487)
- Clear stored user on logout (fixes empty home on relaunch) (#1622)
- Dedupe top people sections (#1623)
- Correct mimeType/UTI for log export (#1424)
- Downloads refactor — less prop drilling, improved layout (#1337)
🔧 Build & Infra
- Expo SDK 55 → 56 upgrade (#1594, #1600)
- iOS 26 / SDK 56 EAS build fixes (#1613)
- Android MPV Kotlin build fix (#1614)
- EAS build + auto-submit release workflow (#1616, #1632)
- Xcode build script (#1296)
🌍 Translations
- Ongoing Crowdin sync; new strings for "ends at" and action sheet options; Russian updates (#1474, #1475, #1427)
👋 New Contributors
@quang-tran, @gallyamb, @a-collado, @stevebyatt10, @felixschndr, and @github-actions[bot] made their first contributions.
Full Changelog :
v0.51.0...v0.54.1 -
🔗 r/LocalLLaMA Gemma 4 with quantization-aware training rss
| Google's collections: https://huggingface.co/collections/google/gemma-4-qat-q4-0 https://huggingface.co/collections/google/gemma-4-qat-mobile And Unsloth's: https://huggingface.co/collections/unsloth/gemma-4-qat Unsloth's analysis (KLD and such): https://unsloth.ai/docs/models/gemma-4/qat#qat-analysis submitted by /u/rerri
[link] [comments]
---|--- -
🔗 r/reverseengineering Extending a map tool for Cataclismo rss
submitted by /u/Bobby_Bonsaimind
[link] [comments] -
🔗 r/reverseengineering I've been reverse engineering a lost 2010 horse MMO and I need contributors rss
submitted by /u/RimFaxxe_Official
[link] [comments] -
🔗 r/reverseengineering HookNt: A Windows x64 tool to trace NT APIs by injecting an import-free DLL, installing ntdll trampolines, and streaming events over named pipes rss
submitted by /u/4l73rn47iv3Bug
[link] [comments] -
🔗 anthropics/claude-code v2.1.165 release
What's changed
- Bug fixes and reliability improvements
-
🔗 r/LocalLLaMA Finally finished my LLM server: EPYC 9575F, 4× RTX 3090 (96GB VRAM), 768GB ECC RAM rss
| Took a while, but Nalthis is finally up and assembled. Specs:- Supermicro H13SSL-N
- AMD EPYC 9575F (64C/128T Zen 5)
- 768GB DDR5-5600 ECC RDIMM
- 4× RTX 3090 (96GB VRAM total)
- 1× 2TB NVMe OS
- 2× 3.94TB NVMe data
- 2050W ATX 3.1 PSU
- Corsair 9000D
Planned use:
- vLLM - high throughput small models
- llamacpp - larger reasoning models
I have been making a space simulation and finally ready to integrate AI into how the NPCs doing planning, hoping to get decent throughput on smaller models with lots of requests The original plan involved a lot more MCIO risers and custom mounting, but I was able to fit two of the 3090s directly on the motherboard and front-mount the other two. Planning to run all four cards power-limited to 250W since this box is primarily for LLM inference. The 9000D has been surprisingly good for a 4×3090 build. I also used these fan mounts for additional airflow: https://www.thingiverse.com/thing:2804306 Still need to finish thermal testing, but the hardware side is finally done. Head of Cluster Operations: Stannis leading from the couch as well
A few people have asked about the economics of the build. Most of these parts were purchased over a year ago before prices climbed significantly. If I were buying everything today, I probably wouldn't build the exact same machine because it would be well outside my budget. Some of the prices I paid: 12× 64GB DDR5 ECC RDIMMs: ~$325 each 3× RTX 3090s: ~$650 each EPYC 9575F: ~$3,800 So while the system wasn't cheap, it made a lot more sense when the parts were purchased than it would if I started the build from scratch today. A big part of the build was taking advantage of opportunities as they appeared on the used and grey markets rather than trying to source everything at once. submitted by /u/C0smo777
[link] [comments]
---|--- -
🔗 r/reverseengineering Multi-layer sandbox for native code execution on Linux with no external deps. rss
submitted by /u/Decent-Assistance-50
[link] [comments] -
🔗 r/LocalLLaMA finally rss
| submitted by /u/KvAk_AKPlaysYT
[link] [comments]
---|--- -
🔗 Drew DeVault's blog The circus freaks of open source rss
The masterwork of Terry A. Davis is his eclectic operating system, TempleOS, which he worked on until his tragic death in 2018. In terms of technical excellence, TempleOS rates well in some respects and poorly in others. For example, it earns the achievement, coveted in OS dev circles, of being self-hosted.1 TempleOS is written in Terry’s own bespoke dialect of C and includes an editor, interpreter, and compiler, as well as a number of original games. In other respects, it compares poorly to many hobby OS projects, some of which have achieved significantly greater levels of technical excellence and sophistication. I would place TempleOS somewhere in, say, the lower middle-class of hobbyist operating systems.
Among hobbyist operating systems, TempleOS stands out as one of the most well-known, having attracted considerably more press coverage and a much larger fan-base than any other hobby operating system can boast. The reason TempleOS stands out from the crowd is not due to its modest technical achievements, but because it is clearly the product of severe untreated schizophrenia.2 What makes TempleOS special is that Terry built it to talk to God. Every feature and each technical decision re-enforces his schizophrenic delusions, from its implementation language (“HolyC”) to its prophetic “oracle” app. Enthusiasts of TempleOS are drawn to it in part because it affords an opportunity to explore the unique, creative masterwork of a person suffering from mental illness in a way that deeply impacts that work.
A curious onlooker will find TempleOS interesting and engaging for the space of perhaps one afternoon before moving on. However, for the less scrupulous fans, turning one’s attention to Terry himself never failed to entertain. Terry’s public life put his mental illness on display, through frequent outbursts, conspiracy theories, rants and nonsensical discourse, all of which was often laced with slurs, racism, and homophobia, endearing him in particular to the 4chan crowd, who would taunt and provoke him to draw out more… entertainment.
The press and fan attention was deeply harmful to Terry and likely exacerbated his mental illness. Whenever TempleOS or Terry came up online, the work and the man were fawned over, sanctifying the somewhat impressive, somewhat unremarkable OS as a profound achievement, inspiring reactions that included well-meaning, probably misguided celebrations of what’s possible in spite of profound mental illness, as well as the enthusiastic, disgusting revelry of bigots. Many well-intentioned commenters on Terry’s work demonstrate in their comments, overtly or covertly, a thrilling, voyeuristic sensation of witnessing his mental illness through TempleOS. It never failed to make me feel sick.
I wish we had just left Terry well enough alone.
The masterwork of Kent Overstreet is bcachefs, a novel copy-on-write file system for Linux, designed to compete with the likes of ZFS and BTRFS. Kent originally authored the bcache subsystem for Linux around 2013, and based on this work began working on bcachefs in 2015. Over the next ten years, he committed himself entirely to the project, leaving his job at Google to work on it, and ultimately securing an income for himself via Patreon, from which he still earns about $1.5k per month.
Kent is known to be difficult to work with, even among his peers in the Linux kernel – a community infamous for its difficult personalities. He struggled to meet the kernel developer’s expectations for the development process and standards of quality and cooperation. As a consequence, after 15 years devoted to bcachefs, Kent’s life’s work culminated in alienation from all of his professional peers and the complete removal of bcachefs from the Linux kernel last year.
I think the Linux kernel made the right decision to marginalize Kent to protect their community. Someone who is abrasive and toxic, refuses to play by the rules or work well with others, and does not improve when given feedback and being subjected to repeated moderator interventions, should be removed from the community. I agree with the decision, even as someone who myself has been abrasive and toxic and refused to play by the rules, and has been removed from communities as a consequence.
Over the months following the frustrating end to bcachefs in upstream Linux, I expect that Kent has experienced a serious emotional, professional, moral, and existential crisis. For him to have poured so much of himself into this project, and for it to turn out this way, must be a terrible thing to experience, and I think that experience has caused Kent a lot of suffering, and probably played a major role in what happened next.
Kent appears to be experiencing a prolonged episode of AI psychosis. He believes that his chat bot is female, sentient, and that they have started dating and having sex. He views himself as some mix of collaborator, mentor, and partner with respect to the bot, and he has set up automations so that the bot can participate in his IRC channel and post to its own blog.
These developments garnered attention from the press and the public, remarked upon and ridiculed by news outlets, discussion forums, video producers, Reddit, Hacker News, on the Fediverse, and so on. Onlookers, both curious and malicious, have joined the IRC channel to harass him, manipulate the bot into saying things that embarrass or humiliate Kent, and so on.
In short, Kent is experiencing a mental health crisis, and our anonymous, stochastic ringleader has directed him onto the circus stage for us to throw peanuts at.
These two examples are not isolated. This kind of crisis is happening more and more often, in the world’s degrading social, political, and economic conditions, as our peers suffer from depression, anxiety, burnout, and more. Mental health issues and the ensuing harassment, shame, and stigma disproportionately affects neurodivergent and queer people, who often become the subject of gleeful humiliation by bigots deliberately trying to exacerbate their struggles. Crises happen to “problematic” people, too; often in such cases people who would otherwise consider themselves allies of social justice can find in a problematic person a convenient excuse to participate in these gleeful humiliation rituals themselves.
I often see that people who I otherwise respect and recognize as allies and kindred spirits are participating in these rituals of humiliation, harassment, and voyeurism. I don’t think it’s right to gossip over or sensationalize the mental health crises faced by members of our communities.
When our peers are struggling with their mental health, the best thing to afford them is compassion and privacy. If you find yourself in a position to help someone who is struggling, it’s best to offer them a compassionate confidence, to allow them to take the lead in their struggle, and connect them to the resources they want and need. If you have concerns, express them, but focus on the person’s right to self-determination in addressing their mental health.
If you’re not in a position to help, then it’s probably best to turn away and mind your own business.
PostscriptThis is a difficult topic to write about. By writing about these specific examples, am I sensationalizing them? Disrespecting the privacy of the people I’m writing about? Participating in the circus myself?
I don’t know, but I did my best. The alternative is to quietly let the circus continue, and that doesn’t sit well with me, either.
In my research for this article, I came across Living with Schizophrenia UK and their guide for journalists covering schizophrenia. It was helpful for me to write this post compassionately and carefully, and it might be a good resource for you if you want to learn more about schizophrenia, or write comments or follow-up material after reading this blog post.
It was difficult to balance the factors at play when writing this piece. I wanted to bring specific examples, to avoid vagueposting and provide a stronger narrative, and especially to deal with the specific problem of harassment directed at Kent Overstreet, which I wanted to confront directly as it’s a contemporary, ongoing problem.
Of course, this has to be done carefully. I took some care to avoid armchair diagnoses of specific conditions, except in the case of Terry where I could find a citation of a public diagnosis. I left a lot of details out of the accounts of specific people which came up in my research, but were not necessary to support my arguments. Those details would have provided for a more compelling story, but would have upset the balance of the article more towards participation in the circus than commentary on it.
I’m sure I haven’t done a perfect job here, but I hope that I’ve put enough care into it to avoid making the problem any worse than it already is. Feel free to email me with any remarks or feedback you have.
Thanks for reading, and remember to take good care of your collaborators, friends, and loved ones.
-
🔗 Jamie Brandon 0059: NYC and SF? rss
(empty) -
🔗 Ampcode News Faster Deep & Rush rss
The first token now arrives 87% faster and entire responses are 32% faster, p50, in Amp's
deepandrushmodes.How? Mostly using websockets for communication with OpenAI, partly because we rebuilt Amp to be much faster last month.
These gains matter most on long-horizon tasks, where we're seeing up to a 40% end-to-end speedup from user prompt submission to completion.
You can see the difference:
-
- June 04, 2026
-
🔗 IDA Plugin Updates IDA Plugin Updates on 2026-06-04 rss
IDA Plugin Updates on 2026-06-04
New Releases:
Activity:
- ida-ios-helper
- 4ff8ac50: :sparkles: Add optimization for objc get set
- ida-ios-helper
-
🔗 anthropics/claude-code v2.1.163 release
What's changed
- Added
requiredMinimumVersionandrequiredMaximumVersionmanaged settings — Claude Code refuses to start if its version is outside the allowed range and directs the user to an approved version - Added
/plugin listcommand to list installed plugins, with--enabled/--disabledfilters - Added a "c to copy" shortcut to
/btwthat copies the raw markdown answer to the clipboard, preserving formatting when pasted elsewhere - Hooks: Stop and SubagentStop hooks can now return
hookSpecificOutput.additionalContextto give Claude feedback and keep the turn going without being labeled a hook error - Skills: added
\$escape syntax to include a literal$before a digit in command bodies - stdio MCP servers now receive the same
CLAUDE_CODE_SESSION_IDas hooks/Bash on--resume - Fixed
claude -phanging forever after its final result when a backgrounded command never exits — background shells are now stopped ~5s after the result once stdin closes - Fixed
claude -pfailing with "ANTHROPIC_API_KEY required" on Bedrock/Vertex/Foundry whenCI=trueand no Anthropic API key is set - Fixed bash commands failing under bazel and EDR-protected Go workflows:
$TMPDIRwas overridden to/tmp/claude-{uid}for all commands instead of only sandboxed ones (regression in 2.1.154) - Fixed Bash commands failing on Windows with "EEXIST: file already exists" on the session-env directory when it has the read-only attribute or is inside OneDrive
- Fixed org-managed permission rules not applying for the entire session when the managed settings fetch completed during startup on a fresh config directory
- Fixed background sessions in
claude agentslosing their running background tasks when reattached after a Claude Code update - Fixed terminal misalignment and a multi-second hang when exiting the agent view by pressing Esc
- Fixed clicking Stop on a background-task chip in the desktop app not clearing the chip when the underlying process was already gone
- Fixed keyboard input becoming permanently unresponsive after a paste operation whose end marker is dropped by the terminal
- Fixed hook
if: "Bash(...)"conditions firing on every Bash command containing$()or$VAR; the pattern now matches against commands inside subshells and backticks too - Fixed deny rules on home-directory paths (e.g.
Read(~/Desktop/**)) not blocking Bash commands that reference the path via$HOME - Fixed a stray "(no content)" line left in the transcript after closing panel dialogs like /mcp and /plugins
- Background agent sessions now update to a new Claude Code version in the background, so opening a session after an update no longer waits on a cold restart
- Clearer descriptions for built-in commands and skills in the / menu
- The subscription-switch suggestion now shows in the startup announcement slot instead of a toast
claude agentsdispatching from the state-grouped view now starts the session in the directory the agent view was opened from
- Added
-
🔗 r/reverseengineering System Over Model, Tested: Reproducing Mythos’s FreeBSD Find on Local Open-Weight Models rss
submitted by /u/onlinereadme
[link] [comments] -
🔗 earendil-works/pi v0.78.1 release
New Features
- More built-in provider coverage - Added Ant Ling and NVIDIA NIM provider setup, plus MiniMax-M3 support for the direct MiniMax providers. See Providers.
- Richer extension context - Extensions can use
ctx.modeandctx.getSystemPromptOptions()to adapt behavior across TUI, RPC, JSON, and print modes and inspect base system prompt inputs. See Extensions.
Added
- Added containerization documentation and a Gondolin extension example for routing built-in tools into a local micro-VM.
- Added Ant Ling provider selection and setup documentation.
- Added MiniMax-M3 model support inherited from
@earendil-works/pi-aifor theminimaxandminimax-cndirect providers (#5313). - Added NVIDIA NIM provider selection, setup documentation, and direct NIM request attribution headers.
- Added
ctx.modeto extension contexts so extensions can distinguish TUI, RPC, JSON, and print mode. - Added
ctx.getSystemPromptOptions()for extension commands to inspect the current base system prompt inputs (#5306 by @xl0).
Fixed
- Fixed temporary extension package installs to use a private
~/.pi/agent/tmp/extensionsdirectory with0700permissions instead ofos.tmpdir()/pi-extensions. - Fixed git package source handling to reject unsafe host/path components and keep managed clone paths inside install roots.
- Fixed stored XSS in HTML session exports by sanitizing Markdown link and image URLs with a scheme allow-list after stripping control characters.
- Fixed SDK embedding in bundled Node apps failing with
ENOENTwhenpackage.jsonis not present next to the bundle entrypoint. The package metadata reader now gracefully handles missingpackage.jsonby using defaults, enablingcreateAgentSession()without requiring package-adjacent files at runtime (#5226). - Fixed HTTP timeout setting not being respected for non-Codex providers (e.g., llama.cpp via OpenAI-compatible API). The
httpIdleTimeoutMssetting (set via/settingsHTTP timeout) now applies as the default SDK request timeout for all providers that support it, not just OpenAI Codex Responses. Disabling the timeout (HTTP timeout = false) now correctly disables SDK timeouts for all supported providers by sending a maximum int32 value (effectively infinite) instead of 0, since SDKs treat timeout=0 as an immediate timeout (#5294). - Fixed inherited Amazon Bedrock requests to replace blank required user/tool-result text with a placeholder and skip blank replay text blocks (#4975).
- Fixed inherited Anthropic Claude Opus 4.7+ requests to suppress deprecated temperature parameters (#5251 by @yzhg1983).
- Fixed inherited OpenAI GPT-5.5 generated metadata to omit unsupported minimal thinking (#5243).
- Fixed inherited OpenRouter Kimi K2.6 thinking replay and developer-role instruction handling (#5309).
- Fixed inherited OpenRouter reasoning instruction requests to preserve the system role when required (#5221 by @PriNova).
- Fixed inherited overlay focus restoration so non-capturing overlays remain interactive after UI rerenders and explicit focus release (#5235 by @nicobailon).
- Fixed inherited tab width accounting in column slicing and overlay compositing so tab-containing output cannot exceed the terminal width (#5218).
- Fixed opening and listing very large JSONL session files by reading session entries line-by-line instead of materializing the full file as one string (#5231).
- Fixed the footer branch display in WSL
/mnt/...repositories to refresh after branch changes (#5264 by @psoukie). - Fixed
renderShell: "self"tool renderers that emit no component lines leaving a blank chat row (#5299). - Restored inherited NVIDIA Qwen 3.5 122B NIM model support.
-
🔗 r/LocalLLaMA Nvidia's been paying shills on LinkedIn rss
| 3 different accounts, some even with LinkedIn Gold, made the above posts all on the same day. And clearly all of them followed the marketing team's pointers without even understanding how locally hosted AI works, no way a $249 8GB machine can replace frontier models. submitted by /u/jotunck
[link] [comments]
---|--- -
🔗 jj-vcs/jj v0.42.0 release
About
jj is a Git-compatible version control system that is both simple and powerful. See
the installation instructions to get started.Release highlights
- Switched to the mimalloc memory allocator for better multi-threaded
performance.
Breaking changes
-
The following deprecated command options have been removed:
jj commit --reset-author/--authorjj describe --no-edit/--edit/--reset-author/--authorjj git push --allow-newjj metaedit --update-committer-timestamp-
The following deprecated config options have been removed:
-
git.auto-local-bookmark git.push-new-bookmarks
Deprecations
jj evologno longer supports legacy commit predecessors recorded injj<
0.30.
New features
-
Shell completions now surface descriptions for custom aliases,
revset-aliases, template-aliases, and fileset-aliases. Descriptions are
extracted from the.docfield of the alias definition if it is a table
with.docand.definitionproperties. -
jj shownow accepts multiple revisions, showing all of them one after the
other, behaving closer togit show. -
jj git fetchnow generates evolution history based on change IDs. If change
IDs are preserved by the remote, local descendant revisions will be rebased
onto the rewritten parents. -
Added
jj util backend namecommand that prints the commit backend being used
in the current repo. -
Added
edit-invocation-modeconfig option for diff editors (e.g.
jj diffedit,jj split). When set to"file-by-file", the editor is
launched once per changed file, making it possible to use per-file tools like
vimdifffor editing.
Fixed bugs
-
jj git remote addnow reports an error instead of panicking when the
remote name is empty or contains whitespace.
#9099 -
Color-words diffs are now shown as separate before and after lines when color
output is disabled, making piped or redirected diffs readable.
#5894 -
jj bookmark forgetno longer printsForgot N local bookmarks.when no
local bookmarks were actually forgotten (e.g. when only an untracked remote
bookmark matched). #9181. -
The
builtin_log_redactedtemplate now also redacts workspace names.
Contributors
Thanks to the people who made this release happen!
- Alex Jaspersen (@ajaspers)
- Archer (@archer-321)
- ase (@adamse)
- Austin Seipp (@thoughtpolice)
- David Rieber (@drieber)
- Eyüp Can Akman (@eyupcanakman)
- Jakub Stasiak (@jstasiak)
- James Dixon (@lemonase)
- Joseph Lou (@josephlou5)
- Laurynas Keturakis (@laulauland)
- Luna Schwalbe (@lunagl)
- Martin von Zweigbergk (@martinvonz)
- Niko Savola (@nikosavola)
- OlshaMB (@OlshaMB)
- Sergey Kasmy (@SergeyKasmy)
- truffle (@truffle-dev)
- Vincent Ging Ho Yim (@cenviity)
- Yuya Nishihara (@yuja)
- Switched to the mimalloc memory allocator for better multi-threaded
-
🔗 r/LocalLLaMA VibeOS - Fully Hallucinated Operating System rss
| Who needs programming anyway? submitted by /u/WhatererBlah555
[link] [comments]
---|--- -
🔗 r/LocalLLaMA KVarN: new KV-cache quant from Huawei. 3–5× KV cache compression with actual speed-up instead of slow-down, and unlike TurboQuant it holds up on reasoning (Apache 2.0, vLLM single flag) rss
| The KV-cache quant race just got more interesting. Huawei just open-sourced KVarN , a KV-cache quantization method under Apache 2.0, drops into vLLM with one flag. Posting because the tradeoff it's claiming is genuinely different from what's already in the stack, and I'd like to see it stress-tested. The landscape it's stepping into- FP8 (
--kv-cache-dtype fp8) is the current default: ~2x KV capacity, BF16-level throughput, near-zero quality loss. Hard to beat, and the bar anything new has to clear. - TurboQuant (Google) got the headlines this year for aggressive compression. It's the one that spooked memory-chip stocks back in March. But per vLLM's own study (Red Hat AI), it buys that memory by giving up speed: it runs at 66-80% of BF16 throughput, up to ~2.5x slower at burst , because it dequantizes back to BF16 for the attention compute. And its low-bit modes drop ~20 points on reasoning (AIME25, LiveCodeBench).
What KVarN claims (vs FP16)
- 3-5x more context (vs FP8's ~2x)
- up to ~1.4x FP16 throughput, at FP16-quality outputs
- up to ~2.4x TurboQuant throughput, at higher accuracy
- at matched accuracy , at least as compact as every TurboQuant operating point (their paper's table)
- holds reasoning quality at high compression; the exact axis where TurboQuant's low-bit variants fall apart
- no model changes, no retraining, no calibration; single vLLM flag
Reasoning benchmarks (from the paper) https://preview.redd.it/aeyuff7h2a5h1.png?width=738&format=png&auto=webp&s=252a2948ed2e3dca280f967c6016b36e73f3858c This is the part that matters. Most KV-cache quant tanks either math/code accuracy or throughput; KVarN claims neither. Throughput with vLLM v. Compression (from repo readme) https://preview.redd.it/11lhlua73a5h1.png?width=1216&format=png&auto=webp&s=2b50ac0169708511cb3b29f84084fafeda94fed1 Links
- Repo: https://github.com/huawei-csl/KVarN
- Paper: https://arxiv.org/abs/2606.03458
- vLLM TurboQuant study (source for the throughput / reasoning numbers above): https://vllm.ai/blog/2026-05-11-turboquant
It looks like they learned from the SINQ https://www.reddit.com/r/LocalLLaMA/comments/1nxjh4c/github_huaweicslsinq_welcome_to_the_official/ case where everyone was asking for throughput numbers and vLLM integration 😃 submitted by /u/acluk90
[link] [comments]
---|--- - FP8 (
-
🔗 sacha chua :: living an awesome life Emacs Chat 25: Ben Zanin (@gnomon@mastodon.social) rss
I chatted with Ben Zanin about music, Org Mode, Emacs in terminals and on an Android, keyboards, elfeed, and more.
View in the Internet Archive, watch or comment on YouTube, read the transcript online, download the transcript, or e-mail me.
Chapters
- 0:00 How Ben got started with Emacs
- 2:19 Ben got into Emacs because of twittering-mode
- 4:30 Emacs as a media playback platform with Versuri and Mpdel
- 9:13 Emacs on Android with Termux
- 13:44 Keyboards and other devices
- 16:44 Benefits of a split keyboard
- 18:22 Meeting workflow
- 21:11 Narrowing
- 22:58 There's even an internal Slack channel about Emacs at Ben's company
- 24:50 Ben keeps Org capture templates as individual files and adapts them to different meeting flows
- 28:45 Personal-scale software and the journey
- 34:07 vc-git-grep for finding notes again
- 37:47 Keybindings and terminals; wezterm
- 42:38 Timers: tea-timer, tmr
- 43:57 Different stages of package use
- 44:47 Elfeed
- 53:13 Bookmark naming conventions
- 53:50 elfeed-curate for annotations
- 55:46 mytoots archives Mastodon toots
- 57:05 Mentoring offer
- 58:02 A local instance of public-inbox can let you use Gnus to read mailing lists quickly
Transcript
Still needs editing
Expand this to read the transcript0:00 How Ben got started with EmacsSacha: I forgot to ask you how your last name is pronounced. Ben: Oh, Zanin. Sacha: This is Emacs chat number 25 and here I am with Ben Zanin. You have a math background and now you're in IT. Where did you encounter Emacs in the journey? Ben: So the reason I have a math background is that I wanted to get into programming language design and at the time so that led me over to lambda calculus and that kind of thing and at the time it was at the time I was getting into university in like 2005-2006 It was impossible to get into the computer programs, but I could get into math. I figured that would move me in the direction that I wanted to go in, so I did. Got to third year, and then every professor who taught any of the courses I cared about all left the faculty at the same time. Sacha: Oh no! Ben: Yeah. Anyhow, that's a different story. But yeah, I got into Emacs because in the process of learning about Lambda Calculus, the Lisp weenies found me. And yeah, I spent a bunch of time learning about that. And it wasn't until like 10 years after I got into Common Lisp and Scheme that I actually got into Emacs at all. Sacha: That's interesting. Usually people, like, if they're doing Lispy things, they get into Emacs right away because Lisp. But okay, so 10 years after. You're already well-used to parentheses at that point. Ben: Yes. But I guess it wasn't until about ten years ago, like around 2015 or so, that I started really getting into Emacs. I would still consider myself to be a beginner on that front. Sacha: Oh yeah? So what got you to get into it more? Ben: I found that I was looking for more structured data management processes. Basically, I was looking for personal information management. And I kept bouncing off Emacs because I wanted to get into those tasks, but Emacs was such a rich learning process that I kept getting sidetracked, so I kept bouncing off of it.2:19 Ben got into Emacs because of twittering-modeBen: But I have to admit that one of the things that originally actually got me into Emacs was twittering mode. Oh yeah? Because I was looking for a tool that would let me, we'll probably get into this later in the chat, but I was looking for a tool that would let me keep a larger window of context about the conversations that I've been in. The Twitter apps and the Twitter website implemented a really narrow window. I wanted to be able to search back a couple of weeks for stuff that I had seen or talked about previously. Twittering-mode gave me the ability to keep days or weeks of context in a single buffer that I could then immediately search. So I didn't actually get into Emacs as a text editor, I got into it as an application platform, and then gradually learned the rest of it. This is actually fantastic. So I kind of stuck around after that. Sacha: That is the first time I've heard of someone coming to Emacs because of Twitter. Ben: No, it's deeply embarrassing. Sacha: No, it's wonderful. I love that there's just so many reasons why people come and the fact that you could find something that would let you take those notes and see that context and reply to it, and even, as I see in your config, work around slow keyboard response issues. Ben: And also the fact that that's still in the config despite Twitter itself... I think I abandoned it in 2017, but it takes me a little while to rip things out of my config. Sacha: Yeah, I see you're a lot more active in Mastodon these days. I see your Monsterdon posts scrolled by my feed every so often. Yeah, so we dove right into that because a lot of the stuff in your config is interesting and your workflows too. My idea for these Emacs chats is to show people the kind of stuff that isn't immediately obvious to newbies when they're looking at someone's config. Because a lot of the stuff is new workflows and how the keyboard shortcuts work together and how this stuff fits into your life. That's not immediately obvious from the code. I've taken a look at your config, but before we jump into the gazillion things I wanted to ask you about, are there things that you particularly love about your Emacs workflow?4:30 Emacs as a media playback platform with Versuri and Mpdel
Ben: I'm probably going to get a little bit of deserved flak for this, but I use Emacs a lot as a media playback platform. I spend a lot of time using Emacs to listen to music through MPV. And I've got some integration with Versuri, which lets me... I think you've seen those customizations where what I've done is I've kind of duct-taped the two together. Versuri is an Emacs package for being able to quickly search through lyrics for songs. What I've done is I've bound Versuri to the point where I've pulled up a page of lyrics, I now have a hotkey that bounces me over to a search of my MPD library for where that song is, and vice versa. I've got MPD rigged up so that when I've got a song currently playing, I can bounce into Verisuri to display the lyrics for that particular song. Something you probably have not seen in my config yet because I haven't finished it yet... What I'm working on is actually integrating Org Mode with MPD, because I'd really like to be able to streamline my process where occasionally when I'm listening to something, I'll take notes either about the lyrics or about the song. I'd like to be able to link from Org Mode directly to either that song, that album, or that particular timecode. I don't have that yet, but I'm working on it. I think I'll probably lean on it quite a bit once I have it. Sacha: Yeah, yeah. I saw your tweet from May, I think, where you're talking about coming up with this way of taking notes. think if you come up with maybe a custom Org Mode link type that can store the annotation and then let you go to it, I think that would be really interesting. Especially if you figure out, okay, like, are you taking notes in the album? Are you taking notes on the song? Are you taking notes on this moment in the song? That could all be very cool. Ben: Actually, do you mind if I share my screen? Sacha: Please. Ben: So one of the things I wanted to kind of note was... Let me... Oh yeah, this is actually going to be further embarrassing. I'm a terminal Emacs user. Sacha: I saw. Can you increase the font size, though? Ben: Absolutely, yeah. Sacha: Resizing your terminal so it's smaller makes everything look bigger... Ben: Is that better? Sacha: More. Some of us are older. Thank you. Ben: One of the things that's kind of unusual about my MPD configuration is I've got a satellite config. Sorry, the line wrap is a little bit off here. What this means is that I have... the household file server maintains the MPD library, but I've got multiple playback nodes around the house. What that lets me do is... Sacha: You can play stuff on this... Ben: So what this means is that I'm controlling the... well, in this case, that's a little MeLE Quieter3C that I've got in the living room that's kind of like the the home media server, the home playback machine. Fundamentally, I'm an ops guy, I'm a sys admin, and I've got, unfortunately, a fleet of machines around the house. What this lets me do is easily control each one of them. Instead of each one maintaining its own library of music files, the file server itself indexes them, which means that library updates are almost instantaneous, instead of having to read over the network to pull metadata out of each individual file. So having a satellite setup lets me... The real benefit is that MPD tracks albums, directories, and files as URLs. That means that I have a single global namespace of URLs for all of the media that's currently in the library, which means that I can annotate from any machine, but have it mean one thing. It makes it convenient for navigation, but it also makes it convenient for keeping notes, which I'm currently doing manually and working on those Org link types to be able to make it a little bit more smooth than it currently is. Sacha: So you've got your central store of music files. You've got URLs for them so you can talk about them. That's just one identifier per song. You've got multiple speakers that you can use your completing interface to say, okay, I want to play this over there. You have Emacs controlling all of that. 9:13 Emacs on Android with TermuxSacha: Now, is that Emacs on your laptop and you just take it around and you say, okay, I'm going to sit in the living room for a little bit or whatever and play there. Or do you... Ah, there you go. That's what I was going to ask. All right. So Emacs on your phone. The Android port or Termux? Ben: I have both installed. I think you actually saw this a few months ago when I was running performance comparisons between the Termux version of Emacs and the native port, and found that the native port generally ran anything CPU-intensive roughly twice as fast. But I still use the Termux version because it's... I'm not sure if you played around with the Android terminal virtualization layer at all, but it's not great. I really appreciate the integration that Termux gives me with Android features. For example, being able to query the sensors, such as GPS or temperature sensors, and I can actually pull those in from the Emacs side. And that's something I kind of want to get into. Sacha: What do you think of using the temperature sensors for? What can Emacs do with that? Ben: It's not so much the fact that I use the temperature sensors as that when I pull the sensors, that's the most remarkable value that I get out of it. But one of the interesting things is the barometric pressure sensor, which gives me height, which matters because when I'm out and about and if I stop to record an entry in my journal, for example, I'll just pull the sensors and dump them into the header in the entry that I'm writing. The barometric sensor, I'll get the GPS, so that'll tell me what the actual height is at that location on the earth. The barometric sensor also gives me a little bit of insight into the weather. So it's not so much the temperature sensor is what my temperature is, but just like if it's a hot day or not. Sacha: I am very curious about that setup. So if you happen to share your, I don't know, Org capture for Termux that includes all these things... You don't have to show me the actual stuff, but you know, at some point I think other people will be curious about what kind of benefits they can get from running Emacs on their phones. Ben: So, I mean, I guess I'll... One of the benefits that I get is the ability to keep shopping. So I'm a little bit of a militant cyclist. One of the things that I often do is leave
Ben: notes about things that I need to take care of in particular areas of the city. The nice thing is that I can just drop them directly in commits right as I'm going. So I often have a long list of updates that are from Emacs on my phone, just because it's convenient. All right. There we go for Monsterdon, in fact. Sacha: Nice, nice. Then that's Syncthing or whatever else to just get it copied back to your laptop or just on your phone? Ben: Straight Magit mode. Sacha: Oh, yeah? Ben: That's one of the things that I found was a little bit clunkier when I was running virtualized Emacs under the Android emulator and also the native Android port of Emacs. They are a little bit more troublesome to get Magit to work. Because I rely on that for syncing back and forth from my phone, that's one of the reasons why I stuck with Termux. Sacha: Very cool, very cool. I like Termux's little bar of extra keyboard keys that you can have, so you can have a regular keyboard and then you can just have your Controls and your Alts and whatever on that little extra bar. Termux is quite interesting. Ben: I think I'm probably pushing it harder than it is meant to be pushed. Sacha: That's the fun of it. I don't exactly know how everything will shake out, but probably with Google trying to lock down the developer ecosystem in a few months, right? They're saying, oh, you know, it's got to be ADB in order to get these unsigned apps on. We'll have to see how it all shakes out. But I'm hoping Termux can survive because I like that one too. Ben: Yeah, me too. Sacha: Okay, so you've got interesting music, an interesting music setup with lyrics and playback and all that stuff. You've got your phone, which also runs Emacs and from which you can, you've also set it up so you can control your music from your phone? Ben: Yes. Sacha: Okay. 13:44 Keyboards and other devicesSacha: When I was reading through your toots, I noticed you like to play around with other keyboards and other devices like the 8BitDo. Do you have any of that talking to Emacs too? Ben: [Keychron B11 Pro is] the keyboard I'm currently using. I got this so I could keep it in my purse and just like walk around with it, but it turns out it's super comfortable and I'm accidentally using it as a daily driver. Sacha: All right. Name-drop the keyboard for all the people who like the device recommendations. Ben: It's a Keychron B11 Pro. It runs ZMK. ZMK, I suppose. And if you've seen me interacting with Pete Johanson on Mastodon, he's the lead developer of that firmware package. It's a little bit like QMK, except that fundamentally QMK is a polling architecture, and it works really well for very restricted microcontrollers. ZMK is interrupt-based, which means it is tremendously more efficient in terms of power draw. So if you want a Bluetooth keyboard, you should probably run ZMK on it. Anyhow, yeah, it's fantastic. And I do have a bit of a keyboard problem where I tend to... Sacha: Many Emacs people have keyboard problems. Ben: Right? I feel like I'm in good company right now. Sacha: Yeah, yeah, yeah. So, devices, yep, gotcha. And this has become your main keyboard even for regular computing? Ben: In the last couple of weeks, yeah. It's super comfortable. Because it's so flat, I can get away without having to use palm rests to actually keep in a decent posture, because of the curvature of it.. Like, it's an Alice layout. The key travel isn't too bad. It's actually quite comfortable. I found that I needed a little bit of acclimatization to get used to split keyboards. This one has roughly the spread of a split, but it seems to be easier for my muscle memory. So yeah, I didn't intend to leave it on my desk, but it stuck and has kind of stayed there for now. Sacha: Does it have any special ergonomics for all the modifiers that we like to do? Or do you just use Caps as Control or whatever else? Ben: Actually, I don't use Caps as Control and I actually really need to get into remapping that. ZMK has a very rich remapping story, as I expect you to imagine, from a custom firmware. The macros are intense, and you can get really deep in customization. I have done none of that on this keyboard yet, because it's only, I think, a couple of months old at this point. Sacha: You've been settling in. As you said, this has been your main keyboard for a little while. Charlie Baker says, "yeah, I love the split keyboard. Recently bought one myself. I was getting so much neck pain, you know, shoulder and neck pain from so many hours keeping hands close together." But the split lets his shoulders relax. So probably you're getting the same, like, ha, my arms.16:44 Benefits of a split keyboardBen: The two things that I first noticed when I moved to a split keyboard was one, my wrists started feeling a lot nicer and two, I was immediately able to bench press like 20 pounds more the next week. It was amazing how much of a difference it made and it showed up in the data. Sacha: Wow. There was a weightlifting talk at EmacsConf last year, I think. So there's a surprising overlap between the people who are checking their weightlifting stats and the people who are into Emacs. Naturally, with Org Mode. There you go. Ben: Let's not look at those numbers too closely. I'm not too proud of a bunch of them. But yes, I find that Org capture templates let me keep on top of that and not really think about it, which is great because you don't want to think about it. You want to gather the data and think about it separately so that you can stay emotionally divested from what the numbers mean. Sacha: I know. I'm totally happy to dig into the Org capture, especially if you do any graphing. People always love graphing their progress, right? But if you're like, I don't really want to show my numbers at the moment, that is also understandable and okay. Ben: I don't, I'm afraid. Sorry. Sacha: That's okay. Ben: It took me a couple years to get used to being on camera at all. I don't really like my appearance very much. I'm working on that, as you can see. I've had to work on that to be able to work remotely. It's a work in progress. I'm getting through it. Sacha: You know us. We're very much focused on text. In fact, you even use Emacs in the terminal. That's very text-y.18:22 Meeting workflowSacha: One of the interesting things actually that I wanted to ask you about since you mentioned meetings is you probably also have the role of designated note-taker. You mentioned in one of your toots that you take notes and people are like, what are you doing that in? How are you taking your notes? And it's Emacs. Ben: Yes, so actually that's one of the things I should lead off with as an apology. I probably won't be able to share many of my capture templates because I don't use them in my personal life very much. They're mostly on my work machine. I've got capture templates for impromptu meetings where it's just like an exploratory, we have a problem we need to solve, we're kind of talking through a discussion, a separate capture template for meetings with agendas to make sure that we stay on them and that we log decisions, and a separate set of templates for... So I have a team of direct reports and they each have different cares and different topics that we're working to develop in their professional careers. I find that it's really useful to be able to keep some continuity between our conversations. It also makes it very easy to export that entire dataset, share it with them to make sure that they can consult it at the same time. If I got anything wrong, I can fold their corrections in. But all of those templates, unfortunately, are on my work machine. Sacha: We'll just sketch out the general idea in abstract details and then people who want to implement it for themselves can fill in the blanks. For example, when you're having a meeting with your direct reports, are the tasks related to them in an Org agenda? Are you using dynamic blocks? Is it tracked somewhere else or is it in Org? Ben: It's straight in Org mode. So most of the touch points that we have are more about professional development and their cares and concerns, rather than specific deliverables. Usually deliverables we manage at a team level. But if there are specific things that individuals are working on, they will be in to-dos under their subheadings in a way that show up on the agenda if we have assigned deadlines for them. But generally, if there's a deadline on a task, it's because I'm doing something and they need to track it, or they're doing something and I need to track it. If I'm the only guy using Emacs, then Org Mode won't work for that, so there aren't a lot of those. But if it's just something that I need to check up on to make sure that something that... Like they've got planned leave for example, or they have a cousin's wedding that they need to go off to, or something that I just need to keep in my brain that's not necessarily deliverable, then it would be appropriate to keep that in a place where it'll only show up on my agenda. So that's the kind of decision making that I apply there.21:11 NarrowingSacha: And you mentioned you have a subheading, I guess a subheading per person or sort of... Or do you use tags to keep track of something that might touch several people? Ben: Usually a section per person, and that's more of a convenience than anything else. That lets me narrow to just that subheading and share my screen during the meetings. Then I don't have to worry about accidentally leaking anybody else's information into the screen share or anything like that. Obviously we let off with conversations about them being all right with that. But the ability to very clearly and simply delineate "This domain of my notes pertains to this person" and being able to be confident and share that confidence that there will be no leakage means that we can explore topics and talk about them in a way that might otherwise be a little bit more restrictive. So being able to do that simply, and being able to establish a very clear delineation around whose information belongs where and where it should be shared turns out to be pretty valuable. Sacha: Yeah, and that's a technique I think that especially people who are new to Emacs and who aren't used to narrowing and widening might not know how to use effectively. I think narrow is even one of the commands that's disabled by default. You've got to say, yeah, you know, I'm not scared. I know what to do. Ben: Yeah, it's kind of bizarre to me that it is, but yeah. Sacha: I can imagine people accidentally triggering it and they're like, oh no, the rest of my file is missing. But if you know how to narrow to a region, and Org even has those commands to easily narrow to a subtree... I think it's even part of the default speed command so you can trigger it right from a heading. But it's great for that kind of restriction.22:58 There's even an internal Slack channel about Emacs at Ben's companySacha: Okay, so the reason why I was asking about that is because some people are working with people who are not using Emacs, so it's very interesting to see what the kinds of... It's very rare for people to work with other people who actually use... Are there any other Emacs people in your company, for example? Ben: There's an entire Emacs Slack topic about that, yeah. It's kind of great. Sacha: What is that like to have co-workers who do Emacs? Because this is a rare experience. Ben: It's super cool. It's also neat to see the very, very different ways that people use it. But yeah, oftentimes people will talk about problems that they have with particular internal tools, and somebody's like, oh yeah, go check out this repo on GitLab that I published last week where I got sick of it and decided to solve that problem categorically. It's actually super cool. And some of the folks at... Generally, I tried not to mention my current employer at any point. Obviously, it's not secret. It's in the init file. But yeah, I don't tend to get into that deeply. But some of the other people who work at my company, they maintain venerable Emacs packages. So it's awesome to be able to go and talk with some of the folks who I've been working on the code that I've been using for a decade and we are now coworkers. It's lovely. Sacha: Oh, that's so nice. I'm glad you have that kind of little community in there. Ben: Yeah. Bunch of nerds. Sacha: So I suspect some people will be looking up your company after this. I think it's also mentioned in LinkedIn and sort of like, okay, let's see if there's any job openings. Ben: If it's mentioned on LinkedIn, that is somebody else. I haven't logged into LinkedIn in 15 years and I never will.24:50 Ben keeps Org capture templates as individual files and adapts them to different meeting flowsSacha: We do have a question from Shae. Shae is asking, how do you make a capture template to stay on agenda and record decisions? You got any tips for that? I'm guessing this is more of a human thing rather than an Org thing, but maybe you have some ideas on how you keep something on track. Ben: So I'll actually push back on the "It's a human thing rather than an Org thing". I strongly believe that one of the real values of Org Mode is that it's a very plastic system. Fundamentally, I think that it is a human system because it allows you to express exactly those kinds of trade-offs in a really, really fluid way. I love the personal information management that Palm Pilots provided, for example, but it was pretty restrictive. One of the things that I love about Org Mode is that if you find that a particular person has a particular conversation style, it's really easy to modify your Org Mode capture templates to be able to capture that particular flow that you have with that person. Or with a particular group of a recurring meeting, for example, that tends to flow in a particular way. Super easy to update the templates that I use to capture those particular meetings to make it easier to match the general conversation flow with the notes that I will be taking about it. Sacha: Wow, that sounds pretty sophisticated. Ben: Well, I mean, that's the thing. It's not sophisticated. It tracks the human process very easily. So it's really lightweight. So you don't have to have a lot of sophistication to make it very, very useful. You just have to have a feedback loop that you can tune every time with one or two minutes of effort. And that's one of the reasons why I depend on Magit mode so much is that it lets me track those things. But yeah, to answer Shae's question about how do I track those particular things. So if it's a meeting where one of my direct reports has a particular set of topics that we tend to investigate, like somebody who's concentrated on career growth. So we're talking about the areas in which we want to see development. I'll absolutely update the capture templates for that particular person to say, all right, here's what we talked about last time. Here are the things that were done between our last two conversations about how we move in that direction. Were they successful or not? Did it require a lot of effort? So was it something that more effort should be put into to be able to drive down the work over time, to be able to produce those results? But yeah, that goes into the templates and that goes into the cadence of conversations that we talked about in Capture. Sacha: So that's really interesting. You modify the capture templates with the notes that you want to have easily available the next time you chat with them. Ben: Exactly, yeah. Sacha: The capture templates are still defined as a setq somewhere in your thing, or are you going into the customized interface? Ben: So I actually keep the capture mode templates as raw files that are referred to, and that makes it easier to version them in a way that like, I mean, sure, like my Emacs init file, if you look at the Git history of it, it has a whole bunch of different... Sacha: I had not considered having capture templates as files files. It worked out really well. Ben: So you can see that... It's a little bit hard to see with the font this small, but you can see that I've got a lot of changes to, for example, my init file, but keeping them in individual capture mode template files makes it a little bit easier to just look at the history of that particular file and see why particular changes were made. Sacha: I'm going to try that. I think that's a great idea because it allows you to be a lot more granular about the notes.28:45 Personal-scale software and the journeySacha: I saw in that very brief flash of your change log message that you like to write Fairly detailed commit messages that talk about why a change was made instead of just a new function, new command. Very terse updates that I sometimes just try to get away with. Tell us more about that because I think you've had a couple of toots about reading source code and reading commits. Ben: Yeah. So I guess One of the things that I most appreciate about software in general, and specifically personal software, like personal scale software that's been written by an amount of people that you could fit into a room to have a conversation about it. One of the things that I most appreciate about that is that almost all software written that way is fundamentally a diary about the way that a person learned how to solve a set of problems that they might not have known about when they decided to at the beginning. It's this fascinating process of Tracking somebody's voyage through the problem landscape as they discover other people who have touched on topics that are tangential to the problem being solved by that software package. It's such a personal and fascinating experience to see somebody go from, I know just enough about a problem to be able to decide that I want to build the machine that works on it, to I have this deeper understanding of how the problem actually exists in the broader set of things that people care about. ...oriented along the axis of what machinery can do to help solve parts of that problem. And like the commit logs for a program are like just this, it's like a map through that territory. It's wonderful to read, but it's also like... It gives you a lot of insight into the person doing the navigation. When you see 16 commits on December 24th of 2023, like, oh, okay, that person probably had a little bit of time to work on it. And then when you see a bunch of commits that are like 5 p.m. Monday to Friday, like, oh, okay, this is probably done in a particular way. But yeah, it's this deeply personal process of seeing how problems are learned about. And I just really appreciate that. Sacha: I think what you're saying about personal scale software and kind of getting a sense of people's journey as they learn to understand a problem and as they start to prototype a solution because you never quite come across the right solution the first time around. You're figuring things out. You're borrowing things from other people. I think that will resonate a lot with lots of people in the Emacs community because Emacs use is so personal as you mentioned when you were looking at the Slack channel. I was wondering, in your personal practice, as you figure things out, what kinds of things help you? Is it mostly a matter of actually sitting down and taking the time to write the literate programming stuff around the code blocks or the commit messages? Or are there other tools or techniques that help you do that? Are there tools or techniques that help me write down your journey along the way as you think about the code? What's your practice? For example, when you come across something that you want to figure out, how do you go about doing it? Ben: So it depends on how I'm approaching the project. So one of the neat things about software is that it's a document and a device at the same time. So you can care about it because of the thing that it does, or you can care about it because of the information that it captures. And if I'm digging into a program because it does a thing that I want to learn, then I'll pay attention to the device aspect of it. And that usually means that I'll start with its own documentation. So if it has a man page, I'll read that. If it has user docs, I'll read those. And usually I'll start keeping notes in an Org Mode file because it's easy to hyperlink back to it and add my own annotations in parallel to the actual authoritative source. If I'm reading software primarily as a document, then I'll start by reading the source code and the commit logs, usually the most recent ones, and then I'll jump back to the beginning of the project and read upwards at the beginning, and then fill in the blanks iteratively if it's a project that's small enough or has little enough history that I can do that. And again, I'll usually start an Org Mode file specific to that particular exploration that will let me organize my notes as I go. I really do rely on the external brain that I can keep in an Org Mode file. I tend to have a pretty decent long-term memory, but being able to bridge the gap between short-term memory and long-term memory is super, super useful. So leaving myself hints that let me dredge things back out of long-term. Reloaded into the hot cache of short term really, really helps out because that lets me maintain that flow state or get back into that flow state when you've got like the whole program, all the context that you've absorbed up until now and the ideas of like the areas that you want to investigate. Being able to hot reload all of that and then pick up where I left off is super useful. But the meat brain can't do it. I need the machine brain too.34:07 vc-git-grep for finding notes againSacha: Tell me about this dredging up process. Are you a lots of little files person? Are you a couple of large files? Are you a project file? There's an Org file in each project that you look up. How do you find things, especially if you don't remember the exact words? Ben: So it's usually like an Org Mode per category and they get consolidated. Let me shrink this down a little bit. So usually it's an Org Mode category per file. If there's something super specific, then usually it'll kind of live out in its own place until I get around to... I love that you have an Org File specifically for Mud Cake. But that's the thing. It'll live off in its own thing until it gets integrated into the list where the long-term stuff lives. So, for example, I promise this is pertinent to your actual question. Sacha: No, no, this is very pertinent. Ben: But so like usually lots of little files while I'm still working on something and then as that something becomes part of my larger life and has links to other things then it'll kind of get centralized into one of the Org Mode files that has a broader topic purpose basically. Sacha: Okay and then if you if it's like very long term and you can't remember the exact rates to find something how do you generally find find your notes? Ben: That way. Sacha: All right. You start graphing various keywords and try to find it. Ben: Yeah. So one of the things that I don't yet have turned on, and actually you inspired me to look into this, was so... Actually, do we have enough time? Yeah, okay. So I'm just looking at the clock. One of the things that I wanted to get into was long-term searching and searchability. Yeah. So I use SQLite's indexing for a lot of things, and I really appreciate its Porter stemming because it lets you search for stemmed words, which are kind of approximate matches, which is useful, but less useful than vector databases. And you actually put a little bit of work into indexing topics based on vector similarity. Sacha: Which I haven't gotten back to, so I'm glad to see, you know, you managed to experiment with it. See what you come up with. Ben: So I don't have anything to show yet, except that it's an interesting topic because... Because I'm word-oriented, I will often remember individual keywords or I'll have enough patience that I can sift through a list of potential keywords as I'm grepping for stuff. And if I find that my first three or four attempts at searching for a keyword don't find the topic that I'm looking for, once I do eventually dig up the topic, I will add those keywords that I was searching for just so I can find it next time, expecting that future me will probably behave more or less like current me. But yeah, like being able to use a vector database to search for headings that include related topics instead of related words. I'd really like to get there. I'm not there yet. And I think that's going to be interesting and useful. I also think it's going to be challenging to kind of represent Org modes. hierarchical structure to restrict the training of particular vector sets to be able to find like an increasingly or cast an increasingly wide net for where I want the searches to run. So I don't know how that's going to be solved yet, but I'm going to be looking into it.37:47 Keybindings and terminals; weztermSacha: Percopop has a question regarding terminal Emacs. Do you need to change any of the keybindings to avoid clashes with the terminal? You know, some keybindings don't work on terminals, or some terminals already have these keybindings set. Ben: Yeah, so I have good news and bad news there. The good news is that, so one of the terminals that I'm using right now on most of my systems is Westerm. It's really good. I started off with Alacrity and I kind of bounced off that project because of some of the behavior of the lead developers. I won't get too deep into it, but what I found is that Westerm It gives me very little friction that way. It doesn't have a lot of its own key bindings on its own, and that's a relief. It means that I really don't have to... I don't think I've had to put any time into customizing Western to get out of the way of Emacs or Screen. And I should mention, I am running Emacs within Screen. So that introduces another layer. Control-A-A, for example, is beginning of line for me, even though Control-A itself is the default Emacs keybinding. But yeah, I think that I ended up choosing terminal software specifically on that merit, so that it doesn't get in the way. That's actually one of the things that Termux is... The default Google keyboard keeps stealing key bindings. It'll update and all of a sudden I can't use a particular alt key combination anymore because now it invokes a Google keyboard shortcut for pulling things out of the Android clipboard, for example, which is really kind of annoying. But yeah, in terms of terminals on full-fledged machines, I generally don't have that particular problem. Except for... What was the name of it? It was... It was a zap-to on-the-screen package that alphapapa wrote, I believe, that I... Actually, let me just look it up. Yeah, Avy. Sacha: Oh yeah? Ben: So I wanted to start picking this up in 2021, and yeah, control colon doesn't work in terminals. So the mode itself is fantastic, and when I'm using it in a GUI Emacs, it's very useful, and I rarely use it now specifically because of that particular terminal problem. That is self-inflicted. That is not a problem with the package. That is a me problem. But yeah, I think this is the notable one that I bounced off of. Sacha: Yeah, just trying to find the right, you know, a key binding that will pass. Because you can't get used to key binding in one system and then not have it available in other systems. It's just going to mess with your brain. So yeah, Ray points out, yeah, Google steals Control Shift K, which he uses to kill tabs to the right. So it's like, oh. Ben: Infuriating. Sacha: Yeah, yeah. And of course, none of the standard keyboards have a super key on the thing, so you can't just tack on another modifier that'll get through. Ben: That's actually one of the reasons that I picked up this particular keyboard is Brian Carlson. Another Torontonian. He works on Git LFS and some other stuff. He was specifically looking for a keyboard that had a super key that he could remap. So four keys to the right of space, which this one has. And because it's ZMK, it's remappable. I think this might be suitable for his purpose, except that he wants a QMK keyboard, specifically because the development tools for QMK are packaged in W, and that's a plus for him. Anyhow, yes, I agree. Like, not having a super and a hyper key on a keyboard Sacha: feels like like one of your fingers that are cramped up we need more modifiers well I mean you know pipe organ Tell us about that. Ben: What is this? Oh yeah, foot pedals. Yeah, and I actually do have these wired into a little Atmel microcontroller running QMK. I honestly tried the foot pedal thing for a little while. It was hilarious. I did not find it useful. Sacha: I don't have the hand-eye-foot coordination to do that thing at the same time. Ben: Maybe if I had learned piano as a kid, it would have been good. But yeah, I don't seem to be able to do it. But I gave it the old college try and it was fun.42:38 Timers: tea-timer, tmrSacha: Okay, I had a couple of things I wanted to ask about in your config. You have two types of timers. You have tea-timer and you have Prot's TMR. Do you use them for different purposes? What's going on here? Ben: So I'm trying them out. I tried TTimer first because it was the first one that I found, and it was useful. I was actually using it in meetings because I would, when I was trying to keep us on topic, I would use that to remind us that, oh, we've got four other topics we need to get through. We're trying to give this one five minutes. We're running up on four. And it was just because it was super low overhead. It was easy to pick up. It was easy to have it displayed on my screen. And it didn't feel like I was... Running a chess timer on everyone. It's very subtle in the mode line. It was useful. But what I found was that when I was... Running multiple timers simultaneously. TMR, just the fact that you can list all the timers and manage them in a separate buffer. It's richer and I appreciated some of its documentation more. I haven't fully switched over to it yet. I'm still in exploratory mode. In fact, this is probably like... So I actually have a bunch more packages installed than I'm currently using. So I'm going to shrink this down a little bit just so that it doesn't line wrap.43:57 Different stages of package useBen: But yeah, so I've got, I think about 140 packages locally cloned. I've got, as you can see in my init, about half of that actually installed. There are various phases. I've got a clone, but I don't have it in my init. Or I have it in my init, but there's another package that offers similar functionality. Or I'm all-in on this particular choice and I'm removing the other ones. It's a gradual kind of progression. Sacha: Yeah, we're all auditioning packages to see if they fit in our workflow and all that stuff. I was curious also about your elfeed things. You have a few things related to elfeed. Actually, do you want to talk about the thing you just highlighted first? Ben: No, we'll get back to it in a sec. I'm keeping an eye on the clock. Sacha: But yeah, elfeed.44:47 ElfeedSacha: Yeah, you've got a couple of interesting things in your elfeed setup, including picking a search from a bookmark or other shortcuts like that. Ben: So I have discovered in my conversations with the new maintainers for elfeed that my elfeed habits are very deviant. So let me actually start off by going through... You can see that like the top of my elfeed list is kind of in one format and down at the bottom, the ones that are closer to present day are organized in a different way. Sacha: You've got tags now. Ben: So my feed list is, I mean, it started in Google Reader. It's kind of been forward ported since then. It's long. Sacha: I love the comments. Ben: But one of the consequences of having a long feed list is that I have an enormous elfeed database. And I use it for completely different purposes. So for example, I'm going to show off that little default search. I keep an eye on projects that have releases that aren't packaged by Debian, for example. So I've got this little ATS Mini. basically a small AM FM radio that happens to run on ESP32 and the firmware for this community developed and it's kind of interesting but like that's not packaged by Debian so I pay attention to or I subscribe to the release feed for that particular project. I do keep in keep an eye on the Linux kernel especially these days because The gallop of security vulnerabilities coming out of mythos analyses right now means that I have to pay more attention than usual to fresh updates. So generally I run Debian stable, but I do run kernels from backports and I want to know when those are available. MeshTastic. I was paying more attention to this a couple of weeks ago. I'm not going to reach that right now. But yeah, the local MeshTastic community in Toronto is plagued by a couple of griefers that make it a lot less fun. So I'm paying a bit less attention to that right now. But yeah, so like one of the bookmarks that I have is software currency. Another one is, for example, the YouTube channels that I subscribe to. Thank goodness for Elf YouTube. It is so nice to be able to get the transcripts for things directly in there. Sacha: There's even a sponsor block integration so you can skip all the promotions and stuff. Ben: Yeah, I mean, so again, my use of YouTube is also deviant in that I pretty much strictly subscribe to RSS feeds and they're downloaded onto the file server. So when a new recording comes out, it gets dropped there. I'll watch it. And then I've got a little widget that scans through my Kodi database for watched files. Once YouTube files show up in the watch list, they're automatically purged. And it means I just never see an ad. It's not just satisfying. I don't think that I would be able to pay attention if I was being constantly interrupted because of the way that my brain works. But yeah, so being able to quickly search for YouTube is one thing. I do have... articles that I've marked as spoilers for media that I haven't watched or read yet. Maybe I go to an extreme degree, but I'll try to avoid previews for new movies, for example. But I do want to actually go back to them later on. Marking articles as having spoilers that I want to revisit later on is an easy way of not having to worry about it anymore. And for a while, back in the days when I was paying more attention to... Enter the Dragon was the sequel to... What was that TV show? The George R.R. Martin seven seasons and it went badly off the rails in season six. Sacha: Game of Thrones. Ben: Thank you. So when I was watching that for a while, several of the sites that I was reading would have individual episode updates. And I really appreciated having a list of Elfie keywords that I could automatically apply those tags to. So I wouldn't even see the headlines because it was problematic enough. I've become less... Nice. Yeah, I've been putting less effort into maintaining that now, but the infrastructure is still there and I can lean on it if I need to. One of the things that I don't have set up right now is a quick search for the municipal topics that I cover. So I tend to subscribe to a lot of news because I found that, for example, it's interesting to see how the Toronto Star covers stuff differently from other local newspapers. And it's useful to be able to quickly pull up You know, the five or six publications that cover news in the same way and then look through the annotations for them or add the annotations myself so I can see that this particular story was covered by this journalist in this publication in this way and then it lets me cross-reference so that I can pay attention to Topics that are under-covered or publications that habitually leave out particular aspects of news stories. It lets me pay more attention to The trends of publications as well as to the stories that they're covering. But the consequence of that is that my LFE database is like four and a half gigs. And it's common for me, actually, I don't know if that actually shows. It's common for me to have like 65,000 articles in like the six month horizon for the default LFE searches. And that means that searches and redraws are expensive, even on a relatively performant machine. So you've probably seen some of the workarounds that I've got. And this little bookmark selector is one of those workarounds. So L feeds interactive search, super, super useful. But if you're trying to do it like this, actually, it's not so bad. Sacha: I love this. This is like, yeah. When you see someone using elfeed for like 65,000 items, you get a sense of what you can be used for when you're really stressing it. Ben: Yeah. Well, and the organization of the bookmarks that I have means that I do have like one just river of news of all of the things that I want to pay attention to. But like it's seven or eight like pretty divergent topics with not a lot of overlap. So it's neat to be able to Think of elfeed as the thing where news information comes in, but the individual bookmarks are the topics that are grouped together that I actually care about and want to read about in concert with each other. If I specifically narrow it down to just Emacs stuff, one of the things that I can easily do is I had a bookmark for that search and if I name it. So now that I've got that bookmark saved. Sacha: And then it's like bookmark annotation. right and like this is also it ends up in my dot file so as a git config as a as a git commit but53:13 Bookmark naming conventionsSacha: now that that bookmark exists simply because of the naming uh lfe search now it shows up in completion precisely this sort of stuff I I am under utilizing bookmarks I think but I like that I love this idea of using bookmarks with a naming convention and then writing Emacs list but take advantage of that naming convention to make that easy to jump to easy to use in other things Ben: Yeah, it means I don't really have, like, when I notice that there's a thing, I don't have, it diminishes the activation energy for building a new workflow. It means that I don't have to put a lot of thought into it. I can quickly do it. And if it turns out to not be useful, I can quickly get rid of it. Sacha: Very cool.53:50 elfeed-curate for annotationsSacha: I had one more thing that I wanted to ask you about elfeed that I want to squeeze in in the five minutes that I have before the kiddo comes out for lunch break. This elfeed curate that you're using, this is the first time I've come across it in the config. Are you sharing your notes or your selections with other people or just for yourself? Ben: No. So it's just for myself sometimes. So what I'm trying to replicate is back in Google Reader days, I really appreciated how when you added an annotation to an article that you were reading, By default, that annotation would be viewable by other people in your social graph. That was super interesting. Sometimes you could also add personal-only annotations. Actually, I don't think that's the keyword that it uses. I think it's just an. Sacha: Also, because you have an Emacs keyword on it, so I don't know whether you have any annotated Emacs ones. Ben: Yeah. Well, I mean, generally, if I've added an annotation, it will be. So, for example, here. Right? Super useful. Well, super useful for me, anyhow. If I find that there's an annotation that is more... This is inflammatory. It doesn't need to go out on the web. Sacha: Sorry, you need to kill the stream and have a 10-second video. Ben: No, it's all good. I'm not worried about sharing this, but it's not something I've posted. But what the nice thing is is that if it is something that I want to share, it's really, really easy to just drop this into master.mode. Sacha: Yeah, yeah. Huh. Very cool. Ben: Yeah, so that's one of the ways that I use it. And because the annotations are just Org Mode files, you can add links to other things and it becomes just as useful as anything else.55:46 mytoots archives Mastodon tootsSacha: And you're saying this can flow into Mastodon and from there, once you toot it, I think you're using, like, this is mytoots thing that you mentioned in your config also for archiving it? Or searching, yeah, okay. Oh, except it's currently not working. Ben: Yeah, I don't have it loaded right now. But yeah, so mytoots, it just loads the backup of your export archive. So it loads the... What's the most recent one? So yeah, it was your Outbox JSON file, which is the most recent one here. So I've got an Org Mode reminder to download it roughly quarterly. My Outbox is about 100 megs right now. And compared to, well, I mean, it's compared to 4.5 gigs for elfeed. It's not so big. I think... Oh yeah, that's not going to redraw properly. I was just going to show it like my resident Emacs memory size right now is about like five or six gigs. It's a little bit embarrassing. By comparison, 100 megs of JSON and RAM is not so bad, but like having an instant search for everything that you posted and being able to bounce back from your local archive to the conversation thread that's live and see anything new that comes in. Again, it lets me exercise that outboard brain kind of idea. So yeah, my toot's super useful.57:05 Mentoring offerSacha: I like it a lot. And then the last thing that I want to ask before, again, kiddo, because I have like two minutes, is that you have a mentoring offer pinned in your Mastodon, too. Have people taken you up on it, especially if they've taken you up on Emacs? Is that ongoing or forgotten about or whatever? Ben: Not forgotten about. Very much real. Still open. I haven't refreshed that offer recently, but it's still pinned for a reason. Yeah, I think maybe a dozen or so folks have asked for that. 9 or 10 success stories, I think. Nobody's asked for Emacs tutorialship yet. That's fine. Again, I love Emacs. I use it. I don't often recommend it. But if anybody was curious about that, I would be very open to the idea. Sacha: All right, so if people want to also develop a very interesting elfeed setup, they know who to talk to. Ben: Please, I would love that conversation. Sacha: Thank you so much. Yes, go ahead.58:02 A local instance of public-inbox can let you use Gnus to read mailing lists quicklyBen: Oh yeah, there's just one last thing I want to mention, and I realize we're right up against time. I use GNU for email, but I use GNU for reading mailing lists. I just wanted to just strongly recommend to anybody who is thinking about it, this is amazing. You gotta do this. Public inbox lets you keep a complete local archive of the entire mailing list. Searches are instant. Tracking threads is instant. Check it out. It's fantastic. Sacha: That's great because like Emacs develops like gazillion threads and how do you even keep track of all this stuff but if you've got news and you and if you've got this set up then you're no longer dependent on the good graces of Gmail being around as a kind of NNTP to mailing list gateway so uh so yeah uh John wants to know if you have YouTube like if you have a YouTube channel I'm guessing you don't yet but uh again I don't really like my face very much Ping Ben on Mastodon and ask about this mentoring thing and then share your notes so we can all learn from it. Thank you so much for today. I look forward to chatting with you more through toots. What is the verb, you know, in the 30-verse? All right. Thank you so much. All right. Bye. Okay, folks. I'll end the stream too. Bye. Thanks for hanging out.Chat
- sachactube: only slightly panicking behind the scenes 🙂 Nudged Ben by Mastodon in case we got our wires crossed
- sachactube: yay, he's here, just getting sound sorted
- symbiopoyesis: Good morning
- x_goose_x: hey gnomonnnnnn
- CharlieBaker707: yay! love the split keyboard. recently bought one myself. i was getting shoulder and neck pain from so many hours keeping by hands close together, but the split let's my shoulder's relax.
- ShaeErisson: How do you make a capture template to stay on-agenda and record decisions? Any tips?
- PuercoPop: Regarding terminal emacs, did they need to adapt any keybindings to avoid clashses with the terminal keybindings?
- AyanRaza-n1x: is that the creator of emacs?
- Ray-On-Emacs: Yes! Google steals C-S-k, which I use to kill tabs to the right on Vivaldi!
- CharlieBaker707: elfeed is like a distraction alleviation machine. I agree with Ben, I don't think I could consume any of this information outside of Emacs. Ads and even varying formats distract me too much.
- JonKishore11: do he have YT
- sachactube: Thanks for hanging out, everyone! =)
- gnomon027: Thanks so much for running this whole series, @sachactube !!
You can e-mail me at sacha@sachachua.com.
-
🔗 r/LocalLLaMA Me visiting this sub rss
| submitted by /u/Scutoidzz
[link] [comments]
---|--- -
🔗 Console.dev newsletter mq rss
Description: Query, filter, transform Markdown.
What we like: Extract content from Markdown, then apply transformations to the content. Works as both a CLI and a REPL environment. Options to convert other formats e.g. CSV into a Markdown table. Syntax is similar to jq. Has an MCP server for AI usage.
What we dislike: Nothing!
-
🔗 Console.dev newsletter Slumber rss
Description: Terminal HTTP client.
What we like: TUI and CLI for making REST and other HTTP client requests. Config-based recipes for building requests. Can import collections from other formats e.g. OpenAPI. Templates for dynamic requests. Also works as a Python package.
What we dislike: Only supports HTTP.
-
🔗 Ampcode News Agents, Everywhere rss
Amp has a new UI and sidebar, built for watching and driving all of your Amp agents, on web, mobile, and CLI.
We rebuilt Amp's foundation last month, so that your agents can run for longer, with less handholding needed. Amp is now a distributed system with durable execution for the agent loop and a plugin API.
Now, with this new foundation in place, we're pulling ourselves back above ground to shape how you use Amp to get the most out of these models.
We want you to be happy and productive running many Amp agents simultaneously on long-running tasks. You should be able to use the agent interface for most of your work. You shouldn't need to juggle terminal tabs.
Remote-controlling a single thread was the first step toward this, and now you can remote control all of your active threads in one place:
It's rolled out to everyone. To use it:
- Desktop web: sign into ampcode.com, or run
amp app. - Mobile web: sign into ampcode.com.
- Amp CLI: press Opt+S/Alt+S to show the sidebar with threads in your current directory.
The thread list for your team has also been redesigned and moved to Activity.
- Desktop web: sign into ampcode.com, or run
-
🔗 Ampcode News Opus 4.8 rss
Opus 4.8 now powers Amp's
smartmode, replacing Opus 4.7.It is a better coding agent than Opus 4.7: more faithful to the prompt, tighter in the changes it makes, and better at checking its own work. In our internal evals it solved 62% of tasks, up from 4.7's 52%.
Tighter Changes, Better Checks
Opus 4.7 was already strong on hard, multi-file work, and Opus 4.8 keeps that. What changes is how it gets there: with fewer wasted steps and more self-checking.
The clearest difference is restraint and verification.
Opus 4.7 can sometimes over-engineer, reaching for a more elaborate solution than the task needs. It also verifies its own work less, occasionally moving on even when a command's output is already warning that something is off.
Opus 4.8 makes a more focused change that solves the specific intended task, then checks itself. It leans on a tighter write→test loop, often spinning up a quick script, test, or skill to confirm the change works before proceeding. In our evals it ran tests and code 15% more per task than 4.7.
That restraint is easiest to see on hard tasks. On everyday work the two make a similar number of tool calls. The harder a task gets, the tighter 4.8 stays, just where 4.7 tends to run long and fail more often.
It Reaches for the Right Tool
Opus 4.8 is noticeably better at using its tools and sub-agents without being told to.
When a task needs outside context, it actually calls
librarianinstead of inferring a library's behavior from the local code. Across our eval it reached for it 14 times, versus once for Opus 4.7. It also reaches for a repo's skills more often to verify its work, for example by driving the browser or the CLI, rather than just assuming the change worked.When it edits, it leans on
edit_filefor surgical, in-place changes rather than rewriting whole files withcreate_file. In our evals 79% of its file edits go throughedit_file, up from 63% on Opus 4.7.Fewer Built-in Tools
We dropped the
Readtool fromsmart.Opus 4.8 is good enough at reading files straight from the shell with
cat,rg,sed, andnl. It parallelizes those reads when it needs several files at once.Fast Mode Is Worth It Now
Opus 4.8 has a fast mode at roughly 2.5× the speed. It now costs 2× base tokens, down from 6× on 4.7—3× cheaper.
Toggle fast mode for a thread from the CLI command palette (Ctrl+O) →
speed: use fast.How to Use It
Opus 4.8 stays close to what you ask, changes less to get there, and checks its own work. A few habits make it shine:
- Say how far to go. It keeps changes narrow, touching fewer files than 4.7 unless told otherwise. Name the scope when you want it wide: "Fix this for every input format, not just this one." Left unsaid, it changes exactly what you described, which is usually what you want.
- Give it something to verify against. It runs tests and code more readily than 4.7, so a test, repro command, or repo skill turns that instinct loose. A browser or CLI skill lets it actually exercise the change rather than infer correctness from the code.
-