teleren/devto huggingface dataset:
print() - funksiyasi xaqida.
Published: 2023-03-23 04:27:46

print bu chiqarib berish deyiladi yani print bilan misol qilsak print kimdur va osha kimdurni ismi yoki prindga yozilgan gapnni chiqaradi.
**Mislo uchun:**

```
print("Hello world")
print("Assalomu Alaykom")
print("Salom Dunyo") 
```

**Xozirgi yozgan kodimizni Natijasi:)


```
Hello World 
Assalomu Alaykum 
Salom Dunyo
```
 


print(Hayirli tong!)

**Natija**SyntaxEror: invalid syntax 
Bu safar Hayirli tong! yozuvi orniga, Syntax Error (sinteksda xatolik qayerda ? 
Avval aytganimizdek,'print()' funksiyasi matn yoki ifodalarni konsolga  chiqarish vazifasini bajaradi. Lekin bu funksiya togri ishlashi uchun bir nechta qoidalarga amal 
qilish lozim, Jumladan, agar konsolga matn chiqarmoqchi bolsak matinimiz albatta qoshtirnoq yoki'("")' yoki 
birtirnoq'(' ') orasida yozilishi kerak, Demak Hayirli tong! sozni konsolga chiqarish togri kod:

```
print("Hayrli tong!")
print('Hayirli tong!')
print("Biz Pythonda dasturlash tilini organishni boshladik")
print('Biz Pythonda dasturlash tilini judayam qiziq ekan')

```
Print() - funksiyasi xaqida.
Tags: webdev, beginners, python, tutorial
Published: 2023-03-23 04:26:34

Assalamu aleykum xurmatli dasturchi bugun siz bilan Python dasturlash tilida `Print()` - funksiyasini korib chiqamiz.

Print() - bu Pythondagi mahsus funktsiya bo'lib, () ichida berilgan matn yoki ifodalarni ekranga (konsolga) chiqarish vazifasini bajaradi.

**Misol uchun:**

```
print("Hello World")
print("Assalamu aleykum")
print("Salom Dunyo")
```
**Xozirgi yozgan kodimizni Natijasi:**

```
Hello World
Assalamu aleykum 
Salom Dunyo
```

`print(Hayrli tong!)`

**Natija:** SyntaxError: invalid syntax

Bu safar esa Hayrli tong! yozuvi o'rniga, Syntax Error (sinteksda xatolik) xabari chiqdi. Xatolik qayerda?

Avval aytganimizdek, `print()` funktsiyasi matn yoki ifodalarnin konsolga chiqarish vazifasini bajaradi. Lekin bu funktsiya to'g'ri ishlashi uchun bir nechta qoidalarga amal qilish lozim. Jumladan, agar konsolga matn chiqarmoqchi bo'lsak matinimiz albatta qo'shtirnoq yoki`( " " )` yoki birtirnoq`( '  ' )` orasida yozilishi kerak. Demak Hayrli tong! so'zini konsolga chiqarish uchun to'g'ri kod:

```
print("Hayrli tong!")
print('Hayrli tong!')
print("Biz Python dasturlash tilini o'rganishni boshladik")
print('Biz Python dasturlash tilini judayam qiziq ekan')
```
Print() - funksiyasi xaqida .
Tags: webdev, beginners, python, tutorial
Published: 2023-03-23 04:25:26

Assalamu aleykum xurmatli  dasturchi bugun siz bn Python dasturlash tilida Print funksiyasini ko'rib chiqamiz.                      `Print `- bu Pythondagi mahsus funksiya bo'lib ,() ichida berilgan matn yoki ifodalarni ekranga (konsolga) chiqarib beradi.

Misol uchun
hiiiaaaaaaaaaaaaaaaaaaaaaaaaaaa
Published: 2023-03-23 04:24:28

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa      beautify
Print() - funksiyasi xaqida .
Tags: webdev, beginners, python, tutorial
Published: 2023-03-23 04:24:18

Assalamu aleykum xurmatli  dasturchi bugun siz bn Python dasturlash tilida Print funksiyasini ko'rib chiqamiz.                      `Print `- bu Pythondagi mahsus funksiya bo'lib ,() ichida berilgan matn yoki ifodalarni ekranga (konsolga) chiqarib beradi.

**Misol uchun**

```
print("Hello World")
print("Assalamu alaykum")
print("Salom Dunyo")
```

```
Hello World 
Assalamu aleykum
Salom dunyo
```
`print(Hayirli tong!)`

**Natija :** SyntaxError : invalid syntax

Bu safar esa Hayrli tong ! yozuvi o'rniga , Sytax Error (sinteksda xatolik)xabar chiqadi . Xatolik qayerda ?

Avval aytdganimizdek , `print()`funksiyasi matn yoki ifodalarni konsolga chiqarish vazifasini bajaradi . Lekin bu funksiya to'g'ri ishlashi uchun bir nechta qoidalarga amal qilish lozim . Jumladan ,agar konsolga matn chiqarmoqchi bo'lsak motnimiz albata qo'shtirnoq yoki birtirnoq ichida bo'lishi kk. Demak Hayirli tomg ! so'zini konsolga chiqarirish uch to'g'ri kod :

```
print("Hayirli tong !")
print('Hayirli tong')
print("Biz Pythinda dasturlash tilinio'rganishni boshladik ")
print('Biz Python dasturlash tili judayam qiziq ekan')
```
print()- funksiyasi xaqida
Tags: webdev, beginners, programming, tutorial
Published: 2023-03-23 04:24:17

Assalomu aleykum xurmatli dasturchi bugun siz bilan Python dasturlash tillida `Print()`- funksiyasini korib chiqamiz.Dasturlash tillida `Print()`shunday narsaki uning yordamida siz qandaydur yozuvni, yoki raqamlarni 

console ga chiqarishimiz mumkin` ()`yordamida qilamiz yaniy qavs ochamiz, keyin qoshtirnoq yoki birtirnoq yordamida yozuv yozamiz . agar yozadgon narsamiz xarflardan iborat bolsa qoshtirnoq qoyishimiz shart raqamladan iborat bolsa shart emas.

**misol uchun:**

```
print("hello world")
print(23 03 2023)
print("Assalomu aleykum")
```
**xozirgi yozgan kodimizni natijasi:**

```
hello world
23 03 2023
Assalomu aleykum
```
"print(hayirli tong)"
**natija:**syntaxerror: invalid syntax
bu safar esa hayirlitong yozuvi orniga, Syntax Error 
(sinteksda xatolik) xabari chiqdi. xatolik qayerda.

Avval aytganimizdey, 'print()' funktsiyasi matn yoki ifodalarning consolga chiqarish vazifasini bajaradi. Lekin bu funktsiya tog'ri ishlashi uchun bir nechta qoidalarga amal qilish lozim. Jumladan , agar consolga matn chiqarmoqchi birtirnoq ('') orasida yozilishi shart . demak hayirli tong sozini consolga uchun to'gri kod:

```
print("hayirli tong")
print('hayirli tong')
print("biz python dasturlash tillini o'rganish boshladik")
print ('biz pyhotn dasturlash tillini o'rganish boshladik')
```
print()- funksiyasi xaqida
Tags: webdev, beginners, programming, tutorial
Published: 2023-03-23 04:21:18

Assalomu aleykum xurmatli dasturchi bugun siz bilan Python dasturlash tillida `Print()`- funksiyasini korib chiqamiz.Dasturlash tillida `Print()`shunday narsaki uning yordamida siz qandaydur yozuvni, yoki raqamlarni 

> console ga chiqarishimiz mumkin` ()`yordamida qilamiz yaniy qavs ochamiz, keyin qoshtirnoq yoki birtirnoq yordamida yozuv yozamiz . agar yozadgon narsamiz xarflardan iborat bolsa qoshtirnoq qoyishimiz shart raqamladan iborat bolsa shart emas.

**misol uchun:**

```
print("hello world")
print(23 03 2023)
print("Assalomu aleykum")
```
**xozirgi yozgan kodimizni natijasi:**

```
hello world
23 03 2023
Assalomu aleykum
```
"print(hayirli tong)"
**natija:**syntaxerror: invalid syntax
bu safar esa hayirlitong yozuvi orniga, Syntax Error 
(sinteksda xatolik) xabari chiqdi. xatolik qayerda.

Avval aytganimizdey, 'print()' funktsiyasi matn yoki ifodalarning consolga chiqarish vazifasini bajaradi. Lekin bu funktsiya tog'ri ishlashi uchun bir nechta qoidalarga amal qilish lozim. Jumladan , agar consolga matn chiqarmoqchi birtirnoq ('') orasida yozilishi shart . demak hayirli tong sozini consolga uchun to'gri kod:

```
print("hayirli tong")
print('hayirli tong')
print("biz python dasturlash tillini o'rganish boshladik")
print ('biz pyhotn dasturlash tillini o'rganish boshladik')
```
Print () - funksiyasi xaqida
Tags: webdev, python, beginners, tutorial
Published: 2023-03-23 04:20:44

Asslamu alaykum xurmatli dasturchi bugun siz bilan Python dasturlash tilida  `Print()` - funksiyasini korib chiqamiz

`Print ()` - bu kodlarni konsolga chiqarib beradi.
`Print()` funksiya qandaydir malumotni consolga chiqarib beradi
`Print()` dan har qancha chiqarsak boladi

**Kelin endi misollar koramiz:**

```
print ("Hello World")
print ("Assalomu alaykum")
print ("Hayr Dunyo ")
```
`Xozirgi yozgan kodimizni Natijasi:`

```
Hello World
Assalomu alaykum
Hayr Dunyo
```
Natija: SyntaxError:invalid syntax
Bu safar esa Hayrli tong! yozuvi o'rniga,Syntax Error (sinteksda xatolik) xabari chiqdi.Xatolik qayerda?

Avval aytganimizdek aytganimizdek,` print ()` funksiyasi matn yoki ifodalarnin konsolga chiqarish vazifasi bajaradi.Lekin bu funksiyasi to'g'ri  ishlashni uchun bir nechta qoidalarga amal qilish lozim.Jumladan agar konsolga matn chiqarmoqchi bo'lsak matinimiz albatta qo'shtirnoq  yoki` (" ") `yoki birtirnoq `(' ') `orasida yozilishi kerak Demak Hayrli tong! so'zini konsolga chiqarish uchun togri kod:


```
print ("Hayrli tong!")
print ('Hayrli tong!')
print ("Biz Pythonda dasturlash tilini o'rganishni boshladik")
print ('Biz Python dasturlash tilini judayam qiziq ekan')
```
print()-funksiyasi haqida.
Tags: webdev, beginners, python, tutorial
Published: 2023-03-23 04:12:29

Assalomu aleykum xurmatli dasturchi bugun biz siz bilan Python dasturlash tilida `Print()`-funksiyasini korib chiqamiz.
`print()`-bu biz `()`ichiga yozgan narsamizni |>console ga chiqarib beruvchi funksiya.

**Misol uchun:**

```
print("Hello World")
print("assalomu aleykum")
print(2+2)
```
**Xozirgi yozgan codimizni natijasi:**
```
Hello World
assalomu aleykum
4
```
`print(hayrli tong!)`

**natija:**SytaxError: invalid syntax

bu safar esa Hayrli tong! yozivi orniga,Syntax Error(sinteksda xatolik)xabari chiqdi. xatolik qayreda?

Avval yatganimizdek ,`printy()`funksiyasi matn yoki ifodalrni conslga chiqarish vazifasini bajaradi.Lekin bu funksiya togri ishlashi uchun bir nechta qoidlarga amal qilish lozim.Jumladan,agar consolga matn chiqarmoqchi bolsak matinimiz albatta qoshtirnoq yoki `("")`yoki birtirnoq `(' ')`orasida yozilshi kerak.Demak Hayrli tong!sozini konsolga chiqarish uchun togri kod:

```
print("hayrli tong!")
print('hayrli tong!')
print("biz python dasturlash tilini organishni boshladik")
print(' python dasturlash tili judayam qiziq ekan') 
```
openGauss routine maintenance: routine index rebuilding
Published: 2023-03-23 04:07:50

Routine rebuild index
Background Information
After the database has been deleted many times, the index keys on the index page will be deleted, causing the index to bloat. Rebuilding indexes routinely can effectively improve query efficiency.

The index type supported by the database is B-tree index, and routine index rebuilding can effectively improve query efficiency.

If a large amount of data is deleted, the index keys on the index pages will be deleted, resulting in a decrease in the number of index pages and causing index inflation. Rebuilding indexes reclaims wasted space.
The logically adjacent pages in the newly created index are usually adjacent in the physical structure, so a newly created index is faster to access than an index that has been updated multiple times.
rebuild index
There are two ways to rebuild the index:

First run the DROP INDEX statement to delete the index, and then run the CREATE INDEX statement to create the index.

During the process of deleting the index, a short-term exclusive lock will be added on the parent table to prevent related read and write operations. During index creation, write operations are locked but read operations are not locked. At this time, read operations can only use sequential scans.

Rebuild indexes using the REINDEX statement.

Using the REINDEX TABLE statement to rebuild an index will add an exclusive lock during the rebuilding process to prevent related read and write operations.
Using the REINDEX INTERNAL TABLE statement to rebuild the index of the desc table (including the cudesc table of the column-stored table) will add an exclusive lock during the rebuilding process to prevent related read and write operations.
Steps
Assume that there is a normal index "areaS_idx" on the "area_id" field on the imported table "areaS". There are two ways to rebuild the index:

First delete the index (DROP INDEX), and then create the index (CREATE INDEX).

Delete the index.

openGauss=# DROP INDEX areaS_idx;
When the result shows the following information, it means the deletion is successful.

DROP INDEX
Create indexes.

openGauss=# CREATE INDEX areaS_idx ON areaS (area_id);
When the result displays the following information, it means the creation is successful.

CREATE INDEX
Use REINDEX to rebuild the index.

Rebuild indexes using the REINDEX TABLE statement.

openGauss=# REINDEX TABLE areaS;
When the result displays the following information, it means the reconstruction is successful.

REINDEX
Use REINDEX INTERNAL TABLE to rebuild the indexes of the desc table (including the cudesc table of the column-stored table).

openGauss=# REINDEX INTERNAL TABLE areaS;
When the result displays the following information, it means the reconstruction is successful.

REINDEX
Note:  Before rebuilding the index, users can temporarily increase the values ​​of maintenance_work_mem and psort_work_mem to speed up index rebuilding.
openGauss routine maintenance: export and view wdr diagnostic report
Tags: opengauss
Published: 2023-03-23 04:06:23

Export and view wdr diagnostic report
The parameter enable_wdr_snapshot=on is required to generate snapshot data, and sysadmin or monadmin authority is required to access WDR snapshot data, so root account or other account with authority needs to be used to generate WDR diagnosis report.

1、Execute the following command to create a new report file.

touch  /home/om/wdrTestNode.html
2、Connect the system library postgres.

gsql -d postgres -p 端口号 -r
3、Select two different snapshots in the snapshot.snapshot table. When no service restart occurs between the two snapshots, the two snapshots can be used to generate reports.

openGauss=#  select * from snapshot.snapshot order by start_ts desc limit 10;
4、Run the following command to generate a WDR report in HTML format locally.

Run the following command to set the report format. \a: do not display table row and column symbols, \t: do not display column names, \o: specify the output file.

openGauss=# \a \t \o {报告路径}
Example:

openGauss=# \a \t \o /home/omm/wdrTestNode.html
Run the following command to generate a WDR report in HTML format.

openGauss=# select generate_wdr_report(begin_snap_id Oid, end_snap_id Oid, int report_type, int report_scope, int node_name );
Example 1, generate a cluster-level report:

openGauss=# select generate_wdr_report(1, 2, 'all', 'cluster',null);
Example 2, generate a report for a node:

openGauss=# select generate_wdr_report(1, 2, 'all', 'node', pgxc_node_str()::cstring);
illustrate:

The current node name of openGauss is fixed as "dn_6001", which can also be substituted directly.

5、Execute the following command to close the output option and format the output command.

\o \a \t 
6、View the content of the WDR report under /home/om/ as required.
openGauss routine maintenance: data security maintenance recommendations
Tags: opengauss
Published: 2023-03-23 04:02:12

Data Security Maintenance Suggestions
In order to ensure the data security in the openGauss database and avoid accidents such as data loss and illegal access to data, please read the following contents carefully.

prevent data from being lost
It is recommended that users plan periodic physical backups and store backup files reliably. In the case of a serious error in the system, the backup file can be used to restore the system to the state before the backup.

Prevent data from being illegally accessed
It is recommended to implement hierarchical authority management for database users. The database administrator establishes users and grants permissions according to business needs, ensuring reasonable access to the database by each user.
For openGauss servers and clients (or applications developed based on client libraries), it is best to deploy them in a trusted intranet. If the server and client must be deployed in an untrusted network, SSL encryption needs to be enabled before the service is started to ensure the security of data transmission on the untrusted network. It should be noted that turning on SSL encryption will reduce the performance of the database.
Avoid system logs leaking personal data
Please remove personal data before sending debug logs to others for analysis.

Note:  When the log level (log_min_messages) is set to DEBUGx (x is the DEBUG level, the value range is 1~5), the information recorded in the debug log may contain the user's personal data.

Please delete personal data before sending system logs to others for analysis. Because in the default configuration, when an SQL statement is executed incorrectly, the error SQL statement will be recorded in the log, and these SQL statements may contain user personal data.

Setting the value of the log_min_error_statement parameter to PANIC can prevent the error SQL statement from being recorded in the system log. If this function is disabled, when a fault occurs, it is difficult to locate the cause of the fault.
1319. Leetcode Solution in cpp
Tags: cpp
Published: 2023-03-23 03:36:05

```cpp
class Solution {
 public:
  int makeConnected(int n, vector<vector<int>>& connections) {
    // to connect n nodes, we need at least n - 1 edges
    if (connections.size() < n - 1)
      return -1;

    int numOfConnected = 0;
    vector<vector<int>> graph(n);
    unordered_set<int> seen;

    for (const auto& conn : connections) {
      graph[conn[0]].push_back(conn[1]);
      graph[conn[1]].push_back(conn[0]);
    }

    for (int i = 0; i < n; ++i)
      if (seen.insert(i).second) {
        dfs(graph, i, seen);
        ++numOfConnected;
      }

    return numOfConnected - 1;
  }

 private:
  void dfs(const vector<vector<int>>& graph, int u, unordered_set<int>& seen) {
    for (const int v : graph[u])
      if (seen.insert(v).second)
        dfs(graph, v, seen);
  }
};
```
#leetcode
#challenge
Here is the link for the problem:
https://leetcode.com/problems/number-of-operations-to-make-network-connected/
JavaScript || (Logical OR) vs ?? (Nullish Coalescing)
Tags: javascript
Published: 2023-03-23 02:56:38

?? is falsy if the variable is null or undefined
|| is falsy if the variable is empty, zero, false, null or undefined

```
console.log(120 || "falsy") // 120
console.log(0  || "falsy") // "falsy"

console.log("truly" || "falsy") // "truly"
console.log(""     || "falsy") // "falsy"

console.log(true  || "falsy") // true
console.log(false || "falsy") // "falsy"

console.log(undefined || "falsy") // "falsy"
console.log(null      || "falsy") // "falsy"
```

```
console.log(120 ?? "falsy") // 120
console.log(0  ?? "falsy") // 0

console.log("truly" ?? "falsy") // "truly"
console.log(""     ?? "falsy") // ""

console.log(true  ?? "falsy") // true
console.log(false ?? "falsy") // false

console.log(undefined ?? "falsy") // "falsy"
console.log(null      ?? "falsy") // "falsy"
```
Comparing Two RESTful APIs With JMeter
Tags: testing, tutorial
Published: 2023-03-23 02:51:13

JMeter is commonly used for performance testing, but it can do more than that. In this post, we explore how to compare two RESTful APIs.



## Comparing API Results

Sometimes, you might need to compare the results of two RESTful API responses.

To do this, you should first create a **Thread Group** and add a **Simple Logic Controller**.

Within the **Simple Controller**, you can now add the two HTTP requests that you want to compare.
You should have a structure similar to the following:


![jmeter structure](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/msmp6m0d1t0xbd9m9cec.png)


For simplicity, let’s assume both endpoints return a JSON structure with a unique identifier, and it’s enough to compare if all the identifiers are present and in order.

A JSON extractor can be used to run JSON Path expressions against a JSON response.
A variety of options in the JSON extractor:

- **Variable Names**: this is a required field and needed for later
- **JSON Path expression:** again a required field, here we describe the value we’d like to extract
- **Match No:** you can adjust which values to extract,
    - -1 to extract all
    - 0 for random extraction
    - N (any number) to extract the result at position N
- **Compute concatenation var:** this will concatenate results by using `,` as separator

![JMETER json extractor](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nob9y4zaik6djsgzpnkz.gif)

As you can see we will set the Variable name to `v1id`, we try to extract id's with `$..id`, match any result by setting matching no. to `-1` and concatenate the results. 

You should repeat the same step for the second HTTP request, but be aware to change the variable name or you will overwrite the results. 

To Compare the two results we can add a **JSR223Sampler** (groovy sampler) to the **Simple Controller**

Add the following code to the sampler to compare the results of the JSON extractor

```groovy
if(vars.get("v1id_ALL") != vars.get("v2id_ALL")){
	log.error("got: "+vars.get("v2id_ALL")+" \n want: "+vars.get("v1id_ALL"))
	SampleResult.setSuccessful(false)
}
```
> the sampler should be last in the simple controller to not be executed before the HTTP requests

Within a **View Result Tree Listener** you can see the sampler failing if id's don't match. You can also see a error message in the jmeter log file if you want to see the exact result. 

But there is more we can compare. 
We might be interested in the response time, maybe our new API should be faster than the previous version. 
To do this we can add a **JSR223Sampler** to each HTTP requests with the following code 
```groovy
vars.put("responseTimeV1", String.valueOf(prev.getTime()));
```

And we can then again compare the two variables in the sampler of the simple controller.


You can do more with JMeter than just the traditional performance testing. You could even add functional tests within the above test plan. This allows you to manage all your tests with one tool, making your test setup hopefully simpler by using less tools.
How can you differentiate between Good Code Vs Bad Code
Tags: devjournal, coding, programming, beginners
Published: 2023-03-23 02:30:00

Writing good code is crucial for building successful software. However, not all code is created equal. Some code is efficient, reliable and easy to understand while other code is messy, error-prone and hard to maintain.

Here are 7 differences you must know between Good Code Vs Bad Code:

## Difference 1
Good code is easy to process by our limited human minds. Vs Bad Code is difficult to understand and suffocating to read.


## Difference 2
Good Code makes us go faster in the long run. Vs Bad Code slows us down with time.

## Difference 3
Good Code is well-tested and easy to refactor. Vs In bad code, there are no tests and changing even a single line scares developers.

## Difference 4
Good Code is not clever. Vs In Bad Code, cleverness is scattered all across the codebase.

## Difference 5
In Good Code, there aren't extraneous dependencies among classes. Vs In Bad Code, dependencies are intertwined together.

## Difference 6
Good Code makes noise if anything goes wrong. Bad Code keep things silent and fails quietly if anything goes wrong.

## Difference 7
Good Code is well-documented and well-written for humans. Vs In Bad Code, there is no documentation and it is written for machines.


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


Thanks for reading this.

If you have an idea and want to build your product around it, schedule a call with [me](https://calendly.com/pragyanatvade).

If you want to learn more about DevOps and Backend space, [follow me](https://dev.to/pragyanatvade).

If you want to connect, reach out to me on [Twitter](https://twitter.com/pragyanatvade) and [LinkedIn](https://www.linkedin.com/in/pragyanatvade/).
Designing a data recovery strategy
Tags: devops, cloud, serverless
Published: 2023-03-23 02:48:51

Hi everyone. If this is considered spam, lmk and I'll take it down.

I work with Rewind and we have a thing coming up on March 31, where our CloudOps team is walking through the process of drafting and testing our data recovery strategies. Things like who is involved, what's in a runbook, ways to test the strategy (we do tabletop), and so on.

We are hoping to get some others to join us (it's basically an AMA format) to share stuff they have picked up over the years. Here's a link if anyone is interested: [https://rewind.com/mistakes-to-avoid-when-designing-your-data-recovery-strategy](https://rewind.com/mistakes-to-avoid-when-designing-your-data-recovery-strategy)