teleren/devto huggingface dataset:
tsParticles 1.39.3 Released
Tags: showdev, javascript, webdev, typescript
Published: 2022-02-02 19:04:00

# tsParticles 1.39.3 Changelog

## Bug Fixes

- Solved performance drop issue after the refresh, closes #2809, #2815, #2936

## Changes

- updated fps limit default value to 120, updated all presets to have the fps limit of 120 (Chrome supports that also in Mac Pro Motion displays, Safari for now is still limited to 60)

---

{% github matteobruni/tsparticles %}
What is learning path I should take to transition from manual to automation testing?
Tags: testing, beginners, career, productivity
Published: 2022-02-02 19:01:10

I have been getting a lot of messages from people who want to transition from manual to automation testing and they have been asking me to recommend the learning path to get the transition done successfully, hence I thought of writing a blog and share my experience.

This blog also has links of the FREE courses which I had taken to upgrade myself and I would recommend those to others as well!

[Transition from manual to automation testing](https://medium.com/@iamfaisalkhatri/transition-from-manual-to-automation-testing-4b5c4acd9286)
Taming cAdvisor's high CPU usage
Tags: devops, docker, containers, monitoring
Published: 2022-02-02 18:50:58

---
title: Taming cAdvisor's high CPU usage
published: true
description: Getting cAdvisor's CPU usage under control
tags: 'devops, docker, containers, monitoring'
cover_image: 'https://raw.githubusercontent.com/cloudx-labs/posts/main/posts/pabloromeo/assets/cadvisor-high-cpu-cover.png'
id: 958530
date: '2022-02-02T18:50:58Z'
---

When running multiple docker containers, be it on a single server, a Kubernetes cluster or in Docker Swarm, it is very important to be able to monitor their resource usage.

That's where [cAdvisor](https://github.com/google/cadvisor) comes in. It provides useful metrics to build Monitoring Dashboards using Grafana and Prometheus:
![Grafana Dashboard showing CPU and Memory metrics](https://raw.githubusercontent.com/cloudx-labs/posts/main/posts/pabloromeo/assets/cadvisor-high-cpu-grafana-dashboard.png)

But there is one big problem: **cAdvisor's default settings**.

The consequence of running the default configuration is very high CPU usage. Especially noticeable in low-powered devices such as the Raspberry Pi's from the cluster in the graph above.

cAdvisor uses more CPU than the containers it is monitoring! :sob:

## The fix

Thankfully, it's quite simple. The parameters that make the biggest impact are:

- housekeeping_interval
- docker_only
- disable_metrics

A detailed explanation of each can be found [here](https://github.com/google/cadvisor/blob/master/docs/runtime_options.md).

## Docker-compose Swarm example

Below I'm defining a `housekeeping_interval` of 30 seconds, setting `docker_only` to `true`, and disabling metrics I'm not interested in, using `disable_metrics`.

*NOTE*: Beware that I'm using an ARM version of cAdvisor, change the image/tag accordingly.

```yaml
version: '3.4'

services:
  cadvisor:
    image: zcube/cadvisor:latest
    ports:
      - published: 9102
        target: 9102
        mode: host
    command:
      - "--port=9102"
      - "--housekeeping_interval=30s"
      - "--docker_only=true"
      - "--disable_metrics=percpu,sched,tcp,udp,disk,diskIO,accelerator,hugetlb,referenced_memory,cpu_topology,resctrl"
    volumes:
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk/:/dev/disk:ro
      - /sys:/sys:ro
      - /var/run:/var/run:ro
      - /:/rootfs:ro
      - /sys/fs/cgroup:/cgroup:ro
      - /etc/machine-id:/etc/machine-id:ro
      - /etc/localtime:/etc/localtime:ro
    deploy:
      mode: global
      update_config:
        order: stop-first
      resources:
        reservations:
          memory: 80M
    healthcheck:
      test: wget --quiet --tries=1 --spider http://localhost:9102/healthz || exit 1
      interval: 15s
      timeout: 15s
      retries: 5
      start_period: 30s
```

## Did it help?

Check this out:
![Lower CPU usage after changing settings](https://raw.githubusercontent.com/cloudx-labs/posts/main/posts/pabloromeo/assets/cadvisor-high-cpu-usage-improvement.png)

I'm sure you can guess at what time the new settings kicked in :smirk:. From **0.68** vCPU to **0.08** vCPU!
Not bad at all.
How to test APIs using supertest, mocha and chai?
Tags: javascript, testing, beginners, productivity
Published: 2022-02-02 18:48:55


What is supertest?
How do I test APIs?
How do I perform end to end testing of APIs using supertest?
How do I create an automation test strategy for testing APIs?

Check out the link below where I have answered the question mentioned above:
[How do I test APIs using supertest, mocha and chai?](https://medium.com/@iamfaisalkhatri/api-testing-using-supertest-ea37522fa329)
Rythm.js, A javascript library that makes your page dance | Spotlight of the day series
Tags: spotlightoftheday, css, html, javascript
Published: 2022-02-03 07:14:28

---
title: Rythm.js, A javascript library that makes your page dance | Spotlight of the day series
published: true
date: 2022-02-02 18:47:58 UTC
tags: Spotlightoftheday,css,html,Javascript
canonical_url: https://codingislove.com/rythm-js/
---

A javascript library that makes your page dance.

{% youtube FlgdWiS1ltY %}

The post [Rythm.js, A javascript library that makes your page dance | Spotlight of the day series](https://codingislove.com/rythm-js/) appeared first on [Coding is Love](https://codingislove.com).
PageStorage Class 💫 🌌 ✨
Tags: flutter, pagesorage, dart, scroll
Published: 2022-02-02 18:44:40

Bu yazıda PageStorage class'ının ne olduğunu ve nasıl kullanıldığını öğreneceğiz. İyi okumalar :)

Kaydırma çubuğuna sahip bir sayfanızın olduğunu düşünelim scroll'unuzu belirli bir yere kadar kaydırıp yeni bir sayfa açtığınızda ilk sayfaya geri dönmeniz durumunda kaydırma çubuğunuzun bıraktığınız yerde olmasını isteyebilirsiniz. İşte bu ve benzeri durumlar için Flutter da PageStorage class'ını kullanabiliriz.

Belgeler bu class'ı şöyle tanımlar:

PageStorage, widget'tan daha uzun ömürlü olabilecek değerleri kaydetmek ve geri yüklemek için kullanılır. Örneğin, birden fazla sayfa sekmelerde gruplandığında, bir sayfa kapatıldığında, widget'ı bozulur ve durumu kaybolur. Kökte bir PageStorage ekleyerek ve her sayfaya bir PageStorageKey ekleyerek, sayfanın bazı durumları (ör. Kaydırılabilir bir widget'ın kaydırma konumu) otomatik olarak en yakın atası PageStorage'da depolanır ve geri değiştirildiğinde geri yüklenir.

**İşte basit bir örnek:**


```
final PageStorageBucket _pageStorageBucket = PageStorageBucket();

  @override
  Widget build(BuildContext context) {
    return PageStorage(
      bucket: _pageStorageBucket,
      child: Form(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: SingleChildScrollView(
            key: PageStorageKey("key_degerinizi_girin"),
          ),
        ),
      ),
    );
  }
```


[reference](https://api.flutter.dev/flutter/widgets/PageStorage-class.html)
HTML 5 and the Yellow Sword
Tags: beginners, webdev, html, programming
Published: 2022-02-02 18:37:50



Hello tribe, how are you?🤗

Remember last week when we talked about how to embed CSS in HTML ? 🤔  well in this post we will learn how to do it but with JS! yes the last pillar of web development has been revealed! hahaha. Alright let's get started! 

There are two ways through external files or embedding it directly in the document. FOR REAL 😱

The first way to embed JavaScript in HTML is the direct way, but its use is discouraged, as it slows down the loading of the site, and can be placed either in the head of the document or in the body. You can do this by using the*** SCRIPT*** tag which should wrap all the JS code you write. 

```html
<head>
<script>
    ..... code ......
</script>
``` 
The second way is through a linked file that is placed in the body like this:

```html
<body>
<!--at the end of the body-->
<script src="/myfile.js"></script>
</body>
``` 

🤩Bonus! the **NOSCRIPT** tag:🤩
The noscript tag is used to display a text for all those browsers that have js disabled or don't support it at all. 

```html
<noscript>active js please!</noscript>
``` 

Well tribe I think that's all for today I'll get to work to bring you more interesting stuff in the next post! remember to always be the best version of you bye bye bye!🥴🥴
Extended Property Patterns in C# 10
Tags: csharp, dotnet, news, programming
Published: 2022-02-02 18:33:55

##What does it mean?

Basically, in C# 8.0 Microsoft has introduced the new pattern: **Property pattern**.

A property pattern matches an expression when an expression result is not null and every nested pattern matches the corresponding property or field of the expression result.

In C# 10, you can reference nested properties or fields within a property pattern. 

## Example
The following code sample shows a C# Customer class , which contains some properties and a nested property named Address which is in itself an object.

```csharp

    public class Customer
    {
        public string Name { get; set; }
        public string LastName { get; set; }
        public Address Address { get; set; }

    }
    public class Address
    {
        public string City { get; set; }
        public string ZipCode { get; set; }

    }

    public class DiscountCalculator
    {
        public double GetDiscount(Customer customer)
        {
            if (customer is { Address : { City: "NYC" } })
            {
                return 0.8;
            }
            else
            {
                return 0.9;
            }
        }
    }

```

As you can see in our **GetDiscount** method, the syntax for accessing the address nested property is verbose

```csharp

 if (customer is { FullAddress : { City: "NYC" } })

```
In C# 10, it’s much more practical, you can reference nested properties or fields within a property pattern.

```csharp

if (customer is { FullAddress.City: "NYC" })

```

That's it, for more details about the Extended property patterns
you can refer to the link below:
[Extended property patterns](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/extended-property-patterns)
Release 1.58 of perl-workflow, a maintenance release
Tags: opensource, release, perl
Published: 2022-02-02 18:32:47

---
title: Release 1.58 of perl-workflow, a maintenance release
published: true
description: Maintenance release of the Perl distribution Workflow
tags: opensource, release, perl
//cover_image: https://direct_url_to_image.jpg
---
Finally we were able to _squeeze_ out another maintenance release of the Perl distribtution [Workflow](https://metacpan.org/pod/Workflow).

We have one outstanding discussion on the forthcoming 2.0 release, should we merge _validators_ and _conditionals_, I hope we will be able to conclude something, so our first development releases of 2.0 can be shipped. Do see issue [#137](https://github.com/jonasbn/perl-workflow/issues/137) for discussion and proposal.

More information on the roadmap to 2.0 can be found here:

- The [2.0 milestone](https://github.com/jonasbn/perl-workflow/milestone/14), as in a list of PRs and issues
- And the [2.0 projected road map](https://github.com/jonasbn/perl-workflow/projects/1) as a set of notes and issues.

If you are interested in Workflow and possibly contributing, do not hesitate to reach out.

Here follows the change log of release 1.58.

## Change Log

The original is [available on GitHub](https://github.com/jonasbn/perl-workflow/releases/tag/1.58)

## 1.58 2022-02-02 Maintenance release, update not required

- Addressed violations of [Perl::Critic](https://metacpan.org/pod/Perl::Critic) policies:
  - [Subroutines::ProhibitExplicitReturnUndef](https://metacpan.org/pod/Perl::Critic::Policy::Subroutines::ProhibitExplicitReturnUndef)
  - [ValuesAndExpressions::ProhibitMixedBooleanOperators](https://metacpan.org/pod/Perl::Critic::Policy::ValuesAndExpressions::ProhibitMixedBooleanOperators)

  Adjustments to Perl::Critic resourcefile (`t/perlcriticrc`), this somewhat addresses issue [#43](https://github.com/jonasbn/perl-workflow/issues/43), there is more work to be done in this area, this will be adressed eventually

  By Jonas Brømsø (@jonasbn)

- Requirement for Perl 5.14 has been made more explicit, see also PR [#185](https://github.com/jonasbn/perl-workflow/pull/185) by Erik Huelsmann (@ehuelsmann)

- Delay of instantation, prevents additional loggings attempts, this makes logging less noisy when running tests. Via PR [#174](https://github.com/jonasbn/perl-workflow/pull/174) from Erik Huelsmann (@ehuelsmann)
My first NPM package - And the first step in my open source journey.
Published: 2022-02-02 18:12:12

## Open source

Ever since I got into programming, I have been fascinated by open source and for the longest time wanted to get more into it, but I have to admit its very intimidating to get started. And that has held me back from getting into it for a while, but at the start of this year I made a decision that this would be the year my open source journey begins.

So to start my open source year off I have created my very first NPM package, I dont know if anyone will ever use it, and for now thats not very important to me. Just the act of publishing something that is open source felt very good.


## My package - React-flowfield

[Github/react-flowfield](https://github.com/bjoroen/react-flowfield)

It's a background component for react, to give a interesting background animation. Its inspired by one of Daniel Shiffman`s amazing videos. 

Here is an example: 

![Example](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uv6f84r7p8tw45v8uylw.gif)

You can customize a few options to make it your own and to look the way you like it and to make it fit your website. 

This is hopefully the first one many components I will add. The idea for the future of this project is to have a library of many interesting background components.

## Thank you for reading :)
The Strict mode in JavaScript
Tags: javascript, webdev, beginners, programming
Published: 2022-02-02 18:03:35

**JavaScript's strict mode**, introduced in *ECMAScript 5,* optimizes code for JS engine, eliminates bad-syntax code, and helps in writing secure JavaScript. Let's take a slightly deeper dive into this concept.

**"Use strict"** mode in JS applies certain restrictions in the entire script or in a particular function it is invoked in. Just add `"use strict";` to the beginning of a script or a function.

Q. What changes does `use strict` make? The list is pretty exhaustive. But here are some important changes you'll notice. If you're in strict mode:

- Using a variable/object, without declaring it, will throw an error.

- Using duplicate parameters in any function or duplicate property names in any object will throw an error.

-  Any assignment that silently fails (does not throw any error/no feedback to the user) in normal code (i.e assignment to a non-writable global or property, assignment to a getter-only property, assignment to a new property on a non-extensible object) will throw an error.

- Deleting a function or an undeletable property will throw an error.

- Using a number that begins with 0 will throw an error.

- Setting a property to a primitive value, will throw an error.

- There are a number of situations that could unintentionally cause `this` to be bound to the global object. In strict mode, instead of bounding `this` to `global` object, this gets bound to undefined.

- ECMAScript 5 added a list of reserved words that will be used in the future. If you use them as variables or arguments, the strict mode will throw an error. 

- Using `arguments.callee`, `arguments.caller`, `with` keyword,`eval()` function, is forbidden.

- Et cetera, et cetera.

Refer to this [MDN doc](https://mzl.la/3IOVPRx) on the same for further information and clarity.

Happy coding :)

###10DaysofJSfundamentals (DAY 6)
Empleos en Data y Analytics LATAM — Feb 2022 - I
Published: 2022-02-02 18:03:22

Te compartimos las ofertas laborales del mes para áreas de Data, Analytics y Cloud 👨‍💻👩‍💻.

✅[Data Analyst- Tribal Credit (Perú, Lima)]
(https://pe.indeed.com/viewjob?jk=f3884a954cdd4fc3&tk=1fqtp4unvhilj800&from=serp&vjs=3)
✅[Data Engineer- BairesDev (Colombia, Medellín)]
(https://co.indeed.com/viewjob?jk=e8a69204d891041d&tk=1fqtp77583kjc000&from=serp&vjs=3&advn=9046743915949466&adid=377047495&ad=-6NYlbfkN0BfEGkshao4EhrCCf7LYqKO8VNtf9vkQrewuI3DmTR_-G3zJxSBeo1O-SB_lpKRvkOh7dK4h14F_QVZOoz_xXMJsoDcdM4jg_TC0ypoQOxJGNaXFqlCckDUpIWZ7rtb2VLJh-XwlSmcZ3z2PWqpFlHYZVkIHBEJEKS76cTI7WruPV2nUOMtQGdB1fhW-lFWHsSb2pUUPXzdQ_iRn6h_T7dNOtRJl4W0ZSU-UVUVekyx5q0Z812ZBJ_mgqw-t4hyDsevtEPaVCCmNrNpkUShBWeYUT4dXek76jNPMi1-XkfaeLwBxFRnu86iAwmv8Z5PFZkvZkTHlb_rCfIRwCIk1rgYjVR_5yYRcIc8_PBy4oaH0syrSOCwNOYh&sjdu=Nd2WpwsyXDri1xw5BK6SlSr1RB6mfvlwcwEpHCtZngQJ5KRIybz_geE7Nke96qhs7c5VNSDrBXvBqspb_6xHPsQq0fDbrKpaAnUO5JouM-iNq1UA41ZHTk7WilxB94T2FJY2pyb104yK3jOkId3P0-H44T4Vkop5vqIS8Z4odK0)
✅[Data Scientist - BairesDev (Ecuador, Quito)]
(https://ec.indeed.com/viewjob?jk=825e6d001f9a3ec7&tk=1fqtp8jj1u31u800&from=serp&vjs=3)
✅[Machine Learning Analyst - Acid Labs (Chile, Santiago de Chile)]
(https://cl.indeed.com/viewjob?jk=18e96e43f749201e&tk=1fqtpdqgtu1a6800&from=serp&vjs=3)
✅[Data Analyst - Infosys (Mexico, Monterrey)]
(https://mx.indeed.com/viewjob?jk=6780acb11a952d2c&tk=1fqtpfq85t573800&from=serp&vjs=3)
✅[Data Engineer- Toptal (Bolivia, Santa Cruz)]
(https://www.linkedin.com/jobs/view/2734957648/?eBP=NotAvailableFromMidTier&recommendedFlavor=ACTIVELY_HIRING_COMPANY&refId=VWsZ3fNIM0sTvdFcZy%2FMww%3D%3D&trackingId=Q%2ByHDXRzXijk3fxWJ1m4JA%3D%3D&trk=flagship3_search_srp_jobs)
✅[Data Scientist - Lumen (Argentina, Buenos Aires)]
(https://ar.indeed.com/viewjob?jk=596522acbf44dbd8&tk=1fqtpjjjn3kpt000&from=serp&vjs=3&advn=4459387372488546&adid=365659523&ad=-6NYlbfkN0BGKj2dVRoMy2japSZrYRM8IJNi6D13enLCCRY5KIhxisNTDE9egx9UBb1Ve__GXVsQZbDBbRArjIZmiaJpjQXGArEUW1nd2uEbRL5zT3VLqanBa-Ejs0-EsfZL-uyyyBG2nijxid6I51Qe8AEC0HVDZftS0XG316RcsqqgDom4SI6j2KywAN2Vd1RAgjwYWICnwkuRzNu84qlP6CaxuCogdVB5k_NUZGkULG8uv7AA_-6tZandPVZF7VVlzAK8xecGMUea3EVp7BZvGYBuXMeHyexG2X5gtP4TPhV9fk-l0YYDjRiOdCYTfP8Ennoj2qS4Dy1g6zzyAmeKUIEutqZ_McV6K_LQw-pl4onPMVJ7OYH3jJ5Ep1I0&sjdu=9nrDNPdV1DghkDNnC2WJlW1nrk21-asFvjSk9jx-s_N5DDMbZs6Pb_Zn1GOqD2-AAvMtyi1UaUchZG8EqH7ZeNSpAqS5cluCmORp6C3FpTCZi6Xcw1Ae3uEI5QlJw7puW09NP6xoS62h3yBNMKDvge8GxA8YPZO2GLxyepAVhY8_eCW0lrD_B5dBgpWEJ_VZNG5DK-gW8TP_cGa5bjzdvfMln8fX9zqlQxMiFpoUrzYhRGhD8gJwQe5VWGze1Tj-yEp4dcy9FeKfZdUdQ-PunbeWOibESJbU-DllD_rux1g0kiuWAgTuTe9i6sN9imCKVHIJqDh8fSFGPtWSqVId55aNEZs6rM82y5pQ7ixp37-P01rzCQrYuOo1o_nUVxzAy5FtgqyNYAea5v276ZJ4vVtvdMP6-TzDqeOP0cziODwoiXKWnzIu6STnCbXSe-bHwvB122V6U5E_yIP8BWrEBu1RrOePGUyD7Tl7H4WGx2klJeOXAlTVZUiEdZD6ctv9VfTed5e0uHWzBjRAzo0wvWmQqQQulktRWukhGW3rLa8)
✅[Machine Learning Analyst - LISA Insurtech (Venezuela, Caracas)]
(https://ve.indeed.com/viewjob?cmp=Recruitment%26Selection&t=Python+developer+artifitial+intelligence&jk=fbf0095132127b9f&q=Machine+Learning&vjs=3)


Aprende, aplica y crece en proyectos de Data y Analytics en Cloud.

Visita nuestra página:
👉🌐 datahack.la
Access User Details Using UserID in SoloLearn with Python(API)
Published: 2022-02-02 17:58:18

`
from urllib.request import urlopen
import json
url = 'https://api.sololearn.repl.co/profile/'
profileid = int(input('Enter User ID (Exp : 20098177) :'))
link = f'{url}{profileid}'
resp = urlopen(link)
data = json.loads(resp.read())
#--------------------------------------STORAGE
name = data['userDetails']['name']
bio = data['userDetails']['bio']
level = data['userDetails']['level']
xp = data['userDetails']['xp']
countryCode = data['userDetails']['countryCode']
followers = data['userDetails']['followers']
following = data['userDetails']['following']
registerDate = data['userDetails']['registerDate']
pro = data['userDetails']['isPro']
modifiedPro = ''
badge = data['userDetails']['badges'][0]['name']
#--------------------------------------ARGUMENTS
if pro == False:
    modifiedPro = 'Free User'
else:
    modifiedPro = 'Pro User'
#--------------------------------------OUTPUT
print('[[[[[[[[    SOLOLEARN USER DETAILS THROUGH PYTHON(API)    ]]]]]]]')
print('\t')
print(f'NAME        :{name}')
print(f'BIO         :{bio}')
print(f'LEVEL       :{level}')
print(f'XP          :{xp}')
print(f'USER TYPE   :{modifiedPro}')
print(f'BADGE       :{badge.capitalize()}')
print(f'FOLLOWERS   :{followers}')
print(f'FOLLOWING   :{following}')
print(f'COUNTRY     :{countryCode.upper()}')
print(f'REG. DATE   :{registerDate[:10]} at {registerDate[11:]}')
print('\t')
print('[[[[[[[[      CREATED BY -IRFAN SHADIK- USING API        ]]]]]]]')
#[[[[[[[[[[[[[[[[[[[Instagram - @irfanshadikofficial]]]]]]]]]]]]]]]]]]]`
100 días de código: 62, primeros pasos para conseguir empleo
Tags: spanish, webdev, 100daysofcode
Published: 2022-02-02 17:57:29

¡Hey hey hey!

En la guia de [The Odin Project](https://www.theodinproject.com/) hay un apartado de entrevistas que te da una guia con algunos consejos interesantes y hoy he comenzado con el primero pero creo que antes de ello deberías hacer algunas cosas como:
- Anotar tus habilidades
- Crear tu curriculum (es indispensable) y puedes hacerlo con un [sitio web llamado Flow](https://flowcv.io/)
- Anotar tus necesidades del trabajo como el sueldo necesario para mantenerte, si necesitas que sea remoto, etc.
- Anotar lo que te gustaría que tuviera este empleo

Y despues de ello puedes comenzar con este paso:

### Crear una lista de ofertas de trabajo
Este paso consiste en crear una lista en alguna herramienta como Excel que te permita agregar el nombre de la empresa, los requisitos, el link, si cumples las habilidades, si cumple tus necesidades y deseos. 

Al hacer esta lista puedes incluir empresas de las que no termines de completar los requisitos y que tampoco cumplan tus necesidades porque serán las que te ayudaran a entrenar en entrevistas para las empresas y ofertas que realmente te parecen interesantes. 

Despues de completar esta lista ahora si es momento de ordenarlas de una forma que te permita visualizar las empresas que realmente te importan y las que no te terminan de convencer.

Al hacer este filtro puedes elegir unas cuantas para practicar y otras en las que realmente te gustaría trabajar.

Este es el primer paso para avanzar con tu búsqueda de trabajo, las entrevistas son como cualquier habilidad que puedas aprender en programación, por muchas cosas que leas es necesaria la practica y espero que esta información te ayude un poco a avanzar con este proceso y tengas mucho éxito en ello.

Ahora me concentrare en las cosas que logre hacer hoy.

### Hoy:
- Logre realizar algo de copywriting a mi sitio web personal para practicar esta habilidad de SEO que realmente me parece interesante
- Estudie un poco de typescript
- Logre mejorar mis usos del tiempo en el día
- Practique algo de Touch Typing lo cual ya tenia bastante abandonado
- Cree mi lista de empleos, mis necesidades y deseos y filtrarlas para marcar mis objetivos

Ojala tengas mucho éxito con tus proyectos y animo!

¡Hasta la próxima!

PD: este blog lo escribí ayer y se me olvido publicarlo asi que mas tarde escribiré mas.

Foto del cover de [LinkedIn Sales Solutions](https://unsplash.com/@linkedinsalesnavigator?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) en [Unsplash](https://unsplash.com/s/photos/interview?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)