<?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: Logan Schmidt</title>
    <description>The latest articles on DEV Community by Logan Schmidt (@d4rkd0s).</description>
    <link>https://dev.to/d4rkd0s</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%2F486500%2Ff6ee5a9b-f9b3-4b31-8653-be152bad9262.png</url>
      <title>DEV Community: Logan Schmidt</title>
      <link>https://dev.to/d4rkd0s</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/d4rkd0s"/>
    <language>en</language>
    <item>
      <title>How-to use a Custom Start Button Image in Linux Mint</title>
      <dc:creator>Logan Schmidt</dc:creator>
      <pubDate>Wed, 05 Nov 2025 19:50:38 +0000</pubDate>
      <link>https://dev.to/d4rkd0s/how-to-use-a-custom-start-button-image-in-linux-mint-5d77</link>
      <guid>https://dev.to/d4rkd0s/how-to-use-a-custom-start-button-image-in-linux-mint-5d77</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw8cox74zkbcd0tqhipg2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw8cox74zkbcd0tqhipg2.png" alt=" " width="701" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I spent a while trying to get a custom Windows XP-style start button to display correctly on my Linux Mint Cinnamon desktop. The button would work sometimes, but the solution was fragile and caused unintended side effects - like the start button image appearing in the Linux Mint Welcome Screen's lower right corner.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Didn't Work
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The gsettings Approach ❌
&lt;/h3&gt;

&lt;p&gt;Initially, I tried using &lt;code&gt;gsettings&lt;/code&gt; to force the icon:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gsettings &lt;span class="nb"&gt;set &lt;/span&gt;com.linuxmint.mintmenu applet-icon &lt;span class="s2"&gt;"file:///home/user/Desktop/start-button.svg"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why this failed:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This sets a &lt;strong&gt;system-wide&lt;/strong&gt; configuration that affects all applications&lt;/li&gt;
&lt;li&gt;The start button image leaked into other parts of the system (Welcome Screen)&lt;/li&gt;
&lt;li&gt;It created "messes" that looked unprofessional&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Base64 Data URI Approach ❌
&lt;/h3&gt;

&lt;p&gt;Next, I embedded the PNG image directly into the CSS as a base64 data URI:&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;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;"data:image/png;base64,iVBORw0KGgo..."&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nt"&gt;important&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why this failed:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The base64 string was enormous (12KB+ image encoded)&lt;/li&gt;
&lt;li&gt;The image simply wouldn't display despite correct CSS selectors&lt;/li&gt;
&lt;li&gt;Overly complex and hard to maintain&lt;/li&gt;
&lt;li&gt;The approach was "overworked" - too much effort for what should be simple&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Finally Worked ✅
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Simple File Path Solution
&lt;/h3&gt;

&lt;p&gt;The solution is elegantly simple: &lt;br&gt;
&lt;strong&gt;Use a relative file path in CSS&lt;/strong&gt;.&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;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;"assets/start-button.png"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nt"&gt;important&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No base64 encoding. No gsettings. Just a clean, relative file path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-Step Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Prepare Your Image
&lt;/h3&gt;

&lt;p&gt;Place your start button image in the theme's assets directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;~/.themes/Mint-XP/cinnamon/assets/start-button.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Image specs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dimensions: 122×40 pixels&lt;/li&gt;
&lt;li&gt;Format: PNG (transparent background recommended)&lt;/li&gt;
&lt;li&gt;Size: ~12KB&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Edit the Theme CSS
&lt;/h3&gt;

&lt;p&gt;Open your theme's CSS file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;~/.themes/Mint-XP/cinnamon/cinnamon.css
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add this CSS block (or modify if it already exists):&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="c"&gt;/* === Windows XP Start Button Override === */&lt;/span&gt;
&lt;span class="nf"&gt;#panelLeft&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="nd"&gt;:first-child&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url("assets/start-button.png")&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-repeat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;no-repeat&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0px&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;122px&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;122px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;122px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;122px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;max-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Hide the default icon */&lt;/span&gt;
&lt;span class="nf"&gt;#panelLeft&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="nd"&gt;:first-child&lt;/span&gt; &lt;span class="nt"&gt;StIcon&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nf"&gt;#panelLeft&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="nd"&gt;:first-child&lt;/span&gt; &lt;span class="nc"&gt;.applet-icon&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;icon-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Hide the label text */&lt;/span&gt;
&lt;span class="nf"&gt;#panelLeft&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="nd"&gt;:first-child&lt;/span&gt; &lt;span class="nc"&gt;.applet-label&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Adjust spacing for next applet */&lt;/span&gt;
&lt;span class="nf"&gt;#panelLeft&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="nd"&gt;:first-child&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;margin-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-2px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Remove borders from panel elements */&lt;/span&gt;
&lt;span class="nf"&gt;#panelLeft&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nf"&gt;#panelLeft&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nf"&gt;#panelLeft&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="nd"&gt;:first-child&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nf"&gt;#panelLeft&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="nd"&gt;:first-child&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.panel-launchers&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.panel-launcher&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.panel-launcher&lt;/span&gt;&lt;span class="nd"&gt;:first-child&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Hide separators */&lt;/span&gt;
&lt;span class="nf"&gt;#panelLeft&lt;/span&gt; &lt;span class="nc"&gt;.applet-separator&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nf"&gt;#panelLeft&lt;/span&gt; &lt;span class="nc"&gt;.applet-separator-line&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&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="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Ensure other panels aren't affected */&lt;/span&gt;
&lt;span class="nf"&gt;#panelRight&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="nd"&gt;:first-child&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nf"&gt;#panelCenter&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="nd"&gt;:first-child&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nf"&gt;#panelTop&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="nd"&gt;:first-child&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nf"&gt;#panelBottom&lt;/span&gt; &lt;span class="nc"&gt;.applet-box&lt;/span&gt;&lt;span class="nd"&gt;:first-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="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;/* === End Windows XP Start Button Override === */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Clear Any gsettings Overrides
&lt;/h3&gt;

&lt;p&gt;Ensure no system-wide settings are interfering:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gsettings &lt;span class="nb"&gt;set &lt;/span&gt;com.linuxmint.mintmenu applet-icon &lt;span class="s1"&gt;''&lt;/span&gt;
gsettings &lt;span class="nb"&gt;set &lt;/span&gt;org.cinnamon app-menu-icon-name &lt;span class="s1"&gt;''&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Reload Cinnamon
&lt;/h3&gt;

&lt;p&gt;Press &lt;code&gt;Alt+F2&lt;/code&gt;, type &lt;code&gt;r&lt;/code&gt;, and press Enter to reload Cinnamon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Lessons Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Keep It Simple&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The simplest solution is often the best. A relative file path beat complex base64 encoding.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Avoid System-Wide Settings&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Using &lt;code&gt;gsettings&lt;/code&gt; for theme customization can have unintended consequences. CSS-only solutions are safer and more maintainable.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;The !important Flag Matters&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Cinnamon's CSS has high specificity. Using &lt;code&gt;!important&lt;/code&gt; on every property ensures your styles take precedence.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Relative Paths Work&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;CSS file paths are relative to the CSS file location:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSS at: &lt;code&gt;~/.themes/Mint-XP/cinnamon/cinnamon.css&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Image at: &lt;code&gt;~/.themes/Mint-XP/cinnamon/assets/start-button.png&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Reference as: &lt;code&gt;url("assets/start-button.png")&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Test Incrementally&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When I tested with a solid color background (&lt;code&gt;background-color: red !important;&lt;/code&gt;), I confirmed the CSS selector was working. This proved the issue was with the image reference, not the targeting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;p&gt;If your button doesn't appear:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verify the image exists:&lt;/strong&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;ls&lt;/span&gt; &lt;span class="nt"&gt;-lh&lt;/span&gt; ~/.themes/YOUR-THEME/cinnamon/assets/start-button.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check file permissions:&lt;/strong&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;chmod &lt;/span&gt;644 ~/.themes/YOUR-THEME/cinnamon/assets/start-button.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Test with a solid color first:&lt;/strong&gt;
Replace the background-image line temporarily with:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;   &lt;span class="nt"&gt;background-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;red&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nt"&gt;important&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you see a red box, your selector works and the issue is the image path.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check for typos in the path:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File name is case-sensitive&lt;/li&gt;
&lt;li&gt;Path is relative to the CSS file&lt;/li&gt;
&lt;li&gt;No leading slash for relative paths&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Clear gsettings:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   gsettings reset com.linuxmint.mintmenu applet-icon
   gsettings reset org.cinnamon app-menu-icon-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Custom desktop theming is about more than aesthetics - it's about making your workspace yours. But when solutions are fragile or create side effects, they undermine the experience. This CSS-only approach is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clean&lt;/strong&gt;: No system-wide settings pollution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainable&lt;/strong&gt;: Easy to modify or disable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portable&lt;/strong&gt;: Works across Cinnamon updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictable&lt;/strong&gt;: No side effects in other UI elements&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;After 5 days of trying complex solutions, the answer was simple: use a relative file path in CSS. Sometimes the best solution is the one that doesn't try to be clever.&lt;/p&gt;

&lt;p&gt;If you're customizing Cinnamon themes, remember: &lt;strong&gt;CSS file paths, not gsettings, and definitely not base64.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;System Info:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux Mint (Cinnamon Desktop Environment)&lt;/li&gt;
&lt;li&gt;Theme: Mint-XP (custom modification)&lt;/li&gt;
&lt;li&gt;Image: 122×40 PNG, ~12KB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Files Modified:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;~/.themes/Mint-XP/cinnamon/cinnamon.css&lt;/code&gt; (CSS styling)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;~/.themes/Mint-XP/cinnamon/assets/start-button.png&lt;/code&gt; (image asset)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to adapt this solution for your own custom panel buttons!&lt;/p&gt;

</description>
      <category>linuxmint</category>
      <category>linux</category>
      <category>ui</category>
      <category>css</category>
    </item>
    <item>
      <title>EC2 Linux "100% Full Disk" Recovery Pathway</title>
      <dc:creator>Logan Schmidt</dc:creator>
      <pubDate>Wed, 13 Dec 2023 17:57:41 +0000</pubDate>
      <link>https://dev.to/d4rkd0s/ec2-linux-full-disk-recovery-pathway-1a8o</link>
      <guid>https://dev.to/d4rkd0s/ec2-linux-full-disk-recovery-pathway-1a8o</guid>
      <description>&lt;p&gt;I've been working with several Linux EC2s over the years.&lt;/p&gt;

&lt;p&gt;If you've ever run into your Linux EC2 server not behaving properly, one of the first things I would check is the DISK usage.&lt;/p&gt;

&lt;p&gt;The disks for most "debug" servers are typically minimal, and can easily fill up.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Check your disk usage/space using &lt;code&gt;df -h&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Typically look for whatever is mounted to "root" or &lt;code&gt;/&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@ip-10-75-3-227:/home/ubuntu# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            473M     0  473M   0% /dev
tmpfs            98M   11M   87M  11% /run
/dev/xvda1      7.7G  7.7G     0 100% /
tmpfs           488M     0  488M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           488M     0  488M   0% /sys/fs/cgroup
/dev/loop0       56M   56M     0 100% /snap/core18/2785
/dev/loop1      117M  117M     0 100% /snap/core/14946
/dev/loop2      119M  119M     0 100% /snap/core/15511
/dev/loop3       25M   25M     0 100% /snap/amazon-ssm-agent/6312
/dev/loop4       25M   25M     0 100% /snap/amazon-ssm-agent/6563
/dev/loop5       56M   56M     0 100% /snap/core18/2745
tmpfs            98M     0   98M   0% /run/user/1000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I know this can be a lot to look at, so let me draw your attention to the problematic spot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/dev/xvda1      7.7G  7.7G     0 100% /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;100% used space and 7.7G out of 7.7G used.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's full...&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Reclaim enough space to be able to perform commands.
&lt;/h2&gt;

&lt;p&gt;Using Ubuntu, &lt;code&gt;apt-get clean&lt;/code&gt;&lt;br&gt;
(&lt;code&gt;sudo yum clean all&lt;/code&gt; on Debian systems)&lt;br&gt;
(&lt;code&gt;sudo dnf clean all&lt;/code&gt; on Amazon Linux 2023+)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@ip-10-75-3-227:/home/ubuntu# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            473M     0  473M   0% /dev
tmpfs            98M  716K   97M   1% /run
/dev/xvda1      7.7G  7.6G  156M  99% /
tmpfs           488M     0  488M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           488M     0  488M   0% /sys/fs/cgroup
/dev/loop0       56M   56M     0 100% /snap/core18/2785
/dev/loop1      117M  117M     0 100% /snap/core/14946
/dev/loop2      119M  119M     0 100% /snap/core/15511
/dev/loop3       25M   25M     0 100% /snap/amazon-ssm-agent/6312
/dev/loop4       25M   25M     0 100% /snap/amazon-ssm-agent/6563
/dev/loop5       56M   56M     0 100% /snap/core18/2745
tmpfs            98M     0   98M   0% /run/user/1000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Scale the disk in the AWS Console
&lt;/h2&gt;

&lt;p&gt;EC2 &amp;gt; Volumes &amp;gt; Modify&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxoggod9g6mkr8k3rf348.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxoggod9g6mkr8k3rf348.png" alt=" " width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In our case, we're going from 8GiB to 10GiB.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Check the block to expand
&lt;/h2&gt;

&lt;p&gt;Use &lt;code&gt;lsblk&lt;/code&gt; to list blocks out.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@ip-10-75-3-227:/home/ubuntu# lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0     7:0    0  55.7M  1 loop /snap/core18/2785
loop1     7:1    0 116.8M  1 loop /snap/core/14946
loop2     7:2    0 118.2M  1 loop /snap/core/15511
loop3     7:3    0  24.4M  1 loop /snap/amazon-ssm-agent/6312
loop4     7:4    0  24.8M  1 loop /snap/amazon-ssm-agent/6563
loop5     7:5    0  55.7M  1 loop /snap/core18/2745
xvda    202:0    0     8G  0 disk
└─xvda1 202:1    0     8G  0 part /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case &lt;code&gt;xvda&lt;/code&gt; and partition &lt;code&gt;1&lt;/code&gt; is "root" for us.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Scale the disk using the following two commands
&lt;/h2&gt;

&lt;p&gt;First, grow the partition,&lt;br&gt;
&lt;code&gt;growpart xvda 1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Lastly, resize the file system to use the new space,&lt;br&gt;
&lt;code&gt;resize2fs /dev/root&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Confirm with &lt;code&gt;df -h&lt;/code&gt; we're done!
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@ec2:/home/ubuntu# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            473M     0  473M   0% /dev
tmpfs            98M  776K   97M   1% /run
/dev/xvda1      9.7G  3.7G  6.0G  38% /
tmpfs           488M     0  488M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           488M     0  488M   0% /sys/fs/cgroup
/dev/loop1       26M   26M     0 100% /snap/amazon-ssm-agent/5656
/dev/loop0       56M   56M     0 100% /snap/core18/2679
/dev/loop2      106M  106M     0 100% /snap/core/16202
/dev/loop3      117M  117M     0 100% /snap/core/14784
/dev/loop4       56M   56M     0 100% /snap/core18/2708
/dev/loop5       25M   25M     0 100% /snap/amazon-ssm-agent/6312
tmpfs            98M     0   98M   0% /run/user/1000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;/dev/xvda1      9.7G  3.7G  6.0G  38% /&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;That's all!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>ec2</category>
      <category>ebs</category>
      <category>recovery</category>
    </item>
    <item>
      <title>AWS re:invent 2023 - A Zillennial's First Time</title>
      <dc:creator>Logan Schmidt</dc:creator>
      <pubDate>Sat, 02 Dec 2023 01:54:12 +0000</pubDate>
      <link>https://dev.to/d4rkd0s/aws-reinvent-2023-a-zillennials-first-time-1l83</link>
      <guid>https://dev.to/d4rkd0s/aws-reinvent-2023-a-zillennials-first-time-1l83</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;This is a short, sweet, information packed post I'll provide YOU with some tips and explanations which I found invaluable while attending &lt;a href="https://reinvent.awsevents.com/" rel="noopener noreferrer"&gt;AWS Re:invent&lt;/a&gt; in 2023.&lt;/p&gt;

&lt;h3&gt;
  
  
  Travel tips ✈️
&lt;/h3&gt;

&lt;p&gt;Keep a day for traveling both at the start, come on &lt;strong&gt;Sunday&lt;/strong&gt; not too late at night. 🛫&lt;/p&gt;

&lt;p&gt;And then when leaving, depart later on &lt;strong&gt;Friday&lt;/strong&gt; to give yourself time to recover from the longer week, and re:play (on Thursday) 🛬&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F02oywcddbphx4viprenw.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F02oywcddbphx4viprenw.JPG" alt="Vegas airport photo" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Hotel choice 🏨
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://mgmgrand.mgmresorts.com/en.html" rel="noopener noreferrer"&gt;MGM Grand&lt;/a&gt;&lt;/strong&gt; where I stayed, is a great affordable "hub" for the event.&lt;/p&gt;

&lt;p&gt;Why is this a good hotel for re:invent?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Easy fast travel to other event hotels&lt;/strong&gt; (First thing in the morning @ 7am the monorail starts &lt;em&gt;from&lt;/em&gt; MGM Grand and goes &lt;em&gt;to&lt;/em&gt; everywhere else, so you'll always have a spot on the monorail if you get there before 7am :) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg1.wsimg.com%2Fisteam%2Fip%2Fe9b5e861-dc01-4cf2-bf28-3f044acca704%2FMonorail_Map.jpg%2F%3A%2Frs%3Dw%3A1240%2Ch%3A620%2Ccg%3Atrue%2Cm%2Fcr%3Dw%3A1240%2Ch%3A620" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg1.wsimg.com%2Fisteam%2Fip%2Fe9b5e861-dc01-4cf2-bf28-3f044acca704%2FMonorail_Map.jpg%2F%3A%2Frs%3Dw%3A1240%2Ch%3A620%2Ccg%3Atrue%2Cm%2Fcr%3Dw%3A1240%2Ch%3A620" alt="Vegas Monorail Map" width="1240" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Affordable rooms&lt;/strong&gt; (MGM is fair priced compared to where lots of execs/C-levels stay, at the Venetian where the Expo &amp;amp; Keynotes are held)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Many sessions&lt;/strong&gt; (MGM Grand had a lot of really good sessions I attended 30-40% of my sessions right in my own hotel!)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Food provided&lt;/strong&gt; (Not all hotels have meals, MGM Grand does)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AWS Re:play travel&lt;/strong&gt; is &lt;u&gt;ideal&lt;/u&gt; with the monorail setup of MGM Grand being first stop, and the re:play event being last stop. (No one else at any other hotels even came close to fitting on the monorail. Go MGM Grand, get your monorail spot at station #1 locked in!)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Must do's
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reserve sessions&lt;/strong&gt; which you truly care about&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep a very very close eye on AWS social media and your inbox 📥, they tell you about reserving sessions weeks/months ahead of re:invent, and you'll want to be ready for that! &lt;/p&gt;

&lt;p&gt;You can log in early and "favorite" all the sessions you want, then when reservations open you can easily go to your calendar and hit "Reserve Seat" on all the ones you want!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Go to the Keynotes!&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I only missed one keynote (the vendor keynote).&lt;br&gt;
But I would highly recommend going to as many as you can!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9199cqvdjvx7d1lu62m.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9199cqvdjvx7d1lu62m.JPG" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dr. Werner Vogels had my favorite keynote.&lt;/p&gt;

&lt;p&gt;If you haven't already, check out Dr.Vogels &lt;a href="https://www.thefrugalarchitect.com/" rel="noopener noreferrer"&gt;thefrugalarchitect.com&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Meet People &amp;amp; Network&lt;/strong&gt; (Friends, Family, co-workers, clients, vendors)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;AWS Re:invent is the place to network!&lt;/u&gt; I had the pleasure of meeting some fantastic folks from NASCAR, BMW, Adidas, and many more. Connect with folks on LinkedIn, or use &lt;a href="https://support.apple.com/guide/iphone/namedrop-iphone-share-contact-info-iph1b6c664b7/ios" rel="noopener noreferrer"&gt;Apple's NameDrop feature&lt;/a&gt; which works very well!&lt;/p&gt;

&lt;p&gt;I also had the pleasure of randomly bumping into my cousin in-law who happened to be there as well. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3tv86e1bv3olb8c6kcx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3tv86e1bv3olb8c6kcx.jpg" alt=" " width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We walked the Expo center and enjoyed some &lt;a href="https://aws.amazon.com/deepracer/" rel="noopener noreferrer"&gt;AWS Deep Racer&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  The food
&lt;/h4&gt;

&lt;p&gt;The meals provided were fantastic!&lt;/p&gt;

&lt;p&gt;The dining halls are very large, the food provided is fantastic quality. They meet all dietary special needs for folks.&lt;/p&gt;

&lt;p&gt;Herbal tea, regular teas, and coffee are provided (sometimes with snacks) in the afternoon.&lt;/p&gt;

&lt;p&gt;Breakfast and Lunch are offered. Dinner is on YOU.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enjoy Re:play!
&lt;/h3&gt;

&lt;p&gt;Even if you aren't a big party person, or don't drink. (which explains me) It is still an absolute blast to see all our peers in the industry just having fun and celebrating the week.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2fmlrhjx6w8ubz3x98m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2fmlrhjx6w8ubz3x98m.jpg" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In conclusion, AWS re:Invent is more than just a conference; it's an experience. &lt;/p&gt;

&lt;p&gt;From the hotel choice to reserving your sessions, detail matters in making the most of this event!&lt;/p&gt;

&lt;p&gt;The keynotes are a must-see, and the networking opportunities are invaluable. The food is excellent, and the Re:play event is a fun way to wrap up the week. &lt;/p&gt;

&lt;p&gt;Whether you're a seasoned attendee or a first-timer (like me), these tips should help you navigate re:Invent and make the most of your time. &lt;/p&gt;

&lt;p&gt;Remember, it's not just about learning; it's about connecting, growing, and having fun along the way!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logan S. &lt;a class="mentioned-user" href="https://dev.to/d4rkd0s"&gt;@d4rkd0s&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>reinvent</category>
      <category>aws</category>
      <category>community</category>
      <category>news</category>
    </item>
    <item>
      <title>Cloud Garbage 🗑️</title>
      <dc:creator>Logan Schmidt</dc:creator>
      <pubDate>Sat, 02 Dec 2023 00:37:33 +0000</pubDate>
      <link>https://dev.to/d4rkd0s/cloud-garbage-5af1</link>
      <guid>https://dev.to/d4rkd0s/cloud-garbage-5af1</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;I wanted to draw attention to garbage in the cloud.&lt;/p&gt;

&lt;p&gt;I believe there is a &lt;em&gt;significant&lt;/em&gt; amount of resources built in the cloud that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unpatched / out of date (OS, Framework, TLS/SSL)&lt;/li&gt;
&lt;li&gt;idle / over-provisioned resources&lt;/li&gt;
&lt;li&gt;over-engineered / complex&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is contributing to global environmental shifts as the energy usage of these workloads exceeds the ability of natural processes to safely balance things out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solutions / Ideas
&lt;/h2&gt;

&lt;p&gt;Coming out of AWS re:invent 2023 I know the most critical part of knowing waste is knowing &lt;strong&gt;cost&lt;/strong&gt;! After all, extra crap in the cloud costs extra money. Follow the money, and you'll likely find the most misconfigured things.&lt;/p&gt;

&lt;p&gt;This is a great time to plug Dr. Werner Vogels' small but powerful "book" on The Frugal Architect &lt;a href="https://www.thefrugalarchitect.com/" rel="noopener noreferrer"&gt;thefrugalarchitect.com&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20y8nnhypqji8f3ox07d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20y8nnhypqji8f3ox07d.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I highly encourage you to read it, it’s only 7 small but extremely vital points!&lt;/p&gt;

&lt;h3&gt;
  
  
  Some of my ideas
&lt;/h3&gt;

&lt;p&gt;Most systems are comprised of smaller components, so the following tricks can have a great impact:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tag everything&lt;/strong&gt; (come up with a tagging standard that can be used across all resource types that provides the greatest value to the business)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use Resource Groups&lt;/strong&gt; (Using resource groups can be a fantastic way to group related resources for cost analysis as well as application monitoring using &lt;a href="https://docs.aws.amazon.com/devops-guru/latest/userguide/choose-coverage.html" rel="noopener noreferrer"&gt;AWS DevOps Guru&lt;/a&gt;) &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standardize Compute Workload Strategy&lt;/strong&gt; (Work to provide your developers with a few solid pathways to having code run in the cloud efficiently. Ex: an EC2 pathway, a container pathway, a serverless pathway, etc)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS Cost Explorer
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://aws.amazon.com/aws-cost-management/aws-cost-explorer/" rel="noopener noreferrer"&gt;AWS Cost Explorer&lt;/a&gt; lets you visualize, understand, and manage AWS costs and usage over time. It provides detailed reports that show cost trends for various dimensions such as service, linked account, tag, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmdyebjzgo0bxkuyibus.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmdyebjzgo0bxkuyibus.png" alt=" " width="800" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key features of the AWS Cost Explorer are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Forecasting&lt;/strong&gt; (It can predict your likely spending over the next three months based on your historical cost data.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Customizable filters and views&lt;/strong&gt; (You can filter and group your cost data by various dimensions to focus on the areas that matter most to you.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reserved Instance (RI) Reports&lt;/strong&gt; (These reports help you manage your reserved instances by showing your usage, modifications, and exchanges. This can help when planning adjustments to your prepaid EC2 compute resources.)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By using AWS Cost Explorer, you can identify trends, pinpoint cost drivers, and detect cost anomalies. This understanding lets you control your costs more effectively. &lt;/p&gt;

&lt;p&gt;For example, you might find that you're spending more on a particular service than you expected, and you can then investigate whether this cost is necessary or if there are ways to reduce it.&lt;/p&gt;

&lt;p&gt;Some of the key services we were overspending on were: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KMS &lt;/li&gt;
&lt;li&gt;S3&lt;/li&gt;
&lt;li&gt;CloudWatch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For KMS 🔑,&lt;br&gt;
Each key is ~$1/mo, and with &lt;a href="https://aws.amazon.com/cdk/" rel="noopener noreferrer"&gt;CDK&lt;/a&gt;, keys are generated on a massive scale, if not centralized.&lt;/p&gt;

&lt;p&gt;We decided to optimize and centralize some of our keys, having a "data key" for example for all data in an env/region. Which is imported and used by CDK projects to reduce the per-project key cost.&lt;/p&gt;

&lt;p&gt;For S3 🪣,&lt;br&gt;
We noticed larger expenses, and decided to reduce the storage class on data we knew we weren't fetching often. &lt;/p&gt;

&lt;p&gt;A good example of this was our &lt;a href="https://docs.datadoghq.com/logs/log_configuration/rehydrating/?tab=amazons3" rel="noopener noreferrer"&gt;Datadog Log Archive&lt;/a&gt;, which is what we use to re-hydrate older logs from S3 to Datadog to troubleshoot issues which occurred in the past.&lt;/p&gt;

&lt;p&gt;We lowered the storage class on this and immediately started saving on cost with no noticeable impact on the user's performing re-hydration of logs.&lt;/p&gt;

&lt;p&gt;For CloudWatch 📄,&lt;br&gt;
This one has always been insane on pricing to me. CloudWatch Logs are very expensive...&lt;/p&gt;

&lt;p&gt;There's only 1 answer to this... Don't Log Everything! &lt;a href="https://dev.to/khanhdangbmt/logging-levels-2bpc"&gt;Set a proper log level&lt;/a&gt;, and don't adjust it above ERROR unless you're performing true DEBUG work.&lt;/p&gt;

&lt;p&gt;We found hundreds of services on the INFO/DEBUG level which was an insane cost increase that wasn't needed. We're working to adjust them all down to ERROR, and only ramp that up on a case-by-case basis.&lt;/p&gt;

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

&lt;p&gt;In conclusion, managing cloud resources efficiently is not just a matter of cost, but also a matter of environmental responsibility! 🌲🕊️&lt;/p&gt;

&lt;p&gt;By identifying and eliminating waste, we as a society can reduce our expenses and in turn, our carbon footprint. &lt;/p&gt;

&lt;p&gt;Tools like &lt;strong&gt;AWS Cost Explorer&lt;/strong&gt;, along with good practices such as &lt;strong&gt;tagging resources&lt;/strong&gt;, &lt;strong&gt;using resource groups&lt;/strong&gt;, and &lt;strong&gt;standardizing compute workload strategies&lt;/strong&gt;, can help us collectively achieve this goal. &lt;/p&gt;

&lt;p&gt;Remember, every bit of optimization counts, not just for your budget, but for the planet as well. Let's strive to be frugal architects of our cloud infrastructure, making the most of every resource we use!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logan S. &lt;a class="mentioned-user" href="https://dev.to/d4rkd0s"&gt;@d4rkd0s&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>watercooler</category>
      <category>cost</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
