Corriger le problème d'acces root sous mysql 5.7

23 June 2019

Lorsque l’on installe mysql 5.7, l’utilisateur root ne peux pas ce connecter à la machine. C’est normal bien entendu.

Warning
Ne faite jamais cela sur une machine de production !

On peux cependant corriger cela :

Pour ce connecter à Mysql : sudo mysql -u root

Ensuite, on utilise autorise root a ce connecter :

USE mysql;
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
SET PASSWORD FOR root@localhost=PASSWORD('root');
GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'root' WITH GRANT OPTION;
flush privileges;

Les macros avec evil-mode

22 June 2019

J’ai enfin compris comment utiliser les macros d’Emacs avec Evil-mode.

Dans un premier temps, il faut définir une macro avec q + une lettre qui servira pour rappeler la macro. A priori, n’importe quelle lettre peu être utilisé. J’ai pas tout testé cependant.

Ensuite, définissez normalement votre macro et arrêté l’enregistrement quand vous voulez avec q.

Il suffit alors d’utiliser @ - la lettre pour appeler la macro ! Du coup, il est possible d’enregistrer plusieurs macros sur différentes lettre, cela peut être bien pratique :).

En résumé :

  • q a pour démarrer la macro sur la lettre de votre choix (ici a).
  • q pour arrêter l’enregistrement
  • @ - a pour lancer la macro

Spacemacs et Typescript sous Windows

28 March 2019

Si vous utilisez Spacemacs pour faire du TypeScript sous Windows, vous avez certainement remarqué que l’auto-complétion est a peine utilisable tellement c’est lent. Souvent, taper une méthode complètement va plus vite que d’attendre que l’auto-complétion ne vous la propose.

La faute à Windows bien entendu ! De manière générale, Emacs tourne bien plus lentement sous Windows.

Bref, c’est chiant et pour les gens comme moi qui trouve que VScode c’est pas terrible comparer a Emacs/Spacemacs, j’ai trouvé une solution sur le Github de flycheck. Il faut ajouter ce bout de code dans votre dotspacemacs/user-config

(eval-after-load 'flycheck
   '(setcar (memq 'source-inplace (flycheck-checker-get 'typescript-tslint 'command)) 'source-original))

Normalement cela devrait aller beaucoup mieux. En tout cas chez moi cela donne un gros gain de performance.


Laravel : utiliser un trait php pour purifier le HTML d'un champ

12 February 2019

Lorsque l’ont stock du HTML dans le champ d’une base de donnée, il ne faut jamais le stocker sans le filtrer. C’est une mauvaise pratique bien connue, cela attire les failles XSS et personne n’aime en avoir.

Bref, voici une méthode sympa pour protéger un champ.

Dans un premier temps il faut installer HTMLPurifier :

composer require ezyang/htmlpurifier

Cette librairie permet de filtrer le html correctement. N’utilisez pas strip_tags, cette fonction n’est pas faite pour la sécurité.

Ma base de donnée contient assez bien de champs “description”, ils risquent tous de contenir du HTML, car ils sont remplis par un [CKeditor->https://ckeditor.com/].

Cela affecte tous ces champs, j’ai envie de les protéger facilement. J’ai donc créé un fichier ./app/traits/purify.php.

On va mixer le pouvoir des [mutators de Laravel->https://laravel.com/docs/5.7/eloquent-mutators#defining-a-mutator] et

<?php

namespace App;

use HTMLPurifier_Config;
use HTMLPurifier;

trait Purify
{
    /**
     * @property $allowed allowed html inside description field
     */
    private $allowed = 'p, strong, h2, h3, a[href], ul, ol, li, i';

    /**
     * Laravel mutator.
     * Filter all unauthorized HTML from the description field
     * @param $value
     */
    public function setDescriptionAttribute($value)
    {
        $config = HTMLPurifier_Config::createDefault();
        $config->set('HTML.Allowed', $this->allowed);
        $purifier = new HTMLPurifier($config);
        $this->attributes['description'] = $purifier->purify($value);
    }
}

Il suffit alors d’utiliser ce trait dans un modèle Laravel pour que les champs description soit automatiquement filtrés avant d’être insérés dans la base de donnée !

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class MyModel extends Model
{
    use Purify;
}

Laravel et PHP sont des outils vraiment formidables quand on comprend ce genre d’astuce !


Wtf javascript ?

4 February 2019

Vous reprendrez bien un peu de WTF en Javascript ?

wtf javascript comment


Linux Mint mange votre batterie ?

31 January 2019

Si votre laptop semble consommer plus de batterie qu’il ne devrait, désactivez donc les effets de fenêtres (Paramètre > Effets). Cela semble consommer pas mal de batterie ! Personnellement, j’ai gagné beaucoup d’autonomie avec ce changement.

panneau de configuration des effets sous linux mint


Angular (2+), jQuery et jQuery-ui sont sur un bateau

28 January 2019

Notes

jQuery a pas mal mauvaise presse et certain vont jusqu’à déclarer leur code “jQuery free”, comme si ce framework était pestiféré.
Je trouve cependant que jQuery a quelques point fort qui sont toujours d’actualité :

  • Beaucoup de plugins et librairies qui souvent ne sont pas “jQuery free”.
  • Beaucoup de plugins et librairies qui sont souvent très bien testées, débuggées et très bien maintenues.

Alors c’est clair que pour une conférence, dire qu’on utilise jQuery, c’est “has been”. Par contre, si on a envie d’avoir quelque chose de stable qui fait bien le boulot, l’écosystème de jQuery conviens très bien !

Dans le cas qui m’occupe j’avais besoin d’un “drag” et d’un “drop” d’éléments qui serve à autre chose qu’ordonné une liste. Je n’ai trouvé aucun module qui s’occupe de cela. Tous ceux que j’ai trouvé (en tête, le drag&drop du CDK d’angular) s’intéresse uniquement au fait de trier des listes… Et ce n’est absolument pas ce dont j’ai besoin…

Bref, tout cela pour dire que je me suis tourné vers… jQuery-ui draggable et droppable.

Installation

Pour installer jQuery-ui avec npm, il faut utiliser le paquet jquery-ui-dist. Je ne sais pas à quoi sert le paquet jQuery-ui, mais ce n’est clairement pas le plus simple à utiliser.

npm install jquery jquery-ui-dist
npm install --save @types/jquery @types/jqueryui

Dans le angular.json, dans la partie scripts on ajoute les librairies :

"./node_modules/jquery/dist/jquery.min.js",
"./node_modules/jquery-ui-dist/jquery-ui.js"

Au début du composant Angular, on va déclarer jQuery (mais en dehors du @Component) :

declare var $: any;

On peut maintenant utiliser les plugins jQuery-ui dans les composants Angular. Il semble recommandé de le faire dans le hook AfterViewInit.

  ngAfterViewInit() {
    $(this.thumb.nativeElement).draggable({
      revert: true,
      zIndex: 100
    });

    $(this.thumb.nativeElement).droppable({
      drop: (event, ui) => {
        this.documentService.combine([this.document.id, draggable_id]);
      }
    });
  }

Binding datas

Pour ajouter des données aux éléments “draggés”, une petite pirouette :

$(this.thumb.nativeElement).data('document', this.document);

Que l’on récupère ensuite dans l’élément ui.draggable :

    $(this.thumb.nativeElement).droppable({
      drop: (event, ui) => {
        const draggable = ui.draggable.data('document');
        this.documentService.combine([this.document.id, draggable.id]);
      }
    });

Si Pitivi ne lit pas les MP4

28 May 2018

Testé sous Ubuntu 16.04 et Linux Mint 18. Dans le cas ou vous n’arrivez pas à importer des fichiers MP4 dans Pitivi :

gst-resource-error-quark: Stream file:///home/arthur/brique_lego.mp4 discovering failed

Il faut simplement installer les codes manquant :

sudo apt-get install gstreamer1.0-libav

Reformater les fichiers XML via Emacs et Xmllint

24 May 2018

Souvent on reçois des fichiers XML sans formatage, car créer et destinés à des machines. Il y a un outil sympa, en CLI : xmllint. Pour l’installer :

sudo apt install libxml2-utils

Ensuite, une petite fonction Emacs qui va bien :

  (defun xml-format ()
    "Format an XML buffer with `xmllint'."
    (interactive)
    (shell-command-on-region (point-min) (point-max)
                             "xmllint -format -"
                             (current-buffer) t
                             "*Xmllint Error Buffer*" t))