Valeur binaire et décalage

26 06 2007

Vive le binaireL’informatique a un secret, un secret aussi fondamental que spectaculaire. Toutes les informations circulant à l’intérieur d’une calculatrice ou même d’un ordinateur sont composées de 0 et de 1. Ce système appelé binaire, permet de synthétiser toutes les informations possibles, chiffres, images, caractères, à travers des séquences de bits pour rendre ces informations compréhensibles par une machine.

Par exemple, si on prend le nombre 42, il aura besoin de 6 bits pour stocker son information, qui se représentera pour un l’ordinateur 101010. Je vous épargne la conversion du système décimal au système binaire :)

Lors de l’écriture d’une programme, un développeur ne se souciera pas de ces suites de 0 et de 1, c’est le travail du compilateur ou de l’interpréteur, et surtout de la machine. Le développeur se souciera juste du déroulement des différentes actions composant son programme.

Mais parfois il est astucieux d’accèder aux bits d’une valeur stockée en mémoire. Dans l’infographie par exemple, pour les composantes RGB des couleurs, généralement codées sur 32bits (4 octets).

Dans mon cas, j’ai eu besoin de représenter en ActionScript pour Flash les suites de bits contenus dans des nombres indiquants l’heure actuelle. L’avantage de cet algorithme est qu’il est portable et facile à paramètrer.

function arrayOctetBinaryValue(value:Number) : Array {
    var binary = new Array();
    for (var i = 0; i < 8; i++) {
        binary[i] = value & 0x1;
        value = value >> 1;
    }
    return(binary.reverse());
}

arrayOctetBinaryValue(12); // [0, 0, 0, 0, 1, 1, 0, 0]
arrayOctetBinaryValue(183); // [1, 0, 1, 1, 0, 1, 1, 1]

Lire la suite »



Persistence

3 06 2007

PythonComment rendre les variables du code persistentes à travers le temps et les pannes de courants en passant par les crashs d’application ?

Cette problèmatique fut mise en avant lors du développement d’ECS, un framework e-commerce écrit en Python, au sein d’Emencia, société de services en logiciels libres.

Les modules Python pickle et cPickle servent à cela, mais leurs mise en place de manière générique peuvent etre coûteuse et de plus comment centraliser des centaines d’objets à un moment T donné ?

ECS grâce au projet SQLAchemy, supporte tous types de bases données et fournis en plus un tas de fonctions pour manipuler des tables en base de donnée à partir d’un modèle de code. C’est donc à partir de la que fut developpé le modèle de persistence.

Le modèle de persistence écrit pour ECS, fournit donc les outils pour effectuer la sauvegarde de tout objet instancié au sein de Python. Il contient en plus une implémentation rapide par métaclasse pour accélérer l’intégration au sein du code.

Voici un exemple d’implémentation de classe persistente, prenons l’exemple d’un chat :

from persistency import PersistentClass

class Cat(object):
  __metaclass__ = PersistentClass
  age = None
  name = None

def __init__(self, name='', age=-1):
  self.age = age
  self.name = name
  if self.age == -1:
    self.load()
  else:
    self.save()

def database(cls):
  return 'sqlite:///:memory:'

Cat._sqluri_callback = database

Nous allons donc créer un chat du nom de Felix agé de 8 ans.

felix = Cat('Felix', 8)
# Roooh il est beau ce chat !

Lire la suite »