<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: technomancy</title><link>https://news.ycombinator.com/user?id=technomancy</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 14 Apr 2026 20:45:45 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=technomancy" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by technomancy in "Menelaus: A firmware for the Atreus keyboard, written in Microscheme"]]></title><description><![CDATA[
<p>If the root problem with QMK is that there are too many moving parts, adding a completely new language and compiler into the mix seems like a step in the wrong direction.<p>The extra features that QMK has and Menelaus doesn't aren't really all that appealing to me to begin with.</p>
]]></description><pubDate>Tue, 24 Mar 2020 17:58:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=22676932</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=22676932</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22676932</guid></item><item><title><![CDATA[New comment by technomancy in "Menelaus: A firmware for the Atreus keyboard, written in Microscheme"]]></title><description><![CDATA[
<p>MicroPython would not work; a basic hello world in MicroPython takes 3x more memory than the total amount of RAM of the atmega32u4.</p>
]]></description><pubDate>Tue, 24 Mar 2020 15:10:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=22675215</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=22675215</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22675215</guid></item><item><title><![CDATA[New comment by technomancy in "Menelaus: A firmware for the Atreus keyboard, written in Microscheme"]]></title><description><![CDATA[
<p>The docs for using QMK are pretty good, but trying to actually understand the code made my head spin; that's why I decided to write my own firmware. Right now it doesn't have any of the fancy features of QMK, but it currently clocks in at under 200 lines, so I have a suspicion it'd be easier to implement those features from scratch in Microscheme than understand their current implementation in QMK.</p>
]]></description><pubDate>Tue, 24 Mar 2020 15:08:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=22675202</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=22675202</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22675202</guid></item><item><title><![CDATA[New comment by technomancy in "Menelaus: A firmware for the Atreus keyboard, written in Microscheme"]]></title><description><![CDATA[
<p>Thanks; the title is fine. The current link is probably a better starting point; I've added links to the most recent revision so folks can see the final product if they want.</p>
]]></description><pubDate>Tue, 24 Mar 2020 04:40:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=22672007</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=22672007</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22672007</guid></item><item><title><![CDATA[New comment by technomancy in "Menelaus: A firmware for the Atreus keyboard, written in Microscheme"]]></title><description><![CDATA[
<p>That's a good point, but it ignores two other notable descendants: Orestes (who is legendary for establishing the precursor to the modern judicial system and who I named my firmware written in Forth after <a href="http://github.com/technomancy/orestes" rel="nofollow">http://github.com/technomancy/orestes</a>) and Paul Atreides, who as you may know was Muad'Dib and was capable of seeing the flow of cause and effect unfold across spacetime.</p>
]]></description><pubDate>Tue, 24 Mar 2020 04:39:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=22671999</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=22671999</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22671999</guid></item><item><title><![CDATA[New comment by technomancy in "Menelaus: A firmware for the Atreus keyboard, written in Microscheme"]]></title><description><![CDATA[
<p>Hi; original author here.<p>That article goes into more background but it's based on a much earlier version of the firmware; as of last week I've gotten it to be feature-complete and stable, and I've been using it as my daily driver.<p>I have been meaning to follow up the article with a part 3 that covers the rest of the features, but in the mean time I have added copious comments to the source link above such that it covers almost everything you need to know. (This is probably the most heavily-commented piece of code I've ever written with a 1:1 code:comments ratio.)<p>I have also been working on a GUI configuration tool in Racket that emits Microscheme source files you can compile and upload to your keyboard: <a href="https://git.sr.ht/~technomancy/menelaus/tree/master/gui.rkt" rel="nofollow">https://git.sr.ht/~technomancy/menelaus/tree/master/gui.rkt</a> <a href="https://p.hagelb.org/menelaus.png" rel="nofollow">https://p.hagelb.org/menelaus.png</a><p>If you've looked at building an Atreus before but gotten intimidated by the soldering, we have a kickstarter for a non-DIY version that's significantly cheaper than the kit: <a href="https://www.kickstarter.com/projects/keyboardio/atreus" rel="nofollow">https://www.kickstarter.com/projects/keyboardio/atreus</a></p>
]]></description><pubDate>Tue, 24 Mar 2020 03:48:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=22671682</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=22671682</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22671682</guid></item><item><title><![CDATA[New comment by technomancy in "Atreus Keyboard Build"]]></title><description><![CDATA[
<p>The Dactyl is definitely neat. It's designed for a different use case tho; you wouldn't take a Dactyl with you when you're out and about, while the Atreus is specifically designed for travel.<p>I'm working on a similar programmatic definition of the Atreus here: <a href="https://icosahedron.website/@technomancy/101809590723531930" rel="nofollow">https://icosahedron.website/@technomancy/101809590723531930</a><p>It's still a work-in-progress, but being able to tweak the input parameters and recompile to get the board regenerated is really handy! The circuit board already uses programmatic alignment for placing the switches and diodes: <a href="https://github.com/technomancy/atreus/blob/master/atreus.rkt" rel="nofollow">https://github.com/technomancy/atreus/blob/master/atreus.rkt</a></p>
]]></description><pubDate>Thu, 28 Mar 2019 21:09:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=19516645</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=19516645</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19516645</guid></item><item><title><![CDATA[New comment by technomancy in "Atreus Keyboard Build"]]></title><description><![CDATA[
<p>Atreus creator here. It doesn't happen often, but occasionally I have customers run into trouble putting their kit together, and I'm committed to always stepping them thru the process of troubleshooting and walking thru the fix. The last thing I want is for you to buy a keyboard and never get it working properly.<p>Here's an instance where someone damaged their kit's microcontroller and was walked thru the repair process: <a href="https://old.reddit.com/r/MechanicalKeyboards/comments/5clvio/best_customer_service_i_have_ever_received_atreus/" rel="nofollow">https://old.reddit.com/r/MechanicalKeyboards/comments/5clvio...</a></p>
]]></description><pubDate>Thu, 28 Mar 2019 21:04:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=19516586</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=19516586</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19516586</guid></item><item><title><![CDATA[New comment by technomancy in "Fennel – Lisp in Lua"]]></title><description><![CDATA[
<p>There are a few factors at play that make a language good to learn: simplicity, learning materials, and suitability for learning projects.<p>On the first point, Fennel is simpler than any other lisp I know, beyond "my first interpreter" type Schemes. But you'll find much better learning materials for some other lisps; in particular Racket is exemplary in this regard.<p>So I would say it comes down to the learning projects you might want to build; this is always the trickiest part of learning any language. If you want to learn by creating a game, Fennel is a great choice. Likewise if you want to extend an existing program that already has Lua support, such as AwesomeWM or Redis. But for most "industrial" type projects that access external APIs or write to existing file formats, you'll have a better time in Racket due to the better library ecosystem.</p>
]]></description><pubDate>Wed, 19 Sep 2018 15:37:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=18024967</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=18024967</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18024967</guid></item><item><title><![CDATA[New comment by technomancy in "Fennel – Lisp in Lua"]]></title><description><![CDATA[
<p>> why does fennel description insist on macros as compile time feature?<p>This just means that it's possible to ship the compiled code on its own and have no dependencies on Fennel at runtime. It doesn't mean you can't ship the compiler if you want to; the choice is up to you. In fact, I strongly recommend in most cases shipping the compiler so you can write and refine your code interactively as the program runs. It's helpful to think of "compile time" as a subset of runtime; it's just that portion of runtime when the function that's running happens to be the compiler!<p>Fennel is very well-suited for live-coding; I used this heavily when writing my entry to the Lisp Game Jam this spring. I blogged a bit about how live-reloads interact with the Lua module system here: <a href="https://technomancy.us/189" rel="nofollow">https://technomancy.us/189</a></p>
]]></description><pubDate>Tue, 18 Sep 2018 22:33:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=18019860</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=18019860</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18019860</guid></item><item><title><![CDATA[New comment by technomancy in "Fennel – Lisp in Lua"]]></title><description><![CDATA[
<p>I've looked briefly at Lumen. I don't do any JS work, so cross-compiling to JS doesn't really appeal to me personally. I would expect that compiling to two targets would make it more difficult to implement clean, readable compiler output the way Fennel does, but I haven't checked.<p>The docs for Lumen are a bit sparse, but it looks like it doesn't make globals opt-in or make you flag locals as mutable the way Fennel does. IME calling these things out explicitly makes certain kinds of bugs easier to catch. Fennel also allows for optional arity checks on functions.<p>I would expect that Lumen's keyword arguments would cause some complication when interoperating with Lua, which doesn't have them. In addition, cross-compiling to both JS and Lua means that it can't seamlessly support multiple return values, which are used pervasively in 3rd-party Lua libraries.<p>As I mentioned elsewhere, Fennel can run in the browser with Fengari, but it's a very different approach because Fengari includes a full Lua VM. This means there's some overhead to load the VM (~220kb) but once it's loaded you get access to coroutines, which are a <i>much</i> nicer way to code non-blocking functions than callbacks.<p>But these are just my initial uninformed impressions.</p>
]]></description><pubDate>Tue, 18 Sep 2018 22:18:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=18019724</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=18019724</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18019724</guid></item><item><title><![CDATA[New comment by technomancy in "Fennel – Lisp in Lua"]]></title><description><![CDATA[
<p>> So, since many mediawiki systems use lua, does this mean that you can code in Lisp (or Fennel), transpile to Lua, and then run the code as a module in a media wiki system?<p>Yes, easily.<p>With a little bit more work you could load the Fennel compiler up server-side so it could do the compilation for you and support Fennel "natively". I have done a similar process with TIC-80 despite knowing very little C: <a href="https://github.com/nesbox/TIC-80/pull/597" rel="nofollow">https://github.com/nesbox/TIC-80/pull/597</a><p>> What about Common Lisp libraries? would they be transpiled too?<p>No, Common Lisp is a completely different language with little in common with Fennel.</p>
]]></description><pubDate>Tue, 18 Sep 2018 21:47:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=18019464</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=18019464</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18019464</guid></item><item><title><![CDATA[New comment by technomancy in "Fennel – Lisp in Lua"]]></title><description><![CDATA[
<p>The creators of Fennel and Urn both chimed in to describe the differences between the two here: <a href="https://news.ycombinator.com/item?id=16567763" rel="nofollow">https://news.ycombinator.com/item?id=16567763</a><p>tl;dr Urn is a much bigger language that happens to compile to Lua as an implementation detail. Fennel is much closer to Lua and is dramatically simpler, only diverging from Lua semantics when the changes can be implemented purely at compile time. (immutable locals, blocking accidental global references/setting, etc) The compiler output from Fennel tends to be pretty readable and looks a lot like the input.<p>If you need to write code that runs in the browser, Lumen is one choice, but you can also run Fennel in the browser using Fengari: <a href="https://fengari.io/" rel="nofollow">https://fengari.io/</a> I know next to nothing about frontend development but was able to integrate Fengari into <a href="https://fennel-lang.org" rel="nofollow">https://fennel-lang.org</a> to get the live REPL working with ease.</p>
]]></description><pubDate>Tue, 18 Sep 2018 20:42:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=18018933</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=18018933</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18018933</guid></item><item><title><![CDATA[New comment by technomancy in "Fennel – Lisp in Lua"]]></title><description><![CDATA[
<p>Fennel is continually tested against mainline Lua 5.1, 5.2, and 5.3 as well as LuaJIT: <a href="https://github.com/bakpakin/Fennel/blob/master/Makefile#L6" rel="nofollow">https://github.com/bakpakin/Fennel/blob/master/Makefile#L6</a><p>It works great with Fengari for client-side scripting; in fact this is what we use on the web site for the live REPL. We have run some tests against other obscure implementations such as Luerl and Rembulan but have encountered some bugs in those compilers that need to get addressed before they get integrated into the test suit.</p>
]]></description><pubDate>Tue, 18 Sep 2018 20:35:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=18018883</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=18018883</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18018883</guid></item><item><title><![CDATA[New comment by technomancy in "Fennel – Lisp in Lua"]]></title><description><![CDATA[
<p>This was my game, and I've contributed significantly to newer features in the Fennel compiler; happy to oblige if you have any questions about either.</p>
]]></description><pubDate>Tue, 18 Sep 2018 20:31:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=18018848</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=18018848</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18018848</guid></item><item><title><![CDATA[New comment by technomancy in "Fennel – Lisp in Lua"]]></title><description><![CDATA[
<p>Interesting you should mention Mandlebrot:<p><a href="https://old.reddit.com/r/programming/comments/6eg0x/where_are_the_fast_dynamic_languages_is_lisp_the/c03md43/" rel="nofollow">https://old.reddit.com/r/programming/comments/6eg0x/where_ar...</a><p>> the inner loop of mandelbrot is now identical (at the ucode IR level) to the IR generated by a C compiler. All type checks have been eliminated and only the pure (statically typed) FP adds/multiplies are left (the remaining task is to transform the ucode to the best possible machine code -- working on it). Similar results can be obtained for other numeric loops.<p>^ This is from a ten-year-old post about LuaJIT optimizations.</p>
]]></description><pubDate>Tue, 18 Sep 2018 20:30:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=18018839</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=18018839</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18018839</guid></item><item><title><![CDATA[New comment by technomancy in "“Removal of powerpc as a release architecture”"]]></title><description><![CDATA[
<p>Fantastic; thanks!</p>
]]></description><pubDate>Fri, 04 Nov 2016 02:04:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=12869821</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=12869821</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12869821</guid></item><item><title><![CDATA[New comment by technomancy in "Browsers, not apps, are the future of mobile"]]></title><description><![CDATA[
<p>HN is an outlier because there's no business model or team of OSS maintainers with motivation to improve it. I can't think of any other sites I visit in the same position.</p>
]]></description><pubDate>Fri, 04 Nov 2016 01:58:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=12869794</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=12869794</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12869794</guid></item><item><title><![CDATA[New comment by technomancy in "Browsers, not apps, are the future of mobile"]]></title><description><![CDATA[
<p>Web pages don't require uninstalling when you decide they're not worth it.</p>
]]></description><pubDate>Fri, 04 Nov 2016 01:56:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=12869786</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=12869786</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12869786</guid></item><item><title><![CDATA[New comment by technomancy in "“Removal of powerpc as a release architecture”"]]></title><description><![CDATA[
<p>> Just pause the VM with the browser in it -> 0 % CPU, but can still read what's on the display.<p>On a related note, how is "halt all execution and scheduled future execution of scripts in the current tab" not a solved problem for mainstream browsers? Or maybe it is and somehow I missed it?</p>
]]></description><pubDate>Mon, 31 Oct 2016 22:57:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=12841714</link><dc:creator>technomancy</dc:creator><comments>https://news.ycombinator.com/item?id=12841714</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12841714</guid></item></channel></rss>