Catégories
Programmation

WebSocket Serial Gateway

WebSocket Serial Gateway est un outil développé en Python permettant d’accéder à un port série au travers du protocole WebSocket.

Il répond initialement au besoin de pouvoir facilement communiquer avec un appareil via un port série depuis un navigateur. Certes, Chrome permet déjà de le faire après avoir franchi les avertissements de sécurité. Cette solution permet de d’utiliser n’importe quel navigateur et il n’y a aucune limite de sécurité à franchir. A chacun d’analyser les risques encourus et décider si l’utilisation est appropriée.

De plus, le navigateur et le gateway peuvent  être sur des appareils différents, connectés en réseau. Toute application capable de communiquer avec le protocole WebSocket est utilisable (Unity, Processing, P5.js, etc.)

Code source et instructions disponibles sur:
https://github.com/prossel/WebSocket-Serial-Gateway

Catégories
Programmation

Connect Meta Quest to Eduroam

Eduroam is a Wi-Fi network available around the world to university staff and students. Being able to use it with Meta Quest headsets is very convenient.

Catégories
Programmation Terminal

Web page in kiosk mode

Bash script to run a simple HTTP server with Python and open Chrome in kiosk mode, with some flags to allow access to serial port or automatic download. Written and tested on macOS.

Catégories
Git Programmation Unity

Smartly git ignore assets from the store

# Add to .gitignore

!Assets/Oculus/
Assets/Oculus/*

# ... read more for full config

In a Unity project, we often use assets from the Asset Store or other sources which sometimes happen to be quite big. For example Oculus Integration uses almost 700 MB. There is no point adding this whole folder to git when you can download it from other source. This is especially important when your git repository has size limits, like with GitHub, Gitlab, Bitbucket, etc.

This post shows a way to ignore such a folder, but still track important files such as configuration or a readme file to track the current version and location to install/update.

Catégories
Programmation Unity

Lancer une app Unity sur Oculus Quest

Une application créée avec Unity par exemple, n’apparait pas directement parmi les autres applications sur un casque VR Oculus.

Cette vidéo montre où la trouver et comment la lancer sans devoir la recompiler à chaque fois.

En option, elle montre aussi l’étape d’activation du suivi des mains, ce qui est demandé si l’application le nécessite, comme dans cet exemple.

Catégories
Programmation

Enregistrer une vidéo 16:9 sur Oculus Quest

Vidéo 1920 x 1080 enregistrée directement sur Oculus Quest 2

Par défaut, les vidéos enregistrées sur un casque de réalité virtuelle Oculus Quest ou Oculus Go sont au format carré de 1024 x 1024 pixels.

Voici comment enregistrer des vidéos au format et à la taille que vous voulez, par exemple 1920 x 1080.

Catégories
p5.js Processing Programmation

Understand and play with translate() and rotate()

p5.js and Processing both have a translate() and rotate() function that basically allows to change default position and orientation of axis.

The p5.js sketch available below allows to play with their parameters and immediately see the result as in this demonstration video.

Catégories
Processing Programmation

Resize event in Processing sketch

Here is how to make the Processing window resizable AND get an event when the window is resized.

Tested with Processing 3.

// For resize event
import java.awt.Canvas;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentAdapter;


void setup() {
  surface.setResizable(true);

  ((Canvas)surface.getNative()).addComponentListener(new ComponentAdapter() {
    @Override public void componentResized(ComponentEvent e) {
      println("resized " + width + " " + height);
    }
  }
  );
}

Catégories
Arduino Programmation

State machine Arduino demo

The LED is either blinking or glowing, but not at the same time. This simple example is a use case for a state machine.

The video shows the led alternating between blinking and glowing using a StateMachine objet and two State inherited objects.

When it comes to program complex interactions with Adrduino, we may benefit from using state machines. This allows to separate the code needed to manage different states of the applications and easily switch from one stat to another.

Catégories
PHP Programmation

Aller chercher des données dans un tableau multidimensionnel en PHP

Lorsqu’il s’agit d’aller chercher des données dans un tableau à plusieurs dimensions (un tableau dans un tableau, dans un tableau, etc.), il est facile d’utiliser la syntaxe: $data['key1']['key2']['key3']

Cependant si on tente d’accéder une clé qui n’existe pas, PHP génère une notice. Cet article apporte une solution élégante.

Exemple:

$data = [
  'a' => ['aa' => 'aa_val', 'ab' => 'ab_val'], 
  'b' => ['ba' => 'ba_val', 'bb' => 'bb_val']
];
echo $data['b']['ba'];
// ba_val 

echo $data['b']['MISSING_KEY'];
// PHP Notice:  Undefined index: MISSING_KEY in test.php on line 8