<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title></title>
        <link>https://blog.mihaisafta.com/</link>
        <description>Mihai Safta&#39;s blog - toughts about computing</description>
        <generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>saftacatalinmihai@gmail.com (Safta Catalin Mihai)</managingEditor>
            <webMaster>saftacatalinmihai@gmail.com (Safta Catalin Mihai)</webMaster><lastBuildDate>Thu, 25 Jun 2026 18:19:44 &#43;0300</lastBuildDate>
            <atom:link href="https://blog.mihaisafta.com/index.xml" rel="self" type="application/rss+xml" />
        <item>
    <title>LCARS Raylib app - offline voice recognition &amp; UI editing</title>
    <link>https://blog.mihaisafta.com/posts/lcars_voice/</link>
    <pubDate>Thu, 25 Jun 2026 18:19:44 &#43;0300</pubDate>
    <author>Safta Catalin Mihai</author>
    <guid>https://blog.mihaisafta.com/posts/lcars_voice/</guid>
    <description><![CDATA[LCARS voice recognition &amp; UI editing This is the continuation in the series of LCARS app development:
LCARS Elbow LCARS Frame LCARS Text Editor In the last post I built a text editor from scratch for the Captain&rsquo;s-log use-case. This time I added three things to it: speech recognition, so you can dictate into the log instead of typing it out; proper cursor editing, so you can insert and delete anywhere in the text and not only at the end; and a drag-and-drop layout editor for moving the interface elements around.]]></description>
</item>
<item>
    <title>LCARS text editor</title>
    <link>https://blog.mihaisafta.com/posts/lcars_texted/</link>
    <pubDate>Tue, 21 Apr 2026 18:27:09 &#43;0300</pubDate>
    <author>Safta Catalin Mihai</author>
    <guid>https://blog.mihaisafta.com/posts/lcars_texted/</guid>
    <description><![CDATA[LCARS Text editor in Raylib This is the continuation in the series of LCARS app development:
LCARS Elbow LCARS Frame This time I focused on implementing a text editor from scratch in Raylib.
This is for something like the personal log / Captain&rsquo;s log use-case.
Works better in the full screen version available here
Features Mouse over text area to allow editing text Insert text - only at the end for now&hellip; Will work on a gab buffer or something in the future to allow moving the cursor and edit text anywhere.]]></description>
</item>
<item>
    <title>Raylib LCARS Frame</title>
    <link>https://blog.mihaisafta.com/posts/lcars_frame/</link>
    <pubDate>Thu, 26 Mar 2026 18:19:44 &#43;0200</pubDate>
    <author>Safta Catalin Mihai</author>
    <guid>https://blog.mihaisafta.com/posts/lcars_frame/</guid>
    <description><![CDATA[LCARS frame in Raylib Continuation from last post about designing the LCARS elbow. I continued with making the full frame and add some interactivity to it.
Full screen version available here
Github Code Repo]]></description>
</item>
<item>
    <title>Raylib LCARS Elbow designer</title>
    <link>https://blog.mihaisafta.com/posts/lcars_elbow/</link>
    <pubDate>Wed, 18 Mar 2026 18:19:44 &#43;0200</pubDate>
    <author>Safta Catalin Mihai</author>
    <guid>https://blog.mihaisafta.com/posts/lcars_elbow/</guid>
    <description><![CDATA[LCARS Elbow designer in Raylib Just a fun little project for designing LCARS elbows. Click &rsquo;d&rsquo; key for debug view. Code: https://github.com/saftacatalinmihai/lcars/blob/main/lcars.c]]></description>
</item>
<item>
    <title>Software Architecture Horror Story</title>
    <link>https://blog.mihaisafta.com/posts/architecture-horror-story-1/</link>
    <pubDate>Thu, 09 Oct 2025 19:35:31 &#43;0300</pubDate>
    <author>Safta Catalin Mihai</author>
    <guid>https://blog.mihaisafta.com/posts/architecture-horror-story-1/</guid>
    <description><![CDATA[This is a tale of software architecture decision-making in large companies.
The setup As part of my job as a software architect, I had to design a solution which involved the integration between 2 systems: let&rsquo;s call them A and B. They were part of a new instant payment processing flow that was beeing developed. System B had a legacy integration mechanism that was no longer supported at the architectural level.]]></description>
</item>
<item>
    <title>Computer</title>
    <link>https://blog.mihaisafta.com/posts/computer/</link>
    <pubDate>Tue, 08 Jul 2025 18:01:06 &#43;0300</pubDate>
    <author>Safta Catalin Mihai</author>
    <guid>https://blog.mihaisafta.com/posts/computer/</guid>
    <description><![CDATA[🖖 Re-Creating Star Trek&rsquo;s LCARS Computer With Modern LLMs A hands-on experiment in autonomous tool-building agents
1 · Why LCARS? For decades science-fiction fans have watched Star Trek officers converse with a ship-wide computer LCARS (&ldquo;Library Computer Access/Retrieval System&rdquo;). LCARS could:
answer arbitrary questions by searching internal databases; execute real-world actions by routing commands to subsystems; politely say why it couldn&rsquo;t comply when limits were hit. In 2025, large language models (LLMs) plus tool-calling APIs make that dream feel within reach.]]></description>
</item>
<item>
    <title>Visual Stream Processing System</title>
    <link>https://blog.mihaisafta.com/posts/vsps/</link>
    <pubDate>Wed, 10 Jul 2024 12:44:58 &#43;0000</pubDate>
    <author>Safta Catalin Mihai</author>
    <guid>https://blog.mihaisafta.com/posts/vsps/</guid>
    <description><![CDATA[Add I&rsquo;ve added a new tldraw tool called Stream Component (left-most icon: &lt;/&gt; in the toolbar, shortcut key S). You can click or draw a rectangle to add a stream component to the canvas.
The component is not initialized at first - you need to select the component type from the drop-down menu. This UI will be improved to allow more discoverability, show descriptions of components, etc.
After selecting the component type, it will be initialized (started in the backend) and begin running immediately, waiting for inputs on its input port(s).]]></description>
</item>
<item>
    <title>7 Essential Tech Talks Every Developer Should Watch</title>
    <link>https://blog.mihaisafta.com/posts/talks-every-developer-should-watch/</link>
    <pubDate>Sun, 09 Jul 2023 15:37:11 &#43;0000</pubDate>
    <author>Safta Catalin Mihai</author>
    <guid>https://blog.mihaisafta.com/posts/talks-every-developer-should-watch/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="https://public.mihai-safta.dev/workroom.png" referrerpolicy="no-referrer">
            </div>Whether you&rsquo;re a seasoned developer or just starting your coding journey, these seven talks are packed with insights that will challenge and inspire you.
In the rapidly evolving world of software development, it&rsquo;s easy to get lost in the sea of new languages, frameworks, and techniques. But as I journeyed through my career as a developer, I found that revisiting seminal talks from industry visionaries consistently provides me with fresh perspectives and enduring wisdom.]]></description>
</item>
<item>
    <title>Pure Functional Stream processing in Scala [2]</title>
    <link>https://blog.mihaisafta.com/posts/pure-functional-stream-processing-in-scala-2/</link>
    <pubDate>Sun, 14 Feb 2021 00:00:00 &#43;0000</pubDate>
    <author>Safta Catalin Mihai</author>
    <guid>https://blog.mihaisafta.com/posts/pure-functional-stream-processing-in-scala-2/</guid>
    <description><![CDATA[In the last post, we saw how to combine pure functions running in IO and Akka streams using .mapAsync and .unsafeToFuture
val source: Source[String, NotUsed] = ??? val sink: Sink[Int, NotUsed] = ??? def pureFunction[F[_]](s: String): F[Int] = ??? source .mapAsync(parallelism = 8)(m =&gt; pureFunction[IO](m).unsafeToFuture()) .runWith(sink) In order to make it easier to work with IO in Akka Streams, we can write some helpers to add a method on Streams that automatically run the IO inside the flow.]]></description>
</item>
<item>
    <title>Pure Functional Stream processing in Scala [1]</title>
    <link>https://blog.mihaisafta.com/posts/pure-functional-stream-processing-in-scala-1/</link>
    <pubDate>Sat, 06 Feb 2021 00:00:00 &#43;0000</pubDate>
    <author>Safta Catalin Mihai</author>
    <guid>https://blog.mihaisafta.com/posts/pure-functional-stream-processing-in-scala-1/</guid>
    <description><![CDATA[In Scala you can write pure functional code, similar to Haskell or other pure functional languages, but you’re not obligated to. Wikipedia categories Scala as an impure Functional language.
FP purists view this as a weakness of Scala, but others view the option of “cheating” pureness as an acceptable choice sometimes. Even if you can do everything purely, it’s sometimes a lot easier to think about the problem in a different paradigm.]]></description>
</item>
</channel>
</rss>
