<?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: aletelecom</title>
    <description>The latest articles on DEV Community by aletelecom (@aletelecom).</description>
    <link>https://dev.to/aletelecom</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%2F2648052%2F3c6ed259-1051-4528-8926-a8fbefc1d82f.png</url>
      <title>DEV Community: aletelecom</title>
      <link>https://dev.to/aletelecom</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aletelecom"/>
    <language>en</language>
    <item>
      <title>GPON Network visualizations — Part 1</title>
      <dc:creator>aletelecom</dc:creator>
      <pubDate>Sat, 04 Jan 2025 14:19:22 +0000</pubDate>
      <link>https://dev.to/aletelecom/gpon-network-visualizations-part-1-p50</link>
      <guid>https://dev.to/aletelecom/gpon-network-visualizations-part-1-p50</guid>
      <description>&lt;p&gt;This is the first of a short series of visualizations I’ve done in order to identify some “difficult to spot” or “never thought of” conditions on GPON networks, which of course could be generalized to any network NEs as long as it makes sense.&lt;/p&gt;

&lt;p&gt;These visualizations are done using the Python language, and some of the most popular data analysis tools available, like Pandas, Matplotlib, Seaborn, and so on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s visualization
&lt;/h2&gt;

&lt;p&gt;The visualization that I’m showing you today is a annotated “heatmap” that would allow you to “see” the distribution of the average of the client quantity in each PON port as if you’d be seeing the OLT from the front:&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%2Fefcf2eq8yr4du4fo4gys.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%2Fefcf2eq8yr4du4fo4gys.png" alt="Image description" width="672" height="525"&gt;&lt;/a&gt;&lt;br&gt;
An example of the visualization we are introducing today&lt;/p&gt;

&lt;p&gt;So, each column represents a slot of the OLT, each row represents a PON port, the number inside each cell is the average of the quantity of client in that PON port, and the color of each cell is a visual cue of how much “filled” the OLT is.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You could put this visualization in a dashboard, so by just applying a filter, you could check individual OLTs, or filter by country regions, states, network clusters, the possibilities are endless.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Lack of public data
&lt;/h2&gt;

&lt;p&gt;It is necessary that I address the fact that it would be nearly impossible to find a public dataset that contains the kind of information that I would need to make these visualizations (and the reason should be obvious to you), so in order to overcome this difficulty I will make a synthetic dataset, that, in no way pretends to be a reflection of real data, nor it will have a statistical support whatsoever, and the reason for that should be also obvious for you (if I ever state that the average of the number of customers in a OLT is X, that could mean that I am projecting some inside and private knowledge that I have into the data), so I just will work with standard max quantities and KPIs for this technology.&lt;/p&gt;

&lt;p&gt;Now with that out of the way we can start to build our synthetic dataset, and because this is a GPON visualization, I will make some synthetic OLT information with the following schema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Make all the imports needed
import pandas as pd
from itertools import product
from random import randint, choice
import matplotlib.pyplot as plt
import seaborn as sns


df = pd.DataFrame(data=[[1,2,3,'model_A'],[5,6,7,'model_B']], columns=[['slot', 'port', 'client_qty', 'model']])
df
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F8zr5zarwnacawbcx5r1c.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%2F8zr5zarwnacawbcx5r1c.png" alt="Image description" width="340" height="115"&gt;&lt;/a&gt;&lt;br&gt;
Example of the data schema we want to create&lt;/p&gt;

&lt;p&gt;The data can come in any form: csv, xlsx, etc., and it should consist of at least the columns showed in the previous dataframe: ‘slot’, ‘port’, ‘client_qty’, ‘model’, and hopefully each column name is self explanatory.&lt;/p&gt;

&lt;p&gt;Now, to the creation.&lt;/p&gt;

&lt;p&gt;I have decided to create synthetic OLTs with synthetic information, and to do that we will define a class named “OLT”, and then instantiate it several times. The next code cell will do the first part:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class OLT:
    """ Define a class OLT that have the following attributes:
        - An "int" Board quantity (slot_qty) which represent the maximun slot count that the OLT has.
        - An "int" Port quantity per slot (port_per_slot) which represent the maximun port count per slot that the OLT has.
        - An "int" Maximun client quantity per pon port (max_client_qty) which represent the maximun client count per port per slot that the OLT has. """

    def __init__(self, slot_qty=16, port_per_slot=16):
        self.slot_qty = slot_qty
        self.port_per_slot = port_per_slot

    # Then we define a method that will create and populate each pon port of the OLT instance with a client quantity
    def create_olt_and_populate(self, max_client_qty):
        # We assign the model of the OLT at random, during the creation
        models = ['Model_A', 'Model_B', 'Model_C', 'Model_D']
        model = choice(models)
        # We define a list as population, to add to it the information as tuples (slot, port, client_qty, model)
        population = []
        slot_port_tuples = [(slot, port) for slot, port in product(range(1,self.slot_qty+1), range(1,self.port_per_slot+1))]

        for tupla in slot_port_tuples:
            population.append(tupla + (randint(0,max_client_qty),model))

        # Then we create and return a Pandas DataFrame, in which each row represents "a PON port" with its information
        df = pd.DataFrame(population, columns=['slot', 'port', 'client_qty', 'model'])

        return df
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We check that the class outputs the desired information by instantiate one OLT:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;olt = OLT()
df = olt.create_olt_and_populate(max_client_qty=64)
df
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F1wgx42oeuxcqe4fw5d84.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%2F1wgx42oeuxcqe4fw5d84.png" alt="Image description" width="352" height="471"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Create the visualization
&lt;/h2&gt;

&lt;p&gt;In order for this visualization to be more accurate with reality, we need create several OLTs instances, giving the impression that you have a lot of NEs in the network, so this time we create 150 OLTs:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;olt_qty = 150
max_client_qty = 64
concat_df = pd.concat([OLT().create_olt_and_populate(max_client_qty) for olt in range(olt_qty)])
concat_df
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fdpx4mrhsyj0cksb5ntiw.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%2Fdpx4mrhsyj0cksb5ntiw.png" alt="Image description" width="378" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That easily we created a synthetic dataset of 38.400 PON ports with random client quantity for each one of it.&lt;/p&gt;

&lt;p&gt;Now the steps to create the visualization:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First, we need to group the data by “port”, “slot”, and “model”, and calculate the average of the client quantity at the same time using Pandas “groupby” method&lt;/li&gt;
&lt;li&gt;Then, we create several groups of olts by filtering them by model.&lt;/li&gt;
&lt;li&gt;We then create a second list, now of pivot tables, that allow us to create some sort of matrices in which each element represents a PON port (called “olt_list” in the code)&lt;/li&gt;
&lt;li&gt;And finally we plot the “heatmap” to represent an OLT:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;plt.rcParams.update({'font.size':14, 'figure.figsize': (25,20)})

grouped_olts = concat_df.groupby(['port', 'slot', 'model'])['client_qty'].mean().reset_index()
grouped_olts.sort_values(by='model', inplace=True)

models = list(concat_df['model'].unique())
olts = []
for model in models:
    o =  grouped_olts[grouped_olts['model']==model]
    olts.append(o)

olt_list = []
for olt in olts:
    individual = olt.pivot(index='port', columns='slot', values='client_qty')
    olt_list.append(individual)


fig, axes = plt.subplots(2, 2, figsize=(20,15))
for (i, axs, olt, modelo) in zip(range(4), axes.flatten(), olt_list, models):
    sns.heatmap(olt, vmin=0, vmax=64, cmap='RdYlGn_r', linewidths=0.5, annot=True, ax=axs)
    axs.set_title(modelo, fontsize=20)
fig.tight_layout(pad=2)
plt.show()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Faz3aoqndmvgxtssvk0xv.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%2Faz3aoqndmvgxtssvk0xv.png" alt="Image description" width="800" height="616"&gt;&lt;/a&gt;&lt;br&gt;
Visualization of all the models in the dataset&lt;/p&gt;
&lt;h2&gt;
  
  
  Closing comments
&lt;/h2&gt;

&lt;p&gt;Is evident that the average value of the client quantity per PON port in this dataset obeys the “random.randint” function, but if you use it with your data it will surely reflect your networks KPIs.&lt;br&gt;
This visualization could give you unexpected insights because normally we don’t plot this kind of KPI in this format, for example:&lt;br&gt;
You could see if overall your NEs have good distributed loads of clients among all the boards.&lt;/p&gt;

&lt;p&gt;You could make this visualization for every POP (point of presence) in your network, and check if particular POP is unbalanced,&lt;/p&gt;

&lt;p&gt;And following the previous point, you could use this visualization even per OLT, and check if a particular OLT is very loaded, and triggering a hypothetical client migration.&lt;/p&gt;

&lt;p&gt;This visualization can be generalized to represent networking routers, switches, optical network equipment, etc., as long as the information is treated as showed.&lt;br&gt;
This visualization can also be about any KPI of the NE:&lt;br&gt;
You could use the temperature of the PON port.&lt;/p&gt;

&lt;p&gt;You could use the average/max/min PON port throughput or ocupation.&lt;/p&gt;

&lt;p&gt;You could put this visualization in a dashboard, so by just applying a filter, you could check individual OLTs, or filter by country regions, states, network clusters, the possibilities are limitless.&lt;br&gt;
I hope this was useful for you, and that you are looking forward for the next visualization!&lt;/p&gt;

&lt;p&gt;You can check this code in a Jupyter Notebook in my Github:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/aletelecom" rel="noopener noreferrer"&gt;
        aletelecom
      &lt;/a&gt; / &lt;a href="https://github.com/aletelecom/GPON-Network-Visualization" rel="noopener noreferrer"&gt;
        GPON-Network-Visualization
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;GPON Network Visualization&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;This repository contains a collection of visualizations that represent the key performance indicators (KPIs) of GPON (Gigabit Passive Optical Network) and FTTx (Fiber to the x) networks.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Visualizations&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;1. OLT Heatmap&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;The OLT Heatmap is a visualization that resembles the front panel of an OLT (Optical Line Terminal) and allows you to represent multiple KPIs simultaneously. The heatmap is color-coded, with each color representing a different KPI. This visualization is useful for quickly identifying areas of the network that may require attention.&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/aletelecom/GPON-Network-Visualization/Visualization-1/Complete-viz-four.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Faletelecom%2FGPON-Network-Visualization%2FVisualization-1%2FComplete-viz-four.png" alt="Heatmap"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;2. PON Port Occupancy Scatter Plot&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;The PON Port Occupancy Scatter Plot is a visualization that shows the relationship between the occupation of the PON (Passive Optical Network) port and the number of clients within the same PON port. This visualization can help identify congested areas of the network and can inform capacity planning decisions.&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/aletelecom/GPON-Network-Visualization/Visualization-2/Vizualization-2-Scatter-plot.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Faletelecom%2FGPON-Network-Visualization%2FVisualization-2%2FVizualization-2-Scatter-plot.png" alt="Scatterplot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;3. Average Client Speed Bubble Plot&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;The Average Client Speed…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/aletelecom/GPON-Network-Visualization" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>gpon</category>
      <category>visualizations</category>
      <category>pandas</category>
      <category>matplotlib</category>
    </item>
    <item>
      <title>About that time I failed the “Foobar” Google (secret) coding challenge (why, and what I learned from it).</title>
      <dc:creator>aletelecom</dc:creator>
      <pubDate>Sat, 04 Jan 2025 13:50:46 +0000</pubDate>
      <link>https://dev.to/aletelecom/about-that-time-i-failed-the-foobar-google-secret-coding-challenge-why-and-what-i-learned-40a8</link>
      <guid>https://dev.to/aletelecom/about-that-time-i-failed-the-foobar-google-secret-coding-challenge-why-and-what-i-learned-40a8</guid>
      <description>&lt;p&gt;Early this year, like many other days during the past year and a half, I was “googling” for some answer to a question that would allow me to continue with the task I had at hand at the time, and the question was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“How to interpret the AFC, and PAFC plots?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As the usual Google interface to show the answers in a computer screen took place, another and different “animation” unfolded:&lt;/p&gt;

&lt;p&gt;“A theatrical like, yet pixelated animation disrupting the search results page was happening, the screen split in two, and the results page gave its position to a black screen, with some green text on it”&lt;/p&gt;

&lt;p&gt;For a few seconds my brain couldn’t process what I was looking at, I thought it was a new “Doodle” about Star Wars, or Star Trek, and I even opened a new tab, in order to continue with my search, but as I was clicking the “new tab” button, with the corner of my eye I distinguished an intriguing word from the rest:&lt;/p&gt;

&lt;p&gt;“Challenge” — in green color, pixelated art, and console text font.&lt;/p&gt;

&lt;p&gt;I immediately went back to the page, and read through the whole text, this art style, and space comic book narrative hit the geek in me as I was reading it, and in a sort of mixed reactions (mostly disbelief), I finished reading it, and could not assimilate it, you have to understand that I was deeply concentrated on what I was doing, and this sudden and quick turn of events was not in my radar, I stayed astonished for a few seconds.&lt;/p&gt;

&lt;p&gt;As unfortunately as it is, I didn’t took a print screen of it, but the short narrative paraphrased went something like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“We know the kinds like you, because we are like you, people who love challenges, would you like to take a challenge from us? By doing so you would help the galactic bunnies get rid of their problems”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After the aforementioned seconds of disbelief of what I was reading was implying (that Google was giving ME a challenge) I quickly signed up for the challenge.&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%2F5wp2igjq2p3fgd7ucins.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%2F5wp2igjq2p3fgd7ucins.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Part of the interface when you accept the challenge&lt;/p&gt;

&lt;h2&gt;
  
  
  Now, lets address the issues I wrote on the title…
&lt;/h2&gt;

&lt;p&gt;Part of the disbelief I wrote about in the previous section comes from the fact that I am not a professional programmer, nor I have a background in it, I am an Electronic Engineer, with a major in Telecommunications, and I have been working in telco for the past 16 years.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So why was I looking for the “interpretation of AFC and PACF plots”?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Well, because finishing 2019 I decided to shift careers paths, I decided to enter the wonderful world of Data Science, and in 2021 I enrolled in a Masters Degree in Data Science, and as part of an assignment I needed to interpret the meaning of the aforementioned plots, and like for the past eight months (at the moment of receiving the challenge) I have been searching in Google for many topics related with Data Science, coding, algorithms, Python, and all the skills, tools, papers, and the like needed to get better at it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The “why” part
&lt;/h2&gt;

&lt;p&gt;I failed at the coding challenge.&lt;/p&gt;

&lt;p&gt;I was not prepared, nor I had the background to tackle it at the moment that I received it, but I committed yet another mistake, I took it any ways, without further improving my coding skills. I should have tried and improve my coding skills before hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  The “what I learned” part
&lt;/h2&gt;

&lt;p&gt;Get ready for challenges. Unless you’re master in the area of expertise surrounding the challenge, you need to prepare, and if like me, you’re not a daily coder (or a professional at the topic at hand), you need to prepare even more, research, read, and above all, because we’re talking about coding, you need to code, and a lot, if you want to start to tackle this kind of challenges the proper way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing comments
&lt;/h2&gt;

&lt;p&gt;Receiving this challenge has been the most rewarding thing that have happened to me professionally in the last year, and I learned A LOT! about coding while doing it, and I won’t lie to you, I wish I could have that opportunity again.&lt;/p&gt;

&lt;p&gt;I reached the third challenge of the second level, so I guess I didn’t do that bad, did I?&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%2Fubsc1yakfzzt1fhnm4ti.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%2Fubsc1yakfzzt1fhnm4ti.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Part of the interface that shows your progression&lt;/p&gt;

</description>
      <category>coding</category>
      <category>google</category>
    </item>
  </channel>
</rss>
