<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Arto&#x27;s place on the internet</title>
    <link rel="self" type="application/atom+xml" href="https://gahr.io/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://gahr.io"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2025-04-23T00:00:00+00:00</updated>
    <id>https://gahr.io/atom.xml</id>
    <entry xml:lang="en">
        <title>Computer Networking: A Gentle Introduction</title>
        <published>2025-04-23T00:00:00+00:00</published>
        <updated>2025-04-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Arto Gahr
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gahr.io/blog/networking-guide/"/>
        <id>https://gahr.io/blog/networking-guide/</id>
        
        <content type="html" xml:base="https://gahr.io/blog/networking-guide/">&lt;p&gt;Computer networking is often more complicated than expected, but just learning the basics can help many of y&#x27;all in your development journeys. Even though I do different things these days, I have a background and certificates in networking, so might as well talk about it :)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-network-knowledge-matters&quot;&gt;Why Network Knowledge Matters&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Troubleshoot problems faster&lt;&#x2F;li&gt;
&lt;li&gt;Make better architectural decisions&lt;&#x2F;li&gt;
&lt;li&gt;Understand security implications&lt;&#x2F;li&gt;
&lt;li&gt;Communicate effectively with network teams&lt;&#x2F;li&gt;
&lt;li&gt;Optimize application performance&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;the-basics-and-the-why&quot;&gt;The basics, and the why&lt;&#x2F;h2&gt;
&lt;p&gt;There are many concepts in there, but an important part of teaching is knowing what to leave out. I could preach to you about the layers of OSI or TCP&#x2F;IP models (popular topics), but I don&#x27;t think you actually need to know about them.&lt;&#x2F;p&gt;
&lt;p&gt;The point of networking is to have computers be able to talk to each other. It is a desired ability for computers, otherwise they get lonely.&lt;&#x2F;p&gt;
&lt;p&gt;You can, actually, just connect an ethernet cable between two laptops, and have them communicate, send data etc. It&#x27;s that simple.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;The&lt;&#x2F;em&gt; protocol for network communication these days is called &lt;em&gt;Internet Protocol&lt;&#x2F;em&gt; (a.k.a. IP). If a physical connection is established between computers (be it a direct cable, a connection through switch, or a remoter connection through routers, or a remoter-er connection through layers of VPNs), IP addresses will act as a &quot;logical home address&quot; of the computers, so they know where to send the packets to. There are also MAC addresses, which are actual burned-in physical addresses of your network adapters, and are specific to your device in your local physical network. IP addresses on the other hand, are designed to be dynamic and easily changeable.&lt;&#x2F;p&gt;
&lt;p&gt;There are 4294967296 possible IP addresses in the 4th version (de-facto version still, unfortunately) of the protocol (called IPv4). Spoiler alert, there are way more connected devices than that now. Therefore it has become necessary to segregate networks into local networks and have a gateway to connect them to the world, which is usually handled by your router (will get into the devices later).&lt;&#x2F;p&gt;
&lt;p&gt;As a rule-of-thumb, any IP address that looks like:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;10.x.x.x (a.k.a. anything that starts with 10)&lt;&#x2F;li&gt;
&lt;li&gt;172.16.x.x - 172.32.x.x&lt;&#x2F;li&gt;
&lt;li&gt;192.168.x.x (most popular in home networks)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;... are defined as local IP addresses, and aren&#x27;t usable in the global internet.&lt;&#x2F;p&gt;
&lt;p&gt;If you check your IP address in your device, you&#x27;ll see that you have an IP address from one of those, so how come you&#x27;re able to connect to internet? Well your ISP (Internet Service Provider, e.g. Vodafone) gives &lt;em&gt;your router&lt;&#x2F;em&gt; a single &lt;em&gt;public&lt;&#x2F;em&gt; IP address, and anything that is behind it gets routed (get it?) through it.&lt;&#x2F;p&gt;
&lt;p&gt;As a consequence of this, you aren&#x27;t able to just give your public IP address to anyone and have them directly connect to you. There are ways to get around it using stuff like port forwarding if you&#x27;re lucky, but probably you are not (look up CGNAT if you want to get angry).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ipv6&quot;&gt;IPv6&lt;&#x2F;h3&gt;
&lt;p&gt;To mitigate these issues, a new protocol was defined, that has 128 bits of address space instead of 32. This means every screen pixel in every iPhone in the world could have its own &lt;em&gt;public&lt;&#x2F;em&gt; IP address and we&#x27;d still have more than enough addresses left over—by a margin of over 10^23 times. Therefore no advanced routing, no NAT etc. shenanigans are needed, and networking should be much simpler.&lt;&#x2F;p&gt;
&lt;p&gt;So why wasn&#x27;t I talking about it? Well outside of mobile carrier networks, it still hasn&#x27;t taken off unfortunately. A big reason is that we&#x27;ve lost the ability to just say and remember the addresses out loud. Here&#x27;s what an IPv6 address looks like: &lt;code&gt;2001:0db8:85a3:0000:0000:8a2e:0370:7334&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;subnetting&quot;&gt;Subnetting&lt;&#x2F;h3&gt;
&lt;p&gt;Those numbers you often see after IP address spaces like (192.168.1.1**&#x2F;24**) define the subnet of a specific IP address, or in other words, the range of the IP addresses this specific IP belongs to. Can also be used to define the range itself. You can read more about the math &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Subnet&quot;&gt;here&lt;&#x2F;a&gt;.&lt;br &#x2F;&gt;
TL;DR: use &#x2F;24.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dhcp&quot;&gt;DHCP&lt;&#x2F;h2&gt;
&lt;p&gt;So if there are millions of IP Addresses, how do you know which one you should use for your computer? Well you don&#x27;t silly, the Dynamic Host Configuration Protocol does it for you. In every network, there&#x27;s (usually) (hopefully) one DHCP server, that knows the particular IP subnet that&#x27;s being used there. When a device joins a physical network (Ethernet cable, Wi-Fi etc.), it shouts to everyone calling &quot;HEY Y&#x27;ALL, I&#x27;M NEW HERE, Y&#x27;ALL GOT ANY MORE OF THEM IP ADDRESSES?&quot;. It&#x27;s the DHCP server&#x27;s job to find an available address from the pool, and reply saying &quot;Hey man, I got you, here&#x27;s 10.0.15.28&#x2F;24, does it look good to you?&quot;. Your device will agree, and voila, you have yourself an IP address now. This is also how your router gets its public IP address from your ISP.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dns&quot;&gt;DNS&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;DNS = Domain Name System&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;DNS is every network administrator&#x27;s favorite technology, and it never causes any problems whatsoever. Here&#x27;s a popular haiku about it:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;gahr.io&#x2F;blog&#x2F;networking-guide&#x2F;dns-haiku.jpg&quot; alt=&quot;DNS Haiku&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Every website you visit is hosted on a server somewhere, and to get to it you need to know its IP address. Ever noticed that you don&#x27;t actually need to type 151.101.65.140 to go to reddit.com? Turns out it is useful to have human-readable dynamic names for IP addresses, and that&#x27;s what DNS does.&lt;&#x2F;p&gt;
&lt;p&gt;Whenever your computer would like to translate a domain name to an IP address, it will send a DNS request to your DNS server, who is supposed to reply with the address if it knows it. What happens if it doesn&#x27;t? Well there&#x27;s this granddaddy of all DNS servers all the way up the chain who knows where to ask for every public address ever. DNS servers are globally organized in a tree structure, so your DNS request keeps following the chain all the way up until an answer is found, or fails.&lt;&#x2F;p&gt;
&lt;p&gt;Usually the DHCP server tells you the IP of the DNS server you&#x27;re supposed to use in that network, but you can also just configure it manually. You can use 8.8.8.8 (Google&#x27;s DNS server) and&#x2F;or 1.1.1.1 (Cloudflare) if you want the least headaches, or 9.9.9.9 (QuadDNS) if you&#x27;d like more privacy.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ports&quot;&gt;Ports&lt;&#x2F;h2&gt;
&lt;p&gt;This is another important concept. Turns out people might want to run more than one application on their computers (shocking, I know). So when a network packet comes in to the computer&#x27;s network interface, how does it know which application is supposed to receive it?&lt;&#x2F;p&gt;
&lt;p&gt;To this effort, every network interface has a concept of 65535 ports, each of which can be used for a separate connection. One application can bind to itself many ports, but one port can be bound by only a single application process at a time.&lt;&#x2F;p&gt;
&lt;p&gt;The HTTPS protocol usually uses the port 443, for example. It doesn&#x27;t have to, but that&#x27;s the standard, so your browser assumes it when you type https:&#x2F;&#x2F; in front of the url. The end result of all of this is that you can just type in reddit.com and go to reddit, instead of https:&#x2F;&#x2F;151.101.65.140:443. Most browsers will assume HTTPS instead of HTTP these days.&lt;&#x2F;p&gt;
&lt;p&gt;Other popular ports include 80 for HTTP, 22 for SSH, 3389 for RDP, 53 for DNS, and etc.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-devices&quot;&gt;The devices&lt;&#x2F;h2&gt;
&lt;p&gt;It can be helpful to know about your network devices and what they do as well. The most common device is a router, also incorrectly called a modem a lot of the times, but you might also have heard of switches, firewalls, load balancers etc. Here&#x27;s what they do:&lt;&#x2F;p&gt;
&lt;h4 id=&quot;modems-cables&quot;&gt;Modems, cables&lt;&#x2F;h4&gt;
&lt;p&gt;By itself this isn&#x27;t strictly even a networking device, but the purpose of this is to convert analog signals to 1s and 0s so that they can be understood by digital devices. They&#x27;re a relic from the times we used phone networks&#x27; cabling to carry computer network signals, not needed in most modern installations where the cables carry digital signals directly. Those cables are usually called Ethernet cables, but technically Ethernet is just a protocol, and they&#x27;re called twisted pair cables with RJ45 terminations. Usually any cable that has CAT5e is good enough for most people, but CAT6 is recommended if you want best performance. Modern networks also may use fiber-optic cables, in which signals are transmitted as light, not electrical voltage. Much more reliable over long distances and allows for much faster speeds, but is usually more expensive.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;routers&quot;&gt;Routers&lt;&#x2F;h4&gt;
&lt;p&gt;These are the real heroes of the internet, as it&#x27;s their job to deal with IP packets and &lt;em&gt;route&lt;&#x2F;em&gt; them wherever they need to go. They have special protocols between them, which means they can auto-update routing tables and the end result is that you can just connect to anywhere in the world. Internet is amazing, no?&lt;&#x2F;p&gt;
&lt;h4 id=&quot;wi-fi-access-points&quot;&gt;Wi-Fi Access Points&lt;&#x2F;h4&gt;
&lt;p&gt;These devices are fancy antennas with some smarts built into them, and they allow you to connect to a network using Wi-Fi. Enterprise ones even let you keep the same connection when you move around, they talk in-between themselves to automatically switch your active connection. Once you know about them, you start to see them everywhere :)&lt;&#x2F;p&gt;
&lt;h4 id=&quot;firewalls&quot;&gt;Firewalls&lt;&#x2F;h4&gt;
&lt;p&gt;Again, it turns out, that there are some really nasty people in the world and they might have less-than-honorable intentions about your devices and your data. So we had to put firewalls in front of our internet-facing devices. They allow you to restrict the flow of packets in any way you&#x27;d like. Usually they&#x27;re used to allow internet access outside, but prevent outside people from directly accessing your devices inside. They can be a pain, but a necessary one. They can work based on IP addresses and&#x2F;or ports and&#x2F;or more identifying information, so you&#x27;d check your firewall or the relevant team if you&#x27;re not able to access something that you should be able to, for example.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;switches&quot;&gt;Switches&lt;&#x2F;h4&gt;
&lt;p&gt;These are the traffic cops of your local network. While routers connect different networks together, switches connect devices within the same network, usually by giving you a lot of ethernet ports. They&#x27;re smart enough to learn which device is connected to which port and only send data where it needs to go, unlike old &quot;hubs&quot; that broadcast to everyone. It&#x27;s always a good idea to use a switch to connect devices together whenever you have the option, instead of using Wi-Fi. Thing about Wi-Fi is that it&#x27;s a shared medium, which means the air time is divided between all the devices that are connected. This means, more devices using Wi-Fi, less connection everyone gets.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;appendix-naming&quot;&gt;Appendix: Naming&lt;&#x2F;h4&gt;
&lt;p&gt;What people call &quot;Modems&quot; in their home these days are actually a combination of these five. But they&#x27;re &lt;em&gt;mostly&lt;&#x2F;em&gt; routers, so it&#x27;s more appropriate to call them that :) Or call them a Router&#x2F;Modem&#x2F;Access Point&#x2F;Firewall&#x2F;Switch combo if you want, I&#x27;m not your mom.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;essential-network-diagnostic-commands&quot;&gt;Essential Network Diagnostic Commands&lt;&#x2F;h2&gt;
&lt;p&gt;I would be sad if you didn&#x27;t leave this article with some practical knowledge too. So here are some of the most used network troubleshooting commands that I hope will help you:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ping&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
Use when you want to test if you can reach something&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;ping&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; google.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;Tests basic connectivity&lt;&#x2F;li&gt;
&lt;li&gt;Measures round-trip time&lt;&#x2F;li&gt;
&lt;li&gt;Identifies packet loss&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;traceroute&#x2F;tracert&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
Use when you want to trace the route of your packets to a particular destination&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# On Linux&#x2F;macOS&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;traceroute&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; google.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# On Windows&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;tracert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; google.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;Shows network path&lt;&#x2F;li&gt;
&lt;li&gt;Identifies where delays occur&lt;&#x2F;li&gt;
&lt;li&gt;Highlights routing issues&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;nslookup&#x2F;dig&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
Use when you want to manually ask for the IP address behind a domain name&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# On Linux&#x2F;macOS&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;dig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; google.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# On Windows&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;nslookup&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; google.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;Queries DNS servers&lt;&#x2F;li&gt;
&lt;li&gt;Shows DNS records&lt;&#x2F;li&gt;
&lt;li&gt;Helps debug DNS issues&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;netstat&#x2F;ss&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
Use when you would like to check what ports are open and&#x2F;or what process is using a specific port&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# On Linux&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;ss&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; -tuln&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# On Windows&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;netstat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; -an&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; findstr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; LISTEN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;Shows active connections&lt;&#x2F;li&gt;
&lt;li&gt;Identifies listening ports&lt;&#x2F;li&gt;
&lt;li&gt;Helps diagnose socket issues&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;more-advanced-network-capture&quot;&gt;More advanced: Network Capture&lt;&#x2F;h3&gt;
&lt;p&gt;You use these when you want to actually capture the packets going through, useful for application troubleshooting and&#x2F;or hacking.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;tcpdump&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# On Linux&#x2F;macOS&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; tcpdump -i eth0 host&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 192.168.1.5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; and port&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 80&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;Captures packets for analysis&lt;&#x2F;li&gt;
&lt;li&gt;Can filter by host, port, protocol&lt;&#x2F;li&gt;
&lt;li&gt;Lightweight, available on most systems&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Wireshark&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;GUI-based packet analyzer&lt;&#x2F;li&gt;
&lt;li&gt;Deep inspection capabilities&lt;&#x2F;li&gt;
&lt;li&gt;Powerful filtering and visualization&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;common-networking-issues-solutions&quot;&gt;Common Networking Issues &amp;amp; Solutions&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;it-works-on-my-machine&quot;&gt;&quot;It works on my machine&quot;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Check if both environments have the same network configurations&lt;&#x2F;li&gt;
&lt;li&gt;Verify firewall rules aren&#x27;t different&lt;&#x2F;li&gt;
&lt;li&gt;Ensure DNS resolution works the same way&lt;&#x2F;li&gt;
&lt;li&gt;Look for proxy settings that might differ&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;connection-timeouts&quot;&gt;Connection Timeouts&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;First, check if the service is actually running&lt;&#x2F;li&gt;
&lt;li&gt;Verify the port is correct and open&lt;&#x2F;li&gt;
&lt;li&gt;Check if a firewall is blocking the connection&lt;&#x2F;li&gt;
&lt;li&gt;Make sure your DNS isn&#x27;t lying to you&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h4 id=&quot;vpns-not-just-for-netflix&quot;&gt;VPNs: Not Just for Netflix&lt;&#x2F;h4&gt;
&lt;p&gt;Virtual Private Networks extend private networks across public ones. They&#x27;re not just for watching region-locked content or downloading totally legal Linux ISO&#x27;s (though I won&#x27;t judge).&lt;&#x2F;p&gt;
&lt;p&gt;When you&#x27;re working remotely, VPNs are often your ticket to accessing internal resources. Just be prepared for that speed hit—encryption ain&#x27;t free, performance-wise.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;cloud-networking&quot;&gt;Cloud Networking&lt;&#x2F;h4&gt;
&lt;p&gt;These days, most developers are deploying to the cloud and the beauty of cloud networking is you can define your entire network infrastructure as code. No more begging the network team to open a port!&lt;&#x2F;p&gt;
&lt;h4 id=&quot;container-networking&quot;&gt;Container Networking&lt;&#x2F;h4&gt;
&lt;p&gt;If you&#x27;re using Docker or Kubernetes (my condolences), networking gets... interesting.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Bridge Networks: Default for containers, creates a private network&lt;&#x2F;li&gt;
&lt;li&gt;Host Networks: Containers share the host&#x27;s network namespace&lt;&#x2F;li&gt;
&lt;li&gt;Overlay Networks: Allow containers on different hosts to communicate&lt;&#x2F;li&gt;
&lt;li&gt;Service Discovery: How containers find each other automatically&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Remember that containers are ephemeral—they come and go—so hardcoding IP addresses is a recipe for disaster. Use DNS instead.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;security-considerations&quot;&gt;Security Considerations&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;d be remiss not to mention security, since the internet is basically the wild west with better graphics. A good rule of thumb: if you wouldn&#x27;t shout it across a crowded coffee shop, it shouldn&#x27;t travel over the network unencrypted. But these days most of security is handled for you, so if you see the little lock icon in your browser bar, it means you&#x27;re using HTTPS, and no one, including the coffee shop owner, your ISP, your government etc. can see the contents of the communication you&#x27;re making with that website. What they &lt;em&gt;can&lt;&#x2F;em&gt; tell is that you are accessing that website, since DNS is usually unencrypted.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;wrapping-up&quot;&gt;Wrapping Up&lt;&#x2F;h3&gt;
&lt;p&gt;Networking can seem like dark magic sometimes, but understanding these basics will save you countless hours of frustration. Next time something&#x27;s not connecting, you&#x27;ll have a better idea of where to look.
Remember, the network is always guilty until proven innocent. It&#x27;s the first thing to blame and often the last thing checked—but with these tools in your belt, you&#x27;ll be the one saying &quot;have you tried checking the firewall?&quot; instead of banging your head against the keyboard.&lt;&#x2F;p&gt;
&lt;p&gt;Got questions? Google them! Or ask a GPT model if you don&#x27;t care about the environment. Lastly, feel free to reach out to me for anything :)&lt;&#x2F;p&gt;
&lt;p&gt;Happy networking!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Best (Non-Living) Friend</title>
        <published>2024-07-19T00:00:00+00:00</published>
        <updated>2024-07-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Arto Gahr
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gahr.io/blog/my-best-non-living-friend/"/>
        <id>https://gahr.io/blog/my-best-non-living-friend/</id>
        
        <content type="html" xml:base="https://gahr.io/blog/my-best-non-living-friend/">&lt;p&gt;Hi! This is my keyboard:&lt;&#x2F;p&gt;
&lt;img src=&quot;sk61.webp&quot; width=&quot;75%&quot; height=&quot;auto&quot; title=&quot;es key siksti van&quot;&gt;
&lt;p&gt;It... has issues, but still I love to the moon.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s a Skyloong (Epomaker?) SK61, and there&#x27;s nothing special about it. Plastic case, cheap PCB and chip, weird firmware, no wireless or anything. Gateron Optical switches (a mix of browns for the letters and reds for the surroundings). I got it a few years ago second hand, from &lt;a href=&quot;https:&#x2F;&#x2F;sahibinden.com&quot;&gt;the Turkish equivalent of Craigslist.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The stabilizers were cut down with my wife&#x27;s nail cutters. They were lubed with some Krytox I got for free in a keyboard meetup, and filled in with some other thicker lube that came free with my 3D Printer. Modded with cheap Flea Market™ bandaids. I used some weird sticker sided (?) foamish thing I found around the house to fill in the void, I don&#x27;t even know where those came from. The case, keycaps, PCB, midplate and all are scratched and damaged beyond repair. Half the feet are missing (replaced with hot glue of course). The USB-C port is loose. The chinesium software for it doesn&#x27;t even work under Linux. It has RGB LEDs, but I almost never use it. It doesn&#x27;t sound or feel &lt;i&gt;that&lt;&#x2F;i&gt; good either.&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#sound-feel&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Yet I love this thing to the moon. It was with me through every important career change. It was there while I was getting married. It was used to write every article, important piece of email, every AoC challenge, Jira ticket response, every corny joke that I made.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;artogahr&#x2F;dotfiles&#x2F;blob&#x2F;master&#x2F;gk6x&#x2F;config.txt&quot;&gt;The keymap configuration I made for it&lt;&#x2F;a&gt; is so perfect, it has become an extension of myself, and I&#x27;m very efficient with it. Despite all the abuse, everything Just Works™, capiche?&lt;&#x2F;p&gt;
&lt;p&gt;I still take it with me to work every time. No protection or anything, just chuck it in there, y&#x27;know? Same with a Logitech G603 that&#x27;s also a Turkish™ Craigslist™ special™, and that one&#x27;s been through even worse, having gotten repaired at least 3 times by yours truly.&lt;&#x2F;p&gt;
&lt;p&gt;But they&#x27;re beautiful in their own way, I honestly never want to replace them. I&#x27;m afraid I&#x27;ll never love the next thing as much...&lt;&#x2F;p&gt;
&lt;img title=&quot;Look how beautiful they look together&quot; src=&quot;keyboard-mouse.png&quot; alt=&quot;beauties&quot;&gt;
&lt;hr&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;sound-feel&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;It honestly sounds and feels really good &lt;i&gt;for me&lt;&#x2F;i&gt; though. I can not understate how lucky I feel to get a keyboard that satisfies me this much without going down the &lt;a href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;MechanicalKeyboards&#x2F;top&#x2F;?sort=top&amp;t=all&quot;&gt;Rabbit Hole™&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>3D Printers: A Gentle Introduction</title>
        <published>2023-08-07T00:00:00+00:00</published>
        <updated>2023-08-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Arto Gahr
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gahr.io/blog/3d-printers/"/>
        <id>https://gahr.io/blog/3d-printers/</id>
        
        <content type="html" xml:base="https://gahr.io/blog/3d-printers/">&lt;p&gt;Hello! I&#x27;m Arto, and I&#x27;ve been into 3D printers as a hobby since 2018. During this time I&#x27;ve gotten many requests from people who want to get into the hobby or just want to print something, so I decided to write an article about it.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll try to keep this as short as possible. This is not a comprehensive guide at all, but a first stop to get you started. Here&#x27;s a brief list of important topics if you want to jump around:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;gahr.io&#x2F;blog&#x2F;3d-printers&#x2F;#how-3d-printers-work&quot;&gt;How 3D Printers Work&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;gahr.io&#x2F;blog&#x2F;3d-printers&#x2F;#getting-started&quot;&gt;What you need to get started&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;gahr.io&#x2F;blog&#x2F;3d-printers&#x2F;#slicers&quot;&gt;How to slice an STL file&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;gahr.io&#x2F;blog&#x2F;3d-printers&#x2F;#materials&quot;&gt;Which material to pick&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;gahr.io&#x2F;blog&#x2F;3d-printers&#x2F;#slicer-settings&quot;&gt;What to change in the slicer&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;gahr.io&#x2F;blog&#x2F;3d-printers&#x2F;#important-details&quot;&gt;Things you need to pay attention to&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;gahr.io&#x2F;blog&#x2F;3d-printers&#x2F;#faq&quot;&gt;Frequently Asked Questions&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;how-3d-printers-work&quot;&gt;How 3D Printers Work&lt;&#x2F;h3&gt;
&lt;p&gt;There quite are a few types of 3D printers available, but by far the most common and the one we&#x27;re going to focus on is FDM Printers. They generally have some mechanism to push plastic out of a hot nozzle and print something layer-by-layer. Here is a picture of Ender 3, a very popular entry-level FDM printer:&lt;&#x2F;p&gt;
&lt;figure&gt;
    &lt;img src=&quot;ender3.webp&quot; alt=&quot;Ender 3 Pro&quot;&gt;
    &lt;figcaption&gt;Ender 3 Pro, a very popular, cheap, entry-level hobbyist 3D Printer&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;FDM Printers are remarkably simple machines. In essence, they&#x27;re basically a combination of motors, belts and screws, controlled by a PCB that can only follow very simple instructions. They print one thin layer of plastic on the print surface, go up a tiny bit, print another thin layer of plastic, go up a tiny bit again, and so on... Imagine cutting a clay model of something into very thin horizontal slices, then putting them together again in the right order, thus constructing the original model again.&lt;&#x2F;p&gt;
&lt;p&gt;The instructions are usually in the form of a .gcode file that contains - you guessed it - GCODE. They are simple atomic instructions telling the printer to move a certain motor a certain amount, heat the nozzle to X degrees, extrude Y amount of plastic etc.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;getting-started&quot;&gt;Getting Started&lt;&#x2F;h3&gt;
&lt;p&gt;To start printing, you&#x27;ll need:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A 3D Printer (obviously)&lt;&#x2F;li&gt;
&lt;li&gt;Some filament&lt;&#x2F;li&gt;
&lt;li&gt;An SD Card (with an adapter probably)&lt;&#x2F;li&gt;
&lt;li&gt;A computer with a slicer application installed&lt;&#x2F;li&gt;
&lt;li&gt;A 3D model file of the thing you want to print (most likely an .STL file). Below are some good places to get STLs:
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;printables.com&quot;&gt;Printables&lt;&#x2F;a&gt; (my favorite)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;thingiverse.com&quot;&gt;Thingiverse&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;thangs.com&quot;&gt;Thangs&lt;&#x2F;a&gt; (indexes all sites)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Once you have all these things, and the .gcode file inside the sd-card, just plug it in the printer, select the file from the printer&#x27;s UI, and start printing!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;slicers&quot;&gt;Slicers&lt;&#x2F;h3&gt;
&lt;p&gt;To convert 3D Model files into GCODE files you&#x27;re going to need software called &quot;Slicers&quot;. They slice the file into layers, and algorithmically generate atomic GCODE instructions for them (hence the name &quot;Slicer&quot;). To simplify, there are two slicers that you need to worry about:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;If you&#x27;re using a Prusa printer: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.prusa3d.com&#x2F;page&#x2F;prusaslicer_424&quot;&gt;Prusa Slicer&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;If you&#x27;re using any other model of printer: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ultimaker.com&#x2F;software&#x2F;ultimaker-cura&#x2F;&quot;&gt;UltiMaker Cura&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Prusa&#x27;s slicer does support most other printers - and Cura also supports Prusa printers as well. Generally I suggest Cura for beginners, since its UI is easier to work with. However I can&#x27;t deny the extra features of Prusa Slicer can come handy at times :)&lt;&#x2F;p&gt;
&lt;p&gt;Both of these has similar installation procedures. Just don&#x27;t do next-next-next without looking, the pages usually have useful information and important configuration steps (In general this is a good advice for anything, never press next without checking what you&#x27;re agreeing to &#x2F; selecting).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;materials&quot;&gt;Materials&lt;&#x2F;h3&gt;
&lt;p&gt;There are a few things to look for when selecting a material. However if you&#x27;re a beginner, just go with PLA. If PLA isn&#x27;t available, PETG is your next best choice. Below I will explain general information about the most common materials and the safe spot temperatures for them. However there are many different filament manufacturers and their chemical compositions differ. Sometimes they list the best temperatures on the spool, or sometimes you can find preconfigured profiles for the brand&#x2F;model of filament in your slicer. Use these instead of below temperatures if you can.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;PLA is easy to print, requires lower temperatures, is pretty durable and cheap. However its lower glass transition temperature also means it&#x27;s not durable against heat, which means it can start losing shape in hot environments, such as under direct sunlight on a hot summer day. You can print PLA on any build surface. Good temperatures for PLA is 210°C Nozzle and 60°C build plate.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;PETG is very similar material to the PET bottles we use every day. It&#x27;s also relatively easy to print, but requires higher temperatures and therefore more durable against heat. &lt;strong&gt;DO NOT use bare smooth surfaces for PETG&lt;&#x2F;strong&gt; (such as smooth PEI, glass etc.), sometimes it sticks &lt;em&gt;too well&lt;&#x2F;em&gt; and can rip chunks off your build plate. Use textured sheets instead, or you can also use a glue stick as a middle layer if you only have smooth surfaces. Good temperatures for PETG is 240°C Nozzle and 80°C build plate.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;ABS used to be pretty popular before PETG but is infamous for being hard to print with. It likes to curl up from build surfaces and requires a heated chamber. Use PETG if you have the choice. You can print ABS on any build surface, good luck :) Good temperatures for ABS is 240°C Nozzle and 80°C build plate.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;slicer-settings&quot;&gt;Slicer Settings&lt;&#x2F;h3&gt;
&lt;p&gt;There are a few settings in your favorite slicer program that you&#x27;ll need to know about. Here are the most commonly used ones in no particular order:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nozzle Diameter&lt;&#x2F;strong&gt; - Nozzles are interchangeable, and this setting is to tell the slicer how wide the hole in your nozzle is. The most common nozzle diameters are 0.4, 0.6 and 0.25mm. The wider the nozzle, the more plastic it can push through, therefore the faster printing is. However you need a smaller nozzle diameter to print really fine details. By far the most common nozzle diameter is 0.4mm. By default most printers come with this nozzle pre-installed.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Layer height&lt;&#x2F;strong&gt; - This indicates how &quot;thick&quot; each layer is. Higher line height - faster prints but less surface detail. A good rule of thumb is to use (Nozzle diameter)&#x2F;2 for the layer height. This means for a 0.4mm nozzle, 0.2mm layer height is the usual go-to. For prints with less detail, consider slightly increasing this to reduce printing time, or vice-versa.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Infill&lt;&#x2F;strong&gt; - Usually the insides of a print isn&#x27;t full of plastic or hollow, but there is some kind of plastic pattern to give some rigidity without wasting plastic. Default patterns and infill percentages are usually fine for most people. If you need strong prints, consider increasing this. 0% infill means a hollow print, 100% means the part comes out as solid plastic with no emptiness inside. 20% is a good amount for most prints.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Support&lt;&#x2F;strong&gt; - As the printer prints each surface on top of the previous one, it&#x27;s unable to print in air. It can&#x27;t print the wing of a plane on top of air, for example. But this setting puts some plastic supports below the parts that hang in the air, and you can remove them after the print finishes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;important-details&quot;&gt;Important Details&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;clean-build-surface&quot;&gt;Clean build surface&lt;&#x2F;h4&gt;
&lt;p&gt;A dirty build surface is the most common cause of failed prints. Finger oils or other things can go between the filament and build surface, thus preventing them from sticking. Use Isopropyl Alcohol for cleaning. Or you can also just take the build plate off and use generic dish soap + warm water to clean as well, this is my preferred cleaning method.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;leveled-build-surface&quot;&gt;Leveled build surface&lt;&#x2F;h4&gt;
&lt;p&gt;Some printers have sensors to measure height of the build plate at different points. Prusa printers usually have them, and can compensate for slight differences in software. This is important as you want all of your build surface to be at the same height, so that the first layer can be properly deposited. Some other printers don&#x27;t have these sensors, and you have to manually adjust screws to make sure all the corners are at the same height. Most budget Creality Ender printers work like this. If someone has already leveled it you most probably don&#x27;t need to touch it, but if you do, your best bet is to go watch a YouTube video :)&lt;&#x2F;p&gt;
&lt;h4 id=&quot;correct-first-layer-height&quot;&gt;Correct first layer height&lt;&#x2F;h4&gt;
&lt;p&gt;As is the levelness of the bed, the Z height calibration of the nozzle is also important. Too high - and the filament won&#x27;t get squished enough and won&#x27;t stick to the surface. Too low - and the filament will push previous filament lines out - leading to inconsistent first layer surface at best or a scratched build surface at worst. Remember: the printer is a dumb machine, it will scratch, break or hit anything you tell it to!&lt;&#x2F;p&gt;
&lt;p&gt;For a printer with a Z height sensor, such as the Prusa printers, it&#x27;s usually enough to calibrate it once. For cheaper printers, you may need to level the bed and calibrate the Z offset again once in a while. There usually is a menu in most printer&#x27;s interfaces to adjust the Z offset. The Prusa MK4 can even calibrate Z height on its own!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;faq&quot;&gt;FAQ&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Have any questions? &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;artogahr.bearblog.dev&#x2F;contact-information&quot;&gt;Let me know :)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Artonet - a simple &amp; fast Mesh VPN solution</title>
        <published>2023-01-21T00:00:00+00:00</published>
        <updated>2023-01-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Arto Gahr
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gahr.io/blog/artonet-idea/"/>
        <id>https://gahr.io/blog/artonet-idea/</id>
        
        <content type="html" xml:base="https://gahr.io/blog/artonet-idea/">&lt;p&gt;This post describes an idea for a Mesh VPN (also called an Overlay VPN Network) application. Hopefully want to do as my Master&#x27;s Thesis project.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;what-is-it&quot;&gt;What is it?&lt;&#x2F;h1&gt;
&lt;p&gt;Artonet allows you to set up a virtual local network between your devices, without obstructing internet access. This network and all the traffic going between the devices is encrypted of course.&lt;&#x2F;p&gt;
&lt;p&gt;The end result is that, you and your peers can communicate to each other as if in the same local network. This can be useful if you&#x27;re trying some technology with your peers, or if you&#x27;re gaming with your friends. This also allows you to share the services you run with other people, without needing to open a public port to the internet.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Aug 2023 Update:&lt;&#x2F;em&gt;
Since I&#x27;ve thought of this idea many similar projects have also surfaced to my attention, one of the ones I like is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;netbirdio&#x2F;netbird&quot;&gt;Netbird&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;key-features&quot;&gt;Key features:&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Uses Wireguard protocol at kernel level - which means it&#x27;s faster than traditional VPN technologies&lt;&#x2F;li&gt;
&lt;li&gt;Joining is simple - you only need to point the client to the control server and enter the login password&lt;&#x2F;li&gt;
&lt;li&gt;You can set up a local DHCP and DNS server per network on the control server&lt;&#x2F;li&gt;
&lt;li&gt;You can do split tunnelling - You can either have all nodes go to internet through one node, or have the Artonet network only be used for inter-node communication&lt;&#x2F;li&gt;
&lt;li&gt;Simple - Trivially easy to set up and connect to.&lt;&#x2F;li&gt;
&lt;li&gt;Fast - Written with Rust, using speed as the first order of concern.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;comparison-to-competitors&quot;&gt;Comparison to competitors&lt;&#x2F;h2&gt;
&lt;p&gt;There are various solutions offering the same or enhanced featureset, the main thing separating Artonet from them is ease of setup, open-source + simplistic nature, and deliberate lack of features.&lt;&#x2F;p&gt;
&lt;p&gt;Some solutions like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tailscale.com&#x2F;&quot;&gt;Tailscale&lt;&#x2F;a&gt; combine the speed of Wireguard with excellent featureset within a professionally developed product, however might be too expensive for a casual user trying to set up a network with their peers. Other solutions like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.zerotier.com&#x2F;&quot;&gt;Zerotier&lt;&#x2F;a&gt; or &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vpn.net&#x2F;&quot;&gt;Hamachi&lt;&#x2F;a&gt; are also good, but they use outdated technology, are not open source, too pricy, or a combination of these.&lt;&#x2F;p&gt;
&lt;p&gt;Tailscale, along with similar competitors also use complicated authorization techniques. While this is good for security, users may prefer a more simplistic UX for simple &#x2F; not as important projects. Tailscale assumes the position of &quot;Not providing any auth at all&quot;, and leaves it to other Auth providers, thus making truly private and self-contained networks impossible.&lt;&#x2F;p&gt;
&lt;p&gt;In Artonet, by default, there are no accounts nor auth providers. Users simply ask to join a specific network ID from a control server, and provide the password and&#x2F;or keyfile for it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-s-the-research-angle&quot;&gt;What&#x27;s the Research angle?&lt;&#x2F;h2&gt;
&lt;p&gt;The things to be researched in this project &#x2F; thesis are as follows:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;WireGuard: Next Generation Kernel Network Tunnel&lt;&#x2F;strong&gt;: It&#x27;s not a simple protocol, and will require advanced research into &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.wireguard.com&#x2F;repositories&#x2F;&quot;&gt;its code&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.wireguard.com&#x2F;papers&#x2F;wireguard.pdf&quot;&gt;published papers&lt;&#x2F;a&gt;. Within this research, I would learn about traffic routing, encryption, kernel space programming etc.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Routing&lt;&#x2F;strong&gt;: In order for our application to differentiate itself, it needs to be easy to set up, while providing stable and fast performance. To do this, advanced network routing protocols will need to be researched and implemented.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;OS Level implementation&lt;&#x2F;strong&gt;: In order to make this code cross-compatible, I would need to research different operating system&#x27;s networking architectures and learn to implement this program&#x27;s features on them.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My 2023 Resolution</title>
        <published>2023-01-01T00:00:00+00:00</published>
        <updated>2023-01-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Arto Gahr
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://gahr.io/blog/2023-resolution/"/>
        <id>https://gahr.io/blog/2023-resolution/</id>
        
        <content type="html" xml:base="https://gahr.io/blog/2023-resolution/">&lt;h2 id=&quot;1920x1080&quot;&gt;1920x1080.&lt;&#x2F;h2&gt;
&lt;p&gt;Jokes aside, 2022 has been a great year for me. I married the most perfect person for me, we moved to Prague, I have a close but special list of friends that I can talk to. Oh and I also went to a Men I Trust concert, that was great.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m saying great in the context of my other years though. It can be better, and I will try to make 2023 better for me. A few things that I want to achieve &#x2F; improve in the upcoming year:&lt;&#x2F;p&gt;
&lt;h2 id=&quot;health&quot;&gt;Health&lt;&#x2F;h2&gt;
&lt;p&gt;I think before anything I really need to focus on my general health. Without it, none of what I&#x27;m going to write next matters. As I&#x27;m writing this everything is melting around me. This is not something new, things&#x27;ve been going up and down for the past year, no thanks to all the stress of work, marriage procedures, mandatory military service stuff, moving to a new country etc.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;physical-health&quot;&gt;Physical Health&lt;&#x2F;h4&gt;
&lt;p&gt;If we subdivide this section, I would say physical health is the one thing I need to just not give up on this year. I&#x27;ve been struggling with weight loss for a loong time. My wife Sueda&#x27;s been helping me a lot, thanks to her I was able to lose a few kilos here and there, but thanks to my stupid ADHD (I) brain, once I lose track I just go back to the way it was like nothing has changed. As of writing now, I&#x27;m right on the verge of around 99.8kg (At least when last I checked). I haven&#x27;t checked again because I&#x27;m afraid of seeing 4 numbers there instead of 3.&lt;&#x2F;p&gt;
&lt;p&gt;So what am I going to do about it? Well first, I know that &quot;I need to cut sweets and carbs and I&#x27;ll give weight like nothing&quot;, but history has shown that I can&#x27;t force myself to do that. Instead, I&#x27;d like to start doing the one thing that has consistently produced results for me - Fasting. Here&#x27;s my January fasting schedule that will go into effect, open to public:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Timeframe&lt;&#x2F;th&gt;&lt;th&gt;Fasting Start&lt;&#x2F;th&gt;&lt;th&gt;Fasting End&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1-7 Jan&lt;&#x2F;td&gt;&lt;td&gt;Waking up&lt;&#x2F;td&gt;&lt;td&gt;Afternoon&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;8-14 Jan&lt;&#x2F;td&gt;&lt;td&gt;00:00&lt;&#x2F;td&gt;&lt;td&gt;Afternoon&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;15-21 Jan&lt;&#x2F;td&gt;&lt;td&gt;22:00&lt;&#x2F;td&gt;&lt;td&gt;Afternoon&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;21-30 Jan&lt;&#x2F;td&gt;&lt;td&gt;20:00&lt;&#x2F;td&gt;&lt;td&gt;Afternoon&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;This is Intermittent Fasting btw, I will still drink as much water (only) as I want. By the end of January I should be settled down to the 16:8 schedule of fasting, will probably even push further on the upcoming months. Afternoon means my lunch break, usually is at 13:00 but can be a little later depending on the calls I get.&lt;&#x2F;p&gt;
&lt;p&gt;&quot;But Arto&quot; I hear you say, &quot;Isn&#x27;t that too easy? Are you even trying?&quot; - Every time I&#x27;ve tried to take things too harsh and sudden on myself, I have failed. Slow and steady is the way to go. My goal for end of January is lose 2-3 kilos and end at 97. At least that&#x27;s what Google tells me the healthy amount is. I will also try to count calories, I&#x27;ve seen that help me get discouraged from snacks at least.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;mental-health&quot;&gt;Mental Health&lt;&#x2F;h4&gt;
&lt;p&gt;- Is a topic I&#x27;ve also been struggling with. Due to all the stress over me on the past year, I&#x27;ve gotten less like myself and I&#x27;m losing the &quot;chill personality&quot; I&#x27;d like to be known for. I get angry too easy, I&#x27;ve seen myself resorting to psychological tricks to others, I can&#x27;t really control myself, I&#x27;m unmotivated, I get distracted too easily. What will I do about it? Honestly, I don&#x27;t know. I&#x27;d like to seek therapy, but I&#x27;m in the process of trying to find an English speaking VZP (Czech Insurance) accepting practitioner, shit&#x27;s expensive yo. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;Prague&#x2F;comments&#x2F;zxc18w&#x2F;&quot;&gt;Here&#x27;s a Reddit thread&lt;&#x2F;a&gt; that has some info on it. Sueda&#x27;s been mentioning getting into meditation, but can I do that as well? My mind can&#x27;t really sit in place, I&#x27;m actively repulsed to it. Maybe that&#x27;s the whole idea with Meditation?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;work&quot;&gt;Work&lt;&#x2F;h2&gt;
&lt;p&gt;Alright enough about my health, I&#x27;ll get it sorted, I promise. What about the stuff I want to &lt;em&gt;do&lt;&#x2F;em&gt;?&lt;&#x2F;p&gt;
&lt;h4 id=&quot;rust-my-career&quot;&gt;Rust &#x2F; My Career&lt;&#x2F;h4&gt;
&lt;p&gt;If you&#x27;re in my circle, you probably have heard me talking about it. I mean this language is amazing - the speed of C++ while having the safety of Python and ease of use of Go? What more is there to want?&lt;&#x2F;p&gt;
&lt;p&gt;This is the year I learned about and first done something in Rust. It&#x27;s hard, not going to lie, but I&#x27;ve been kinda going through it. I&#x27;ve read most of &quot;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;book&#x2F;&quot;&gt;The Book&lt;&#x2F;a&gt;&quot;, I&#x27;ve watched tons of videos and read a lot of articles about it. This year was the one that Rust really caught traction, and I suspect it will be getting even more popular in the upcoming years. I think it&#x27;s a good language to invest time &#x2F; energy in. I even did some &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;adventofcode.com&quot;&gt;Advent Of Code&lt;&#x2F;a&gt; this year with it.&lt;&#x2F;p&gt;
&lt;p&gt;&quot;But Arto, aren&#x27;t you working as a Networking type of guy?&quot; Why yes, as a matter of fact I do. I&#x27;m working as a TAC Engineer in Fortinet as of now, which is a fancy way of saying I&#x27;m tech support. I kinda like this job - it&#x27;s close to my house, ok work &#x2F; life balance, ok pay, good stability. However, I&#x27;m just not excited about this job. On especially unmotivated days I&#x27;ve found myself almost not doing anything productive all day. That&#x27;s why I&#x27;m looking for a software job. I&#x27;d like it to be a Rust one, but I&#x27;m also fine with a C# job if life drags me that way.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;projects&quot;&gt;Projects&lt;&#x2F;h4&gt;
&lt;p&gt;For the end of the article I&#x27;d like to just jot down a few projects I want to do. I&#x27;ve never written these down before, till now ideas mostly just come and go from my head.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Artodo&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
This is the first project that I ever projected, I even did some &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;artogahr&#x2F;artodo&quot;&gt;actual work&lt;&#x2F;a&gt; on it (wow). It&#x27;s a &quot;hello world&quot; of a project, I mostly want to do it because I&#x27;ll actually want to use it, since it&#x27;s my own!!! This one&#x27;s not actually a very serious one for me.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Text insertion &#x2F; clipboard application&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
In my job I do a lot of stock text insertion, things like &quot;Dear Customer, thank you for writing to Fortinet, ...&quot;. There&#x27;s already an internal tool that helps somewhat, but I&#x27;d like to write something that I can completely customize.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A Website&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
I&#x27;m already using https:&#x2F;&#x2F;tilde.team&#x2F;~artogahr&#x2F; as the website, should I do something that&#x27;s my own?&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;img style=&quot;max-width: 50%; height:auto&quot; src=&quot;gingerbread.png&quot; title=&quot;I don&#x27;t know.&quot; alt=&quot;I don&#x27;t know.&quot;&gt;
&lt;p&gt;I kinda want to do it because of Rust reasons, I think it could be a cool project to do something real and learn about Rust.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Torrent server&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
I already have a torrent server (A headless Thinkpad T450s with qBittorrent and Jellyfin running on it), and I would like to set up Sonarr, Lidarr and the like with them as well, to automate some work involved with it.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Social Media&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
Not really a project, but still something I would like to do something about. I have created a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tilde.zone&#x2F;@artogahr&quot;&gt;Mastodon account on tilde.zone&lt;&#x2F;a&gt;, and I don&#x27;t think I&#x27;ll be using Twitter or alike for now, but you can also follow me as @artogahr everywhere.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;end-credits&quot;&gt;End Credits&lt;&#x2F;h2&gt;
&lt;p&gt;Well that&#x27;s it really, I don&#x27;t think I have anything to add right now. I&#x27;m sitting in my house, alone, while there&#x27;s New Year&#x27;s Eve fireworks going on all around me (Prague &lt;em&gt;really&lt;&#x2F;em&gt; likes fireworks), trying to watch &quot;Asteriks ve Oburiks Sezara Karşı&quot; with my wife over Discord. I&#x27;d like to thank her and all my friends that have supported me this year, and enabled me to come this far in life.&lt;&#x2F;p&gt;
&lt;p&gt;If you read this far I thank you for bearing with my first ever blog post, and wish you a very good year! Artout.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
