Catégorie : Non classé

Développement de BriXen: épisode 3 – Visual studio code

Après quelques années d’utilisation de Sublime Text, j’utilise maintenant Visual Studio Code qui a toutes les qualités de mon précédent éditeur avec l’avantage d’être gratuit.

Pour développer une application Amstrad CPC en C, j’ai besoin au minimum:

d’un raccourci me permettant de compiler rapidement (via shift+cmd+b idéalement)
d’un raccourci me permettant de tester mon application (shift+cmd+r)
de coloration syntaxique
d’une indentation automatique de mon code

Visual Studio Code étant facilement personnalisable, rien de ceci ne lui est impossible.

Compilation

Notre fichier build.sh étant déjà disponible dans notre template, il suffit de créer un raccourci pour l’exécuter.

Pour cela, nous créons un fichier tasks.json dans le dossier .vscode présent à la racine de notre projet.

Ce fichier (disponible à la fin de l’article) sera constitué de:

Ce fichier json décrit une tâche qui:

tue les instances de Retro Virtual Machine qui seraient encore en train de fonctionner.
exécute notre commande build.sh (L’emplacement de votre projet doit être modifié).
prend le retour de la commande build.sh et en retire les warning et error pour une affichage plus propre

Pour lier la tache à notre raccourci (cmd+shift+b), il faut modifier le fichier keybindings.json (cmd+shift+p pour afficher la Command Palette et entrez ‘open keyboard shortcuts (JSON)’)

Dans ce fichier json, créez l’entrée suivante

{
"key": "shift+cmd+b",
"command": "workbench.action.tasks.runTask",
"args": "SDCC - make"
}

Execution

Pour notre tâche d’exécution, le principe est le même que pour la compilation, le shortcut étant juste:

{
"key": "shift+cmd+r",
"command": "workbench.action.tasks.runTask",
"args": "SDCC - Retro Virtual Machine"
}

3. La coloration syntaxique

Visual Studio Code dispose déjà (évidemment) d’un plugin de coloration syntaxique pour le source code. J’ai pris celui que propose Microsoft, c’est-à-dire C/C++. En plus de la coloration syntaxique, il propose aussi:

l’Intellisense (code completion, information sur les paramètres des fonctions, …),
le debugging (que je n’utilise pas encore)
et la navigation dans le code (pratique pour trouver la définition d’une fonction par exemple)

Pour l’installer, cmd+shift+x, recherche de C/C++ et bouton vert ‘install’. Trop facile.

Pour la facilité, j’ai ajouté le « format on save » à configurer dans les settings via le menu Text Editor/Formatting.

4. L’indentation automatique

Là non plus, nous n’allons pas nous compliquer la vie. Uncrustify a fait ses preuves et il existe un module pour VS Code.

J’utilise celui de Laurent Tréguier que je configure avec mon fichier uncrustify.cfg kivabien.

A suivre pour un prochain épisode

Télécharger

Arduboy

Une console de jeu d’une taille de 85.60 x 53.98 x 5mm (soit une carte de crédit un peu épaisse), ça vous tente ?

J’ai craqué pour cette console en avril 2017 après avoir raté la campagne Kickstarter en 2015.

Les specifications sont largement suffisantes pour faire de petits jeux sympas:

  • écran : OLED monochrome de 1.3 pouce et de résolution 128 x 64
  • processeur : ATmega32u4 de 8MHz
  • mémoire : 32KB Flash, 2.5KB RAM, 1KB EEPROM
  • connectivité : USB 2.0
  • 6 boutons
  • sorties : 128×64 1Bit OLED, 2 Ch. Piezo Speaker et une LED Blinky8
  • batterie : 180 mAh

Lors de sa réception, j’ai vite ressenti les plaisirs de développement que j’avais eu sur l’Amstrad CPC ou encore plus, sur la HP48 ! Celle-ci (la calculatrice de mes années Polytech) avait presque la même résolution (131×64) en monochrome aussi. Sur celle-ci, je jouais principalement à Diamonds de Doug Cannon. Ayant déjà fait une version de Diamonds sur Pocket PC (jamais sortie), le porter sur l’Arduboy était une évidence…

La facilité de programmation sur cette console était tel qu’il ne me fallut pas plus de 2-3 jours pour avoir une version jouable. Cette version est disponible sur GitHub pour ceux que ça intéresse.

J’ai fait un deuxième jeu plus tard: un video poker aussi disponible sur GitHub

Développement de BriXen: épisode 2 – Hello World!

Exercice d’aujourd’hui: créer notre première application Amstrad. Rien de moins.

Tout d’abord, il est nécessaire d’installer Docker.

Le docker contenant le dernier toolchain CPTC (Crazy Piri Toolchain) est disponible sur Docker Hub. Nous l’installerons après.

Actuellement, ce docker contient les outils suivants:

sdcc: compilateur C (et assembleur via sdasz80)
idsk: création d’image disk pour l’Amstrad
hex2bin: conversion de la sortie du compilateur vers un fichier lisible par l’Amstrad
nocart: conversion d’une image disque vers un fichier GX4000 / Amstrad plus
2cdt: création d’une image cassette
Disark: convertisseur de source assembleur (rasm -> sdcc par exemple)
addhead: pour jouer avec les header AMSDOS d’un fichier
bin2c: convertisseur de fichier binaire vers un fichier source .c
lzsa: compression de fichier binaire avec LZSA
rasm: assembleur de Roudoudou (utilisé actuellement pour convertir le player de ArkosTracker)

Je reviendrai plus en détail plus tard sur chacun de ces outils.

Ensuite, nous pouvons télécharger le template à partir duquel sera réalisé notre futur jeu.

git clone git@github.com:Crazy-Piri/cptc-template.git
cd cptc-template
docker run --rm -v $PWD:/src/ -it redbug26/cptc-docker
./build.sh

La commande toolchain.sh lance une session Docker dans notre environnement de développement. Elle fonctionne sous linux et macOS. Il a donc lieu de l’adapter pour une utilisation sous Windows.

La commande build.sh crée le disque cptc-template.dsk dans lequel se trouve votre première application pour l’Amstrad CPC.

Ouvrez le fichier cptc-template.dsk dans votre émulateur préféré et lancez la commande

run"main.bin

Maintenant, comment interfacer tout cela avec Visual Studio Code ?

A suivre pour le prochain épisode…

l'interface de Toby

Toby

Toby n’est pas le nom de mon chien.

Est-ce, comme moi, que vos bookmarks sont un foutoir sans nom ? À force d’installer 36 navigateurs web différents sur 36 machines sur plus de 20 ans sans rien nettoyer, cela ne donne plus rien d’utilisable.

Je voulais donc repartir sur de bonnes bases (de zéro donc) avec une interface plus moderne que ce que nous proposent les navigateurs web de base.

Mon choix s’est porté sur Toby.

Toby se présente sous la forme d’un plugin dans Chrome ou Firefox (ou via un site web en bêta) et s’affiche lors de l’ouverture d’un nouvel onglet.

Votre page est alors divisée en 3 parties (dont 2 repliables):

La partie de gauche avec vos espaces et le paramétrage
La partie de droite avec les onglets actuellement ouverts
La partie centrale avec vos collections.

Chaque espace contient des collections, chaque collection contient vos bookmarks.

Tout de fait via drag’n drop avec la partie de droite. Dur de faire plus intuitif.

Je vous laisse découvrir le reste (recherche des sites doublons, ouverture d’une collection complète, sauvegarde de la session courante dans une collection …), je suis certain que, comme moi, vous apprécierez.

Ah oui: tout ça est gratuit. Une version pro existe, mais est plus destinée aux équipes.

(c) Pexels – Anton Kudryashov

Droit des vos fichiers Apache

Vous modifiez des fichiers de votre serveur web directement à partir de votre navigateur ?

Il se peut que donc que vous ne puissiez plus y accéder en ligne de commande.

Tout d’abord, vérifiez que vous êtes bien dans le groupe www-data

sudo usermod -a -G www-data votre_user

Ensuite, ajouter la commande umask 002 dans le fichier /etc/apache2/envvars

Et redémarrer complètement le service apache via service apache2 restart

Merci qui ?

Développement de BriXen: épisode 1 – Ma chaine de compilation Amstrad CPC

Introduction

Je n’avais jamais développé sur Amstrad CPC (mis à part en Basic il y a… plus de 30 ans). Lorsque Pascal Visa a lancé la CPC Gamedev Contest 2020 dans le groupe Facebook Amstrad CPC pour toujours and beyond !, je me suis dit que c’était l’occasion d’enfin m’y mettre. Le développement de mon émulateur CrocoDS m’a beaucoup appris sur les possibilités de mon ordinateur préféré.

Il restait donc à savoir comment programmer sur un Amstrad en 2020. Pas question évidemment de développer directement sur l’Amstrad mais plutôt de s’aider des outils modernes.

Comme beaucoup de développeurs actuellement, je suis passé sous Visual Studio Code, l’éditeur de code multi plateforme et extensible développé par Microsoft.

Lorsque j’ai commencé à développer pour l’Amstrad CPC, il était donc évident que je puisse utiliser cet éditeur.

Mon langage de prédilection étant depuis toujours le C pour sa simplicité et du fait qu’il soit un langage de très bas niveau. Je comptais donc développer en ce langage (avec évidemment l’ajout de code assembleur pour les routines ayant besoin de plus d’optimisation).

Comment donc mélanger tout cela ?

Les outils

J’ai essayé divers environnements de développement tels que CPCtelera, cpc-dev-tool-chain mais aucun ne m’a satisfait à 100%.

Ils m’auront au moins permis de me donner des idées sur plusieurs de mes futurs outils. Ces outils auront leurs prochains articles détaillés à l’avenir.

SDCC comme compilateur C (et asm dans un premier temps). J’avais commencé avec Z88DK mais le code généré par ce compilateur était beaucoup moins optimisé que celui de SDCC.
cpcrslib comme librairie de fonctions assembleur.
Arkos Tracker 2 pour la musique
Visual studio code (déjà évoqué auparavant)
Docker (je ne voulais pas devoir réinstaller un environnement de développement chaque fois que je change de machine)
Retro Virtual Machine comme émulateur multi-plateforme. J’ai mon propre émulateur (que j’utilise aussi au niveau développement pour certaines de ces fonctionnalités) mais RVM va beaucoup plus loin au niveau debug.
Divers outils tels que convimgcpc, RGAS, iDSK…

Tout cela m’a permis de faire un template qui sera disponible sur GitHub dans les jours qui viennent qui me permet:

Via la commande SHIFT-CMD-B de faire un build de mes sources,
Via la commande SHIFT-CMD-R d’exécuter l’application directement dans Retro Virtual Machine.

À suivre pour l’épisode 2 très bientôt…

(c) Pexels – Andrea Piacquadio

Fun with UNDOK

UNDOK ? Cékoidon ?

D’après le site de Frontier Smart Technologies, l’application UNDOK ™ de Frontier fournit le contrôleur le plus complet, le plus polyvalent et le plus facile à utiliser pour les systèmes audio connectés de nouvelle génération.

Ça vous aide ? Non ? En fait, il s’agit du logiciel présent sur beaucoup de radios Internet (Roberts, Sangean, Pure, Revo, Hama, Medion…)

Je possède le Robert Revival iStream 3 et voudrais l’interfacer avec ma domotique. C’est évidemment possible et nous allons le voir tout de suite.

Tout d’abord, il est nécessaire de trouver l’IP de la radio. Cela se fait via la recherche SSDP (Simple Service Discovery Protocol) suivante:

gssdp-discover -t urn:schemas-frontier-silicon-com:undok:fsapi:1

L’IP de la radio nous permet déjà d’avoir quelques infos via l’adresse http://<ip>/device

<netRemote>
<friendlyName>Roberts Salon</friendlyName>
<version>ir-mmi-FS2026-0500-0641_V2.14.35c.EX86167-1A39</version>
<webfsapi>http://192.168.1.209:80/fsapi</webfsapi>
</netRemote>

L’affichage de la ressource UPNP contient aussi des informations intéressantes: http://<ip>:8080/dd.xml

Maintenant que nous avons l’adresse IP, nous pouvons installer la librairie fsapi via composer, le gestionnaire de paquet PHP. Dans un nouveau répertoire, tapons la commande suivante (petit patapon):

composer require flammy/fsapi

Il n’y a plus qu’à créer le script: un fichier index.php contenant le code suivant (avec l’ip de la radio)

<?php
require_once("vendor/autoload.php");
require_once("vendor/flammy/fsapi/src/Radio.php");
$host = "192.168.1.209";
$pin = "1234";
$Radio = new Radio($host,$pin);
$Radio->getSet("netRemote.sys.power","1");   // 1: on, 0 :off

On exécute le script via php index.php et la radio s’allume…

Après, si vous voulez vous passer de l’API (ou de php), cette commande suffit:

curl -vs "http://192.168.1.209/fsapi/SET/netRemote.sys.power?value=1&pin=1234"

Le faire via php vous permet d’avoir accès à des fonctions plus parlantes tel que $Radio->volume('up'); ou $Radio->radioFrequency(106.4);.

Total commander (et un potentiel successeur)

J’ai abandonné depuis longtemps Windows, mais s’il y a bien une application qui me manque sur les autres OS, c’est Total Commander.

Total Commander est un gestionnaire de fichier (orthodoxe) tel que Norton Commander ou mon bon vieux Ketchup Killers Commander.

Sa première version date du 25 septembre 1993 (28 ans déjà) et se nommait Windows Commander.

J’ai essayé 36 clones sur macOS (et aussi sur Linux), mais aucun ne me donne les mêmes sentations.

De retour sur Linux depuis quelques mois, j’ai donc ressayé wine qui permet de faire tourner des applications Windows sur les systèmes d’exploitation conforme à POSIX tel que Linux, macOS ou BSD. Je ne l’avais plus essayé depuis très longtemps et il faut avouer qu’il tourne maintenant très bien.

L’idée de redonner une chance à wine vient du fait que Valve l’utilise aussi pour sa console Steam Deck. Une preuve que wine est enfin devenu un produit mature.

Lors de la rédaction de cet article, je suis tombé sur Double Commander qui se veut un clone open-source de Total Commander. Je l’avais testé sur macOS il y a quelques années, mais n’avait pas été convaincu. Par contre, sous Linux, la sensation d’utiliser Total Commander est bien présente. Préférant utiliser des applications natives, je vais lui donner sa chance.

Avec un peu de customisation, j’arrive à avoir quelque chose qui ressemble vraiment à Total Commander. Il se permet même d’avoir plus d’options et être programmable en lua.

Est-ce qu’il sonnerait la mort de Total Commander (du moins sous Linux) ?

Hacking Novell

Vu qu’il y a prescription, je peux maintenant en parler.

Il y a 25 ans, j’ai fait des études pour devenir ingénieur civil. Les débuts d’Internet et les salles informatiques du campus ont vite eu raison de mon ambition…

J’y ai découvert les plaisirs des réseaux et de la programmation C. Les ordinateurs, sans disque dur, étaient connectés via un réseau IPX en 10BASE2 (ceux qui ont pratiqué se rappelleront des joies de ce type de réseau et son terminateur). Pour accéder à Internet, il fallait la disquette magique (une disquette de boot) avec laquelle on pouvait aussi s’amuser… mais ceci est une autre histoire, qui sera contée une autre fois.

Pour en revenir au réseau IPX, les répertoires partagés étaient gérés par un serveur Novell NetWare (d’après mes années d’études et le fichier net5.com que j’exécutais, cela devait être du 3.1). J’avais, à l’époque, réalisé un gestionnaire de fichiers (SH Tools Deluxe R1.00 en hommage à PC Tools Deluxe). Celui-ci deviendra Ketchup Killers Commander des années plus tard.

L’utilisant pour tous mes accès disques, quelle ne fut pas ma surprise quand je vis que je pouvais accéder à tous les fichiers qui m’étaient interdits via le command.com du DOS.

SH Tools Deluxe R1.00

La raison ?

J’utilisais l’interruption 21h pour accéder aux fichiers, mais au lieu de faire ce qui était recommandé:

cd repetoire # int 21h fonction 3Bh ?
open fichier # int 21h fonction 0fh ?

Je faisais directement:

open repertoirefichier # int 21h fonction 0fh ?

La couche d’émulation DOS au-dessus de Novell Netware ne vérifiait pas les accès absolu !

Je n’ai jamais su si c’était une faille dans Netware ou juste une mauvaise configuration de la part des administrateurs réseau de l’école, mais posséder cette connaissance me remplissait de bonheur (il m’en fallait peu à l’époque). Wargames étant déjà un de mes films cultes, je me sentais un peu comme le David Lightman belge.

Après, vu le peu d’utilisation des serveurs de fichiers (la Polytech de Mons n’avait pas encore fini sa migration VAX/VMS vers Novell), les conséquences de cette faille n’étaient finalement pas bien graves.

GPD Pocket 2

Est-ce que cette image vous dit quelque chose ?

Non ? Il s’agit d’une capture d’écran de Terminator 2 dans lequel John Connor (Edward Furlong) pirate un distributeur de billets à l’aide d’un Atari Portfolio. Cette scène a fait rêver beaucoup de jeunes de l’époque (dont moi) et avoir un ordinateur toujours sur soi parraissait irééel. L’Atari Portfolio était un compatible PC sous une variante de MS-Dos et beneficait ainsi d’une belle logithèque (une grande partie des logiciels qui tournait en mode console en DOS).

J’ai possédé plus tard quelques ultraportables tel que Jornada 720 (sous Windows CE) ou le Asus EEE 900.

D’autres m’ont fait aussi fait envie tel que le Sharp Zaurus ou les Psion Series 3 et 5 mais ils étaient soit introuvable, soit trop chers…

Lorsque l’ASUS EEE pc est sorti (vers 2007), le marché des mini machines a explosé et chaque marque proposait sa version du pc que l’on pouvait emmener partout… Mais cela restait toujours trop grand à mon goût.

Après cela, le marché s’est tari et la possibilité d’avoir un telle machine disparaissait avec lui.. Mon espoir aussi.

2015… GPD annonce le GPD Win et l’espoir revient.

GPD Win

Je patiente quelques années (tout en restant attentif à ce qu’ils sortent) et craque en 2020 pour le GPD Pocket 2.

Mon GPD Pocket 2 a des spécifications de rêve pour un petit PC sous Linux:

Processeur: Intel Celeron CPU 3965Y @ 1.50GHz (avec un TDP de 4.5W)
Ecran de 7 pouces avec une résolution de 1920×1200
8 Go de RAM
128 Go de stockage eMMC et un slot MicroSD
2 USB-A et 1 USB-C
Wifi & Bluetooth 4
Et des dimensions de 181x113x14mm pour un poids de 465g

GPD Pocket 2

Il m’accompagne maintenant presque partout et nous servira souvent dans nos futurs pérégrinations à travers le monde Linux.