bash -c 'for f in .HEIC; do g=${f%.}; heif-convert -q 100 "$f" "$g.jpg"; done'
— Permalink
Autre astuce :
h2,h3,h4,h5,h6 {break-after: avoid-page;}
img, svg, table, canvas {break-inside: avoid;}
a::after {content: " (" attr(href) ")";}
]]>
Pour backuper les données des applications (attention, seules les applications qui le permettent c.f. ici, il faut utiliser adb backup
(puis adb restore
pour restaurer)
Pour télécharger les fichiers il faut utiliser adb pull
Pour le téléphone de Pia ça donne:
adb pull storage/self/primary .
]]>
convert image.png -bordercolor white -border 0 \
\( -clone 0 -resize 16x16 \) \
\( -clone 0 -resize 32x32 \) \
\( -clone 0 -resize 48x48 \) \
\( -clone 0 -resize 64x64 \) \
-delete 0 -alpha off -colors 256 favicon.ico
]]>
La BNF propose l'essentiel des titres de presse ci-dessus ainsi que la presse internationale en version électronique pour seulement 24€ pour toute l'année. C'est le passe lecture-culture: https://inscriptionbilletterie.bnf.fr/accueil. (pour l'accès aux articles de presse en ligne une fois qu'on a son compte BNF actif, il faut aller ici)
Pour les autres ressources électroniques qui ne sont pas dans pressreader, il y a https://easybnf.fr/
— Permalink
In tuto sympa surserde
(parce que autant les fonctionnalités de serde-derive
sont ergonomiques et plutôt bien documentées, autant la partie manuelle c'est moins évident.
Edit: sur serde-derive
Mick m'a appris ça:
#[serde(try_from = "&[u8]")]
pub struct Signature(
#[serde(serialize_with = "<[_]>::serialize")] [u8; LENGTH],
Comme serde
ne supporte pas les const-generics
il est limité aux tableaux de 32 éléments de long, mais l'invocation du dessus permet de contourner le problème:
]]>serde does not support const generics yet and so ser/deser is only implemented for [T; N] where N <= 32.
try_from uses a TryFrom implementation to deserialize.
serializewith = "<[]>::serialize" uses the slice serialization implementation instead of the fixed length array.
Ubuntu Image-Hardening.
# show the swap file in your system.
swapon --show
# turn the swap off. You should also make sure that you have enough free RAM available to take the data from swap file.
sudo swapoff /swapfile
# change the size of the swap file.
sudo fallocate -l 20G /swapfile
# mark this file as swap file:
sudo mkswap /swapfile
# enable the swap file
sudo swapon /swapfile
# see the result
swapon --show
Pour le rendre permanent, il faut ensuite l'ajouter au fichier /etc/fstab
:
https://www.numetopia.fr/passer-de-partition-swap-a-fichier-swap/#activation_du_fichier_swap_de_facon_permanente
— Permalink
J'aime bien le message qui s'affiche à la fin de l'installation de pnpm:
]]>Appended new lines to
/home/stymaar/.bashrc
Next configuration changes were made:
export PNPM_HOME="/home/stymaar/.local/share/pnpm" case ":$PATH:" in *":$PNPM_HOME:"*) ;; *) export PATH="$PNPM_HOME:$PATH" ;; esac
To start using pnpm, run:
source /home/stymaar/.bashrc
En France tous les numéros de téléphone suivants sont réservés aux fictions :
+33 (0)1 99 00 xx xx (Île-de-France) ;
+33 (0)2 61 91 xx xx (Nord-ouest, Réunion, Mayotte) ;
+33 (0)3 53 01 xx xx (Nord-est) ;
+33 (0)4 65 71 xx xx (Sud-est) ;
+33 (0)5 36 49 xx xx (Sud-ouest) ;
+33 (0)6 39 98 xx xx (GSM).
via sebsauvage.
— Permalink
]]>I think it's an entirely reasonable pattern to accept
impl Into<Option<T>>
, so that you can passNone
ort
without having to passSome(t)
.
— Permalink
Tout le thread est intéressant
— Permalink
#!/bin/bash
# If any command fails, exit immediately with that command's exit status
set -eo pipefail
TARGET_BRANCH="master"
echo "Running pre-push hook"
if ! git rebase $TARGET_BRANCH --exec "(cargo clippy; cargo fmt --check;)"; then
echo -e "\e[31mAn error occured, not pushing the changes\e[0m"
echo -e "\e[31mHint: you probably have an invalid commit in the branch you're trying to push\e[0m"
echo -e "\e[31mTo fix it, run: git rebase master --exec \"(cd nodes/; cargo clippy; cargo fmt --check;)\"\e[0m"
echo -e "\e[31mFix the issue, and then run: git rebase --continue\e[0m"
git rebase --abort
exit 1
fi
]]>
Astuce quand on manipule des Result
en Rust, si on veut exécuter une closure lorsqu'il n'y a pas d'erreur, mais que la closure que l'on souhaite exécuter peut retourner une erreur penser à méthode and_then
, plutôt qu'à la méthode map
.
— Permalink
git rebase -i master --exec "(cd sub_dir/if/need_be && cargo check)"
Pour exécuter un cargo check sur tous les commits intermédiaires pour s'assurer qu'on n'a pas un commit qui a pété un truc temporairement (pendant un merge de conflit lors d'un rebase notamment).
Note: par défaut le script est exécuté depuis le répertoire racine du projet git, donc il faut un cd
pour aller dans le répertoire contenant le projet Rust à compiler (s'il n'est pas à la racine lui-même).
— Permalink
$ sudo apt install libimage-exiftool-perl
$ exiftool document.pdf
]]>
Pour qu'un rebase interactif prenne aussi en compte le premier commit il faut faire :
git rebase -i --root
(Utile lors de tout petits projets, où le premier commit n'est pas bien loin)
— Permalink
Pour se déplacer dans un répertoire de manière temporaire sur une ligne, il faut utiliser les parenthèses :
stymaar@Ragnaros:~/Document/ $ (cd ~ && ls)
stymaar@Ragnaros:~/Document/ $
Ça fait un cd
dans mon home avant de faire ls
mais la position du shell courant ne change pas.
— Permalink
C'est super ce truc: c'est un analyzer d'utilisation de disque (présent dans les paquets de Linux Mint) mais qui est à la fois beaucoup plus rapide que celui de MATE fourni par défaut avec Mint (genre 30 secondes au lieu de 3 ou 4h pour 700Go, la différence est juste hallucinante), mais en plus fait de l'indexation ce qui permet d'éviter d'avoir à refaire toute l'analyse d'une fois sur l'autre quand on sait que rien n'a changé.
— Permalink
rename -v 's/image//' *.png
fn main() {
dbg!(type_name_of(2));
dbg!(type_name_of(268.2111));
}
fn type_name_of<T>(_: T) -> &'static str {
std::any::type_name::<T>()
}
Au passage j'apprends qu'on peut désormais utiliser des bigInt en JavaScript: 10n
est un bigInt
— Permalink
Le fait que les aspirateurs robot utilisent toujours le design complètement pété des roomba d'il y a 20 ans est une bonne illustration de l'incapacité du capitalisme à innover autrement que par coup de bols irréguliers (aussi appelé “disruption”) …
— Permalink
Bon à savoir, pour passer un document LibreOffice en mode portrait.
— Permalink