<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: shawa_a_a</title><link>https://news.ycombinator.com/user?id=shawa_a_a</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 21 Apr 2026 06:35:29 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=shawa_a_a" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Show HN: Xlerb – A Compiled "Forth" for the Beam]]></title><description><![CDATA[
<p>Hello<p>I've been working on a small stack language for the BEAM in my free time called 'Xlerb'.<p>I read Starting Forth and thought it would be interesting to see if you could send messages to other stacks etc, and the BEAM seemed like a great fit.<p>Xlerb is a small leex/yecc grammar and a simple-ish compiler that takes Forth-ish code and turns it into regular BEAM modules.<p>The modules it produces just export functions from stack to stack, so there's a good interop story with Elixir/Erlang (if you'd ever want to do that?).<p>I've the syntax a bit beyond a 'strict' forth with pattern matching, that makes it feel a bit more natural of a BEAM language (with different function heads etc). It was a fun exercise translating that into the Erlang primitives of case, send, receive etc.<p>I've got a website at <a href="https://xlerb.wtf" rel="nofollow">https://xlerb.wtf</a> with a bit more, and you can get the code/compiler/repl at <a href="https://github.com/shawa/xlerb" rel="nofollow">https://github.com/shawa/xlerb</a><p>Let me know what you think!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46091455">https://news.ycombinator.com/item?id=46091455</a></p>
<p>Points: 6</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 29 Nov 2025 22:36:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=46091455</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=46091455</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46091455</guid></item><item><title><![CDATA[Tube: A subway route planner in Dyalog APL (2011)]]></title><description><![CDATA[
<p>Article URL: <a href="https://dfns.dyalog.com/tube_n_index.htm">https://dfns.dyalog.com/tube_n_index.htm</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45943846">https://news.ycombinator.com/item?id=45943846</a></p>
<p>Points: 23</p>
<p># Comments: 4</p>
]]></description><pubDate>Sun, 16 Nov 2025 09:39:45 +0000</pubDate><link>https://dfns.dyalog.com/tube_n_index.htm</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=45943846</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45943846</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Global key-value metadata storage for Scryer Prolog"]]></title><description><![CDATA[
<p>It's been a long time since I've programmed Prolog so I'm not sure if these ideas are even relevant (global state might be more than enough!) ; but at first impressions from the readme this really reminds me of ETS<p><a href="https://www.erlang.org/doc/apps/stdlib/ets.html" rel="nofollow">https://www.erlang.org/doc/apps/stdlib/ets.html</a><p>Essentially system-global state under named tables.<p>Have/did you consider having named `env` instances? This would allow for say, feature flags to be kept in a `features` set of relations.<p>You could also draw from Erlang's 'match specs' and query with a predicate over the keys.</p>
]]></description><pubDate>Sat, 25 Oct 2025 23:05:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=45707662</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=45707662</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45707662</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Gleam OTP – Fault Tolerant Multicore Programs with Actors"]]></title><description><![CDATA[
<p>I think that's going to be hard to find, depending on your definition of 'regular', tbh.<p>The BEAM's grown up along with Erlang and so the culture and optimisations are built up all around function application, list processing, recursion, and pattern matching etc.<p><a href="https://github.com/llaisdy/beam_languages" rel="nofollow">https://github.com/llaisdy/beam_languages</a> is a decent list of the diverse languages that have been implemented on it, but nothing quite like 'regular for and while loops'.<p>The BEAM itself is a plain aul register machine though, so it could be done!<p><a href="https://www.erlang.org/blog/a-brief-beam-primer/" rel="nofollow">https://www.erlang.org/blog/a-brief-beam-primer/</a></p>
]]></description><pubDate>Mon, 20 Oct 2025 18:35:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=45647450</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=45647450</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45647450</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Ask HN: How does one build large front end apps without a framework like React?"]]></title><description><![CDATA[
<p>They're probably using some features of LiveView; I'm not too familiar with how  HTMX works, but with LiveView you can define all of your logic and state handling on the _backend_, with page diffs pushed to the client over a websocket channel (all handled out of the box).<p>It comes with some tradeoffs compared to fully client-side state, but it's a really comfortable paradigm to program in, especially if you're not from a frontend background, and really clicks with the wider Elixir/Erlang problem solving approach.<p><a href="https://hexdocs.pm/phoenix_live_view/js-interop.html#handling-server-pushed-events" rel="nofollow">https://hexdocs.pm/phoenix_live_view/js-interop.html#handlin...</a><p>Hooks let you do things like have your DOM update live, but then layer on some JS in response.<p>For example you could define a custom `<chart>` component, which is inserted into the DOM with `data-points=[...]`, and have a hook then 'hydrate' it with e.g. a D3 or VegaLite plot.<p>Since Phoenix/LiveView is handling the state, your JS needs only be concerned about that last-mile JS integration; no need to pair it with another virtual DOM / state management system.<p><a href="https://hexdocs.pm/phoenix_live_view/js-interop.html#client-hooks-via-phx-hook" rel="nofollow">https://hexdocs.pm/phoenix_live_view/js-interop.html#client-...</a></p>
]]></description><pubDate>Fri, 17 Oct 2025 22:09:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=45622720</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=45622720</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45622720</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Expert: LSP for Elixir"]]></title><description><![CDATA[
<p>For BEAM MCP you probably want to look at TideWave, which runs _in your application_ to give the LLM context and an execution environment.<p><a href="https://hexdocs.pm/tidewave/mcp.html" rel="nofollow">https://hexdocs.pm/tidewave/mcp.html</a></p>
]]></description><pubDate>Fri, 29 Aug 2025 11:28:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=45062677</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=45062677</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45062677</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Ask HN: The government of my country blocked VPN access. What should I use?"]]></title><description><![CDATA[
<p>I've heard of domain fronting, where you host something on a subdomain of a large provider like Azure or Amazon. Is this what you're talking about when you say<p>> - Host on a piece of infrastructure that's so big that you can't effectively block it without causing a major internet outage (think: S3, Cloudflare R2, etc).<p>How can one bounce VPN traffic through S3? Or are you just talking about hosting client software, ingress IP address lists, etc?</p>
]]></description><pubDate>Thu, 28 Aug 2025 19:44:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=45056238</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=45056238</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45056238</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Show HN: I was curious about spherical helix, ended up making this visualization"]]></title><description><![CDATA[
<p>Surprised to not see Acko.net mentioned in comments already - he uses similar aids in one of his blog posts to break down complex numbers and ultimately fractals.<p>Likely right up your street!<p><a href="https://acko.net/blog/how-to-fold-a-julia-fractal/" rel="nofollow">https://acko.net/blog/how-to-fold-a-julia-fractal/</a></p>
]]></description><pubDate>Wed, 20 Aug 2025 22:45:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=44967299</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=44967299</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44967299</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Show HN: Reviving a 20 year old OS X App"]]></title><description><![CDATA[
<p>Agreed - updated with colour again</p>
]]></description><pubDate>Fri, 18 Jul 2025 22:38:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=44610561</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=44610561</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44610561</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Show HN: Reviving a 20 year old OS X App"]]></title><description><![CDATA[
<p>It’s not the most accessible colour scheme - I’ll have a look and tweak it so dark mode is more readable.<p>I’d definitely be really grateful for help with that! I’m not planning to publish to the Mac App Store, but it would
be great to have the build step a bit more compliant with current practises.</p>
]]></description><pubDate>Wed, 16 Jul 2025 08:16:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=44579889</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=44579889</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44579889</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Show HN: Reviving a 20 year old OS X App"]]></title><description><![CDATA[
<p>Since going down this rabbit hole, I gave Anki another fair shot and actually RTFM :) the blog post warrants an update<p><a href="https://docs.ankiweb.net/deck-options.html#learning-steps" rel="nofollow">https://docs.ankiweb.net/deck-options.html#learning-steps</a> Details what _actually happens_ when you pick again/hard/good etc. I much prefer understanding this to the vibes-based approach of “did you pause before answering”.<p>Secondly turns out you can indeed very easily set up type-to-answer in a deck by editing the front template and adding<p>{type:Field}<p>where field is the answer part of the card’s data.<p>So… I’m actually using Anki again. I’m still very happy I did this, it was a fun little journey!</p>
]]></description><pubDate>Wed, 16 Jul 2025 08:13:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=44579869</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=44579869</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44579869</guid></item><item><title><![CDATA[Show HN: Reviving a 20 year old OS X App]]></title><description><![CDATA[
<p>Article URL: <a href="https://andrewshaw.nl/blog/reviving-genius">https://andrewshaw.nl/blog/reviving-genius</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44540724">https://news.ycombinator.com/item?id=44540724</a></p>
<p>Points: 73</p>
<p># Comments: 32</p>
]]></description><pubDate>Sat, 12 Jul 2025 09:47:30 +0000</pubDate><link>https://andrewshaw.nl/blog/reviving-genius</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=44540724</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44540724</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Ask HN: What are you working on? (March 2025)"]]></title><description><![CDATA[
<p>I have been bedroom DJing, and wanting to expand what I can do with the hardware I already have.<p>Using `midiex` for Elixir I’ve written a fully fledged driver for Ableton Push, letting me use it as essentially a 4-deck version of Pioneer’s DDJ-XP2 sub controller with Rekordbox.<p>It implements basic statefulness so that the rotary encoders can be used, as well as a paging system so the 64 performance pads can be mapped to different functions. It also supports track browsing and loading, which is helpful if you want to use say DVS with an external mixer and don’t want to be hunched over a laptop dragging tracks around.<p>It’s also got some additional capabilities which I’ve not seen on other hardware like dedicated faders for stem separation levels.<p>It’s been a great exercise in combing two hobbies, learning about MIDI as well as being able to personalise my setup for my own use. I haven’t open sourced any of it just yet whilst I’m still tweaking things but I’d be interested in collaborating with anyone who also has one of these devices and has programmed it. I’m looking to use the display on it next, whose protocol Ableton have some (albeit scant) documentation for.</p>
]]></description><pubDate>Mon, 31 Mar 2025 12:08:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=43534013</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=43534013</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43534013</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Camera Ignores Perspective and Sees Behind Walls"]]></title><description><![CDATA[
<p>This isn’t exactly the case. The camera has an actuating mirror on the end of the rotating arm that allows it to point at arbitrary angles.<p><a href="https://youtu.be/aXfTgCCsRSg" rel="nofollow">https://youtu.be/aXfTgCCsRSg</a> (T=4:30)<p>The emulating different lenses part is that with this setup you can parametrically collect specific rays bouncing off the object (presumably the angle of the mirror with respect to radius), and the resulting image will be the same as you’d get from a lens with those parameters.</p>
]]></description><pubDate>Wed, 25 Dec 2024 08:40:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=42507715</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=42507715</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42507715</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Everything Is Just Functions: 1 week with David Beazley and SICP"]]></title><description><![CDATA[
<p>Not the other commenter, but my team has been using Elixir in production (soft real-time distributed systems) for several years to great success. The approachable syntax has been great for folks new to the language coming on board and sort of, not realising they’re “doing FP”.<p>Generally I’d say Elixir’s lack of “hard” static typing is more than made up for what you get from the BEAM VM, OTP, its concurrency model, supervisors etc.<p>That said if you’re interested in leveraging the platform whilst also programming with types I’d recommend checking out Gleam (<a href="https://gleam.run" rel="nofollow">https://gleam.run</a>), which I believe uses an HM type system.</p>
]]></description><pubDate>Mon, 18 Nov 2024 10:14:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=42171169</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=42171169</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42171169</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Bypassing regulatory locks, hacking AirPods and Faraday cages"]]></title><description><![CDATA[
<p>A commenter on Reddit [1] pointed out that you can access the hearing test feature directly by using a special URL:<p><pre><code>    x-apple-health://HearingAppPlugin.healthplugin/HearingTest

</code></pre>
I wonder if there’s a similar deep link to be found to enable Hearing Aid mode?<p>1: <a href="https://www.reddit.com/r/AirpodsPro/comments/1gftyqo/is_the_hearing_aid_test_available_in_the_uk/" rel="nofollow">https://www.reddit.com/r/AirpodsPro/comments/1gftyqo/is_the_...</a></p>
]]></description><pubDate>Wed, 13 Nov 2024 12:37:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=42125544</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=42125544</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42125544</guid></item><item><title><![CDATA[New comment by shawa_a_a in "I'm not mutable, I'm partially instantiated"]]></title><description><![CDATA[
<p>It's a bold statement to call something a Prolog successor! Are you aiming for a general purpose logic programming language like Prolog, or targeting the use case of querying knowledge bases?<p>One of the draws to Prolog is its immensely simple syntax:
A.R:B = true in your case would be represented as simply r(A, B).<p>It looks like you've elevated some set theory properties to syntax, and have added some neat sugar over chained relations. Have you found areas where this really shines as compared to writing more standard Prolog/Datalog queries? I'm afraid I couldn't see many examples on first look at your Github.</p>
]]></description><pubDate>Thu, 07 Nov 2024 20:56:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=42080902</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=42080902</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42080902</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Programming languages that blew my mind (2023)"]]></title><description><![CDATA[
<p>I would second Prolog as mind-blowing. I've found you're typically confronted with fully engaging with the core of whatever problem you're solving, and only that core. This is probably what can make it so frustrating sometimes as you have no option but to work out the hard stuff nearly immediately; not to mention that unconsidered edge cases, mistakes can cause some pretty opaquely wrong results, or the query not terminating, which can make conventional debugging pretty difficult. The guarantees you get with using the 'pure' core of Prolog do open up some really interesting avenues though, for example Scryer's debugging library is quite neat in affording _semantic_ debugging: <a href="https://www.scryer.pl/debug" rel="nofollow">https://www.scryer.pl/debug</a><p>Just some additional commentary too - I think this post quite misrepresents it with some of the comparisons.<p>Prolog at its core is SLD Resolution [1] (a form of search) over Horn Clauses [2] (first order logic). Queries posted to the runtime are attempts to find a set of values which will satisfy (cause to be true) the query – whilst SQL is founded on relational algebra which more closely aligned with set theory.<p>Whilst there's probably some isomorphism between satisfying/refuting a logical predicate, and performing various set operations, I'd say it's a bit of a confusion of ideas to say that SQL is based on 'a subset of Prolog'. The author might be thinking about Datalog [3], which is indeed a syntactic subset of Prolog.<p>[1]: <a href="https://en.wikipedia.org/wiki/SLD_resolution" rel="nofollow">https://en.wikipedia.org/wiki/SLD_resolution</a>
[2]: <a href="https://en.wikipedia.org/wiki/Horn_clause" rel="nofollow">https://en.wikipedia.org/wiki/Horn_clause</a>
[3]: <a href="https://en.wikipedia.org/wiki/Datalog" rel="nofollow">https://en.wikipedia.org/wiki/Datalog</a></p>
]]></description><pubDate>Sun, 03 Nov 2024 20:05:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=42035735</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=42035735</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42035735</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Weird Lexical Syntax"]]></title><description><![CDATA[
<p>The comment character is also configurable:<p><pre><code>    git config core.commentchar <char>
</code></pre>
This is helpful where you want to use use say, markdown to have tidily formatted commit messages make up your pull request body too.</p>
]]></description><pubDate>Sat, 02 Nov 2024 13:57:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=42026424</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=42026424</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42026424</guid></item><item><title><![CDATA[New comment by shawa_a_a in "Use Prolog to write psycho-philosophical case studies"]]></title><description><![CDATA[
<p>I don’t know about your particular use case, but it is never a bad idea to learn Prolog.<p><a href="https://www.metalevel.at/prolog" rel="nofollow">https://www.metalevel.at/prolog</a><p>The Power of Prolog is an extremely in depth, comprehensive introduction that starts right from fundamentals, and goes into some pretty advanced topics. It’s a really great resource, with well-produced accompanying videos, and leans into properly grokking the language and the “Prolog way” of problem solving.<p>I’d make a meta point that learning Prolog and forcing yourself to solve problems the “prolog way” serves as a great exercise in understanding the importance of using the right tool for the job, and working with, rather than in spite of , your tools.</p>
]]></description><pubDate>Fri, 25 Oct 2024 00:01:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=41941033</link><dc:creator>shawa_a_a</dc:creator><comments>https://news.ycombinator.com/item?id=41941033</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41941033</guid></item></channel></rss>