finish markdown linting
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
vincent 2021-04-20 23:13:14 +02:00
parent e39d6dcee3
commit efbd8ba596
41 changed files with 334 additions and 231 deletions

View File

@ -4,3 +4,5 @@ MD009:
strict: false
MD013: false
MD033: false
MD024: false

View File

@ -5,6 +5,6 @@
- Jus de citron vert 4cl
- Eau gazeuse 12 cl
## Indication
## Indication
- Mélange à réaliser au shaker avant d'ajouter l'eau gazeuse.

View File

@ -1,4 +1,4 @@
# Sex on the beach
# Sex on the beach
- Vodka 3cl
- Chambord 2cl

View File

@ -1,3 +1,5 @@
# lien
[site permettant d'avoir les prox d'achat de masion ou terrain](https://app.dvf.etalab.gouv.fr)
[liste api public](https://github.com/public-apis/public-apis)
[liste api public](https://github.com/public-apis/public-apis)

View File

@ -1,4 +1,5 @@
# Mental Model
## Links
- [Ask HN: Which books teach mental models?](https://news.ycombinator.com/item?id=19895407)

View File

@ -1,3 +1,5 @@
# hey hey my my
Hey hey, my my
Rock and roll can never die
There's more to the picture
@ -21,4 +23,4 @@ My my, hey hey
Rock and roll is here to stay
It's better to burn out
Than to fade away
My my, hey hey
My my, hey hey

View File

@ -1,7 +1,9 @@
>Se vouloir libre, c'est aussi vouloir les autres libres
# citations
> Se vouloir libre, c'est aussi vouloir les autres libres
simone de beauvoir
>Les ordinateurs ne sont pas le truc. Ils sont le truc qui nous conduit au truc
Halte and catch fire

View File

@ -1,26 +1,27 @@
# eldorado
Un chevalier
sur son coursier,
jour et nuit au grand galop
, courut longtemps
tout en chantant.
Il cherchait l'El Dorado,
au-delà des monts
tout en chantant.
Il cherchait l'El Dorado,
au-delà des monts
les plus hauts,
dans les profondeurs de la terre,
dans les profondeurs de la terre,
poursuivant sa chimère !
A moitié mort,
marchant encore,
A moitié mort,
marchant encore,
il vit une ombre au grand galop.
Il lui cria, "
Ombre dis-moi, suis-je encore loin d'El Dorado ?
"
"
"
Au-delà des monts
les plus hauts,
les plus hauts,
dans les profondeurs de la terre,
chevauche sans repos,
dit l'ombre solitaire,
dit l'ombre solitaire,
si tu cherches El Dorado !
"

View File

@ -1,4 +1,5 @@
# littanie contre la peur
Je ne connaîtrai pas la peur, car la peur tue l'esprit. La peur est la petite mort qui conduit à l'oblitération totale. J'affronterai ma peur. Je lui permettrai de passer sur moi, au travers de moi. Et lorsqu'elle sera passée, je tournerai mon œil intérieur sur son chemin. Et là où elle sera passée, il n'y aura plus rien. Rien que moi.
I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.

View File

@ -6,13 +6,14 @@
- On n'est pas là pour sucer des glaçons
## audiart
- Le jour où on mettra les cons sur orbite, t'as pas fini de tourner
- Les cons, ça ose tout. C'est même à ça qu'on les reconnaît
- Dans la vie on partage toujours les emmerdes, jamais le pognon.
## inspecteur harry
> - Lorsque je vois un adulte du sexe masculin courir derrière une femelle avec lintention évidente de la violer, je le descends avant, cest ma politique.
> - Lintention ? Elle restait à établir.
> - Quand un gars à poil court derrière une fille la queue en lair avec un couteau de boucher à la main, cest drôle, jai peine à croire quil est en train de quêter pour la croix rouge.
- les avis c'est comme les trous du cul tout le monde en a un
> Lorsque je vois un adulte du sexe masculin courir derrière une femelle avec lintention évidente de la violer, je le descends avant, cest ma politique.
> Lintention ? Elle restait à établir.
> Quand un gars à poil court derrière une fille la queue en lair avec un couteau de boucher à la main, cest drôle, jai peine à croire quil est en train de quêter pour la croix rouge.
> les avis c'est comme les trous du cul tout le monde en a un

View File

@ -1 +1,3 @@
# République Alamo
République. Jaime le son de ce mot. Il signifie que les gens peuvent vivre libres, parler comme bon leur semble, aller et venir, acheter ou vendre, senivrer ou rester sobres, selon leurs désirs. Certains mots vous font vibrer. République est lun de ces mots qui me nouent la gorge la même sensation qui sempare du père voyant voit son bébé faire ses premiers pas ou son premier enfant entreprendre de se raser et parler comme un homme. Certains mots vous réchauffent le cœur. République est lun de ces mots.

View File

@ -1,4 +1,6 @@
# Voyez Cela (13 éme guerrier)
Voyez cela je vois mon père.
Voyez cela je vois ma mère et mes sœurs et mes frères.
Voyez cela je vois tous mes ancêtres qui sont assis et me regardent.
Et voilà, voilà quils mappellent et me demandent de prendre place à leurs côtés dans le palais de Valhalla là ou les braves vivent à jamais.
Et voilà, voilà quils mappellent et me demandent de prendre place à leurs côtés dans le palais de Valhalla là ou les braves vivent à jamais.

View File

@ -1 +1,3 @@
# JS
[Javascript without JQuery](https://github.com/nefe/You-Dont-Need-jQuery)

View File

@ -704,8 +704,7 @@ deux conception:
- diferentille: enregistre les pages modifiées depuis la derniére sauvegarde compléte et les transactions qui ont eu lieu pendant la sauvegarde
- journal de transactions: enregistre mes transactions qui ont eu lieu depuis la derniére sauvegarde
- journal de transactions: enregistre mes transactions qui ont eu lieu depuis la derniére sauvegarde
### mode de récupération
@ -713,9 +712,9 @@ deux conception:
- bulk logged
- simple
### syntaxe de commande
### syntaxe de commande
complete
complete
BAckup DATABASE
@ -723,7 +722,7 @@ differentiel
Backup DATABASE WITH DIFFERENTIAL
transactionelle
transactionelle
BAckup LOG
@ -737,11 +736,11 @@ il est possible d'envoyer la sauvegarde sur plusieur fichier en paralléle chaqu
il est aussi possible d'envoyer la sauvegarde sur diferent device
### compresioon
### compresioon
WITH COMPRESSION
gain sur le temps de sauvegarde
gain sur le temps de sauvegarde
gain important sur le temps de restauration
gain importants sur le volume
@ -755,7 +754,6 @@ RESTORE FILELISTONLY list les fichier restaurable pour l'in des sauvegarde conte
RESTORE VERIFYONLY: controle la sauvegarde
## surveillance et performance
### Historisation des données
@ -768,17 +766,16 @@ Tables temporelles:
l'intervalle de temps est ouvert a droite fermée a gauche
interrogation temporelle
- as-of
- from
- between
- contained in
- contained in
- all
### verrouillages et blocages
mode de verrouillage pessimiste par default
mode de verrouillage pessimiste par default
- une écriture bloque la lecture et l'écriture d'autre processus
- le verrouillafe peut entrainner des: wait,Blocage,deadlock

View File

@ -5,41 +5,54 @@ if not done you can meet issue during request
## action
**need to have postgresqk-old-upgrade installed on arch**
need to have **postgresqk-old-upgrade** installed on arch
- stop service
```systemctl stop postgresql.service```
- rename cluster directory
```mv /var/lib/postgres/data /var/lib/postgres/olddata
```bash
mv /var/lib/postgres/data /var/lib/postgres/olddata
mkdir /var/lib/postgres/data /var/lib/postgres/tmp
chown postgres:postgres /var/lib/postgres/data /var/lib/postgres/tmp
```
- log in postgres account
```
```bash
sudo -iu postgres
cd /var/lib/postgres/tmp
```
```
- launch upgrade
```
```bash
pg_upgrade -b /opt/pgsql-PG_VERSION/bin -B /usr/bin -d /var/lib/postgres/olddata -D /var/lib/postgres/data
```
- check both pg_hba.conf in new and old cluster
- restart server `sc-start postgresql`
# sequece manipulation
## sequece manipulation
sequence are use to generate uniq identifier
- get sequence value
```SQL
select * from name_seq;
```
- increment sequence value
```SQL
select nextval(name_seq);
```
- set sequence value:
```SQL
select setval(name_seq,newvalue);
```
```

View File

@ -1,29 +1,36 @@
# Quick SQL Cheatsheet
# SQL Cheatsheet
A quick reminder of all relevant SQL queries and examples on how to use them.
## Quick SQL Cheatsheet
This repository is constantly being updated and added to by the community.
A quick reminder of all relevant SQL queries and examples on how to use them.
This repository is constantly being updated and added to by the community.
Pull requests are welcome. Enjoy!
# Table of Contents
1. [ Finding Data Queries. ](#find)
2. [ Data Modification Queries. ](#modify)
3. [ Reporting Queries. ](#report)
4. [ Join Queries. ](#joins)
5. [ View Queries. ](#view)
6. [ Altering Table Queries.](#alter)
7. [ Creating Table Query.](#create)
## Table of Contents
1. [Finding Data Queries.](#find)
2. [Data Modification Queries.](#modify)
3. [Reporting Queries.](#report)
4. [Join Queries.](#joins)
5. [View Queries.](#view)
6. [Altering Table Queries.](#alter)
7. [Creating Table Query.](#create)
<a name="find"></a>
# 1. Finding Data Queries
## 1. Finding Data Queries
### **SELECT**: used to select data from a database
* `SELECT` * `FROM` table_name;
### **DISTINCT**: filters away duplicate values and returns rows of specified column
* `SELECT DISTINCT` column_name;
### **WHERE**: used to filter records/rows
* `SELECT` column1, column2 `FROM` table_name `WHERE` condition;
* `SELECT` * `FROM` table_name `WHERE` condition1 `AND` condition2;
* `SELECT` * `FROM` table_name `WHERE` condition1 `OR` condition2;
@ -32,17 +39,20 @@ Pull requests are welcome. Enjoy!
* `SELECT` * `FROM` table_name `WHERE EXISTS` (`SELECT` column_name `FROM` table_name `WHERE` condition);
### **ORDER BY**: used to sort the result-set in ascending or descending order
* `SELECT` * `FROM` table_name `ORDER BY` column;
* `SELECT` * `FROM` table_name `ORDER BY` column `DESC`;
* `SELECT` * `FROM` table_name `ORDER BY` column1 `ASC`, column2 `DESC`;
### **SELECT TOP**: used to specify the number of records to return from top of table
* `SELECT TOP` number columns_names `FROM` table_name `WHERE` condition;
* `SELECT TOP` percent columns_names `FROM` table_name `WHERE` condition;
* Not all database systems support `SELECT TOP`. The MySQL equivalent is the `LIMIT` clause
* `SELECT` column_names `FROM` table_name `LIMIT` offset, count;
### **LIKE**: operator used in a WHERE clause to search for a specific pattern in a column
* % (percent sign) is a wildcard character that represents zero, one, or multiple characters
* _ (underscore) is a wildcard character that represents a single character
* `SELECT` column_names `FROM` table_name `WHERE` column_name `LIKE` pattern;
@ -54,26 +64,31 @@ Pull requests are welcome. Enjoy!
* `LIKE` [a-c]% (find any values starting with “a”, “b”, or “c”
### **IN**: operator that allows you to specify multiple values in a WHERE clause
* essentially the IN operator is shorthand for multiple OR conditions
* `SELECT` column_names `FROM` table_name `WHERE` column_name `IN` (value1, value2, …);
* `SELECT` column_names `FROM` table_name `WHERE` column_name `IN` (`SELECT STATEMENT`);
### **BETWEEN**: operator selects values within a given range inclusive
* `SELECT` column_names `FROM` table_name `WHERE` column_name `BETWEEN` value1 `AND` value2;
* `SELECT` * `FROM` Products `WHERE` (column_name `BETWEEN` value1 `AND` value2) `AND NOT` column_name2 `IN` (value3, value4);
* `SELECT` * `FROM` Products `WHERE` column_name `BETWEEN` #01/07/1999# AND #03/12/1999#;
### **NULL**: values in a field with no value
* `SELECT` * `FROM` table_name `WHERE` column_name `IS NULL`;
* `SELECT` * `FROM` table_name `WHERE` column_name `IS NOT NULL`;
### **AS**: aliases are used to assign a temporary name to a table or column
* `SELECT` column_name `AS` alias_name `FROM` table_name;
* `SELECT` column_name `FROM` table_name `AS` alias_name;
* `SELECT` column_name `AS` alias_name1, column_name2 `AS` alias_name2;
* `SELECT` column_name1, column_name2 + , + column_name3 `AS` alias_name;
### **UNION**: set operator used to combine the result-set of two or more SELECT statements
* Each SELECT statement within UNION must have the same number of columns
* The columns must have similar data types
* The columns in each SELECT statement must also be in the same order
@ -81,115 +96,147 @@ Pull requests are welcome. Enjoy!
* `UNION` operator only selects distinct values, `UNION ALL` will allow duplicates
### **INTERSECT**: set operator which is used to return the records that two SELECT statements have in common
* Generally used the same way as **UNION** above
* `SELECT` columns_names `FROM` table1 `INTERSECT SELECT` column_name `FROM` table2;
### **EXCEPT**: set operator used to return all the records in the first SELECT statement that are not found in the second SELECT statement
* Generally used the same way as **UNION** above
* `SELECT` columns_names `FROM` table1 `EXCEPT SELECT` column_name `FROM` table2;
### **ANY|ALL**: operator used to check subquery conditions used within a WHERE or HAVING clauses
* The `ANY` operator returns true if any subquery values meet the condition
* The `ALL` operator returns true if all subquery values meet the condition
* `SELECT` columns_names `FROM` table1 `WHERE` column_name operator (`ANY`|`ALL`) (`SELECT` column_name `FROM` table_name `WHERE` condition);
### **GROUP BY**: statement often used with aggregate functions (COUNT, MAX, MIN, SUM, AVG) to group the result-set by one or more columns
* `SELECT` column_name1, COUNT(column_name2) `FROM` table_name `WHERE` condition `GROUP BY` column_name1 `ORDER BY` COUNT(column_name2) DESC;
### **HAVING**: this clause was added to SQL because the WHERE keyword could not be used with aggregate functions
* `SELECT` `COUNT`(column_name1), column_name2 `FROM` table `GROUP BY` column_name2 `HAVING` `COUNT(`column_name1`)` > 5;
### **WITH**: often used for retrieving hierarchical data or re-using temp result set several times in a query. Also referred to as "Common Table Expression"
* `WITH RECURSIVE` cte `AS` (<br/>
&nbsp;&nbsp;`SELECT` c0.* `FROM` categories `AS` c0 `WHERE` id = 1 `# Starting point`<br/>
&nbsp;&nbsp;`SELECT` c0.\* `FROM` categories `AS` c0 `WHERE` id = 1 `# Starting point`<br/>
&nbsp;&nbsp;`UNION ALL`<br/>
&nbsp;&nbsp;`SELECT` c1.* `FROM` categories `AS` c1 `JOIN` cte `ON` c1.parent_category_id = cte.id<br/>
&nbsp;&nbsp;`SELECT` c1.\* `FROM` categories `AS` c1 `JOIN` cte `ON` c1.parent_category_id = cte.id<br/>
)<br/>
`SELECT` *<br/>
`FROM` cte
<a name="modify"></a>
# 2. Data Modification Queries
## 2. Data Modification Queries
### **INSERT INTO**: used to insert new records/rows in a table
* `INSERT INTO` table_name (column1, column2) `VALUES` (value1, value2);
* `INSERT INTO` table_name `VALUES` (value1, value2 …);
### **UPDATE**: used to modify the existing records in a table
* `UPDATE` table_name `SET` column1 = value1, column2 = value2 `WHERE` condition;
* `UPDATE` table_name `SET` column_name = value;
### **DELETE**: used to delete existing records/rows in a table
* `DELETE FROM` table_name `WHERE` condition;
* `DELETE` * `FROM` table_name;
<a name="report"></a>
# 3. Reporting Queries
## 3. Reporting Queries
### **COUNT**: returns the # of occurrences
* `SELECT COUNT (DISTINCT` column_name`)`;
### **MIN() and MAX()**: returns the smallest/largest value of the selected column
* `SELECT MIN (`column_names`) FROM` table_name `WHERE` condition;
* `SELECT MAX (`column_names`) FROM` table_name `WHERE` condition;
### **AVG()**: returns the average value of a numeric column
* `SELECT AVG (`column_name`) FROM` table_name `WHERE` condition;
### **SUM()**: returns the total sum of a numeric column
* `SELECT SUM (`column_name`) FROM` table_name `WHERE` condition;
<a name="joins"></a>
# 4. Join Queries
### **INNER JOIN**: returns records that have matching value in both tables
## 4. Join Queries
### **INNER JOIN**: returns records that have matching value in both tables
* `SELECT` column_names `FROM` table1 `INNER JOIN` table2 `ON` table1.column_name=table2.column_name;
* `SELECT` table1.column_name1, table2.column_name2, table3.column_name3 `FROM` ((table1 `INNER JOIN` table2 `ON` relationship) `INNER JOIN` table3 `ON` relationship);
### **LEFT (OUTER) JOIN**: returns all records from the left table (table1), and the matched records from the right table (table2)
* `SELECT` column_names `FROM` table1 `LEFT JOIN` table2 `ON` table1.column_name=table2.column_name;
### **RIGHT (OUTER) JOIN**: returns all records from the right table (table2), and the matched records from the left table (table1)
* `SELECT` column_names `FROM` table1 `RIGHT JOIN` table2 `ON` table1.column_name=table2.column_name;
### **FULL (OUTER) JOIN**: returns all records when there is a match in either left or right table
* `SELECT` column_names `FROM` table1 ``FULL OUTER JOIN`` table2 `ON` table1.column_name=table2.column_name;
### **Self JOIN**: a regular join, but the table is joined with itself
* `SELECT` column_names `FROM` table1 T1, table1 T2 `WHERE` condition;
<a name="view"></a>
# 5. View Queries
## 5. View Queries
### **CREATE**: create a view
* `CREATE VIEW` view_name `AS SELECT` column1, column2 `FROM` table_name `WHERE` condition;
### **SELECT**: retrieve a view
* `SELECT` * `FROM` view_name;
### **DROP**: drop a view
* `DROP VIEW` view_name;
<a name="alter"></a>
# 6. Altering Table Queries
## 6. Altering Table Queries
### **ADD**: add a column
* `ALTER TABLE` table_name `ADD` column_name column_definition;
### **MODIFY**: change data type of column
* `ALTER TABLE` table_name `MODIFY` column_name column_type;
### **DROP**: delete a column
* `ALTER TABLE` table_name `DROP COLUMN` column_name;
<a name="create"></a>
# 7. Creating Table Query
## 7. Creating Table Query
### **CREATE**: create a table
* `CREATE TABLE` table_name `(` <br />
`column1` `datatype`, <br />
`column2` `datatype`, <br />
`column3` `datatype`, <br />
`column4` `datatype`, <br />
`);`
:q
:q

View File

@ -5,23 +5,25 @@ voir version:
`select @@version`
passer une base en mode single user
` ALTER DATABASE [toto] SET SINGLE_USER WITH ROLLBACK IMMEDIATE`
`ALTER DATABASE [toto] SET SINGLE_USER WITH ROLLBACK IMMEDIATE`
passer en mode multi user
`alter database [toto] set MULTI_USER`
voir la configuration
`exec sp_configure`
activé affichage des option avancé
```SQL
exec sp_configure 'show advanced options', 1;
REconfigure;
```
autorisé la mise en autonomie partielle des bases
```SQL
exec sp_configure 'contained database authentication',1;
reconfigure
@ -39,11 +41,13 @@ reconfigure
```
Backup
```sql
BACKUP DATABASE [toto] TO DISK = 'c:\toto.bak' with Compression
```
ajouter filegroup
```SQL
USE [master]
GO
@ -56,6 +60,7 @@ GO
```
setter filegroup par default
```SQL
USE [DB_GRAND_HOTEL]
GO
@ -63,7 +68,8 @@ IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'F
GO
```
modifier taille de fichier
modifier taille de fichier
```SQL
USE [DB_GRAND_HOTEL]
GO
@ -80,4 +86,4 @@ voir nombre de page utilisé et temps
```SQL
SET STATISTCS IO ON
SET STATISTCS TIME ON
```
```

View File

@ -1,5 +1,6 @@
# CSS
## link
[Bulma style sheet](https://devhints.io/bulma)
[Remove.bg](https://www.remove.bg/)

View File

@ -6,20 +6,19 @@ Adapted from our book and video series, [Refactoring UI](moz-extension://3cbfa46
Ever used one of those fancy color palette generators? You know, the ones where you pick a starting color, tweak some options that probably include some musical jargon like "triad" or "major fourth", and are then bestowed the five perfect color swatches you should use to build your website?
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-01.png)
![pallette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-01.png)
This calculated and scientific approach to picking the perfect color scheme is extremely seductive, but not very useful.
Well, unless you want your site to look like this:
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-02.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-02.png)
What you actually need
----------------------
## What you actually need
You can't build anything with five hex codes. To build something real, you need a much more comprehensive set of colors to choose from.
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-03.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-03.png)
You can break a good color palette down into three categories.
@ -27,13 +26,13 @@ You can break a good color palette down into three categories.
Text, backgrounds, panels, form controls — almost everything in an interface is grey.
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-04.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-04.png)
You'll need more greys than you think, too — three or four shades might sound like plenty but it won't be long before you wish you had something a little darker than shade #2 but a little lighter than shade #3.
In practice, you want 8-10 shades to choose from (more on this later). Not so many that you waste time deciding between shade #77 and shade #78, but enough to make sure you don't have to compromise too much .
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-05.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-05.png)
True black tends to look pretty unnatural, so start with a really dark grey and work your way up to white in steady increments.
@ -43,7 +42,7 @@ Most sites need one, _maybe_ two colors that are used for primary actions, empha
Just like with greys, you need a variety _(5-10)_ of lighter and darker shades to choose from.
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-06.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-06.png)
Ultra-light shades can be useful as a tinted background for things like alerts, while darker shades work great for text.
@ -53,19 +52,19 @@ On top of primary colors, every site needs a few _accent_ colors for communicati
For example, you might want to use an eye-grabbing color like yellow, pink, or teal to highlight a new feature:
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-07.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-07.png)
You might also need colors to emphasize different semantic _states_, like red for confirming a destructive action:
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-08.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-08.png)
...yellow for a warning message:
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-09.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-09.png)
...or green to highlight a positive trend:
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-10.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/whats-in-a-color-palette-10.png)
You'll want multiple shades for these colors too, even though they should be used pretty sparingly throughout the UI.
@ -73,30 +72,27 @@ If you're building something where you need to use color to distinguish or categ
All in, it's not uncommon to need as many as _ten_ different colors with _5-10 shades each_ for a complex UI.
Define your shades up front
---------------------------
## Define your shades up front
When you need to create a lighter or darker variation of a color in your palette, don't get clever using CSS preprocessor functions like "lighten" or "darken" to create shades on the fly. That's how you end up with 35 _slightly_ different blues that all look the same.
Instead, define a fixed set of shades up front that you can choose from as you work.
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/define-your-shades-up-front-01.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/define-your-shades-up-front-01.png)
So how do you put together a palette like this anyways?
Choose the base color first
---------------------------
## Choose the base color first
Start by picking a _base_ color for the scale you want to create — the color in the middle that your lighter and darker shades are based on.
There's no real scientific way to do this, but for primary and accent colors, a good rule of thumb is to pick a shade that would work well as a button background.
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/define-your-shades-up-front-02.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/define-your-shades-up-front-02.png)
It's important to note that there are no real rules here like "start at 50% lightness" or anything — every color behaves a bit differently, so you'll have to rely on your eyes for this one.
Finding the edges
-----------------
## Finding the edges
Next, pick your darkest shade and your lightest shade. There's no real science to this either, but it helps to think about where they will be used and choose them using that context.
@ -104,12 +100,11 @@ The darkest shade of a color is usually reserved for text, while the lightest sh
A simple alert component is a good example that combines both of these use cases, so it can be a great place to pick these colors.
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/define-your-shades-up-front-03.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/define-your-shades-up-front-03.png)
Start with a color that matches the hue of your base color, and adjust the saturation and lightness until you're satisfied.
Filling in the gaps
-------------------
## Filling in the gaps
Once you've got your base, darkest, and lightest shades, you just need to fill in the gaps in between them.
@ -119,25 +114,23 @@ Nine is a great number because it's easy to divide and makes filling in the gaps
Start by picking shades _700_ and _300_, the ones right in the middle of the gaps. You want these shades to feel like the perfect compromise between the shades on either side.
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/define-your-shades-up-front-04.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/define-your-shades-up-front-04.png)
This creates four more holes in the scale (_800_, _600_, _400_, and _200_), which you can fill using the same approach.
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/define-your-shades-up-front-05.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/define-your-shades-up-front-05.png)
You should end up with a pretty balanced set of colors that provide just enough options to accommodate your design ideas without feeling limiting.
What about greys?
-----------------
## What about greys?
With greys the base color isn't as important, but otherwise the process is the same. Start at the edges and fill in the gaps until you have what you need.
![](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/define-your-shades-up-front-06.png)
![palette](https://refactoring-ui.nyc3.cdn.digitaloceanspaces.com/previews/define-your-shades-up-front-06.png)
Pick your darkest grey by choosing a color for the darkest text in your project, and your lightest grey by choosing something that works well for a subtle off-white background.
It's not a science
------------------
## It's not a science
As tempting as it is, you can't rely purely on math to craft the perfect color palette.
@ -147,5 +140,4 @@ Once you actually start using your colors in your designs, it's almost inevitabl
Just try to avoid adding _new_ shades too often if you can avoid it. If you're not dilligent about limiting your palette, you might as well have no color system at all.
[Source](https://refactoringui.com/previews/building-your-color-palette/)
[Source](https://refactoringui.com/previews/building-your-color-palette/)

View File

@ -1 +1,3 @@
# email HTML
[Rock Solid HTML Emails ◆ 24 ways](https://24ways.org/2009/rock-solid-html-emails)

View File

@ -1,2 +1,4 @@
# HTML
[HTMl Reference](https://htmlreference.io/)
[CSS References](https://cssreference.io/)

View File

@ -1,26 +1,24 @@
# docker
## concept
- image: template en lecture seul pouvant créer un container
- image: template en lecture seul pouvant créer un container
- conteneur: instance d'une image
## command
- telecharger une image: ` docker pull debian:$tag`
- crer et lancer un container en tty ` docker run -it bash `
- telecharger une image: `docker pull debian:$tag`
- crer et lancer un container en tty `docker run -it bash`
- arreter container: `docker stop`
- démarrer containeur: `docker start`
- lister tous les conteneur `docker ps -a`
- delete conteneur: `docker rm 2cdc
- run a commad in container: `docker exec `
- run a commad in container: `docker exec`
- voir stdout d'un container: `docker logs`
- créer et lancer un conteneur `docker run -d --name node-app -p 3000:3000 -v $(pwd):/app node:0.12.4 node /app/server.js`
- -d lance en tant que daemon
- --name permet de nommer le conteneur
- -p associe le port au port de l'hote (1er port pour l'hote et second pour le conteneur)
- -d lance en tant que daemon
- --name permet de nommer le conteneur
- -p associe le port au port de l'hote (1er port pour l'hote et second pour le conteneur)
- -v $(pwd):/app : cette option permet de partager un dossier avec votre conteneur, ici, nous partageons le dossier courant (où se trouve notre fichier server.js) avec le dossier /app dans le conteneur (attention si vous êtes sur Mac ou Windows uniquement votre 'home' est partagé).
- node:0.12.4 : l'image Docker que vous voulez utiliser.
- node /app/server.js : la commande à exécuter dans le conteneur.
@ -66,10 +64,10 @@ le .dockerignore permet comme un .gitignore de ne pas inclure certain fichiers d
## créer image
- lancer la build du fichier: `docker build -t nomducontainer:tag .`
- -t permet de nommer l'image docker
pour ajouter un tag il faut utiliser
- -t permet de nommer l'image docker
pour ajouter un tag il faut utiliser
`docker tag`
## docker compose
permet de gérer plusieur container ensemble (IaS)
@ -116,8 +114,6 @@ services:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
```
- `docker-compose up` démarre les services décrits dans docker-compose.yml et ne rend pas la main.
- `docker-compose up -d` fait la même chose mais rend la main une fois que les services sont démarrés.
- `docker-compose up build` reconstruit les services avant de les lancer.

View File

@ -1,4 +1,4 @@
# Home ASSistant
# Home ASSistant
## instalation
@ -6,7 +6,6 @@
- need mosquito broker for mqtt
## Cheatsheet
- [icon material](https://cdn.materialdesignicons.com/4.5.95/)
@ -18,4 +17,4 @@
## SQL request
- get most use entity:
```SELECT entity_id, COUNT(*) as count FROM hass.states GROUP BY entity_id ORDER BY count DESC LIMIT 20```
```SELECT entity_id, COUNT(*) as count FROM hass.states GROUP BY entity_id ORDER BY count DESC LIMIT 20```

View File

@ -3,6 +3,9 @@
[Hack Xiaomi gateway V2](https://easydomoticz.com/forum/viewtopic.php?t=8397)
## jeedom
- install docker avec database sur host
``` docker run --net host --name jeedom-server --privileged -v /opt/jeedom:/var/www/html -e ROOT_PASSWORD=toto -e APACHE_PORT=9080 jeedom/jeedom:alpha ```
- pour le l'hote SQL mettre 127.0.0.1
- pour le l'hote SQL mettre 127.0.0.1

View File

@ -1,5 +1,7 @@
# git
![git](../img/git.jpg)
## Clone with submodule recurse
add *--recurse-submodules* to clone command
@ -25,7 +27,7 @@ this will ask if you want to add each modification with this option:
be carefull can't push repo last time use
need to be in a repo with no modification
```
```bash
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $file" HEAD
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune
```
@ -35,14 +37,16 @@ rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --
- clone the first repo
- go in this directory
- launch
```
```bash
git filter-branch --prune-empty --subdirectory-filter "subdirectory/path" master
```
- push in your new git repo
## changing email adress
```
```bash
$ git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "schacon@localhost" ];
then

View File

@ -44,4 +44,4 @@ git rebase --continue
### delete
**drop** will delete comite rebase will not apply modification during processing
to use by example if you have done a modifcation and a revert
to use by example if you have done a modifcation and a revert

View File

@ -5,7 +5,7 @@ Git submodule allows ro add externel repository in a repository
## Adding submodule
- ```git submodule add http://git/toto.git $path```
this command add *http://git/toto.git* in *path* directory (add -b $branchname to follow specific branch)
this command add *<http://git/toto.git>* in *path* directory (add -b $branchname to follow specific branch)
- after that you need to add and commit submodule folder
to populate a submodule nested in other submodule
@ -21,15 +21,12 @@ to populate a submodule nested in other submodule
## Updating submodule
you can update a submodule Manually going in submodule folder and perform a ```git fetch``` and ```git merge```
### Fetch and merge
automatic process
- perform a ```git submodule update --remote```
in each case you need to commit update in project

View File

@ -1,6 +1,6 @@
# ampache nginx config
```
```nginx
if ( !-d $request_filename ) {
rewrite ^/ampache/rest/(.*)\.view$ /ampache/rest/index.php?action=$1 last;
rewrite ^/ampache/rest/play/(.+)$ /ampache/play/$1 last;

View File

@ -1,8 +1,12 @@
# HTTP
## 1×× Informational
- 100 Continue
This interim response indicates that everything so far is OK and that the client should continue with the request or ignore it if it is already finished.
## 2×× Success
- 200 OK
The request has succeeded. The meaning of a success varies depending on the HTTP method:
GET: The resource has been fetched and is transmitted in the message body.
@ -19,6 +23,7 @@
The response body contains multiple status informations for different parts of a batch/bulk request
## 3×× Redirection
- 300 Multiple Choices
The request has more than one possible responses. User-agent or user should choose one of them. There is no standardized way to choose one of the responses.
- 301 Moved Permanently
@ -31,6 +36,7 @@
This is used for caching purposes. It is telling to client that response has not been modified. So, client can continue to use same cached version of response.
## 4×× Client Error
- 400 Bad Request
This response means that server could not understand the request due to invalid syntax.
- 401 Unauthorized
@ -45,6 +51,7 @@
The client does not consider rate limiting and sent too many requests.
## 5×× Server Error
- 500 Internal Server Error
The server has encountered a situation it doesn't know how to handle.
- 501 Not Implemented
@ -54,4 +61,4 @@
- 503 Service Unavailable
The server is not ready to handle the request. Common causes are a server that is down for maintenance or that is overloaded. Note that together with this response, a user-friendly page explaining the problem should be sent. This responses should be used for temporary conditions and the Retry-After: HTTP header should, if possible, contain the estimated time before the recovery of the service. The webmaster must also take care about the caching-related headers that are sent along with this response, as these temporary condition responses should usually not be cached.
For more info: https://httpstatuses.com/
For more info: <https://httpstatuses.com/>

View File

@ -1,6 +1,8 @@
# nginx
## reverse proxy
```
```nginx
location /chainetv {
proxy_pass http://unix:/run/gunicorn/socket:/;
#proxy_set_header Host $host;
@ -10,6 +12,7 @@
}
```
- le :/ aprés le socket sert a envoyer le sous répertoire a la suite de l'adresse demander l'appli écoute donc la route /api
- la parie commenté a le même fonctionnement mais permet un réglage plus fin associer a flask et la classe ReverseProxied par exemple:
la location peut rediriger /chaine/api en metant le X-Script-ame a /chainetv l'appli peut donc écouter la route /api

View File

@ -4,9 +4,9 @@
makepkg -sf
le f permet de forcer la compimation meme si des dossier existe déja
le f permet de forcer la compimation meme si des dossier existe déja
on peut rajouter l'option *i* afin de lancer l'instalation du package a la fin de la build
## update .SRCINFO
`makepkg --printsrcinfo > .SRCINFO`
`makepkg --printsrcinfo > .SRCINFO`

View File

@ -23,4 +23,4 @@ reduce logical volume
`lvextend -L +44G /dev/mapper/arch-root`
`resize2fs /dev/mapper/arch-root`
`resize2fs /dev/mapper/arch-root`

View File

@ -1,18 +1,19 @@
# Arch
![arch](../img/Arch_Linux_logo.svg.png)
## [instalation](arch_install.md)
## arch tips
#### clés GPG corrompue ou usagé
### clés GPG corrompue ou usagé
```
```bash
sudo pacman -S archlinux-keyring
sudo pacmam-key --init
sudo pacman-key --populate archlinux
```
### Personaliser un iso arch
#### Personaliser un iso arch
[archiso](https://wiki.archlinux.org/index.php/Archiso)

View File

@ -1,6 +1,5 @@
---
title: arch_install
---
# arch install
![arch](../img/Arch_Linux_logo.svg.png)
The following is a brief installation tutorial for [Arch Linux][1]. It assumes
familiarity with the Arch [Beginner's Guide][2] and [Installation Guide][3].
@ -15,89 +14,87 @@ Boot into the Arch installer.
If your console font is tiny ([HiDPI][7] systems), set a new font.
$ setfont sun12x22
setfont sun12x22
Connect to the Internet.
Verify that the [system clock is up to date][8].
$ timedatectl set-ntp true
timedatectl set-ntp true
(bios mode)
$ parted -s /dev/sda mklabel msdos
$ parted -s /dev/sda mkpart primary 1MiB 513MiB
$ parted -s /dev/sda mkpart primary 1024MiB 100%
$ mkfs.ext2 /dev/sda1
$ mkfs.ext4 /dev/sda2
parted -s /dev/sda mklabel msdos
parted -s /dev/sda mkpart primary 1MiB 513MiB
parted -s /dev/sda mkpart primary 1024MiB 100%
mkfs.ext2 /dev/sda1
mkfs.ext4 /dev/sda2
(UEFI mode) Create partitions for EFI, boot, and root.
$ parted -s /dev/sda mklabel gpt
$ parted -s /dev/sda mkpart primary fat32 1MiB 513MiB
$ parted -s /dev/sda set 1 boot on
$ parted -s /dev/sda set 1 esp on
$ parted -s /dev/sda mkpart primary 513MiB 1024MiB
$ parted -s /dev/sda mkpart primary 1024MiB 100%
$ mkfs.ext4 /dev/sda2
$ mkfs.fat -F32 /dev/sda1
parted -s /dev/sda mklabel gpt
parted -s /dev/sda mkpart primary fat32 1MiB 513MiB
parted -s /dev/sda set 1 boot on
parted -s /dev/sda set 1 esp on
parted -s /dev/sda mkpart primary 513MiB 1024MiB
parted -s /dev/sda mkpart primary 1024MiB 100%
mkfs.ext4 /dev/sda2
mkfs.fat -F32 /dev/sda1
Create and mount the encrypted root filesystem. Note that for UEFI systems
this will be partition 3.
$ pvcreate /dev/sda3pc
$ vgcreate arch /dev/mapper/lvm
$ lvcreate -L 4G arch -n swap
$ lvcreate -L 30G arch -n root
$ lvcreate -l +100%FREE arch -n home
$ lvdisplay
$ mkswap -L swap /dev/mapper/arch-swap
$ mkfs.ext4 /dev/mapper/arch-root
$ mkfs.ext4 /dev/mapper/arch-home
$ mount /dev/mapper/arch-root /mnt
$ mkdir /mnt/home
$ mount /dev/mapper/arch-home /mnt/home
$ swapon /dev/mapper/arch-swap
pvcreate /dev/sda3pc
vgcreate arch /dev/mapper/lvm
lvcreate -L 4G arch -n swap
lvcreate -L 30G arch -n root
lvcreate -l +100%FREE arch -n home
lvdisplay
mkswap -L swap /dev/mapper/arch-swap
mkfs.ext4 /dev/mapper/arch-root
mkfs.ext4 /dev/mapper/arch-home
mount /dev/mapper/arch-root /mnt
mkdir /mnt/home
mount /dev/mapper/arch-home /mnt/home
swapon /dev/mapper/arch-swap
(UEFI mode) Encrypt the boot partition using a separate passphrase from
the root partition, then mount the boot and EFI partitions.
$ mkdir /mnt/boot
$ mount /dev/sda2 /mnt/boot
$ mkdir /mnt/boot/efi
$ mount /dev/sda1 /mnt/boot/efi
mkdir /mnt/boot
mount /dev/sda2 /mnt/boot
mkdir /mnt/boot/efi
mount /dev/sda1 /mnt/boot/efi
Optionally [edit the mirror list][9].
$ vi /etc/pacman.d/mirrorlist
vi /etc/pacman.d/mirrorlist
Install the [base system][10].
$ pacstrap -i /mnt base base-devel net-tools wireless_tools dialog wpa_supplicant openssh git grub ansible
pacstrap -i /mnt base base-devel net-tools wireless_tools dialog wpa_supplicant openssh git grub ansible
(UEFI mode) $ pacstrap /mnt efibootmgr
Generate and verify [fstab][11].
$ genfstab -U -p /mnt >> /mnt/etc/fstab
$ less /mnt/etc/fstab
genfstab -U -p /mnt >> /mnt/etc/fstab
less /mnt/etc/fstab
Change root into the base install and perform [base configuration tasks][12].
$ arch-chroot /mnt /bin/bash
$ systemctl enable dhcpcd.service
$ systemctl enable sshd.service
$ passwd
arch-chroot /mnt /bin/bash
systemctl enable dhcpcd.service
systemctl enable sshd.service
passwd
modifier /etc/ssh/sshd_config et mettre PermitRoorlogin yes
Set your mkinitcpio.
# only for UEFI
$ sed -i 's/^HOOKS=.*/HOOKS="base udev autodetect modconf block keyboard lvm2 resume filesystems fsck"/' /etc/mkinitcpio.conf
# for both
$ mkinitcpio -p linux
only for UEFI
sed -i 's/^HOOKS=.*/HOOKS="base udev autodetect modconf block keyboard lvm2 resume filesystems fsck"/' /etc/mkinitcpio.conf
for both
mkinitcpio -p linux
Configure GRUB.
@ -113,13 +110,12 @@ Configure GRUB.
Cleanup and reboot!
$ exit
$ umount -R /mnt
$ reboot
exit
umount -R /mnt
reboot
Run ansible!
[1]: https://www.archlinux.org/
[2]: https://wiki.archlinux.org/index.php/Beginners'_guide
[3]: https://wiki.archlinux.org/index.php/Installation_guide

View File

@ -1,6 +1,6 @@
# cron
```
```bash
# * * * * * command to execute
# │ │ │ │ │
# │ │ │ │ │
@ -10,13 +10,18 @@
# │ └──────────────────── hour (0 - 23)
# └───────────────────────── min (0 - 59)
```
[test cron](https://crontab.guru/)
See also
- [wikipedia/cron](http://en.wikipedia.org/wiki/Cron)
[wikipedia/cron](http://en.wikipedia.org/wiki/Cron)
## cron directories
You can create directories that run cron commands. Taken from the `Ubuntu`
distro:
```txt
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
@ -35,15 +40,17 @@ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
```
## run every weekday at midnight
```sh
0 0 * * 0-5
```
## edit cronjobs
```sh
$ sudo crontab -e
sudo crontab -e
```
## user crontab lcation
## user crontab lcation
`/var/spool/cron/crontabs`

View File

@ -1,19 +1,22 @@
## grub_shell
# grub_shell
# booter depuis le shell grub
## booter depuis le shell grub
- les commande **cat** et **ls** fonctionne
- trouver partition de boot
- mettre la partion en racine `set root=(hd0,1)`
- charger le kernel ce trouvant sur cette partition et setter la partition racine: `linux /vmlinuz root=/dev/sda3`
- charger le fichier image correspondant au kernel :`initrd /boot/initrd.img`
- enter `boot` to boot
- trouver partition de boot
- mettre la partion en racine `set root=(hd0,1)`
- charger le kernel ce trouvant sur cette partition et setter la partition racine: `linux /vmlinuz root=/dev/sda3`
- charger le fichier image correspondant au kernel :`initrd /boot/initrd.img`
- enter `boot` to boot
## regénérer config
`grub-mkconfig -o /boot/grub/grub.cfg`
## install sur MBR
`grub-install --target=i386-pc /dev/sdX`
## meme chose depuis grub rescue
`grub rescue> set prefix=(hd0,1)/boot/grub

View File

@ -1,8 +1,12 @@
# Linux
![linux](../img/linux.png)
## retrouvé date t'instalation
`ls -lct /etc | tail -1 | awk '{print $6, $7, $8}'`
## enable Wayland support:
## enable Wayland support
- execute `ln -s /dev/null /etc/udev/rules.d/61-gdm.rules` to avoid that gnome test your nvidia Driver
@ -14,7 +18,8 @@
`MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)`
- create pacman hook:
```
```ini
[Trigger]
Operation=Install
Operation=Upgrade
@ -32,12 +37,10 @@ NeedsTargets
Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -P'
```
## see if you run on wayland:
## see if you run on wayland
`loginctl show-session $(loginctl G $USERNAME|awk '{print $1}') -p Type`
## boot in emergency target
1. (Re)boot the machine

View File

@ -1,31 +1,34 @@
#shell
# shell
##tips
## tips
- setter IFS au retour chariot
``` IFS=$'\n'```
```IFS=$'\n'```
## boucle
```
```bash
for var in $variable
do
commande
done
```
## if
```
```bash
if [ test ]; then
echo "C'est vrai"
else
echo "c'est faux"
echo "c'est faux"
fi
```
### test
#### string
|test|def|
|----|---|
|$a = j$b|egale|
@ -44,8 +47,7 @@ fi
|$a -gt $b| >|
|$a -ge $b| >= |
#### file
#### file
|test|def|
|----|---|
@ -59,7 +61,7 @@ fi
## Supprimer les Dossiers contenant 1 élement
```
```bash
IFS=$'\n';for i in $(ls) do  ✔  10022  18:29:32 
if [ $(ls $i|wc|awk '{print $1}') = 1 ]
then

View File

@ -1,13 +1,11 @@
# ZSH
![zsh](../img/zsh.jpg)
# functionality
## functionality
# shortcut
## shortcut
key|comportment
---|-----------
|

View File

@ -1,6 +1,8 @@
# python
## référence
https://github.com/gto76/python-cheatsheet/blob/master/README.md
<https://github.com/gto76/python-cheatsheet/blob/master/README.md>
Afficher les warning:```python -Wd```
Mode développement :`-X dev`
@ -10,6 +12,7 @@ Mode développement :`-X dev`
</details>`
## Virtual env
- create virtual env: `python3 -m venv /path`
- enter in virtual env: `source env/bin/activate`
- leave venv: `deactivate`
@ -17,8 +20,12 @@ Mode développement :`-X dev`
- install package list in file: `pip install -r requirement.txt`
## tips
- pprint permet d afficher vos structure de données
- la fonction dir() permet de lister les attribut d un
- la fonction dir() permet de lister les attribut d un
## unitest
### lancer une suite de tests
### lancer une suite de tests
```python -m unittest tests.suite```

View File

@ -2,5 +2,4 @@
![&notebook](Divers/img/notebook.webp)
Ceci est mon wiki personnel où je partage mes notes sous la forme d'un livre MkDocs en ligne via mon instance [gitea](https://git.ducamps.win/).