<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Proyectos on Javier Sagredo</title>
    <link>https://sagredo.dev/projects/</link>
    <description>Recent content in Proyectos on Javier Sagredo</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 15 Jan 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://sagredo.dev/projects/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Classgraph</title>
      <link>https://sagredo.dev/projects/classgraph/</link>
      <pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sagredo.dev/projects/classgraph/</guid>
      <description>A GHC 9.14 type-checker plugin to create graphs of classes</description>
    </item>
    <item>
      <title>Sula</title>
      <link>https://sagredo.dev/projects/sula/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://sagredo.dev/projects/sula/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;/&#39;su.la/&lt;/code&gt; for the suffix of capsule in Spanish, Cápsula.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div style=&#34;text-align: center; margin: 0 auto; width: 200px&#34;&gt;&lt;img alt=&#34;sula logo&#34; loading=&#34;lazy&#34; src=&#34;https://sagredo.dev/img/sula.png&#34;&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&#34;https://git.sagredo.dev/?p=sula.git;a=summary&#34;&gt;Git&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A &lt;a href=&#34;https://geminiprotocol.net/&#34;&gt;Gemini&lt;/a&gt; protocol server written in
&lt;a href=&#34;https://www.scryer.pl&#34;&gt;Scryer Prolog&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;requirements&#34;&gt;Requirements&lt;/h2&gt;
&lt;p&gt;sula depends on a patched Scryer Prolog which can be found
&lt;a href=&#34;https://git.sagredo.dev/scryer-prolog&#34;&gt;here&lt;/a&gt; (branch &lt;code&gt;js/fixes&lt;/code&gt;). The required
patches are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A native &lt;code&gt;&#39;$copy_stream&#39;/2&lt;/code&gt; builtin used for streaming binary file bodies to
TLS clients without materialising the contents on the Prolog heap.&lt;/li&gt;
&lt;li&gt;A fix to &lt;code&gt;library(pio)&lt;/code&gt;&amp;rsquo;s &lt;code&gt;buffer_prepare_for_n/5&lt;/code&gt; so that lazy reads from
process pipes (and other streams whose &lt;code&gt;at_end_of_stream/1&lt;/code&gt; never reports
true) terminate on EOF instead of spinning.&lt;/li&gt;
&lt;li&gt;A non-blocking poll loop in &lt;code&gt;socket_server_accept/4&lt;/code&gt; that checks Scryer&amp;rsquo;s
&lt;code&gt;INTERRUPT&lt;/code&gt; flag, so &lt;code&gt;SIGINT&lt;/code&gt; becomes a catchable &lt;code&gt;&#39;$interrupt_thrown&#39;&lt;/code&gt;
exception instead of being trapped behind a blocking syscall.&lt;/li&gt;
&lt;li&gt;A port to &lt;code&gt;rustls&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A modification of &lt;code&gt;tls_server_negotiate&lt;/code&gt; to include the optional client
certificate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Build and install the patched Scryer:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
