<?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;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;The fundamental purpose of networking is enabling computers to communicate with each other. You can directly connect two laptops via ethernet cable for data exchange—it&#x27;s that straightforward.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Internet Protocol (IP)&lt;&#x2F;strong&gt; serves as the standard for network communication today. When a physical connection exists between computers, IP addresses function as &quot;logical home addresses&quot; so packets reach their destinations. MAC addresses represent the actual burned-in physical addresses of network adapters, while IP addresses are dynamic and changeable.&lt;&#x2F;p&gt;
&lt;p&gt;IPv4 supports 4,294,967,296 possible addresses—insufficient for today&#x27;s device density. Networks are therefore segregated into local networks with gateway routers connecting them globally.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Local IP address ranges&lt;&#x2F;strong&gt; (non-routable on the public internet):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;10.x.x.x&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 common in home networks)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Your ISP provides your router a single public IP address; devices behind it route through it to access the internet.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ipv6&quot;&gt;IPv6&lt;&#x2F;h3&gt;
&lt;p&gt;This newer protocol uses 128-bit addresses instead of 32, providing vastly more addresses. However, adoption remains limited outside mobile networks. An example IPv6 address: &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;The numbers following IP addresses (e.g., &lt;code&gt;&#x2F;24&lt;&#x2F;code&gt;) define the subnet—the range of IP addresses that specific IP belongs to. As a practical rule: &quot;use &#x2F;24.&quot;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;dhcp&quot;&gt;DHCP&lt;&#x2F;h2&gt;
&lt;p&gt;The Dynamic Host Configuration Protocol automatically assigns IP addresses. When a device joins a network, it broadcasts a request; the DHCP server replies with an available address from its pool.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&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 translates human-readable domain names to IP addresses. When your computer needs to access a website, it sends a DNS request to your configured DNS server, which follows a hierarchical chain until finding the answer.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Common public DNS servers:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;8.8.8.8 (Google)&lt;&#x2F;li&gt;
&lt;li&gt;1.1.1.1 (Cloudflare)&lt;&#x2F;li&gt;
&lt;li&gt;9.9.9.9 (Quad9)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;ports&quot;&gt;Ports&lt;&#x2F;h2&gt;
&lt;p&gt;Each network interface supports 65,535 ports, allowing multiple applications on one computer. One application can bind to many ports, but each port accommodates only one process.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Standard port assignments:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;443 (HTTPS)&lt;&#x2F;li&gt;
&lt;li&gt;80 (HTTP)&lt;&#x2F;li&gt;
&lt;li&gt;22 (SSH)&lt;&#x2F;li&gt;
&lt;li&gt;3389 (RDP)&lt;&#x2F;li&gt;
&lt;li&gt;53 (DNS)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;network-devices&quot;&gt;Network Devices&lt;&#x2F;h2&gt;
&lt;h4 id=&quot;modems-cables&quot;&gt;Modems &amp;amp; Cables&lt;&#x2F;h4&gt;
&lt;p&gt;Convert analog signals to digital data. Modern installations use Ethernet cables with CAT5e (adequate for most users) or CAT6 (recommended for best performance). Fiber-optic cables transmit signals as light, offering greater reliability over distance and faster speeds.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;routers&quot;&gt;Routers&lt;&#x2F;h4&gt;
&lt;p&gt;Route IP packets to their destinations using specialized protocols that auto-update routing tables, enabling global connectivity.&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;Wireless antennas allowing network access via Wi-Fi; enterprise versions maintain connections when moving between access points.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;firewalls&quot;&gt;Firewalls&lt;&#x2F;h4&gt;
&lt;p&gt;Restrict packet flow to protect devices from unauthorized external access based on IP addresses, ports, and other identifying information.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;switches&quot;&gt;Switches&lt;&#x2F;h4&gt;
&lt;p&gt;Direct traffic within local networks by learning which devices connect to which ports, only sending data where needed.&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;h3 id=&quot;ping&quot;&gt;ping&lt;&#x2F;h3&gt;
&lt;p&gt;Tests basic connectivity and measures round-trip time.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ping google.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;traceroute-tracert&quot;&gt;traceroute&#x2F;tracert&lt;&#x2F;h3&gt;
&lt;p&gt;Shows the network path to a 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;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Linux&#x2F;macOS&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;traceroute 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&gt;# Windows&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tracert google.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;nslookup-dig&quot;&gt;nslookup&#x2F;dig&lt;&#x2F;h3&gt;
&lt;p&gt;Manually queries DNS servers for domain-to-IP translations.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Linux&#x2F;macOS&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dig 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&gt;# Windows&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nslookup google.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;netstat-ss&quot;&gt;netstat&#x2F;ss&lt;&#x2F;h3&gt;
&lt;p&gt;Checks open ports and identifies processes using specific ports.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Linux&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ss -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&gt;# Windows&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;netstat -an | findstr LISTEN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;advanced-network-capture&quot;&gt;Advanced: Network Capture&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;tcpdump&lt;&#x2F;strong&gt; (Linux&#x2F;macOS)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sudo tcpdump -i eth0 host 192.168.1.5 and port 80&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Wireshark&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
GUI-based packet analyzer with deep inspection and powerful filtering capabilities.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;common-networking-issues-solutions&quot;&gt;Common Networking Issues &amp;amp; Solutions&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;it-works-on-my-machine&quot;&gt;&quot;It works on my machine&quot;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Verify matching network configurations&lt;&#x2F;li&gt;
&lt;li&gt;Check firewall rules&lt;&#x2F;li&gt;
&lt;li&gt;Confirm DNS resolution consistency&lt;&#x2F;li&gt;
&lt;li&gt;Identify differing proxy settings&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;connection-timeouts&quot;&gt;Connection Timeouts&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Verify the service runs&lt;&#x2F;li&gt;
&lt;li&gt;Confirm correct and open ports&lt;&#x2F;li&gt;
&lt;li&gt;Check firewall blocking&lt;&#x2F;li&gt;
&lt;li&gt;Validate DNS accuracy&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;additional-topics&quot;&gt;Additional Topics&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;vpns&quot;&gt;VPNs&lt;&#x2F;h3&gt;
&lt;p&gt;Virtual Private Networks extend private networks across public ones. They encrypt traffic but incur performance costs.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cloud-networking&quot;&gt;Cloud Networking&lt;&#x2F;h3&gt;
&lt;p&gt;Cloud infrastructure allows defining networks as code, eliminating manual configuration requests.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;container-networking&quot;&gt;Container Networking&lt;&#x2F;h3&gt;
&lt;p&gt;Docker and Kubernetes containers use:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bridge Networks:&lt;&#x2F;strong&gt; Create private container networks&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Host Networks:&lt;&#x2F;strong&gt; Share the host&#x27;s network namespace&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Overlay Networks:&lt;&#x2F;strong&gt; Enable communication across hosts&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Service Discovery:&lt;&#x2F;strong&gt; Automatic container location&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Containers being ephemeral requires DNS rather than hardcoded IP addresses.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;security-considerations&quot;&gt;Security Considerations&lt;&#x2F;h3&gt;
&lt;p&gt;&quot;If you wouldn&#x27;t shout it across a crowded coffee shop, it shouldn&#x27;t travel over the network unencrypted.&quot; HTTPS provides encryption—visible via the browser lock icon—preventing ISPs, governments, and third parties from viewing communication contents. However, DNS queries typically remain unencrypted, revealing which sites you visit.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Understanding networking fundamentals prevents countless hours of frustration. When troubleshooting connections, firewalls and network configuration should be checked systematically. These concepts and tools provide the foundation for diagnosing most connectivity issues effectively.&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;Let me introduce you to my Skyloong SK61.&lt;&#x2F;p&gt;
&lt;p&gt;It has Gateron Optical switches, a plastic case, and cheap components throughout. It is scratched beyond repair. The feet fell off long ago and were replaced with blobs of hot glue. The USB-C port is loose. The firmware doesn&#x27;t work on Linux. By any objective measure, it is not a good keyboard.&lt;&#x2F;p&gt;
&lt;p&gt;I love it deeply.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve done everything to it. The stabilizers are lubed with free Krytox samples. There&#x27;s a bandaid mod in there. The foam dampening is sourced from various things I found around the house. It looks like a keyboard that was assembled by someone who had never seen a keyboard before but had read about them extensively.&lt;&#x2F;p&gt;
&lt;p&gt;Despite all of this—because of all of this—it was with me through every important career change, through getting married, through countless late nights and early mornings. I&#x27;ve customized the keymap to the point where my fingers know it better than they know anything else. It has become an extension of myself.&lt;&#x2F;p&gt;
&lt;p&gt;It travels everywhere without a case, rattling around in whatever bag I happen to be carrying, next to an equally battle-worn Logitech mouse I picked up secondhand. Both have been repaired multiple times. Neither will be replaced.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m afraid that if I get something new and objectively better, I&#x27;ll never feel the same way about it. Some things are valuable not because of what they are, but because of what they&#x27;ve been through with you.&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s a beauty in worn things. In objects that show their history. My keyboard is ugly and it is perfect.&lt;&#x2F;p&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;I&#x27;ve been 3D printing since 2018. This isn&#x27;t meant to be comprehensive documentation—just a starting point for people who are curious and don&#x27;t know where to begin.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-3d-printers-work&quot;&gt;How 3D Printers Work&lt;&#x2F;h2&gt;
&lt;p&gt;This guide focuses on FDM (Fused Deposition Modeling) printers, which are by far the most common type. The process is simple: the printer lays down one thin layer of plastic on the print surface, moves up a tiny bit, lays down another thin layer, moves up again, and repeats until the object is done.&lt;&#x2F;p&gt;
&lt;p&gt;A PCB follows instructions in a &lt;code&gt;.gcode&lt;&#x2F;code&gt; file, which contains atomic commands for motor movement, temperature control, and filament extrusion. That&#x27;s really all there is to it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-you-need&quot;&gt;What You Need&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;A 3D printer&lt;&#x2F;li&gt;
&lt;li&gt;Filament&lt;&#x2F;li&gt;
&lt;li&gt;An SD card with adapter&lt;&#x2F;li&gt;
&lt;li&gt;A computer with slicer software&lt;&#x2F;li&gt;
&lt;li&gt;A 3D model file (typically &lt;code&gt;.STL&lt;&#x2F;code&gt; format)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For models, check out Printables, Thingiverse, and Thangs.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;slicers&quot;&gt;Slicers&lt;&#x2F;h2&gt;
&lt;p&gt;A slicer converts your 3D model into &lt;code&gt;.gcode&lt;&#x2F;code&gt; instructions the printer can follow. I recommend:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prusa Slicer&lt;&#x2F;strong&gt; if you have a Prusa printer&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;UltiMaker Cura&lt;&#x2F;strong&gt; for everything else&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Cura is the better choice for beginners—it has a friendlier interface and good defaults.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;materials&quot;&gt;Materials&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;PLA&lt;&#x2F;strong&gt; is the right choice when you&#x27;re starting out. It&#x27;s easy to print, requires lower temperatures, is pretty durable, and is cheap. Optimal settings: 210°C nozzle, 60°C build plate.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;PETG&lt;&#x2F;strong&gt; is more heat-resistant but trickier. It needs 240°C nozzle and 80°C build plate. Important: &lt;strong&gt;do not use bare smooth surfaces for PETG&lt;&#x2F;strong&gt;—it adheres too well and can damage your build plate.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ABS&lt;&#x2F;strong&gt; has been historically popular but is genuinely difficult to print. Skip it until you&#x27;re comfortable with the basics.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;key-slicer-settings&quot;&gt;Key Slicer Settings&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nozzle Diameter:&lt;&#x2F;strong&gt; Standard is 0.4mm. Smaller = more detail, slower. Larger = faster, less detail.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Layer Height:&lt;&#x2F;strong&gt; Typically half the nozzle diameter. Thinner layers = better surface quality.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Infill:&lt;&#x2F;strong&gt; 20% is usually enough. Going higher wastes material without much benefit for most prints.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Support:&lt;&#x2F;strong&gt; Generates temporary structures for overhanging features. Remove after printing.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;things-that-actually-matter&quot;&gt;Things That Actually Matter&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Clean your build surface.&lt;&#x2F;strong&gt; A dirty build surface is the most common cause of failed prints, full stop. Isopropyl alcohol or warm soapy water removes the oils from your hands that prevent adhesion.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Level your bed.&lt;&#x2F;strong&gt; This ensures consistent first-layer adhesion across the whole surface. Some printers do this automatically; others require manual adjustment. Either way, don&#x27;t skip it.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Calibrate your Z-height.&lt;&#x2F;strong&gt; The first layer needs to be close enough to the bed to stick, but not so close that you&#x27;re gouging the surface.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;If you have questions, feel free to reach out. 3D printing has a learning curve but it flattens out quickly once you&#x27;ve done a few prints.&lt;&#x2F;p&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;&lt;em&gt;Update (August 2023): Since writing this, similar projects have emerged, including &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;em&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;what-is-it&quot;&gt;What is it?&lt;&#x2F;h2&gt;
&lt;p&gt;Artonet creates a virtual local network between your devices without obstructing internet access. All traffic between nodes is encrypted, and peers can communicate as if they&#x27;re on the same local network.&lt;&#x2F;p&gt;
&lt;p&gt;Use cases: collaborative tech projects, gaming with friends, sharing self-hosted services without exposing public ports.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;key-features&quot;&gt;Key Features&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Built on WireGuard at the kernel level—faster than traditional VPN technologies&lt;&#x2F;li&gt;
&lt;li&gt;Simple joining process: connect to the control server, provide credentials, done&lt;&#x2F;li&gt;
&lt;li&gt;Supports local DHCP and DNS configuration per network on the control server&lt;&#x2F;li&gt;
&lt;li&gt;Split tunneling: route all traffic through one node, or keep inter-node communication isolated&lt;&#x2F;li&gt;
&lt;li&gt;No account system by default—users request access with a password or keyfile&lt;&#x2F;li&gt;
&lt;li&gt;Built with Rust&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;why-not-just-use-tailscale-zerotier-hamachi&quot;&gt;Why Not Just Use Tailscale&#x2F;Zerotier&#x2F;Hamachi?&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Tailscale&lt;&#x2F;strong&gt; is actually great—it combines WireGuard&#x27;s speed with solid features. But it can get expensive for casual peer networks, and it relies on their infrastructure.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Zerotier&lt;&#x2F;strong&gt; and &lt;strong&gt;Hamachi&lt;&#x2F;strong&gt; use older VPN technology, aren&#x27;t open source, and have various pricing and reliability issues.&lt;&#x2F;p&gt;
&lt;p&gt;Artonet&#x27;s goal is simplicity, open-source availability, and intentional minimalism. Truly private, self-contained networks with no external authentication dependencies.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;research-areas&quot;&gt;Research Areas&lt;&#x2F;h2&gt;
&lt;p&gt;Building this properly requires going deep on three things:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;WireGuard Protocol&lt;&#x2F;strong&gt; — encryption, traffic routing, kernel space programming&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Routing&lt;&#x2F;strong&gt; — designing protocols that are stable, fast, and easy to set up&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;OS-Level Implementation&lt;&#x2F;strong&gt; — cross-platform compatibility across different architectures&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;p&gt;2022 was an excellent year. I got married, moved to Prague, made good friends, and went to a Men I Trust concert. But there&#x27;s room to improve, and I&#x27;m going into 2023 with some actual goals.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;health&quot;&gt;Health&lt;&#x2F;h2&gt;
&lt;p&gt;Everything is melting. Accumulated stress from work, marriage paperwork, military service obligations, and relocating has taken a toll. Health is my primary focus this year.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;physical&quot;&gt;Physical&lt;&#x2F;h3&gt;
&lt;p&gt;Weight is the main concern. I&#x27;m currently around 99.8 kg and my ADHD makes it hard to maintain habits once momentum breaks. I&#x27;m not going to try a restrictive diet—intermittent fasting feels more sustainable.&lt;&#x2F;p&gt;
&lt;p&gt;The plan for January is a gradual shift: move my eating window progressively later until I reach a 16:8 schedule by the end of the month. Goal: lose 2-3 kg to reach 97 kg.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;mental&quot;&gt;Mental&lt;&#x2F;h3&gt;
&lt;p&gt;Stress is making me irritable, unmotivated, and scattered. I&#x27;d like to try therapy, but finding English-speaking practitioners covered by Czech insurance is genuinely difficult and expensive. My wife has suggested meditation. I remain resistant, but I haven&#x27;t ruled it out.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;work&quot;&gt;Work&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;rust&quot;&gt;Rust&lt;&#x2F;h3&gt;
&lt;p&gt;I got interested in Rust this year. I like the combination of performance, safety, and expressiveness. I&#x27;ve read The Book, watched videos, and worked through some Advent of Code challenges. I want to go further.&lt;&#x2F;p&gt;
&lt;p&gt;Currently I&#x27;m a TAC Engineer at Fortinet—essentially tech support. The role is stable with decent work-life balance, but I&#x27;m not excited by it. I&#x27;m looking for a software development position, preferably something involving Rust.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;projects&quot;&gt;Projects&lt;&#x2F;h3&gt;
&lt;p&gt;Things I want to build:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Artodo&lt;&#x2F;strong&gt; — a personal todo app (already started)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Text insertion tool&lt;&#x2F;strong&gt; — customizable clipboard for frequently-used phrases at work&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Personal website&lt;&#x2F;strong&gt; — possibly a Rust-based replacement for my tilde.team presence&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Torrent server automation&lt;&#x2F;strong&gt; — Sonarr + Lidarr for my existing media setup&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I also finally created a Mastodon account at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tilde.zone&#x2F;@artogahr&quot;&gt;tilde.zone&#x2F;@artogahr&lt;&#x2F;a&gt; and deleted Twitter.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;Grateful for my wife Sueda and everyone in my corner. Here&#x27;s to 2023.&lt;&#x2F;p&gt;
&lt;p&gt;Artout.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
