<?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: pirothat</title>
    <description>The latest articles on DEV Community by pirothat (@pirothat).</description>
    <link>https://dev.to/pirothat</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%2F955464%2F1a693f63-420d-41dc-b333-dd36051d937e.png</url>
      <title>DEV Community: pirothat</title>
      <link>https://dev.to/pirothat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pirothat"/>
    <language>en</language>
    <item>
      <title>Present with Hand-Drawn Style Animations Using Excalidraw Animate + HTML</title>
      <dc:creator>pirothat</dc:creator>
      <pubDate>Wed, 13 Aug 2025 05:26:37 +0000</pubDate>
      <link>https://dev.to/pirothat/present-with-hand-drawn-style-animations-using-excalidraw-animate-html-4f5o</link>
      <guid>https://dev.to/pirothat/present-with-hand-drawn-style-animations-using-excalidraw-animate-html-4f5o</guid>
      <description>&lt;h1&gt;
  
  
  Excalidraw
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://excalidraw.com/" rel="noopener noreferrer"&gt;https://excalidraw.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It turns out you can even animate your drawings:&lt;br&gt;
&lt;a href="https://dai-shi.github.io/excalidraw-animate/" rel="noopener noreferrer"&gt;https://dai-shi.github.io/excalidraw-animate/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I came across this while looking for alternatives to draw.io for creating AWS architecture diagrams.&lt;/p&gt;

&lt;p&gt;The catch? You can’t export as GIF, which means you can’t directly attach it to Google Slides.&lt;/p&gt;

&lt;p&gt;While researching workarounds, I found a bunch of open-source tools like Reveal.js.&lt;br&gt;
But for something this simple, I figured I could just build my own in HTML — so I did, with a quick “vibe coding” session.&lt;/p&gt;

&lt;p&gt;I’m planning to use it for informal or lightweight presentations.&lt;/p&gt;

&lt;h1&gt;
  
  
  Here’s the code
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;meta charset="utf-8"&amp;gt;
&amp;lt;title&amp;gt;Excalidraw Animate – 20 Slides with Replay &amp;amp; Counter&amp;lt;/title&amp;gt;
&amp;lt;style&amp;gt;
  html,body{margin:0;height:100%;background:#fff;font-family:sans-serif}
  .slide{position:fixed;inset:0;display:none;justify-content:center;align-items:center}
  .slide.active{display:flex}
  object{max-width:90vw;max-height:90vh}

  /* ─ Replay button (bottom-left) ─ */
  .replay-btn{
    position:absolute;bottom:14px;left:14px;
    border:0;background:none;cursor:pointer;user-select:none;
    font-size:22px;line-height:1;color:#555;
    opacity:0.15;transition:opacity .2s,transform .2s;
  }
  .slide:hover .replay-btn,.replay-btn:hover{
    opacity:0.85;transform:scale(1.15);
  }

  /* ─ Counter (bottom-right) ─ */
  #counter{
    position:fixed;bottom:16px;right:16px;
    font-size:14px;color:#666;
    opacity:0.4;transition:opacity .2s;
    user-select:none;
  }
  #counter:hover{opacity:0.8}
&amp;lt;/style&amp;gt;

&amp;lt;div id="deck"&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id="counter"&amp;gt;&amp;lt;/div&amp;gt;

&amp;lt;script&amp;gt;
(() =&amp;gt; {
  /* ===== Config ===== */
  const NUM_SLIDES = 20;
  const FILE_PREFIX = 'frame';   // frame01.svg, frame02.svg …
  const PAD_LENGTH  = 2;         // 01, 02 …

  /* ===== Create slides ===== */
  const deck = document.getElementById('deck');
  for (let i = 1; i &amp;lt;= NUM_SLIDES; i++) {
    const slide = document.createElement('div');
    slide.className = 'slide' + (i === 1 ? ' active' : '');

    const obj = document.createElement('object');
    obj.type = 'image/svg+xml';
    obj.data = `${FILE_PREFIX}${String(i).padStart(PAD_LENGTH,'0')}.svg`;
    slide.appendChild(obj);

    const btn = document.createElement('button');
    btn.className = 'replay-btn';
    btn.textContent = '↺';
    btn.onclick = () =&amp;gt; { obj.data = obj.data; };
    slide.appendChild(btn);

    deck.appendChild(slide);
  }

  /* ===== Navigation &amp;amp; counter ===== */
  const slides  = [...document.querySelectorAll('.slide')];
  const counter = document.getElementById('counter');
  let idx = 0;
  const updateCounter = () =&amp;gt; { counter.textContent = `${idx+1} / ${slides.length}`; };
  updateCounter();

  const show = n =&amp;gt; {
    slides[idx].classList.remove('active');
    idx = (n + slides.length) % slides.length;
    slides[idx].classList.add('active');
    updateCounter();
  };

  document.addEventListener('keydown', e =&amp;gt; {
    if (['ArrowRight','L',';'].includes(e.key)) show(idx + 1);
    if (['ArrowLeft' ,'H',','].includes(e.key)) show(idx - 1);
  });
})();
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  How to use
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create animated SVG files with Excalidraw Animate (name them frame01.svg to frame20.svg).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Paste the HTML code above into an index.html file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Put your SVG files in the same folder as index.html.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open index.html in your browser and go fullscreen.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Navigation
&lt;/h2&gt;

&lt;p&gt;← / → keys to move between slides&lt;/p&gt;

&lt;p&gt;Bottom-left ↺ button to replay the current slide&lt;/p&gt;

&lt;p&gt;Bottom-right counter shows “current / total” at all times&lt;/p&gt;

&lt;h1&gt;
  
  
  Note
&lt;/h1&gt;

&lt;p&gt;I used this setup for our internal presentation day at the end of June — it worked great!&lt;/p&gt;

</description>
      <category>presentation</category>
      <category>html</category>
      <category>excalidraw</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>The "New-Car Effect" of AWS Certifications: Your First Rep to Mastery</title>
      <dc:creator>pirothat</dc:creator>
      <pubDate>Wed, 14 May 2025 10:38:11 +0000</pubDate>
      <link>https://dev.to/aws-builders/the-new-car-effect-of-aws-certifications-your-first-rep-to-mastery-4h93</link>
      <guid>https://dev.to/aws-builders/the-new-car-effect-of-aws-certifications-your-first-rep-to-mastery-4h93</guid>
      <description>&lt;p&gt;The badge isn’t the point—&lt;strong&gt;practice&lt;/strong&gt; is.&lt;/p&gt;

&lt;p&gt;Over the past three years I earned every AWS certification.&lt;br&gt;&lt;br&gt;
My &lt;strong&gt;certification triathlon&lt;/strong&gt; study loop was simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Watch one AWS Black Belt video on the target domain
&lt;/li&gt;
&lt;li&gt;Drill through domain-specific question sets
&lt;/li&gt;
&lt;li&gt;Review every miss (and every hit) the next morning
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That tight loop carried me across the finish line for every exam.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do You Really Need a Certification Triathlon?
&lt;/h2&gt;

&lt;p&gt;I think the answer is &lt;strong&gt;yes&lt;/strong&gt;—at least for your first rep.&lt;/p&gt;

&lt;h2&gt;
  
  
  "The New-Car Effect"
&lt;/h2&gt;

&lt;p&gt;Buy a car, and suddenly you see the same model everywhere. &lt;br&gt;
I refer to this phenomenon as "the New-Car Effect".&lt;/p&gt;

&lt;p&gt;Certifications work the same way: once my head was packed with VPC quirks and Lambda limits, blog posts, conference talks, and even hallway chats lit up with &lt;em&gt;“Hey, I know this!”&lt;/em&gt; moments.&lt;br&gt;&lt;br&gt;
That learning tuned my attention, and it wasn’t limited to AWS services; even general foundational computer-science concepts started jumping out at me.&lt;/p&gt;

&lt;h2&gt;
  
  
  “Use It Three Times and It’s Yours”
&lt;/h2&gt;

&lt;p&gt;A skill &lt;strong&gt;sticks&lt;/strong&gt; after three meaningful reps, even if the first one happens on paper.&lt;br&gt;&lt;br&gt;
Since AWS exams don’t include a hands-on lab, &lt;strong&gt;Rep #1&lt;/strong&gt; takes place in the multiple-choice arena: you architect in your head, choose an answer, and a wrong pick costs nothing but a red X.  &lt;/p&gt;

&lt;p&gt;Badge in hand, I volunteered for two bite-sized projects—&lt;strong&gt;Rep #2&lt;/strong&gt; and &lt;strong&gt;Rep #3&lt;/strong&gt;—where whiteboard sketches became CloudFormation stacks and IAM policies. That’s when theory clicked into muscle memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Certs don’t replace experience; they &lt;strong&gt;accelerate&lt;/strong&gt; it.&lt;br&gt;&lt;br&gt;
The exam delivers a low-risk Rep #1, and the New-Car Effect immediately tunes your radar—you start noticing tickets, hallway questions, and side projects that echo the blueprint you just drilled. Grab those chances: Rep #2 and Rep #3 will show up almost automatically, and the badge will turn into working muscle faster than any other route.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>certification</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
