Programmation
Saturday, 06 May 2017
|
Écrit par
Grégory Soutadé

Capture Hex Offsets

Voici un petit outils qui me manquait depuis fort longtemps (du moins quand j'en ai besoin). En apparence, rien d'extraordinaire : une simple calculatrice hexadécimale avec uniquement les opérations "plus" et "moins"... Pourtant elle est extrêmement pratique quand on travaille sur deux bases d'adresses différentes (avec un décalage d'offset).

Quelques options ont été rajoutées comme le fait de pouvoir facilement remettre une ligne à zéro, valider ou non l'entrée, copier-coller le résultat dans le presse-papier, tout effacer, régler le nombre d'entrées (jusqu'à 20) et convertir un nombre en décimal ou hexadécimal.

Le tout a été réalisé avec QtCreator (donc C++ et Qt) et est disponible sur ma forge sous licence GPLv3.

Monday, 30 January 2017
|
Écrit par
Grégory Soutadé

Capture d'écran IWLA

Une petite version d'IWLA est sortie. Les changements ne sont pas extraordinaires, mais il y a deux corrections de bug qui méritent de paraître. Au menu cette année :

  • Ajout de l'option -p qui permet de ne regénérer que l'affichage (sans la phase d'analyse)
  • Affichage de la bande passante des robots (possibilité de n'afficher que le top 10 pour gagner de la place)
  • Deux bugs corrigés concernant la compression des fichiers (dont un qui pouvait entraîner des corruptions de base de données).

À vos téléchargements !

Thursday, 29 September 2016
|
Écrit par
Grégory Soutadé

Journée de la femme : tu feras ça demain

"J'ai la fleeeeeeeeeeeeeemme" principale excuse de la question : "Est-ce que tu as fait une sauvegarde de tes données ?" Oui, mais en fait non ! Comme je l'indiquais dans cet article, il faut en faire tous les 6 mois/1 an à minima.

Car, quand la carte mère subit un choc qui provoque un court-circuit sur le disque et que le moteur fonctionne en mode très dégradé empêchant de lire correctement les secteurs, et bien c'est un, cinq, dix ans de données qui sont perdues ! Ne parlons même pas de la destruction par l'eau ou le feu qui est irrémédiable. Pire encore : le vol pur et simple !

Dans notre cas, le disque fonctionne en mode dégradé : lecture poussive mais pas impossible (par contre il refuse de se faire monter). Trois options s'offrent alors :

  • Envoyer le disque chez une entreprise spécialisée qui va réaliser une récupération parfaite (sauf destruction du disque) : dans les 800€-1000€
  • Copie du disque par dd, puis tentative de montage/récupération
  • Tentative de récupération directe par photorec

J'ai choisi d'utiliser la dernière option (le disque ne m'appartient pas). Résultat, il a fallu 10 jours pour l'analyse des quelques 500Go. Photorec fait une lecture secteur par secteur et tente de retrouver la structure des fichiers qu'il connaît (les fichiers multimédias sont bien reconnus). C'est le genre de logiciel qui sauve des vies !

Néanmoins, les méta données sauvegardées dans le système de fichier (nom, emplacement, date) ne sont pas restaurées. On se retrouve donc avec des tas de fichiers de type : recup_dir.x/fXXXXXXX.zzz qu'il faut trier et renommer à la main. Pour effectuer un pré traitement de cet amas, j'ai écrit un petit script Python Photorec stage 2, chargé de la seconde étape d'une récupération photorec. Initialement, il ne devait détecter que les fichiers MS Office et Open Office à partir d'un fichier zip, mais au final il en fait bien plus.

Fonctions principales :

  • Détection des fichiers MS Office et Open Office à partir des fichiers .zip + détection de la date de création
  • Lecture des meta données ID3 des fichiers MP3 pour y retrouver le nom
  • Lecture des meta données EXIF des fichiers JPG pour y retrouver la date de création
  • Filtre sur les extensions (par liste blanche ou liste noire)
  • Filtre sur la taille des fichiers

Voilà de quoi dégrossir le travail (particulièrement efficace pour regrouper les photos d'un même album). Le tout est disponible sur ma forge avec une licence GPL v3.

Monday, 08 August 2016
|
Écrit par
Grégory Soutadé

Après avoir ouvert le champomy pour les 6 ans du blog, je reviens rapidement sur IWLA car j'aime m'auto extasier sur ce petit outil. L'idée de base était de remplacer AWSTATS par quelque chose de plus facilement "hackable", ce qui est chose faite. Si on rajoute la concision du langage Python par dessus, on obtient un script du genre :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import argparse
import gzip
import pickle
import re
import operator

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Statistics extraction')

    parser.add_argument('-f', '--file', dest='file',
                        help='Comma separated IWLA databases')

    args = parser.parse_args()

    blog_re = re.compile(r'^.*blog\.soutade\.fr\/post\/.*$')

    big_stats = {}

    for filename in args.file.split(','):
        with gzip.open(filename, 'r') as f:
            print 'open %s' % (filename)
            stats = pickle.load(f)
            print 'unzipped %s' % (filename)
            top_pages = stats['month_stats']['top_pages']
            for (uri, count) in top_pages.items():
                if not blog_re.match(uri):
                    continue
                big_stats[uri] = big_stats.get(uri,0) + count
            print 'analyzed %s' % (filename)

    print '\n\nResults\n\n'

    for (uri, count) in sorted(big_stats.items(), key=operator.itemgetter(1), reverse=True)[:10]:
        print '%s => %d' % (uri, count)

Que fait-il ? Il va tout simplement appliquer un filtre sur les pages du blog qui concernent les articles pour en extraire les 10 les plus consultées. Ce qui me fait gagner du temps pour mon bilan annuel !

Bien sûr, on peut créer des tas d'outil indépendants qui vont extraire et manipuler les données pour les mettre en forme, le tout avec une facilité déconcertante. Mieux encore, créer un plugin pour l'intégrer directement dans la sortie HTML quand ceci est nécessaire !