<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hambz</title><link>/</link><description>Recent content on Hambz</description><generator>Hugo</generator><language>en-us</language><copyright>© Halladj Hamza</copyright><lastBuildDate>Sat, 31 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml"/><item><title>Teaching Concurrency with Go: A Non-Conventional Approach to Advanced Operating Systems</title><link>/posts/post-17/</link><pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate><guid>/posts/post-17/</guid><description>&lt;h1 id="teaching-concurrency-with-go-a-non-conventional-approach-to-advanced-operating-systems">Teaching Concurrency with Go: A Non-Conventional Approach to Advanced Operating Systems&lt;a class="heading-anchor" href="#teaching-concurrency-with-go-a-non-conventional-approach-to-advanced-operating-systems" aria-label="Link to this section">#&lt;/a>&lt;/h1>&lt;h2 id="why-i-ditched-java-and-c-for-goroutines">Why I Ditched Java and C++ for Goroutines&lt;a class="heading-anchor" href="#why-i-ditched-java-and-c-for-goroutines" aria-label="Link to this section">#&lt;/a>&lt;/h2>&lt;p>As I prepared to teach Advanced Operating Systems to 4th-year undergraduate students this semester, I faced a familiar dilemma: stick with the traditional approach (Java or C++) or try something different. After years of watching students struggle with segmentation faults when they should be thinking about semaphores, I decided to take a risk.&lt;/p></description></item><item><title>Gentle introduction to Tmux</title><link>/posts/post-16/</link><pubDate>Sat, 26 Apr 2025 00:00:00 +0000</pubDate><guid>/posts/post-16/</guid><description>&lt;p>In our &lt;a href="https://misc-lab.org/fr/">research lab&lt;/a> we just had a new high-performance computing machine. However this is where the good news end, since we are having our networking infrastracture redone we are facing some challenges while &lt;em>trying&lt;/em> to train voilance detection model. The networking constraints we have right now are:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>No remote access&lt;/strong>: The machine is only accessible through the local network, with no internet connectivity.&lt;/li>
&lt;li>&lt;strong>Unstable network&lt;/strong>: The local network is shaky and unreliable.&lt;/li>
&lt;li>&lt;strong>Shared hardware&lt;/strong>: We are sharing the hardware with other lab members.&lt;/li>
&lt;/ol>
&lt;p>These limitations make it challenging to maintain long-enough sessions since the training would take hours (maybe days).&lt;/p></description></item><item><title>Docker Images Under the Hood</title><link>/posts/post-15/</link><pubDate>Tue, 26 Nov 2024 00:00:00 +0000</pubDate><guid>/posts/post-15/</guid><description>&lt;p>Ever since I have heard about containers technology, I have had a foggy understanding of Docker images. The terms &lt;em>layered-architecture&lt;/em>, and &lt;em>multi-layer build&lt;/em> have never made much sense to me, like I could comfortably write a dev-docker image or a deployment docker image, however I was never satified, sense my mental model of how it all works under-the-hook was not fully constructed.&lt;/p>
&lt;h2 id="file-system-mounts">File-system mounts:&lt;a class="heading-anchor" href="#file-system-mounts" aria-label="Link to this section">#&lt;/a>&lt;/h2>&lt;p>Before we dive deeper into our topic, we must build a good understanding of what are &lt;em>file-system (FS) mounts&lt;/em> and how they work. If you are already comfortable with these concepts please feel free to move to the next section.&lt;/p></description></item><item><title>Buring ISO into a Flash USB on Linux</title><link>/posts/post-14/</link><pubDate>Fri, 04 Oct 2024 00:00:00 +0000</pubDate><guid>/posts/post-14/</guid><description>&lt;p>Burning an ISO to a Flash USB stick or a CD/DVD is the first step to install a new operating system on a machine, and it is a straight-forward process too. For example, when I used to use Windows operating systems, &lt;a href="https://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;rct=j&amp;amp;opi=89978449&amp;amp;url=https://rufus.ie/&amp;amp;ved=2ahUKEwjIkdWXifWIAxWHRqQEHXevI0kQFnoECAgQAQ&amp;amp;usg=AOvVaw360qlGZbGE3DcSah5A5ITM">Rufus&lt;/a> was my first choice to burn an ISO image, and on debian or Ubuntu, it was Etcher. However, now that I&amp;rsquo;m using Arch Linux, both of them didn&amp;rsquo;t work or weren&amp;rsquo;t even available.&lt;/p></description></item><item><title>Connecting a qemu virtual machine to the host machine</title><link>/posts/post-13/</link><pubDate>Tue, 02 Apr 2024 00:00:00 +0000</pubDate><guid>/posts/post-13/</guid><description>&lt;p>Using a qemu virtual machine that was created feels just like using any other physical machine until it&amp;rsquo;s time for remote access, or doing any networking-related activities( ports, IP address, etc&amp;hellip; ). then you realize that it is connected using NAT. meaning you do not have access to the machine, can&amp;rsquo;t ssh into it, or connect to any of its ports.&lt;/p>
&lt;h1 id="now-what-to-do">Now What to do:&lt;a class="heading-anchor" href="#now-what-to-do" aria-label="Link to this section">#&lt;/a>&lt;/h1>&lt;p>Generally speaking, there are two ways we could achieve connectivity between the host machine and the guest virtual machine, the first approach is using &lt;strong>Port-Forwarding&lt;/strong>, which gives us the ability to make a mapping between &lt;em>a port on the guest machine&lt;/em> to a &lt;em>port on the host machine&lt;/em>. The other solution is attaching the guest machine to a &lt;strong>Bridge Network&lt;/strong>, making the host and guest machines fully connected.&lt;/p></description></item><item><title>Cross-platform mobile development on Linux</title><link>/posts/post-12/</link><pubDate>Thu, 28 Mar 2024 00:00:00 +0000</pubDate><guid>/posts/post-12/</guid><description>&lt;p>I have always heard about cross-platform mobile development frameworks(React-native &amp;amp; flutter), and how they make it trivial to maintain a single code base for your application. But how true of a statement is it when it comes to someone on Linux wishing to develop an application with some native networking features?&lt;/p>
&lt;h2 id="it-is-true-to-some-extent">It is true to some extent:&lt;a class="heading-anchor" href="#it-is-true-to-some-extent" aria-label="Link to this section">#&lt;/a>&lt;/h2>&lt;p>Two years ago I was working on my thesis and it involved creating a simple mobile application to act as a client for an ML prediction model, on that project I didn&amp;rsquo;t need any native support and it was only a prototype, which meant I only build it on &lt;em>android&lt;/em>. so theoretically I could have built it for &lt;em>ios&lt;/em> using any cloud service since you need an Apple machine to build it.&lt;/p></description></item><item><title>Software Licensing, Simply Put</title><link>/posts/post-11/</link><pubDate>Mon, 29 Aug 2022 00:00:00 +0000</pubDate><guid>/posts/post-11/</guid><description>&lt;p>One could wonder, &amp;ldquo;&lt;em>what is the point of having a license over software, the source code
is probably already there, in the public domain&lt;/em>&amp;rdquo; (for example published over GitHub),
well there is no short answer, and probably there will be no legal problems at all if you don&amp;rsquo;t use one(most of the
time, don&amp;rsquo;t take my word for it), but not having a license over software will eliminate
any rights or ownership over it, and it gets only worse from there as the lines
of ownership are blurred, for example: who owns the code, the writer who thought about
a solution and code it into reality or the cooperation which he works for,
or both. So what is exactly software licensing?&lt;/p></description></item><item><title>Docker's No Nonsense Tour</title><link>/posts/post-10/</link><pubDate>Wed, 27 Jul 2022 00:00:00 +0000</pubDate><guid>/posts/post-10/</guid><description>&lt;p>Before docker was a thing, developing, testing and shipping software was a huge miss and it is still a miss afterward, don&amp;rsquo;t get me wrong
but at the end of this article, you might appreciate how docker made the process more bearable, those are some of the technologies used to develop software without using docker:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Virtual Machines&lt;/strong>&lt;/li>
&lt;li>&lt;strong>package management systems&lt;/strong>&lt;/li>
&lt;li>&lt;strong>config management tools&lt;/strong>&lt;/li>
&lt;li>&lt;strong>a pile of interconnected dependencies.&lt;/strong>&lt;/li>
&lt;/ol>
&lt;p>Meaning each team member of the different teams involved in the development process would
have to get that huge pile of miss to work locally, you could imagine how painful that would be,
that&amp;rsquo;s where docker comes into play, where it gives the ability to contain the entire
software stack and published it(publicly or privately) as an image for the members to use,
by use I mean just running a simple command such&lt;/p></description></item><item><title>Reading and Note-taking</title><link>/posts/post-9/</link><pubDate>Sun, 17 Jul 2022 00:00:00 +0000</pubDate><guid>/posts/post-9/</guid><description>&lt;p>Well if you want to acquire some knowledge, there is one of two approaches you are probably going to take, you either gonna watch some visual content or read some kind of written information(book, article, etc). I can say that reading is the more effective approach at least that&amp;rsquo;s me ,but reading can be tedious sometimes especially when you are having a bad day, so one must follow some strategy to get the most out of his efforts, one strategy I might suggest is taking notes but, not the kind of notes we are used to take in classes, instead, I mean using a proven note-taking system like Zettelkasten.&lt;/p></description></item><item><title>About</title><link>/about/</link><pubDate>Fri, 15 Jul 2022 22:32:58 +0400</pubDate><guid>/about/</guid><description>&lt;p>I&amp;rsquo;m Hamza Halladj, a PhD researcher at &lt;a href="https://www.ulaval.ca/">Université Laval&lt;/a> working on cloud security, and a DevOps engineer.&lt;/p>
&lt;p>This blog is my working notebook. I write about containers and what they do under the hood, Linux tooling, infrastructure, and what I learn teaching systems courses. I try to explain things the way I would have wanted them explained when I was starting out.&lt;/p>
&lt;h2 id="elsewhere">Elsewhere&lt;a class="heading-anchor" href="#elsewhere" aria-label="Link to this section">#&lt;/a>&lt;/h2>&lt;ul>
&lt;li>Code: &lt;a href="https://github.com/halladj">GitHub&lt;/a>&lt;/li>
&lt;li>Portfolio: &lt;a href="https://hamza-halladj.netlify.app/">hamza-halladj.netlify.app&lt;/a>&lt;/li>
&lt;li>Feed: &lt;a href="/index.xml">RSS&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>First Article</title><link>/posts/post-8/</link><pubDate>Fri, 15 Jul 2022 00:00:00 +0000</pubDate><guid>/posts/post-8/</guid><description>&lt;p>This blog is nothing more than a fancy semi-structured notebook of a masters student
at the time of this writing, that have some computer science-related knowledge.&lt;/p>
&lt;h2 id="what-to-expecet">What To Expecet&lt;a class="heading-anchor" href="#what-to-expecet" aria-label="Link to this section">#&lt;/a>&lt;/h2>&lt;p>I will be trying to my best explaining selected theoretical computer science concepts
in the manner that naive 18 years old me would actually be able to wrap his head around,
no extra nonsense just what you will need to get going and you would be able indefinitely
to fill-up the gaps afterwards by yourself.&lt;/p></description></item></channel></rss>