<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:wfw="http://wellformedweb.org/CommentAPI/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:atom="http://www.w3.org/2005/Atom"
 xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
 xmlns:georss="http://www.georss.org/georss"
 xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
 xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<atom:link href="https://omidmash.de/blog/rss.xml" rel="self" type="application/rss+xml" />
<title>Omid's Blog</title>
<link>https://omidmash.de/</link>
<description><![CDATA[Rants on FOSS, tech, homeprod, music and other stuff.]]></description>
<language>en</language>
<lastBuildDate>Mon, 08 Jun 2026 18:37:04 +0200</lastBuildDate>
<generator>Emacs 30.2 org-publish-rss.el 0.8</generator>
<item>
<title>On Single Points of Failure</title>
<link>https://omidmash.de/blog/on-single-points-of-failure.html</link>
<pubDate>Sun, 07 Jun 2026 02:25:48 +0200</pubDate>
<guid>https://omidmash.de/blog/on-single-points-of-failure.html</guid>
<description>
<![CDATA[
<div id="outline-container-on-single-points-of-failure" class="outline-2">
<h2 id="on-single-points-of-failure">On Single Points of Failure</h2>
<div class="outline-text-2" id="text-on-single-points-of-failure">
<p>
<b>Tue Apr 14 22:33:47 2026</b>
</p>

<p>
No, that&rsquo;s not a mistake. I really did mean points, plural. Let me explain!
</p>

<p>
One day I was out of town and I realized, oh no, my Matrix instance is down. Oh no, my Synapse is on the same node that runs my website (which my students (hopefully) use to study and review materials). Well not a problem, I will ssh in, and fix this in a jiffy. Oh wait, my VPN is down. Oh no. I had hardened everything down. I was <b>not</b> getting into my server remotely.
</p>

<p>
It was then that I realized &ldquo;wow, I am getting quite reliant on my server&rdquo;. That was a wake-up call for me to:
</p>

<ol class="org-ol">
<li>upgrade my server machine into something that is preferably not old enough to vote</li>
<li>invest in a UPS</li>
<li>set up a redundant machine for VPN</li>
</ol>

<p>
&rsquo;A&rsquo; was quite simple. I bought a second hand <a href="https://www.yakkaroo.de/19-zoll-server-1he-kurz-emu-a1-n100-silent-quad-core-intel-n100-mini-itx">Emu A1-N100 Silent</a>. It consumed about 10% of the power that my Dell R220 used. The fans are quiet enough that I can tolerate them, however I have already purchased some Noctuas that I am going to pop in the server when I get the chance. It&rsquo;s not the noise that is unbearable, but the pitch of it does get on my nerves a bit. The second necessary purchase was the UPS. Since I like buying everything used, I had to search and research and wait a bit. In the end, I settled for a recently refurbished <a href="https://www.se.com/de/de/product/SMT1500RMI2U/apc-smartups-line-interactive-1500va-rackmontage-2he-230v-4-iec-c13stecker-smartslot-avr-lcd/">APC SMT1500RMI2U</a>. What a catchy name!
</p>

<p>
So, everything was hooked up. The transition and restoration from my PBS backups was painless. Booting up containers took seconds, not minutes. Reboots took a few minutes, not many minutes. The NVMe was faster, the HDDs didn&rsquo;t exist (so didn&rsquo;t need replacing), the power consumption was lower, life was better. Although I started to miss the spinning rust noises, I realized that I was doing it for the greater good. A basic <a href="https://mind-co.de/">RoI checker</a> was the little push I needed to pull the trigger. So, thank you, <a href="https://www.reddit.com/user/value1338/">/u/value1338</a>. As for the VPN situation, I set up a second subnet forwarding Tailscale node on a Raspberry Pi.
</p>

<p>
Cue today. I knew for some time that this week there would be power cut-offs. Not a problem! I am armed with a terribly overpowered UPS, and a machine that consumes about 7w. According to my (I mean the UPS&rsquo;) calculation, I have an uptime of 5 hours! That&rsquo;s practically forever. I was ready. This is how preppers feel every day, probably. I will face this storm as it comes and I will permit it to pass over me and through me. And when it has gone past I will turn the inne&hellip; <b>zap</b>. Blackout. The UPS starts beeping, I am smiling. I shut down my PC gracefully, and prepare to send a message to my little group of Matrix users: &ldquo;I may need to shut down, I will let you know&rdquo;. Pressing on send puts my message in a queued state. Hmm, why is Tailscale trying to activate on my phone, I am at home. Oh no&hellip; <b>I had forgotten about the router.</b>
</p>

<p>
A single point of failure. I can prepare everything, but if the router doesn&rsquo;t get the juice it needs, there is no connection to the outside world. I had neither powered my switch, nor the router, and so understandably, we went dark. The power outage took 70 minutes (which reduced my uptime by some many nines) but when the power came back up, I thought the issue was solved till I realized that the reconnection of the power had flipped a safety fuse in our box. Even if I set everything up properly, there is a chance that things will go down, and if I am not home and if a fuse pops, there&rsquo;s <b>nothing</b> I can do. I guess I have to be fine with that.
</p>

<p>
I did an express order for some cables for the router. I will get to connecting it to the UPS now. I have also set up an automatic shutdown feature via the NIC of the UPS to auto-shutdown my server gracefully in the event the battery goes below a certain expected available run time. Maybe I will set up a system so that it auto-starts on AC power resume. The good news is that the popped fuse was unrelated to my UPS, so hopefully I don&rsquo;t have to actually deal with this problem, but today I learned that it is possible, and that I am not a big data center, and that downtime is fine. Maybe even the internet will go down, and I still haven&rsquo;t set up a cellular backup. As long as I have higher uptimes than GitHub, I will be happy.
</p>
</div>
</div>
]]>
</description></item>
<item>
<title>On Programming Languages And Education</title>
<link>https://omidmash.de/blog/on-programming-languages-and-education.html</link>
<pubDate>Sun, 07 Jun 2026 02:26:04 +0200</pubDate>
<guid>https://omidmash.de/blog/on-programming-languages-and-education.html</guid>
<description>
<![CDATA[<div id="outline-container-on-programming-languages-and-education" class="outline-2">
<h2 id="on-programming-languages-and-education">On programming languages and education</h2>
<div class="outline-text-2" id="text-on-programming-languages-and-education">
<p>
<b>Fri Mar 27 15:39:44 2026</b>
</p>
</div>
<div id="outline-container-org7981a58" class="outline-3">
<h3 id="org7981a58">Disclaimer</h3>
<div class="outline-text-3" id="text-org7981a58">
<p>
I am not a professional programmer, but a teacher. I enjoy writing code not because I like solving puzzles, and not because I like to think about code particularly, but because I enjoy solving problems that I personally have, and because I like learning how computing works. I like thinking about paradigms of computing, and am more interested with how computers work than how coding works. I teach Computer and IT in a German high school. <b>My students are in the age range of 13-18, and partially are taking part in a mandatory course.</b>
</p>
</div>
</div>
<div id="outline-container-org30bff9e" class="outline-3">
<h3 id="org30bff9e">Intro</h3>
<div class="outline-text-3" id="text-org30bff9e">
<p>
Having taught programming for about 5 years now and having read lots of articles on choices of languages for teaching programming, I am starting to develop an opinion, and I would like to share it with you. The way I see it, my personal choice of programming language for the purposes of teaching boils down to (in no particular order):
</p>
<ul class="org-ul">
<li>Scheme</li>
<li>C</li>
<li>Haskell</li>
<li>Python</li>
<li>HTML/CSS (bear with me)</li>
</ul>

<p>
My choices are based on a couple of criteria. It is important for me that the choice is conform to the education program in Germany (of course) and that it is not a convoluted or overloaded language, that has good tooling,  relatively simple syntax, good books/literature/exercises (perhaps the most important aspect for me personally) and is easily installable in our lab environment. Other than that, a teacher also needs reference material, and the better a language is documented and has books/exercises, the easier it is to adapt these into a classroom situation. <span class="underline">Lastly and perhaps most importantly, I have to personally like the language. If I don&rsquo;t get excited about a language, then I also can&rsquo;t get students to get excited about it, and I think that&rsquo;s important.</span>
</p>

<p>
So why these languages?
</p>
</div>
</div>
<div id="outline-container-org15d9d0c" class="outline-3">
<h3 id="org15d9d0c">Scheme:</h3>
<div class="outline-text-3" id="text-org15d9d0c">
<p>
Just as Mr. Tortoise in <b>GEB</b> mentioned that drinking the popping tonic is said to be satisfying and refreshing, there is a deep satisfaction whenever I close the last parentheses of an expression. Yes, I know that there are some people whose main reason not to teach/work with Scheme is because of the parentheses (😊), but one can&rsquo;t deny that it is a good and very readable language to teach concepts of CompSci.
</p>


<div id="org273f362" class="figure">
<p><img src="https://imgs.xkcd.com/comics/lisp_cycles.png" alt="lisp_cycles.png" />
</p>
<p><span class="figure-number">Figure 1: </span>xkcd 297 — Lisp Cycles</p>
</div>


<p>
It is after all the language of choice in <b>SICP</b>, and has been taught in MIT for years until recently where apparently Python has taken its place. I enjoy working with <b>Little Schemer</b> first, and getting the students to understand the concepts of working with lists and then recursion directly. I think the prefix notation is interesting and forces one to think differently, and for me thinking differently about coding is important.
</p>

<p>
I believe that coding is a different paradigm of thinking, and having the same symbols from math suddenly mean different things is counterproductive. Other than that, Scheme belongs to a vast family of LISP dialects, under which ELISP also falls. For those who are still interested after graduation, configuring Emacs would be the next logical step and they have a solid background in how the syntax works. Scheme is also one of the languages that has the advantage of being interpreted and having a REPL, which is an excellent educational tool.
</p>
</div>
</div>
<div id="outline-container-orgfb46fa5" class="outline-3">
<h3 id="orgfb46fa5">C:</h3>
<div class="outline-text-3" id="text-orgfb46fa5">
<p>
Now I think my opinion is getting spicy. C, for school? What kind of mad man would do that in 2026?
</p>

<p>
I think C is the perfect language, if you want to understand how computers work, and not only understand how coding works. C being a low level language is quite close to bare metal, and there are lots of concepts regarding memory and having a bare-bone language that make it especially appealing for me to teach an older, stronger group. Concepts such as integer overflow, exit codes, compilation, architecture, flags, macros and binaries can be explained much easier in C than comparative languages.
</p>

<div class="org-src-container">
<pre class="src src-c"><code><span style="color: #5B6268;">/* </span><span style="color: #5B6268;">Easy and understandable example of integer overflow</span><span style="color: #5B6268;"> */</span>
<span style="color: #78bd65; font-weight: bold;">#include</span> <span style="color: #ea3d54;">&lt;</span><span style="color: #4fb3d8;">stdio.h</span><span style="color: #ea3d54;">&gt;</span>

<span style="color: #ee7b29;">int</span> <span style="color: #fedd38;">main</span><span style="color: #ea3d54;">(</span><span style="color: #ee7b29;">void</span><span style="color: #ea3d54;">)</span> <span style="color: #ea3d54;">{</span>
    printf<span style="color: #ee7b29;">(</span><span style="color: #4fb3d8;">"%d"</span>, 200 * 300 * 400 * 500<span style="color: #ee7b29;">)</span>;
    <span style="color: #5B6268;">/* </span><span style="color: #5B6268;">-884901888</span><span style="color: #5B6268;"> */</span>
    printf<span style="color: #ee7b29;">(</span><span style="color: #4fb3d8;">"%ld"</span>, 200 * 300 * 400 * 500<span style="color: #ee7b29;">)</span>;
    <span style="color: #5B6268;">/* </span><span style="color: #5B6268;">3410065408</span><span style="color: #5B6268;"> */</span>
<span style="color: #ea3d54;">}</span>
</code></pre>
</div>

<p>
I like to work with <b>C Programming: A Modern Approach</b> by K. N. King, because I very much enjoy his spiralcase pedagogical approach (Wikipedia: The spiral approach is a technique often used in education where the initial focus of instruction is the basic facts of a subject, with further details being introduced as learning progresses), and I adore the exercises he provides. The objectives are clear, the exercises are creative, and the students can have a bit of fun with seeings instant results. Other than that, there is this excellent book I am reading right now: <b>Computer Systems: Programmer&rsquo;s Perspective</b> which goes over almost all of aspects of a modern computer, and uses C to explain the inner workings of a computer. One can then expand on this work and work with embedded systems, for instance on Arduinos which most schools have plenty of/can buy cheaply which also has a very C-like syntax. Nothing cooler than making LEDs blink!
</p>
</div>
</div>
<div id="outline-container-org0155d5a" class="outline-3">
<h3 id="org0155d5a">Haskell:</h3>
<div class="outline-text-3" id="text-org0155d5a">
<p>
Oh Haskell, how I have hated you for no reason whatsoever for so long. Haskell has a reputation that precedes its actual implementation. Haskell is known by the general, non-CompSci people as being an obtuse and difficult language. That is until you try to implement a recursive function, and realize that it is a language that allows you to practically type out mathematical equations as they come and they will work. The Fibonacci sequence is mathematically defined as:
</p>

<p>
\[ Fib(0) = 0, \quad Fib(1) = 1 \]
\[ Fib(n) = Fib(n-1) + Fib(n-2) \]
</p>

<p>
and in Haskell looks like this:
</p>

<div class="org-src-container">
<pre class="src src-haskell"><code><span style="color: #fedd38;">fib</span> 0 <span style="color: #cbccd1;">=</span> 0
<span style="color: #fedd38;">fib</span> 1 <span style="color: #cbccd1;">=</span> 1
<span style="color: #fedd38;">fib</span> n <span style="color: #cbccd1;">=</span> fib <span style="color: #ea3d54;">(</span>n <span style="color: #cbccd1;">-</span> 1<span style="color: #ea3d54;">)</span> <span style="color: #cbccd1;">+</span> fib <span style="color: #ea3d54;">(</span>n <span style="color: #cbccd1;">-</span> 2<span style="color: #ea3d54;">)</span>
</code></pre>
</div>

<p>
Easy! Dare I say: elegant!
</p>

<p>
Compare it to this Python code, the &rsquo;simple&rsquo; language:
</p>
<div class="org-src-container">
<pre class="src src-python"><code><span style="color: #ea3d54;">def</span> <span style="color: #fedd38;">fib</span> <span style="color: #ea3d54;">(</span>n<span style="color: #ea3d54;">)</span>:
    <span style="color: #ea3d54;">if</span> n <span style="color: #78bd65;">==</span> 0:
        <span style="color: #ea3d54;">return</span> 0
    <span style="color: #ea3d54;">if</span> n <span style="color: #78bd65;">==</span> 1:
        <span style="color: #ea3d54;">return</span> 1
    <span style="color: #ea3d54;">else</span>:
        <span style="color: #ea3d54;">return</span> fib<span style="color: #ea3d54;">(</span>n <span style="color: #78bd65;">-</span> 1<span style="color: #ea3d54;">)</span> <span style="color: #78bd65;">+</span> fib<span style="color: #ea3d54;">(</span>n <span style="color: #78bd65;">-</span> 2<span style="color: #ea3d54;">)</span>
</code></pre>
</div>

<p>
Haskell also has great and clear type definitions, and is in my opinion very well suited for teaching recursion:
</p>

<div class="org-src-container">
<pre class="src src-haskell"><code><span style="color: #5B6268;">-- </span><span style="color: #5B6268;">example of caesar encryption
</span><span style="color: #ea3d54;">import</span> <span style="color: #ee7b29;">Data.Char</span> <span style="color: #ea3d54;">(</span>isLower, isUpper, ord, chr<span style="color: #ea3d54;">)</span>

<span style="color: #fedd38;">shift</span> <span style="color: #cbccd1;">::</span> <span style="color: #ee7b29;">Int</span> <span style="color: #cbccd1;">-&gt;</span> <span style="color: #ee7b29;">Char</span> <span style="color: #cbccd1;">-&gt;</span> <span style="color: #ee7b29;">Char</span>
<span style="color: #fedd38;">shift</span> n c
  <span style="color: #cbccd1;">|</span> isLower c <span style="color: #cbccd1;">=</span> chr <span style="color: #cbccd1;">$</span> <span style="color: #ea3d54;">(</span>ord c <span style="color: #cbccd1;">-</span> ord <span style="color: #4fb3d8;">'a'</span> <span style="color: #cbccd1;">+</span> n<span style="color: #ea3d54;">)</span> <span style="color: #cbccd1;">`mod`</span> 26 <span style="color: #cbccd1;">+</span> ord <span style="color: #4fb3d8;">'a'</span>
  <span style="color: #cbccd1;">|</span> isUpper c <span style="color: #cbccd1;">=</span> chr <span style="color: #cbccd1;">$</span> <span style="color: #ea3d54;">(</span>ord c <span style="color: #cbccd1;">-</span> ord <span style="color: #4fb3d8;">'A'</span> <span style="color: #cbccd1;">+</span> n<span style="color: #ea3d54;">)</span> <span style="color: #cbccd1;">`mod`</span> 26 <span style="color: #cbccd1;">+</span> ord <span style="color: #4fb3d8;">'A'</span>
  <span style="color: #cbccd1;">|</span> otherwise <span style="color: #cbccd1;">=</span> c

<span style="color: #5B6268;">-- </span><span style="color: #5B6268;">recursively
</span><span style="color: #fedd38;">caesarRec</span> <span style="color: #cbccd1;">::</span> <span style="color: #ee7b29;">Int</span> <span style="color: #cbccd1;">-&gt;</span> <span style="color: #ee7b29;">String</span> <span style="color: #cbccd1;">-&gt;</span> <span style="color: #ee7b29;">String</span>
<span style="color: #fedd38;">caesarRec</span> <span style="color: #ea3d54;">_</span> <span style="color: #ea3d54;">[]</span>          <span style="color: #cbccd1;">=</span> <span style="color: #ea3d54;">[]</span>
<span style="color: #fedd38;">caesarRec</span> n <span style="color: #ea3d54;">(</span>c<span style="color: #ee7b29;">:</span>cs<span style="color: #ea3d54;">)</span>      <span style="color: #cbccd1;">=</span> shift n c <span style="color: #ee7b29;">:</span> caesarRec n cs

<span style="color: #5B6268;">-- </span><span style="color: #5B6268;">iteratively
</span><span style="color: #fedd38;">caesar</span> <span style="color: #cbccd1;">::</span> <span style="color: #ee7b29;">Int</span> <span style="color: #cbccd1;">-&gt;</span> <span style="color: #ee7b29;">String</span> <span style="color: #cbccd1;">-&gt;</span> <span style="color: #ee7b29;">String</span>
<span style="color: #fedd38;">caesar</span> n <span style="color: #cbccd1;">=</span> map <span style="color: #ea3d54;">(</span>shift n<span style="color: #ea3d54;">)</span>
</code></pre>
</div>

<p>
Haskell is a language that lets the educator convey certain aspects of programming and algorithms very well. Much better than most other languages. There are great exercises and lessons in my favorite Haskell book, <b>Haskell Programming from first principles</b> by C. Allen and J. Moronuki. I love books that have lots of practical examples and exercises, and this book does not disappoint. Other than that, another great source of information is of course, <b>learnyouahaskell</b>. The fact that GHCi also exists helps students to learn how working in an interactive environment works, eg. loading their code into a REPL and experimenting with it interactively.
</p>
</div>
</div>
<div id="outline-container-orge34e380" class="outline-3">
<h3 id="orge34e380">Python</h3>
<div class="outline-text-3" id="text-orge34e380">
<p>
Ah Python. How deceiving you can be. On one hand, I think Python is a great language for introduction in programming, and on the other hand I think that it is a language that lacks any defining features, educationally speaking, besides having a english-like syntax. The joke goes that you can write pseudocode and english and it just works in Python. I have often had students come up with <code>in</code> by themselves, for instance <code>if i in list</code>. On one hand this is good, on the other hand it disappoints when it doesn&rsquo;t work.
</p>

<div class="org-src-container">
<pre class="src src-python"><code><span style="color: #5B6268;"># </span><span style="color: #5B6268;">example of Python code that reads like english and looks like pseudocode
</span><span style="color: #cbccd1;">list_of_numbers</span> <span style="color: #78bd65;">=</span> <span style="color: #fedd38;">list</span><span style="color: #ea3d54;">(</span><span style="color: #fedd38;">range</span><span style="color: #ee7b29;">(</span>21<span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">for</span> each_number <span style="color: #ea3d54;">in</span> list_of_numbers:
    <span style="color: #fedd38;">print</span><span style="color: #ea3d54;">(</span>each_number <span style="color: #78bd65;">*</span> 2<span style="color: #ea3d54;">)</span>
</code></pre>
</div>
<p>
The main power feature for our school, and an idea that I had two years ago and we have since implemented, was using Jupyter Notebooks. This enables us to share exercises and text with the students using scripts, and the students can just use Python and it&rsquo;s kernel using Jupyter Notebooks even if they are at home, or on a tablet, or on anything. We have digitalized Eric Matthes&rsquo; <b>Python Crash Course</b>, and we teach using it as a source and its exercises. We can share exercises via bash scripts, collect them, grade them and send them back. This saves time and allocates it from typing (also important, but time consuming for young students) to coding, learning and thinking. This book&rsquo;s exercises are interesting and creative; that makes learning more fun than just working with arbitrary numbers. The fact that Python has a REPL is also of great help, but I use it only in the beginning hours of my lessons, as I mostly teach Python to younger students, and little differences between working in REPL and working in files cause unnecessary friction for the learning proces.
</p>

<p>
Python however also has its issues. It takes a lot away from the students, and does much of the work in the background. This is good if all we are interested in is making code work, or understanding how formal writing works, but I often have the feeling that the underlying concepts are not understood as well as they could be in the other languages mentioned so far.
</p>
</div>
</div>
<div id="outline-container-org12f8304" class="outline-3">
<h3 id="org12f8304">HTML/CSS</h3>
<div class="outline-text-3" id="text-org12f8304">
<p>
Yes, HTML/CSS are not programming languages. Yes, HTML is Turing complete, but that&rsquo;s besides the point. The inspiration for this comes from an <a href="https://deadsimpletech.com/blog/notes_teaching_coding">article</a> by I. Merdith that I read on lobsters a while ago, which suggested using HTML and CSS for teaching programming. The reasoning was simple: HTML teaches typing and form, it teaches to use weird symbols, it teaches that every character matters, and in the end you have something to show for. A website in which you can be as creative as you like.
</p>

<blockquote>
<p>
Styling the website teaches its own useful set of skills. Attaching classes and ids to elements and attaching styles to them teaches the elements of how variables work and can be referenced. Importing stylesheets teaches the idea of an import or a module: the idea of linking code files from different places together. ~I. Meredith
</p>
</blockquote>

<p>
It&rsquo;s a great approach in my opinion, and one that is not in the education plan/curriculum. I think this approach should be explored more, and it&rsquo;s perhaps besides Python the one approach that can potentially make you money down the line. That&rsquo;s always good, isn&rsquo;t it?
</p>
</div>
</div>
<div id="outline-container-org35d537d" class="outline-3">
<h3 id="org35d537d">Conclusion</h3>
<div class="outline-text-3" id="text-org35d537d">
<p>
Each language has its pros and cons. I prefer HTML/CSS for complete beginners, and then go into Python if the goal is just to teach programming. I like teaching C for groups that have graduated from Python, and I like teaching Haskell for those who are doing the german Abitur in contrast to Scheme (it&rsquo;s either/or in Abitur). Where does Scheme fall here? I don&rsquo;t know. I haven&rsquo;t had an opportunity to test using Scheme a lot so far, other than breakout groups/singular sessions. It is definitely something that I want to explore later.
</p>
</div>
</div>
</div>
]]>
</description></item>
<item>
<title>On Matrix</title>
<link>https://omidmash.de/blog/on-matrix.html</link>
<pubDate>Sun, 07 Jun 2026 02:26:17 +0200</pubDate>
<guid>https://omidmash.de/blog/on-matrix.html</guid>
<description>
<![CDATA[<div id="outline-container-on_matrix" class="outline-2">
<h2 id="on_matrix">On Matrix</h2>
<div class="outline-text-2" id="text-on_matrix">
<p>
<b>Sun Feb 15 21:24:15 2026</b>
</p>

<p>
There seems to be a giant misconception about Matrix. The protocol, and its clients. Due to the news emerging on Discord and its future, it seems as if many people are looking for a new &rsquo;home&rsquo;. Stoat, Rocket.chat, mattermost and what not are always recommended; however I have the feeling that every time Matrix is recommended that it&rsquo;s immediately shot down from someone saying &rsquo;it doesn&rsquo;t work&rsquo;, or &rsquo;its not like discord&rsquo;. As if rocket.chat is anything like Discord. The arguments usually seem to be that the channels are not working properly, there are permission issues, or that there&rsquo;s no screen sharing/video calling.
</p>

<p>
All of these are not true. There is great video calling using Matrix&rsquo;s new implementation of MatrixRTC using Element. The permission system whilst not as robust as that of Discord, is still great.
</p>

<p>
Some people also say that Synapse has issues, or federating your own instance is hard. Yes, if you are the kind of person like me who runs his own instance then you will come into these hardships, but talking to Discord refugees on the niceties of continuwuity and its Rust codebase as opposed to the Python codebase on Synapse is like telling a person who wants to switch from Windows to Linux as a casual user that they should really install Linux from Scratch.
</p>

<p>
<b>To keep things short, Matrix is great. It&rsquo;s not flawless, it&rsquo;s not as polished as Discord. However, it is very usable and just fine for 99% of things the average user wants to do. Just join matrix.org, download Element and get online and enjoy a federated future.</b>
</p>

<p>
&mdash;
</p>

<p>
<b>Edit on Wed Feb 25 17:46:33 2026:</b> I still see misinformation about Matrix. Including one thread today where a vibecoded E2E chat program was being hailed as the replacement for Discord. Matrix is here. Instead of wasting time and trying to create other standards, push your code to Matrix and make it a great standard.
</p>

<p>
I had some fun setting up MatrixRTC this week. I used <a href="https://willlewis.co.uk/blog/posts/deploy-element-call-backend-with-synapse-and-docker-compose/">this guide</a>, and it works well so far!
</p>
</div>
</div>
]]>
</description></item>
<item>
<title>Concerning Emacs (and Jazz)</title>
<link>https://omidmash.de/blog/concerning-emacs.html</link>
<pubDate>Sun, 07 Jun 2026 02:26:25 +0200</pubDate>
<guid>https://omidmash.de/blog/concerning-emacs.html</guid>
<description>
<![CDATA[
<div id="outline-container-concerning-emacs" class="outline-2">
<h2 id="concerning-emacs">Concerning Emacs (and Jazz)</h2>
<div class="outline-text-2" id="text-concerning-emacs">
<p>
<b>Fri May 22 20:11:45 2026</b>
</p>
</div>
<div id="outline-container-org35a6c45" class="outline-3">
<h3 id="org35a6c45">Intro</h3>
<div class="outline-text-3" id="text-org35a6c45">
<p>
I have been preaching about Emacs for about two years now, ever since I started using it. It is by far my top used program on my PC. I have been to meetups about it, I write emails about it, I read books and articles on it, I share my dotfiles with others who are interested in setting a package up like I do. At this point, I am too dependant on Emacs to not write an article about it.
</p>

<p>
Emacs is my main program. When I boot my computer, Emacs is almost always the first program I open. When I shut down my PC, it&rsquo;s almost always the last program I kill. In this article, I want to tell you how it came to be, what I like and dislike about it, and I will try to convince you to try Emacs.
</p>
</div>
<div id="outline-container-orgb1e805d" class="outline-4">
<h4 id="orgb1e805d">Text editors and creativity</h4>
<div class="outline-text-4" id="text-orgb1e805d">
<p>
I have a Diplom<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup> in Jazz Guitar. One of the reasons for making such a questionable decision was the fact that I needed an artistic outlet. I have always been fascinated by music, and ever since I remember I wanted to make music. Now I wasn&rsquo;t any good at it till I started studying it seriously, but it was through Jazz that I was able to express myself freely in a (quite literally) formal<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup> context.
</p>

<p>
This is something that I think defines me as a person. I don&rsquo;t usually look for the easiest way, or the hardest way of doing things. I seek to do things in a way where I can express myself, in a way where I can be uniquely me. I find that satisfying: all humans are unique. There should not be one tool beyond the most basic simple tools that are perfect for &rsquo;everyone&rsquo;. Whenever there is talk of such a thing, there is talk of compromise. Yes, I am not going to get artisanal screwdrivers that are perfect for the shape of my hands and are carved from the exotic woods of the branches of a binary tree, because that is expensive, cumbersome, and I don&rsquo;t use screwdrivers 24/7 to justify such a purchase.
</p>

<p>
But do you know what I work with every day? Computers. You probably knew, but most people don&rsquo;t know that customizing computers is a very easy task, <b>if</b> you have the right framework. I don&rsquo;t need a <a href="https://i.redd.it/2k9xfo87648z.png">riced setup</a> where <a href="https://www.reddit.com/media?url=https%3A%2F%2Fi.redd.it%2Ffirst-time-ricing-and-its-great-hyperland-v0-lnh6da7qy5vf1.png%3Fwidth%3D2560%26format%3Dpng%26auto%3Dwebp%26s%3D32519377961c41a1e78631c9d610e1deea5a1732">every window</a> <a href="https://www.reddit.com/media?url=https%3A%2F%2Fi.redd.it%2F9s8y0ifswjqx.png">animates and phases in an out of existence</a>. I run a bare and minimal <a href="https://en.wikipedia.org/wiki/I3_(window_manager)">i3</a> setup. It is highly functional, I am extremely fast and comfortable with it, I don&rsquo;t need to think about what I am doing, and it is perfectly and completely personalized for me. I feel like I have mastered navigating my computer, just as learning Jazz guitar taught me how to master my instrument<sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup>.
</p>

<p>
I felt creative when I was setting up my environment. The idea was to see what my hands wanted to do when my brain wanted to do a task, for instance switching to the next workspace, and then just configure i3 to do that which my hands want to do by default. That&rsquo;s really easy, it turns out I have strong preferences on how I want my shortcuts to work (especially considering my preference for the 34 key keyboards, but that&rsquo;s a subject for a different time). Sometimes there is a little problem solving required, but nothing that a couple of nights of hacking won&rsquo;t fix. That may sound like much, but it is a creative endeavor which (for me at least) is a lot of fun, because I get to tackle problems till I can achieve perfection. This is much easier to do with computers than is in music for instance. Maybe I need this program to open up on the right side of my chats workspace on launch, maybe I need my Weechat IRC session that tmuxes into my server to have a different terminal config. A little bit of creative work here and there, and in the end you have something that you can truly identify with and is uniquely yours.
</p>

<p>
Emacs enables me to take this approach and apply it to almost all of daily computing, but we are not talking only about customization. Emacs (and in my experience, evil-mode<sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup>) allow me to think about my text as music, with the instrument being not a guitar, but my trusty <a href="https://github.com/davidphilipbarr/Sweep">Ferris Sweep</a>. Using Vim motions in this enormously powerful Elisp interpreter feels like magic. Now it&rsquo;s not only about editing text, it&rsquo;s about how I can do it being truly myself; how I can manipulate these letters that I see on the screen just in the same way I improvise in music.
</p>

<p>
Do I need to surround this integer in brackets, then add commas after every digit? Do I need to copy something from the inside of a quotation mark 20 lines up, and then paste it instead of every occurrence of the word occurrence? Or perhaps rename my files the same way I send my Emails? Of course those who use Emacs think that this is borderline too easy (except the last one), but I am not sure if is truly easy in the text editors that &ldquo;normal&rdquo;, &ldquo;non-nerdy&rdquo; people use<sup><a id="fnr.5" class="footref" href="#fn.5" role="doc-backlink">5</a></sup>. The point is also not that these tasks are possible (or impossible) in other environments in the first place, the point is that there is a sense of creativity that flows into these tasks. For these two simple tasks (&hellip;and a weird one), I can think of at least three different solutions for each problem. The one I choose could depend on my mood, the day of the week, the weather in Alaska or the planetary alignment of Venus and Mars.
</p>

<p>
I get to choose, and I have a choice of doing it using method A or method B<sup><a id="fnr.6" class="footref" href="#fn.6" role="doc-backlink">6</a></sup>. Ignoring the quantity of approaches where one can achieve a goal, some of these approaches require problem solving and the ability to think ahead. It&rsquo;s just nice having your brain tickled when you are doing mundane tasks. I think it keeps me sharp. It&rsquo;s not about doing things necessarily in the easiest way because of course using a mouse would be easier, but it&rsquo;s also no fun at all, and doesn&rsquo;t elicit any sense of joy in me.<sup><a id="fnr.7" class="footref" href="#fn.7" role="doc-backlink">7</a></sup>
</p>
</div>
</div>
<div id="outline-container-org662ab04" class="outline-4">
<h4 id="org662ab04">Some examples</h4>
<div class="outline-text-4" id="text-org662ab04">
<ol class="org-ol">
<li>Taking the example from earlier, let&rsquo;s say I want to convert <code>12345</code> into <code>[1, 2, 3, 4, 5]</code>, and my pointer starts on the 1. I have to think how I could set up a macro that works well once for every other iteration it should be at the correct point: <code>q q a , SPC ESC l q</code>, and then <code>3Q</code> to execute thrice. Create a macro, bind it to q, insert a comma, move to right once, end recording macro.</li>

<li><p>
Let&rsquo;s say I have a table with two formulas which does grading for a test, given the following table formulas directly after the table:
</p>

<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">


<colgroup>
<col  class="org-left" />

<col  class="org-left" />

<col  class="org-right" />

<col  class="org-right" />

<col  class="org-right" />

<col  class="org-right" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Vorname</th>
<th scope="col" class="org-left">Nachname</th>
<th scope="col" class="org-right">Test 1</th>
<th scope="col" class="org-right">Test 1 Max</th>
<th scope="col" class="org-right">Test 1 Total</th>
<th scope="col" class="org-right">Test 1 Note</th>
</tr>

<tr>
<th scope="col" class="org-left">&nbsp;</th>
<th scope="col" class="org-left">&nbsp;</th>
<th scope="col" class="org-right">&nbsp;</th>
<th scope="col" class="org-right">15</th>
<th scope="col" class="org-right">&nbsp;</th>
<th scope="col" class="org-right">&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">J.S.</td>
<td class="org-left">Bach</td>
<td class="org-right">12</td>
<td class="org-right">&nbsp;</td>
<td class="org-right">80</td>
<td class="org-right">2+</td>
</tr>

<tr>
<td class="org-left">Kurt</td>
<td class="org-left">Gödel</td>
<td class="org-right">8</td>
<td class="org-right">&nbsp;</td>
<td class="org-right">53</td>
<td class="org-right">4+</td>
</tr>

<tr>
<td class="org-left">M.C.</td>
<td class="org-left">Escher</td>
<td class="org-right">13</td>
<td class="org-right">&nbsp;</td>
<td class="org-right">86</td>
<td class="org-right">1-</td>
</tr>
</tbody>
</table></li>
</ol>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>#+TBLFM: $5=trunc<span style="color: #ea3d54;">(</span><span style="color: #ee7b29;">(</span>$3/@2$4<span style="color: #ee7b29;">)</span>*100<span style="color: #ea3d54;">)</span>
#+TBLFM: $6=<span style="color: #78bd65;">'</span><span style="color: #ea3d54;">(</span>cond <span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 95<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"1+"</span><span style="color: #ee7b29;">)</span> <span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 90<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"1"</span><span style="color: #ee7b29;">)</span> <span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 85<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"1-"</span><span style="color: #ee7b29;">)</span> \
<span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 80<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"2+"</span><span style="color: #ee7b29;">)</span> <span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 75<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"2"</span><span style="color: #ee7b29;">)</span> <span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 70<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"2-"</span><span style="color: #ee7b29;">)</span> \
<span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 65<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"3+"</span><span style="color: #ee7b29;">)</span> <span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 60<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"3"</span><span style="color: #ee7b29;">)</span> <span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 55<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"3-"</span><span style="color: #ee7b29;">)</span> \
<span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 50<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"4+"</span><span style="color: #ee7b29;">)</span> <span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 45<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"4"</span><span style="color: #ee7b29;">)</span> <span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 40<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"4-"</span><span style="color: #ee7b29;">)</span> \
<span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 33<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"5+"</span><span style="color: #ee7b29;">)</span> <span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 27<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"5"</span><span style="color: #ee7b29;">)</span> <span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&gt;=</span> $5 20<span style="color: #78bd65;">)</span> <span style="color: #4fb3d8;">"5-"</span><span style="color: #ee7b29;">)</span> \
<span style="color: #ee7b29;">(</span>t <span style="color: #4fb3d8;">"6"</span><span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span><span style="color: #5B6268;">;</span><span style="color: #5B6268;">L</span>
</code></pre>
</div>

<p>
I want to type in a grade in <code>$3</code> and have the grade be evaluated in <code>$6</code>. My workflow after typing a grade is to create a macro: <code>q q m a 7 G C-c C-c j C-c C-c ' a k TAB TAB TAB w</code><sup><a id="fnr.8" class="footref" href="#fn.8" role="doc-backlink">8</a></sup>, and for all further grades I can just do <code>Q</code>. In the end, all I have to do is to do a task once and prepare it for further iterations with a proper starting point. Create a macro, bind it to q, set a mark and record it to a, go to line 7, run the table formula, move down, run the table formula, go back to mark, go back to the correct cell.
</p>



<ol class="org-ol">
<li>I am working through some elixir Koans, and they are formatted as such:</li>
</ol>

<div class="org-src-container">
<pre class="src src-elixir"><code><span style="color: #ea3d54;">defmodule</span> <span style="color: #ee7b29;">Numbers</span> <span style="color: #ea3d54;">do</span>
    <span style="color: #b978ab;">@moduledoc</span> <span style="color: #4fb3d8;">false</span>
    <span style="color: #ea3d54;">require</span> <span style="color: #ee7b29;">Integer</span>
    <span style="color: #ea3d54;">use</span> <span style="color: #ee7b29;">Koans</span>

    koan <span style="color: #4fb3d8;">"Is an integer equal to its float equivalent?"</span> <span style="color: #ea3d54;">do</span>
    assert <span style="color: #cbccd1; background-color: #1c1d20;">1</span> == <span style="color: #cbccd1; background-color: #1c1d20;">1</span>.<span style="color: #cbccd1; background-color: #1c1d20;">0</span> == ___
    <span style="color: #ea3d54;">end</span>

    koan <span style="color: #4fb3d8;">"Is an integer threequal to its float equivalent?"</span> <span style="color: #ea3d54;">do</span>
    assert <span style="color: #cbccd1; background-color: #1c1d20;">1</span> === <span style="color: #cbccd1; background-color: #1c1d20;">1</span>.<span style="color: #cbccd1; background-color: #1c1d20;">0</span> == ___
    <span style="color: #ea3d54;">end</span>

    koan <span style="color: #4fb3d8;">"Revisit division with threequal"</span> <span style="color: #ea3d54;">do</span>
    assert <span style="color: #cbccd1; background-color: #1c1d20;">2</span> / <span style="color: #cbccd1; background-color: #1c1d20;">2</span> === ___
    <span style="color: #ea3d54;">end</span>
<span style="color: #ea3d54;">end</span>
</code></pre>
</div>

<p>
The placeholders are <code>___</code> and I would like to work them one by one: <code>/ ___ RET C $answer ESC n C $answer ESC n C $answer</code> and so on<sup><a id="fnr.9" class="footref" href="#fn.9" role="doc-backlink">9</a></sup>. Search for _, go to first occurence, delete it and put me in insert mode, exit insert mode, search for next occurence and so on.
</p>

<p>
I don&rsquo;t think there are any two Emacs users that work in the same way: I can&rsquo;t believe it. There are for sure as many ways for accomplishing the same task in Emacs as there are ways to enclose a target note in <a href="https://www.fundamental-changes.com/chromatic-approach-note/">chromatic enclosures</a> when you are improvising on bebop. The fact that I get to choose and see which workflow I like best is something that I can&rsquo;t do in any given environment, but in Emacs I feel like every time I create an approach, I learn about another, sometimes cooler way of doing the same thing. And I think that&rsquo;s beautiful.
</p>
</div>
</div>
</div>
<div id="outline-container-org1fa078f" class="outline-3">
<h3 id="org1fa078f">Keybindings that carry over</h3>
<div class="outline-text-3" id="text-org1fa078f">
<p>
Of course, that&rsquo;s a lot of keybindings! But the good news is, no matter what kind of environment I find myself in, whether it&rsquo;s browsing the news, writing emails, taking notes, programming and so on, I can rely on the same set of keybinds to carry me through my day. This in turn improves my connection with my computer and makes it so that my computer truly is perceived as an extension to myself just as my instrument is. I don&rsquo;t need to think about what I am doing or how I want to do it (unless I want to), I just do it<sup><a id="fnr.10" class="footref" href="#fn.10" role="doc-backlink">10</a></sup>. I could (and will) compare this to the placement of notes on any given instrument. No matter what genre you play, or whose music you play, the fingerings/positions/lip tensions for the notes stay the same<sup><a id="fnr.11" class="footref" href="#fn.11" role="doc-backlink">11</a></sup>.
</p>
</div>
</div>
<div id="outline-container-org8175356" class="outline-3">
<h3 id="org8175356">There is a package for that</h3>
<div class="outline-text-3" id="text-org8175356">
<p>
Do you remember Apple&rsquo;s &ldquo;there is an app for that&rdquo;?<sup><a id="fnr.12" class="footref" href="#fn.12" role="doc-backlink">12</a></sup> There are tons of packages that have been created for Emacs in the past 30 years. Because Emacs is technically only an Elisp interpreter, it is a great, self-documenting IDE that interprets programs that it itself runs. It&rsquo;s beautiful! Here are some packages I use daily:
</p>
</div>
<div id="outline-container-orge90dd6f" class="outline-4">
<h4 id="orge90dd6f">magit</h4>
<div class="outline-text-4" id="text-orge90dd6f">
<p>
Perhaps the greatest git porcelain ever developed. I haven&rsquo;t tried many, but I don&rsquo;t think there&rsquo;s a way of beating this. It is very ergonomic and intuitive to work with. No qualms whatsoever. I use git daily for private repos. It&rsquo;s mostly my dotfiles, and backups of some important text files, and sometimes I develop projects that are of course version controlled. <code>Magit</code> makes it so easy to see and work with your diffs, stages, commits, stashes, pops, squashes, tennis, ping-pong, whatever. The keybinds are single letters (for instance, <code>p</code> brings you to push menu, and pressing <code>p</code> again pushes to your preferred remote). You can view your logs effortlessly, see merge trees, have it wash the dishes<sup><a id="fnr.13" class="footref" href="#fn.13" role="doc-backlink">13</a></sup>. I probably use about ~10% of the functionality that <code>magit</code> offers, and I can still wholly recommend it.
</p>
</div>
</div>
<div id="outline-container-org36bb5ff" class="outline-4">
<h4 id="org36bb5ff">mu4e</h4>
<div class="outline-text-4" id="text-org36bb5ff">
<p>
By <b>far</b> my most preferred mail client. I tried <code>notmuch</code> and did not really like it much. <code>mu4e</code> needs a bit more setup on my side, but in the end it works better than any mail client I have used. Here&rsquo;s my <code>mu4e</code> config<sup><a id="fnr.14" class="footref" href="#fn.14" role="doc-backlink">14</a></sup>:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp"><code><span style="color: #ea3d54;">(</span><span style="color: #ee7b29;">add-to-list</span> <span style="color: #78bd65;">'</span><span style="color: #cbccd1;">load-path</span> <span style="color: #4fb3d8;">"/usr/share/emacs/site-lisp/mu4e"</span><span style="color: #ea3d54;">)</span>
<span style="color: #ea3d54;">(</span><span style="color: #ee7b29;">require</span> <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">mu4e</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">org-msg-mode</span> nil<span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> 
     <span style="color: #cbccd1;">mu4e-get-mail-command</span> <span style="color: #4fb3d8;">"mbsync -a"</span>
     <span style="color: #cbccd1;">mu4e-update-interval</span> 300
     <span style="color: #cbccd1;">mu4e-index-update-in-background</span> t<span style="color: #ea3d54;">)</span>


<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">mu4e-context-policy</span> <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">pick-first</span>
     <span style="color: #cbccd1;">mu4e-compose-context-policy</span> <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">ask</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> 
     <span style="color: #cbccd1;">sendmail-program</span> <span style="color: #4fb3d8;">"/usr/bin/msmtp"</span>
     <span style="color: #cbccd1;">mail-specify-envelope-from</span> t
     <span style="color: #cbccd1;">message-sendmail-envelope-from</span> <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">header</span>
     <span style="color: #cbccd1;">mail-envelope-from</span> <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">header</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">message-send-mail-function</span> <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">message-send-mail-with-sendmail</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">mu4e-sent-messages-behavior</span> <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">sent</span><span style="color: #ea3d54;">)</span>
<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">message-kill-buffer-on-exit</span> t<span style="color: #ea3d54;">)</span>
<span style="color: #ea3d54;">(</span><span style="color: #ee7b29;">add-hook</span> <span style="color: #78bd65;">'</span><span style="color: #cbccd1;">mu4e-compose-mode-hook</span> <span style="color: #78bd65;">#'</span><span style="color: #ee7b29;">(</span><span style="color: #ea3d54;">lambda</span> <span style="color: #78bd65;">()</span> <span style="color: #78bd65;">(</span><span style="color: #ee7b29;">auto-save-mode</span> -1<span style="color: #78bd65;">)</span><span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> mu4e-attachments-dir <span style="color: #4fb3d8;">"~/Downloads"</span><span style="color: #ea3d54;">)</span>

<span style="color: #5B6268;">;; </span><span style="color: #5B6268;">color scheme
</span><span style="color: #ea3d54;">(</span><span style="color: #ee7b29;">require</span> <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">mu4e-contrib</span><span style="color: #ea3d54;">)</span>
<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> mu4e-html2text-command <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">mu4e-shr2text</span><span style="color: #ea3d54;">)</span>
<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> shr-color-visible-luminance-min 60<span style="color: #ea3d54;">)</span>
<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> shr-color-visible-distance-min 5<span style="color: #ea3d54;">)</span>
<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">shr-use-colors</span> nil<span style="color: #ea3d54;">)</span>
<span style="color: #ea3d54;">(</span><span style="color: #ee7b29;">advice-add</span> <span style="color: #78bd65;">#'</span><span style="color: #ee7b29;">shr-colorize-region</span> <span style="color: #fedd38;">:around</span> <span style="color: #ee7b29;">(</span><span style="color: #ea3d54;">defun</span> <span style="color: #fedd38;">shr-no-colourise-region</span> <span style="color: #78bd65;">(</span><span style="color: #ee7b29;">&amp;rest</span> ignore<span style="color: #78bd65;">)</span><span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">mu4e-contexts</span>
     <span style="color: #78bd65;">`</span><span style="color: #ee7b29;">(</span>,<span style="color: #78bd65;">(</span><span style="color: #ee7b29;">make-mu4e-context</span>
         <span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"Fastmail"</span>
         <span style="color: #fedd38;">:match-func</span> <span style="color: #4fb3d8;">(</span><span style="color: #ea3d54;">lambda</span> <span style="color: #4fb3d8;">(</span>msg<span style="color: #4fb3d8;">)</span>
                       <span style="color: #4fb3d8;">(</span><span style="color: #ea3d54;">when</span> msg
                         <span style="color: #fedd38;">(</span><span style="color: #ee7b29;">string-prefix-p</span> <span style="color: #4fb3d8;">"/Fastmail"</span> <span style="color: #78bd65;">(</span><span style="color: #ee7b29;">mu4e-message-field</span> msg <span style="color: #fedd38;">:maildir</span><span style="color: #78bd65;">)</span><span style="color: #fedd38;">)</span><span style="color: #4fb3d8;">)</span><span style="color: #4fb3d8;">)</span>
         <span style="color: #fedd38;">:vars</span> <span style="color: #78bd65;">'</span><span style="color: #4fb3d8;">(</span><span style="color: #4fb3d8;">(</span><span style="color: #cbccd1;">user-mail-address</span> . <span style="color: #4fb3d8;">"personal@email.tld"</span><span style="color: #4fb3d8;">)</span>
                 <span style="color: #4fb3d8;">(</span><span style="color: #cbccd1;">user-full-name</span> . <span style="color: #4fb3d8;">"Omid Mashregh-Zamini"</span><span style="color: #4fb3d8;">)</span>
                 <span style="color: #4fb3d8;">(</span><span style="color: #cbccd1;">mu4e-drafts-folder</span> . <span style="color: #4fb3d8;">"/Fastmail/Drafts"</span><span style="color: #4fb3d8;">)</span>
                 <span style="color: #4fb3d8;">(</span><span style="color: #cbccd1;">mu4e-sent-folder</span> . <span style="color: #4fb3d8;">"/Fastmail/Sent"</span><span style="color: #4fb3d8;">)</span>
                 <span style="color: #4fb3d8;">(</span><span style="color: #cbccd1;">mu4e-trash-folder</span> . <span style="color: #4fb3d8;">"/Fastmail/Trash"</span><span style="color: #4fb3d8;">)</span>
                 <span style="color: #4fb3d8;">(</span><span style="color: #cbccd1;">mu4e-refile-folder</span> . <span style="color: #4fb3d8;">"/Fastmail/Archive"</span><span style="color: #4fb3d8;">)</span><span style="color: #4fb3d8;">)</span><span style="color: #78bd65;">)</span>
       ,<span style="color: #78bd65;">(</span><span style="color: #ee7b29;">make-mu4e-context</span>
         <span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"IServ"</span>
         <span style="color: #fedd38;">:match-func</span> <span style="color: #4fb3d8;">(</span><span style="color: #ea3d54;">lambda</span> <span style="color: #4fb3d8;">(</span>msg<span style="color: #4fb3d8;">)</span>
                       <span style="color: #4fb3d8;">(</span><span style="color: #ea3d54;">when</span> msg
                         <span style="color: #fedd38;">(</span><span style="color: #ee7b29;">string-prefix-p</span> <span style="color: #4fb3d8;">"/IServ"</span> <span style="color: #78bd65;">(</span><span style="color: #ee7b29;">mu4e-message-field</span> msg <span style="color: #fedd38;">:maildir</span><span style="color: #78bd65;">)</span><span style="color: #fedd38;">)</span><span style="color: #4fb3d8;">)</span><span style="color: #4fb3d8;">)</span>
         <span style="color: #fedd38;">:vars</span> <span style="color: #78bd65;">'</span><span style="color: #4fb3d8;">(</span><span style="color: #4fb3d8;">(</span><span style="color: #cbccd1;">user-mail-address</span> . <span style="color: #4fb3d8;">"work@email.tld"</span><span style="color: #4fb3d8;">)</span>
                 <span style="color: #4fb3d8;">(</span><span style="color: #cbccd1;">user-full-name</span> . <span style="color: #4fb3d8;">"Omid Mashregh-Zamini"</span><span style="color: #4fb3d8;">)</span>
                 <span style="color: #4fb3d8;">(</span><span style="color: #cbccd1;">mu4e-drafts-folder</span> . <span style="color: #4fb3d8;">"/IServ/Drafts"</span><span style="color: #4fb3d8;">)</span>
                 <span style="color: #4fb3d8;">(</span><span style="color: #cbccd1;">mu4e-sent-folder</span> . <span style="color: #4fb3d8;">"/IServ/Sent"</span><span style="color: #4fb3d8;">)</span>
                 <span style="color: #4fb3d8;">(</span><span style="color: #cbccd1;">mu4e-trash-folder</span> . <span style="color: #4fb3d8;">"/IServ/Trash"</span><span style="color: #4fb3d8;">)</span>
                 <span style="color: #4fb3d8;">(</span><span style="color: #cbccd1;">mu4e-refile-folder</span> . <span style="color: #4fb3d8;">"/IServ/Archive"</span><span style="color: #4fb3d8;">)</span><span style="color: #4fb3d8;">)</span><span style="color: #78bd65;">)</span><span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">mu4e-bookmarks</span>
      <span style="color: #5B6268;">;; </span><span style="color: #5B6268;">This should be improved. I hacked it till it worked, without reading the docs.
</span>     <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"All"</span> <span style="color: #fedd38;">:query</span> <span style="color: #4fb3d8;">"(maildir:/Fastmail/Inbox OR maildir:/IServ/Inbox OR maildir:/Fastmail/Gmail) AND NOT (maildir:/Fastmail/Junk OR maildir:/IServ/Junk OR maildir:/Fastmail/Trash OR maildir:/IServ/Trash) AND NOT flag:trashed"</span> <span style="color: #fedd38;">:key</span> ?a<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"Flagged"</span> <span style="color: #fedd38;">:query</span> <span style="color: #4fb3d8;">"flag:flagged"</span> <span style="color: #fedd38;">:key</span> ?!<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"Gmail"</span> <span style="color: #fedd38;">:query</span> <span style="color: #4fb3d8;">"maildir:/Fastmail/Gmail"</span> <span style="color: #fedd38;">:key</span> ?g<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"Fastmail"</span> <span style="color: #fedd38;">:query</span> <span style="color: #4fb3d8;">"maildir:/Fastmail/Inbox"</span> <span style="color: #fedd38;">:key</span> ?f<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"IServ"</span> <span style="color: #fedd38;">:query</span> <span style="color: #4fb3d8;">"maildir:/IServ/Inbox"</span> <span style="color: #fedd38;">:key</span> ?i<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"Paypal"</span> <span style="color: #fedd38;">:query</span> <span style="color: #4fb3d8;">"maildir:/Fastmail/Paypal"</span> <span style="color: #fedd38;">:key</span> ?p<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"Drafts"</span> <span style="color: #fedd38;">:query</span> <span style="color: #4fb3d8;">"maildir:/Fastmail/Drafts OR maildir:/IServ/Drafts"</span> <span style="color: #fedd38;">:key</span> ?d<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"Unread"</span> <span style="color: #fedd38;">:query</span> <span style="color: #4fb3d8;">"flag:unread AND NOT flag:trashed AND NOT maildir:/Fastmail/Junk AND NOT maildir:/IServ/Junk"</span> <span style="color: #fedd38;">:key</span> ?u<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"Today"</span> <span style="color: #fedd38;">:query</span> <span style="color: #4fb3d8;">"date:today..now"</span> <span style="color: #fedd38;">:key</span> ?t<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"Week"</span> <span style="color: #fedd38;">:query</span> <span style="color: #4fb3d8;">"date:7d..now"</span> <span style="color: #fedd38;">:key</span> ?w<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"Sent"</span> <span style="color: #fedd38;">:query</span> <span style="color: #4fb3d8;">"(maildir:/Fastmail/Sent OR maildir:/IServ/Sent)"</span> <span style="color: #fedd38;">:key</span> ?s<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:name</span> <span style="color: #4fb3d8;">"Month"</span> <span style="color: #fedd38;">:query</span> <span style="color: #4fb3d8;">"(maildir:/IServ/Inbox AND date:31d..now)"</span> <span style="color: #fedd38;">:key</span> ?m<span style="color: #78bd65;">)</span><span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">mu4e-headers-fields</span>
     <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span><span style="color: #fedd38;">:human-date</span> . 10<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:flags</span> . 6<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:from-or-to</span> . 22<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:maildir</span> . 18<span style="color: #78bd65;">)</span>
       <span style="color: #78bd65;">(</span><span style="color: #fedd38;">:thread-subject</span><span style="color: #78bd65;">)</span><span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">org-msg-default-alternatives</span> <span style="color: #5B6268;">; </span><span style="color: #5B6268;">yes, I like HTML formatting in emails.
</span>      <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span>new           . <span style="color: #4fb3d8;">(</span>utf-8 html<span style="color: #4fb3d8;">)</span><span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>reply-to-text . <span style="color: #4fb3d8;">(</span>utf-8 html<span style="color: #4fb3d8;">)</span><span style="color: #78bd65;">)</span> 
        <span style="color: #78bd65;">(</span>reply-to-html . <span style="color: #4fb3d8;">(</span>utf-8 html<span style="color: #4fb3d8;">)</span><span style="color: #78bd65;">)</span><span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span>
</code></pre>
</div>

<p>
This config enables me to open my mailbox (and then it refreshes every 5 minutes), and go into any of my bookmarks with two keystrokes (<code>b a</code> for all mail except spam for instance). I can view my mail, and I can reply and compose in org-mode using org-mode syntax which converts automatically into a nicely formatted HTML-email<sup><a id="fnr.15" class="footref" href="#fn.15" role="doc-backlink">15</a></sup> which is then sent using <code>msmtp</code>, or I can add Emails to my TODO list which synchronizes with all my devices. It was a bit of a pain to setup and took me the longest of all these packages, but once it&rsquo;s set up, it is unbreakable, reproducible and great across 3 PCs.
</p>
</div>
</div>
<div id="outline-container-org3a74eb6" class="outline-4">
<h4 id="org3a74eb6">yas-snippets</h4>
<div class="outline-text-4" id="text-org3a74eb6">
<p>
As the Doom config file says: little elves that do the mundane tasks for you. I love these snippets and use them daily. They are reachable via <code>SPC i s</code> for me, and are based on the mode and type of file I am in. So I have my <code>#+BEGIN_SRC</code>, <code>current time</code> and what not in org mode, and I have my functions, flow operators and what not when I am programming. Due to the nature of my job as a teacher<sup><a id="fnr.16" class="footref" href="#fn.16" role="doc-backlink">16</a></sup>, I experiment with a lot of new languages, and it&rsquo;s great to have the snippets premade for me in Doom Emacs so I can focus on the logic and the language&rsquo;s features, and less on the syntax.
</p>
</div>
</div>
<div id="outline-container-orge3e8d51" class="outline-4">
<h4 id="orge3e8d51">elfeed</h4>
<div class="outline-text-4" id="text-orge3e8d51">
<p>
An RSS reader with a literate, <code>org-mode</code> source for all my feeds. I have a keybind set up to open a new workspace with <code>elfeed</code> in it (<code>SPC o e</code>), which I can close with <code>q</code>. I update my feed with <code>SPC e u</code>, and open the posts in my default browser<sup><a id="fnr.17" class="footref" href="#fn.17" role="doc-backlink">17</a></sup> with <code>g o</code>. Simple and elegant.
</p>
</div>
</div>
<div id="outline-container-orgc46e8ab" class="outline-4">
<h4 id="orgc46e8ab">doom&rsquo;s evil-mode</h4>
<div class="outline-text-4" id="text-orgc46e8ab">
<p>
I can&rsquo;t get used to default Emacs keybinds. It&rsquo;s a project that I will tackle at some point, but I also didn&rsquo;t know much Vim before I started using doom Emacs. In short, I find evil&rsquo;s keybinds and motions to be very efficient, and it extends on the functionality of Emacs with intuitive keybindings. One of my favorites is <code>S</code> for surround. Running <code>S &lt;bracket&gt;</code> surrounds the region in whatever type of bracket you want. 
</p>
</div>
</div>
<div id="outline-container-org4464e3b" class="outline-4">
<h4 id="org4464e3b">doom&rsquo;s workspaces</h4>
<div class="outline-text-4" id="text-org4464e3b">
<p>
Basically like tabs in other editors, but more powerful. I like having different workspaces for different things. Calendar is in one tab, news in another, E-mail in another, my project in one, and whatever else I am doing in another. I use <code>s-TAB</code> akin to Alt-Tab to switch between workspaces. By default, <code>mu4e</code> opens in a new workspace in Doom. I have written a function for <code>elfeed</code> to work in the same way.
</p>
</div>
</div>
<div id="outline-container-orgcdc7678" class="outline-4">
<h4 id="orgcdc7678">doom&rsquo;s implementation of corfu</h4>
<div class="outline-text-4" id="text-orgcdc7678">
<p>
My coding autocomplete background using various <code>LSPs</code>. I don&rsquo;t know much about how it works. It just works out of the box in Doom and I am happy to be able to code just like any other commercial IDE in Emacs.
</p>
</div>
</div>
</div>
<div id="outline-container-org31aaae8" class="outline-3">
<h3 id="org31aaae8">org-mode</h3>
<div class="outline-text-3" id="text-org31aaae8">
<p>
This is the big one. Those who know org-mode, know it and probably don&rsquo;t use anything else for note taking, but for the uninitiated, let me please explain.
</p>

<p>
Org-mode is a major mode in Emacs<sup><a id="fnr.18" class="footref" href="#fn.18" role="doc-backlink">18</a></sup> originally written by Carsten Dominik, a professor of Astronomy at the Anton Pannekoek Institute for Astronomy which is part of the Faculty for Natural Sciences of the University of Amsterdam<sup><a id="fnr.19" class="footref" href="#fn.19" role="doc-backlink">19</a></sup>, to organize his own life and work. Org-mode enables working with plain text in a brilliant way, where you can <b>format</b> <span class="underline">your</span> <i>text</i> (and using doom&rsquo;s <code>+org-pretty-mode</code>, see those changes in your buffer) in the wildest ways, make TODOs, organize your calendar, have a hierarchy of outlines, expand and hide elements, work with tables, and much, MUCH more. You can even insert and execute code. 
</p>
</div>
<div id="outline-container-org307f0d8" class="outline-4">
<h4 id="org307f0d8">Literate coding wih Org Babel</h4>
<div class="outline-text-4" id="text-org307f0d8">
<p>
That&rsquo;s the part it get&rsquo;s interesting. Imagine Jupyter Notebooks, but you can take ANY language and evaluate it, and pipe it&rsquo;s output to the input of ANY language that you want, as many times as you want. All whilst having syntax highlighting and what not.
</p>

<p>
Some examples, starting with Python to Bash:
</p>

<div class="org-src-container">
<pre class="src src-python" id="org14251f2"><code><span style="color: #ea3d54;">def</span> <span style="color: #fedd38;">add2</span><span style="color: #ea3d54;">(</span>n<span style="color: #ea3d54;">)</span>:
    <span style="color: #ea3d54;">return</span> n <span style="color: #78bd65;">+</span> 2
<span style="color: #ea3d54;">return</span> add2<span style="color: #ea3d54;">(</span>n<span style="color: #ea3d54;">)</span>
</code></pre>
</div>

<pre class="example">
7
</pre>

<div class="org-src-container">
<pre class="src src-sh"><code><span style="color: #ee7b29;">echo</span> <span style="color: #4fb3d8;">"This should be seven: </span><span style="color: #ee7b29;">$</span><span style="color: #cbccd1;">input</span><span style="color: #4fb3d8;">"</span>
</code></pre>
</div>

<pre class="example">
This should be seven: 7
</pre>


<p>
Another example, tangling Haskell into C:
</p>
<div class="org-src-container">
<pre class="src src-haskell" id="org7fc3902"><code><span style="color: #fedd38;">l</span> <span style="color: #cbccd1;">=</span> <span style="color: #ea3d54;">[</span>1, 3<span style="color: #cbccd1;">..</span>84<span style="color: #ea3d54;">]</span>
<span style="color: #fedd38;">answer</span> <span style="color: #cbccd1;">=</span> length l
answer
</code></pre>
</div>


<pre class="example">
42
</pre>

<div class="org-src-container">
<pre class="src src-C"><code><span style="color: #78bd65; font-weight: bold;">#include</span> <span style="color: #ea3d54;">&lt;</span><span style="color: #4fb3d8;">stdio.h</span><span style="color: #ea3d54;">&gt;</span>
printf<span style="color: #ea3d54;">(</span><span style="color: #4fb3d8;">"%d is the asterisk's ASCII code."</span>, answer<span style="color: #ea3d54;">)</span>;
</code></pre>
</div>

<pre class="example">
42 is the asterisk's ASCII code.
</pre>

<p>
Yes, that was C compiled and ran in <code>org-mode</code> using <code>org-babel</code>.
</p>

<p>
As an educator, this is priceless. Writing literate programs, using multiple languages, running them in place (even if they&rsquo;re compiled!) and tangling them? &hellip;and I can make a website out of it?! or a presentation?? With two commands??
</p>

<p>
Before we move on, let&rsquo;s try a wild thing:
</p>

<div class="org-src-container">
<pre class="src src-lilypond"><code>\version "2.19.21"
#(ly:set-option 'backend 'cairo)
#(ly:set-option 'crop #t)
#(ly:set-option 'midi-extension "mid")
\include "predefined-guitar-fretboards.ly"

#(set-global-staff-size 24)

global = {
  \time 4/4
  \tempo 4=120
  \key c \major
  \partial 4
  \numericTimeSignature
}

melody = \relative {
  \global
  g'16 a c a
  e'8. e16~  e8 d
  r4 g,16 a c a
  d8. d16~ d8 c
  r4
  g16 a c a
  c4 d8 b~
  b16 a g8~
  g g
  d'4 c2 r4
  
}

bass= \relative {
  \global
  \clef bass
  r4 f,8. f16~ f8 g8 r2
  e8. e16~ e8 a8 r2
  f4. g8~ g4 r4
  e4  a2 r4
  
}

text = \lyricmode {
  Ne ver gon na give you up
  ne ver gon na let you down 
  ne ver go na run a round - and de sert you
}

\score {
  &lt;&lt;
    \new Staff  {
      \context Voice = "vocal" { \melody }
    }
    \new Lyrics \lyricsto "vocal" \text
    \new Staff  {
      \bass
    }
  &gt;&gt;
  \midi{}
}
</code></pre>
</div>

<p>
<div class="music">
<midi-player
  src="https://omidmash.de/lp/nggyu.cropped.mid"
  sound-font visualizer="#myVisualizer">
</midi-player>
</div>
<br>
<midi-visualizer type="piano-roll" id="myVisualizer"></midi-visualizer>
</p>


<p>
Sorry, but you really didn&rsquo;t expect that, did you? 😎 
</p>
</div>
</div>
<div id="outline-container-orgfb54bdf" class="outline-4">
<h4 id="orgfb54bdf">org-dispatch</h4>
<div class="outline-text-4" id="text-orgfb54bdf">
<p>
This is where a lot of the export magic happens. Pressing <code>SPC m e</code> opens the org-dispatch minibuffer from which I can press <code>h o</code> to create an HTML file, or <code>h h</code> to create and open the HTML file. I also use <a href="https://github.com/emacsmirror/org-re-reveal">org-re-reveal</a>. That means I can press <code>v v</code> and turn it into a <a href="https://revealjs.com/">RevealJS</a> presentation. <code>org-dispatch</code> is also how I write this blog. You can also inject your own HTML at top or bottom (just like I&rsquo;ve done here) or include CSS (as you can see). There are also some <code>setupfiles</code> with which you can do other crazy things, like have a documentation page. I use one of these <a href="https://github.com/mrlee23/readtheorg">setupfiles</a> for the <a href="https://omidmash.de/unterricht">Wiki which I use for teaching</a><sup><a id="fnr.20" class="footref" href="#fn.20" role="doc-backlink">20</a></sup>. This includes some fancy JS so the students can click through. I type in most of the stuff live the first time I am going over a subject, and will push instantly using the following code snippet:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp"><code><span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">defun</span> <span style="color: #fedd38;">my/publish-unterrichtsmaterial</span> <span style="color: #ee7b29;">()</span>
  <span style="color: #ee7b29;">(</span><span style="color: #ea3d54;">interactive</span><span style="color: #ee7b29;">)</span>
  <span style="color: #ee7b29;">(</span><span style="color: #ea3d54;">when</span> <span style="color: #cbccd1;">my/is-desktop</span>
    <span style="color: #78bd65;">(</span><span style="color: #ea3d54;">let</span> <span style="color: #4fb3d8;">(</span><span style="color: #4fb3d8;">(</span>org-file <span style="color: #4fb3d8;">"/mnt/NVME/NextCloud/Emacs/roam/20260105114329-unterrichtsmaterial.org"</span><span style="color: #4fb3d8;">)</span>
          <span style="color: #4fb3d8;">(</span>html-file <span style="color: #4fb3d8;">"/mnt/NVME/NextCloud/Emacs/roam/20260105114329-unterrichtsmaterial.html"</span><span style="color: #4fb3d8;">)</span><span style="color: #4fb3d8;">)</span>
      <span style="color: #4fb3d8;">(</span><span style="color: #ea3d54;">with-current-buffer</span> <span style="color: #4fb3d8;">(</span><span style="color: #ee7b29;">find-file-noselect</span> org-file<span style="color: #4fb3d8;">)</span>
        <span style="color: #4fb3d8;">(</span><span style="color: #ee7b29;">org-html-export-to-html</span><span style="color: #4fb3d8;">)</span><span style="color: #4fb3d8;">)</span>
      <span style="color: #4fb3d8;">(</span><span style="color: #ee7b29;">shell-command</span>
       <span style="color: #5B6268;">;; </span><span style="color: #5B6268;">I mount my webserver using sshfs.
</span>       <span style="color: #4fb3d8;">(</span><span style="color: #ee7b29;">format</span> <span style="color: #4fb3d8;">"scp %s matrix:/var/www/html/portfolio/unterricht.html"</span> html-file<span style="color: #4fb3d8;">)</span><span style="color: #4fb3d8;">)</span>
      <span style="color: #4fb3d8;">(</span><span style="color: #ee7b29;">message</span> <span style="color: #4fb3d8;">"Unterrichtsmaterial aktualisiert."</span><span style="color: #4fb3d8;">)</span><span style="color: #78bd65;">)</span><span style="color: #ee7b29;">)</span>
  
  <span style="color: #ee7b29;">(</span><span style="color: #ea3d54;">when</span> <span style="color: #78bd65;">(</span><span style="color: #ea3d54;">or</span> <span style="color: #cbccd1;">my/is-laptop</span> <span style="color: #cbccd1;">my/is-work</span><span style="color: #78bd65;">)</span>
    <span style="color: #78bd65;">(</span><span style="color: #ea3d54;">let</span> <span style="color: #4fb3d8;">(</span><span style="color: #4fb3d8;">(</span>org-file <span style="color: #4fb3d8;">"/home/omidmash/Nextcloud/Emacs/roam/20260105114329-unterrichtsmaterial.org"</span><span style="color: #4fb3d8;">)</span>
          <span style="color: #4fb3d8;">(</span>html-file <span style="color: #4fb3d8;">"/home/omidmash/Nextcloud/Emacs/roam/20260105114329-unterrichtsmaterial.html"</span><span style="color: #4fb3d8;">)</span><span style="color: #4fb3d8;">)</span>
      <span style="color: #4fb3d8;">(</span><span style="color: #ea3d54;">with-current-buffer</span> <span style="color: #4fb3d8;">(</span><span style="color: #ee7b29;">find-file-noselect</span> org-file<span style="color: #4fb3d8;">)</span>
        <span style="color: #4fb3d8;">(</span><span style="color: #ee7b29;">org-html-export-to-html</span><span style="color: #4fb3d8;">)</span><span style="color: #4fb3d8;">)</span>
      <span style="color: #4fb3d8;">(</span><span style="color: #ee7b29;">shell-command</span>
       <span style="color: #4fb3d8;">(</span><span style="color: #ee7b29;">format</span> <span style="color: #4fb3d8;">"scp %s matrix:/var/www/html/portfolio/unterricht.html"</span> html-file<span style="color: #4fb3d8;">)</span><span style="color: #4fb3d8;">)</span>
      <span style="color: #4fb3d8;">(</span><span style="color: #ee7b29;">message</span> <span style="color: #4fb3d8;">"Unterrichtsmaterial aktualisiert."</span><span style="color: #4fb3d8;">)</span><span style="color: #78bd65;">)</span><span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">map!</span> <span style="color: #fedd38;">:leader</span>
      <span style="color: #fedd38;">:desc</span> <span style="color: #4fb3d8;">"Update Unterrichtsmaterial"</span> <span style="color: #4fb3d8;">"p u"</span> <span style="color: #78bd65;">#'</span><span style="color: #ee7b29;">my/publish-unterrichtsmaterial</span><span style="color: #ea3d54;">)</span>

</code></pre>
</div>

<p>
There is even <code>org-publish</code> which should do just that (and more) but I haven&rsquo;t gotten around setting it up yet. It&rsquo;s high on my todo list. This blog is also (obviously) written and htmlized in Emacs.
</p>

<p>
I also use <code>org-mode</code> to write tests/quizzes for my classes. I then export everything using org-dispatch to <code>LaTeX</code> using a little bit of custom stuff such as places to write down the answers:
</p>

<div class="org-src-container">
<pre class="src src-nil"><code>#+LATEX_HEADER: \newcommand{\ans}{\vspace{3.5cm}}
#+LATEX_HEADER: \newcommand{\shortans}{\vspace{2.7cm}}
</code></pre>
</div>

<div class="org-src-container">
<pre class="src src-latex"><code>1. Wof&#252;r steht die Abk&#252;rzung REPL?
   @@latex:<span style="color: #ea3d54;">\shortans@@</span>
2. Nenne die vier elementaren Datentypen aus dem Unterricht und je ein Beispiel. @@latex:<span style="color: #ea3d54;">\pts</span>{4}@@
   @@latex:<span style="color: #ea3d54;">\ans@@</span>
</code></pre>
</div>

<p>
org-dispatch also supports <code>markdown</code> and <code>odt</code> and I am sure there are lots of packages making it do all sorts of crazy things.
</p>
</div>
</div>
<div id="outline-container-org5c84a36" class="outline-4">
<h4 id="org5c84a36">org-agenda and calfw</h4>
<div class="outline-text-4" id="text-org5c84a36">
<p>
<code>Org-mode</code> can also do excellent TODOs. <a href="https://www.youtube.com/watch?v=Ea_-TaEGa7Y">There is a video with Distrotube who does a better job than me at explaining this.</a> I use this extensively to manage my day-to-day activities, and to set deadlines and schedules. I use the <code>beorg</code> app on my iPhone to sync all of this with my phone&rsquo;s calendar using <code>NextCloud</code>. It works flawlessly. I can see all my calendar entries (synced both ways) using <code>calfw</code> which is a nice user interface for the agenda view. Here is my config for <code>calfw</code>:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp"><code><span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">defun</span> <span style="color: #fedd38;">my/calendar</span> <span style="color: #ee7b29;">()</span>
  <span style="color: #ee7b29;">(</span><span style="color: #ea3d54;">interactive</span><span style="color: #ee7b29;">)</span>
  <span style="color: #ee7b29;">(</span><span style="color: #fedd38;">=calendar</span><span style="color: #ee7b29;">)</span>
  <span style="color: #ee7b29;">(</span>calfw-navi-goto-today-command<span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">calendar-week-start-day</span> 1
      <span style="color: #cbccd1;">calendar-day-name-array</span> <span style="color: #ee7b29;">[</span><span style="color: #4fb3d8;">"Sonntag"</span> <span style="color: #4fb3d8;">"Montag"</span> <span style="color: #4fb3d8;">"Dienstag"</span> <span style="color: #4fb3d8;">"Mittwoch"</span>
                               <span style="color: #4fb3d8;">"Donnerstag"</span> <span style="color: #4fb3d8;">"Freitag"</span> <span style="color: #4fb3d8;">"Samstag"</span><span style="color: #ee7b29;">]</span>
      <span style="color: #cbccd1;">calendar-month-name-array</span> <span style="color: #ee7b29;">[</span><span style="color: #4fb3d8;">"Januar"</span> <span style="color: #4fb3d8;">"Februar"</span> <span style="color: #4fb3d8;">"M&#228;rz"</span> <span style="color: #4fb3d8;">"April"</span> <span style="color: #4fb3d8;">"Mai"</span>
                                 <span style="color: #4fb3d8;">"Juni"</span> <span style="color: #4fb3d8;">"Juli"</span> <span style="color: #4fb3d8;">"August"</span> <span style="color: #4fb3d8;">"September"</span>
                                 <span style="color: #4fb3d8;">"Oktober"</span> <span style="color: #4fb3d8;">"November"</span> <span style="color: #4fb3d8;">"Dezember"</span><span style="color: #ee7b29;">]</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> solar-n-hemi-seasons
      <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">(</span><span style="color: #4fb3d8;">"Fr&#252;hlingsanfang"</span> <span style="color: #4fb3d8;">"Sommeranfang"</span> <span style="color: #4fb3d8;">"Herbstanfang"</span> <span style="color: #4fb3d8;">"Winteranfang"</span><span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">holiday-general-holidays</span>
      <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span>holiday-fixed 1 1 <span style="color: #4fb3d8;">"Neujahr"</span><span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-fixed 5 1 <span style="color: #4fb3d8;">"1. Mai"</span><span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-fixed 10 3 <span style="color: #4fb3d8;">"Tag der Deutschen Einheit"</span><span style="color: #78bd65;">)</span><span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span>

<span style="color: #ea3d54;">(</span><span style="color: #ea3d54;">setq</span> <span style="color: #cbccd1;">holiday-christian-holidays</span>
      <span style="color: #78bd65;">'</span><span style="color: #ee7b29;">(</span><span style="color: #78bd65;">(</span>holiday-float 12 0 -4 <span style="color: #4fb3d8;">"1. Advent"</span> 24<span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-float 12 0 -3 <span style="color: #4fb3d8;">"2. Advent"</span> 24<span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-float 12 0 -2 <span style="color: #4fb3d8;">"3. Advent"</span> 24<span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-float 12 0 -1 <span style="color: #4fb3d8;">"4. Advent"</span> 24<span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-fixed 12 25 <span style="color: #4fb3d8;">"1. Weihnachtstag"</span><span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-fixed 12 26 <span style="color: #4fb3d8;">"2. Weihnachtstag"</span><span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-fixed 1 6 <span style="color: #4fb3d8;">"Heilige Drei K&#246;nige"</span><span style="color: #78bd65;">)</span>
        <span style="color: #5B6268;">;; </span><span style="color: #5B6268;">some regional holidays, commented out but feel free to use them.
</span>        <span style="color: #5B6268;">;; </span><span style="color: #5B6268;">(holiday-easter-etc -48 "Rosenmontag")
</span>        <span style="color: #5B6268;">;; </span><span style="color: #5B6268;">(holiday-easter-etc -3 "Gr&#252;ndonnerstag")
</span>        <span style="color: #78bd65;">(</span>holiday-easter-etc  -2 <span style="color: #4fb3d8;">"Karfreitag"</span><span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-easter-etc   0 <span style="color: #4fb3d8;">"Ostersonntag"</span><span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-easter-etc  +1 <span style="color: #4fb3d8;">"Ostermontag"</span><span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-easter-etc +39 <span style="color: #4fb3d8;">"Christi Himmelfahrt"</span><span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-easter-etc +49 <span style="color: #4fb3d8;">"Pfingstsonntag"</span><span style="color: #78bd65;">)</span>
        <span style="color: #78bd65;">(</span>holiday-easter-etc +50 <span style="color: #4fb3d8;">"Pfingstmontag"</span><span style="color: #78bd65;">)</span>
        <span style="color: #5B6268;">;; </span><span style="color: #5B6268;">(holiday-easter-etc +60 "Fronleichnam")
</span>        <span style="color: #5B6268;">;; </span><span style="color: #5B6268;">(holiday-fixed 8 15 "Mariae Himmelfahrt")
</span>        <span style="color: #5B6268;">;; </span><span style="color: #5B6268;">(holiday-fixed 11 1 "Allerheiligen")
</span>        <span style="color: #5B6268;">;; </span><span style="color: #5B6268;">(holiday-float 11 3 1 "Buss- und Bettag" 16)
</span>        <span style="color: #78bd65;">(</span>holiday-float 11 0 1 <span style="color: #4fb3d8;">"Totensonntag"</span> 20<span style="color: #78bd65;">)</span><span style="color: #ee7b29;">)</span><span style="color: #ea3d54;">)</span>
</code></pre>
</div>
</div>
</div>
<div id="outline-container-orgd222fb9" class="outline-4">
<h4 id="orgd222fb9">org-roam</h4>
<div class="outline-text-4" id="text-orgd222fb9">
<p>
I used to have practically all of my life sorted using one singular .org file. To my amusement, this terrified some of the nice people I met on the Emacs Talk at 39c3<sup><a id="fnr.21" class="footref" href="#fn.21" role="doc-backlink">21</a></sup>. Some of the people there used <code>org-roam</code> to organize their files, and this intrigued me. I am nowhere near using even 5% of <code>org-roam</code>&rsquo;s capabilities, but I enjoy having a couple separate notebooks that are linked with each other and the fact that I can search for and in them easily.
</p>

<p>
The only issue I had with this approach was the fact that the TODOs in these roam files have funky names based on the node ID which doesn&rsquo;t work well with my beorg synchronization setup. This is something that I will eventually look further into. My goal would be to have each of my classes in a separate org-mode file.
</p>
</div>
</div>
<div id="outline-container-orgbc54e4e" class="outline-4">
<h4 id="orgbc54e4e">hunspell/ispell</h4>
<div class="outline-text-4" id="text-orgbc54e4e">
<p>
Spelling is important, and nobody will take you seriously if you make spelling misteaks. I use ispell with hunspell to check my spelling in German and english using a simple <code># -*- ispell-dictionary: "de_DE" -*-}</code> for German or <code>en_US</code> for english. I disable this in some org-buffers using <code># -*- eval: (flyspell-mode -1) -*-</code>. This is not <code>org-mode</code> specific, but I use it mostly in <code>org-mode</code>.
</p>
</div>
</div>
</div>
<div id="outline-container-orga58ffb2" class="outline-3">
<h3 id="orga58ffb2">Bring your own Elisp</h3>
<div class="outline-text-3" id="text-orga58ffb2">
<p>
As you have seen, Emacs is (literally) infinitely customizable because Elisp is Turing Complete. Whatever you can imagine has probably been implemented, or you can implement it yourself. In the end, Emacs is a Elisp evaluator written in C<sup><a id="fnr.22" class="footref" href="#fn.22" role="doc-backlink">22</a></sup>, and whatever you can do with programming, you can implement in Emacs. From games like 2048 and Snake, to a fireplace, a therapist, social media, music players and web browsers have been implemented in Emacs. Not only that, but they can all interact with each other and synergize in unforeseen ways. See the <a href="https://www.youtube.com/watch?v=DMbrNhx2zWQ">video from Tsoding</a> for a better explanation.
</p>
</div>
</div>
<div id="outline-container-org806221d" class="outline-3">
<h3 id="org806221d">On Doom</h3>
<div class="outline-text-3" id="text-org806221d">
<p>
I see a lot of hate online for Doom (and Space) Emacs. I find Doom to be a great framework for starting your own config, because it starts with a plentiful and sane default package collection and it uses <code>straight.el</code> as package manager, and iterating on it is very easy. It is extremely opinionated, and in my opinion partially very bloated, and I dislike the fact that some of it&rsquo;s support is over Discord<sup><a id="fnr.23" class="footref" href="#fn.23" role="doc-backlink">23</a></sup> (they are however also very active on Github, which is slightly better!).
</p>

<p>
It does some things in arcane ways, and sometimes I have to go digging deep for finding how and where a function is implemented (which is actually very easy to do on Emacs), but even this <sup><a id="fnr.24" class="footref" href="#fn.24" role="doc-backlink">24</a></sup> is worth it for me, for whenever I want to experiment with something new, all I have to do is uncommenting it&rsquo;s appropriate line in <code>$DOOMDIR/init.el</code> and do a <code>doom/reload</code> using <code>SPC h r r</code>. It has presets for almost all languages that I would like to use, and it has extremely sane configs for these languages. If I don&rsquo;t like something, it&rsquo;s still Emacs and I can change it to however I like it. And it starts up REALLY fast, 3.16 seconds for 311 packages. 
</p>

<p>
Sometimes implementations do break and the maintainers need a bit more time dealing with it, but so far I have not had anything mission critical breaking on me. The worst case was my theme not working with calfw due to a change in upstream packaging. Installing foreign packages is as easy as adding <code>(package! foo)</code> in <code>$DOOMDIR/packages.el</code> and reloading. It uses <code>evil-mode</code> by default, but of course you can disable that, or even use <code>god-mode</code>.
</p>

<p>
To put things shortly, I am happy with it. If you don&rsquo;t like it, that&rsquo;s fine too and is understandable.
</p>
</div>
</div>
<div id="outline-container-orgf5e6bdb" class="outline-3">
<h3 id="orgf5e6bdb">It didn&rsquo;t work for these things</h3>
<div class="outline-text-3" id="text-orgf5e6bdb">
<p>
Especially as I started out, I tried doing everything, and I mean everything, in Emacs. I tried lots of packages, and found some for some cool use cases, but unfortunately because of one reason or another, I couldn&rsquo;t stick with them. Here are some cases:
</p>
</div>
<div id="outline-container-org4b61061" class="outline-4">
<h4 id="org4b61061">Music</h4>
<div class="outline-text-4" id="text-org4b61061">
<p>
I tried emms and bongo. My music collection is on my <code>NextCloud</code> instance and I can use <code>Ampache</code> or <code>Subsonic</code> to stream them. I tried having the music locally, but my collection is way too big for a setup like that and I also enjoy the capabilities of the <a href="https://github.com/nc-music/music">music</a> app on <code>NextCloud</code>, like liking songs and what not. I found nothing that was comparable to that. I use now a mix of <a href="https://github.com/dweymouth/supersonic">supersonic</a>, <a href="https://github.com/jeffvli/feishin">feishin</a>, and (very recently) <a href="https://en.wikipedia.org/wiki/Qobuz">qobuz</a>.
</p>
</div>
</div>
<div id="outline-container-org6e2af91" class="outline-4">
<h4 id="org6e2af91">Chat</h4>
<div class="outline-text-4" id="text-org6e2af91">
<p>
I chat on IRC and Matrix. When I still used Discord, I had a <code>bittlebee</code> instance and that worked. I used <code>circe</code> and <code>erc</code>. Whilst I am sure that there is a way of making it work and look nice, I found it to be too clunky to use on a daily basis. For IRC I have settled down on <code>weechat</code> (and <code>wechaatRN</code> for my phone) and for Matrix I use <code>Element Desktop</code> (and <code>Element X</code> on my phone).
</p>
</div>
</div>
<div id="outline-container-org6f38fb1" class="outline-4">
<h4 id="org6f38fb1">Browsing the web</h4>
<div class="outline-text-4" id="text-org6f38fb1">
<p>
Yes, <code>eww</code> exists and I love that it exists, but you really can&rsquo;t use it if you encounter any PWAs. I sometimes use it for reading docs or websites that I know are text based.
</p>
</div>
</div>
<div id="outline-container-org0fdeb43" class="outline-4">
<h4 id="org0fdeb43">Social Media</h4>
<div class="outline-text-4" id="text-org0fdeb43">
<p>
Ah, <a href="https://github.com/tanrax/org-social">org-social</a>. I loved it as it came out. It was simple, nerdy and fast. Unfortunately it has had a feature creep and I don&rsquo;t like the way it has turned anymore. Maybe I will try it again the future.
</p>
</div>
</div>
</div>
<div id="outline-container-org6343080" class="outline-3">
<h3 id="org6343080">Conclusion</h3>
<div class="outline-text-3" id="text-org6343080">
<p>
I didn&rsquo;t always used to use text files so much as I do now. Maybe Emacs has decompiled my way of thinking. It is truly a way of existing at this point. I honestly would have to readjust majorly if for some reason I couldn&rsquo;t use Emacs. Here are some quotes from Emacs users on why they use Emacs, found on reddit and aggregated by <a href="https://thecloudlet.github.io/about/">The Cloudlet</a>:
</p>

<blockquote>
<p>
&ldquo;Because I love being a pariah at the office.&rdquo;
</p>

<p>
&ldquo;I learn one editor, once, and use it for my whole career.&rdquo;
</p>

<p>
&ldquo;It fits like a tailored suit.&rdquo; &ndash; customizable experience, and you can mostly customize &ldquo;EVERYTHING&rdquo;.
</p>

<p>
Tools that cannot be replaced: OrgMode, Magit
</p>

<p>
Tsoding - <a href="https://www.youtube.com/watch?v=DMbrNhx2zWQ">The Annoying Usefulness of Emacs</a>
</p>

<p>
The romantic Free Software Foundation spirit and unwillingness to be controlled by big tech
</p>
</blockquote>

<p>
If I have interested you even one bit, then go ahead. Download Emacs and do the tutorial. Or download Doom, or download Spacemacs. No matter what you do, there are no wrong choices here. Here are some further links that you might enjoy:
</p>

<ul class="org-ul">
<li><a href="https://thecloudlet.github.io/technical/project/emacs-01/">Emacs [&hellip;] is a Lisp Runtime in C, Not an Editor</a></li>
<li><a href="https://www.youtube.com/watch?v=urcL86UpqZc">Interview with an Emacs Enthusiast [Colorized]​</a></li>
<li><a href="https://www.jstatsoft.org/article/view/v046i03">A Multi-Language Computing Environment for Literate Programming and Reproducible Research</a></li>
<li><a href="https://donaldh.wtf/2025/11/an-ode-to-org-babel/">An Ode to Org Babel</a></li>
<li><a href="https://www.youtube.com/watch?v=DMbrNhx2zWQ">The Annoying Usefulness of Emacs</a></li>
<li><a href="https://www.masteringemacs.org/">Mastering Emacs</a></li>
</ul>

<p>
<b>Edit</b>: &hellip;shit. I forgot about <code>tramp</code>.
</p>
</div>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara"><a href="https://en.wikipedia.org/wiki/Diplom">Diplom - Wikipedia</a>:  equivalent to a master&rsquo;s degree.</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">This is a joke. Jazz is a genre of music that regards forms strongly. AABA, ABAC and blues are some of these forms that jazz musicians know, and it enables us to improvise whilst keeping things structurally sound.</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">I firmly believe that that is the definition of Jazz: true mastery of an instrument, and partial mastery of music.</p></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">I have limited experience with default keybinds. I tried them for a short while, and whilst I didn&rsquo;t hate them, I didn&rsquo;t like them enough to stick with it.</p></div></div>

<div class="footdef"><sup><a id="fn.5" class="footnum" href="#fnr.5" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">The question begs to be asked, do the &ldquo;normal&rdquo; and &ldquo;non-nerdy&rdquo; use text editors? What I mean probably should be worded as &ldquo;normalish&rdquo; and &ldquo;non-giga-nerdy&rdquo; computer specialists.</p></div></div>

<div class="footdef"><sup><a id="fn.6" class="footnum" href="#fnr.6" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">In reality it&rsquo;s sometimes methods [A..Z].</p></div></div>

<div class="footdef"><sup><a id="fn.7" class="footnum" href="#fnr.7" role="doc-backlink">7</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">My partner insists that the mouse is one of the greatest inventions of our times, and that is usually in response to when I (provokingly) tell her that the creation of the computer mouse was a mistake.</p></div></div>

<div class="footdef"><sup><a id="fn.8" class="footnum" href="#fnr.8" role="doc-backlink">8</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">I really should write an Elisp function for this procedure.</p></div></div>

<div class="footdef"><sup><a id="fn.9" class="footnum" href="#fnr.9" role="doc-backlink">9</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">There are definitely better ways of doing this, and please do hit me up if you have any suggestions for me!</p></div></div>

<div class="footdef"><sup><a id="fn.10" class="footnum" href="#fnr.10" role="doc-backlink">10</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">I read a post that called this &ldquo;increasing the brain/device bandwidth&rdquo;. I like that.</p></div></div>

<div class="footdef"><sup><a id="fn.11" class="footnum" href="#fnr.11" role="doc-backlink">11</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">I am ignoring transposing instruments trying to match concert pitch with wrong leadsheets.</p></div></div>

<div class="footdef"><sup><a id="fn.12" class="footnum" href="#fnr.12" role="doc-backlink">12</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">Today I almost wish there wasn&rsquo;t an app for every little thing I want to do.</p></div></div>

<div class="footdef"><sup><a id="fn.13" class="footnum" href="#fnr.13" role="doc-backlink">13</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">A function so well hidden that I am yet to find it.</p></div></div>

<div class="footdef"><sup><a id="fn.14" class="footnum" href="#fnr.14" role="doc-backlink">14</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">No warranty whatsoever for any of the config you see here. I barely have scratched the surface of Elisp, and whilst my config does 100% work for me, I have taken some of these config from other&rsquo;s dotfiles and have not written everything myself.</p></div></div>

<div class="footdef"><sup><a id="fn.15" class="footnum" href="#fnr.15" role="doc-backlink">15</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">In the beginning I had it set to only plain text, but I enjoy <span class="underline"><b>emphasizing</b></span>, using <code>mono-fonted-text</code>, <code class="src src-python"><span style="color: #fedd38;">print</span><span style="color: #ea3d54;">(</span><span style="color: #4fb3d8;">"and inline code"</span><span style="color: #ea3d54;">)</span></code> way too much to give up on that.</p></div></div>

<div class="footdef"><sup><a id="fn.16" class="footnum" href="#fnr.16" role="doc-backlink">16</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">Actually that might be because of my personality.</p></div></div>

<div class="footdef"><sup><a id="fn.17" class="footnum" href="#fnr.17" role="doc-backlink">17</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">I use <code>qutebrowser</code>, but more on that in another post.</p></div></div>

<div class="footdef"><sup><a id="fn.18" class="footnum" href="#fnr.18" role="doc-backlink">18</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">If we were to compare Emacs to modal music, one could argue that modes define the way a buffer behaves, just in the same way <a href="https://www.youtube.com/watch?v=ylXk1LBvIqU&amp;list=RDylXk1LBvIqU&amp;start_radio=1">So What</a> is in Dorian and defines how Coltrane plays. Sometimes you can mix major modes and minor modes, and then you have pieces like <a href="https://www.youtube.com/watch?v=EWC5x9G45yo&amp;list=RDEWC5x9G45yo&amp;start_radio=1">Maiden Voyage</a> with sus chords where you have the best of both worlds, and improvise in Mixolydian or in Dorian.</p></div></div>

<div class="footdef"><sup><a id="fn.19" class="footnum" href="#fnr.19" role="doc-backlink">19</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara"><a href="https://staff.science.uva.nl/c.dominik/">Here&rsquo;s his website.</a></p></div></div>

<div class="footdef"><sup><a id="fn.20" class="footnum" href="#fnr.20" role="doc-backlink">20</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">I think most of the teachers in Germany use OneNote for this purpose. I despise OneNote, so this is my solution.</p></div></div>

<div class="footdef"><sup><a id="fn.21" class="footnum" href="#fnr.21" role="doc-backlink">21</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">Speaking of, if you are there next year, hit me up on DECT: omidmash(66436274)</p></div></div>

<div class="footdef"><sup><a id="fn.22" class="footnum" href="#fnr.22" role="doc-backlink">22</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">Read this: <a href="https://thecloudlet.github.io/technical/project/emacs-01/">Emacs is a Lisp Runtime in C, Not an Editor</a></p></div></div>

<div class="footdef"><sup><a id="fn.23" class="footnum" href="#fnr.23" role="doc-backlink">23</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">I don&rsquo;t use Discord anymore.</p></div></div>

<div class="footdef"><sup><a id="fn.24" class="footnum" href="#fnr.24" role="doc-backlink">24</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">At least for now.</p></div></div>


</div>
</div>]]>
</description></item>
<item>
<title>Quieting My R220</title>
<link>https://omidmash.de/blog/quieting-my-r220.html</link>
<pubDate>Sun, 07 Jun 2026 02:25:22 +0200</pubDate>
<guid>https://omidmash.de/blog/quieting-my-r220.html</guid>
<description>
<![CDATA[<div id="outline-container-queting_my_r220" class="outline-2">
<h2 id="queting_my_r220">Quieting my R220</h2>
<div class="outline-text-2" id="text-queting_my_r220">
<p>
I slowly have nothing left to configure. So before I start completely breaking my stuff or – god forbid – switch to Gentoo, I&rsquo;ll start with some light blogging. It started on my website, but I think I will move it on here for now. On the side, nice and relaxed!
</p>

<p>
For a few years now, I&rsquo;ve owned an R220 server that was initially only in operation occasionally. Electricity costs are of course high in Germany (almost 0.40 Cent per kw/h), but besides the electricity costs, the fan noise was also a problem. That&rsquo;s why I only used it occasionally to try things out and then turned it off again after a week at most. I am also a musician, so when I needed to record, I had to kill the server&hellip; Suboptimal.
</p>

<p>
In 2024, however, I had an idea: Making the Dell R220 server even quieter.
</p>

<p>
I found a <a href="https://www.reddit.com/r/homelab/comments/f7hift/dell_r210ii_to_get_the_server_even_quieter_i/">post</a> on reddit. First, I only replaced the PSU fans with a Noctua variant, as the PSU fans are the only fans that aren&rsquo;t controllable via IPMI and thus run at a volume similar to a lawnmower. However, as /u/Apserger96 warned:
</p>

<blockquote>
<p>
IMPORTANT: When you put the fan back into the power supply, you must only use the two top screws to secure it. The lower ones cause short circuits! The two upper screws are sufficient for a firm hold!
</p>
</blockquote>

<p>
I didn&rsquo;t pay attention to that and wondered why my server only started for a few seconds. That was the reason.
</p>

<p>
Of course, I don&rsquo;t recommend anyone to screw around in PSUs – the capacitors in PSUs theoretically retain their charge for a very long time. I waited half a day, and they <b>do</b> have safety features, but still: if something had gone wrong, it could have been deadly.
</p>

<p>
But it&rsquo;s running now! Everything is quiet, and since then my server has been running 24/7. This post is also hosted on that server.
</p>
</div>
</div>
]]>
</description></item>
</channel>
</rss>
