<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Andreas Sander</title>
    <description>The latest articles on DEV Community by Andreas Sander (@andi1984).</description>
    <link>https://dev.to/andi1984</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F182494%2Fec34094f-51d5-4b61-9387-ccff6a33a9fa.png</url>
      <title>DEV Community: Andreas Sander</title>
      <link>https://dev.to/andi1984</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andi1984"/>
    <language>en</language>
    <item>
      <title>A Letter to My Younger Self</title>
      <dc:creator>Andreas Sander</dc:creator>
      <pubDate>Thu, 15 Jan 2026 17:15:09 +0000</pubDate>
      <link>https://dev.to/andi1984/a-letter-to-my-younger-self-3if5</link>
      <guid>https://dev.to/andi1984/a-letter-to-my-younger-self-3if5</guid>
      <description>&lt;p&gt;This could be a letter to my younger self as a starting frontend developer, sharing insights and lessons learned over the years. But maybe it could also be a letter to anyone starting out in the field, offering encouragement and advice.&lt;/p&gt;




&lt;p&gt;Dear Younger Me,&lt;/p&gt;

&lt;p&gt;I hope this letter finds you well. As I sit down to write this, I am reflecting on the journey I have taken as a frontend developer. It has been a transformative experience, and I am grateful for the lessons I have learned along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embrace A Healthy Portion of Curiosity
&lt;/h2&gt;

&lt;p&gt;Curiosity and willingness to explore new technologies and approaches are essential traits for any developer due to the nature of software development. Don't be afraid to experiment with things outside your comfort zone, but keep it on a healthy level. Don't get lost in the endless sea of new frameworks and libraries; instead, focus on mastering the fundamentals first. In the beginning the &lt;em&gt;fear of missing out&lt;/em&gt; (short FOMO) can be overwhelming, but remember that true growth comes from deep understanding, not just surface-level knowledge of the latest trends.&lt;/p&gt;

&lt;h2&gt;
  
  
  Focus on Fundamentals
&lt;/h2&gt;

&lt;p&gt;During your career you will &lt;strong&gt;ALWAYS&lt;/strong&gt; come back to the fundamentals. Whether it is a specific piece of code of a framework that you are using, or a general concept like accessibility or performance optimization, the fundamentals will always be your foundation. Invest time in understanding HTML, CSS, and JavaScript deeply. These are the building blocks of everything you will create. And believe me that browsing &lt;a href="https://developer.mozilla.org/" rel="noopener noreferrer"&gt;MDN Web Docs&lt;/a&gt; will always bring new HTML tags, CSS properties, and JavaScript functions to your attention. For fun and learning you can try something like Powerpoint karaoke: Pick a random MDN article and talk about it for a few minutes as if you were teaching it to someone else – &lt;a href="https://workingdraft.de/gluecksrad/" rel="noopener noreferrer"&gt;The WorkingDraft "Gluecksrad"&lt;/a&gt; is your friend here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build Side Projects Whenever Possible
&lt;/h2&gt;

&lt;p&gt;Side projects are invaluable for learning and growth. They allow you to apply what you've learned in a practical way and explore new ideas without the constraints of a work environment. Don't be afraid to start small; even simple projects can teach you a lot. Over time, these side projects will become a portfolio that showcases your skills and creativity. You will never imagine that a weekend project will end up in &lt;a href="https://marketplace.visualstudio.com/items?itemName=andi1984.tinypng" rel="noopener noreferrer"&gt;a tool used by thousands of developers worldwide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Network and Connect with Others
&lt;/h2&gt;

&lt;p&gt;Go to meetups, join conferences and try to keep in touch with those people you meet and feel connected to. The developer community is full of talented and passionate individuals who are eager to share their knowledge and experiences. Building a network of peers can provide support, inspiration, and opportunities for collaboration. Don't hesitate to reach out to others for advice or mentorship; most people are happy to help. Especially if you are an introvert like me, try to push yourself a little bit out of your comfort zone. The connections you make can lead to new opportunities and friendships that will enrich your career and personal life.&lt;/p&gt;

&lt;p&gt;Between meeting offline, consider also joining online communities like &lt;a href="https://dev.to/"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://hashnode.com/" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; where you can engage in discussions, ask questions, and share your own experiences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use AI as a further tool in your toolbox
&lt;/h2&gt;

&lt;p&gt;Instead of vibe coding all the way down, be eager to &lt;em&gt;learn how AI can help me&lt;/em&gt;. Use it as a further tool in your toolbox, not as a replacement for your own skills. Also review with care and always keep understanding of what is generated. But be open to embrace AI tools as any other tool that can help you as a developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Have a counterpart outside of coding
&lt;/h2&gt;

&lt;p&gt;In the tech industry it is easy to get lost in the code and the next &lt;em&gt;big thing&lt;/em&gt;, especially when you work remotely where boundaries between work and private life can blur.&lt;/p&gt;

&lt;p&gt;Your private life and human, non-digital interactions are essential for your well-being and overall happiness. Make sure to nurture relationships outside of work, pursue hobbies, and take time to disconnect from screens. Your back, eyes and in general your body will thank you.&lt;/p&gt;

&lt;p&gt;A balanced life will not only make you a happier person but also a more effective and creative developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Desk work is poison for your body
&lt;/h2&gt;

&lt;p&gt;Remember to take care of your physical health. Sitting for long hours can lead to various health issues. Make it a habit to take breaks, stretch, and move around regularly. Consider incorporating exercise into your routine, whether it's a daily walk, having a big garden or hitting the gym. Following this in your 20s and 30s will pay off in your 40s and 50s.&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>lessonslearned</category>
      <category>careerdevelopment</category>
    </item>
    <item>
      <title>Self-hosting a Mastodon Instance on a Hetzner Server</title>
      <dc:creator>Andreas Sander</dc:creator>
      <pubDate>Sun, 10 Aug 2025 20:23:07 +0000</pubDate>
      <link>https://dev.to/andi1984/self-hosting-a-mastodon-instance-on-a-hetzner-server-1fhl</link>
      <guid>https://dev.to/andi1984/self-hosting-a-mastodon-instance-on-a-hetzner-server-1fhl</guid>
      <description>&lt;p&gt;Running your own Mastodon instance gives you full control over moderation, data storage, and community tone.  This guide walks through the basic steps to deploy Mastodon on a Hetzner virtual server using a generic domain such as &lt;code&gt;example.social&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Prepare the server
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Provision an Ubuntu 22.04 LTS VPS at your provider of choice.&lt;/li&gt;
&lt;li&gt;Update packages and install the dependencies listed in the &lt;a href="https://docs.joinmastodon.org/admin/install/#installing-the-last-dependencies" rel="noopener noreferrer"&gt;official installation guide&lt;/a&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
   &lt;span class="c"&gt;# install packages as described in the docs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Create a dedicated user and switch to it:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;adduser mastodon
   &lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;mastodon
   su - mastodon
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Install Mastodon
&lt;/h2&gt;

&lt;p&gt;Clone the repository and install Ruby/Node dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/mastodon/mastodon.git live
&lt;span class="nb"&gt;cd &lt;/span&gt;live
&lt;span class="c"&gt;# checkout latest stable tag&lt;/span&gt;
git checkout &lt;span class="si"&gt;$(&lt;/span&gt;git tag &lt;span class="nt"&gt;-l&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; rc | &lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 1&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# install Ruby gems&lt;/span&gt;
gem &lt;span class="nb"&gt;install &lt;/span&gt;bundler
bundle config &lt;span class="nb"&gt;set &lt;/span&gt;deployment &lt;span class="s1"&gt;'true'&lt;/span&gt;
bundle config &lt;span class="nb"&gt;set &lt;/span&gt;without &lt;span class="s1"&gt;'development test'&lt;/span&gt;
bundle &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# install JS packages&lt;/span&gt;
yarn &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--frozen-lockfile&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Configure environment variables
&lt;/h2&gt;

&lt;p&gt;Copy the example configuration and adapt it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; .env.production.sample .env.production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit &lt;code&gt;.env.production&lt;/code&gt; and set values for your instance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LOCAL_DOMAIN=example.social

DB_HOST=/var/run/postgresql
DB_USER=mastodon
DB_NAME=mastodon_production
DB_PASS=change-me

REDIS_URL=redis://localhost:6379/1

# Optional: object storage
S3_ENABLED=true
S3_BUCKET=example-bucket
S3_ENDPOINT=https://us-east-1.example-object-storage.com
S3_HOSTNAME=files.example.social
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Database and assets
&lt;/h2&gt;

&lt;p&gt;Set up the database and precompile assets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production bundle &lt;span class="nb"&gt;exec &lt;/span&gt;rails db:setup
&lt;span class="nv"&gt;RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production bundle &lt;span class="nb"&gt;exec &lt;/span&gt;rails assets:precompile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; If asset compilation fails due to lack of memory, add swap:&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;fallocate &lt;span class="nt"&gt;-l&lt;/span&gt; 2G /swapfile
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;600 /swapfile
&lt;span class="nb"&gt;sudo &lt;/span&gt;mkswap /swapfile
&lt;span class="nb"&gt;sudo &lt;/span&gt;swapon /swapfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  5. Systemd services
&lt;/h2&gt;

&lt;p&gt;Create service files for the three Mastodon processes (&lt;code&gt;mastodon-web&lt;/code&gt;, &lt;code&gt;mastodon-sidekiq&lt;/code&gt;, &lt;code&gt;mastodon-streaming&lt;/code&gt;) as documented in the official guide.  After placing the files under &lt;code&gt;/etc/systemd/system/&lt;/code&gt;, reload and start them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl daemon-reload
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; mastodon-web mastodon-sidekiq mastodon-streaming
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can manually restart them at any time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart mastodon-web mastodon-sidekiq mastodon-streaming
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Logs are available via &lt;code&gt;journalctl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; mastodon-web &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Nginx and TLS
&lt;/h2&gt;

&lt;p&gt;Create an Nginx config in &lt;code&gt;/etc/nginx/sites-available/mastodon&lt;/code&gt; and link it to &lt;code&gt;sites-enabled&lt;/code&gt;.&lt;br&gt;
The config should proxy requests for &lt;code&gt;example.social&lt;/code&gt; to the Mastodon services and optionally expose an alias such as &lt;code&gt;files.example.social&lt;/code&gt; for object storage.&lt;/p&gt;

&lt;p&gt;Enable HTTPS with Let's Encrypt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;certbot &lt;span class="nt"&gt;--nginx&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; example.social &lt;span class="nt"&gt;-d&lt;/span&gt; files.example.social
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Certificates renew automatically via a cron job, but you can trigger it manually with &lt;code&gt;certbot renew&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Backups
&lt;/h2&gt;

&lt;p&gt;Combine regular PostgreSQL dumps with &lt;a href="https://www.borgbackup.org/" rel="noopener noreferrer"&gt;BorgBackup&lt;/a&gt; to create encrypted, deduplicated archives.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Borg and initialise a repository on remote storage:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;borgbackup
   &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;BORG_REPO&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ssh://user@backup.example.com/~/mastodon-borg
   borg init &lt;span class="nt"&gt;--encryption&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;repokey &lt;span class="nv"&gt;$BORG_REPO&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Create a backup script (&lt;code&gt;/root/backup-mastodon.sh&lt;/code&gt;):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
   &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-euo&lt;/span&gt; pipefail
   &lt;span class="nv"&gt;DATE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;

   pg_dump &lt;span class="nt"&gt;--username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postgres &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;c mastodon_production &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /tmp/db.dump

   borg create &lt;span class="nt"&gt;--compression&lt;/span&gt; zstd,3 &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nv"&gt;$BORG_REPO&lt;/span&gt;::&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DATE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     /home/mastodon/live/.env.production &lt;span class="se"&gt;\&lt;/span&gt;
     /tmp/db.dump &lt;span class="se"&gt;\&lt;/span&gt;
     /home/mastodon/live/public/system

   borg prune &lt;span class="nt"&gt;--keep-daily&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;7 &lt;span class="nt"&gt;--keep-weekly&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4 &lt;span class="nt"&gt;--keep-monthly&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;12 &lt;span class="nv"&gt;$BORG_REPO&lt;/span&gt;
   &lt;span class="nb"&gt;rm&lt;/span&gt; /tmp/db.dump
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Schedule it nightly via cron:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;crontab &lt;span class="nt"&gt;-e&lt;/span&gt;
   0 1 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /root/backup-mastodon.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This script dumps the database, backs up configuration and media files, prunes old archives, and removes temporary dumps. Store a &lt;code&gt;.pgpass&lt;/code&gt; file in &lt;code&gt;/root&lt;/code&gt; to avoid interactive passwords.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Automated cleanup
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ricard.dev/improving-mastodons-disk-usage/" rel="noopener noreferrer"&gt;Ricard Torres&lt;/a&gt; suggests running periodic &lt;code&gt;tootctl&lt;/code&gt; tasks to purge unused media and cache files. Create &lt;code&gt;/home/mastodon/cleanup.sh&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production /home/mastodon/live/bin/tootctl accounts prune
&lt;span class="nv"&gt;RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production /home/mastodon/live/bin/tootctl statuses remove &lt;span class="nt"&gt;--days&lt;/span&gt; 4
&lt;span class="nv"&gt;RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production /home/mastodon/live/bin/tootctl media remove &lt;span class="nt"&gt;--days&lt;/span&gt; 4
&lt;span class="nv"&gt;RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production /home/mastodon/live/bin/tootctl media remove &lt;span class="nt"&gt;--remove-headers&lt;/span&gt; &lt;span class="nt"&gt;--include-follows&lt;/span&gt; &lt;span class="nt"&gt;--days&lt;/span&gt; 0
&lt;span class="nv"&gt;RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production /home/mastodon/live/bin/tootctl preview_cards remove &lt;span class="nt"&gt;--days&lt;/span&gt; 4
&lt;span class="nv"&gt;RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production /home/mastodon/live/bin/tootctl media remove-orphans
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it weekly with cron:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crontab &lt;span class="nt"&gt;-e&lt;/span&gt;
0 3 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; 0 /home/mastodon/cleanup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands reclaim disk space by pruning remote accounts, old statuses, cached media, and orphaned files.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Useful links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.joinmastodon.org/admin/install/" rel="noopener noreferrer"&gt;Official Mastodon installation guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.joinmastodon.org/admin/optional/object-storage/" rel="noopener noreferrer"&gt;Using object storage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.joinmastodon.org/admin/optional/object-storage-proxy/" rel="noopener noreferrer"&gt;Object storage proxying&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/McKael/mastodon-documentation/blob/master/Running-Mastodon/Administration-guide.md" rel="noopener noreferrer"&gt;Administration guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ricard.dev/improving-mastodons-disk-usage/" rel="noopener noreferrer"&gt;Improving Mastodon's disk usage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;With the basics in place, you can now invite users, theme your instance, or automate maintenance tasks. Happy federating!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>mastodon</category>
      <category>fediverse</category>
    </item>
    <item>
      <title>Nice #howto #article on how to clear #systemd journal #logs https://linuxhandbook.com/clear-systemd-journal-logs/</title>
      <dc:creator>Andreas Sander</dc:creator>
      <pubDate>Mon, 14 Jul 2025 19:51:45 +0000</pubDate>
      <link>https://dev.to/andi1984/nice-howto-article-on-how-to-clear-systemd-journal-logs-3195</link>
      <guid>https://dev.to/andi1984/nice-howto-article-on-how-to-clear-systemd-journal-logs-3195</guid>
      <description></description>
      <category>linux</category>
      <category>systemdesign</category>
      <category>devops</category>
      <category>howto</category>
    </item>
    <item>
      <title>Exploring HTMX Integration with Go Backend</title>
      <dc:creator>Andreas Sander</dc:creator>
      <pubDate>Wed, 17 Jan 2024 21:01:38 +0000</pubDate>
      <link>https://dev.to/andi1984/exploring-htmx-integration-with-go-backend-4gb2</link>
      <guid>https://dev.to/andi1984/exploring-htmx-integration-with-go-backend-4gb2</guid>
      <description>&lt;p&gt;Hello developers,&lt;/p&gt;

&lt;p&gt;Let's dive into the practicalities of combining HTMX with a Go backend for web development. This approach aims to provide a practical, balanced enhancement to web applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;HTMX introduces simplicity and effectiveness to web development. Integrating it with a Go backend can offer a responsive user experience. We'll go through the setup, exploring how these technologies can be employed together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example Demo on GitHub
&lt;/h2&gt;

&lt;p&gt;For those eager to experiment, there's a simple demo available on &lt;a href="https://github.com/andi1984/htmx-go"&gt;GitHub&lt;/a&gt;. The repository contains code snippets and configurations, offering a hands-on experience to understand the integration process.&lt;/p&gt;

&lt;h2&gt;
  
  
  YouTube Overview
&lt;/h2&gt;

&lt;p&gt;Additionally, there's a brief overview on &lt;a href="https://youtu.be/UwxLOFvwBI0"&gt;YouTube&lt;/a&gt;, providing insights into HTMX. While it's not a tutorial, it serves as an introductory glimpse into what HTMX brings to the table.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why HTMX with Go?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Streamlined AJAX Integration&lt;/strong&gt;: HTMX simplifies AJAX integration directly into HTML, reducing reliance on complex JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leveraging Go's Concurrency Model&lt;/strong&gt;: Utilize Go's concurrency model to efficiently handle multiple connections, ensuring a responsive user experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainability and Readability&lt;/strong&gt;: Combining HTMX with Go results in clean, readable code, facilitating collaboration and scalability.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In summary, the combination of HTMX with a Go backend shows promise for web development. The GitHub repository provides a simple demo for practical exploration, and the YouTube overview offers a glimpse into HTMX's capabilities. Feel free to adapt and integrate these technologies as needed for your projects. Happy coding!&lt;/p&gt;

</description>
      <category>htmx</category>
      <category>webdev</category>
      <category>go</category>
    </item>
    <item>
      <title>Bridging Communities: An Overview of the WordPress ActivityPub Plugin</title>
      <dc:creator>Andreas Sander</dc:creator>
      <pubDate>Thu, 26 Oct 2023 13:00:00 +0000</pubDate>
      <link>https://dev.to/andi1984/bridging-communities-an-overview-of-the-wordpress-activitypub-plugin-o9o</link>
      <guid>https://dev.to/andi1984/bridging-communities-an-overview-of-the-wordpress-activitypub-plugin-o9o</guid>
      <description>&lt;h1&gt;
  
  
  &lt;strong&gt;Bridging Communities: An Overview of the WordPress ActivityPub Plugin&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;In a world constantly growing more interconnected, online communities are flourishing on various platforms. As a byproduct of this digital evolution, there's a rising need for diverse platforms to interact seamlessly with each other. This is where protocols like &lt;strong&gt;ActivityPub&lt;/strong&gt; play a pivotal role by promoting cross-platform interactions. For &lt;strong&gt;WordPress&lt;/strong&gt;, a platform that powers a significant portion of the web, integrating with ActivityPub through plugins is a strategic advancement. This post delves into the &lt;a href="https://wordpress.org/plugins/activitypub/"&gt;&lt;strong&gt;WordPress ActivityPub plugin&lt;/strong&gt;&lt;/a&gt;, highlighting its features, installation process, and the benefits it brings to the table.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What is ActivityPub?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ActivityPub&lt;/strong&gt; is a decentralized social networking protocol that enables various platforms to communicate with each other. Through ActivityPub, users on one platform can &lt;em&gt;follow, update, and interact&lt;/em&gt; with users on another platform seamlessly. This interoperability breaks down silos and cultivates a more inclusive digital ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;WordPress Meets ActivityPub&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;WordPress ActivityPub plugin&lt;/strong&gt; transforms your WordPress site into a federated social network member. Once installed and activated, your website can interact with other platforms that support the &lt;strong&gt;ActivityPub protocol&lt;/strong&gt;, like Mastodon, Pleroma, or PeerTube.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Features of the WordPress ActivityPub Plugin&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Cross-platform Communication&lt;/strong&gt;:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The primary advantage is the ability to communicate across different platforms, expanding your site's reach and engagement.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Follow and Be Followed&lt;/strong&gt;:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Users can &lt;em&gt;follow&lt;/em&gt; your WordPress site and receive updates, and vice versa.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Comment Synchronization&lt;/strong&gt;:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Comments can be synced between your WordPress site and federated networks, maintaining a cohesive discussion thread.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Customizable Activity Streams&lt;/strong&gt;:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tailor the information you share and receive by customizing your activity streams.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Installation Process&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Installing the &lt;strong&gt;WordPress ActivityPub plugin&lt;/strong&gt; is straightforward. Navigate to the 'Plugins' section in your WordPress dashboard, click on 'Add New', and search for 'ActivityPub'. Click 'Install' and then 'Activate'.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Bigger Picture&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The integration of &lt;strong&gt;ActivityPub&lt;/strong&gt; in WordPress via this plugin is more than just a technical enhancement; it's a step towards a more open and interconnected digital community. By bridging the gap between WordPress and the Fediverse, website owners can now partake in a larger, diversified conversation, fostering a sense of global digital camaraderie.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;WordPress ActivityPub plugin&lt;/strong&gt; is a testament to the open-source spirit, embodying the ethos of community, collaboration, and freedom that the digital realm can aspire to.&lt;/p&gt;

&lt;p&gt;As digital landscapes continue to evolve, the incorporation of protocols like &lt;strong&gt;ActivityPub&lt;/strong&gt; will increasingly become the norm rather than the exception, paving the way for a more inclusive and interactive web.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>activitypub</category>
      <category>fediverse</category>
    </item>
    <item>
      <title>Automatic Minimum Size of Flex Items</title>
      <dc:creator>Andreas Sander</dc:creator>
      <pubDate>Wed, 11 Oct 2023 14:07:00 +0000</pubDate>
      <link>https://dev.to/andi1984/automatic-minimum-size-of-flex-items-20af</link>
      <guid>https://dev.to/andi1984/automatic-minimum-size-of-flex-items-20af</guid>
      <description>&lt;p&gt;Today I would like to talk about flexbox and the automatic minimum size of flex items, means how the flexbox algorithm is internally calculating the minium size of flex child elements aka. flex items.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;

&lt;p&gt;Let us start looking at some example code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;section&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
    eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
    voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
    clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
    amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
    nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed
    diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
    clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
    amet.
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;section&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="m"&gt;50px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What do you think? How much will the height be of the &lt;code&gt;div&lt;/code&gt; flex child? &lt;strong&gt;It will be the minimum size the content will need to be rendered.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Example (Overflow container)
&lt;/h2&gt;

&lt;p&gt;Let us adjust the example by making the flex-child element a scroll container on its own:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="m"&gt;50px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;overflow-y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;scroll&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What will the height be now? &lt;strong&gt;It will be the flex-basis of 50px.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Explanation
&lt;/h2&gt;

&lt;p&gt;Why is that you my ask and I asked that myself several times. Having a look into the official specs can be helpful here:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To provide a more reasonable default minimum size for flex items, the used value of a main axis automatic minimum size on a flex item that is not a scroll container is a content-based minimum size; for scroll containers the automatic minimum size is zero, as usual.&lt;br&gt;
-- &lt;cite&gt;&lt;a href="https://www.w3.org/TR/css-flexbox-1/#min-size-auto"&gt;W3C spec&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thus this means:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For non-scroll containers, flexbox automatically increases the main axis minimum size to fit the content's needs&lt;/li&gt;
&lt;li&gt;For scroll containers, flexbox sets the minimum size to zero&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Flexbox is a great standard for flexible layouts. But especially on column based layouts I always have to remember myself about the situation shown above, that I need to specify a &lt;code&gt;min-height&lt;/code&gt; to make sure that the element is not increasing its height to fit the content. It always sounds counter intuitive to me, thus it is always good to read again through the specification in such kind of situations.&lt;/p&gt;

&lt;p&gt;I hope this was also helpful to you.&lt;/p&gt;

&lt;p&gt;Greets,&lt;/p&gt;

&lt;p&gt;Andi&lt;/p&gt;

</description>
      <category>css</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Container Queries in CSS: The Cool New Kid on the Block</title>
      <dc:creator>Andreas Sander</dc:creator>
      <pubDate>Sun, 08 Oct 2023 19:30:00 +0000</pubDate>
      <link>https://dev.to/andi1984/container-queries-in-css-the-cool-new-kid-on-the-block-3kck</link>
      <guid>https://dev.to/andi1984/container-queries-in-css-the-cool-new-kid-on-the-block-3kck</guid>
      <description>&lt;p&gt;Hey there, web design fans! Have you ever pulled your hair out trying to make a design look great on every screen size? Well, guess what? The web design world is abuzz with something new and exciting, and it's about to make your life a whole lot easier. Say hello to container queries in CSS!&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the Big Deal About Container Queries?
&lt;/h2&gt;

&lt;p&gt;Let's break it down. In the past, if you wanted to change how something looked based on the size of the browser window, you'd use media queries. They were like magic wands for making sites look good on any device. But they were more like a one-size-fits-all solution.&lt;/p&gt;

&lt;p&gt;Now, container queries have come onto the scene, and they're more like having a tailor-made suit. Instead of looking at the whole browser window, container queries look at the size of the container an element is in. That means you can have more control and flexibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Quick Peek at How They Work
&lt;/h2&gt;

&lt;p&gt;Here's a super simple example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;both&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;contain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;layout&lt;/span&gt; &lt;span class="n"&gt;inline-size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@container&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.child&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;lightblue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this, the inside element gets a fancy light blue background if the container is at least 500px wide. Cool, right? It's all about that &lt;code&gt;contain&lt;/code&gt; property, making things all nice and tidy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Should You Care?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Rocking the Component-Driven Design&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Imagine building blocks that adapt themselves no matter where you put them on the page. That's what container queries can do. They make building reusable, flexible components a breeze.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;No More Spaghetti Code&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Say goodbye to messy CSS that’s harder to untangle than a plate of spaghetti. With container queries, everything's more organized, like a neatly packed lunch box.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Unleashing Your Inner Designer&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Feel like an artist? Now you can paint even more intricate layouts without having to rely on global viewport sizes. Unleash your creativity and let your designs shine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Browser Support: The Not-So-Cool Part
&lt;/h2&gt;

&lt;p&gt;Okay, so here's the kicker: container queries are still pretty new, and not all browsers have gotten on board with them. But trust me, once they see how cool this is, they'll catch up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping It Up
&lt;/h2&gt;

&lt;p&gt;Container queries are like the cool new kid on the block who everyone wants to hang out with. They're all about giving you more control, letting you write cleaner code, and just making everything more fun.&lt;/p&gt;

&lt;p&gt;Whether you're a seasoned pro or just getting started with responsive design, give container queries a whirl. They might just become your new best friend in web development.&lt;/p&gt;

&lt;p&gt;So what are you waiting for? Dive in and start playing with container queries. Who knows what amazing things you'll create? Happy coding! 🎉&lt;/p&gt;

</description>
      <category>css</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The ugly part of CSS-in-JS</title>
      <dc:creator>Andreas Sander</dc:creator>
      <pubDate>Thu, 28 Sep 2023 20:12:26 +0000</pubDate>
      <link>https://dev.to/andi1984/the-ugly-part-of-css-in-js-2iph</link>
      <guid>https://dev.to/andi1984/the-ugly-part-of-css-in-js-2iph</guid>
      <description>&lt;p&gt;One often-overlooked aspect of CSS-in-JS is its "dark side"—the "JS" part. What does this mean? Essentially, when you're writing your styles &lt;strong&gt;within&lt;/strong&gt; JavaScript, you expose yourself to the quirks and intricacies of JS itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Issue Illustrated
&lt;/h3&gt;

&lt;p&gt;Consider the following example:&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/css-in-js-ugly-part-vcmtx5"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;You might notice that the styles defined in &lt;code&gt;IBreakStyles&lt;/code&gt; aren't applied as expected. Digging into the element with your development tools reveals a complete absence of styles.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Root Cause
&lt;/h3&gt;

&lt;p&gt;The culprit is a stray closing curly bracket within the template literal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;IBreakStyles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="s2"&gt;`
  padding: &lt;/span&gt;&lt;span class="p"&gt;${({&lt;/span&gt; &lt;span class="nx"&gt;$count&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;$count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;}; /* &amp;lt;-- The offender */
  color: red;
  background-color: blue;
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What happens is that the CSS-in-JS library (in this case, styled-components) interprets the template literal in a specific way. This leads to parsing the CSS via JavaScript, and the stray curly bracket disrupts the intended behavior—likely closing some parent block in the JS logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Silent Problem
&lt;/h3&gt;

&lt;p&gt;The real issue is the absence of any alert mechanism: no errors are thrown, and no red squiggly lines appear in your editor to warn you. If you're fortunate, your editor's CSS-in-JS tooling might catch this, but that's not a guarantee.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Thought to Ponder
&lt;/h3&gt;

&lt;p&gt;Given these complexities, it's worth questioning if a separation of concerns—CSS in CSS files and JS in JS files—might not be a more foolproof approach, much like the "good old times."&lt;/p&gt;

&lt;p&gt;Best regards,&lt;br&gt;&lt;br&gt;
Andi&lt;/p&gt;

</description>
      <category>css</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Evolution of Remote Work: Insights from Eight Years of Experience</title>
      <dc:creator>Andreas Sander</dc:creator>
      <pubDate>Sun, 27 Aug 2023 10:16:58 +0000</pubDate>
      <link>https://dev.to/andi1984/the-evolution-of-remote-work-insights-from-eight-years-of-experience-3183</link>
      <guid>https://dev.to/andi1984/the-evolution-of-remote-work-insights-from-eight-years-of-experience-3183</guid>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Evolution of Remote Work&lt;/strong&gt;: While the Covid-19 pandemic popularized remote work, some professionals had already been working remotely for years. The article offers insights from nearly eight years of remote work experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Challenges and Best Practices&lt;/strong&gt;: Remote work presents challenges like blurring work-life boundaries and missing face-to-face interactions. Best practices include designating a separate workspace, understanding core working hours, using video calls for better communication, and emphasizing asynchronous communication.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Not a Universal Solution&lt;/strong&gt;: While remote work offers flexibility and has proven viable during the pandemic, it's not suitable for everyone. A company's success is determined more by its culture than its work model, as highlighted in an external Forbes article.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;During the height of the Covid-19 pandemic, remote work became the norm. Numerous companies transitioned to offering remote work options, and &lt;a href="https://www.statista.com/statistics/1122987/change-in-remote-work-trends-after-covid-in-usa/"&gt;many continue to do so&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, some of us, including myself, had the privilege of working remotely long before the pandemic hit. In this article, I'll share my reflections on nearly eight years of remote work and the lesser-discussed aspects of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Importance of Work-Life Boundaries
&lt;/h2&gt;

&lt;p&gt;The pandemic forced many to adapt to working from unconventional spaces like kitchens and living rooms. While this shift posed physical challenges, it also blurred the lines between personal and professional life. The omnipresence of work can be overwhelming.&lt;/p&gt;

&lt;p&gt;If feasible, both financially and spatially, it's beneficial to designate a separate workspace within your home. In countries like Germany, having a dedicated workspace can also have tax and insurance implications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding Core Working Hours
&lt;/h2&gt;

&lt;p&gt;While remote work offers flexibility in terms of where and when you work, there are often unspoken expectations about core working hours. Your employer likely has a window of time during which they expect you to be available.&lt;/p&gt;

&lt;p&gt;The beauty of remote work is the ability to weave in personal errands or appointments, but this flexibility varies based on your role and company culture. Over time, you'll become attuned to your colleagues' schedules and availabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Connections: Turn on Your Camera
&lt;/h2&gt;

&lt;p&gt;Remote work lacks the nuances of face-to-face interactions. In a physical office, subtle cues like facial expressions provide context. When working remotely, video calls can bridge this gap.&lt;/p&gt;

&lt;p&gt;It's beneficial for team members to have their cameras on during meetings. This fosters better communication and understanding. Additionally, in-person meetups and retreats can strengthen team bonds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Power of Asynchronous Communication
&lt;/h2&gt;

&lt;p&gt;In a remote setting, you can't just walk over to a colleague's desk for a quick chat. Asynchronous communication becomes crucial. Document everything—from decisions to meeting minutes—and ensure they're accessible to the team. Whether it's a wiki, a ticketing system, or a chat platform, consistency in documentation is key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remote Work Isn't One Size Fits All
&lt;/h2&gt;

&lt;p&gt;While the pandemic highlighted the viability of remote work, it's not suitable for everyone or every job. Some may struggle with the isolation, miss casual office interactions, or find it challenging to maintain discipline.&lt;/p&gt;

&lt;p&gt;Remote work is a testament to the adaptability of the modern workforce, but it's not the ideal setup for everyone. As highlighted in this &lt;a href="https://www.forbes.com/sites/johnrau/2023/08/22/does-remote-work-hurt-workplace-culture-thats-the-wrong-question/?sh=749b2c641ca3"&gt;Forbes article&lt;/a&gt;, a company's success isn't solely based on its work model but its culture.&lt;/p&gt;

</description>
      <category>remote</category>
      <category>workplace</category>
      <category>life</category>
    </item>
    <item>
      <title>Setting Up a Node CLI with ChatGPT</title>
      <dc:creator>Andreas Sander</dc:creator>
      <pubDate>Tue, 15 Aug 2023 17:52:42 +0000</pubDate>
      <link>https://dev.to/andi1984/setting-up-a-node-cli-with-chatgpt-4j9m</link>
      <guid>https://dev.to/andi1984/setting-up-a-node-cli-with-chatgpt-4j9m</guid>
      <description>&lt;p&gt;Hey devcommunity! 🚀&lt;/p&gt;

&lt;p&gt;I've been diving into setting up a Node CLI using a ChatGPT account account. Apart from the intricacies of the access token, I found the process to be pretty straightforward. If anyone's interested, I just built up this &lt;a href="https://github.com/andi1984/chatgpt-demo"&gt;very fast sample repo&lt;/a&gt; that might be helpful as a starter.&lt;/p&gt;

&lt;p&gt;On a related note, for those looking into automatic access token generation, I stumbled upon &lt;a href="https://github.com/michael-dm/openai-token"&gt;openai-token&lt;/a&gt;. It seems to work with a username/password combo. Has anyone tried this or have any thoughts on it?&lt;/p&gt;

&lt;p&gt;Would love to hear your experiences or any tips you might have building ChatGPT CLIs via TypeScript! 💡&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>discuss</category>
      <category>node</category>
    </item>
    <item>
      <title>My Neovim journey</title>
      <dc:creator>Andreas Sander</dc:creator>
      <pubDate>Sat, 13 Nov 2021 17:36:09 +0000</pubDate>
      <link>https://dev.to/andi1984/my-neovim-journey-3on6</link>
      <guid>https://dev.to/andi1984/my-neovim-journey-3on6</guid>
      <description>&lt;p&gt;Do you know &lt;a href="https://www.vim.org/"&gt;Vim&lt;/a&gt;? This lightweight, but&lt;br&gt;
weird-feeling, editor you might (need) to use on a server shell&lt;br&gt;
for looking through files etc.?&lt;/p&gt;

&lt;p&gt;I never got comfortable with it, but I also did not spend time&lt;br&gt;
looking into it...&lt;/p&gt;

&lt;h2&gt;
  
  
  Neovim to Vim is like Yarn to NPM?
&lt;/h2&gt;

&lt;p&gt;Now there is &lt;a href="https://neovim.io/"&gt;Neovim&lt;/a&gt;. Neovim is a &lt;em&gt;fork&lt;/em&gt;,&lt;br&gt;
an implementation of Vim. And it is actually quite&lt;br&gt;
&lt;a href="https://twitter.com/github_tracker/status/1446845600826372100"&gt;popular&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Neovim is an implementation of Vim, but focused on&lt;br&gt;
extensibility and usability. The key feature is asynchronous&lt;br&gt;
plugins (mostly) compatible with Vim, which significantly&lt;br&gt;
improves performance for things like code-completion and&lt;br&gt;
linting.&lt;br&gt;
-- &lt;cite&gt;&lt;a href="https://console.dev/articles/neovim-best-code-editor-ide-for-developers/"&gt;console.dev&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How did I get there?
&lt;/h2&gt;

&lt;p&gt;How did I, as a &lt;a href="https://code.visualstudio.com/"&gt;VSCode&lt;/a&gt; power user and&lt;br&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=andi1984.tinypng"&gt;extension&lt;/a&gt;&lt;br&gt;
creator, ended up in using Neovim?&lt;/p&gt;

&lt;p&gt;Well, VSCode is based on &lt;a href="https://www.electronjs.org/"&gt;Electron&lt;/a&gt; and in the end&lt;br&gt;
with dozens of extensions enabled, you basically use a Chromium browser with&lt;br&gt;
extensions under the hood that keep any fans - except the M1 ones -&lt;br&gt;
busy. Due to RAM memory limitations on my machine, I ended up in constant&lt;br&gt;
memory (swap) management recently.&lt;/p&gt;

&lt;p&gt;Thus, my primary motivation to try out Neovim was: reducing load on my&lt;br&gt;
machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mouse is lava
&lt;/h2&gt;

&lt;p&gt;One of the key concepts of (neo)Vim is to not &lt;em&gt;waste&lt;/em&gt; any time moving your&lt;br&gt;
fingers away from keyboard (e.g. for using your mouse to interact with the&lt;br&gt;
editor's UI).&lt;/p&gt;

&lt;p&gt;It is all about your &lt;a href="https://en.wikipedia.org/wiki/Muscle_memory"&gt;muscle&lt;br&gt;
memory&lt;/a&gt; to optimize your workflow&lt;br&gt;
by using default keyboard navigation, custom shortcuts, but also plugins you&lt;br&gt;
can install as you can do in VSCode. &lt;/p&gt;

&lt;p&gt;Thus after many, many years of training, your Neovim muscle memory is huge enough to &lt;br&gt;
fight against &lt;a href="https://www.youtube.com/watch?v=H3o4l4GVLW0"&gt;The Primeagen&lt;/a&gt; who&lt;br&gt;
is typing and navigating faster within Vim than coconut oil is dripping - pun intended.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to start
&lt;/h2&gt;

&lt;p&gt;You may say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I am overwhelmed! Help me!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Calm down - I have been there before. Due to the steep learning curve, you need&lt;br&gt;
to have some kind of motivation to start looking into the Vim ecosystem - in&lt;br&gt;
my case it was due to hardware limitation reasons.&lt;/p&gt;

&lt;p&gt;Without any kind of motivation, you will open and close it frustratingly after&lt;br&gt;
half a minute of question marks popping up inside your brain. I did this for&lt;br&gt;
many years, piling up a little more frustration on every occasion when I failed&lt;br&gt;
doing basic work and navigation within Vim (e.g. while ssh'ing on a server).&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources
&lt;/h3&gt;

&lt;p&gt;As Vim was introduced in &lt;a href="https://de.wikipedia.org/wiki/Vim"&gt;&lt;em&gt;1991&lt;/em&gt;&lt;/a&gt; which is&lt;br&gt;
maybe even before your own "release" date, you can imagine that there are A LOT&lt;br&gt;
of resources out there on the web.&lt;/p&gt;

&lt;p&gt;Here are just a few that I collected over time (tbc.):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thevaluale.dev/vim-beginner/"&gt;Beginner guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vimhelp.org/"&gt;Online-version of the help page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devhints.io/vim"&gt;Cheatsheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vim.fandom.com/wiki/Vim_Tips_Wiki"&gt;Tips Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vimawesome.com/"&gt;Plugin Database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://themouseless.dev/vim/"&gt;(Unpublished) Book "Learning to play Vim"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://elijahmanor.com/blog/neovim-tmux"&gt;"Neovim and Tmux for JavaScript development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The community
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://www.vim.org/community.php"&gt;Vim&lt;/a&gt; and&lt;br&gt;
&lt;a href="https://neovim.io/community/"&gt;Neovim&lt;/a&gt; community is quite new to me, but there&lt;br&gt;
are definitely some "vimstigator" or at least quite famous people on the social&lt;br&gt;
interwebs.&lt;/p&gt;

&lt;h4&gt;
  
  
  ThePrimeagen
&lt;/h4&gt;

&lt;p&gt;The first one I came across is ThePrimeagen. I randomly landed on one of his&lt;br&gt;
&lt;a href="https://www.twitch.tv/theprimeagen"&gt;streams&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;IMHO Prime - I even don't know his real name - is a proud dad, &lt;a href="https://twitter.com/ThePrimeagen/status/1446177392536477703"&gt;cow&lt;br&gt;
owner&lt;/a&gt;, &lt;a href="https://twitter.com/ThePrimeagen/status/1445163951201955847"&gt;nature&lt;br&gt;
guy&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;No, seriously. He works at Netflix and thus he is a pretty smart guy. But at&lt;br&gt;
the same time he is a born entertainer which results in a stream with hundreds&lt;br&gt;
watching him working on a C++ implementation of a network layer for Netflix. &lt;em&gt;I&lt;br&gt;
am not kidding!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And his Vim skills are crazy as he is - but in a good way. If you have prepared&lt;br&gt;
yourself with enough coconut oil, you are safe to watch his streams. :)&lt;/p&gt;

&lt;h3&gt;
  
  
  TJ DeVries
&lt;/h3&gt;

&lt;p&gt;If you know ThePrimeagen, you most probably also know TJ.&lt;br&gt;
&lt;a href="https://github.com/tjdevries"&gt;TJ&lt;/a&gt; is actually a&lt;br&gt;
&lt;em&gt;core maintainer of Neovim&lt;/em&gt;! So he is building the thing I try you to tell&lt;br&gt;
about. But he can do probably hundred times better than me and knows all the&lt;br&gt;
insights.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.vimconf.live/"&gt;VimConf&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;At the 29th to the 30th of October 2021 there will be a second version of&lt;br&gt;
VimConf happening online. I think this event will be a good opportunity to get&lt;br&gt;
in contact with the community and learn new, awesome stuff.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dotfiles, Plugins, Configurations...
&lt;/h3&gt;

&lt;p&gt;Take your time!&lt;/p&gt;

&lt;p&gt;Altogether it is important that you &lt;em&gt;start your vim journey on your own&lt;/em&gt; with&lt;br&gt;
the help of others. But it is all about &lt;em&gt;your workflows&lt;/em&gt;, &lt;em&gt;your needs&lt;/em&gt; and&lt;br&gt;
&lt;em&gt;your muscle memory&lt;/em&gt;!&lt;/p&gt;

&lt;p&gt;Over time you will find out which settings you want to (un)set, which plugins&lt;br&gt;
might be helpful for your work and which configurations you might want to copy&lt;br&gt;
paste from someone else or you want to write on your own.&lt;/p&gt;

&lt;p&gt;All this needs some decent amount of time you will need to invest, but you&lt;br&gt;
should not care about that at the very beginning.&lt;/p&gt;

&lt;p&gt;I just started this journey mid 2021 and thus I see myself at the very&lt;br&gt;
beginning of this process after a few months now. &lt;/p&gt;

&lt;p&gt;In case you really want to dig into some dotfiles and vim configurations, watch&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=DogKdiRx7ls"&gt;ThePrimeagen's YT videos&lt;/a&gt; and dig&lt;br&gt;
into other people's dotfiles.&lt;/p&gt;

&lt;p&gt;Shameless plug: I have &lt;a href="https://github.com/andi1984/dotfiles/tree/master/vim/lua"&gt;my dotfiles&lt;br&gt;
public&lt;/a&gt;, but be aware&lt;br&gt;
those are &lt;em&gt;my&lt;/em&gt; dotfiles, they fit my needs and I consider themself "Work in&lt;br&gt;
progress". So I am not sure how much value they might bring to you.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;And now I wish you an awesome start with your very own Vim journey!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sincerely yours,&lt;/p&gt;

&lt;p&gt;Andi&lt;/p&gt;

</description>
      <category>vim</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Twitch Tech Streamers</title>
      <dc:creator>Andreas Sander</dc:creator>
      <pubDate>Sun, 28 Mar 2021 20:00:32 +0000</pubDate>
      <link>https://dev.to/andi1984/twitch-tech-streamers-23l0</link>
      <guid>https://dev.to/andi1984/twitch-tech-streamers-23l0</guid>
      <description>&lt;p&gt;I stopped watching TV nearly five years ago in favor of Youtube and Twitch content that I can choose myself.&lt;/p&gt;

&lt;p&gt;In this note I want to share a list of tech streamers on Twitch that I regularly watch:&lt;/p&gt;

&lt;h2&gt;
  
  
  German
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/jhkrueger"&gt;Jens Krüger&lt;/a&gt; is a german scientist and a university professor in real life. The streams are feeling like having a 1-to-1 session during your study time.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/dialogiktv"&gt;DialogikTV&lt;/a&gt; is a very funny, entertaining streamer doing a lot of Twitch related tech projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  English
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I follow &lt;a href="https://www.twitch.tv/whitep4nth3r"&gt;Salma&lt;/a&gt; since a few weeks. Her
streams are really cozy and welcoming.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/timbeaudet"&gt;Tim Beaudet&lt;/a&gt; is an Indie gamedeveloper working on his own racing games. And he also does a lot of pair programming with&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/codico"&gt;Codico&lt;/a&gt; is a younger developer, lately streaming about setting up Vim and working on his speed typing tool &lt;a href="https://speedtyper.dev"&gt;SpeedTyper&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/stefanjudis"&gt;Stefan Judis&lt;/a&gt; is a german based developer
that occasionally streams on Twitch. He has a pretty &lt;a href="https://www.stefanjudis.com/newsletter/"&gt;famous newsletter&lt;/a&gt; you
should subscribe to as well!&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/thekitze"&gt;Kitze&lt;/a&gt; is the founder of
&lt;a href="https://sizzy.co/"&gt;sizzy&lt;/a&gt; and &lt;a href="https://www.reactacademy.io/"&gt;React Academy&lt;/a&gt;.
I really like his unique humor. Lately he seems to be less streaming, but if
you see him live, stop by and have a chat with him.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/jmswrnr"&gt;James Werner&lt;/a&gt; is a senior software developer with various streaming topics, also playing video games from time to time.&lt;/li&gt;
&lt;li&gt;If you want to see a VIM power user, watch &lt;a href="https://www.twitch.tv/theprimeagen"&gt;The
Primeagen&lt;/a&gt;! He is so much talented in
making up a funny, entertaining show while developing heavy complex code. For
me he is a real master of Twitch dev entertainment.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/cassidoo"&gt;Cassidoo&lt;/a&gt; is a keyboard fanatic, female
streamer, working for Netlify. She does a lot of AMA and Just chatting
streams, speaking about tech careers, news and of course... keyboards! She
motivated me to buy a new mechanical keyboard, I'm currently writing this text
with.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/clarkio"&gt;ClarkIO&lt;/a&gt; is a super nice and funny developer.
He is pretty famous for his alliance with the VSCode editor and his content
around working with the editor. His streams are famous for &lt;a href="https://www.kliptok.com/clip/BraveAltruisticVelociraptorKappaRoss-2lZAJf5HB0YrkAW0"&gt;Clark's nice vocals&lt;/a&gt;. :)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/baldbeardedbuilder"&gt;BaldBeardedBuilder&lt;/a&gt; aka. Michael
Jolley is a "real" bald, bearded builder. He is a funny guy, mostly doing
JS/Node related projects. Sometimes he seems to light aroma candles. :)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/jlengstorf"&gt;Jason Lengstorf&lt;/a&gt; is for me THE most
professional tech streamer out there with an amazing &lt;a href="https://www.learnwithjason.dev/schedule"&gt;schedule&lt;/a&gt;. He is normally
always do streams where Jason invites partners that bring in their own topic.
If you want to learn something new every week, you should learn together with
Jason in his streams!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Suggestions?
&lt;/h2&gt;

&lt;p&gt;Do you have any suggestions to this list? Let me know! I'm always interested in&lt;br&gt;
new tech streamers to watch and I really like to see so many technical streams&lt;br&gt;
lately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start streaming!
&lt;/h2&gt;

&lt;p&gt;I &lt;a href="https://www.andi1984.dev/posts/personal/streaming/"&gt;reported lately&lt;/a&gt; that I started&lt;br&gt;
streaming end of 2020 and in case you're asking yourself whether to stream&lt;br&gt;
yourself: &lt;em&gt;Do it if you want to do it!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;See you on &lt;a href="https://www.twitch.tv/andi1984"&gt;Twitch&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Greets,&lt;/p&gt;

&lt;p&gt;Andi&lt;/p&gt;




&lt;p&gt;Credits:&lt;/p&gt;

&lt;p&gt;Header image: &lt;a href="https://unsplash.com/photos/7SDoly3FV_0"&gt;https://unsplash.com/photos/7SDoly3FV_0&lt;/a&gt;&lt;/p&gt;

</description>
      <category>stream</category>
      <category>twitch</category>
      <category>techtalks</category>
    </item>
  </channel>
</rss>
