Skip to content

Instantly share code, notes, and snippets.

@dcyou
Last active September 10, 2019 14:22
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dcyou/25ce675765f680caef77b0767ca95698 to your computer and use it in GitHub Desktop.
Save dcyou/25ce675765f680caef77b0767ca95698 to your computer and use it in GitHub Desktop.
b-a-ba

Veille technologique

Quelle est la version actuelle de NodeJS ?

https://nodejs.org/en/about/releases/

Quelle est la version actuelle de PHP ?

http://php.net/supported-versions.php

Qu'apporte la version 7 de PHP par rapport à la version 5 ?

Speed
Type Declarations (scalar typehint, strict mode, return type...) 
Error Handling (type error, throwable interface)
classes anonymes
type des fonctions et type des arguments

Spaceship operator :
echo 1 <=> 1; //ouputs 0
echo 3 <=> 4; //outputs -1
echo 4 <=> 3; //outputs 1

Null Coalesce operator :
$identifiant = $_GET['utilisateur'] ?? 'aucun';

source : http://php.net/manual/fr/migration70.new-features.php

Quelle est la version actuelle de Symfony et quelle est la dernière version LTS ?

https://symfony.com/roadmap

POO

Immutable

immutable = ne change pas (état non modifié après création) != objet variable

PHP / POO

Quels mots clés sont utilisés pour définir la visibilité des propriétés et des méthodes ?

public
protected
private

CSS preprocessor

Sass / LESS

A CSS preprocessor is a program that lets you generate CSS from the preprocessor's own unique syntax. There are many CSS preprocessors to choose from, however most CSS preprocessors will add some features that don't exist in pure CSS, such as mixin, nesting selector, inheritance selector, and so on. These features make the CSS structure more readable and easier to maintain.
https://developer.mozilla.org/en-US/docs/Glossary/CSS_preprocessor

ReactJS

React component lifecycle

Mounting, Updating and Unmounting
render() => mounting and updating
componentDidMount() => mounted and ready
componentDidUpdate() => updating happens
componentWillUnmount() => just before the component unmounted and destroyed

React Component Types

React's createClass Components => var App = React.createClass({...
The createClass method provided developers with a factory method to create React class components without using a JavaScript class.

React Mixins => var App = React.createClass({  mixins: [localStorageMixin], ...
first advanced pattern for reusable component logic

React Class Components => class App extends React.Component { constructor(props) { ...
introduced with JavaScript ES6

React Higher-Order Components => const withLocalStorage = localStorageKey => Component => class WithLocalStorage extends React.Component {
popular advanced React pattern, are an alternative for React Mixins to deploy reusable logic across React components.

React Function Components => const App = () => {
equivalent of React Class Components but expressed as functions instead of classes

HOC (Higher-Order Component)

const EnhancedComponent = higherOrderComponent(WrappedComponent);
Concrètement, un composant d’ordre supérieur est une fonction qui accepte un composant et renvoie un nouveau composant.
https://fr.reactjs.org/docs/higher-order-components.html

Hooks

Fonction qui permet de « se brancher » sur des fonctionnalités React

Hook d'état :
const [count, setCount] = useState(0);

Hook d’effet :
Si vous avez l’habitude des méthodes de cycle de vie des classes React, pensez au Hook useEffect comme à une combinaison de componentDidMount, componentDidUpdate, et componentWillUnmount.


import React, { useState, useEffect } from 'react';
function Example() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `Vous avez cliqué ${count} fois`;
  });

  return (
    <div>
      <p>Vous avez cliqué {count} fois</p>
      <button onClick={() => setCount(count + 1)}>
        Cliquez ici
      </button>
    </div>
  );
}

Functionnal Components

Functional components are very useful in React, especially when you want to isolate state management from the component. Which is why they are often called stateless components.

Redux

Redux is a predictable state container for JavaScript apps.
It helps you write applications that behave consistently, run in different environments (client, server, and native), and are easy to test. On top of that, it provides a great developer experience, such as live code editing combined with a time traveling debugger.

State / Reducer

HTML

HTML is the standard markup language for Web pages.
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>

<h1>This is a Heading</h1>
<p>This is a paragraph.</p>

</body>
</html>
https://www.w3schools.com/html/default.asp

Typescript

TypeScript is an open-source programming language developed and maintained by Microsoft. It is a strict syntactical superset of JavaScript, and adds optional static typing to the language.
TypeScript is designed for development of large applications and transcompiles to JavaScript.
https://en.wikipedia.org/wiki/TypeScript

Qu'est-ce qu'une interface ?

Ensemble de méthodes que les classes doivent définir si elles veulent l'implémenter
Programmation par contrat

Quelle est la différence entre Héritage et Composition ?

Composition signifie A UN, Héritage signifie EST UN
Exemple : Voiture a un moteur | Voiture est une automobile
source : https://waytolearnx.com/2018/08/difference-entre-heritage-et-composition.html

Standards de code

--- PSR-1	Basic Coding Standard	---
Les fichiers DOIVENT utiliser uniquement les tags <?php et <?= .
Les fichiers DOIVENT utiliser uniquement un encodage UTF-8 sans BOM pour le code PHP.
Les fichiers PEUVENT soit déclarer des traitements (classes, fonctions, constantes, etc.) ou modifier l'environnement (par exemple générer du contenu, changer les paramètres .ini etc.) mais ne peuvent pas faire les deux.
Les Namespaces et les classes DOIVENT suivre un "autoloading" PSR: [PSR-0, PSR-4].
Les noms de classes DOIVENT être déclarés en StudlyCaps.
les constantes de classe DOIVENT être déclarées en majuscule avec des underscore en séparateurs.
les noms des méthodes DOIVENT être déclarées en camelCase.

--- PSR-2	Coding Style Guide	---
Le code "DOIT" suivre le standard PSR 1.
Le code "DOIT" utiliser 4 espaces pour l'indentation, pas les tabulations.
il NE DOIT PAS y avoir de limite dure à la longueur de ligne. La limite de base est de 120 caractères; les lignes DEVRAIENT être de 80 caractères ou moins.
Il DOIT y avoir une ligne blanche après la déclaration du namespace, et il DOIT y avoir une ligne blanche après le block des déclarations use.
Les accolades ouvrantes pour les classes DOIVENT être sur la ligne suivante, et les accolades fermantes DOIVENT être sur la ligne suivante.
Les accolades ouvrantes pour les méthodes DOIVENT être sur la ligne suivante, et les accolades fermantes DOIVENT être sur la ligne suivante.
la visibilité DOIT être déclarées sur toutes les proprités et les méthodes; abstract et final DOIVENT être déclarées avant la visibilité; static DOIT être déclaré après la visibilité.
Les mots clés de contrôle de structure DOIVENT avoir un espace après eux; les appels aux méthodes et fonction NE DOIVENT PAS.
Les accolades ouvrantes pour les structures de contrôle DOIVENT être sur la même ligne, et les accolades fermantes DOIVENT aller sur la ligne suivante.
Les parenthèses ouvrantes des structures de contrôle NE DOIVENT PAS avoir d'espace après elles, et les parenthèses de fermeture NE DOIVENT PAS avoir d'espace avant.

--- PSR-3	Logger Interface	---
--- PSR-4	Autoloading Standard	---
--- PSR-6	Caching Interface	---


source : https://www.php-fig.org/psr/

Ecmascript 6 === JavaScript 2015

let => Unlike variables declared with var that are function-scoped
Template String (back ticks) => 
        let me = "Yannick";
        let mAge = 29;
        let result = `Je suis ${me} et j'ai ${mAge} ans`;
Default Parameters => function add(a=3, b=5) 
for-of loop => looping over iterable objects 
        var colors = new Set(['rojo', 'amarillo', 'azul']);
       colors.language = 'es';     // add an expando property

       for (let name in colors)
           alert(name);            // "language" (the property name)

       for (let word of colors)
           alert(word);            // "rojo", "amarillo", "azul" (the data)
Arrow function => Lexical this binding and Shorter syntactical form (() => {} vs. function () {})

Designs patterns

Création : Factory Method, Abstract Factory, Builder, Prototype, Singleton
Structure : Adapter, Bridge, Composite, Decorator, Façade, Flyweight, Proxy
Comportement : Chain of responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor, Interpreter
Attention : MVC = Combinaison des patrons observateur, stratégie et composite, ce qui forme ainsi un patron d'architecture.

Stub et Mock

Un “stub” est un objet qui va simuler les différentes classes utilisées par la classe cible. Cet objet va toujours retourner la même valeur, quels que soient ses paramètres.
Un “mock” est un “stub” dans lequel on va vérifier des attentes à des appels de méthodes. Par exemple, je vérifie qu’une méthode est appelée une fois.

Couverture de code

Taux de code source exécuté d'un programme quand une suite de test est lancée

Quelle est la différence entre un test unitaire et un test fonctionnel ?

> test unitaire
Chaque sous ensemble de l'application est testé de manière séparée.
Ces tests permettent de s'assurer que chaque élément fonctionne correctement de manière indépendante.
PHP (PHPUnit), Javascript (Mocha, Jasmine, Jest...), Python (Unittest et PyUnit), C++ (CppUnit), Java (JUnit)

> test fonctionnel
Dans cette phase, on va dérouler les processus métier de bout en bout (vision utilisateur) et s'assurer qu'ils sont conformes aux besoins du Client
BDD (Behavior Driven Development) : Behat

TDD: Test Driven Development

Ecrire chaque test avant d'écrire le code source d'un logiciel, de façon itérative

CI : Continuous Integration et CD : Continuous Delivery

> Intégration continue
Détecte les erreurs aussi rapidement que possible
Réduit les problèmes d'intégration: les problèmes plus petits sont plus faciles à digérer
Éviter les problèmes de composition: permet aux équipes de se développer plus rapidement, avec plus de confiance

> Livraison continue
S'assure que chaque changement est fiable: testez tout, y compris le déploiement.
Réduit le risque de chaque publication: rend les publications «ennuyeuses»
Fournit de la valeur plus fréquemment: des déploiements fiables signifient plus de versions
Boucles de retour client serrées: commentaires client rapides et fréquents sur les modifications

> Solutions :
Gitlab CI
Jenkins, serveur d'intégration continue
SonarQube, logiciel de supervision de la qualité du code
Tinderbox, serveur d'intégration continue de la Mozilla Foundation
Team Foundation Server, serveur Microsoft
Chaos Monkey, outil de tests de résilience en continu

Symfony

Quelle est la commande pour effacer le cache ?

cache:clear

Après un déploiement par exemple, quelle commande permet de générer le cache afin d’améliorer les performances au lancement du site la première fois ?

cache:warmup

Comment fonctionne le mécanisme d’injection de dépendances dans Symfony ?


Quelle est la différence entre un Listener et un Subscriber ?


Combien existe-t-il de composants ?

55 (environ 40 sans les polyfill)
https://symfony.com/components

Citez-en quelques uns ?

config, console, DependencyInjection, event dispatcher, expression language, file system, finder, form, Http kernel, options resolver, routing, templating, translation, validator, varDumper, yaml

À quoi sert le composant options resolver ?


Quelle est votre démarche pour créer un formulaire ?

https://symfony.com/doc/3.4/forms.html

Quels bundles tiers avez-vous déjà utilisés ?


MySQL

Quels sont les différents types de jointure existant ?

left join, inner join, right join

Quelle est la différence entre innoDB et MyISAM ?

transactions
clés étrangères
ACID
(inconvénients : admistration plus compliquée, plus lent pour les lectures et insertion du fait de la gestion de l'intégrité des données, de pouvoir récupérer en cas de crash...)

Soit une table avec un champ texte et un champ boolean, où dois-je poser un index ?

Sur le champ texte, car la cardinalité est trop faible sur un booléen

Git

COMMIT CONVENTION

<type>[optional scope]: <description>

[optional body]

[optional footer]

fix: a commit of the type fix patches a bug in your codebase (this correlates with PATCH in semantic versioning).
feat: a commit of the type feat introduces a new feature to the codebase (this correlates with MINOR in semantic versioning).
BREAKING CHANGE: a commit that has the text BREAKING CHANGE: at the beginning of its optional body or footer section introduces a breaking API change (correlating with MAJOR in semantic versioning). A BREAKING CHANGE can be part of commits of any type.
Others: commit types other than fix: and feat: are allowed, for example @commitlint/config-conventional (based on the Angular convention) recommends chore:, docs:, style:, refactor:, perf:, test:, and others.
https://www.conventionalcommits.org

Quelle est la commande pour basculer d'une branche à l'autre ?

git checkout [branche]

Quelle commande permet d'obtenir la liste des tags ?

git tag, git tag -l

Quelle commande permet de pousser vers un dépôt distant ?

git push origin :[branche]

Qu'est-ce que gitflow ?

modèle de branches (develop, feature branchs, release, hotfix, master, tags)

Quelle est la différence entre rebase et merge ?

> Merge
Opération non destructive. Les branches existantes ne sont aucunement altérées. Cela permet d'éviter les pièges potentiels du rebase (abordés ci-dessous).
Génération d'un commit de merge dans la branche de fonctionnalité
Pollue l'historique de la branche

> Rebase
Toute la branche de fonctionnalité sera ainsi déplacée sur la pointe de la branche master, et tous les nouveaux commits seront intégrés à master. Cependant, au lieu d'utiliser un commit de merge, le rebase consiste à réécrire l'historique du projet en créant de nouveaux commits pour chaque commit de la branche d'origine.
Historique plus propre

source : https://fr.atlassian.com/git/tutorials/merging-vs-rebasing

Hook

Like many other Version Control Systems, Git has a way to fire off custom scripts when certain important actions occur. There are two groups of these hooks: client-side and server-side. Client-side hooks are triggered by operations such as committing and merging, while server-side hooks run on network operations such as receiving pushed commits. You can use these hooks for all sorts of reasons.
https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

example: pre-commit for eslint check

API

Quels sont les verbes HTTP les plus couramment utilisés et leur utilité ?

GET (read), POST (create), PUT (update), DELETE (delete), PATCH

Qu'est-ce qu'une API RESTful ?

HTTP methods mapped as follows:
GET /tickets - Retrieves a list of tickets
GET /tickets/12 - Retrieves a specific ticket
POST /tickets - Creates a new ticket
PUT /tickets/12 - Updates ticket #12
PATCH /tickets/12 - Partially updates ticket #12
DELETE /tickets/12 - Deletes ticket #12

GET /tickets/12/messages - Retrieves list of messages for ticket #12
GET /tickets/12/messages/5 - Retrieves message #5 for ticket #12
POST /tickets/12/messages - Creates a new message in ticket #12
PUT /tickets/12/messages/5 - Updates message #5 for ticket #12
PATCH /tickets/12/messages/5 - Partially updates message #5 for ticket #12
DELETE /tickets/12/messages/5 - Deletes message #5 for ticket #12

https://martinfowler.com/articles/richardsonMaturityModel.html

Liste des principaux codes HTTP

200 : succès de la requête ;
301 et 302 : redirection, respectivement permanente et temporaire ;
401 : utilisateur non authentifié ;
403 : accès refusé ;
404 : page non trouvée ;
500 et 503 : erreur serveur ;
504 : le serveur n'a pas répondu.

Sécurité

OAuth

Protocole libre qui permet d'autoriser un site web, un logiciel ou une application (dite « consommateur ») à utiliser l'API sécurisée d'un autre site web (dit « fournisseur ») pour le compte d'un utilisateur

Auth0

Auth0 (prononcer “auth zero”) permet de proposer différents types d’authentification :

 Standard : login + password
 Connexion avec les réseaux sociaux : Google, Facebook, Twitter, Microsoft Account, LinkedIn, GitHub, Box, Salesforce…
 Intégration avec un annuaire d’entreprise existant:  LDAP, Google Apps, Office 365…
 Touch ID : qui utilise le lecteur d’empreinte de votre smartphone
 Codes ou liens générés utilisés une seule fois et reçus par SMS ou email
Vous disposez d’un tableau de bord pour visualiser des logs et statistiques sur vos utilisateurs.
source : https://blog.humancoders.com/introduction-auth0-authentification-saas-2187/

Amazon Cognito

Amazon Cognito vous permet d'ajouter facilement et rapidement l'inscription et la connexion des utilisateurs ainsi que le contrôle d'accès à vos applications Web et mobiles. Amazon Cognito s'adapte à des millions d'utilisateurs et prend en charge la connexion avec les fournisseurs d'identité sociale tels que Facebook, Google et Amazon, et les fournisseurs d'identité d'entreprise via SAML 2.0.

JWT : JSON Web Tokens

JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA.
> Authorization
> Information Exchange

Structure : 
> Header : { "alg": "HS256", "typ": "JWT" }
> Payload : { "sub": "1234567890", "name": "John Doe", "admin": true }
> Signature : HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

Authorization: Bearer <token>

source : https://jwt.io/

Cryptographie (deux types d'algorithmes)

Algorithmes symétriques

Une seule clé est utilisée pour chiffrer les données. Une fois chiffrés avec la clé, les données peuvent être déchiffrées à l'aide de la même clé. Si, par exemple, Mary chiffre un message à l'aide de la clé "my-secret" et l'envoie à John, il sera en mesure de déchiffrer correctement le message avec la même clé "my-secret".

Algorithmes asymétriques

Deux clés sont utilisées pour chiffrer et déchiffrer les messages. Alors qu'une clé (publique) est utilisée pour chiffrer le message, l'autre clé (privée) ne peut être utilisée que pour le déchiffrer. Ainsi, John peut générer des clés publiques et privées, puis envoyer uniquement la clé publique à Mary pour chiffrer son message. Le message ne peut être déchiffré qu'à l'aide de la clé privée.

Scénario HS256 et RS256

Ces algorithmes ne sont PAS utilisés pour chiffrer / déchiffrer des données. Ils sont plutôt utilisés pour vérifier l'origine ou l'authenticité des données. Lorsque Mary doit envoyer un message ouvert à Jhon et qu'il doit vérifier que le message provient bien de Mary, vous pouvez utiliser le HS256 ou le RS256.

Le HS256 peut créer une signature pour un échantillon de données donné en utilisant une clé unique. Lorsque le message est transmis avec la signature, la partie destinataire peut utiliser la même clé pour vérifier que la signature correspond au message.

RS256 utilise une paire de clés pour faire la même chose. Une signature ne peut être générée qu'à l'aide de la clé privée. Et la clé publique doit être utilisée pour vérifier la signature. Dans ce scénario, même si Jack trouve la clé publique, il ne peut pas créer de message d'usurpation portant une signature pour imiter Mary.

Pizza As A Service (On Premises / IaaS / PaaS / SaaS)

Image of Pizza As A Service Image of As A Service

Scrum

Transparence : langage commun entre l'équipe et le management
Inspection : itération pour faire le point
Adaptation : flexibilité si anomalie
Rôles : le propriétaire du produit (product owner), le scrum master et le développeur

Regex

^		Commence par ^Bonjour !Attention! peut vouloir dire négation => m[^oai]ts => ne contient pas oai comme caractère
$		Fini par revoir$
|		ou Bonjour|revoir

[a-z]		[abcdefghijklmonpqrstuvwxyz]	Lettres minuscules de a à z
[A-Z]		[ABCDEFGHIJKLMNOPQRSTUVWXYZ]	Lettres majuscules de A à Z
[0-9]		[0123456789]	Chiffres de 0 à 9
[a-z0-9]	[abcdefghijklmonpqrstuvwxyz0123456789]	Lettres minuscules de a à z ou chiffres de 0 à 9

.		Absolument n'importe quel charactère
\w		[a-zA-Z0-9_]
\d		[0-9]
\n		Un retour à la ligne
\t		Une tabulation
\S		

*		0 ou plusieurs répétitions	{0,}
+		1 ou plusieurs répétitions	{1,}
?		0 ou 1 répétition	{,1}

\		échappement pour matcher ces caractères ^ $ \ | { } [ ] ( ) ? # ! + * .
( ou ) 		créer des suites (ou groupe)

exemples:
url : https?://[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}(/\S*)?
téléphone : (0|\+33)[1-9]( *[0-9]{2}){4}

source: https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres

Docker

Commandes

$ docker ps # Visualiser les conteneurs actifs
$ docker ps -a # Visualiser tous les conteneurs
$ docker rm [container] # Supprimer un conteneur inactif
$ docker rm -f [container] # Forcer la suppression d'un conteneur actif
$ docker images # Lister les images existantes
$ docker rmi [image] # Supprimer une image docker
$ docker exec -t -i [container] /bin/bash # Exécuter des commandes dans un conteneur actif
$ docker inspect [container] # Inspecter la configuration d'un conteneur
$ docker build -t [image] . # Construire une image à partir d'un Dockerfile
$ docker history [image] # Visualiser l'ensemble des couches d'une image
$ docker logs --tail 5 [container] # Visualiser les logs d'un conteneur (les 5 dernières lignes)

# Intéractions avec le registry
$ docker login # Se connecter au registry
$ docker search [name] # Rechercher une image
$ docker pull [image] # Récupérer une image
$ docker push [image] # Pouser une image du cache local au registry
$ docker tag [UUID] [image]:[tag] # Tagger une image

Instructions Dockerfile

Ordre Instruction Description
1 FROM Image parente
2 MAINTAINER Auteur
3 ARG Variables passées comme paramètres à la construction de l'image
4 ENV Variable d'environnement
4 LABEL Ajout de métadonnées
5 VOLUME Crée un point de montage
6 RUN Commande(s) utilisée(s) pour construire l'image
6 COPY Ajoute un fichier dans l'image
6 WORKDIR Permet de changer le chemin courant
7 EXPOSE Port(s) écouté(s) par le conteneur
8 USER Nom d'utilisateur ou UID à utiliser
9 ONBUILD Instructions exécutées lors de la construction d'images enfants
10 CMD Exécuter une commande au démarrage du conteneur
10 ENTRYPOINT Exécuter une commande au démarrage du conteneur

Git

Commandes

git add -vA # ajoute tous les changements au commit, verbeux
git rm [fichiers] # supprime les fichiers du dépôt
git add -p [fichier] # permet de préciser quels morceaux de code d'un fichier sont à ajouter au commit
git pull # met à jour ses fichiers locaux à partir d'un dépôt distant (cela effectue un fetch puis un merge)
git pull -r
git push # Pousse les modifications locales sur un dépôt distant
git push -f # force à pousser ses modifications locales sur un dépôt distant. À utiliser avec précaution.
git stash # mettre de côté ses fichiers modifiés afin de pouvoir faire un pull
git stash pop # réintégrer les fichiers ayant été mis de côté par un stash
git reflog # afficher toutes les actions ayant été effectuées sur le dépôt
git reset HEAD [nom_du_fichier] # permet de retirer un fichier du stage (fichiers à committer) sans perdre ses modifs
git reset --hard HEAD@{1} # revenir à l'état spécifié (obtenu par reflog)
git reset --soft HEAD@{1} # revenir à l'état spécifié (obtenu par reflog), mais en gardant ses dernières modifications
git branch [branche] # créer une branche
git checkout [branche] # switcher d'une branche à une autre
git checkout [branche_distante] # récupère une branche distante (raccourci)
git checkout -b [branche] # crée une branche et fait un checkout sur cette dernière (raccourci)
git push origin [branche] # pousse cette branche sur le dépôt distant précisé
git branch -d [branche] # supprime une branche en local
git push origin :[branche_distante] # supprime une branche sur le dépôt distant
git branch --track [branche] origin/[nom_de_la_branche] # récupère une branche distante
git merge [branche] --no-ff # fusionne les modifications de la branche donnée sur la branche en cours, pas d'avance rapide
git log --pretty="%s" --no-merges v1..v2 # affiche les différences entre deux tags, à la ligne et sans les merge
git log --all --grep='my-feature' # retrouve les commits contenant le texte donné dans son message de commit
git log --pretty=oneline -S'some code'
git blame [fichier] -L 1,5 # affiche l'utilisateur ayant modifié les lignes 1 à 5 du fichier spécifié
git commit --amend -m "new commit name" # modifie le dernier commit (ne pas avoir poussé auparavant)
git fetch -p # après récupération des branches distantes, supprime les branches n'existant plus sur le dépôt distant
git cherry-pick <commit> # permet de transférer un commit en particulier d'une branche à une autre
git tag # affiche la liste des tags
git tag 1.0 # crée le tag 1.0
git push --tags # pousse les tags créés
git branch -m [nouveau_nom] # renomme la branche courante
git merge --squash [branche] # merge les commits provenant d'une autre branche en les regroupant en un seul commit
git tag -l | xargs git tag -d && git fetch -t # supprime les tags en local et récupère les remote tags
git clean -fd # supprime les fichiers et répertoires non trackés

Configuration

git config -e # édition de la configuration du projet
git config -e --global # édition de la configuration globale de Git
git config -l --global # liste la configuration globale de Git
git config --global user.name "John Doe" # paramétrage du nom de l'utilisateur
git config --global user.email johndoe@example.com # paramétrage de l'email de l'utilisateur
git config --global color.ui true # active la coloration au sein du terminal
git config --global push.default current # force à pousser seulement la branche courante
git config --global core.editor vi # indique l'éditeur par défaut (messages de commit, résolution de conflits, édition de la configuration...)
git config --global pull.rebase true # rebase auto lors d'un pull
git config --global help.autocorrect 1 # lance la commande en cas de typo si il n'y a qu'une seule commande qui peut matcher
git config core.filemode false # les droits des fichiers ne seront pas pris en compte
git config core.excludesfile ~/.gitignore # exclure des fichiers sans polluer le .gitignore du projet

Linux

apt-show-versions -b > pkg-list.txt # Récupère la liste des paquets installés
ls -al # Si l'alias ll n'existe pas
uname -a # Affiche le nom de l'OS courant
uname -r # Affiche la version du noyau linux
cat /proc/version # affiche le nom de la distribution
ssh-keygen -t rsa # Génère une clé privée et une clé publique dans ~/.ssh/
ssh-keygen -l # Affiche le fingerprint de la clé ssh
alias d='cd ~/dev' # Crée un alias
useradd -G {group-name} username # ajoute un user à un groupe
echo -n password | sha1sum | awk '{print $1}'
ls -al | grep -E 'DocumentGeneratorManager|OperationManager'
ulimit -a # affiche les limitations de mémoires pour l'utilisateur courant
ulimit -n 2048 # attribue une valeur à l'option spécifiée
find . -name "*.php" -exec grep -l "guess" {} \;
curl http://domain.com/file.tar.gz | tar zx
curl -O http://domain.com/file.tar.gz # Télécharge le fichier avec le nom original
tar -cvf foo.tar foo/
gzip foo.tar
gzip -d file.gz # Décompacte un fichier gzip
unzip file.zip # Décompacte un fichier zip
woof filename # Partager un fichier http://www.home.unix-ag.org/simon/woof.html
cat /etc/passwd | awk -F: '{print $ 1}' # Affiche la liste des utilisateurs
cat /etc/group | awk -F: '{print $ 1}' # Affiche la liste des groupes
sudo apt-get install ubuntu-restricted-extras

Mise à jour de l'OS

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade / sudo do-release-upgrade

Générer un password

$ sudo apt-get install makepasswd
$ makepasswd -minchars 8

screen

screen -S test
ctrl+a+d pour detacher
screen -r test
(exit dans un terminal pour le kill)
https://doc.ubuntu-fr.org/screen

Supprimer le cache de composer:

$ composer clear-cache
$ rm vendor/composer/installed.json

Sourcer un alias :

$ vi ~/.bashrc
alias ll='ls -alF'

$ source ~/.bashrc

Vider le swap en RAM

sudo swapoff -a && sudo swapon -a

System benchmark

$ sudo apt-get install sysbench
$ touch sysbench.txt && sysbench --test=cpu --cpu-max-prime=20000 run >> sysbench.txt && sysbench --test=cpu --cpu-max-prime=20000 --num-threads=4 run >> sysbench.txt && sysbench --test=memory run >> sysbench.txt && sysbench --test=memory --num-threads=4 run >> sysbench.txt

Source : https://gist.github.com/jpchateau

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment