<?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: Stephane Mensah</title>
    <description>The latest articles on DEV Community by Stephane Mensah (@waptik).</description>
    <link>https://dev.to/waptik</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%2F181507%2Fc4235cbe-4a70-4abe-bf85-ae2a3d5dfd12.jpeg</url>
      <title>DEV Community: Stephane Mensah</title>
      <link>https://dev.to/waptik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/waptik"/>
    <language>en</language>
    <item>
      <title>Static and Dynamic and IP addresses: Assigning a static ip address to an AWS EC2 instance</title>
      <dc:creator>Stephane Mensah</dc:creator>
      <pubDate>Wed, 03 Sep 2025 23:50:34 +0000</pubDate>
      <link>https://dev.to/waptik/static-and-dynamic-and-ip-addresses-assigning-a-static-ip-address-to-an-aws-ec2-instance-1p91</link>
      <guid>https://dev.to/waptik/static-and-dynamic-and-ip-addresses-assigning-a-static-ip-address-to-an-aws-ec2-instance-1p91</guid>
      <description>&lt;p&gt;Got it ✅ Let’s turn your EC2 IP experience into a &lt;strong&gt;Markdown blog post&lt;/strong&gt; for Astro.&lt;br&gt;
I’ll keep it clean, structured, and blog-ready.&lt;/p&gt;

&lt;p&gt;Here’s the Markdown draft ⬇️Here’s a polished version of your text with grammar, clarity, and flow improved while keeping your voice intact:&lt;/p&gt;




&lt;p&gt;Through a lab on &lt;strong&gt;“Static and Dynamic IP addresses”&lt;/strong&gt;, I was able to identify the cause of my EC2 instance changing its public IP address every time I stopped and restarted it.&lt;/p&gt;

&lt;p&gt;In the lab scenario, a customer reached out to an AWS Cloud Support Engineer (CSE) for help with a networking issue: their EC2 instance’s public IP kept changing whenever they started and stopped it. As the CSE, my task was to investigate and resolve the problem.&lt;/p&gt;

&lt;p&gt;This sounded very similar to what I experienced over the weekend when I created an EC2 instance to set up an &lt;strong&gt;n8n&lt;/strong&gt; instance. After completing the installation and confirming everything was working, I stopped the instance and left it. On Sunday, I restarted the server and tried to access my self-hosted n8n instance through the domain name I had attached, but it wasn’t accessible.&lt;/p&gt;

&lt;p&gt;Confused, I checked my Portainer dashboard (I used Portainer as my server admin dashboard to deploy containers via stacks). Looking at the n8n container logs, I noticed it couldn’t ping the domain name. So I compared the EC2 instance’s public IP with the one in my Cloudflare DNS settings and realized they were different. After updating Cloudflare with the new IP and waiting a few minutes, everything worked again. I didn’t stop the server afterward because I was worried about breaking it.&lt;/p&gt;

&lt;p&gt;It turned out that I needed to create an &lt;strong&gt;Elastic IP (EIP)&lt;/strong&gt; and assign it to my instance. After finishing the lab, I went back to the AWS console, opened the EC2 dashboard, and noted my current IP address. Then I navigated to the Elastic IP section, generated a new EIP, and assigned it to my instance. After a short restart, I saw the new IP reflected. To confirm, I stopped and restarted the instance again, and this time the IP stayed the same. Problem solved! I then updated my Cloudflare DNS settings to point to the new static IP.&lt;/p&gt;

&lt;p&gt;Interestingly, the study group I was part of also did a class presentation on Internet Protocols, covering Static, Dynamic, Public, and Private addresses—exactly the concepts I had just experienced in practice.&lt;/p&gt;




</description>
      <category>aws</category>
      <category>cloud</category>
      <category>linux</category>
      <category>amalitech</category>
    </item>
    <item>
      <title>Catch up on your favorite Youtube&amp;Tiktok videos</title>
      <dc:creator>Stephane Mensah</dc:creator>
      <pubDate>Mon, 01 Sep 2025 06:13:36 +0000</pubDate>
      <link>https://dev.to/waptik/catch-up-on-your-favorite-youtubetiktok-videos-lng</link>
      <guid>https://dev.to/waptik/catch-up-on-your-favorite-youtubetiktok-videos-lng</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/brightdata-n8n-2025-08-13"&gt;AI Agents Challenge powered by n8n and Bright Data&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I have subscribed to some amazing youtube channels from my country Ghana which i always look forward to watching their videos daily. Most times, i just want to forward the video links somewhere to get a summary and have a before-taste of since most of their videos are often more than 20 mins long, and i sometimes don't have the luxury to fully watch them at that instant. That's where the idea of this workflow came from. A way for me to get a summary and insights of a video that i can read in less than 5 minutes to build up anticipation, just by forwarding the link of the video to my system.&lt;/p&gt;

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

&lt;p&gt;Youtube demo:&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/xZDVhreUpiA"&gt;
  &lt;/iframe&gt;
&lt;br&gt;
Screenshots:&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%2Fbxexv1p44nddgsegc4fj.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%2Fbxexv1p44nddgsegc4fj.png" alt="Workflow on n8n"&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%2Fmbonlhfp8ljc313dyakd.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%2Fmbonlhfp8ljc313dyakd.png" alt="Email screenshot 1"&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%2Fgnk3td3crn5ilhsmtiyp.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%2Fgnk3td3crn5ilhsmtiyp.png" alt="Email screenshot 2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  n8n Workflow
&lt;/h3&gt;



&lt;p&gt;Workflow gist: &lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  Technical Implementation
&lt;/h2&gt;

&lt;p&gt;&lt;u&gt;System Instructions:&lt;/u&gt;&lt;br&gt;
The system is instructed to follow these key components in its entire journey: Role, Task, Tools and Outputs. A specific role as summarizer for Youtube &amp;amp; TikTok videos for a daily digest newsletter. A comprehensive task on how to process the data, styles to use for summarisation and which tools to use based on its description. It's being given tools as well. An input and output format were shown to it as examples of what it would be receiving and what its output should look like.&lt;br&gt;
&lt;u&gt;Model Choice:&lt;/u&gt; &lt;br&gt;
The workflow is powered by Google Gemini 2.5 Flash. It is designed to be model-agnostic, but the two-agent structure allows for optimization. For instance, a faster, cheaper model can be used for the technical parsing task, while a more powerful, creative model like Gemini 2.5 Pro could be used for the final content generation if desired.&lt;br&gt;
&lt;u&gt;Memory:&lt;/u&gt; &lt;br&gt;
It is using the Simple Memory to keep track of the process.&lt;br&gt;
&lt;u&gt;Tools:&lt;/u&gt; &lt;br&gt;
Only the "sendNewsletter" tools is used to send the cacth-up email to the user through the send gmail node.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bright Data Verified Node
&lt;/h3&gt;

&lt;p&gt;I used the Bright Data Verified Node to get data of Youtube and TikTok videos. It was also able to get me transcript of Youtube videos but couldn't for TikTok videos so i used the HTTP REQUEST node for that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;As a first time n8n workflow builder, it was tough. Thanks to some amazing resources from n8n the community support form, youtube videos like &lt;a href="https://youtu.be/SoDip-tvZ0Y?si=5Y1Y1nfk_9_Y1aH9" rel="noopener noreferrer"&gt;https://youtu.be/SoDip-tvZ0Y?si=5Y1Y1nfk_9_Y1aH9&lt;/a&gt;; i was able to make it through.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>n8nbrightdatachallenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Introducing Mongoosejs-cli: Generate models, migrations and seeders for mongoosejs right from your terminal</title>
      <dc:creator>Stephane Mensah</dc:creator>
      <pubDate>Fri, 28 Jun 2019 02:53:52 +0000</pubDate>
      <link>https://dev.to/waptik/introducing-mongoosejs-cli-generate-models-migrations-and-seeders-for-mongoosejs-right-from-your-terminal-2iei</link>
      <guid>https://dev.to/waptik/introducing-mongoosejs-cli-generate-models-migrations-and-seeders-for-mongoosejs-right-from-your-terminal-2iei</guid>
      <description>&lt;h2&gt;
  
  
  My first article and first npm/yarn package ever!
&lt;/h2&gt;

&lt;p&gt;I am new to mongodb especially with nodejs. In my pursuit of learning mongodb with nodejs, i came across a tool called Mongoosejs(mongoose) which helps devs work with mongodb with ease. My &lt;a href="https://repl.it/@waptik/mongoose-test" rel="noopener noreferrer"&gt;repl.it page&lt;/a&gt; is where i started practicing mongodb and mongoose for the first time. It includes tutorials i followed on &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/mongoose" rel="noopener noreferrer"&gt;MDN by Mozilla&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When i used to play mysql and nodejs, i usually use &lt;a href="https://github.com/sequelize/sequelize" rel="noopener noreferrer"&gt;Sequelize&lt;/a&gt; and its &lt;a href="https://github.com/sequelize/cli" rel="noopener noreferrer"&gt;cli&lt;/a&gt;, so i was looking for a similar cli for mongoose. I did some search on the internet and i found these &lt;a href="https://gist.github.com/waptik/c7557d7ac1f7ba2c3a6b589ee30b2ec5" rel="noopener noreferrer"&gt;https://gist.github.com/waptik/c7557d7ac1f7ba2c3a6b589ee30b2ec5&lt;/a&gt; . Most of them either don't have a configuration file or are not maintained or do just one thing(migration/seed).&lt;/p&gt;

&lt;p&gt;I said to myself, why not build something of my own that will solve my problem? I went back to sequelize-cli github page, cloned the repo, started playing around with things and that's how &lt;a href="https://github.com/waptik/mongoose-cli" rel="noopener noreferrer"&gt;Mongoosejs-cli&lt;/a&gt; was born. I also launched it on &lt;a href="https://www.producthunt.com/posts/mongoosejs-cli" rel="noopener noreferrer"&gt;Product Hunt&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;If you use mongodb with nodejs or mongoosejs, kindly give it a try and lemme know what your thoughts are.&lt;/p&gt;

&lt;p&gt;Thanks 😄&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>mongodb</category>
      <category>npm</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
