Quand je bossais sur les commons, je me suis fait cette commande pour appliquer une lambda à tout les repertoires enfants commençant par "common-"
#!/usr/bin/env bash
export DIRS=$(find . -maxdepth 1 -mindepth 1 -type d -name "common-*" -printf '%f\n')
for folder in $DIRS
do
(cd $folder && eval $1)
done
Et ça s'utilise comme ça
./foreach mvn clean install -Pprod
<a href="?addtag=lance" title="Hashtag lance">#lance</a> le build en prod sur tout les commons
Une commande pour redemarrer la GUI cinnamon (à bind à une combinaison de touches)
pkill -HUP -f "cinnamon --replace"
Je met de coté ici une petite classe technique qui permet de faire des opérations sur des horaires (addition, soustractions, division etc)
Elle était a la base faite pour un script google sheets du coup le jour où je veux l'utiliser il faudra se débarasser des classes de chez google (genre le Logger)
function test(){
Logger.log("plus = 09:30 : ", new Time("08:00").plusTime(new Time("01:30")))
Logger.log("plus = 10:00 : ", new Time("08:00").plusTime(new Time("02:00")))
Logger.log("plus = 08:01 : ", new Time("08:00").plusTime(new Time("00:01")))
Logger.log("minus = 07:59 : ", new Time("08:00").minusTime(new Time("00:01")))
Logger.log("minus = 23:00 : ", new Time("01:00").minusTime(new Time("02:00")))
Logger.log("minus = 22:59 : ", new Time("01:00").minusTime(new Time("02:01")))
Logger.log("minus = 22:58 : ", new Time("01:00").minusTime(new Time("26:02")))
Logger.log("divide = 03:20 : ", new Time("10:00").divideTime(new Time("03:00")))
Logger.log("divide = 04:00 : ", new Time("08:00").divideTime(new Time("02:00")))
Logger.log("divide = 08:00 : ", new Time("08:00").divideTime(new Time("01:00")))
Logger.log("modulo = 00:15 : ", new Time("01:00").moduloTime(new Time("00:45")))
Logger.log("modulo = 01:00 : ", new Time("02:30").moduloTime(new Time("01:30")))
Logger.log("asDate = AUJOURD'HUIT01:00:00 : ", new Time("01:00").asDate())
Logger.log("asDecimal = 0.5 : ", new Time("00:30").asDecimal())
Logger.log("asDecimal = 1.5 : ", new Time("01:30").asDecimal())
Logger.log("asDecimal = 1.25 : ", new Time("01:15").asDecimal())
Logger.log("fromDecimal = 12:30 : ", Time.fromDecimal(12.5))
Logger.log("fromDecimal = 00:45 : ", Time.fromDecimal(0.75))
Logger.log("fromDecimal = 01:45 : ", Time.fromDecimal(1.75))
Logger.log("fromDecimal = 02:30 : ", Time.fromDecimal(2.5))
Logger.log("fromMinutes = 23:45 : ", Time.fromMinutes(-15))
Logger.log("fromMinutes = 02:00 : ", Time.fromMinutes(120))
}
/**
* Représente une heure de la journée au format "HH:MM"
*/
class Time{
/**
* Constructeur.
* Param :
* hour:String - L'heure au format "HH:MM"
*/
constructor(hour){
this.hour = hour
}
/**
* Initialise un Time à partir d'un nombre de minutes
* Param :
* mins:String - L'heure au format "HH:MM"
*/
static fromMinutes(value){
function addZeroToHour(hour, minutes){
if(minutes < 0){
hour -= 1
}
return hour >= 0 ? ((hour<10 ? '0' : '') + hour) : addZeroToHour(24 + hour)
}
function addZeroToMinutes(minutes){
return minutes >= 0 ? ((minutes<10 ? '0' : '') + minutes) : addZeroToMinutes(60 + minutes)
}
var hour = (value/60 |0) % 24
var minutes = value % 60
return new Time(addZeroToHour(hour, minutes) + ':' + addZeroToMinutes(minutes))
}
static fromDecimal(value){
let hour = Math.floor(value)
let minutes = (value % 1) * 60
return new Time((hour < 10 ? '0' : '') + Math.floor(hour) + ":" + (minutes<10 ? '0' : '') + Math.floor(minutes))
}
asDate(){
var splitted = this.hour.split(':')
let date = new Date()
date.setHours(splitted[0], splitted[1], 0)
return date
}
asMinutes(){
var splitted = this.hour.split(':')
return splitted[0]*60 + +splitted[1]
}
asDecimal(){
return this.asMinutes() * (1/60)
}
asHours(){
return this.hour
}
plusTime(other) {
return Time.fromMinutes(this.asMinutes() + other.asMinutes())
}
minusTime(other) {
return Time.fromMinutes(this.asMinutes() - other.asMinutes())
}
divideTime(other){
return Time.fromDecimal((this.asMinutes() / other.asMinutes()))
}
moduloTime(other){
return Time.fromMinutes(this.asMinutes() % other.asMinutes())
}
}
Imaginons que je travaille sur un répo qui contient un fichier binaire (comme un document word ou un tableau excel)
J'ai fait des modifications de mon coté que j'ai push et mon collègue en a fait aussi, au moment de pull les changements distants avant de push les siens, il se rend compte que le merge plante a cause d'un conflit dans le fameux fichier binaire.
Il va devoir annuler les changements de son coté, tirer la version la plus récente et remettre ses changements par dessus à la main.
Pour commencer, il doit arreter la procédure de merge (et donc annuler son pull) :
git merge --abort
Ensuite il doit ensuite retirer son fichier de son dernier commit (HEAD^ représentant le dernier commit local) :
git reset HEAD^ fichier/qui/pose/probleme.docx
git commit --amend
Puis supprimer ses changements locaux (ou les mettre de coté pour récuperer le contenu apres le pull)
git checkout -- fichier/qui/pose/probleme.docx
et enfin il pourra pull la version distante qui posait problème avec un git pull
Snippet pour désactiver l'adressage IPV6 sur une machine debian
sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.all.autoconf=0
sysctl -w net.ipv6.conf.default.disable_ipv6=1
sysctl -w net.ipv6.conf.default.autoconf=0
Retourne le nom complet d'un jeu a partir d'un accronyme
$(eval var a = {"csgo":"Counter-Strike: Global Offensive", "cs:go":"Counter-Strike: Global Offensive", "cs":"Counter-Strike: Global Offensive", "pubg":"PLAYERUNKNOWN'S BATTLEGROUNDS", "gta":"Grand Theft Auto V", "gta5":"Grand Theft Auto V", "gtaV":"Grand Theft Auto V"}; var result = a['$(query)'] ? '!game ' + a['$(query)'] : "Le jeu n'a pas été trouvé"; result;)
Mélange un ensemble de mots en respectant le nombre de lettres par mots
$(eval var mots = "$(query)".split(" "); var phrase = ""; for(let mot of mots){ let anagram = mot.split("").sort(function() { return 0.5 - Math.random() }); for(let lettre of anagram){ phrase += lettre }; phrase += " "; }; phrase )
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class ReadOnlyAttribute : PropertyAttribute
{
}
[CustomPropertyDrawer(typeof(ReadOnlyAttribute))]
public class ReadOnlyDrawer : PropertyDrawer
{
public override float GetPropertyHeight(SerializedProperty property,
GUIContent label)
{
return EditorGUI.GetPropertyHeight(property, label, true);
}
public override void OnGUI(Rect position,
SerializedProperty property,
GUIContent label)
{
GUI.enabled = false;
EditorGUI.PropertyField(position, property, label, true);
GUI.enabled = true;
}
}
public class Test
{
[ReadOnly] public string a;
[ReadOnly] public int b;
[ReadOnly] public Material c;
[ReadOnly] public List<int> d = new List<int>();
}