Accéder au contenu principal

Articles

Logitech Brio 500, zoom sous linux

 Logitech Brio 500 Vous avez une caméra logitech Brio 500 et vous trouvez que vous êtes éloignez ans l'image dans les logitiels de messageries. Il est possible d'améliorer cela  Lister les périphériques v4l2-ctl --list-devices Brio 500 (usb-0000:00:14.0-4):        /dev/video0        /dev/video1        /dev/media0 Lister les fonctionnalités du périphériques v4l2-ctl -d /dev/video0 --list-ctrls User Controls                     brightness 0x00980900 (int)    : min=0 max=255 step=1 default=128 value=129                       contrast 0x00980901 (int)    : min=0 max=255 step=1 default=128 value=128       ...

Multiple fetch dans une requête avec jpa

Hibernate et fort probablement les autres ORM sont limité dans la capacité de ramener tout une structure d'object imbriqué. @Entity private class Student{       @Id     private Long studentId;      private String firstname;     private String lastname;       @OneToMany( mappedBy = "student")     private List<Course> courses     @OneToMany( mappedBy = "student")     private List<Book> books } MultipleBagFetchException Si vous tentez de lancer cette requête provenant d'un repository   @Query("""   select s    from Student s    join fetch s.courses   join fetch s.books """)  List<Student> findStudentWithCoursesBooks(); vous obtiendrez une errreur de type MultipleBagFetchException. Il n'est pas possible de fetcher plus qu'une entité qui va généré un produit cartésien. Il pourrait être possible d'éviter cette e...

Conception d'api REST

 Il y a une multitude de question quand nous commencons à convevoir un API rest. Un débat qui reviens souvent est les ressources imbriqués, parent / enfant, sous-ressource. Hierachie Pourquoi opter pour /parents/{idParent}/enfants/{idEnfant} au lieu de  /enfants/{idEnfant}   La première approche peut être préférable si on veut montrer le lien hierarchique qui unit les ressources. Il faut cependant ne pas exagérer du niveau hierachique, car l'url peut rapidement devenir très long et rendre le tout moins lisible. Il est d'ailleurs rare de voir un api avec plus de 2 niveau. Dans le deuxième cas, pour une sauvegarde, il faudrait que la ressource est le nom du parent. Une autre approche serait /parents/{idParent}?enfants={idEnfant}   Doublon   Rien n'empêche d'utilisé plusieurs approches, dans ce cas, on pourrait se retrouver dans le cas qu'il y a différent endpoint pour obtenir la même ressource.   Longueur des url /companies/{idCompany}/departments/{idDepartm...

Versionnement de son api rest

 Vous avez un ensemble d'api qui est utilisé par de multiple clients. De nouvelle fonctionnalités prévue vont changer les valeurs de retour et les paramètres de certaines méthode. Afin de ne pas casser l'existant, il est possible de mettre en place plusieurs versions des apis. Nous verrons différentes approche pour mettre en place le versionnement d'un api. Versionnement des entités, payload Dans la première mise en place d'un api vous avez une entité  Person Si vous devez ajouter un nouveau champs dans cette entité, l'ancienne pourrait être renommé PersonV1 et la nouvelle PersonV2. PersonV2 ayan un champ prenom Versionnement des url @RestController public class PersonController { @GetMapping("v1/person") public PersonV1 personV1() { return new PersonV1 ("Collin"); } @GetMapping("v2/ person ") public PersonV2 personV2 () { return new PersonV2 ("Collin", "Marc"); } }     Versionnement par un Req...

Mettre à jour la sa feature branch avec sa branche parent

Branche de fonctionnalité Les branches de fonctionnalité sont un bon moyen de ne pas polluer la branche principale. Imaginer que l'utilisateur fait une multitude de commit pour une fonctionné x dans la branche principale entrecoupé de plusieurs autre concernant une fonctionnalité y. Il peut devenir complexe en cas de problème de revenir en arrière ou bien simplement de suivre le développement. Une branche de fonctionnalité permet de centralisé tous le développement autour d'une fonctionnalité avant de la mettre dans la branche principale. C'est une branche temporaire Mettre à jour sa branche Vous avez une branche de fonctionnalité feature/AddTaxManagement qui se base sur la branche principal par exemple develop . De nombreuse personne envoie leur changement dans la branche develop . Retourner dans la branche develop >git checkout develop     Ramener les changements >git fetch -p origin Fusionner les changements remote en local >git merge origin/develop git checkout...

Fetcher les enfants d'une entité

Cet exemple fonctionne sous spring data jpa.   Il est possible dans une requête jpql de charger directement les relations enfants d'un objet et d'éviter le problème des requêtes N +1 lorsqu'on a besoin d'accéder à ces enfants. Imaginons que vous avez une classe @Entity @Table public class Editeur {    @Id     @NotNull     private Long idEditeur;     @OneToMany(fetch = FetchType.LAZY, mappedBy = "editeur")     private List<Livre> livres = new ArrayList<>(); } Dans le repository de Editeur @Query(value=""" select e                      from Editeur e                     JOIN FETCH e.livres """  ) List<Editor> findByEditorWithBook(); Si vous désirez de mettre en place le paging, vous devez aussi spé...

Sauvegarde via rsync sur un nas Synology DS220+

  Introduction L'article présentera la sauvegarde du répertoire home d'un disque en btrfs sur un NAS Synology DS220+ à l'aide de rsynch La configuration par défaut a été utilisé pour installer la  distribution OpenSUSE Tumbleweed.Le SSD est donc formaté en BTRFS.  Activer rsync  Dans l'interface web de Synology, il faut s'assurer que le service rsync est activé. De plus, puisqu'on lance le rsync depuis un utilisateur externe, il faut aussi activé le rsync account. Commande rsync Il sera assumé qu'un utilisateur rsync_userr avec le mot de passe 1234 existe sur le NAS et qu'il est alloué d'utiliser rsync. Ce droit lui peux lui être octroyé dans l'onglet application en éditant un utilisateur. 19.23.31.115 étant l'adresse de votre NAS. collinm étant le nom de votre utilisateur local. rsync --progress -avr  --delete --exclude="lost+found" --exclude=".cache" /home/collinm ssh rsync_user@19.23.31.115::Backup/rsync Cette comman...