jeudi 18 juin 2009

Conception de bases de données




Ce livre s'adresse aux gens devant concevoir une base de données. Plusieurs exemples sont expliqués afin de mieux cerner les besoins de l'usager, intégrer les règles de gestion et modéliser les données et processus.

Beaucoup de diagrammes et d'illustrations facilitent la compréhension des concepts et méthodes présentés. Les non-initiés apprécieront que les concepts et commandes du SQL soient aussi bien expliqués en détail. Beaucoup de conseils sont donnés par les auteurs.

Le cycle complet de conception de base de données y est présenté, de l'analyse jusqu'à la maintenance. Beaucoup d'exemples sont présentés.

Ceux ayant déjà de très bonne connaissance en SQL trouveront surement ce livre moins utile, mais pourra servir à se remémorer certains principes oubliés

jeudi 14 mai 2009

Revue de code, Peer Code review


Revue de code, Peer Code review

Les erreurs sont omniprésentes dans divers domaines tel la programmation. Il existe cependant divers méthode afin de réduire les problèmes lié au développement. La revue de code est l'une d'entre elle. Elle est une étape cruciale dans le cycle de développement logiciel.

Méthode

Quelques méthodes de revue de code existe. Chacune présente des avantages et des inconvénients selon le type de développement employé.

Analyse par dessus l'épaule (Over the shoulder review)

Deux personnes sont présentes lors de cette personne. L'auteur du code qui dirige et celui qui analyse. Ce derniers, n'est pas nécessairement un informaticien. L'auteur parcourt le code, l'autre peut lui poser des questions, effectuer des traces le faire réfléchir. L'auteur inscrit les problèmes et les fixes après la rencontre. Cette méthode est très simple à mettre en place. Celui qui analyse, peut trouver de la difficulté à comprendre des algorithmes, portions de code plus complexe. Certaine partie de code peut ne pas être analysé. Cette méthode permet d'effectuer un transfert de connaissance.

Envoi d'email

Cette méthode nécessite l'emploi d'un outils de gestion de code source. Lorsqu'un changement a lieu, un courriel est envoyé aux personnes qui doivent analyser le code. Si un problème est décelé, il l'envoie au développeur. Ce derniers vérifie le problème et le corrige. Grâce à ce genre d'outils, tous les changements effectués sont retracables. Cette méthode permet de faire des analyses de code à distance. Les personnes n'ont pas besoin de se rencontrer. Cependant, étant donné la possibilité d'éloignement, l'analyse du code peut être plus longue, car il peut avoir plusieurs échanges entre les personnes.

Programmation en paire (Pair Programming)

Cette méthode de programmation implique que deux personnes soient devant un ordinateur. Un seul tape sur le clavier, mais les deux sont discussion, s'échange des idées. Des statistiques démontrent que cette approche permet de déceler plus d'erreur tout en effectuant un transfert de connaissance entre les participants. Cependant, elle nécessite que deux participant travaillent en commun ce qui coûte plus chère en terme de ressource, temps.

Liste de contrôle (check-list)

D'après plusieurs professionnels du domaine, dont Jason Cochen c'est une des méthodes les plus efficaces. Cette méthode consiste à créer une liste de point à vérifier dans le code. Voici par exemple, quelques points.
  • Est-ce que les cas où un objet peut être nul est vérifié
  • Est-ce que les limites d'un tableau sont bien vérifiés pour ne pas dépasser sa taille
  • Est-ce que les ressources sont bien libérés
  • Est-ce qu'une gestion est faite lorsque des paramètres invalides sont utilisés dans une méthode
  • Est-ce que les méthodes sont bien documentés
  • Est-ce que les algorithmes complexes sont expliqués et justifiés
  • Est-ce que les objets accessibles par plusieurs threads sont seulement accessible via un verrou (lock)
  • Est-ce que les objets sont dupliqués utilement
Cette liste est incomplète, à mesure que vous faites des vérification, vous allez voir des points à ajouter à cette liste.
Un exercice intéressant à faire est d'utiliser cette liste sur notre code et de faire des statistiques. Ainsi, vous pourriez connaître les erreurs que vous faire le plus fréquemment et être d'avantage attentif à ceux là. Si une autre personne vérifie votre code, vous pourriez lui spécifier ses erreurs plus fréquentes. De façon globale, utilisé en entreprise, les erreurs les plus fréquentes seraient ainsi connu.

Avantage

Coût

La découverte d'un problème peut être faite à toute étape du cycle du développement logiciel. Le coût ne sera par contre par le même, s'il est trouvé en phase de maintenant qu'en phase de conception. Plus que le problème sera trouvé tardivement, plus le coût sera élevé. Il faudra trouvé une solution, la testé, effectuer divers test de régression. Le changement peut avoir divers répercussion sur le système en place. Le support technique est ainsi réduit.

Qualité

Utiliser cette approche permet de déceler plus de problème, d'erreur, d'améliorer la robustesse du code. Au final, la qualité du système est ainsi augmenté. L'équipe de développement en sort grandie car ainsi, elle apprend à utiliser les bonnes techniques. En adoptant toujours ces bonnes pratiques, le cycle de développement entre dans une phase d'optimisation, où chaque développement devient de plus en plus de qualité. L'apprentissage d'erreur, permet habituellement de ne plus les refaire.

Outils

Un outils doit être en mesure d'effectuer le plus de tâche possible d'une revue de code. Gérer les fichiers (réception, transmission de fichier), commentaire et défaut pris par les participant. En gérant les fichiers, l'outil doit être en mesure de voir les différentes versions du fichiers. Ainsi, les changements sont aisément décelable. Les commentaires, défaut... doivent être associé au fichier. De cette façon, une conversation entre les participants est plus simple à suivre.

dimanche 16 mars 2008

Netbeans, GWT, GWT-EXT, Struts 2


Netbeans, GWT, GWT-EXT, Struts 2

Dans cet article, nous allons mettre en place un environnement de travail pour créer des applications utilisant GWT. Nous utiliserons Netbeans comme environnement de développement. Nous employerons GWT-Ext afin d'avoir accès à plus de composant et nous ajouterons Struts 2 pour avoir appeler une action.

GWT

GWT, Google Web Tookit est un framework java open source qui permet d'écrire des applications AJAX. Gmail, Google Maps utilisent ce framework. Ce framework permet de faciliter le développement d'application en oubliant les contraintes des navigateurs internet.

GWT-Ext

GWT-Ext est une librarie de composant graphique, elle fait le pont entre GWT et Ext.

Struts

Struts est un framework web pour développer des applications Java.Il permet d'employer l'architecture MVC.

Préparation

Nous utiliserons la version 6 de netbeans, vous pouvez la télécharger à cette adresse http://download.netbeans.org/netbeans/6.0/final/. Sélectionner la version comprenant le pack Web & Java EE.

Plugin gwt4nb

Il existe un plugin de gwt pour netbeans. Il permet de faciliter le développement de gwt sous cet éditeur. Le plugin se nomme gwt4nb. Téléchargez la version la plus récente du plugin à l'adresse https://gwt4nb.dev.java.net/. Ensuite installer le plugin dans netbeans. Démarrer netbeans, cliquer sur Tools, sélectionner Plugins. Cliquer sur l'onglet Downloaded et ensuite cliquer sur Add Plugins. Il vous reste juste à sélectionner le plugins et cliquer sur Install.

Autres librairies

Voici la liste complète des jars que vous allez avoir besoins pour ce projet.

gwt-servlet
gwt-dev-windows
gwt-user
struts2gwtplugin
gwtext
xwork
freemarkervoyage sncf
ognl
struts2-core
commons-collections
commons-logging
commons-loogin-adapters
commons-looging-api

Création du projet

Dans netbeans, cliquer sur File, New Project.Sélectionner la catégorie Web et le projet Web Application.

Ensuite spécifier un nom pour le projet et sélectionner votre serveur. Nous avons employé Tomcat, mais j'ai testé avec jboss et ça fonctionne aussi très bien.

Ensuite, vous devez sélectionner le framework Google Web Framework. Si ce framework n'est pas disponible, c'est que vous n'avez pas installer le plugin gwt4nb. Spécifier aussi l'emplacement d'installation de gwt. Spécifier un nom pour le module.

Si vous pouvez exécuter directement le projet, par défaut, vous devriez avoir une page ressemblant à celle-ci.

Maintenant ajouter les librairies mentionnées plus tôt dans ce projet.
Maintenant il faut ajouter les librairies de Ext à notre projet. Créer un répertoire js sous Web Pages. Sous le js, créer un répertoire ext. Ajouter à ce répertoire, le répertoire adapter, ressources et ext-all.js.

Dans le fichier de module (Main.gwt.xml), il faut ajouter la ligne suivante
 <inherits name='com.gwtext.GwtExt'/>
Le fichier devrait maintenant ressembler à
<?xml version="1.0" encoding="UTF-8"?>
<module>
 <inherits name="com.google.gwt.user.User"/>
        <inherits name='com.gwtext.GwtExt'/>
 <entry-point class="org.yournamehere.client.MainEntryPoint"/>
 
</module>
Maintenant il faut ajouter les fichiers de Ext dans notre page hôte GWT.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta name='gwt:module' content='org.yournamehere.Main=org.yournamehere.Main'>
        <title>Main</title>

        <link rel="stylesheet" type="text/css" href="js/ext/resources/css/ext-all.css"/>
        <link rel="stylesheet" type="text/css" href="js/ext/resources/css/xtheme-aero.css" />
        
        <script type="text/javascript" src="js/ext/adapter/yui/yui-utilities.js"></script>
        <script type="text/javascript" src="js/ext/adapter/yui/ext-yui-adapter.js"></script>
        <script type="text/javascript" src="js/ext/ext-all.js"></script>

    </head>
    <body>
        <script language="javascript" src="org.yournamehere.Main/org.yournamehere.Main.nocache.js"></script>
    </body>
</html>

Partie struts

Maintenant pour la partie struts, nous allons créer une action qu'on nommera HelloWorldAction. Créer un package org.yournamehere.action. Voici le code de la classe.
package org.yournamehere.action;

public class HelloWorldAction {

    public String execute() {
        return "Hello World";
    }
}

Sous le répertoire, Source Packages, créer le fichier struts.xml. Dans ce fichier, copier ce code
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
 <package name="samplepackage" extends="gwt-default">
  <action name="Hello" class="org.yournamehere.action.HelloWorldAction">
   <interceptor-ref name="gwt"/>
  </action>
 </package>
</struts>
Dans le fichier web.xml sou WEB-INF, il faudra rajouter de l'information sur les filters de struts.
<display-name>Struts 2 - Starter</display-name>
    <filter>
        <filter-name>action2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>action2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
Maintenant il faut faire le pont entre la partie client et notre action. La partie serveur étant notre action. Créer les deux interfaces ci-dessous.

MyService

package org.yournamehere.client;
import com.google.gwt.user.client.rpc.RemoteService;

public interface MyService extends RemoteService{
    public String execute();
}

MyServiceAsync

package org.yournamehere.client;
import com.google.gwt.user.client.rpc.AsyncCallback;


public interface MyServiceAsync {
    public void execute(AsyncCallback callback);
}

Appel de l'action

Nous allons maintenant faire l'appel de l'action dans le fichier MainEntryPoint.java. Ce fichier devrait ressembler à
package org.yournamehere.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;


public class MainEntryPoint implements EntryPoint {
    
    /** Creates a new instance of MainEntryPoint */
    public MainEntryPoint() {
    }

    public void onModuleLoad() {
        final Label label = new Label("Hello, GWT!!!");
        final Button button = new Button("Click me!");
        
        button.addClickListener(new ClickListener(){
            public void onClick(Widget w) {
                label.setVisible(!label.isVisible());
            }
        });
        
        RootPanel.get().add(button);
        RootPanel.get().add(label);
    }
    
}
Après l'ajout du code pour appeler notre action, votre code devrait ressembler à
package org.yournamehere.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.gwtext.client.widgets.MessageBox;


public class MainEntryPoint implements EntryPoint {
    
    /** Creates a new instance of MainEntryPoint */
    public MainEntryPoint() {
    }
    
    public void onModuleLoad() {
        final Label label = new Label("Hello, GWT!!!");
        final Button button = new Button("Click me!");
        
        button.addClickListener(new ClickListener(){
            public void onClick(Widget w) {
                label.setVisible(!label.isVisible());
                
                callAction();
                
            }
        });
        
        RootPanel.get().add(button);
        RootPanel.get().add(label);
    }
    
    private void callAction() {
        MyServiceAsync service = (MyServiceAsync) GWT.create(MyService.class);
        AsyncCallback callback = new AsyncCallback() {
            public void onSuccess(Object result) {
                MessageBox.alert(result.toString());
            }

            public void onFailure(Throwable caught) {
                MessageBox.alert(caught.toString());
            }
        };
        ServiceDefTarget endpoint = (ServiceDefTarget) service;
        endpoint.setServiceEntryPoint("Hello.action");
        service.execute(callback);
    }
}
Si vous avez bien suivit l'article, lorsque vous appuyez sur le bouton, vous devriez avoir un message.


Nous avons vu comment appelé une action struts 2 dans GWT. Dans l'exemple montré, le bouton employait GWT, mais le message affiché utiliser GWT-Ext. Vous pouvez utiliser les composants de GWT-Ext au lieu de GWT. Un plugin existe pour spring aussi. GWT est une platteforme qui évolue rapidement, il manque encore de documentation surtout pour l'intégration avec d'autre framework.

dimanche 9 décembre 2007

Technique de référencement


Technique de référencement

Être bien positionné dans les moteurs de recherche permet d'augmenter le trafic de son site, accroître son site d'affaire ou bien d'améliorer l'image de sa marque. Le web s'est développé très rapidement  et les algorithmes de recherche des moteurs se sont complexifiés. Nous allons voir quelques méthodes, techniques qui permettent d'améliorer le référencement de son site.

Structurer ses pages

La structuration de ses pages Internet est cruciale afin de faciliter le travail d'indexation des moteurs de recherches. Plusieurs balises html sont préconisées afin d'obtenir le résultat souhaité.
  • description
  • title
  • hx
  • p
  • div
  • ul
  • alt
  • strong
  • em
Le positionnement d'un mot dans une page a de l'importance, plus il est placé tôt, meilleur que c'est pour le référencement.

Nom des url

Il devrait contenir des mots clés similaires au titre, relié au sujet de la page. Apache permet de réécrire l'adresse de votre url. Au lieu d'avoir une url similaire à http://www.laboiteaprog.com/article.php?numero=43?section=1 , il est possible d'obtenir  http://www.laboiteaprog.com/article-43-1-delphi_optimisation

Cette dernière est beaucoup plus significative et permet de cacher la technologie utilisé, elle situe et précise le contexte de la page.

Nom des images

Le nom de l'image devrait contenir des mots reliés à l'image, de plus il faut bien définir la balise alt, même si personne la lie, les moteurs eux l'utilisent.

Contrainte au référencement

  • Éviter de mettre du flash
  • Éviter les frames
  • Faire attention avec les pages dynamiques, limité le nombre de paramètre à 2

Pertinence et popularité des mots

Ce concept est déterminant pour le bon référencement de votre site. Il faut bien identifier les mots clés de votre domaine. Certain moteur tel que Google propose de connaître la popularité des mots recherchés. De cette façon, il est possible de ce concentrer sur les mots importants.
Il ne faut pas oublier les synonymes qui pourraient vous permettre d'être en peloton de tête.Quelques outils en ligne existent afin d'effectuer cette tâche.
En utilisant le même mot dans différentes sections d'une page, nous forçons le moteur à utiliser nos mots clés.
  • titre de la page
  • hx
  • alt
  • p
  • lien, titre de lien
  • liste
Il faut miser sur quelques mot clé par page et essayer de les combiner. Les moteurs de recherchent analysent le texte de différente façon. Le nombre de fois que le mot revient dans la page. Le nombre de fois qu'il revient par rapport au nombre de mot dans la page. Les différentes déclinaisons (majuscule, minuscule, pluriel...) du mot. Il ne faut pas par contre abuser, par exemple utiliser le même mot dans l'url du lien, le nom du lien et dans la balise du titre du lien, car ça pourrait causer l'effet inverse de celui souhaité.

Maintenir son site à jour

Il faut bien maintenir son site web, ajouter du contenu, le modifier car être bien positionné prend du temps.

Échange de lien

C'est l'autre point capitale pour être bien référencé. Il y a différent type d'échange de lien.
  • Lien interne à votre site web
  • Lien entrant et sortant sur un même serveur est pénalisant car c'est détecté comme étant louche
  • Les échanges de lien relié entre eux A -> B -> A ne sont plus pris en compte par Google.
  • Les échanges de lien non relié entre eux A -> B -> C -> A
  • Les site en .org ou .gov sont excellent car ses sites ne sont pas sanctionné par les moteurs de recherche.

Contenu dynamique

Il faut impérativement changer le contenu des zones critiques dans les pages de votre site. Ces zones sont le titre, descripion, nom de page etc. Ces sections devraient être dynamiques. Il est ainsi possible de s'adapter plus aisément.

Outils d'aide

Standard w3c

Le respect des standards web permet de s'assurer que les moteurs de recherche n'auront pas de problème technique à analyser votre site web. Un validateur pour le contenu html et css est disponible.

Générateur de mot clé

Générateur de mot clé adwords

Google Webmestre

Cet outil présente les recherches effectués qui ont permis de faire un clique vers votre site.

Sitemap

Le système de Sitemap aide les moteurs de recherche à l'indexation des pages de votre site. Il est constitué de d'url dans un fichier XML. Ce système est devenu un standard et est utilisé par les ténors du domaine: Google, Yahoo et Microsoft.

Connaître les sites qui ont des liens vers notre site Web

Dans la boîte de navigation de google, il faut inscrire: link:www.laboiteaprog.com
Nous avons vu dans cet article, quelques techniques qui permettent d'être référencé plus efficacement par les moteurs de recherche. Les moyens d'y parvenir exigent de plus en plus de connaissance et de complexité, c'est même devenu un métier très recherché.

lundi 30 avril 2007

Arch vs Kubuntu vs Mandriva vs Opensuse


Arch vs Kubuntu vs Mandriva vs Opensuse

Il y a de plus en plus de distributions, mais seulement quelques éléments les différencient. Je vais mettre en valeur ces différences afin de faciliter le choix d'une de ces distribution.C'est la version 0.8 de Arch linux qui a été utilisée.

La version de mandriva 2007 spring est la powerpack. Une version libre, sans pilotes et logiciels propriétaires (flash, acrobat, ati...) est disponible gratuitement et sans support. Pour suse, c'est la version 10.2.

Une version payante avec du support technique est disponible.Le système utilisé un athlon X2 4200+ avec 1 gig de ram. Une imprimante samsung sur port parallèle et un scanner hp sur port usb font partie du matériel.

Installation

L'installation peut être un facteur clé pour un nouveau venu sous Linux. Si elle est trop complexe, l'utilisateur à de bonnes chances d'aller voir ailleurs, surtout si c'est un débutant ou que la personne manque de volonté.

Arch

L'installation de Arch se fait en mode texte graphique.Il faut tout faire à la main. Avoir un minimum de connaissance sera nécessaire si on rencontre un problème lors de l'installation ou qu'on a une configuration qui sort un peu de l'ordinaire. Pour plus de détails sur cette distribution, vous pouvez regarder l'article: Bien démarrer avec Arch Linux.

Kubuntu

L'installation permet d'appréhender le système qui sera installé car c'est un "live cd". Il suffit de cliquer sur Install pour que l'installation débute. Il est très simple, peu d'options sont proposées, ce qui limite l'utilisateur ayant plus d'expérience.

Mandriva

L'installateur est graphique, simple et remis au goût du jour. Il nous indique où nous en sommes dans le processus d'installation. Des images de certains logiciels nous sont affiché afin de nous montrer ce qu'il est possible de faire avec ce système. Près de 45min pour le système complet.

L'approche prise par Mandriva est assez intéressante. On ne montre que le nécessaire, si l'utilisateur veut plus il clique dans la section prévue à cet effet afin d'avoir plus de choix. Le système configure tout seul la carte de son scanner. Si on a une version payante, à la fin de l'installation, on peut s'enregistrer.Le système est complet et le menu de kde est bien divisé. Tout est fait par catégories.

OpenSuse

L'installateur est graphique et son style fait très ancien. Son interface n'a pas changé depuis plusieurs année. L'installation est assez lente, près de 1h00. OpenSuse montre plus de choix que Mandriva lors de l'installation (authentification...) alors que la majorité prendront le choix par défaut. Enfin, c'est une autre approche que celle de Mandriva. L'usager doit lui-même configurer sa carte son, scanner... Même s'il ne s'agit que de quelques clics, ça pourrait être fait par le système. Le système n'est pas assez complet. On doit obligatoirement ajouter les sources pacman afin de pouvoir profiter pleinement du multimédia.

Gestionnaire des paquets

Chaque distribution utilise son propre système pour installer des paquets. Globalement on peut séparer les programmes en 3 catégories: rpm, deb, autres.

Arch

Elle utilise pacman pour gérer l'installation, suppression, mise à jour de logiciels. Cet outil est en mode console, mais divers outils existent pour l'utiliser en mode graphique. Elle utilise ses propres paquets. L'image ci-dessous présente Jacman qui est un outil graphique pour gérer les paquets de Arch Linux. Son système de paquets est très simple d'utilisation et très rapide.

Kubuntu

L'outil par défaut a une interface qui a beaucoup trop de composants visuels, ce qui peut provoquer une certaine confusion pour un débutant. Heureusement d'autres outils peuvent être installés. Il y a bien sûr un outil console, c'est apt-get.

Mandriva

Elle utilise les rpm. En ligne de commande, urpmi s'est grandement amélioré au niveau de la vitesse et de la gestion des dépendances. Il est aussi possible d'utiliser l'outil en mode graphique.

OpenSuse

Elle aussi utilise les rpm. Toute la gestion des paquets se fait avec yast. Il y a un mode graphique et un mode texte graphique. Cet outil est très lent. De plus la gestion de dépendance cause parfois des problèmes lorsqu'on ajoute d'autres sources. Il faut installer zypper ou smart si on veut obtenir un outil similaire en ligne de commande.

Paquet

Arch

Lorsque des mises à jours sortent, Arch les propose très rapidement, même pour le noyau, le tout en version stable. C'est une des très grande force de cette distribution.

Kubuntu

Kubuntu a une énorme quantité de paquets disponibles, la plus complète de ce comparatif. La disponibilité des mises à jour est aussi très rapide.

Mandriva

Les mises à jour des paquets prennent beaucoup de temps avant d'être disponible au usager. C'est Mandriva qui est le plus en retard à ce chapitre dans ce comparatif au niveau des mises à jour. Si vous désirez avoir une distribution toujours à jours, vous pouvez ajouter le dépôt cooker, mais ça sera au détriment de la stabilité.

OpenSuse

Le nombre de paquets disponibles est assez élevé, il est possible d'ajouter différents dépôts tel que packman et guru afin de bénéficier de miliers d'autres paquets. Les mises à jour sont rapidement disponibles aux usagers.

Gestion du systèmes

Fait à noter qu'avec du matériel et un environnement standards, la gestion du système est de moins en moins nécessaire. Néanmoins, lorsqu'un problème survient, avoir accès à un interface graphique peut nous faciliter la tâche.

Arch

Il n'existe pas d'outils graphiques pour gérer le système. Il faut donc bien maîtriser ce qu'on fait. Il demeure que la base de Arch Linux est très bien pensée et tout est bien centralisé.

Kubuntu

Tout comme Arch, il y a pas d'outils par défaut. Le système n'a pas une base aussi simpliste que Arch Linux. Cependant la communauté peut rapidement venir en aide.

Mandriva

Leur outil est similaire à OpenSuse tout en étant plus rapide. Il offre plus de possibilités au niveau réseau que OpenSuse. La configuration des environnements aiglx et xgl se fait grâce à cet outil. Cet outil s'enrichit à chaque version.

OpenSuse

Yast est similaire à l'outil de Mandriva, mais il n'a pas aussi bien vieilli.Aucun support pour les environnement de bureau aiglx, xgl. De plus, il a le même vieux design d'il y a plusieurs années. Son ergonomie est rendue moyenne.

Environnement de travail

Arch

L'installation de kde est beaucoup trop chargée, il y a beaucoup de redondance dans les logiciels. Il y a par exemple plusieurs logiciel d'édition. En installant kdemod, le problème est évité. Au niveau du bureau, ce qui est proposé est très soigné.

Kubuntu

Le choix des logiciels installés a été très bien fait. Les menus sont très bien organisés. Aucune icônes sur le bureau, la corbeille et le poste de travail font partie de la barre des tâches.

Mandriva

Le bureau est sobre et clair. Un poste de travail est présent, ce qui facilite la vie pour les habitués de Windows. Mandriva offre 3 types de menu.

Opensuse


Le bureau est comparable à ce que propose Mandriva, en plus d'avoir un nouveau menu qui ressemble à celui disponible sous Windows. Il est possible de revenir au menu standard de Kde. Dans ce derniers cas, il y a une barre qui permet de rechercher rapidement des programmes dans le menu.

Performance

Arch

Cette distribution fait partie des plus performantes. Le système est simple. Il y a peu de fichiers de configuration. Le tout est très bien optimisé. Il y a un minimum de services qui fonctionne ce qui augmente considérablement les performances. Je n'avais jamais vu l'environnement Kde aussi réactif que ça. Il faut vraiment l'essayer pour s'en rendre compte.

Kubuntu

Les performances sont bien meilleures que les versions antérieures. Le système est moins réactif que Arch Linux et Mandriva, mais demeure plus rapide qu'OpenSuse.

Mandriva

Cette distribution s'est grandement améliorée sur ce point. Il est possible d'améliorer davantage les performances du système en enlevant quelques services. Le système est assez réactif, on n'arrive cependant pas au niveau de Arch Linux..

OpenSuse

Le système démarre très lentement et n'est pas assez réactif. C'est le plus lent de ce comparatif. Il serait vraiment temps que Suse améliore se point. Yast permet de gérer tout le système, mais il est très lent.

Communauté

Arch

Bien que la communauté soit petite, le nombre de paquets est grand. Il y a deux gros sites francophones ainsi que celui anglophone. Grâce au type de paquet très simple de cette distribution, de nombreux utilisateurs créent des paquets. La communauté est divisée, l'utilisateur peut de la sorte avoir accès à plusieurs documentations similaires pour arriver à ses fins.

Kubuntu

La communauté est énorme. Il y a beaucoup d'informations pour résoudre de multiples problèmes. Le nombre de paquets est très impressionnant. Le forum est très achalandé.

Mandriva

La communauté francophone est bien active.Beaucoup d'autres paquets sont disponibles lorsqu'on est membre (en plus d'avoir le support technique de la part de Mandriva). Lors de la mise à jour du noyau, il existe de nombreux paquets qui évitent de devoir tout recompiler ce qui évite beaucoup de travail. Beaucoup d'informations sont disponible sur internet afin de bien débuter avec cette distribution.

OpenSuse

La communauté est très grande, mais le nombre de paquet est tro restreint. Si on met à jour son noyau et qu'on a divers drivers propriétaires, caméra web et cie.... on risque de devoir tout recompiler, alors que sous Mandriva, il y a beaucoup plus de modules pour le noyau. Le site internet manque cruellement d'informations. Par contre il existe quelques bons forum anglophones. Le choix est plutôt limité du côté francophone, mais les gens de alionet devraient être en mesure de répondre rapidement à vos questions. Sur le canaux irc, les gens ne sont pas très réceptifs lorsqu'on critique OpenSuse. Le canau irc francophone est peu utilisé.

Nous avons pu voir quelques différences entre 4 distributions Linux: Arch, Kubuntu, Mandriva et OpenSuse. La grande gagnante est Mandriva. Elle a presque tout pour plaire. Elle est rapide, simple d'utilisation et possède tout le nécessaire pour faciliter le passage à Linux. Il faudrait pouvoir avoir des paquets plus à jour. Si vous êtes un utilisateur Linux avec de l'expérience, regardez du côté de Arch Linux. Elle est ultra rapide, il peut être nécessaire de mettre les mains à la pâte (mais très peu). Si vous recherchez une distribution qui se situe dans la moyenne mais qui progresse rapidement, Kubuntu est là. La communauté peut être alléchante pour un nouveau venu.

La grande perdante est OpenSuse, qui accumule la lourdeur et des problèmes de gestionnaire de paquet. Pourtant, il y a peu, elle faisait partie du peloton de tête. Néanmoins, elle demeure un bon choix pour peu que l'on soit un peu patient.

Est-ce que la version 10.3 pourra renverser la vapeur?

jeudi 19 avril 2007

Bien démarrer avec Arch Linux


Bien démarrer avec Arch Linux

Arch Linux est une distribution simple, rapide et très modulable. Elle a la mauvaise réputation d'être compliquée. Arch Linux est une distribution très optimisée. Ici, il n'est pas question d'avoir un système avec des fichiers de configuration un peu partout et des tonnes de service démarés par défaut. L'accent est mis sur la légèreté. Il faut aussi mentionner que Arch Linux ne repose pas sur des rpm ou deb mais plutôt sur son propre système de paquet.

Après avoir essayé plusieurs distributions et être resté durant plusieurs années avec Suse, j'ai décidé de tenter l'aventure avec Arch Linux. Mes craintes étaient la complexité de configurer le système, mais étant donné tous le bien que j'entendais depuis plusieurs mois de cette distribution, j'ai tenté ma chance. Cet article nécessite d'avoir un minimum de connaissance sous Linux.

Installation de Arch

Téléchargez la dernière version iso de Arch Linux. Dans cet exemple, nous utiliserons la version 0.8.
Lorsque vous allez insérer votre cd de Arch dans votre lecteur, c'est la première image que vous verrez. Appuyez sur la touche Entrée



Tapez /arch/setup et ensuite appuyez sur la touche enter.

Choisisez cd-rom comme source d'installation.

Voilà le menu d'installation et ses différentes étapes.

J'ai opté pour l'option la plus simple: auto preprare. Cette option va tout enlever sur le disque dur.

J'ai pris les options par défaut pour les dimensions du disque dur.

Sélectionner un système de fichier. J'ai pris ext3.

Nous allons maintenant effectuer l'étape de sélection de paquet (logiciel, application).

La source des paquets choisie est est le cd-rom.

La sélection de paquet est fait par catégorie. Si vous désirez un système sans interface graphique, prenez base. Vous allez pouvoir installer kde et cie par la suite. Pour éviter les problèmes, je vous conseille de tout sélectionner ce qui se trouve dans le système de base. Nous installerons par la suite l'environnement graphique.

Les paquets choisis seront maintenant installés.

La configuration du système va commencer.

Optez pour la préconfiguration afin de vous faciliter la tâche.

Le système demandera si vous avez besoins du usb, firewiere, pcmia, nfs, raid, raid2, lvm... pour démarrez le système, réponsez yes si vous en avez besoin.

Choix de l'éditeur texte, j'ai choisi vi, mais nano est plus simple d'emploi.

Quelques fichiers ont besoin d'information pour que le système puisse bien fonctionner.

Dans le fichier: rc.conf , inscrivez ses valeurs pour utilisez le clavier canadien français.
LOCALE="fr_CA.utf8"
HARDWARECLOCK="localtime"
TIMEZONE="Canada/Eastern"
KEYMAP="cf.map.gz"
CONSOLEFONT="lat9w-16"
CONSOLEMAP="8859-15"
USECOLOR="yes"

MOD_AUTOLOAD="yes"

HOSTNAME="linux"

lo="lo 127.0.0.1"
eth0="dhcp"
INTERFACES=(lo eth0)

#nécessaire si vous avez un routeur
gateway="default gw 192.168.0.1"
ROUTES=(!gateway)

DAEMONS=(syslog-ng network netfs crond )
Je n'ai rien modifié dans les fichiers hosts, fstab, mkinitcpio.conf, modprobe.conf, resolv.conf.
Pour le fichier locale.gen, enlevez le caractère # devant la ligne correspondant à votre langue. Pour le français au canada, c'est la ligne suivante
fr_CA.UTF-8     UTF-8
N'oubliez pas de donner un mot de passe pour l'utilisateur root, une fois fait, retournez au menu principal.

L'étape de l'installation du noyau est arrivée.

Installation du gestionnaire de démarrage du système. Si vous avez un autre système Linux, vous pouvez sauter cette étape.

Voici un exemple de fichier grub avec un système ayant déjà une autre distribution Linux d'installé (opensuse).Grub n'a donc pas été installé sous Arch. Seul le fichier grub sous opensuse à été modifié.
title Arch Linux
    root (hd0,8)
    kernel /boot/vmlinuz26 root=/dev/sda9 vga=792 ro
    initrd /boot/kernel26.img
Voici comment le disque avait été découpé pour accepter les deux distributions Linux.
/dev/sda1 /boot  #opensuse
/dev/sda5 /      #opensuse
/dev/sda6 /var   #opensuse
/dev/sda7 swap   #opensuse
/dev/sda8 /home  #opensuse
/dev/sda9 /      #archlinux

Pour le gestionnaire de démarrage, le meilleur choix est grub, il est plus puissant et flexible que lilo.

Il faut maintenant spécifier où grub sera installée, j'ai opté pour le premier choix.

L'installation de base est terminée. Redémarrez votre système afin de voir si le tout fonctionne correctement.

Si l'installation s'est bien déroulée, vous devriez arriver à une console.

Gestion des paquets

La gestion de paquet une un outil propre à Arch Linux, il s'appelle pacman. C'est un outil qui offre des fonctionnalités similaires à urpmi. Vous devez taper les prochaines commandes dans une console et utilisez l'utilisateur root.

installer

pacman -S nom_du_soft

rechercher

pacman -Ss nom_du_soft

rechercher un paquet installé

pacman -Qs nom_du_soft

désinstaler un paquet

pacman -R nom_du_soft

désinstaller un paquet et ses depensances

pacman -Rcs nom_du_soft

Synchroniser la base de donnée des paquets

pacman -Sy

Mise à jour du système

pacman -Su

Fichier pour la gestion des paquets

Dans le fichier /etc/pacman.conf, différents dépôts sont disponibles. Votre fichier devrait ressembler à ceci afin d'avoir accès au maximum de paquet.
[current]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/current

[extra]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/extra

#[unstable]
# Add your preferred servers here, they will be used first
#Include = /etc/pacman.d/unstable

[community]
 Add your preferred servers here, they will be used first
Include = /etc/pacman.d/community

Il faut donc décommenter tous les Includes et les sections entre crochets. Si vous désirez avoir les dernières mises à jour du système au risque de le rendre non fonctionnel, vous pouvez décommentez la section unstable. Maintenant nous allons lancer une commande afin d'utiliser les serveurs les plus rapides.
sortmirrors

Continuité de l'installation

Puisque nous avons installé que le système de base, nous allons maintenant installer le serveur graphique. Les commandes suivantes doivent être faite en mode root.
pacman -Sy xorg xorg-clients xterm
pacman -S hwd
pacman -S xorg-fonts-75dpi xorg-fonts-100dpi

Installation de Kde en français
pacman -S kde pacman -S extra/kde-i18n-fr
Installation des drivers propriétaire Nvidia
pacman -S nvidia

Installation des drivers pour le son
pacman -S alsa-lib alsa-utils

Installation du plugin flash pour le web
pacman -S flashplugin

Installation des applications nécessaires pour l'impression
pacman -S cups ghostscript
pacman -S foomatic-filters

Installation du kit de développement Java (utile seulement pour les programmeurs
pacman -S jdk

Installation de la machine virtuelle Java
pacman -S jre

Installation de la librarie pour lire les dvd
pacman -S libdvdcss

Installation du driver pour les caméras web
pacman -S gspcav1

Afin de faciliter la configuration du matériel, il est conseillé d'installer hal
pacman -S hal

Ceux ayant installe Java, peuvent installer jacman comme gestionnaire de paquet graphique.. Sous kde, il faut utiliser kdesu pour le démarrer en mode root si on a pas démarrer une session kde avec ce dernier.

Configuration du système

Créer un usager

Afin d'éviter de briser le système, nous allons créer un usager avec des droits plus restreints.

Création de l'usager

useradd -m -s /bin/bash  collinm

Création du mot de passe

passwd collinm

Ajout de l'usager à divers groupe

usermod -G users,wheel,slocate,audio,optical,floppy,storage,video, collinm

Imprimante

Si vous utilisez une imprimante usb.
modprobe usblp

Si vous utilisez une imprimante parallèle.
modprobe parport
modprobe parport_pc

Si vous désirez pouvoir accéder à des périphériques de stockage.
modprobe usb_storage

Si vous avez installé le driver pour la webcam, lancez la commande suivante:
modprobe gspca

Configurer xorg

Dans le fichier: xorg.conf, inscrivez ses valeurs
Option "XkbLayout"  "ca"
Option "XkbVariant" "fr"

Tapez la commande ci-dessous afin que la détection du matériel (écran, souris, clavier, carte vidéo) est lieu.
hwd -xa

Ceux ayant une carte vidéo nvidia, exécuté la commande suivante
nvidia-xconfig

X devrait maintenant fonctionner peut-être pas de façon optimale. Au besoin, modifiez le fichier.
/etc/X11/xorg.conf

Démarage de daemon

Les démons disponibles se trouvent dans /etc/rc.d/

Si vous désirez lancez un daemon automatiquement au démarrage, dans /etc/rc.conf, rajouté le daemon dans la section qui lui est consacrée. Le mien ressemble à ceci.
DAEMONS=(syslog-ng @hal network @kdm netfs crond @alsa)

Voici quelques démons qui peut-être très utile.
cups est utilisé pour les imprimantes.
hal est utilisé pour la détection automatique de périphérique.
kdm est utilisé par kde.
alsa sert à avoir du son

N'oubliez pas d'ajouter le gestionnaire de connexion à cet endroit si vous désirez démarrer en mode graphique automatiquement.

Aur

AUR est le dépôt des utilisateurs de Arch Linux. Ainsi n'importe qui ou presque peut créer un paquet et ainsi faire profiter toute la communauté.

Pour faire cet exemple, vous devez avoir décommenter la partie community dans le fichier /etc/pacman.conf. Nous allons installer le programme netbeans, c'est un environnement de développement pour java.
Dans un console, lancez la commande: makepkg. Vous devriez voir apparaitre ces lignes.
==> Making package: netbeans 5.5-1 (Wed Apr  4 22:06:37 PDT 2007)
==> Checking Runtime Dependencies...
==> Checking Buildtime Dependencies...
==> Retrieving Sources...
==>     Found netbeans-5_5.tar.bz2 in build dir
==>     Found netbeans.sh in build dir
==>     Found netbeans.desktop in build dir
==> Validating source files with MD5sums
    netbeans-5_5.tar.bz2 ... Passed
    netbeans.sh ... Passed
    netbeans.desktop ... Passed
==> Extracting Sources...
==>     tar --use-compress-program=bzip2 -xf netbeans-5_5.tar.bz2
==> Starting build()...
==> Removing info/doc files...
==> Compressing man pages...
==> Stripping debugging symbols from libraries...
==> Stripping symbols from binaries...
==> Generating .PKGINFO file...
==> Copying install script...
==> Generating .FILELIST file...
==> Compressing package...
==> Finished making: netbeans  (Wed Apr  4 22:07:13 PDT 2007)
Un fichier netbeans-5.5-1.pkg.tar.gz sera créé. Il vous reste plus qu'à installer ce paquet.
pacman -A netbeans-5.5-1.pkg.tar.gz
loading package data... done.
checking for file conflicts... done.
installing netbeans... done.

Performance

Étant donnée la simplicité du système Arch, cette distribution à des performances supérieures aux distributions dite grande publique: Suse, Mandriva, Kubuntu.
Avec Opensuse avec un 4200+ et 1gig de ram, plus de 55 secondes sont nécessaire avant de se rendre à KDM et ce après avoir désactivés plusieurs services. Arch fait la même chose en 28 secondes de plus, Kde est beaucoup plus réactif.

Réseau

Pensez à désactivié le IPv6. Sous firefox dans la barre d'adresse tapé:
about:config
Mettez la valeur de la clé ci-dessous à false.
network.dns.disableIPv6
Nous allons maintenant désactivé ce protocole pour le système. Dans le fichier /etc/modprobe.conf, ajoutez les deux lignes suivantes:
alias net-pf-10 off
alias ipv6 off
Finalement dans le fichier /etc/sysctl.conf, ajoutez la ligne suivante:
net.ipv6.conf.all.autoconf=0

Conclusion

Nous avons vu différentes étapes afin de pouvoir utiliser Arch Linux.Son principe de fonctionnement fait en sorte que le système est très performant et stable. Cette distribution est assez différente du trio: fedora, opensuse ubuntu, mais reste une excellente alternative pour ceux voulant des performances et qui maîtrise un minimum Linux.

mercredi 7 mars 2007

Les tableaux


Les tableaux

Bash supporte les tableaux à une dimension. Aucune initialisation n'est nécessaire, mais si on tente d'afficher un tableau non initialisé, rien ne sera affiché. Le support des tableaux est un peu différent des autres langages de programmation. Il est possible directement d'assigner une valeur à un index particulier. Bash initialisera les autres index automatiquement.

Création

declare -a mon_tableau

Bash créera un tableau vide.
Il est possible de créer un tableau en lui attribuant des valeurs.

mon_tableau[2]='test'

Bash initilisera mon_tableau[0] et mon_tableau[1] à vide.

Opération

La commande ci-dessous affichera l'item à la position spécifié par l'index.
echo ${mon_tableau[index]}

La commande ci-dessous affichera tous les éléments du tableau
echo ${mon_tableau[*]}

La commande ci-dessous affichera le nombre d'élément du tableau
nbItem=${#mon_tableau[*]}
echo $nbItem

Voici un exemple qui énumère les notions apprisent jusqu'à maintenant
#!/bin/bash

#déclaration d'un tableau
declare -a mon_tableau

#initialisation du tableau
mon_tableau=( nuage soleil neige )

#affiche le deuxième éléments soit neige
echo ${mon_tableau[2]}

#affiche tous les éléments du tableau, soit nuage, soleil et neige
echo ${mon_tableau[*]}

#affiche le nombre d'élément
nbItem=${#mon_tableau[*]}
echo $nbItem

for ((i=0;i<$nbItem;i++)); do
  echo ${mon_tableau[${i}]}
done

Les tableaux en bash peuvent contenir différent type de donnée. Il est donc possible d'avoir des int, des chaînes de caractère dans le même tableau sans problème. Il suffira de faire attention si des opérations sont faites entre les éléments du tableau.

declare -a mon_tableau2

mon_tableau2=( 7 99 avion )

mon_tableau2[3]=`expr ${mon_tableau2[0]} + ${mon_tableau2[1]}`

#affichera 106
echo ${mon_tableau2[3]}

mon_tableau2[4]=`expr ${mon_tableau2[0]} + ${mon_tableau2[2]}`

#ceci générera une erreur car un int ne peut être ajouté à une string
echo ${mon_tableau2[4]}

Il faut donc faire très attention lorsque différents types de donnée sont employé au sein du même tableau.