The best Hacker News stories from Show from the past week
Latest posts:
Show HN: Rotary Phone Dial Linux Kernel Driver
A Linux kernel driver that turns a rotary phone dial into an evdev input device. You might be interested in this driver if you<p>- prefer the slow pace of dialing over typing numbers with your numpad,<p>- want to bring your old rotary phone into the digital era,<p>- are an educator looking for a simple example driver with a VM-based end-to-end development & test environment (no real hardware needed)<p>- have another creative use case in mind!<p>This driver was my introduction to embedded Linux years ago—and ultimately led to my career. However, it remained unfinished and unpublished until now. Initially, I intended to reimplement the driver in Rust to explore the state of the Rust for Linux project. Unfortunately, I soon realized that the necessary bindings simply are not available yet, so that part will have to wait.
Display any CSV file as a searchable, filterable, pretty HTML table
I combined this with a simple API to update a CSV file using Deno/deno-csv library, allowing an Ansible job to easily update a CSV file via the API with Ansible URI module, and then have that same CSV file viewable/downloadable in a simple and easy/dashboardy way (with CSV-to-html-table). Copilot created the Deno/deno-csv CSV API code and then with a little back and forth I added static website functionality (to serve the CSV table), and I had a /view and a /update route. I'm just a sysadmin but I love piecing together stuff like this. Thanks Derek!
Show HN: Defuddle, an HTML-to-Markdown alternative to Readability
Defuddle is an open-source JS library I built to parse and extract the main content and metadata from web pages. It can also return the content as Markdown.<p>I built Defuddle while working on Obsidian Web Clipper[1] (also MIT-licensed) because Mozilla's Readability[2] appears to be mostly abandoned, and didn't work well for many sites.<p>It's still very much a work in progress, but I thought I'd share it today, in light of the announcement that Mozilla is shutting down Pocket. This library could be helpful to anyone building a read-it-later app.<p>Defuddle is also available as a CLI:<p><a href="https://github.com/kepano/defuddle-cli">https://github.com/kepano/defuddle-cli</a><p>[1] <a href="https://github.com/obsidianmd/obsidian-clipper">https://github.com/obsidianmd/obsidian-clipper</a><p>[2] <a href="https://github.com/mozilla/readability">https://github.com/mozilla/readability</a>
Show HN: A Tiling Window Manager for Windows, Written in Janet
Hi HN!<p>I read[1] about Janet[2] some time ago, then immediately got impressed by the enthusiasm of its community, and by the language itself, so I started playing with it.<p>At the time I was searching for a tiling window manager for Windows, and unavoidably the idea of scratching my own itch with Janet got hold of me, so Jwno was born.<p>Simply put, Jwno is a keyboard-driven tiling window manager for Windows, scriptable with Janet. But since it has a complete Lisp runtime, and a thin wrapper library for Win32 APIs[3], you can certainly do much more with it.<p>I hope you'll enjoy playing with it as much as I enjoyed building it.<p>And yes, I use StumpWM on the Linux side, by the way.<p>[1]: <a href="https://ianthehenry.com/posts/why-janet/" rel="nofollow">https://ianthehenry.com/posts/why-janet/</a><p>[2]: <a href="https://janet-lang.org/" rel="nofollow">https://janet-lang.org/</a><p>[3]: <a href="https://github.com/agent-kilo/jw32">https://github.com/agent-kilo/jw32</a>
Show HN: 90s.dev – Game maker that runs on the web
Show HN: Job board aggregator for best paying remote SWE jobs in the U.S.
I’ve been a remote SWE since the pandemic and truly appreciate its flexibilities and time saved from not commuting. Lately, friends and close ones have been asking me for advice on finding remote roles. I shared my remote company spreadsheet with them, but realized it was a rather manual process to scroll and refresh each company’s career page for new postings.<p>So I put together a centralized job board aggregator that lists the best paying SWE jobs in one place, starting with the U.S. and 14 companies. The way it works is via a cron job that runs daily in the afternoon to pull the latest job postings from each company and updates the website with the new listings.<p>Some other key features are<p>1. Quickly see which companies are actively hiring, e.g. Coinbase currently has the most openings<p>2. Filter by years of experience or companies to find suitable matches<p>3. Easily see estimated salary and posted date<p>If you're also on the hunt for the next remote SWE role, I hope this site helps streamline your job search and would appreciate any feedback and suggestions. Thanks!<p>Home page: <a href="https://www.remoteswe.fyi" rel="nofollow">https://www.remoteswe.fyi</a><p>FAQ page with additional context: <a href="https://www.remoteswe.fyi/faq" rel="nofollow">https://www.remoteswe.fyi/faq</a>
Side projects I've built since 2009
Side projects I've built since 2009
Show HN: Chat with 19 years of HN
Hey HN<p>We loaded a BigQuery dataset of all of Hacker News, every comment, story and user, into camelAI.<p>You can ask questions like:<p>• “When does dang tend to comment during the day?”<p>• “Which domains have gained the most submissions since 2015, year-over-year?”<p>• “How has average comment length changed each January since 2007?”<p>• “Top five users who link to arXiv papers the most.”<p>It's behind a log-in to prevent abuse but free to use for 10 messages. No payment info required. We use OpenAI o3 or Claude sonnet 3.7 for the agent which can be really expensive.<p>Would love feedback especially around graph/chart quality and o3 vs sonnet.
Show HN: Hardtime.nvim – break bad habits and master Vim motions
Show HN: Hardtime.nvim – break bad habits and master Vim motions
Show HN: Vaev – A browser engine built from scratch (It renders google.com)
We’ve been working on Vaev, a minimal web browser engine built from scratch. It supports HTML/XHTML, the CSS cascade, @page rules for pagination, and print-to-PDF rendering. It even handles calc(), var(), and percentage units—and yes, it renders Google.com (mostly).<p>This is an experimental project focused on learning and exploration. Networking is basic (<a href="http://" rel="nofollow">http://</a> and file:// only), and grid layouts aren’t supported yet, but we’re making progress fast.<p>We’d love your thoughts and feedback.
Show HN: Vaev – A browser engine built from scratch (It renders google.com)
We’ve been working on Vaev, a minimal web browser engine built from scratch. It supports HTML/XHTML, the CSS cascade, @page rules for pagination, and print-to-PDF rendering. It even handles calc(), var(), and percentage units—and yes, it renders Google.com (mostly).<p>This is an experimental project focused on learning and exploration. Networking is basic (<a href="http://" rel="nofollow">http://</a> and file:// only), and grid layouts aren’t supported yet, but we’re making progress fast.<p>We’d love your thoughts and feedback.
Show HN: I modeled the Voynich Manuscript with SBERT to test for structure
I built this project as a way to learn more about NLP by applying it to something weird and unsolved.<p>The Voynich Manuscript is a 15th-century book written in an unknown script. No one’s been able to translate it, and many think it’s a hoax, a cipher, or a constructed language. I wasn’t trying to decode it — I just wanted to see: does it behave like a structured language?<p>I stripped a handful of common suffix-like endings (aiin, dy, etc.) to isolate what looked like root forms. I know that’s a strong assumption — I call it out directly in the repo — but it helped clarify the clustering. From there, I used SBERT embeddings and KMeans to group similar roots, inferred POS-like roles based on position and frequency, and built a Markov transition matrix to visualize cluster-to-cluster flow.<p>It’s not translation. It’s not decryption. It’s structural modeling — and it revealed some surprisingly consistent syntax across the manuscript, especially when broken out by section (Botanical, Biological, etc.).<p>GitHub repo: <a href="https://github.com/brianmg/voynich-nlp-analysis">https://github.com/brianmg/voynich-nlp-analysis</a>
Write-up: <a href="https://brig90.substack.com/p/modeling-the-voynich-manuscript-with?r=3z5dn9" rel="nofollow">https://brig90.substack.com/p/modeling-the-voynich-manuscrip...</a><p>I’m new to the NLP space, so I’m sure there are things I got wrong — but I’d love feedback from people who’ve worked with structured language modeling or weird edge cases like this.
Show HN: I modeled the Voynich Manuscript with SBERT to test for structure
I built this project as a way to learn more about NLP by applying it to something weird and unsolved.<p>The Voynich Manuscript is a 15th-century book written in an unknown script. No one’s been able to translate it, and many think it’s a hoax, a cipher, or a constructed language. I wasn’t trying to decode it — I just wanted to see: does it behave like a structured language?<p>I stripped a handful of common suffix-like endings (aiin, dy, etc.) to isolate what looked like root forms. I know that’s a strong assumption — I call it out directly in the repo — but it helped clarify the clustering. From there, I used SBERT embeddings and KMeans to group similar roots, inferred POS-like roles based on position and frequency, and built a Markov transition matrix to visualize cluster-to-cluster flow.<p>It’s not translation. It’s not decryption. It’s structural modeling — and it revealed some surprisingly consistent syntax across the manuscript, especially when broken out by section (Botanical, Biological, etc.).<p>GitHub repo: <a href="https://github.com/brianmg/voynich-nlp-analysis">https://github.com/brianmg/voynich-nlp-analysis</a>
Write-up: <a href="https://brig90.substack.com/p/modeling-the-voynich-manuscript-with?r=3z5dn9" rel="nofollow">https://brig90.substack.com/p/modeling-the-voynich-manuscrip...</a><p>I’m new to the NLP space, so I’m sure there are things I got wrong — but I’d love feedback from people who’ve worked with structured language modeling or weird edge cases like this.
Show HN: KVSplit – Run 2-3x longer contexts on Apple Silicon
I discovered that in LLM inference, keys and values in the KV cache have very different quantization sensitivities. Keys need higher precision than values to maintain quality.<p>I patched llama.cpp to enable different bit-widths for keys vs. values on Apple Silicon. The results are surprising:<p>- K8V4 (8-bit keys, 4-bit values): 59% memory reduction with only 0.86% perplexity loss
- K4V8 (4-bit keys, 8-bit values): 59% memory reduction but 6.06% perplexity loss
- The configurations use the same number of bits, but K8V4 is 7× better for quality<p>This means you can run LLMs with 2-3× longer context on the same Mac. Memory usage scales with sequence length, so savings compound as context grows.<p>Implementation was straightforward:
1. Added --kvq-key and --kvq-val flags to llama.cpp
2. Applied existing quantization logic separately to K and V tensors
3. Validated with perplexity metrics across context lengths
4. Used Metal for acceleration (with -mlong-calls flag to avoid vectorization issues)<p>Benchmarked on an M4 MacBook Pro running TinyLlama with 8K context windows. Compatible with Metal/MPS and optimized for Apple Silicon.<p>GitHub: <a href="https://github.com/dipampaul17/KVSplit">https://github.com/dipampaul17/KVSplit</a>
Show HN: Visual flow-based programming for Erlang, inspired by Node-RED
Hi There,<p>Erlang-RED has been my project for the last couple of months and I would love to get some feedback from the HN community.<p>The idea is to take advantage of Erlangs message passing and low overhead processes to have true concurrency in Node-RED flows. Plus also to bring low-code visual flow-based programming to Erlang.
Show HN: Muscle-Mem, a behavior cache for AI agents
Hi HN! Erik here from Pig.dev, and today I'd like to share a new project we've just open sourced:<p>Muscle Mem is an SDK that records your agent's tool-calling patterns as it solves tasks, and will deterministically replay those learned trajectories whenever the task is encountered again, falling back to agent mode if edge cases are detected. Like a JIT compiler, for behaviors.<p>At Pig, we built computer-use agents for automating legacy Windows applications (healthcare, lending, manufacturing, etc).<p>A recurring theme we ran into was that businesses <i>already</i> had RPA (pure-software scripts), and it worked for them in most cases. The pull to agents as an RPA alternative was <i>not</i> to have an infinitely flexible "AI Employees" as tech Twitter/X may want you to think, but simply because their RPA breaks under occasional edge-cases and agents can gracefully handle those cases.<p>Using a pure-agent approach proved to be highly wasteful. Window's accessibility APIs are poor, so you're generally stuck using pure-vision agents, which can run around $40/hr in token costs and take 5x longer than a human to perform a workflow. At this point, you're better off hiring a human.<p>The goal of Muscle-Mem is to get LLMs out of the hot path of repetitive automations, intelligently swapping between script-based execution for repeat cases, and agent-based automations for discovery and self-healing.<p>While inspired by computer-use environments, Muscle Mem is designed to generalize to any automation performing discrete tasks in dynamic environments. It took a great deal of thought to figure out an API that generalizes, which I cover more deeply in this blog:
<a href="https://erikdunteman.com/blog/muscle-mem/" rel="nofollow">https://erikdunteman.com/blog/muscle-mem/</a><p>Check out the repo, consider giving it a star, or dive deeper into the above blog. I look forward to your feedback!
Show HN: Semantic Calculator (king-man+woman=?)
I've been playing with embeddings and wanted to try out what results the embedding layer will produce based on just word-by-word input and addition / subtraction, beyond what many videos / papers mention (like the obvious king-man+woman=queen). So I built something that doesn't just give the first answer, but ranks the matches based on distance / cosine symmetry. I polished it a bit so that others can try it out, too.<p>For now, I only have nouns (and some proper nouns) in the dataset, and pick the most common interpretation among the homographs. Also, it's case sensitive.
Show HN: HelixDB – Open-source vector-graph database for AI applications (Rust)
Hey HN, we want to share HelixDB (<a href="https://github.com/HelixDB/helix-db/">https://github.com/HelixDB/helix-db/</a>), a project a college friend and I are working on. It’s a new database that natively intertwines graph and vector types, without sacrificing performance. It’s written in Rust and our initial focus is on supporting RAG. Here’s a video runthrough: <a href="https://screen.studio/share/szgQu3yq" rel="nofollow">https://screen.studio/share/szgQu3yq</a>.<p>Why a hybrid? Vector databases are useful for similarity queries, while graph databases are useful for relationship queries. Each stores data in a way that’s best for its main type of query (e.g. key-value stores vs. node-and-edge tables). However, many AI-driven applications need <i>both</i> similarity and relationship queries. For example, you might use vector-based semantic search to retrieve relevant legal documents, and then use graph traversal to identify relationships between cases.<p>Developers of such apps have the quandary of needing to build on top of two different databases—a vector one and a graph one—plus you have to link them together and sync the data. Even then, your two databases aren't designed to work together—for example, there’s no native way to perform joins or queries that span both systems. You’ll need to handle that logic at the application level.<p>Helix started when we realized that there are ways to integrate vector and graph data that are both fast and suitable for AI applications, especially RAG-based ones. See this cool research paper: <a href="https://arxiv.org/html/2408.04948v1" rel="nofollow">https://arxiv.org/html/2408.04948v1</a>. After reading that and some other papers on graph and hybrid RAG, we decided to build a hybrid DB. Our aim was to make something better to use from a developer standpoint, while also making it fast as hell.<p>After a few months of working on this as a side project, our benchmarking shows that we are on par with Pinecone and Qdrant for vectors, and our graph is up to three orders of magnitude faster than Neo4j.<p>Problems where a hybrid approach works particularly well include:<p>- Indexing codebases: you can vectorize code-snippets within a function (connected by edges) based on context and then create an AST (in a graph) from function calls, imports, dependencies, etc. Agents can look up code by similarity or keyword and then traverse the AST to get only the relevant code, which reduces hallucinations and prevents the LLM from guessing object shapes or variable/function names.<p>- Molecule discovery: Model biological interactions (e.g., proteins → genes → diseases) using graph types and then embed molecule structures to find similar compounds or case studies.<p>- Enterprise knowledge management: you can represent organisational structure, projects, and people (e.g., employee → team → project) in graph form, then index internal documents, emails, or notes as vectors for semantic search and link them directly employees/teams/projects in the graph.<p>I naively assumed when learning about databases for the first time that queries would be compiled and executed like functions in traditional programming. Turns out I was wrong, but this creates unnecessary latency by sending extra data (the whole written query), compiling it at run time, and then executing it. With Helix, you write the queries in our query language (HelixQL), which is then transpiled into Rust code and built directly into the database server, where you can call a generated API endpoint.<p>Many people have a thing against “yet another query language” (doubtless for good reason!) but we went ahead and did it anyway, because we think it makes working with our database so much easier that it’s worth a bit of a learning curve. HelixQL takes from other query languages such as Gremlin, Cypher and SQL with some extra ideas added in. It is declarative while the traversals themselves are functional. This allows complete control over the traversal flow while also having a cleaner syntax. HelixQL returns JSON to make things easy for clients. Also, it uses a schema, so the queries are type-checked.<p>We took a crude approach to building the original graph engine as a way to get an MVP out, so we are now working on improving the graph engine by making traversals massively parallel and pipelined. This means data is only ever decoded from disk when it is needed, and parts of reads are all processed in parallel.<p>If you’d like to try it out in a simple RAG demo, you can follow this guide and run our Jupyter notebook: <a href="https://github.com/HelixDB/helix-db/tree/main/examples/rag_demo">https://github.com/HelixDB/helix-db/tree/main/examples/rag_d...</a><p>Many thanks! Comments and feedback welcome!