<?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: Mikhail Shevtsov</title>
    <description>The latest articles on DEV Community by Mikhail Shevtsov (@mikhail_shevtsov).</description>
    <link>https://dev.to/mikhail_shevtsov</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%2F2130014%2F7a54d8c0-c5f2-4f2c-a7cd-19cb9683cd17.jpg</url>
      <title>DEV Community: Mikhail Shevtsov</title>
      <link>https://dev.to/mikhail_shevtsov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mikhail_shevtsov"/>
    <language>en</language>
    <item>
      <title>Development Instruments Explained</title>
      <dc:creator>Mikhail Shevtsov</dc:creator>
      <pubDate>Wed, 23 Oct 2024 13:09:29 +0000</pubDate>
      <link>https://dev.to/mikhail_shevtsov/development-instruments-explained-1adj</link>
      <guid>https://dev.to/mikhail_shevtsov/development-instruments-explained-1adj</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fputg7e5gxrtuvqp5prtu.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%2Fputg7e5gxrtuvqp5prtu.png" alt="Image description" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📝 &lt;strong&gt;Note&lt;/strong&gt;: Thumbnail was generated using&lt;br&gt;
&lt;a href="https://huggingface.co/black-forest-labs/FLUX.1-schnell" rel="noopener noreferrer"&gt;Flux Schnell&lt;/a&gt; model with help of &lt;a href="https://www.comfy.org/" rel="noopener noreferrer"&gt;ComfyUI&lt;/a&gt;;&lt;br&gt;
This article was written with help of &lt;strong&gt;NI&lt;/strong&gt; - &lt;code&gt;Natural Intelligence&lt;/code&gt;&lt;br&gt;
🎥 &lt;strong&gt;Don't have time to read? - Watch the video we created:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=9stkyAQoGDI" rel="noopener noreferrer"&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%2Ffl5y0mk97lz6tlrqsxxp.jpg" alt="Avoid GitHub Actions" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Development instruments 🛠️
&lt;/h2&gt;

&lt;p&gt;While it’s possible to write applications using pencil and paper in practice&lt;br&gt;
it’s very inconvenient. The developer has to check syntax all the time,&lt;br&gt;
control changes that were made during the development process. To simplify&lt;br&gt;
this work - instruments are used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Version Control System ➕/➖
&lt;/h2&gt;

&lt;p&gt;Complex applications contain millions of lines of code spread across hundreds&lt;br&gt;
of files. To keep track of the changes a Version Control System (&lt;code&gt;VCS&lt;/code&gt;)&lt;br&gt;
is used. It helps to see the difference between releases and to revert&lt;br&gt;
to the previous version if needed.  &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%2Fuq2b6wt9knshpen00mts.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%2Fuq2b6wt9knshpen00mts.png" alt="Image description" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most popular VCS on the market right now is &lt;code&gt;GIT&lt;/code&gt; - developed by&lt;br&gt;
&lt;code&gt;Linus Torvalds&lt;/code&gt;. It’s distributed - meaning that for its normal operation&lt;br&gt;
no server is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrated Development Environment 📄
&lt;/h2&gt;

&lt;p&gt;To simplify navigation inside of the complex project source code&lt;br&gt;
Integrated Development Environment (&lt;code&gt;IDE&lt;/code&gt;) is used. Basically it’s an advanced&lt;br&gt;
text editor that understands and highlights syntax of the programming language&lt;br&gt;
on which the application is written. It allows developers to quickly navigate&lt;br&gt;
inside of the source code and debug the application.&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%2F4uctdi6unn893bx0c3fo.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%2F4uctdi6unn893bx0c3fo.png" alt="Image description" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugger 🐞
&lt;/h2&gt;

&lt;p&gt;Debugger is an app that allows developers to control the execution process of&lt;br&gt;
the application and monitor each variable and command that is being executed.&lt;br&gt;
A &lt;code&gt;Step-by-Step&lt;/code&gt; debug of the application helps to find flaws in the execution&lt;br&gt;
and business logic.  &lt;/p&gt;

&lt;p&gt;Usually the debugger app is integrated directly into IDE.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linter ✅
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Source code&lt;/code&gt; that is written by the developer is not required to be pretty and&lt;br&gt;
easy to read, however it is highly recommended to. It simplifies the work&lt;br&gt;
of the team members who maintain the projects source codes. To avoid the&lt;br&gt;
tedious process of aligning code according to the project standards the Linter&lt;br&gt;
app is used. It enforces rules to keep the code clean by either showing&lt;br&gt;
a warning message or automatically fixing the code.&lt;br&gt;&lt;br&gt;
An example of most common rules for the linter are:&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%2Fnjne6y8y3a6oaekfkwd3.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%2Fnjne6y8y3a6oaekfkwd3.png" alt="Image description" width="800" height="581"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Line length should not exceed &lt;code&gt;80&lt;/code&gt; characters;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;curly bracket&lt;/code&gt; for the function should be on the &lt;code&gt;next line&lt;/code&gt; after
the function definition;
&lt;/li&gt;
&lt;li&gt;The body of the loop or conditional statement should be indented
by &lt;code&gt;4 characters&lt;/code&gt; ;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Linter can work as a standalone application or as a module in IDE.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frameworks 🏗️
&lt;/h2&gt;

&lt;p&gt;Like with libraries a lot of functions in the applications are very common and&lt;br&gt;
can be reused between applications. &lt;code&gt;Framework&lt;/code&gt; - is a foundation for building&lt;br&gt;
the application by focusing on the important parts such as business logic&lt;br&gt;
without thinking about boring stuff such as user auth or file storage.&lt;br&gt;
Frameworks drastically simplify and increase the speed of the development.&lt;/p&gt;

&lt;p&gt;Example of a popular framework - &lt;code&gt;Laravel&lt;/code&gt;. Out of box it includes&lt;br&gt;
a lot of good features such as:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User authentication and authorization;
&lt;/li&gt;
&lt;li&gt;Database migrations;
&lt;/li&gt;
&lt;li&gt;Job queues;
&lt;/li&gt;
&lt;li&gt;File Storage;
&lt;/li&gt;
&lt;li&gt;Notification &amp;amp; email;
&lt;/li&gt;
&lt;li&gt;Events &amp;amp; WebSockets;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A good framework always comes with extensive documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kubernetes ⚓️
&lt;/h2&gt;

&lt;p&gt;Writing a working application is only 50 percent of success.&lt;br&gt;
Next 50 percent comes with app distribution and hosting.&lt;br&gt;
To solve the problem of hosting web applications, smart people&lt;br&gt;
from Google invented &lt;code&gt;Kubernetes&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
Kubernetes is a framework. Its purpose is to host your web application and&lt;br&gt;
actively monitor that app replies to the incoming requests. If it stops&lt;br&gt;
responding Kubernetes forcefully restarts the application.&lt;br&gt;
Kubernetes also handles horizontal and vertical scaling of the application&lt;br&gt;
according to the workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusions 🚀
&lt;/h2&gt;

&lt;p&gt;Understanding the instruments that you are working with is the first step&lt;br&gt;
towards success. So the next time you start next project collect and use&lt;br&gt;
correct tools for the job.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://blog.wiregate.io/posts/development-instruments-explained" rel="noopener noreferrer"&gt;https://blog.wiregate.io/posts/development-instruments-explained&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>laravel</category>
      <category>git</category>
      <category>vscode</category>
    </item>
    <item>
      <title>Programming Languages Explained</title>
      <dc:creator>Mikhail Shevtsov</dc:creator>
      <pubDate>Tue, 08 Oct 2024 16:43:54 +0000</pubDate>
      <link>https://dev.to/mikhail_shevtsov/programming-languages-explained-4mgc</link>
      <guid>https://dev.to/mikhail_shevtsov/programming-languages-explained-4mgc</guid>
      <description>&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%2Fhebkiahtjcxki7s6611e.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%2Fhebkiahtjcxki7s6611e.png" alt="Image description" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📝 &lt;strong&gt;Note&lt;/strong&gt;: Thumbnail was generated using&lt;br&gt;
&lt;a href="https://huggingface.co/black-forest-labs/FLUX.1-schnell" rel="noopener noreferrer"&gt;Flux Schnell&lt;/a&gt; model with help of &lt;a href="https://www.comfy.org/" rel="noopener noreferrer"&gt;ComfyUI&lt;/a&gt;;&lt;br&gt;
This article was written with help of &lt;strong&gt;NI&lt;/strong&gt; - &lt;code&gt;Natural Intelligence&lt;/code&gt;&lt;br&gt;
🎥 &lt;strong&gt;Don't have time to read? - Watch the video we created:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=fAr-LPxs92s" rel="noopener noreferrer"&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%2Fn4fvh3zzcdlut9alm0kw.jpg" alt="Avoid GitHub Actions" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Assembly 🤖
&lt;/h2&gt;

&lt;p&gt;Initially all programs were written in a binary - so called &lt;em&gt;assembly&lt;/em&gt;&lt;br&gt;
programming language. Where you literally instruct &lt;code&gt;CPU&lt;/code&gt; what to do within&lt;br&gt;
&lt;code&gt;ALU&lt;/code&gt;. While assembly by being a low-level programming language provides&lt;br&gt;
very fine control over ALU it requires programmers to actually know CPU&lt;br&gt;
architecture and binary logic - it’s very hard and expensive.&lt;br&gt;
Assembly provides low level optimizations that benefit execution performance.&lt;br&gt;
Examples of such programs that are being developed and actively maintained&lt;br&gt;
are &lt;code&gt;sorting algorithms&lt;/code&gt;, &lt;code&gt;hash functions&lt;/code&gt;, &lt;code&gt;loops&lt;/code&gt; etc.&lt;br&gt;
So to reduce complexity and to improve efficiency smart people invented&lt;br&gt;
high-level programming languages.&lt;/p&gt;

&lt;p&gt;📝 Example of assembly &lt;em&gt;hello world app&lt;/em&gt; for Linux X86:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;section .data
    hello db 'Hello World!', 0x0A     ; The string to print, with a newline

section .text
    global _start                     ; Entry point for the program

_start:
    ; Write the string to stdout
    mov eax, 4                        ; syscall number for sys_write
    mov ebx, 1                        ; file descriptor 1 is stdout
    mov ecx, hello                    ; pointer to the string
    mov edx, 13                       ; length of the string
    int 0x80                          ; call kernel

    ; Exit the program
    mov eax, 1                        ; syscall number for sys_exit
    xor ebx, ebx                      ; exit code 0
    int 0x80                          ; call kernel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  High-level programming languages 📡
&lt;/h2&gt;

&lt;p&gt;The purpose of high-level programming language is to simplify the procedure of&lt;br&gt;
writing business logic using human readable text. High level programming&lt;br&gt;
languages are classified as &lt;code&gt;compiled&lt;/code&gt; and &lt;code&gt;interpreted&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Compiled programming language 🏭️
&lt;/h2&gt;

&lt;p&gt;Compiled programming language translates high level human readable code into&lt;br&gt;
machine cod during compilation procedure.&lt;br&gt;
A program that does actual compilation is called a &lt;code&gt;compiler&lt;/code&gt;.&lt;br&gt;
It’s worth mentioning that each program needs to be compiled&lt;br&gt;
to specific computer architecture.&lt;br&gt;
Programs compiled for &lt;code&gt;X86&lt;/code&gt; will not work on &lt;code&gt;ARM&lt;/code&gt; processors and vice versa.&lt;br&gt;
So compilation for specific architecture is required.&lt;br&gt;
Compilation is an irreversible process.&lt;br&gt;
You can’t reliably convert assembly code to high level source code.&lt;/p&gt;

&lt;p&gt;Performance wise in majority of the cases compiled programs do execute&lt;br&gt;
faster 🐇 than Interpreted programs.&lt;/p&gt;

&lt;p&gt;Majority of compiled languages are &lt;code&gt;statically typed&lt;/code&gt;.&lt;br&gt;
Explanation follows in the next paragraphs.&lt;/p&gt;

&lt;p&gt;Most popular compiled languages are &lt;code&gt;C&lt;/code&gt;, &lt;code&gt;C++&lt;/code&gt;, &lt;code&gt;Rust&lt;/code&gt;, &lt;code&gt;Objective C&lt;/code&gt;, &lt;code&gt;C#&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;📝 &lt;em&gt;Hello world&lt;/em&gt; on written on C programming language:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello World!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&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;h3&gt;
  
  
  Statically and dynamically linked libraries 📚️
&lt;/h3&gt;

&lt;p&gt;Applications can perform certain typical actions such as display images,&lt;br&gt;
uncompress archives and many others. While it’s possible to write all such&lt;br&gt;
functions from scratch it’s impractical to do so.&lt;br&gt;
For that purpose &lt;code&gt;libraries&lt;/code&gt; are used.&lt;br&gt;
Libraries help to reduce complexity of the development process by splitting&lt;br&gt;
applications into modules. New features and bug fixes can be performed within&lt;br&gt;
the scope of the module rather than the whole application.&lt;br&gt;
The process of integrating libraries to the main application is called&lt;br&gt;
&lt;code&gt;Linking&lt;/code&gt;. Linking can be done &lt;code&gt;dynamically&lt;/code&gt; - meaning that all libraries are&lt;br&gt;
compiled separately and connected to the main application during&lt;br&gt;
the runtime of the application or &lt;code&gt;statically&lt;/code&gt; - meaning that all machine code&lt;br&gt;
of the libraries is integrated into the main application binary.&lt;br&gt;
Dynamic libraries usually have extension &lt;code&gt;.dll&lt;/code&gt; for Windows and &lt;code&gt;.so&lt;/code&gt; for Unix.&lt;/p&gt;
&lt;h2&gt;
  
  
  Interpreted programming language 🐍
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Interpreted&lt;/code&gt; programming language translates high level human readable code&lt;br&gt;
into machine code during execution of the program. The program that does that&lt;br&gt;
is called an &lt;code&gt;interpreter&lt;/code&gt;. Since an interpreter is also a program which&lt;br&gt;
is already compiled for specific architecture of the CPU it can translate&lt;br&gt;
high level code to machine language on the fly.&lt;/p&gt;

&lt;p&gt;Performance wise in majority of the cases interpreted programs are slower 🐢&lt;br&gt;
than compiled.  &lt;/p&gt;

&lt;p&gt;Most popular interpreted languages are &lt;code&gt;Python&lt;/code&gt;, &lt;code&gt;JavaScript&lt;/code&gt;, &lt;code&gt;PHP&lt;/code&gt;, &lt;code&gt;Ruby&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;📝 &lt;em&gt;Hello world&lt;/em&gt; on written on Python programming language:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello World!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Typisation in the programming languages 🚧
&lt;/h2&gt;

&lt;p&gt;Programming languages can be classified as &lt;code&gt;statically&lt;/code&gt; or &lt;code&gt;dynamically&lt;/code&gt; typed.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;statically&lt;/code&gt; typed programming language all variables and data structures&lt;br&gt;
are pre-defined before compilation or execution of the program.&lt;br&gt;
For example this means that if the developer defines variable &lt;code&gt;A&lt;/code&gt; as string&lt;br&gt;
he cannot change its value from string to a number later in the code.&lt;br&gt;
This can be verified during &lt;code&gt;Ahead Of Time&lt;/code&gt; (AOT) compilation and print&lt;br&gt;
logical error. This simple technique helps to reduce the number of errors&lt;br&gt;
during execution which leads to more stable programs.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;dynamically&lt;/code&gt; typed programming language variables can be reassigned&lt;br&gt;
from one type to another. For example a variable &lt;code&gt;A&lt;/code&gt; can first contain a number&lt;br&gt;
and later can contain a string. That method simplifies the development process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Structures
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Variables 🪆
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Variables&lt;/code&gt; can be &lt;em&gt;integer numbers&lt;/em&gt;, &lt;em&gt;floating point numbers&lt;/em&gt;, &lt;em&gt;strings&lt;/em&gt;.&lt;br&gt;
They are considered to be the simplest possible data structure.&lt;br&gt;
To dig deeper variables are stored using specified addresses in the &lt;code&gt;RAM&lt;/code&gt;.&lt;br&gt;
Address is a binary number (&lt;code&gt;11111111111111101011111101111111111100001101100&lt;/code&gt;)&lt;br&gt;
of the memory cell in RAM usually represented as hexadecimal number&lt;br&gt;
(&lt;code&gt;0x7fff5fbff86c&lt;/code&gt;) for ease of reading.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Constants&lt;/code&gt; are the special variables whose value, after assignment,&lt;br&gt;
&lt;strong&gt;should not be changed&lt;/strong&gt; by the running program.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other Data Structures 🎁
&lt;/h3&gt;

&lt;p&gt;Beside &lt;code&gt;Variables&lt;/code&gt; there are other data structures such as &lt;code&gt;Arrays&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;Associative Arrays&lt;/code&gt;, &lt;code&gt;Linked Lists&lt;/code&gt;, &lt;code&gt;Queues&lt;/code&gt;, &lt;code&gt;Stacks&lt;/code&gt; and many others.&lt;br&gt;
The purpose of these structures is to store data more efficiently&lt;br&gt;
so it would be easier to work with the data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Functions in the programming languages 🚦
&lt;/h2&gt;

&lt;p&gt;One of the ways to simplify programming of the business logic is to use&lt;br&gt;
so-called &lt;code&gt;functions&lt;/code&gt;. Like in math where &lt;code&gt;f(x)&lt;/code&gt; is a function which produces&lt;br&gt;
some value depending on the properties of that function in the programming&lt;br&gt;
functions can return values or do some stuff. Functions can accept input&lt;br&gt;
arguments such as a number, a string or any other data structure and return&lt;br&gt;
values or data structures or they can work without any arguments at all,&lt;br&gt;
everything depends on the business logic of the function itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusions 🚀
&lt;/h2&gt;

&lt;p&gt;In reality programming languages are not as complex as everybody thinks.&lt;br&gt;
If you only starting to learn programming - begin with simple interpreted&lt;br&gt;
language like &lt;code&gt;Python&lt;/code&gt;. After understanding basics - all other languages&lt;br&gt;
will follow as easy as reading the syntax.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://blog.wiregate.io/posts/programming-languages-explained" rel="noopener noreferrer"&gt;https://blog.wiregate.io/posts/programming-languages-explained&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>javascript</category>
      <category>development</category>
      <category>csharp</category>
    </item>
    <item>
      <title>OpenAI nextgen GPT</title>
      <dc:creator>Mikhail Shevtsov</dc:creator>
      <pubDate>Thu, 26 Sep 2024 14:59:37 +0000</pubDate>
      <link>https://dev.to/mikhail_shevtsov/openai-nextgen-gpt-gco</link>
      <guid>https://dev.to/mikhail_shevtsov/openai-nextgen-gpt-gco</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffnhnm8ys9jtg0w5u8d40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffnhnm8ys9jtg0w5u8d40.png" alt="Cover" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📝 &lt;strong&gt;Note&lt;/strong&gt;:\&lt;br&gt;
This article was generated using &lt;code&gt;llama 3.1:8b&lt;/code&gt; model with help of&lt;br&gt;
&lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;;\&lt;br&gt;
Thumbnail was generated using Flux Schnell model with help of&lt;br&gt;
&lt;a href="https://www.comfy.org/" rel="noopener noreferrer"&gt;ComfyUI&lt;/a&gt;;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The Future of Large Language Models: Introducing OpenAI's "o1" Series 🚀&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=JDc77spm84U" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmx59jh56gboemx7gqawr.jpg" alt="Watch the full video on our YouTube channel 📹" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a tech enthusiast, I'm excited to share with you the latest development in the world of Large Language Models (LLMs). Yesterday, OpenAI, the company behind&lt;br&gt;
ChatGPT, released a new series of "Thinking" models called "o1". In this article, we'll delve into what these models can do and why they're a game-changer for&lt;br&gt;
the future of LLMs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Limitations of Traditional LLMs 🤔
&lt;/h2&gt;

&lt;p&gt;Traditional LLMs work by generating the most probable next token based on the input. This straightforward principle allows them to provide decent results, but&lt;br&gt;
it's not without its limitations. For instance, when faced with complex questions or tasks, these models often struggle to provide accurate answers.&lt;/p&gt;

&lt;p&gt;One classic example is the question "How many R letters in the word 'strawberry'?" 🤔 Traditional LLMs would typically answer 2, which is incorrect. To solve&lt;br&gt;
this type of question, more advanced techniques such as a "Chain of Thoughts" are required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing OpenAI's "o1" Series 🔥
&lt;/h2&gt;

&lt;p&gt;The "o1" series models address these limitations by introducing "reasoning" tokens that are truncated from the output. This allows them to iterate over the&lt;br&gt;
answer multiple times until they provide a well-thought-out response. The result is more accurate and contextually relevant answers.&lt;/p&gt;

&lt;p&gt;Two distinct models are available: &lt;code&gt;o1-preview&lt;/code&gt; and &lt;code&gt;o1-mini&lt;/code&gt;. If you're using the API, these models can be accessed as part of your workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing 💸
&lt;/h2&gt;

&lt;p&gt;While the "o1" series is a significant upgrade over traditional LLMs, it comes at a price. The cost for using these models is higher than their predecessors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;$15.00 per 1 million input tokens and $60.00 per 1 million output tokens for &lt;code&gt;o1-preview&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;$3.00 and $12.00 for &lt;code&gt;o1-mini&lt;/code&gt; model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, OpenAI plans to release the "o1" series for free ChatGPT users in the near future.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next? 🔮
&lt;/h2&gt;

&lt;p&gt;The "o1" series is not a replacement for traditional LLMs but rather an addition that solves more complex tasks. In the world of Wiregate, we firmly believe that&lt;br&gt;
such models will eventually replace all other simple models.&lt;/p&gt;

&lt;p&gt;What are your thoughts on the future of Large Language Models? Share your opinions in the comments below! 💬&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to learn more about this topic? 🔍
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Check out our blog for more tech-related news and articles (&lt;a href="https://blog.wiregate.io" rel="noopener noreferrer"&gt;https://blog.wiregate.io&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Visit OpenAI's website for more information on the "o1" series:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://openai.com/index/introducing-openai-o1-preview/" rel="noopener noreferrer"&gt;Introducing OpenAI o1 Preview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.com/api/pricing/" rel="noopener noreferrer"&gt;API Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://platform.openai.com/docs/guides/reasoning" rel="noopener noreferrer"&gt;Reasoning Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Stay tuned for more updates on this topic! 🚀&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://blog.wiregate.io/posts/openai-nextgen-gpt" rel="noopener noreferrer"&gt;https://blog.wiregate.io/posts/openai-nextgen-gpt&lt;/a&gt;&lt;/p&gt;

</description>
      <category>openai</category>
      <category>chatgpt</category>
      <category>ai</category>
      <category>news</category>
    </item>
    <item>
      <title>Avoid GitHub Actions!</title>
      <dc:creator>Mikhail Shevtsov</dc:creator>
      <pubDate>Thu, 26 Sep 2024 14:45:37 +0000</pubDate>
      <link>https://dev.to/mikhail_shevtsov/avoid-github-actions-5hgh</link>
      <guid>https://dev.to/mikhail_shevtsov/avoid-github-actions-5hgh</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wc3xo7jv8uoc5j7auie.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wc3xo7jv8uoc5j7auie.png" alt="Cover" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📝 &lt;strong&gt;TLDR&lt;/strong&gt;: Don’t use GitHub Actions as it’s overcrowded with unnecessary&lt;br&gt;
abstractions and False sense of security. Use GitLab CI as the most transparent&lt;br&gt;
CI ever existed.\&lt;br&gt;
🎥 &lt;strong&gt;Check out the video we created&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=PVeKYWpUcGs" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdwwrm2cojhb1y5x2dfc4.jpg" alt="Avoid GitHub Actions" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Back in 2014 I started to poke around &lt;code&gt;GitLab CI&lt;/code&gt;.&lt;br&gt;
At the time GitLab was pretty new and they just recently added that feature 🚀.&lt;br&gt;
It looked very logical and structured ⚙️:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Place the &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; file inside of the repository;&lt;/li&gt;
&lt;li&gt;Define the &lt;code&gt;jobs&lt;/code&gt; which are simple shell scripts and on each commit your
pipeline is triggered and script runs;&lt;/li&gt;
&lt;li&gt;Check the results in a nice Web UI;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pretty straightforward. This was my first encounter with CI/CD systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitLab CI
&lt;/h2&gt;

&lt;p&gt;For the past 10 years I’ve encountered many other CI systems.&lt;br&gt;
Some of them were straight legacy like Jenkins or Buildbot&lt;br&gt;
some others were simple clones of &lt;code&gt;Travis CI&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🤫 &lt;strong&gt;Psst&lt;/strong&gt;:&lt;code&gt;GitLab CI&lt;/code&gt; actually was heavily inspired by &lt;code&gt;Travis CI&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;such as &lt;code&gt;CircleCI&lt;/code&gt; or &lt;code&gt;Drone CI&lt;/code&gt;.&lt;br&gt;
But these systems are cumbersome to manage.&lt;br&gt;
Eventually we always end up using GitLab CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Late to the Party
&lt;/h2&gt;

&lt;p&gt;While we were using &lt;code&gt;GitLab CI&lt;/code&gt; in many different ways I always wondered why&lt;br&gt;
&lt;code&gt;GitHub&lt;/code&gt; didn't introduce any CI system as it was such a logical thing to do.&lt;br&gt;
And they did in 2018! Meet &lt;code&gt;Github Actions&lt;/code&gt;. Almost 4 years later.&lt;br&gt;
You might be wondering if they did a breakthrough in&lt;br&gt;
&lt;code&gt;Continuous Integration&lt;/code&gt; space.&lt;br&gt;
Unfortunately no 🤦.&lt;br&gt;
They took the same approach using &lt;a href="https://yaml.org/" rel="noopener noreferrer"&gt;&lt;code&gt;YAML&lt;/code&gt;&lt;/a&gt; as base&lt;br&gt;
and placing jobs inside of the repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Me Me Me… Me too!
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=yUBbpCX57Uw" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4tukiqbvs3cm3fpexljr.jpg" alt="Me Me Me... Me too!" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the past 6 years I’ve never had a chance to actually try &lt;code&gt;Github Actions&lt;/code&gt;&lt;br&gt;
in "Action" (pun intended).&lt;br&gt;
Quick glimpse on the syntax did show that it looks&lt;br&gt;
very similar to repo YAML based CI systems - but syntax is quite abstract and&lt;br&gt;
not very transparent.&lt;/p&gt;

&lt;p&gt;“Ok… Then… Nothing that hard… But still very strange…” - I thought 🤔&lt;/p&gt;

&lt;h2&gt;
  
  
  The Action!
&lt;/h2&gt;

&lt;p&gt;At one sunny summer day of 2024 I was forced to do a rather simple workflow&lt;br&gt;
that I did hundreds of times using &lt;code&gt;GitLab CI&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build &lt;code&gt;Docker&lt;/code&gt; image;&lt;/li&gt;
&lt;li&gt;Push image to &lt;code&gt;Container Registry&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Deploy image using HELM Chart to &lt;code&gt;Kubernetes&lt;/code&gt; cluster;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;“Nothing complicated.” - I thought 😃&lt;br&gt;
But this is where the fun starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fun #1
&lt;/h2&gt;

&lt;p&gt;Abstractions… Abstractions… and more abstractions.&lt;br&gt;
In order for the pipeline to work and do simple things I needed to understand&lt;br&gt;
a lot of wrappers around simple tools that I use on a daily basis.&lt;br&gt;
Some genius thought It’s a good idea to create “actions”.&lt;br&gt;
They require you to code the “action” in the separate repository.&lt;/p&gt;

&lt;p&gt;🤯 Why? Why? ...&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Docker&lt;/code&gt; build and push for example. This is a simple&lt;br&gt;
one shell command that does all of this. You don’t need to abstract that thing.&lt;br&gt;
That is overcomplicated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fun #2
&lt;/h2&gt;

&lt;p&gt;It seems that in order to push/pull Docker image to &lt;code&gt;GitHub Container Registry&lt;/code&gt;&lt;br&gt;
I need to use my &lt;code&gt;Personal Access Token&lt;/code&gt; 🤬 GitHub doesn’t provide native way&lt;br&gt;
to create a simple &lt;code&gt;Deploy Token&lt;/code&gt; that isn't bound to a GitHub user account.&lt;br&gt;
So by simply removing a user from repo you break access from Kubernetes&lt;br&gt;
to GitHub Container Registry 🫤&lt;/p&gt;

&lt;h2&gt;
  
  
  Fun #3
&lt;/h2&gt;

&lt;p&gt;It also was a shocking thing 😱 to me that when a &lt;code&gt;Secret&lt;/code&gt; is added to&lt;br&gt;
the Repository it's impossible to view it and change after.&lt;/p&gt;

&lt;p&gt;“It is for the SECURITY!” - you might shout ‼️&lt;/p&gt;

&lt;p&gt;But in reality this is not security - it is dumb! ☹️&lt;/p&gt;

&lt;p&gt;Any DevOps/Developer with access to the cluster or app who understands&lt;br&gt;
how CI/CD works and the workflow can extract these secrets without any problem.&lt;br&gt;
For the professional it’s not a problem it's just an inconvenience.&lt;/p&gt;

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

&lt;p&gt;I’ve managed to get it working but still… So much hassle.&lt;br&gt;
I will never ever agree to work with &lt;code&gt;GitHub Actions&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;On the bright side - &lt;code&gt;GitLab&lt;/code&gt; is still the best and gives you simple&lt;br&gt;
and transparent tools to do your development.&lt;/p&gt;

&lt;p&gt;Use Gitlab for god sake‼️&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://blog.wiregate.io/posts/avoid-github-actions" rel="noopener noreferrer"&gt;https://blog.wiregate.io/posts/avoid-github-actions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gitlab</category>
      <category>github</category>
      <category>githubactions</category>
      <category>devops</category>
    </item>
    <item>
      <title>Jedari Kubernetes Migration Journey: A Success Story</title>
      <dc:creator>Mikhail Shevtsov</dc:creator>
      <pubDate>Thu, 26 Sep 2024 14:42:28 +0000</pubDate>
      <link>https://dev.to/mikhail_shevtsov/jedari-kubernetes-migration-journey-a-success-story-2k7</link>
      <guid>https://dev.to/mikhail_shevtsov/jedari-kubernetes-migration-journey-a-success-story-2k7</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4jf78qtvnshp6r188ss9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4jf78qtvnshp6r188ss9.png" alt="Cover" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a co-founder of Wiregate, I'm excited to share with you the incredible&lt;br&gt;
success story of our client company, Jedari, and their journey to migrating&lt;br&gt;
their application to Kubernetes. This project was a thrilling example of how&lt;br&gt;
modernization can lead to significant cost savings, improved scalability, and&lt;br&gt;
enhanced reliability.&lt;/p&gt;

&lt;h2&gt;
  
  
  About Jedari
&lt;/h2&gt;

&lt;p&gt;At its core, Jedari is more than just a platform; it's a movement that empowers&lt;br&gt;
creators and professionals globally with fully-branded, private social&lt;br&gt;
networks. Their mission is to champion freedom of expression, data ownership,&lt;br&gt;
and community engagement, ensuring every voice and brand can reach its full&lt;br&gt;
potential in the digital landscape.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;Before migration, Jedari faced several issues that hindered their growth:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;High hosting costs&lt;/strong&gt;: Their classic servers were racking up an astonishing
$8,000 per month in AWS hosting fees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inability to handle high traffic&lt;/strong&gt;: The existing infrastructure couldn't
withstand the demands of high bandwidth traffic, leading to downtime and
frustrated users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual update rollouts&lt;/strong&gt;: Updating their applications was a manual,
time-consuming process that introduced risks and delays.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;Our team at Wiregate worked closely with Jedari to design and execute&lt;br&gt;
a strategic migration plan. Here's an overview of the journey:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Month 1&lt;/strong&gt;: Dockerization and Local Development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Months 2-5&lt;/strong&gt;: Stateless Architecture and Production Clusters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Month 6&lt;/strong&gt;: Monitoring and Observability&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Tools
&lt;/h2&gt;

&lt;p&gt;To achieve this transformation, we leveraged the following tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gitlab&lt;/strong&gt;: On-premises source code storage and Docker container registry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gitlab CI/CD&lt;/strong&gt;: Automated pipelines ensured seamless updates and
deployments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terraform&lt;/strong&gt;: Infrastructure as Code (IaC) for automated infrastructure
management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS EKS&lt;/strong&gt;: DEV, STAGE, and PROD Kubernetes clusters were deployed on AWS
Elastic Container Service for Kubernetes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minio&lt;/strong&gt;: Local development environment for efficient testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;p&gt;The impact of this migration was staggering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reduced hosting costs&lt;/strong&gt;: Jedari's monthly AWS hosting bill decreased
to under $3,500.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated infrastructure management&lt;/strong&gt;: Terraform ensured that
infrastructure changes were consistent and repeatable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-downtime updates&lt;/strong&gt;: Automated update rollouts using Gitlab CI/CD meant
no more downtime or delays.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Horizontal scaling&lt;/strong&gt;: Kubernetes autoscaling enabled Jedari to handle
increased traffic without issues.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The Jedari Kubernetes migration journey was a resounding success. By&lt;br&gt;
modernizing their infrastructure, Jedari achieved significant cost savings,&lt;br&gt;
improved scalability, and enhanced reliability. As a co-founder of Wiregate,&lt;br&gt;
I'm proud to have played a part in this transformation. If you're facing&lt;br&gt;
similar challenges, don't hesitate to reach out – we'd be happy to help you&lt;br&gt;
embark on your own Kubernetes migration journey!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://calendly.com/mikhail-shevtsov/30min" rel="noopener noreferrer"&gt;Schedule a Consultation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's work together to scale your business and achieve success!&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://blog.wiregate.io/posts/jedari-kubernetes-migration" rel="noopener noreferrer"&gt;https://blog.wiregate.io/posts/jedari-kubernetes-migration&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>docker</category>
      <category>aws</category>
      <category>gitlab</category>
    </item>
    <item>
      <title>Why GitLab On-Premises?</title>
      <dc:creator>Mikhail Shevtsov</dc:creator>
      <pubDate>Thu, 26 Sep 2024 14:40:30 +0000</pubDate>
      <link>https://dev.to/mikhail_shevtsov/why-gitlab-on-premises-10oa</link>
      <guid>https://dev.to/mikhail_shevtsov/why-gitlab-on-premises-10oa</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzy7z9uuucf0o4y4m0a1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzy7z9uuucf0o4y4m0a1c.png" alt="Cover" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In today's fast-paced digital world, managing code efficiently and securely is&lt;br&gt;
paramount for development teams. For organizations considering a robust&lt;br&gt;
solution, GitLab On-Premises stands out for several compelling reasons.&lt;br&gt;
Here, we will explore the advantages that come with deploying GitLab on your&lt;br&gt;
own infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ownership and Control
&lt;/h2&gt;

&lt;p&gt;One of the most significant benefits of using GitLab On-Premises is ownership&lt;br&gt;
of your code. By hosting GitLab within your own data center or cloud&lt;br&gt;
environment, you maintain complete control over your repositories, workflows,&lt;br&gt;
and access permissions. This is especially important for businesses working&lt;br&gt;
with sensitive data or regulated industries, as it mitigates the risk of&lt;br&gt;
unauthorized access and ensures compliance with data protection regulations.&lt;br&gt;
You can set your own security protocols, making GitLab not just a platform for&lt;br&gt;
collaboration, but a fortress for your intellectual property.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enhanced Security
&lt;/h2&gt;

&lt;p&gt;With GitLab On-Premises, organizations can implement their own security&lt;br&gt;
measures tailored to their specific needs. Unlike cloud solutions where data is&lt;br&gt;
shared across multiple clients, an on-premises installation reduces the risk of&lt;br&gt;
data breaches and unauthorized access. By controlling firewalls, encryption,&lt;br&gt;
and network access, teams can build a secure environment that protects their&lt;br&gt;
assets from external threats. This level of customization makes GitLab a&lt;br&gt;
preferred choice for enterprises prioritizing security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customization and Integration
&lt;/h2&gt;

&lt;p&gt;GitLab is designed to be flexible and can seamlessly integrate into existing&lt;br&gt;
workflows, especially when hosted on-premises. Organizations can customize the&lt;br&gt;
GitLab environment, adapting it to their unique development processes.&lt;br&gt;
In addition, businesses can leverage GitLab’s built-in CI/CD capabilities to&lt;br&gt;
automate testing and deployment without compromising their development&lt;br&gt;
environment. With tools such as Docker and Terraform available within GitLab,&lt;br&gt;
managing dependencies and infrastructure directly alongside your code further&lt;br&gt;
enhances productivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compliance and Regulatory Needs
&lt;/h2&gt;

&lt;p&gt;For many organizations, particularly those in healthcare, finance, or&lt;br&gt;
government, compliance with regulatory standards is non-negotiable. Hosting&lt;br&gt;
GitLab On-Premises enables businesses to establish their own compliance&lt;br&gt;
measures, ensuring that all workflows adhere to industry requirements. With&lt;br&gt;
full control over data storage, processing, and access management, companies&lt;br&gt;
can create audit trails and logging that satisfy compliance standards, all&lt;br&gt;
while avoiding potential pitfalls associated with third-party cloud services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost-Effectiveness in the Long Run
&lt;/h2&gt;

&lt;p&gt;GitLab On-Premises offers a low-cost solution that can lead to significant&lt;br&gt;
long-term savings. By eliminating ongoing subscription fees typically&lt;br&gt;
associated with cloud services, organizations can allocate resources more&lt;br&gt;
effectively. Additionally, operational costs can decrease over time,&lt;br&gt;
particularly for teams managing high-volume projects that require robust CI/CD&lt;br&gt;
and collaboration tools.&lt;/p&gt;

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

&lt;p&gt;In summary, GitLab On-Premises is ideal for organizations that value ownership,&lt;br&gt;
security, customization, and regulatory adherence. By choosing to host GitLab&lt;br&gt;
within their infrastructure, businesses can streamline their workflows, enhance&lt;br&gt;
security measures, and ultimately maintain a competitive edge in the demanding&lt;br&gt;
world of software development. Whether you're a small startup or a large&lt;br&gt;
enterprise, GitLab On-Premises provides the solid foundation needed for&lt;br&gt;
efficient coding and collaboration. Embrace the opportunity to take control of&lt;br&gt;
your development process — your code deserves it.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://blog.wiregate.io/posts/why-gitlab-on-premises" rel="noopener noreferrer"&gt;https://blog.wiregate.io/posts/why-gitlab-on-premises&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gitlab</category>
      <category>opensource</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why to use Kubernetes instead of Docker Compose?</title>
      <dc:creator>Mikhail Shevtsov</dc:creator>
      <pubDate>Thu, 26 Sep 2024 13:42:11 +0000</pubDate>
      <link>https://dev.to/mikhail_shevtsov/why-to-use-kubernetes-instead-of-docker-compose-4jnl</link>
      <guid>https://dev.to/mikhail_shevtsov/why-to-use-kubernetes-instead-of-docker-compose-4jnl</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3q4jomndt9bg7wcukhi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3q4jomndt9bg7wcukhi.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the evolving landscape of software development, the choice of tools and&lt;br&gt;
frameworks significantly influences the success of application delivery.&lt;br&gt;
At the forefront of this transformation is Kubernetes, an open-source container&lt;br&gt;
orchestration platform. So, why should businesses consider using Kubernetes&lt;br&gt;
over simpler solutions like Docker Compose in production environments?&lt;/p&gt;

&lt;h2&gt;
  
  
  High Availability and Fault Tolerance
&lt;/h2&gt;

&lt;p&gt;One of the primary reasons to choose Kubernetes is its robust capacity for high&lt;br&gt;
availability and fault tolerance. While Docker Compose excels in local&lt;br&gt;
development by spinning up project stacks, it isn’t built for production.&lt;br&gt;
Kubernetes, on the other hand, automates many essential processes, ensuring&lt;br&gt;
that applications remain up and running even during failures.&lt;br&gt;
With self-healing capabilities, Kubernetes automatically replaces failed&lt;br&gt;
containers, thus minimizing downtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Efficient Application Lifecycle Management
&lt;/h2&gt;

&lt;p&gt;Kubernetes takes on the heavy lifting of application lifecycle management.&lt;br&gt;
It provides seamless monitoring, allows for updates without service&lt;br&gt;
interruptions, and incorporates effective load balancing. This functionality&lt;br&gt;
is crucial for maintaining a smooth user experience in production environments&lt;br&gt;
where performance and reliability are paramount.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scalability: Horizontal vs. Vertical
&lt;/h2&gt;

&lt;p&gt;Understanding scaling strategies is vital when deploying applications.&lt;br&gt;
Vertical scaling involves enhancing a single instance’s resources—think larger,&lt;br&gt;
faster servers. However, this method can hit limits as it depends on the&lt;br&gt;
resource capacity of a single machine. Kubernetes facilitates horizontal&lt;br&gt;
scaling, where multiple replicas of an application can be spun up to handle an&lt;br&gt;
increased load. This not only enhances performance but also contributes to high&lt;br&gt;
availability, ensuring that if one instance fails, others can take over&lt;br&gt;
seamlessly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Right Tool for the Job
&lt;/h2&gt;

&lt;p&gt;It's important to note that Docker Compose is not obsolete. It serves a crucial&lt;br&gt;
role in development environments, making it an excellent choice for local&lt;br&gt;
testing and setup. Many development teams leverage both Docker and Docker&lt;br&gt;
Compose during the creation phase before transitioning to Kubernetes for&lt;br&gt;
production. Each tool has its strengths, and the choice between them should be&lt;br&gt;
guided by the specific needs of the deployment environment.&lt;/p&gt;

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

&lt;p&gt;In conclusion, Kubernetes provides essential features that are critical for&lt;br&gt;
modern application deployments. Its capacity for high availability, fault&lt;br&gt;
tolerance, and efficient lifecycle management makes it the premier choice for&lt;br&gt;
organizations aiming to scale their applications effectively. While Docker&lt;br&gt;
Compose remains valuable for local development, integrating Kubernetes into&lt;br&gt;
your production strategy can significantly enhance your application’s&lt;br&gt;
reliability and performance. Embrace the shift towards container orchestration&lt;br&gt;
with Kubernetes and keep your applications "Up and Running."&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://blog.wiregate.io/posts/why-to-use-kubernetes" rel="noopener noreferrer"&gt;https://blog.wiregate.io/posts/why-to-use-kubernetes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>docker</category>
      <category>containers</category>
    </item>
  </channel>
</rss>
