Mon code geek

Le 30 Novembre 2004 à 15:34

Pour déterminer votre code geek, aller sur The Geek Code.

-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS/IT d- s+: a- C++ UL+++ P L+++ E- W+++ N o? K? w++(--) O !M V- PS+(++) PE Y+ PGP(++) t+ 5 X R tv- b++ DI+ D G e++ h--- r++ y+(+++)
------END GEEK CODE BLOCK------

Décodage

Le décodage du code, avec The Geek Code Decoder Page

GEEK TYPE CODE [GCS/IT]
Geek of Computer Science, Geek of Information Technology.
GEEK DRESS CODE [d-]
I'm usually in jeans and a t-shirt.
GEEK SHAPE CODE [s+:]
I'm a little taller than most.
GEEK AGE CODE [a-]
My age is 25-29.
GEEK COMPUTERS CODE [C++]
Computers are a large part of my existence. When I get up in the morning, the first thing I do is log myself in. I play games or mud on weekends, but still manage to stay off of academic probation.
GEEK UNIX CODE [UL+++]
I use GNU/Linux exclusively. I don't need to crack /etc/passwd because I just modified su so that it doesn't prompt me. The admin staff doesn't even know I'm here. If you don't understand what I just said, this category does NOT apply to you!
GEEK PERL CODE [P]
I know Perl exists, but that's all.
GEEK GNU/LINUX CODE [L+++]
I use GNU/Linux exclusively on my system. I monitor comp.os.linux.* and even answer questions sometimes.
GEEK EMACS CODE [E-]
Emacs is too big and bloated for my tastes
GEEK WORLD WIDE WEB CODE [W+++]
I am a WebMaster. Don't even think about trying to view my homepage without the latest version of Netscape. When I'm not on my normal net connection, I surf the web using my Newton and a cellular modem.
GEEK USENET CODE [N]
Usenet News? Sure, I read that once.
GEEK USENET ORACLE CODE [o?]
Usenet Oracle? I don't even know what that is...
GEEK KIBO CODE [K?]
Kibo? I don't even know what that is...
GEEK MICROSOFT WINDOWS CODE [w++(--)]
My tendencies on this issue range from: "I write MS Windows programs in C and think about using C++ someday. I've written at least one DLL.", to: "MS Windows is a joke operating system. Hell, it's not even an operating system. NT is Not Tough enough for me either. 95 is how may times it will crash an hour."
GEEK OS/2 CODE [O]
I finally managed to get OS/2 installed but wasn't too terribly impressed.
GEEK MACINTOSH CODE [!M]
I refuse to categorize myself on Macintosh.
GEEK VMS CODE [V-]
Unix is much better than VMS for my computing needs.
GEEK POLITICS & SOCIAL ISSUES CODE [PS+(++)]
My tendencies on this issue range from: "My whole concept of liberalism is that nobody has the right to tell anybody else what to do, on either side of the political fence. If you don't like it, turn the bloody channel.", to: "I give to liberal causes. I march for gay rights. I'm a card carrying member of the ACLU. Keep abortion safe and legal."
GEEK POLITICS & ECONOMIC ISSUES CODE [PE]
Distrust both government and business.
GEEK CYPHERPUNKS CODE [Y+]
I have an interest and concern in privacy issues, but in reality I am not really all that active or vocal.
GEEK PGP CODE [PGP(++)]
My tendencies on this issue range from: "I've used it, but stopped long ago.", to: "I have the most recent version and use it regularly."
GEEK STAR TREK CODE [t+]
It's a damn fine TV show and is one of the only things good on television any more.
GEEK BABYLON 5 CODE [5]
I've seen it, I am pretty indifferent to it.
GEEK X FILES CODE [X]
Ho hum. Just another Fox show.
GEEK ROLE-PLAYING CODE [R]
Role-Playing? That's just something to do to kill a Saturday afternoon.
GEEK TELEVISION CODE [tv-]
I watch tv for the news and 'special programming.'
GEEK BOOKS CODE [b++]
I find the time to get through at least one new book a month.
GEEK DILBERT CODE [DI+]
I read Dilbert daily, often understanding it.
GEEK DOOM CODE [D]
I've played the game and I'm pretty indifferent.
THE GEEK CODE [G]
I know what the geek code is and even did up this code.
GEEK EDUCATION CODE [e++]
Got a Baccalaureate degree.
GEEK HOUSING CODE [h---]
Married, (persons living romantically with someone might as well label themselves h---, you're as good as there already.)
GEEK RELATIONSHIPS CODE [r++]
I've dated my current S.O. for a long time.
GEEK SEX CODE [y+(+++)]
Male. My tendencies on this issue range from: "I've had real, live sex.", to: "I'm married, so I can get it (theoretically) whenever I want."

Résumé

Quelque soit la distribution Linux utilisée, il arrive qu'il faille installer un logiciel sans passer par le gestionnaire d'application fourni avec la distribution. De plus, la diversité des environnements de bureau rend impossible la gestion automatique de l'inventaire des applications installées. On se propose un système de gestion manuel de l'inventaire des applications.

Objectif

Maintenir un inventaire des applications installées manuellement. Un élément de l'inventaire devrait contenir :

  • Le nom de l'application et sa version
  • Le répertoire d'installation
  • Les commandes de démarrage
  • etc...

Préparation de la machine

Création et organisation d'un compte spécial pour l'installation

Le but de ce compte est de séparer l'installation/désinstallation des logiciels des autres activités. De plus, l'installation d'une application peut nécessiter des droits d'accès particulier. Enfin, tous les fichiers nécessaires à l'installation (code source, etc...) seront dans un répertoire innaccessible aux autres utilisateurs.

Nom de connexion (login)
install
Groupe
Choisir un groupe ayant des droits d'administration, ou des droits d'écriture dans un répertoire d'installation (/opt par exemple).
Répertoire personnel
/home/install

Contenu du répertoire home/install/sources/[groupe]/[application]/[version]

Ce dossier contient les fichiers nécessaires pour l'installation d'une application.

[groupe]
On regroupe les applications par thème, par exemple multimedia ou fondation_apache
[application]
Chaque application dispose de son dossier, par exemple firefox ou gimp
[version]
On sépare les versions de l'application, par exemple 1.4.2rc3 ou 01040002rc03

De plus, un fichier texte décrivant l'application, app_comment.txt, contiendra les informations suivantes :

Nom de l'application

-Versions disponibles
-Commandes de démarrage en fonction de la version

==================================================

L'utilisation de balise HTML est possible, mais ce n'est pas une obligation.

Génération d'un fichier récapitulatif

Utiliser la séquence de commandes suivante, étant identifié comme l'utilisateur install :

 $HOME/tmp.software.txt
chmod 600 $HOME/tmp.software.txt
cd $HOME/sources
find . -name="app_comment.txt" -exec cat {} >> $HOME/tmp.software.txt ;
chmod 644 $HOME/tmp.software.txt
mv $HOME/tmp.software.txt $HOME/software.txt]]>

Si vous utilisez des balises HTML, dans les fichiers app_comment.txt, renommer le fichier final software.html.

Diffusez ce fichier (par e-mail, une documentation interne, ou une distribution du fichier imprimé) aux utilisateurs.

Résumé

Les programmes Linux suivant les règles de l'art utilisent les autotools de GNU, ce qui permet ensuite de les installer avec la célèbre séquence de commandes suivantes :

./configure.sh
make
make install

Les problèmes commencent lorsqu'on veut une installation un peu personnalisée, et qu'on ne connaît pas les paramètres des commandes.

Objectif

Utiliser une interface Web reprenant l'apparence d'un programme d'installation, pour paramétrer une installation, et obtenir la séquence des commandes à utiliser (en particulier les paramètres de la ligne de commande)

Les scénarios envisagés

Pour commencer simplement, on envisage les scénarios suivants :

Installation standard
On indique la séquence standard. Ce scénario est là pour mémoire.
Installation simple personnalisée
L'utilisateur choisi le(s) répertoire(s) d'installation.
Réparation
La séquence permettant une réparation (recompilation et réinstallation).
Désinstallation
La séquence permettant une désinstallation.

Affichage du résultat

Lorsque tous les paramètres nécessaires pour le scénario choisi sont renseignés, un rapport imprimable sera affichée, contenant les sections suivantes

Nom de l'application - version de l'application
Descriptif de l'application.
Informations supplémentaires : dépendances, licence, etc... (texte libre).
Options d'installation
scénario choisi
répertoires d'installation
etc...
Séquence d'installation
Les commandes à entrer pour l'installation, et les résultats attendus (affichage).
Séquence de réparation
Les commandes à entrer pour la réparation (recompilation et installation), et les résultats attendus (affichage).
Séquence de désinstallation
Les commandes à entrer pour la désinstallation, et les résultats attendus (affichage).
Séquence de démarrage
Les commandes à entrer pour démarrer l'application.
Aide mémoire des options de démarrage (texte libre).

Accès simplifé au weblog

Le 24 Novembre 2004 à 00:16

En attendant un système plus complet, voilà de quoi lire le blog plus facilement.

Règles AdBlock

Le 16 Novembre 2004 à 12:02

Pour pouvoir les retrouver plus tard...

Le choix d'une API

J'ai décidé d'utiliser Gnome 2 (et donc GTK 2) pour développer mes applications. Les motivations de ce choix sont les suivantes :

  • L'utilisation de l'Unicode, une librairie pour les traiter les fichiers xml, et une méthode d'entrée pour le japonais facile à utiliser comme sous Windows.
  • GTK est librement –et gratuitement– disponible sur Windows, des fois que mes applications soient portées sur cette plateforme.
  • La possibilité de dissocier l'interface des traitements, avec l'utilisation de

Livre de référence

Titre
The Official GNOME 2 developer's guide
Auteurs
Miguel de Icaza (Préface)
Matthias Warkus
Editeur (date de publication)
No Starch Press (avril 2004)
ISBN
1593270305
Langue
Anglais

Etat d'avancement

J'ai commandé les 2 livres, ils devraient arriver fin novembre.

Passage à Mozilla FireFox 1.0

Le 12 Novembre 2004 à 11:22

Ça y est ! J'ai installé Mozilla Firefox 1.0 au boulot, remplaçant ma version 0.9.3. Quel bonheur que la version française soit disponible immédiatement, c'est ce qui fait que je n'avait pas installé les versions d'avant (ça et le fait qu'étant une grosse faignasse, je n'aime pas passer du temps à mettre à jour).

Premières impressions

Hourra !!!! On a enfin accès au mot de passe principal depuis les préférences. Pour ceux qui ne connaissent pas, c'est le mot de passe qui protège tous les mots de passe que vous sauvegardez sous FireFox, pour les sites qui demandent un mot de passe –justement–. C'est LA fonction qui me manquait (seulement accessible depuis une URL tarbiscotée, et je rappelle que j'ai un baobab dans la main).

Une nouvelle fonction que je kiffe grave, même si j'ai compris le lendemain seulement comment ça marche, c'est l'abonnement aux listes de news (RSS) : quand un site propose une telle liste, une icône orange apparaît en bas de l'écran, et quand on clique dessus, on rajoute cette liste à notre marque-pages. Ce marque-pages se comportent comme un dossier de liens vers les articles, remis à jour régulièrement.

Une dernière fonction, qui existait avant, mais qui est maintenant plus visible : quand une fenêtre popup est bloquée, une grosse ligne sur fond jaune pastel affiche un message qui avertit du blocage et donne accès à la configuration pour débloquer les popups si nécessaire. Bien vu ! Je me suis fait avoir bien des fois à cause de ça sur mes projets du boulot (mais pourquoi ma popup elle apparaît pas ?).

Mozilla FireFox 1.0 c'est bon, mangez-en

Je n'ai plus qu'à l'installer avec amour sur mon Linux à la maison.

Résumé

Dans cet article on propose un squelette de modélisation pour un dépôt de données hétérogènes.

Spécifications Générales Fonctionnelles

On veut gérer un dépôt de données hétérogènes. Une donnée peut représenter un client, un article, une adresse, etc... Une modélisation orientée objet donnerait une classe de base Donnée, et des classes dérivée Client, Article, Adresse, etc...

Par gérer les données, on comprendra créer, modifier, voir en détail, supprimer une donnée (liste non exhaustive). Une donnée comportera aussi des méta-informations, comme des dates de validités par exemple, ou encore des états (flags, par exemple un état valide, publié, supprimé, etc...).

Modélisation du dépôt

Avertissement

Le modèle proposé est un squelette qui doit être ensuite adapté aux besoins réels et aux données stockées.

La liste des tables modélisées

On modélisera 2 tables :

  • Donnée, qui représentera une donnée en générale.
  • Entité, qui représente une classe de données spécifique.

Identification et lien entre les tables

Chaque table disposera d'un identifiant système SID qui sera la clé primaire. On définira 2 séquences, SequenceIdentifiantDonnee et SequenceIdentifiantEntite qui permettront de calculer l'identifiant d'une nouvelle ligne.

À partir d'une ligne de Donnée, on doit pouvoir déterminer la table et la ligne pour récupérer les données spécifiques de Entité. La table Donnée contiendra donc un champ Type et CID.

On peut aussi vouloir identifier une ligne de Donnée à partir d'une ligne de Entité. En particulier lorsq'une entité dispose d'informations spécifiques pour l'identifier (cas de la reprise d'un modèle). La table Entité contiendra donc un champ PID.

Modèlisation de la table Donnée
Colonne Type Gestion Commentaires
SID Nombre Entier SID > 0 Utiliser la valeur de la séquence SequenceIdentifiantDonnee à la création d'une nouvelle ligne
TYPE 32 caractères /[0-9A-Za-z]+/ Valeur permettant de déterminer le nom de la table Entité
CID Nombre Entier CID > 0 CID correspond à la ligne de la table Entité (fonction de Donnée.TYPE) telle que Donnée.TYPE = Entité.SID
Modèlisation de la table Entité
Colonne Type Gestion Commentaires
SID Nombre Entier SID > 0 Utiliser la valeur de la séquence SequenceIdentifiantEntite à la création d'une nouvelle ligne
PID Nombre Entier PID > 0 PID correspond à la ligne de la table Donnée telle que Entité.PID = Donnée.SID
NB : Tests d'intégrité
Lignes erronées de la table Donnée.
Une ligne de Donnée est erronée si a valeur Donnée.CID ne correspond à aucune valeur Entité.SID.
where not CID in (select SID from )]]>
Lignes erronées de la table Entité.
Une ligne de Entité est erronée si a valeur Entité.PID ne correspond à aucune valeur Donnée.SID.
where not PID in (select SID from )]]>
NB : Modélisation d'un méta-modèle

Une implémentation triviale pour le type de donnée (Donnée.TYPE) est d'utiliser le nom de la table Entité. On peut aussi vouloir atteindre une certaine indépendance vis-à-vis de l'implémentation, auquel cas il faut créer un méta-modèle.

Exemple de modélisation du méta-modèle
Colonne Type Gestion Commentaires
TYPE 32 caractères /[0-9A-Za-z]+/ Valeur permettant de déterminer le nom de la table Entité
TABLE 256 caractères Non vide Cette donnée DOIT correspondre à un nom de table existant et respectant le modèle Entité
NB : Reprise d'un modèle existant

Dans le cas d'une reprise d'un modèle existant, il se peut qu'une donnée puisse être identifiée de manière unique par une autre information ou un autre ensemble d'informations. Ces informations ne seront pas utilisée comme clé primaire, cependant, on rajoutera les contraintes d'unicités adéquates liées à ces informations. La raison de ce choix est d'unifier l'accès aux données spécifiques d'une entité.

À suivre

Jour 1 : l'attaque sournoise des croissants du matin

Le sporniket avait décidé solonellement de transformer ses petites poignées d'amour (charmantes au demeurant, mais poignéees d'amour quand même) en tablettes de chocolat, pour au moins deux raisons :

  1. Sa chérie d'amour voudrait avoir des tablettes de chocolat pour noël (^^)
  2. Le sporniket aimerait éviter de passer à la taille 46

Donc, on commence la journée par un peu d'abdo-bed-fitness (le matelas faisant office de tapis de sol) : on fait travailler toute la ceinture abdominale (les flancs et le centre). Puis on prend un petit déjeuner équilibré et raisonnablement consistant : environ 250g -hé oui, j'ai pesé !-, moitié de riz au lentilles, moitié de flanc aux brocolis.

C'est donc tout guilleret que le sporniket se rendit à son boulot, inconscient de la fourberie qui se tramait, telle un faucon prêt à fondre sur l'innocent petit lapin : un groupe de croissants chauds et croustillants avaient préparé une embuscade dans la salle de repos, profitant d'une collègue peu scrupuleuse (aaaah la traîtresse ! elle paiera cette infamie au centuple !!!)

N'écoutant que son courage, le sporniket resta cloué à son siège, tel Ulysse attaché à son mât face aux sirènes.

Et c'est donc le coeur léger qu'il dégusta sa petite salade et son verre de soupe aux légumes pour le déjeuner.

The End

Epilogue

Ce soir, filets de cabillaud sur lit d'épinards