<?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: Makepad</title>
    <description>The latest articles on DEV Community by Makepad (@makepad).</description>
    <link>https://dev.to/makepad</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%2Forganization%2Fprofile_image%2F3422%2F931dcb72-c454-42d7-b2e1-cb0ed776249e.png</url>
      <title>DEV Community: Makepad</title>
      <link>https://dev.to/makepad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/makepad"/>
    <language>en</language>
    <item>
      <title>Mastering Java and Spring Boot</title>
      <dc:creator>Idil Saglam</dc:creator>
      <pubDate>Mon, 15 Jan 2024 20:43:34 +0000</pubDate>
      <link>https://dev.to/makepad/mastering-java-and-spring-boot-4fnp</link>
      <guid>https://dev.to/makepad/mastering-java-and-spring-boot-4fnp</guid>
      <description>&lt;p&gt;Java is a dominant and preferred programming language for many developers. With the Spring Boot, Java's capabilities have been significantly enhanced, offering a robust framework for building modern, scalable applications. &lt;/p&gt;

&lt;p&gt;Java is a high-level programming language renowned for its stability, security, and cross-platform capabilities. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Object-Oriented Programming (OOP):&lt;/strong&gt; Java's OOP model simplifies complex software development, promoting code reusability, scalability, and maintenance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Platform Independence:&lt;/strong&gt; Java's "write once, run anywhere" philosophy is realized through the Java Virtual Machine (JVM), making it a versatile choice for diverse environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rich API and Powerful Development Tools:&lt;/strong&gt; Java's extensive API and tools like Eclipse and IntelliJ IDEA enhance developer productivity and application performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spring Boot:&lt;/strong&gt; Simplifying Java Application Development&lt;br&gt;
Spring Boot, a project under the larger Spring framework, revolutionizes Java application development by simplifying the setup and deployment process. It's designed to get your applications up and running as quickly as possible with minimal configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Convention over Configuration:&lt;/strong&gt; Spring Boot's approach minimizes the need for explicit configuration, reducing development time and potential errors.&lt;br&gt;
Standalone Applications: It enables the creation of standalone, production-grade applications that you can "just run."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservices Ready:&lt;/strong&gt; Spring Boot is an excellent choice for building microservices, offering lightweight components and cloud-ready features.&lt;br&gt;
Key Features of Spring Boot&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auto-Configuration:&lt;/strong&gt; Spring Boot automatically configures your application based on the added dependencies.&lt;br&gt;
Spring Initializr: A web-based tool that helps in project setup and dependency management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actuator:&lt;/strong&gt; Provides built-in endpoints for monitoring and managing application health.&lt;/p&gt;

&lt;p&gt;Building a Simple Application with Java and Spring Boot&lt;br&gt;
To understand the practical implementation, let's create a basic RESTful web service using Java and Spring Boot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setting Up:&lt;/strong&gt; Use Spring Initializr to generate a Maven or Gradle project with required dependencies.&lt;br&gt;
Coding: Develop your application using Spring Boot's easy-to-use annotations and classes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Running the Application:&lt;/strong&gt; Run your application with a simple command or through your IDE.&lt;br&gt;
Advantages of Using Java with Spring Boot&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Increased Productivity:&lt;/strong&gt; With less code and easier configuration, developers can focus more on business logic rather than boilerplate code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enhanced Performance:&lt;/strong&gt; Java's performance combined with Spring Boot's optimization features results in high-performance applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Community and Support:&lt;/strong&gt; Both Java and Spring Boot have a large, active community, ensuring a wealth of resources and support.&lt;br&gt;
Conclusion&lt;/p&gt;

&lt;p&gt;Java, combined with Spring Boot, offers a powerful duo for building efficient, robust, and scalable applications. Whether you're new to programming or an experienced developer, mastering Java and Spring Boot can significantly elevate your development capabilities, preparing you for the challenges of modern software development.&lt;/p&gt;

</description>
      <category>springboot</category>
      <category>java</category>
    </item>
    <item>
      <title>Reverting Slack's New UI: A Guide for Developers Who Love Control</title>
      <dc:creator>Kaan Yagci</dc:creator>
      <pubDate>Tue, 17 Oct 2023 22:02:38 +0000</pubDate>
      <link>https://dev.to/makepad/reverting-slacks-new-ui-a-guide-for-developers-who-love-control-5gj6</link>
      <guid>https://dev.to/makepad/reverting-slacks-new-ui-a-guide-for-developers-who-love-control-5gj6</guid>
      <description>&lt;p&gt;Hello fellow developers!&lt;/p&gt;

&lt;p&gt;Being a software engineer for the past 10 years, I've had my fair share of software updates, upgrades, and UI revamps. Some of them are warmly welcomed, while others make us question, "Why? Just... why?"&lt;/p&gt;

&lt;p&gt;Recently, Slack decided to roll out a new UI, and let's say it wasn't my cup of coffee. The new change can be a bit frustrating for many of us juggling between multiple Slack servers (and I'm talking about working with two different companies simultaneously). But fret not, for the developer community is resourceful and never backs down from a challenge.&lt;/p&gt;

&lt;p&gt;Thanks to the good folks over at Reddit, I stumbled upon a nifty little trick that helped me revert to the old UI, and I wanted to share this knowledge with all of you, especially if you're in the same boat as me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's dive in!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Enable Slack's Developer Menu
&lt;/h3&gt;

&lt;p&gt;Before we begin, ensure that Slack is closed. To enable the developer menu, we need to set an environment variable. Open your terminal and type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SLACK_DEVELOPER_MENU&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Launch Slack
&lt;/h3&gt;

&lt;p&gt;Once you've set the environment variable, navigate to your applications and open Slack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;open /Applications/Slack.app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Access Developer Console
&lt;/h3&gt;

&lt;p&gt;Here comes the fun part! Once Slack is up and running, you need to open the developer console. For this, simply press:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cmd + option + I
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: The Magic Spell (JavaScript)
&lt;/h3&gt;

&lt;p&gt;With the developer console in front of you, copy and paste the following JavaScript code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;localConfig_v2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;localStorage&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;localConfig_v2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="sr"&gt;is_unified_user_client_enabled&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="sr"&gt;:true/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;"is_unified_user_client_enabled": false&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&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;Hit 'Enter', and voila! The old, familiar Slack UI should be back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;The beauty of the developer community is how quick we are at finding workarounds when things don't go as per our liking. And while I'm sure Slack had its reasons for the UI change, it's great to know that we aren't entirely helpless in such situations.&lt;/p&gt;

&lt;p&gt;So, next time you're met with an unappreciated software change, remember this - there's probably a workaround out there. All you need is a little digging and some faith in the community.&lt;/p&gt;

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




&lt;p&gt;By the way, if you found this useful, drop a comment, share it with your peers, and let's continue making our software lives a bit more comfortable.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br&gt;
Kaan&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This method is based on community findings and might not work with future Slack updates. Always back up your important data before making any changes.&lt;/p&gt;

</description>
      <category>tips</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Reverting Slack's New UI: A Guide for Developers Who Love Control</title>
      <dc:creator>Kaan Yagci</dc:creator>
      <pubDate>Tue, 17 Oct 2023 22:02:38 +0000</pubDate>
      <link>https://dev.to/makepad/reverting-slacks-new-ui-a-guide-for-developers-who-love-control-35m9</link>
      <guid>https://dev.to/makepad/reverting-slacks-new-ui-a-guide-for-developers-who-love-control-35m9</guid>
      <description>&lt;p&gt;Hello fellow developers!&lt;/p&gt;

&lt;p&gt;Being a software engineer for the past 10 years, I've had my fair share of software updates, upgrades, and UI revamps. Some of them are warmly welcomed, while others make us question, "Why? Just... why?"&lt;/p&gt;

&lt;p&gt;Recently, Slack decided to roll out a new UI, and let's say it wasn't my cup of coffee. The new change can be a bit frustrating for many of us juggling between multiple Slack servers (and I'm talking about working with two different companies simultaneously). But fret not, for the developer community is resourceful and never backs down from a challenge.&lt;/p&gt;

&lt;p&gt;Thanks to the good folks over at Reddit, I stumbled upon a nifty little trick that helped me revert to the old UI, and I wanted to share this knowledge with all of you, especially if you're in the same boat as me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's dive in!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Enable Slack's Developer Menu
&lt;/h3&gt;

&lt;p&gt;Before we begin, ensure that Slack is closed. To enable the developer menu, we need to set an environment variable. Open your terminal and type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SLACK_DEVELOPER_MENU&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Launch Slack
&lt;/h3&gt;

&lt;p&gt;Once you've set the environment variable, navigate to your applications and open Slack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;open /Applications/Slack.app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Access Developer Console
&lt;/h3&gt;

&lt;p&gt;Here comes the fun part! Once Slack is up and running, you need to open the developer console. For this, simply press:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cmd + option + I
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: The Magic Spell (JavaScript)
&lt;/h3&gt;

&lt;p&gt;With the developer console in front of you, copy and paste the following JavaScript code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;localConfig_v2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;localStorage&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;localConfig_v2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="sr"&gt;is_unified_user_client_enabled&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="sr"&gt;:true/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;"is_unified_user_client_enabled": false&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&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;Hit 'Enter', and voila! The old, familiar Slack UI should be back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;The beauty of the developer community is how quick we are at finding workarounds when things don't go as per our liking. And while I'm sure Slack had its reasons for the UI change, it's great to know that we aren't entirely helpless in such situations.&lt;/p&gt;

&lt;p&gt;So, next time you're met with an unappreciated software change, remember this - there's probably a workaround out there. All you need is a little digging and some faith in the community.&lt;/p&gt;

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




&lt;p&gt;By the way, if you found this useful, drop a comment, share it with your peers, and let's continue making our software lives a bit more comfortable.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br&gt;
Kaan&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This method is based on community findings and might not work with future Slack updates. Always back up your important data before making any changes.&lt;/p&gt;

</description>
      <category>tips</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Reverting Slack's New UI: A Guide for Developers Who Love Control</title>
      <dc:creator>Kaan Yagci</dc:creator>
      <pubDate>Tue, 17 Oct 2023 22:02:38 +0000</pubDate>
      <link>https://dev.to/makepad/reverting-slacks-new-ui-a-guide-for-developers-who-love-control-2dii</link>
      <guid>https://dev.to/makepad/reverting-slacks-new-ui-a-guide-for-developers-who-love-control-2dii</guid>
      <description>&lt;p&gt;Hello fellow developers!&lt;/p&gt;

&lt;p&gt;Being a software engineer for the past 10 years, I've had my fair share of software updates, upgrades, and UI revamps. Some of them are warmly welcomed, while others make us question, "Why? Just... why?"&lt;/p&gt;

&lt;p&gt;Recently, Slack decided to roll out a new UI, and let's say it wasn't my cup of coffee. The new change can be a bit frustrating for many of us juggling between multiple Slack servers (and I'm talking about working with two different companies simultaneously). But fret not, for the developer community is resourceful and never backs down from a challenge.&lt;/p&gt;

&lt;p&gt;Thanks to the good folks over at Reddit, I stumbled upon a nifty little trick that helped me revert to the old UI, and I wanted to share this knowledge with all of you, especially if you're in the same boat as me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's dive in!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Enable Slack's Developer Menu
&lt;/h3&gt;

&lt;p&gt;Before we begin, ensure that Slack is closed. To enable the developer menu, we need to set an environment variable. Open your terminal and type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SLACK_DEVELOPER_MENU&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Launch Slack
&lt;/h3&gt;

&lt;p&gt;Once you've set the environment variable, navigate to your applications and open Slack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;open /Applications/Slack.app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Access Developer Console
&lt;/h3&gt;

&lt;p&gt;Here comes the fun part! Once Slack is up and running, you need to open the developer console. For this, simply press:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cmd + option + I
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: The Magic Spell (JavaScript)
&lt;/h3&gt;

&lt;p&gt;With the developer console in front of you, copy and paste the following JavaScript code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;localConfig_v2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;localStorage&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;localConfig_v2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="sr"&gt;is_unified_user_client_enabled&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="sr"&gt;:true/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;"is_unified_user_client_enabled": false&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&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;Hit 'Enter', and voila! The old, familiar Slack UI should be back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;The beauty of the developer community is how quick we are at finding workarounds when things don't go as per our liking. And while I'm sure Slack had its reasons for the UI change, it's great to know that we aren't entirely helpless in such situations.&lt;/p&gt;

&lt;p&gt;So, next time you're met with an unappreciated software change, remember this - there's probably a workaround out there. All you need is a little digging and some faith in the community.&lt;/p&gt;

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




&lt;p&gt;By the way, if you found this useful, drop a comment, share it with your peers, and let's continue making our software lives a bit more comfortable.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br&gt;
Kaan&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This method is based on community findings and might not work with future Slack updates. Always back up your important data before making any changes.&lt;/p&gt;

</description>
      <category>tips</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Exploring Mobile App Development with React Native</title>
      <dc:creator>Idil Saglam</dc:creator>
      <pubDate>Wed, 26 Jul 2023 18:35:09 +0000</pubDate>
      <link>https://dev.to/makepad/exploring-mobile-app-development-with-react-native-3b03</link>
      <guid>https://dev.to/makepad/exploring-mobile-app-development-with-react-native-3b03</guid>
      <description>&lt;p&gt;In the world of mobile app development, efficient cross-platform solutions are a holy grail. One such technology, React Native, stands out due to its capacity to render natively on both iOS and Android platforms. Invented by Facebook, this JavaScript framework has gained widespread popularity among developers and businesses alike. Here's why.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is React Native?
&lt;/h2&gt;

&lt;p&gt;React Native is a JavaScript framework for building mobile applications that run natively on both iOS and Android platforms. It’s an offshoot of React, Facebook’s JavaScript library for crafting engaging user interfaces. However, instead of targeting browsers like React does, React Native focuses on mobile platforms. The result? A seamless user experience and code reusability that hastens development timelines and reduces costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Blocks of React Native
&lt;/h2&gt;

&lt;p&gt;In React Native, the building blocks are the native components. It wraps existing native code for user interface controls and exposes them to JavaScript. As a result, your React Native apps will render using real mobile UI components, not webviews, providing the same look and feel as any other mobile application.&lt;/p&gt;

&lt;p&gt;React Native also taps into JavaScript and React, enabling you to compose a rich mobile UI from declarative components. If you're familiar with React, you'll be right at home with React Native.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Choose React Native?
&lt;/h2&gt;

&lt;p&gt;One of the key advantages of React Native is Code Reusability. The same team can develop apps for both iOS and Android, leading to significant cost and time savings. More than that, up to 90% of the code can be shared between the two platforms.&lt;/p&gt;

&lt;p&gt;React Native also boasts Community Support. As an open-source project, React Native is supported by a vibrant community of developers who continually contribute to making the framework better. This means you can leverage plenty of third-party plugins and libraries.&lt;/p&gt;

&lt;p&gt;Performance is another area where React Native shines. Unlike hybrid frameworks that render code via webviews, React Native allows components to be rendered as native platform widgets, leading to improved performance.&lt;/p&gt;

&lt;p&gt;Hot Reloading is a distinctive feature that increases development speed. This feature refreshes the UI instantly as developers adjust the code, allowing them to see changes in real time.&lt;/p&gt;

&lt;h2&gt;
  
  
  React Native in the Real World
&lt;/h2&gt;

&lt;p&gt;Major corporations use React Native. Facebook, of course, uses it for their Ads Manager app. Instagram, after being acquired by Facebook, integrated React Native into their existing native app for push notifications and saved posts.&lt;/p&gt;

&lt;p&gt;Other notable mentions include Walmart, which used React Native to improve performance of their app, and Bloomberg, which developed their consumer mobile app using this technology.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting with React Native
&lt;/h2&gt;

&lt;p&gt;To start with React Native, you need to have Node.js and npm (node package manager) installed on your computer. Also, install the Expo CLI, which helps you create and manage your React Native projects.&lt;/p&gt;

&lt;p&gt;Create a new project with expo init AwesomeProject, navigate into the project using cd AwesomeProject, and start your app with npm start.&lt;/p&gt;

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

&lt;p&gt;React Native is a revolutionary framework that is changing the landscape of mobile app development. Its ability to deliver native-like performance, coupled with significant time and cost savings, makes it an attractive choice for businesses and developers. Whether you are planning to build a new app or thinking about migrating an existing one, React Native could be a great choice.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Demystifying Kubernetes: A Comprehensive Overview</title>
      <dc:creator>Idil Saglam</dc:creator>
      <pubDate>Tue, 16 May 2023 12:38:27 +0000</pubDate>
      <link>https://dev.to/makepad/demystifying-kubernetes-a-comprehensive-overview-4ilc</link>
      <guid>https://dev.to/makepad/demystifying-kubernetes-a-comprehensive-overview-4ilc</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the constantly evolving world of technology, Kubernetes has emerged as a game-changing solution in the realm of container orchestration. The open-source platform, originally developed by Google, is now maintained by the Cloud Native Computing Foundation (CNCF). But what exactly is Kubernetes? This blog post aims to demystify Kubernetes, breaking down its complexities into digestible insights.&lt;/p&gt;

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

&lt;p&gt;Kubernetes, also known as K8s, is an open-source system designed to automate the deployment, scaling, and management of containerized applications. Containers package an application with all its dependencies, allowing it to run uniformly across different computing environments.&lt;/p&gt;

&lt;p&gt;Kubernetes steps in to solve a crucial problem: How do you manage these containers at scale? With Kubernetes, you can efficiently coordinate and automate a vast array of containers, ensuring that your applications run smoothly and reliably, no matter the scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Kubernetes?
&lt;/h2&gt;

&lt;p&gt;Before the advent of Kubernetes, managing and scaling containerized applications was no simple task. Kubernetes brought several benefits to the table:&lt;/p&gt;

&lt;p&gt;1.Scalability: Kubernetes can quickly and efficiently scale out or scale in applications based on demand.&lt;/p&gt;

&lt;p&gt;2.High Availability: Kubernetes ensures that your applications are always up and running, reducing the risk of downtime.&lt;/p&gt;

&lt;p&gt;3.Portability: With Kubernetes, applications can be run anywhere without needing to change the underlying code. This allows for seamless migration and multi-cloud strategy implementation.&lt;/p&gt;

&lt;p&gt;4.Automated Rollouts &amp;amp; Rollbacks: Kubernetes can handle updates and rollbacks automatically, reducing the risk of errors and downtime during these processes.&lt;/p&gt;

&lt;p&gt;5.Self-healing: Kubernetes has the ability to detect and replace unhealthy containers, ensuring that the system is functioning correctly at all times.&lt;/p&gt;

&lt;p&gt;6.Secret and Configuration Management: Kubernetes allows you to manage and store sensitive information, such as passwords and API keys, securely and deploy configuration changes without rebuilding your container images.&lt;/p&gt;

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

&lt;p&gt;In the fast-paced world of software development, Kubernetes has emerged as a powerful ally. Its robust capabilities in orchestrating and managing containers have revolutionized the way businesses deploy and scale their applications. With its unique features such as scalability, high availability, automated rollouts and rollbacks, and self-healing, Kubernetes ensures that our applications run smoothly and reliably, regardless of scale or complexity.&lt;/p&gt;

&lt;p&gt;However, as with any technology, Kubernetes is not a one-size-fits-all solution. It's a complex system that requires a good understanding to exploit its full potential. Therefore, businesses and developers should thoroughly assess their needs and capabilities before diving into Kubernetes.&lt;/p&gt;

&lt;p&gt;In conclusion, Kubernetes is more than just a buzzword in the tech industry. It's a powerful tool that has significantly improved how we handle containerized applications, making our digital lives more efficient and reliable. As we move towards an increasingly cloud-native future, Kubernetes' role is set to become even more pivotal, shaping the evolution of software deployment and management.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>programming</category>
    </item>
    <item>
      <title>Creating a Simple Go Application for CRUD Operations with Neo4j and Docker</title>
      <dc:creator>Idil Saglam</dc:creator>
      <pubDate>Thu, 30 Mar 2023 12:01:02 +0000</pubDate>
      <link>https://dev.to/makepad/creating-a-simple-go-application-for-crud-operations-with-neo4j-and-docker-9nh</link>
      <guid>https://dev.to/makepad/creating-a-simple-go-application-for-crud-operations-with-neo4j-and-docker-9nh</guid>
      <description>&lt;p&gt;Hi everyone 👋, today we'll create a simple Go application that demonstrates basic CRUD operations using Neo4j 🏢, a popular graph database, and Docker 🐳. This tutorial will guide you through the steps to set up a local Neo4j instance using Docker, connect to it from your Go application using the Neo4j Go driver 🚗, and perform CRUD operations on a sample data set. By the end of this tutorial, you'll have a solid understanding of how to use Neo4j with Go and Docker to build scalable and efficient graph-based applications 🚀. So, let's get started!&lt;/p&gt;

&lt;p&gt;Neo4j is a popular graph database that allows users to store, manage, and retrieve data using graph-based queries 📊. Go is a popular programming language for building scalable and efficient applications 🚀. In this tutorial, we'll learn how to create a simple Go project that uses Neo4j and Docker to perform CRUD operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before we begin, please ensure that you have the following installed on your system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker 🐳&lt;/li&gt;
&lt;li&gt;Go (version 1.16 or higher)&lt;/li&gt;
&lt;li&gt;The neo4j-go-driver package (version 4 or higher)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setting up a Neo4j Database with Docker 🐳
&lt;/h2&gt;

&lt;p&gt;First, we need to set up a Neo4j database using Docker 🐳. Open your terminal and execute the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run --name neo4j -p 7687:7687 -p 7474:7474 -e NEO4J_AUTH=neo4j/test1234 neo4j:latest&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
This command will create a new Docker container with a Neo4j database running on port 7687 (for Bolt) and 7474 (for HTTP)🚀. We're also setting the NEO4J_AUTH environment variable to neo4j/test1234 to specify the initial password for the neo4j user.&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating a New Go Project
&lt;/h2&gt;

&lt;p&gt;Next, we need to create a new Go project. Create a new directory for the project and navigate into it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir my-neo4j-project
cd my-neo4j-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a new Go module for the project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go mod init my-neo4j-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create a new go.mod file in the project directory.&lt;/p&gt;

&lt;p&gt;Now, let's take a look at the code! 🔍&lt;/p&gt;

&lt;h3&gt;
  
  
  Import statements
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import (
    "fmt"
    "github.com/neo4j/neo4j-go-driver/v4/neo4j"
    "log"
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The import statements include the necessary packages to interact with Neo4j database and log errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a person struct
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Person struct {
    ID   int64
    Name string
    Age  int
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Person struct represents the structure of a "Person" node in the Neo4j database 🧑. It has an ID, name, and age field.&lt;/p&gt;

&lt;h3&gt;
  
  
  Write the Main function
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func main() {
    // create a new Neo4j driver
    driver, err := neo4j.NewDriver("bolt://localhost:7687", neo4j.BasicAuth("neo4j", "test1234", ""))
    if err != nil {
        log.Fatalf("Failed to create Neo4j driver: %v", err)
    }
    defer driver.Close()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The main function is the entry point of the application. It creates a new Neo4j driver instance by providing the bolt URL and authentication credentials 🔐.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a Person
&lt;/h3&gt;

&lt;p&gt;Let's start by creating a new person. We define a createPerson function that takes in the Neo4j driver instance, the person's name, and age as arguments. Inside the function, we create a new session using the driver and then execute a Cypher query to create a new Person node with the given name and age. We then extract the ID of the created node from the result and return a new Person struct with the ID, name, and age.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func createPerson(driver neo4j.Driver, name string, age int) (*Person, error) {
    session := driver.NewSession(neo4j.SessionConfig{})
    defer session.Close()

    result, err := session.Run(
        "CREATE (p:Person {name: $name, age: $age}) RETURN id(p)",
        map[string]interface{}{"name": name, "age": age},
    )
    if err != nil {
        return nil, err
    }

    record, err := result.Single()
    if err != nil {
        return nil, err
    }

    id, ok := record.Values[0].(int64)
    if !ok {
        return nil, fmt.Errorf("invalid ID type")
    }

    return &amp;amp;Person{ID: id, Name: name, Age: age}, nil
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Get a Person by Name
&lt;/h3&gt;

&lt;p&gt;Next, we define a getPersonByName function that takes in the Neo4j driver instance and a person's name as arguments. Inside the function, we create a new session using the driver and then execute a Cypher query to find a Person node with the given name. We limit the result to one record and extract the ID and age of the node from the result. We then return a new Person struct with the ID, name, and age.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func getPersonByName(driver neo4j.Driver, name string) (*Person, error) {
    session := driver.NewSession(neo4j.SessionConfig{})
    defer session.Close()

    result, err := session.Run(
        "MATCH (p:Person) WHERE p.name = $name RETURN id(p), p.age LIMIT 1",
        map[string]interface{}{"name": name},
    )
    if err != nil {
        return nil, err
    }

    record, err := result.Single()
    if err != nil {
        return nil, err
    }

    id, ok := record.Values[0].(int64)
    if !ok {
        return nil, fmt.Errorf("invalid ID type")
    }

    age, ok := record.Values[1].(int64)
    if !ok {
        return nil, fmt.Errorf("invalid age type")
    }

    return &amp;amp;Person{ID: id, Name: name, Age: int(age)}, nil
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Get a Person by ID
&lt;/h3&gt;

&lt;p&gt;We also define a getPersonByID function that takes in the Neo4j driver instance and a person's ID as arguments. Inside the function, we create a new session using the driver and then execute a Cypher query to find a Person node with the given ID. We extract the name and age of the node from the result and return a new Person struct with the ID, name, and age.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func getPersonByID(driver neo4j.Driver, id int64) (*Person, error) {
    session := driver.NewSession(neo4j.SessionConfig{})
    defer session.Close()

    result, err := session.Run(
        "MATCH (p:Person) WHERE id(p) = $id RETURN p.name, p.age",
        map[string]interface{}{"id

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Update person age
&lt;/h3&gt;

&lt;p&gt;The updatePersonAge function takes in a Neo4j driver object, the ID of the person whose age needs to be updated, and the new age. It then creates a new session using the driver and executes a Cypher query that updates the person's age based on the provided ID. The Cypher query starts with the MATCH keyword, which finds the person node with the given ID. The SET keyword is used to set the person node's age property to the new age provided. Finally, the RETURN keyword is used to retrieve the person node's name and updated age.&lt;/p&gt;

&lt;p&gt;Once the Cypher query has executed successfully, the function constructs a Person struct containing the updated ID, name, and age. This Person struct is then returned by the function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func updatePersonAge(driver neo4j.Driver, id int64, age int) (*Person, error) {
    session := driver.NewSession(neo4j.SessionConfig{})
    defer session.Close()

    result, err := session.Run(
        "MATCH (p:Person) WHERE id(p) = $id SET p.age = $age RETURN p.name, p.age",
        map[string]interface{}{"id": id, "age": age},
    )
    if err != nil {
        return nil, err
    }

    record, err := result.Single()
    if err != nil {
        return nil, err
    }

    name, ok := record.Values[0].(string)
    if !ok {
        return nil, fmt.Errorf("invalid name type")
    }

    newAge, ok := record.Values[1].(int64)
    if !ok {
        return nil, fmt.Errorf("invalid age type")
    }

    return &amp;amp;Person{ID: id, Name: name, Age: int(newAge)}, nil
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Delete person
&lt;/h3&gt;

&lt;p&gt;The deletePerson function takes in a Neo4j driver object and the ID of the person to be deleted. It creates a new session using the driver and executes a Cypher query that deletes the person node based on the provided ID. The Cypher query starts with the MATCH keyword, which finds the person node with the given ID. The DELETE keyword is used to delete the person node.&lt;/p&gt;

&lt;p&gt;If the deletion is successful, the function returns nil. Otherwise, it returns an error indicating that the deletion was unsuccessful.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func deletePerson(driver neo4j.Driver, id int64) error {
    session := driver.NewSession(neo4j.SessionConfig{})
    defer session.Close()

    _, err := session.Run(
        "MATCH (p:Person) WHERE id(p) = $id DELETE p",
        map[string]interface{}{"id": id},
    )
    if err != nil {
        return err
    }

    return nil
}

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Putting it All Together
&lt;/h3&gt;

&lt;p&gt;Now that we have defined the necessary functions for CRUD operations, let's put them together in the main function. The main function demonstrates how to create, get, update, and delete a Person node in the Neo4j database.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func main() {
    // create a new Neo4j driver
    driver, err := neo4j.NewDriver("bolt://localhost:7687", neo4j.BasicAuth("neo4j", "test1234", ""))
    if err != nil {
        log.Fatalf("Failed to create Neo4j driver: %v", err)
    }
    defer driver.Close()

    // create a new person
    person, err := createPerson(driver, "Alice", 30)
    if err != nil {
        log.Fatalf("Failed to create person: %v", err)
    }
    log.Printf("Created person: %+v\n", person)

    // get the person by name
    personByName, err := getPersonByName(driver, "Alice")
    if err != nil {
        log.Fatalf("Failed to get person by name: %v", err)
    }
    log.Printf("Found person by name: %+v\n", personByName)

    // get the person by ID
    personByID, err := getPersonByID(driver, person.ID)
    if err != nil {
        log.Fatalf("Failed to get person by ID: %v", err)
    }
    log.Printf("Found person by ID: %+v\n", personByID)

    // update the person's age
    updatedPerson, err := updatePersonAge(driver, person.ID, 35)
    if err != nil {
        log.Fatalf("Failed to update person's age: %v", err)
    }
    log.Printf("Updated person: %+v\n", updatedPerson)

    // delete the person
    err = deletePerson(driver, person.ID)
    if err != nil {
        log.Fatalf("Failed to delete person: %v", err)
    }
    log.Printf("Deleted person with ID %d\n", person.ID)
}

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

&lt;/div&gt;



&lt;p&gt;The main function first creates a new Neo4j driver instance and then creates a new person node with the name "Alice" and age 30. It then retrieves the person node by name and ID and prints the results. The function then updates the person's age to 35 and prints the updated person. Finally, it deletes the person node and prints a message indicating that the person was deleted.&lt;/p&gt;

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

&lt;p&gt;In this tutorial, we learned how to create a simple Go application that uses Neo4j and Docker to perform CRUD operations on a sample data set. We first set up a Neo4j database using Docker and then defined the necessary functions for creating, getting, updating, and deleting a Person node in the Neo4j database. We then put these functions together in the main function to demonstrate how to perform CRUD operations on a sample data set.&lt;/p&gt;

&lt;p&gt;By the end of this tutorial, you should have a solid understanding of how to use Neo4j with Go and Docker to build scalable and efficient graph-based applications. I hope you found this tutorial helpful, and please feel free to leave any comments or questions below! 👋&lt;/p&gt;

</description>
      <category>go</category>
      <category>neo4j</category>
      <category>docker</category>
      <category>crud</category>
    </item>
    <item>
      <title>Power of Collaboration and Automation 🤖</title>
      <dc:creator>Idil Saglam</dc:creator>
      <pubDate>Sat, 18 Mar 2023 15:32:33 +0000</pubDate>
      <link>https://dev.to/makepad/bridging-the-gap-with-devops-unleashing-the-power-of-collaboration-and-automation-1j6o</link>
      <guid>https://dev.to/makepad/bridging-the-gap-with-devops-unleashing-the-power-of-collaboration-and-automation-1j6o</guid>
      <description>&lt;p&gt;Hello, &lt;/p&gt;

&lt;p&gt;As a freelance full-stack developer, I’m always on the lookout for ways to improve my workflow and deliver better results for my clients. One game-changer I’ve come across is the adoption of DevOps practices in modern software development. 🚀&lt;/p&gt;

&lt;p&gt;DevOps is all about bringing development and operations teams together, fostering collaboration, and leveraging automation to streamline the entire software development lifecycle. Let’s explore some of the amazing benefits of embracing DevOps: 🌟&lt;/p&gt;

&lt;p&gt;1️⃣ Speedy Delivery: DevOps accelerates the process from development to deployment, ensuring quicker releases and helping you stay ahead in the game. ⚡️&lt;/p&gt;

&lt;p&gt;2️⃣ Quality Matters: Continuous Integration and Continuous Deployment (CI/CD) pipelines keep your code tested, verified, and integrated, resulting in high-quality releases and fewer pesky bugs. 🐛&lt;/p&gt;

&lt;p&gt;3️⃣ Teamwork Makes the Dream Work: By breaking down traditional silos, DevOps encourages seamless communication, shared responsibility, and a culture of continuous improvement. 🤝&lt;/p&gt;

&lt;p&gt;4️⃣ Work Smart, Not Hard: Automation tools help eliminate manual tasks, allowing developers and operations teams to focus on more creative and high-value activities. 🧠&lt;/p&gt;

&lt;p&gt;5️⃣ Building Resilience: Practices like Infrastructure as Code (IaC) and automated monitoring make it easier to identify and resolve issues quickly, ensuring your applications stay robust and reliable. 💪&lt;/p&gt;

&lt;p&gt;The power of DevOps lies in its ability to bridge the gap between development and operations, creating a harmonious, efficient, and effective software development process. 🌉&lt;/p&gt;

&lt;p&gt;Have you experienced the magic of DevOps in your projects? I’d love to hear your thoughts and stories in the comments below! 👇&lt;/p&gt;

</description>
      <category>devops</category>
      <category>programming</category>
      <category>devjournal</category>
      <category>developer</category>
    </item>
    <item>
      <title>Take a screenshot with Puppeteer</title>
      <dc:creator>Idil Saglam</dc:creator>
      <pubDate>Wed, 15 Feb 2023 09:07:48 +0000</pubDate>
      <link>https://dev.to/makepad/take-a-screenshot-with-puppeteer-mo</link>
      <guid>https://dev.to/makepad/take-a-screenshot-with-puppeteer-mo</guid>
      <description>&lt;p&gt;In this article, I am going to talk about how to take a screenshot with Puppeteer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pre-requisites
&lt;/h2&gt;

&lt;p&gt;To use Puppeteer to take screenshots of web pages, you have to follow these steps:&lt;/p&gt;

&lt;p&gt;First, you need to install &lt;a href="https://nodejs.org/en/" rel="noopener noreferrer"&gt;nodejs&lt;/a&gt; and &lt;a href="https://docs.npmjs.com/downloading-and-installing-node-js-and-npm" rel="noopener noreferrer"&gt;npm&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Before getting any further, please check the &lt;a href="https://github.com/puppeteer/puppeteer#usage" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt; to check your version compatibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to take a screenshot with Puppeteer?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create a browser instance and a new page.&lt;/li&gt;
&lt;li&gt;Adjust the viewport height to take a screenshot of the page.&lt;/li&gt;
&lt;li&gt;Declare a variable for the website URL we want to take a screenshot.&lt;/li&gt;
&lt;li&gt;To navigate our URL, use the &lt;code&gt;goto()&lt;/code&gt; method from the page instance.&lt;/li&gt;
&lt;li&gt;To capture a screenshot, call the screenshot method from the page instance by mentioning the output path.&lt;/li&gt;
&lt;li&gt;As the screenshot is captured, as a final step, close the browser instance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The source code for capturing a screenshot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const puppeteer = require('puppeteer');

(async () =&amp;gt; {
  // Creating a browser instance
  const browser = await puppeteer.launch();

  // Creating a new page
  const page = await browser.newPage();

  // Adjusting width and height of the viewport
  await page.setViewport({ width: 1200, height: 600 });

  const url = 'https://dev.to/makepad/use-emojis-in-your-commit-messages-1lag';

  // Open URL in current page
  await page.goto(url);

  // Capture screenshot
  await page.screenshot({
    path: 'demo.png',
  });

  // Close the browser instance
  await browser.close();
})();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can execute the code by running &lt;code&gt;node index.js&lt;/code&gt; in your command line and your output will be similar to this: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fc5qmf9695smowt07zelf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fc5qmf9695smowt07zelf.png" alt="Image description" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is fine if you want to take a screenshot of the websites with nothing to scroll because the code takes a screenshot of the page as it is displayed. &lt;/p&gt;

&lt;h2&gt;
  
  
  How can we modify our code to take a full-page screenshot?
&lt;/h2&gt;

&lt;p&gt;To capture a full page, we need to add a &lt;code&gt;fullPage:true&lt;/code&gt; option for &lt;code&gt;page.screenshot()&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  await page.screenshot({
    path: 'demo.png',
    fullPage: true
  });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After updating our code, the output should be similar to the following:  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fsu3sko24ruuc48rv6utk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fsu3sko24ruuc48rv6utk.png" alt="Image description" width="800" height="849"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to take a screenshot of a particular HTML element?
&lt;/h2&gt;

&lt;p&gt;Right-click any part of the page and choose Inspect. Clicking a specific page element will open that element in the inspector view. After finding the HTML element, you want to take a screenshot of, right-click the highlighted HTML code and click Copy &amp;gt; Copy Selector. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F0l28mc8iojtudh3zkbgx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F0l28mc8iojtudh3zkbgx.png" alt="Image description" width="800" height="639"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example this is the selector that I copied: &lt;code&gt;#main-title &amp;gt; div.crayons-article__header__meta&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Let's modify our code !
&lt;/h3&gt;

&lt;p&gt;First, we need to declare a variable for the selector. Then, we will ask the page to wait for our selector. Lastly, as we want to take a screenshot of the element, we need to change &lt;code&gt;await page.screenshot&lt;/code&gt; to &lt;code&gt;await html_element.screenshot&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The source code for capturing a screenshot of an HTML element:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const puppeteer = require('puppeteer');

// Declaring a variable for the selector that we copied
const selector = `#main-title &amp;gt; div.crayons-article__header__meta`;

(async () =&amp;gt; {
  // Creating a browser instance
  const browser = await puppeteer.launch();

  // Creating a new page
  const page = await browser.newPage();

  // Adjusting width and height of the viewport
  await page.setViewport({ width: 1200, height: 600 });

  const url = 'https://dev.to/makepad/use-emojis-in-your-commit-messages-1lag';

  // Open URL in current page
  await page.goto(url);
  await page.waitForSelector(selector);

  //We will ask the page to wait our selector
  const html_element = await page.$(selector);

  // Capture screenshot
  await html_element.screenshot({
    path: 'demo.png',
  });

  // Close the browser instance
  await browser.close();
})();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After updating our code, the output should be similar to to the following: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F8bqlwx0uc04dyl1yflp6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F8bqlwx0uc04dyl1yflp6.png" alt="Image description" width="750" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
I explained few Puppeteer screenshot examples, and I hope I helped you solve your screenshot problems with Puppeteer. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Different Modelizations of Computer Networks</title>
      <dc:creator>Kaan Yagci</dc:creator>
      <pubDate>Thu, 29 Dec 2022 14:14:13 +0000</pubDate>
      <link>https://dev.to/makepad/different-modelizations-of-computer-networks-mdo</link>
      <guid>https://dev.to/makepad/different-modelizations-of-computer-networks-mdo</guid>
      <description>&lt;p&gt;In the previous article, we walked through some basics of computer networking. In this article, we'll walk through two widely used representations of computer networking. We'll not go into the implementation or semantic details for each representation. We'll get a general visualization of each model with some examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Internet Protocol Suite (TCP/IP Model)
&lt;/h2&gt;

&lt;p&gt;The Internet Protocol Suite, or the TCP/IP model, is a framework for organizing the communication protocols used in the Internet and similar computer networks according to functional criteria. This representation provides a four-layered network stack.&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%2F2kh1esoomy21vlav97mo.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%2F2kh1esoomy21vlav97mo.png" alt="Modelization of layers in Internet Protocol Suite" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's take a closer look at each layer, starting from the bottom.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link Layer
&lt;/h3&gt;

&lt;p&gt;The link layer includes all hosts accessible without traversing a router. The size of the link is therefore determined by the networking hardware design. In principle, TCP/IP is designed to be hardware independent and may be implemented on virtually any link-layer technology. This includes hardware implementations and virtual link layers such as virtual private networks and networking tunnels.&lt;/p&gt;

&lt;h3&gt;
  
  
  Internet Layer
&lt;/h3&gt;

&lt;p&gt;This is the layer where two devices on different networks communicate. This is the layer you use when printing something from the fifth-floor printer while sitting on the first floor. You can achieve this even though your office network has no internet connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Transport Layer
&lt;/h3&gt;

&lt;p&gt;The transport layer provides the functional and procedural means of transferring variable-length data sequences from a source host to a destination host from one application to another across a network while maintaining the quality-of-service functions. This is the layer between your router and the application. It transports packages from your router to the application and vice-versa. This is the network layer you're using when printing something on your office printer while sitting on your couch at your home.&lt;/p&gt;

&lt;h3&gt;
  
  
  Application Layer
&lt;/h3&gt;

&lt;p&gt;Generally speaking, the application layer is an abstraction layer that specifies the shared communications protocols and interface methods used by hosts in a communications network. For the Internet Protocol Suite, the application network contains the communications protocols and interface methods used in process-to-process communications across an Internet Protocol (IP) computer network. This is the highest layer of computer networking, which most people are familiar with. Every time you use your Web browser or every time you use a mobile application on your phone, this is the layer that you're using.&lt;/p&gt;

&lt;h2&gt;
  
  
  The OSI Model
&lt;/h2&gt;

&lt;p&gt;The Open Systems Interconnection model (OSI) is a conceptual model that provides an everyday basis for coordinating ISO standards development for systems interconnection. Compared to the Internet Protocol Suite, the OSI model provides a network stack for more generic networking than Internet Protocol. This representation enumerates layers from bottom to top, starting from 1. Therefore in this representation, layers are often called by their number instead of their names. &lt;br&gt;
The OSI representation provides a 7 layered network stack in which two communicating devices exchange protocol data units (PDUs) using a network protocol. &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%2Fvx7h3vxxsna0j1bt0z7j.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%2Fvx7h3vxxsna0j1bt0z7j.png" alt="OSI Representation of computer network" width="800" height="748"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Layer 1: Physical Layer
&lt;/h3&gt;

&lt;p&gt;The Physical Layer is responsible for the transmission and reception of unstructured raw data between a device, such as a network interface controller. This is the first layer that a device passes through. You can see this when you connect to a network for whatever reason. You must have a network interface to communicate with your router.&lt;/p&gt;
&lt;h3&gt;
  
  
  Layer 2: Data Link Layer
&lt;/h3&gt;

&lt;p&gt;The Link Layer is the layer where two directly connected nodes communicate. You can see this as the layer you're using when printing something on your printer, which is on the same Network as you. To print, you don't send anything to the Internet. You just communicate with your printer through your router. &lt;/p&gt;
&lt;h3&gt;
  
  
  Layer 3: Network Layer
&lt;/h3&gt;

&lt;p&gt;This layer is the same as the Internet Layer of the IP Suite. The naming is different because the IP Suite conceptualizes a network stack for internet communications, and OSI conceptualizes a network stack more generically. So, generally speaking, the Internet becomes Network.&lt;/p&gt;
&lt;h3&gt;
  
  
  Layer 4: Transport Layer
&lt;/h3&gt;

&lt;p&gt;This layer has the same purpose as in the IP Suite model. The main difference in IP Suite is that it handles and controls the transport between Network Layer and the Session Layer.&lt;/p&gt;
&lt;h3&gt;
  
  
  Layer 5: Session Layer
&lt;/h3&gt;

&lt;p&gt;The Session layer establishes, manages, and terminates the local and remote application connections. The Session Layer creates the setup, controls the connections, and ends the teardown between two or more computers, called a session. We'll get into more detail when we look into the HTTP in this tutorial series.&lt;/p&gt;
&lt;h3&gt;
  
  
  Layer 6: Presentation Layer
&lt;/h3&gt;

&lt;p&gt;The Presentation Layer establishes data formatting and translation into a format specified by the application layer during the encapsulation of outgoing messages while being passed down the protocol stack and possibly reversed during the de-encapsulation of incoming messages when being passed up the protocol stack. The Presentation Layer handles protocol conversion, data encryption, data decryption, data compression, data decompression, incompatibility of data representation between OSs, and graphic commands. The presentation layer transforms data into the form that the application layer accepts to be sent across a network.&lt;/p&gt;
&lt;h3&gt;
  
  
  Layer 7: Application Layer
&lt;/h3&gt;

&lt;p&gt;Finally, the Application Layer is the layer that is closest to the end user. You can think of it as it's in the Internet Protocol Suite.&lt;/p&gt;
&lt;h2&gt;
  
  
  Protocol Data Unit
&lt;/h2&gt;

&lt;p&gt;A protocol data unit (PDU) is a single unit of information transmitted among peer entities of a computer network. It is composed of protocol-specific control information and user data. In the layered architectures of communication protocol stacks, each layer implements protocols tailored to the specific type or mode of data exchange.&lt;/p&gt;

&lt;p&gt;For example, the Transmission Control Protocol (TCP) implements a connection-oriented transfer mode, and the PDU of this protocol is called a segment, while the User Datagram Protocol (UDP) uses datagrams as protocol data units for connectionless communication. A layer lower in the Internet protocol suite, at the Internet layer, the PDU is called a packet, irrespective of its payload type.&lt;/p&gt;
&lt;h3&gt;
  
  
  OSI Model
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The layer 4&lt;/strong&gt; (Transport layer) PDU is the segment or the datagram, depending on the used protocol.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Layer 3&lt;/strong&gt; (Network layer) PDU is the packet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The layer 2&lt;/strong&gt; (Data Link layer) PDU is frame&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Layer 1&lt;/strong&gt; (Physical layer) PDU is the bit, or more generally, symbol.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Internet Protocol Suite:
&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%2Fanfhwyxbzglt3ybfz20b.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%2Fanfhwyxbzglt3ybfz20b.png" alt="Internet Protocol Suite Protocol Data Units" width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Transport layer&lt;/strong&gt; PDU is the TCP segment for TCP and the datagram for UDP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Internet layer&lt;/strong&gt; PDU is the packet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Link layer&lt;/strong&gt; PDU is the frame&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On TCP/IP over Ethernet, &lt;strong&gt;the data on the physical layer&lt;/strong&gt; is carried in Ethernet frames.&lt;/p&gt;
&lt;h2&gt;
  
  
  Internet Protocol Suite vs. OSI
&lt;/h2&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%2F5erxljqttu9pykl6tuol.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%2F5erxljqttu9pykl6tuol.png" alt="Diagrams comparing IP Suite and OSI models" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are a lot of differences between these two conceptualizations from a semantic and implementation point of view. But from a more generic point of view, there are more generic differences between these two conceptualizations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;number of layers:&lt;/strong&gt; OSI is based on 7 layers, and Internet Protocol Suite is based on 4.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do not confuse TCP/IP and Internet Protocol Suite:&lt;/strong&gt;  The Internet Protocol Suite is also called TCP/IP Model. But the conceptualization is separate from the TCP/IP protocol.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enumerating Layers:&lt;/strong&gt; The layer enumeration only exists in the OSI Model. In the Internet Protocol Suite, conceptualization layers are not enumerated by numbers as in the OSI Model.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;In this tutorial, we walked through the two widely used modelizations of computer networks. In the next episode, we'll take a closer look to Layer 3 and will see how IP works in more details&lt;/p&gt;
&lt;h2&gt;
  
  
  More about &lt;a href="https://Makepad.io" rel="noopener noreferrer"&gt;Makepad&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;We're a tech consulting company based in France and share computer science related content on our socials.&lt;br&gt;
If you want to see more this kind of content follow us on our   socials: &lt;a href="https://linkedin.com/company/Makepad" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, &lt;a href="https://twitter.com/MakepadDev" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; and &lt;a href="https://instagram.com/Makepad.dev" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;.&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__3422"&gt;
  &lt;a href="/makepad" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&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%2Forganization%2Fprofile_image%2F3422%2F931dcb72-c454-42d7-b2e1-cb0ed776249e.png" alt="makepad image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/makepad" class="ltag__user__link"&gt;Makepad&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/makepad" class="ltag__user__link"&gt;
        Makepad is a French tech consulting company that provides on-site and off-site services for open-source and proprietary projects. 
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Follow us on GitHub to stay tuned with our open-source projects: &lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://github.com/Makepad-fr" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F32249609%3Fs%3D280%26v%3D4" height="146" class="m-0" width="146"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://github.com/Makepad-fr" rel="noopener noreferrer" class="c-link"&gt;
          Makepad · GitHub
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Makepad is a French tech consulting company that provides consulting services on open-source and closed source development. - Makepad
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.githubassets.com%2Ffavicons%2Ffavicon.svg" width="32" height="32"&gt;
        github.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;To join to a community of tech enthusiasts where we talk about tech and other tech-related stuff 👇&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://discord.com/invite/NhvYEmyXN2" rel="noopener noreferrer" class="c-link"&gt;
          WorkHouse
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Check out the WorkHouse community on Discord - hang out with 14 other members and enjoy free voice and text chat.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdiscord.com%2Fassets%2Ffavicon.ico" width="800" height="400"&gt;
        discord.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>computerscience</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>programming</category>
    </item>
    <item>
      <title>Introduction to Computer Networking</title>
      <dc:creator>Kaan Yagci</dc:creator>
      <pubDate>Mon, 26 Dec 2022 07:22:58 +0000</pubDate>
      <link>https://dev.to/makepad/introduction-to-computer-networking-1pfj</link>
      <guid>https://dev.to/makepad/introduction-to-computer-networking-1pfj</guid>
      <description>&lt;p&gt;In this tutorial series, I'll walk you through the basics of computer networking to familiarize you with some basic concepts that may help you understand the tools you're already using or may use in the future. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; This article series is not written to prepare you for a certification such as CCNA. The only reason for this tutorial series is to give you general knowledge about how things work under the hood.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reasons to learn computer networking.
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Less complication
&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%2F38rby6zgdnhpmrsxshqw.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%2F38rby6zgdnhpmrsxshqw.jpg" alt="Struggling developer" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nowadays, almost everybody uses technologies like Docker and Kubernetes or REST APIs. Every developer uses it, but only some know how these things work. And if you don't see how these things work, when you need to debug your code, you may spend considerable time before making it work again.&lt;br&gt;
Understanding generic concepts like cloud computing, REST, cyber security,  or IoT becomes a nightmare if you don't have an existing knowledge of computer networking. For example, REST endpoints will feel like a black box without prior knowledge of HTTP.&lt;/p&gt;
&lt;h3&gt;
  
  
  Stand out in the competition.
&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%2F1jz4bbt2ifnp5zt8i7mf.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%2F1jz4bbt2ifnp5zt8i7mf.jpg" alt="Job interview" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nowadays, more people become software engineers through boot camps or a CS degree. So the competition becomes more challenging every day as the number of developers also increases. Understanding how things work under the hood can help you stand out your profile in this competition.&lt;/p&gt;
&lt;h3&gt;
  
  
  Being a better team player
&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%2F1cnyfdtkuo2a0xli51qn.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%2F1cnyfdtkuo2a0xli51qn.jpg" alt="Team work" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have already heard that soft skills are essential to land your dream job. And being a good team player is one of the soft skills you'll see in a random list of "n soft skills that every developer should have." kinds of articles or podcasts. It's not only having good relations with your co-workers. You should maintain reasonable social concerns with everyone in your social life. If you understand what your network engineer, your DevOps, or your DevSecOps colleague is doing in their day-to-day job and the kind of challenges they are facing, you can help them as a developer you can make their life easier. And this will make you a better team player.&lt;/p&gt;
&lt;h3&gt;
  
  
  Path to becoming an expert.
&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%2Fx2isczhmhgtv6e29e980.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%2Fx2isczhmhgtv6e29e980.jpg" alt="Complex working environment" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Learning one or multiple programming languages inside out or using your favorite IDE may make you productive in your daily workflow. Having dozens of years of professional experience in your area may help you quickly understand more complicated scenarios, depending on your experience. But you will need more than these to make you an expert. To become an expert in your field, you must understand how things work under the hood. This is not only for computer science or engineering. For example, if you want to become an expert Formula 1 driver, you must understand aerodynamics or car mechanics. &lt;/p&gt;
&lt;h2&gt;
  
  
  Starting point: Vocabulary
&lt;/h2&gt;

&lt;p&gt;As in most fields, the starting point of computer networking is also knowing some base vocabulary. I know this is boring, but there are not hundreds of them; most of these are things you've already heard.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Internet:&lt;/strong&gt; a global computer network providing various information and communication facilities, consisting of interconnected networks using a standardized communication protocol, IP (Internet Protocol). We can imagine this as a massive network with billions of connected devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web:&lt;/strong&gt; the set of hyperlinks that connect the web pages between them. &lt;strong&gt;It's crucial to distinguish the Web and the Internet&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web server:&lt;/strong&gt;  a computer accessible on the Internet and contains the Web's resources such as pages, images, etc.
Web browser: a software program lets you consult the Web's resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTML:&lt;/strong&gt;  or HyperText Markup Language, is a markup language that enables you to represent a web page. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol:&lt;/strong&gt; a system of rules that explain the correct conduct and procedures to be followed in formal situations. It can be either between two machines or multiple machines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed:&lt;/strong&gt; the number of bits per second that your Network can transfer (upload or download)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency:&lt;/strong&gt; the number of seconds for the first transferred bit to arrive at its destination from the source.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;I hope you enjoyed this tutorial. If you like this article please like and share. In the following article, we'll walk through two widely used representation model of computer networking. &lt;/p&gt;
&lt;h2&gt;
  
  
  More about &lt;a href="https://Makepad.io" rel="noopener noreferrer"&gt;Makepad&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;We're a tech consulting company based in France and share computer science related content on our socials.&lt;br&gt;
If you want to see more this kind of content follow us on our   socials: &lt;a href="https://linkedin.com/company/Makepad" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, &lt;a href="https://twitter.com/MakepadDev" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; and &lt;a href="https://instagram.com/Makepad.dev" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;.&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__3422"&gt;
  &lt;a href="/makepad" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&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%2Forganization%2Fprofile_image%2F3422%2F931dcb72-c454-42d7-b2e1-cb0ed776249e.png" alt="makepad image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/makepad" class="ltag__user__link"&gt;Makepad&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/makepad" class="ltag__user__link"&gt;
        Makepad is a French tech consulting company that provides on-site and off-site services for open-source and proprietary projects. 
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Follow us on GitHub to stay tuned with our open-source projects:&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://github.com/Makepad-fr" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F32249609%3Fs%3D280%26v%3D4" height="146" class="m-0" width="146"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://github.com/Makepad-fr" rel="noopener noreferrer" class="c-link"&gt;
          Makepad · GitHub
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Makepad is a French tech consulting company that provides consulting services on open-source and closed source development. - Makepad
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.githubassets.com%2Ffavicons%2Ffavicon.svg" width="32" height="32"&gt;
        github.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;To join to a community of tech enthusiasts where we talk about tech and other tech-related stuff 👇&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://discord.com/invite/NhvYEmyXN2" rel="noopener noreferrer" class="c-link"&gt;
          WorkHouse
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Check out the WorkHouse community on Discord - hang out with 13 other members and enjoy free voice and text chat.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdiscord.com%2Fassets%2Ffavicon.ico" width="800" height="400"&gt;
        discord.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>extensions</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Use emojis in your commit messages 🥳</title>
      <dc:creator>Idil Saglam</dc:creator>
      <pubDate>Wed, 14 Dec 2022 11:46:55 +0000</pubDate>
      <link>https://dev.to/makepad/use-emojis-in-your-commit-messages-1lag</link>
      <guid>https://dev.to/makepad/use-emojis-in-your-commit-messages-1lag</guid>
      <description>&lt;p&gt;Most of the time, it's difficult to understand the impact of a commit just from the commit message. You can, of course, create your own commit conventions or follow one of the existing conventions. You probably already saw a commit message like &lt;em&gt;chore: implementing xyz feature&lt;/em&gt;. It's boring, isn't it?&lt;/p&gt;

&lt;p&gt;How about using emojis in our commit messages to make them fun? 🤩&lt;/p&gt;

&lt;p&gt;Yes, you read that right. In this article, I will present &lt;a href="https://gitmoji.dev/" rel="noopener noreferrer"&gt;Gitmoji&lt;/a&gt;. I have been using it for two years, and I must admit that it is a game changer and really easy to use. &lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;Check out their &lt;a href="https://github.com/carloscuesta/gitmoji-cli" rel="noopener noreferrer"&gt;README file&lt;/a&gt;. The installation is also pretty simple. You can either install the &lt;a href="https://www.npmjs.com/package/gitmoji-cli" rel="noopener noreferrer"&gt;npm package&lt;/a&gt; or the &lt;a href="https://formulae.brew.sh/formula/gitmoji" rel="noopener noreferrer"&gt;homebrew formulae&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Installing via npm&lt;/span&gt;
npm i &lt;span class="nt"&gt;-g&lt;/span&gt; gitmoji-cli

&lt;span class="c"&gt;# Installing via Homebrew&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;gitmoji
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Usage
&lt;/h3&gt;

&lt;p&gt;After installing the CLI, you are ready to use. As usual add your files that you want to commit via &lt;code&gt;git add &amp;lt;file_path_to_add&amp;gt;&lt;/code&gt; and just run the command &lt;code&gt;gitmoji -c&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;gitmoji &lt;span class="nt"&gt;-c&lt;/span&gt;
? Choose a gitmoji: &lt;span class="o"&gt;(&lt;/span&gt;Use arrow keys or &lt;span class="nb"&gt;type &lt;/span&gt;to search&lt;span class="o"&gt;)&lt;/span&gt;
❯ 🎨  - Improve structure / format of the code. 
  ⚡️  - Improve performance. 
  🔥  - Remove code or files. 
  🐛  - Fix a bug. 
  🚑  - Critical hotfix. 
  ✨  - Introduce new features. 
  📝  - Add or update documentation. 
&lt;span class="o"&gt;(&lt;/span&gt;Move up and down to reveal more choices&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CLI provides some prompts and allows you to select the most appropriate emoji for your commit message from a list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;gitmoji &lt;span class="nt"&gt;-c&lt;/span&gt;
? Choose a gitmoji: add
❯ ➕  - Add a dependency. 
  📝  - Add or update documentation. 
  ✅  - Add or update tests. 
  📄  - Add or update license. 
  🍱  - Add or update assets. 
  🔊  - Add or update logs. 
  👥  - Add or update contributor&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; 
&lt;span class="o"&gt;(&lt;/span&gt;Move up and down to reveal more choices&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  But wait – there’s more
&lt;/h3&gt;

&lt;p&gt;How does this look in a GitHub repo? &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%2F2dr9ue2cdroroyj0owzl.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%2F2dr9ue2cdroroyj0owzl.png" alt="Gitmoji commit messages in GitHub" width="800" height="350"&gt;&lt;/a&gt;&lt;br&gt;
Isn't it awesome and fun? &lt;/p&gt;

&lt;h2&gt;
  
  
  Yay or Nay?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;p&gt;As in every convention, the reader should follow the convention in order to understand entirely.&lt;/p&gt;

&lt;p&gt;Emojis are not ASCII characters, most of them are Unicode characters. Some tools may not support emojis at all or some of them may support only Unicode emojis. &lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;p&gt;I love emojis. Emojis are fun, and the GitHub repository looks better with them. It is fun to use, and it encourages writing commits.&lt;/p&gt;

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

&lt;p&gt;It is easy to install and use and take your commits into an other level. I definitely recommend!&lt;/p&gt;

&lt;p&gt;Happy coding!👩🏻‍💻&lt;/p&gt;

</description>
      <category>gratitude</category>
    </item>
  </channel>
</rss>
