<?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: Niko Skrypnik</title>
    <description>The latest articles on DEV Community by Niko Skrypnik (@nskrypnik).</description>
    <link>https://dev.to/nskrypnik</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%2F131449%2F19d706f9-4665-45ab-a052-781a96a50b78.jpeg</url>
      <title>DEV Community: Niko Skrypnik</title>
      <link>https://dev.to/nskrypnik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nskrypnik"/>
    <language>en</language>
    <item>
      <title>Three Tier Architecture Explained in Pictures</title>
      <dc:creator>Niko Skrypnik</dc:creator>
      <pubDate>Fri, 17 Feb 2023 02:09:08 +0000</pubDate>
      <link>https://dev.to/nskrypnik/three-tier-architecture-explained-in-pictures-4d82</link>
      <guid>https://dev.to/nskrypnik/three-tier-architecture-explained-in-pictures-4d82</guid>
      <description>&lt;p&gt;Previously I made series of pictures explaining the very foundation of software architecture for modern systems and services - &lt;a href="https://dev.to/nskrypnik/client-server-architecture-explained-in-pictures-3f9j"&gt;Client-Server Architecture&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A logical next step in understanding the architecture of the modern systems is Three-Tier Architecture where you can further logically divide all the services by in the system by three key roles they play in the system.&lt;/p&gt;

&lt;p&gt;Look at pictures below for explanation of what each layer is, and what it is for:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zL_H00LP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9m61tukbhb7wf2fy00f8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zL_H00LP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9m61tukbhb7wf2fy00f8.png" alt="Three tier 1" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fG7PtxlG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v25krvrf0wbvkczojknc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fG7PtxlG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v25krvrf0wbvkczojknc.png" alt="Three tier 2" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M060Y4_p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pp24v5c5eryosai8gr5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M060Y4_p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pp24v5c5eryosai8gr5w.png" alt="Three tier 3" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---GhNEsWK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g6jxn5it0bqo1ehzl5ck.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---GhNEsWK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g6jxn5it0bqo1ehzl5ck.png" alt="Three tier 4" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WDHk14En--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q2n34xqimv8nqgcqajv6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WDHk14En--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q2n34xqimv8nqgcqajv6.png" alt="Three tier 5" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>infographics</category>
    </item>
    <item>
      <title>Code beauty. Does it matter?</title>
      <dc:creator>Niko Skrypnik</dc:creator>
      <pubDate>Sat, 11 Feb 2023 01:00:46 +0000</pubDate>
      <link>https://dev.to/nskrypnik/code-beauty-does-it-matter-3m92</link>
      <guid>https://dev.to/nskrypnik/code-beauty-does-it-matter-3m92</guid>
      <description>&lt;p&gt;I'm not that old but I do still remember times when we didn't have jslint, pylint and whatever-lint, so in our code review we were visually catching those things like bad indentation in C++ code, absence of white spaces after parenthesis and other things we considered to be out of agreed code convention. I tell you that skill is just like riding a bike - once you learn it, you can find imperfection in any PR. Now linting made it obsolete though.&lt;/p&gt;

&lt;p&gt;Yet the question is - why do we do this? Why code conventions, linting rules and other stuff if programming language syntax pretty much allow you to do any crazy thing and compiler/interpreter are able to use this code? Well, the answer is super simple and I partially answered it in another &lt;a href="https://dev.to/nskrypnik/programming-languages-how-and-why-1n9j"&gt;my article&lt;/a&gt;. So every time we write the code we have to keep in mind that we write code not for computer, but pretty much for other humans. Yes we kinda keep in mind performance but mostly it is avoiding mistakes like making O(n^2) algorithms, if we were really thinking only about performance we would write code on machine code. Yet here we are writing code for another human beings in the way they can understand how does that algorithm work and criticize us for non-optimal solution.&lt;/p&gt;

&lt;p&gt;Non the less, check out code snippet bellow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ERW_thpF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9w199a2i5w8lco0w1te3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ERW_thpF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9w199a2i5w8lco0w1te3.png" alt="Ugly code" width="880" height="702"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This code can be easily executed by V8, but probably you have hard times of understanding what's going on there, right? You can see that it tries to import something at beginning... then your eyes perhaps quickly get tired and following the code just by reading it gets hard really quick. That may be easy for interpreter to read word after word and do whatever is written there, but it is simply not like human brain works and understand things. Imagine you get such code on the legacy project and you have to support it and maintain. I'm sure everyone agree that it would be a nightmare.&lt;/p&gt;

&lt;p&gt;So quite naturally developers community got quickly to simple tricks which change the look of the code drastically:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z3LYf23O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rgfo94ywdux9nwyqeceq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z3LYf23O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rgfo94ywdux9nwyqeceq.png" alt="Little better" width="880" height="676"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Imagine that your are reading this code 50 years ago on monochrome display, that how the code/text would look like to you. Yet it is still way better than a previous sample. Now it has a structure, and you can visually separate logical code blocks - like import block and function declarations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--weR1wVrN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wjhzic7t96ltznnxlbu0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--weR1wVrN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wjhzic7t96ltznnxlbu0.png" alt="Explanation" width="880" height="676"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By changing slightly visual structure of the code you can make the code way more readable, thus it can be understood and easier to navigate for other developers which is big value if you do teamwork and your success really depends on how good your teammates are able to understand a code. And it tells very interesting story about us, namely about how our brain really works and how do we process an information. We don't have a lot of researches for this topic, but it is evidential that because such code formatting become de-facto a standard and basis of almost all linting rules it means that for majority if not for all the humans it is easier to digest an information when it is visually separated into logical entities.&lt;/p&gt;

&lt;p&gt;So no wonders that as soon as we got multicolored displays the syntax highlighting has been invented and we get code visualization in IDEs as we know it know.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ncY59Mhb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ghxhb6xojh8xh9isu7ip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ncY59Mhb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ghxhb6xojh8xh9isu7ip.png" alt="State of things as of today" width="880" height="676"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once again this syntax highlight helps us to find the pattern and easily recognize parts of the code which represents different logical and structural entities like class declaration, function declaration, imports etc. You open any file with the code, move your screen away so you can hardly read letters and you'll be still able to recognize patterns of the code.&lt;/p&gt;

&lt;p&gt;So, why have we stopped? Surprisingly since code highlighting has been invented around 50 years ago nothing has changed in code visualization since. A lot of other concepts were added to the programming languages, sometimes even indentation as part of the syntax as in Python, but it terms of showing you the code itself there's that much. Sure, IDEs have improved a lot with all the autocompletion and error checking right while you are writing the code made Java programming way less miserable, but is that all we can do to help ourselves to improve readability. Why didn't we try to highlight not only syntax but entire logical blocks like classes, functions, methods by showing them on different background color? Below is just a simple experiment of how TypeScript function might look like in our IDE.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s_faiYP_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g5eemwgsxcx92kk4yiu5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s_faiYP_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g5eemwgsxcx92kk4yiu5.png" alt="Next frontiers" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With our great ability to use visual patterns we could read and understand something like this even faster. So there's something really to think about. Perhaps especially in the era when AI can already write the code. Perhaps then our biggest value as specialists will be not an ability to write the code, but ability to read it and understand it.&lt;/p&gt;

</description>
      <category>coding</category>
      <category>visual</category>
      <category>thoughts</category>
    </item>
    <item>
      <title>Programming Languages: How and Why?</title>
      <dc:creator>Niko Skrypnik</dc:creator>
      <pubDate>Sat, 04 Feb 2023 01:08:27 +0000</pubDate>
      <link>https://dev.to/nskrypnik/programming-languages-how-and-why-1n9j</link>
      <guid>https://dev.to/nskrypnik/programming-languages-how-and-why-1n9j</guid>
      <description>&lt;p&gt;The story starts with invention of computational machine. The easiest (but surprisingly not the only) way to build such machine and scale it up and down was to use binary coding for storing data and instructions to manipulate this data. The era of computing and IT was born. The core of every computational device is a processor or CPU (Central Processing Unit). Those guys are able to read instructions and those binary encoded instructions tell what to do with binary encoded data. That's simple hey? we just need to write those instructions and provide data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PKXXKv3V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oek74wgv21e081jtyntq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PKXXKv3V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oek74wgv21e081jtyntq.png" alt="Binary code" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yet you obviously see that if you want CPU to do something more complex than just move bytes from one register to another you'd need to write a lot of code, and using binary code will have its flows like you can quickly get lost of what your code is doing and passing it to another developer would be a nightmare.&lt;/p&gt;

&lt;p&gt;So you have to be inventive there. And the first idea may be to write down binary code not in 1 and 0, but in byte-sized hexadecimal numbers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DQ5y8JPN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/831fy1xjbnr6nth1zsgv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DQ5y8JPN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/831fy1xjbnr6nth1zsgv.png" alt="Hexadecimal" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is already a HUGE improvement. For the start you reduce your code (in the written on the paper form) in 8 times and with human's perfect ability to read symbols like... any symbol you can kinda understand better the code, but... well yeah, still not ideal.&lt;/p&gt;

&lt;p&gt;Let's think how could we further improve on this? What do we basically know about machine code and instructions?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QtDxqxm7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kdmer9rwvcrfksj4dp5c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QtDxqxm7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kdmer9rwvcrfksj4dp5c.png" alt="Assembly" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alright now we can tell our processor to do commands in the way we understand them - take this byte, put it to that register, make an interruption... But is how do we really want to do things here? Let's step up and look at the code again - it is bunch of instructions for processor to do, but what do we get at the end, what is the end result?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Jwhn_FXi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5juh8n67wgzq3iaw8xxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jwhn_FXi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5juh8n67wgzq3iaw8xxo.png" alt="Programming languages" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bingo! That's it. We want our computer just to put "Hello world" on the screen, so why don't we do it in the very clear for us humans form, so when I want to share my program code another human being can understand me just right. Sure to be able to do it we need to go from writing an Assembly program using machine code, then we use Assembly language to write Compiler, than we use Compiler to write Interpreter...&lt;/p&gt;

&lt;p&gt;And the quest doesn't end here. As the more and more complex systems we create we always can make a step up and take a look at our system from higher level, find some patterns, invent new concepts which describe how the system work and then explain it to another human being so they can understand it. IMHO at some point we did stuck rather with textual description as with bridge between human and processor worlds, and although there're many complex concepts introduced into programming languages we still using visualizations like charts and diagrams for only human communication and then we write down the code in textual form (syntax highlight was a huge leap though in visualizing code). Yet for me this is the area of opportunity for development of programming tools, though this is another story for another day...&lt;/p&gt;

</description>
      <category>infographics</category>
      <category>history</category>
      <category>assembly</category>
      <category>hexadecimal</category>
    </item>
    <item>
      <title>Client-Server Architecture Explained in Pictures</title>
      <dc:creator>Niko Skrypnik</dc:creator>
      <pubDate>Wed, 01 Feb 2023 19:18:00 +0000</pubDate>
      <link>https://dev.to/nskrypnik/client-server-architecture-explained-in-pictures-3f9j</link>
      <guid>https://dev.to/nskrypnik/client-server-architecture-explained-in-pictures-3f9j</guid>
      <description>&lt;p&gt;Client-server architecture is really a backbone of almost all modern IT services you can imagine. Social networks, messengers, databases, you name it, they all implement this architecture. In the infographic below I did quickly summarized main aspects you should know about this architecture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2_1leHup--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wfon0jcsgiz9vt22uym5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2_1leHup--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wfon0jcsgiz9vt22uym5.png" alt="Client-server architecture" width="880" height="3005"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>infographics</category>
      <category>architecture</category>
    </item>
    <item>
      <title>We Should Do Better Job of Visualizing Codebase</title>
      <dc:creator>Niko Skrypnik</dc:creator>
      <pubDate>Tue, 31 Jan 2023 23:21:40 +0000</pubDate>
      <link>https://dev.to/nskrypnik/we-should-do-better-job-of-visualizing-codebase-5gcb</link>
      <guid>https://dev.to/nskrypnik/we-should-do-better-job-of-visualizing-codebase-5gcb</guid>
      <description>&lt;p&gt;One can argue that Software Engineer job is to write a code. Well yes, this is a part of the job, yet the other part of software engineering is reading a code, not writing it. Now if you go deeper into the thought - it is actually about understanding the code, the structure of the projects, it's details, nuances etc.&lt;/p&gt;

&lt;p&gt;Nowadays you rarely come to job to start everything from scratch - you usually come to a new job and you see a dozens of folders, hundreds if not thousands of files. Sounds familiar right? And you don't have a clue usually what is this codebase about, so you need knowledge transfer sessions, looking into the code and trying to make sense of it, trying to understand how to run it etc., etc.&lt;/p&gt;

&lt;p&gt;Let's take an example - let's go to &lt;a href="https://github.com/docker/compose"&gt;docker-compose repo page&lt;/a&gt; in Github and try to make sense of it. The first thing you gonna see there is:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7I4057nu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8aoy3fc0e8w9ewhi235v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7I4057nu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8aoy3fc0e8w9ewhi235v.png" alt="Bunch of folders and files" width="648" height="700"&gt;&lt;/a&gt;&lt;br&gt;
Looks impressive isn't it? Just another list of folder names and files which gives us only one idea - the project does consist of folders and files. Awesome thing, at list I know now that it doesn't consist of dragons and wizards, that is something which helps me as an engineer to start with. Ah, just kidding - this is terrible and doesn't give you any information about the project. Like if you want to know about tech stack you have either to ask someone or go inside folders to see what's there and try to guess or basically reverse-engineer things.&lt;/p&gt;

&lt;p&gt;So after spending some time looking at the code I drew the next picture which I want to share with you:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sQRu_RMV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/talwziqnn11ztdm2a1y6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sQRu_RMV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/talwziqnn11ztdm2a1y6.png" alt="Image description" width="880" height="671"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I agree that this is not ideal, but at least it can give you an idea, that you can visualize project in better way, telling a richer story about it as just a list of folders can do. At least it can show you tech stack right away and it is something can be done automatically by analyzing the code. Github is already doing it but presents an information in very limited way like just a list of languages used in the project.&lt;/p&gt;

&lt;p&gt;This is just a simple idea, but think about possibilities. You can show areas for more often used folders bigger, show warning signs, comments, notes right here on the project map. While working on the project you could look at how this visualization is generated and keep your structure accordingly so auto-generated visualization is actually making sense and tells complete story about your project so you can even save your precious time on doing documentation. Following Python Zen lead you can do your code self-documented and make sure that your documentation looks awesome, not just generated as another bunch of files. I'm not even mentioning what possibilities can be open with using of an AI.&lt;/p&gt;

&lt;p&gt;So tell me what do you think about it? Do you share an idea what the world would be better if we had such visualizations of the codebase?&lt;/p&gt;

</description>
      <category>visualization</category>
      <category>thoughts</category>
      <category>improvements</category>
      <category>ideas</category>
    </item>
    <item>
      <title>A Novel Way to Look at Binary Tree</title>
      <dc:creator>Niko Skrypnik</dc:creator>
      <pubDate>Sat, 28 Jan 2023 00:47:24 +0000</pubDate>
      <link>https://dev.to/nskrypnik/a-novel-way-to-look-at-binary-tree-ij6</link>
      <guid>https://dev.to/nskrypnik/a-novel-way-to-look-at-binary-tree-ij6</guid>
      <description>&lt;p&gt;Just having a Friday night fun experimenting with the way to visualize a binary tree in a way I haven't seen it done before :-).&lt;/p&gt;

&lt;p&gt;Also demonstrating that simple zoom tool can add a new pseudo dimension into your data visualization. As we have this zoom feature in many tools like Miro, Figma and many other - why don't we use it in our advantage?&lt;/p&gt;

&lt;p&gt;Have a great weekend everyone.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/oilOtzDvGkw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What is Cloud and Why? Short Story of Cloud Computing</title>
      <dc:creator>Niko Skrypnik</dc:creator>
      <pubDate>Thu, 26 Jan 2023 00:22:38 +0000</pubDate>
      <link>https://dev.to/nskrypnik/what-is-cloud-and-why-short-story-of-cloud-computing-400h</link>
      <guid>https://dev.to/nskrypnik/what-is-cloud-and-why-short-story-of-cloud-computing-400h</guid>
      <description>&lt;p&gt;Another story in pictures from me. This time it is about how and why cloud computing and cloud infrastructure have emerged. Hope you enjoy it and learn something new.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--au3oNtgY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ka7u6j7aaf9puheqnkx7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--au3oNtgY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ka7u6j7aaf9puheqnkx7.png" alt="What is cloud and why 1" width="880" height="495"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aHrid3ET--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kxqmwy3a2snrjhoc4mxw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aHrid3ET--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kxqmwy3a2snrjhoc4mxw.png" alt="What is cloud and why 2" width="880" height="495"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DP-Ex0ef--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u76ffbtjst38yiklnm2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DP-Ex0ef--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u76ffbtjst38yiklnm2c.png" alt="What is cloud and why 3" width="880" height="495"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KCUOa5zn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zzqaz4yzdqwpr7dhoae5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KCUOa5zn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zzqaz4yzdqwpr7dhoae5.png" alt="What is cloud and why 4" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>infographics</category>
    </item>
    <item>
      <title>DNS Basics Explained</title>
      <dc:creator>Niko Skrypnik</dc:creator>
      <pubDate>Sun, 22 Jan 2023 22:50:27 +0000</pubDate>
      <link>https://dev.to/nskrypnik/dns-basics-explained-2mea</link>
      <guid>https://dev.to/nskrypnik/dns-basics-explained-2mea</guid>
      <description>&lt;p&gt;Another series of funny pictures explaining very basics of how DNS works. Enjoy!&lt;br&gt;
Let me know in the comments if you find this format enjoyable and informative.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ngi6ne_O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zabjmm23n0m8e3s7gf2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ngi6ne_O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zabjmm23n0m8e3s7gf2i.png" alt="DNS picture 1" width="880" height="767"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zdvRZFLq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3rpdr05pajiqqxbdaave.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zdvRZFLq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3rpdr05pajiqqxbdaave.png" alt="DNS picture 2" width="880" height="766"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Oy1LLUzw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w0sfhb81t5k5txt73k6l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Oy1LLUzw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w0sfhb81t5k5txt73k6l.png" alt="DNS picture 3" width="880" height="766"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OGIyEuK0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xs6vtqw3o7yowwd1wwwv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OGIyEuK0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xs6vtqw3o7yowwd1wwwv.png" alt="DNS picture 4" width="880" height="767"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6FUb01u7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1b0khsi4nc5fqqoeixh7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6FUb01u7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1b0khsi4nc5fqqoeixh7.png" alt="DNS picture 5" width="880" height="766"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eGEKrKYg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bjp59vre0d0cqmy4pbyb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eGEKrKYg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bjp59vre0d0cqmy4pbyb.png" alt="DNS picture 6" width="880" height="766"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MGLaSvhJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a56u6zyrb3f0yssfvigv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MGLaSvhJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a56u6zyrb3f0yssfvigv.png" alt="DNS picture 7" width="880" height="766"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6IAES0re--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cetjmr1prwevlc7p29wd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6IAES0re--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cetjmr1prwevlc7p29wd.png" alt="DNS picture 8" width="880" height="766"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dns</category>
      <category>networking</category>
      <category>infographics</category>
    </item>
    <item>
      <title>OAuth 2.0 basics explanation in pictures</title>
      <dc:creator>Niko Skrypnik</dc:creator>
      <pubDate>Fri, 20 Jan 2023 23:03:29 +0000</pubDate>
      <link>https://dev.to/nskrypnik/oauth-20-basics-explanation-in-pictures-5cnb</link>
      <guid>https://dev.to/nskrypnik/oauth-20-basics-explanation-in-pictures-5cnb</guid>
      <description>&lt;p&gt;Greetings everyone. Cheer me up for my first post here. I was bored and decided to make simple infographics to explain basic but essential principle of OAuth 2.0 protocol. Check it out!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eZ60AJm6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ryv0stjspa5mqg6uzvvg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eZ60AJm6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ryv0stjspa5mqg6uzvvg.png" alt="Main actors of OAuth 2.0" width="880" height="909"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VnUoo6hC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dgt9np5s6xj059qrpt80.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VnUoo6hC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dgt9np5s6xj059qrpt80.png" alt="The problem OAuth 2.0 is designed to solve" width="880" height="908"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O06tMhhD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zq5e3okehnhb4svf87mz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O06tMhhD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zq5e3okehnhb4svf87mz.png" alt="A solution OAuth 2.0 protocol provides" width="880" height="908"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RqWnUJyo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iag9sny286m34lu1k3z3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RqWnUJyo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iag9sny286m34lu1k3z3.png" alt="Main flow for the OAuth 2.0 protocol" width="880" height="908"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oauth2</category>
      <category>infographics</category>
    </item>
  </channel>
</rss>
