dimanche 12 novembre 2006

PeerTV, la tv sous Linux


PeerTV, la tv sous Linux

PeerTV est un script Perl qui donne accès au WebTv.

Paquet nécessaire sous Suse 10.1

perl
perl-AppConfig
perl-ExtUtils-Depends
perl-ExtUtils-ParseXS
perl-libwww-perl
perl-libxml-perl
perl-Tk
perl-XML-LibXML
perl-XML-LibXSLT
perl-XML-NamespaceSupport
perl-XML-Parser
perl-XML-SAX
perl-XML-Simple
perl-XML-Writer
perl-URI
tk
mplayer
w32codec-all
N'oubliez par de cliquer la case: Vérification automatique dans YaST2.

Installer PeerCast

Télécharger PeerCast.

Effectuer les commandes suivantes dans un terminal.
tar xzf peercast-linux.tgz

Le fichier peercast peut être mis dans /usr/bin.

Installation de PeerTV

Télécharger PeerTv.
Effectuer les commandes suivantes dans un terminal.
tar xzf PeerTV-033-Linux.tar.gz
cd PeerTV-033-Linux
./PeerTV.pl

Si vous avez bien installé les paquets indiquez, PeerTV se lançera.

Les WebTv vous sont maintenant acessible aisément, bonne TV.

samedi 16 septembre 2006

Comment configurer les boutons de la souris?


Comment configurer les boutons de la souris?

Télécharger imwheel, ce logiciel permettra d'effecutuer une action à la suite d'un clic de souris (selon un bouton donnée). Dans le fichier XF86Config (/etc/X11/) ou Xorg (/etc/X11/xorg.conf)

Section "InputDevice"
  Driver       "mouse"
  Identifier   "Mouse[1]"
  Option       "Buttons" "7"
  Option       "Device" "/dev/input/mice"
  Option       "Name" "Autodetection"
  Option       "Protocol" "explorerps/2"
  Option       "Vendor" "Sysp"
  Option       "ZAxisMapping" "6 7"
EndSection

Dans le fichier xinitrc (etc/X11/xinit/) pour que tous les usagers 
aient accès à cette modification ou dans le fichier xinitrc local de 
l'usager copié ce code
xmodmap -e "pointer = 1 2 3 6 7 4 5"
imwheel -p -k -b "67"

Le fichier: imwheelrc permet de définir des actions à exécuter selon le bouton pressé par application. Si vous employez xorg 6.9 ou supérieur. Le fichier xinitrc pourrait être:

xmodmap -e "pointer = 1 2 3 6 7 4 5 8 9 10 11"
imwheel -p -k -b "89"

jeudi 14 septembre 2006

La face cachée de Konqueror


LA FACE CACHÉE DE KONQUEROR

Konqueror est connue comme étant le navigateur de Kde. Son moteur a été utilisé et modifié pour devenir webkit sous mac os X.

Ses utilisateurs le connaissent aussi comme un navigateur de fichier. Konqueror a beaucoup plus à offrir que ses deux fonctionnalités.

Kde possède des modules d'entrée/sortie (io slaves) très évolués qui permettent d'effectuer diverses opérations au travers de ses applications. Konqueror en profite donc aussi.

Protocole

Audiocd

audiocd:/
Affiche les pistes audio du cd et permet de les copier sur le disque dur.

Media

media:/
Affiche les médias (cd, disquette, disque dur) que le système dispose

Camera

camera:/
Affiche le contenu de l'appareil photo.

Fish

fish:/
Permet de se connecter à un système grâce au protocole ssh

Sftp

sftp:/
Permet de se connecter à un serveur sftp

Ftp

ftp:/
Permet de se connecter à un serveur FTP

Smb

smb://
smb://nom_usager@nom_machine/dossier
smb:/ Affiche tous les systèmes disponibles
Permet d'accéder aux ressources partagées d'un autre système

Ldap

ldap:/
ldap://host:port/resource
Permet d'accéder à des ressources d'un autre système

Info

info:/
info:dir ou info:/dir
Affiche l'aide disponible pour de nombreux programmes.

Man

man:/
man:ls ou man:/ls
Affiche les man pages de disponible sur le système

Settings

settings:/
Affiche les possibilités pour gérer KDE

Trash

trash:/
Affiche ce qui a été supprimez, mais encore possible de restaurez

Ipod

ipod:/
Affiche le contenu du ipod

Locate

locate:/
Effectue une recherche avec à partir de l'indexage

Sysinfo

sysinfo:/
Affiche différentes informations sur le système: vitesse du cpu, mémoire, état du réseau, hd...

Remote

remote:/
Affiche les possibilités d'accéder à un système distant: smb, services réseau, services SLP

Applications

applications:/
Affiche le menu de kde et permet de démarrer les programmes.

Print

print:/
Affcihe de l'information sur l'imprimante ainsi que la queue d'impression.
Konqueror gère d'autres protocoles et ceux présentés ne sont pas nécessairement disponibles sur votre système. Konqueror est aussi en mesure divers types d'images, des fichiers pdf, des fichiers compressés.

Nous avons pu voir que Konqueror est beaucoup plus qu'un simple navigateur, il est un des programmes clés de Kde.

lundi 3 juillet 2006

BENCHMARK 64 bits C++ vs JAVA

BENCHMARK 64 bits C++ vs JAVA

Nous avons déjà réalisé un article sur les performances de C++ et de Java. Les performances se sont grandement améliorées au fil des versions de Java. Java arrivait à compétitionner avec C++ lors de certains tests.

Récemment, Sun à sortir la bêta 2 de Java 1.6, nous avons réalisé de nouveau les tests déjà effectués sur cette nouvelle version.

Détail de la machine de test

Cpu Athlon 64bits 3000+
Carte mère Asus a8n-vm
Mémoire vive 896 megs
Système d'exploitation Suse Linux 10.1
Système de fichier Reiser

Information des tests

Les mêmes tests ont été utilisés, aucun fichier source n'a été modifié. Pour de plus amples renseignements sur les sources et détails de chaque fichier, consulté l'autre article.

Protocole

Les tests en C++ ont été compilés avec g++ (GCC) 4.1.0 (SuSE Linux). La version de Java est 1.5.0_07 et 1.6.0-beta2. GCJ a aussi été utilisé.

En C++ nous avons compilé les fichiers de cette façon :

g++ -O2 -funroll-all-loops -fomit-frame-pointer -ffast-math -march=x86-64 -mfpmath=sse [test].cpp -o [test]

En java, nous avons compilé les fichiers de cette façon:
javac -O [test].java

Les programmes java ont été exécuté en version cliente et serveur.
java [test]
  java -server [test]

Des tests ont été faits afin de voir les performances des programmes Java en natif à l'aide du compilateur gnu.
 
gcj -O2 -march=i686 --main=[test] -o [test] [test].java 
gcj -O2 -fomit-frame-pointer -ffast-math -march=x86-64 -mfpmath=sse  --main=[test] -o [test] [test].java

Paramètre pour chacun des programmes

Les mêmes paramètres que dans le précédent article ont été employé.

Tableau des résultats

C++ x86-64 Java 1.5 Java 1.5 -server Java 1.6 Java 1.6 -server GCJ optimisé
Ackermann 25320 20056 20020 ND ND 59705
Hash2 12080 6398 5957 4995 4920 11176
Matrix 5720 13828 13605 12169 12092 9443
Objinst 14560 5103 4969 4972 4963 28062
Strcat 660 1857 1680 1685 1607 1983
Hash 11440 45638 44915 34216 33982 33661
Methcall 7680 3273 3229 3374 3188 14062
random 3780 14640 14591 14226 14225 17684
fibo 15950 18895 17460 18076 18064 26956
heapsort 9300 11414 11215 11756 11366 10130
Nestedloop 2840 17000 16936 21303 21169 11805
Sieve 6950 14347 14340 13946 13938 10418
Total 116280 172449 168917 140718 139514 235085
ND signifie que le test a échoué

Analyse des résultats

Puisque deux tests ont échoué sous Java 1.6 le total des tests sous Java 1.6 est faussé. Nous pouvons supposer que leurs résultats pourraient être similaires à ceux obtenus sous Java 1.5.

Les résultats de Java 1.6 seraient ainsi globalement inférieurs à ceux de Java 1.5. Le test nestedloop affecte grandement Java 1.6, il semble avoir un problème, sans ce test, nous pouvons remarquer que Java 1.6 a amélioré les performances par rapport à son prédécesseur.

Les résultats sont similaires au premier article, Java s'en sort encore une fois très bien. GCJ continue d'avoir de la difficulté dans ce test.

Java 1.6 prend un avantage sur la version 1.5. Le Code C++ semble poser problème. Il est surement possible d'optimiser cela.

Le C++ se resaisie dans ce test. Il est au minimum deux fois plus vite que les versions Java. Malgré que le processeur soit plus rapide et qu'il y ai plus de mémoire, le C++ en tire beaucoup moins partie que les versions Java.

GCJ obtient des performances déplorables, presque deux fois plus lent que la version C++.Les deux versions de Java obtiennent des performances similaires.

Le code Java emploie des StringBuffer qui sont beaucoup plus rapides que des String. Depuis Java 1.5 des StringBuilder peuvent être employés, elles sont encore plus rapides que les StringBuffer. J'ai modifié le source pour voir le gain apporté par ce nouveau type de donnée et le gain a été de 200.

Nous pouvons remarquer que les performances obtenues par les versions Java sont inférieures à celle obtenue dans le précédent article. La version 64 bits de la JVM serait moins performante que la version 32 bits?

Idem que précèdent les performances sont moins bonnes.

La version C++ est dans une classe à part, elle est 3 fois plus rapide que les versions Java.


Les versions Java se sont rapprochées de la version C++ par rapport à la l'article précédèrent.


L'écart dans l'article précédemment était faible, il augment cette fois-ci.


Les résultats sont décevant pour Java 1.6, la version 1.5 est 24% plus rapide.


Aucune amélioration notable du côté de Java

Emprunte mémoire

Durant l'exécution des tests, le taux de mémoire employée et le taux d'usage du CPU ont été pris. Pour l'ensemble des tests, le CPU était utilisé à 99,9%. Concernant la mémoire, c'est plus complexe étant donné que des librairies sont partagées et ne sont pas prises en compte par les outils d'évaluation. Néanmoins à l'aide de la commande top, j'ai pu remarquer que C++ s'en sortait beaucoup mieux que ses confrères. Les versions de Java font majoritairement 50% mieux que la version de GCJ.

Facteur à prendre en considération

Performance

Les performances sont importantes, afin de bien optimiser un logiciel, l'utilisation de profiler est indispensable. Ce type d'outils permet de savoir où sont les goulots d'étranglement de l'application. Il est plus sage d'investir du temps dans une portion qui exécuté à 45% du temps par le logiciel qu'une autre qui n'est exécutée que 2% du temps.

Java permet de faire appel à du C++ à l'aide de JNI. À partir d'un programme Java, il est ainsi possible de faire appel à des fonctions en C++. Cette approche peut s'avérer intéressante lorsqu'une portion critique d'un programme Java n'atteint pas les performances souhaitées. 

L'expérience du programmeur n'est pas un facteur à négliger. Même s'il est possible de faire du code très rapide en C++, encore faut'-il être en mesure d'y parvenir sans même la stabilité du système en péril.

Temps de développement

Un autre critère qui a pris de l'importance depuis plusieurs années est le temps de développement. D'ailleurs, c'est un des points qui a favorisé le succès de Java. L'api est très riche et permet d'éviter de devoir employer de nombreuses librairies externes telles que bd, gui... qui sont difficilement portable d'un système d'exploitation à l'autre sans compté les risques d'incompatibilité. Il y a quelques années, j'ai dû porter un langage de script de Qnx vers Linux. Énormément de changement ont dû être fait, certaines API n'existaient pas sous Linux et auraient dû être écrites au complet. Cela a contribué à restreindre certaines fonctionnalités lors du portage. Idem pour une application qui fonctionnait sous Unix. Linux ne gérait pas les chaînes de caractère nulles comme le faisait Unix. Java apporte aussi la robustesse aux applications. La JVM effectue de nombreuses opérations qui sont laissées aux programmeurs en C++. C'est surement une des raisons qui fait en sorte que Java devient de plus en plus populaire dans les systèmes embarqués.

Future

Maintenant que les performances de Java sont rendues près du C++, Sun pourrait commencer à regarder d'autre approche pour améliorer Java. La JVM charge au démarrage d'un programme Java que le nécessaire, ensuite le tout est compilé et optimisé pour le processeur en cours. Cette opération est réalisée à chaque que le programme est démarré. La JVM pourrait sauvegarder le tout et réutiliser ce qui a été généré. Il y a de fortes chances que les performances soient meilleures et que moins de mémoire serait utilisée.

Conclusion

GCJ s'est améliorée depuis le premier article. Java 1.6 est encore en phase bêta, mais la majorité des résultats démontrent que les performances se sont améliorées. Les programmes compilés à l'aide de C++ obtiennent souvent les meilleurs résultats, fait à noter, les performances ne font pas tout, d'autres facteurs sont à prendre à considération lors de la phase de développement d'un logiciel. Il semble que la version 64bits de la JVM ne soit pas encore assez optimisée par rapport à la version 32 bits. Ne pas oublier que la version 1.6 est en phase bêta, ce qui influence directement les performances et stabilités.

jeudi 29 juin 2006

Les webcams sous Linux


Les webcams sous Linux

Les webcams sont de plus en plus utilisées. Elle permette d'ajouter une autre dimension lors de communication avec des logiciels de messageries instantanés. Il est enfin de possible de voir la personne. Un autre aspect non négligeable est la sécurité, les webcams permettent de surveiller un endroit à très faible coût.

Les webcams sont supportées sous Linux grâce au driver spca5xx. La liste des caméras supportées est disponible à mxhaard.

Installation

Les caméras sont maintenant détecté automatiquement. La procédures ci-dessous est gardé à des fins informatiques et n'est donc plus nécessaire.

Débranchez votre caméra avant de continuer. Télécharger le paquet de votre distribution (rpm, deb...).

Si aucun n'est disponible, télécharger les sources des drivers.
L'installation des sources nécessite d'avoir les sources du noyau, gcc, make, SDL-devel. Effectuer les commandes ci-dessous avec le compte administrateur (root).
make clean
make
make install

Ensuite exécutez la commande
modprobe spca5xx

Branchez votre caméra, si vous tapez dans une console la commande dmesg, vous devriez avoir de l'information concernant votre caméra. Si rien n'apparait, débrancher votre caméra et redémarrer votre machine. Ensuite rebrancher votre caméra et vérifier si vous obtenez bien les informations décrites plutôt. Si vous n'obtenez toujours rien, demander de l'aide sur notre forum.

Utilisation de votre webcam

Messagerie instantanée

Kopete gère de multiples protocoles de messagerie instantanée. Vous pouvez utiliser votre caméra avec les protocoles de Yahoo et de msn. Pour tester si votre caméra fonctionne, démarrez kopete, cliquer sur le menu Configuration et ensuite sur Configurer.... Finalement cliqué sur l'icône représentant une caméra. Après quelques secondes, vous devriez voir les images capturées par la caméra. Assurez-vous d'avoir la version la plus récente de kopete.

CamStream

CamStream est un logiciel qui permet d'enregistrer des images et de les envoyer sur un serveur. Des vidéos peuvent être enregistrés.





Nous pouvons remarquer qu'il est possible d'employer camstream pour surveiller un lieu. Il suffit de spécifier un serveur ftp afin qu'il puisse recevoir les images capturées. Ce logiciel prend des captures à intervalles réguliers, il y a pas de détection de mouvement de réalisée. Si l'interface de temps entre deux captures est faible, l'espace pris peut rapidement devenir important.

Motion

Motion est un logiciel parfait pour effectuer de la surveillance. Une tonne de paramètres sont disponibles.

Installation

L'installation de motion n'est pas très évidente. Motion nécessite ffmpeg, mais seul quelques versions bien spécifiques fonctionne. Si votre distribution offre un paquet pour motion employé le.

Téléchargez la version de ffmpeg disponible ici spécialement pour motion.
Effectuez les commandes suivantes
./configure --enable-shared
make
make install

FFMPEG est maintenant installé. Assurez-vous d'avoir MySQL ou PostgreSQL pour installer Motion. La librairie jpeg est aussi nécessaire. Tapez les commandes suivantes
./configure
make
make install

Une fois que motion est installé, il faut le configurer. Rechercher le fichier motion-dist.conf et changer son nom pour motion.conf. Copiez le fichier qui a été renommé dans le répertoire de votre usager. Sous Suse, ce fichier ce trouve dans le répertoire /usr/local/etc/.
Quelques propriétés doivent être modifiées.
Changer la valeur pour la norme employée dans votre région.
# The video norm to use (only for video capture and TV tuner cards)
# Values: 0 (PAL), 1 (NTSC), 2 (SECAM), 3 (PAL NC no colour). Default: 0 (PAL)
norm 1

Changez la hauteur et largeur des images capturées.
# Image width (pixels). Valid range: Camera dependent, default: 352
width 640 

# Image height (pixels). Valid range: Camera dependent, default: 288
height 480 
Indiquez le nombre maximal d'images que votre caméra peut capturé, la plupart son limité à 30 images par seconde.
# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).
framerate 30 

Ajustez les différents paramètres disponibles pour la caméra au niveau de l'image. Il peut être utile de démarrer motion, changer les valeurs et ainsi de suite jusqu'à ce que le résultat réponde à nos attentes.
# Set the initial brightness of a video device.
# If auto_brightness is enabled, this value defines the average brightness level
# which Motion will try and adjust to.
# Valid range 0-255, default 0 = disabled
brightness 150

# Set the contrast of a video device.
# Valid range 0-255, default 0 = disabled
contrast 150

# Set the saturation of a video device.
# Valid range 0-255, default 0 = disabled
saturation 0

# Set the hue of a video device (NTSC feature).
# Valid range 0-255, default 0 = disabled
hue 0

La quantité de détails différents dans une image afin de détecter qu'il y a eu réellement un mouvement. Cette valeur peut s'avérer importante si votre webcam est située près d'une fenêtre ouverte. Une valeur plus élevée que 1 évitera de prendre des images du rideau qui bouge.
# Picture frames must contain motion at least the specified number of frames
# in a row before they are detected as true motion. At the default of 1, all
# motion is detected. Valid range: 1 to thousands, recommended 1-10
minimum_motion_frames 1
La dernière possibilité qui sera vue est la gestion des évènements. Motion permet d'effectuer des actions lorsqu'un évènement démarre, termine... Il est ainsi possible d'exécuter un script. Les possibilités deviennent alors illimitées. Il y a un évènement qui se produit lorsqu'un enregistrement vidéo débute et se termine. Il y en a un autre lorsque capture est effectué.
# Do not sound beeps when detecting motion (default: on)
# Note: Motion never beeps when running in daemon mode.
quiet on

# Command to be executed when an event starts. (default: none)
# An event starts at first motion detected after a period of no motion defined by gap 
; on_event_start value

# Command to be executed when an event ends after a period of no motion
# (default: none). The period of no motion is defined by option gap.
; on_event_end value

# Command to be executed when a picture (.ppm|.jpg) is saved (default: none)
# To give the filename as an argument to a command append it with %f
#; on_picture_save value
on_picture_save /home/paul/bin/send_email.sh %f

# Command to be executed when a motion frame is detected (default: none)
; on_motion_detected value

# Command to be executed when a movie file (.mpg|.avi) is created. (default: none)
# To give the filename as an argument to a command append it with %f
; on_movie_start value

# Command to be executed when a movie file (.mpg|.avi) is closed. (default: none)
# To give the filename as an argument to a command append it with %f
; on_movie_end value

Il est possible de remarquer avec le code ci-dessus que le script send_email.sh est excuté lorsqu'une image est sauvegardé, %f est envoyé en paramètre à ce script. À toutes les fois qu'une image est sauvegardée, elle est envoyée par courriel.
Motion sauvegarde en local les images. Si un voleur réussit à voler votre ordinateur, vos images seront perdues. Il est donc important que vous sauvegardez vos images et vidéo à un autre endroit. Si votre voleur est futé, il analysera votre ordinateur et pourrait trouver le lieu distant de sauvegarde que vous avez employé. Une solution peut consister à crypter votre disque dur. Pensez sécurité!
En parcourant le fichier de configuration de Motion, regarder bien les options, il y en a beaucoup. Il est possible par exemple de tout entreposé dans une base de données.

Démarrage de motion

Motion intègre un serveur Web, le port 8080 est utilisé. Il est possible de configuré motion, d'effectuer des captures d'écran, démarré l'enregistrement vidéo.... avec l'interface Web. Motion ne possède pas d'interface graphique mise à part cet interface là.
motion -c /home/paul/motion.conf

Nous avons vu comment utiliser sa caméra web sous Linux ainsi que divers logiciels qui peuvent mettre à contribution votre caméra.

dimanche 25 juin 2006

Serveur FTP - vsftpd


Serveur FTP - vsftpd

Un serveur FTP est très utile pour permettre à des usagers d'accéder à certains de nos fichiers sans consommer beaucoup de ressource. Nous allons voir comment mettre en oeuvre un serveur FTP sous Linux. Le serveur FTP choisi est vsftpd et la distribution est Suse.

Installation

Installez vsftpd à l'aide de votre gestionnaire de paquet où à l'aide des sources. Sous Suse, il est inclus sur les CD ou DVD

Configuration

Un fichier de configuration est inclus avec ce serveur FTP, il se nomme vsftpd.conf et devrait être situé dans le répertoire etc.

Le fichier inclus permet d'avoir un serveur FTP qui accepte les connexions anonymes seulement.

La chaîne ftpd_banner, permet de définir un message lorsqu'un usager se connecte
ftpd_banner="Bienvenue au serveur ftp La boîte à prog."

Si vous désirez avoir un accès passif, vous devez mettre la chaîne pasv_enable à yes. De plus, vous devez ajouter
pasv_min_port=9999
pasv_max_port=9999

Si vous désirez démarré vsfpd en tant que programme, listen doit être à yes. Si vous mettez cette chaîne à no, sous Suse vous allez devoir activer vsftp en tant que service. Activez ce service à partir de yast xinetd (service réseau). N'oubliez par d'ouvrir le port 21 si vous avez un pare-feu, de plus activé le port 20 et 9999 si vous avez activé le mode passif.

Sous Suse, le répertoire pour le serveur FTP est: /srv/ftp/. Les usagers du FTP verront les fichiers qui s'y trouvent.

Les usagers qui ont un compte sur la machine peuvent accéder au FTP avec leur nom d'usager et mot de passe si la chaîne local_enable est à yes.

jeudi 15 juin 2006

Linux, Apache, Mysql, Php


Linux, Apache, Mysql, Php

Installation

Sous suse, assurez-vous que la case Vérification automatique soit cochée et installer les paquets apache2, apache2-mod_php5, apache2-prefork, php5, php5-gd, php5-mbstring, php5-mysql, php5-odbc, phpMyAdmin, mysql, mysql-client, mysql-devel, mysql-shared, perl-DBD-mysql, php5-bz2, php5-zlib, php5-iconv, php5-mcrypt, pwgen.

Configuration de mysql

Nous allons démarrer mysql et ensuite assigner un mot de passe pour l'administrateur.
linux64:/home/collinm # /etc/init.d/mysql start
Creating/Updating MySQL privilege database...
Installing all prepared tables
Fill help tables
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h linux64.site password 'new-password'
See the manual for more instructions.

You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:
cd sql-bench ; perl run-all-tests

Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at https://order.mysql.com
Updating MySQL privilege database...
Fixing privilege tables...
Starting service MySQL                                                done
Inscrivez le mot de passe de l'administrateur de la base de donnée
/usr/bin/mysqladmin -u root password 'votremotpasse'
/usr/bin/mysqladmin -u root -h votreHostName.site password 'votremotpasse'

Configuration de apache

Nous allons maintenant modifier quelques valeurs du fichier httpd.conf. Ce fichier est situé dans /etc/apache2.

La première valeur qui sera modifiée sera la chaîne DirectoryIndex. Cette chaîne liste les ressources qui sont regardées lorsqu'une requête a lieu. Si vous spécifiez que le nom de votre hôte ou votre adresse IP sans spécifier de page web, le serveur vérifiera la présence des fichiers de cette chaîne.
DirectoryIndex index.html index.html.var index.htm index.php

Si rien n'est spécifié par le client, le serveur affichera la page index.html si elle existe et ainsi de site.

Configuration de phpMyAdmin

Recherchez le fichier config.inc.php. Il est situé dans le répertoire /srv/www/htdocs/phpMyAdmin/libraries/ sous Suse 10.1

Recherchez la chaîne PmaAbsoluteUri et inscrivez
$cfg['PmaAbsoluteUri'] = 'localhost/phpMyAdmin';

Nous allons ensuite écrire le nom de l'usager ainsi que son mot de passe dans la configuration de phpMyAdmin.
$cfg['Servers'][$i]['user']          = 'root';      // MySQL user
$cfg['Servers'][$i]['password']      = 'votremotpasse';

Si vous désirez plus de sécurité, créez un autre usager dans mysql. Ensuite, utiliser cet usager dans la configuration de phpMyAdmin. Cet usager devrait avoir des droits limités. La documentation de mysql sur le sujet est disponible ici.

Démarrage

Nous allons démarrer apache.
/etc/init.d/apache start
/etc/init.d/mysql start

Vos pages Web doivent être copiées dans le répertoire: /srv/www/htdocs/. Les droits de lectures doivent leurs être attribués. Démarrez votre navigateur et tapez: http://localhost/. Si vous avez une page Web qui a un nom qui est inclus dans la chaîne DirectoryIndex décrite plus haut, elle s'affichera. Sinon inscrivez le nom d'une page Web que vous avez dans le répertoire.

Si vous avez des problèmes, vérifier le fichier d'erreur qui se trouve dans: /var/log/apache2.
Si vous inscrivez : http://localhost/phpMyAdmin, vous allez avoir un accès graphique à votre base de donnée mysql.

Vous voilà avec un serveur Web avec de nombreuses fonctionnalités qui demande qu'à être exploité

samedi 13 mai 2006

Les patrons


LES PATRONS

Il arrive régulièrement dans un domaine qu'il y ait des problèmes récurrents. L'informatique ne fait pas exception. Les programmeurs doivent régulièrement résoudre les mêmes problèmes.

Les patrons tentent de corriger cette lacune. Les patrons ressoudent de façon globale ces problèmes classiques. Les patrons ne sont pas liés à une implémentation. L'utilisation de cet outil permet d'avoir une solution qui a été éprouvée. Ils font parties des concepts de bonne pratique prôné par le génie logiciel. Il permet de résoudre un problème qui a été résolu maintes fois. Plusieurs solutions peuvent exister, mais certaines peuvent être plus adéquates que d'autres. Les utiliser permet d'économiser du temps et d'avoir une solution rapidement. À long terme, on pourrait dire que le but serait d'avoir un "handbook" tel qu'on en retrouve en mécanique et électronique.

Documentation

Il y a de plus en plus de patron qui est créé. La création d'une documentation pour un patron permet de partager nos connaissances et d'offrir une solution à plusieurs personnes qui pourront à leurs tours l'utiliser. Il est ainsi possible de déceler les problèmes s'il y en a et d'améliorer la solution.
La documentions d'un patron suit une syntaxe particulière.
  • Nom du patron, il doit être signification
  • Une description du problème que le patron tente de résoudre
  • Le contexte du patron.
  • Forces, une liste des points négatifs et positifs du patron
  • Une solution possible pour résoudre le problème
  • On crée un exemple

Divers patrons

Singleton

Description

Le Singleton s'assure qu'une seule instance de la classe est créée.

Contexte

Il y a plusieurs occasions où une seule instance d'un objet doit exister. Ce patron s'applique dans les situations où le nombre d'instances d'un programme doit être unique. Il n'est donc pas possible d'ouvrir plusieurs fois le même programme. Imaginez que vous écrivez une classe qui permet d'écouter un mp3. Si deux instances fonctionnent simultanément, l'utilisateur n'entendra rien. La classe écrite devrait terminer le flux audio courant et démarrer le nouveau.

Forces

Il n'y a qu'une instance de créée. Cette instance est accessible à tous ses clients et aux autres classes qui accèdent à elle. Il y a un gain au niveau de la mémoire.

Solutions

Il y a de nombreuse façon possible de s'assurer qu'une seule instance existe. Un moyen simple serait d'employer une variable globale, mais on peut rapidement rendre le programme illisible et difficile à maintenir. Une meilleure approche consiste à donner la responsabilité à la classe. La classe peut ainsi être en mesure de créer une instance seulement si aucune autre n’existe. Il est aussi possible de créer une fonction recevant une classe en paramètre et de vérifier à l'aide d'une variable si une autre instance existe.

Exemple

Le premier exemple utilisera une fonction afin de restreindre la classe à une seule instance. Cette fonction est codée en php.

function staticInstance($class) {
    static $instance; 
    if(!isset($instance)) { 
        $instance =& new $class; 
    }
    return($instance); 
}

La fonction reçoit une classe en paramètre, une variable statique est créée, si l'instance
n'existe pas on crée une instance de la classe.
Dans cet autre exemple, c'est la classe elle-même qui vérifie si une instance existe déjà.

public class Singleton
{
  private Singleton() {}

  static private Singleton instance;

  static public Singleton getInstance() {
    if (instance == null) 
      instance = new Singleton();
    return _instance;
  }
}

Le constructeur de cette classe est privé afin d'empêcher l'instanciation en dehors de la classe. Cette variable
de classe ne peut donc pas être accédé et modifié par aucune autre classe. Une instance de Singleton
sera créée lors du premier appel de getInstance. Instance aura donc une valeur nulle. 
S'il y a d'autres appels, la valeur ne sera pas nulle et une référence sur l'objet Singleton existant
sera retournée.

Façade

Description

Cache l'accès de nombreux objet derrière une classe

Contexte

Une classe x peut avoir de nombreuses relations avec d'autres classes. Il est alors fastidieux d'employer cette classe x, car cette classe doit en connaître plusieurs autres. La classe x devient alors plus difficile à réutiliser. Le patron façade ajoute une barrière entre la classe de base et les autres. La complexité est ainsi masquée.

Force

Il y a simplification de la classe client, déplace la complexité vers la classe façade.

Solution

L'objet façade permet l'accès direct à d'autres objets qui fournit la fonctionnalité désirée via une méthode.

Object pool

Description

Gérer la réutilisation des objets

Contexte

Il arrive souvent que plusieurs clients utilisent les mêmes ressources. Il peut être intéressant de limiter le nombre d'accès à ces ressources afin d'obtenir de bonnes performances. Un serveur Web qui fait des accès à une base de données peut-être rapidement mis à bout de souffle si toutes les connexions demandées sont acceptées. Chaque connexion à la base de donnée prend du temps et il y a dégradation des performances à chaque connexion d'ajoutée. Il est souvent possible d'utiliser les instances existantes.

Forces

Limiter le nombre d'instances créé, donc limiter les ressources utilisées. Éviter de créer des ressources afin d'utiliser ce qui existe déjà.

Solution

La réutilisation d'instance est privilégié. Il est possible d'utiliser un tableau lorsqu'on limite le nombre d'instances. L'objet qui crée l'instance doit être celui qui compte aussi les instances créées. Il y a donc un gestionnaire. La façon de prendre un objet de la pool et d'y retourner un objet est importante.

Exemple

Lors de de la première initialisation du ArrayPoolManager, un tableau est créé pour y entreposer les objets. Lors d'une insertion ou suppression, la quantité d'objets est mise à jour. La méthode getObject permet d'obtenir un objet dans la liste. L'objet est retourné. La méthode putObject remet un objet dans la pool. Cette méthode est employée lorsqu'on n'a plus besoin de l'objet. Le code source a été pris du site : microjava.
/**
    * Tableau qui contient les objets prêt à être utilisé
    */
   private Object[]  m_Pool;
    /**
    * La taille maximale du tableau
    */
   private int       m_Capacity;
   /**
    * Le prochain projet disponible, -1 signifie qu'il y a aucun objet.
    */
   private int       m_NextAvail = -1;
 
   public ArrayPoolManager(int capacity)
   {
      m_Capacity = capacity;
      m_Pool = new Object[m_Capacity];
   }


   public Object getObject()
   {
      /* Vérifie si un objet est disponible pour être retourné */
      if (m_NextAvail >= 0)
      {
         /*Libère l'objet du tableau, seul l'appelant à une référence à l'objet*/

         Object t = m_Pool[m_NextAvail];
         m_Pool[m_NextAvail--] = null;
         return t;
      }
 
      return null;
   }
   
   public void putObject(Object obj)
   {
      if (m_NextAvail < m_Capacity)
      {
         m_Pool[++m_NextAvail] = obj;
      }
   }
Les gains s'améliorent à mesure: que le nombre d'objets nécessaires s'accroît et que la complexité des objets est grande.

Délégation

Description

donnée des responsabilités d'une classe à une autre.

Contexte

Il arrive fréquemment qu'on utilise l'héritage afin d'obtenir les méthodes et attribut d'une classe. C'est un des concepts clés de la programmation orientée objet. En utilisant à outrance cette technique, des problèmes sur le plan des performances peuvent survenir.

Forces

Limiter le couplage, mais augmenter la cohésion. L'héritage est moins utilisé. Le code est donc plus simple et les mises à jour sont plus aisées à effectuer. Le code peut par contre être moins clair.

Solutions

Via une instance de classe dans un objet, on accède à ces méthodes.

Exemple

On établie un lien des fonctions désirées à l'objet «delageted». L'objet «delegate» implémente les fonctions voulues qui sont liées à une fonction de l'objet «delageted».


class Delegated
{
    public int fonction1(String args)
    {

    }
}

class Delegate
{
    protected delegated = new Delegated();

    public int fonction1(String args)
    {
         //On appele l'objet Delegated
         return delegated.fonction1(args);
    }
} 

Quelques patrons ont été abordés dans cet article. Il en existe plusieurs autres. Documentez-vous sur le sujet lors de la création d'un système. De cette façon, vous pouvez résoudre vos problèmes de façon efficace

samedi 8 avril 2006

Configurer son clavier multimédia sous Linux


CONFIGURER SON CLAVIER MULTIMÉDIA SOUS LINUX

La technique qui sera présentée emploie les touches Fx du clavier. Les claviers possèdent habituellement 12 touches Fx, mais d'autres sont gérés par le système. Il est donc possible d'assigner une action à ses touches.
Il faut lancer xev afin de connaitre le code des touches.



Appuyez sur une de vos touches multimédias. Un bloc de texte similaire à ci-dessus devrait s'afficher. Prenez en note la valeur après «keycode».

KeyRelease event, serial 15, synthetic NO, window 0x3c00001,
    root 0x135, subw 0x0, time 44273600, (656,558), root:(660,585),
    state 0x10, keycode 36 (keysym 0xff0d, Return), same_screen YES,
"   XLookupString gives 1 bytes: (0d) "

Effectuez cette opération pour chacune de vos touches multimédias.
Prenez chacune des valeurs des «keycode» trouvées et assignez-les à une touche Fxx. Voici un petit exemple pour mon clavier multimédia.

#!/bin/bash
###########################################
# keycodes.sh
# FORMAT: keycode=Fxx
###########################################
xmodmap -e 'keycode 236=F13' # e-mail
xmodmap -e 'keycode 178=F14' # www
xmodmap -e 'keycode 230=F15' # home folder
xmodmap -e 'keycode 162=F16' # play-pause
xmodmap -e 'keycode 176=F17' # raise volume
xmodmap -e 'keycode 174=F18' # lower volume
xmodmap -e 'keycode 160=F19' # mute
xmodmap -e 'keycode 237=F20' # media
xmodmap -e 'keycode 235=F21' # computer
xmodmap -e 'keycode 161=F22' # calculator
exit 0

Exécutez ce script lors du démarrage de Kde. Vous pouvez mettre ce script dans le répertoire /home/~/.kde/Autostart/ de kde. Il est aussi possible de le lancer à partir du fichier .xinit de l'usager.

Démarrez le centre de configuration de Kde, allez dans régionalisation et accessibilité ensuite cliquer sur raccourcis clavier ensuite cliquer sur l'onglet raccourci commande. Choissisez le programme que vous voulez démarrer pour une certaine touche. Dans la section «Raccourcis pour la commande sélectionnée», cliquée sur «Personnalisé». Une petite fenêtre apparaîtra, vous n'avez qu'à cliquer sur la touche multimédia.



Effectuez cette opération pour chacune de vos touches. N'oubliez pas d'exécuter le script ci-dessus afin que Kde puisse reconnaitre vos touches multimédias.
Nous avons jusqu'à maintenant assigner que des programmes à des touches, il est aussi possible d'assigner des scripts à des touches. Certaines touches tel l'augmentation, diminution ou l'arrêt sonore devront utiliser cette approche.

Démarrez le centre de configuration de Kde, allez dans régionalisation et accessibilité et cliquez sur Actions d'entrées. Créer un nouveau groupe et ensuite créer une nouvelle action.

Choissisez Raccourci clavier -> Commande / URL. Dans le raccourci clavier, assigner la touche multimédia voulue. Ensuite cliquez sur l'onglet Paramètres de la commande / de l'URL. Sélectionner le script qui sera exécuté lorsque la touche choisie précédemment sera enfoncée.



Les scripts ci-dessus permettent d'augmenter le volume, diminuer le volume et de couper le son.
 
#!/bin/bash
amixer set PCM +1

#!/bin/bash
amixer set PCM 1-
#!/bin/bash
declare -r TMPVOLFILE="/tmp/kde-${USER}/vol.tmp"
declare -r CRTVOLUME=$(amixer get PCM | grep \
'Front Left:' | cut -d' ' -f6)
declare -i NEWVOLUME

if [ "${CRTVOLUME}" == "0" ]
then
  if [ -f ${TMPVOLFILE} ]
  then
 NEWVOLUME=$(cat ${TMPVOLFILE})
  else
 NEWVOLUME=20
  fi
  amixer set PCM ${TMPVOLFILE}
else
  echo ${CRTVOLUME} > ${TMPVOLFILE}
  amixer set PCM 0
fi

Nous avons vu deux façons de configurer les touches de son clavier multimédia. Elles ont l'avantage d'être faciles à mettre en oeuvre.

samedi 14 janvier 2006

Vmware player


Vmware player

Vmware, bien connu pour ses machines virtuelles, a sorti en décembre 2005 le logiciel vmware player.

Ce logiciel est gratuit et permet d'utiliser les machines virtuelles créées avec leurs autres produits. Il est par contre possible d'installer un système d'exploitation avec la machine virtuelle fournie.

Préparation

Vous pouvez vous procurer vmware-player à l'adresse vmware
Il est possible d'installer le système d'exploitation qu'on désire avec ce logiciel.
Téléchargez la machine virtuelle vide.
Munissez-vous du CD du système désirant être installé.
Il est nécessaire d'avoir les sources du kernel ainsi que le nécessaire pour compiler, si vmware-player n'a pas de module pour votre noyau.

Installation et configuration de vmware-player

Vous devez être root pour effectuer les prochaines opérations
rpm -i VMware-player-1.0.1-19317.i386
Le script ci-dessous configurera vmware-player, il vous posera différentes questions.
vmware-config.pl

Making sure services for VMware Player are stopped.

Stopping VMware services:
   Virtual machine monitor                                             done

You must read and accept the End User License Agreement to continue.
Press enter to display it.


Do you accept? (yes/no) [no] yes

Thank you.

Configuring fallback GTK+ 2.4 libraries.

In which directory do you want to install the mime type icons?
[/usr/share/icons]

What directory contains your desktop menu entry files? These files have a
.desktop file extension. [/usr/share/applications]

In which directory do you want to install the application's icon?
[/usr/share/pixmaps]

Trying to find a suitable vmmon module for your running kernel.

None of the pre-built vmmon modules for VMware Player is suitable for your
running kernel.  Do you want this program to try to build the vmmon module for
your system (you need to have a C compiler installed on your system)? [yes] yes

Using compiler "/usr/bin/gcc". Use environment variable CC to override.

What is the location of the directory of C header files that match your running
kernel? [/lib/modules/2.6.13-15.7-default/build/include]

Extracting the sources of the vmmon module.

Building the vmmon module.

Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config0/vmmon-only'
make -C /lib/modules/2.6.13-15.7-default/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/linux-2.6.13-15.7-obj/i386/default'
make -C ../../../linux-2.6.13-15.7 O=../linux-2.6.13-15.7-obj/i386/default modules
  CC [M]  /tmp/vmware-config0/vmmon-only/linux/driver.o
  CC [M]  /tmp/vmware-config0/vmmon-only/linux/hostif.o
  CC [M]  /tmp/vmware-config0/vmmon-only/common/cpuid.o
  CC [M]  /tmp/vmware-config0/vmmon-only/common/hash.o
  CC [M]  /tmp/vmware-config0/vmmon-only/common/memtrack.o
  CC [M]  /tmp/vmware-config0/vmmon-only/common/phystrack.o
  CC [M]  /tmp/vmware-config0/vmmon-only/common/task.o
  CC [M]  /tmp/vmware-config0/vmmon-only/common/vmx86.o
  CC [M]  /tmp/vmware-config0/vmmon-only/vmcore/moduleloop.o
  LD [M]  /tmp/vmware-config0/vmmon-only/vmmon.o
  Building modules, stage 2.
  MODPOST
  CC      /tmp/vmware-config0/vmmon-only/vmmon.mod.o
  LD [M]  /tmp/vmware-config0/vmmon-only/vmmon.ko
make[1]: Leaving directory `/usr/src/linux-2.6.13-15.7-obj/i386/default'
cp -f vmmon.ko ./../vmmon.o
make: Leaving directory `/tmp/vmware-config0/vmmon-only'
The module loads perfectly in the running kernel.

Do you want networking for your virtual machines? (yes/no/help) [yes]

Configuring a bridged network for vmnet0.

The following bridged networks have been defined:

All your ethernet interfaces are already bridged.

Do you want to be able to use NAT networking in your virtual machines? (yes/no)
[yes]

Configuring a NAT network for vmnet8.

Do you want this program to probe for an unused private subnet? (yes/no/help)
[yes]

Probing for an unused private subnet (this can take some time)...

The subnet 172.16.177.0/255.255.255.0 appears to be unused.

The following NAT networks have been defined:

Do you wish to configure another NAT network? (yes/no) [no]

Do you want to be able to use host-only networking in your virtual machines?
[yes]

Configuring a host-only network for vmnet1.

Do you want this program to probe for an unused private subnet? (yes/no/help)
[yes]

Probing for an unused private subnet (this can take some time)...

The subnet 172.16.216.0/255.255.255.0 appears to be unused.

The following host-only networks have been defined:

Do you wish to configure another host-only network? (yes/no) [no]

Extracting the sources of the vmnet module.

Building the vmnet module.

Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config0/vmnet-only'
make -C /lib/modules/2.6.13-15.7-default/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/linux-2.6.13-15.7-obj/i386/default'
make -C ../../../linux-2.6.13-15.7 O=../linux-2.6.13-15.7-obj/i386/default modules
  CC [M]  /tmp/vmware-config0/vmnet-only/driver.o
  CC [M]  /tmp/vmware-config0/vmnet-only/hub.o
  CC [M]  /tmp/vmware-config0/vmnet-only/userif.o
  CC [M]  /tmp/vmware-config0/vmnet-only/netif.o
  CC [M]  /tmp/vmware-config0/vmnet-only/bridge.o
  CC [M]  /tmp/vmware-config0/vmnet-only/procfs.o
  CC [M]  /tmp/vmware-config0/vmnet-only/smac_compat.o
  SHIPPED /tmp/vmware-config0/vmnet-only/smac_linux.x386.o
  LD [M]  /tmp/vmware-config0/vmnet-only/vmnet.o
  Building modules, stage 2.
  MODPOST
Warning: could not open /tmp/vmware-config0/vmnet-only/includeCheck.h: Invalid argument
  CC      /tmp/vmware-config0/vmnet-only/vmnet.mod.o
  LD [M]  /tmp/vmware-config0/vmnet-only/vmnet.ko
make[1]: Leaving directory `/usr/src/linux-2.6.13-15.7-obj/i386/default'
cp -f vmnet.ko ./../vmnet.o
make: Leaving directory `/tmp/vmware-config0/vmnet-only'
The module loads perfectly in the running kernel.

Would you like to enable the Google searchbar? (yes/no) [no]

Starting VMware services:
   Virtual machine monitor                                             done
   Virtual ethernet                                                    done
   Bridged networking on /dev/vmnet0                                   done
   Host-only networking on /dev/vmnet1 (background)                    done
   Host-only networking on /dev/vmnet8 (background)                    done
   NAT service on /dev/vmnet8                                          done

The configuration of VMware Player 1.0.1 build-19317 for Linux for this running
kernel completed successfully.

You can now run VMware Player by invoking the following command:
"/usr/bin/vmplayer".

Enjoy,

--the VMware team
Si vous avez des problèmes avec ce script, il est fort possible que votre noyau soit plus récent que ceux supportés par vmware. Téléchargez le fichier vmware-any-any-update. Vous devez le fichier runme.pl qui se trouve à l'intérieur de cette archive.
Insérez le cd du système d'exploitation voulant être installé.
Pour ce test, j'ai employé Windows 98 second edition.
Démarrer vmware-player et cliquer sur Esc, sélectionnez cdrom
Sélectionné l'image vide, télécharger plutôt




Répondez "Create" au message suivant


L'installation du système débute


Une fois l'installation terminée, lorsque vous démarrez vmware-player, il suffit d'indiquer où se trouve la machine virtuelle désirant être démarrée.

Conclusion

L'installation du système a bien fonctionner. Windows 98 SE s'est avéré beaucoup trop lent d'emploi avec un athlon 1800+ et 512 meg de ram, 168meg de ram était associé au système.

À l'installation, la configuration du matériel est très longue (tout le reste se fait rapidement). Toute action prenait beaucoup de temps. À ce niveau, même qemu faisait mieux. Le plus rapide étant win4lin pour cet os (étant donné qu'il utilise le système de fichier de linux, au lieu de créer qu'un seul gros fichier comme vmware. Ce problème n’existe pas avec Windows 2000 et Windows XP.

Vous savez maintenant quels outils utilisés en fonction de du système d'exploitation voulant à être exécuté.