Vue lecture

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.

Jackbox Games Annonce un Lanceur Gratuit pour Visualiser Toute la Bibliothèque Jackbox

Imaginez : vous êtes à une fête et vous décidez tous que vous voulez jouer à un jeu de société Jackbox. Cependant, le responsable possède chaque paquet. Comment choisissez-vous le jeu auquel vous jouez ? Si tu veux jouer, dis Trivia Murder Party 2 comment fais-tu pour le trouver ? Maintenant, la fête n’est plus amusante. […]

Le post Jackbox Games Annonce un Lanceur Gratuit pour Visualiser Toute la Bibliothèque Jackbox est apparu en premier sur Moyens I/O.

24 ans de libcurl

Curl est un outil en ligne de commande destiné à récupérer le contenu d’une ressource accessible par un réseau informatique et gérant de nombreux protocoles.

Curl est un outil essentiel pour de nombreux usages, pris en charge par une gamme très large de systèmes d’exploitation, d’architectures matérielles, de l’objet connecté à l’embarqué spatial en passant par l’informatique classique ou les consoles de jeux. Il évolue rapidement et fréquemment, voir par exemple l’arrivée prochaine de HTTP3 pour curl dans Debian unstable (avec le backend gnutls). Son domaine d’utilisation pourrait encore s’étendre avec l’apparition de wcurl dans Debian et bientôt dans le monde entier ?

Il y a 24 ans, une division du code entre une interface ligne de commande et une bibliothèque a été faite.

(Cette dépêche est principalement basée sur l’annonce anglophone par Daniel Stenberg, auteur principal de curl et libcurl ; dépêche rédigée sur un téléphone embarquant curl 7.80, pas vraiment la dernière version…).

La première version de libcurl, baptisée 7.1, date du 7 août 2000. La version de curl précédente, la 6.5.2, pas encore séparée entre une interface ligne de commande et une bibliothèque. Il s’agit de l’écart le plus long entre deux versions de curl. La création de la bibliothèque a été très largement réalisée par Daniel Stenberg seul.

Il décrit son choix de division ainsi : c'était juste une intuition et une conjecture. Je ne savais pas. Je n’avais pas fait de recherches sur cela ou autre chose. Je me suis juste lancé en me disant qu’on verrait plus tard si j’avais raison ou tort.

Le nom de la bibliothèque a été choisi faute d’une meilleure idée. L’API a été définie comme étant bas niveau (on peut toujours ajouter une API de plus haut niveau par-dessus), en observant ioctl(), fcntl() et les fonctions du genre. Le code est en C, langage de prédilection de l’auteur principal.

L’API a bien vieilli : 17 fonctions encore présentes proviennent de la 7.1 ; elle est passée de 17 000 lignes à 171 000 ; elle a survécu aux révolutions HTTP/2 (transferts multiples multiplexés) et HTTP/3 (passer de TCP à UDP).

L’usage a aussi bien progressé depuis l’entrée dans PHP 4.0.2 comme premier binding (ici rendre utilisable en langage PHP), moins d’un mois après la publication de la bibliothèque.

En 2002 a été ajoutée une API multi pour gérer des transferts parallèles concurrents de façon illimitée dans un même thread.

Puis en 2006 vient en surplus le multi_action avec des mécanismes orientés événements, avec une boucle événementielle (comme epoll).

Les premiers changements douloureux sur l’interface binaire (ABI) ont entraîné une volonté de stabilité, de ne jamais casser volontairement cette interface, et ce depuis 2006.

libcurl possède des bindings vers au moins 65 langages de programmation, fonctionne sur au moins 103 systèmes d’exploitation et 28 architectures de processeur, est présent dans les bibliothèques standard de langages de programmation (Python, Java, Rust ou .Net). Son ancien concurrent principal libwww n’est plus développé. Bref 18 ans de stabilité d’API et d’ABI.

L’utilisation de libcurl continue de croître (de plus en plus d’objets connectés notamment). Et curl de manière générale supporte rapidement les nouveaux protocoles et leurs évolutions. À noter que l’auteur principal ne mentionne pas dans ses projections ce qui me semble le plus gros risque pour Curl/libcurl, la difficulté d’avoir une personne prête à lui succéder si quand cela s’avérera nécessaire.

Commentaires : voir le flux Atom ouvrir dans le navigateur

MicroPython: bibliothèque pour les afficheurs SerLCD de SparkFun

Bonjour à tous,

Les amateurs de MicroPython seront heureux d'apprendre qu'une nouvelle bibliothèque qwiic-serlcd-i2c vient d'être ajoutée à notre dépôt esp8266-upy

Qu'est ce que SerLCD?

SerLCD de SparkFun est un afficheur LCD série propulsé par un microcontrôleur ATmega328P.
SerLCD permet d'ajouter un afficheur Cristaux Liquide 16x2 RGB dans votre projet. Le microcontrôleur gère l'écran et les communications séries!

SerLCD de SparkFun

Les afficheurs SerLCD peuvent communiquer de trois façon différentes: série, I2C et SPI. L'afficheur est équipé de d'un connecteur Qwiic (aussi appelé StemmaQT), ce qui l'intègre dans l'écosystème Qwiic qui simplifie les raccordements grâce à sa connexion universelle.

Outre son connecteur Qwiic/StemmaQt, l'intérêt de SerLCD réside dans son support du bus I2C (il n'a donc besoin que des signaux SDA et SCL) et que l'adresse I2C est modifiable de façon logicielle.

La bibliothèque

Cette dernière -nommée serlcd.py- est disponible sur le dépôt dans le sous-répertoire  qwiic-serlcd-i2c

Elle doit être copiée sur votre plateforme MicroPython avant de pouvoir l'utiliser.

Si vous utilisez mpremote, l'installation peut se faire très simplement à l'aide de la commande suivante:

mpremote mip install github:mchobby/esp8266-upy/qwiic-serlcd-i2c

Brancher un SerLCD

Pour pouvoir utiliser cet afficheur, il suffit d'utiliser son connecteur Qwiic/StemmaQt avec un câble adaptateur JST-SH 4 . Le raccordement est super simple.

En guise d'exemple, voici le raccordement sur un Raspberry Pico... simple non?

Source: dépôt qwiic-serlcd-i2c

Utiliser la bibliothèque

L'utilisation de la bibliothèque est très similaire à la version "LcdI2C" (voir ici) que nous proposons déjà pour un autre afficheur.

from machine import I2C,Pin
from serlcd import SerLCD
import time

# Raspberry-Pi Pico
i2c = I2C( 1, sda=Pin.board.GP6, scl=Pin.board.GP7 )

# Adresse par défaut (0x72)
# Ajouter parametre address=0x38 pour une adresse personnalisée
lcd = SerLCD( i2c, cols=16, rows=2 )

lcd.backlight( (0,255,0) ) # Vert
time.sleep_ms(500)
lcd.backlight( (0,0,255) ) # Bleu
time.sleep_ms(500)
lcd.backlight( (255,0,0) ) # Rouge

lcd.print( "Hello" )
time.sleep(2)
lcd.clear()
lcd.print( "World!" )
time.sleep(1)
lcd.display( False ) # éteindre le LCD et retro-éclairage
time.sleep(1)
lcd.display( True )  # allumer le LCD et restaurer le rétro-éclairage

lcd.set_cursor( (9,1) ) #colonne,ligne (0..N-1)
lcd.print("*")

lcd.contrast( 0 ) # Contraste au maximum. Valeur (0..255)
#lcd.contrast( 100 ) # devrait être totalement transparent

# Désactiver les messages systèmes comme 'Contrast: 5'
lcd.system_messages( enable=False )

# Sauver le contenu actuel de l'écran comme écran d'accueil
# lcd.save_splash()

# Désactiver l'écran d'accueil (à la mise sous-tension)
lcd.splash( enable=False )

# Changer l'adresse I2C du SerLCD (stocké en EEPROM)
# lcd.set_address( 0x73 )

Ressources

❌