<?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: Satoshi S.</title>
    <description>The latest articles on DEV Community by Satoshi S. (@satoshi-sh).</description>
    <link>https://dev.to/satoshi-sh</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%2F1212360%2F53473333-e3e2-4413-b4eb-7060e6ce3d49.jpeg</url>
      <title>DEV Community: Satoshi S.</title>
      <link>https://dev.to/satoshi-sh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/satoshi-sh"/>
    <language>en</language>
    <item>
      <title>My Experience with Solana</title>
      <dc:creator>Satoshi S.</dc:creator>
      <pubDate>Mon, 06 Apr 2026 16:51:14 +0000</pubDate>
      <link>https://dev.to/wdp/my-experience-with-solana-1jh5</link>
      <guid>https://dev.to/wdp/my-experience-with-solana-1jh5</guid>
      <description>&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%2Fe65o98l4mv046es0qf5b.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%2Fe65o98l4mv046es0qf5b.jpg" alt="Solana Logo" width="379" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;I’ll start with an update on my current work.&lt;/p&gt;

&lt;p&gt;Last November, I began working with JB Music Therapy to build a music wellness application. We recently completed a large user testing phase with over 250 participants, including music therapy students. Now, we’re migrating the web application to Flutter in preparation for releasing it on the Google Play Store and Apple App Store.&lt;/p&gt;

&lt;p&gt;Since I don’t yet have production-level mobile development experience, I’ve been actively learning through a Udemy course while working on the migration. It’s been a challenging but rewarding process.&lt;/p&gt;

&lt;p&gt;As a contract worker, I have a flexible schedule. To take advantage of that, I decided to apply to the MLH Fellowship again. I’ve participated in the program three times before, and each time I’ve gained valuable skills and experience.&lt;/p&gt;

&lt;p&gt;This time, I was accepted into the Web3 track and assigned to work with the Solana Foundation team. In this post, I’ll share my experience working with Solana.&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%2F9ijtrzkjrh33xyeydq9c.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%2F9ijtrzkjrh33xyeydq9c.png" alt="MLH Fellowship Acceptance email" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're interested in my previous experiences in the program, please check the posts below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/satoshi-sh/how-i-prepared-mlh-fellowship-application-as-a-career-switcher-1co9"&gt;How I prepared MLH Fellowship Application as a Career Switcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/satoshi-sh/my-experience-with-apache-airflow-1dpl"&gt;My Experience with Apache Airflow&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/wdp/devops-practical-experience-with-home-lab-379p"&gt;DevOps Practical Experience with Home Lab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/wdp/my-experience-with-openstack-ironic-24hi"&gt;My Experience with OpenStack Ironic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Project We Were Assigned To
&lt;/h3&gt;

&lt;p&gt;Usually, MLH Fellowship participants contribute to the existing large-scale open-source projects under the guidance of core maintainers, but this time was a bit different. Our team was tasked  with building a system to aggregate stablecoin metrics from multiple data providers and present them in a unified dashboard for the &lt;a href="https://solana.com/developers" rel="noopener noreferrer"&gt;Solana Developer Website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Why is this important? Because metrics can vary depending on the data provider. Differences in calculation methods, definitions, and data sources often lead to inconsistencies. Having a single place to visually compare these metrics makes it easier to understand and validate the data.&lt;/p&gt;

&lt;p&gt;To support this, we are building a data pipeline on Databricks that pulls data from five major cryptocurrency analytics platforms: Allium, Artemis, Blockworks, DefiLlama, and Dune.&lt;/p&gt;

&lt;p&gt;We are in the process of open-sourcing the data retrieval repository so that other developers can easily add new data providers or extend the available metrics in the future.    &lt;/p&gt;

&lt;h3&gt;
  
  
  Explore the API
&lt;/h3&gt;

&lt;p&gt;As a starting point, we decided to retrieve four core metrics.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;metrics&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Supply&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;USD&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Total circulating supply of stablecoins on Solana, denominated in USD.&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Transfer Volume&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;USD&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Total transfer volume of stablecoins on Solana, denominated in USD.&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Transfer Count&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Count&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Total number of stablecoin transfer transactions on Solana&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Active Addresses&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Count&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Number of unique addresses interacting with stablecoins on Solana&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We explored each API using notebooks to retrieve these metrics and understand their data structures. &lt;/p&gt;

&lt;p&gt;During this process, we encountered several challenges, such as handling paginated responses, working with SQL-based APIs and adapting to different data schemas across providers.&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%2F7yim8kbfzuzq028kvdtq.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%2F7yim8kbfzuzq028kvdtq.png" alt="Dune API notebook on Databricks" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ingestion Pipeline
&lt;/h3&gt;

&lt;p&gt;After exploring data provider APIs, we moved on to building the ingestion pipeline. We set up a database on Databricks and stored the data in a consistent format. During this process, we also began structuring the codebase with the goal of open-sourcing it in the future.&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%2F36394q4o2s3090g7zpss.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%2F36394q4o2s3090g7zpss.png" alt="main.py to retrieve data" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Dashboard
&lt;/h3&gt;

&lt;p&gt;Databricks provides built-in dashboarding capabilities, which we used to visualize the aggregated data. I leveraged the AI Agent to generate plots quickly, allowing us to compare metrics across providers. Databricks also provides embeddable HTML components, which we plan to integrate into the final Solana developer page.&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%2Fdsl1rnikbjkbn6p1kcnn.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%2Fdsl1rnikbjkbn6p1kcnn.png" alt="Supply data comparison plot" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Repository Structure Proposal
&lt;/h3&gt;

&lt;p&gt;We are now halfway through the Fellowship and have started organizing our code from Databricks into a structured GitHub repository.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;solana-stablecoin-benchmark/
  providers/        # contributors add providers here
  normalizers/      # shared transformation logic
  pipelines/        # ingestion + normalization orchestration
  db/               # schema definitions
  config/           # config files (logging, env templates)
  tests/            # validation and correctness
  notebooks/        # optional exploration (Databricks / local analysis)
  main.py           # pipeline entry point
  requirements.txt  # dependencies
  .env.example      # API keys template
  README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This structure is designed to make the project easy to extend, allowing contributors to add new data providers and metrics with minimal friction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Throughout the project, effective communication has been just as important as technical implementation. Since our team is distributed across multiple time zones, we rely heavily on asynchronous communication.&lt;/p&gt;

&lt;p&gt;To support this, I've focused on clearly documenting my work so that teammates can easily understand progress and continue development without blockers. This experience has reinforced how important well-written documentation is for team productivity.&lt;/p&gt;

&lt;p&gt;This project has been a great opportunity to deepen my experience in data engineering and collaborate in a distributed team environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Note
&lt;/h3&gt;

&lt;p&gt;I plan to update this post at the end of the program with the final results of our work. I hope you can check it out on GitHub and the Solana website.  &lt;/p&gt;

</description>
      <category>solana</category>
      <category>python</category>
      <category>mlh</category>
      <category>data</category>
    </item>
    <item>
      <title>My Journey with Co.Lab DTTP</title>
      <dc:creator>Satoshi S.</dc:creator>
      <pubDate>Mon, 19 May 2025 14:34:48 +0000</pubDate>
      <link>https://dev.to/satoshi-sh/my-journey-with-colab-dttp-3ed3</link>
      <guid>https://dev.to/satoshi-sh/my-journey-with-colab-dttp-3ed3</guid>
      <description>&lt;p&gt;I just started the Diverse Tech Talent Program provided by &lt;a href="https://www.joincolab.io/" rel="noopener noreferrer"&gt;Co.Lab&lt;/a&gt;. I'm enrolled in the AI-Guided Web Development course. I will be sharing weekly updates here to follow "build in public". &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%2Fqy39bi9rnurzfe83qyzn.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%2Fqy39bi9rnurzfe83qyzn.png" alt="Student badge" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 1 Introduction to the Web
&lt;/h3&gt;

&lt;p&gt;We kicked off with an orientation event that gave us an overview of the program and what to expect.&lt;/p&gt;

&lt;p&gt;This week's lecture covered high-level web development concepts, such as frontend, backend, database, and servers. For the assignment, I built a Hello World app using Replit and copied a Problem statement. &lt;/p&gt;

&lt;h3&gt;
  
  
  Week 2 Understanding Your Project Stack
&lt;/h3&gt;

&lt;p&gt;In the lecture, we learned about the stack we use in this course. We use React(frontend), Express.js(backend), and PostgreSQL (database). &lt;/p&gt;

&lt;p&gt;Additionally, I joined a mentor's office hours to ask some questions about the course.&lt;/p&gt;

&lt;p&gt;For the assignment, we needed to add user stories to the document. Last week, I used a template but started creating my own project named Deal Board, as I will create the app during the course. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Project Statement: Businesses often have great deals or promotions, but no easy way to share them online. Many lack the technical skills or resources to build and maintain a website. As a result, their deals go unnoticed by potential customers. This project addresses the problem by enabling businesses to upload their deals and showcase them on a public page, allowing users to discover offers and be redirected to the business’s website or physical location. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm getting interested in how the course progresses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 3 Mapping Project components
&lt;/h3&gt;

&lt;p&gt;This week, we started defining the scope of projects. &lt;br&gt;
Project Must-Have Features&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Front page&lt;/li&gt;
&lt;li&gt;Business register/signup&lt;/li&gt;
&lt;li&gt;Business Login&lt;/li&gt;
&lt;li&gt;Business Deal Submittion form &lt;/li&gt;
&lt;li&gt;Deal View page &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is my first prompt for the Replit Agent.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please create a front page for DealBoard, an application that connects users with local business deals. 
- Show links to available cities: Vancouver,Toronto,Calgary,Winnipeg,Montreal clicking a city will lead to deals available in that city.
- Include business-facing links:
  - Business Signup
  - Business Login 

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the output of the agent.&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%2F3zb9drqgnj53lnbvbpzp.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%2F3zb9drqgnj53lnbvbpzp.png" alt="DealBoard frontpage" width="800" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 4 Expanding the Product
&lt;/h3&gt;

&lt;p&gt;It's already half way through for the lecture section. This week, the instructor talked about Feature Creep. People tend to add excessive feature beyond the MVP scope with the helpf of AI.&lt;/p&gt;

&lt;p&gt;For the assignment, I made the rest of pages. One of my favoirte design is the confrimation page for the deal submission. I documneted how to test generated pages manually. &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%2Fkc8hrzb5760jibg5zsfb.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%2Fkc8hrzb5760jibg5zsfb.png" alt="Deal submission confirmation page" width="543" height="759"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 5 Managing Application Data with Databases &amp;amp; AI
&lt;/h3&gt;

&lt;p&gt;This week's topic was databases, so the lecture covered different types such as PostgreSQL, MongoDB, Firebase, and more. Naturally, the assignment was to integrate the frontend I previously created with a backend and a connected database.&lt;/p&gt;

&lt;p&gt;I started using a database by subscribing to Replit. While the instructor mentioned that the free tier would be sufficient, I decided to upgrade since I’ll need to deploy the project eventually, and Replit makes that easier.&lt;/p&gt;

&lt;p&gt;Once I began developing the backend and setting up the database, I encountered a few complex bugs. I learned it's crucial to verify that all features continue to work properly after each update made by the agent.&lt;/p&gt;

&lt;p&gt;I added features to update business and deal info.It's a basic CRUD app, but I believe my project is in a good place as a Minimum Viable Product (MVP). Next week's topic is deployment, and I'm looking forward to it.&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%2Fgxbnw9r8nf7n3r3e45zp.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%2Fgxbnw9r8nf7n3r3e45zp.png" alt="Business Dashboard" width="800" height="636"&gt;&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%2Fw3g2azob6spvisgx62eh.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%2Fw3g2azob6spvisgx62eh.png" alt="My deals view" width="800" height="699"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 6 Launching Your MVP on Replit
&lt;/h3&gt;

&lt;p&gt;This week's topic was deployment. Since I upgraded my Replit plan last week, I was able to deploy the project directly on Replit. I encountered several configuration bugs, but the AI agent helped me resolve them. My project is now live.&lt;/p&gt;

&lt;p&gt;This weekend, we also need to participate in the Hackathon. Probably, I will include my experience with that in next week's update.&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 7 Product Feedback and Refinement + α
&lt;/h3&gt;

&lt;p&gt;As I mentioned last week, we had a 3 days-long hackathon over the weekend. My team built a fundraising app powered by chimoney(thoug we didn't get to implement the intergation). We placed 5th and unfortunatelyd didn't win a prize. I enjoyed brainstorming ideas and deciding what kind of app to build. Teamwork was the key to this competition. &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%2Fwfj2u9s1u5cnep0w74zo.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%2Fwfj2u9s1u5cnep0w74zo.png" alt="Presentation slide" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Week 7 topic was product feedback and refinement. I asked my wife to try out my app. She gave some UI enhancement ideas and I liked them. One of them was a quick discount button to set the reduced prices. &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%2Fjyy3kkq7y6xwiwnh9kzr.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%2Fjyy3kkq7y6xwiwnh9kzr.png" alt="Quick discounts button" width="615" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next week is wrap-up week and we are moving on to the next phase. Selected students will join a project-based internship program provided by Riipen. I don't know much about the program yet but I will write about the experience in the upcoming week. &lt;/p&gt;

&lt;h3&gt;
  
  
  Week 8 Wrap Up Week
&lt;/h3&gt;

&lt;p&gt;This week was wrap up week. Two months passed so quickly. What I did this week is that I wrote a final reflection and made a demo video of my cap stone project. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/aYQwCCQM4Xc" rel="noopener noreferrer"&gt;Dealboard Demo Video&lt;/a&gt;&lt;/p&gt;

</description>
      <category>learning</category>
      <category>web</category>
      <category>product</category>
    </item>
    <item>
      <title>My Experience with OpenStack Ironic</title>
      <dc:creator>Satoshi S.</dc:creator>
      <pubDate>Fri, 14 Mar 2025 17:56:14 +0000</pubDate>
      <link>https://dev.to/wdp/my-experience-with-openstack-ironic-24hi</link>
      <guid>https://dev.to/wdp/my-experience-with-openstack-ironic-24hi</guid>
      <description>&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%2F50fcg3m5yfsmaibvbxhq.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%2F50fcg3m5yfsmaibvbxhq.png" alt="ironic and mlh logos" width="350" height="100"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;I'm excited to share that I've been accepted into the MLH fellowship program for the third time. This time, I work on OpenStack/Ironic under the guidance of the G-Research Open Source Team.&lt;/p&gt;

&lt;p&gt;If you are interested in my previous experiences in the program, please check the posts below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/satoshi-sh/how-i-prepared-mlh-fellowship-application-as-a-career-switcher-1co9"&gt;How I prepared MLH Fellowship Application as a Career Switcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/satoshi-sh/my-experience-with-apache-airflow-1dpl"&gt;My Experience with Apache Airflow&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/wdp/devops-practical-experience-with-home-lab-379p"&gt;DevOps Practical Experience with Home Lab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is OpenStack?
&lt;/h2&gt;

&lt;p&gt;OpenStack is an open-source cloud computing platform that allows organizations to manage compute, storage, and networking resources. It provides an alternative to proprietary cloud platforms like AWS, Azure, and GCP, offering similar services while giving users full control over their infrastructure.&lt;/p&gt;

&lt;p&gt;OpenStack follows a modular architecture, meaning it consists of multiple components, each responsible for different aspects of cloud management. One of these components is Ironic, which I'm working on in this fellowship.&lt;/p&gt;

&lt;p&gt;For more details, visit &lt;a href="https://www.openstack.org/" rel="noopener noreferrer"&gt;the OpenStack website&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Ironic?
&lt;/h2&gt;

&lt;p&gt;Ironic is an OpenStack component designed for managing bare metal infrastructure. It allows users to provision and manage physical servers in a way similar to virtual machines, providing greater flexibility and automation for hardware deployments.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Writing Hardware Manager Container-Based Cleaning (75%)&lt;/li&gt;
&lt;li&gt;Fixing bugs and updating documenatation (20%)&lt;/li&gt;
&lt;li&gt;Code Review (5%)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Writing Hardware Manager Container-Based Cleaning
&lt;/h3&gt;

&lt;p&gt;My mentor assigned this as my main task for the internship. I feel fortunate to work on this feature, as G-Research (the program sponsor) has wanted it for a while. I’ve spent most of my time implementing it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ironic Python Agent&lt;/strong&gt; is a key actor in Ironic, responsible for preparing machines for deployment. It runs on a ramdisk and performs cleaning, inspection, and provisioning actions by performing "steps" in a given order. As you can tell, I'm going to enhance the cleaning process.&lt;/p&gt;

&lt;p&gt;I created &lt;a href="https://bugs.launchpad.net/ironic/+bug/2100556" rel="noopener noreferrer"&gt;this issue&lt;/a&gt; which was approved in the Ironic Team meeting. Currently updating Cleaning tools for Ironic nodes(servers) requires modifying and redistributing the entire IPA ramdisk image. With this new feature, users will only need to update their cleaning container image, significantly simplifying the process.&lt;/p&gt;

&lt;p&gt;When I was first assigned my main task, I had no idea where to start. But after following my mentors' step-by-step guide, I gradually gained a clear understanding. Here are some of the steps I went through.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1: Deploy Devstack on AWS VM
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;DevStack is a lightweight way to set up an OpenStack environment for development and testing.&lt;/li&gt;
&lt;li&gt;Running it on an AWS VM provides a cloud-based environment to test Ironic and Ironic Python Agent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenStack development happens on remote server, which I find really enjoyable. So far, I've broken my VM 3 times so far and had to start over from scratch each time.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2: Add Custom Cleaning process to the IPA RAM
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Confirm the autocleaning leave the log(Ex print("Cleaned by Satoshi"))&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 3: Add Podman(Container) operations to the cleaning
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Integrate container operation into the custom cleaning process using Podman &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 4: Implement a config-driven approach
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;This allows users to set up container-based cleaning steps easily by modifying config files, without needing to change the project's code. &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  End Goal
&lt;/h4&gt;

&lt;p&gt;I'm almost done with the feature implementation, but landing three PRs across different repositories is not easy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add ContainerHardwareManager (&lt;a href="https://review.opendev.org/c/openstack/ironic-python-agent/+/941714" rel="noopener noreferrer"&gt;PR&lt;/a&gt; to ironic-python-agent)&lt;/li&gt;
&lt;li&gt;Create Podman DIB (&lt;a href="https://review.opendev.org/c/openstack/ironic-python-agent-builder/+/943348" rel="noopener noreferrer"&gt;PR&lt;/a&gt; to ironic-python-agent-builder)&lt;/li&gt;
&lt;li&gt;Send Container Configuration to IPA(upcoming PR to ironic)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first two are waiting for reviews and I'm about to start working on the third PR. If I manage to land all three, I'll consider this a big success. &lt;/p&gt;

&lt;h2&gt;
  
  
  Some Issues I worked on so far
&lt;/h2&gt;

&lt;p&gt;Besides the main task, I picked up some issues. &lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation - Create Reference Page
&lt;/h3&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%2Fv9ijr0i8gxnsjkvznxfo.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%2Fv9ijr0i8gxnsjkvznxfo.png" alt="Ironic Reference Page" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was my first PR to the OpenStack/Ironic. I learned how to use development tools (Gerrit, Launchpad) and how to write commit messages for OpenStack. &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%2F4kfeecjzmp6tutx8clqj.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%2F4kfeecjzmp6tutx8clqj.png" alt="Slack message by my mentor about my first PR" width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am glad I impressed my mentor with this PR.😄&lt;/p&gt;

&lt;h3&gt;
  
  
  Code - Code Refactoring and Log enhancement
&lt;/h3&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%2F9aulo443qtig2xtx8wrs.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%2F9aulo443qtig2xtx8wrs.png" alt="Code updates" width="766" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While this wasn’t technically challenging, I’m really proud of this work because it will help future developers. During development, I initially missed making the kernel/ram image public, and the log simply stated that the image wasn’t found.&lt;/p&gt;

&lt;p&gt;In this log enhancement, I made it much easier to spot the actual issue: a permission problem. It took me quite a bit of time to fix, but it was worth it to improve the debugging process for anyone working with the code in the future.&lt;/p&gt;

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

&lt;p&gt;I'm grateful for this great learning opportunity provided by MLH fellowship and G-Research. A lot of learning has happened in this short amount of time. I will be implementing a feature that many companies will rely on sooner.&lt;/p&gt;

&lt;p&gt;Happy coding!!&lt;/p&gt;

&lt;h2&gt;
  
  
  After Notes
&lt;/h2&gt;

&lt;p&gt;I successfully wrapped up my internship with OpenStack/Ironic. You can check my contributions &lt;a href="https://review.opendev.org/q/satoshi-sh" rel="noopener noreferrer"&gt;here&lt;/a&gt;. I created 15 PRs, including container-based cleaning features, and reviewed 5 PRs during the program.&lt;/p&gt;

&lt;p&gt;It's been an incredible learning experience. I hope this journey opens doors to new opportunities.&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%2Fncrlovkha12jlgdoxv26.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%2Fncrlovkha12jlgdoxv26.png" alt="OpenStack Contributor's Badge" width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>mlh</category>
      <category>python</category>
      <category>devops</category>
    </item>
    <item>
      <title>Start contributing to a Popular Open Source Project</title>
      <dc:creator>Satoshi S.</dc:creator>
      <pubDate>Tue, 28 Jan 2025 19:33:49 +0000</pubDate>
      <link>https://dev.to/wdp/start-contributing-to-a-popular-open-source-project-5ea</link>
      <guid>https://dev.to/wdp/start-contributing-to-a-popular-open-source-project-5ea</guid>
      <description>&lt;h2&gt;
  
  
  Prelude
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Avaiga/taipy" rel="noopener noreferrer"&gt;Taipy&lt;/a&gt; is a Python web framework for data-driven applications. Developers can build web applications only with Python. The simple method for building web applications is especially beneficial for Data Scientists and analytics professionals. They are gaining popularity in the field. At the time of writing this post, they have 1.9k forks and 17.6k stars.  &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%2Fpz583camvghfbssdferm.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%2Fpz583camvghfbssdferm.png" alt="Taipy repo stats" width="800" height="49"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have been contributing to Taipy for a while now. I started because of my strong interest in data science and analytics, and I felt that my tech skills aligned well with the project. Contributing has given me practical experience solving problems for developers using this framework, and I’ve learned a lot from feedback provided by experienced maintainers. During Hacktoberfest, I found many developers struggled to test their updates on their environment. I want to share my workflow in this post. I hope this helps someone who wants to contribute to Taipy. &lt;/p&gt;

&lt;h2&gt;
  
  
  Setup the workflow
&lt;/h2&gt;

&lt;p&gt;When you want to start contributing to a project, you will go to the &lt;a href="https://github.com/Avaiga/taipy/blob/develop/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt; first. Once you read through the contribution guide. You will find Taipy is using React behind the scenes even though users don't need to touch any JavaScript. &lt;/p&gt;

&lt;p&gt;The majority of my contributions are for the React part. To check updates, you need to build the React, install the updated Taipy to your Python environment, and run a test Tapy script. It's a bit of work to do this every time. I created a bash script for this. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;taipy-build.sh&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/bash
# automate build process of Taipy repo

# Build taipy-gui
cd ~/projects/taipy/frontend/taipy-gui/dom;
npm i;
cd ..;
npm i --omit=optional;
npm run build;

# Build taipy
cd ~/projects/taipy/frontend/taipy;
npm i;
npm run build;

# install new taipy

cd ~/projects/test-taipy;
source venv/bin/activate
pip install ../taipy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After running this script, I just run &lt;code&gt;taipy run --use-reloader main.py&lt;/code&gt; in the virtual environment. You can see the updated behavior. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;pip install ../taipy&lt;/code&gt; is important you install taipy locally. Please point to the taipy in your file system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example PR
&lt;/h2&gt;

&lt;p&gt;Let's take a look at &lt;a href="https://github.com/Avaiga/taipy/pull/2425" rel="noopener noreferrer"&gt;my first PR&lt;/a&gt; to Taipy in 2025. &lt;/p&gt;

&lt;p&gt;A developer found the height property is not working on the Selector component in Radio mode. &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%2Fe2o94ecjjlg86b6389vl.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%2Fe2o94ecjjlg86b6389vl.png" alt="Github issue description" width="800" height="442"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The first thing to do is to create a simple Python script to reproduce the bug. Otherwise, we cannot check if the update fixed the issue. In this issue, the maintainer provided a script, so I used his script. &lt;/p&gt;

&lt;p&gt;Once I reproduced the bug, I started looking at the Taipy codebase. While searching "Selector", I found the file to work on for this issue "Selector.tsx". I also found the height property is not used for radio mode and check mode in the selector component. I need to pass the height property somehow. Following other styling property handling, it's better to use useMemo and create heights. &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%2Fryjiu0am851y86e3i2nv.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%2Fryjiu0am851y86e3i2nv.png" alt="heightSx" width="703" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Initially, I passed the Sx to the parent element(FormControl), it worked fine as expected but the maintainer gave me feedback that it's better to control styling from RadioGroup/FormGroup level as the label remains visible on the Taipy app. This gave me a challenge because the styling didn't work as expected in this way. &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%2F5itg8nkjt6rgky5grigt.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%2F5itg8nkjt6rgky5grigt.png" alt="Styling is not working" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While playing with the styling on the browser developer tools, I found that &lt;code&gt;flexFlow: column wrap&lt;/code&gt; was the reason for this behavior. I added &lt;code&gt;flexFlow: 'column nowrap&lt;/code&gt; to the heightSx. I validated this work as expected with the test script after installing the updated taipy. &lt;/p&gt;

&lt;p&gt;After implementing it, I need to create unit tests. Adding a new test case is not so bad as I can see many examples from the existing tests. I added new tests for radio and check mode height styling. &lt;/p&gt;

&lt;p&gt;It looks straightforward but it took me lots of tries and errors. After refining a PR with the maintainers' feedback, it's getting approved and merged.🎉🎉&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%2Fp3xvhi187gx0p457r9ze.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%2Fp3xvhi187gx0p457r9ze.png" alt="Approvements" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pick the right issue for you
&lt;/h2&gt;

&lt;p&gt;I know the feeling that you want to do impressive work, however, it's not sustainable for you and the maintainers if you take too difficult issues for your level. Easier issues will get you familiar with the project and you also learn something new. I usually research the issue a bit before asking for the assignment to ensure I can handle it.&lt;/p&gt;

&lt;p&gt;As Tomo Fujita says&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Don't Worry&lt;br&gt;
Don't Compare&lt;br&gt;
Don't expect too fast&lt;br&gt;
Be kind to yourself&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If contributing to Taipy repo is too much, you can also take a look at &lt;a href="https://github.com/Avaiga/taipy-doc" rel="noopener noreferrer"&gt;taipy-doc&lt;/a&gt;. Documentation matters for libraries. &lt;/p&gt;

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

&lt;p&gt;Contributing to Taipy has been a rewarding journey. Whether you’re fixing bugs, enhancing features, or improving documentation, every contribution matters. Don’t hesitate to start small—your efforts could help the next developer struggling with the same issue!&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>taipy</category>
      <category>beginners</category>
    </item>
    <item>
      <title>DevOps Practical Experience with Home Lab</title>
      <dc:creator>Satoshi S.</dc:creator>
      <pubDate>Mon, 18 Nov 2024 13:37:48 +0000</pubDate>
      <link>https://dev.to/wdp/devops-practical-experience-with-home-lab-379p</link>
      <guid>https://dev.to/wdp/devops-practical-experience-with-home-lab-379p</guid>
      <description>&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%2Fbdt9eg6oinmf7s77yd2e.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%2Fbdt9eg6oinmf7s77yd2e.jpg" alt="A woman checking a server on her laptop" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;This summer I had an opportunity to learn DevOps skills through MLH Fellowship x Meta Production Engineering program. If you want to know about the program, please have a look at my &lt;a href="https://www.linkedin.com/posts/satoshi-89bb58a8_200-students-in-lessons-learned-from-metas-activity-7226247907639746560-RUpH?utm_source=share&amp;amp;utm_medium=member_desktop" rel="noopener noreferrer"&gt;LinkedIn post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Before the program, I had some experience deploying web applications using Digital Ocean droplets(VPS). I'm hosting some of my work with them. However, I lacked a solid foundation in efficiently deploying applications through various technologies such as Docker, GitHub Actions, proxy servers, etc. &lt;/p&gt;

&lt;p&gt;Throughout the program, I gained essential production engineering skills and had a chance to talk with many production engineers from Meta. One of the highlights was a mock interview with a production engineer manager. I received detailed feedback on my technical and system interview performance. The feedback said that I had a decent catalog of commands with a high level of knowledge of what they could do, and I would benefit from more hands-on experience with a Unix System. I felt reading multiple Linux books for the interview paid off and getting more interested in gaining practical experience as a production engineer.  &lt;/p&gt;

&lt;h3&gt;
  
  
  My HomeLab
&lt;/h3&gt;

&lt;p&gt;One of my mentors inspired me to explore a home server setup after showcasing his physical server projects during a session. I realized that building a home server could be a great way to gain practical Linux server experience.&lt;/p&gt;

&lt;p&gt;After some research, I decided to buy a mini-computer (&lt;a href="https://www.gmktec.com/products/nucbox-g3-most-cost-effective-mini-pc-with-intel-n100-processor?srsltid=AfmBOor8oW35cdxNape9WpcfmkVwGVwx6b199KSz_Arzcbik_Jzix3pH&amp;amp;variant=8ac8c73e-77d5-439d-bb39-e3b63d139540" rel="noopener noreferrer"&gt;NucBox G3&lt;/a&gt;) and use CloudFlare to host websites from my home network. &lt;/p&gt;

&lt;h3&gt;
  
  
  So far &amp;amp; future
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Completed:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Installed Ubuntu server on the mini-computer&lt;/li&gt;
&lt;li&gt;Setup the network and integrated with Cloudflare&lt;/li&gt;
&lt;li&gt;Build a CI/CD pipeline for &lt;a href="https://portfolio.satoshi-homelab.xyz/" rel="noopener noreferrer"&gt;my Flask portfolio&lt;/a&gt; project&lt;/li&gt;
&lt;li&gt;Create a &lt;a href="https://www.kaggle.com/datasets/satoshiss/github-daily-trending-repos" rel="noopener noreferrer"&gt;dataset&lt;/a&gt; for Kaggle with cronjob&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Future Plan
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Improve the Flask portfolio by enhancing the design and adding tests
&lt;/li&gt;
&lt;li&gt;Experiment with deploying applications built with other frameworks, such as React and Next.js&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Although I've been using Linux for about 3 years, I've realized there's still so much to learn to maximize productivity as a developer. I'm sure I will improve my Linux skills with time and hands-on experience. &lt;/p&gt;

&lt;p&gt;While I'm unsure of the exact role I'll take in the future, I'm certain DevOps skills will be invaluable even if I become a front-end developer.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>learning</category>
      <category>python</category>
      <category>linux</category>
    </item>
    <item>
      <title>My Experience with Apache Airflow</title>
      <dc:creator>Satoshi S.</dc:creator>
      <pubDate>Tue, 12 Mar 2024 01:02:43 +0000</pubDate>
      <link>https://dev.to/satoshi-sh/my-experience-with-apache-airflow-1dpl</link>
      <guid>https://dev.to/satoshi-sh/my-experience-with-apache-airflow-1dpl</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3zxkiuopj3h4c6ogul0n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3zxkiuopj3h4c6ogul0n.png" alt="Apache Logo" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Get Accepted for the MLH Fellowship Program
&lt;/h3&gt;

&lt;p&gt;I got accepted for the MLH Fellowship Program 2024 Spring and had an opportunity to work for Apache Airflow. Apache Airflow is an open-source workflow management platform for data engineering pipelines, which is an established and widely used project in the data engineering community.&lt;/p&gt;

&lt;p&gt;If you are interested in the program, I also wrote about how I prepared my application &lt;a href="https://dev.to/satoshi-sh/how-i-prepared-mlh-fellowship-application-as-a-career-switcher-1co9"&gt;here&lt;/a&gt;    &lt;/p&gt;

&lt;p&gt;As I passed the mid-term of the MLH Fellow Program, I would like to share what I have done so far for the project. &lt;/p&gt;

&lt;h3&gt;
  
  
  2. My Contributions
&lt;/h3&gt;

&lt;p&gt;Apache Airflow is a large repository. I contributed to the project from various fields.&lt;br&gt;
I can categorize my contributions into 5 fields &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;FrontEnd&lt;/li&gt;
&lt;li&gt;Code Formatting&lt;/li&gt;
&lt;li&gt;BackEnd API&lt;/li&gt;
&lt;li&gt;Upgrading Dependency (Connexion V3)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2.1 Documentation
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Typo in the URL &lt;a href="https://github.com/apache/airflow/pull/37294"&gt;#37294&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Fix broken hyperlink &lt;a href="https://github.com/apache/airflow/pull/37526"&gt;#37526&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First, I needed to set up a developer environment to start contributing. Fortunately, Apache Airflow makes the process easier with Breeze. I just needed to follow the documentation to set up Breeze. While reading the documentation, I found some hyperlinks are broken. Fixing the broken link was my first contribution to the project. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added Supported Database Types &lt;a href="https://github.com/apache/airflow/pull/37376"&gt;#37376&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the Airflow Slack, a user requested an available SQL list. I added the list document using Sphinx.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F264ndpkkg4i0mwz2k22e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F264ndpkkg4i0mwz2k22e.png" alt="Supported Database Types" width="800" height="458"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  2.2 FrontEnd
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Momento Warning &lt;a href="https://github.com/apache/airflow/issues/37281"&gt;#37281&lt;/a&gt; (Create an issue)&lt;/li&gt;
&lt;li&gt;Added shutdown color to the STATE_COLORS &lt;a href="https://github.com/apache/airflow/pull/37295"&gt;#37295&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Update searchBlogsPosts.js to avoid errors &lt;a href="https://github.com/apache/airflow-site/pull/956"&gt;#956&lt;/a&gt; (apache/airflow-site)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As I'm into web development, I have a habit of keeping the browser terminal open to see any warnings and errors. Once I found them, I fixed them right away. &lt;/p&gt;

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

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

&lt;h4&gt;
  
  
  2.3 Code Formatting
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Applied D401 to airbyte files. &lt;a href="https://github.com/apache/airflow/pull/37370"&gt;#37370&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;D105 checks - airflow.ti_deps &lt;a href="https://github.com/apache/airflow/pull/37578"&gt;#37578&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;D105 Check on Amazon &lt;a href="https://github.com/apache/airflow/pull/37764"&gt;#37764&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As Apache Airflow has so many contributors(2895 contributors when I'm writing this post), we need code formatting tests. The maintainers added a new format check named D401 and D105. &lt;/p&gt;

&lt;p&gt;Once introduce the code formatting test, we need to update lots of files. So they split the work. I took modules to update the code to follow the code format.  &lt;/p&gt;

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

&lt;h4&gt;
  
  
  2.4 Backend API
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Filter Datasets by associated dag_ids (GET /datasets) &lt;a href="https://github.com/apache/airflow/pull/37512"&gt;#37512&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs2oz9ae9vh5u2ftafhsp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs2oz9ae9vh5u2ftafhsp.png" alt="Request to add another filter" width="800" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before this implementation, the endpoint can only filter by the database URL. Now we can filter the datasets by associated dag_ids(task id). This update makes it easy to see what datasets are connected to a dag.&lt;/p&gt;

&lt;p&gt;Through implementing this feture, I learned many things such as SQLAlchemy, OpenAPI, and the structure of testing units of Airflow.&lt;/p&gt;

&lt;h4&gt;
  
  
  2.5 Upgrading Dependency Connexion V3
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Migrate to Connexion v3 &lt;a href="https://github.com/apache/airflow/pull/37638"&gt;#37638&lt;/a&gt; (ongoing)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is still an ongoing issue. I'm sure this will be the highlight of my internship. &lt;/p&gt;

&lt;p&gt;Apache Airflow is trying to upgrade the connection version from v2 to v3 to enhance security, but there are so many bugs after the upgrade. Me and my teammate Sudipto are in charge of fixing those errors. We created subtasks to fix bugs one by one. &lt;/p&gt;

&lt;p&gt;What I have done so far is &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed Swagger Configuration &lt;/li&gt;
&lt;li&gt;Fixed Unit tests to create HTTP requests as a user&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. End Notes
&lt;/h3&gt;

&lt;p&gt;Thank you for reading this far. Over the past 6 weeks, I've learned a lot, especially through my work on upgrading the dependency, which has helped me grow as a developer. I may write another post when I wrap up this internship.&lt;/p&gt;

&lt;p&gt;I would like to express my gratitude to the MLH Fellowship program for providing me with this valuable learning opportunity, and to RBC (the Royal Bank of Canada) for sponsoring this internship position.&lt;/p&gt;

</description>
      <category>intern</category>
      <category>airflow</category>
      <category>python</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>How I prepared MLH Fellowship Application as a Career Switcher</title>
      <dc:creator>Satoshi S.</dc:creator>
      <pubDate>Mon, 22 Jan 2024 20:35:00 +0000</pubDate>
      <link>https://dev.to/satoshi-sh/how-i-prepared-mlh-fellowship-application-as-a-career-switcher-1co9</link>
      <guid>https://dev.to/satoshi-sh/how-i-prepared-mlh-fellowship-application-as-a-career-switcher-1co9</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I recently got accepted for the MLH Fellowship Program 2024 Spring. I got rejected twice before. I want to share how I prepared for it here.    &lt;/p&gt;

&lt;p&gt;To apply for this program, you need to submit a sample project and essays on why you want to become an MLH Fellow.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Learn from the Rejection
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;After reviewing the essays you submitted with your application, our interviewers did not get the sense that you were especially passionate about the MLH Fellowship. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This was the feedback for my second application. I also knew one of my friends got rejected for his/her sample project. I learned two things from this that my sample project was good enough and that they highly likely checked all the applications one by one.&lt;/p&gt;

&lt;p&gt;This was important to me since I didn't want to spend that much time on ATS auto rejection. I decided to put more effort into this application. How can I show I'm passionate about the program? The essay part is the key to this. I needed to know about the program to show my passion and explain why this program would help me to succeed in the tech industry. &lt;/p&gt;

&lt;h2&gt;
  
  
  How I researched about the program
&lt;/h2&gt;

&lt;p&gt;This process needs some time but it helps you to show how passionate you are about the program. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check their website &lt;/li&gt;
&lt;li&gt;Check their YouTube channel&lt;/li&gt;
&lt;li&gt;Check blog posts by past participants&lt;/li&gt;
&lt;li&gt;Talk with past participants &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I prepared the selection process
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Asked my friends to review my application&lt;/li&gt;
&lt;li&gt;Practice general and technical interview with my partner and friends&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Extra Step
&lt;/h2&gt;

&lt;p&gt;I'm not sure if this helps me to get an interview but it might have something to do with it. I was active in the MLH events. They have Hackathons and Weeklong workshop events. I got prizes from the Hackathon and stickers for participating in their workshop events. &lt;/p&gt;

&lt;p&gt;I especially enjoy their month-long Hackathon. I can work on the project at my pace, unlike weekend Hackathon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ending Note
&lt;/h2&gt;

&lt;p&gt;The MLH Fellowship program is appealing to early career developers and open to anyone around the world, so the competition is high. I heard the passing rate is only 2%. This program is mainly for college students, so career switchers probably have a lower chance of getting into the program. The good thing is that you can apply for the program as many times as you want. If you improve your application according to their feedback, you have more chance to get into a program. &lt;/p&gt;

&lt;p&gt;Good luck with your application. I hope my experiences and insights provide valuable guidance for those considering the MLH Fellowship application.&lt;/p&gt;

</description>
      <category>careerdevelopment</category>
      <category>career</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Programming Learning Journey So Far and Onward</title>
      <dc:creator>Satoshi S.</dc:creator>
      <pubDate>Fri, 15 Dec 2023 17:39:07 +0000</pubDate>
      <link>https://dev.to/satoshi-sh/programming-learning-journey-so-far-and-onward-58po</link>
      <guid>https://dev.to/satoshi-sh/programming-learning-journey-so-far-and-onward-58po</guid>
      <description>&lt;h1&gt;
  
  
  Why I Started Learning Programming
&lt;/h1&gt;

&lt;p&gt;I was a bit late to get interested in programming, but my last work experience made me decide to learn programming.  Previously I worked at a food delivery company, and I was a menu care programmer who took care of building menus for restaurants with the company’s menu builder software. Sometimes I needed to do data entry for liquor vendors. They had more than 500 items. I needed to put more information on the menu like volume, quantities, ABV, bottle deposit, and so on from Excel sheets. It required a lot of energy. At some point, I thought these manual tasks might be scripted by programming. It made me interested in programming, and I started learning programming with online resources. &lt;/p&gt;

&lt;h1&gt;
  
  
  Phase I: Online Learning
&lt;/h1&gt;

&lt;p&gt;There are so many free online learning resources nowadays. I like to pick some of my favorites here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Havard University CS50 Series
&lt;/h3&gt;

&lt;p&gt;The quality of course always surprises me. Many people say that they cannot believe those courses are free. I cannot agree enough with that. I took CS50x,CS50P,CS50W, and CS50AI. It might be challenging to start with CS50x as a beginner, but the instructor is enthusiastic and engaging and their coding challenges are unique and interesting. It's always good to know the fundamental concept of computer science to be a better developer. &lt;/p&gt;

&lt;p&gt;Sometimes they ask you to make a video to show your project, I feel it's handy to showcase your projects if you are not planning to deploy them somewhere.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.edx.org/cs50"&gt;CS50 Link&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Odin Project
&lt;/h3&gt;

&lt;p&gt;The Odin Project equips you well to be a full-stack developer. You can choose JavaScript or Ruby on Rails after completing the foundation chapter. I chose the JavaScript path and learned a lot about React.js and Node.js. To follow this course, you need to read a lot. Sometimes it feels dry but reading is an essential skill for developers. Throughout the course, you need to make many projects. I recommend you check this out if you are interested in web development.&lt;/p&gt;

&lt;p&gt;They ask you to use Linux for following the course. It made me become a Linux user from a Windows user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.theodinproject.com/"&gt;TOP Link&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Phase II: Solo Projects
&lt;/h1&gt;

&lt;p&gt;Experienced developers always advise me to create my own projects for myself, friends, or family to get better as a developer. At this point, I have enough skills to create full-stack applications on my own. I started making my projects. I can list some of them here. &lt;/p&gt;

&lt;h3&gt;
  
  
  FindIT
&lt;/h3&gt;

&lt;p&gt;Help users to find movies to watch. &lt;a href="https://github.com/Satoshi-Sh/findit2"&gt;Link&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Mastlog
&lt;/h3&gt;

&lt;p&gt;Archiving my Mastodon toots. Users can look up toots by date, keyword, mention, and hashtag. &lt;a href="https://github.com/Satoshi-Sh/mastlog"&gt;Link&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Menu Creator
&lt;/h3&gt;

&lt;p&gt;Users can make an online menu and also create a menu with a JSON or CSV file. &lt;a href="https://github.com/Satoshi-Sh/menu-creator"&gt;Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fortunately, I got a mentor on Mastodon around this time. I always ask him first about web development. He also recommended that I  use Digital Ocean Droplet to deploy some of my applications. I learned a lot that it's hard to configure a server to deploy applications.&lt;/p&gt;

&lt;h1&gt;
  
  
  Phase III: Team Projects
&lt;/h1&gt;

&lt;p&gt;To be a professional developer, you need to collaborate with other developers. I needed to know more about how to use GitHub, how to communicate with others effectively, and so on. I want to share some communities and resources that helped me improve in those fields.&lt;/p&gt;

&lt;h3&gt;
  
  
  Virtual Coffee
&lt;/h3&gt;

&lt;p&gt;Virtual Coffee is an online developer community. I mainly use this community to socialize with fellow developers on Zoom working place. You can use it here to ask for advice from experienced developers as well. Throughout this community, I learned lots of resources and events like WebDevPath, The Collab Lab, Chingu, Hacktober Fest, and so on. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://virtualcoffee.io/"&gt;VC Link&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  WebDevPath
&lt;/h3&gt;

&lt;p&gt;Web Dev Path is an open-source initiative to help early career developers gain experience working in a team. Through this beginner-friendly community, I learned how to contribute to open-source projects. It's kind of hard to find one open-source project to get involved more with. I feel this community was a good fit for me because of the community size.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.webdevpath.co/"&gt;WebDevPath Link&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  The Collab Lab
&lt;/h3&gt;

&lt;p&gt;The Collab Lab teaches you how to collaborate with other developers. Yes, I learned a lot about this part. Throughout the program, you gain practical experience in how to work in a team like documenting pull requests, reviewing others' pull requests, asking mentors for help, and so on. &lt;/p&gt;

&lt;p&gt;They ask you to submit your project and essays about why you want to join the program. I feel they spend time checking all the applications. I recommend you prepare your application well if you like to join the program. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://the-collab-lab.codes/"&gt;TCL Link&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Chingu
&lt;/h3&gt;

&lt;p&gt;Chingu is the platform where early-career developers create projects as a team. You just need to submit your project and they will assess your skill level. You can join them even if you just know HTML and CSS.&lt;/p&gt;

&lt;p&gt;I joined one of Level 3 projects after submitting my project(Mastlog) and now work for a Moonshot project named TeamForward as a backend developer. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.chingu.io/"&gt;Chingu Link&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ComIT
&lt;/h3&gt;

&lt;p&gt;ComIT is a charitable organization to provides free BootCamp courses for people in Canada. I took a Node.js course. Even though I knew about Node.js, it was great to ask the experienced instructor questions and listen to his explanations. It made my understanding of backend technology deeper. I made &lt;a href="https://github.com/Satoshi-Sh/team-todo"&gt;team-todo&lt;/a&gt; as a final project at the end of the course.&lt;/p&gt;

&lt;p&gt;After graduating from the course, I also helped with their React course as a teaching assistant. Helping people to learn programming was also a good experience for me. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.comit.org/students"&gt;ComIT Link&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Contributing to Open Source Projects and Volunteering
&lt;/h3&gt;

&lt;p&gt;These activities gave me opportunities to work with more experienced developers. I will write about my volunteering experience in another post once the project is deployed.&lt;/p&gt;

&lt;h1&gt;
  
  
  Now and Onward
&lt;/h1&gt;

&lt;p&gt;To be a professional developer has been one of my life goals since I started learning programming. I have been struggling to find my first tech job at the moment. It might be because of the bad job market, or my lack of formal education in Canada. I will keep improving my skills, and continue looking for any opportunities to achieve my goal. &lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;In this blog, I break down my learning journey into three phases(Online Learning, Solo Projects, and Team Projects). &lt;br&gt;
I also shared some of the resources I used during my programming learning journey. I hope someone finds them helpful. &lt;/p&gt;

&lt;h3&gt;
  
  
  Credit
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://commons.wikimedia.org/wiki/File:Classic_Learning_(15903347764).jpg"&gt;Wiki Media Commons&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>learning</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Luck = [Doing Things] x [Telling People]</title>
      <dc:creator>Satoshi S.</dc:creator>
      <pubDate>Fri, 17 Nov 2023 17:36:13 +0000</pubDate>
      <link>https://dev.to/satoshi-sh/luck-doing-things-x-telling-people-17kl</link>
      <guid>https://dev.to/satoshi-sh/luck-doing-things-x-telling-people-17kl</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I attended a great workshop about writing, "How to Write a Technical Blog" by &lt;a href="https://www.mikecoutermarsh.com/"&gt;Mike Coutermarsh&lt;/a&gt; through &lt;a href="https://www.linkedin.com/company/programequity/"&gt;Program Equity&lt;/a&gt;'s educational program. It inspired me to write a blog about my programming journey. I hope I can keep writing after this my very first post.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why writing is important for a developer
&lt;/h2&gt;

&lt;p&gt;Most people think that people who are good at programming are better software developers, but is that always true? Unless you build an application on your own, you always need to communicate with other developers. Collaborating with other developers involves lots of written communication like messaging, pull requests, code reviews, project plans, and so on. Developers don't spend much time on writing coding, as many people think. Improving writing skills is crucial to be successful as a developer.&lt;/p&gt;

&lt;p&gt;As I started contributing to open source projects actively, I realized more about how important writing skills are. Communication always happens in texts in open-source projects. One time I had difficulty explaining why I chose this solution to fix a bug. I thought I explained it clearly but the maintainer didn't get my point. Since then, I've been more mindful of writing pull requests telling how I solve problems.      &lt;/p&gt;

&lt;h2&gt;
  
  
  People don't know what you are doing
&lt;/h2&gt;

&lt;p&gt;I believe I typed this formula from one of Mike's slides during the workshop: Luck = [Doing Things] x [Telling people]. This made me start writing. Many developers are good at getting things done. How about telling people part? Unless you tell people what you are doing, people will not know. Why don't you use the power of writing? You are good at writing already through lots of documentation works as a developer. You don't know what kind of opportunities your writing brings in.&lt;/p&gt;

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

&lt;p&gt;The workshop inspired me to start writing a blog, which felt daunting at first, to be honest. I hope someone feels the same and starts blogging about your programming journey. &lt;/p&gt;

&lt;p&gt;Thanks for reading. I hope you enjoyed it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Future Writing Ideas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;about my volunteering experience as a developer&lt;/li&gt;
&lt;li&gt;about how I solve difficult issues &lt;/li&gt;
&lt;li&gt;about educational programs I participated&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>community</category>
      <category>developer</category>
      <category>writing</category>
    </item>
  </channel>
</rss>
