C’est simple, mais pas si évident que ça.
Pour ouvrir une vidéo avec les sous-titres dans VLC, il faut aller dans Fichier > Ouvrir un fichier (avancé).
C’est simple, mais pas si évident que ça.
Pour ouvrir une vidéo avec les sous-titres dans VLC, il faut aller dans Fichier > Ouvrir un fichier (avancé).
Si vous tombez sur un fichier hybride avec des retours à la ligne unix et dos dans le même fichier :
Dans Vim :
:%s/^M//g
En tapant le ^M avec Ctrl+V Ctrl+M.
Si un jour vous vous retrouvez dans l’impossibilité de vous loger et que vous obtenez le message d’erreur :
/bin/bash: Too many open files
Ouille ouille. Moi j’ai été obligé de faire un Ctrl+Alt+Suppr pour redémarrer.
Quelques astuces :
Pour obtenir la limite max de nombre de fichiers ouverts :
cat /proc/sys/fs/file-max
Pour changer cette limite :
sysctl -a | grep file-max echo fs.file-max=200000 >> /etc/sysctl.conf sysctl -p
Les limites par utilisateur sont présentes dans /etc/security/limits.conf
Enfin, cerise sur le gâteau, pour obtenir les processus qui mangent le plus de descripteurs :
lsof +c 15 | awk '{printf("%15s (%s)\n", $1, $2)}' | sort | uniq -c | sort -rn
Sources :
La commande screen est très pratique pour lancer des scripts lorsqu’on est connecté en SSH, pour que si une coupure de courant ou un problème survient côté client, le shell client ne soit pas tué ainsi que le script.
Pour lancer un script :
$ screen
Pour le détacher, il faut faire Ctrl+A, puis D.
Enfin, pour récupérer un screen :
$ screen -r
En TMA, on voit de tout, pour le meilleur ou pour le pire. Le meilleur ayant cependant tendance à se faire rare. Ou peut-être est-ce du à la loi de Murphy ?
Voici quelques extraits de code PHP relevé par notre ami Teeboo, à déguster…
Les commentaires valent leur pesant de cacahuètes :
if(isset($t[2]) && $t[2] !== null) // Empiriquement, j'ai vu que c'était équivalent, mais sait-on jamais…
/* Accesseur tordu permettant à un compte qui s'est laissé expirer puis en * catastrophe a voulu se réabonner, de jouir plus ou moins de son ancien * abonnement. À utiliser avec prudence (autrement dit nulle part ailleurs * que là où je l'ai déjà fait), l'idée qui a toujours été derrière les * specs techniques étant que quelqu'un qui a laissé expirer son compte, * c'est pour sa pomme, il faut qu'il se réabonne en partant de 0. Mais * puisqu'il aura été décidé qu'on pardonne tout à l'utilisateur... * Renvoie false le plus souvent possible, et true quand on est quasi- * certain de notre coup; les erreurs de BdD renvoient du false aussi. */ function ComptePrimaireOuRecuperateur($pourPaquet)
/* À FAIRE: simplifier les paramètres. L'idée de départ de cette fonction * était en fait d'externaliser un bout de VerifierInfos; elle table donc * sur tout ce qui y a déjà été calculé, mais maintenant si on peut en faire * une fonction indépendante, ce ne sera pas plus mal. */ function DernieresAdresses($idChose, $mode, &$payeur, &$infos2)
// Si tous ses abonnements ont expiré, on tente notre chance avec un vieil abonnement. Pas terrible, sachant que le module était à l'origine prévu pour que si un utilisateur a laissé son compte expirer, ben tant pis pour lui, il recommence tout un processus d'abonnement. Notre permissivité nous perdra. /* BOGUE: ça permet à un utilisateur de laisser expirer son compte, puis de créer deux abonnements de remplacement dans la même journée. Pour peu que par mégarde les deux soient validés, ça va péter! */
$d = array(); $o = array(); // $d, mais d'origine. Alors qu'on adapte $d à usage de paramètres pour les fonctions qu'on appelera derrière, on garde $o tel quel pour le réinjecter en cas d'annulation de la procédure (formulaire mal rempli, etc.).
Note : Attention, là, c’est un gros morceau. Plusieurs perles se cachent là-dedans, saurez vous les retrouver ? Pour info, COMPTESADREL_DISPO est une constante définie plus haut, qui vaut 0.
else if(($eAdrel = CompteUtil::VerifierDispoAdrel($d[champAdrel])) != COMPTESADREL_DISPO || ($eAdrel = VerifFormUtil::checkExistingEmailAddress($d[champAdrel]) ? COMPTESADREL_PRESENTE : COMPTESADREL_DISPO) != COMPTESADREL_DISPO) do { switch ($eAdrel) { case COMPTESADREL_ERREUR: $e = 'Une erreur interne est survenue.'; /* À FAIRE: un message un peu plus bavard. */ break; case COMPTESADREL_PRESENTE: $manquants[] = 'Adresse utilisée par un compte en cours d\'abonnement'; //$emailDejaEnBase = true; break; case COMPTESADREL_PASSEE: $manquants[] = 'Adresse utilisée par un compte qui ne dispose plus d\'abonnement'; $emailDejaEnBase = true; break; case COMPTESADREL_FUTURE: case COMPTESADREL_DEMANDEE: if(AUTORISER_DEUX_DEMANDES_MEME_ADREL) break 2; // Finalement pas erreur. $manquants[] = 'Adresse reservée pour un compte en cours de création'; break; } if(!$e) $e = true; $tpl->setVariable('email_erreur', 1); } while(false); }
if(!$e) do // Un do dont la sortie sera une erreur. { $e = true; // On commence par signaler qu'il y a erreur: ce sera ce qui restera si on n'atteint pas la fin du while, où nous nous déclarerons exempts d'erreur.
if(!count($manquants)) // À FAIRE: un peu plus propre. Là c'est une récup' rapide un soir de bourre
/* ATTENTION: en mode INFOS_ACHAT, $idFacture doit être définie pour ici. *//* À FAIRE?: simplifier. C'est un résidu d'un ancien mode, où VerifierInfos sur les abo recevait un id_refernece comme $idChose, et sur les achats normaux un id_facture. Voir si on peut déduire $idFacture d'$idChose, si oui supprimer le dernier paramètre de VerifierInfos dont la valeur par défaut à false pourrait à tort laisser croire qu'on s'en fiche. Si on a du code pour déduire, dans un premier temps on pourra fonctionner en mode test où l'on compare le résultat de ce code et l'$idFacture effectivement passé, en laissant une trace si ça diffère. Si au bout d'un mois on n'a rien, on peut simplifier. Le cas où j'entrevois déjà un risque de différence est l'achat d'évolutions d'abonnement: si je me souviens bien, on a deux factures (facture d'abonnement - facture d'évolution) pour une seule référence (l'abonnement). */
/* Mutualisation de code, récupérée d'un code existant, ce qui peut * expliquer l'inexplicable. */ function CloreEtapesFacturation(...
Je trouve toujours que la taille de la police de gvim est un tantinet trop grande.
Pour une taille plus petite, rajouter ceci dans votre ~/.vimrc :
set guifont=Monospace\ 8
Salut à tous !
Ceci est mon nouveau blog.
Je le destine à des trucs et astuces en rapport avec l’informatique et les logiciels libres.