PROJET IONIC 3 : description rapide des éléments

Le dossier d’une application ionic 3 se décompose ainsi :

Dossier hooks/

Pour ajouter des scripts de compilation en utilisant Cordova

Niveau avancé de développement. Il est très probable que tu n’ais jamais à utiliser ça.

Dossier node_modules/

Toutes les dépendances du projet

Dès qu’on utilise la commande « npm install », ça installe dans ce dossier

Dossier platforms/

Contient les plateformes de compilation possible.

Quand on installe une plateforme avec la commande « ionic platform add android », ça installe la plateforme dans ce dossier.

Dossier plugins/

Contient les différents plugins qu’on peut installer dans l’application.

La commande d’installation est :

ionic plugin add _____

Dossier resources/

Contient les icones et le spashscreen de l’application

Dossier src

Tous les codes sources de l’application

app/

Tous les modules principaux

pages/

Toutes les pages, par exemple home

themes/

Le CSS

assets/

Les icones

Dossier www/

Contient l’application compilée.

Notamment main.js qui sera exécuté en premier.

PHP : méthode récursive pour parcourir et afficher un dossier et son contenu

Cette méthode permet de :

  • Parcourir un dossier sur un serveur web PHP,
  • Afficher son contenu hiérarchisé, par dossiers
  • Afficher les fichiers et le lien pour les télécharger
  • Afficher tout ça dans l’ordre alphabétique

Voici la méthode PHP :

// obtenir l'URL locale (méthode perso)
$localURL = Tools::get_urlLocal();

//=========================================
// Parcourt un dossier et affiche sous forme hiérarchisée
// les dossiers deviennent des titre
// les fichiers deviennent des liens pour télécharger le fichier
//=========================================
function parcourtDossier($chemin, $level) {
	global $localURL;

	if (is_dir($chemin)) {
		// c'est un dossier

		// ouvre le dossier 
		if ($handle = opendir($chemin)) {

			// liste de tout ce qu'on va trouver
			$dirFiles = array();

			// récupère la liste des fichiers/dossiers
			while (false !== ($entry = readdir($handle))) {
				$dirFiles[] = $entry;
			}

			// trie dans l'ordre alpha
			sort($dirFiles, SORT_NATURAL | SORT_FLAG_CASE);

			// affiche la liste triée
			foreach($dirFiles as $entry) {

				if ($entry != "." && $entry != "..") {

					if (is_dir($chemin.'/'.$entry)) {
						
						// affiche le nom du dossier
						if ($level == 0) {
							$b1 = '<div style="width:100%; background-color:#ddd; padding:1px; margin-top:20px;"><h2 style="padding-left:20px; ">';
							$b2 = '</h2></div>';
						}
						if ($level == 1) {
							$b1 = '<div style="width:100%; background-color:#eee; padding:1px; margin-top:15px;"><h4 style="padding-left:20px;">';
							$b2 = '</h3></div>';
						}
						if ($level >= 2) {
							$b1 = '<div style="width:100%; background-color:#f4f4f4; margin-top:10px;"><b style="padding-left:20px;">';
							$b2 = '</b></div>';
						}
						// rajouter des niveaux si besoin

						echo $b1;
						echo '<b>'.$entry.'</b>';
						echo $b2;

						// affiche le contenu du dossier
						echo '<div style="margin-left:60px; margin-top:4px;">';
						parcourtDossier($chemin.'/'.$entry, $level + 1);
						echo '</div>';
					}
					else {
						// $chemin est un un fichier
						// affiche un lien pour le télécharge
						echo '• <a href="'.$localURL.'kp-content/download/'.$chemin.'/'.$entry.'" download>'.$entry.'</a><br/>';
					}

				}
			}
			closedir($handle);
		}

	} else {
		// $chemin est un fichier
		// utilisé seulement dans le cas où on le paramètre est un nom de fichier
		if ($chemin != "." && $chemin != "..") {
			echo '<a href="'.$localURL.'kp-content/download/'.$chemin.'" download>'.$chemin.'</a><br/>';
		}
	}
}

parcourtDossier("chemin/du/dossier", 0);
PHP : Méthode pour parser un dossier et l'afficher

Ecrire dans un textBox depuis un autre thread / appel Thread-safe dans un Windows Form

Lorsqu’on appelle une méthode qui écrit dans un textBox (par exemple) sur une Form, et qu’on l’appelle depuis un autre thread, une autre classe, une erreur est retournée. Ce n’est pas « thread-safe« .

Pour contrer cela, il faut utiliser invoke. Par exemple si dans la class de ma Form, j’ai une méthode qui écrit dans une textBox :

public void log(string value)
    {
    if (InvokeRequired)
        {
            this.Invoke(new Action<string>(log), new object[] { value });
            return;
        }
        Console.WriteLine("LOG : " + value);
        textBox_log.Text += value + "\r\n";
    }

 

 

C# : Socket ou TcpListener / TcpClient ?

Les 2 classes ont un objectif similaire et utilisent les mêmes méthodes : faire communiquer 2 éléments. Voici la différence entre Socket et TcpListener/TcpClient.

TCPListener est une classe dérivée de Socket, qui se concentre uniquement sur le protocole TCP.

Socket permet d’utiliser des protocoles TCP, mais aussi d’autres comme UDP et permet une configuration plus précise.

La différence n’est pas énorme en terme de lignes de codes. Mais si tu ne connais pas trop encore les Socket et les détails des protocoles, utilise TCPListener et TcpClient, qui sont une version épurée et plus simple de Socket.

Si tu sais ce que tu fais et/ou que tu veux un autre protocole que Tcp, utilise les Socket.

Raspberry PI : sortie HDMI, CEA ou DMT ?

Le Raspberry PI offre une sortie physique HDMI. Et un paramétrage très précis. Par exemple sur Raspbian, ouvrez le fichier /boot/config.txt et vous pouvez forcer la résolution et le mode utilisé avec le paramètre hdmi_group.

En HDMI, il y a 2 modes sur le Raspberry PI : CEA ou DMT.

hdmi_group=1   # CEA
hdmi_group=2   # DMT

HDMI CEA – hdmi_group=1

Le mode CEA signifie « Consumer Electronics Association ». Il a été conçu pour les TV et propose plusieurs modes entrelacés et progressifs.

Le mode CEA est habituellement proposé en PAL (25/50/100Hz) ou NTSC (30/60/120Hz) et des résolutions de 288/480/576/720/1080 lignes.

 

Dans ce mode, voici les résolutions possibles

These values are valid if hdmi_group=1 (CEA)
hdmi_mode=1    VGA
hdmi_mode=2    480p   60 Hz
hdmi_mode=3    480p   60 Hz  H
hdmi_mode=4    720p   60 Hz
hdmi_mode=5    1080i  60 Hz
hdmi_mode=6    480i   60 Hz
hdmi_mode=7    480i   60 Hz  H
hdmi_mode=8    240p   60 Hz
hdmi_mode=9    240p   60 Hz  H
hdmi_mode=10   480i   60 Hz  4x
hdmi_mode=11   480i   60 Hz  4x H
hdmi_mode=12   240p   60 Hz  4x
hdmi_mode=13   240p   60 Hz  4x H
hdmi_mode=14   480p   60 Hz  2x
hdmi_mode=15   480p   60 Hz  2x H
hdmi_mode=16   1080p  60 Hz
hdmi_mode=17   576p   50 Hz
hdmi_mode=18   576p   50 Hz  H
hdmi_mode=19   720p   50 Hz
hdmi_mode=20   1080i  50 Hz
hdmi_mode=21   576i   50 Hz
hdmi_mode=22   576i   50 Hz  H
hdmi_mode=23   288p   50 Hz
hdmi_mode=24   288p   50 Hz  H
hdmi_mode=25   576i   50 Hz  4x
hdmi_mode=26   576i   50 Hz  4x H
hdmi_mode=27   288p   50 Hz  4x
hdmi_mode=28   288p   50 Hz  4x H
hdmi_mode=29   576p   50 Hz  2x
hdmi_mode=30   576p   50 Hz  2x H
hdmi_mode=31   1080p  50 Hz
hdmi_mode=32   1080p  24 Hz
hdmi_mode=33   1080p  25 Hz
hdmi_mode=34   1080p  30 Hz
hdmi_mode=35   480p   60 Hz  4x
hdmi_mode=36   480p   60 Hz  4xH
hdmi_mode=37   576p   50 Hz  4x
hdmi_mode=38   576p   50 Hz  4x H
hdmi_mode=39   1080i  50 Hz  reduced blanking
hdmi_mode=40   1080i 100 Hz
hdmi_mode=41   720p  100 Hz
hdmi_mode=42   576p  100 Hz
hdmi_mode=43   576p  100 Hz  H
hdmi_mode=44   576i  100 Hz  
hdmi_mode=45   576i  100 Hz  H
hdmi_mode=46   1080i 120 Hz  
hdmi_mode=47   720p  120 Hz  
hdmi_mode=48   480p  120 Hz  
hdmi_mode=49   480p  120 Hz  H
hdmi_mode=50   480i  120 Hz  
hdmi_mode=51   480i  120 Hz  H
hdmi_mode=52   576p  200 Hz  
hdmi_mode=53   576p  200 Hz  H
hdmi_mode=54   576i  200 Hz  
hdmi_mode=55   576i  200 Hz  H
hdmi_mode=56   480p  240 Hz  
hdmi_mode=57   480p  240 Hz  H
hdmi_mode=58   480i  240 Hz  
hdmi_mode=59   480i  240 Hz  H

HDMI DMT – hdmi_group=2

Le mode DMT est conçu pour les moniteurs, les écrans de PC. Les modes entrelacés ne sont PAS proposés. Les résolutions proposées sont 640/720/800/1024/1280 lignes et des fréquences comme 60/70/75/80/85/120Hz

Le son n’est pas présent sur le mode DMT.

Dans le mode DMT, voici les résolutions possibles

hdmi_mode=1    640x350    85 Hz
hdmi_mode=2    640x400    85 Hz
hdmi_mode=3    720x400    85 Hz
hdmi_mode=4    640x480    60 Hz
hdmi_mode=5    640x480    72 Hz
hdmi_mode=6    640x480    75 Hz
hdmi_mode=7    640x480    85 Hz
hdmi_mode=8    800x600    56 Hz
hdmi_mode=9    800x600    60 Hz
hdmi_mode=10   800x600    72 Hz
hdmi_mode=11   800x600    75 Hz
hdmi_mode=12   800x600    85 Hz
hdmi_mode=13   800x600   120 Hz
hdmi_mode=14   848x480    60 Hz
hdmi_mode=15   1024x768   43 Hz  DO NOT USE
hdmi_mode=16   1024x768   60 Hz
hdmi_mode=17   1024x768   70 Hz
hdmi_mode=18   1024x768   75 Hz
hdmi_mode=19   1024x768   85 Hz
hdmi_mode=20   1024x768  120 Hz
hdmi_mode=21   1152x864   75 Hz
hdmi_mode=22   1280x768          Reduced blanking
hdmi_mode=23   1280x768   60 Hz
hdmi_mode=24   1280x768   75 Hz
hdmi_mode=25   1280x768   85 Hz
hdmi_mode=26   1280x768  120 Hz  Reduced blanking
hdmi_mode=27   1280x800          Reduced blanking
hdmi_mode=28   1280x800   60 Hz  
hdmi_mode=29   1280x800   75 Hz  
hdmi_mode=30   1280x800   85 Hz  
hdmi_mode=31   1280x800  120 Hz  Reduced blanking
hdmi_mode=32   1280x960   60 Hz  
hdmi_mode=33   1280x960   85 Hz  
hdmi_mode=34   1280x960  120 Hz  Reduced blanking
hdmi_mode=35   1280x1024  60 Hz  
hdmi_mode=36   1280x1024  75 Hz  
hdmi_mode=37   1280x1024  85 Hz  
hdmi_mode=38   1280x1024 120 Hz  Reduced blanking
hdmi_mode=39   1360x768   60 Hz  
hdmi_mode=40   1360x768  120 Hz  Reduced blanking
hdmi_mode=41   1400x1050         Reduced blanking
hdmi_mode=42   1400x1050  60 Hz  
hdmi_mode=43   1400x1050  75 Hz  
hdmi_mode=44   1400x1050  85 Hz  
hdmi_mode=45   1400x1050 120 Hz  Reduced blanking
hdmi_mode=46   1440x900          Reduced blanking
hdmi_mode=47   1440x900   60 Hz  
hdmi_mode=48   1440x900   75 Hz  
hdmi_mode=49   1440x900   85 Hz  
hdmi_mode=50   1440x900  120 Hz  Reduced blanking
hdmi_mode=51   1600x1200  60 Hz  
hdmi_mode=52   1600x1200  65 Hz  
hdmi_mode=53   1600x1200  70 Hz  
hdmi_mode=54   1600x1200  75 Hz  
hdmi_mode=55   1600x1200  85 Hz  
hdmi_mode=56   1600x1200 120 Hz  Reduced blanking
hdmi_mode=57   1680x1050         Reduced blanking
hdmi_mode=58   1680x1050  60 Hz  
hdmi_mode=59   1680x1050  75 Hz  
hdmi_mode=60   1680x1050  85 Hz  
hdmi_mode=61   1680x1050 120 Hz  Reduced blanking
hdmi_mode=62   1792x1344  60 Hz  
hdmi_mode=63   1792x1344  75 Hz  
hdmi_mode=64   1792x1344 120 Hz  Reduced blanking
hdmi_mode=65   1856x1392  60 Hz  
hdmi_mode=66   1856x1392  75 Hz  
hdmi_mode=67   1856x1392 120 Hz  Reduced blanking
hdmi_mode=68   1920x1200         Reduced blanking
hdmi_mode=69   1920x1200  60 Hz  
hdmi_mode=70   1920x1200  75 Hz  
hdmi_mode=71   1920x1200  85 Hz  
hdmi_mode=72   1920x1200 120 Hz  Reduced blanking
hdmi_mode=73   1920x1440  60 Hz  
hdmi_mode=74   1920x1440  75 Hz  
hdmi_mode=75   1920x1440 120 Hz  Reduced blanking
hdmi_mode=76   2560x1600         Reduced blanking
hdmi_mode=77   2560x1600  60 Hz  
hdmi_mode=78   2560x1600  75 Hz  
hdmi_mode=79   2560x1600  85 Hz  
hdmi_mode=80   2560x1600 120 Hz  Reduced blanking
hdmi_mode=81   1366x768   60 Hz  
hdmi_mode=82   1080p      60 Hz  
hdmi_mode=83   1600x900          Reduced blanking
hdmi_mode=84   2048x1152         Reduced blanking
hdmi_mode=85   720p       60 Hz  
hdmi_mode=86   1366x768          Reduced blanking

Sources & plus d’infos

http://elinux.org/RPiconfig

http://raspberrypi.stackexchange.com/questions/7332/what-is-the-difference-between-cea-and-dmt

https://www.raspberrypi.org/documentation/configuration/config-txt.md

Lire une clef USB depuis un Raspberry Pi

Etape 1 – Préparer le terrain

Ouvrir le terminal et saisir :

ls -l /dev/disk/by-uuid/

Etape 2 – Brancher la clef USB

Brancher la clef USB sur un des ports USB du Raspberry Pi.

Etape 3 – Identifier la clef

Dans le terminal, saisir à nouveau :

ls -l /dev/disk/by-uuid/

Une ligne a été ajoutée par rapport à l’étape 1. Elle indique l’identifiant de la clef. Généralement /dev/sda1.

Etape 4 – Créer le point de montage (la première fois seulement)

Dans le terminal :

sudo mkdir /media/usb
sudo chown -R pi:pi /media/usb

Etape 5 – Monter manuellement la clef USB

Dans le terminal :

sudo mount /dev/sda1 /media/usb -o uid=pi,gid=pi

Elle est maintenant présente dans le dossier /média de l’explorateur.