Programmation

Dynastie 0.3

Wednesday, 01 July 2015
|
Écrit par
Grégory Soutadé

Logo Dynastie

Sortie de la version 0.3 de Dynastie. Pour rappel, il s'agit de mon générateur de blog. En test depuis quelques mois, c'est maintenant officiel. Les différences ?

  • Support des brouillons
  • Ajout du marqueur "dyn:firstpageonly" : le sous-arbre n'apparaît que sur la première page
  • Ajout du marqueur "dyn:ljdc_last" : dernière image "les joies du code"
  • Quelques corrections de bug

Suite à l'introduction de la syntaxe Markdown, je n'utilise plus que cette dernière. Si un jour j'ai du temps, il faudra que je teste avec Django 1.8 et que je passe le code en Python 3.

KissCount 0.5

Tuesday, 23 June 2015
|
Écrit par
Grégory Soutadé

Fenêtre principale de KissCount

Après une année blanche, voici la sortie de la version 0.5 de KissCount. Déjà 6 ans ! Le code est devenu assez mâture. Tellement qu'il faudrait VRAIMENT passer en Qt 5... Mais cette version n'est pas dénuée de nouveauté : Les tags (étiquettes) viennent rejoindre l'ensemble des fonctionnalités présentes. Il y a aussi quelques corrections de bugs.

Petit point faible côté empaquetage : seule la version GNU/Linux 64 bits est disponible. Il y a une version cross-compilée pour Windows qui malheureusement plante au démarrage (impossible de savoir pourquoi).

À priori, la version suivante ne sortira pas avant longtemps vu le peu de temps disponible que j'ai et de la maintenance/développement sur mes autres projets...

gPass 0.6

Tuesday, 10 February 2015
|
Écrit par
Grégory Soutadé

Logo gPass

Petit rappel : gPass est un gestionnaire de mot de passes en ligne. C'est une alternative libre à lastpass. Il permet d'héberger un serveur de mot de passe, qui stockera un mot de passe fort et unique pour chaque site web. Les mots de passes sont chiffrés par une "clé maître" que seul l'utilisateur connaît et sont remplacés à la volée dans le formulaire d'authentification.

Voici la version 0.6 de gPass. Outre les quelques modifications esthétiques de l'addon (ajout des icônes), l'apport majeur de cette version est la compatibilité avec le navigateur Chrome ! Ça a demandé un peu de travail, mais finalement ce n'était pas si compliqué.

Attention, Chrome est très pointilleux sur la sécurité, et le mélange des contenus normaux (http) et sécurisés (https) est mal vu. Il se peut donc que la démo ne fonctionne pas, car le certificat utilisé est auto signé. Donc, à moins de le rajouter explicitement, il risque d'y avoir des soucis.

Autre fonctionnalité "cachée" : les shadow logins (ou identifiants fantômes en français). C'est un mécanisme qui empêche un utilisateur mal intentionné de télécharger la base de données ou de la supprimer si celle-ci n'est pas protégée par une identification. En effet, au lieu de retourner directement les couples nom d'utilisateur/mot de passe (chiffrés bien sûr), le serveur retourne une "image". Il s'agit d'une suite aléatoire qui devra être chiffrée avec la clé maître pour obtenir un jeton d'accès, qui lui permettra de récupérer le couple sus-cité et de le supprimer si nécessaire.

Mais, comme cela requiert beaucoup de temps de processeur, c'est désactivé par défaut.

Les addons sont disponibles ici (firefox) et (Chrome). La partie serveur est à télécharger sur la page du projet.

IWLA : Intelligent Web Log Analyzer

Tuesday, 23 December 2014
|
Écrit par
Grégory Soutadé

Capture d'écran IWLA

C'est mon cadeau de noël à moi : IWLA. Il s'agit, basiquement, d'un clone d'AWSTATS. Pour ceux qui ne connaissent pas, awstats est un analyseur de log (journal des entrées) d'un serveur web (ce dernier faisant aussi l'analyse des logs ftp, ssh, mail...).

C'est un projet qui me tenait à cœur depuis longtemps et, mine de rien, il y a pas mal de boulot juste pour faire des additions !

IWLA a été pensé pour être le plus modulaire possible. Contrairement à awstats qui est complètement monolithique (tout le code dans gros un fichier PERL), l'extraction des statistiques et l'affichage de celles-ci passe par des plugins (hormis les opérations de base). On peut donc ajouter/retirer/modifier à loisir des modules et obtenir exactement ce que l'on veut (et ce de manière très simple). Chaque module va s'occuper de sa partie, voire modifier le résultat des modules précédents !

L'autre avantage (ou inconvénient), est qu'IWLA génère uniquement des pages statiques (en plus de pouvoir les compresser), ce qui accélère la visualisation. Côté design, il reprend le thème d'awstats (ça aurait été beaucoup plus moche si je l'avais fait moi-même) : un design simple qui va à l'essentiel !

Mais ce n'est pas tout, les données (robots, moteurs de recherche), sont directement extraites d'awstats !

Pour finir de troller, IWLA est écrit en Python, ce qui est bien plus moderne :)

Le tout est disponible sous licence GPL sur ma forge. Amusez-vous bien !

Read ARM physical address

Wednesday, 29 October 2014
|
Écrit par
Grégory Soutadé

Direct access to physical address is a bad idea, but sometimes, for debug we need it. The trick used below is to disable MMU for only one instruction that do the read with fully configured environment and then re enabling MMU. Read and enable instructions should be in the pipe. The code works for arm11 but should also works for arm9 and maybe CortexA 32 bits series. Primitives has been found in FreeBSD 10 source code (sys/arm/arm/).

read_arm_phys_addr() must be called in supervisor mode (kernel mode).

#include <stdint.h> /* CPU control register (CP15 register 1) */ #define CPU_CONTROL_MMU_ENABLE 0x00000001 /* M: MMU/Protection unit enable */ #define CPU_CONTROL_DC_ENABLE 0x00000004 /* C: IDC/DC enable */ #define CPU_CONTROL_WBUF_ENABLE 0x00000008 /* W: Write buffer enable */ #define CPU_CONTROL_BPRD_ENABLE 0x00000800 /* Z: Branch prediction enable */ #define CPU_CONTROL_IC_ENABLE 0x00001000 /* I: IC enable */ uint32_t read_arm_phys_addr(void* addr) { uint32_t value; __asm __volatile ( // Load address "mov r0, %1\n\r" // Disable IRQ, FIQ and abort "cpsid ifa\n\r" // Disable MMU and cache "mrc p15, 0, r1, c1, c0, 0\n\r" "bic r2, r1, %2\n\r" "bic r2, r2, %3\n\r" "bic r2, r2, %4\n\r" "mcr p15, 0, r2, c1, c0, 0\n\r" "nop\n\r" "nop\n\r" "nop\n\r" // Read data "ldr r3, [r0]\n\r" // Enable MMU "mcr p15, 0, r1, c1, c0, 0\n\r" "nop\n\r" "nop\n\r" "nop\n\r" // Enable IRQ, FIQ and abort "cpsie ifa\n\r" "mov %0, r3\n\r" : "=r" (value) : "r" (addr), "i" (CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_DC_ENABLE | CPU_CONTROL_WBUF_ENABLE), "i" (CPU_CONTROL_IC_ENABLE), "i" (CPU_CONTROL_BPRD_ENABLE) : "r0", "r1", "r2", "r3"); return value; }