teleren/devto huggingface dataset:
SRE book notes: Practices
Tags: sre, books, practices
Published: 2023-01-24 22:10:06

These are the notes from [Part 3: Practices](https://sre.google/sre-book/part-III-practices/) from the book [Site Reliability Engineering, How Google Runs Production Systems](https://sre.google/sre-book/table-of-contents/).

This is a post of a series. The previous post can be seen here:

{% embed https://dev.to/bitmaybewise/sre-book-notes-simplicity-4bmm %}

---

> We can characterize the health of a service—in much the same way that Abraham Maslow categorized human needs—from the most basic requirements needed for a system to function as a service at all to the higher levels of function—permitting self-actualization and taking active control of the direction of the service rather than reactively fighting fires.

> ![Service Reliability Hierarchy](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8uilhi3mh47svde08d9e.jpg)

---

> Without monitoring, you have no way to tell whether the service is even working; you want to be aware of problems before your users notice them.

---

> on-call support is a tool we use to achieve our larger mission and remain in touch with how distributed computing systems actually work (and fail!)

---

> Once we understand what tends to go wrong, our next step is attempting to prevent it, because an ounce of prevention is worth a pound of cure. Test suites offer some assurance that our software isn’t making certain classes of errors before it’s released to production;

---

> The details of the solution you choose to implement are necessarily specific to your service and your organization. Responding effectively to incidents, however, is something applicable to all teams.

---

> Building a blameless postmortem culture is the first step in understanding what went wrong (and what went right!)

By coincidence, along with the SRE book, I started reading another book—or should I say listening—called [Nonviolent Communication](https://www.goodreads.com/book/show/3601593-non-violent-communication-a-language-of-life?ac=1&from_search=true&qid=5ZvS8lLX8h&rank=1).

![Nonviolent Communication](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/er8evt5daxmwkloganlr.jpg)

TLDR, according to the [Wikipedia page](https://en.wikipedia.org/wiki/Nonviolent_Communication), nonviolent communication “is a method designed to increase empathy and improve the quality of life of those who utilize the method and the people around them”.

It couldn’t be at a better time!

I believe using this method to write the post-mortems could be of great help to eliminate the blame on individuals and focus on the systemic issues that need to be addressed.

---

An interesting reading about capacity planning: https://www.usenix.org/system/files/login/articles/login_feb15_07_hixson.pdf

---

If you liked this post, consider subscribing to my newsletter [Bit Maybe Wise](http://bitmaybewise.com/).

You can also follow me on [Twitter](https://twitter.com/bitmaybewise) and [Mastodon](https://mastodon.online/@bitmaybewise).

---

> Photo by [Cristina Gottardi](https://unsplash.com/fr/@cristina_gottardi) on Unsplash
AWS Cloud Quest: First NoSQL Database Study Note
Tags: aws, cloud
Published: 2023-01-24 21:42:55

This is the DIY challenge of the First NoSQL Database task in AWS Cloud Quest.

### DIY Steps:
1. Click `UserVideoHistory` DynamoDB table
2. Actions > Create item
3. Create item

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/87l41hyctxgc0c7v56cb.png)
Async Promise -> [Promises]
Tags: typescript, javascript, programming, beginners
Published: 2023-01-24 21:21:23

The post is about spawning promises from the result of a promise. I found myself in a weird patter when trying to fetch tweets for a list of twitter handles.  
## Bad Code
```
      if (args.handles?.length || args.handles?.length) {
        const tweetsByUsers = await fetchUsers({
          twitterAPI,
          ids: args.userIds,
          handles: args.handles
        }).then((users) => {
          if (!users) return [];
          promises.push(
            ...Object.values(users).map((user) => {
              fetchTweets(twitterAPI, user).then((tweetsByUser) => {
                tweets.push(...tweetsByUser);
                return tweetsByUser;
              });
            })
          );
        });
        promises.push(tweetsByUsers);
      }
...
      await Promise.all(promises).catch((error) => {
        console.warn("Error getting Tweets: ", error);
      });
      return tweets;

```
## Working Code
Eventually I cleaned it up with: 
```
      const promises: any = [];
      if (args.handles?.length || args.handles?.length) {
        const twitterUsers = await fetchUsers({
          twitterAPI,
          ids: args.userIds,
          handles: args.handles
        });
        if (twitterUsers) {
          for (const user of Object.values(twitterUsers!)) {
            const fetchTweetPromise = fetchTweets(twitterAPI, user).then((tweetsByUser) => {
              tweets.push(...tweetsByUser);
              return tweetsByUser;
            });
            promises.push(fetchTweetPromise);
          }
        }
      }
...
      await Promise.all(promises).catch((error) => {
        console.warn("Error getting Tweets: ", error);
      });
      return tweets;
```


Takeaway 1: Pomise.all([promise1->[promise1a,promise1b]] does not wait for promise 1a and 1b. 
Takeaway 1b: creatively trying to add promise1a and promise1b into top level fails. This is caused by a timing issue. Promise.all()  will be waiting on promises before promise1a and promise1b are added to promises. 

Takeaway 2 : `.then( a => return new Promose())` creates havoc on its own but `.then([users] => return users.map(user-> new Promise(user))` is a mind bender.
#DEVDiscuss: Linode + DEV Hackathon
Tags: devdiscuss, linodehackathon, linux, cloud
Published: 2023-01-24 21:10:07

*image created by [Margaux Peltat](https://www.patreon.com/margauxpeltat) for the [Chilled Cow YouTube channel](https://www.youtube.com/watch?v=lTRiuFIWV54)* 

Time for #DEVDiscuss — right here on DEV 😎

{% embed https://dev.to/devteam/announcing-the-linode-dev-hackathon-377p %}
Inspired by our freshly announced Linode + DEV Hackathon, tonight’s topic is...well, the Hackathon! Check out the post above to learn all about how to participate 😁

---

Questions:
- **Have you worked with Linode before?**
- **Which category sounds the most interesting to you?**

> - Smooth Shifters: Awarded to the team whose app shows the most seamless and successful migration to Linode’s platform.
> - EdgeWorker Experts: Awarded to the team that demonstrates the most innovative and effective use of Linode’s EdgeWorkers service.
> - SaaS Superstars: Awarded to the team whose app shows the greatest potential for success as a Software-as-a-Service (SaaS) product or money-making venture.
> - Integration Innovators: Awarded to the team whose app shows the best integration with other services offered by Linode, such as managed databases or object storage.
> - Wacky Wildcard: Awarded to the team whose project is particularly creative, unusual, or outside-the-box. With this category, we are looking for some truly silly and/or fun submissions. Feel free to dream big and ridiculously — and utilize any offering that Linode offers.

- **Any tips for first-time hackathoners?**
LeetCode #104 Maximum Depth of Binary Tree with JavaScript
Tags: javascript, algorithms, leetcode
Published: 2023-01-24 21:07:57

Solution to LeetCode's [104. Maximum Depth of Binary Tree] (https://leetcode.com/problems/maximum-depth-of-binary-tree/) with JavaScript.

## Solution
```js
/**
 * @param {TreeNode} root
 * @return {number}
 */
const maxDepth = (root) => {
  if (!root) return 0;
  const left = 1 + maxDepth(root.left);
  const right = 1 + maxDepth(root.right);
  return Math.max(left, right);
};
```
- Time complexity: O(n)
- Space complexity: O(n)

Solved using bottom-up recursion.
How to create strong LinkedIn profile: step by step guide (1/2)
Tags: tutorial
Published: 2023-01-24 21:06:06

Here are a few pointers to help you build your LinkedIn account more quickly. If you don’t already have a LinkedIn page, the first step is to join and establish a LinkedIn profile.

**Signing up for LinkedIn**
You may join LinkedIn by visiting the company’s official website (https://linkedin.com). It is critical that you join up for LinkedIn as a person, not a corporation, since only a person can have a LinkedIn profile, whereas companies have company profiles. If you mix things up, some users may request that you be removed.

Log in to your LinkedIn account
You may sign in using the information you used to register. LinkedIn includes all of the online convenience features you’d expect: lost password, recall password, and so on.

**Select a profile photo.**
Choose a profile photo that shows you as you are in real life. The image should be in high definition, with a resolution of at least 400x400 pixels.

It’s your LinkedIn page, not a team shot, so be alone in your photo!

**Selecting a backdrop image.**
A suitable background image is required for a successful LinkedIn profile. The image should be in JPG, PNG, or GIF format, with a resolution of 1584x386 pixels.

Don’t leave it empty! Instead, choose an image that expresses the mood of who you are and what you do. You might have a background that expresses sentiments that are spontaneous, dependable, and predictable. Your workplace, corporate image, and service may all be shown (presented as an experience).

**Use a catchy headline.**
The headline of a LinkedIn profile is the most visible alphanumeric data.

This field may be about more than just your areas of knowledge; it may also be about what you provide, what talents you have, and what your specializations are. In this field, use strategic keywords.

It’s a good idea to define oneself in at least 120 characters. Consider this: you will appear in the search results for the terms in your headline.

**Summary**
The summary (about) should be about you and not about your workplace. Make it personal. Make it about you, not only about your skills! Try to describe yourself in your own words!

We assembled a few summary samples. Click on the text to enlarge them!

**Professional experience**
Upload at least your last three places of employment! If you have fewer but more job titles, list them all one by one! It is recommended that you fill out the mission field since there is where you may describe what your particular responsibilities were in a certain job.

**School**
Include just your top qualifications. LinkedIn can assist you in selecting a school. List all of your degrees in reverse chronological order if you have more than one!

When you select a school, your LinkedIn profile will be immediately added to the LinkedIn group for that school.

Please check out my other LinkedIn guide as well: How to create strong LinkedIn profil: step by step guide (3/2)

[Bluebird International](https://bluebirdinternational.com/linkedin-profile-tips/) & [Bluebird](https://bluebird.hu/linkedin-profil-tippek/)
How to create strong LinkedIn profile: step by step guide (2/2)
Tags: linkedin, tutorial
Published: 2023-01-24 21:02:35

This article is the second part of my step by step guide.

**Your Network**
There is no such thing as a powerful LinkedIn profile unless you have a large enough network.
Growing your network is especially crucial if you operate in sales, recruiting, consulting, coaching (or anything similar), or if you want to share your material with a large number of people.
There are several ideas on who to invite on LinkedIn. Many people claim that they only invite people they know. Many others invite anyone who works in a specific industry or who might be interested in the knowledge that they will be sharing.
One thing is certain: without a network, you are more difficult to reach, and you are also more difficult to contact others.

Building a strong network on LinkedIn takes time, however if you start with 300 connections, you may achieve 25–30.000 LinkedIn connections in a year.

**Skills**
The talents (skills & endorsements) section allows you to define your abilities, knowledge, and aptitudes. Later, the majority of the ones you select will be endorsed and confirmed by your connections.

Demonstrate your talents and the skills that others are seeking for (and which you are good at). Give comments on other people’s abilities (endorsement), but only to those who truly possess that ability.

You may occasionally obtain endorsements from individuals you don’t know personally simply because they want you to praise their major talents as well.

**Recommendations**
LinkedIn allows you to offer and receive recommendations. The most powerful Linkedin profiles are those with recommendations.

You can request a recommendation from past supervisors, customers, or coworkers.

**Open to work**
If you’re seeking for work, this might be the most essential LinkedIn Profile tip you’ve ever read!

It’s one of LinkedIn’s most essential checks. By ticking it, you may inform people that you are seeking for work. Right, but who is going to see this flag?

That is the point: only recruiters with a sufficient LinkedIn membership may view it. You may specify where you want to work, what sort of employment you want, whether you want to work on a project instead, if you want to work as a contractor, and even the sector you want to work in.

**Create your own URL**
LinkedIn will generate a URL for you when you establish your profile. You can change it later if it isn’t already taken.

Your URL can include your complete name, but it can also include your major credentials if you believe it is necessary (for example, PMP — Project Management Professional).

Putting your company name in the URL is usually not a good idea, but there are certain exceptions.

Measuring the effectiveness of your LinkedIn profile
The Social Selling Index assesses the strength of a LinkedIn profile (SSI). Your findings may be seen [HERE](https://www.linkedin.com/sales/ssi).

[Bluebird International](https://bluebirdinternational.com/linkedin-profile-tips/) & [Bluebird](https://bluebird.hu/linkedin-profil-tippek/)
12 Resume Writing Tips
Published: 2023-01-24 20:59:45

1. Make your resume themed!

2. Put your area of expertise next to your name!

3. You must be recognizably identifiable in your photograph!

4. Include your contact information, such as your phone number and e-mail address.

5. Be specific about the role you’re looking for!

6. Demonstrate your abilities!

7. Reorganize your prior projects and work environments!

8. Describe what you did!

9. Don’t forget to list your degrees on your resume!

10. It’s your true language abilities that matter!

11. Turn it into a PDF!

12. Don’t forget to include the date on your CV!

Check out [our complete article](https://bluebirdinternational.com/how-to-make-a-resume/) for more details.

* source: [Bluebird](https://bluebird.hu/oneletrajz-keszitese/)
What Is JavaScript Used For?
Tags: javascript, development, tutorial
Published: 2023-01-24 20:55:05

Numerous customers contact us because they require JavaScript developers. Occasionally, we are asked to provide them with senior, experienced developers for only 6 to 12 months. Typically, however, we must first assess the project tasks and determine whether a frontend, backend or mobile developer is required.

In this brief article, we will explore the tasks that require JavaScript. Let’s start!

The most popular frontend programming language in the world is now JavaScript. Moreover, contrary to what the majority of non-IT professionals believe, [JavaScipt](https://bluebirdinternational.com/javascript-interview-questions-and-answers/) is not only for the frontend.

**1. Mobile App Development**
React Native has become a popular language for mobile development, but you can also use Ionic, NativeScript, AngularJS, or JQuery Mobile.

**2. Frontend Development**
Frontend development is the typical form of usage of JavaScript. Today’s most popular programming languages are [Angular](https://bluebirdinternational.com/angular-interview-questions-and-answers/), React, and Vue.JS, but jQuery and Ember.JS are likely to be encountered in legacy projects.

**3. Backend Development**
The most popular backend JS framework is Node.JS, which is not only a [backend framework](https://bluebirdinternational.com/popular-backend-technologies/) but is also utilized by the majority of software developers.

**4. Game Development**
You might encounter Pixi.JS or Phaser in this microcosm, but Babylon.JS, melon.JS, and Impact.JS are also popular.


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

As stated previously, Javascript may be utilized for various purposes. Please inform us of your requirements, and [Bluebird](https://bluebirdinternational.com/) will provide you with the most qualified senior JavaScript developer available.

For Javascript developers, [please visit this page](https://bluebirdinternational.com/staff-augmentation/hire-javascript-developers/)!
What is going on in the IT recruitment market right now?
Published: 2023-01-24 20:51:17

We are currently witnessing unprecedented growth in the IT Recruitment market. I’ve been in this market for 20 years and have seen an increase and decrease in IT headhunting over the years, but what is happening now?
The pandemic, in my opinion, reduced IT managers’ efforts to grow their teams. Why? Because it was risky to expand whether you’d have more projects or not. However, after the first year of the COVID, all IT companies were required to develop all software that their clients required.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0h9wieiibn9uwddow647.jpeg)

So now, every company requires the best IT talent, the most experienced senior developers. It makes no difference whether the employees are on a [permanent contract](https://bluebirdinternational.com/staff-augmentation/) company! Just give them to me :-)

Please share your thoughts! Do you see the same thing in the IT labor market?
Quickly format and manipulate JSON in vim using jq
Tags: vim, json, jq
Published: 2023-01-24 20:45:20

Ever needed to check whether the JSON you just wrote is valid? Or wanted to quickly rename keys in a JSON array?

There are two components worth understanding that we will later put together.

First, a brief introduction to `jq` — a wonderful tool for manipulating JSON on the command line — *like `sed` for JSON data* as the [official website][jq] describes it. It is truly powerful and able to manipulate JSON in a myriad of ways. When run with no arguments, it simply formats the given document:

```
$ echo '{ "foo":   "bar"     }' | jq
{
  "foo": "bar"
}

```

Second, vim allows you to pipe the contents of the current buffer into a unix command. The command for passing the current buffer through `jq` would be:

```
:% !jq
```

Combining the two, we get a convenient way to format JSON, or really, manipulate the contents of a buffer in any way (another example I use often is sorting through `!sort`).

![A screen recording showing the described technique in action](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ahas6xbfkwq3vyps7tcf.gif)

How about manipulating JSON? Let's look at two simple examples using the same JSON document. The following command will rename the `"size"` key to `"variant"`:

```
:%!jq '.items |= map(.variant = .size | del(.size))'
```

How about uppercasing every value in an array? Easy enough:

```
:%!jq '.items |= map(.variant |= ascii_upcase)' 
```

Savvy vim users will recognize that `%` is in essence just a way to tell vim to use every line in a buffer (see `:help :%`). We can just as easily use a subset of the buffer, either by specifying the line numbers explicitly or using visual selection (`shift-v`):

![A screen recording showing how to pipe part of a buffer to a unix command](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wbeotyt7n732xovzhfuc.gif)

That's it! I hope this technique can streamline your workflow and make you a more efficient vim user.

Bonus: a GPT-generated haiku about vim and the unix pipeline:

> Vim sharp as a knife
> Unix pipeline, ever wise
> Together they thrive

[jq]: https://stedolan.github.io/jq/
CSS tutorial series: CSS Multiple Columns layout
Tags: beginners, webdev, programming, css
Published: 2023-01-24 20:44:00

The `multicol` or `multi-column` layout is a method for setting up content in columns, similar to a newspaper layout. 
Let's learn how to use a multiple-column layout. 

## CSS multi-columns properties

|Property| Value|
|--------|:----:|
|`column-count`| accepts  a number|
|`column-gap`| accepts a length unit|
|`column-rule-style`| `solid`, `dotted`, `double`, `ridge`|
|`column-rule-width`| accepts a length unit|
|`column-rule-color`| accepts a color|
|`column-rule`| accepts the three previous values, `width`, `style` and `color`|
|`column-span`| `none`, `all`
|`column-width`| accepts a length unit|

## Let's discuss each of these properties

### Column count property
This property determines the number of columns an element should be divided into. Let's say we give this property the value of `3` then this element is going to be divided into `3 columns`

### Column gap property
This property specifies the space between the columns.

### Column-rule 
By explaining `column-rule-width`, `column-rule-style` and ` column-rule-color`, you will understand the use of `column-rule`.

The `column-rule` is shorthand for the three properties mentioned respectively. 

- The first property accepts a length unit such as `column-rule-width: 40px` which will specify the width of the line present between the columns.

- The second property accepts a style value which will be applied to the line drawn between the columns.

- The third property accepts a color value which will also be applied to the line drawn between the columns.

### Column span property
This property allows an element to span across all columns by using the value of `all`.

### Column width property.
This property defines the minimum width of each column number that was specified using the `column-count` property.
Community Discussion Thread — Linode + DEV Hackathon
Tags: linode, linodehackathon, linux, help
Published: 2023-01-24 20:26:30

---
title: Community Discussion Thread — Linode + DEV Hackathon 
published: true
description: A place to discuss your progress with the Linode + DEV Hackathon — and lend encouragement to one another!
tags: Linode, linodehackathon, linux, help 
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/15b2qscdovsrump5vobr.jpg
---

### **This thread is your place to share progress with your fellow [Linode + DEV Hackathon](https://dev.to/devteam/announcing-the-linode-dev-hackathon-377p) participants and encourage one another throughout the month!**

> In this thread, you can post...
- Positive encouragement for other participants
- Milestones you've achieved or things you've learned throughout the hackathon
- Links to DEV posts related to your official submission (especially if you've written multiple reflections/progress posts). Don't forget to utilize the DEV article embed tag when sharing a link! 


If you need help throughout the Linode + DEV Hackathon, head over to the [help thread](https://dev.to/devteam/linode-dev-hackathon-help-thread-1cmo)

#### _Comment Below_ 👀