<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>write@moxnet Reader</title>
    <link>https://write.moxnet.eu</link>
    <description>Read the latest posts from write@moxnet.</description>
    <pubDate>Mon, 04 May 2026 16:47:29 +0200</pubDate>
    <item>
      <title>Serving images comfortably in WriteFreely using NGINX and Nextcloud</title>
      <link>https://write.moxnet.eu/serving-images-comfortably-in-writefreely-using-nginx-and-nextcloud</link>
      <description>&lt;![CDATA[#smarthome #selfhosting&#xA;&#xA;WriteFreely, which I self-host for this blog, cannot natively serve images. It is designed so that you combine it with a photo serving platform like e.g. snap.as.&#xA;&#xA;I found the solution for this problem by using NGINX and Nextcloud:&#xA;&#xA;I use a Nextcloud folder to upload the images I want to use.&#xA;Then using NGINX reverse proxy I expose that folder.&#xA;&#xA;  # Serve images                                                                        &#xA;        location /images/ {                                                                   &#xA;                 alias /home/ncdata/Kemal/files/Public/;                                     &#xA;                 autoindex off;                                                               &#xA;                 accesslog off;                                                              &#xA;                 expires 30d;                                                                 &#xA;                 add_header Cache-Control &#34;public&#34;;                                           &#xA;                 } &#xA;After that I can link images in the blog posts using this&#xA;&#xA;Name&#xA;&#xA;Hope this helps someone else also.&#xA;&#xA;Keep on hacking!&#xA;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>#smarthome #selfhosting</p>

<p>WriteFreely, which I self-host for this blog, cannot natively serve images. It is designed so that you combine it with a photo serving platform like e.g. <a href="https://snap.as/">snap.as</a>.</p>

<p>I found the solution for this problem by using NGINX and Nextcloud:</p>
<ul><li>I use a Nextcloud folder to upload the images I want to use.</li>
<li>Then using NGINX reverse proxy I expose that folder.</li></ul>

<pre><code>  # Serve images                                                                        
        location /images/ {                                                                   
                 alias /home/nc_data/Kemal/files/Public/;                                     
                 autoindex off;                                                               
                 access_log off;                                                              
                 expires 30d;                                                                 
                 add_header Cache-Control &#34;public&#34;;                                           
                 } 
</code></pre>
<ul><li>After that I can link images in the blog posts using this</li></ul>

<pre><code>![Name](https://write.moxnet.eu/images/Name.jpg)
</code></pre>

<p>Hope this helps someone else also.</p>

<p>Keep on hacking!</p>
]]></content:encoded>
      <author>Kemal&#39;s Braindump</author>
      <guid>https://write.moxnet.eu/read/a/f49ouau711</guid>
      <pubDate>Wed, 22 Apr 2026 15:43:34 +0200</pubDate>
    </item>
    <item>
      <title>Brainiac v1.2 released</title>
      <link>https://write.moxnet.eu/brainiac-v1-2-released</link>
      <description>&lt;![CDATA[#emacs #brainiac #productivity #systems&#xA;&#xA;Hello everyone!&#xA;&#xA;I have been using the Brainiac intensively over the last months and made some changes to the configuration along the way. Get your update here or from Codeberg.&#xA;&#xA;Improvements:&#xA;&#xA;Added journal.org to the list of refile targets.&#xA;Reduced the width of comment, source, etc. boxes in brainiac.css.&#xA;The attached items are now visibly listed in the drawer of the headline.&#xA;Minor changes in the configuration, e.g. increase of idle time etc.&#xA;&#xA;New things:&#xA;&#xA;Added org-crypt to the config, so that sensitive information can be encrypted if storing files on public servers.&#xA;To integrate Brainiac into your system menu, I propose the following: copy brainiac.desktop to ~/.local/share/applications and brainiac.svg to ~/.local/share/icons.&#xA;I added basic AI support by using a customized ollama-buddy-mini and running models locally with ollama. Although I previously stated that Brainiac would not have AI, the chosen combination presents a nice compromise between functionality and privacy.&#xA;I also introduced the abbrev-mode as a template storage for some useful org templates and as a mechanism for storing AI prompts for future usage.&#xA;In order to consolidate important functions and keystrokes, I configured a menu which can be reached by pressing C-c b using transient.]]&gt;</description>
      <content:encoded><![CDATA[<p>#emacs #brainiac #productivity #systems</p>

<p>Hello everyone!</p>

<p>I have been using the Brainiac intensively over the last months and made some changes to the configuration along the way. Get your update <a href="https://write.moxnet.eu/images/brainiac_v1.2.zip">here</a> or from <a href="https://codeberg.org/kemal/brainiac">Codeberg</a>.</p>

<p>Improvements:</p>
<ul><li>Added <code>journal.org</code> to the list of refile targets.</li>
<li>Reduced the width of comment, source, etc. boxes in <code>brainiac.css</code>.</li>
<li>The attached items are now visibly listed in the drawer of the headline.</li>
<li>Minor changes in the configuration, e.g. increase of idle time etc.</li></ul>

<p>New things:</p>
<ul><li>Added <code>org-crypt</code> to the config, so that sensitive information can be encrypted if storing files on public servers.</li>
<li>To integrate Brainiac into your system menu, I propose the following: copy <code>brainiac.desktop</code> to <code>~/.local/share/applications</code> and <code>brainiac.svg</code> to <code>~/.local/share/icons</code>.</li>
<li>I added basic AI support by using a customized <code>ollama-buddy-mini</code> and running models locally with <code>ollama</code>. Although I previously stated that Brainiac would not have AI, the chosen combination presents a nice compromise between functionality and privacy.</li>
<li>I also introduced the <code>abbrev-mode</code> as a template storage for some useful <code>org</code> templates and as a mechanism for storing AI prompts for future usage.</li>
<li>In order to consolidate important functions and keystrokes, I configured a menu which can be reached by pressing <code>C-c b</code> using <code>transient</code>.</li></ul>
]]></content:encoded>
      <author>Kemal&#39;s Braindump</author>
      <guid>https://write.moxnet.eu/read/a/idf6xsmaeg</guid>
      <pubDate>Sun, 22 Feb 2026 14:37:47 +0100</pubDate>
    </item>
    <item>
      <title>Getting proper audio setup on Ubuntu 24.04</title>
      <link>https://write.moxnet.eu/getting-professional-grade-audio-working-on-ubuntu-24-04</link>
      <description>&lt;![CDATA[#linux #sound&#xA;&#xA;This setup was done on an HP EliteBook 840 with Intel Tiger Lake hardware, running Ubuntu 24.04 LTS, but I used tips from Arch Wiki as well. So I presume most of it is transferable to other distributions.&#xA;&#xA;Ubuntu ships with PipeWire and WirePlumber by default, which is a solid audio foundation—but getting microphone with noise suppression and sane device naming requires some manual tuning.&#xA;&#xA;!--more--&#xA;&#xA;Enable Pro Audio Mode for the microphone to work&#xA;&#xA;To be able to use the microphone, the audio card must run in pro-audio profile, which can be done with pactl. Now open alsamixer and set all relevant channels to 100%. Then test the mic.&#xA;&#xA;When the mic starts working we need some noise suppression, in order to use it for calls.&#xA;Install RNNoise for PipeWire from here:&#xA;&#xA;👉 https://github.com/werman/noise-suppression-for-voice&#xA;&#xA;Once installed, we need to set the RNNoise source as your default microphone. For that, and other tweaks, I recommend to take the code below, put it in a script and run it on every reboot.&#xA;&#xA;pactl set-card-profile alsacard.pci-0000001f.3-platform-sklhdadspgeneric pro-audio&#xA;pactl set-default-sink alsaoutput.pci-0000001f.3-platform-sklhdadspgeneric.pro-output-0&#xA;amixer -c 0 set Master 100%&#xA;pactl set-default-source rnnoisesource&#xA;&#xA;WirePlumber Configuration&#xA;&#xA;WirePlumber allows fine-grained control over audio devices using Lua scripts.&#xA;&#xA;Default ALSA device names are long and unreadable. This rule renames the main audio device to something human-friendly.&#xA;&#xA;rule = {&#xA;  matches = {&#xA;    {&#xA;      { &#34;device.name&#34;, &#34;matches&#34;, &#34;alsacard.pci-0000001f.3-platform-sklhdadspgeneric&#34; },&#xA;    },&#xA;  },&#xA;  applyproperties = {&#xA;    [&#34;device.description&#34;] = &#34;Laptop Audio&#34;&#xA;  },&#xA;}&#xA;&#xA;table.insert(alsamonitor.rules, rule)&#xA;&#xA;Pro-audio mode exposes many unused nodes. Disabling them keeps the device list clean and avoids accidental routing.&#xA;&#xA;rule = {&#xA;  matches = {&#xA;    { { &#34;node.name&#34;, &#34;equals&#34;, &#34;alsaoutput.pci-0000001f.3-platform-sklhdadspgeneric.pro-output-3&#34; } },&#xA;    { { &#34;node.name&#34;, &#34;equals&#34;, &#34;alsaoutput.pci-0000001f.3-platform-sklhdadspgeneric.pro-output-4&#34; } },&#xA;    { { &#34;node.name&#34;, &#34;equals&#34;, &#34;alsaoutput.pci-0000001f.3-platform-sklhdadspgeneric.pro-output-5&#34; } },&#xA;    { { &#34;node.name&#34;, &#34;equals&#34;, &#34;alsaoutput.pci-0000001f.3-platform-sklhdadspgeneric.pro-output-31&#34; } },&#xA;    { { &#34;node.name&#34;, &#34;equals&#34;, &#34;alsainput.pci-0000001f.3-platform-sklhdadspgeneric.pro-input-0&#34; } },&#xA;    { { &#34;node.name&#34;, &#34;equals&#34;, &#34;alsainput.pci-0000001f.3-platform-sklhdadspgeneric.pro-input-6&#34; } },&#xA;  },&#xA;  applyproperties = {&#xA;    [&#34;node.disabled&#34;] = true,&#xA;  },&#xA;}&#xA;&#xA;table.insert(alsa_monitor.rules, rule)&#xA;&#xA;Faster audio source/sink switching in GNOME&#xA;&#xA;For this install the GNOME extension:&#xA;&#xA;Quick Settings Audio Panel&#xA;&#xA;This makes switching audio sources and sinks fast and practical during daily work.&#xA;&#xA;Enjoy!]]&gt;</description>
      <content:encoded><![CDATA[<p>#linux #sound</p>

<p>This setup was done on an <strong>HP EliteBook 840</strong> with <strong>Intel Tiger Lake</strong> hardware, running <strong>Ubuntu 24.04 LTS</strong>, but I used tips from Arch Wiki as well. So I presume most of it is transferable to other distributions.</p>

<p>Ubuntu ships with PipeWire and WirePlumber by default, which is a solid audio foundation—but getting <strong>microphone with noise suppression</strong> and sane device naming requires some manual tuning.</p>



<h2 id="enable-pro-audio-mode-for-the-microphone-to-work" id="enable-pro-audio-mode-for-the-microphone-to-work">Enable Pro Audio Mode for the microphone to work</h2>

<p>To be able to use the microphone, the audio card must run in <strong>pro-audio</strong> profile, which can be done with <code>pactl</code>. Now open <code>alsamixer</code> and set <strong>all relevant channels to 100%</strong>. Then test the mic.</p>

<p>When the mic starts working we need some noise suppression, in order to use it for calls.
Install <strong>RNNoise for PipeWire</strong> from here:</p>

<p>👉 <a href="https://github.com/werman/noise-suppression-for-voice">https://github.com/werman/noise-suppression-for-voice</a></p>

<p>Once installed, we need to set the RNNoise source as your default microphone. For that, and other tweaks, I recommend to take the code below, put it in a script and run it on every reboot.</p>

<pre><code class="language-sh">pactl set-card-profile alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic pro-audio
pactl set-default-sink alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.pro-output-0
amixer -c 0 set Master 100%
pactl set-default-source rnnoise_source
</code></pre>

<h2 id="wireplumber-configuration" id="wireplumber-configuration">WirePlumber Configuration</h2>

<p>WirePlumber allows fine-grained control over audio devices using Lua scripts.</p>

<p>Default ALSA device names are long and unreadable. This rule renames the main audio device to something human-friendly.</p>

<pre><code class="language-lua">rule = {
  matches = {
    {
      { &#34;device.name&#34;, &#34;matches&#34;, &#34;alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic&#34; },
    },
  },
  apply_properties = {
    [&#34;device.description&#34;] = &#34;Laptop Audio&#34;
  },
}

table.insert(alsa_monitor.rules, rule)
</code></pre>

<p>Pro-audio mode exposes many unused nodes. Disabling them keeps the device list clean and avoids accidental routing.</p>

<pre><code class="language-lua">rule = {
  matches = {
    { { &#34;node.name&#34;, &#34;equals&#34;, &#34;alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.pro-output-3&#34; } },
    { { &#34;node.name&#34;, &#34;equals&#34;, &#34;alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.pro-output-4&#34; } },
    { { &#34;node.name&#34;, &#34;equals&#34;, &#34;alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.pro-output-5&#34; } },
    { { &#34;node.name&#34;, &#34;equals&#34;, &#34;alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.pro-output-31&#34; } },
    { { &#34;node.name&#34;, &#34;equals&#34;, &#34;alsa_input.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.pro-input-0&#34; } },
    { { &#34;node.name&#34;, &#34;equals&#34;, &#34;alsa_input.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.pro-input-6&#34; } },
  },
  apply_properties = {
    [&#34;node.disabled&#34;] = true,
  },
}

table.insert(alsa_monitor.rules, rule)
</code></pre>

<h2 id="faster-audio-source-sink-switching-in-gnome" id="faster-audio-source-sink-switching-in-gnome">Faster audio source/sink switching in GNOME</h2>

<p>For this install the GNOME extension:</p>

<p><strong>Quick Settings Audio Panel</strong></p>

<p>This makes switching audio sources and sinks fast and practical during daily work.</p>

<p>Enjoy!</p>
]]></content:encoded>
      <author>Kemal&#39;s Braindump</author>
      <guid>https://write.moxnet.eu/read/a/cvc1r12bo8</guid>
      <pubDate>Thu, 19 Feb 2026 09:48:58 +0100</pubDate>
    </item>
    <item>
      <title>Let&#39;s say it together: &#34;I don&#39;t care.&#34;</title>
      <link>https://write.moxnet.eu/lets-say-it-together-i-dont-care</link>
      <description>&lt;![CDATA[#technology #leadership&#xA;&#xA;Because &#34;... each tiny &#34;I don&#39;t care&#34; iteration to tech products is a small step closer to Star Trek&#39;s promised land of holodecks, abundance, and hot aliens ...&#34;, and I want that future!&#xA;&#xA;  Note to leaders. &#xA;&#xA;  Have a look at what your team is working on, are you producing real future proof value for the company or just chasing another tech trend trying to show that you are „on the bleeding edge“?&#xA;&#xA;  Producing real value doesn’t just help your company keep the business in long term, it gives your team purpose and enables them to optimize their contribution.]]&gt;</description>
      <content:encoded><![CDATA[<p>#technology #leadership</p>

<p>Because “... <a href="https://lifehacker.com/tech/why-tech-launches-stopped-feeling-magical?utm_medium=RSS">each tiny “I don&#39;t care” iteration to tech products is a small step closer to Star Trek&#39;s promised land of holodecks, abundance, and hot aliens</a> ...“, and I want that future!</p>

<blockquote><p>Note to leaders.</p>

<p>Have a look at what your team is working on, are you producing real future proof value for the company or just chasing another tech trend trying to show that you are „on the bleeding edge“?</p>

<p>Producing real value doesn’t just help your company keep the business in long term, it gives your team purpose and enables them to optimize their contribution.</p></blockquote>
]]></content:encoded>
      <author>Kemal&#39;s Braindump</author>
      <guid>https://write.moxnet.eu/read/a/rx27ev3o35</guid>
      <pubDate>Tue, 13 Jan 2026 14:59:55 +0100</pubDate>
    </item>
    <item>
      <title>Did you notice the way you walk?</title>
      <link>https://write.moxnet.eu/did-you-notice-the-way-you-walk</link>
      <description>&lt;![CDATA[#health #leadership&#xA;&#xA;A couple of days ago I was going to the office. It was Friday, I had some meetings scheduled and some light office tasks to do. All in all, it should be an easy day as  it was the first working week of the year.&#xA;&#xA;As I was walking from the car park to the office, I noticed a guy walking in front of me. He was strolling along, with a coffee in his hand and looking kind of dreamy. Unintentionally I set off to overtake him and hurry along my way.&#xA;Then it hit me: &#34;Why am I in a hurry?&#34;. As I wrote above, there is no urgent meeting that I needed to attend or a task I had to do. Where did this urge to overtake him and look busy come from?&#xA;&#xA;The modern life being promoted around us, teaches us not to loose time and to always be busy. If we are not, then we will not be successful, reach our goals or we will simply be brand-marked as slackers.&#xA;But this time I intentionally chose to stop my overtaking and match the speed of a dreamy looking guy.]]&gt;</description>
      <content:encoded><![CDATA[<p>#health #leadership</p>

<p>A couple of days ago I was going to the office. It was Friday, I had some meetings scheduled and some light office tasks to do. All in all, it should be an easy day as  it was the first working week of the year.</p>

<p>As I was walking from the car park to the office, I noticed a guy walking in front of me. He was strolling along, with a coffee in his hand and looking kind of dreamy. Unintentionally I set off to overtake him and hurry along my way.
Then it hit me: “Why am I in a hurry?”. As I wrote above, there is no urgent meeting that I needed to attend or a task I had to do. Where did this urge to overtake him and look busy come from?</p>

<p>The modern life being promoted around us, teaches us not to loose time and to always be busy. If we are not, then we will not be successful, reach our goals or we will simply be brand-marked as slackers.
But this time I intentionally chose to stop my overtaking and match the speed of a dreamy looking guy.</p>
]]></content:encoded>
      <author>Kemal&#39;s Braindump</author>
      <guid>https://write.moxnet.eu/read/a/u2wa03go41</guid>
      <pubDate>Mon, 12 Jan 2026 13:19:01 +0100</pubDate>
    </item>
  </channel>
</rss>