Script pour mettre le stylet Wacom sur l’écran HDMI

Par défaut, ma tablette wacom se «mappe» sur l’ensemble de l’espace de visualisation de mon ordinateur portable. Ce qui fonctionne très bien, mais si je branche un écran HDMI ça devient compliqué d’écrire tant l’espace est grand.

Sous ubuntu, la commande xsetwacom indique à l’ordinateur de réduire l’utilisation du stylet de la tablette sur un seul écran.

Pour l’utiliser, il faut d’abord identifier l’écran avec xrandr :

$  xrandr
Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 16384 x 16384
eDP connected 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
   1920x1080     60.04*+
   1680x1050     60.04  
   1280x1024     60.04  
   1440x900      60.04  
   1280x800      60.04  
   1280x720      60.04  
   1024x768      60.04  
   800x600       60.04  
   640x480       60.04  
HDMI-A-0 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 509mm x 286mm
   1920x1080     60.00*+
   1680x1050     60.00  
   1280x1024     60.02  
   1440x900      59.90  
   1280x800      59.91  
   1152x864      75.00  
   1280x720      60.00  
   1024x768      70.07    60.00  
   800x600       60.32    56.25  
   640x480       66.67    59.94  
   720x400       70.08  

Ici l’écran visé se nomme HDMI-A-O.

Il faut également trouver le numéro d’identifiant du stylet (toujours avec la même commande) :

$  xsetwacom list dev
Wacom Intuos S 2 Pen stylus     	id: 21	type: STYLUS    
Wacom Intuos S 2 Pad pad        	id: 22	type: PAD       Langage du code : PHP (php)

Nous trouvons ici le numéro 21. Hélas, cet identifiant a la désagréable habitude de changer à chaque redémarrage de l’ordinateur. Il est donc difficile à scripter en insérant simplement la commande de sélection comme elle suit :

$ xsetwacom --set 21 MapToOutput HDMI-A-0Langage du code : JavaScript (javascript)

Pour automatiser tout de même l’opération, on pourra écrire un petit script bash comme suit :

#!/usr/bin/bash
# Stylet de la tablette sur hdmi
# xrandr pour avoir les noms des écrans
# 
LINE=$(xsetwacom list dev | grep STYLUS)
IFS='	 '
read -rasplitIFS<<< "$LINE"
echo ${LINE}
#Wacom Intuos S 2 Pen stylus     	id: 21	type: STYLUS
ID=${splitIFS[7]}
echo $ID
xsetwacom --set ${ID} MapToOutput HDMI-A-0Langage du code : PHP (php)

Et le lancer à chaque branchement de la tablette.

Publié dans Non classé | Marqué avec , | Laisser un commentaire

L’affaire pingouin

Cher journal, cet après midi en traînant dans les rayons enfants de la bibliothèque je tombe sur un livre «imagier» nommé «Pingouin ou manchot».

Un livre qui rétablit la vérité sur les manchots et les pingouins !

La vérité éclate au grand jour

Voila qui nous rappel le site «l’affaire pingouin». En rentrant je me suis donc rué sur mon pc (oui je suis un vieux qui préfère utiliser un clavier plutôt que de caresser son téléphone pour «surfer» sur «l’»internet ) et quelle ne fut pas ma déception de découvrir que le site de l’affaire n’existe plus !

Un complot ourdit par de sombres individus chercherait-il à faire taire cette lourde vérité ?

Publié dans Non classé | Marqué avec , , , | Laisser un commentaire

Connecteur batterie lampe vélo

Les connecteurs de batteries de ce genre de lampe vélo sont vraiment très dures à déconnecter.

On a tendance à tirer sur le câble et à l’arracher. La solution simple pour éviter ça est de donner un petit coup de pince coupante dans le manchon :

Une petite fente dans le manchon et le tour est joué

La déconnexion est grandement facilité sans affecter réellement la connexion.

Publié dans Non classé | Marqué avec , , , , | Laisser un commentaire

Vidanger un lave-linge LG bouché

Comment faire pour vidanger un lave-linge qui est bouché. Sur le LG 8kg il y a une petite trappe en bas à droite. Si on l’ouvre on peut sortir un tuyau de caoutchouc et le déboucher pour récupérer l’eau du tambour.

Seulement voila, le tuyau est tout en bas de la machine à laver, et la capacité du tambour est de plusieurs dizaine de litres.

La solution adoptée peut-être d’utiliser un bac «plat» de peinture pour rouleau, puis d’écoper dans un seau à coté. Comme ça prend du temps, on hésitera pas à utiliser un timer pour laisser couler.

On fait avec ce qu’on a
Publié dans Non classé | Marqué avec , , , | 3 commentaires

Déballage du CH32V003, le microcontrôleur à 0.1$

Après avoir commandé un kit de développement CH32V003 sur Tindie, voici qu’il m’arrive par courrier (avec taxes douanière) ce matin dans ma boite aux lettres.

Les deux carte de développement

D’après ce que j’ai compris, il est nécessaire d’avoir la sonde de debug en plus pour pouvoir la programmer. Il va donc falloir que j’attende le deuxième colis pour pouvoir réellement jouer avec.

Ça ne nous empêche pas de la brancher.

Le kit semble fonctionner, les LED s’allument. Cependant nous n’avons rien sur la console Linux, ce qui n’est pas étonnant vu que les deux résistance de shunt de l’USB ne sont pas soudées 😉

Prise en main

WCH propose un logiciel chinois nommée MounRiver pour développer sur son composant. Le logiciel semble accessible en téléchargement au format d’archive xz. On le décompresse avec tar -Jxvf puis on installe les dépendances (Mint) suivante:

$ sudo apt install libgtk-3-0 libgtk-3-dev
$ rulo apt-get install ia32-libs-gtk
$  sudo apt install libatk-wrapper-java libatk-wrapper-java-jni 
Langage du code : JavaScript (javascript)

Pour le lancer il suffit d’executer le «script d’installation» une première fois puis de lancer le binaire :

$ tar -Jxvf /home/fabien/projets/ch32v003/downloads/MounRiver_Studio_Community_Linux_x86_V130.tar.xz
$ cd MounRiver_Studio_Community_Linux_x86_V130/beforeinstall
$ ./start.sh 

Copy Libs
[sudo] Mot de passe de user :        
Register new Libs
copy rules
Reload rules
DONE
$ cd ../MRS_Community/
$ ./MounRiver\ Studio_Community 
Langage du code : JavaScript (javascript)
Saisie d’écran de l’éclipse chinois «mounriver»

Téléchargement du firmware

Pour le moment j’en suis à tenter de télécharger le firmware d’exemple (GPIO_Toggle) dans le micro.

Board chip Status error!

Toolchain «standalone»

La toolchain quand à elle est proposée en téléchargement sur le site du même éditeur.

Pour l’utiliser il suffit de télécharger l’archive MRS_Toolchain_Linux_x64_V1.60.tar.xz et de la décompresser :

$ tar -Jxvf MRS_Toolchain_Linux_x64_V1.60.tar.xz 

Un README explique la marche à suivre pour l’installer.

Les tentatives d’accès au micro avec openocd ne sont pas beaucoup plus fructueuses :

$ cd MRS_Toolchain_Linux_x64_V1.60/OpenOCD/bin
$ ./openocd -f wch-riscv.cfg
Open On-Chip Debugger 0.11.0+dev-02215-gcc0ecfb6d-dirty (2022-10-10-10:35)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
Ready for Remote Connections
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : WCH-LinkE-CH32V307  mod:RV version 2.7 
Error:  WCH-Link failed to connect with riscvchip
Error:  1.Make sure the two-line debug interface has been opened. If not, set board to boot mode then use ISP tool to open it
Error:  2.Please check your physical link connection

Langage du code : JavaScript (javascript)

Ressources

Publié dans Non classé | Marqué avec , | 7 commentaires

Trouvé sur : https://iximiuz.com/en/posts/ssh-tunnels/

Pense bête tunnel ssh
Publié le par admin | Laisser un commentaire

Ma config neovim

Cher blog, je suis en train de migrer vers neovim. Voici donc une prise de notes pour la config.

fichier de config

Ça n’est plus .vimrc, maintenant c’est bien rangé dans ~/.config/nvim/init.vim Le miens est constitué ainsi pour le moment :

" me
let g:Author = "Jean-Paul Martoni"
let g:EmailAuthor = "Moi je dit qu'il @ bluff"

" pour avoir le mulot
set mouse=a

"enregistrer sans help
map <F1> :wall<CR>
imap <F1> <ESC>:wall<CR>i

map <F1> :wall<CR>

set textwidth=80

filetype plugin on
" Alternative: use the following to also enable language-dependent indenting.
" filetype plugin indent on

lua require('plugins')

" better tab completion :
set wildmode=longest,list

" my standard tab config
set tabstop=4
set shiftwidth=4
set expandtab

Langage du code : HTML, XML (xml)

Sensibilité à la casse de la recherche

Par défault neovim est sensible à la casse, ce qui n’était pas le cas de mon ancien vim. Par contre si on place une majuscule dans le mot recherché, vim devenait sensible à la casse. C’est le «smartcase». Pour obtenir se comportement il suffit d’ajouter cette ligne à son init.vim :

" case search
set ignorecase smartcase

Copier coller clique milieu

Pour faire fonctionner le copier/coller clique milieu depuis un autre programme il faut ajouter la ligne suivante à son fichier de config :

set clipboard+=unnamedplusLangage du code : JavaScript (javascript)

Par contre pour le moment ça ne fonctionne pas dans l’autre sens (neovim -> autre programme)

Paramètres d’indentations spécifique à un langage

Pour définir mes propres paramètres pour chaque langages j’utilise ftplugin que j’active dans init.vim :

filetype plugin on

Puis j’ajoute mes config dans le fichier de configuration portant le nom du langage. Par exemple, pour avoir des «TAB» transmuté en deux espaces en C++, j’ajoute les lignes suivantes dans le fichier ~./config/nvim/ftplugin/cpp.vim :

set tabstop=2
set shiftwidth=2
set expandtabLangage du code : JavaScript (javascript)

Folding

Pour replier du texte, la doc est par là. Je me suis fait quelques raccourcis dans ~/.config/nvim/init.vim

"folding
map f zfap

Correction orthographique

La config de Vincent-Roger fonctionne parfaitement chez moi.

"~/.config/nvim/init.vim
" spell languages
set spelllang=fr
nnoremap <silent> <C-s> :set spell!<cr>
inoremap <silent> <C-s> <C-O>:set spell!<cr>Langage du code : HTML, XML (xml)

Mapping des chiffres ronds

Les chiffres entourés d’un disque plein en unicode permettent de marquer des références dans un code quand on fait de la doc. C’est bien pratique d’y avoir accès avec le clavier plutôt que de faire des copier/coller incessant.

" mapping des chiffres ronds
imap œ0 ⓿
imap œ1 ➊
imap œ2 ➋
imap œ3 ➌
imap œ4 ➍
imap œ5 ➎
imap œ6 ➏
imap œ7 ➐
imap œ8 ➑
imap œ9 ➒
imap œ10 ➓

Problèmes

Les problèmes que j’ai encore à résoudre sont :

  • Je n’ai pas l’historique du shell quand je relance une commande avec «:!»
Publié dans Non classé | Marqué avec , | Laisser un commentaire

Ma vieille contour HD 1080p

Petite page de prise de notes sur la caméra contour HD 1080p qui n’est plus commercialisée.

C’est la caméra qui m’a servie à faire quelques vidéos en parapente dont celle-ci.

Je l’ai ressorti de mes cartons car je voudrais m’en servir de «dashcam» à vélo.

Linux

Si on branche l’usb avec une carte sd enfichée dans son lecteur on obtient la trace suivant (notez le magnifique numéro de série !)

 master+* 22h35m13s ± sudo dmesg
[40678.767336] usb 3-2: new high-speed USB device number 7 using xhci_hcd
[40678.918703] usb 3-2: New USB device found, idVendor=115b, idProduct=a271, bcdDevice= 0.00
[40678.918714] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[40678.918718] usb 3-2: Product: Mass Storage
[40678.918721] usb 3-2: Manufacturer: ContourHD
[40678.918723] usb 3-2: SerialNumber: 0123456789
[40678.919202] usb-storage 3-2:1.0: USB Mass Storage device detected
[40678.919625] scsi host2: usb-storage 3-2:1.0
[40679.941353] scsi 2:0:0:0: Direct-Access              ContourHD 1080        PQ: 0 ANSI: 0
[40679.941868] sd 2:0:0:0: Attached scsi generic sg0 type 0
[40679.945665] sd 2:0:0:0: [sda] 61067264 512-byte logical blocks: (31.3 GB/29.1 GiB)
[40679.946712] sd 2:0:0:0: [sda] Write Protect is off
[40679.946717] sd 2:0:0:0: [sda] Mode Sense: 87 00 00 08
[40679.947828] sd 2:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[40679.957863]  sda: sda1
[40679.963572] sd 2:0:0:0: [sda] Attached SCSI removable disk
Langage du code : PHP (php)

La caméra est vue comme un «mass storage» qui est parfaitement lisible sous Linux.

L’insertion d’une carte SD vierge provoque son formatage par la caméra avec la création des fichiers et répertoires suivant :

 $ tree
.
├── DCIM
│   └── 100MEDIA
│       └── FILE0001.MOV
├── FW_RTC.txt
└── MISC

Et le fichier de configuration créé contient les informations suivantes :

FW version:1080 v1.17

SW HI:	A
SW LO:	B
BR:	M
EV:	-1
SHRP:	3
AE:	C
CTST:	56
MIC:	33
Zone:	+02
RTC:	2008/01/01 00:16:36

Format:
SW HI	A:1920x1080 30fps
	B:1280x960 30fps
	C:1280x720 60fps
	D:1280x720 30fps

SW LO	A:1280x720 60fps
	B:1280x960 30fps
	C:1280x720 30fps
	D:848x480 60fps

BR	M:Max
	H:High
	D:Default

EV	-4~4

SHRP	1~5

AE	C:Center
	A:Average
	S:Spot

CTST	1~255

MIC	0~59dB

Zone	-12~+13

RTC	YYYY/MM/DD hh:mm:ss
	YYYY : 2008 - 2099
	MM : 01 - 12
	DD : 01 - 31Langage du code : PHP (php)

On doit pouvoir ce servir de ce fichier pour configurer la caméra je pense. Notamment pour la remettre à la bonne date/heure. Ce qui est important pour faire une dashcam.

FW_RTC.txt

Une discussion sur un forum sur la modification de la configuration avec le fichier.

Publié dans Non classé | Marqué avec , | Laisser un commentaire

Découverte de déchets nucléaires vieux de 2 milliards d’années

Un des reproche qui est souvent fait à l’enfouissement des déchets nucléaires est qu’on ne sera plus là pour les gérer. On les laisse à nos arrière-arrière-etc petits enfants.

Leur dangerosité subsistera pendant des centaines de milliers d’années et les générations futurs ne seront pas capable de gérer un tel fardeau. Et puis, a-t-on le droit de leurs laisser un tel fardeau, personne ne nous a laissé de déchets nucléaires nous !

Personnes certes.

Mais des déchets nucléaires vieux de plusieurs milliards d’années ont déjà été découvert sur terre ! Et on parle bien ici de déchets nucléaires issue de la fission de l’uranium dans des réacteurs nucléaire. Le fameux plutonium et autres transuraniens qui n’existent pas (tout à fait) à l’état naturel.

C’est en 1972 que le physicien Francis Perrin découvre que la mine d’uranium d’Oklo au Gabon renferme des restes de réacteurs nucléaires ayant fonctionné il y a environ 2 milliards d’années.

Et vous savez quoi ? Et bien il n’y a pas eu de grave contamination mondiale à la découverte. Notre civilisation décadente n’a pas été exterminée par la mise au jours de tout ce plutonium.

Non seulement nous avons su les gérer, mais en plus nous avons pu constater que les «déchets» nucléaire ne migrent pas tellement même quand ils sont pris dans le flux d’eau d’une rivière souterraine.

Bref, la dangerosité des déchets nucléaires pour notre civilisation et pour les prochaines restent nettement moins préoccupantes que les énergies fossiles. Énergies qui n’attendent pas des milliers d’années pour détruire notre climat et remettre en cause notre mode de vie.

Publié dans Non classé | Marqué avec , , , , , | Laisser un commentaire

Retour de String en Rust

Alors voila, je veux écrire une fonction qui appelle une commande shell et retourne la chaîne de caractères.

Avec la cagette standard std::process::Command c’est plutôt simple il suffit de faire ça :

use std::process::Command;
//..
    let _cmdret = Command::new("cd-discid")
                            .output()
                            .expect("La commande cd-discid a échouée");
  
//..Langage du code : PHP (php)

L’affichage de _cmdret avec un println! qui va bien me donne la forme de la structure retournée :

println!("{:?}", &_cmdret);
//:Sortie ->
Output { status: ExitStatus(unix_wait_status(0)), stdout: "30027f05 5 150 2422 15072 29219 44022 641\n", stderr: "" }
Langage du code : JavaScript (javascript)

Pour le moment c’est assez simple, si je veux récupérer la chaîne de caractères, il me suffit de prendre le champs stdout :

println!("{:?}", &_cmdret.stdout);
//...
[51, 48, 48, 50, 55, 102, 48, 53, 32, 53, 32, 49, 53, 48, 32, 50, 52, 50, 50, 32, 49, 53, 48, 55, 50, 32, 50, 57, 50, 49, 57, 32, 52, 52, 48, 50, 50, 32, 54, 52, 49, 10]Langage du code : JavaScript (javascript)

Rhaa, mais pourquoi ça s’est transformé en vecteur de u8 ?!

Allons bon, convertissons avec std::str :

use std::str
///
    println!("{:?}", str::from_utf8(&_cmdret.stdout));
///sortie ->
Ok("30027f05 5 150 2422 15072 29219 44022 641\n")
Langage du code : JavaScript (javascript)

On obtient donc une sortie de type Result non ? Notre fonction doit pouvoir s’écrire comme ça alors :

/// Lit le numéro unique du CD se trouvant dans le lecteur
pub fn get_discid() -> Result<String, Box<dyn Error>> {
    let _cmdret = Command::new("cd-discid")
                            .output()
                            .expect("La commande cd-discid a échouée");

    str::from_utf8(&_cmdret.stdout)
}Langage du code : JavaScript (javascript)

Sauf que non, ce que je croyais être un enum «Result» c’est transformé en une chaîne de caractères &str :

22 |     str::from_utf8(&_cmdret.stdout)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `std::string::String`, found `&str`
Langage du code : PHP (php)

Rajoutons un Ok() pour lui faire plaisir alors :

22 |     Ok(str::from_utf8(&_cmdret.stdout))
   |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `std::string::String`, found enum `Result`
Langage du code : PHP (php)

Et c’est là que je commence à perdre pied, bin oui t’as trouvé un enum Result, puisque c’est ça que j’attends en retour patate !

En browsant désespérément le web j’ai cru trouver qu’il fallait faire un match sur l’enum pour retourner un nouvel enum (mais j’ai pas compris pourquoi le premier ne convenait pas):

/// Lit le numéro unique du CD se trouvant dans le lecteur
pub fn get_discid() -> Result<String, Box<dyn Error>> {
    let _cmdret = Command::new("cd-discid")
                            .output()
                            .expect("La commande cd-discid a échouée");

    match str::from_utf8(&_cmdret.stdout) {
        Ok(v) => Ok(v.to_string()),
        Err(e) => Err(e.into())
    }
}Langage du code : JavaScript (javascript)

À noter qu’il est possible de remplacer le to_string() en into() dans le Ok() mais pas pour le Err().

Bon maintenant ça marche. Mais il me reste un goût amer de celui qui n’a pas compris ce qu’il a écrit. Et j’ai la désagréable impression d’avoir tartiné du code pour pas grand chose !

On doit pouvoir faire plus simple non ?

Bref, la route est encore longue, et c’est pas ce soir que je verrais mes recettes d’histoires terminées 😉

Publié dans Non classé | Marqué avec , , , | 2 commentaires