<?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: Daniel Githinji</title>
    <description>The latest articles on DEV Community by Daniel Githinji (@daniel_githinji_6e1e402c3).</description>
    <link>https://dev.to/daniel_githinji_6e1e402c3</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%2F3263610%2F581d5990-adb3-414c-bff4-df31d036f524.png</url>
      <title>DEV Community: Daniel Githinji</title>
      <link>https://dev.to/daniel_githinji_6e1e402c3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/daniel_githinji_6e1e402c3"/>
    <language>en</language>
    <item>
      <title>The Unspoken Truths of Dev Work: How I Wrestled My Data Science Project onto GitHub (and learned some secrets)</title>
      <dc:creator>Daniel Githinji</dc:creator>
      <pubDate>Tue, 14 Oct 2025 04:56:53 +0000</pubDate>
      <link>https://dev.to/daniel_githinji_6e1e402c3/the-unspoken-truths-of-dev-work-how-i-wrestled-my-data-science-project-onto-github-and-learned-5g5d</link>
      <guid>https://dev.to/daniel_githinji_6e1e402c3/the-unspoken-truths-of-dev-work-how-i-wrestled-my-data-science-project-onto-github-and-learned-5g5d</guid>
      <description>&lt;p&gt;Every developer knows the drill: write code, solve problem, push to GitHub. Simple, right? Not always. As I tackled the Week 3 homework for the Data Talks Club scholarship—focused on lead scoring with a classic ML workflow—my journey from Google Colab to a clean GitHub commit turned into a mini-saga of real-world dev frictions.&lt;/p&gt;

&lt;p&gt;This isn't just about getting the right answers (though I got those too, for Q1-Q6 on mutual information, feature elimination, and regularization). It's about how the actual process of deployment and version control can sometimes teach you more than the algorithms themselves.&lt;/p&gt;

&lt;p&gt;The Setup: Colab Comfort &amp;amp; GitHub Ambition&lt;br&gt;
My environment of choice was Google Colab—fast, free, and great for quick iterations on ML tasks. My goal: complete the homework, export the notebook, and push it to my GitHub repo (dgithinjibit/dataTalksClubWeek3). Sounds straightforward for a developer building a platform like SyncSenta, right?&lt;/p&gt;

&lt;p&gt;The plan was clear:&lt;/p&gt;

&lt;p&gt;Code the ML solution in Colab.&lt;/p&gt;

&lt;p&gt;git clone the empty repo in Colab.&lt;/p&gt;

&lt;p&gt;git add, git commit, git push.&lt;/p&gt;

&lt;p&gt;Friction Point #1: The Phantom Branch - src refspec main does not match any&lt;br&gt;
After getting the initial code down, I hit my first snag. After running git init (which you generally don't do when cloning an existing repo), and then attempting to push, I got the infamous:&lt;/p&gt;

&lt;p&gt;error: src refspec main does not match any&lt;br&gt;
error: failed to push some refs to '&lt;a href="https://github.com/dgithinjibit/dataTalksClubWeek3.git" rel="noopener noreferrer"&gt;https://github.com/dgithinjibit/dataTalksClubWeek3.git&lt;/a&gt;'&lt;br&gt;
The Lesson: This error is Git's polite way of saying, "Hey, you're trying to push a main branch, but your local repository doesn't actually have a main branch with any commits yet!" A branch only truly exists in Git after its first commit.&lt;/p&gt;

&lt;p&gt;The Fix: A git clone of the (empty) remote repo, followed by an mv of my notebook into that cloned folder, then a proper git add and the crucial first git commit. This establishes the local main branch. Always commit before you push, especially for the first time on a new branch.&lt;/p&gt;

&lt;p&gt;Friction Point #2: The Elusive File - mv: cannot stat '../datatalksweek3.ipynb': No such file or directory&lt;br&gt;
Even after getting the Git commands right, the Colab file system threw a curveball. My mv command to move the notebook into the repo folder failed:&lt;/p&gt;

&lt;p&gt;mv: cannot stat '../datatalksweek3.ipynb': No such file or directory&lt;br&gt;
The Lesson: Colab notebooks, especially those opened from or saved to Google Drive, aren't always sitting in the /content/ directory. You need to explicitly mount your Google Drive if that's where the file resides. Otherwise, the Colab runtime can't see it.&lt;/p&gt;

&lt;p&gt;The Fix: Mounting Google Drive (from google.colab import drive; drive.mount(...)) and using the absolute path (/content/drive/MyDrive/Colab Notebooks/datatalksweek3.ipynb) was the solution. It's a reminder that even in "cloud" environments, file paths are king.&lt;/p&gt;

&lt;p&gt;Friction Point #3: The Secret Sneak - GitHub Push Protection Strikes!&lt;br&gt;
Just when I thought I was home free, GitHub's automated security stepped in:&lt;/p&gt;

&lt;p&gt;remote: error: GH013: Repository rule violations found for refs/heads/main.&lt;br&gt;
remote: - GITHUB PUSH PROTECTION&lt;br&gt;
remote:   —————————————————————————————————————————&lt;br&gt;
remote:     - Push cannot contain secrets&lt;br&gt;
remote:       —— GitHub Personal Access Token ——————————————————————&lt;br&gt;
remote:        locations: datatalksweek3.ipynb:1&lt;br&gt;
The Lesson: My Personal Access Token (PAT) — which I used to authenticate Git operations in Colab — was inadvertently saved within the notebook's output cells. GitHub's Push Protection caught it. This is critical. Never commit secrets to a public repository. It's a fundamental security principle.&lt;/p&gt;

&lt;p&gt;The Fix (The "Clean Code" Way):&lt;/p&gt;

&lt;p&gt;Downloaded the notebook locally. This was the fastest way to get full control.&lt;/p&gt;

&lt;p&gt;Manually edited the .ipynb file in VS Code, deleting the entire cell where the PAT was used and, crucially, where its output was stored. No git filter-repo gymnastics needed.&lt;/p&gt;

&lt;p&gt;Used git reset HEAD^ --hard to undo the previous bad commit locally.&lt;/p&gt;

&lt;p&gt;git add, git commit the clean notebook.&lt;/p&gt;

&lt;p&gt;git push origin main (no force needed this time, as the remote was still empty).&lt;/p&gt;

&lt;p&gt;The Takeaway: Beyond the Algorithm&lt;br&gt;
This wasn't just homework; it was a crash course in the practicalities of a developer's workflow. From understanding how Git actually builds its history, to navigating cloud file systems, to prioritizing security and clean commit practices—these "frictions" are where the real learning happens.&lt;/p&gt;

&lt;p&gt;As I continue building SyncSenta and pushing the boundaries of AI in education, these are the lessons that build resilient systems and a robust development pipeline. It's not just about writing code; it's about owning the entire stack and adapting to every challenge that comes your way.&lt;/p&gt;

&lt;p&gt;What are your "tedious" dev lessons that turned into critical skills? Share in the comments!&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Conjuring Cards from Code: Building an AI Magic: The Gathering Generator with Gemini</title>
      <dc:creator>Daniel Githinji</dc:creator>
      <pubDate>Sat, 09 Aug 2025 15:41:56 +0000</pubDate>
      <link>https://dev.to/daniel_githinji_6e1e402c3/conjuring-cards-from-code-building-an-ai-magic-the-gathering-generator-with-gemini-3jd</link>
      <guid>https://dev.to/daniel_githinji_6e1e402c3/conjuring-cards-from-code-building-an-ai-magic-the-gathering-generator-with-gemini-3jd</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;This post is my submission for &lt;a href="https://dev.to/deved/build-apps-with-google-ai-studio"&gt;DEV Education Track: Build Apps with Google AI Studio&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Here's a look at the final application in action. You can try it yourself here:&lt;br&gt;
&lt;a href="https://aistudio.google.com/app/prompts?state=%7B%22ids%22:%5B%221DompvESeXnO86aBQU5HLunUXAHLIs0ZY%22%5D,%22action%22:%22open%22,%22userId%22:%22115709936703047334177%22,%22resourceKeys%22:%7B%7D%7D&amp;amp;usp=sharing" rel="noopener noreferrer"&gt;https://aistudio.google.com/app/prompts?state=%7B%22ids%22:%5B%221DompvESeXnO86aBQU5HLunUXAHLIs0ZY%22%5D,%22action%22:%22open%22,%22userId%22:%22115709936703047334177%22,%22resourceKeys%22:%7B%7D%7D&amp;amp;usp=sharing&lt;/a&gt;&lt;br&gt;
The user journey is simple: just type a creative idea into the prompt box and hit "Generate Card".&lt;br&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%2F33v8xc2ey34dqyze4vrr.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%2F33v8xc2ey34dqyze4vrr.png" alt="THe first screenshot for my prompt" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
After a few seconds, the AI delivers a brand-new card, complete with stunning artwork, and a separate section that reveals the rich lore behind your creation.&lt;br&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%2Ffv0f74yo7ccx5v84h7f8.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%2Ffv0f74yo7ccx5v84h7f8.png" alt="The final image generated from the prompt" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience
&lt;/h2&gt;

</description>
      <category>deved</category>
      <category>learngoogleaistudio</category>
      <category>ai</category>
      <category>gemini</category>
    </item>
    <item>
      <title>10 Things to Keep Private for a Spotless Reputation</title>
      <dc:creator>Daniel Githinji</dc:creator>
      <pubDate>Fri, 13 Jun 2025 11:19:58 +0000</pubDate>
      <link>https://dev.to/daniel_githinji_6e1e402c3/10-things-to-keep-private-for-a-spotless-reputation-1lk8</link>
      <guid>https://dev.to/daniel_githinji_6e1e402c3/10-things-to-keep-private-for-a-spotless-reputation-1lk8</guid>
      <description>&lt;p&gt;In an era where oversharing is the norm, maintaining a pristine reputation requires discretion.  Let's dive into these points and analyze why they matter.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Long-term Goals (Until You’ve Taken Real Action)&lt;br&gt;
Sharing your ambitious goals can be exciting, but it can also backfire. Publicly announcing goals can trick your brain into feeling accomplished, making you less likely to follow through. Keep your plans quiet and let your actions speak louder than your words.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Intimate Details About Your Love Life&lt;br&gt;
Oversharing about your relationship can make it seem unstable, even if it isn't. Respect your partner's privacy and dignity by keeping intimate details to yourself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Acts of Generosity&lt;br&gt;
Helping others is commendable, but flaunting your good deeds can make you seem self-congratulatory. True generosity doesn't seek an audience; it comes from the heart.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Family’s Flaws and Dysfunctions&lt;br&gt;
Airing your family's dirty laundry can create unease and damage your perception. Keep family issues private, especially in professional settings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Financial Situation (in Detail)&lt;br&gt;
Whether you're wealthy or struggling, your financial situation is personal. Bragging or complaining about money can make you seem arrogant or unstable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Past Mistakes (especially if they’re still raw)&lt;br&gt;
Sharing unprocessed past mistakes can lead to judgment and define you by your worst moments. Wait until you've healed and gained wisdom before sharing your stories.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gossip Others Have Told You in Confidence&lt;br&gt;
Keeping secrets shows your integrity. Don't leak confidential information, as it can quickly tarnish your credibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your Insecurities (with the wrong people)&lt;br&gt;
While it's good to talk about insecurities with trusted friends, constantly advertising self-doubt can question your competence. Save that vulnerability for those who can support you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Spiritual or Political Beliefs (in Polarizing Environments)&lt;br&gt;
Your beliefs are personal and complex. Shouting them in every room can alienate others. Know when to listen rather than preach, and maintain your reputation in diverse settings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your Next Move&lt;br&gt;
Keeping your plans close to your chest until it’s time to act can prevent resistance and drama. Act quietly and decisively, without seeking validation.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;In a world that encourages oversharing, knowing what to keep private is crucial for maintaining your reputation. Your inner life is sacred, and the most powerful people are those who discern what to reveal and what to protect. Think twice before sharing, and remember that sometimes, silence is stronger than words.&lt;/p&gt;

&lt;p&gt;This analysis underscores the importance of discretion in maintaining a strong reputation. By keeping certain aspects of your life private, you can ensure that your public image remains intact and respected.&lt;/p&gt;

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