Techno

Fil des billets - Fil des commentaires

Le truc PHP du jour : hériter dynamiquement d'une classe

Aussi moche soit-il, PHP s'est imposé chez bon nombre d'hébergeurs, et souvent, "il faut faire avec".

L'astuce du jour : comment définir une classe héritant dynamiquement d'une autre classe ?

Forcément, le code suivant ne fonctionne pas :

<?php
	$classToInherit = "parentClass";

	class parentClass {
		public function hello() {
			echo "Hello, world !";
		}
	}

	class childClass extends $classToInherit {
		public function hello() {
			parent::hello();
			echo "Hello, too!";
		}
	}

	$o = new childClass();
	$o->hello();
?>

Ce serait trop simple...

Qu'à cela ne tienne, il existe une fonction qui va nous permettre de ruser, la fonction class_alias. Et voilà le travail :

<?php
	$classToInherit = "parentClass";

	class parentClass {
		public function hello() {
			echo "Hello, world !";
		}
	}

	class_alias($classToInherit,"myCustomClass");
	
	class childClass extends myCustomClass {
		public function hello() {
			parent::hello();
			echo "Hello, too!";
		}
	}

	$o = new childClass();
	$o->hello();
?>

(J'entends déjà les "dans les vrais langages, on peut faire ça proprement", et je suis entièrement d'accord :)

Ubuntu Karmic Koala et postgresql 8.4

J'ai mis à jour mes 2 portables hier vers la dernière version en date de la Karmic Koala.

Tout s'est (plus ou moins) bien passé, je me suis juste retrouvé avec une base (locale) postgresql 8.4.

En effet, lors de l'installation de postgresql 8.4, les bases de la 8.3 ne sont pas migrées automatiquement, et un nouveau cluster est créé

J'ai pu migrer mes données en 8.4 avec les étapes suivantes :

  • Installation et démarrage de postgresql 8.3 et postgresql 8.4
  • Vérification que les
  • Arrêt du cluster "main" de pgsql 8.4 :
sudo pg_ctlcluster 8.4 main stop
  • Suppression du cluster "main" de pgsql 8.4 :
sudo pg_dropcluster 8.4 main
  • Migration du cluster de la 8.3 :
sudo pg_upgradecluster 8.3 main
  • Vérification que la migration est bien effective : arrêt de pgsql 8.3, tests sur le serveur

Il est ensuite possible de supprimer l'ancien cluster en 8.3 (on peut synthétiser pg_ctlcluster stop et pg_dropcluster en 1 ligne) :

sudo pg_dropcluster --stop 8.3 main

Et hop, un postgresql-8.4 tout propre \o/

Ubuntu sur NC10

Bon, il n'y a pas à dire, c'est beau le libre.

Juste après déballage de mon nouveau Samsung NC10 :

Reboot ... et tout marche! Il ne reste plus qu'à installer apache/pgsql/dotclear, et les plugins du lab dotclear, et ça fait un environnement de développement dotclear nomade parfait :)

unr-desktop-small.png

Enfin presque. Il me reste juste à voir pourquoi la luminosité n'est pas sauvegardée quand on est sur batterie...

Chrome et le javascript

Test ACID2 ... ok

Test ACID3 ... 74/100

Tests Javascript : (tests réalisés avec SunSpider)

TESTCOMPARISONFirefox 3.0.1Chrome
** TOTAL **: 2.62x as fast7513.4ms +/- 9.3%2864.0ms +/- 7.6%
3d:2.48x as fast 651.6ms +/- 26.6% 262.8ms +/- 103.0%
  cube: 3.08x as fast 255.4ms +/- 40.2%83.0ms +/- 126.7%
  morph:2.84x as fast 179.2ms +/- 24.6%63.2ms +/- 10.4%
  raytrace:1.86x as fast 217.0ms +/- 22.6% 116.6ms +/- 140.8%
access: 6.02x as fast 879.6ms +/- 18.6% 146.2ms +/- 23.6%
  binary-trees: 18.0x as fast 165.4ms +/- 25.3% 9.2ms +/- 24.2%
  fannkuch:7.79x as fast 383.4ms +/- 20.5%49.2ms +/- 29.1%
  nbody:3.83x as fast 216.0ms +/- 19.6%56.4ms +/- 28.4%
  nsieve: 3.66x as fast 114.8ms +/- 31.5%31.4ms +/- 41.3%
bitops: 5.54x as fast 524.0ms +/- 13.9%94.6ms +/- 20.0%
  3bit-bits-in-byte: 19.1x as fast 145.4ms +/- 21.8% 7.6ms +/- 37.7%
  bits-in-byte: 8.45x as fast 143.6ms +/- 20.0%17.0ms +/- 41.0%
  bitwise-and: 4.70x as fast 90.2ms +/- 33.7%19.2ms +/- 18.0%
  nsieve-bits: 2.85x as fast 144.8ms +/- 14.8%50.8ms +/- 29.3%
controlflow: 25.8x as fast 124.0ms +/- 17.1% 4.8ms +/- 33.8%
  recursive: 25.8x as fast 124.0ms +/- 17.1% 4.8ms +/- 33.8%
crypto: 4.62x as fast 467.4ms +/- 19.8% 101.2ms +/- 22.4%
  aes:3.87x as fast 150.8ms +/- 35.1%39.0ms +/- 38.3%
  md5:4.49x as fast 167.2ms +/- 35.5%37.2ms +/- 28.3%
  sha1: 5.98x as fast 149.4ms +/- 33.2%25.0ms +/- 25.6%
date: 3.99x as fast2367.2ms +/- 15.9% 592.8ms +/- 27.5%
  format-tofte: 6.70x as fast2109.2ms +/- 14.3% 314.8ms +/- 30.3%
  format-xparb: ?? 258.0ms +/- 30.8% 278.0ms +/- 40.5%
math: 3.44x as fast 652.2ms +/- 20.0% 189.6ms +/- 23.7%
  cordic: 2.56x as fast 266.8ms +/- 25.9% 104.2ms +/- 33.7%
  partial-sums: 3.22x as fast 200.0ms +/- 37.8%62.2ms +/- 31.6%
  spectral-norm:7.99x as fast 185.4ms +/- 26.5%23.2ms +/- 41.2%
regexp: *1.85x as slow* 283.6ms +/- 22.2% 525.0ms +/- 19.1%
  dna:*1.85x as slow* 283.6ms +/- 22.2% 525.0ms +/- 19.1%
string: 1.65x as fast1563.8ms +/- 14.2% 947.0ms +/- 22.1%
  base64: 1.72x as fast 172.0ms +/- 34.9% 100.2ms +/- 39.1%
  fasta:5.17x as fast 406.0ms +/- 28.8%78.6ms +/- 46.5%
  tagcloud:-269.6ms +/- 10.3% 238.2ms +/- 31.3%
  unpack-code: 1.45x as fast 500.6ms +/- 13.2% 344.4ms +/- 22.6%
  validate-input: -215.6ms +/- 15.5% 185.6ms +/- 44.0%

Y'a pas à dire, c'est prometteur...reste à voir ce que donnera ce même test face à TraceMonkey :)

Apache2, fail2ban, bots et script kiddies

Histoire de changer de sujet, un premier article technique sur la configuration d'apache2 et de fail2ban pour se prémunir de quelques attaques et autres scans de votre serveur web.

Lire la suite >