vendredi 27 novembre 2009

Entre QT et Cocoa : QTableWidget vs. NSTableView

Aujourd'hui, je vous propose un petit comparatif pas très équitable. Je dit cela car mon expérience en QT4 est largement inférieur à celle que j'ai en Cocoa.
Cependant, je préfère largement Cocoa sur la gestion de l'affichage des données dans un tableau.
Les différences :
- Cocoa utilise un objet qui est "passif" (se contente de répondre à des demandes) alors que QT4 oblige le développeur à remplir le tableau à la main !
- En QT4, il y a une différence entre la ligne active et la ligne sélectionné, je vois pas pourquoi !
- En QT4, si on souhaite bloquer la sélection à une simple ligne cela implique une sélection obligatoire
- En QT4, vous sélectionnez une cellule pas une ligne !
- En QT4, la ligne sélectionné peu vous poser des problèmes quand vous souhaitez rafraîchir le contenu de la table.
- Lors de l'ajout d'une ligne il faut créer soit même la ligne et ajouter les objets pour chaque cellule.
- Par contre, en QT4 la table est bien plus souple et plus configurable. Mais à quel prix !
- En Cocoa, le changement de sélection renvoie un message au delegate, en QT4 la selection d'une cellule appelle une fonction.

Il y a de forte chance que j'utilise mal les QTableWidget. Mais je trouve aussi que c'est un peu le basard dans la façon de faire. Il y a un peu de MVC et du "fait tout toi même" !

Un souhait de cadeau : Cocoa en multi-plateforme ! Apple ?

mercredi 25 novembre 2009

Créer un cluster Apache 2

Aujourd'hui je vais vous montrer comment faire pour mettre en place un cluster de 3 machines virtuelles avec Apache. Chacune des machines dispose de la même configuration logiciel. Je me concentrerais plus sur la configuration des machines.

La première chose à faire est de déterminer les adresses ip des 4 serveurs.
Serveur hôte : 192.168.0.2
Cluster 1 Server 1 : 192.168.0.3
Cluster 1 Server 2 : 192.168.0.4
Cluster 1 Server 3 : 192.168.0.5

Dans ce post, je suppose que vous savez configurer et créer une machine virtuel sur virtualBox, que vous savez installer une debian, utiliser SSH, utiliser pico et connaissez les commandes de base pour la navigation dans les fichiers sur Linux.

Quelques précisions sur la configuration et le système utilisé :
- La distribution Linux utilisé est une Debian Lenny (5.0.2).
- Le dossier DocumentRoot des 3 machines du cluster est stocké sur le serveur hôte. L'accès ce fait par NFS.
- Le dossier de stockage contient les sous dossiers suivants : wData qui contient les pages web; wLog qui contient les fichiers log Apache ; wSession contient les fichiers de sessions PHP et wConf qui contient une sauvegarde des fichiers de configuration.
- La configuration Réseau des machine virtuel est en mode "pont".
- Lors de l'installation du système nous utilisons tout le disque dans une seule partition (disque de 4Go).
- Les éléments installés avec le système sont "Serveur Web" et "Système de base".
- Après l'installation, la première chose à faire est d'installer "openssh-server" et "php5-mysql" pour permettre l'accès au serveur en SSH et activer le support de MySQL dans PHP5.

La machine hôte est un serveur fonctionnant sur Mac Os X Server (10.5). Nous disposons d'une partition nommé Data dans laquelle ont stock toutes les données. Dans cette partition nous allons créer un dossier "wVirtual" qui sera partagé via NFS. Ce dossier contiendra les données pour les serveurs apaches des machines virtuelles. Dans ce dossier nous allons créer "wCluster1" qui contiendra les données pour les 3 machines du cluster. Puis l'arborescence telle que décrit plus bas.
Pour effectuer le partage NFS du dossier wVirtual, il faut utiliser l'utilitaire "Server Admin".
Dans les options du partages, choisissez :
- (Cocher) Exporter cet élément et son contenu vers "Liste de clients"
- Dans la liste ajouter toutes les adresses IP des postes ayant besoins d'y accéder. Dans notre cas, la liste se limite au 3 serveurs du cluster.
- Mappage : de Root à Root
- Sécurité mnimal : Quelconque (Any)
- Décocher "lecture seule"
- Cocher "Autoriser le montage des sous-répertoires"
- Valider et sortir.
Dans le terminal nous allons créer un fichier de configuration apache pour qu'il gère le cluster.
Nous créons le fichier avec la commande : sudo pico /etc/apache2/sites/0003_192.168.0.2_80_cluster.exemple.com.conf
Voici le contenue du fichier :

<virtualhost>
ServerName cluster.exemple.com
ServerAdmin admin@exemple.com
DirectoryIndex "index.html" "index.php"
CustomLog '|/usr/sbin/rotatelogs "/var/log/apache2/access_log_app2" 604800 60' "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
ErrorLog '|/usr/sbin/rotatelogs "/var/log/apache2/error_log_app2" 604800 60'
<IfModule mod_proxy_balancer.c>
ProxyRequests off
<proxy *>
Order deny,allow
Allow from all
</proxy>

<proxy "balancer://cluster1">
ProxySet lbmethod=byrequests
BalancerMember http://192.168.0.3/
BalancerMember http://192.168.0.4/
BalancerMember http://192.168.0.5/
</proxy>
ProxyPass / balancer://cluster1/
ProxyPassReverse / balancer://cluster1/
</ifmodule>
</virtualhost>


Sur chacune des machines du cluster :
ouvrez une session en tant que "root" (via SSH ou en console) :
- puis éditez le fichier "interfaces" : pico /etc/network/interfaces
- sur la ligne : "iface eth0 inet dhcp", changer "dhcp" en "static"
- en dessous ajoutez les lignes : "address", "netmask" et "gateway"
pour la première machine cela donne :
iface eth0 inet static
address 192.168.0.3
netmask 255.255.255.0
gateway 192.168.0.1

- Une fois modifié sortir en enregistrant
- Puis rebooter la machine
- Après le reboot, ouvrez une session en tant que root
- Créer le dossier de montage pour le partage NFS : mkdir /mnt/wData
- Changer les droits d'accès : chmod 777 /mnt/wData
- Éditer le fichier "fstab" : pico /etc/fstab
- Ajouter une ligne : 192.168.0.2:/Volumes/Data/wVirtual/wCluster1 /mnt/wData nfs defaults 0 0
- Enregistrer en sortant du fichier puis faite : mount -a
cela aura pour effet de monter les partitions non monté (tel que le partage)
- Maintenant il faut modifier la configuration d'Apache 2 pour aller chercher les documents au bon endroit. Pour cela : pico /etc/apache2/sites-enabled/000-default
- Changer les lignes : "DocumentRoot /var/www/" en "DocumentRoot /mnt/wData/wData/"
- et "<directory /var/www/>" en "<directory /mnt/wData/wData/>"
- et "ErrorLog /var/log/apache2/error.log" en "ErrorLog /mnt/wData/wLog/error-cl1s1.log" le s1 de la fin signifiant serveur 1.
- et "CustomLog /var/log/apache2/access.log combined" en "CustomLog /mnt/wData/wLog/access-cl1s3.log combined"
- Sortir en enregistrant
- Maintenant il faut indiquer à PHP le nouveau lieu de stockage des fichiers de session.
- Éditer le fichier php.ini : pico /etc/php5/apache2/php.ini
- Ajouter ceci en dessous de la ligne d'exemple : "session.save_path = /mnt/wData/wSession"
- Sortir en enregistrant les modifications
- La configuration est terminé il faut maintenant que le serveur la prenne en compte.
- Un petit test pour eviter les catastrophes : apache2ctl -t
- Il doit répondre "Syntax OK". Si ce n'est pas le cas, vérifier la modification du fichier 000-default
- si c'est OK, exécuter : apache2ctl graceful
Le serveur redémarre en n'indiquant rien.

Petit test dans un navigateur en se rendant sur la page : 192.168.0.3 puis les autres serveurs.
Puis le tests final est d'accéder au domaine configurer : http://cluster.exemple.com

Comme à l'accoutumée, j'attends vos réactions !