Supprimer les sauts de ligne en trop dans un sous-titre en .srt

On convertit avec iconv (et détection automatique de l'encoding avec uchardet), car certains sous-titres sont en utf16. Puis on supprime les retour chariot Windows qui empêchent de faire quoi que ce soit. On supprime alors les lignes commençant par un newline. On rajoute un newline aux lignes ne comportant que l'index. Enfin, on supprime la première ligne (qui alors ne contient qu'un newline).

for file in *.srt; do cp "$file" "$file.bak"; encoding=$(uchardet "$file"); iconv -f $encoding -t utf8 "$file" -o "$file.utf8"; tr -d '\r' < "$file.utf8" | sed '/^$/d' | sed 's/^\([[:digit:]]\+\)$/\n\1/gm' | tail -n +2 > "$file"; rm "$file.utf8"; done

Mise à jour de Nextcloud sur Gandi

  1. Ouvrir une console Gandi
  2. Aller dans le répertoire de Nextcloud
    php -f updater/updater.phar
  3. Modifier lib/versioncheck.php pour bypass PHP > 7.3
  4. ./occ update ou php -f occ update
  5. ./occ maintenance:mode --off ou php -f occ maintenance:mode --off

Ripper un DVD avec mplayer

mplayer -dumpstream dvdnav://1 -nocache -dumpfile my-duper-dvd.mpg 

Find duplicates

fdupes

fdupes  /home/chris
fdupes -r /home/chris # Recursive
fdupes -d /home/chris # Delete the duplicates (interactive)

Concatener plusieurs vidéos en une seule ligne de commande

ffmpeg -i "concat:1.mp3|2.mp3|3.mp3|4.mp3|5.mp3|6.mp3|7.mp3|8.mp3|9.mp3|10.mp3|11.mp3|12.mp3|13.mp3|14.mp3|15.mp3|16.mp3|17.mp3|18.mp3|19.mp3|20.mp3" -codec copy test.mp3 

Remove Indentation for a Single Paragraph

\noindent suppresses paragraph indentation when used at the beginning of a paragraph.
Also, you can always group things within a {} so that any settings within their are not in effect after the group.

\noindent
This is my paragraph 2 but is not indented since it was started with noindent.  Blah blah blah.

This is my paragraph 3 and is indented.  Blah blah blah.

{\setlength{\parindent}{0cm}
This is my paragraph 4 but is not indented since parindent was set to 0 within this group.  Blah blah blah.
}

OpenPGP - Une paire de clés presque parfaite

  1. Création de la clé principale: gpg2 --expert --full-gen-key
  2. Création des sous-clés, une dédiée à chaque tâche : Authentification (A), Signature (S), Chiffrement (E) :
    gpg2 --expert --edit-key 1A8132B1
    gpg> addkey
  3. Exporter la clé principale et un certificat de révocation :
    gpg2 --output 1A8132B1.rev --gen-revoke 1A8132B1
    gpg2 --export --armor 1A8132B1 > 1A8132B1.pub.asc
    gpg2 --export-secret-keys --armor 1A8132B1 > 1A8132B1.priv.asc
    gpg2 --export-secret-subkeys --armor 1A8132B1 > 1A8132B1.sub_priv.asc
  4. Supprimer les clés privées:
    gpg2 --delete-secret-key 1A8132B1
    gpg2 --import 1A8132B1.sub_priv.asc # Uniquement les sous-clés

Bonnes pratiques pour l'utilisation d'OpenPGP

  1. Utilisez le groupe de serveurs de clés sks plutôt qu’un seul serveur, et utilisez des connexions sécurisées dans ~/.gnupg/gpg.conf:
    keyserver hkps://hkps.pool.sks-keyservers.net
    keyserver-options ca-cert-file=/chemin/vers/CA/sks-keyservers.netCA.pem
  2. Assurez-vous que toutes les clés sont rafraîchies à l’aide du serveur de clés que vous avez sélectionné: keyserver-options no-honor-keyserver-url dans ~/.gnupg/gpg.conf.
  3. Rafraîchissez vos clés l’une après l’autre: sudo apt-get install parcimonie
  4. Ne faites pas aveuglément confiance aux clés des serveurs de clés.
  5. Ne vous fiez pas à l’identifiant de clé.
  6. Vérifier l’empreinte d’une clef avant de l’importer: gpg --with-fingerprint <keyfile>
  7. Utilisez un délai d’expiration de deux ans ou moins.
  8. N’utilisez votre clé primaire que pour certifier (et éventuellement signer). Utilisez une sous-clé différente pour le chiffrement.

Creating the perfect GPG keypair

Subkeys help protect your identity in case of private key (laptop) theft

  1. Creating your initial keypair: gpg --full-generate-key
  2. Adding a picture:
    gpg --edit-key
    gpg> addphoto
    gpg> save
  3. Strengthening hash preferences: gpg> setpref SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
  4. Adding a new signing subkey: gpg> addkey, then select RSA (sign only)
  5. Creating a revocation certificate: gpg --output \<bilbo@shire.org\>.gpg-revocation-certificate --gen-revoke bilbo@shire.org
  6. Exporting the final product:
    gpg --export-secret-keys --armor bilbo@shire.org > \<bilbo@shire.org\>.private.gpg-key
    gpg --export --armor bilbo@shire.org > \<bilbo@shire.org\>.public.gpg-key

Transforming your master keypair into your laptop keypair

  1. Export all of the subkeys from our new keypair to a file: gpg --export-secret-subkeys bilbo@shire.org > /tmp/gpg/subkeys
  2. Delete the original signing subkey from the keypair in our keyring: gpg --delete-secret-key bilbo@shire.org
  3. Re-import the keys we exported: gpg --import /tmp/gpg/subkeys

In case of emergency

  1. Unlock your safe-deposit box and get your master keypair out.
  2. Boot a live USB of Ubuntu or your distro of choice. Then, import your master keypair into the live USB’s keyring: gpg --import /path/to/\<bilbo@shire.org\>.public.gpg-key /path/to/\<bilbo@shire.org\>.private.gpg-key
  3. Now use gpg --edit-key to interactively revoke your subkeys: gpg> revkey
  4. Now that your subkey has been revoked, you have to tell the world about it by distributing your key to a keyserver.

OpenPGP User ID Comments considered harmful

Comments are "part of the user's identity". Only that.

Changing the expiry date of GPG keys

Get the key ID:

gpg --list-keys yom.li

Then edit the key:

gpg --edit-key ABCDEF12

Then type expire:

gpg> expire

Then verify the new expiry date:

gpg> list

The edit procedure is for one key only (key 0 by default), so we need to set expire on all keys:

gpg> key 1
gpg> expire

And so on. Then save:

gpg> save
gpg --keyserver pgp.mit.edu --send-keys ABCDEF12

The Perfect URL Regular Expression

%^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@|\d{1,3}(?:\.\d{1,3}){3}|(?:(?:[a-z\d\x{00a1}-\x{ffff}]+-?)*[a-z\d\x{00a1}-\x{ffff}]+)(?:\.(?:[a-z\d\x{00a1}-\x{ffff}]+-?)*[a-z\d\x{00a1}-\x{ffff}]+)*(?:\.[a-z\x{00a1}-\x{ffff}]{2,6}))(?::\d+)?(?:[^\s]*)?$%iu
/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/
<‍input type="url" /‍>
SELECT field FROM table 
WHERE field 
REGEXP "^(https?://|www\\.)[\.A-Za-z0-9\-]+\\.[a-zA-Z]{2,4}

Documentation : configurer les SMS Free Mobile

PHP: tricking highlight_file to use CSS classes instead of inline styles

<?php
# Author: Andy Wrigley wptest.means.us.com
ini_set('highlight.default', '"class="aw_default');
ini_set('highlight.keyword','"class="aw_keyword'); 
ini_set('highlight.string', '"class="aw_string');
ini_set('highlight.html', '"class="aw_htmlsrc');
ini_set('highlight.comment', '"class="aw_comment');
$aw_source = highlight_file('your_sourcefile.ext', TRUE);
echo str_replace('style="color: "', '' , $aw_source );
?>

WiFi gratuit avec FreeMobile

  • Choisir FreeWifi_secure
  • Méthode EAP : SIM

Les astuces DuckDuckGo pour développeurs et sysadmins

Générer des mots de passe

password longueur_du_passwd weak|normal|strong

Hasher une chaine de caractères

algorithme_de_hashage chaine_de_charactères

Identifier un algorithme de hashage

hash 6cf9d474d3d1bf20aa940bf47072301e

Vérifier qu’un site est disponible

is yom.li up
ip yom.li

Snippets for Vanilla JS Coding

When coding in VanillaJS, I usually create shortcuts:

const D = document
const $ = D.querySelector.bind(D)
const $$ = (selector, elem = D) => elem.querySelectorAll(selector)

With that dollar functions, you can already use a syntax that is similar to jQuery:

$('#button').onclick = () => {
alert('You clicked me!')
}
$$('.button').map(btn => {
btn.style.backgroundColor = 'red'
})

When it comes to event handling, having an on method can be useful:

Array.prototype.on = function(type, listener, options) {
this.map(el => {
if (el instanceof Element) {
el.addEventListener(type, listener, options)
}
})
return this // for chaining
}
$$('.button').on('click', e => {
const btn = e.target
alert('You clicked ' + btn.textContent)
}).on('mouseover', e => {
const btn = e.target
btn.style.backgroundColor = 'red'
}).on('mouseout', e => {
const btn = e.target
btn.style.backgroundColor = 'blue'
})

Converting Markdown to PDF or DOCX with Pandoc

pandoc -s -o doc.pdf part01.md part02.md

Batch replacing color with transparency

for %G in (*.png); do magick "%G" -transparent #FF00FF "batch\%G"; done

replace color in images

convert image -fuzz XX% -fill red -opaque white result