<?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>Forem: Silas</title>
    <description>The latest articles on Forem by Silas (@silaslelei).</description>
    <link>https://forem.com/silaslelei</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%2F3716579%2F59e2dceb-c213-4bea-b911-f0a1f02a9dc7.png</url>
      <title>Forem: Silas</title>
      <link>https://forem.com/silaslelei</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/silaslelei"/>
    <language>en</language>
    <item>
      <title>Rocks vs Hard Places</title>
      <dc:creator>Silas</dc:creator>
      <pubDate>Mon, 20 Apr 2026 07:54:11 +0000</pubDate>
      <link>https://forem.com/silaslelei/rocks-vs-hard-places-4c7i</link>
      <guid>https://forem.com/silaslelei/rocks-vs-hard-places-4c7i</guid>
      <description>&lt;p&gt;"Between a rock and a hard place". We have all (probably) come across this phrase, or even worse, experienced it, lived through it.&lt;br&gt;
When you hear this, what goes on in your mind? What sparks?&lt;/p&gt;

&lt;p&gt;In such a situation, you are always faced with two difficult options to choose one. Neither is pleasant, but you have to choose the scorpion or the snake, the pan or the fire.&lt;/p&gt;

&lt;p&gt;I hope life has been fair to you!!&lt;/p&gt;

&lt;p&gt;How does this relate to programming you ask?&lt;/p&gt;

&lt;p&gt;Let's kick it up a notch.&lt;/p&gt;
&lt;h2&gt;
  
  
  Code... Rocks... Hard Places
&lt;/h2&gt;

&lt;p&gt;Updates are a crucial part of software, from your OS to you apps, to even your wardrobe!!&lt;br&gt;
We know the craze that comes with new releases of devices and whatnots. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;iPhone 17 pre-order demand is significantly higher than the iPhone 16, with analysts reporting a 5-10% increase in early sales. The Pro Max model leads demand, with 60% higher production to meet demand, while the new "iPhone Air" model has seen a strong, high-demand release. China is seeing record-breaking demand&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are 2 categories of people. Those who will update to the latest versions of...anything, versus the ones who stick to the old. No harm in either, no judgement whatsoever.&lt;br&gt;
In the context of updates, Kenya's giant telco, Safaricom, released a major update to their unified MyOneApp received a lot of backlash about it, but that had a different tune to our current song, so we wont get into it.&lt;/p&gt;

&lt;p&gt;My big question to you is, why would you update (or apt upgrade ;)) to a newer version? Let me hear your thoughts.&lt;/p&gt;
&lt;h3&gt;
  
  
  Story time ...
&lt;/h3&gt;

&lt;p&gt;I have been used to the normal way of doing things:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create vite@latest 
npm i tailwindcss @tailwindcss/vite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Things always worked seamlessly, I was always a happy man. My last status check said that i was on Vite 7 and tailwind 4.&lt;br&gt;
I ran my project well without fusses.&lt;/p&gt;

&lt;p&gt;Then came this one day, I need to whip something up, so I do the usual, and suddenly I was running into errors. When your terminal goes blood red, you know someone(I mean something) is dead!!&lt;br&gt;
Now I was panicking and not knowing what to do, because I needed to ship something.&lt;/p&gt;

&lt;p&gt;The new vite was looking awesome and flashy, shifting to a more 'purple-y' theme. Our traditional yellow-orange &lt;a href="https://www.imdb.com/title/tt0448115/" rel="noopener noreferrer"&gt;shazam&lt;/a&gt;-like logo and what we were used to has now gotten a facelift(depending on how you choose to see it).&lt;/p&gt;

&lt;p&gt;On an abnormal level, my OCD😉 doesn't allow me to be out-of date. I'm talking about going to the app store and just hitting update because I can and because that notification has some alert badge/pill on it.&lt;br&gt;
I'm talking about some &lt;code&gt;sudo apt update&lt;/code&gt; and 'sudo apt upgrade' just because it said &lt;code&gt;17 packages can be upgraded to latest version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Sometimes it works, and sometimes it just turns around and bites you where you can't see.&lt;/p&gt;

&lt;p&gt;After so many keystrokes and keyboard wars, I (my OCD) was faced with the brutal... Keep vite 8 and forget about Tailwind(probably it still could work with postcss and autoprefixer, but meh!!), or go down a rung, back to vite 7.&lt;br&gt;
Because I was in need, I took a glass of water and swallowed my pride😂.&lt;/p&gt;

&lt;p&gt;Of course after a few unanswered DM's and tags to Tailwindcss and Vite,  few weeks later, Tailwindcss 4.2.2 came out and my happiness was restored... Of course I hit the &lt;code&gt;npm i vite@latest&lt;/code&gt; as soon as I could, bumped up tailwind as well, fought with package-lock.json and node_modules for a while, and I won (of course the system won).&lt;/p&gt;

&lt;p&gt;I dont refute that updates are essential, especially on the security side of things(and with how fast react changes), there is another OCD side of &lt;code&gt;found [X] vulnerabilities ([Y] low, [Z] moderate, [A] high, [B] critical)&lt;/code&gt;. That thing scaaaarreesss me!! It always sends me scrambling to &lt;code&gt;npm audit fix&lt;/code&gt;, and it's not like I'm making a fintech app...Its just a ToDo list!&lt;/p&gt;

&lt;p&gt;So, would you always need to update? Do you read the changelogs and the effects it would have, or you just FAFO and taste it like I did?&lt;br&gt;
Let me know your crazy experiences on &lt;strong&gt;Latest&lt;/strong&gt;(rock) and &lt;strong&gt;Stable&lt;/strong&gt;(hard place) side of versions.&lt;/p&gt;

&lt;p&gt;Lets keep Reacting!&lt;/p&gt;

</description>
      <category>react</category>
      <category>programming</category>
    </item>
    <item>
      <title>Bash, Coffee, and Me: Learning Shell without losing your Mind</title>
      <dc:creator>Silas</dc:creator>
      <pubDate>Mon, 02 Mar 2026 08:42:58 +0000</pubDate>
      <link>https://forem.com/silaslelei/bash-coffee-and-me-learning-shell-without-losing-your-mind-50fj</link>
      <guid>https://forem.com/silaslelei/bash-coffee-and-me-learning-shell-without-losing-your-mind-50fj</guid>
      <description>&lt;p&gt;Its a cold Monday morning and the coffee doesn't seem to have hit the endpoint yet, or maybe it has and gotten a 400-500 HTTP status code response.&lt;br&gt;
As I wait for that to resolve, I find warmth in being bourne again. I am in the bourne again shell, get it?&lt;/p&gt;

&lt;p&gt;Bash has always felt a bit intimidating, and just a bit far out of my reach.  Always looking mean and something too big to wrap my head around.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wait, What is Bash?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Bash is a command-line interpreter and shell for Unix-like operating systems (Linux, macOS) that allows users to interact with the OS via text-based commands. It serves as the default interface for executing, automating, and scripting system tasks, acting as a bridge between the user and the kernel&lt;/code&gt;.&lt;a href="https://en.wikipedia.org/wiki/Bash_(Unix_shell)" rel="noopener noreferrer"&gt;🔗&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But the problem, I think, was me trying to swallow it whole. Fast forward time to a few days ago, a peer introduced me to a game. Oh how I love games!! &lt;br&gt;
This game gets you started on the essentials of bash. I was well versed with the very basic, or rather the ones I'd use on a daily basis: ls, mkdir, touch and a few others, so those ones didn't really raise my 'spidey senses'.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basics?
&lt;/h3&gt;

&lt;p&gt;So, lets go through what I call 'the very basics':&lt;br&gt;
&lt;code&gt;ls&lt;/code&gt;: lists contents of a directory &lt;br&gt;
&lt;code&gt;mkdir name&lt;/code&gt;: creates a new directory 'name' in the current directory&lt;br&gt;
&lt;code&gt;touch name&lt;/code&gt;: creates a new file 'name' in the current directory&lt;/p&gt;

&lt;p&gt;Most of these commands take overloads or parameters or flags which are placed after the command to add more options or coverage to them.&lt;br&gt;
As we have already seen, ls just outputs the contents of a directory, both files and folders, with barely no distinction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deep (or shallow) dive into ls
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ls -l&lt;/code&gt; : This is "long listing". It will give you the contents of the current directory together with more info about each content. You will get an output resembling this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;drwxr-xr-x 2 ksilas cohort2    4096 Feb 17 13:27 algorithm&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;The first letter d&lt;/code&gt; shows that 'algorithm' is a directory. A file would be denoted with a -&lt;br&gt;
The second batch (position &lt;code&gt;2,3,4&lt;/code&gt;) which are &lt;code&gt;rwx&lt;/code&gt; represent the permission assigned to the user: r-read, w-write, x-execute&lt;br&gt;
The next 3 in position &lt;code&gt;5,6,7&lt;/code&gt; are also permissions for the group the user/file is in.&lt;br&gt;
The &lt;code&gt;last 3&lt;/code&gt; are permissions for others. These permissions apply to users who are not owners and are not not in the user group.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;number&lt;/code&gt; that follows the permission, &lt;code&gt;2&lt;/code&gt;, represents the number of hard links in the directory.&lt;/p&gt;

&lt;p&gt;The next text, &lt;code&gt;ksilas&lt;/code&gt; represent the owner of the file, and &lt;code&gt;cohort2&lt;/code&gt; represents the group in which the file belongs to. By default, the group will be the one the owner belongs to.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;4096&lt;/code&gt; is the size, in bytes, of the file or directory&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Feb 17 13:27&lt;/code&gt; represents the date and time the file/directory was last modified.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;algorithm&lt;/code&gt; would then finally represent the current items with the above stats.&lt;/p&gt;

&lt;h3&gt;
  
  
  Still There?
&lt;/h3&gt;

&lt;p&gt;Already overwhelming, right???😄 Stay with me. I haven't shown you something amazing. We want to find a file with a particular name, and of course the directory.&lt;br&gt;
This is where I shut down😰.&lt;br&gt;
What is &lt;code&gt;grep&lt;/code&gt;, you ask. Well, I actually just went to google that up😅. &lt;code&gt;Global Regular Expression Print&lt;/code&gt;. Basically, it looks for files  or text that match the particular pattern given. Say &lt;code&gt;grep "hello"&lt;/code&gt; will look for texts that contain 'hello'&lt;/p&gt;

&lt;p&gt;But that's not even the problem. What annoyed me was, yes it would list all files that match a pattern, but what I really needed was WHERE the file is. Grep didn't give me that, or at least I didn't know how to ask nicely.&lt;/p&gt;

&lt;h3&gt;
  
  
  FIND the savior
&lt;/h3&gt;

&lt;p&gt;In walks &lt;code&gt;FIND&lt;/code&gt;. I could never ask for more😂🤩.&lt;br&gt;
This is the heart of our discourse today.&lt;br&gt;
Suppose you want to find a FILE with size 100 bytes, and an owner silas, I could imagine your head spinning already.&lt;/p&gt;

&lt;p&gt;But for our Swiss Army knife:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;**find . -type f -size 100c -user silas**&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Let me leave you marvel at the wonders of Bourne Again SHell!! I go away smiling... a happier man.&lt;/p&gt;

&lt;p&gt;But before I go, check out the &lt;a href="https://overthewire.org/wargames/bandit/" rel="noopener noreferrer"&gt;game&lt;/a&gt; I mentioned earlier.&lt;/p&gt;

&lt;p&gt;Bye👋🏻&lt;/p&gt;

</description>
      <category>bash</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Write Git Commit Messages Like a Pro</title>
      <dc:creator>Silas</dc:creator>
      <pubDate>Wed, 11 Feb 2026 01:34:24 +0000</pubDate>
      <link>https://forem.com/silaslelei/how-to-write-git-commit-messages-like-a-pro-3ep4</link>
      <guid>https://forem.com/silaslelei/how-to-write-git-commit-messages-like-a-pro-3ep4</guid>
      <description>&lt;p&gt;Ever wondered how to write commit messages for Git? Or maybe you’ve written messages that were technically correct but still caused murmurs in your team?&lt;/p&gt;

&lt;p&gt;Well, that ends here and now. We’ve all been victims of this anomaly, and the way forward is simple: improve ourselves and share knowledge.&lt;br&gt;
Let's dive in...&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Git?
&lt;/h3&gt;

&lt;p&gt;Git is a distributed version control system that manages versions of source code or data. Programmers often use it to collaborate on projects efficiently.&lt;/p&gt;

&lt;p&gt;Git lets you work locally, track changes to files, and push those changes to remote repositories like GitHub or Bitbucket for collaboration. &lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Git" rel="noopener noreferrer"&gt;More about git&lt;/a&gt;&lt;br&gt;
&lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;Git official&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How to commit
&lt;/h3&gt;

&lt;p&gt;A commit is made by running &lt;code&gt;git commit -m "some-message"&lt;/code&gt; with -m flag denoting &lt;em&gt;message&lt;/em&gt; and "some-message" being the details of what you are committing, which is the main point of our article today.&lt;/p&gt;

&lt;p&gt;Commit messages aren’t about long paragraphs, perfect grammar, or capitalization. They are about clarity, brevity, and readability. &lt;/p&gt;

&lt;h3&gt;
  
  
  Common Commit Message Tags
&lt;/h3&gt;

&lt;p&gt;Using standard tags makes Git history clear and helps your team understand the purpose of each change.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;feat&lt;/code&gt;:&lt;br&gt;
when the commit adds or changes functionality in a way that matters to users e.g &lt;code&gt;feat: add GitHub OAuth login&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;fix&lt;/code&gt;:&lt;br&gt;
when the commit fixes a bug that existed e.g &lt;code&gt;fix: handle API rate limits&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;docs&lt;/code&gt;:&lt;br&gt;
when only the documentation changes (no code behavior changes). e.g &lt;code&gt;docs: update README with setup instructions&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;style&lt;/code&gt;:&lt;br&gt;
Code style or formatting changes that do not affect logic or behavior. e.g &lt;code&gt;style: fix indentation&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;refactor&lt;/code&gt;:&lt;br&gt;
Code changes that improve structure or readability without changing behavior. e.g &lt;code&gt;refactor: simplify GitHub client logic&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;test&lt;/code&gt;:&lt;br&gt;
Adds, updates, or fixes tests only. e.g &lt;code&gt;test: add unit tests for login&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;chore&lt;/code&gt;:&lt;br&gt;
Maintenance tasks that don’t affect application behavior&lt;br&gt;
(dependencies, configs, scripts). e.g &lt;code&gt;chore: update GitHub Actions workflow&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;revert&lt;/code&gt;:&lt;br&gt;
Reverts a previous commit e.g &lt;code&gt;revert: undo login feature&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;perf&lt;/code&gt;:&lt;br&gt;
Changes that improve performance e.g &lt;code&gt;perf: optimize database queries&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;build&lt;/code&gt;:&lt;br&gt;
Changes that affect the build system or external dependencies. e.g &lt;code&gt;build: update dependencies&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is also good practice to write your commits in the present tense. Instead of "feat: added login functionality", do "feat: add login functionality" &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"That's how dad did it, that's how America does it, and it's worked out pretty well so far"&lt;br&gt;
 ~Iron Man 2008&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This sets the base for linear and standard collaboration works and i hope you are a better commiter now that you've come this far.&lt;/p&gt;

&lt;p&gt;Like my boss would say, leave with a quote to appear smart, i will leave you with this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Git commit messages are how we communicate to our future selves."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Happy committing, and may your Git history be forever clean and understandable.&lt;/p&gt;

&lt;p&gt;Bye 👋&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>github</category>
      <category>git</category>
      <category>programming</category>
    </item>
    <item>
      <title>Survival Mode: Week 1 at Zone01 Kisumu ✅</title>
      <dc:creator>Silas</dc:creator>
      <pubDate>Tue, 20 Jan 2026 05:44:28 +0000</pubDate>
      <link>https://forem.com/silaslelei/survival-mode-week-1-at-zone01-kisumu-3pd8</link>
      <guid>https://forem.com/silaslelei/survival-mode-week-1-at-zone01-kisumu-3pd8</guid>
      <description>&lt;p&gt;The first week is officially in the books. To say it was a "challenge" would be an understatement—it was a full-on baptism by fire.&lt;/p&gt;

&lt;p&gt;If there was ever a moment to throw in the towel, this was it. The learning curve was vertical, the bugs were relentless, and the caffeine was mandatory. But we made it through. We might have a few "mental bruises" and syntax-induced scars, but we’re still standing.&lt;/p&gt;

&lt;p&gt;I’m finally starting to find my rhythm at Zone01 Kisumu. The road ahead looks intense, but if Week 1 taught me anything, it's that the grind is where the growth happens.&lt;/p&gt;

&lt;p&gt;Keep it locked. 🚀&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sabbatical... 😂</title>
      <dc:creator>Silas</dc:creator>
      <pubDate>Sat, 17 Jan 2026 13:36:05 +0000</pubDate>
      <link>https://forem.com/silaslelei/sabbatical-2h4b</link>
      <guid>https://forem.com/silaslelei/sabbatical-2h4b</guid>
      <description>&lt;p&gt;So yesterday, I wrote a test on golang after about 300 days of not touching code. &lt;br&gt;
I was very confident about acing the test and I had nothing to worry about. &lt;br&gt;
Well... 😂&lt;br&gt;
Let's just say, iron rusts when left outside. &lt;br&gt;
Dust accumulates when stuff is undisturbed. &lt;/p&gt;

&lt;p&gt;So here I am, back again, to writing code. May the codes be with me... And y'all 💪&lt;/p&gt;

</description>
      <category>go</category>
      <category>zone01kisumu</category>
    </item>
  </channel>
</rss>
