<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>programmation &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://wordpress.com/tag/programmation/</link>
	<description>Feed of posts on WordPress.com tagged "programmation"</description>
	<pubDate>Thu, 21 Aug 2008 13:33:29 +0000</pubDate>

	<generator>http://wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Mise en place d'un historique des enregistrements sous MySQL]]></title>
<link>http://stephanelegrand.wordpress.com/?p=7</link>
<pubDate>Sun, 17 Aug 2008 13:20:02 +0000</pubDate>
<dc:creator>stephanelegrand</dc:creator>
<guid>http://stephanelegrand.wordpress.com/?p=7</guid>
<description><![CDATA[
Pourquoi faire ?

Dans une base de données, il peut être très utile de disposer d&#8217;un histo]]></description>
<content:encoded><![CDATA[<ul>
<li><strong>Pourquoi faire ?</strong></li>
</ul>
<p>Dans une base de données, il peut être très utile de disposer d'un historique des modifications successives des enregistrements. Cela permet par exemple de gérer des versions de vos données avec la possibilité de revenir à une version précédente ou bien de pouvoir visualiser les différences entre deux versions. Cela peut également être utile dans le cas où, pour des raisons de sécurité par exemple, vous souhaitez être capable de savoir quel utilisateur a effectué quelles modifications sur les données.</p>
<ul>
<li><strong>Mécanisme utilisé</strong></li>
</ul>
<p>Nous allons donc voir comment mettre en place ce système avec MySQL 5.x et supérieur. La technique utilisée est celle des "triggers". Sous ce terme un peu barbare se cache simplement la possibilité de déclencher une ou plusieurs requêtes SQL lorsqu'un enregistrement est ajouté, modifié ou bien supprimé dans une table SQL donnée. Grâce à ce mécanisme, vous pourriez par exemple compter le nombre de fois où une table est modifiée. Nous allons utiliser ce système de triggers pour mettre en place notre historique des enregistrements.</p>
<ul>
<li><strong>La table "maître"</strong></li>
</ul>
<p>Pour illustrer concrètement notre exemple, nous allons considérer une base de données avec la table suivante :</p>
<p>[sourcecode language='sql']<br />
CREATE TABLE utilisateur (<br />
  id BIGINT NOT NULL AUTO_INCREMENT,<br />
  version BIGINT NOT NULL DEFAULT 0,<br />
  nom VARCHAR(255) DEFAULT NULL,<br />
  PRIMARY KEY (id),<br />
  KEY (version)<br />
);<br />
[/sourcecode]</p>
<p>Comme vous le voyez, la structure de cette table est extrèmement simple. Cela n'a pas d'importance, la méthode que nous allons voir maintenant peut s'appliquer à n'importe quelle table quelle que soit sa complexité. Remarquez la présence d'un champ "version" qui contiendra le numéro de version de l'enregistrement.</p>
<ul>
<li><strong>La table d'historique</strong></li>
</ul>
<p>Pour sauvegarder l'historique des enregistrements, nous allons à chaque modification ou suppression d'un enregistrement dans la table "utilisateur" recopier les anciennes données dans une autre table que nous appellerons "histo_utilisateur". Cette table DOIT impérativement inclure tous les champs de la table "utilisateur" puisque nous allons recopier l'intégralité de l'enregistrement vers cette table d'historique. Elle comportera également quelques champs supplémentaires que nous détaillerons par la suite. Voici donc la structure de notre table d'historique :</p>
<p>[sourcecode language='sql']<br />
CREATE TABLE histo_utilisateur (<br />
  id BIGINT NOT NULL AUTO_INCREMENT,<br />
  action ENUM ( 'update' , 'delete' ) DEFAULT NULL,<br />
  date_action DATETIME DEFAULT NULL,<br />
  version BIGINT NOT NULL DEFAULT 0,<br />
  id_original BIGINT NOT NULL DEFAULT 0,<br />
  nom VARCHAR(255) DEFAULT NULL,<br />
  PRIMARY KEY (id),<br />
  KEY (id_original),<br />
  KEY (action),<br />
  KEY (date_action),<br />
  KEY (version)<br />
);<br />
[/sourcecode]</p>
<p>Nous retrouvons bien dans cette table le champ "nom" de la table d'origine. Le champ "id_original" va nous permettre de sauvegarder le champ "id" de la table d'origine. Ce qui nous permet de conserver un champ "id" pour l'identifiant unique de la table d'historique.</p>
<p>Le champ "action" permet de conserver le type d'événement qui a conduit à la recopie des données. Il permet également de savoir si l'enregistrement original existe toujours. En effet, si cet enregistrement a été supprimé, le champ action aura la valeur "delete". Le champ "date_action" permet de connaître la date et l'heure de la copie.</p>
<p>Le champ "version" sert à stocker le numéro de version d'enregistrement. Il s'agit ici tout simplement d'un nombre qui sera incrémenté à chaque recopie de données.</p>
<ul>
<li><strong>Définition des triggers</strong></li>
</ul>
<p>Nous pouvons maintenant mettre en place les triggers nécessaires pour la gestion de l'historique. De quoi avons-nous besoin ? :</p>
<p>- A chaque modification d'un enregistrement de la table "utilisateur", il nous faut recopier les données dans la table "histo_utilisateur" et gérer les champs qui servent à l'historique. C'est à dire incrémenter le numéro de version, renseigner le champ "action" à la valeur "update" et le champ "date_action" à la date et heure courante.</p>
<p>- A chaque suppression d'un enregistrement de la table "utilisateur", il nous faut recopier les données (qui vont être supprimées dans la table d'origine) et là encore gérer les champs qui servent à l'historique. C'est à dire incrémenter le numéro de version, renseigner le champ "action" cette fois-ci avec la valeur "delete" et le champ "date_action" à la date et heure courante.</p>
<p>Cela se traduit en SQL avec les instructions suivantes :</p>
<p>[sourcecode language='sql']<br />
delimiter //<br />
CREATE TRIGGER trig_avant_update_utilisateur<br />
BEFORE UPDATE ON utilisateur FOR EACH ROW<br />
  BEGIN<br />
    SET NEW.version = OLD.version + 1;<br />
    INSERT INTO histo_utilisateur<br />
      (action, date_action, version, nom, id_original)<br />
    VALUES<br />
      ('update', NOW(), OLD.version, OLD.nom, OLD.id);<br />
  END;<br />
//<br />
CREATE TRIGGER trig_apres_delete_utilisateur<br />
AFTER DELETE ON utilisateur FOR EACH ROW<br />
  BEGIN<br />
    INSERT INTO histo_utilisateur<br />
      (action, date_action, version, nom, id_original)<br />
    VALUES<br />
      ('delete', NOW(), OLD.version, OLD.nom, OLD.id);<br />
  END;<br />
//<br />
delimiter ;<br />
[/sourcecode]</p>
<p>L'instruction "delimiter" indique à MySQL de modifier le délimiteur de commande (par défaut le caractère ";") avec la séquence de caractères "//". Cela nous permet d'utiliser le caractère ";" dans la définition des triggers sans qu'il soit interprété par le client MySQL.</p>
<p>Le premier trigger appelé "trig_avant_update_utilisateur" indique qu'avant chaque mise à jour d'un enregistrement de la table "utilisateur" les actions suivantes seront effectuées :</p>
<p>- Incrément du numéro de version pour l'enregistrement de la table "utilisateur". Les pseudo noms d'enregistrements "NEW" et "OLD" indiquant respectivement l'ancien et le nouvel enregistrement de la table concernée par le trigger (donc ici l'enregistrement mis à jour de la table "utilisateur").</p>
<p>- Insertion d'un enregistrement dans la table "histo_utilisateur" avec recopie des données (via l'utilisation du pseudo nom d'enregistrement "OLD") et renseignement des champs dédiés à la gestion de l'historique.</p>
<p>Le deuxième trigger appelé "trig_apres_delete_utilisateur" indique qu'après chaque suppression d'un enregistrement de la table "utilisateur" les actions suivantes seront effectuées :</p>
<p>- Insertion d'un enregistrement dans la table "histo_utilisateur" avec recopie des données (via l'utilisation du pseudo nom d'enregistrement "OLD") et renseignement des champs dédiés à la gestion de l'historique.</p>
<ul>
<li> <strong>Passons aux tests !</strong></li>
</ul>
<p>Nous allons maintenant vérifier que tout fonctionne. Connectez-vous à votre serveur MySQL et créez une base de données de test :</p>
<p>[sourcecode language='sql']<br />
mysql> CREATE DATABASE test_cache;<br />
[/sourcecode]</p>
<p>Vous devez évidemment avoir les droits suffisants pour effectuer cette opération.</p>
<p>Créez ensuite les tables et les triggers en utilisant les instructions SQL que nous avons vu précedemment. Nous allons maintenant créer un premier enregistrement dans la table "utilisateur" :</p>
<p>[sourcecode language='sql']<br />
mysql> INSERT INTO utilisateur (nom) VALUES ("Homer Simpson");<br />
[/sourcecode]</p>
<p>Regardons ensuite le contenu de nos deux tables :</p>
<p>[sourcecode language='sql']<br />
mysql> SELECT * FROM utilisateur;<br />
+----+---------+----------------+<br />
&#124; id &#124; version &#124; nom            &#124;<br />
+----+---------+----------------+<br />
&#124;  1 &#124;       0 &#124; Homer Simpson  &#124;<br />
+----+---------+----------------+<br />
1 row in set (0.00 sec)</p>
<p>mysql> SELECT * FROM histo_utilisateur;<br />
Empty set (0.00 sec)<br />
[/sourcecode]</p>
<p>Nous avons bien notre enregistrement dans la table "utilisateur" et aucun enregistrement dans la table d'historique. Ce qui est normal puisque nous n'avons créé aucun trigger dans le cas d'une insertion d'un enregistrement dans la table "utilisateur".</p>
<p>Modifions maintenant notre enregistrement :</p>
<p>[sourcecode language='sql']<br />
mysql> UPDATE utilisateur SET nom="Donuts" WHERE id=1;<br />
Query OK, 1 row affected (0.06 sec)<br />
Rows matched: 1  Changed: 1  Warnings: 0<br />
[/sourcecode]</p>
<p>Regardons maintenant à nouveau le contenu de nos deux tables :</p>
<p>[sourcecode language='sql']<br />
mysql> SELECT * FROM utilisateur;<br />
+----+---------+--------+<br />
&#124; id &#124; version &#124; nom    &#124;<br />
+----+---------+--------+<br />
&#124;  1 &#124;       1 &#124; Donuts &#124;<br />
+----+---------+--------+<br />
1 row in set (0.00 sec)</p>
<p>mysql> SELECT * FROM histo_utilisateur;<br />
+----+--------+---------------------+---------+-------------+----------------+<br />
&#124; id &#124; action &#124; date_action         &#124; version &#124; id_original &#124; nom            &#124;<br />
+----+--------+---------------------+---------+-------------+----------------+<br />
&#124;  1 &#124; update &#124; 2008-08-17 14:13:03 &#124;       0 &#124;           1 &#124; Homer Simpson  &#124;<br />
+----+--------+---------------------+---------+-------------+----------------+<br />
1 row in set (0.00 sec)<br />
[/sourcecode]</p>
<p>Notre trigger a bien fonctionné ! L'enregistrement d'origine a bien été modifié. Et la table d'historique contient bien une copie de l'enregistrement précédent. Par ailleurs, le numéro de version de l'enregistrement présent dans la table "utilisateur" a bien été incrémenté.</p>
<p>Supprimons maintenant notre enregistrement :</p>
<p>[sourcecode language='sql']<br />
mysql> DELETE FROM utilisateur WHERE id=1;<br />
Query OK, 1 row affected (0.02 sec)<br />
[/sourcecode]</p>
<p>Puis regardons à nouveau le contenu de nos deux tables :</p>
<p>[sourcecode language='sql']<br />
mysql> SELECT * FROM utilisateur;<br />
Empty set (0.00 sec)</p>
<p>mysql> SELECT * FROM histo_utilisateur;<br />
+----+--------+---------------------+---------+-------------+----------------+<br />
&#124; id &#124; action &#124; date_action         &#124; version &#124; id_original &#124; nom            &#124;<br />
+----+--------+---------------------+---------+-------------+----------------+<br />
&#124;  1 &#124; update &#124; 2008-08-17 14:13:03 &#124;       0 &#124;           1 &#124; Homer Simpson  &#124;<br />
&#124;  2 &#124; delete &#124; 2008-08-17 14:16:59 &#124;       1 &#124;           1 &#124; Donuts         &#124;<br />
+----+--------+---------------------+---------+-------------+----------------+<br />
2 rows in set (0.00 sec)<br />
[/sourcecode]</p>
<p>Là encore, le trigger a bien été pris en compte. L'enregistrement d'origine a été supprimé. La table d'historique contient bien une copie de l'enregistrement supprimé.</p>
<ul>
<li><strong>Conclusion </strong></li>
</ul>
<p>Nous avons vu un procédé très simple à mettre en place afin de conserver l'historique des modifications et suppressions dans une base de données. L'exemple s'appuie sur MySQL mais est évidemment transposable sur toutes les autres bases de données qui gèrent les triggers. Le choix de gérer l'historique dans une deuxième table dédiée et non pas dans la table d'origine permet de clairement séparer les données actives des données d'historique. Par ailleurs, cela permet également d'éliminer tout impact sur les performances des requêtes effectuées sur les données actives. Il reste ensuite à ajouter une gestion de la durée de conservation des données d'historique afin d'éviter une explosion de la taille des tables dédiées aux données d'historique.</p>
<ul>
<li><strong>Références</strong></li>
</ul>
<p>Section "Triggers" de la documentation MySQL :</p>
<p><a class="wp-caption" title="Triggers sous MySQL 5.0" href="http://dev.mysql.com/doc/refman/5.0/fr/triggers.html">http://dev.mysql.com/doc/refman/5.0/fr/triggers.html</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Bourse de doctorat dans l'équipe SDS avec le CEA]]></title>
<link>http://dutherenverseauborddelatable.wordpress.com/?p=119</link>
<pubDate>Sat, 16 Aug 2008 10:28:49 +0000</pubDate>
<dc:creator>yoric</dc:creator>
<guid>http://dutherenverseauborddelatable.wordpress.com/?p=119</guid>
<description><![CDATA[
Le CEA (Commissariat à l’Énergie Atomique) et l&#8217;équipe SDS (Sécurité et Distribution d]]></description>
<content:encoded><![CDATA[<div class="snap_preview">
<p style="text-align:justify;">Le <a href="http://www.cea.fr/">CEA</a> (Commissariat à l’Énergie Atomique) et l'équipe <a href="http://sds-project.fr/">SDS</a> (Sécurité et Distribution des Systèmes, équipe du <a href="http://www.univ-orleans.fr/lifo/index.php?lang=en">Laboratoire d’Informatique Fondamentale d’Orléans</a>) proposent une bourse de doctorat dans le domaine de la Sécurité Appliquée ou des Fondements Théoriques de la Sécurité, sous la supervision administrative de Mathieu Blanc (CEA) et Christian Toinard (SDS).</p>
<p style="text-align:justify;">La bourse dure trois ans (renouvelables) et couvre un salaire brut de  1990,25€ par mois (première et deuxième année)  à  2049,75€/mois (troisième année).Le poste est disponible à partir du premier octobre 2008.</p>
<h3 style="text-align:justify;">Compétences et parcours</h3>
<p style="text-align:justify;">Idéalement, le candidat doit avoir un excellent Master 2 d'informatique et un intérêt en Sécurité des Systèmes ou en Méthodes Formelles. De plus, le candidat doit avoir des connaissances dans au moins un des domaines suivants :</p>
<ul>
<li>sécurité des systèmes</li>
<li>systèmes d'exploitation</li>
<li>systèmes distribués</li>
<li>programmation système</li>
<li>clusters</li>
<li>analyse statique</li>
<li>théorie des graphes</li>
<li>théorie du parallélisme</li>
<li>logique formelle</li>
<li>sémantique dénotationnelle</li>
<li>sémantique opérationnelle</li>
<li>aspects théoriques de la sécurité et de la confiance.</li>
</ul>
<p style="text-align:justify;">Les candidats doivent avoir le droit de travailler en France et seront affectés sur le campus de l'<a href="http://www.ensi-bourges.fr/">ENSIB</a> (École Nationale Supérieure d’Ingénieurs de Bourges). Leur tâche première concernera la théorie ou/et l'implantation de mécanismes efficaces de garantie de politiques de sécurité pour des systèmes distribués tels que les grilles et les clusters. L'objectif principal de ce doctorat est d'étendre les approches actuelles de garantie locale de politiques de sécurité pour en construire des techniques applicables à de vastes systèmes distribués, tels que ceux utilisés pour l'analyse de données ou l'analyse numérique.</p>
<h3 style="text-align:justify;">Pour candidater</h3>
<p style="text-align:justify;">Pour candidater, nous vous invitons à envoyer un CV et une lettre de motivation, par courrier physique ou électronique, à <a href="http://www.univ-orleans.fr/lifo/pageperso.php?id=25&#38;lang=fr">Christian Toinard</a> et <a href="http://www-instn.cea.fr/Publication_Sujet.php3?nomfichier=SL-DAM-08-014&#38;lang=FR&#38;id_rubrique=70">Mathieu Blanc</a>. Si possible, joignez un échantillon de vos travaux scientifiques. La candidature implique une vérification de sécurité par le Ministère de la Défense.</p>
</div>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Passer d'un fichier de l'ODS TAGSET.EXCELXP à un data set SAS avec PROC IMPORT]]></title>
<link>http://thesasreference.wordpress.com/?p=346</link>
<pubDate>Fri, 15 Aug 2008 06:00:18 +0000</pubDate>
<dc:creator>The SAS Reference</dc:creator>
<guid>http://thesasreference.wordpress.com/?p=346</guid>
<description><![CDATA[
Le programmeur SAS pourra recueillir des informations d&#8217;un non spécialiste en créer un fi]]></description>
<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-408" src="http://thesasreference.wordpress.com/files/2008/08/cycliste_fr.jpg" alt="" width="448" height="224" /></p>
<p>Le programmeur SAS pourra recueillir des informations d'un non spécialiste en créer un fichier Excel. Il importe ensuite les données sous SAS.</p>
<p>Dans un précédent sujet "<a title="sas ods tagset excelxp" href="http://thesasreference.wordpress.com/2008/05/12/ods_tagsets_excelxp_1/">Mes 1ers pas avec ODS TAGSET.EXCELXP</a>", nous avons vu comment créer un fichier Excel, ou plutôt un fichier XML lisible sous Excel, à partir de la syntaxe d'ODS TAGSET.EXCELXP.</p>
<p>Maintenant, il s'agit de voir les limites de l'importation d'un fichier XML avec la procédure PROC IMPORT.</p>
<p><strong>Exemple</strong> : Nous aurons un fichier LST_STUDY.XLS avec plusieurs feuillets, dont un nommé '2000', comme exemple. Ce feuillet a deux colonnes : le numéro de l'étude (STUDY) et la variable à compléter manuellement (FLAG_EXTERNAL). La première ligne contient le nom de la colonne. La variable STUDY peut contenir des nombres et du texte.</p>
<p><strong><span style="color:#ff6600;">1. PROC IMPORT a besoin de données Excel</span></strong></p>
<p>Même si le fichier créé par ODS TAGSET.EXCELXP a une extension .xls, ce fichier est en fait un fichier en langage XML. Comment observer cette information ? Voici deux propositions :</p>
<ol>
<li>Ouvrez un fichier de ce type sous Excel et regarder le type lors que la fenêtre OUVRIR apparaît.</li>
<li>Ouvrez le fichier dans un éditeur de texte</li>
</ol>
<p>Afin d'utiliser la procédure PROC IMPORT, il faudra donc convertir le fichier en "enregistrant sous" et là choisir le standard Excel.</p>
<p><strong><span style="color:#ff6600;">2. Les options de l'instruction PROC IMPORT</span></strong></p>
<p><strong>Préciser le nom du fichier d'entrée et celui de sortie</strong> : Dans l'instruction PROC IMPORT, le nom du fichier Excel est donné avec l'option DATAFILE=; celui du data set SAS est introduit par l'option OUT=. Pour rendre ce data set permanent, le nom de la bibliothèque précédera le nom du data set comme d'habitude.</p>
<p><strong>Indiquer à SAS le type de fichier à lire</strong> : Selon l'environnement et la version Excel utilisée, l'option DBMS= variera. DBMS=XLS est l'option que j'utilise sous Unix et Windows pour Excel2003. Reportez-vous à la documentation en ligne (<a title="sas online doc proc import statement" href="http://support.sas.com/onlinedoc/913/getDoc/de/proc.hlp/a000308090.htm">PROC IMPORT Statement)</a> pour connaître toutes les valeurs possibles de cette option.</p>
<p><strong>Remplacer un fichier SAS existant</strong> : Si le data set SAS existe déjà, il ne sera pas remplacé, à moins d'ajouter l'option REPLACE.</p>
<p><span style="font-family:Courier New;"><span style="color:#0000ff;">%let</span> resultats = C:/sasref;</span></p>
<p><span style="font-family:Courier New;"><span style="color:#000080;"><strong>proc import</strong></span> <span style="color:#0000ff;">datafile</span> = <span style="color:#800080;">"&#38;resultats./lst_study.xls"</span><br />
<span style="color:#0000ff;">            out</span>      = lst_study<br />
<span style="color:#0000ff;">            dbms</span>     = xls<br />
<span style="color:#0000ff;">            replace</span>;<br />
<strong><span style="color:#000080;">run</span></strong>;</span></p>
<p><strong><span style="color:#ff6600;">3. Les Instructions sur les données sources</span></strong></p>
<p>Après avoir vu les options de l'instruction PROC IMPORT, je vous propose trois instructions supplémentaires de la procédure (SAS Online Doc. : <a title="SAS Online Doc PROC IMPORT" href="http://support.sas.com/onlinedoc/913/getDoc/de/proc.hlp/a000312413.htm">Data Source Statements</a>)</p>
<p><strong>Des noms de variables personnalisés avec GETNAMES=YES</strong> : SAS se sert de la première ligne du fichier Excel pour définir le nom des variables SAS à moins que l'instruction GETNAMES=NO soit ajoutée.</p>
<p><strong>SAS considère les premières lignes du fichier pour identifier le type des variables sauf si MIXED=YES</strong> : Si on a une combinaison de caractères et chiffres, on peut se retrouver avec des valeurs manquantes. Par exemple, si vous avez une variable année contenant les valeurs 2008, 2007, &#60;2007, il faudra importer les variables sous forme de caractère. L'instruction MIXED=YES fera le travail pour vous. </p>
<p><strong>Importer une feuille de calcul en particulier</strong> <strong>gràce à SHEET=:</strong> Par défaut, SAS importera la première feuille de calcul disponible dans le fichier Excel. Pour choisir un autre feuillet, son nom est donné entre guillemets dans l'instruction  SHEET=.</p>
<p><span style="font-family:Courier New;"><span style="color:#0000ff;">%let </span>resultats = C:/sasref;</span></p>
<p><span style="font-family:Courier New;"><strong><span style="color:#000080;">proc import</span></strong> <span style="color:#0000ff;">datafile</span> = <span style="color:#800080;">"&#38;resultats./lst_study.xls"</span><br />
            <span style="color:#0000ff;">out</span>      = lst_study<br />
            <span style="color:#0000ff;">dbms</span>     = xls<br />
            <span style="color:#0000ff;">replace</span>;<br />
   <span style="color:#008000;">*getnames = yes;</span><br />
   mixed    = yes;<br />
   sheet    = <span style="color:#800080;">'2000'</span>;<br />
<strong><span style="color:#000080;">run</span></strong>;</span></p>
<p>Vous trouverez plus d'informations sur la procédure PROC IMPORT dans l'aide en ligne : SAS Online Doc, <a title="sas online doc proc import" href="http://support.sas.com/onlinedoc/913/getDoc/de/proc.hlp/a000332605.htm">The IMPORT Procedure</a>.</p>
<p><strong><span style="color:#ff6600;">4. Une spécificité de l'ODS TAGSET.EXCELXP à gérer</span></strong></p>
<p>Lors de la création du fichier avec ODS TAGSET.EXCELXP, une ligne est parfois ajoutée après la dernière ligne de saisie. Cette ligne est incluse dans le data set SAS à l'importation. La raison pour laquelle cette ligne est saisie m'est inconnue.</p>
<p>Par contre, je vous propose un data step pour vous en débarrasser une fois le data set SAS créé. </p>
<ul>
<li>L'option END= de l'instruction SET sert à repérer la dernière ligne d'observations.</li>
<li>La fonction MISSING permet de ne supprimer la ligne que si notre variable STUDY est vide.</li>
</ul>
<p><span style="font-family:Courier New;"><strong><span style="color:#000080;">data</span></strong> lst_study;<br />
   <span style="color:#0000ff;">set</span> lst_study end=eof;<br />
   <span style="color:#0000ff;">if</span> eof and missing(study) <span style="color:#0000ff;">then delete</span>;<br />
<strong><span style="color:#000080;">run</span></strong>;</span></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Add-ons Workshop Paris]]></title>
<link>http://dutherenverseauborddelatable.wordpress.com/?p=114</link>
<pubDate>Thu, 14 Aug 2008 17:29:04 +0000</pubDate>
<dc:creator>yoric</dc:creator>
<guid>http://dutherenverseauborddelatable.wordpress.com/?p=114</guid>
<description><![CDATA[
A Mozilla Workshop will be held in Paris on September 20th 2008. The main topic of this workshop is]]></description>
<content:encoded><![CDATA[<p style="text-align:center;"><img src="http://workshop.xulfr.org/pics/hack_image.jpg" alt="" /></p>
<p style="text-align:justify;">A Mozilla Workshop will be held in Paris on September 20th 2008. The main topic of this workshop is add-ons development, for a technical audience of developers and beginners. I will be talking about security of add-ons. More informations <a href="http://blog.mozbox.org/post/2008/08/13/Mozilla-Add-ons-Workshop-in-Paris-it-s-alive">here</a>.</p>
<p style="text-align:justify;">Un Atelier Mozilla se tiendra à Paris le 20 Septembre 2008. On y parlera des divers aspects du développement d'extensions, à l'attention d'un public plutôt technique, composé de développeurs et de débutants. J'y parlerai de sécurité des extensions. Plus d'informations <a href="https://wiki.mozilla.org/MAOW">ici</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[FTP]]></title>
<link>http://pascalbourque.wordpress.com/?p=9</link>
<pubDate>Wed, 13 Aug 2008 15:33:21 +0000</pubDate>
<dc:creator>pascalbourque</dc:creator>
<guid>http://pascalbourque.wordpress.com/?p=9</guid>
<description><![CDATA[Ce texte sera pour expliquer les difficultés vu à travailler en C# sur le protocol ftp.
Je modifir]]></description>
<content:encoded><![CDATA[<p>Ce texte sera pour expliquer les difficultés vu à travailler en C# sur le protocol ftp.</p>
<p>Je modifirai ce texte au fur et à mesure que j'airai un peu de temps.</p>
<p> </p>
<p>À bientôt</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Répéter une action sur plusieurs variables avec le langage macro]]></title>
<link>http://thesasreference.wordpress.com/?p=326</link>
<pubDate>Wed, 13 Aug 2008 06:00:53 +0000</pubDate>
<dc:creator>The SAS Reference</dc:creator>
<guid>http://thesasreference.wordpress.com/?p=326</guid>
<description><![CDATA[
Sous SAS, deux possibilités sont envisageables pour répéter une action sur plusieurs variables. ]]></description>
<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-401" src="http://thesasreference.wordpress.com/files/2008/08/boucle_fr.jpg" alt="" width="448" height="224" /></p>
<p>Sous SAS, deux possibilités sont envisageables pour répéter une action sur plusieurs variables. Dans le cas d'un data step, la syntaxe de l'ARRAY est tout à fait appropriée. Dans d'autres cas, le langage macro peut s'avérer plus pertinent. Voici donc une présentation de l'approche via le langage macro.</p>
<p><strong><span style="color:#ff6600;">1. L'exemple</span></strong></p>
<p>Pour illustrer le propos, le programme aura pour but de définir un PROC REPORT contenant toutes les variables du data set SASHELP.CLASS. Si on connaît le nom des variables, la syntaxe se résume de la manière suivante.</p>
<p><span style="font-family:Courier New;"><span style="color:#000080;"><strong>proc report</strong></span> <span style="color:#0000ff;">data</span>=sashelp.class;<br />
   <span style="color:#0000ff;">columns</span> name age sex weight height;<br />
   <span style="color:#0000ff;">define</span> name   / <span style="color:#0000ff;">display</span>;<br />
   <span style="color:#0000ff;">define</span> age    / <span style="color:#0000ff;">display</span>;<br />
   <span style="color:#0000ff;">define </span>sex    / <span style="color:#0000ff;">display</span>;<br />
   <span style="color:#0000ff;">define </span>weight / <span style="color:#0000ff;">display</span>;<br />
   <span style="color:#0000ff;">define </span>height /<span style="color:#0000ff;"> display</span>;<br />
<strong><span style="color:#000080;">run</span></strong>;</span></p>
<p>Mais si on ne connaît pas le nom des variables par avance, il faut automatiser la tâche.</p>
<p><strong><span style="color:#ff6600;">2. Remplacer le nom des variables par des macro variables</span></strong></p>
<p>Dans l'exemple suivant, le nom de chaque variable est sauvegardé dans une macro variable. Ces macro variables ont une structure particulière :</p>
<p style="padding-left:30px;"><strong>un préfixe commun + un nombre</strong></p>
<p><span style="font-family:Courier New;"><span style="color:#0000ff;">%let</span> class1 = name;<br />
<span style="color:#0000ff;">%let</span> class2 = age;<br />
<span style="color:#0000ff;">%let</span> class3 = sex;<br />
<span style="color:#0000ff;">%let</span> class4 = weight;<br />
<span style="color:#0000ff;">%let</span> class5 = height;</span></p>
<p><span style="font-family:Courier New;"><span style="color:#000080;"><strong>proc report</strong></span> <span style="color:#0000ff;">data</span>=sashelp.class;<br />
   <span style="color:#0000ff;">columns</span> name age sex weight height;<br />
   <span style="color:#0000ff;">define</span> &#38;<span style="color:#008080;">class1.</span> / <span style="color:#0000ff;">display</span>;<br />
   <span style="color:#0000ff;">define</span> &#38;<span style="color:#008080;">class2.</span> / <span style="color:#0000ff;">display</span>;<br />
   <span style="color:#0000ff;">define</span> &#38;<span style="color:#008080;">class3.</span> / <span style="color:#0000ff;">display</span>;<br />
   <span style="color:#0000ff;">define</span> &#38;<span style="color:#008080;">class4.</span> / <span style="color:#0000ff;">display</span>;<br />
   <span style="color:#0000ff;">define</span> &#38;<span style="color:#008080;">class5.</span> / <span style="color:#0000ff;">display</span>;<br />
<span style="color:#000080;"><strong>run</strong></span>;</span></p>
<p><strong><span style="color:#ff6600;">3. Répéter l'instruction DEFINE grâce à une boucle</span></strong></p>
<p>Grâce à cette structure particulière, une boucle peut être envisagée. L'instruction DEFINE est alors répétée autant de fois qu'il y a de variables. La boucle est définie par une macro variable "I" qui prend des valeurs allant de 1 à 5. La partie nombre de la macro variable est donc remplacée par la valeur de la macro variable "I".</p>
<p><strong>NOTE </strong>: Pour résoudre la macro variable lors de la première boucle, SAS effectue deux lectures. A la première lecture, les deux ampersands &#38;&#38; se transforment en un seul ; &#38;i. se transforme en 1. On a donc &#38;CLASS1. A la deuxième lecture, SAS résout la macro variable &#38;CLASS1. comme précédemment.</p>
<p><span style="font-family:Courier New;"><strong><span style="color:#000080;">%macro</span></strong> <strong><em>test</em></strong>;<br />
   proc report data=sashelp.class;<br />
   columns name age sex weight height;<br />
   <span style="color:#0000ff;">%do</span> i=<strong><span style="color:#008080;">1</span></strong> <span style="color:#0000ff;">%to </span><strong><span style="color:#008080;">5<br />
</span></strong>      define &#38;&#38;class&#38;<span style="color:#008080;">i.</span> / display;<br />
  <span style="color:#0000ff;"> %end</span>;<br />
   run;<br />
<strong><span style="color:#000080;">%mend</span></strong> test;<br />
<em><strong>%test</strong></em>;</span></p>
<p><strong><span style="color:#ff6600;">4. Créer les macro variables de manière automatique</span></strong></p>
<p>Pour créer les macro variables automatiquement, il faut agir en deux étapes.</p>
<ol>
<li>Enregistrer chacune des noms de variables du data set choisi dans PROC REPORT (SASHELP.CLASS) dans un nouveau data set (LST_VAR) et plus particulière dans une variable (NAME) .</li>
<li>Associer un numéro à chaque nom de variable (compteur) et convertir l'information en macro variable (CALL SYMPUT).</li>
</ol>
<p><span style="font-family:Courier New;"><strong><span style="color:#000080;">proc sql</span></strong>;<br />
   <span style="color:#0000ff;">create</span> <span style="color:#0000ff;">table</span> lst_var <span style="color:#0000ff;">as</span><br />
      <span style="color:#0000ff;">select</span> name<br />
      <span style="color:#0000ff;">from</span> dictionary.columns<br />
      <span style="color:#0000ff;">where</span> upcase(<span style="color:#0000ff;">libname</span>)=<span style="color:#800080;">'SASHELP'</span> <span style="color:#0000ff;">and<br />
</span>            upcase(memname)=<span style="color:#800080;">'CLASS'</span>;<br />
<strong><span style="color:#000080;">quit</span></strong>;</span></p>
<p><span style="font-family:Courier New;"><span style="color:#000080;"><strong>data</strong></span> <span style="color:#0000ff;">_null_</span>;<br />
   <span style="color:#0000ff;">set</span> lst_var;<br />
   cnt+<span style="color:#008080;"><strong>1</strong></span>;<br />
   <span style="color:#0000ff;">call</span> symput (cats(<span style="color:#800080;">'CLASS'</span>,put(cnt,<span style="color:#008080;">best.</span>)),name);<br />
<strong><span style="color:#000080;">run</span></strong>;</span></p>
<p><strong><span style="color:#ff6600;">5. Compter le nombre de variables de manière automatique</span></strong></p>
<p>Si le nombre de variable dans le data set n'est pas connu à l'avance, il faut le retrouver. Cette information est ensuite sauvegardée dans une macro variable, disons MAX_VAR, et remplacera notre nombre 5. L'article "<a href="http://thesasreference.wordpress.com/2008/02/07/creer_macro_variable/">3 méthodes pour construire des macro variables sans macro</a>" vous donnera plus de précisions concernant la création d'une macro variable.</p>
<p><strong>Obtenir rapidement le nombre de variables dans un data set</strong> : Un moyen pour trouver le nombre de variables est de faire appel au dictionnaire de SAS intitulé TABLES.</p>
<p><span style="font-family:Courier New;"><span style="color:#000080;"><strong>proc sql <span style="color:#0000ff;">noprint</span></strong></span>;<br />
   <span style="color:#0000ff;">select</span> nvar<span style="color:#0000ff;"> into </span>: max_var<br />
   <span style="color:#0000ff;">from</span> dictionary.tables<br />
   <span style="color:#0000ff;">where</span> upcase(libname)=<span style="color:#800080;">'SASHELP'</span> <span style="color:#0000ff;">and</span><br />
         upcase(memname)=<span style="color:#800080;">'CLASS'</span>;<br />
<strong><span style="color:#000080;">quit</span></strong>;</span></p>
<p><strong>Plus de flexibilité sur la liste des variables concernées</strong> : Un autre moyen pour compter le nombre de variables est d'agir en deux étapes.</p>
<ul>
<li>Enregistrer dans un variable d'un nouveau data set chacune des noms de variables de SASHELP.CLASS.</li>
<li>Compter le nombre d'observations dans ce data set. Vous pouvez vous reporter à l'article "<a href="http://thesasreference.wordpress.com/2008/04/14/compter_obs/">Combien d'observations dans mon data set</a>" pour plus de précisions sur les différentes alternatives.</li>
</ul>
<p>Dans notre exemple, il s'agit de créer le data set LST_VAR pour la première étape. Le code de la section 4 est tout à fait suffisant pour cela. Ensuite, CALL SYMPUTX peut servir à sauvegarder l'information dans une macro variable.</p>
<p><span style="font-family:Courier New;"><strong><span style="color:#000080;">data</span></strong> <span style="color:#0000ff;">_null_</span> ;<br />
   call symputx(<span style="color:#800080;">'max_var'</span>,_N_-<span style="color:#008080;"><strong>1</strong></span>);<br />
   <span style="color:#0000ff;">set</span> lst_var;<br />
<strong><span style="color:#000080;">run</span></strong>;</span></p>
<p><strong>Pourquoi vous ai-je proposé cette alternative ?</strong>  Ici, toutes les variables sont sélectionnées. Mais si seulement quelques une sont choisies, seule la seconde alternative marche. Voici quelques sous-sélections possibles.</p>
<ul>
<li>Sélectionner toutes les variables numériques,</li>
<li>Sélectionner toutes les variables finissant pas _X,</li>
<li>etc.</li>
</ul>
<p><strong><span style="color:#ff6600;">En résumé</span></strong> : En résumé, le code se décompose en 2 étapes : créer les macros variables et utiliser ces macros variables pour définir une boucle.</p>
<p><span style="color:#008000;font-family:Courier New;">*1. Créer les macros variables CLASS1 à CLASS5, MAX_VAR.;</span></p>
<p><span style="color:#008000;font-family:Courier New;">*1.1 Créer le data set LST_VAR servant de fichier de référence.;</span></p>
<p><span style="font-family:Courier New;"><strong><span style="color:#000080;">proc sql</span></strong>;<br />
<span style="color:#0000ff;">   create</span> <span style="color:#0000ff;">table</span> lst_var <span style="color:#0000ff;">as</span><br />
<span style="color:#0000ff;">      select</span> name<br />
<span style="color:#0000ff;">      from</span> dictionary.columns<br />
<span style="color:#0000ff;">      where</span> upcase(<span style="color:#0000ff;">libname</span>)=<span style="color:#800080;">'SASHELP'</span> <span style="color:#0000ff;">and<br />
</span>            upcase(memname)=<span style="color:#800080;">'CLASS'</span>;<br />
<strong><span style="color:#000080;">quit</span></strong>;</span></p>
<p><span style="color:#008000;font-family:Courier New;">*1.2 Créer les macro variables CLASS1-CLASS5 en se basant sur le data set LST_VAR créé précédemment.;</span></p>
<p><span style="font-family:Courier New;"><span style="color:#000080;"><strong>data</strong></span> <span style="color:#0000ff;">_null_</span>;<br />
<span style="color:#0000ff;">   set</span> lst_var;<br />
   cnt+<span style="color:#008080;"><strong>1</strong></span>;<br />
<span style="color:#0000ff;">   call</span> symput (cats(<span style="color:#800080;">'CLASS'</span>,put(cnt,<span style="color:#008080;">best.</span>)),name);<br />
<strong><span style="color:#000080;">run</span></strong>;</span></p>
<p><span style="color:#008000;font-family:Courier New;">*1.3 Créer la macro variable VAR_MAX en se basant sur le data set LST_VAR créé précédemment.;</span></p>
<p><span style="font-family:Courier New;"><strong><span style="color:#000080;">data</span></strong> <span style="color:#0000ff;">_null_</span> ;<br />
   call symputx(<span style="color:#800080;">'max_var'</span>,_N_-<span style="color:#008080;"><strong>1</strong></span>);<br />
<span style="color:#0000ff;">   set</span> lst_var;<br />
<strong><span style="color:#000080;">run</span></strong>;</span></p>
<p><span style="color:#008000;font-family:Courier New;">*2. Reporting : appeler les différentes macro variables pour créer la boucle autour de l'instruction DEFINE.;</span></p>
<p><span style="font-family:Courier New;"><strong><span style="color:#000080;">%macro</span></strong> <strong><em>test</em></strong>;<br />
proc report data=sashelp.class;<br />
   columns name age sex weight height;<br />
<span style="color:#0000ff;">   %do</span> i=<strong><span style="color:#008080;">1</span></strong> <span style="color:#0000ff;">%to <span style="color:#000000;">&#38;</span></span><span style="color:#008080;"><strong>max_var.</strong><span style="color:#000000;">;</span><br />
</span>      define &#38;&#38;class&#38;<span style="color:#008080;">i.</span> / display;<br />
<span style="color:#0000ff;">   %end</span>;<br />
run;<br />
<strong><span style="color:#000080;">%mend</span></strong> test;<br />
<em><strong>%test</strong></em>;</span></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[SQL]]></title>
<link>http://touteverite.wordpress.com/?p=50</link>
<pubDate>Thu, 07 Aug 2008 13:32:13 +0000</pubDate>
<dc:creator>hirald</dc:creator>
<guid>http://touteverite.wordpress.com/?p=50</guid>
<description><![CDATA[Bon, j&#8217;avertis tout de suite, ce post là va parler d&#8217;informatique. Ça y est? ceux qui ]]></description>
<content:encoded><![CDATA[<p>Bon, j'avertis tout de suite, ce post là va parler d'informatique. Ça y est? ceux qui veulent rien savoir on déjà sauté à un autre post? Good! Bon je pense pas que je vais faire ce genre de post souvent, mais la je suis un peu désespéré avec une requête SQL....ok? ceux qui veulent rien savoir du SQL son parti? ok, on continue.</p>
<p>Dans le fond, mon problème c'est un peu ça (non en fait c'est exactement ça) :</p>
<p>J'ai 2 tables access, la première contient les champs a,b,c,g et la deuxième, les champs d,e,f,g</p>
<p>J'ai créé une autre table avec les champs<br />
a,b,c,d,e,f</p>
<p>Est-ce qu'il existe une façon d'importer les données des 2 tables premières tables dans la troisième et replacer les données dans les colonnes appropriées (la a avec la a, la b avec la b, etc...)<br />
Bon là on est rendu à éliminer ceux qui se disent :</p>
<p>- MeeeuuuanngnNngt!! rapport men!! c'est comme ben trop facile! trouve le tout seul!</p>
<p>- C'est impossible de faire ça! botte-toi le derrière et fait le manuellement! (c'est quand même un excellent argument ça!)</p>
<p>Pis on garde ceux qui disent :</p>
<p>- Ben voyons! tu me niaises-tu la! c'est super facile, fait ça comme ça.... (ça, c'est un peu ce que je voudrais entendre)</p>
<p>Merci d'avance, je commence à être un peu tanné, ça fait 3 jours que je suis là-dessus (et en même temps, je viens de justifier, pourquoi j'écris pas souvent sur le blog)</p>
<p>Hirald</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Mediawiki : ma première extension !]]></title>
<link>http://darkoneko.wordpress.com/?p=146</link>
<pubDate>Wed, 30 Jul 2008 00:17:51 +0000</pubDate>
<dc:creator>darkoneko</dc:creator>
<guid>http://darkoneko.wordpress.com/?p=146</guid>
<description><![CDATA[Ce matin (enfin hier maintenant), j&#8217;ai officiellement créé ma première extension pour Media]]></description>
<content:encoded><![CDATA[<p>Ce matin (enfin hier maintenant), j'ai officiellement créé ma <a href="http://www.mediawiki.org/wiki/Extension:RedirectOnLogin" target="_blank">première extension pour MediaWiki</a>.</p>
<p>Le code n'est pas bien sorcier, mais d'autres plus complets seront prochainement mis en ligne (peut-être). Le début de la gloire, quoi</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[9 points autour de la notion d'octet]]></title>
<link>http://thesasreference.wordpress.com/?p=282</link>
<pubDate>Mon, 28 Jul 2008 06:00:18 +0000</pubDate>
<dc:creator>The SAS Reference</dc:creator>
<guid>http://thesasreference.wordpress.com/?p=282</guid>
<description><![CDATA[
L&#8217;octet (byte en anglais) est une unité de mesure informatique utilisée en SAS pour défini]]></description>
<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-410" src="http://thesasreference.wordpress.com/files/2008/08/point_fr.jpg" alt="" width="448" height="224" /></p>
<p>L'octet (<em>byte</em> en anglais) est une unité de mesure informatique utilisée en SAS pour définir la longueur des variables. Il permet de stocker 1 caractère parmi une liste de 256. Une des listes de caractères les plus répandue est la table des ASCII (American Standard Code for Information Interchange). SAS dispose de deux fonctions RANK et BYTE pour passer d'un nombre à un de ces caractères et inversement. Ces notions sont à découvrir ou redécouvrir sous la forme de 9 points.</p>
<p><strong><span style="color:#ff6600;">1. Des notions mathématiques mises à la sauce informatique</span></strong></p>
<p><strong>Deux valeurs possibles avec les booléens :</strong> Les booléens (<em>boolean</em>) sont des valeurs égales à 0 ou à 1. C'est une notation mathématique. On parle souvent de la logique des booléens. L'interprétation de ces valeurs est :</p>
<ul>
<li>0 pour faux (<em>false</em>)</li>
<li>1 pour vrai (<em>true</em>)</li>
</ul>
<p>En SAS, les syntaxes FIRST/LAST et END= du data step se servent de la logique des booléens.</p>
<p><strong>Le bit est l'unité informatique de base</strong> : L'unité de mesure élémentaire en informatique, le bit (<em>bit</em> en anglais également) est basé sur le même principe. Le bit prend soit la valeur 0, soit la valeur 1.</p>
<p><strong>L'octet est un groupement de 8 bits</strong> : Un octet (<em>byte</em> en anglais) est égal à la combinaison de 8 unités élémentaires, de 8 bits.</p>
<p><span style="color:#ff6600;"><strong>2. Le but du jeu</strong></span></p>
<p>En informatique, le but du jeu est de n'utiliser que des valeurs 0/1 pour faire référence à des nombres entiers. Pour avoir un éventail de nombre entier assez large, il faut donc plusieurs bits.</p>
<p>Ensuite, pour chaque nombre entier une valeur peut être assignée. Par exemples, les nombres allant de 0 à 255 servent dans une table de référence pour les caractères, la table des ASCII.</p>
<p><span style="color:#ff6600;"><strong>3. Combien de valeurs différentes sont extraites avec x bits ?</strong> </span></p>
<p>Tout d'abord, les bits sont mis les uns à la suite des autres.</p>
<ul>
<li>Avec 1 bit : le bit prend soit la valeur 0 soit la valeur 1.</li>
<li>Avec 2 bits : les valeurs de 2 bits s'arrangent de 4 manières différentes à savoir 00, 01, 10 ou 11.</li>
<li>Avec 3 bits : les valeurs de 3 bits peuvent se présenter de 8 manières possibles 000, 001, 010, 011, 100, 101, 110, 111.</li>
</ul>
<p><strong>Généralisation : </strong>Pour savoir combien d'arrangements de 0 et 1 sont possibles, le nombre 2 (nombre de valeurs possibles dans un bit) est multiplié autant de fois qu'il y a de bits, soit 2<sup>x</sup>. En termes mathématiques, on parle du <strong>nombre d'arrangements avec répétition</strong>. Il s'agit bien du calcul avec répétition car les valeurs 0 et/ou 1 peuvent apparaître plusieurs fois.</p>
<p><strong>Ecrire un exposant sous SAS</strong> : Pour mettre une valeur en exposant sous SAS, on fait suivre la base de 2 étoiles et de l'exposant. Voici un exemple pour une variable nommée EXPOSANT.</p>
<ul>
<li>En langage mathématique : exposant=2<sup>8</sup></li>
<li>Sous SAS : exposant=2**8;</li>
</ul>
<p><strong><span style="color:#ff6600;">4. Quelle position pour mon bit ?</span></strong></p>
<p>On commence par regarder celui qui est le plus à droite et on lui assigne la position 0. Celui qui suit aura une position 1, etc.</p>
<ul>
<li>Avec 1 bit : le bit est en position 0.</li>
<li>Avec 2 bits : le premier bit est en position 1, le second en position 0.</li>
<li>Avec 3 bits : le premier bit est en position 2, le second en position 1 et le dernier en position 0.</li>
<li>Etc.</li>
</ul>
<p><strong><span style="color:#ff6600;">5. Création d'une liste de valeurs</span></strong></p>
<p>Maintenant que la position (x) de chaque bit est connue, on va additionner des valeurs 2<sup>x</sup> à chaque fois que le bit est égal à 1. Voici donc quelques exemples avec 1, 2 et 3 bits. D'un côté, on a l'arrangement des bites, de l'autre la valeur que l'on peut en extraire.</p>
<p>Avec 1 bit, les valeurs finales sont entre 0 et 1.</p>
<ul>
<li><strong>"0"</strong> : 0</li>
<li><strong>"1"</strong> : 2<sup>0</sup> = 1</li>
</ul>
<p>Avec 2 bits, les valeurs finales sont entre 0 et 3.</p>
<ul>
<li><strong>"00"</strong> : 0 + 0 = 0</li>
<li><strong>"01"</strong> : 0 + 2<sup>0</sup> = 0 + 1 = 1</li>
<li><strong>"10"</strong> : 2<sup>1 </sup>+ 0 = 2 + 0 = 2</li>
<li>"<strong>11"</strong> : 2<sup>1 </sup>+ 2<sup>0</sup> = 2 + 1 = 3</li>
</ul>
<p>Avec 3 bits, les valeurs finales sont entre 0 et 7.</p>
<ul>
<li><strong>"000"</strong> : 0 + 0 + 0 = 0</li>
<li><strong>"001"</strong> : 0 + 0 + 2<sup>0</sup> = 0 + 0  + 1 = 1</li>
<li><strong>"010"</strong> : 0 + 2<sup>1</sup>+ 0 = 0 + 2 + 0 = 2</li>
<li><strong>"011"</strong> : 0 + 2<sup>1</sup>+ 2<sup>0</sup> = 0 + 1+ 2 = 3</li>
<li><strong>"100"</strong> : 2<sup>2</sup> + 0 + 0 = 4 + 0 + 0 = 4</li>
<li><strong>"101"</strong> : 2<sup>2</sup> + 0 + 2<sup>0</sup> = 4 + 0 + 1 =5</li>
<li><strong>"110"</strong> : 2<sup>2 </sup>+ 2<sup>1 </sup>+ 0 = 4 + 2 + 0 = 6</li>
<li>"<strong>111"</strong> : 2<sup>2</sup> + 2<sup>1</sup>+ 2<sup>0</sup> = 4 + 2 + 1 = 7</li>
</ul>
<p>Avec 8 bits (1 octet) les valeurs vont de 0 à 255. Comme indiqué précédemment ces nombres servent pour la table des ASCII.</p>
<p><strong><span style="color:#ff6600;">6. La table des ASCII et les fonctions RANK/BYTE</span></strong></p>
<p>La <a title="ASCII table" href="http://www.asciitable.com/">table des ASCII</a> regroupe les caractères en trois groupes :</p>
<ul>
<li>0-31 : les codes de contrôle (<em>control code</em>) comme "passage à la ligne"</li>
<li>32-127 : les caractères imprimables <em>(printable characters</em>)</li>
<li>128-255 : les caractères spéciaux (<em>special characters</em>) comme é, à, û...</li>
</ul>
<p><strong>Note pour les claviers étrangers :</strong> La liste des caractères spéciaux est pratique à l'étranger lorsqu'un clavier d'ordinateur ne dispose pas des accents. Ainsi pour obtenir la lettre "é", maintenez la touche "Alt" enfoncé et tapez le nombre 0233. Voici ceux que j'utilise le plus souvent :</p>
<ul>
<li>0224 à</li>
<li>0226 â</li>
<li>0231 ç</li>
<li>0233 é</li>
<li>0234 ê</li>
<li>0235 è</li>
<li>0238 î</li>
<li>0244 ô</li>
<li>0249 ù</li>
<li>0251 û</li>
</ul>
<p><strong>Exemples d'applications</strong> : Dans le cadre des fonctions SAS, je vais me concentrer sur les valeurs 32 à 255 car ce sont les valeurs que j'ai rencontré dans des data sets SAS. J'ai aussi eu besoin de vérifier qu'une macro pouvait toujours fonctionner quand elle rencontrait ces caractères dans un data set. Pour se faire, j'ai eu besoin de créer un data set les contenant.</p>
<p><strong><span style="color:#ff6600;">7. Convertir un nombre en caractère (la fonction BYTE)</span></strong></p>
<p>Dans cet exemple, la fonction BYTE génère toutes les valeurs ASCII imprimables et les sauvegarde dans une variable ASCII. Pour ce faire, une boucle est construite avec les instructions DO et END. C'est l'occasion d'introduire rapidement sous forme d'exemple la notion de boucle.</p>
<p><span style="font-family:Courier New;"><strong><span style="color:#000080;">data</span></strong> one (drop=i);<br />
   <span style="color:#0000ff;">do</span> i=<span style="color:#008080;"><strong>32</strong></span> <span style="color:#0000ff;">to</span> <span style="color:#008080;"><strong>127</strong></span>;<br />
   <span style="color:#008000;">*do i=128 to 255;<br />
</span>      ascii=byte(i);<br />
      <span style="color:#0000ff;">output</span>;<br />
   <span style="color:#0000ff;">end</span>;<br />
<strong><span style="color:#000080;">run</span></strong>;</span></p>
<p>La boucle est définie par variable i allant de 32 à 128 (et non 127) mais l'action est conduite seulement pour les valeurs 32 à 127. Les valeurs intermédiaires sont distantes d'une valeur 1 car l'incrémentation par défaut est 1. Pour changer cette valeur par défaut et disons prendre une valeur sur deux, on ajoute BY 2 dans l'instruction DO.</p>
<p>A chaque fin de boucle i est incrémenté par 1. Quand i=127, la valeur est calculée une dernière fois. Puis i est incrémenté  par 1. Avec i=128, la condition n'est plus remplie. Le contenu de la boucle est ignoré. SAS s'intéresse à l'étape suivante dans le data step. Ici l'étape suivante est la suppression de la variable i définissant la boucle.</p>
<p>A chaque nouvelle valeur de la variable i, la variable ASCII est recalculée. Puis le record est ajouté dans le data set ONE grâce à l'instruction OUTPUT.</p>
<p><strong><span style="color:#ff6600;">8. Convertir un caractère ASCII en nombre (la fonction RANK)</span></strong></p>
<p>Dans cet exemple, la fonction RANK retourne la valeur numérique de la table ASCII pour la lettre "é". Cette valeur est sauvegardée dans la variable VAL_NUM.</p>
<p><span style="font-family:Courier New;"><strong><span style="color:#000080;">data</span></strong> two;<br />
   val_num=rank(<span style="color:#800080;">'é'</span>);<br />
<strong><span style="color:#000080;">run</span></strong>; </span></p>
<p><strong><span style="color:#ff6600;">9. Les multiples des octets dans le commerce</span></strong></p>
<p>Dans le monde des disques durs..., et taille de fichiers...., vous entendez couramment parler de :</p>
<ul>
<li>Kilooctet ou Ko (Kilo Byte KB en anglais),</li>
<li>Megaoctet ou Mo (Mega Byte MB),</li>
<li>Gigaoctet ou Go (Giga Byte GB),</li>
<li>Teraoctet ou To (Tera Byte TB).</li>
</ul>
<p>A l'avenir, on entendre peut-être même parle de :</p>
<ul>
<li>Petaoctet ou Po (Peta Byte PB),</li>
<li>Exaoctet ou Eo (Exa Byte EB),</li>
<li>Zebioctet ou Zo (Zebi Byte ZB),</li>
<li>Yobioctet ou Yo (Yobi Byte YB).</li>
</ul>
<p>La Commission Electrotechnique International (<em><a title="International Electrotechnique Commission IEC" href="http://www.iec.ch/zone/si/si_bytes.htm">International Electrotechnique Commission</a></em> IEC) a développé un standard se basant sur des multiples de 10 de l'octet. Cependant, l'ancien standard peut encore être rencontré.</p>
<ul>
<li><strong>Nouveau standard</strong> : un Kilooctet est 1 000 octets (10<sup>3)</sup>. Un Megaoctet est 1 000 000 (10<sup>6</sup>).</li>
<li><strong>Ancien standard</strong> : un Kilooctet représente 1 024 octets (2<sup>10</sup>). Pour le Megaoctet, on passe à 1 048 576 (2<sup>20</sup>).</li>
</ul>
<p>En résumé, en achetant un disque dur de 500 Go, le produit est plus intéressant s'il réfère à l'ancien standard car il aura une plus grande capacité. Par contre, si on a un fichier de 5 Mo à envoyer, il représente moins de volume si on parle avec le nouveau standard.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[C : les grandes bases]]></title>
<link>http://tofuxopensource.wordpress.com/?p=37</link>
<pubDate>Tue, 22 Jul 2008 17:49:54 +0000</pubDate>
<dc:creator>tofux</dc:creator>
<guid>http://tofuxopensource.wordpress.com/?p=37</guid>
<description><![CDATA[Voici le début d&#8217;une (je l&#8217;espere) relativement longue série de tutoriels sur la progr]]></description>
<content:encoded><![CDATA[<p>Voici le début d'une (je l'espere) relativement longue série de tutoriels sur la programmation en C. Ce premier tutoriel va vous expliquer les bases, vous n'allez pas faire de la programmation a propremment parler. Voici un petit sommaire des choses que nous allons voir:</p>
<p>1.Qu'est-ce-que la programmation?</p>
<p>2.La compilation, la programmation modulaire et le linker.</p>
<p>3.Le C et ses dérivés.</p>
<p><strong>1. QU'EST-CE QUE LA PROGRAMMATION?</strong></p>
<p>La programmation, c'est l'art ou et/ou la science (ca dépend du point de vue) de réaliser un programme complet pour indiquer a notre ordinateur comment obtenir un logiciel. Malheureusement vous et le PC ne parlez pas la même langue. Vous parlez une langue humaine (ici français je suipose :) ). Votre PC, lui parle binaire. En gros, vous, vous utilisez un 'set' de 26caracteres plus les nombres, l'espace et les caracteres spéciaux, lui il utilise juste... 2 nombre: 0 et 1. Mais rassurez vous: vous ne programmerez pas en utilisant que des 0 et des 1. Vous allez faire vos programmes en écrivant un "code" bien précis qui est en fait ce que vous voulez que votre ordinateur fasse, mais comme vous l'aurez compris il ne comprend rien comme ca. Il faut traduire votre programme. Et c'est pour ca que nous avons besoin d'un compilateur.</p>
<p><strong>2. LE COMPILATEUR.</strong></p>
<p>Un compilateur, en gros, c'est un traducteur: il vas traduire vos programmes en un fichier binaire exécutable. En gros, votre compilateur comprend en fait deux élément: le complilateur et le linker. Le compiltateur, lui se charge de transformez les fichiers .c et .h (ce sont les fichiers qui contiennent votre code, vous verrez ca plus tard) en fichiers.o . Et le linker se charge de lier les .h et .c entre eux pour faire un seul logiciel binaire. Voila, c'est pas plus compliqué que ca, bien que le fonctionement du compilateur, lui, l'est beaucoup plus. Parce que la je viens juste de vous expliquer ce qu'il fait, pas comment il marche :D. Peut etre qu'un jour, si vous etes (tres) motiver, vous réaliserez votre propre compilateur/linker, qui sait... Apres tout, un programmeur confirmé doit avoir la capacité d'en faire, mais tous n'ont peut etre pas la motivation de faire ca en tant qu'hobby :-)</p>
<p><strong>3. Le C et ses dérivés.</strong></p>
<p>Le language que nous nous allons travailler est un language tres connus, tres utilisé, si pas le plus utilisé. Il s'agit du C. Linux a été écrit en C, pour vous donner un exemple concret. Le C est un language pratique, clair, puissant, souple, et aux possibilités larges. Mais il a donné naissance a 2 dérivés: le C++ et le C# (c sharp). Le C++, c'est une modification du C "orienté Objet", qui est en résumé une facon plus claire et avec plus de possibilités d'organiser les fonctions. Quant au c#, il ne rappelle pas autant le C que C++. En fait, je dénonce tout de suite le fait... que c'est une Windowserie. Il s'agit meme d'une propriété Microsoft!!! C'est triste hein... Qui d'autre que Windows pouvait faire une chose pareille?</p>
<p>Bon voila vous connaissez a présent les concept de la programmation. J'attend vos question, suggestions, et autres.</p>
<p>Tofux.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[RainCode, société d'ingénierie logicielle basée à Bruxelles]]></title>
<link>http://publicites.wordpress.com/?p=253</link>
<pubDate>Wed, 16 Jul 2008 15:27:30 +0000</pubDate>
<dc:creator>Buzz marketing</dc:creator>
<guid>http://publicites.wordpress.com/?p=253</guid>
<description><![CDATA[Promotion Web
Communiqués de presse, informatique, services.
RainCode, société d&#8217;ingénieri]]></description>
<content:encoded><![CDATA[<p><a title="Promotion Web" href="http://publicites.wordpress.com/"><strong>Promotion Web</strong></a></p>
<p><strong><a title="Communiqués de presse" href="http://publicites.wordpress.com/category/communiques/">Communiqués de presse</a>, <a title="Informatique" href="http://publicites.wordpress.com/category/informatique/">informatique</a>, <a title="Services" href="http://publicites.wordpress.com/category/services/">services</a></strong>.</p>
<p><strong>RainCode, société d'ingénierie logicielle basée à Bruxelles</strong></p>
<p><img src="http://open.thumbshots.org/image.pxf?url=http://www.raincode.com" alt="RainCode" width="120" height="90" /></p>
<p><a title="RainCode, solutions COBOL" href="http://www.raincode.com"><strong>RainCode</strong></a></p>
<p><a title="Computer Research, Inc" href="http://www.critrade.com">Computer Research, Inc</a>. (offre des solutions complètes de gestion de titres pour les banques et autres institutions financières.</p>
<p>Sur ce marché, la fiabilité et la robustesse sont essentielles, et les applications <a title="Language informatique, Cobol" href="http://www.raincode.com/cobollg.html"><strong>COBOL</strong></a> de CRI tournent sur les plateformes iSeries d' IBM (mieux connues sous la dénomination AS/400).</p>
<p>Face à l'accélération des demandes des clients et la pression de la concurrence, CRI était à la recherche de solutions techniques permettant d'améliorer la flexibilité de ses <a title="Applications RainCode" href="http://www.raincode.com/products.html"><strong>applications</strong></a>, et ainsi mieux répondre aux besoins, tout en maintenant une exigence qualitative élevée.</p>
<p>Une étude de marché des outils applicables à COBOL amena CRI assez rapidement chez RainCode, qui propose des outils d'analyse et de remédiassions pour les <a title="Languages de programmation" href="http://www.raincode.com/languages.html"><strong>langages de programmation</strong></a> les plus populaires.</p>
<p>Ces outils permettent l'identification des points faibles dans les applications existantes, et fournissent le plus souvent les moyens de les corriger automatiquement ou semi-automatiquement.</p>
<p>Après une phase d'évaluation, CRI a fait l'acquisition d'une licence du <a title="RainCode Checker" href="http://www.raincode.com/checker.html"><strong>RainCode Checker</strong></a> pour COBOL, qui supporte les extensions spécifiques à la gamme iSeries COBOL d' IBM.</p>
<p>Cet outil vérifie automatiquement une batterie de règles de codage sur un ensemble de programmes, afin d'en garantir la qualité et l'homogénéité.</p>
<p>De plus, la r<strong>estructuration COBOL</strong> permet d'améliorer automatiquement la qualité, la maintenabilité et la performance de programmes existants par l'utilisation des constructions offertes par les dialectes COBOL les plus modernes.</p>
<p>Au vu des premiers résultats, CRI est rapidement devenu un partisan enthousiaste des technologies RainCode.</p>
<p>« Ce que j’apprécie chez RainCode, c’est leur flexibilité et leur volonté de s’adapter aux besoins de leurs clients.</p>
<p>En plus ils proposent une technologie phénoménale, et ils ont réussi sans effort particulier là ou tous leurs concurrents ont échoué lamentablement» dit Dennis Noto, directeur informatique chez <a title="Computer Research, Inc" href="http://www.critrade.com">Computer Research, Inc</a>.</p>
<p>Après cette première phase, CRI envisage maintenant l'utilisation des <strong>technologies RainCode</strong> pour des projets techniques qui ont du être postposés à plusieurs reprises par manque de temps et de budget.</p>
<p>Les capacités d'automatisation offertes par RainCode permettent de réduire les coûts de tels projets (migration de base de données, normalisation, etc.) par des facteurs importants.</p>
<p>"CRI est pour nous le cas idéal: c'est un client dont les besoins sont clairement identifiés, et où le retour sur l’investissement des différents produits et services que nous pouvons<br />
proposer se mesure aisément.</p>
<p>La décision d'achat y est toujours motivée par l'avantage concurrentiel obtenu, à l'exclusion de tout autre facteur émotionnel.</p>
<p>Malgré la faiblesse du dollar, la puissance de notre technologie nous permet de proposer des solutions pointues pour des prix très agressifs." (Darius Blasband, RainCode).</p>
<p>RainCode  est une société basée à Bruxelles et fondée en septembre 1998.</p>
<p>Spécialisée dans les techniques de compilation et de manière plus générale, le traitement des <strong>langages de programmation</strong>.</p>
<p>Ses produits sont déclinés pour la majorité des langages utilisés en production aujourd'hui, (COBOL, PL/1, Informix 4GL, C, C++, ADA entre autres).</p>
<p>RainCode a également appliqué avec succès ses technologies aux migrations techniques (base de données, langage, moniteur transactionnel, etc.) et des solutions pointues pour des prix très agressifs."</p>
<p>(Darius Blasband, RainCode).</p>
<p><strong>Contact Presse :</strong></p>
<p>1 Rue de l’Autonomie,</p>
<p>B-1070</p>
<p>Bruxelles</p>
<p>Belgique</p>
<p>Téléphone : (0)2 522 06 63</p>
<p>Fax : (0)2 522 09 30</p>
<p><a title="communiqués de presse" href="http://communiques-presse.com/"><strong>Communiqué de presse</strong></a> pour : <a title="RainCode, société d’ingénierie logicielle basée à Bruxelles" href="http://communiques-presse.com/raincode-societe-d-ingenierie-logicielle-basee-a-bruxelles/"><strong>RainCode</strong></a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[RainCode, société d'ingénierie logicielle basée à Bruxelles]]></title>
<link>http://communiques.wordpress.com/?p=261</link>
<pubDate>Wed, 16 Jul 2008 15:23:18 +0000</pubDate>
<dc:creator>Buzz marketing</dc:creator>
<guid>http://communiques.wordpress.com/?p=261</guid>
<description><![CDATA[Communiqués de presse, services, informatique.
RainCode, société d&#8217;ingénierie logicielle b]]></description>
<content:encoded><![CDATA[<p><strong><a title="Communiqués de presse" href="http://communiques.wordpress.com/">Communiqués de presse</a>, <a title="Services" href="http://communiques.wordpress.com/category/services/">services</a>, <a title="Informatique" href="http://communiques.wordpress.com/category/informatique/">informatique</a></strong>.</p>
<p><strong>RainCode, société d'ingénierie logicielle basée à Bruxelles</strong></p>
<p><img src="http://open.thumbshots.org/image.pxf?url=http://www.raincode.com" alt="RainCode" width="120" height="90" /></p>
<p><a title="RainCode, solutions COBOL" href="http://www.raincode.com"><strong>RainCode</strong></a></p>
<p><a title="Computer Research, Inc" href="http://www.critrade.com">Computer Research, Inc</a>. (offre des solutions complètes de gestion de titres pour les banques et autres institutions financières.</p>
<p>Sur ce marché, la fiabilité et la robustesse sont essentielles, et les applications <a title="Language informatique, Cobol" href="http://www.raincode.com/cobollg.html"><strong>COBOL</strong></a> de CRI tournent sur les plateformes iSeries d' IBM (mieux connues sous la dénomination AS/400).</p>
<p>Face à l'accélération des demandes des clients et la pression de la concurrence, CRI était à la recherche de solutions techniques permettant d'améliorer la flexibilité de ses <a title="Applications RainCode" href="http://www.raincode.com/products.html"><strong>applications</strong></a>, et ainsi mieux répondre aux besoins, tout en maintenant une exigence qualitative élevée.</p>
<p>Une étude de marché des outils applicables à COBOL amena CRI assez rapidement chez RainCode, qui propose des outils d'analyse et de remédiassions pour les <a title="Languages de programmation" href="http://www.raincode.com/languages.html"><strong>langages de programmation</strong></a> les plus populaires.</p>
<p>Ces outils permettent l'identification des points faibles dans les applications existantes, et fournissent le plus souvent les moyens de les corriger automatiquement ou semi-automatiquement.</p>
<p>Après une phase d'évaluation, CRI a fait l'acquisition d'une licence du <a title="RainCode Checker" href="http://www.raincode.com/checker.html"><strong>RainCode Checker</strong></a> pour COBOL, qui supporte les extensions spécifiques à la gamme iSeries COBOL d' IBM.</p>
<p>Cet outil vérifie automatiquement une batterie de règles de codage sur un ensemble de programmes, afin d'en garantir la qualité et l'homogénéité.</p>
<p>De plus, la r<strong>estructuration COBOL</strong> permet d'améliorer automatiquement la qualité, la maintenabilité et la performance de programmes existants par l'utilisation des constructions offertes par les dialectes COBOL les plus modernes.</p>
<p>Au vu des premiers résultats, CRI est rapidement devenu un partisan enthousiaste des technologies RainCode.</p>
<p>« Ce que j’apprécie chez RainCode, c’est leur flexibilité et leur volonté de s’adapter aux besoins de leurs clients.</p>
<p>En plus ils proposent une technologie phénoménale, et ils ont réussi sans effort particulier là ou tous leurs concurrents ont échoué lamentablement» dit Dennis Noto, directeur informatique chez <a title="Computer Research, Inc" href="http://www.critrade.com">Computer Research, Inc</a>.</p>
<p>Après cette première phase, CRI envisage maintenant l'utilisation des <strong>technologies RainCode</strong> pour des projets techniques qui ont du être postposés à plusieurs reprises par manque de temps et de budget.</p>
<p>Les capacités d'automatisation offertes par RainCode permettent de réduire les coûts de tels projets (migration de base de données, normalisation, etc.) par des facteurs importants.</p>
<p>"CRI est pour nous le cas idéal: c'est un client dont les besoins sont clairement identifiés, et où le retour sur l’investissement des différents produits et services que nous pouvons<br />
proposer se mesure aisément.</p>
<p>La décision d'achat y est toujours motivée par l'avantage concurrentiel obtenu, à l'exclusion de tout autre facteur émotionnel.</p>
<p>Malgré la faiblesse du dollar, la puissance de notre technologie nous permet de proposer des solutions pointues pour des prix très agressifs." (Darius Blasband, RainCode).</p>
<p>RainCode  est une société basée à Bruxelles et fondée en septembre 1998.</p>
<p>Spécialisée dans les techniques de compilation et de manière plus générale, le traitement des <strong>langages de programmation</strong>.</p>
<p>Ses produits sont déclinés pour la majorité des langages utilisés en production aujourd'hui, (COBOL, PL/1, Informix 4GL, C, C++, ADA entre autres).</p>
<p>RainCode a également appliqué avec succès ses technologies aux migrations techniques (base de données, langage, moniteur transactionnel, etc.) et des solutions pointues pour des prix très agressifs."</p>
<p>(Darius Blasband, RainCode).</p>
<p><strong>Contact Presse :</strong></p>
<p>1 Rue de l’Autonomie,</p>
<p>B-1070</p>
<p>Bruxelles</p>
<p>Belgique</p>
<p>Téléphone : (0)2 522 06 63</p>
<p>Fax : (0)2 522 09 30</p>
<p><a title="communiqués de presse" href="http://communiques-presse.com/"><strong>Communiqué de presse</strong></a> pour : <a title="RainCode, société d’ingénierie logicielle basée à Bruxelles" href="http://communiques-presse.com/raincode-societe-d-ingenierie-logicielle-basee-a-bruxelles/"><strong>RainCode</strong></a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[RainCode, société d'ingénierie logicielle basée à Bruxelles]]></title>
<link>http://buzzseo.wordpress.com/?p=258</link>
<pubDate>Wed, 16 Jul 2008 15:13:05 +0000</pubDate>
<dc:creator>Buzz marketing</dc:creator>
<guid>http://buzzseo.wordpress.com/?p=258</guid>
<description><![CDATA[SEO, blog, référencement, buzz
Communiqués de presse, informatique, services.
RainCode, société]]></description>
<content:encoded><![CDATA[<p><a title="SEO, blog, référencement, buzz" href="http://buzzseo.wordpress.com/"><strong>SEO, blog, référencement, buzz</strong></a></p>
<p><strong><a title="Communiqués de presse" href="http://buzzseo.wordpress.com/category/communiques/">Communiqués de presse</a>, <a title="Informatique" href="http://buzzseo.wordpress.com/category/informatique/">informatique</a>, <a title="Services" href="http://buzzseo.wordpress.com/category/services/">services</a></strong>.</p>
<p><strong>RainCode, société d'ingénierie logicielle basée à Bruxelles</strong></p>
<p><img src="http://open.thumbshots.org/image.pxf?url=http://www.raincode.com" alt="RainCode" width="120" height="90" /></p>
<p><a title="RainCode, solutions COBOL" href="http://www.raincode.com"><strong>RainCode</strong></a></p>
<p><a title="Computer Research, Inc" href="http://www.critrade.com">Computer Research, Inc</a>. (offre des solutions complètes de gestion de titres pour les banques et autres institutions financières.</p>
<p>Sur ce marché, la fiabilité et la robustesse sont essentielles, et les applications <a title="Language informatique, Cobol" href="http://www.raincode.com/cobollg.html"><strong>COBOL</strong></a> de CRI tournent sur les plateformes iSeries d' IBM (mieux connues sous la dénomination AS/400).</p>
<p>Face à l'accélération des demandes des clients et la pression de la concurrence, CRI était à la recherche de solutions techniques permettant d'améliorer la flexibilité de ses <a title="Applications RainCode" href="http://www.raincode.com/products.html"><strong>applications</strong></a>, et ainsi mieux répondre aux besoins, tout en maintenant une exigence qualitative élevée.</p>
<p>Une étude de marché des outils applicables à COBOL amena CRI assez rapidement chez RainCode, qui propose des outils d'analyse et de remédiassions pour les <a title="Languages de programmation" href="http://www.raincode.com/languages.html"><strong>langages de programmation</strong></a> les plus populaires.</p>
<p>Ces outils permettent l'identification des points faibles dans les applications existantes, et fournissent le plus souvent les moyens de les corriger automatiquement ou semi-automatiquement.</p>
<p>Après une phase d'évaluation, CRI a fait l'acquisition d'une licence du <a title="RainCode Checker" href="http://www.raincode.com/checker.html"><strong>RainCode Checker</strong></a> pour COBOL, qui supporte les extensions spécifiques à la gamme iSeries COBOL d' IBM.</p>
<p>Cet outil vérifie automatiquement une batterie de règles de codage sur un ensemble de programmes, afin d'en garantir la qualité et l'homogénéité.</p>
<p>De plus, la r<strong>estructuration COBOL</strong> permet d'améliorer automatiquement la qualité, la maintenabilité et la performance de programmes existants par l'utilisation des constructions offertes par les dialectes COBOL les plus modernes.</p>
<p>Au vu des premiers résultats, CRI est rapidement devenu un partisan enthousiaste des technologies RainCode.</p>
<p>« Ce que j’apprécie chez RainCode, c’est leur flexibilité et leur volonté de s’adapter aux besoins de leurs clients.</p>
<p>En plus ils proposent une technologie phénoménale, et ils ont réussi sans effort particulier là ou tous leurs concurrents ont échoué lamentablement» dit Dennis Noto, directeur informatique chez <a title="Computer Research, Inc" href="http://www.critrade.com">Computer Research, Inc</a>.</p>
<p>Après cette première phase, CRI envisage maintenant l'utilisation des <strong>technologies RainCode</strong> pour des projets techniques qui ont du être postposés à plusieurs reprises par manque de temps et de budget.</p>
<p>Les capacités d'automatisation offertes par RainCode permettent de réduire les coûts de tels projets (migration de base de données, normalisation, etc.) par des facteurs importants.</p>
<p>"CRI est pour nous le cas idéal: c'est un client dont les besoins sont clairement identifiés, et où le retour sur l’investissement des différents produits et services que nous pouvons<br />
proposer se mesure aisément.</p>
<p>La décision d'achat y est toujours motivée par l'avantage concurrentiel obtenu, à l'exclusion de tout autre facteur émotionnel.</p>
<p>Malgré la faiblesse du dollar, la puissance de notre technologie nous permet de proposer des solutions pointues pour des prix très agressifs." (Darius Blasband, RainCode).</p>
<p>RainCode  est une société basée à Bruxelles et fondée en septembre 1998.</p>
<p>Spécialisée dans les techniques de compilation et de manière plus générale, le traitement des <strong>langages de programmation</strong>.</p>
<p>Ses produits sont déclinés pour la majorité des langages utilisés en production aujourd'hui, (COBOL, PL/1, Informix 4GL, C, C++, ADA entre autres).</p>
<p>RainCode a également appliqué avec succès ses technologies aux migrations techniques (base de données, langage, moniteur transactionnel, etc.) et des solutions pointues pour des prix très agressifs."</p>
<p>(Darius Blasband, RainCode).</p>
<p><strong>Contact Presse :</strong></p>
<p>1 Rue de l’Autonomie,</p>
<p>B-1070</p>
<p>Bruxelles</p>
<p>Belgique</p>
<p>Téléphone : (0)2 522 06 63</p>
<p>Fax : (0)2 522 09 30</p>
<p><a title="communiqués de presse" href="http://communiques-presse.com/"><strong>Communiqué de presse</strong></a> pour : <a title="RainCode, société d’ingénierie logicielle basée à Bruxelles" href="http://communiques-presse.com/raincode-societe-d-ingenierie-logicielle-basee-a-bruxelles/"><strong>RainCode</strong></a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[RainCode, société d'ingénierie logicielle basée à Bruxelles]]></title>
<link>http://buddapass.wordpress.com/?p=817</link>
<pubDate>Wed, 16 Jul 2008 15:08:12 +0000</pubDate>
<dc:creator>Buzz marketing</dc:creator>
<guid>http://buddapass.wordpress.com/?p=817</guid>
<description><![CDATA[Buzz
Communiqués de presse, informatique.
RainCode, société d&#8217;ingénierie logicielle basée]]></description>
<content:encoded><![CDATA[<p><a title="Buzz" href="http://buddapass.wordpress.com/"><strong>Buzz</strong></a></p>
<p><strong><a title="Communiqués de presse" href="http://buddapass.wordpress.com/category/communiques-de-presse/">Communiqués de presse</a>, <a title="Informatique" href="http://buddapass.wordpress.com/category/informatique/">informatique</a></strong>.</p>
<p><strong>RainCode, société d'ingénierie logicielle basée à Bruxelles</strong></p>
<p><img src="http://open.thumbshots.org/image.pxf?url=http://www.raincode.com" alt="RainCode" width="120" height="90" /></p>
<p><a title="RainCode, solutions COBOL" href="http://www.raincode.com"><strong>RainCode</strong></a></p>
<p><a title="Computer Research, Inc" href="http://www.critrade.com">Computer Research, Inc</a>. (offre des solutions complètes de gestion de titres pour les banques et autres institutions financières.</p>
<p>Sur ce marché, la fiabilité et la robustesse sont essentielles, et les applications <a title="Language informatique, Cobol" href="http://www.raincode.com/cobollg.html"><strong>COBOL</strong></a> de CRI tournent sur les plateformes iSeries d' IBM (mieux connues sous la dénomination AS/400).</p>
<p>Face à l'accélération des demandes des clients et la pression de la concurrence, CRI était à la recherche de solutions techniques permettant d'améliorer la flexibilité de ses <a title="Applications RainCode" href="http://www.raincode.com/products.html"><strong>applications</strong></a>, et ainsi mieux répondre aux besoins, tout en maintenant une exigence qualitative élevée.</p>
<p>Une étude de marché des outils applicables à COBOL amena CRI assez rapidement chez RainCode, qui propose des outils d'analyse et de remédiassions pour les <a title="Languages de programmation" href="http://www.raincode.com/languages.html"><strong>langages de programmation</strong></a> les plus populaires.</p>
<p>Ces outils permettent l'identification des points faibles dans les applications existantes, et fournissent le plus souvent les moyens de les corriger automatiquement ou semi-automatiquement.</p>
<p>Après une phase d'évaluation, CRI a fait l'acquisition d'une licence du <a title="RainCode Checker" href="http://www.raincode.com/checker.html"><strong>RainCode Checker</strong></a> pour COBOL, qui supporte les extensions spécifiques à la gamme iSeries COBOL d' IBM.</p>
<p>Cet outil vérifie automatiquement une batterie de règles de codage sur un ensemble de programmes, afin d'en garantir la qualité et l'homogénéité.</p>
<p>De plus, la r<strong>estructuration COBOL</strong> permet d'améliorer automatiquement la qualité, la maintenabilité et la performance de programmes existants par l'utilisation des constructions offertes par les dialectes COBOL les plus modernes.</p>
<p>Au vu des premiers résultats, CRI est rapidement devenu un partisan enthousiaste des technologies RainCode.</p>
<p>« Ce que j’apprécie chez RainCode, c’est leur flexibilité et leur volonté de s’adapter aux besoins de leurs clients.</p>
<p>En plus ils proposent une technologie phénoménale, et ils ont réussi sans effort particulier là ou tous leurs concurrents ont échoué lamentablement» dit Dennis Noto, directeur informatique chez <a title="Computer Research, Inc" href="http://www.critrade.com">Computer Research, Inc</a>.</p>
<p>Après cette première phase, CRI envisage maintenant l'utilisation des <strong>technologies RainCode</strong> pour des projets techniques qui ont du être postposés à plusieurs reprises par manque de temps et de budget.</p>
<p>Les capacités d'automatisation offertes par RainCode permettent de réduire les coûts de tels projets (migration de base de données, normalisation, etc.) par des facteurs importants.</p>
<p>"CRI est pour nous le cas idéal: c'est un client dont les besoins sont clairement identifiés, et où le retour sur l’investissement des différents produits et services que nous pouvons<br />
proposer se mesure aisément.</p>
<p>La décision d'achat y est toujours motivée par l'avantage concurrentiel obtenu, à l'exclusion de tout autre facteur émotionnel.</p>
<p>Malgré la faiblesse du dollar, la puissance de notre technologie nous permet de proposer des solutions pointues pour des prix très agressifs." (Darius Blasband, RainCode).</p>
<p>RainCode  est une société basée à Bruxelles et fondée en septembre 1998.</p>
<p>Spécialisée dans les techniques de compilation et de manière plus générale, le traitement des <strong>langages de programmation</strong>.</p>
<p>Ses produits sont déclinés pour la majorité des langages utilisés en production aujourd'hui, (COBOL, PL/1, Informix 4GL, C, C++, ADA entre autres).</p>
<p>RainCode a également appliqué avec succès ses technologies aux migrations techniques (base de données, langage, moniteur transactionnel, etc.) et des solutions pointues pour des prix très agressifs."</p>
<p>(Darius Blasband, RainCode).</p>
<p><strong>Contact Presse :</strong></p>
<p>1 Rue de l’Autonomie,</p>
<p>B-1070</p>
<p>Bruxelles</p>
<p>Belgique</p>
<p>Téléphone : (0)2 522 06 63</p>
<p>Fax : (0)2 522 09 30</p>
<p><a title="communiqués de presse" href="http://communiques-presse.com/"><strong>Communiqué de presse</strong></a> pour : <a title="RainCode, société d’ingénierie logicielle basée à Bruxelles" href="http://communiques-presse.com/raincode-societe-d-ingenierie-logicielle-basee-a-bruxelles/"><strong>RainCode</strong></a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Documentation RichTextBox]]></title>
<link>http://phoenixnii.wordpress.com/?p=8</link>
<pubDate>Tue, 15 Jul 2008 00:59:44 +0000</pubDate>
<dc:creator>phoenixnii</dc:creator>
<guid>http://phoenixnii.wordpress.com/?p=8</guid>
<description><![CDATA[Bonsoir à tous!
Connaissez vous les RichTextBox ? probablement non si vous n&#8217;êtes pas progra]]></description>
<content:encoded><![CDATA[<p>Bonsoir à tous!</p>
<p>Connaissez vous les RichTextBox ? probablement non si vous n'êtes pas programmeur, c'est les boites qui vous permettent d'écrire du texte formaté ( avec des couleurs, gras, italique etc...) que vous retrouvez dans WordPad ou autre...</p>
<p>Créé par Microsoft (lisez MyCrossoft :p ) pour simplifier la vie aux programmeurs... simplifier ? j'en doute... j'ai du galéré pour trouver la documentation et encore elle est loin d'être complète, pourtant ce n'est pas si compliquer a utiliser...</p>
<p>Enfin, pour remonter le moral voici la définition de Microsoft by Désencyclopedie ;)</p>
<p>D'abord quelques citations :</p>
<blockquote>
<div style="font-family:monospace;margin-bottom:0.5em;text-align:left;"></div>
<p><em> « <strong>AAAAAAAHHHHHHHHH!!!!!!!! </strong>»<br />
</em><em>~ Un utilisateur de Windows à propos du plaisir qu'il ressent à travailler dans cet environnement.</em></p></blockquote>
<blockquote><p><em>« <strong>Que... Et meeeeerdeeeeuh ! </strong>»<br />
~ Un autre utilisateur de Windows à propos du plaisir qu'il ressent à travailler dans cet environnement.</em></p></blockquote>
<div style="text-indent:2em;"><strong>Et maintenant la définition :</strong><br />
<em>Compagnie créée dans le début des années 80 qui avait pour but primaire de dominer le monde et de créer des copies de <a title="Linux" href="http://desencyclopedie.wikia.com/wiki/Linux">Linux</a> et Mac en plus pourri. Objectif qui, pour l'instant, n'est toujours pas atteint. Il ne manque que quelques années pour accomplir ce plan plutôt astucieux qu'est la complète domination/possession des marchés économiques du monde entier. Le nom <strong>Microsoft</strong> vient de </em><em>micro, qui veut dire minuscule, et </em><em>soft, qui veut dire mou. Il s'agit des deux caractéristiques principales du <a title="Pénis" href="http://desencyclopedie.wikia.com/wiki/P%C3%A9nis">pénis</a> de <a title="Bill Gates" href="http://desencyclopedie.wikia.com/wiki/Bill_Gates">Bill Gates</a>, son fondateur.</em></div>
<div style="text-indent:2em;">Voili voilou! Si quelqu'un a une documentation complète sur les RichTextBox qu'il poste un commentaire... et si il ne l'a pas qu'il poste quand même ! héhéhé</div>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Il est 8h, il fait 22 degrés et le monde c'est de la m...]]></title>
<link>http://satellitevoyageur.wordpress.com/?p=395</link>
<pubDate>Mon, 14 Jul 2008 18:04:11 +0000</pubDate>
<dc:creator>Satellite Voyageur</dc:creator>
<guid>http://satellitevoyageur.wordpress.com/?p=395</guid>
<description><![CDATA[C&#8217;est peut-être ainsi que commencera l&#8217;émission du matin de la programmation &#8220;Re]]></description>
<content:encoded><![CDATA[<p>C'est peut-être ainsi que commencera l'émission du matin de la programmation "Remstarienne" en septembre à TQS. En effet, il semble que la direction vise cet animateur:</p>
<p><a href="http://www.radiotsq.com/images/jefffillionTSQ1.jpg"><img class="alignnone" src="http://www.radiotsq.com/images/jefffillionTSQ1.jpg" alt="" width="220" height="260" /></a></p>
<p><a href="http://fr.wikipedia.org/wiki/Jeff_Fillion" target="_blank">JEFF FILLION</a> ! Depuis que la rumeur s'est ébruitée, tout le monde en parle dont <a href="http://www.voir.ca/blogs/steve_proulx/archive/2008/07/13/jeff-filion-224-tqs.aspx" target="_blank">Steve Proulx</a>, <a href="http://blogues.cyberpresse.ca/lagace/?p=70721505" target="_blank">Patrick Lagacé</a> qui évite de donner son opinion là-dessus (<em>le privilège constitutionnel d'être en vacances</em>) et <a href="http://renartleveille.wordpress.com/2008/07/14/jeff-fillion-a-tqs-mauvaise-haleine-du-matin/" target="_blank">Renart L'éveillé</a> également. Bon, comment dire, je ne suis vraiment pas un fan de Jeff Fillion. Contrairement à bien des observateurs, néanmoins, j'ai écouté de ces émissions de temps à autre sur le Web, vérifier si c'était la chimère monstrueuse que les médias décrivaient. Pas tant que ça. En tout cas, pour les 5 ou 6 fois que je l'ai écouté, il y avait pas de propos dignes de se retrouver en Cour. Sauf que ça ne m'a impressionné non plus. Ça ne m'a pas fait comprendre pourquoi des milliers de personnes sont descendus dans les rues de Québec pour le défendre ?  On parle ici d'un polémiste frustré de droite qui vomit sur tout de la gauche sans discernement, en glorifiant les Américains à outrance et en prenant pour acquis que le PIB d'un pays est la seule indication économique valable ou presque... Bref, non, il ne me touche pas. Et son discours de droite - QU'IL N'ASSUME MÊME PAS (<em>en entrevue, il a déjà dit qu'il refusait de se positionner sur la ligne gauche-droite... tiens, comme un certain Dumont...</em>) - me donne de l'urticaire.</p>
<p>D'ailleurs, en lisant la nouvelle sur <a href="http://www.showbizz.net/articles/20080714094204/jeff_fillion_pressenti_pour_une_emission_matinale_tqs.html" target="_blank">Showbizz.net</a>, je me suis alors rendu compte que ça serait une émission de droite solide avec Nathalie Elgrably et Jacques Brassard (<em>ex-ministre péquiste ultra à droite</em>) comme chroniqueurs. Pour Michel Hébert du Journal de Québec, par contre, je ne sais pas. Je ne le connais pas, mais il semble que c'est un bon <a href="http://hbertenfeu.blogspot.com/" target="_blank">blogueur</a> à ce que j'ai entendu. Alors, entre ça et "L'avocat du diable", la droite aura plus que son droit de parole à TQS. J'aime ce que dit Steve Proulx sur quoi TQS essaierait donc de faire de la contre-programmation. Donc, c'est quoi : si le show de Fillion est l'antithèse des <em>Deux filles le matin. </em>théoriquement pour contrer <em>Star Académie</em>, ils vont mettre un show journalistique ultra intelligent ? Ah non, c'est vrai ! Ils ont crissé (<em>excusez</em>) les journalistes dehors... Vraiment, chez TQS, on voit la vie en brun !</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[doper le développeur avec du logiciel]]></title>
<link>http://nomemoryspace.wordpress.com/?p=51</link>
<pubDate>Sat, 12 Jul 2008 09:49:25 +0000</pubDate>
<dc:creator>slim</dc:creator>
<guid>http://nomemoryspace.wordpress.com/?p=51</guid>
<description><![CDATA[
En réalité, ce qu&#8217;on perdait de vue c&#8217;est que cela serait vraiment pratique de pouvoi]]></description>
<content:encoded><![CDATA[<p><a href="http://nomemoryspace.files.wordpress.com/2008/07/listing.jpg"><img class="alignnone size-medium wp-image-52" src="http://nomemoryspace.wordpress.com/files/2008/07/listing.jpg?w=300" alt="" width="300" height="81" /></a></p>
<blockquote><p>En réalité, ce qu'on perdait de vue c'est que cela serait vraiment pratique de pouvoir comparer les montant des factures à l'ancienne avec nos nouvelles factures avec un seul clic de souris. Si on avait ça, on le ferait tous les jours. C'est parce que, justement, examiner les listings était pénible qu'on le faisait pas tous les jours.</p></blockquote>
<p>Je me plais à dire que, dans notre métier, la programmation en tant que telle n'est ni une étape du processus, ni une activité. Elle est là à toutes les étapes : préparation, conception, test, amélioration. Si on devait la définir par une abstraction dans le processus ça serait celle ci : "Contexte". C'est une erreur conceptuelle très courante dans les processus préfabriqués que de considérer la programmation comme une étape.</p>
<p>Nous sommes actuellement en phase de test intensif avant déploiement. C'est une étape plus ou moins critique selon le projet, et pour ce projet-ci, elle est très critique. <strong>Nous sommes en train de migrer l'un des plus importants grossistes en pharmaceutiques vers un nouveau système d'information intégré.</strong></p>
<p>La difficulté dans ce genre de projets est toujours la même et peut se résumer à cette phrase du client : "n'oubliez pas que <em>&#60;nom de l'ancienne application&#62;</em> marche très bien depuis <em>&#60;nombre d'années supérieur à 10&#62;</em>". Quelle que soit la définition du client pour "marche très bien" et quelque soit sa perception de son bon fonctionnement, le contrat est là : <strong>il faut qu'on remplace une application qui marche par une application qui ne marche pas encore.</strong></p>
<p>Concevoir des tests n'est pas toujours chose aisée : une fois qu'on sait ce qu'il faut tester et combien, le "comment?" demande souvent des masses de créativité ou de ressources. L'avantage d'avoir une ancienne application comme étalon, c'est que justement, toute une classe de tests devient évidente : <strong>beaucoup de fonctionnalités doivent fonctionner EXACTEMENT comme l'ancienne application.</strong></p>
<p>Hassen était aux prises avec des listings contenant des centaines de factures issues de l'ancienne application. Le but était d'identifier les différences entre les nouvelles factures et les anciennes. et jusque là la seule manière de faire que nous avions trouvée c'est de comparer manuellement les montants (des centaines, je rappelle). J'ai regardé Hassen faire ça pendant quelques jours, puis j'ai eu l'inspiration. J'avais pas encore une idée, juste une piste : <strong>si ce vieux logiciel DOS pouvait imprimer sur une feuille, on pouvait le faire imprimer dans un fichier</strong>.</p>
<p>J'avais l'idée, mais je ne savais pas encore comment j'allais faire, ni combien de temps ça allait prendre et surtout je n'avais pas le temps. A ce moment là Bechir était venu à la rescousse de Hassen, ils faisaient ça en <a href="http://www.extremeprogramming.org">XP</a>, alors je leurs ai proposé l'idée. Nous avons réévalué les taches de la semaine ensemble et avons estimé que cela ne valait pas la peine. Dans ces moments là, on a souvent la hantise du <a href="http://c2.com/cgi/wiki?YouAintGonnaNeedIt">YAGNI</a> : après tout, on ne va pas examiner les listings des factures tous les jours. Une fois que c'est fait, c'est terminé.</p>
<p>En réalité, ce qu'on perdait de vue c'est que cela serait vraiment pratique de pouvoir comparer les montant des factures à l'ancienne avec nos nouvelles factures avec un seul clic de souris. Si on avait ça, on le ferait tous les jours. C'est parce que, justement, examiner les listings était pénible qu'on le fait pas tous les jours.</p>
<p>J'avais laissé la porte ouverte, disant : "si vous sentez que ça va vous aider, je le fais". Ils ont fini par me demander de le faire. ça m'a pris quelques jours pour essayer différentes solutions qui n'ont pas marché et pour trouver la solution qui marche : j'ai installé <a href="http://dosemu.sourceforge.net/">dosemu</a> sur un vieux poste linux, je l'ai configuré pour envoyer tout ce qui était destiné à l'imprimante dans un fichier texte accessible sur le réseau et j'ai installé la vieille application dessus. J'ai même pris la peine d'écrire un peu de code pour transformer les listings malpropres en fichiers CSV parfaitement acceptables pour notre base de données.</p>
<p>Nous ne fûmes pas déçus. Avec le recul, maintenant on est sur qu'on y serait jamais arrivé sans avoir fait cela. La morale de cette histoire c'est : <strong>donnez du pouvoir à l'équipe, ce n'est jamais une perte de temps</strong>. Faites comme Abraham Lincoln , <a href="http://markkit.net/archive/c2.com_cgi_wiki_SharpenTheSaw.html?s=6ea4121bbd15d3d6b1a282a33749bb3a">si vous avez 8 heures pour couper un arbre, passez 6 heures à aiguiser votre hache</a>. ça vaut la peine.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Feuilletez notre saison en ligne !]]></title>
<link>http://theatrecelestins.wordpress.com/?p=77</link>
<pubDate>Fri, 04 Jul 2008 09:07:44 +0000</pubDate>
<dc:creator>theatre des celestins</dc:creator>
<guid>http://theatrecelestins.wordpress.com/?p=77</guid>
<description><![CDATA[Ca y est, c&#8217;est enfin possible : feuilletez notre plaquette de saison en ligne !
lien
]]></description>
<content:encoded><![CDATA[<p>Ca y est, c'est enfin possible : feuilletez notre plaquette de saison en ligne !<br />
<a href="http://www.celestins-lyon.org/fileadmin/celestins/catalogue/index.htm" target="_blank">lien</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Des réponses à vos questions!]]></title>
<link>http://richard3.wordpress.com/?p=687</link>
<pubDate>Wed, 25 Jun 2008 20:04:24 +0000</pubDate>
<dc:creator>Richard3</dc:creator>
<guid>http://richard3.wordpress.com/?p=687</guid>
<description><![CDATA[Pour une première fois, je vais tenter de répondre de façon plus poussée à vos questions.  Bien]]></description>
<content:encoded><![CDATA[<p>Pour une première fois, je vais tenter de répondre de façon plus poussée à vos questions.  Bien sûr, si vous avez des commentaires à formuler, ou des questions à poser, n'hésitez surtout pas.  Qui sait?  La réponse à votre question pourrait bien se retrouver dans un billet tout neuf!  Mais avant de commencer,...</p>
<p><a href="http://richard3.wordpress.com/files/2008/06/006i.jpg"><img class="alignnone size-full wp-image-689" src="http://richard3.wordpress.com/files/2008/06/006i.jpg" alt="" width="615" height="461" /></a></p>
<p><span style="color:#800080;"><em>Voici un premier entrefilet, dans la chronique "Vos impôts sont bien investis".  Le MTQ investit 2,5 millions$ sur l'A-55, et ce pour imperméabiliser les fossés d'une autoroute ouverte il y a moins de deux ans!  Je présume que le fait d'avoir des fossés imperméables ne figuraient pas sur les plans originaux de l'autoroute!  Et d'abord, c'est quoi, des fossés imperméables?  Ça n'est pas supposé recueillir de l'eau, des fossés?<br />
</em></span></p>
<p>Allons maintenant à vos questions.</p>
<p>C'est Sam, un des bons lecteurs de ce blogue, qui m'a écrit ce commentaire, il y a quelques temps.</p>
<p><span style="color:#000080;"><em>"Bonjour Richard,je veux savoir lorsque tu es allé prendre des photos sur la 55 pour nous prouver que c’est une autoroute de tout genre,as-tu remarqué qu’il y a encore des panneaux numérotés «155» à des endroits? En tout cas, je sais qu’avant l’ouverture complète de l’autoroute 55 entre St-Célestin et la 20,la 155 existait encore. Mais là, il n’est plus là. Donc, la route numérotée «155» devrait être supprimée sur tous les panneaux de supersignalisation et ainsi des panneaux de ce numéro devraient être enlevés après des échangeurs.Mais entre St-Grégoire et l’autoroute 20, après des intersections et échangeurs, le MTQ a enlevé les panneaux numérotés «155»."</em></span></p>
<p>Évidemment, n'écoutant que mon sens du devoir (et mon budget aussi; vous savez, avec l'essence à 1,50$ le litre, et aucune forme de commandite,...), j'ai voulu en avoir le coeur net.  J'en ai profité pour tenter de savoir aussi ce qu'il en était de la route 161, depuis l'ouverture de l'A-55 (en super-2, mais quand même), de Saint-Wenceslas jusqu'à l'A-20.  Je me suis rendu compte que, selon l'endroit où l'on se trouve, c'est un peu n'importe quoi!</p>
<p><a href="http://richard3.files.wordpress.com/2008/06/001i.jpg"><img class="alignnone size-full wp-image-688" src="http://richard3.wordpress.com/files/2008/06/001i.jpg" alt="" width="615" height="461" /></a></p>
<p><em><span style="color:#800080;">Voici ce que l'on voit quand on sort de l'A-20 ouest, à la hauteur de la route 161, tout juste au sud du village de Sainte-Eulalie.  On constate donc que la route 161 commence désormais au niveau de l'A-20, et monte vers le sud.  Quoique lorsque l'on roule sur la 161 nord, aucune indication ne nous signale la fin de la route 161.</span></em></p>
<p><a href="http://richard3.files.wordpress.com/2008/06/009i.jpg"><img class="alignnone size-full wp-image-690" src="http://richard3.wordpress.com/files/2008/06/009i.jpg" alt="" width="615" height="461" /></a></p>
<p><em><span style="color:#800080;">Tout juste avant le pont Laviolette, sur l'A-55, à la hauteur de la bretelle vers la route 132, on voit que Sam avait raison, au sujet de la supersignalisation.  Si les petits panneaux de la route 155 ont été retirés, sur la rive sud du fleuve, on devra un jour revoir les grands panneaux, afin de savoir qui dit vrai.  Cela m'étonne que cela n'ait pas été effectué lors des rénovations du pont Laviolette, qui comprenaient les caméras de surveillance, les feux de voies,...</span></em></p>
<p><a href="http://richard3.files.wordpress.com/2008/06/012i.jpg"><img class="alignnone size-full wp-image-691" src="http://richard3.wordpress.com/files/2008/06/012i.jpg" alt="" width="461" height="615" /></a></p>
<p><em><span style="color:#800080;">...ainsi que ces magnifiques barrières, contrôlées à distance, qui se referment si l'on décide de fermer le pont à la circulation.</span></em></p>
<p><a href="http://richard3.files.wordpress.com/2008/06/013i.jpg"><img class="alignnone size-full wp-image-692" src="http://richard3.wordpress.com/files/2008/06/013i.jpg" alt="" width="615" height="461" /></a></p>
<p><em><span style="color:#800080;">Sur la petite signalisation, comme le disait Sam, aucune trace de la route 155, comme on le voit ici, à l'intersection de la bretelle d'entrée de l'A-55 sud, à la hauteur de la route 132, à Bécancour (Saint-Grégoire).</span></em></p>
<p><a href="http://richard3.files.wordpress.com/2008/06/037i.jpg"><img class="alignnone size-full wp-image-693" src="http://richard3.wordpress.com/files/2008/06/037i.jpg" alt="" width="615" height="461" /></a></p>
<p><em><span style="color:#800080;">Sur la rive nord du fleuve, par contre, c'est une toute autre histoire, comme le démontre ce petit panneau (pas si petit, mais bon, il ne s'agit pas de supersignalisation) situé sur la rue Notre-Dame ouest, qui est aussi la route 138, à Trois-Rivières.  Comme il date quand même de plusieurs années, on serait porté  à croire qu'il n'est qu'un panneau oublié, comme cela arrive à l'occasion.</span></em></p>
<p><a href="http://richard3.wordpress.com/files/2008/06/039i.jpg"><img class="alignnone size-full wp-image-694" src="http://richard3.wordpress.com/files/2008/06/039i.jpg" alt="" width="615" height="461" /></a></p>
<p><em><span style="color:#800080;">Sur la supersignalisation, toutefois, il n'y a aucune mention de la route 155.  À remarquer, la piste cyclable qui passe sous le panneau!  Ils sont fous, ces trifluviens!</span></em></p>
<p><a href="http://richard3.wordpress.com/files/2008/06/043i.jpg"><img class="alignnone size-full wp-image-695" src="http://richard3.wordpress.com/files/2008/06/043i.jpg" alt="" width="615" height="461" /></a></p>
<p><em><span style="color:#800080;">Celui-là, par contre, il n'a pas été oublié!  Nous sommes sur l'A-55 nord, entre l'entrée en provenance de la rue Notre-Dame ouest et la sortie vers l'A-40 est.  À partir de ce point, les petits panneaux de la route 155 sont toujours bien présents,...</span></em></p>
<p><a href="http://richard3.files.wordpress.com/2008/06/046i.jpg"><img class="alignnone size-full wp-image-696" src="http://richard3.wordpress.com/files/2008/06/046i.jpg" alt="" width="615" height="461" /></a></p>
<p><em><span style="color:#800080;">...comme le démontrent ces panneaux, vus à l'intersection du boulevard Saint-Michel, toujours à Trois-Rivières.  Il est donc permis de croire, en attendant une confirmation officielle du MTQ, que la route 155, qui commence à Chambord, au Lac-Saint-Jean, se termine désormais au pont Laviolette.</span></em></p>
<p>Passons à un autre commentaire.  Mais avant d'aller plus loin,...</p>
<p><a href="http://richard3.wordpress.com/files/2008/06/028i.jpg"><img class="alignnone size-full wp-image-697" src="http://richard3.wordpress.com/files/2008/06/028i.jpg" alt="" width="615" height="461" /></a></p>
<p><em><span style="color:#800080;">...allons-y d'un deuxième entrefilet, dans la chronique "Vos impôts sont bien investis".  Je ne sais pas qui a commandé le lettrage, sur la façade de l'école Chavigny, à Trois-Rivières, mais force est de constater que le contraste est, comment dire, convaincant.  Vous parvenez à lire quelque chose, vous?  On ne voit rien de ce qui est écrit!  C'est tellement évident...</span></em></p>
<p><a href="http://richard3.files.wordpress.com/2008/06/031i.jpg"><img class="alignnone size-full wp-image-698" src="http://richard3.wordpress.com/files/2008/06/031i.jpg" alt="" width="615" height="461" /></a></p>
<p><em><span style="color:#800080;">...qu'on a dû ajouter une autre affiche, au-dessus de la porte d'entrée des élèves, avec le nom de l'école.  De quoi donner le goût d'appuyer l'abolition des commissions scolaires.  Dites-vous bien que ce sont ces décideurs qui gèrent votre argent si durement gagné!</span></em></p>
<p>De retour à notre programmation.</p>
<p>Un autre lecteur, Marc F. P., m'a fait parvenir un commentaire au sujet du tronçon oublié de l'A-30, à Bécancour.  Le voici:</p>
<p><span style="color:#000080;"><em>"La photo ou c’est que vous parliez des voies centrales qui devrai etre construite, et bien il était déja construite et ne les déblaye plus depui un certain temps…</em></span></p>
<p><span style="color:#000080;"><em>et voila le lien pour la photo en question (version estivale)<br />
<a rel="nofollow" href="http://cf.geocities.com/srquebec/photos/a30entete1.JPG">http://cf.geocities.com/srquebec/photos/a30entete1.JPG</a></em></span></p>
<p><span style="color:#000080;"><em>Marc F. P.</em></span></p>
<p><span style="color:#000080;"><em>P.S.: cette autoroute aurait du etre construite depuis un certait temps de valleyfield à Gentilly"</em></span></p>
<p>Mon cher Marc, vous avez tout à fait raison; ces voies centrales sont déjà dans le paysage, et ce depuis de nombreuses années.  D'ailleurs, on peut le constater sur les photos suivantes.</p>
<p><a href="http://richard3.files.wordpress.com/2008/06/018i.jpg"><img class="alignnone size-full wp-image-699" src="http://richard3.wordpress.com/files/2008/06/018i.jpg" alt="" width="615" height="461" /></a></p>
<p><em><span style="color:#800080;">Voici la fin de l'A-30, en direction ouest.  La bretelle, complètement à droite, mène à la route 132, à Bécancour (Saint-Grégoire).  La chaussée en direction est porte plusieurs marquages,...</span></em></p>
<p><a href="http://richard3.files.wordpress.com/2008/06/021i.jpg"><img class="alignnone size-full wp-image-700" src="http://richard3.wordpress.com/files/2008/06/021i.jpg" alt="" width="615" height="461" /></a></p>
<p><em><span style="color:#800080;">...et quand on y regarde de plus près, on constate que les peintres du MTQ se pratiquent même à peindre des flèches au gabarit!  Encore un exemple d'argent bien investi!</span></em></p>
<p><a href="http://richard3.files.wordpress.com/2008/06/024i.jpg"><img class="alignnone size-full wp-image-701" src="http://richard3.wordpress.com/files/2008/06/024i.jpg" alt="" width="615" height="461" /></a></p>
<p><em><span style="color:#800080;">Quand on regarde la même chaussée, mais en direction est, cette fois, elle prend presque des allures de piste d'atterrissage, tellement on y a mis de peinture.</span></em></p>
<p><a href="http://richard3.files.wordpress.com/2008/06/027i.jpg"><img class="alignnone size-full wp-image-702" src="http://richard3.wordpress.com/files/2008/06/027i.jpg" alt="" width="461" height="615" /></a></p>
<p><em><span style="color:#800080;">Allez savoir pourquoi, on ne met pas de peinture sur la chaussée en direction ouest.  Par contre, on constate que les joints du béton sont tous en train d'éclater, ce qui prouve que la technique de construction utilisée à l'époque n'est pas la meilleure pour la construction de routes en béton, d'autant plus que les dommages ne sont pas causés par la circulation lourde.  D'ailleurs, il n'y a pas de circulation du tout, sur cette chaussée.</span></em></p>
<p>À surveiller bientôt: En Estrie, les travaux sur l'A-10, ainsi qu'une belle réalisation, complétée dans les années 1980.  Également, on jettera un coup d'oeil sur l'A-55 sud, entre Drummondville et Sherbrooke, et je vous emmènerai sur un barrage d'Hydro-Québec.  Alors c'est à suivre...</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Utiliser pkg-config pour faciliter l'édition des liens]]></title>
<link>http://hypoblog.wordpress.com/?p=25</link>
<pubDate>Tue, 24 Jun 2008 22:16:11 +0000</pubDate>
<dc:creator>hypoblog</dc:creator>
<guid>http://hypoblog.wordpress.com/?p=25</guid>
<description><![CDATA[Vous avez sans doute déjà fait l&#8217;expérience du compilateur qui ne trouve pas les fichiers d]]></description>
<content:encoded><![CDATA[<p>Vous avez sans doute déjà fait l'expérience du compilateur qui ne trouve pas les fichiers d'entête ou les bibliothèques utilisées et vous gratifie d'un beau "file not found". S'ensuit alors une recherche minutieuse de l'ensemble des fichiers nécessaires qu'il faudrat ensuite aller renseigner au compilateur lors de la compilation. He bien, sachez que ce cauchemar peut s'arrêter maintenant car il existe un outil spécialement conçu pour résoudre ce problème. Il s'agit de <strong>pkg-config</strong>!<br />
<!--more--></p>
<p>Pkg-config est un logiciel qui accède à des fichiers relatifs aux bibliothèques utilisées contenant tous les fichiers à renseigner au compilateur. Par exemple, si vous utilisez la bibliothèque SDL dans votre projet, il suffit de demander à pkg-config de vous donner les renseignements concernant cette bibliothèque. Pour ce faire, rien de plus simple, voici le format courant de la commande (il existe beaucoup d'autres options et je vous invite à lire le manuel):</p>
<blockquote><p>pkg-config [&#150;&#150;cflags] [&#150;&#150;libs] &#60;bibliotheque&#62;</p></blockquote>
<p>L'option &#150;&#150;cflags demande d'obtenir les options de compilation avec les dossiers contenant les fichiers d'entête et l'option &#150;&#150;libs concerne les fichiers de bibliothèque.</p>
<p>Ainsi, pour l'exemple avec la SDL, cela donne:</p>
<blockquote><p> pkg-config &#150;&#150;cflags &#150;&#150;libs sdl</p></blockquote>
<p>Et pkg-config nous répond par</p>
<blockquote><p>-D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL  -Wl,-rpath,/usr/lib -lSDL -lpthread</p></blockquote>
<p>Qui sont les options qu'il faudrat renseigné à gcc pour la compilation.<br />
Auriez-vous pensez à indiquer tout cela?</p>
<p>Pour savoir quelles sont les bibliothèques supportées, allez dans le dossier /usr/lib/pkgconfig. Ce dossier contient tout un ensemble de fichiers avec une extension .pc. Le nom des fichiers correspond au nom de la bibliothèque. Attention, une bibliothèque peut posséder différents fichiers .pc, par exemple pour Qt:</p>
<blockquote><p>
Qt3Support.pc&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;QtDBus.pc&#160;&#160;&#160;&#160;&#160;&#160;QtOpenGL.pc&#160;&#160;&#160;&#160;&#160;QtSvg.pc&#160;&#160;&#160;&#160;&#160;QtXml.pc<br />
QtAssistantClient.pc&#160;&#160;&#160;&#160;&#160;QtGui.pc&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;QtScript.pc&#160;&#160;&#160;&#160;&#160;&#160;&#160;QtTest.pc<br />
QtCore.pc&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;QtNetwork.pc&#160;&#160;QtSql.pc&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;QtUiTools.pc</p></blockquote>
<p>Vous pouvez dès lors simplifier vos appels au compilateur:</p>
<blockquote><p>gcc `pkg-config &#150;&#150;cflags &#150;&#150;libs sdl` test.c -o test</p></blockquote>
<p>Ou dans votre Makefile, la variable CFLAGS par exemple contiendrait `pkg-config &#150;&#150;cflags &#60;bibliotheques&#62; `</p>
<p>En plus de la simplicité, cette méthode vous permet de mettre des options de compilation conseillées par les développeurs de la bibliothèque. Elle regroupe ainsi toutes les qualités requisent pour être utilisée par tous les développeurs en herbe que vous êtes :D</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[La plus grande invention de l'informatique ?]]></title>
<link>http://microclub.wordpress.com/?p=65</link>
<pubDate>Wed, 18 Jun 2008 22:20:06 +0000</pubDate>
<dc:creator>Dr. Goulu</dc:creator>
<guid>http://microclub.wordpress.com/?p=65</guid>
<description><![CDATA[Le blog &#8220;Coding Horror&#8221; de Jeff Atwood est probablement un des plus intéressants à sui]]></description>
<content:encoded><![CDATA[<p>Le blog "<a href="http://www.codinghorror.com/" target="_blank">Coding Horror</a>" de Jeff Atwood est probablement un des plus intéressants à suivre par tout Microclubiste.</p>
<p>Dans "<a href="http://www.codinghorror.com/blog/archives/001129.html" target="_blank">The greatest invention in Computer Science</a>", il prend un peu de recul par rapport aux <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" target="_blank">langages de programmation à la mode</a> et considère que la "routine" (fonction ou procédure) est la plus grande invention de l'informatique (software).</p>
<p>Dans une avalanche de commentaires, puis aussi <a href="http://digg.com/programming/The_Greatest_Invention_in_Computer_Science" target="_blank">sur Digg</a>, de nombreux programmeurs ont nommé leurs chouchou : pointeurs, compilateurs, langages divers etc.</p>
<p>Pour ma part, j'ai choisi la pile (stack). Indispensable aux routines, c'est aussi une structure de données assez puissante pour permettre de réaliser des calculatrices (HP) et même des langages de programmation (Forth).</p>
<p>Et pour vous, quelle est l'invention la plus marquante de l'informatique ?</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[C++]]></title>
<link>http://bloglfi.wordpress.com/?p=4</link>
<pubDate>Tue, 17 Jun 2008 18:05:43 +0000</pubDate>
<dc:creator>bloglfi</dc:creator>
<guid>http://bloglfi.wordpress.com/?p=4</guid>
<description><![CDATA[CHAPITRE 1
 
ELEMENTS DE LANGAGE C
 
 
 
Une disquette contenant les programmes (développés sous B]]></description>
<content:encoded><![CDATA[<p class="MsoNormal" style="text-align:center;" align="center"><strong><span style="font-size:14pt;font-family:Times;">CHAPITRE 1</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-size:14pt;font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:center;" align="center"><strong><span style="font-size:14pt;font-family:Times;">ELEMENTS DE LANGAGE C</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-size:14pt;font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">Une disquette contenant les programmes (développés sous Borland C++) de ce polycopié est disponible, en évitant la saisie.</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">Le corrigé des exercices et le listing de ces programmes se trouvent à la fin de chaque chapitre.</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:center;" align="center"><strong><span style="font-family:Times;">INTRODUCTION</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">Le langage C est un <span style="text-decoration:underline;">langage évolué et structuré</span>, assez proche du langage machine destiné à des applications de contrôle de processus (gestion d'entrées/sorties, applications temps réel ...). Les compilateurs C possèdent les <span style="text-decoration:underline;">taux d'expansion </span>les plus faibles de tous les langages évolués (rapport entre la quantité de codes machine générée par le compilateur et la quantité de codes machine générée par l'assembleur et ce pour une même application);<span> </span></span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">Le langage C possède assez peu d'instructions, il fait par contre appel à des bibliothèques, fournies en plus ou moins grand nombre avec le compilateur.</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="text-decoration:underline;"><span style="font-family:Times;">exemples:</span></span><span style="font-family:Times;"> <span> </span>math.h<span> </span>: bibliothèque de fonctions mathématiques</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"><span> </span>stdio.h<span> </span>: bibliothèque d'entrées/sorties standard </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">On ne saurait développer un programme en C sans se munir de la documentation concernant ces bibliothèques.</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">Les compilateurs C sont remplacés petit à petit par des compilateurs C++.</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">Un programme écrit en C est en principe compris par un compilateur C++. </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">Le cours qui suit est un cours ce langage C écrit dans un contexte C++.<strong></strong></span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"><span> </span></span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:center;" align="center"><strong><span style="font-family:Times;">ETAPES PERMETTANT L'EDITION, LA MISE AU POINT, </span></strong></p>
<p class="MsoNormal" style="text-align:center;" align="center"><strong><span style="font-family:Times;">L'EXECUTION D'UN PROGRAMME</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><em><span style="font-family:Times;">1- <strong>Edition du programme source</strong></span></em><span style="font-family:Times;">, à l'aide d'un <span style="text-decoration:underline;">éditeur</span> (traitement de textes). Le nom du fichier contient l'extension <span style="text-decoration:underline;">.CPP</span>, exemple: EXI_1.CPP (menu « edit »).</span></p>
<p class="MsoNormal" style="text-align:justify;"><em><span style="font-family:Times;"> </span></em></p>
<p class="MsoNormal" style="text-align:justify;"><em><span style="font-family:Times;">2- <strong>Compilation du programme source</strong></span></em><strong><span style="font-family:Times;">, </span></strong><span style="font-family:Times;">c'est à dire création des codes machine destinés au microprocesseur utilisé. Le compilateur indique les erreurs de syntaxe mais ignore les fonctions-bibliothèque appelées par le programme.</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">Le compilateur génère un fichier binaire, non listable, appelé fichier objet: EXI_1.OBJ (commande « compile »).</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"><span> </span></span></p>
<p class="MsoNormal" style="text-align:justify;"><em><span style="font-family:Times;">3- <strong>Editions de liens</strong></span></em><span style="font-family:Times;">: Le code machine des fonctions-bibliothèque est chargé, création d'un fichier binaire, non listable, appelé fichier executable: EXI_1.EXE<span> </span>(commande « build all »).</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><em><span style="font-family:Times;">4- <strong>Exécution du programme</strong> </span></em><span style="font-family:Times;">(commande « flèche jaune »).</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">Les compilateurs permettent en général de construire des programmes composés de plusieurs fichiers sources, d'ajouter à un programme des unités déjà compilées ...</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="text-decoration:underline;"><span style="font-family:Times;">Exercice I-1:</span></span><span style="font-family:Times;"> Editer (EXI_1.CPP), compiler et exécuter le programme suivant:</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">#include &#60;stdio.h&#62;<span> </span>/* bibliotheque d'entrees-sorties standard */</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">#include &#60;conio.h&#62;</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">void main()</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">{</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">puts("BONJOUR");<span> </span>/* utilisation d'une fonction-bibliotheque */</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">puts("Pour continuer frapper une touche...");</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">getch();<span> </span>/* Attente d'une saisie clavier */</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">}</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">Le langage C distingue les minuscules, des majuscules. Les mots réservés du langage C doivent être écrits <strong>en minuscules. </strong></span></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">On a introduit dans ce programme la notion d’interface homme/machine (IHM). </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">- L’utilisateur visualise une information sur l’écran,</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">- L’utilisateur, par une action sur le clavier, fournit une information au programme.</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">Modifier le programme comme ci-dessous, puis le tester :</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">#include &#60;stdio.h&#62;<span> </span>/* bibliotheque d'entrees-sorties standard */</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">#include &#60;conio.h&#62;</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">void main()</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">{</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">int a, b, somme ;<span> </span>/* déclaration de 3 variables */</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">puts("BONJOUR");<span> </span>/* utilisation d'une fonction-bibliotheque */</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">a = 10 ; /* affectation* /</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">b = 50 ;<span> </span>/* affectation */</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">somme = (a + b)*2 ;<span> </span>/* affectation et opérateurs<span> </span>*/</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">printf(« Voici le resultat : %d\n », somme) ;</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">puts("Pour continuer frapper une touche...");</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">getch();<span> </span>/* Attente d'une saisie clavier */</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;">}<br />
</span></strong><span style="font-family:Times;">Dans ce programme, on introduit 3 nouveaux concepts :</span>
</p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">- La notion de déclaration de variables : les variables sont les données que manipulera le programme lors de son exécution. Ces variables sont rangées dans la mémoire vive de l’ordinateur. Elle doivent être déclarées au début du programme.</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">- La notion d’affectation, symbolisée par le signe <span>=. </span></span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">- La notion d’opération.</span><strong></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"><span> </span></span></strong></p>
<p class="MsoNormal" style="text-align:center;" align="center"><strong><span style="font-family:Times;">LES DIFFERENTS TYPES DE VARIABLES</span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><span style="font-family:Times;"> </span></strong></p>
<p class="MsoNormal" style="text-align:justify;"><strong><em><span style="font-family:Times;">1- Les entiers</span></em></strong><span style="font-family:Times;"><span> </span></span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">Le langage C distingue plusieurs types d'entiers:</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">___________________________________________________________</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">TYPE<span> </span>DESCRIPTION<span> </span>TAILLE MEMOIRE <span> </span><span> </span><span> </span><span> </span></span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"><span> </span>___________________________________________________________</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">int<span> </span>entier standard signé<span> </span>4 octets: - 2<span style="position:relative;top:-3pt;">31</span><span> </span></span><span lang="FR"><span>≤</span></span><span style="font-family:Times;"> n </span><span lang="FR"><span>≤</span></span><span style="font-family:Times;">2<span style="position:relative;top:-3pt;">31</span>-1<span> </span><span> </span></span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">unsigned int<span> </span>entier positif<span> </span>4 octets: 0 </span><span lang="FR"><span>≤</span></span><span style="font-family:Times;"> n </span><span lang="FR"><span>≤</span></span><span style="font-family:Times;"> 2<span style="position:relative;top:-3pt;">32</span><span> </span><span> </span></span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">short<span> </span>entier court signé<span> </span>2 octets: - 2<span style="position:relative;top:-3pt;">15</span><span> </span></span><span lang="FR"><span>≤</span></span><span style="font-family:Times;"> n </span><span lang="FR"><span>≤</span></span><span style="font-family:Times;"> 2<span style="position:relative;top:-3pt;">15</span>-1 <span> </span></span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">unsigned short<span> </span>entier court non signé<span> </span>2 octets: 0 ≤</span><span lang="FR"><span>≤</span></span><span style="font-family:Times;">n </span><span lang="FR"><span>≤</span></span><span style="font-family:Times;"> 2<span style="position:relative;top:-3pt;">16</span></span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">char<span> </span>caractère signé<span> </span>1 octet<span> </span>: - 2<span style="position:relative;top:-3pt;">7</span><span> </span>≤</span><span lang="FR"><span>≤</span></span><span style="font-family:Times;">n </span><span lang="FR"><span>≤</span></span><span style="font-family:Times;"> 2<span style="position:relative;top:-3pt;">7</span>-1<span> </span> </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">unsigned char<span> </span>caractère non signé<span> </span>1 octet<span> </span>: 0 </span><span lang="FR"><span>≤</span></span><span style="font-family:Times;">n </span><span lang="FR"><span>≤</span></span><span style="font-family:Times;"> 2<span style="position:relative;top:-3pt;">8<span> </span></span><span> </span></span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;">_____________________________________________________________</span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="font-family:Times;"> </span></p>
<p class="MsoNormal" style="text-align:justify;"><span style="text-decoration:underline;"><span style="font-family:Times;">Numération:</span></span><span styl