<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet href="/index.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Yotam&#39;s blog</title>
    <link>https://yotam.net/</link>
    <description>Recent content on Yotam&#39;s blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <managingEditor>me@yotam.net (Yotam Nachum)</managingEditor>
    <webMaster>me@yotam.net (Yotam Nachum)</webMaster>
    <lastBuildDate>Sat, 01 Aug 2026 14:56:00 +0300</lastBuildDate><atom:link href="https://yotam.net/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How Can I Learn While Using AI?</title>
      <link>https://yotam.net/posts/learning-with-ai/</link>
      <pubDate>Sat, 01 Aug 2026 14:56:00 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/learning-with-ai/</guid>
      <description>&lt;p&gt;Recently I had a problem with my sound in Linux. Although Linux desktop had
progressed immensely in the last several years, still sometimes I find myself
trying to understand what went wrong. This time, instead of diving into the
system logs, I let an LLM model do it. Quickly I got the root cause and a
solution which was to turn off the unnecessary Pipewire plugin. That led me to a
sad realization.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Piercing the Shadow Root Using CDP</title>
      <link>https://yotam.net/posts/piercing-the-shadow-root-using-cdp/</link>
      <pubDate>Sat, 13 Sep 2025 14:28:17 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/piercing-the-shadow-root-using-cdp/</guid>
      <description>&lt;p&gt;Part of &lt;a href=&#34;https://www.nimbleway.com/&#34;&gt;my day job&lt;/a&gt; is orchestrating browsers using the
&lt;a href=&#34;https://chromedevtools.github.io/devtools-protocol/&#34;&gt;Chrome DevTools Protocol&lt;/a&gt;, also known as CDP. CDP is a powerful protocol
that exposes many ways to control and inspect a running Chrome instance. People
usually interact with a wrapper around CDP like Puppeteer or Playwright but
sometimes to get the full power of the protocol, you need to use it directly.
Sadly it seems that the protocol was not properly designed and everything was
bolted on as the protocol expanded to expose new functionality.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>My First FOSDEM</title>
      <link>https://yotam.net/posts/my-first-fosdem/</link>
      <pubDate>Tue, 04 Feb 2025 22:12:00 +0200</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/my-first-fosdem/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve wanted to attend FOSDEM for the last few years, and I finally made it this
year for my first time. I came with two friends from my previous job and it was
a blast. I&amp;rsquo;ve read beforehand whatever I could about the conference but it still
took the first day to understand how to get around the conference.&lt;/p&gt;
&lt;h3 id=&#34;talks&#34;&gt;Talks&lt;/h3&gt;
&lt;p&gt;Each of us made a list of talks we wanted to attend. Of course there were
overlapping talks but we were ready for that. I&amp;rsquo;ve also read to not overdo the
talks since it&amp;rsquo;s very tiring. Still the &lt;a href=&#34;https://fosdem.org/2025/schedule/event/fosdem-2025-4204-tightening-every-bolt/&#34;&gt;first talk we tried to attend&lt;/a&gt; was
full with no chance of getting in. We cut our losses and went to the stands
which were great although also a bit crowded.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Remote Reverse Tethering With Gnirehtet</title>
      <link>https://yotam.net/posts/remote-reverse-tethering-with-gnirehtet/</link>
      <pubDate>Sat, 27 Jul 2024 19:12:00 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/remote-reverse-tethering-with-gnirehtet/</guid>
      <description>&lt;p&gt;Recently I had some automation work again with Android but this time with a
catch, it had to work with remote physical devices that are not reachable over
TCP. More than that, I wanted to connect my devices to a VLAN that I assemble
and dismantle on demand. I&amp;rsquo;ve done something similar to it before with
&lt;a href=&#34;https://github.com/Genymobile/gnirehtet&#34;&gt;Gnirehtet&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; for reverse tethering into the VLAN but this was the first time
using a remote ADB server.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Dont Forget The Dot</title>
      <link>https://yotam.net/posts/dont-forget-the-dot/</link>
      <pubDate>Sat, 25 Nov 2023 19:02:32 +0200</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/dont-forget-the-dot/</guid>
      <description>&lt;p&gt;Recently we discovered a surprising bottleneck in our Kubernetes cluster at work.
Apparently, our DNS server was overloaded and started to respond slowly. We have
applied the quick solution suggested by &lt;a href=&#34;https://careers.wolt.com/en/blog/engineering/improving-wolt-com-latency-by-demystifying-node-js-dns-resolution&#34;&gt;Wolt&amp;rsquo;s excellent post&lt;/a&gt; but it was
only a superficial solution to the bigger problem, why do we have so many DNS
queries?&lt;/p&gt;
&lt;p&gt;The reason for the DNS load was for two reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;DNS records in Kubernetes have a low TTL by default. While you can change it,
it does have it&amp;rsquo;s own drawbacks that should be considered.&lt;/li&gt;
&lt;li&gt;For each DNS query we actually sent two, one after the other. When trying to
reach &lt;code&gt;example.com&lt;/code&gt; for example, we will first query
&lt;code&gt;example.com.svc.cluster.local&lt;/code&gt; and only then will try the actual domain we
wanted. The reason is that Kubernetes will first lookup to see if the
requested DNS is an internal service before trying to reach out to an external
DNS server. That would also apply to local services, before querying
&lt;code&gt;internal.svc.cluster.local&lt;/code&gt; it will first query
&lt;code&gt;internal.svc.cluster.local.svc.cluster.local&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;the-solution&#34;&gt;The Solution&lt;/h2&gt;
&lt;p&gt;The solution was actually one character long! A &lt;abbr title=&#34;Fully Qualified Domain Name&#34;&gt;fqdn&lt;/abbr&gt;
must actually contain a dot at the end of it to represent the root DNS. So
instead of querying &lt;code&gt;example.com&lt;/code&gt; we just changed to &lt;code&gt;example.com.&lt;/code&gt;. The root
DNS suffix mean that it can&amp;rsquo;t be a local service because you can&amp;rsquo;t append
anything after the last dot.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Please, Let Me Choose The Binding Address</title>
      <link>https://yotam.net/posts/let-me-choose-binding-address/</link>
      <pubDate>Sat, 28 Oct 2023 21:17:56 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/let-me-choose-binding-address/</guid>
      <description>&lt;p&gt;When a program is listening for new TCP connections, it needs to choose which ip
address and port to listen on. While the port option is pretty easy to
understand&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, people give less thought to the address they use. Why is that?&lt;/p&gt;
&lt;p&gt;Usually programs bind to one of two addresses: &lt;code&gt;127.0.0.1&lt;/code&gt; to listen on the
loopback interface or &lt;code&gt;0.0.0.0&lt;/code&gt; to listen on all interfaces. While those are the
most common options, some people have more complex setup that won&amp;rsquo;t fall in one
of those two options. For example, Google Chrome will only let you expose its
CDP port to the loopback interface, which make sense for most people but not if
you want to expose it remotely. The other option is also not always nice to
have. Beside security risks of listening on all interfaces, sometimes you might
have different interfaces for different services and listening on &lt;code&gt;0.0.0.0&lt;/code&gt; will
cause a port collision.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>OpenBSD in an Air-Gapped System</title>
      <link>https://yotam.net/posts/openbsd-air-gapped-packages/</link>
      <pubDate>Sat, 12 Aug 2023 15:08:54 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/openbsd-air-gapped-packages/</guid>
      <description>&lt;p&gt;Recently I had the displeasure of working again within an air-gapped system.
The main obstacle I usually have with these systems is that it&amp;rsquo;s very easy to
mirror a complete packages repository but a lot harder to mirror only a specific
set of packages and their dependencies. About a year ago I had to figure out how
to do it with OpenBSD, but recently I had to do it again and completely forgot
how to do it. So in order to not make the same mistake twice, here is how to do
it properly with OpenBSD.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Network Management in Android: Routing</title>
      <link>https://yotam.net/posts/network-management-in-android-routing/</link>
      <pubDate>Fri, 07 Jul 2023 22:14:01 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/network-management-in-android-routing/</guid>
      <description>&lt;p&gt;I plan on diving deep into Android in future blog posts but for now I thought I
might share something that was really confusing to me in hope to prevent the
confusion to others. The confusion was not actually Android exclusive, I just
stumpled upon it while working with Android and it was a great reminder that
routing is a lot more complicated than I usually think of it.&lt;/p&gt;
&lt;p&gt;Anyway, if you have an Android machine (in my case a container), you can run
&lt;code&gt;ip-route(8)&lt;/code&gt; and see that there is probably only one route and it&amp;rsquo;s not the
default gateway. This is because, at least in my Android container, Android
doesn&amp;rsquo;t use the main table for routing configuration. Linux routing actually
have multiple routing tables which the kernel looks at for each packet. We can
see the rules that decide which table to look at through &lt;code&gt;ip-rule(8)&lt;/code&gt;. The rule
list in my Android container looks like so:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Dedicated CPU instances on the cloud</title>
      <link>https://yotam.net/posts/vps-dedicated-cpu/</link>
      <pubDate>Sun, 18 Jun 2023 21:00:03 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/vps-dedicated-cpu/</guid>
      <description>&lt;p&gt;The cloud is notoriously expensive compared to the comparative on-prem hardware
available in the market&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;. Of course, the cloud is not only about cost, but
also about ease of use and available features like managed databases and
security services. Yet, sometimes all you need is a simple, powerful Linux
machine. Luckily, there is a large list of options outside of the big three
cloud provides that compete mostly on pricing (although some of them have a
respectable services catalog).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Compiling Frida on Fedora</title>
      <link>https://yotam.net/posts/compiling-frida/</link>
      <pubDate>Wed, 08 Feb 2023 19:52:16 +0200</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/compiling-frida/</guid>
      <description>&lt;p&gt;Compiling &lt;a href=&#34;https://frida.re&#34;&gt;Frida&lt;/a&gt; can seem to be a bit daunting, with over two thousand lines
of Makefile, and that is without even beginning to look at the shell scripts in
there. This complexity is there for a reason, Frida needs to be run on over a
dozen of build targets, many of which are not proper building environments. The
make files you are looking at are mostly for this reason&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;. But luckily, Frida
itself use &lt;a href=&#34;https://mesonbuild.com/&#34;&gt;Meson&lt;/a&gt;, a modern, sane build system, for the actual building. Not
only that, but Frida vendor all of its dependencies with a Meson version to
simplify building it even further!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Easing Deployment Without Containers</title>
      <link>https://yotam.net/posts/easing-deployment-without-containers/</link>
      <pubDate>Tue, 13 Dec 2022 19:21:14 +0200</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/easing-deployment-without-containers/</guid>
      <description>&lt;p&gt;In the modern world of Docker and Podman, it seems that deployment is a solved
problem. But this is only true if you give up on keeping it simple. There are of
course use cases for containers, but sometimes all we need is a small Linux VM
to run a few services on, why is it so hard?&lt;/p&gt;
&lt;p&gt;Recently I&amp;rsquo;ve tried with varying degrees of success to run several web services,
mostly written in dynamic languages like PHP or Ruby on my server. The
experience was horrendous, with lots of weird errors and moving parts that I
couldn&amp;rsquo;t understand. I&amp;rsquo;m not an expert DevOps administrator but I&amp;rsquo;ve had my fair
share of server administration, at work and at home, so why is it still that
hard to set up a new service?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Kodi Setup: Sailing The High Seas</title>
      <link>https://yotam.net/posts/piracy-setup/</link>
      <pubDate>Thu, 01 Dec 2022 22:31:34 +0200</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/piracy-setup/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://yotam.net/posts/free-culture-proprietary&#34;&gt;I&amp;rsquo;m not as radical as I used to be&lt;/a&gt; and so I do have a Netflix account&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.
There are still many shows and movies that I can&amp;rsquo;t access legally without paying
up for yet another media streaming service. Of course, a mere &lt;a href=&#34;https://yotam.net/posts/the-audacity-of-piping-curl-to-bash&#34;&gt;DRM&lt;/a&gt; won&amp;rsquo;t
prevent me from watching the latest seasonal anime or another random pop culture
show. I&amp;rsquo;m sure there will be some misguided people saying how I&amp;rsquo;m stealing other
people&amp;rsquo;s work but I will defer this debate for another time.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Two Different Outlooks of Computers</title>
      <link>https://yotam.net/posts/two-outlooks-of-computers/</link>
      <pubDate>Mon, 21 Nov 2022 12:31:00 +0200</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/two-outlooks-of-computers/</guid>
      <description>&lt;p&gt;For a long time by now, I had a conflicting view of my ideal computer system.
On the one hand, I strive for minimal, clean abstractions, without the legacy
code plaguing most modern software. On the other hand, modern software gives
me a huge boost in creativity and makes software more approachable than
ever. This contrast between modern software that is focused on productivity and
conservative software that is focused on beauty sadly prevents me from enjoying
computers.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Linux Namespaces Are a Poor Man&#39;s Plan 9 Namespaces</title>
      <link>https://yotam.net/posts/linux-namespaces-are-a-poor-mans-plan9-namespaces/</link>
      <pubDate>Sat, 05 Nov 2022 10:15:12 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/linux-namespaces-are-a-poor-mans-plan9-namespaces/</guid>
      <description>&lt;p&gt;Plan 9 is the failed&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; successor to Unix. It was developed by the same group,
Bell Labs, with all of the experience they had gather in the twenty years since
Unix was first written. Many features that are common today in many Unix
systems, and some non Unix systems, came originally from Plan 9. For example,
the &lt;code&gt;/proc&lt;/code&gt; file system was first implemented in UNIX 8th Edition, which was the
predecessor to Plan 9&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;. Another example, which I will talk about in this
post, is the use of process namespaces.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>What Makes Sourcehut CI So Good</title>
      <link>https://yotam.net/posts/sourcehut-build/</link>
      <pubDate>Mon, 24 Oct 2022 17:57:09 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/sourcehut-build/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m not in any way an expert in CI systems, I&amp;rsquo;ve only used four such systems in
my whole career: Jenkins, Gitlab CI, Sourcehut Builds and recently also Github
Actions. I&amp;rsquo;ve been praising Sourcehut Builds to my coworkers for a long time but
I always assumed that it&amp;rsquo;s not that special, just that I had a bad experience
with Gitlab CI and Jenkins. That is, until I tried Github Actions and started to
appreciate Sourcehut Builds even more.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Promoting Free Culture With Proprietary Software</title>
      <link>https://yotam.net/posts/free-culture-proprietary/</link>
      <pubDate>Mon, 26 Sep 2022 11:44:06 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/free-culture-proprietary/</guid>
      <description>&lt;p&gt;In the last couple of years I sadly tuned down my free software usage and
evangelism. I still believe in it but I just got tired of using 100% free
software and decided to take a more pragmatic route. The pragmatic route, just
as the title says, it means sometimes using proprietary software. But I&amp;rsquo;m not
talking about Google services or Windows, I&amp;rsquo;m talking about companies that
promote free culture&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; even if their core product is not necessarily free.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>The Audacity of Piping Curl to Bash</title>
      <link>https://yotam.net/posts/the-audacity-of-piping-curl-to-bash/</link>
      <pubDate>Sat, 25 Sep 2021 10:50:58 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/the-audacity-of-piping-curl-to-bash/</guid>
      <description>&lt;p&gt;It seems more and more common, at least in the self-hosted community, to provide
two methods of installations: Docker or a shell script installer. It seems that
many new projects don&amp;rsquo;t even bother with a native package manager, such as dpkg
or rpm, which makes me reluctant to use them.&lt;/p&gt;
&lt;p&gt;Many talk about the security implications of piping curl into bash but it has
been talked about enough and the solution is usually splitting the process into
two steps, fetching the file and then running it. But what really makes me avoid
running those scripts is how complicated they are and their audacity of how they
treat my system.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Reviewing my tweaks for Fedora</title>
      <link>https://yotam.net/posts/fedora-tweaks/</link>
      <pubDate>Fri, 08 May 2020 21:39:31 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/fedora-tweaks/</guid>
      <description>&lt;p&gt;I have been using Fedora for a few years now and installed it countless
times because it bothers me to have a messy system. I stay on Fedora
because it has one of the best out of the box experience, at least for
me. But still, there are some things that I need to tweak on every new
installation so I have &lt;a href=&#34;https://git.sr.ht/~yotam/gnome-dotfiles/tree/master/install.sh&#34;&gt;a script&lt;/a&gt; to do most of those things and
after over four years it got pretty good in doing it. So here are the
tweaks that are relevant to Fedora (some configurations like Vim and
Tmux deserve a separate post).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Change New Tab in Firefox</title>
      <link>https://yotam.net/posts/change-new-tab-firefox/</link>
      <pubDate>Tue, 24 Dec 2019 18:43:16 +0200</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/change-new-tab-firefox/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve started ricing my workstation again and wanted to change the new tab page
in Firefox. Apparently it&amp;rsquo;s harder than it should be because extensions don&amp;rsquo;t
have access to an API that can do it. You might remember a setting called &amp;ldquo;New
Tabs&amp;rdquo; but it only let you choose between a blank page and the default new tab
page.&lt;/p&gt;
&lt;p&gt;Anyway, the solution is to edit the internal new tab service through the
browser console. If you don&amp;rsquo;t want to run the script every time you launch
Firefox you can configure it to auto run with an autoconfig.js file.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Why I Give Up on Free Software Phones</title>
      <link>https://yotam.net/posts/why-i-give-up-on-free-software-phones/</link>
      <pubDate>Sat, 09 Nov 2019 15:36:11 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/why-i-give-up-on-free-software-phones/</guid>
      <description>&lt;p&gt;For over a year I have used a Google-free smart phone, at first with just
&lt;a href=&#34;https://lineageos.org/&#34;&gt;LineageOS&lt;/a&gt; and later with &lt;a href=&#34;https://lineage.microg.org/&#34;&gt;LineageOS+MicroG&lt;/a&gt;. It was a nice
experiment but my phone was causing too much trouble and in the end I got
fed up and bought a new phone (Samsung Galaxy S10e). I hope one day to
have a free phone again (maybe if the Librem 5 will succeed) but
currently there isn&amp;rsquo;t a real alternative that is worth the sacrifice.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Building a Python Project With Meson</title>
      <link>https://yotam.net/posts/building-a-python-project-with-meson/</link>
      <pubDate>Fri, 30 Aug 2019 17:42:12 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/building-a-python-project-with-meson/</guid>
      <description>&lt;p&gt;I have already shown how to build a Vala program with Meson. In this
post, I will show how to do the same for Python. You don&amp;rsquo;t really need
to compile an interpreted language but Meson helps you to put the files
in their correct installation directory.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Spawning a Subprocess With GLib and Gio</title>
      <link>https://yotam.net/posts/spawning-subprocess-with-glib-and-gio/</link>
      <pubDate>Fri, 02 Aug 2019 22:16:20 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/spawning-subprocess-with-glib-and-gio/</guid>
      <description>&lt;p&gt;While I was working on my first GNOME application which I hope to
publish soon I stumbled upon a small hindrance of how to spawn a
subprocess efficiency without blocking the main thread. I could have
left it as is with the straightforward pythonic way but I wanted the
user interface to be fluid.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Why Static Typing</title>
      <link>https://yotam.net/posts/why-static-typing/</link>
      <pubDate>Sat, 25 May 2019 11:08:45 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/why-static-typing/</guid>
      <description>&lt;p&gt;The case of static vs dynamic typing is a long lasting debate without a
clear answer. A few years ago it seems that all of the popular
programming languages were dynamic: Ruby&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, JavaScript&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;, Python&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;
etc but all of the languages I have listed have some sort of static
typing added to them. Why is that?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Python Type Hinting - Part I</title>
      <link>https://yotam.net/posts/python-type-hinting/</link>
      <pubDate>Sat, 27 Apr 2019 13:35:17 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/python-type-hinting/</guid>
      <description>&lt;p&gt;If you are using a recent version of Python (which you should because
Python 2 will be EOL in less than a year) than you can use type hinting
with a sane syntax instead of using docstrings to document the arguments
types.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Compile Vala With Meson</title>
      <link>https://yotam.net/posts/meson-build-for-vala/</link>
      <pubDate>Wed, 09 Aug 2017 16:23:34 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/meson-build-for-vala/</guid>
      <description>&lt;p&gt;In my previous post &lt;a href=&#34;https://yotam.net/posts/vala-getting-started/&#34;&gt;Getting Started With Vala&lt;/a&gt; I showed you how to
write a program in Vala and compile it using &lt;code&gt;valac&lt;/code&gt;. Compiling with
&lt;code&gt;valac&lt;/code&gt; was okay but even with only GTK+ as our dependency the command
is starting to get long. If you don&amp;rsquo;t want to specify all the compiler
flags each time you can use a build system.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Getting Started With Vala</title>
      <link>https://yotam.net/posts/vala-getting-started/</link>
      <pubDate>Tue, 08 Aug 2017 18:32:00 +0300</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/posts/vala-getting-started/</guid>
      <description>&lt;p&gt;Vala is an object oriented programming language that was designed
specifically for GTK+ and GNOME development. Vala&amp;rsquo;s syntax is similar to
C# but it compile to C code using the GObject system which let you use
the GNOME ecosystem easily.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>My Setup</title>
      <link>https://yotam.net/use/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <author>me@yotam.net (Yotam Nachum)</author>
      <guid>https://yotam.net/use/</guid>
      <description>&lt;p&gt;My setup is a bit fluid but there are some workflows that I&amp;rsquo;ve found to work for
me. I will try to focus on what works for me in the long term, a sort of living
copy of &lt;a href=&#34;https://yotam.net/posts/fedora-tweaks/&#34;&gt;my post about my Fedora tweaks&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;hardware&#34;&gt;Hardware&lt;/h2&gt;
&lt;p&gt;I sometimes work from the office but I have little say in the hardware there so
I will focus on what I have at home. I do work most days from home so it&amp;rsquo;s the
better working environment for me anyway.&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
