<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>aonemd</title>
    <link>https://aonemd.com/</link>
    <description>Recent content on Code and Language</description>
    <language>en</language>
     <lastBuildDate>Fri, 26 Dec 2025 09:32:00 +0100</lastBuildDate> <atom:link href="https://aonemd.com/index.xml" rel="self" type="application/rss+xml" />
    
    
      
      
        
      
    
      
      
        
      
    

    
      <item>
        <title>2025-12-25 09:32</title>
        <link>https://aonemd.com/notes/2025-12-26-0833/</link>
        <guid>https://aonemd.com/notes/2025-12-26-0833/</guid>
        <pubDate>Fri, 26 Dec 2025 09:32:00 +0100</pubDate>

        
          <description>&lt;p&gt;
&lt;a href=&#34;https://www.newyorker.com/tech/annals-of-technology/chatgpt-is-a-blurry-jpeg-of-the-web&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   ChatGPT Is a Blurry JPEG of the Web
&lt;/a&gt;
&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-08-30 17:36</title>
        <link>https://aonemd.com/notes/2025-08-30-1739/</link>
        <guid>https://aonemd.com/notes/2025-08-30-1739/</guid>
        <pubDate>Sat, 30 Aug 2025 17:36:00 +0200</pubDate>

        
          <description>&lt;p&gt;
&lt;a href=&#34;https://alexkondov.com/i-know-when-youre-vibe-coding/&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   I Know When You&amp;rsquo;re Vibe Coding
&lt;/a&gt;
:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I don’t care how the code got in your IDE.&lt;/p&gt;
&lt;p&gt;I want you to care.&lt;/p&gt;
&lt;p&gt;I want people to care about quality, I want them to care about consistency, I want them to care about the long-term effects of their work. LLMs are engineering marvels, and I have the utmost respect for the people who’ve created them. But we still need to build software, not productionize prototypes.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-07-02 20:05</title>
        <link>https://aonemd.com/notes/2025-07-02-2006/</link>
        <guid>https://aonemd.com/notes/2025-07-02-2006/</guid>
        <pubDate>Wed, 02 Jul 2025 20:05:00 +0200</pubDate>

        
          <description>&lt;p&gt;
&lt;a href=&#34;https://chrlschn.dev/blog/2025/05/beware-the-complexity-merchants/&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   Beware the Complexity Merchants
&lt;/a&gt;
&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-06-20 21:20</title>
        <link>https://aonemd.com/notes/2025-06-20-2120/</link>
        <guid>https://aonemd.com/notes/2025-06-20-2120/</guid>
        <pubDate>Fri, 20 Jun 2025 21:20:00 +0200</pubDate>

        
          <description>&lt;p&gt;
&lt;a href=&#34;https://www.davefarley.net/?p=352&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   What is Modern Software Engineering?
&lt;/a&gt;
&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>Why Software Engineers Need Strong Opinions</title>
        <link>https://aonemd.com/posts/strong-opinions-matter/</link>
        <guid>https://aonemd.com/posts/strong-opinions-matter/</guid>
        <pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate>

        
          <description>&lt;p&gt;This is my introspection on why voicing opinions on software engineering is difficult, why it&amp;rsquo;s important for engineers to have their own voice, and how to voice your opinions without it being too painful.&lt;/p&gt;
&lt;h2 id=&#34;why-is-it-hard-to-talk-about-software-engineering&#34;&gt;Why is it hard to talk about software engineering?&lt;/h2&gt;
&lt;p&gt;Compared to other branches of engineering, software engineering is a fairly recent field. Today, we have software engineers who are probably older than software engineering itself.
Software is also a field that&amp;rsquo;s constantly evolving and changing.
As a result, software engineering is not a fully established discipline.
That also makes it difficult for everyone to agree on standards, rules, or regulations.&lt;/p&gt;
&lt;p&gt;Of course, some applications of software engineering — medical device systems and avionics for example — require more rigor and stricter rules than others. However, that doesn&amp;rsquo;t change the fact that most of software engineering work out there is just like the wild west.&lt;/p&gt;
&lt;p&gt;Without clear standards and regulations, engineers are left to figure things out on their own often with conflicting views and practices.&lt;/p&gt;
&lt;p&gt;I experienced this ambiguity firsthand early in my career.
I remember starting out as an apprentice software engineer, and as any enthusiastic youth who read Clean Code, I used to hold more black-and-white opinions when a lot of my more experienced colleagues didn&amp;rsquo;t.
However, as I matured in the industry, I started to let go of my previous convictions and wear the &amp;ldquo;it depends&amp;rdquo; hat a lot more.
With more experience, I learned about the trade-offs of my and other engineers&amp;rsquo; decisions, and held on to fewer opinions. I became less certain and more cautious in forming opinions.&lt;/p&gt;
&lt;p&gt;But letting go of certainty came with another challenge. I often found myself stuck more between decisions and the myriad of options available to engineers everyday.&lt;/p&gt;
&lt;p&gt;That indecision taught me that while it&amp;rsquo;s important to keep the trade-offs in mind, having clear convictions can be as essential when navigating the chaos of modern software engineering.
I had traded black-and-white thinking for endless shades of gray — and sometimes, that made it harder to move forward!&lt;/p&gt;
&lt;h2 id=&#34;why-strong-opinions-matter&#34;&gt;Why Strong Opinions Matter?&lt;/h2&gt;
&lt;p&gt;In today&amp;rsquo;s world, engineers are faced with a lot of options, trade-offs, and ways of working to consider before making a decision.
While this abundance might seem like a blessing, it often becomes noise — leading to decision fatigue even before the actual problem-solving begins.&lt;/p&gt;
&lt;p&gt;This is where convictions play a crucial role: clear, well-informed opinions help eliminate this decision fatigue and analysis paralysis across the software development life cycle.
In an environment where everything &amp;ldquo;depends&amp;rdquo;, strong opinions function as the compass that guides our engineering decisions.&lt;/p&gt;
&lt;p&gt;With this clarity, engineers can contribute to setting standards, uphold consistency, and most importantly, focus on the team&amp;rsquo;s core goals.
Although strong opinions are sometimes seen as dogmatic, in my experience, they often come from a pragmatic perspective.&lt;/p&gt;
&lt;p&gt;As engineers become more senior, they take on the responsibility of shielding the team from wasted effort and misdirected energy.
Indecision and split opinions, open the door to internal friction and endless 
&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Law_of_triviality&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   bike-shedding
&lt;/a&gt;
.
In moments of disagreement or indecision, senior engineers must help bring the team back from its drift and put an end to endless debates, ultimately driving the team towards efficiency and alignment.&lt;/p&gt;
&lt;h2 id=&#34;the-etiquette-of-strong-opinions&#34;&gt;The Etiquette of Strong Opinions&lt;/h2&gt;
&lt;p&gt;Voicing your opinions, just like brushing your teeth before visiting the dentist, comes with its own set of unspoken rules.&lt;/p&gt;
&lt;p&gt;In my experience working with engineers from different backgrounds and with varying degrees of strong opinions, the problem usually isn&amp;rsquo;t strong opinions but rather how these opinions are expressed.&lt;/p&gt;
&lt;p&gt;First and foremost, opinions should be based on experience and maturity — not on dogma or cargo-cult thinking.
Too many opinions today are pure hype and click-baiting (or rage-baiting as I&amp;rsquo;ve recently come to know it) and not from hands-on experience.
Twitter, YouTube, and LinkedIn are all filled with armchair engineers, self-proclaimed tech gurus, offering advice they&amp;rsquo;ve never had to apply themselves whereas the real insight usually comes from engineers who have been quietly solving hard problems for years.&lt;/p&gt;
&lt;p&gt;Second, advocating for your opinions is as important as the opinion itself. It might differ depending on the opinion but I&amp;rsquo;ve seen and practiced one of or all of these at times: face-to-face discussions, quick video calls, writing RFCs (Request for Comments) documents, creating a POC and holding a demo for the team.&lt;/p&gt;
&lt;p&gt;Conflicts are bound to happen. There&amp;rsquo;s really no going around it.
One great piece of advice I once received from one of my former managers about team dynamic and conflict resolution: to learn to pick your battles.
Not every situation needs to become an argument and certainly, not every opinion needs to be said. And know when to hold your ground and when to let go.&lt;/p&gt;
&lt;p&gt;Finally, it&amp;rsquo;s important to stay humble and open to different opinions or have 
&lt;a href=&#34;https://meddlers.com/having-strong-opinions-gently-held/&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   Strong opinions, gently held.
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re starting out: be patient and focus on observing. Absorb as much as you can and evaluate as you gain experience. Opinions take time to form and establish.&lt;/p&gt;
&lt;p&gt;If you are a  senior engineer: solidify your convictions. Over time, we tend to develop patterns and follow them all the way. Refresh your convictions every now and then, question them, revisit your tools and methods. You think VSCode is the best? Learn something else, then 
&lt;a href=&#34;https://aonemd.com/tags/vim/&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   use Vim anyway
&lt;/a&gt;
. Love JavaScript? Great but maybe you haven&amp;rsquo;t seen Ruby&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;From my own (still short) journey, I&amp;rsquo;ve learned that firm convictions is how we navigate the uncertainty and complexity of software development.
Specially today in the age of artificial uncertainty, it&amp;rsquo;s more important than ever for engineers to be particular about our craft, to distinguish the wheat from the chaff, with firm convictions that are shaped by experience, not hype.&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>Write With Conviction</title>
        <link>https://aonemd.com/posts/write-with-conviction/</link>
        <guid>https://aonemd.com/posts/write-with-conviction/</guid>
        <pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate>

        
          <description>&lt;p&gt;Recently, I have picked up writing again after a long break. And Although I&amp;rsquo;m out of shape, I&amp;rsquo;ve been pushing myself to write regularly — and hopefully publish — on my blog. It&amp;rsquo;s been almost 10 years since I first started, and despite posting sparsely, I&amp;rsquo;ve kept coming back!&lt;/p&gt;
&lt;p&gt;As I revisited my older posts and my many, many drafts (and titles, I like titles) that never saw the light, I noticed a pattern in my writing: it&amp;rsquo;s significantly harder for me to write opinionated pieces.&lt;/p&gt;
&lt;p&gt;Even for the posts I did publish, there are a few I decided to hide or delete entirely — often because they leaned heavily on personal takes. Ironically, I even wrote an article about how hard writing is… instead of just writing what I really wanted to say.&lt;/p&gt;
&lt;p&gt;Looking back, I can now see why. Since I began writing, I have made a conscious effort to sound objective and put a lot of focus (more than I should&amp;rsquo;ve) to strip my opinions away as much possible — a form of self-censorship . I&amp;rsquo;d often beat around the bush before I hesitantly get to the point I want to make. That made writing painful and dreadful to me.&lt;/p&gt;
&lt;p&gt;In contrast, the easiest posts to write were the purely technical ones. With technical writing, the rules are clearer and the writing just flows easier. You are either correct or you&amp;rsquo;re not. If I say &amp;ldquo;The C language is compiled,&amp;rdquo; there&amp;rsquo;s not much to debate. Or if someone says &amp;ldquo;a monoid is a monad in the category of endofunctors,&amp;rdquo; yeah — I won&amp;rsquo;t argue with that. There’s a higher level of certainty in technical truths.&lt;/p&gt;
&lt;p&gt;However, with opinionated writing, it&amp;rsquo;s a different beast! You could be flat out wrong from the get-go. You need to anticipate counterarguments and refute them. You risk being misunderstood. You risk coming across as confidently and arrogantly wrong. The stakes are higher.&lt;/p&gt;
&lt;p&gt;And I think now I realize where the struggle comes from: doubt. Over the years, as I&amp;rsquo;ve gained more experience and matured as an engineer, I&amp;rsquo;ve also become more aware of how much out there that I don&amp;rsquo;t know. Knowing there are so many unknowns is humbling but it also brings with it doubt and hesitation, and sometimes that spills into my writing.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve come to find that the antidote to hesitation is conviction. Writing with conviction matters. No one wants to read a hesitant writer just like no one wants to listen to a hesitant speaker. Conviction, owning your perspective, and stating it clearly give your words gravity. It doesn&amp;rsquo;t mean being arrogant or stubborn; on the contrary, it conveys honesty and courage.&lt;/p&gt;
&lt;p&gt;So I&amp;rsquo;m trying something different this time: I&amp;rsquo;m learning to write with conviction again so no more hiding behind forced objectivity or self-censorship, just writing what I believe, as clearly as I can.&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-05-31 11:46</title>
        <link>https://aonemd.com/notes/2025-05-31-1146/</link>
        <guid>https://aonemd.com/notes/2025-05-31-1146/</guid>
        <pubDate>Sat, 31 May 2025 11:46:00 +0200</pubDate>

        
          <description>&lt;p&gt;
&lt;a href=&#34;https://programmingisterrible.com/post/696130032656171008/questions-i-have-been-asked-about-photography&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   Programming is terrible, here&amp;rsquo;s a photography crash course
&lt;/a&gt;
.&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-05-27 13:15</title>
        <link>https://aonemd.com/notes/2025-05-27-1317/</link>
        <guid>https://aonemd.com/notes/2025-05-27-1317/</guid>
        <pubDate>Tue, 27 May 2025 13:15:00 +0200</pubDate>

        
          <description>&lt;p&gt;
&lt;a href=&#34;https://www.youtube.com/watch?v=XeN6fHV3RPY&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   Focus on People
&lt;/a&gt;
: Despite how many tech companies eventually end up with empty imitation and cargo-culting, the gist of the talk is valuable &amp;ldquo;Focus on People&amp;rdquo;.&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-05-21 11:39</title>
        <link>https://aonemd.com/notes/2025-05-21-1139/</link>
        <guid>https://aonemd.com/notes/2025-05-21-1139/</guid>
        <pubDate>Wed, 21 May 2025 11:39:00 +0200</pubDate>

        
          <description>&lt;p&gt;I like this analogy on AI competitive programming benchmarks from 
&lt;a href=&#34;https://youtu.be/fJGNqnq-aCA?si=LneYsbx9OfxpcmQs&amp;amp;t=474&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   AI Has Us Between a Rock and a Hard Place
&lt;/a&gt;
:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Competitive coding benchmarks are like solving a riddle but software development is like solving a murder&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-05-15 20:09</title>
        <link>https://aonemd.com/notes/2025-05-15-2009/</link>
        <guid>https://aonemd.com/notes/2025-05-15-2009/</guid>
        <pubDate>Thu, 15 May 2025 20:09:00 +0200</pubDate>

        
          <description>&lt;p&gt;I love this part from 
&lt;a href=&#34;https://randsinrepose.com/archives/minimum-viable-curiousity/&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   Minimum Viable Curiousity
&lt;/a&gt;
:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;When faced with change or an aggressive unknown, I take a deep breath, count to four, place my feet firmly on the ground, and ask, “Do I really understand what is going on here? Really?” I start with curiousity because curiousity informs action. Action creates consequence, and when consequence shows up, you start learning.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-05-12 15:00</title>
        <link>https://aonemd.com/notes/2025-05-12-1502/</link>
        <guid>https://aonemd.com/notes/2025-05-12-1502/</guid>
        <pubDate>Mon, 12 May 2025 15:00:00 +0200</pubDate>

        
          <description>&lt;p&gt;I&amp;rsquo;ve been in the 
&lt;a href=&#34;https://www.seangoedecke.com/the-valley-of-engineering-despair/&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   The valley of engineering despair
&lt;/a&gt;
 for the past few weeks and it&amp;rsquo;s nice to have a word for it!&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-05-12 12:22</title>
        <link>https://aonemd.com/notes/2025-05-12-1223/</link>
        <guid>https://aonemd.com/notes/2025-05-12-1223/</guid>
        <pubDate>Mon, 12 May 2025 12:22:00 +0200</pubDate>

        
          <description>&lt;p&gt;
&lt;a href=&#34;https://justinjackson.ca/calm-company&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   We need more calm companies
&lt;/a&gt;
.&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-05-11 15:18</title>
        <link>https://aonemd.com/notes/2025-05-11-1519/</link>
        <guid>https://aonemd.com/notes/2025-05-11-1519/</guid>
        <pubDate>Sun, 11 May 2025 15:18:00 +0200</pubDate>

        
          <description>&lt;p&gt;
&lt;a href=&#34;https://minds.md/zakirullin/cognitive&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   Cognitive load is what matters
&lt;/a&gt;
.&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>The Last Tech Stack You Will Ever Need</title>
        <link>https://aonemd.com/posts/the-last-tech-stack-you-will-ever-need/</link>
        <guid>https://aonemd.com/posts/the-last-tech-stack-you-will-ever-need/</guid>
        <pubDate>Fri, 09 May 2025 00:00:00 +0000</pubDate>

        
          <description>&lt;p&gt;In life, there&amp;rsquo;s a great value in being in the middle — rather  than the extremes. And in contrast to what society today deems &amp;ldquo;boring&amp;rdquo;, there&amp;rsquo;s real value in being boring and choosing boring: stable, reliable, consistent.&lt;/p&gt;
&lt;p&gt;That principle applies just as well to software engineering, particularly when it comes to tooling, tech stacks, and system design.
As engineers, many of us are naturally drawn to tinkering and experimenting. We enjoy hacking and trying new tools and approaches.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m certainly guilty of this. Early on, I spent so much time building the perfect development environment, the perfect Linux desktop, writing my own taskbars, configuring Vim, trying i3wm, using Suckless tools &amp;hellip; the list goes on.
But in hindsight, I haven&amp;rsquo;t spent nearly enough time using these tools to actually build meaningful things. I can confidently say I have done enough customization for the next 10 years.&lt;/p&gt;
&lt;p&gt;Of course, there&amp;rsquo;s value in mastering and improving your tools. But that&amp;rsquo;s different from becoming obsessed with perfection instead of solving real problems!&lt;/p&gt;
&lt;p&gt;This is specially true in the context of software engineering &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; — as software engineers, we are hired as problem solvers, to help businesses fulfill their needs.
That means our role is not to chase the latest most hyped tool or framework endorsed by tech-fluencers. It&amp;rsquo;s to provide value using technology, not to use technology for its own sake.&lt;/p&gt;
&lt;p&gt;Every new tool or technology introduced into an organization brings with it hidden costs: learning curve, adoption friction, maintenance overhead, and added complexity in the tech stack. These costs rarely justify the marginal gains of using the &amp;ldquo;hot new thing.&amp;rdquo; Most importantly, each addition chips away at consistency — the very thing that makes systems maintainable and teams effective.&lt;/p&gt;
&lt;p&gt;In fact, the most painful projects I&amp;rsquo;ve worked on were not necessarily the most complex. They were the ones that lacked consistency; where every piece of the project uses its own toolchain, language, or structure — what a colleague of  mine calls &amp;ldquo;passion projects.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;As software engineers, working in an industry that&amp;rsquo;s at the center of internet fads and tech bubbles, what truly sets great engineers apart is how they approach their craft. They set and follow standards, choose battle-tested technologies, and prioritize consistency over what&amp;rsquo;s trendy. That attitude fosters a shared understanding which scales across your entire organization. It makes development smoother for you and your team today and also for the poor soul who inherits your code years from now.&lt;/p&gt;
&lt;p&gt;At the heart of it all, software engineering as a craft is not about novelty but rather, it’s about reliability, consistency, and delivering value. While experimentation can sharpen skills and deepen understanding, endlessly chasing new tools or paradigms often distracts from the actual goal: solving real problems effectively and sustainably. The best engineers are not those who use the flashiest stack, but those who understand the cost of every technical choice and optimize for long-term clarity and maintainability. Choosing “boring” and proven technologies isn’t a lack of ambition — it’s often the wisest engineering decision.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I deliberately use the term &amp;ldquo;software engineering&amp;rdquo; here instead of just &amp;ldquo;coding&amp;rdquo; or &amp;ldquo;programming&amp;rdquo; since each one carries a different connotation. Programming is definitely a big part of software engineers&amp;rsquo; job, but it&amp;rsquo;s not the whole picture.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-05-08 16:54</title>
        <link>https://aonemd.com/notes/2025-05-08-1655/</link>
        <guid>https://aonemd.com/notes/2025-05-08-1655/</guid>
        <pubDate>Thu, 08 May 2025 16:54:00 +0200</pubDate>

        
          <description>&lt;p&gt;
&lt;a href=&#34;https://endler.dev/2024/no-matter-what/&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   No Matter What
&lt;/a&gt;
.&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-05-08 08:16</title>
        <link>https://aonemd.com/notes/2025-05-08-0818/</link>
        <guid>https://aonemd.com/notes/2025-05-08-0818/</guid>
        <pubDate>Thu, 08 May 2025 08:16:00 +0200</pubDate>

        
          <description>&lt;p&gt;We teach about the 
&lt;a href=&#34;https://xyproblem.info/&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   XY Problem
&lt;/a&gt;
. On the flip side, as engineers receiving questions or requests, the most fundamental habit is to ask &amp;ldquo;Why?&amp;rdquo; If not to be able to provide better help then at least out of curiosity.&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-05-05 18:30</title>
        <link>https://aonemd.com/notes/2025-05-05-1632/</link>
        <guid>https://aonemd.com/notes/2025-05-05-1632/</guid>
        <pubDate>Mon, 05 May 2025 18:30:00 +0200</pubDate>

        
          <description>&lt;p&gt;
&lt;a href=&#34;https://www.seangoedecke.com/ai-sycophancy/&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   Sycophancy is the first LLM &amp;ldquo;dark pattern&amp;rdquo;
&lt;/a&gt;
&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-05-04 16:25</title>
        <link>https://aonemd.com/notes/2025-05-04-1426/</link>
        <guid>https://aonemd.com/notes/2025-05-04-1426/</guid>
        <pubDate>Sun, 04 May 2025 16:25:00 +0200</pubDate>

        
          <description>&lt;p&gt;And on that note, I find this video 
&lt;a href=&#34;https://www.youtube.com/watch?v=ctM2TIXDFQs&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   Internet Fatigue: Why This Place Sucks Now
&lt;/a&gt;
 very relatable now.&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>2025-05-04 16:13</title>
        <link>https://aonemd.com/notes/2025-05-04-1613/</link>
        <guid>https://aonemd.com/notes/2025-05-04-1613/</guid>
        <pubDate>Sun, 04 May 2025 16:13:47 +0200</pubDate>

        
          <description>&lt;p&gt;I resonate so much with this article 
&lt;a href=&#34;https://billglover.me/2025/04/29/on-blogging/&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   On Blogging
&lt;/a&gt;
 about revisiting old writings and doubts! It&amp;rsquo;s also in a way, closely tied to the current consumption focused internet.&lt;/p&gt;
</description>
        

      </item>
    
      <item>
        <title>Automated Resume Builds With Docker and Gitlab</title>
        <link>https://aonemd.com/posts/automated-resume-build-with-docker-and-gitlab/</link>
        <guid>https://aonemd.com/posts/automated-resume-build-with-docker-and-gitlab/</guid>
        <pubDate>Sun, 05 Feb 2023 00:00:00 +0000</pubDate>

        
          <description>&lt;p&gt;As a certified Hackerman, I write my resume in Markdown. I also maintain an open source version of the template I use on 
&lt;a href=&#34;https://github.com/aonemd/hackerman-resume&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   Github
&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The template is written in Markdown and I wrote a small build script that uses 
&lt;a href=&#34;https://pandoc.org/&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   pandoc
&lt;/a&gt;
 and 
&lt;a href=&#34;https://wkhtmltopdf.org/index.html&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   wkhtmltopdf
&lt;/a&gt;
 and some CSS to generate PDF and HTML versions of the markdown file.&lt;/p&gt;
&lt;p&gt;Since we&amp;rsquo;ve already established that I&amp;rsquo;m officially a masochist, I have to mention that I use Arch btwᵀᴹ. So typically, after updating my system, and opening my text editor, it&amp;rsquo;s totally expected that I might get an error along the lines of:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;lib*****.so.42: cannot open shared object file: No such file&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Recently, on a rainy night, I ran my build script and got something similar to the dreaded error messages above. I spent some time searching the lovely Arch Linux [SOLVED] forums and going from one error to another. I don&amp;rsquo;t remember what the problem(s) was exactly but it was something related to a version of Python and a version of some QT5 library that I didn&amp;rsquo;t bother to solve this time.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://aonemd.com//images/hackerman.png&#34; alt=&#34;HACKERMAN&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;enter-docker&#34;&gt;Enter Docker&lt;/h3&gt;
&lt;p&gt;Since nowadays most problems in the world seem to be solved though some form of containerization and Kubernetes &lt;small&gt;and rust&lt;/small&gt;, I also decided to build my resume in a Docker container.&lt;/p&gt;
&lt;p&gt;As any good Docker user, I started with an Alpine image but then found out that &lt;code&gt;wkhtmltopdf&lt;/code&gt; is not available in Alpine repositories anymore. So I had to use an Ubuntu based image and installed all the necessary packages that I usually install natively on my machine. I also needed to install some Microsoft 😱 proprietary package from Ubuntu repositories for the fonts I use in the CSS which gave me some headache to install in the beginning.&lt;/p&gt;
&lt;p&gt;In the end, I run the build script inside the container to build the resume PDF then I use &lt;code&gt;docker cp&lt;/code&gt; command to copy the file from the container to my host machine.&lt;/p&gt;
&lt;p&gt;This is how the Dockerfile looks like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-docker&#34; data-lang=&#34;docker&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; pandoc/core:latest-ubuntu&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; apt update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      apt install -y software-properties-common &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      add-apt-repository multiverse &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      apt update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; debconf-set-selections &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      apt install  --reinstall  -y xvfb libfontconfig wkhtmltopdf fontconfig ttf-mscorefonts-installer &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      fc-cache -f -v&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ENV&lt;/span&gt; SRC /usr/src&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;WORKDIR&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; $SRC&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;Add&lt;/span&gt; . &lt;span class=&#34;nv&#34;&gt;$SRC&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; pandoc --version&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; ./build.sh build&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And here&amp;rsquo;s the build script:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SOURCE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;resume.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TARGET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;resume
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CSS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;resume.css
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;OPEN_COMMAND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;xdg-open &lt;span class=&#34;c1&#34;&gt;# replace with `open` for macos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  build&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    pandoc --pdf-engine&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;wkhtmltopdf -t html5 --css &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$CSS&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -o &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TARGET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;.pdf &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SOURCE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  build-docker&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    docker build -t resume .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;container_id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;docker run -d resume:latest&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    docker cp &lt;span class=&#34;nv&#34;&gt;$container_id&lt;/span&gt;:/usr/src/resume.pdf ./resume.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  build-html&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    pandoc --standalone --css &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$CSS&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --from markdown --to html -o &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TARGET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;.html &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SOURCE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  open&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OPEN_COMMAND&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TARGET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;.pdf &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  *&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Usage: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$0&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; {build|build-docker|build-html|open}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, when I want to build my resume on my machine, I simple run the build command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./build.sh build-docker
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;automated-builds&#34;&gt;Automated Builds&lt;/h3&gt;
&lt;p&gt;Finally, I added Gitlab CI/CD to my setup to get automated builds on git push.&lt;/p&gt;
&lt;p&gt;Since the build script expects that the &lt;code&gt;docker&lt;/code&gt; command exists, I needed to use a Docker in Docker image, or &lt;em&gt;dind&lt;/em&gt; as a service:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;docker:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;docker:dind&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;stage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;deploy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;./build.sh build-docker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;artifacts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;paths&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;resume.pdf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;only&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;master&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With this setup, I can now simply push my changes and go to Gitlab and download the latest version of of my resume through Gitlab&amp;rsquo;s UI.&lt;/p&gt;
&lt;p&gt;You can find the full source code of the template and the setup on Github at 
&lt;a href=&#34;https://github.com/aonemd/hackerman-resume&#34;
   target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
   hackerman-resume
&lt;/a&gt;
.&lt;/p&gt;
</description>
        

      </item>
    
  </channel>
</rss>
