Ventury Networks’ Blog

“If it walks like a duck and quacks like a duck, I would call it a duck.”

Projet MNT - 2


Points Ile Trielen

Tags :

Projet MNT - 1


Photo Aerienne de l’ile de Trielen

Tags :

Geek or not Geek ?


Mug Fedora

That is the question. :-)

Tags :

Installer un Store Repository pour VisualWorks


Introduction

Le développement d’un application peut ammener à “faire des essais” pouvant conduire à une perte de fonctionnalité. La possibilité de “revenir en arrière” dans le code, c’est à dire, retrouver le code source précédent, peut avoir des intérêts non négligeables.

Le fait de stocker son code de façon séparée de son image de développement, dans le cas de Smalltalk/VisualWorks, permet aussi de s’assurer de sa consistance. A partir d’une image vierge, il est possible de recharger uniquement le code développé, et s’assurer ainsi que celui ci fonctionne, sans dépendre de packages qui ne seraient pas chargés.

VisualWorks dispose d’un outils nommé “Store” s’interfaçant avec une base de données pour stocker le code. Simple d’emploi, celui ci permet la publication/récupération de versions de codes, un peu à la manière de svn ou cvs. Pour le mettre en fonctionnement, il suffit d’avoir sous la main une base de données.

Store prend en charge les bases de données suivantes : Oracle, SqlServer, PostgreSQL, DB2, Intervase, MSAccess. Les deux premières sont supportées par Cincom, les autres proviennent de contributions extérieures. Cependant, Store fonctionne très bien avec PostgreSQL, et c’est d’ailleurs celle base qui sera utilisée.

PosgreSQL WebSiteInstaller PostgreSQL

Pour installer un serveur PostgreSQL sur linux, il faut exécuter

# yum -y install postgresql postgresql-server

sous Fedora ou

# apt-get install postgresql postgresql-client

pour une distribution Debian. Pour les autres distributions, utilisez votre gestionnaire de paquetage préféré, ou partez des sources de PostgreSQL.

Ajouter deux utilisateurs

Les commandes suivantes permettent la création des utilisateurs de la base de donnée :

# su – postgres
$ createuser -a -d -P BERN
$ createuser -A -D -P user

Le premier utilisateur (BERN) aurra le droit de créer des bases de données (-d) et des utilisateurs (-a). Le second n’aurra pas le droit de créer desbases ni des utilisateurs (-D -A).

Ajouter une base

Pour créer une base de donnée, on éxécutera la commande suivante :

$ createdb store

Ecouter les interfaces réseau

Par défaut, PostgreSQL n’écoute que l’interface réseau de loopback. Si l’on souhaite utiliser cette base depuis l’extérieur (i.e., si la base se trouve sur une autre machine que celle de développement), il faut modifier le fichier de configuration de postgreSQL, situé dans /etc/posgresql/XX/main/postgresql.conf pour une distribution Debian, où XX est la version de PostgreSQL installée.

Il faut décommenter l’une des premières lignes positionnant la variable tcpip_socket et lui affecter la valeur “true”

# - Connection Settings -
tcpip_socket = true
...
port = 5432

Le port par défaut est le port 5432. Si vous en changez, il faudra en tenir compte plus loin.

Autoriser les accès

Il faut maintenant autoriser les utilisateurs à acceder à cette base. L’ajout, à la fin du fichier , situé dans le même repertoire que le fichier postgresql.conf, de la ligne suivant, autorise tout les utilisateurs à accéder à la base store depuis n’import quel machine, avec un mot de passe chiffré par md5 :

host    store    all    0.0.0.0    0.0.0.0    md5

La seule chose à modifier sur cette ligne est le nom de la base, ici “store”. La syntaxe est la suivante :

TYPE    DATABASE    USER    IP-ADRESS    IP-MASK    METHOD

Cette configuration est un peu permissive, et doit être adaptée à vos contraintes de sécurité. Pensez également à adapter les règles de votre pare-feu en conséquence.

Construire le Store

Une fois la base et les utilisateurs en place, ouvrez une image vierge de VisualWorks. Vérifiez que le parcel StoreForPostgreSQL est bien chargé, via le Parcel Manager (System->Parcel Manager, onglet Suggestion, dossier “Store Tools”). Puis, dans un workspace, évaluez l’expression suivante :

Store.DbRegistry installDatabaseTables

Dans la fenêtre de connexion, renseignez les champs comme suit :

Interface: PostgreSQLEXDIConnection

Environment: ipDeLaMachine_store

User Name: BERN

Password: (à votre avis ?)

Table Owner: BERN

Attention : si vous avez utilisé un autre port pour PostgreSQL, vous devez le préciser dans le champ environment. Par exemple : ipDeLaMachine:15432_store. Vous pouvez par ailleurs remplace l’ip de la machine par son nom d’hôte.

A la question “installer les tables”, répondez OK.

A la question “install user management tables”, répondez NO.

Voilà, c’est terminé.

Store ConnectUtiliser le Store

Dans votre image de développement, connectez vous au store via le menu Store->Connect to repository. Utilisez cette fois ci le nom d’utilisateur sans privilèges crée précédement (le second, nommé ici “user”).

Interface: PostgreSQLEXDIConnection

Environment: ipDeLaMachine_store

User Name: user

Password: (à votre avis ?)

Table Owner: BERN

Dans le browser, un clic droit sur un package vous permet d’accéder au menu “publish…” qui vous permettra de publier le package sur le store. Une fois le package publié, vous pouvez le retrouver/recharger via le menu Store->Published Items. Choisissez alors la version qui vous interesse.

Cincom SmalltalkInformations complémentaires

N’importe quelle installation de PostgreSQL fonctionnelle permet l’utilisation de Store, et cela quelque soit la plateforme sur laquelle celle ci est installée (Linux, Windows …).

L’utilisation de Store, et de tout les outils associés (notament l’outils de fusion, Merge Tool), est décrite dans le document Source Code Management Guide (SourceCodeMgmtGuide.pdf), situé dans le repertoire doc/ de votre installation de VisualWorks.

VisualWorks est un IDE Smalltalk téléchargeable et utilisable gratuitement pour un usage non commercial ou académique.

Tags :

Comme j’aime cette image …


SUnit

Tags :

Upgrade Fedora 5 -> 8, directement…


Je vous en avait parlé dans un précédent post, j’avais l’intention (encore kamikaze), de tenter un upgrade d’une Fedora 5 “up to date” directement en Fedora 8, sans passer par les versions intermédiaires.

J’ai pour cela utilisé utilisé une installation faite sur une machine virtuelle (VirtualBox, encore toi …), à laquelle j’ai appliqué la procédure d’upgrade via Yum, comme si il s’agissait d’une F7 :

rpm -Uvh --nodeps \
 http://download.fedora.redhat.com/pub/fedora/linux/releases/8/Fedora/i386/os/Packages/fedora-release-notes-8.0.0-3.noarch.rpm
rpm -Uvh –nodeps \
 http://download.fedora.redhat.com/pub/fedora/linux/releases/8/Fedora/i386/os/Packages/fedora-release-8-3.noarch.rpm

Notez le –nodeps que j’ai été obligé de rajouter pour contourner une erreur mutuelle de dépendances. Les commandes tiennent normalement sur deux lignes.

En forçant la main à yum, j’ai pu mettre à jour celui ci, puis faire un upgrade du système, non sans une pléthore de messages d’erreurs divers et variés … Bon, pourquoi pas.

Reboot, et … oh surprise, toujours le vieux kernel fc5, pas de kernel f8 disponibles. Et pourtant, ils sont installés. Amusons nous un peu :

yum remove kernel.*

Puis réinstallation du kernel.i686 … Oui je sais, je joue un peu au cowboy. Ca part vraiment en live, je prends vraiment le risque de ne jamais pouvoir redémarer mon système. Un message d’erreur m’a suggéré que la configuration de grub n’a pas été modifié. Je vais donc faire un tour dans /etc/grub.conf, et constate en effet que grub s’attend à booter sur kernel…..fc5 avec initrd….fc5.img. Je modifie ça à la main, pour que cela concorde avec ce qui est présent sur mon système.

Et … je reboot… :-|

Tiens, ça boot :-)

Un petit avertissement au boot : il semblerait qu’il se soit apperçu de quelque chose … ;-)

Puis finalement :

[valentin@Bordeaux ~]$ uname -a
Linux Bordeaux 2.6.23.9-85.fc8 #1 SMP Fri Dec 7 15:49:59 EST 2007 i686 i686 i386 GNU/Linux

Ah tiens… :-D

Moralité : il est “possible” de passer directement d’une Fedora Core 5 à une Fedora 8, via Yum, moyennant deux trois supercheries. Cela dit, je suis pas certain que ce genre de pratiques soient recommandées, surtout lorsque l’on voit la quantité de messages d’erreurs ou d’avertissement qui défilent lors de l’upgrade. Et puis, même si le système semble fonctionnel, je ne suis pas certain que celui le soit parfaitement (quoi que, après quelques vérifications,ça n’a pas l’air trop mal …)

Mais, diantre, ça prouve que c’est pas de la merde, Fedora, hein !

Note importante rédigée le 13 mai 2008 : Pour mettre à jour votre Fedora 7 ou 8, vous feriez mieux d’utiliser la méthode, bien plus sure, de PreUpgrade. Un tutoriel en images vous explique comment réaliser cette opération.

Tags :

Un serveur express en perl


Il arrive des fois où l’on a besoin de tester une application, et que pour cela un serveur logiciel est necessaire. Le cas s’est présenté récement : j’avais besoin d’un serveur qui écoutait sur un port, et affichait sur la sortie standard les paquets qu’on lui envoyait.

L’application client que je voulais tester était en Java. J’aurrais pu faire un serveur approprié en Java, mais … c’est tellement long. J’ai préféré utiliser un petit serveur bidon écrit en perl, qui réalise pleinement ce que j’attends, dont je vous donne ici le code source :

#!/usr/bin/perl
use strict;use warnings;
use IO::Socket;

my $serveur = IO::Socket::INET->new(LocalPort => 12345,
                                    Type      => SOCK_STREAM,
                                    Reuse     => 1,
                                    Listen    => 10)
or die "Impossible serveur tcp sur le port 12345 : $@\n";

while(my $client = $serveur->accept())
{
	while( my $rep = <$client>) {
	    print $rep;
	}
}

Il s’agit d’une version simplifiée d’un exemple trouvé sur internet il y a de cela quelques temps. Dans la doc Perl probablement ? Quoi qu’il en soit, la modif apporté fait que le serveur ne fork pas lors de l’arrivée d’un nouveau client : il s’agit là d’un serveur monoclient. Mais franchement, c’était largement suffisant !
Je vais sans doute utiliser ce serveur pour tester BOSS sur une connection TCP.

Tags :

Upgrade Fedora 7 -> 8


Upgrade Fedora via YUMNote importante rédigée le 13 mai 2008 : Pour mettre à jour votre Fedora 7 ou 8, vous feriez mieux d’utiliser la méthode, bien plus sure, de PreUpgrade. Un tutoriel en images vous explique comment réaliser cette opération.

Vendredi dernier, quelques jours avant le réveillon, j’ai eut l’occasion de faire une mise à niveau d’une installation Fedora 7 vers la dernière Fedora 8.

Contrairement à ma précédente expérience, qui je l’avoue, était un peu kamikaze, celle-ci c’est parfaitement déroulée.

J’ai pour cela suivit la roadmap simple et traduite en français du wiki francophone de Fedora. Celle ci apparait - et c’est regrétable - assez loin dans une recherche google (à moins de savoir exactement ce que l’on cherche ;-) ). Il suffit pourtant de suivre à la lettre ce qui est écrit.

A l’issue de cette mise à jour via yum (pas si longue que cela, pour une connexion ADSL 1Mega…), une dépendance n’avait pas été ajoutée (je l’ai ajoutée à la main : yum install lepaquet), et un paquet ne s’est pas désinstallé correctement (une vieille version de avahi me semble-t-il… mais, “who cares ?“… ). L’étape 3 du HOWTO permet de détecter ce genre de problèmes. On peut alors en régler certains…

Bref, je suis plutôt satisfait de l’opération, et je me dis que la prochaine fois, l’utilisateur en question pourra se débrouiller sans peines tout seul. Car, même si cela flatte l’égo d’être indispensable, ca n’est pas bon pour les nerfs…

Je vais peut être m’installer une vieille FC5 sur une machine virtuelle, et tenter l’upgrade direct FC5 -> F8, pour rigoler :-)-

Post Scriptum : C’est Fait !

Tags :

VirtualBox sur hôte Bi-écran


Précédement utilisateur de Qemu pour la virtualisation, je trouvais ce dernier plutot lent, et peu maniable. Les principaux reproches ergonomiques que je pouvait lui faire tenaient dans l’impossibilité que j’avais de travailler en plein écran avec l’OS virtualisé, sur un écran “secondaire”.

Je m’explique. Mon ordinateur dispose de deux écrans. Cela me permet d’augmenter de façon trés significative mon espace de travail, et offre d’ailleurs un confort trés appréciable. Actuellement, l’écran secondaire, situé à gauche, accueille surtout les fenêtres de client mail, logiciel d’IM … l’écran principal restant dédié à la tâche principale (écriture, navigation …).

Lorsque j’utilise un OS virtualisé, je le place en général sur le second écran, plus petit. Et quand j’avais Qemu, j’aurrais bien aimé pouvoir mettre celui ci en plein ecran, sur le deuxieme écran. Mais cette opération avait pour effet d’utiliser l’écran principal. Ce que je ne voulais pas.

Bref.

J’ai découvert il y a quelques mois VirtualBox, qui offre les mêmes fonctionnalités, avec je crois une ergonomie plus aboutie. Il me semble également (mais il s’agit là d’une simple impression), que VirtualBox est plus rapide. Et, comble du luxe, je peux mettre en plein écran l’invité sur l’écran secondaire.

Ma vie est trépidante.

Tags :

Binary Object Stream Service


VisualWorks propose un Parcel nommé BOSS, pour Binary Object Stream Service. Celui ci permet le stockage d’instances sous la forme d’un fichier binaire. Ce parcel est normalement chargé dans l’image de départ de VW 7.5, mais le cas échéant, il peut être chargé via le parcel manager (”System” -> “Parcel Manager”). Il se trouve dans l’onglet suggestion, et le dossier “Application Developpement”.

Le code suivant permet d’utiliser BOSS :

myWriteStream := 'monFichier.dat' asFilename writeStream.
bos := BinaryObjectStorage onNew: myWriteStream.
"on suppose qu'il existe anObject, une instance de classe quelconque..."
[bos nexPut: anObject] ensure: [bos close].

On pourrait tout aussi bien utiliser le message “nextPutAll: aCollection” pour stocker un ensemble d’instances. La construction [aBlockClosure] ensure: [anAction] retourne la valeur retournée par le premier block, mais, avant cela, évalue le second bloc.

Pour récupérer des instances d’objets, le problème n’est pas plus compliqué :

myReadStream := 'monFichier.dat' asFilename readStream.
bos := BinaryObjectStorage onOldNoScan: myReadStream.
[myObjects := bos contents] ensure: [bos close].

Il est également possible de stocker des définitions de classes, avec le message “nextPutClasses: anArray” (anArray doit contenir les classes à enregistrer). Pour les récupérer depuis la sauvegarde, le message nextClasses fera l’affaire ;-)

BOSS est capable de détecter les changements dans la définition des classes lors du chargement d’instances depuis un fichier BOSS. Ainsi, vous pouvez diffuser un patch contenant les nouvelles classes oou les modifications apportées à votre logiciel, tout en assurant la rétro-compatibilité des sauvegardes des utilisateurs. Il suffit pour cela de définir deux méthodes dans la nouvelle version de la classe : une méthode d’instance nommée “binaryRpresentationVersion”, qui retourne la version de la classe (1, 2, 3… etc), et une méthode “binaryReaderBlockForVersion: oldVersion format: oldFormat” qui se charge de convertir l’anciene instance objet sous sa nouvelle forme. Le reste est fait automatiquement par BOSS.

BOSS est largement décrit dans le guide du développeur d’applications VisualWorks (AppDevGuide.pdf) situé dans le repertoire “doc” de votre installation VisualWorks. Ce billet en est d’ailleurs largement inspiré.

Avec un tel outils, imaginez la quantité de difficultés levées lors du developpement d’applications : sauvegarde aisée des éléments produits par l’applications, et mise à jour facile … Un bonheur.

Je crois (mais je n’en suis pas certain) qu’il est possible d’utiliser BOSS sur autre chose qu’un Stream sur un fichier. Une connexion TCP par exemple ? Je vérifierais, mais je n’ai pas encore en tête “l’application qui tue” d’une telle possibillité. Si vous avez des idées …

Tags :

“on fait le Bilan calmement en se remémorant chaque instant”


2008-300-b.jpgIl est d’usage, en ces périodes d’étrennes, de faire un bilan de l’année passée. l’ensemble des médias, qu’ils soient télévisés, de presse écrite, ou radio, s’emploient à faire une rétrospective des évènements marquants de l’année. Je vais m’essayer à cet exercice, avec je l’avoue, certains partis pris. Voici donc, selon moi, les cinq évènements remarquables de cette année.

  1. Sur la ligne à grande vitesse Est européenne, la SNCF est parvenue à faire rouler un TGV Duplex spécialement préparé à la vitesse de 574,8 Km/h, record du monde sur rail. Ce record s’inscrivait dans le cadre du programme « V150 » visant à dépasser la vitesse de 150 m/sec (soit 540 Km/h). Source : Wikipédia.

  2. La crise politique en Belgique est l’un des évènements les plus inquiétant d’Europe occidentale. La nation Belge est divisée, entre Wallons et Flamands, les uns parlant français, et les autres flamand. En 2007, cette crise s’inscrit dans une durée qui devient inquiétante pour ce pays situé au cœur de l’Europe.

  3. La coupe du monde de rugby a eut lieu en France à la fin de l’été. Ce fut un spectacle fédérateur, et sans aucun doutes plus agréable que le football qui le reste de l’année est, malheureusement, envahissant. Malgré les apparences, le rugby est un sport de non-violents pratiqué par des gentlemen :-)

  4. L’année 2007 a été l’occasion de révéler au grand public un phénomène grandissant et hilarant de la tecktonik. Il s’agit d’une marque, et certains préconisent “danse électronique” comme dénomination. Peu importe. Si vous ne connaissez pas (vous ne perdez rien), “tecktonik” sur youtube vous montrera ces jeunes gens, aux coupes de cheveux improbables, se trémoussant sur une musique répétitive. Moi je trouve ça hilarants, et j’attends avec impatience le moment ou les enfants de ces adeptes découvrirons ces vidéos. C’est encore plus drôle que les “patdèf” et les R5 oranges de nos parents.

  5. Facebook, ou la consécration du rien. Il est de bon ton d’être sur Facebook, et je m’y suis inscrit sous la demande d’un ami. Cela dit, bien que certains soient très enthousiastes face à ce site récemment ouvert au grand public, je doute franchement que les réseaux sociaux virtuels soient d’une qualité comparable aux réelles relations d’amitiés. Vous savez, ces amis que l’on invitait à diner chez soi. Très franchement, je ne suis pas convaincu d’apprécier les bières virtuelles que l’on m’offre par mail.

Pour ce début d’année, je me réjouit de l’interdiction de fumer dans les bars, restaurants, et autre lieux que je ne fréquentais que très peu auparavant. C’est avec un certains plaisir que je pourrais dorénavant aller boire un verre avec des amis, sans risquer de ressortir de là avec des vêtements qui dégagent de la fumée lorsque l’on appuie dessus. J’ai d’ailleurs entendu ce midi sur Europe 1 un quidam fumeur qui, dans un bistro, était ravi du nouvel environnement dans lequel il évoluait. On pouvait, disait-il, sentir les saveurs du café torréfié, et le plat du jour n’était plus seulement visible sur le tableau noir : ses parfums embaumaient l’établissement dans lequel il prenait son café du matin. Hourra, il était temps.

Pour finir, je vous souhaite à tous une belle et heureuse année 2008.

Tags :