<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>alavi.me - note</title>
    <subtitle>My mind on the web</subtitle>
    <link rel="self" type="application/atom+xml" href="https://alavi.me/tags/note/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://alavi.me"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2025-07-27T00:00:00+00:00</updated>
    <id>https://alavi.me/tags/note/atom.xml</id>
    <entry xml:lang="en">
        <title>My Checklist And Tips For Server Setup</title>
        <published>2025-02-21T00:00:00+00:00</published>
        <updated>2025-07-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            Alireza Alavi
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alavi.me/blog/my-server-setup-checklist/"/>
        <id>https://alavi.me/blog/my-server-setup-checklist/</id>
        
        
        <content type="html" xml:base="https://alavi.me/blog/my-server-setup-checklist/">
            
            &lt;p&gt;Disclaimer: I&#39;m by no means a professional systems administrator or DevOps engineer. I&#39;m a software engineer that works a lot on servers.&lt;/p&gt;
&lt;p&gt;These are just how I do things. Maybe not necessarily the best way or even the correct way. But I will be updating and refining this post as I learn more (or post them in separate new posts).&lt;/p&gt;
&lt;p&gt;I will be very happy if you share your own tips and tricks with me(&lt;a rel=&quot;external&quot; href=&quot;https://alavi.me/contact&quot;&gt;contact me&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id=&quot;linux-distribution-preferences&quot;&gt;Linux distribution preferences&lt;a class=&quot;zola-anchor&quot; href=&quot;#linux-distribution-preferences&quot; aria-label=&quot;Anchor link for: linux-distribution-preferences&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;If I want to work with a server with more than 4GiB of ram and I know that there will be many use cases for that server, I will go with &lt;a rel=&quot;external&quot; href=&quot;https://debian.org&quot;&gt;Debian Linux&lt;/a&gt;. It is true and tested, stable and has good community support and resources for server use cases.&lt;/p&gt;
&lt;p&gt;If the server is limited on resources, and it will be used for specific things like only containerization or only a single service, I will go with &lt;a rel=&quot;external&quot; href=&quot;https://alpinelinux.org&quot;&gt;Alpine Linux&lt;/a&gt;. It is super lightweight and the package manager &lt;code&gt;apk&lt;/code&gt; is so fast, it&#39;s unbelievable.&lt;/p&gt;
&lt;p&gt;But for most cases, for the checklist and tips here the Linux distribution doesn&#39;t matter that much. So let&#39;s get started.&lt;/p&gt;
&lt;h2 id=&quot;first-tools-to-install&quot;&gt;First tools to install&lt;a class=&quot;zola-anchor&quot; href=&quot;#first-tools-to-install&quot; aria-label=&quot;Anchor link for: first-tools-to-install&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;You can install all the tools on debian with this command:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#4C4F69, #CDD6F4); background-color: light-dark(#EFF1F5, #1E1E2E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1E66F5, #89B4FA);font-style: italic;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#40A02B, #A6E3A1);&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color: light-dark(#40A02B, #A6E3A1);&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color: light-dark(#40A02B, #A6E3A1);&quot;&gt; neovim&lt;/span&gt;&lt;span style=&quot;color: light-dark(#40A02B, #A6E3A1);&quot;&gt; tmux&lt;/span&gt;&lt;span style=&quot;color: light-dark(#40A02B, #A6E3A1);&quot;&gt; nnn&lt;/span&gt;&lt;span style=&quot;color: light-dark(#40A02B, #A6E3A1);&quot;&gt; lnav&lt;/span&gt;&lt;span style=&quot;color: light-dark(#40A02B, #A6E3A1);&quot;&gt; btop&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;neovim&quot;&gt;neovim&lt;a class=&quot;zola-anchor&quot; href=&quot;#neovim&quot; aria-label=&quot;Anchor link for: neovim&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;There is no way I am editing any text without my &lt;a rel=&quot;external&quot; href=&quot;https://neovim.io&quot;&gt;neovim&lt;/a&gt;. When you have a good editor that you are efficient with, editing config files and searching around the server becomes so much faster and less tiring.&lt;/p&gt;
&lt;h3 id=&quot;tmux&quot;&gt;Tmux&lt;a class=&quot;zola-anchor&quot; href=&quot;#tmux&quot; aria-label=&quot;Anchor link for: tmux&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/tmux/tmux&quot;&gt;Tmux&lt;/a&gt; is an absolute life saver when SSH-ing into servers. The fact that you might get disconnected from the SSH server and don&#39;t lose any work is amazing, The way it lets you have multiple panes and windws and sessions is amazing, it just makes working on servers so much easier and more enjoyable. I hate the default tmux keymaps, so I always import &lt;a rel=&quot;external&quot; href=&quot;https://codeberg.org/alirezaalavi/dotfiles&quot;&gt;my own config&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; You can also use &lt;a rel=&quot;external&quot; href=&quot;https://wezterm.org&quot;&gt;Wezterm&lt;/a&gt; for multiplexing. Using &lt;code&gt;wezterm ssh &amp;lt;user&amp;gt;@&amp;lt;domain/ip&amp;gt;&lt;/code&gt; will multiplex the SSH connection, but if a Wezterm daemon isn&#39;t installed and running on the host, The sessions will get destroyed. So this isn&#39;t as good as the Tmux method, since even with the daemon you have to install wezterm on both the client and the host. But it&#39;s good for simple sessions that don&#39;t have Tmux installed.&lt;/p&gt;
&lt;h3 id=&quot;btop&quot;&gt;btop&lt;a class=&quot;zola-anchor&quot; href=&quot;#btop&quot; aria-label=&quot;Anchor link for: btop&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Yes, &lt;code&gt;htop&lt;/code&gt; is cool and all, but honestly the usability and information that btop provides is on another level. I install &lt;a rel=&quot;external&quot; href=&quot;https://github.com/aristocratos/btop&quot;&gt;btop&lt;/a&gt; on anything I use, and it is the only &quot;task manager&quot; that I need.&lt;/p&gt;
&lt;h3 id=&quot;nnn&quot;&gt;nnn&lt;a class=&quot;zola-anchor&quot; href=&quot;#nnn&quot; aria-label=&quot;Anchor link for: nnn&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Exploring files on a server can be a real pain, so I always install &lt;code&gt;nnn&lt;/code&gt; to easily navigate and manipulate files and directories on my servers.&lt;/p&gt;
&lt;p&gt;I used to use &lt;a rel=&quot;external&quot; href=&quot;https://ranger.fm/&quot;&gt;ranger&lt;/a&gt; but the instability of python and constant bugs and crashes really got on my nerves. I realized why you really shouldn&#39;t make TUI/CLI tools with python. &lt;a rel=&quot;external&quot; href=&quot;https://github.com/jarun/nnn&quot;&gt;nnn&lt;/a&gt; is much more stable and written in C.&lt;/p&gt;
&lt;p&gt;I also looked into &lt;a rel=&quot;external&quot; href=&quot;https://github.com/sxyazi/yazi&quot;&gt;yazi&lt;/a&gt; but it really doesn&#39;t seem stable(I don&#39;t care that it&#39;s written in Rust) and the development approach doesn&#39;t seem to have stability and simplicity in mind(it&#39;s on version 25 and had 25 releases. A major release with every release!)&lt;/p&gt;
&lt;h3 id=&quot;lnav&quot;&gt;lnav&lt;a class=&quot;zola-anchor&quot; href=&quot;#lnav&quot; aria-label=&quot;Anchor link for: lnav&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;No more &lt;code&gt;cat&lt;/code&gt; and &lt;code&gt;tail&lt;/code&gt; for logs. Super useful for navigating logs and debugging.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lnav.org/&quot;&gt;lnav&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;firewalld&quot;&gt;firewalld&lt;a class=&quot;zola-anchor&quot; href=&quot;#firewalld&quot; aria-label=&quot;Anchor link for: firewalld&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE: &lt;code&gt;ufw&lt;/code&gt; does not work with docker and docker bypasses the firewall. (see &lt;a rel=&quot;external&quot; href=&quot;https://github.com/docker/for-linux/issues/690&quot;&gt;github issue&lt;/a&gt;) although you can use a tool like &lt;a rel=&quot;external&quot; href=&quot;https://github.com/chaifeng/ufw-docker&quot;&gt;ufw-docker&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE: Remember to configure firewall for docker&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE: It&#39;s much better to use podman in production&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These below articles provide good information on this matter
https://docs.docker.com/engine/network/packet-filtering-firewalls/&lt;/p&gt;
&lt;p&gt;https://dev.to/soerenmetje/how-to-secure-a-docker-host-using-firewalld-2joo&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://firewalld.org/&quot;&gt;firewalld&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;honorable-mentions&quot;&gt;honorable mentions&lt;a class=&quot;zola-anchor&quot; href=&quot;#honorable-mentions&quot; aria-label=&quot;Anchor link for: honorable-mentions&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;trash-cli&lt;/code&gt; on a server might sound strange, but honestly I think it&#39;s just good practice to use &lt;code&gt;rm&lt;/code&gt; less and less. Why take unneeded risks?
Recently, I accidentally ran &lt;code&gt;rm -rf /*&lt;/code&gt; instead of &lt;code&gt;rm -rf ./*&lt;/code&gt; and made a pinky promise to myself that I will only use &lt;code&gt;trash&lt;/code&gt; from now on. There isn&#39;t a downside that I can think of. Only more safety.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;rsync&lt;/code&gt; can be very useful if you want to transfer lots of files, much faster and better than &lt;code&gt;scp&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;server-configurations&quot;&gt;Server configurations&lt;a class=&quot;zola-anchor&quot; href=&quot;#server-configurations&quot; aria-label=&quot;Anchor link for: server-configurations&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Update and upgrade the server&lt;/li&gt;
&lt;li&gt;Set datetime and timezone&lt;/li&gt;
&lt;li&gt;Setup firewall
&lt;ul&gt;
&lt;li&gt;Allow ssh port&lt;/li&gt;
&lt;li&gt;Deny all incoming, allow all outgoing&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Setup SSH
&lt;ul&gt;
&lt;li&gt;Copy ssh key to server:
&lt;code&gt;ssh-copy-id -i ~/.ssh/[key name].pub [user]@[server ip]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;disable root login&lt;/li&gt;
&lt;li&gt;enable ssh-key auth&lt;/li&gt;
&lt;li&gt;disable password auth&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Make sure swap is enabled&lt;/li&gt;
&lt;li&gt;Set hostname&lt;/li&gt;
&lt;li&gt;Enable and configure &lt;code&gt;unattended-upgrades&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://wiki.debian.org/UnattendedUpgrades&quot;&gt;debian wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo apt install unattended-upgrades apt-listchange&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Edit &lt;code&gt;/etc/apt/apt.conf.d/50unattended-upgrades&lt;/code&gt; to send emails on upgrades and errors (&lt;strong&gt;setup a mail server&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Enable automatic upgrades &lt;code&gt;sudo dpkg-reconfigure -plow unattended-upgrades&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;tips&quot;&gt;Tips&lt;a class=&quot;zola-anchor&quot; href=&quot;#tips&quot; aria-label=&quot;Anchor link for: tips&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&quot;neovim-as-terminal-multiplexer&quot;&gt;Neovim as terminal multiplexer&lt;a class=&quot;zola-anchor&quot; href=&quot;#neovim-as-terminal-multiplexer&quot; aria-label=&quot;Anchor link for: neovim-as-terminal-multiplexer&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;When you realize that 90% of the work that you do on a server can be achieved from a neovim session, It really makes things a lot easier.
You can use the &lt;code&gt;netrw&lt;/code&gt; file explorer built within vim to explore files, use &lt;code&gt;:term&lt;/code&gt; for a terminal within your neovim, and create splits (&lt;code&gt;C-w&lt;/code&gt;) and tabs (&lt;code&gt;:tabnew&lt;/code&gt;). So if you have a raw server with only vim, you have most of the things that you need right there. The tools that I listed prior are super useful and make things a lot easier and better, but if you want to keep it minimal, a lot can be done with just vim.
&lt;strong&gt;Remember that more complete multiplexers like &lt;code&gt;tmux&lt;/code&gt; also have sessions, meaning you can disconnect from the SSH and reconnect later and don&#39;t lose any work.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;consider-podman-instead-of-docker&quot;&gt;Consider podman instead of docker&lt;a class=&quot;zola-anchor&quot; href=&quot;#consider-podman-instead-of-docker&quot; aria-label=&quot;Anchor link for: consider-podman-instead-of-docker&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://podman.io/&quot;&gt;Podman&lt;/a&gt; has a lot of benefits over docker.
I haven&#39;t tested podman in serious conditions yet, but it seems like it is pretty mature. If feasible, it is a more desirable option.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.redhat.com/en/blog/5-reasons-choose-podman-2025&quot;&gt;5 reasons to choose podman in 2025 - redhat&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.geeky-gadgets.com/podman-vs-docker-comparison/&quot;&gt;podman vs docker comparison - geekygadgets&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.simplehomelab.com/docker-to-podman-migration-guide/&quot;&gt;ultimate docker to podman migration guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://developers.redhat.com/blog/2020/11/19/transitioning-from-docker-to-podman&quot;&gt;how to transition from docker to podman&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;consider-automation&quot;&gt;Consider automation&lt;a class=&quot;zola-anchor&quot; href=&quot;#consider-automation&quot; aria-label=&quot;Anchor link for: consider-automation&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;If you setup a lot of servers(I don&#39;t. Maybe 10/year) consider automating your repetitive tasks. Automation can be achieved with tools like &lt;a rel=&quot;external&quot; href=&quot;https://ansible.com&quot;&gt;Ansible&lt;/a&gt; or simple bash/sh scripts.&lt;/p&gt;
&lt;h3 id=&quot;backups-and-snapshots&quot;&gt;Backups and snapshots&lt;a class=&quot;zola-anchor&quot; href=&quot;#backups-and-snapshots&quot; aria-label=&quot;Anchor link for: backups-and-snapshots&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;You don&#39;t notice that backups are important until you need them.&lt;/p&gt;
&lt;p&gt;Try to keep the 3-2-1 principle in mind:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Three&lt;/strong&gt; copies of your data: Your three copies include your original or production data plus two more copies.&lt;/li&gt;
&lt;li&gt;On &lt;strong&gt;two&lt;/strong&gt; different media: You should store your data on two different forms of media. This means something different today than it did in the late 2000s. I’ll talk a little more about this in a bit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One&lt;/strong&gt; copy off-site: You should keep one copy of your data off-site in a remote location, ideally more than a few miles away from your other two copies.&lt;a rel=&quot;external&quot; href=&quot;https://www.backblaze.com/blog/the-3-2-1-backup-strategy/&quot;&gt;[source]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;I finally realized that for taking backups, you don&#39;t have strict how-tos. It very much depends on your use case and situation. Just be sure that you take backups from parts of the system that you can&#39;t afford to lose.&lt;/p&gt;
&lt;p&gt;You also most likely will need custom bash scripts for taking backups, depending on the services running on the server. So don&#39;t try to find a &quot;do it all&quot; tool that just magically &quot;does backups&quot;.&lt;/p&gt;
&lt;p&gt;Here are some good tools that can help the backup process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/linuxmint/timeshift&quot;&gt;timeshift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.borgbackup.org/&quot;&gt;Borg backup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

        </content>
        
    </entry>
    <entry xml:lang="en">
        <title>Understanding Sample Rate, Bit Rate And Bit Depth</title>
        <published>2024-10-01T00:00:00+00:00</published>
        <updated>2024-10-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            Alireza Alavi
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alavi.me/blog/samplerate-bitrate-bitdepth/"/>
        <id>https://alavi.me/blog/samplerate-bitrate-bitdepth/</id>
        
        
        <content type="html" xml:base="https://alavi.me/blog/samplerate-bitrate-bitdepth/">
            
            &lt;p&gt;These are my notes as a software engineer on understanding Sample rate, bit rate and bit depth.&lt;/p&gt;
&lt;p&gt;The explanations might seem incoherent at first, but I think if you read the whole post it becomes more clear.
Also read the &lt;a href=&quot;https://alavi.me/blog/samplerate-bitrate-bitdepth/#relevant-and-good-posts&quot;&gt;relevant and good posts&lt;/a&gt; for some other explanations from other perspectives.&lt;/p&gt;
&lt;p&gt;The notes are written in an outline style.&lt;/p&gt;
&lt;h2 id=&quot;our-world-is-continuous-analog&quot;&gt;Our World Is Continuous (Analog)&lt;a class=&quot;zola-anchor&quot; href=&quot;#our-world-is-continuous-analog&quot; aria-label=&quot;Anchor link for: our-world-is-continuous-analog&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Sounds in our world are analog. The sounds that you hear or the sounds that you make are all analog signals&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Analog signals happen in &lt;strong&gt;continuous&lt;/strong&gt; time. Meaning, if we want to draw a diagram of the signal representing it&#39;s intensity on one axis and time on another (A signal is a series of changes in time), the diagram would look like this:
&lt;img src=&quot;https://alavi.me/blog/samplerate-bitrate-bitdepth/./assets/Analog-Signal-433185949.png&quot; alt=&quot;What is Analog Signal? - ELE Times&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In order for these signals to be understood, used and processed in our digital devices (phones, PC, TV, etc.) they should be converted into digital signals, used within the device and then either be sent to another digital medium, or be converted to an analog signal again and then sent to an analog medium
(Digital signals are explained later).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Example from sound&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Your voice(analog) -&amp;gt; travels through air to reach microphone(analog) -&amp;gt; microphone vibrates (analog) -&amp;gt; gets converted to digital -&amp;gt; sent as digital signal to a speaker via a digital medium (digital signals on a wire)-&amp;gt; the speaker vibrates the air in a way that recreates your voice (analog) -&amp;gt; travels through air (analog) -&amp;gt; The listener&#39;s ear picks up the vibrations(analog) -&amp;gt; Signals in nervous system (?)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;markdown-alert-note&quot;&gt;
&lt;p&gt;Time, As we define it, is continuous(or as continuous as it gets) so anything happening in our world is continuous, since it happens in time.&lt;/p&gt;
&lt;p&gt;Also note that all of the things that I said might not be true, since we really don&#39;t have a concrete definition of what time is, and the line between continuity and being discrete is blurry(like most other things in our world).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;what-are-digital-signals&quot;&gt;What Are Digital Signals?&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-are-digital-signals&quot; aria-label=&quot;Anchor link for: what-are-digital-signals&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A digital signal is a type of &lt;strong&gt;discrete signal&lt;/strong&gt;(as opposed to &lt;strong&gt;continuous&lt;/strong&gt; ).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discrete signal&lt;/strong&gt;: we will ignore the continuity of time, and assume that time happens in discrete amounts. So there will be nothing there between time 1 and time 2.&lt;/li&gt;
&lt;li&gt;Now &lt;strong&gt;digital means:&lt;/strong&gt; our &lt;strong&gt;time&lt;/strong&gt; is discrete, and our &lt;strong&gt;intensities&lt;/strong&gt; are &lt;strong&gt;also&lt;/strong&gt; discrete&lt;/li&gt;
&lt;li&gt;
&lt;blockquote&gt;
&lt;p&gt;In &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Digital_signal_processing&quot;&gt;digital signal processing&lt;/a&gt;,
a digital signal is a representation of a physical(analog) signal that is
sampled and quantized. A digital signal is an abstraction that is
discrete in time and amplitude. [1]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://alavi.me/blog/samplerate-bitrate-bitdepth/./assets/Digital.signal.discrete.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;See how in the above diagram, no values can exist between the defined values.&lt;/p&gt;
&lt;h2 id=&quot;how-to-convert-analog-signal-to-digital-signal&quot;&gt;How To Convert Analog Signal To Digital Signal&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-to-convert-analog-signal-to-digital-signal&quot; aria-label=&quot;Anchor link for: how-to-convert-analog-signal-to-digital-signal&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Now, With that explanation of digital signals, we can understand the basics of how we convert analog signal to digital:
&lt;ul&gt;
&lt;li&gt;In &lt;strong&gt;discrete time intervals&lt;/strong&gt; (for example every second), we will &lt;strong&gt;sample&lt;/strong&gt; our signal. Meaning, we will measure it at that moment.
This is called our &lt;strong&gt;sample rate&lt;/strong&gt; (here our sample rate is 1 sample per second)&lt;/li&gt;
&lt;li&gt;Now that we took the sample, since our original signal is continuous, our measured intensity value is a Real number($\mathbb{R}$) and can be something like 0.333333.... or $\pi$ (3.14...),
we cannot use that number in our digital system! So we have to round it to a &lt;strong&gt;defined value&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Imagine our digital signal graph as a checkered graph.
The vertical lines are your time intervals (sample rate as we defined earlier) and the vertical lines are your defined values, to which you will round your intensities.
The more dense the vertical lines are, the higher your sample rate.
And the more dense your horizontal lines, the higher accuracy for rounding your intensities you have (&lt;strong&gt;Bit depth&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analog signal:&lt;/strong&gt;
&lt;img src=&quot;https://alavi.me/blog/samplerate-bitrate-bitdepth/./assets/analog.png&quot; alt=&quot;graph of an analog signal&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Digital signal with lower bit depth and sample rate&lt;/strong&gt; ( we consider the thicker lines as our bit depth and sample rate values in this example ):
&lt;img src=&quot;https://alavi.me/blog/samplerate-bitrate-bitdepth/./assets/digital-lowrate.png&quot; alt=&quot;graph of digital signal with lower rate&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Digital signal with higher bit depth and sample rate&lt;/strong&gt; ( all lines are considered as our bit depth and sample rate values):
&lt;img src=&quot;https://alavi.me/blog/samplerate-bitrate-bitdepth/./assets/digital-highrate.png&quot; alt=&quot;graph of analog signal with high rate&quot; /&gt;&lt;/li&gt;
&lt;li&gt;Notice how as we raise the sample rate and bit depth, we get closer to our actual analog signal
&lt;img src=&quot;https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fwoodandfirestudio.com%2Fwp-content%2Fuploads%2F2023%2F05%2Fen1-1.jpg&amp;amp;f=1&amp;amp;nofb=1&amp;amp;ipt=6bd309b419d31bfab05f6a8fdd79afa224a6c00e139b3da4335d9660d2f3eca6&amp;amp;ipo=images&quot; alt=&quot;Sampling rate &amp;amp; bit depth explained in simple terms&quot; /&gt;
&lt;img src=&quot;https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Funison.audio%2Fwp-content%2Fuploads%2FSample-Rate-vs-Bit-Depth.png.webp&amp;amp;f=1&amp;amp;nofb=1&amp;amp;ipt=04967924bc439f8e694c41b30e6649a8405f527ae835fcd0f376a03fcbb33591&amp;amp;ipo=images&quot; alt=&quot;https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Funison.audio%2Fwp-content%2Fuploads%2FSample-Rate-vs-Bit-Depth.png.webp&amp;amp;f=1&amp;amp;nofb=1&amp;amp;ipt=04967924bc439f8e694c41b30e6649a8405f527ae835fcd0f376a03fcbb33591&amp;amp;ipo=images&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-is-it-called-bit-depth&quot;&gt;Why Is It Called &quot;bit depth&quot;?&lt;a class=&quot;zola-anchor&quot; href=&quot;#why-is-it-called-bit-depth&quot; aria-label=&quot;Anchor link for: why-is-it-called-bit-depth&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A &quot;bit&quot; is the smallest value in a digital system. It&#39;s either 0 or 1&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;One bit can represent 2 values, and 2 bits can represent 4 values. The general rule is with $n$ bits we can represent $2^n$ values.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bit depth refers to &quot;how many bits do we have for the number we want to represent our intensity with?&quot; so the more bits we have, more values we can express. So our estimations of our analog signal&#39;s intensity becomes more accurate&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A 24-bit audio is more accurate in terms of the intensity of each sample than a 16-bit&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Example with color:
An image with 8-bit depth is more accurate in displaying different intensities (shades) of colors&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://alavi.me/blog/samplerate-bitrate-bitdepth/./assets/bit-depth.png&quot; alt=&quot;Demonstration of the effect of increasing bit depth in an image&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;markdown-alert-note&quot;&gt;
&lt;p&gt;We can say that:&lt;br /&gt;
if (sample_rate $\rightarrow \infty$ and bit_depth $\rightarrow \infty$) then &lt;strong&gt;Our signal is analog&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;what-is-bit-rate&quot;&gt;What Is &quot;bit rate&quot;?&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-is-bit-rate&quot; aria-label=&quot;Anchor link for: what-is-bit-rate&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;bit rate&lt;/strong&gt; (&lt;strong&gt;bitrate&lt;/strong&gt; or as a variable &lt;em&gt;R&lt;/em&gt;) is the number of &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Bit&quot;&gt;bits&lt;/a&gt; that are conveyed or processed per unit of time.[2]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;blockquote&gt;
&lt;p&gt;The bit rate is expressed in the unit &lt;strong&gt;bit per second&lt;/strong&gt; (symbol: &lt;strong&gt;bit/s&lt;/strong&gt;), often in conjunction with an &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/SI_prefix&quot;&gt;SI prefix&lt;/a&gt; such as &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Kilo-&quot;&gt;kilo&lt;/a&gt; (1 kbit/s = 1,000 bit/s), &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Mega-&quot;&gt;mega&lt;/a&gt; (1 Mbit/s = 1,000 kbit/s), &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Giga-&quot;&gt;giga&lt;/a&gt; (1 Gbit/s = 1,000 Mbit/s) or &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Tera-&quot;&gt;tera&lt;/a&gt; (1 Tbit/s = 1,000 Gbit/s).[2]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;relevant-and-good-posts&quot;&gt;Relevant And Good Posts&lt;a class=&quot;zola-anchor&quot; href=&quot;#relevant-and-good-posts&quot; aria-label=&quot;Anchor link for: relevant-and-good-posts&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; href=&quot;http://pudding.cool/2018/02/waveforms/&quot;&gt;
  Let&#39;s learn about waveforms - The pudding
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; href=&quot;https://www.waveroom.com/blog/bit-rate-vs-sample-rate-vs-bit-depth/&quot;&gt;
  Bit rate vs. Sample rate vs. Bit depth - waveroom
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; href=&quot;https://engineeryoursound.com/continuous-vs-discrete-signals-what-is-the-difference/&quot;&gt;
  Continuous vs discrete signals. What is the difference? - engineeryoursound
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; href=&quot;https://www.izotope.com/en/learn/digital-audio-basics-sample-rate-and-bit-depth.html&quot;&gt;
  Digital audio basics: sample rate and bit depth - izotope
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;sources&quot;&gt;Sources&lt;a class=&quot;zola-anchor&quot; href=&quot;#sources&quot; aria-label=&quot;Anchor link for: sources&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1: &lt;a class=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Digital_signal&quot;&gt;
Digital signal - wikipedia
&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2: &lt;a class=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Bit_rate&quot;&gt;
Bit rate - wikipedia
&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

        </content>
        
    </entry>
    <entry xml:lang="en">
        <title>Authentication and Authorization: Quick notes</title>
        <published>2024-09-14T00:00:00+00:00</published>
        <updated>2024-09-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            Alireza Alavi
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alavi.me/blog/authentication-and-authoriztion-quick-notes/"/>
        <id>https://alavi.me/blog/authentication-and-authoriztion-quick-notes/</id>
        
        
        <content type="html" xml:base="https://alavi.me/blog/authentication-and-authoriztion-quick-notes/">
            
            &lt;p&gt;These are some quick notes I took(read &quot;copy/pasted&quot;) for understanding about auth in general and,
the difference between Authentication and Authorization.&lt;/p&gt;
&lt;h2 id=&quot;what-is-authentication&quot;&gt;What Is Authentication?&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-is-authentication&quot; aria-label=&quot;Anchor link for: what-is-authentication&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;figure&gt;
  &lt;img class=&quot;&quot; alt=&quot;Authentication Diagram&quot; src=&quot;./image_1726300428498_0.png&quot; /&gt;
  &lt;figcaption&gt;
    image credit: Cloudflare
  &lt;/figcaption&gt;
&lt;figure&gt;
&lt;ul&gt;
&lt;li&gt;You go to the airport, the security guy checks your &lt;strong&gt;identification card(ID)&lt;/strong&gt; which contains an &lt;strong&gt;identity&lt;/strong&gt;. Then, the security guy checks your face or fingerprint to make sure you, are truly the owner of that identity (&lt;strong&gt;Authentication&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Authentication does not just apply to verifying human users. Computer systems also need to check servers, software, &lt;a rel=&quot;external&quot; href=&quot;https://www.cloudflare.com/learning/security/api/what-is-an-api/&quot;&gt;APIs&lt;/a&gt;, and other computers to be sure &lt;em&gt;they&lt;/em&gt; are who they &quot;say&quot; they are.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-is-authentication-used-in-a-security-context&quot;&gt;How is authentication used in a security context?&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-is-authentication-used-in-a-security-context&quot; aria-label=&quot;Anchor link for: how-is-authentication-used-in-a-security-context&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Authentication is an important part of &lt;a rel=&quot;external&quot; href=&quot;https://www.cloudflare.com/learning/access-management/what-is-identity-and-access-management/&quot;&gt;identity and access management (IAM)&lt;/a&gt;,
which dictates who can view data and what they can do with it. But it
applies to many other areas of security as well, including:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TLS:&lt;/strong&gt; Almost all major websites today support &lt;a rel=&quot;external&quot; href=&quot;https://www.cloudflare.com/learning/ssl/transport-layer-security-tls/&quot;&gt;Transport Layer Security (TLS)&lt;/a&gt;. TLS, among other functions, authenticates the identity of a web server to ensure user devices do not load fake websites.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;APIs:&lt;/strong&gt; Most modern web applications rely on APIs in order to function. &lt;a rel=&quot;external&quot; href=&quot;https://www.cloudflare.com/application-services/solutions/api-security/&quot;&gt;Properly secured APIs&lt;/a&gt; authenticate both endpoints of the API integration in order to prevent attacks directed at those APIs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email:&lt;/strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https://www.cloudflare.com/learning/email-security/what-is-email/&quot;&gt;Emails&lt;/a&gt; are authenticated using a process called &lt;a rel=&quot;external&quot; href=&quot;https://www.cloudflare.com/learning/dns/dns-records/dns-dkim-record/&quot;&gt;DomainKey Identified Mail (DKIM)&lt;/a&gt;.
DKIM helps ensure email messages come from servers that are allowed to
use the domain (e.g. @cloudflare.com) that the email comes from.
Non-authenticated email messages are likely to end up in &lt;a rel=&quot;external&quot; href=&quot;https://www.cloudflare.com/learning/email-security/how-to-stop-spam-emails/&quot;&gt;spam&lt;/a&gt; folders&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;authentication-vs-authorization&quot;&gt;Authentication vs. Authorization&lt;a class=&quot;zola-anchor&quot; href=&quot;#authentication-vs-authorization&quot; aria-label=&quot;Anchor link for: authentication-vs-authorization&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;While authentication is concerned with verifying identity, authorization
is concerned with permissions, or what someone is allowed to do once
they gain access to a protected system or resource.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Authentication&lt;/th&gt;&lt;th&gt;Authorization&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;users or persons are verified.&lt;/td&gt;&lt;td&gt;users or persons are validated.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;It is done before the authorization process.&lt;/td&gt;&lt;td&gt;is done after the authentication process.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;It needs usually the user’s login details.&lt;/td&gt;&lt;td&gt;While it needs the user’s privilege or security levels.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;determines whether the person is user or not.&lt;/td&gt;&lt;td&gt;determines &lt;strong&gt;What permission does the user have?&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Password, Paswordless Authentication, 2FA/MFA (Two-Factor Authentication / Multi-Factor Authentication), Single sign-on (SSO)&lt;/td&gt;&lt;td&gt;Role based access control (RBAC), Jason Web Token (JWT), SAML, OpenID, OAuth&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;what-is-identity-in-the-context-of-computing&quot;&gt;What is identity in the context of computing?&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-is-identity-in-the-context-of-computing&quot; aria-label=&quot;Anchor link for: what-is-identity-in-the-context-of-computing&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A person&#39;s entire identity cannot be uploaded and stored in a computer, so &quot;identity&quot; in a computing context means a certain set of properties that can be conveniently measured and recorded digitally.&lt;/li&gt;
&lt;li&gt;To verify identity, a computer system will assess a user for characteristics that are specific to them. (authentication factors)
&lt;ul&gt;
&lt;li&gt;Something the user knows (e.g. a password)&lt;/li&gt;
&lt;li&gt;Something the user has (e.g. a soft token or hard token)&lt;/li&gt;
&lt;li&gt;Something the user is (e.g. fingerprint, face, biometrics)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;sources&quot;&gt;sources&lt;a class=&quot;zola-anchor&quot; href=&quot;#sources&quot; aria-label=&quot;Anchor link for: sources&quot;&gt;&lt;i class=&quot;icon&quot;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.cloudflare.com/learning/access-management/what-is-authentication/&quot;&gt;What is Authentication - cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.cloudflare.com/learning/access-management/what-is-identity-and-access-management/&quot;&gt;What is identity and access management(IAM) - cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.geeksforgeeks.org/difference-between-authentication-and-authorization/&quot;&gt;Difference between Authorization and Authentication - Geeks For Geeks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

        </content>
        
    </entry>
    <entry xml:lang="en">
        <title>How to record meetings with high quality with light software on Linux (Easyeffects + SSR)</title>
        <published>2024-08-28T00:00:00+00:00</published>
        <updated>2024-08-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            Alireza Alavi
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alavi.me/blog/easyeffects-with-simplescreenrecorder/"/>
        <id>https://alavi.me/blog/easyeffects-with-simplescreenrecorder/</id>
        
        
        <content type="html" xml:base="https://alavi.me/blog/easyeffects-with-simplescreenrecorder/">
            
            &lt;p&gt;NOTE: Helvum is a tool for &lt;a rel=&quot;external&quot; href=&quot;https://www.pipewire.org/&quot;&gt;Pipewire&lt;/a&gt; so this doesn&#39;t apply
to systems that only use PulseAudio.&lt;/p&gt;
&lt;p&gt;I was having problems with using &lt;a rel=&quot;external&quot; href=&quot;https://github.com/MaartenBaert/ssr&quot;&gt;Simple Screen Recorder(SSR)&lt;/a&gt;
for recording meetings. Either the input voice from my microphone wouldn&#39;t be recorded,
or the system sound from my sound card wouldn&#39;t be recorded.&lt;/p&gt;
&lt;p&gt;I fixed it by using &lt;a rel=&quot;external&quot; href=&quot;https://gitlab.freedesktop.org/pipewire/helvum&quot;&gt;Helvum&lt;/a&gt; to connect
the output of my microphone, directly to the input of SSR.&lt;/p&gt;
&lt;p&gt;And while at it, why not use &lt;a rel=&quot;external&quot; href=&quot;https://github.com/wwmm/easyeffects&quot;&gt;Easyeffects&lt;/a&gt;
to get a good quality recording?&lt;/p&gt;
&lt;p&gt;My preferred recording setup:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set input profile of SSR &amp;gt; Audio input &amp;gt; Backend: PulseAudio , Source: Monitor of Built-in Audio Analog Stereo (or monitor of your preferred output device)&lt;/li&gt;
&lt;li&gt;For meetings. I also like to scale to video down. More than HD is overkill for a meeting or conference recording in most cases.&lt;/li&gt;
&lt;li&gt;Set Output profile of SSR &amp;gt; Video &amp;gt; Codec: Other &amp;gt; Codec name: libx265 (the default is H.246)&lt;/li&gt;
&lt;li&gt;Connect &quot;Easyeffect Source&quot; capture channels to &quot;SimpleScreenRecorder&quot; input channels in Helvum&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now the recording consists of your enhanced(denoised, reverb, pitch corrected or whatever you like),
plus the sounds coming from your system(your peers talking in a meeting or discord, your game, etc.)&lt;/p&gt;
&lt;p&gt;Here is how it looks in Helvum:&lt;/p&gt;
&lt;img class=&quot;&quot; alt=&quot;Image of my Helvum patchbay for achieving this setup&quot; src=&quot;Screenshot_2024-08-28_11-51-17.png&quot; /&gt;
&lt;p&gt;NOTE: I installed Helvum from the arch repos but the recommended way(due to Helvum&#39;s docs) is flatpak.&lt;/p&gt;
&lt;p&gt;NOTE: I use &quot;Deep Noise Remover(&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Rikorose/DeepFilterNet&quot;&gt;DeepFilterNet&lt;/a&gt;)&quot; in Easyeffects for noise canceling. It works really good, specially in
very noisy environments. I installed it using using arch&#39;s &lt;a rel=&quot;external&quot; href=&quot;https://aur.archlinux.org/packages/libdeep_filter_ladspa-bin&quot;&gt;AUR package&lt;/a&gt;
but there are other ways to install it (&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Rikorose/DeepFilterNet/blob/main/ladspa/README.md&quot;&gt;docs&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;I don&#39;t think this is necessarily the best way to record things, but it works well enough for me.
SSR is very lightweight compared to things like OBS, and Easyeffects is great for controlling and enhancing
the sound of your input and output sounds.&lt;/p&gt;

        </content>
        
    </entry>
</feed>
