Lateo.net - Flux RSS en pagaille (pour en ajouter : @ moi)

🔒
❌ À propos de FreshRSS
Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierKorben

Alacritty – Le terminal nouvelle génération ultra rapide

Par : Korben

Envie d’un terminal nouvelle génération qui allie performance et flexibilité ? Ne cherchez plus, Alacritty est fait pour votre bonheur !

Disponible sur toutes les plateformes qui comptent (Linux, macOS, Windows, BSD ^^), ce terminal au look sobre et épuré cache sous son capot une configuration ultra complète. Pas besoin de réinventer la roue, Alacritty s’intègre avec vos applications préférées pour vous offrir une expérience sur-mesure sans compromis sur la vitesse. Bon OK, c’est encore un peu jeune, il est un peu long à configurer et il reste quelques fonctionnalités à ajouter et bugs à corriger, mais ça n’empêche pas de nombreux baroudeurs du shell de l’utiliser quotidiennement. YOLO comme on dit.

Mais Alacritty, c’est pas qu’un simple émulateur de terminal de base. Il embarque des features bien pratiques pour améliorer la vie des accros de la ligne de commande :

  • Vous aimez vim ? Ça tombe bien, avec le mode Vi vous pouvez retrouver vos réflexes pour vous déplacer et sélectionner du texte.
  • Vous avez la flemme de scroller manuellement pour retrouver une commande ou une erreur ? Utilisez la recherche intégrée pour localiser ce que vous voulez en un clin d’œil.
  • Vous en avez marre de jongler entre votre souris et votre clavier ? Avec les hints façon regex, plus besoin de quitter le clavier, interagissez avec n’importe quel texte à l’écran.
  • Votre PC rame quand vous ouvrez 10 terminaux en même temps ? Pas de problème, avec le mode multi-fenêtres , un seul process Alacritty est partagé intelligemment.

Et je vous ai parlé que de quelques fonctionnalités, y’en a bien d’autres à découvrir dans la doc.

Après la théorie, passons à la pratique. Pour l’installer, c’est ultra simple. Si vous êtes sur macOS ou Windows, direction la page des releases GitHub pour chopper le binaire. Sous Linux ou BSD, il est sûrement déjà dans le gestionnaire de paquets de votre distrib. Sinon, les instructions détaillées vous expliqueront comment compiler depuis les sources.

Une fois installé, pas besoin de vous embêter à configurer, les options par défaut sont déjà pas mal. Mais si vous voulez quand même mettre votre patte, le fichier de config en TOML se trouve, en fonction de votre OS, dans $XDG_CONFIG_HOME/alacritty, $HOME/.config/alacritty ou %APPDATA%\alacritty.

Par exemple, pour l’installer sous macOS, vous pouvez faire également :

brew install --cask alacritty

Puis créer un fichier de config comme ceci :

mkdir -p ~/.config/alacritty && touch ~/.config/alacritty/alacritty.toml

Voici un exemple de config à mettre dedans pour obtenir un truc comme ça :

# Configuration du shell et des variables d'environnement
shell = { program = "/bin/zsh", args = ["-l"] }

[env]
TERM = "xterm-256color"

# Activation du rechargement dynamique de la configuration
#live_config_reload = true

# Configuration de la fenêtre pour un look minimaliste et semi-transparent
[window]
decorations = "buttonless"
dynamic_padding = false
opacity = 0.9
padding = { x = 25, y = 20 }

# Configuration de la police personnalisée avec styles spécifiques pour différents états du texte
[font]
size = 20.0
[font.normal]
family = "JetBrains Mono"
style = "Medium"
[font.bold]
family = "JetBrains Mono"
style = "Heavy"
[font.italic]
family = "JetBrains Mono"
style = "Medium Italic"
[font.bold_italic]
family = "JetBrains Mono"
style = "Heavy Italic"

# Configuration des couleurs
[colors]
[colors.primary]
background = '#282a36' # Arrière-plan foncé
foreground = '#f8f8f2' # Texte clair
[colors.cursor]
text = 'CellBackground'
cursor = '#ff79c6' # Couleur du curseur
[colors.selection]
text = 'CellBackground'
background = '#44475a'

# Configuration du curseur
[cursor]
style = { shape = "Block", blinking = "On" }
thickness = 0.25

# Ajout de raccourcis clavier pour améliorer l'efficacité
[keyboard]
bindings = [
  { key = 'N', mods = 'Control|Shift', action = 'CreateNewWindow' },
  { key = 'C', mods = 'Control|Shift', action = 'Copy' },
  { key = 'V', mods = 'Control|Shift', action = 'Paste' },
  { key = '+', mods = 'Control', action = 'IncreaseFontSize' },
  { key = '-', mods = 'Control', action = 'DecreaseFontSize' },
  { key = '0', mods = 'Control', action = 'ResetFontSize' }
]

Mais du coup, c’est vraiment le terminal le plus rapide ?

Difficile à dire… Mesurer les perfs d’un terminal, c’est compliqué. Sur les benchmarks, en tout cas, Alacritty s’en sort bien, surtout grâce à l’accélération GPU. Après, sur des critères plus subjectifs comme la latence ou la fluidité de l’affichage, difficile de départager les challengers. Le mieux est de l’essayer et de voir s’il convient à VOS usages.

Par contre, ne vous attendez pas à retrouver toutes les fonctionnalités de terminaux plus anciens. Pas de tabs, pas de splits, Alacritty se concentre sur son cœur de métier. Pour ces features, votre gestionnaire de fenêtres ou un multiplexeur comme tmux feront très bien l’affaire. Et si vous voulez faire un peu de customisation, il faudra vous plonger dans la doc.

Après, si jamais il vous manque un truc indispensable, le projet est ouvert aux contributions. Alacritty est d’ailleurs distribué sous licence Apache 2.0. Donc si vous vous sentez de rajouter ce p’tit truc manquant, la communauté vous accueillera à bras ouverts. Comme quoi, y’a pas que Microsoft qui sait faire dans l’open source ! mdr.

En attendant de voir vos pull requests pleuvoir sur ce projet, je ne peux que vous conseiller de tester Alacritty. Vous verrez, c’est le genre d’outil auquel on s’habitue vite et qui change la vie. Bon OK, ça reste un terminal, faut pas exagérer non plus. N’empêche que depuis que j’ai goûté à la fluidité de son rendu, j’avoue que j’aurais du mal à revenir en arrière !

Merci à Lorenper

Jan – Le « ChatGPT » local et open source à installer sur votre machine

Par : Korben

Afin de rendre l’IA accessible à tous, y compris gratuitement puisque la plupart des modèles fonctionnent sur un système open source, une équipe de développeurs talentueux a créé Jan un outil pour les développeurs et les utilisateurs souhaitant profite d’une alternative à ChatGPT, totalement indépendante, fonctionnant hors ligne, open source et libre.

Il faut donc voir Jan comme un client de chat qui permet de télécharger des modèles comme Trinity, Mistral, Llama, OpenChat…etc. et de les faire tourner 100% hors ligne. Comme ça, pas de fuite de conversations privées ni de réutilisation de vos données pour entrainer de nouvelles IA. Et si comme moi, vous êtes accro à l’IA d’OpenAI, vous pourrez toujours y ajouter votre clé API et discuter avec ChatGPT (au tarif fixé par OpenAI évidemment).

Jan fonctionne sous Linux (Appimage et .deb dispo), sous Windows et macOS (Intel / Silicon) et propose une prise en charge des modèles open source tels que GGUF via llama.cpp, TensorRT via TensorRT-LLM ou des API externes. Jan utilise également le moteur d’inférence Nitro, des mêmes développeurs, qui se veut être rapide et léger.

Je teste ici le modèle Trinity 1.2 7B Q4 :

Et ici un modèle spécialisé en code Python nommé Wizard Coder Python 13B Q5.

Un truc cool avec Jan c’est que toutes les conversations sont conservées sur votre disque au format JSON, donc si le coeur vous en dit, vous pourrez ensuite les exploiter comme bon vous semble dans vos outils.

Jan propose également un serveur REST qui permet d’interroger via une API compatible OpenAI n’importe quel modèle que vous y feriez tourner. Ça permet de brancher vos outils ou vos scripts directement sur le LLM ouvert de votre choix.

Dans la lignée de Ollama ou LM Studio, Jan rempli ses promesses et vous permettra de vous éclater avec l’IA (abus de langage, je sais…) sans mettre en péril vos données personnelles.

Pour en savoir plus, rendez-vous sur le site de Jan ou sur leur page Github pour les sources et la doc.

Merci à Lorenper

LocalAI – L’alternative open source puissante à OpenAI

Par : Korben

Aujourd’hui, j’aimerais vous présenter LocalAI, une alternative open source à OpenAI. En tout cas, c’est comme ça que le créateur du projet le présente. Il s’agit d’une solution idéale pour tous ceux qui cherchent une API REST compatible avec les spécifications de l’API OpenAI pour l’inférence locale.

Grâce à LocalAI, vous pouvez exécuter des modèles linguistiques, générer des images, de l’audio et bien d’autres choses encore, localement ou sur site avec du matériel grand public, et ce, sans avoir besoin d’un GPU ! Le projet a pour principal objectif de rendre l’IA accessible à tous.

Pour résumer, voici les principales caractéristiques de LocalAI :

  • Une API REST locale, alternative à OpenAI. Comme ça, vous gardez bien au chaud vos propres données.
  • Pas besoin de GPU. Pas besoin d’accès internet non plus. Toutefois, l’accélération GPU est possible en option.
  • Prise en charge de plusieurs modèles.
  • Dès qu’ils sont chargés une première fois, les modèles restent en mémoire pour une inférence plus rapide.
  • N’utilise pas de shell, mais des liaisons directes pour une inférence plus rapide et de meilleures performances.

En termes de fonctionnalités, LocalAI offre une large gamme d’options, parmi lesquelles :

  • La génération de texte avec les modèles GPT (comme llama.cpp ou gpt4all.cpp).
  • La conversion de texte en audio.
  • La transcription audio en texte avec whisper.cpp.
  • La génération d’images avec Stable Diffusion.
  • Les dernières fonctionnalités d’OpenAI récemment ajoutées comme l’API Vision par exemple.
  • La génération d’embeddings pour les bases de données vectorielles.
  • Les grammaires contraintes.
  • Le téléchargement de modèles directement à partir de Huggingface.

LocalAI est bien sûr un projet communautaire donc n’hésitez pas si vous souhaitez vous impliquer !

Pour commencer rapidement avec LocalAI, vous pouvez consulter leur guide Getting Started qui décrit les différentes méthodes d’installation et les exigences matérielles ou aller consulter les guides de la communauté. Je vous ferais aussi probablement un tutoriel prochainement si mon emploi du temps me le permet.

LocalAI est disponible sous forme d’image conteneur et de binaire, compatible avec divers moteurs de conteneurs tels que Docker, Podman et Kubernetes. Les images de conteneurs sont publiées sur quay.io et Docker Hub, et les binaires peuvent être téléchargés à partir de GitHub.

Concernant les exigences matérielles, ça varie en fonction de la taille du modèle et de la méthode de quantification utilisée mais pour choper quelques repères de performance avec différents backends, comme llama.cpp, vous pouvez consulter ce lien.

Maintenant pour en savoir plus, vous pouvez explorer le site localai.io. Vous y trouverez de nombreuses informations et des exemples d’utilisation pour vous aider à tirer le meilleur parti de LocalAI.

Merci à Lorenper

No Sleep – Le site qui empêche votre ordinateur ou smartphone de passer en veille

Par : Korben

Au moment où j’écris ces lignes, je ne dors pas. Alors chers amis, noctambules du web, je vais vous parler aujourd’hui du site nosleep.page.

Ce site web va vous permettre de remplacer des outils comme Caffeine ou Amphetamine qui permet de garder réveillé votre ordinateur comme une bonne tasse à café. C’est super pratique quand on a des process un peu longs à finir, genre une compilation, un backup…et j’en passe. Cela évite que l’ordinateur se mette en veille et ça évite d’aller bidouiller les paramètres de votre OS.

Nosleep a donc la particularité d’être un simple site web, qui utilise pour cela l’API Screen Wake Lock bien comprise des navigateurs récents. Et là où cette technologie n’est pas supportée, le dev a implémenté une astuce géniale pour garder quand même votre PC ou Mac actif : la lecture d’une vidéo silencieuse et invisible pour simuler ce comportement.

Mais alors qu’est-ce que l’API Screen Wake Lock ?

Et bien c’est une technologie qui permet à une application de demander au système d’exploitation de ne pas éteindre ni de verrouiller l’écran. Ça permet de lire un ebook sans secouer la souris toutes les 5 min, de suivre un trajet sur une carte sans perdre votre chemin, ou encore de mater une une recette sans mettre du beurre partout sur votre écran pour le réveiller. Pouah !

Et c’est exactement ce qu’utilise nosleep.page qui offre une solution simple et accessible à tous pour garder nos écrans bien éveillés comme un Premier ministre sous amphét.

Évidemment, si vous souhaitez intégrer ça sur votre service web, il existe une super lib JS nommée NoSleep.js qui permet d’implémenter facilement cette API Screen Wake Lock.

import NoSleep from 'nosleep.js';
var noSleep = new NoSleep();
// Activer le verrouillage du réveil.
// (doit être intégré dans un gestionnaire d'événement d'entrée utilisateur, par exemple la souris ou un touchpad)
document.addEventListener('click', function enableNoSleep() {
  document.removeEventListener('click', enableNoSleep, false);
  noSleep.enable();
}, false);

Bref, c’est pratique et comme ça, votre ordinateur ne dormira plus sans que vous l’ayez décidé.

LiteLLM – Pour discuter avec toutes les API LLM en utilisant la syntaxe OpenAI

Par : Korben

Si vous codez en Python autour d’API de LLM comme celle d’OpenAI, d’Anthropic ou encore de Huggingface…etc., je vous présente LiteLLM qui risque de vous faire gagner pas mal de temps.

Il s’agit d’une lib Python capable d’interagir avec tout un tas d’API en utilisant le format de celle d’OpenAI. Elle fournit une interface simple et uniformisée pour appeler ces modèles , ce qui va vous faciliter leur utilisation pour des choses comme de la génération de texte, de la traduction ou encore du chat…

Pour l’installer, rien de plus simple :

pip install litellm

Ensuite, y’a plus qu’à créer un objet LiteLLM dans votre code, en lui fournissant l’ID et le nom du modèle à utiliser. Par exemple pour vous connecter à OpenAI, le code sera le suivant :

from litellm import completion
import os

## set ENV variables
os.environ["OPENAI_API_KEY"] = "your-api-key"

response = completion(
  model="gpt-3.5-turbo", 
  messages=[{ "content": "Hello, how are you?","role": "user"}]
)

Pour Claude 2, ça sera ça :

from litellm import completion
import os

## set ENV variables
os.environ["ANTHROPIC_API_KEY"] = "your-api-key"

response = completion(
  model="claude-2", 
  messages=[{ "content": "Hello, how are you?","role": "user"}]
)

Pour utiliser Ollama, ça donnerait également ça :

from litellm import completion

response = completion(
            model="ollama/llama2", 
            messages = [{ "content": "Hello, how are you?","role": "user"}], 
            api_base="http://localhost:11434"
)

Donc pas grand-chose qui change.

Vous l’aurez donc compris, LiteLLM permet de pondre un seul et unique code, mais pour discuter avec tous les fournisseurs d’IA du moment (et les logiciels libres existants)

Y’a la possibilité d’avoir du stream sur les réponses (c’est à dire, le texte qui s’affiche au fur et à mesure), de la gestion des exceptions, du log, sans oublier du calcul de coût et l’usage que vous pouvez avoir de ces API afin de ne pas éclater votre compte en banque.

LiteLLM intègre également un proxy OpenAI pour rediriger vos requêtes vers le modèle de votre choix. Pour l’installer :

pip install 'litellm[proxy]'

Lancez ensuite le proxy avec le modèle de votre choix :

litellm --model huggingface/bigcode/starcoder

Et lui passer vos requêtes dans le code python directement :

import openai # openai v1.0.0+
client = openai.OpenAI(api_key="anything",base_url="http://0.0.0.0:8000") # set proxy to base_url
# request sent to model set on litellm proxy, `litellm --model`
response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [
    {
        "role": "user",
        "content": "this is a test request, write a short poem"
    }
])

print(response)

Si LiteLLM vous intéresse, vous trouverez toutes les infos sur la page Github ainsi que les endpoints ici.

EvaDB – Mettez de l’IA dans vos requêtes SQL

Par : Korben

Mes chers amis, l’IA est partouuuut, dans nos villes, dans nos campagnes, et elle vient voler le travail des gens qui s’opposent à elle.

Alors plutôt que de vous battre inutilement contre l’inéluctable, autant l’apprivoiser et la faire bosser pour vous, car ce n’est qu’un outil débile de plus dont chacun peut tirer des bénéfices.

Même les codeurs… La preuve avec EvaDB, une base de données ouverte qui permet aux développeurs de logiciels de créer des applications IA en quelques lignes de code grâce à son API SQL très puissante. Et pas besoin d’avoir de compétences spécifiques en IA pour l’utiliser !

EvaDB se présente comme une solution clé en main pour simplifier le développement d’applications IA, en prenant en charge à la fois la gestion des données structurées et non structurées. L’outil offre une facilité de connexion à toutes les sources de données existantes telles que PostgreSQL ou vos buckets S3, ainsi qu’une utilisation optimisée des CPU/GPU et la personnalisation des modèles IA (fine tuning) récupérés chez Hugging Face, OpenAI ou encore YOLO.

Cela signifie concrètement que vous allez pouvoir ajouter des fonctionnalités d’IA à vos applications en utilisant simplement des fonctions intégrées dans les requêtes. Vous pouvez choisir parmi différents modèles pré-entraînés ou créer vos propres modèles personnalisés.

Petit exemple de requête :

SELECT name, country, email, programming_languages, social_media, GPT4(prompt,topics_of_interest)
FROM gpt4all_StargazerInsights;

Et le prompt fourni :

--- Prompt to GPT-4
You are given 10 rows of input, each row is separated by two new line characters.
Categorize the topics listed in each row into one or more of the following 3 technical areas - Machine Learning, Databases, and Web development. If the topics listed are not related to any of these 3 areas, output a single N/A. Do not miss any input row. Do not add any additional text or numbers to your output.
The output rows must be separated by two new line characters. Each input row must generate exactly one output row. For example, the input row [Recommendation systems, Deep neural networks, Postgres] must generate only the output row [Machine Learning, Databases].
The input row [enterpreneurship, startups, venture capital] must generate the output row N/A.

Voici quelques cas d’utilisation possibles : analyse de sentiments, réponse aux questions posées en vidéo avec ChatGPT, résumé de texte à partir de documents PDF, analyse de flux de trafic, analyse d’émotions dans les vidéos ou encore recherche d’images similaires.

Ainsi, EvaDB permet de cibler 99% des problèmes d’IA qui sont souvent répétitifs et peuvent être automatisés avec un simple appel de fonction dans une requête SQL.

Obtenir une transcription d’une vidéo stockée dans une table à l’aide d’un modèle de reconnaissance vocale pour pouvoir ensuite poser des questions sur la transcription extraite à l’aide de ChatGPT, c’est typiquement le genre de truc que permet de faire EvaDB :

CREATE TABLE text_summary AS
    SELECT SpeechRecognizer(audio) FROM ukraine_video;
SELECT ChatGPT('Is this video summary related to Ukraine russia war', text)
    FROM text_summary;

Si votre curiosité est piquée et que vous voulez en savoir plus sur ce projet, tout est ici sur Github.

Bref, ne laissez pas passer l’occasion d’explorer cet outil open source qui vous ouvrira bien des portes.

Petit retour d’expérience sur la batterie Anker 737

Par : Korben

— Contient des liens Amazon affiliés sataniques —

Dans le cadre de mon boulot, il arrive que je me déplace un peu partout. J’ai donc besoin de recharger mon ordinateur et mon smartphone assez souvent et depuis n’importe où. Et comme j’habite du côté de Clermont-Ferrand, il arrive aussi parfois que je reste plus longtemps que prévu dans un train sans électricité. (heureusement, j’ai esquivé cette panne-là…)

Mais malheureusement, y’a pas tout le temps de prise de courant à dispo pour voler « emprunter » un peu d’électricité. J’avais donc besoin d’une bonne batterie externe.

Un petit tour sur Internet pour regarder les comparatifs et j’ai fini par trouvé mon bonheur : La batterie Anker 737 (PowerCore 24K). Après quelques semaines d’utilisation, je suis conquis. Tout d’abord, cette batterie affiche une capacité de 24 000 mAh. Elle peut donc prendre l’avion en cabine et permet de recharger entièrement environ 4 ou 5 fois n’importe quel smartphone ou 1,5 / 2 fois n’importe quel ordinateur portable.

Son design compact (15.6 x 5.5 x 5 cm) change un peu des batteries plus plates et allongées auxquelles Anker nous a habitués. On aime ou on n’aime pas et ça dépend comment vous la transportez ou si vous voulez la lancer sur quelqu’un dans une situation d’autodéfense, mais en termes de volume, je dirais que ça prend la même place que mon ancienne Anker PowerCore Speed. Par contre, elle est vachement plus puissante et embarque un peu plus d’électronique, donc fatalement, elle pèse un peu plus lourd. Vous vous en doutez, ce qui n’est pas un souci pour moi puisque je vais plus souvent à la salle que Tibo.

Avec la techno Anker Power Delivery 3.1, elle offre donc une charge rapide de 140 W. En gros en 40 min, elle peut recharger de 50% votre Macbook Pro.

Et niveau recharge sur le courant, c’est la même. Suffit de la brancher sur le secteur et elle se remplie à 100% en un peu plus de 50 minutes. C’est 7 fois plus rapide qu’avec les anciens modèles de batterie que j’avais et ça c’est très appréciable. Sur la 737, il y a 2 ports USB C et un port USB A, donc rien d’exotique et ça vous permettra d’y brancher jusqu’à 3 appareils.

Maintenant, le côté « geek » de cette batterie, c’est son écran qui affiche la quantité de jus disponible, mais également la puissance diffusée en entrée comme en sortie. En effet, la batterie contrôle en temps réel la puissance délivrée et la chaleur produite pour éviter de faire surchauffer ou abimer vos appareils ou la batterie elle-même. Elle est donc beaucoup plus protectrice et « intelligente » que n’importe quelle autre batterie ou qu’un sugar daddy complotiste.

J’ai également des panneaux solaires à la maison, donc je m’en sers pour stocker un peu d’énergie solaire en journée, que je réutilise ensuite quand cette feignasse de soleil est couchée. Puis comme j’ai souvent la flemme de brancher l’ordinateur sur une rallonge ou que ça me saoule de me poser obligatoirement sur la table de salon parce qu’y’a que là que je peux choper une prise pas trop loin, cette batterie est également super pratique pour continuer à m’installer un peu partout pour bosser chez moi quand y’a plus de jus dans l’ordinateur.

Voilà pour moi c’est validé, surtout que Anker est pour moi l’une des meilleures marque en matière d’adaptateur et de batteries externes, même si j’aurais apprécié que ce soit un peu moins lourd.

À découvrir ici.

Continue – L’extension Visual Studio Code qui code à votre place

Par : Korben

Cursor est à ce jour l’éditeur de Code que je préfère, car il est basé sur Visual Studio et totalement boosté à l’IA. Cela me permet pour moi qui suis une quiche en dev, de mener à bien mes projets de conquête du monde.

Toutefois, c’est payant. Et si vous ne voulez pas lâcher un peu de thunasse, et que vous voulez payer uniquement ce que vous consommez, c’est possible dans Cursor avec une clé OpenAI, mais également en installant ce plugin open source baptisé « Continue » directement dans un bon vieux Visual Studio Code d’origine ou un JetBrains.

Concrètement, ce truc vous permet en surlignant un bout de code, de discuter avec l’IA pour mieux le comprendre, le compléter ou le corriger. Vous pouvez même apporter des modifs directement à votre code simplement en demandant ce que vous voulez en langage naturel du genre :

/edit réécrire ceci pour retourner une liste aplatie à partir d'une matrice 3x3
/edit refactoriser cela en une mise en page flex angulaire sur une seule ligne
/edit définir ici un type pour une liste de listes de dictionnaires

Continue permet aussi de générer des fichiers from scratch, c’est-à-dire de zéro ou de générer des tests unitaires, des commandes Shell ou des recherches sur StackOverflow pour en extraire uniquement le nécessaire.

Continue est compatible avec GPT-4 et GPT-3.5-turbo via l’API OpenAI. Et si vous voulez esquiver OpenAI, vous pouvez toujours la connecter sur un autre LLM en utilisant par exemple LM Studio ou Ollama.

Une fois installé, pour l’activer, il suffit de faire un CMD + M (ou ALT + M).

Amusez-vous bien et codez-moi des trucs de ouf !

SFTPGo – Le serveur SFTP ultime pour vos transferts de fichiers

Par : Korben

Imaginez que vous deviez partager des fichiers avec vos collaborateurs, travailler sur des projets avec des personnes situées aux quatre coins du monde ou simplement sauvegarder vos photos de vacances, mais que vous ne savez pas par quoi commencer ?

Et bien, ne cherchez plus, SFTPGo est là pour vous faciliter la vie.

SFTPGo c’est un serveur SFTP open source, complet et hautement configurable qui supporte HTTP/S, FTP/S ou encore WebDAV. Il prend en charge plusieurs backends de stockage : du système de fichiers local avec ou sans chiffrement, du stockage d’objets S3, du Google Cloud Storage, de l’Azure Blob Storage, et bien sûr, SFTP.

L’outil est gratuit, mais si vous voulez le soutenir ou profiter d’un support technique, il faudra porter la main à la bourse ^^. C’est donc plus Open Bourse qu’Open Source.

Parmi les fonctionnalités offertes, on trouve la possibilité de créer des dossiers virtuels privés ou partagés, des commandes personnalisables, des comptes virtuels stockés, de l’isolement chroot, des autorisations virtuelles par utilisateur et par répertoire, ainsi qu’une API REST, un gestionnaire d’événements, une interface d’administration…etc.

SFTPGo facilite le paramétrage d’une authentification multifacteur personnalisable. Authentification partielle, par utilisateur et avec plusieurs méthodes, incluant l’authentification LDAP/Active Directory et des programmes externes. Il supporte l’administration des utilisateurs, le chiffrement des données, la modification dynamique des utilisateurs, les quotas, la limitation de bande passante et de débit.

Pour sécuriser vos données, SFTPGo propose une limitation du nombre de sessions simultanées avec ou sans filtrage par IP ou dossier. Terminaison automatique des connexions inactives, gestion de liste de blocage, filtrage Geo-IP et il est bien sûr compatible avec Git, SCP, rsync, FTP/S et WebDAV.

Pour vous faciliter la vie, SFTPGo propre aussi des analyses de performance, des logs ultra-précis et un support Infrastructure as Code (IaC) via Terraform. Il est compatible avec Linux, macOS, Windows et FreeBSD et nécessite Go ainsi qu’un serveur SQL. Des binaires et une image Docker officielle sont également disponibles.

SFTPGo est disponible sur plusieurs plateformes, y compris les dépôt Ubuntu, Void Linux, AWS Marketplace, Azure Marketplace et Elest.io. Il est également disponible pour Windows et macOS via des packages tels que winget, Chocolatey et Homebrew. Et il existe des portages pour FreeBSD et DragonFlyBSD.

Voilà, si vous cherchez un serveur SFTP totalement configurable (y’a même un système de plugins) et supportant S3, Google Cloud, Azure et j’en passe, celui-ci est un must-have !

Nosey Parker – L’outil incontournable pour détecter les secrets dans vos dépôts Git

Par : Korben

On a tous des secrets à cacher… Mais ça n’empêche pas certains développeurs un poil tête en l’air de placer ces secrets sur leurs dépôts Git. Vous l’aurez compris, quand je parle de « secrets » je parle surtout d’identifiants et de clés API qui pourraient malencontreusement se retrouver en clair dans des fichiers de code ou des textes qui seraient embarqués sur Github lors d’un git push.

Alors que faire pour éviter cela ?

Et bien que ce soit sous un aspect défensif ou offensif, Nosey Parker est l’outil qui vous faut pour dénicher les petits secrets cachés dans les coins sombres des codes et des fichiers textes de Github.

L’outil est capable de scanner des fichiers, des répertoires et l’historique entier de dépôts Git et de les passer au peigne fin à l’aide d’expressions régulières et quand il trouve quelque chose, hop l le mets de côté dans un datastore.

Cela va donc vous permettre de faire des audits de code ou tout simplement de vérifier que vous n’êtes pas ce développeur distrait dont je parlais en introduction d’article.

Pour utiliser Nosey Parker, vous pouvez le lancer via Docker ou récupérer l’outil pour macOS ou Linux ici.

Ensuite, pour scanner un dépôt git local, et mettre les résultats dans un datastore, il faut faire comme ceci :

noseyparker scan --datastore cpython cpython.git

Si vous voulez carrément scanner un dépôt Git, rien de plus simple :

noseyparker scan --datastore noseyparker --git-url https://github.com/praetorian-inc/noseyparker

Pour afficher à nouveau les trouvailles d’un Scan depuis son datastore :

noseyparker summarize --datastore noseyparker

Et pour avoir le rapport détaillé :

noseyparker report --datastore noseyparker

Et voilà, vous connaitrez en détail toutes vos fuites de données. Évidemment, c’est à utiliser avec intelligence pour sécuriser votre propre code, ou dans des missions d’audit sur lesquelles vous avez été validé.

Nosey Parker est à découvrir ici.

Azure Cost CLI – Pour suivre les coûts liés à Microsoft Azure

Par : Korben

Aujourd’hui les amis, j’aimerais vous faire découvrir un outil en ligne de commande qui va bien vous aider si vous évoluez dans l’écosystème de Microsoft Azure.

En effet, en fonction de ce que vous faites avec vos instances et vos services Azure, le coût n’est pas forcément le même, et ce n’est pas super pratique de suivre tout ça uniquement via le site web. Heureusement avec l’outil Azure Cost Cli, vous allez pouvoir garder un œil sur les dépenses liées à votre utilisation des ressources, directement depuis votre terminal.

Ce logiciel utilise l’API Azure Cost Management pour récupérer les coûts et présente les résultats directement dans la console ou sous format JSON. JSON que vous pouvez ensuite exploiter dans vos outils ou scripts.

Hormis l’affichage des coûts cumulés comme vous pouvez le voir ci-dessus, il peut également afficher les coûts journaliers, extraire les ressources par coûts et répertorier les budgets.

Et il peut même détecter les anomalies éventuelles et les tendances d’évolution dans les coûts, ce qui permet d’automatiser encore plus les rapports générés.

Pour l’installer, c’est simple, ouvrez un terminal et utilisez la commande suivante (il vous faudra dotnet) :

dotnet tool install --global azure-cost-cli 

Ensuite, vous pouvez commencer à afficher les couts cumulés associés à un abonnement Azure spécifique en lui passant votre ID :

azure-cost accumulatedCost -s 12345678-1234-1234-1234-123456789012

Pour générer un rapport CSV des coûts par ressource, rien de plus simple :

azure-cost costByResource -s 12345678-1234-1234-1234-123456789012 -o csv

Imaginons maintenant que vous souhaitiez afficher les coûts quotidiens pour le mois de janvier 2023, regroupés par nom de service (ServiceName) :

azure-cost dailyCosts --dimension ServiceName --from 2023-01-01 --to 2023-01-31

Pratique non ? Et si vous souhaitez faire de la détection d’anomalie au niveau des coûts générés durant une certaine période :

azure-cost detectAnomalies -g myResourceGroup --timeframe Custom --from 2023-01-01 --to 2023-01-31

J’ai également découvert que cet outil pouvait être utilisé dans un GitHub Workflow pour obtenir le coût de notre abonnement et stocker les résultats en markdown. C’est vraiment génial pour avoir un aperçu rapide des frais liés à notre abonnement.

Voilà, si ça vous intéresse pour suivre vos coûts sur Azure, le projet Azure Cost Cli est disponible ici sur Github.

Screenshot To Code – Quand l’IA génère le code d’une page web à partir de sa capture écran

Par : Korben

Vous êtes développeur, mais vous n’êtes pas designer et encore moins spécialiste en UX / UI… Alors que faire ?

Et bien le mieux c’est encore de pomper ce qu’on fait les autres. Enfin, s’inspirer… Vous m’avez compris. Et pour cela, il existe un outil merveilleux qui s’appelle Screenshot To Code et qui comme son nom l’indique, est capable de convertir une simple capture écran d’interface web en HTML / CSS Tailwind.

Mais comment est-ce possible ? Et bien Screenshot To Code utilise simplement GPT-4 Vision pour analyser le code et Dall-E pour générer des images similaires.

Vous pouvez l’installer sur votre ordinateur en suivant les instructions du Github, voire le faire tourner sur un Docker. Mais si c’est juste pour tester, le plus simple c’est encore d’aller sur cette démo en ligne.

Pour l’avoir testé, la génération du code est impressionnante, mais niveau rendu, on est très loin de la copie parfaite. Cependant, comme on peut ajuster en discutant avec l’IA, il est possible de s’approcher du rendu voulu.

Ensuite y’a plus qu’à exporter le code et voilà ! Vous avez une maquette HTML / CSS d’un site à moindres frais (ça vous coûte l’utilisation de l’API d’OpenAI)

À découvrir ici.

LM Studio – Pour faire tourner des LLMs en local et les utiliser directement dans votre code

Par : Korben

Avec tout ce qui se passe côté OpenAI en ce moment, je suis en train de chercher des alternatives libres pour re-brancher sur mes scripts existants qui ne demandent pas trop de réécriture. C’est simplement un principe de précaution pour ne pas être pris au dépourvu si la qualité de service baisse côté ChatGPT.

Et pour ça, j’ai besoin d’un modèle de langage et d’un outil qui permette de transformer ce modèle en API que je peux appeler dans mon code.

Pour l’instant, tout ceci est en phase de R&D mais je me suis dit qu’un petit retour, ça vous ferait plaisir. Je suis donc parti sur un modèle OpenChat censé être aussi performant qu’un ChatGPT 3.5. Jusque là rien de compliqué.

J’ai donc fait tourner ce modèle dans llamacpp sans souci en mode discussion. Puis je suis parti en quête d’un bridge pour avoir des API. Je suis donc tombé sur Llama-cpp-python avec son option Server qui malheureusement n’a jamais voulu correctement fonctionner chez moi pour de sombres incompatibilités x64 / ARM64 même dans pyenv. Bref…

N’ayant pas le temps d’y passer des semaines, on m’a ensuite gentiment rappelé durant mon live Twitch, que je pouvais faire ça avec Ollama, ce que j’avais complètement zappé alors que j’ai fait une vidéo pour les Patreons à ce sujet (arf).

Puis Thoxy et LePopeye, lecteurs de Korben.info, m’ont recommandé un outil baptisé LM Studio dont je vais vous parler dans cet article.

LM Studio est un outil fonctionnant sous macOS, Windows et Linux qui permet très simplement de télécharger des LLMs (Large Language Models) et de les faire tourner en local. Ainsi vous pouvez discuter avec ces modèles via un chat comme vous le feriez avec ChatGPT.

Mais ce n’est pas tout puisque l’outil offre des tas de possibilités de réglages (y compris du support pour les Mac Silicon) pour optimiser le modèle. Et bien sûr, la fonctionnalité qui m’a le plus intéressé, c’est la possibilité de faire tourner un serveur local qui sert une API identique à celle de ChatGPT.

Cela permet, sans énormément de modifs dans votre code, de basculer des services d’OpenAI à une IA locale de manière transparente ou presque pour peut que vous utilisiez la lib OpenAI 0.28.1

pip install openai==0.28.1

Voici un code d’exemple qui montre comment l’appeler en Python :

import os
import openai

openai.api_base = "http://localhost:1234/v1" 
openai.api_key = "" 

completion = openai.ChatCompletion.create(
  model="local-model",
  messages=[
    {"role": "system", "content": "Always answer in rhymes."},
    {"role": "user", "content": "Introduce yourself."}
  ]
)

print(completion.choices[0].message)

Pas besoin de clé API donc. Et pas besoin de casser tout votre code. Suffit de migrer vers LM Studio. Puis c’est gratuit 🙂

Bref, j’ai fait mes tests comme ça et malheureusement pour le moment, c’est pas super concluant. L’outil répond correctement en version « chat » mais son paramétrage un peu différent en version serveur. Donc faut encore que je gratte un peu pour trouver le dressage optimale de mon IA. Mais j’y suis presque.

Si ça vous branche de tester LM Studio, c’est par ici que ça se passe.

Warp – Du bon transfert de fichiers rapide et sécurisé

Par : Korben

Avez-vous déjà entendu parler de Warp ?

Alors non, non, non, ce n’est pas un logiciel pour voyager dans le temps (quoi que, ce serait sympa…), mais je parie qu’il va vous faire plaisir !

Warp est un logiciel open-source comme la plupart des softs dont je parle ici, et sa mission est d’envoyer des fichiers en toute sécurité à vos amis, au travers d’Internet ou d’un réseau local, simplement en échangeant un code composé de mots.

Trêve de bla-bla, voici les principales fonctionnalités de Warp :

  • Transfert de fichiers entre plusieurs appareils
  • Chaque échange est chiffré
  • Possibilité de transfert direct sur le réseau local, quand c’est possible
  • Le support d’un QR Code pour récupérer le code
  • Et une compatibilité avec le client de ligne de commande Magic Wormhole et toutes les autres applications compatibles

Ce qui distingue Warp, vous l’aurez compris, c’est son protocole Magic Wormhole. Ce protocole détermine la meilleure méthode de transfert, y compris via le réseau local et vous garantit que vos fichiers sont transférés rapidement et en toute sécurité, quelle que soit la taille des fichiers et l’emplacement des machines.

Warp est dispo sous Windows et Linux (en flatpak), et vous trouverez toutes les infos à son sujet ici.

Cerebro – Le launcher open source qui vous fera gagner du temps

Par : Korben

En bon enfant du capitalisme, vous courez sans cesse après la moindre seconde. Tout est optimisé dans votre vie, y compris personnelle. Vous ne perdez pas de temps, car le temps, c’est de l’argent. Bref, vous êtes plus qu’En Marche. Vous êtes en stress !

Alors pour vous soulager un peu et remettre un peu d’huile dans les rouages de votre usage quotidien de l’ordinateur, je vous invite aujourd’hui à tester Cerebro. Il s’agit d’un launcher open source que vous pouvez télécharger gratuitement ici pour Windows, Mac et Linux.

Comme n’importe quel outil du genre, ça permet de trouver n’importe quels fichier, programme ou truc qui trainent sur votre disque dur…

Mais surtout, Cerebro dispose d’une chiée de plugins qui vont vous permettre d’augmenter vos super pouvoirs. Ainsi, vous pourrez directement trouver des torrents, explorer des cartes, visualiser directement vos photos, faire des traductions, naviguer dans un Google Drive, débusquer des APK via Aptoide, lancer des recherches sur Spotify, YouTube, Github…etc, convertir des valeurs cryptomonétaires…etc.

Vous n’aurez donc pas à vous soucier de jongler avec plusieurs applications ou onglets de navigateur pour accomplir vos tâches quotidiennes.

Cerebro-app est gratuit, open source et vous pouvez le télécharger ici !

Dites adieu à Postman grâce à Bruno qui vous aidera à concevoir les meilleurs API de l’univers

Par : Korben

Amis du côté obscur du dev, vous avez sûrement déjà utilisé Postman pour tester vos APIs. Et je ne vous en veux pas car c’est un outil vraiment puissant qui a su trouver sa place dans le cœur de beaucoup de développeurs.

Cependant, vous savez aussi à quel point il peut être un peu lourdingue, surtout lorsqu’il s’agit de l’utiliser pour collaborer sur un gros projet.

Heureusement, j’ai quelque chose de plutôt cool à partager avec vous : Bruno. Et contrairement au ministre de l’économie du même prénom, celui-ci vous sera utile puisqu’il s’agit d’un projet open source qui promet de révolutionner le monde des clients API.

Pour bien saisir l’intérêt de Bruno, imaginez un outil qui vous permet de stocker vos collections API pour ensuite pouvoir les conserver et les tester directement depuis votre dépôt de code source, grâce au langage Bru. Vous pouvez ainsi profiter d’un contrôle de version simple et dire adieu aux espaces de travail encombrants. Génial pour bosser en collaboration avec vos collègues sans prise de tête.

Pour commencer avec Bruno, il suffit d’installer l’outil en allant le télécharger pour Windows, macOS et Linux sur le site officiel. Ensuite vous n’avez plus qu’à y décrire toute l’API que vous êtes en train de concevoir. Je vous invite à regarder cette vidéo pour bien comprendre comment ça fonctionne :

Bruno est également disponible en ligne de commande. Vous pouvez l’installer en utilisant votre gestionnaire de paquets Node préféré, comme NPM :

npm install -g @usebruno/cli

Ensuite, avec Bruno CLI en main, vous pouvez exécuter des collections entières d’API via des commandes simples directement depuis votre terminal. Cela facilite grandement le processus de test et d’automatisation des API.

Pour utiliser la CLI, commencez par accéder au répertoire contenant votre collection d’API et exécutez la commande suivante :

bru run

Vous pouvez également exécuter une requête unique comme ceci :

bru run request.bru

Ou bien, si vous voulez exécuter toutes les requêtes d’un dossier, utilisez cette commande :

bru run folder

Pour spécifier un environnement, ajoutez simplement l’option --env :

bru run --env env_name

Notez que Bruno existe également sous la forme d’une extension pour Visual Studio Code.

En somme, Bruno est une alternative légère et polyvalente aux clients API traditionnels, qui propose une approche plus simple et plus efficace pour travailler avec des collections API. Avec son intégration transparente au dépôt de code source et à la ligne de commande, Bruno facilite le travail en équipe et rend le développement d’API agréable et sans tracas.

De quoi dire adieu à Postman, non ?

OpenHue – Maitrisez l’éclairage connecté de vos Philips Hue avec cette API open-source

Par : Korben

Perso, je n’en ai pas chez moi, mais je sais que les ampoules connectées Philips Hue sont un véritable succès et que vous êtes nombreux à en être équipé.

Seulement, voilà, pour profiter de ce système d’éclairage intelligent qui vous permet de contrôler l’ambiance de votre maison en un clin d’œil, vous avez besoin d’applications dédiées.

Mais avez-vous déjà rêvé de créer votre propre application pour contrôler vos ampoules Hue ? Si c’est le cas, alors ce projet open source est fait pour vous !

OpenHue offre une spécification OpenAPI complète pour l’API REST Philips Hue (CLIP API). Cela facilite l’intégration et le contrôle des systèmes d’éclairage Philips Hue dans ses diverses applications, améliorant ainsi les expériences utilisateur et vous faisant gagner du temps de développement.

Imaginons que vous vouliez créer une application pour automatiser les réglages d’un éclairage en fonction de l’heure de la journée, de votre humeur, ou même en fonction de la musique que vous écoutez. Grâce à OpenHue, vous pouvez intégrer Philips Hue dans votre application et créer des scénarios d’éclairage personnalisés qui répondent exactement à vos besoins.

Pour commencer à utiliser la spécification OpenAPI d’OpenHue, il vous suffit de vous rendre sur la page des versions GitHub et de télécharger le fichier openhue.yaml. Une fois que vous avez le fichier, importez-le dans Postman pour tester l’API et générer du code client avec des outils tels que openapi-generator-cli. Les specs sont également disponibles sur ce site : https://openhue.io

Avant de vous lancer dans l’aventure, assurez-vous d’avoir installé Node.js et NPM sur votre machine. Ensuite, faites une copie du projet depuis GitHub et configurez l’environnement de développement en installant Redocly CLI. Grâce à cet outil, vous pourrez valider et construire la spécification OpenAPI et créer la documentation HTML lié à votre projet.

OpenHue est sous licence Apache 2.0, ce qui rend son utilisation et sa contribution ouvertes et gratuites pour tous.

Voilà pour les grandes lignes. À vous maintenant de partir à la découverte d’OpenHue et de donner libre cours à votre créativité en matière d’éclairage connecté. Que vous soyez un développeur chevronné ou un débutant curieux, OpenHue est un outil formidable pour intégrer et contrôler Philips Hue dans vos applications.

Recoll – Un soft puissant pour retrouver vos documents perdus

Par : Korben

Il y a quelques semaines, je me suis retrouvé face à un défi colossal : Retrouver un document perdu dans les méandres de mon ordinateur. On connait tous ces moments où on est sûr d’avoir mis ce fichier quelque part, mais où, bordel ?! Heureusement, je venais juste de tomber sur Recoll, un outil de recherche en texte intégral qui m’a sauvé la mise.

Recoll est basé sur la bibliothèque Xapian et dispose d’une interface graphique Qt. Il est compatible avec les systèmes Unix et Linux, et ce qui est génial, c’est qu’il est également disponible pour Windows et macOS. Autant dire qu’il y en a pour tout le monde !

Mais alors pourquoi c’est cool ?

Et bien, l’outil supporte un nombre impressionnant de formats de documents, ce qui le rend extrêmement puissant dans ses recherches, et offre une interface web permettant de lancer des recherches à distance. Imaginez, vous êtes en déplacement et vous avez besoin de retrouver un document sur votre ordinateur à la maison. Pas de problème, Recoll est là.

Et ce n’est pas tout puisque Recoll est gratuit, open source et multilingue et bénéficie également de mises à jour régulières.

Maintenant, passons aux choses sérieuses : Comment ça fonctionne ?

Recoll utilise tout simplement un index pour effectuer ses recherches, un peu comme le faisant Google Desktop Search à l’époque (les anciens, vous connaissez). Cela signifie qu’il parcourt tous vos documents et crée une espèce de base de données qui facilite grandement les recherches par la suite. Plus besoin de passer des heures à fouiller dans vos dossiers, Recoll fera ce travail pour vous et vous aurez tout de suite des résultats.

Pour installer Recoll, il vous suffit de suivre les instructions sur leur site web. Une fois installé, lancez-le et laissez-le indexer vos documents. Cela peut prendre un certain temps, mais ne vous inquiétez pas, c’est un processus à effectuer une seule fois. Ensuite, vous pourrez effectuer des recherches en texte intégral sur l’ensemble de vos documents, et ce, en un rien de temps.

L’interface de Recoll est très simple et intuitive. Il vous suffit de taper votre requête dans la barre de recherche et de laisser Recoll faire le reste. Les résultats s’affichent en quelques secondes, et vous pouvez affiner votre recherche en utilisant des filtres ou en modifiant les paramètres.

Recoll est également très personnalisable. Vous pouvez choisir quels dossiers indexer, exclure certains types de fichiers ou encore définir la fréquence des mises à jour de l’index. Bref, vous avez le contrôle total sur la manière dont Recoll fonctionne.

Et si vous êtes un fan de la ligne de commande, vous serez ravi d’apprendre que Recoll propose également une version en ligne de commande mais également une API.

Pour effectuer une recherche, il vous suffit de taper

recoll -t "votre requête"

et le tour est joué !

En résumé, Recoll est un outil puissant qui facilite grandement la recherche de documents sur votre ordinateur. Que vous soyez un utilisateur occasionnel ou averti (comme les claviers…lol), je vous recommande vivement de l’essayer. Vous ne serez pas déçu !

À découvrir ici

Subtitlr – L’outil IA pour sous-titrer vos vidéos YouTube

Par : Korben

Ça vous dirait de pouvoir ajouter facilement des sous-titres à vos vidéos YouTube sans vous arracher les cheveux ? Vous êtes un créateur de contenu, vous avez une chaîne YouTube en pleine croissance, et vous voulez toucher un public international, mais vous ne savez pas comment gérer les sous-titres ? Ne vous inquiétez plus, car Subtitlr est là pour vous aider !

Subtitlr est un outil en ligne de commande (CLI) alimenté par l’IA d’OpenAI qui génère des sous-titres pour les vidéos YouTube grâce à l’API Whisper d’OpenAI. Il transcrit la parole en texte, créant ainsi des sous-titres SRT précis dans la langue choisie. Simple d’utilisation, Subtitlr est compatible avec Linux, MacOS et Windows.

Pour commencer, vous devez d’abord installer FFmpeg sur votre système. Sur Linux, cela peut être fait en utilisant la commande suivante :

sudo apt-get install ffmpeg

Ensuite, vous devez installer Subtitlr. Pour ce faire, exécutez la commande suivante :

npm install -g @yoanbernabeu/subtitlr

Des binaires sont également disponibles.

Maintenant que vous avez installé Subtitlr, il est temps de l’utiliser pour générer des sous-titres pour vos vidéos YouTube. Pour cela, vous devez disposer de la clé API OpenAI. Si vous n’en avez pas encore, rendez-vous sur le site d’OpenAI pour en créer une.

Une fois que vous avez votre clé API, vous pouvez utiliser Subtitlr pour générer des sous-titres SRT pour une vidéo YouTube spécifique. Voici comment faire :

subtitlr --api-key <votre_clé_API_OpenAI> --url <URL_de_la_vidéo_YouTube> --language <langue_des_sous-titres>

Remplacez <votre_clé_API_OpenAI> par votre clé API, <URL_de_la_vidéo_YouTube> par l’URL de la vidéo pour laquelle vous souhaitez générer des sous-titres, et <langue_des_sous-titres> par la langue dans laquelle vous souhaitez que les sous-titres soient générés.

Et voilà ! Subtitlr générera un fichier SRT contenant les sous-titres pour la vidéo YouTube spécifiée.

En plus de vous faciliter la vie en tant que créateur de contenu, l’utilisation de Subtitlr pour ajouter des sous-titres à vos vidéos YouTube peut également améliorer l’accessibilité et l’engagement de votre public. Les personnes malentendantes ou parlant une autre langue pourront ainsi profiter de vos vidéos.

Subtitlr est un outil précieux pour gérer les sous-titres, alors, qu’attendez-vous ? Donnez un coup de pouce à votre chaîne YouTube et rendez vos vidéos accessibles à un public plus large en utilisant Subtitlr. Vous ne le regretterez pas !

À découvrir ici

QuickInstall – Une installation de Windows 98 accélérée et optimisée

Par : Korben

Y’a pas très longtemps, je suis tombé sur un projet fascinant qui m’a replongé dans les années 90, lorsque j’installais avec bonheur Windows 98 sur mon PC.

D’ailleurs, qui se souvient de l’époque où l’on attendait patiemment que Windows 98 s’installe sur nos machines, disquette par disquette ou avec le CD-Rom pour ceux qui avaient la chance d’avoir un lecteur ? C’était tellement long !!!

Bref, le projet en question dont je vais vous parler aujourd’hui s’appelle QuickInstall, et il sert à créer des images ISO d’installation de Windows 98 SE optimisées afin d’avoir une installation extrêmement rapide.

QuickInstall repose sur l’utilisation d’un Windows 98 déjà installé, sur lequel se rajouter des pilotes et des outils supplémentaires pour rendre l’installation plus rapide et plus personnalisable. J’aime d’ailleurs beaucoup l’idée de faire reposer tout ce processus d’installation sur un Linux avec ses outils de formatage et de partionnement, ce qui permet d’aller encore plus vite

D’après les premiers tests effectués, une installation optimisée de Windows 98 SE peut être réalisée en seulement 60 à 90 secondes sur une machine Pentium III avec ATA/ATAPI Ultra DMA. Par contre, les systèmes d’exploitation pris en charge se limitent à Windows 98, Windows 98 SE et Windows Millenium Edition. Les versions internationales n’ont pas été testées, mais devraient fonctionner. En revanche, les versions de Windows 95 ne sont pas prises en charge.

Pour utiliser QuickInstall, il est nécessaire d’avoir un processeur de type i486, au moins 24 MB de mémoire et un contrôleur IDE / SATA / SCSI compatible avec Linux. Plusieurs méthodes permettent de démarrer une image QuickInstall de Windows 98, telles que le démarrage à partir d’un CD/DVD-ROM, d’une disquette de 1,44 Mo avec DOS (dosflop.img), ou d’une disquette de 1,44 Mo avec un noyau minuscule (floppy.img). Il est aussi possible de créer des images USB amorçables à l’aide du script de préparation du système fourni.

Pour créer des images QuickInstall, vous devrez avoir un Windows 7, 8.1, 10 ou 11, ou une variante de Linux récent voire WSL, mais également Python 3.5 ou plus récent. Il est important de noter que certains outils tels que mkisofs de cdrtools et wine devront être installés sur votre système, ainsi qu’un logiciel pour extraire des fichiers d’une image de disque dur (p. ex. 7zip).

L’utilisation du script de préparation du système (sysprep.py) permet de préparer une installation sous la forme d’une image ISO et/ou USB. Ce script prend divers paramètres tels que la création d’images, la spécification de répertoires racine de système Windows 98/ME, l’ajout de pilotes supplémentaires, et bien plus encore.

Le processus d’installation consistera alors à configurer Windows 98/ME dans une machine virtuelle ou un émulateur, en utilisant la configuration recommandée. Il est primordial de s’assurer que le pilote réseau n’est pas installé pour éviter les problèmes. Ensuite, il faudra éteindre la machine virtuelle et utiliser un logiciel d’imagerie pour extraire la racine entière de la partition sur laquelle Windows 98 a été installé. Il suffira alors de copier les pilotes souhaités dans les répertoires appropriés, puis d’exécuter le script sysprep.py en suivant les instructions pour créer l’image d’installation optimisée.

Pour créer une image ISO bootable, il est nécessaire d’utiliser le paramètre --iso pour le script sysprep.py. De même, pour créer une image de clé USB bootable, il faut utiliser le paramètre --usb pour le script sysprep.py. Lorsque l’image est prête, elle peut être écrite sur une clé USB à l’aide de dd sous Linux ou d’outils tels que ddFor Windows ou Win32 DiskImager sous Windows.

QuickInstall offre également la possibilité de créer des images d’installation multi-variantes en spécifiant le paramètre --osroot plusieurs fois. Lors de l’installation, un menu de sélection apparaît pour permettre à l’utilisateur de choisir la variante à installer. Ce projet est une véritable mine d’or pour les amateurs de rétro-informatique et les passionnés de Windows 98.

Ah et si tout ce que vous voulez, c’est simplement tester Windows 98, pas la peine de l’installer. Cliquez simplement ici.

En somme, le projet QuickInstall m’a fait revivre les souvenirs de mes anciennes installations de Windows 98 tout en apportant une touche de modernité avec une installation optimisée et rapide.

Je trouve ce projet plutôt intéressant et je vous encourage, chers amateurs de rétro-computing à cliquer ici pour en découvrir un peu plus.

ResearchGPT – Comment discuter avec un PDF grâce à l’IA ?

Par : Korben

Aujourd’hui, je vais vous parler d’une application vraiment cool qui va changer la façon dont vous interagissez avec les articles de recherche : ResearchGPT. Imaginez pouvoir poser une question à un article de recherche et obtenir une réponse pertinente en quelques secondes ! C’est exactement ce que fait cette application codée avec Flask.

Alors, comment ça marche ?

Et bien, vous pouvez tout simplement entrer un lien vers un PDF dispo en ligne ou uploader votre propre PDF. L’application va ensuite extraire le texte du PDF, créer des « embeddings » à partir du texte et les utiliser via l’API d’OpenAI pour générer une réponse cohérente à votre question. Et ce n’est pas tout : elle renvoie également la source de texte qu’elle a utilisée pour générer la réponse et le numéro de page.

Pour essayer la démo, rendez-vous ici.

Et si vous voulez l’installer vous-même, pas de problème ! Il vous suffit de cloner le dépôt GitHub, d’installer les dépendances et de définir votre clé API OpenAI en tant que variable d’environnement.

Voici un tutoriel pas à pas :

Clonez le dépôt GitHub et installez les dépendances :

git clone https://github.com/mukulpatnaik/researchgpt.git
pip install -r requirements.txt

Pensez ensuite à exporter votre clés API OpenAI comme ceci :

export OPENAI_API_KEY=votre-clé-API

Ensuite, y’a plus qu’à lancer le script comme ceci :

python main-local.py

Pour l’avoir testé, ça fonctionne plutôt bien et on peut comme ça, poser des questions ou récupérer l’info qui nous intéresse directement sans devoir se taper tout le document à lire. Et comme ça donne les accès rapide vers les endroits où se trouve l’info d’origine, c’est top.

Je suis également tombé sur ce script Python qui permet de faire à peu près la même chose mais je n’ai pas encore eu le temps de le tester. Je vous le partage quand même.

En tout cas, je pense que ce genre d’outil peut grandement aider les scientifiques, les journalistes ou les étudiants qui manipulent des tonnes de données planquées dans des PDFs (quelle idée !)

Plus d’infos ici.

Visualisez vos données JSON en graphes avec JSON CRACK

Par : Korben

Si vous traitez régulièrement de gros fichiers JSON et que vous avez un peu de mal à vous y retrouver, JSON CRACK peut vous aider à y voir plus clair.

Cet outil que vous pouvez utiliser directement en ligne ou depuis Visual Studio Code va vous permettre de visualiser les données JSON de manière beaucoup plus intuitive au travers de graphs comme celui-ci :

Graphique en barres représentant les données JSON

Vous pouvez d’un clic charger n’importe quel fichier JSON, le modifier, changer l’orientation du graphique, étendre ou réduire les noeuds, mais également faire des recherches dans le JSON et bien sûr exporter tout cela au format PNG. Vous pouvez même créer un widget à intégrer sur votre site ou partager le graph via une simple URL.

Le projet est open source donc vous pouvez aussi l’installer en local sur votre machine, mais si vous utilisez la version en ligne, sachez que pour stocker au-delà de 15 fichiers JSON ou pour générer des JSON via l’API, il faudra vous alléger de 5$ par mois.

Le GitHub est ici et pour accéder au site, c’est par là.

PostgREST – Parce que coder des interfaces CRUD, c’est so 2010

Par : Korben

Si vous aimez jouer avec votre base de données PostgreSQL et que vous en avez assez de coder vous-même vos interfaces CRUD (Create, Read, Update, Delete) pour une API par exemple, et bien j’ai un super projet qui va vous soulager autant qu’un gros bon kebab après une implantation capillaire en Turquie !

Cela s’appelle PostgREST et c’est un serveur web totalement autonome capable de transformer votre BDD PostgreSQL en API RESTful. Comme il est plus simple de demander à la base de données de faire des jointures ou de donner des autorisations sur certains objets, que de coder toute une logique métier pour récupérer les données qui vous intéresse, c’est forcement un gros gain de temps !

Capture d'écran de l'interface de PostgREST montrant la liste des tables et des colonnes de la base de données

Et le temps, c’est de l’argent que vous pouvez m’envoyer !

Vous faites vos vues personnalisées dans PostgreSQL et PostgREST s’aligne dessus pour vous proposer l’API qui correspondra parfaitement à votre base. Par exemple, toutes les vues et les tables de la base sont par défaut accessible via l’API. Si vous avez une table qui s’appelle « people », elle sera alors interrogeable via le chemin suivant :

curl "http://localhost:3000/people"

Et vous pourrez alors filtrer les résultats en spécifiant des conditions sur les colonnes. Par exemple si vous avez une colonne « Student » qui est à True ou False s’il s’agit d’un étudiant, et bien vous pouvez filtrer comme ceci :

curl "http://localhost:3000/people?student=is.true"

Vous avez capté le concept. La documentation est complète et bien faite et vous n’aurez aucun mal à vous lancer grâce aux tutos dispo ici. Et si vous le déployez en production, n’oubliez pas d’aller consulter la page sur le hardening.

Microsoft Edge – Quand suivre les créateurs met en danger votre vie privée

Par : Korben

Le saviez-vous ? Le navigateur Microsoft Edge et une fonctionnalité pour le moins étonnante qui pourrait mettre en péril votre précieuse vie privée.

Héééé ouais 🙂

Pour ceux qui ne sont pas au courant, voici un résumé rapide des faits : il semblerait que lorsque nous naviguons avec Microsoft Edge, l’URL des sites qu’on visite soit envoyée vers l’API de Bing (qui appartient également à Microsoft).

Eh oui… Big Brother est toujours là pour veiller sur vos données !

Ce lièvre a été soulevé par des utilisateurs de Reddit – merci les gars – ainsi que Rafael Rivera, ingénieur logiciel et développeur chez EarTrumpet. Le souci proviendrait donc d’une fonction mal implémentée dans ce bon vieux Edge… MOUAIS, COMME DE PAR HASARD !

Alors concrètement, d’où vient ce problème ???
Et bien cela fait déjà quelques mois maintenant que Microsoft teste une nouvelle option permettant aux utilisateurs du navigateur Edge de pouvoir facilement suivre leurs créatrices ou créateurs préféré(e)s sur YouTube ou sur le Web en général.

Cette fonctionnalité, nommée de manière très originale ^^ : « Suivre les créateurs » a été déployée plus largement très récemment. Le problème est que même si vous ne l’utilisez pas, vos URL sont tout de même envoyées à Bing API. Paye ta vie privée.

Mais pour autant, pas de panique ! Je vais vous donner l’astuce ultime pour remédier au problème !

Il suffit de désactivez la fonction « Suivre les créateurs ». Ça sert à rien, ça pompe vos données, donc bye bye !!

Même si du côté de Microsoft on semble prendre ce souci très au sérieux – puisqu’ils enquêtent actuellement dessus… De vrais Colombo -, je préférais quand même vous avertir.

N’hésitez pas à partager cet article autour de vous afin d’informer tous vos proches qui utilisent également Microsoft Edge et protégez au mieux votre (et leur) vie privée !

Source

Organisez vos comics, magazines et livres avec Komga

Par : Korben

Si vous cherchez un bon moyen d’auto-héberger vos magazines, vos livres et bandes dessinées, ne cherchez plus, Komga est la solution !

Si les comics vous intéressent et que vous avez tout ça au format numérique, c’est forcement un peu galère pour organiser tout ça et s’y retrouver. Grâce à Komga vous pourrez vous sortir de ce pétrin et créer des bibliothèques pour vos BDs afin d’organiser totalement vos collections.

Komga est donc un serveur de comics / mangas open source et gratuit. Vous pouvez même y mettre vos magazine PDF ou vos livres. Il supporte les formats epub, pdf, cbz et cbr et une fois en place, vous profiterez d’une jolie d’une interface web responsive.

Organisez vos comics avec Komga

Vous pourrez ainsi organiser votre bibliothèque avec des collections et des listes de lecture, et même modifier les métadonnées de vos séries de BDs et de vos livres. Komga permet également d’importer automatiquement les métadonnées intégrées à ces fichiers et vous pouvez tout lire sans quitter votre navigateur via le lecteur web.

Gérez vos magazines avec Komga

D’ailleurs plusieurs modes de lecture sont dispo et vous pouvez même gérer plusieurs users avec un contrôle d’accès par bibliothèque, mais également des restrictions d’âge.

En plus de cela, il dispose d’une API REST et de nombreux outils et scripts développés par la communauté qui sont capables d’interagir avec Komga.

Vous pourrez, d’un clic, télécharger les fichiers à l’unité ou des séries entières de BDs entières et si vous avez des petits soucis de mémoire lors de vos imports, l’outil est également capable de détecter les fichiers en double et même les pages en double. Komga peut également importer automatiquement les BDs déposées dans un répertoire.

Stockez vos livres avec Komga

Le plus beau là-dedans, c’est que ça s’installe très facilement avec Docker Compose, ou lancé directement via le .jar fourni (java). Donc vous l’aurez compris, ça peut tourner sur un Windows, un Linux mais également un NAS.

Si vous voulez tester par vous-même, une démo est accessible ici : https://demo.komga.org/

  • Login: demo@komga.org
  • Password: komga-demo

aCropalypse – Pour retrouver les secrets de vos photos recadrées sur Google Pixel

Par : Korben

Allez, ce matin, on va se faire plaisir. Je vais vous parler de la faille sécurité CVE-2023-21036 connue également sous le nom aCropalypse. Cela touche principalement les gens qui ont des smartphones Google Pixel et qui s’amusent recadrer leurs photos.

Alors en quoi ça consiste ? Et bien cela permet de récupérer des données dans des fichiers PNG qui ont été tronqués. Ainsi, un attaquant pourrait, en exploitant cette faille, restaurer des informations personnelles qui auraient été retirées d’une image comme des adresses postales ou des données bancaires, le tout à partir d’images mises en ligne. Flippant (ou trop cool… lol) !!

Acropalypse
https://twitter.com/ItsSimonTime/status/1636857478263750656

Pour mieux comprendre, imaginez que vous preniez une capture d’écran d’un mail contenant votre adresse personnelle, puis que vous la recadriez pour ne montrer que le produit que vous avez acheté et masquer vos données personnelles. Grâce à cette faille, il est tout à fait possible de récupérer la partie supprimée de l’image, y compris votre adresse.

Alors comment fonctionne cette vulnérabilité ?

Et bien cela repose sur la compression zlib utilisée dans les fichiers PNG. Normalement, il est très difficile de décompresser des données compressées sans connaître l’arbre de Huffman utilisé pour effectuer cette compression. Toutefois, dans le cas spécifique de cette exploitation de faille, en trouvant le début d’un bloc de codage Huffman, il devient possible de le décompresser à partir de celui-ci.

L’algorithme utilisé est assez simple : il parcoure chaque décalage binaire et, lorsqu’un décalage correspondant au début d’un bloc de Huffman est trouvé, il tente de décompresser les données en le prenant comme point de départ. Ainsi, si les données se décompressent, c’est OK. Sinon, il passe au décalage suivant.

for each bit-offset:
    if it doesn't look like the start of a dynamic huffman block:
        skip this offset

    try decompressing from that offset:
        if the decompressed data looks plausible:
            return decompressed data!
    catch decompression errors:
        continue

Et voilà comment on récupère des données effacées sur des PNG.

Cette vulnérabilité est due à un problème d’API chez Google, où c’est l’option « w » (écriture) qui a été utilisée à la place de « wt » (écriture avec troncage). Par conséquent, l’image d’origine n’est pas tronquée lorsqu’elle est recadrée.

Et si vous voulez jouer avec, il y a un petit Proof of concept ici ou encore ce site qui permet de récupérer une image complète qui aurait été recadrée sur un Google Pixel. Ça promet :).

Bref, si la fonction « recadrage » que vous utilisez dans votre logiciel préféré passe par l’API de Google, soyez vigilant, le temps que ce problème soit corrigé.

Source

Editly – Pour automatiser à mort vos montages vidéo

Par : Korben

Editly est à la fois un outil bien pratique, mais également un framework conçu pour faire de l’édition vidéo à l’aide Node.js et ffmpeg.

Et alors me direz-vous ?

Et bien ça vous permet de créer facilement et surtout de manière programmatique une vidéo à partir de tous vos clips vidéos, images, fichiers audio et éventuellement des titres (texte) en y ajoutant évidemment des transitions et de la musique. L’outil s’utilise en ligne de commande, mais vous pouvez aussi lui donner un fichier de config à digérer pour qu’il fasse exactement ce que vous voulez à partir de tous les paramètres spécifiés dans ce JSON. Comme je le disais en intro, c’est également un framework, vous vous pouvez utiliser son API JavaScript qui est encore plus flexible.

import editly from 'editly';

// See editSpec documentation
await editly(editSpec)

Totalement inspiré de ffmpeg-concat, Editly est beaucoup plus rapide et ne nécessite pas énormément d’espace de stockage, car il édite la vidéo à la volée. On peut également étendre ses fonctionnalités avec des modules si besoin.

En termes de fonctionnalités, il permet d’éditer des vidéos, d’en créer « from scratch » à partir de couleurs et d’effets aléatoirement générés et il prend en charge de toutes les résolutions comme des vidéos 4K ou des photos DSLR. Au niveau des exports, c’est pareil, il peut aussi bien pondre un post Instagram (1:1), une story Instagram (9:16), un format pour YouTube (16:9) ou toutes les autres dimensions dont vous avez besoin. C’est vraiment un outil génial pour les créateurs qui font de la vidéo et qui ont besoin de sortir un même contenu sur plusieurs plateformes qui acceptent des formats et des tailles de vidéos différentes.

Voici un rendu d’une vidéo produite avec Editly :

Editly peut également accélérer / ralentir automatiquement les vidéos pour recaler comme il faut vos clips, superposer du texte, des images (y compris transparentes) et des sous-titres sur les vidéos, les images ou les arrière-plans. Il supporte également du JavaScript / HTML5 Canvas / Fabric.js pour tout ce qui est « écrans personnalisés » ou pour pouvoir ajouter des superpositions dynamiques sur les vidéos.

Vous pourrez également exporter un GIF, ajouter des effets de vignette, conserver 1 seule source audio ou au contraire en mixer plusieurs, ou encore rajouter des fondus automatiques et de la normalisation sur le son.

En ce qui concerne l’installation, cette merveille peut fonctionner sous Windows, macOS ou Linux.

Pour l’installer, vous devez entrer la commande suivante :

npm i -g editly

Une fois installé, vous pourrez alors utiliser l’interface en ligne de commande pour assembler rapidement une vidéo ou utiliser son API JavaScript pour créer des choses plus complexes. Et comme je l’évoquais avant, vous pouvez également utiliser des fichiers JSON pour spécifier les paramètres du montage attendu. Je vous invite à lire la documentation pour en savoir plus.

Ce mode de fonctionnement « automatisé » de l’édition vidéo va vous faire gagner un max de temps si vous souhaitez par exemple créer un diaporama à partir de dizaines d’images en rajoutant du texte par-dessus, ou encore créer une bande-annonce ou une vidéo promo. Certain font même des chaines YouTube avec du contenus entièrement générés comme ça.

Mais vous pouvez l’utiliser simplement pour recadrer automatiquement une vidéo pour l’avoir dans plusieurs formats, c’est également super pratique.

Bref, j’ai trouvé ça génial et c’est à tester ici !

CropScore : le meilleur site pour recadrer vos images en un clin d’oeil !

Par : Korben

Hé salut les amis !

Si vous cherchez un moyen facile de recadrer vos images pour différentes plateformes sans avoir à télécharger de logiciel, alors ce site est fait pour vous !

Nommé CropScore, ce site web vraiment cool vous permet de télécharger des images aux formats PNG, WEBP et JPEG et de les recadrer soit au format voulu, soit grâce à toute une une gamme de tailles de recadrage prédéfinies pour les plateformes de réseaux sociaux courantes : Twitter, Facebook, Médium, Pinterest, YouTube, et j’en passe.

L’idée c’est de pouvoir recadrer une image pour en faire une cover YouTube, une bannière Twitter ou un avatar pour Facebook. À vous de voir !

CropScore vous offre aussi des outils de déplacement, de zoom et de rotation pour affiner vos recadrages, avec des données de résolution en temps réel pour vous aider à évaluer la qualité de votre recadrage. Vous pouvez même prévisualiser votre image recadrée avant de la télécharger.

Et si vous faites une erreur, pas de panique : vous pouvez réinitialiser l’image et les fenêtres de recadrage à leur état d’origine.

Bref, CropScore c’est la solution idéale pour recadrer vos images facilement et rapidement, que vous soyez un pro de la retouche photo ou simplement quelqu’un qui veut partager des photos sur les réseaux sociaux. À bookmaker d’urgence !

Le CropScore est à découvrir ici.

Mettez vos dossiers dans la barre de menu de macOS

Par : Korben

Chers amis sous macOS, si vous trouvez que mettre des accès rapides dans le dock pour vos applications ou vos répertoires, c’est un peu nul parce que ça prend une place folle et que ce n’est pas pratique, et bien j’ai une bonne nouvelle.

Le logiciel Folder Peak va vous permettre de faire la même chose, mais au niveau des icônes de la barre de menus.

Ainsi, vous aurez un dock totalement épuré et des accès rapides super pratiques en haut de l’écran. Cela permet d’accéder à ses documents ou applications importantes d’un clic et même de les glisser-déposer ensuite ailleurs si ça vous chante.

Évidemment, tout est personnalisable avec des icônes et vous pouvez même avoir un aperçu des fichiers.

Vraiment super pratique !

Folder Peak est un outil gratuit que vous pouvez trouver ici.

Comment coder une API RESTful ?

Par : Korben

— Article en partenariat avec talent.io —

Certains pensent que le monde se divise en deux avec d’un côté le bien et de l’autre le mal. Mais la vérité est ailleurs surtout pour les développeurs qui savent que le monde se divise en réalité entre le Frontend et le Backend.

Et pour que ces 2 faces d’une même pièce puissent « discuter », il nous faut des API. API, ça veut dire Application Programming Interface et c’est tout simplement un ensemble d’instructions permettant aux applications de communiquer entre elles. Maintenant des types d’API, il y en a des tonnes, mais je vous propose qu’aujourd’hui on s’intéresse aux API qui respectent le standard architectural REST.

En effet, quand on travaille en tant que développeur, on ne peut pas passer à côté des API REST, tant cette pratique est très répandue. Si vous débutez dans votre métier, c’est forcement quelque chose que vous devez apprendre et maitriser. De la même manière, quand on débute sa carrière de développeur ou qu’on a déjà beaucoup d’années au compteur mais qu’on ne connaît pas sa valeur sur le marché de l’emploi, il est bon de connaître la grille des salaires en France. Ça tombe bien puisque talent.io a mis en ligne une étude des salaires de la tech en 2022 pour que vous puissiez déterminer si votre salaire est correct ou sous évalué.

Je vous invite à vous plonger dedans afin de savoir où vous vous situez sur cette grille des salaires.

C’est quoi une API RESTful ?

REST, ça veut dire « Representational State Transfer ». Lorsqu’une API respecte les contraintes de REST, on parle alors d’une API RESTful.

Quand un développeur veut créer une API RESTful, il doit alors respecter les contraintes édictées par REST, notamment sur le fait que son API doit fonctionner au travers du protocole HTTP et de ses verbes (GET, POST…etc.) et que les requêtes et les réponses de l’API soient dans un format texte tels que JSON, HTML, XML…etc.

Les API RESTful sont alors mises à disposition des applications via ce qu’on appelle des endpoints. Un endpoint est un assemblage de 2 choses : une URI et un verbe HTTP.

Admettons que j’ai une API qui permette de lister des utilisateurs, mais également d’en créer des nouveaux.

L’URI de mon API est la suivante :

https://url.com/api/user

Le but du jeu, c’est d’appeler par exemple ce endpoint avec le verbe GET pour obtenir une liste de tous les utilisateurs.

GET: /user/

Ou pour ajouter un nouvel utilisateur, on peut utiliser le verbe POST comme ceci, en transmettant un bout de JSON contenant toutes les informations liées à l’utilisateur qu’on souhaite créer (nom, prénom…etc.) :

POST: /user/

L’idée là, c’est de vous montrer qu’on peut interagir avec l’API à l’aide de différents verbes HTTP. Get peut être assimilé au verbe « lire », POST au verbe « créer », PUT et PATCH au verbe « Mettre à jour » et DELETE au verbe « supprimer ». C’est aussi simple que cela. Et en retour le serveur peut alors répondre avec des codes de status HTTP classiques comme 200, 201, 2002…etc. pour dire que tout est OK, ou des codes de redirection 3xx, d’erreur client 4xx ou d’erreur serveur 5xx.

En ce qui concerne le format utilisé par les requêtes et les réponses, vous pouvez utiliser du texte, peu importe son format (html, xml.etc.), mais par convention, on utilise surtout du JSON (JavaScript Object Notation).

Et JSON ?

Le JSON a la particularité d’être facile à lire et à écrire pour les humains et est utilisé pour enregistrer des données dans des bases de données, mais également pour transmettre ces données entre les applications. C’est pourquoi on l’utilise dans les API RESTful.

Le JSON est une collection de paires nom / valeur qui sont ordonnées dans une liste. Ainsi les valeurs contenues dans le JSON peuvent être une chaine de caractère (string), un nombre, mais également des objets JSON, des tableaux de valeurs (Array), des booléens (true / false) ou la fameuse valeur null.

Les contrôles hypermedia

Je ne vais pas les aborder en détail pour ne pas alourdir cette initiation débutant mais sachez que pour qu’une API soit RESTful, elle doit en plus de tous ces aspects, intégrer également la notion de contrôle hypermedia (Hypermedia as the Engine of Application State – HATEOAS). C’est un attribut de REST qui permet de renvoyer des liens hypertextes afin d’indiquer les actions disponibles directement dans les réponses JSON

Voilà concernant les grands principes des API RESTful.

Comment créer votre première API RESTful ?

Maintenant je vous propose qu’on apprenne à en créer une de zéro. Vous allez voir, c’est super simple.

Pour cette démo, j’ai choisi d’utiliser Python comme d’habitude. Et je vais importer dans mon code le framework Flask qui va me permettre de faire monter mon API RESTful très facilement. Installez Flask comme ceci :

pip3 install flask-restful

Pour tester l’API, nous allons utiliser un outil qui permet à la fois de balancer nos requêtes et de voir si les réponses correspondent bien. L’un des plus connus s’appelle Postman et c’est gratuit en version de base pour tester. L’application Desktop de Postman est disponible ici.

Ensuite, nous allons définir ce que va faire notre API. Ce sera quelque chose d’assez simple permettant de créer, supprimer, lire et mettre à jour des données. Admettons que j’ai un site sur lequel je dois référencer des produits. Chacun de ces produits aura un id, un nom, un prix et une catégorie.

Le code de votre première API

Je vais donc créer un fichier productAPI.py et je vais importer Flask comme ceci avec ses imports spécifiques aux API et au parsing JSON :

from flask import Flask
from flask_restful import Resource, Api, reqparse

app = Flask(__name__)
api = Api(app)

Puis je vais créer une espèce de mini base de données JSON directement dans mon code afin d’y référencer mes produits :

products = [
    { "id": 1, "name": "Stylo 4 couleurs", "price": 10, "category": "Papeterie" },
    { "id": 2, "name": "Cahier vert", "price": 20, "category": "Papeterie" },
    { "id": 3, "name": "Télévision 4K", "price": 30, "category": "Tech" },
    { "id": 4, "name": "Souris sans fil", "price": 40, "category": "Tech" },
    { "id": 5, "name": "Ananas", "price": 50, "category": "Alimentaire" },
    { "id": 6, "name": "Kinder Bueno", "price": 60, "category": "Alimentaire" },
    { "id": 7, "name": "Chemise de président", "price": 70, "category": "Textile" },
    { "id": 8, "name": "T-shirt de punk", "price": 80, "category": "Textile" },
    { "id": 9, "name": "Tournevis bleu", "price": 90, "category": "Bricolage" },
    { "id": 10, "name": "Marteau rouge", "price": 100, "category": "Bricolage" }
    ]

Maintenant on va créer une classe Product qui sera vu comme un endpoint au niveau de notre API. Et dans cette class, nous allons placer nos 4 fonctions correspondantes aux 4 verbes HTTP dont je vous ai parlé plus haut.

class Product(Resource):

    def get(self, id):

    def post(self, id):

    def put(self, id):

    def delete(self, id):

La structure de base de notre API est OK. Maintenant, on va définir chacune de ces fonctions en commençant par la fonction get utilisée pour récupérer les informations d’un produit à partir de son ID. Comme vous pouvez le voir, on fait une boucle « for » qui va parcourir l’ensemble des produits et si l’ID correspond à ce qui spécifié dans la requête, on renvoie l’objet « product » avec son code HTTP 200 et si ce n’est pas le cas, on renvoie un message « Produit introuvable » accompagné d’un code d’erreur HTTP 404 qui correspond à une ressource non trouvée.

    def get(self, id):
        for product in products:
            if (id == product["id"]):
                return product, 200
        return "Produit introuvable", 404

La fonction suivante va nous permettre de créer un nouveau produit. La donnée utilisée dans la requête étant structurée en JSON, cette fonction va utiliser le parseur de Flask pour extraire toutes les données du JSON et les ajouter à notre tableau de produits :

    def post(self, id):
        parser = reqparse.RequestParser()
        parser.add_argument("name")
        parser.add_argument("price")
        parser.add_argument("category")
        args = parser.parse_args()

        for product in products:
            if (id == product["id"]):
                return "Ce produit {} existe deja".format(id), 400

        product = {
            "id": id,
            "name": args["name"],
            "price": args["price"],
            "category": args["category"]
        }
        products.append(product)
        return product, 201

Une fois que le produit est créé, on retourne le code 201 qui veut dire que la création s’est bien déroulée. Et si le produit existait déjà avec cet ID, on renvoie le code 400 avec un message d’erreur.

La fonction put suivante est assez similaire puisqu’elle permet à la fois de créer un nouveau produit (si l’id n’est pas encore utilisé) ou de mettre à jour un produit existant.

    def put(self, id):
        parser = reqparse.RequestParser()
        parser.add_argument("name")
        parser.add_argument("price")
        parser.add_argument("category")
        args = parser.parse_args()

        for product in products:
            if (id == product["id"]):
                product["name"] = args["name"]
                product["price"] = args["price"]
                product["category"] = args["category"]
                return product, 200

        product = {
            "id": id,
            "name": args["name"],
            "price": args["price"],
            "category": args["category"]
        }
        products.append(product)
        return product, 201

Enfin, vous l’aurez compris, la fonction delete permettra de supprimer un enregistrement à partir de son ID.

    def delete(self, id):
        global products
        products = [product for product in products if product["id"] != id]
        return "{} is deleted.".format(id), 200

Une fois ces fonctions définies, il ne reste plus qu’à spécifier le format de l’URI qui sera utilisé pour appeler l’API et lancer l’API (en mode debug pour démarrer). Le paramètre <int:id> permet d’indiquer que dans le chemin du endpoint, on peut ajouter une variable acceptée par l’API (ici l’ID du produit).

api.add_resource(Product, "/product/<int:id>")
app.run(debug=True)

Tester l’API avec Postman

Enfin, il ne reste plus qu’à lancer le script python à l’aide de la commande suivante :

python3 productAPI.py

Le serveur web de Flask se lancera alors et vous verrez apparaitre une URL locale que vous pourrez appeler dans Postman pour ensuite tester votre API.

Voici le code complet du script pour information.

from flask import Flask
from flask_restful import Resource, Api, reqparse

app = Flask(__name__)
api = Api(app)

products = [
    { "id": 1, "name": "Stylo 4 couleurs", "price": 10, "category": "Papeterie" },
    { "id": 2, "name": "Cahier vert", "price": 20, "category": "Papeterie" },
    { "id": 3, "name": "Télévision 4K", "price": 30, "category": "Tech" },
    { "id": 4, "name": "Souris sans fil", "price": 40, "category": "Tech" },
    { "id": 5, "name": "Ananas", "price": 50, "category": "Alimentaire" },
    { "id": 6, "name": "Kinder Bueno", "price": 60, "category": "Alimentaire" },
    { "id": 7, "name": "Chemise de président", "price": 70, "category": "Textile" },
    { "id": 8, "name": "T-shirt de punk", "price": 80, "category": "Textile" },
    { "id": 9, "name": "Tournevis bleu", "price": 90, "category": "Bricolage" },
    { "id": 10, "name": "Marteau rouge", "price": 100, "category": "Bricolage" }
    ]

class Product(Resource):
    def get(self, id):
        for product in products:
            if (id == product["id"]):
                return product, 200
        return "Product not found", 404

    def post(self, id):
        parser = reqparse.RequestParser()
        parser.add_argument("name")
        parser.add_argument("price")
        parser.add_argument("category")
        args = parser.parse_args()

        for product in products:
            if (id == product["id"]):
                return "Ce produit {} existe deja".format(id), 400

        product = {
            "id": id,
            "name": args["name"],
            "price": args["price"],
            "category": args["category"]
        }
        products.append(product)
        return product, 201

    def put(self, id):
        parser = reqparse.RequestParser()
        parser.add_argument("name")
        parser.add_argument("price")
        parser.add_argument("category")
        args = parser.parse_args()

        for product in products:
            if (id == product["id"]):
                product["name"] = args["name"]
                product["price"] = args["price"]
                product["category"] = args["category"]
                return product, 200

        product = {
            "id": id,
            "name": args["name"],
            "price": args["price"],
            "category": args["category"]
        }
        products.append(product)
        return product, 201

    def delete(self, id):
        global products
        products = [product for product in products if product["id"] != id]
        return "{} is deleted.".format(id), 200

api.add_resource(Product, "/product/<int:id>")
app.run(debug=True)

Côté Postman, un simple GET se forme ainsi et renvoie l’intégralité du JSON propre au produit (grâce à son ID) :

Pour faire un POST, il faut bien penser à indiquer qu’on souhaite transmettre un contenu de type « RAW » au format JSON et appeler le endpoint avec l’ID de notre nouveau produit (ce n’est pas l’idéal bien sûr, car le principe d’un nouvel ID c’est qu’il soit généré directement par le code de l’API, mais c’est pour illustrer mon exemple).

Ensuite pour la mise à jour avec le verbe PUT, ça donne ça…

Et pour la suppression, on obtient ce genre de retour :

Et ensuite ?

Vous l’aurez compris, ce n’est vraiment pas compliqué à développer. Ici on est sur un exemple simple, mais ensuite, vous devrez pourquoi pas sortir vos données d’une base de données, penser à correctement gérer les erreurs et faire preuve de rigueur dans la structure de vos endpoints. Par exemple, dans mon endpoint, l’URI est xxxx/product/. J’aurais pu faire mieux en respectant la convention et en mettant/products/ au pluriel. Car en cas de GET, je peux aussi demander à récupérer l’ensemble des produits existants. Dans ce cas, je dois modifier ma fonction GET comme ceci :

    def get(self, id):
        if (id == 0):
            return products, 200
        else:
            for product in products:
                if (id == product["id"]):
                    return product, 200
            return "Product not found", 404

Ainsi, en passant l’id 0 lors de mon GET, je récupérerai alors tous les produits.

N’oubliez pas également de documenter l’ensemble de votre API afin de vous y retrouver et surtout d’indiquer à d’autres développeurs, comment l’intégrer. Penchez vous également sur l’aspect HATEOAS pour intégrer les actions disponibles dans les réponses de l’API REST. Pour notre exemple, on pourrait ainsi avoir quelque chose qui ressemble à ça :

"links": [ 
    {"rel": "product", "method":"post", "href":"http://example.org/product/1"},
    {"rel": "product", "method":"put", "href":"http://example.org/product/1"}, ... 
]

Voilà, j’espère que cette petite initiation et explications aux API RESTful vous aura intéressé et donné envie de vous y mettre plus sérieusement. Peut-être changer un peu votre façon de coder, voire carrément changer de job pour trouver une équipe plus agile et plus au fait des pratiques de dev modernes. Et pourquoi pas en profiter pour continuer à évoluer dans les technologies, ou obtenir un meilleur salaire. C’est une démarche qui peut s’avérer assez compliquée, stressante parfois, tant on a envie de trouver un travail qui nous corresponde. On peut souhaiter avoir un travail plus proche de chez soi voire en télétravail complet, un meilleur salaire, une meilleure ambiance au travail, ou même tout ça à la fois (mais ce n’est pas forcément facile à trouver).

Heureusement, talent.io est là pour vous aider. Il vous suffit de créer un compte sur la plateforme talent.io en quelques clics pour ensuite recevoir des offres de la part d’entreprises qui correspondent à vos critères précis et qui affichent un salaire d’entrée de jeu. talent.io est vraiment le moyen le plus simple de trouver son prochain job tech, d’ailleurs les inscrits trouvent leur emploi en 20 jours en moyenne.

Le testeur de manettes en ligne

Par : Korben

Si vous disposez d’une manette qui vous semble un peu capricieuse et que vous voulez la tester, il existe un outil en ligne nommé Gamepad Tester qui vaut le détour.

Ce site utilise les API Gamepad HTML5 afin d’évaluer l’état de vos boutons, vos sticks et de tout ce qui se trouve sur votre manette. Par exemple si votre manette est défectueuse, vous le saurez tout de suite avec cet outil.

En appuyant sur chacune des touches, vous verrez son équivalent à l’écran s’afficher et vous pourrez également réaliser une mesure de circularité de vos sticks pour savoir s’ils sont correctement calibrés / en place.

Et si vous êtes développeur ou concepteur de manette DIY alternative, vous pourrez comme ça mieux vous rendre compte de votre avancée.

Le Gamepad-Tester est ici.

Comment faire un avion en papier ?

Par : Korben

Quand j’étais petit, j’aimais bien faire des avions en papier. Mais j’étais assez nul en design aéronautique et le fuselage de mes avions pénétrait dans l’air aussi bien qu’une feuille froissée en boule.

Bref, depuis j’ai arrêté de faire des avions en papier. Snif.

Mais si vous faites partie des gens qui n’ont pas lâché l’affaire sur les avions en papier, il faut absolument que vous alliez faire un tour sur Fold ‘n’ Fly, un site web qui regroupe une cinquantaine de tutos pour plier correctement des avions en papier.

Ils sont bien sûr classés par difficulté comme le classique :

Ou encore par distance de vol ou comportement acrobatique.

Et chaque tuto ou presque est accompagné d’une vidéo qui vous montre le pliage en live. Bref de quoi s’amuser, seul, avec les enfants ou au bureau.

Gridzzly – Pour générer votre propre papier à motif

Par : Korben

En ce moment, comme tous les ans, c’est le grand délire des fournitures scolaires. On pourrait penser que les profs étaient des gens raisonnables et se contenteraient d’un petit cahier, d’un grand classeur, d’un grand cahier ou de stylo bic ou plume, classiques. Des choses simples à trouver.

Mais non, quand on regarde une liste de fourniture scolaire en 2022, il faut des cahiers de 12,3 mm d’épaisseur, de 17,4 cm de large sur 22,025 cm de haut, avec une couverture beige pyrite à motifs, et des grands carreaux Seyès édition 1975 en 2 couleurs avec marge à gauche et à droite dont une page dessin toutes les 5 pages, d’un poids n’excédant pas 128,2 grammes. Et si c’est des classeurs, vous pouvez également rajouter les anneaux de 15,3 mm de diamètre en laiton parce que l’enseignant est allergique aux autres métaux.

Bref, c’est compliquaaaayyyy !

Heureusement, en cas d’erreur, vous pourrez enfumer l’instituteur exigeant en générant votre propre papier sur mesure grâce au site Gridzzly. Ce site vous permet de choisir le type de lignes, de carreaux, de points, isométriques…etc. ainsi que l’espacement des lignes et le niveau de gris plus ou moins intense. On peut même faire du papier à musique.

Ensuite, y’a plus qu’à l’imprimer. Et avec ça, votre prof n’aura plus besoin d’attendre les vacances scolaires pour être heureux.

Lisez 1,5 fois plus rapidement grâce à cette extension Chrome / Firefox

Par : Korben

La lecture rapide, ce n’est pas forcément quelque chose de compliquer à pratiquer. Il faut en réalité beaucoup s’entrainer, mais avec un peu de persévérance, on y arrive.

Toutefois, même sans forcer, il existe une méthode plutôt simple permettant de « hacker » notre cerveau pour lire jusqu’à 1,5 fois plus rapidement.

Alors comment ça fonctionne ?

Cette méthode nommée « lecture bionique » (lol) facilite le processus de lecture en guidant les yeux dans le texte grâce à des points de fixation artificiels.

Ainsi, le lecteur se concentre uniquement sur les premières lettres mises en évidence et laisse son cerveau compléter le mot. Cette méthode permet ainsi de lire plus vite et de manière plus soutenue tous les contenus que vous pouvez trouver en ligne.

Voici un texte normal :

Et ce même texte passé à la moulinette bionique 🙂

Alors, comment faire pour intégrer la lecture bionique dans votre quotidien ? Et bien tout simplement grâce à l’extension Jiffy Reader dispo sous Firefox, Opera, Edge et Chrome (et Android via le navigateur kiwi).

Cette extension une fois installée va tout simplement traiter le texte des sites de votre choix pour vous permettre de lire comme Superman / Superwoman.

Un panneau de configuration vous permettra également de régler le nombre de lettres à fixer (en gras) et le taux d’opacité du reste du texte.

Franchement, c’est super cool. Ça fait quelques jours que je me le traine sur l’ordinateur et même si je ne me suis pas chronométré, je trouve que ma lecture est plus fluide. Bref, je vous recommande de tester la chose.

Plus d’infos ici

Comment créer des objets en papier ? #papercraft

Par : Korben

On peut en faire des choses avec du papier. Et pas uniquement écrire dessus ou s’essuyer les fesses… non, non, on peut aussi créer soi-même des objets simplement avec un peu de pliage et de découpage. On appelle d’ailleurs cela du papercraft.

Seulement, voilà, nous ne sommes pas tous doués en conception. Heureusement, grâce au site Template Maker, vous allez pouvoir générer et télécharger des modèles d’objets à imprimer et à découper.

Cela vous permettra de créer des sacs en papier, des présentoirs, des cadres photos, des boites dans toutes leurs formes, des enveloppes voire même des mini cercueils ou des étoiles pour le sapin de Noël. Je ne vous garantis pas que tout sera facile à plier, mais c’est le genre d’activité cool pour les vacances ou les dimanches pluvieux.

Bref, un super site pour ceux qui aiment l’idée de l’impression 3D ou de ma menuiserie, mais qui n’ont pas de matériel sous la main.

Si ça vous intéresse, cliquez ici !

Merci à Laurent pour le partage

❌