<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: deosjr</title><link>https://news.ycombinator.com/user?id=deosjr</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 18 Jun 2026 09:59:07 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=deosjr" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by deosjr in "Ask HN: What are you working on? (June 2026)"]]></title><description><![CDATA[
<p>Working on my version of Dynamicland. Today I got this small thing working where I can now live-edit the behaviour of the editor script, see <a href="https://www.youtube.com/shorts/ZjxPIv-XwoU" rel="nofollow">https://www.youtube.com/shorts/ZjxPIv-XwoU</a><p>Repo is here if anyone wants to have a look: <a href="https://github.com/deosjr/unreal-talk" rel="nofollow">https://github.com/deosjr/unreal-talk</a><p>And a browser-based version can be found here: <a href="https://deosjr.github.io/dynamicland/live" rel="nofollow">https://deosjr.github.io/dynamicland/live</a></p>
]]></description><pubDate>Sun, 14 Jun 2026 18:58:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=48531219</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=48531219</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48531219</guid></item><item><title><![CDATA[New comment by deosjr in "Prolog Basics Explained with Pokémon"]]></title><description><![CDATA[
<p>Wow that is cool, thanks for that!</p>
]]></description><pubDate>Mon, 18 May 2026 16:47:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48182132</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=48182132</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48182132</guid></item><item><title><![CDATA[New comment by deosjr in "Prolog Basics Explained with Pokémon"]]></title><description><![CDATA[
<p>This might be your jam. I should revisit this, most of it is unimplemented. But the parsing part was interesting, since MTG has such a codified language for explaining the rules. My idea here was to take a card's rules text from the official API and parse it into smth that can be used in the game, so you could keep up with new sets with implementation. The weird rule-breaking edge cases will always fail, but a large set of design space can fit, I think.<p>See <a href="https://github.com/deosjr/pmtg/blob/master/parse.pl" rel="nofollow">https://github.com/deosjr/pmtg/blob/master/parse.pl</a></p>
]]></description><pubDate>Mon, 18 May 2026 07:49:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=48176622</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=48176622</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48176622</guid></item><item><title><![CDATA[New comment by deosjr in "Prolog Basics Explained with Pokémon"]]></title><description><![CDATA[
<p>A while ago I was playing the romhack Run&Bun, which drastically ups the difficulty of Pokemon Emerald. Watching others play, most of the game was doing 'calcs': calculating how to approach a battle. This was done using a javascript frontend to a simulator, and a lot of excel sheets.<p>So I forked the calculator and added a Prolog wrapper so I could find solutions to battles based on the team of Pokemon that I caught. <a href="https://github.com/deosjr/runbuncalc/blob/master/main.pl" rel="nofollow">https://github.com/deosjr/runbuncalc/blob/master/main.pl</a><p>My runs died pretty early, but there are some notes here as I was implementing that are fun to read. I implemented each battle as a test case and let my solver find a solution, then amended the plan and commented on what actually happened. For example: <a href="https://github.com/deosjr/runbuncalc/blob/master/run10.pl#L21" rel="nofollow">https://github.com/deosjr/runbuncalc/blob/master/run10.pl#L2...</a></p>
]]></description><pubDate>Mon, 18 May 2026 07:46:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48176598</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=48176598</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48176598</guid></item><item><title><![CDATA[New comment by deosjr in "What is Realtalk’s relationship to AI? (2024)"]]></title><description><![CDATA[
<p>Such an amazing project.<p>I've made a lot of progress recently working on my own homebrew version, running it in the browser in order to share it with people. Planning to take some time soon to take another stab at the real (physical) thing.<p>Progress so far: <a href="https://deosjr.github.io/dynamicland/" rel="nofollow">https://deosjr.github.io/dynamicland/</a></p>
]]></description><pubDate>Thu, 10 Jul 2025 20:42:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=44525348</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=44525348</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44525348</guid></item><item><title><![CDATA[New comment by deosjr in "Ask HN: What Are You Working On? (June 2025)"]]></title><description><![CDATA[
<p>Exploring the implementation of Dynamicland (dynamicland.org) using Guile Scheme, Hoot (scheme->wasm) and miniKanren. Main write-up can be found here: <a href="https://deosjr.github.io/dynamicland/" rel="nofollow">https://deosjr.github.io/dynamicland/</a><p>I cycle between learning about scheme macro hygiene and implementing more and more realtalk/dynamicland demos and trying to grok the programming model. Doing this in the browser is a weird but fun constraint that makes things shareable.<p>My latest project is a wikipedia explorer: <a href="https://deosjr.github.io/dynamicland/wiki.html" rel="nofollow">https://deosjr.github.io/dynamicland/wiki.html</a></p>
]]></description><pubDate>Tue, 01 Jul 2025 09:47:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=44432205</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=44432205</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44432205</guid></item><item><title><![CDATA[New comment by deosjr in "Web Embeddable Common Lisp"]]></title><description><![CDATA[
<p>I recently shared a project I did using Hoot, by Spritely institute.
It's Guile Scheme compiling to WASM, and it works really well!
See <a href="https://spritely.institute/hoot/" rel="nofollow">https://spritely.institute/hoot/</a><p>Latest on my project, in case you want to try it out:
<a href="https://deosjr.github.io/dynamicland/whiskers.html" rel="nofollow">https://deosjr.github.io/dynamicland/whiskers.html</a></p>
]]></description><pubDate>Wed, 25 Jun 2025 19:23:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=44380978</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=44380978</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44380978</guid></item><item><title><![CDATA[New comment by deosjr in "Datalog in miniKanren"]]></title><description><![CDATA[
<p>Cheers, this is super useful. I will have to do some reading. Being able to build up n-ary predicates using triples that way makes a lot of sense.</p>
]]></description><pubDate>Mon, 16 Jun 2025 14:53:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=44290167</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=44290167</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44290167</guid></item><item><title><![CDATA[New comment by deosjr in "Datalog in miniKanren"]]></title><description><![CDATA[
<p>Thanks Dave, high praise! I was inspired after seeing you all take over the declarative & minimalist programming room at FOSDEM this year.<p>If you thought this was cool, wait until you see what I ended up using it for: <a href="https://deosjr.github.io/dynamicland/" rel="nofollow">https://deosjr.github.io/dynamicland/</a>
I personally think this is much cooler :) But it needs some more explaining before I can broadly share, I think.<p>Now that I have you here, a question: am I correct in thinking that in Hoot, eval in the browser does not currently work with macros?</p>
]]></description><pubDate>Mon, 16 Jun 2025 14:49:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=44290120</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=44290120</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44290120</guid></item><item><title><![CDATA[New comment by deosjr in "Datalog in miniKanren"]]></title><description><![CDATA[
<p>I appreciate it; this kind of exchange is exactly why I read HackerNews.
If you have any good sources on extending Datalog to N-ary relations, I'd love to know. Just had a look at the implementation I based mine on and it exclusively talks about triples: <a href="https://www.instantdb.com/essays/datalogjs">https://www.instantdb.com/essays/datalogjs</a><p>Coming from Prolog I'd like to get closer to the original if possible :)</p>
]]></description><pubDate>Mon, 16 Jun 2025 11:07:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=44288431</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=44288431</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44288431</guid></item><item><title><![CDATA[New comment by deosjr in "Datalog in miniKanren"]]></title><description><![CDATA[
<p>Thank you for the feedback! I agree with all of the above.<p>Should've probably been a bit more clear on the dl-find syntax; I find it just as unacceptable as you do. It is the result of laziness: my intended use of this minimal Datalog does not include any querying whatsoever but abuses fixpoint analysis for side-effects (see <a href="https://github.com/deosjr/deosjr.github.io/blob/master/dynamicland/modules/realtalk.scm#L40">https://github.com/deosjr/deosjr.github.io/blob/master/dynam...</a> which I intend to go over in a future post).
I initially had it working like you described but butchered it for the above and haven't repaired it yet (see <a href="https://github.com/deosjr/whistle?tab=readme-ov-file#datalog">https://github.com/deosjr/whistle?tab=readme-ov-file#datalog</a>). This version relied on some monstrous eval-hacking using a homebrew Lisp, which I've mostly cleaned up now in this version (<a href="https://github.com/deosjr/whistle/blob/main/datalog/datalog.lisp#L61">https://github.com/deosjr/whistle/blob/main/datalog/datalog....</a> is a crime, for example).<p>The semantics are indeed limited to binary relations atm, which I agree is the main thing that disqualifies this as a proper Datalog. iirc the tutorial on Datalog that I based this implementation on only handled triples as well so I stopped there, but extending to N-ary relations is on my list to look into for sure.</p>
]]></description><pubDate>Mon, 16 Jun 2025 07:44:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=44287427</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=44287427</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44287427</guid></item><item><title><![CDATA[New comment by deosjr in "Datalog in miniKanren"]]></title><description><![CDATA[
<p>Guile Scheme. See <a href="https://github.com/deosjr/deosjr.github.io/blob/master/dynamicland/modules/datalog.scm">https://github.com/deosjr/deosjr.github.io/blob/master/dynam...</a> for more.</p>
]]></description><pubDate>Sun, 15 Jun 2025 18:19:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=44284000</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=44284000</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44284000</guid></item><item><title><![CDATA[New comment by deosjr in "Datalog in miniKanren"]]></title><description><![CDATA[
<p>Seems like interest in Datalog is high this week, so I thought I'd share a write-up of a minimal Datalog implementation I did a while ago.<p>Runs in the browser using Hoot (<a href="https://spritely.institute/hoot/" rel="nofollow">https://spritely.institute/hoot/</a>) which compiles Guile Scheme to WebAssembly.</p>
]]></description><pubDate>Sun, 15 Jun 2025 16:16:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=44283094</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=44283094</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44283094</guid></item><item><title><![CDATA[Datalog in miniKanren]]></title><description><![CDATA[
<p>Article URL: <a href="https://deosjr.github.io/dynamicland/datalog.html">https://deosjr.github.io/dynamicland/datalog.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44283093">https://news.ycombinator.com/item?id=44283093</a></p>
<p>Points: 134</p>
<p># Comments: 17</p>
]]></description><pubDate>Sun, 15 Jun 2025 16:16:08 +0000</pubDate><link>https://deosjr.github.io/dynamicland/datalog.html</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=44283093</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44283093</guid></item><item><title><![CDATA[New comment by deosjr in "Implementing Logic Programming"]]></title><description><![CDATA[
<p>I recently implemented a version of Bret Victor's Dynamicland in the browser using miniKanren, Datalog, and WebAssembly: <a href="https://deosjr.github.io/dynamicland/" rel="nofollow">https://deosjr.github.io/dynamicland/</a><p>Knowing how to implement a small logic programming language from scratch really feels like a superpower sometimes.</p>
]]></description><pubDate>Sat, 14 Jun 2025 07:04:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=44274730</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=44274730</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44274730</guid></item><item><title><![CDATA[New comment by deosjr in "Show HN: fixi.js – minimal general hypermedia controls"]]></title><description><![CDATA[
<p>A bit late, but just saw this and wanted to say I appreciate the minimalism of this a lot!</p>
]]></description><pubDate>Thu, 27 Feb 2025 13:43:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=43194286</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=43194286</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43194286</guid></item><item><title><![CDATA[New comment by deosjr in "Show HN: WIP NandToTetris Emulator in pure C – logic gates to ALU to CPU to PC"]]></title><description><![CDATA[
<p>I did the same thing in Golang here: <a href="https://github.com/deosjr/nand2tetris">https://github.com/deosjr/nand2tetris</a><p>Be sure to check out the lispmachine folder; its essentially a fork I made after finishing the course. It implements a Lisp on the nand-gate level :)</p>
]]></description><pubDate>Mon, 30 Dec 2024 09:08:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=42547748</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=42547748</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42547748</guid></item><item><title><![CDATA[New comment by deosjr in "Ask HN: Which books/resources to understand modern Assembler?"]]></title><description><![CDATA[
<p>That's exactly why I built my own tooling when going through the book.
I built everything in Golang and am working on some visualisations in Javascript.
Repo: <a href="https://github.com/deosjr/nand2tetris">https://github.com/deosjr/nand2tetris</a>
Website: <a href="https://deosjr.github.io/" rel="nofollow">https://deosjr.github.io/</a> (lispmachine part is wip)</p>
]]></description><pubDate>Mon, 22 Apr 2024 05:56:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=40111723</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=40111723</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40111723</guid></item><item><title><![CDATA[New comment by deosjr in "Here's a puzzle game. I call it Reverse the List of Integers"]]></title><description><![CDATA[
<p>Here's a gist in Prolog that I believe solves this puzzle:
<a href="https://gist.github.com/deosjr/7314659509333ee2ad67dbf276e8d487" rel="nofollow">https://gist.github.com/deosjr/7314659509333ee2ad67dbf276e8d...</a></p>
]]></description><pubDate>Fri, 12 Apr 2024 15:29:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=40014035</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=40014035</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40014035</guid></item><item><title><![CDATA[New comment by deosjr in "(How to Write a (Lisp) Interpreter (In Python)) (2010)"]]></title><description><![CDATA[
<p>My way of learning about Lisp was based on first principles, after reading Norvigs blogpost many times and working through SICP. What helped is that I had just finished the nand2tetris book, which is very much a first principles speedrun of how a computer works.<p>So I built my own Lisp machine based on the nand2tetris architecture, with lisp instructions supported on the simulated chip level. I'm currently in the progress of doing a writeup of the project, you can see my attempts here if you are interested: <a href="https://deosjr.github.io/" rel="nofollow">https://deosjr.github.io/</a><p>I have an almost working version of a REPL running on the machine now, including garbage collection and parsing Lisp with Lisp and passing the output to an eval function written in assembly (the operating system, if you will).</p>
]]></description><pubDate>Tue, 12 Mar 2024 17:33:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=39682349</link><dc:creator>deosjr</dc:creator><comments>https://news.ycombinator.com/item?id=39682349</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39682349</guid></item></channel></rss>