teleren/devto huggingface dataset:
Critical Considerations for Embracing a Microservice Architecture: Three Key Questions Developers Must Contemplate
Tags: microservices
Published: 2023-06-12 17:46:38

**These Three Questions Developers Should Contemplate Before Adopting a Microservice Architecture:**

1. What are you hoping to achieve?
   For example, independent rollout and scalable components are the primary advantages of microservices. However, these advantages also come with certain drawbacks, such as increased technological diversity, heightened operational complexity, and the need for better team coordination.

2. Have you considered alternatives to using Microservices?
   For example, Monolith architecture.

3. How will you know if the transition is working?
   If you have successfully reduced the complexity of the application and achieved the desired outcomes.

**Sam Newman's List of Four Situations Where Microservices Might Be a Bad Idea:**

1. Unclear domain: Getting service boundaries wrong can be expensive

2. Start-ups: A start-up needs to focus all its attention on finding the right fit for its product. Microservices primarily solve the sorts of problems start-ups have once they have found that fit with their customer base.

3. Customer installed and managed software: Microservices push a lot of complexity into the operational domain. Coping with this complexity is not something you can typically expect of your end customers.

4. Not having a good reason: Do not adopt microservices if you don’t have a clear idea of what exactly it is that you are trying to achieve.

Reference: 
1. The Monolith Strikes Back: Why Istio Migrated From Microservices to a Monolithic Architecture
Полісечовина Line-X: Переосмислення захисту поверхонь з неперевершеною ефективністю
Published: 2023-06-12 17:04:50

**Полісечовина Line-X**, розроблена лідером галузі компанією Line-X, зробила революцію в захисті поверхонь у різних галузях промисловості по всьому світу. Завдяки винятковим властивостям і перевагам, це передове покриття встановлює нові стандарти в цій галузі. Давайте розглянемо якості, які роблять полісечовину Line-X Polyurea революціонером у світі захисних покриттів.

**Довговічність Line-X Polyurea** перевершує звичайні покриття, утворюючи безшовний, монолітний шар, який забезпечує неперевершений захист. Від кузовів вантажівок до промислових підлог він легко витримує удари, корозію і знос.

**Полісечовина Line-X** вирізняється надзвичайною стійкістю до хімічних речовин і стирання. Вона витримує вплив палива, розчинників, кислот і лугів, що робить її незамінною в автомобільній, нафтогазовій, виробничій і гірничодобувній галузях.

**Стійкість до стирання** гарантує, що [полісечовина](https://lnx.com.ua/services/) Line-X витримує постійне тертя та удари. Це робить її ідеальною для поверхонь, що піддаються скребку і роботі важкої техніки, знижуючи витрати на технічне обслуговування і підвищуючи ефективність.

**Універсальність полісечовини** Line-X дозволяє наносити її на різні основи, такі як метали, бетон, склопластик і дерево. Вона відповідає різноманітним вимогам, забезпечуючи індивідуальний захист для будь-якого застосування.

**Процес нанесення Line-X Polyurea** є швидким та ефективним. Завдяки швидкому затвердінню вона підходить для проектів будь-якого масштабу. Полісечовина Line-X Polyurea легко наноситься розпилювачем або валиком на поверхню, забезпечуючи безшовне покриття, незалежно від її розміру.

На додаток до своїх експлуатаційних характеристик, полісечовина Line-X додає поверхням естетичної привабливості. Вона випускається в широкому діапазоні кольорів, що дає можливість кастомізації та брендування. Полісечовина Line-X підвищує візуальну привабливість будь-яких поверхонь - від вітрин магазинів до комерційних транспортних засобів.

**На завершення, Line-X Polyurea** переосмислює захисні покриття завдяки своїй неперевершеній довговічності, хімічній стійкості, стійкості до стирання та універсальності. Вона захищає від ударів, корозії та агресивних хімічних речовин, а швидкий процес нанесення та естетичні можливості роблять її ідеальним вибором. Використовуйте полісечовину Embrace Line-X для чудового захисту поверхні.

Більше про полісечовину тут:

https://lnx.com.ua/services/
Remote Jobs List
Tags: remotejobs, jobs
Published: 2023-06-12 16:55:03

I made a list of remote jobs available. It contains approximately ~1500 jobs. There are also remote jobs. It is updated daily. I hope you like it and be helpful.

If you are looking for a new job, you can take a look here:

https://github.com/maurobonfietti/remote-jobs

[Video in Spanish 🇦🇷🇪🇸😄]
MVC设计模式 完整而简单的解释
Published: 2023-06-12 16:47:25

## 简介

你好，早上好，我的名字是Daniela Barazarte，我想欢迎你参加这个关于模型-视图-控制器设计模式的完整解释，这个解释将是如此简单和直接，甚至一个5岁的孩子都能解释明白。

如果你喜欢视频，这里有一个我在YouTube上制作的完整教程，它是西班牙语的，但有字幕：https://www.youtube.com/watch?v=b2tPRbQJing

## <u>理论</u></u
###逻辑
**绘制图案
- 图案"：是一种重复的事件或对象的类型。

![设计模式苹果绿-红](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/512k82wf0e1fzr5h8jwg.png)
- 设计"：旨在设计有用的和审美的对象的创造性活动。

**模型-视图-控制器"。
- 模型**：作为指南的对象，可以被模仿、复制或抄袭。
- 视觉**：身体的感觉，使我们能够看到物质的东西。
- 控制器"：起到控制某物或某人的作用。

###简单定义
- 处理数据和业务逻辑的模型（如类）。
- 向用户展示数据的视图（如模板、文件）。
- 控制器包含负责连接模型和视图的类，处理用户请求并相应地更新模型中的数据。

模型-视图-控制器设计模式之所以被称为模型-视图-控制器，是因为它将程序分为 "模型"，用于系统的不同部分；"视图 "可以被看到，因为它是用HTML和CSS代码制作的；"控制器"，因为它控制模型和视图之间发生的一切。


###结构
![MVC框架](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fwc5f5moinxgsxjnt5rn.png)


一个项目将把它的每个组件分离成：
- 模型
- 视图
- 控制器

这些组件之间的责任分离允许更大的模块化和代码重用，以及更易于维护和应用程序的可扩展性。

此外，MVC模式鼓励开发基于Web的和移动的应用程序，因为它允许以一种清晰和有效的方式分离服务器和客户端逻辑。

## <u>实践</u
### 练习
你的任务是为一个健身房创建一个网站，在这个健身房里，你可以注册会员，也可以注册存在的不同设备，销售的库存，销售等等。其任务是允许管理员从网站上注册健身器材。

有两种方法来解决这个任务：
- 把所有东西放在同一个文件夹/项目中。
- 使用MVC将所有东西结构在不同的文件夹/项目中。

**<u>方法：没有MVC设计模式
</u>**

![没有设计模式的例子](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/opjmdd6niy9pmo26d2cr.png)

方法、视图、类、代码和其他许多组件都会在同一个地方。

**<u>方法：有MVC设计模式</u>**

![采用MVC设计模式的例子](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d3n8lrh8bb4olhw5hhh9.png)

现在，方法、视图、类等被分离到每个模型、视图和控制器项目中。

## 重要性

**MVC设计模式有很多好处：**

- 促进了代码的重用和应用程序的模块化。
- 使得代码更容易维护和更新。
- 允许应用程序的不同组件之间有明确的责任分工。
- 促进团队工作和程序员之间的协作。
- 允许在应用程序设计中具有更大的灵活性和可扩展性。


## 谢谢

非常感谢您的阅读。如果这篇文章对你有帮助，我很感谢你喜欢它，对你的任何问题进行评论，并关注我，以便这篇文章能够帮助其他许多人。

你可以在我的其他网络上找到我，比如[Twitter](https://twitter.com/danibarazarteg)、[GitHub](https://github.com/danielabarazarte)和[LinkedIn](https://www.linkedin.com/in/danielabarazarteg/)
设计模式： 存储库 | 完整而简单的解释
Published: 2023-06-12 16:52:05

## 简介

大家好，我是Daniela Barazarte，我想欢迎大家参加这个关于资源库设计模式的完整解释。这个解释将是如此简单和直接，甚至一个5岁的孩子都能理解它。

如果你喜欢视频，这里有一个我在YouTube上制作的完整教程：https://www.youtube.com/watch?v=b2tPRbQJing

## <u>理论[/u
###逻辑
**"设计模式 "**
- **模式**：是一种重复的事件或对象的类型
![设计模式库](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8hizh9zs3bzgaimxs1n.png)
- **设计**：创造性的活动，其目的是投射出有用和有美感的对象

**"储存库 "**
- **库房**：存放某些东西的仓库或地方

###简单定义
**设计模式**指的是有一些共同的、可重复使用的模式或解决方案，可以应用于软件设计中的重复性问题。它被称为 "模式 "是因为它在多个项目中重复出现，而设计是因为它以一种简单的方式投射对象。

仓库**是一种软件设计模式，用于将应用程序（编程元素，如类、接口、方法）与数据存储（数据库）分开，并作为两者之间的中介发挥作用。

存储库提供了一组方法来执行对数据的CRUD（创建、读取、更新、删除）操作。

###结构

![有存储库与无存储库](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g6siycrdrn3q3c5fdkvp.png)


- 这张图片的顶部代表一个没有存储库设计模式的系统。
- 这张图的下半部分代表一个有资源库设计模式的系统

正如你所看到的，资源库设计模式有助于将应用逻辑（拥有CRUD方法和函数）与数据库连接起来......而当资源库不存在时，连接是直接的。仓库作为一个中介存在的事实是很重要的，你将在这篇博客中看到原因。

## <u>实践</u>
### 练习
你有一个WebAPI应用程序，它有创建、读取、编辑和删除火车站门票的方法......让这些门票存储在一个SQL数据库中。

有两种方法可以解决这个任务：
1. 不使用资源库设计模式来做
2. 用资源库设计模式来做

**<u>方法：无资源库设计模式
</u>**
![无资源库设计模式](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jaw26wm3ph7hnbnn97ki.png)



数据库存储方法将与票据方法（创建、读取、编辑和删除票据）在一起。

**<u>方法：无资源库设计模式</u>**
![有存储库设计模式](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ozmk2i9svzl6y7x31c7.png)

数据库存储方法现在是独立的，不在票据方法旁边了

## 重要性

**资源库设计模式有几个好处：**。

- **责任的分离**： 存储库设计模式有助于将数据访问逻辑与应用程序的业务逻辑分开。
- **抽象化**： 存储库设计模式在应用程序和数据存储机制之间提供了一个抽象层。这个抽象层使得切换到不同的数据存储机制更容易，而不影响使用存储库接口的应用程序代码。
- **封装**： 存储库设计模式将数据访问逻辑封装在一个地方，使其更容易管理和修改。
- **可测试性**： 存储库设计模式通过提供一个模拟的存储库实现，使得测试你的应用程序的业务逻辑变得很容易，可以用于单元测试。
- **可扩展性**： 存储库设计模式通过提供一个集中的地方来管理数据访问，可以帮助提高应用程序的可扩展性，这可以帮助减少争论并提高性能。

## 谢谢

非常感谢你的阅读，如果你有任何问题，你可以评论，你也可以在我的其他网络上找到我，如[Twitter](https://twitter.com/danibarazarteg)，[GitHub](https://github.com/danielabarazarte)和[LinkedIn](https://www.linkedin.com/in/danielabarazarteg/)

我将准备一篇关于如何在C#和.NET中实现Repository的博文，敬请关注 <3
Be Kubectl Kompatible (1)
Tags: kubernetes, versioning, cloudnative, cloud
Published: 2023-06-12 16:51:24

Did you know that “You must use a kubectl version that is within one minor version difference of your cluster”?
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/49hnv55c8rpbmn3phdns.png)


What does this mean?

Kubernetes uses [Semantic Versioning](https://semver.org), expressed as vX.Y.Z
X = major version
Y = minor version
Z = patch version

Hence, it means that for a cluster of **v1.26** (major version = 1, minor version = 26), the valid versions of kubectl that you should use while interacting with the cluster should be between **v1.25** and **v1.27**.


You can check the version of kubectl using the command:
`kubectl version`.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1dqa35dpszf4oymz4j2.png)


From the output of that command, you can tell whether you’re compatible or not. I have used the `--output=yaml` flag to present the information a lot nicer.

Under the `clientVersion`, you can see the version of the kubectl client installed, while the version of the Kubernetes cluster is found under `serverVersion`.

If you’re not compatible, you can simply downgrade or upgrade kubectl, or better still, you can stay tuned for the part two of this series to learn an easier and better way to handle this.
Diferença entre '=', '==' e '===' em JavaScript: Igualdade, Atribuição e Igualdade Estrita
Tags: javascript, codenewbie, coding
Published: 2023-06-12 16:49:08

Em JavaScript, há diferenças sutis entre os operadores "=" (atribuição), "==" (igualdade) e "===" (igualdade estrita).

**1. Operador "=" (Atribuição):**
O operador "=" é usado para atribuir um valor a uma variável. Por exemplo: Nesse caso, o valor 5 é atribuído à variável "x".
`let x = 5;`

**2. Operador "==" (Igualdade):**
O operador "==" verifica se dois valores são iguais, mesmo que sejam de tipos diferentes. Ele realiza a conversão de tipos implícita, se necessário. Por exemplo:
`console.log(5 == "5"); `
`true`

Nesse caso, embora o primeiro valor seja um número e o segundo seja uma string, o operador "==" realiza uma conversão implícita do valor string para número e verifica a igualdade.

**3. Operador "===" (Igualdade estrita):**
O operador "===" verifica se dois valores são iguais e também verifica se os tipos são os mesmos. Ele não realiza conversões de tipos. Por exemplo:
`console.log(5 === "5");`
`false`

Nesse caso, como o operador "===" não realiza conversão de tipos, ele retorna false porque o valor e o tipo dos operandos são diferentes.

**Considerações finais**

Em geral, é recomendado usar o operador "===" para verificar igualdade em JavaScript, pois ele evita resultados inesperados devido a conversões implícitas de tipos. O operador "==" pode ser útil em situações específicas quando você deseja realizar comparações com conversões de tipos implícitas.
Nextjs Dashboard
Tags: nextjs, javascript, react
Published: 2023-06-12 16:36:12


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aju1wosyy1tu5qjkkkeo.png)

Hello guys,
I developed a simple dashboard project using Nextjs and bootstrap. 

Project Link: [Live demo](https://nextjs-dashboard-7dvy0m0ha-katongole-isaac.vercel.app/)
source code: [github](https://github.com/katongole-isaac/nextjs-dashboard)

__What I learnt__

* Nextjs Basics
    * SSR, SSG and Client-side rendering.
    * Routing i.e static and dyanmic routes.
    * Adding static assets i.e css and image files.
    * Project structuring
* Integration and Consuming 3rd party RESTFUL APIs
* Concepts suchas Client pagination, sorting , filtering
* Implementing drag and drop features

__Author__
[Isaac Katongole](https://www.linkedin.com/in/katongole-isaac-7a22aa178/)

I look forward to hearing from you.
Thanks

Best regards
Isaac | Frontend developer
Plugin- set additonal options
Tags: magento2
Published: 2023-06-12 16:35:11


```
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Quote\Model\Quote\Item\ToOrderItem">
        <plugin name="unique_name" type="Vendor\ModuleName\Plugin\ToOrderItem" sortOrder="1" />
    </type>
</config>
```

```
<?php
namespace Vendor\ModuleName\Plugin;
use Magento\Quote\Model\Quote\Item\ToOrderItem as QuoteToOrderItem;
class ToOrderItem
{
    /**
     * aroundConvert
     *
     * @param QuoteToOrderItem $subject
     * @param \Closure $proceed
     * @param \Magento\Quote\Model\Quote\Item $item
     * @param array $data
     *
     * @return \Magento\Sales\Model\Order\Item
     */
    public function aroundConvert(
        QuoteToOrderItem $subject,
        \Closure $proceed,
        $item,
        $data = []
    ) {
        // Get Order Item
        $orderItem = $proceed($item, $data);
        // Get Quote Item's additional Options
        $additionalOptions = $item->getOptionByCode('additional_options');
        // Check if there is any additional options in Quote Item
        if ($additionalOptions->getValue()) {
            // Get Order Item's other options
            $options = $orderItem->getProductOptions();
            // Set additional options to Order Item
            $options['additional_options'] = json_decode($additionalOptions->getValue());
            $orderItem->setProductOptions($options);
        }
        return $orderItem;
    }
}
```
Trick to cleaner use Sidekiq::Testing.inline! in tests
Tags: rails, ruby, sidekiq, testing
Published: 2023-06-12 16:31:26

By default, Sidekiq jobs don't run in tests. But sometimes, e.g. in e2e tests, you'd want them to run. Sidekiq provides a method `Sidekiq::Testing.inline!` that enables job processing.

If you run this method once, it enables job processing in all tests; if you run it with a block, it processes jobs only within that block. But it's not very clean to have blocks everywhere in your tests. So there's a trick to isolate `Sidekiq::Testing.inline!` within the scope of your full test or specific contexts.

You can utilize RSpec's configuration options to control when `Sidekiq::Testing.inline!` is invoked. You can set it up to run based on the presence of specific metadata in your tests, like so:

```ruby
# spec/spec_helper.rb
RSpec.configure do |config|
  ...
  config.around do |example|
    if example.metadata[:sidekiq_inline] == true
      Sidekiq::Testing.inline! { example.run }
    else
      example.run
    end
  end
  ...
end
```

With this configuration, `Sidekiq::Testing.inline!` will only run when the `:sidekiq_inline` metadata is present and set to true in a test. This can be done as follows:

```ruby
context 'my context', :sidekiq_inline do
  # your tests go here
end

describe 'my describe', :sidekiq_inline do
  # your tests go here
end

it 'my test', :sidekiq_inline do
  # your test goes here
end
```
With this approach, you can better control when Sidekiq jobs are processed during testing, leading to cleaner tests.
Modo estricto en JavaScript
Tags: javascript, beginners, spanish
Published: 2023-06-12 16:22:28

Modo estricto en JavaScript hoy vamos a revisar un tema que es interesante, este modo se habilitan algunas de las características que en el modo poco riguroso (sloppy mode) no están, este no es un termino oficial pero te lo vas a encontrar si ya llevas tiempo programando en JavaScript.

El modo estricto esta disponible desde ECMAScript 5 ahora la pregunta del millón de dólares ¿Cómo habilitamos el modo estricto? y ¿Qué cambia con respecto al modo poco riguroso?. Habilitamos el modo estricto de la siguiente manera.

![Habilitar modo estricto](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j3y5wjulx9ewb6xc2ucl.png)

Ponemos dentro de comillas las palabras use strict de este modo y después de esta línea de código ya estará habilitado el modo estricto. Contestando la segunda pregunta a continuación veremos las diferencias que existen cuando se habilita este modo.

1. No se puede redeclarar una variable con el mismo nombre y dentro del mismo ámbito lo que evita confusiones y errores.

![Redeclarar variable](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dizxojgc39ao1ujckdx6.png)

2. De la misma manera tampoco podemos cambiar el tipo de dato de una variable que ya ha sido asignada con anterioridad.


![Tipo de variable](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f288mpt7728zw04ejutj.png)

Una de las ventajas mas importantes estando este modo activado, es que el rendimiento de nuestro código se ve mejorado para bien, se ejecuta más rápido ya que no se realizan algunas comprobaciones y conversiones que se realizan en modo no estricto.

Además es recomendable utilizar el modo estricto en todos los proyectos de JavaScript para evitar errores comunes y problemas de seguridad, pero hay que tener cuidado con compatibilidad de código ya existente que no ocupe este modo por lo que se recomienda ocuparlo con precaución.

Si este articulo te gusto o aprendiste algo nuevo te agradecería bastante que me siguieras y compartieras para que alguien mas pueda aprender de ello.
System Design Cheat Sheet
Published: 2023-06-12 16:20:15

You can use it for interviews or assessments, pre-sales, or estimations.

**1. Understand Problem and Scope**
- Recognize stakeholders and prioritize them. Create a RACI matrix
- Understand business drivers of the project
- Recognize end-users of the project and understand how they use that system
- Check functional requirements
- Define external dependencies
- Suggest additional features
- Remove items that interviewer considers out of scope

**2. Think about constraints and non-functional requirements**(use PASSME (performance/availability/security/scalability/maintainability/extensibility) if you do not remember all of NFRs)

- Recognize the number of users
- Estimate users growth rate (for the next year/next five years)
- Define average response time
- Understand database size (current / for the next year/ for the next five years)
- Understand storage size (current / for the next year/ for the next five years)
- Recognize security needs
- Define acceptable downtime of the system
- Recognize the number of requests (per month/per second)
- Estimate reads vs. writes operations percentage
- Define time to market
- Check customer related NFR: legacy/proprietary soft, etc

**3. Detect Architecture Significant Requirements**

- Mix between FRs and NFRs to detect ASRs

**4. Abstract Design**

- Choose which architectural views to define based on the stakeholders’ matrix. Use common C4/4+1/etc otherwise
- Choose Architecture Style (Monolith, SOA — microservices, layered architecture, etc.)
- Choose between cloud solution or on-premise servers
- Consider authentication/authorization and privacy
- Suggest security rules and protocols
- Define infrastructure: load balancing, messaging
- Make a rough overview of any critical algorithm that drives the service
- Consider bottlenecks and determine solutions
- Choose storage type (SQL or NoSQL)
- Understand what data should be cached and how to improve performance/security/availability with caching
- Choose monitoring system and logging. Analytics and automatically reboot the system in case of exceptions
- Define separation between public and restricted areas

You can find text version here https://github.com/NikAshanin/Software-Architect-Cheat-Sheet/blob/master/README.md
Meet Omkar DevTools: 🚀 Your Swiss Army Knife as a Ninja Developer ✨
Tags: webdev, javascript, beginners, programming
Published: 2023-06-12 16:08:54


## 💡 What is Omkar DevTools?

Omkar DevTools is a one-stop shop for developers, providing a comprehensive set of tools to help with tasks from Lorem Generation to JSON Decoding under a single dashboard.

## ✨ Top Tools

- Base 64 Encoder
![](https://www.omkar.cloud/blog/static/blog/meet-omkar-dev-tools-your-swiss-army-knife-as-a-ninja-developer/base-64-encoder.png)

- JWT Decoder
![](https://www.omkar.cloud/blog/static/blog/meet-omkar-dev-tools-your-swiss-army-knife-as-a-ninja-developer/jwt-decoder.png)

- JSON Duplicate Remover
![](https://www.omkar.cloud/blog/static/blog/meet-omkar-dev-tools-your-swiss-army-knife-as-a-ninja-developer/json-duplicate-remover.png)

- Hash Generator
![](https://www.omkar.cloud/blog/static/blog/meet-omkar-dev-tools-your-swiss-army-knife-as-a-ninja-developer/hash-generator.png)

- Lorem Generator
![](https://www.omkar.cloud/blog/static/blog/meet-omkar-dev-tools-your-swiss-army-knife-as-a-ninja-developer/lorem-generator.png)

- Secret Generator (Secure for use as secrets in Django, JWT keys)
![](https://www.omkar.cloud/blog/static/blog/meet-omkar-dev-tools-your-swiss-army-knife-as-a-ninja-developer/secret-generator.png)

- Text Counter
![](https://www.omkar.cloud/blog/static/blog/meet-omkar-dev-tools-your-swiss-army-knife-as-a-ninja-developer/text-counter.png)

- Case Converter
![](https://www.omkar.cloud/blog/static/blog/meet-omkar-dev-tools-your-swiss-army-knife-as-a-ninja-developer/case-converter.png)

And many more tools to save your valuable development time. 👨🏻‍💻

## 🚀 Get Started

Get Started with **Omkar DevTools** by visiting [this link](https://www.omkar.cloud/devtools/).

Also, bookmark **Omkar DevTools** for easy single click access when you need it.

![](https://www.omkar.cloud/blog/static/blog/meet-omkar-dev-tools-your-swiss-army-knife-as-a-ninja-developer/bookmark-omkar-dev-tools.gif)

---

👋 Hi Reader, 

What do you think? Do you see the value of **Omkar DevTools**?

Share your thoughts in the comments and I will reply to every single comment.
How to lazy load image with html
Tags: webdev, beginners, html, development
Published: 2023-06-12 16:03:34

there is loading attribute provided by <img /> tag. 

which is used to load the offscreen images lazy 

```
<img src="image1.jpg" alt="image1" style="width:100%">
<img src="image2.jpg" alt="image2" style="width:100%">

<!-- off-screen images -->
<img src="image3.jpg" alt="image3" style="width:100%" loading="lazy">
<img src="image4.jpg" alt="image4" style="width:100%" loading="lazy">
<img src="image5.jpg" alt="image5" style="width:100%" loading="lazy">
```

you should only add loading lazy to images which are not immediately available to screen means user will later on scroll the image will be visible 


note: there are also other options but this one is simple I didn't about it till today
Solution Architect Road map: Roles&Responsibilities & Personal skills
Published: 2023-06-12 16:01:57

I just finished my personal view on a [Solution Architect roadmap](https://github.com/NikAshanin/Solution-Architect-Road-Map). Because, even after three years of my first attempt to do such roadmap, Solution Architect position has became even more popular. 

I tried to describe key skills and what to do to improve it, as well as sources and books which can help with Solution Architecture.

The goal of this Road Map is to help in understanding what the Solution Architect role is and how to grow in that direction. I did tens of interviews with professionals who already play the Solution Architect role in different companies.

For me, this guide helps to identify the ways how to grow as a Solution Architect.

**Road Map**

![Road Map](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aovy694tpq100ncurfrj.png)


**The RoadMap includes two main parts:**

- Roles&Responsibilities. A high-level list of working roles and concrete responsibilities for each.
- Personal skills. Required skills for playing those roles.


**Each point of the Road Map will be appropriately described:**
- Definition
- Why is it important
- How to improve
- Sources/books/courses

**How to contribute**

Please, feel free to contribute to this Road Map. In case, if you are a Solution Architect OR playing a similar role, then there are a few possibilities how to do that:
- Create a pull request with improvements.
- Create an issue with your concerns.
Feel free to contact me directly to discuss raised questions.
You are welcome to contribute :)