Archive

Archives pour la catégorie ‘Informatique’

PHP 5.3.3 est sorti !

23/07/2010

La dernière version stable de PHP est disponible depuis hier. Quatre mois après la sortie de PHP 5.3.2, la version 5.3.3 corrigent près d’une centaine de bugs, dont certains posaient des problèmes de sécurité.

Au-delà des corrections de bugs, cette nouvelle release entraîne un incompatibilité concernant la déclaration des constructeurs des classes appartenant à un espace de nom. Les « namespaces » ou espaces de nom n’ayant été introduit dans PHP que dernièrement dans le version 5.3, l’incompatibilité ne pose donc problème que pour les versions 5.3.x.

Depuis l’apparition de la POO dans PHP, les concepts ont bien évolués, l’écriture et l’interprétation du code également. Ainsi en PHP 4, il fallait écrire le code suivant pour utiliser un constructeur.

class Bar {
    function Bar() {}
}

Le constructeur était une méthode dont le nom était à l’identique celui de la classe. La version 5 de PHP a introduit le mot clé __construct pour le constructeur comme le montre le code ci-dessous. Pour des raisons de compatibilités, la façon de faire de la version PHP 4 est toujours reconnue, encore aujourd’hui.

class Bar {
    public function __construct() {}
}

PHP 5.3.3 entame à mon sens un premier virage afin de supprimer cette compatibilité. En effet les classes appartenant à un espace de noms n’auront désormais plus accès à cette possibilité. Cela va donc obliger les développeurs à utiliser les bonnes pratiques comme le montre l’exemple ci-dessous.

namespace Foo;
class Bar {
    public function Bar() {
        // treated as constructor in PHP 5.3.0-5.3.2
        // treated as regular method in PHP 5.3.3
    }
}

La question est donc : à quand l’impossibilité d’utiliser la méthode Bar comme un constructeur ?

Tharkun Informatique

Comment stocker des fichiers de cache ?

12/03/2010

En informatique, il existe des problèmes récurrents. Le stockage de fichiers de cache en est un. Mais revenons d’abord sur la notion de fichier de cache. Même en optimisant le système, certains traitements peuvent prendre du temps, temps qu’il n’est pas permis de répercuter lors des nombreux autres traitements. Pour illustrer ce propos, prenons l’exemple des droits des utilisateurs. Le calcul des droits d’un utilisateur peut être long, plus ou moins compliqué mais une fois calculé, il est inutile de le recalculer tant que les droits n’ont pas changé. L’utilisation de fichiers de cache permet dans ce cas précis de faire le calcul une fois, d’écrire un fichier avec le résultat du traitement, puis d’aller lire le fichier. Lire un fichier rend ici la récupération des droits de l’utilisateur beaucoup plus rapide.

Après avoir identifié des fichiers de cache à créer il est nécessaire de voir le stockage. Il existe pour cela plusieurs solutions. Dans toute l’explication qui va suivre, on considérera que le stockage de nos fichiers se fait dans le répertoire /var/cache/user-rights/. De plus chaque utilisateur correspond à un numéro qu’on appellera « id ».

Stocker dans un répertoire

La première solution à laquelle pensent souvent les débutants est de stocker tous les fichiers dans le répertoire. On se retrouve ainsi avec l’arborescence suivante :

/var/cache/user-rights/145.cache
/var/cache/user-rights/156.cache
/var/cache/user-rights/28.cache
/var/cache/user-rights/2456.cache
/var/cache/user-rights/58964.cache

Cette méthode est très simple de conception. Elle est très adaptée lorsque le nombre maximum de fichiers de cache est peu élevé. Cette méthode peut s’avérer très dangereuse si le nombre de fichiers croit beaucoup et que l’on a pas d’accès ssh pour faire le ménage. Lister via un client ftp le contenu d’un tel répertoire ayant un grand nombre de fichiers devient tout simplement impossible. On peut ainsi perdre le contrôle sur le répertoire ce qui n’est évidemment pas acceptable.

Créer une arborescence

Tout mettre dans un même répertoire pose également un problème physique d’accès aux données. En effet les systèmes au delà d’un certain nombre de fichiers dans un même répertoire deviennent plus lents. La récupération des droits d’un utilisateur devient ainsi plus lente et l’utilisation de fichiers de cache perd de son efficacité.

La solution à laquelle on pense instantanément est de créer une arborescence de fichiers dans notre répertoire de cache. Pour cela, il suffit de découper l’ »id » utilisateur. On obtient donc l’arborescence suivante:

/var/cache/user-rights/1/4/145.cache
/var/cache/user-rights/1/5/156.cache
/var/cache/user-rights/2/28.cache
/var/cache/user-rights/2/4/5/2456.cache
/var/cache/user-rights/5/8/9/6/58964.cache

Dans un répertoire, on ne peut donc avoir que dix sous répertoires et dix fichiers de caches. Le nombre de sous répertoire pour accéder à un fichier est égale à la formule suivante :

$iNumberOfFolder = floor( log10( $iUserID ) ); // Nombre entier inférieur du logarithme du numéro utilisateur

Cette méthode rend la maintenance bien plus rapide, puisque chaque sous répertoire ne contient que peu d’éléments. La mise en place n’est pas compliquée. Cependant elle pose également quelques problèmes. L’arborescence créée dépend du nombre maximum d’utilisateurs. Quid de l’arborescence quand on atteint un « id » de l’ordre du million ? Cela implique par exemple /var/cache/user-rights/1/5/4/5/2/0/1545200.cache. On voit ici qu’on arrive en fait à l’extrême inverse de la solution précédente. Ici nous avons peu de fichiers et répertoires par sous répertoires mais avons potentiellement une très grosse arborescence.

Minimiser le nombre de sous répertoire

Si on considère qu’on doive créer l’arborescence complète, on s’aperçoit après un petit calcul rapide que le nombre de fichiers et de répertoires suivent les formules suivantes :

$iTotalNumberOfFolder = floor( max( $iUserID ) / 10 ); // Nombre entier inférieur du logarithme du numéro utilisateur
$iTotalNumberOfFile = max( $iUserID );

Dans le cas où l’ »id » utilisateur atteint le million, cela signifie qu’il faut créer quelques cent mille répertoires. C’est énorme. Cela surcharge clairement les serveurs et rend la maintenance très compliquée. Il faut donc trouver un moyen de diminuer le nombre de sous répertoires. Pour cela, il faut modifier le découpage. Au lieu de générer l’arborescence en utilisant un seul chiffre, il est plus intéressant d’en utiliser deux voire trois. En utiliser deux permet de diviser le nombre de répertoire par dix par rapport à la précédente méthode tandis que découper en trois permet de diviser par cent. Le choix dépend après de chaque utilisation. On obtiendrait donc /var/cache/user-rights/15/45/20/1545200.cache ou /var/cache/user-rights/154/520/1545200.cache

Pour les exemples à suivre ci-dessous, nous prendrons un découpage à deux chiffres.

Optimiser la répartition de l’arborescence

Si l’on prend 12012 utilisateurs, on aura à la racine de notre répertoire de cache 90 répertoires allant de 10 à 99. Le nombre de sous fichiers dans chaque de ces sous répertoire n’est pas identique. Calculons le nombre de fichiers pour les sous répertoires 10, 12 et 20.


Sous répertoire 10 : fichiers 100 à 109 + 1000 à 1099 + 10000 à 10999 => 10 + 100 + 1000 = 1110 fichiers

Sous répertoire 12 : fichiers 120 à 129 + 1200 à 1299 + 12000 à 12012 => 10 + 100 + 13 = 123 fichiers

Sous répertoire 20 : fichiers 200 à 209 + 2000 à 2099 => 10 + 100 = 110 fichiers

La répartition dépend ici des deux premiers chiffres du nombre maximum. L’idée pour améliorer la répartition est de découper le nombre en utilisant son nombre inversé. Ainsi pour générer l’arborescence pour le nombre 12456, on utilisera le nombre 65421, ce qui donnera /var/cache/user-rights/65/42/12456.cache. Avec cette méthode, le nombre de répertoire à la racine sera de 100, allant de 00 à 99. Le nombre de fichiers dans chaque sous répertoire correspond à la quantité de nombre se terminant par la valeur de ce sous répertoire. Calculons le nombre de fichiers pour les sous répertoires 10, 12 et 20 de nouveau.


Sous répertoire 10 : fichiers 101 ... 901 + 1001 ... 9901 + 10001 ... 11901 + 12001 => 10 + 100 + 120 + 1 = 231 fichiers

Sous répertoire 12 : fichiers 121 ... 921 + 1021 ... 9921 + 10021 ... 11921 => 10 + 100 + 120 = 230 fichiers

Sous répertoire 20 : fichiers 102 ... 902 + 1002 ... 9902 + 10002 ... 11902 + 12002 => 10 + 100 + 120 = 231 fichiers

Sous répertoire 99 : fichiers 199 ... 999 + 1099 ... 9999 + 10099 ... 11999 => 10 + 100 + 120 = 230 fichiers

On voit avec cette méthode que les fichiers sont plus équitablement répartis.

Tharkun Informatique

Google lance Go

12/11/2009

On discutait le weekend dernier avec Liz de l’apparition des langages de programmation. Et bien c’est aujourd’hui Google qui lance le sien. Le dernier s’appelle « Go » pour le moment. Je précise pour le moment car ce nom est déjà utilisé pour un langage de programmation. Il semble que « Go » soit un mix des langages de programmation Python et C++. Connaissant la puissance de Google, il faudra donc suivre l’évolution de ce langage qui ne peut être utilisé à grande échelle pour le moment

Source Le Monde

Tharkun Informatique

Exclure les fichiers svn dans WinMerge

02/11/2009

Lorsqu’on utilise WinMerge pour comparer un répertoire à un projet lié à SVN, un problème se pose très rapidement. Tous les fichiers svn apparaissent dans les rapports et ainsi polluent la comparaison. Il existe un moyen très simple de corriger ce problème : le filtre.

Exclure les fichiers svn sous WinMerge

Exclure les fichiers svn sous WinMerge

Il est possible de créer des filtres afin de modifier le comportement de WinMerge lors de la comparaison. Pour cela il faut créer un fichier winmerge-svn.flt (seul l’extension est importante). Le contenu de ce fichier est :

## This is a directory/file filter for WinMerge
## This filter suppresses various binaries found in SVN source trees
name: SVN loose

## This is an inclusive (loose) filter
## (it lets through everything not specified)
def: include

## Filters for filenames begin with f:
## Filters for directories begin with d:
## (Inline comments begin with " ##" and extend to the end of the line)

f: \..svn$ ## SVN control file

d: \\cvs$ ## CVS control directory
d: \\.svn$ ## SVN control directory

Il suffit ensuite d’installer le filtre et les fichiers svn n’apparaitront plus.

Tharkun Informatique

Internet a 40 ans

29/10/2009

Il y a quarante ans s’échangeait un message entre deux ordinateurs distants. Situés à l’université de Los Angeles pour l’un et Stanford pour l’autre, ces deux pc utilisaient à l’époque le réseau Arpanet, l’ancêtre d’Internet. A l’origine destiné à une utilisation militaire, il en a dépassé les applications prévues à l’origine.

Source Le Monde

Tharkun Informatique, Internet

La Maison Blanche en open source

27/10/2009

Depuis ce week end, le monde de l’open source a une fois de plus pris une part de marché aux logiciels payants. On assiste depuis quelques années à une montée en puissance des logiciels open source pour plusieurs raisons :

  • L’open source s’est professionnalisé. La notion de « gratuité » est de moins en moins associé aux problèmes de sécurité.
  • L’écart dans de nombreux domaines entre l’open source et le payant s’est réduit.

De très nombreuses administrations migrent vers l’open source, de Microsoft Office vers Open Office par exemple. Ce week end, c’est le site de la Maison Blanche qui est entrée dans le monde du libre en migrant son site web vers Drupal.

Source Le Monde

Tharkun Informatique, Internet

eZ Publish 4.2

07/10/2009

La dernière version du CMS eZ Publish vient tout juste de sortir. Un peu plus de 250 bugs ont été corrigés par rapport à la version 4.1 dans le kernel mais aussi dans les extensions basiques fournies par défaut. De nouvelles extensions sont désormais inclues dans le package de base, ce qui n’était pas le cas de la précédente version. Certaines fonctionnalités ont été ajoutées.

Compatibilité PHP 5.3

Vraie bonne nouvelle, eZ Publish est désormais compatible avec la dernière version de PHP, la 5.3. Celle-ci permet un réel gain de performance comme le montre l’article au lien suivant « eZ Publish performance with PHP 5.3.0″. Cet article a été fait lors de la sortie de la release 4.1.3 d’eZ Publish, la version 4.2 devrait donc être encore plus rapide.

Traduction française

J’annonçais il y a peu la mise en ligne dans les contributions l’arrivée de la traduction française pour la release 4.1.3. Celle-ci n’était cependant pas incluse dans le package de base. Ceci est désormais chose faite pour la version 4.2.

Tharkun Informatique

French translation – eZ Publish 4.1.3

22/09/2009

French translation are now available for eZ Publish 4.1.3 release. You can download it on eZ Publish website on the contribution translations page. To use it, you have to

  • Download the file
  • Replace the existing file in share/translations/fre-FR/translation.ts

Les traductions françaises sont disponibles pour la version 4.1.3 du CMS eZ Publish. Il est possible de les télécharger sur le site d’eZ Publish dans la rubrique « Contributions > Internationalization ». Pour les utiliser, il vous faut

  • Télécharger le fichier
  • Remplacer le fichier existant dans share/translations/fre-FR/translation.ts

Tharkun Boulot, Informatique

Créer un objet eZ Publish en 15 lignes

28/08/2009

Lors d’une lecture d’un article sur un blog consacré à une des techno sur laquelle je travaille, j’ai découvert qu’il est possible de créer un objet eZ Publish très simplement et rapidement. En effet avant nous étions obligés de gérer la création d’objet en suivant les étapes ci-dessous :

  • Instancier un objet à partir d’une classe
  • Créer un nœud
  • Lier l’objet à ce nœud
  • Stocker le tout
  • Publier l’objet

En réalité, il existe une méthode beaucoup plus rapide, et plus intuitive aussi. La voici

<?php
$params = array();
// node id of /Media/Files
$params['parent_node_id'] = 52;
$params['class_identifier'] = 'file';
// admin
$params['creator_id'] = 14;
// don't forget the ended /
$params['storage_dir'] = '/tmp/data/';
// section media
$params['section_id'] = 3;

$attributesData = array();
$attributesData['name'] = 'My file';
$attributesData['file'] = 'my_file.txt';

$params['attributes'] = $attributesData;
$contentObject = eZContentFunctions::createAndPublishObject( $params );
?>

Désormais plus personne ne pourra dire qu’il est compliqué d’importer du contenu dans eZ Publish.

Source Pwet.fr

Tharkun Boulot, Informatique

Migration Dékio réussie

17/08/2009

Prévue depuis la semaine dernière, la migration de version eZ Publish pour les sites www.dekio.fr, www.art-decoration.fr, www.maison-travaux.fr s’est très bien passée ce matin. Les sites utilisent donc aujourd’hui la dernière version (4.1.3) du CMS eZ Publish, l’extension ezoe (« online editor ») ainsi que la dernière version des eZ Components.

Tharkun Boulot, Informatique , ,