<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: ryjo</title><link>https://news.ycombinator.com/user?id=ryjo</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 30 Apr 2026 10:07:01 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=ryjo" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by ryjo in "Ask HN: What are you working on? (January 2026)"]]></title><description><![CDATA[
<p>Still working on CLIPS-related libraries. My  most recent one is CLIPSmqueue[1]. I'm employed full-time, so progress is slow as CLIPS stuff comes second to that. However, I've got a much larger CLIPS-related project in the works that I've been taking my time on, and I'm excited for when I finally feel ready to release it.<p>I'm not sure these projects will ever "go anywhere," but at the very least I'm honing my craft as a programmer. I've learned so much, and I have so much more to learn.<p>---<p>[1]<a href="https://github.com/mrryanjohnston/CLIPSmqueue" rel="nofollow">https://github.com/mrryanjohnston/CLIPSmqueue</a></p>
]]></description><pubDate>Mon, 12 Jan 2026 01:27:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=46582651</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=46582651</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46582651</guid></item><item><title><![CDATA[New comment by ryjo in "Show HN: CLIPSmqueue: A POSIX message queue (mqueue) library for CLIPS"]]></title><description><![CDATA[
<p>Hey, HN. This is a small C library that enables usage of POSIX message queues (mqueue) in CLIPS. This enables IPC between multiple CLIPS processes using kernel-managed message queues, including load-balancing receives and priority-handling.<p>The repo includes a fairly full test suite as well as examples that demonstrate multi-process communication between CLIPS rules engines.<p>My purpose in providing this library (and other CLIPS libraries I've released) is to expand the usecases in which CLIPS can be leveraged. Feedback welcome.</p>
]]></description><pubDate>Tue, 30 Dec 2025 15:20:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=46434151</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=46434151</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46434151</guid></item><item><title><![CDATA[Show HN: CLIPSmqueue: A POSIX message queue (mqueue) library for CLIPS]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/mrryanjohnston/CLIPSmqueue">https://github.com/mrryanjohnston/CLIPSmqueue</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46434150">https://news.ycombinator.com/item?id=46434150</a></p>
<p>Points: 3</p>
<p># Comments: 1</p>
]]></description><pubDate>Tue, 30 Dec 2025 15:20:32 +0000</pubDate><link>https://github.com/mrryanjohnston/CLIPSmqueue</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=46434150</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46434150</guid></item><item><title><![CDATA[Show HN: CLIPSQLite – A SQLite Library for Clips Resources Readme]]></title><description><![CDATA[
<p>Hey, HN!<p>CLIPSQLite is a library for working with SQLite databases within CLIPS rules engines. It provides the basics like opening and closing connections, as well as more advanced ones like binding named variables to prepared statements and returning results as Facts and Instances.<p>Aside from being a lot of fun to create, my goal in making this is to open up the possibilities of using CLIPS in real world systems. Give it a look, and let me know what features you'd like to see added next!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45403416">https://news.ycombinator.com/item?id=45403416</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 28 Sep 2025 11:00:05 +0000</pubDate><link>https://github.com/mrryanjohnston/CLIPSQLite</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=45403416</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45403416</guid></item><item><title><![CDATA[Show HN: CLIPS1wm – a minimal X11 window manager in CLIPS]]></title><description><![CDATA[
<p>Hey, HN! CLIPS1wm is an X11 window manager written in CLIPS, my language of choice over the last few years. It's based on functionality provided by 1wm[1], a minimal wm written in C.<p>I was inspired to write this after seeing a post[2] about 1wm on HN. I was struck by 1wm's (then called mwm) simplicity, so I dusted off a CLIPS X11 library I had started[3] and have been using CLIPS1wm as my main wm for the last few weeks on my Lubuntu vm.<p>Why CLIPS? Rules, Facts, and Instances with a Rete[4]-like algorithm give you caches, indexing, and pattern-matching out of the box rather than hand-rolled while loops. CLIPS is written in C, so it's really convenient for integrating with X11. Finally, CLIPS is more than fast enough for event-based wms; I've also used it for real-time performance-centered applications[5].<p>My goal in writing this is to help spread CLIPS widely, so give it a try, or even just review the implementation in the CLIPS1wm.multifield.clp, CLIPS1wm.fact.clp, and CLIPS1wm.instance.clp files.<p>Let me know what X11 features I should try to bring in next!<p>---<p>[1]: <a href="https://github.com/lslvr/1wm" rel="nofollow">https://github.com/lslvr/1wm</a>
[2]: <a href="https://news.ycombinator.com/item?id=44634208">https://news.ycombinator.com/item?id=44634208</a>
[3]: <a href="https://github.com/mrryanjohnston/CLIPSX11" rel="nofollow">https://github.com/mrryanjohnston/CLIPSX11</a>
[4]: <a href="https://en.wikipedia.org/wiki/Rete_algorithm" rel="nofollow">https://en.wikipedia.org/wiki/Rete_algorithm</a>
[5]: <a href="https://ryjo.codes/tour-of-clipsraylib.html" rel="nofollow">https://ryjo.codes/tour-of-clipsraylib.html</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45082424">https://news.ycombinator.com/item?id=45082424</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 31 Aug 2025 11:41:45 +0000</pubDate><link>https://github.com/mrryanjohnston/CLIPS1wm</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=45082424</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45082424</guid></item><item><title><![CDATA[New comment by ryjo in "My first verified imperative program"]]></title><description><![CDATA[
<p>Very cool. Neat how you managed to get logical symbols in to the language itself! When might someone use preconditions in Lean theorems?<p>This article caught my eye because it's focused on imperative programming, and I've been very focused on declarative vs imperative programming over the last few years. I implemented a version of your function in CLIPS, a Rules-based language that takes a declarative approach to code:<p>(defrule sum-is-0
 (list $? ?first $? ?second $?)
 (test (= 0 (+ ?first ?second)))
 =>
 (println TRUE))<p>(defrule sum-is-not-0
 (not (and
  (list $? ?first $? ?second $?)
  (test (= 0 (+ ?first ?second)))))
 =>
 (println FALSE))<p>(assert (list 1 0 2 -1))
(run)
(exit)<p>The theorem you write in Lean to prove the function kind-of exists in CLIPS Rules; you define the conditions that must occur in order to execute the Right Hand Side of the Rule. Note that the above simply prints `TRUE` or `FALSE`; it is possible to write imperative `deffunction`s that return values in CLIPS, but I wanted to see if I could draw parallels for myself between Lean code and theorems. Here's a gist with the simple version and a slightly more robust version that describes the index at which the matching numbers appear: <a href="https://gist.github.com/mrryanjohnston/680deaee87533dfedc74b461eef5a358" rel="nofollow">https://gist.github.com/mrryanjohnston/680deaee87533dfedc74b...</a><p>Thank you for writing this and for your work on Lean! This is a concept that's been circling in my head for a minute now, and I feel like this article has unlocked some level of understanding I was missing before.</p>
]]></description><pubDate>Tue, 08 Jul 2025 04:24:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=44497065</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=44497065</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44497065</guid></item><item><title><![CDATA[Tour of CLIPSraylib]]></title><description><![CDATA[
<p>Article URL: <a href="https://ryjo.codes/tour-of-clipsraylib.html">https://ryjo.codes/tour-of-clipsraylib.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43822764">https://news.ycombinator.com/item?id=43822764</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 28 Apr 2025 15:45:12 +0000</pubDate><link>https://ryjo.codes/tour-of-clipsraylib.html</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=43822764</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43822764</guid></item><item><title><![CDATA[Tour of CLIPSraylib]]></title><description><![CDATA[
<p>Article URL: <a href="https://ryjo.codes/tour-of-clipsraylib.html">https://ryjo.codes/tour-of-clipsraylib.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43455620">https://news.ycombinator.com/item?id=43455620</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 23 Mar 2025 20:23:34 +0000</pubDate><link>https://ryjo.codes/tour-of-clipsraylib.html</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=43455620</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43455620</guid></item><item><title><![CDATA[CLIPS 6.4.2 Released]]></title><description><![CDATA[
<p>Article URL: <a href="https://groups.google.com/g/CLIPSESG/c/ZYOlXhv_sp4">https://groups.google.com/g/CLIPSESG/c/ZYOlXhv_sp4</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42988077">https://news.ycombinator.com/item?id=42988077</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 09 Feb 2025 02:59:53 +0000</pubDate><link>https://groups.google.com/g/CLIPSESG/c/ZYOlXhv_sp4</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=42988077</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42988077</guid></item><item><title><![CDATA[CLIPSraylib: Clips with added User Defined Functions that wrap raylib]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/mrryanjohnston/CLIPSraylib">https://github.com/mrryanjohnston/CLIPSraylib</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42276852">https://news.ycombinator.com/item?id=42276852</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 29 Nov 2024 20:30:21 +0000</pubDate><link>https://github.com/mrryanjohnston/CLIPSraylib</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=42276852</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42276852</guid></item><item><title><![CDATA[New comment by ryjo in "Ask HN: Who wants to be hired? (September 2024)"]]></title><description><![CDATA[
<p><p><pre><code>  Location: Pittsburgh, Pa
  Remote: Yes
  Willing to relocate: No
  Technologies: CLIPS, Ruby (on Rails), Go, JavaScript, C, SQL
  Résumé: https://drive.google.com/file/d/1M-tC7qpehmsJfd3JBk3KtXEQ5wDJz89t
  Email: mrryanjohnston (at) gmail
  Website: https://ryjo.codes
</code></pre>
12+ years of experience writing code professionally, active in open source, passionate about education and freedom of knowledge. Very interested in Rules Engines. Love working on teams of self-starters, enjoy pushing the boundaries of my understanding. Comfortable mentoring others as well as helping non-technical folks with difficult-to-grok concepts.</p>
]]></description><pubDate>Thu, 05 Sep 2024 16:59:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=41458483</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=41458483</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41458483</guid></item><item><title><![CDATA[New comment by ryjo in "Write a Ruby C Extension to Use Clips from Ruby: Part 3"]]></title><description><![CDATA[
<p>Hey, Lio! Thanks so much for the kind feedback. I'm really happy the stuff I write is helpful to others :D<p>If you haven't seen it, here's a past post that got some good traction on HN that you might find interesting: <a href="https://news.ycombinator.com/item?id=40201729">https://news.ycombinator.com/item?id=40201729</a></p>
]]></description><pubDate>Wed, 04 Sep 2024 13:25:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=41445520</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=41445520</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41445520</guid></item><item><title><![CDATA[Write a Ruby C Extension to Use Clips from Ruby: Part 3]]></title><description><![CDATA[
<p>Article URL: <a href="https://ryjo.codes/articles/write-a-ruby-c-extension-to-use-clips-from-ruby-part-3.html">https://ryjo.codes/articles/write-a-ruby-c-extension-to-use-clips-from-ruby-part-3.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=41428338">https://news.ycombinator.com/item?id=41428338</a></p>
<p>Points: 3</p>
<p># Comments: 2</p>
]]></description><pubDate>Mon, 02 Sep 2024 20:00:46 +0000</pubDate><link>https://ryjo.codes/articles/write-a-ruby-c-extension-to-use-clips-from-ruby-part-3.html</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=41428338</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41428338</guid></item><item><title><![CDATA[Input/Output on Streams]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.gnu.org/software/libc/manual/html_node/I_002fO-on-Streams.html">https://www.gnu.org/software/libc/manual/html_node/I_002fO-on-Streams.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=41034449">https://news.ycombinator.com/item?id=41034449</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 22 Jul 2024 13:58:48 +0000</pubDate><link>https://www.gnu.org/software/libc/manual/html_node/I_002fO-on-Streams.html</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=41034449</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41034449</guid></item><item><title><![CDATA[The Language of Languages]]></title><description><![CDATA[
<p>Article URL: <a href="https://matt.might.net/articles/grammars-bnf-ebnf/">https://matt.might.net/articles/grammars-bnf-ebnf/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=40979072">https://news.ycombinator.com/item?id=40979072</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 16 Jul 2024 18:37:12 +0000</pubDate><link>https://matt.might.net/articles/grammars-bnf-ebnf/</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=40979072</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40979072</guid></item><item><title><![CDATA[When should we use a scatter/gather(vectored) IO? (2010)]]></title><description><![CDATA[
<p>Article URL: <a href="https://stackoverflow.com/questions/3540843/when-should-we-use-a-scatter-gathervectored-io">https://stackoverflow.com/questions/3540843/when-should-we-use-a-scatter-gathervectored-io</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=40976320">https://news.ycombinator.com/item?id=40976320</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 16 Jul 2024 13:19:55 +0000</pubDate><link>https://stackoverflow.com/questions/3540843/when-should-we-use-a-scatter-gathervectored-io</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=40976320</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40976320</guid></item><item><title><![CDATA[New comment by ryjo in "Writing a Wayland Compositor, Part 1: Hello wlroots (2018)"]]></title><description><![CDATA[
<p>Previous discussion here: <a href="https://news.ycombinator.com/item?id=16406471">https://news.ycombinator.com/item?id=16406471</a></p>
]]></description><pubDate>Tue, 16 Jul 2024 01:16:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=40972908</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=40972908</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40972908</guid></item><item><title><![CDATA[Writing a Wayland Compositor, Part 1: Hello wlroots (2018)]]></title><description><![CDATA[
<p>Article URL: <a href="https://drewdevault.com/2018/02/17/Writing-a-Wayland-compositor-1.html">https://drewdevault.com/2018/02/17/Writing-a-Wayland-compositor-1.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=40972906">https://news.ycombinator.com/item?id=40972906</a></p>
<p>Points: 2</p>
<p># Comments: 1</p>
]]></description><pubDate>Tue, 16 Jul 2024 01:16:14 +0000</pubDate><link>https://drewdevault.com/2018/02/17/Writing-a-Wayland-compositor-1.html</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=40972906</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40972906</guid></item><item><title><![CDATA[Vectored I/O]]></title><description><![CDATA[
<p>Article URL: <a href="https://en.wikipedia.org/wiki/Vectored_I/O">https://en.wikipedia.org/wiki/Vectored_I/O</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=40971811">https://news.ycombinator.com/item?id=40971811</a></p>
<p>Points: 5</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 15 Jul 2024 21:55:12 +0000</pubDate><link>https://en.wikipedia.org/wiki/Vectored_I/O</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=40971811</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40971811</guid></item><item><title><![CDATA[New comment by ryjo in "CLIPS: The C Language Integrated Production System [pdf] (1994)"]]></title><description><![CDATA[
<p>From the article:<p>> Conventional programming languages, such as FORTRAN and C, are designed and optimized for the
procedural manipulation of data (such as numbers and arrays). Humans, however, often solve complex
problems using very abstract, symbolic approaches which are not well suited for implementation in
conventional languages. Although abstract information can be modeled in these languages, considerable
programming effort is required to transform the information to a format usable with procedural
programming paradigms.<p>> One of the results of research in the area of artificial intelligence has been the development of techniques
which allow the modeling of information at higher levels of abstraction. These techniques are embodied in
languages or tools which allow programs to be built that closely resemble human logic in their
implementation and are therefore easier to develop and maintain. These programs, which emulate human
expertise in well defined problem domains, are called expert systems. The availability of expert system
tools has greatly reduced the effort and cost involved in developing an expert system.</p>
]]></description><pubDate>Wed, 03 Jul 2024 15:27:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=40866929</link><dc:creator>ryjo</dc:creator><comments>https://news.ycombinator.com/item?id=40866929</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40866929</guid></item></channel></rss>