Si jamais vous avez besoin de fusionner toutes les vidéos d'un dossier comme par exemple, je sais pas mais des épisodes de Kaamelott qui ont été distribués par épisode, voilà de quoi le faire en deux commandes sous linux:
Bouton droit dans le dossier et Ouvrir dans un terminal puis:
Puis, on relance le serveur: sudo service apache2 restart
Réglages divers
Activer les canaux Européens pour le wifi : sudo iw reg set FR
Résoudre le problème de décalage de l'heure en dual boot: timedatectl set-local-rtc 1 # mettez 0 pour la remettre sur UTC
Raccourcis claviers:
windows+E pour lancer caja: dans raccourcis clavier, chercher «dossier personnel» et redéfinir le raccourci
redéfinir la capture d'écran pour avoir le menu sa ns faire de capture direct: dans raccourcis clavier, créer un nouveau raccourci, dans la commande tapermate-screenshot --interactive puis ré assigner le raccourci prtScr.
en cas de souci avec la touche verr maj:
sudo apt install numlockx
Centre de contrôle > Fenêtre de connexion > Options, cocher Activer NumLock.
sur portable, pour allonger l'autonomie: sudo apt install tlp
Je me note ici pour une prochaine fois parce que fetch n'est pas forcément très intuitif...
2 façons d'utiliser fetch :
la plus tendance et élégante : en enchaînant les then()
fetch("index.php", { method: 'POST', body: formData })
.then((response)=>{
// on attend l'arrivée de la réponse et on la traite
return response.text(); // ou response.json();
})
.then((text)=>{
// on attend la fin du traitement de la réponse et on en traite le contenu
console.log(text);
});
la plus lisible (?) : avec async et await
En gros, on crée une fonction asynchrone pour pouvoir utiliser les await.
const fetchAPI = async(URL) => {
const response = await fetch(URL); // on attend l'arrivée de la réponse
const data = await response.json(); // on attend la fin du traitement de la réponse
console.log(data)
}
fetchAPI("https://jsonplaceholder.typicode.com/todos/1")
De côté pour plus tard... Une reset.css plus moderne... Je me contentais du box-sizing depuis son avènement.
Les explications associées sont intéressantes.
/* Box sizing rules */
*,
*::before,
*::after {
box-sizing: border-box;
}
/* Prevent font size inflation */
html {
-moz-text-size-adjust: none;
-webkit-text-size-adjust: none;
text-size-adjust: none;
}
/* Remove default margin in favour of better control in authored CSS */
body, h1, h2, h3, h4, p,
figure, blockquote, dl, dd {
margin: 0;
}
/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
ul[role='list'],
ol[role='list'] {
list-style: none;
}
/* Set core body defaults */
body {
min-height: 100vh;
line-height: 1.5;
}
/* Set shorter line heights on headings and interactive elements */
h1, h2, h3, h4,
button, input, label {
line-height: 1.1;
}
/* Balance text wrapping on headings */
h1, h2,
h3, h4 {
text-wrap: balance;
}
/* A elements that don't have a class get default styles */
a:not([class]) {
text-decoration-skip-ink: auto;
color: currentColor;
}
/* Make images easier to work with */
img,
picture {
max-width: 100%;
display: block;
}
/* Inherit fonts for inputs and buttons */
input, button,
textarea, select {
font: inherit;
}
/* Make sure textareas without a rows attribute are not tiny */
textarea:not([rows]) {
min-height: 10em;
}
/* Anything that has been anchored to should have extra scroll margin */
:target {
scroll-margin-block: 5ex;
}
Deuxième épisode de mes notes perso sur la bibliothèque Image magic pour évoquer la classe ImagickDraw qui, comme son nom l'indique, permet de dessiner avec Imagick. ( 1er épisode )
On va se limiter à des usages basiques parce que la lecture du sommaire suffit à imaginer des possibilités certes alléchantes mais totalement hors de propos en ce qui me concerne (courbes de bézier etc)
Spoiler: c'est nettement moins intuitif et simple que pour le traitement d'image... l'écart entre Imagick et GD dans le domaine du tracé n'est plus si évident: ça mériterait de faire un classe pour simplifier tout ça... ( /me se jette sur son bujo pour griffonner spasmodiquement)
Préambule
Cette classe crée un objet servant d'instructions à appliquer ensuite à un objet Imagick.
On partira du principe que vous avez fait des instances des classes comme suit:
$im=new Imagick(); # l'image dans laquelle vous allez appliquer l'objet ImagickDraw
$draw=new ImagikDraw();
Ajouter un texte
Fixer les caractéristiques
$draw->setFont(fonte); : sélectionne la fonte à utiliser
$draw->setFontSize(taille); : définit la taille en pixels
$draw->setFillColor(couleur);: définit la couleur de fond (normalement, couleur est un objet ImagickPixel, voir 1er épisode mais on peut passer une chaîne au format de couleur CSS )
$draw->setTextAlignment(alignement); : une des constantes d'alignement imagick::ALIGN_LEFT imagick::ALIGN_CENTER Imagick::ALIGN_RIGHT
$draw->setGravity(Imagick::GRAVITY_CENTER); centre le texte dans sa boîte (horizontal et vertical)
$draw->setTextDecoration(decoration): une des constantes de décorationimagick::DECORATION_UNDERLINE imagick::DECORATION_OVERLINE imagick::DECORATION_LINETROUGH et bien d'autres (comme du... bruit ?!).
$draw->setTextAntialias(true);: ajouter de l'antialias
l'espacement :
entre les mots : $draw->setTextInterwordSpacing(taille)
entre les lignes : $draw->setTextInterlineSpacing(taille)
Tracer le texte
$draw->annotation(x,y,texte) : trace un texte dans la police sélectionnée
$im->annotateImage( $draw, 0, 0, 0, $fontName ); : ajoute le texte à l'image.
Obtenir des infos utiles
obtenir la liste des polices disponibles: $im->queryFonts($pattern = "*") 🆒 on peut filtrer avec une pattern à la façon de glob().
obtenir les infos fixées par setXXX : getXXX ... ainsi on a getFont(), getFontSize() etc...
obtenir les dimensions de la boîte de texte: $im->queryFontMetrics($draw, text); on récupère un tableau comme ci-dessous
Array
(
[characterWidth] => 9
[characterHeight] => 9
[ascender] => 9 # la taille au-dessus de la baseline
[descender] => -2 # la taille sous la baseline
[textWidth] => 71
[textHeight] => 10
[maxHorizontalAdvance] => 12
[boundingBox] => Array
(
[x1] => 0
[y1] => -2
[x2] => 6.890625
[y2] => 7
)
[originX] => 70
[originY] => 0
)
Dessiner des formes
Fixer les caractéristiques
opacité du trait : $draw->setStrokeOpacity(0-1);
couleur du trait : $draw->setStrokeColor(couleur);
épaisseur du trait : $draw->setStrokewidth(nb);
type de trait : $draw->setStrokeDashArray() Le motif semble être plein de possibilités car on peut le définir très spécifiquement et même utiliser une image comme motif (->setStrokePatternURL)
couleur de remplissage : $draw->setFillColor(couleur);
Allez, pour une fois, j'ai un peu de temps devant moi, je vais éplucher un peu la lib Image magick dont je parlais il n'y a guère...
La base
charger UNE image
Simple: pas besoin de plusieurs fonctions selon le format, il suffit de $images = new Imagick('image.jpg');
charger DES images (et là c'est fort)
Même pas nécessaire de passer par un foreach, on fournit le tableau des fichiers voire directement un glob: $images = new Imagick(glob('images/*.JPG'));
Sauver une image
$im->writeImage('image.jpg');
Faire une miniature
Si on laisse une dimension à 0, les proportions sont conservées (quand tu vois la merde que c'est avec GD !)
$image->thumbnailImage(100, 0);
Output une image
header('Content-type: image/jpeg');
$image = new Imagick('image.jpg');
# ici on effectue un traitement puis on sort le résultat
echo $image;
Récupération d'infos sur les images
taille $im->getImageWidth() $im->getImageHeight()
format $im->getImageFormat()
🆒 ⮕ pour fixer le format de l'image, c'est juste $im->setImageFormat('png'); ! 😍
Comme pour GD, il faut créer un objet couleur dans les traitements d'image, mais c'est plus simple qu'avec GD (et plus complet): il suffit de passer une couleur selon les normes CSS. Du coup, la transparence n'est pas gérée par une connerie de paramètre «alpha» mais simplement par ... rgba()... 💖
🆒 ⮕ Ça peut paraître compliqué, mais en fait, dans les fonctions où on est sensé utiliser ImagickPixel, je me suis aperçu qu'on pouvait tout simplement passer une string contenant la couleur css... elles se démerdent seules. 😍
Image Magick me semble particulièrement bien nommée tant les possibilités sont énormes et la simplicité d'utilisation étonnante: on sent une volonté de se simplifier la vie lors de l'utilisation... c'est juste beau.
Je voulais mettre une image de chaque effet dans les descriptions mais:
ça prenait une place de ouf
je préfère reprendre certaines de mes applis/api avec imagick
🆕 une boîte à outils complète mais limitée à une utilisation jour sans inscription 🤬 : https://clipdrop.co/ (uncrop, génération, suppression de fond, doodle2real, cleanup, relight, text remover...)
Tiens, il existe une API qui permet de transformer du texte en Bionic Reading, cette technique améliorant la lecture en mettant en gras le début du mot.
Je m'interrogeais justement sur la pertinence d'implémenter ça sur mon appli de documents en espagnol pour les élèves éprouvant des difficultés de lecture...
Bon, il faudra que je fasse une couche d'interface afin que les données des élèves ne transitent pas vers le site de l'API, comme pour celle de synthèse vocale... mais rien de trop ardu.
Depuis quelques jours, un truc étrange s'est manifesté sur mon ordi portable: les dossiers Document, Images, Téléchargement, Bureau avaient tous été déplacés dans un sous-dossier à ouatmille niveaux sans aucune raison visible...
Au cas où ça vous arrive, remettez-les à leur place (en drag drop ou via le terminal) puis éditez le fichier : ~/.config/user-dirs.dirs pour rétablir les chemins d'origine. Redémarrez et voilà...
plus la vitesse est basse, plus le matériau subira de brûlures indésirables: pour la découpe, il vaut donc mieux augmenter la vitesse et le nombre de passes que faire le contraire
quand on ignore les réglages d'un matériau, tester en commençant par 10% / 1000 mm/m et augmenter l'intensité
nettoyer régulièrement la lentille
comme la focale du laser est fixe, lors des découpes le point de focale devient de moins en moins optimal au fur et à mesure des passes: on propose pour les matériaux les plus épais, de régler la focale au milieu du matériau. Ainsi, pour un 10mm d'épaisseur, on règle 5mm plus bas que la cale.
certains matériaux sont toxiques si on les brûle: voir PDF
Les réglages sont souvent à affiner mais on peut partir des suivants: PDF
Pour des matériaux plus exotiques comme le cuir, le verre transparent, l'acrylique transparente ou le miroir :
verre transparent: peindre en noir, graver puis nettoyer (pas de découpe possible) 1000-2000 mm/min 60-80%
acrylique transparente : comme le verre, peindre avant de graver (pas de découpe possible)
miroir: ⛔ on grave le dos du miroir pas la face (danger !) 1000-2000 mm/min 30-80%
cuir : 1000-2000 mm/min 20 – 60%
acier inox: marquage au marqueur noir, 800-1500 mm/min 20-70%, nettoyage