mardi, octobre 31, 2006

La solution du problème...

J'ai poste là-bas la solution à ce "problème". Je l'aurais bien posté ici mais Blogger ne me laisse pas mettre du code HTML dans mes posts sans l'interpréter. M'enfin...

mercredi, octobre 25, 2006

Le point apres 2 semaines avec Ruby

Ça fait presque 3 semaines que je programme en Ruby quotidiennement. Rien de compliqué, d'orienté-objet ou utilisant le framework Rails mais du Ruby quand même. J'écris des scripts qui lisent des données qui sont dans Oracle, qui les traitent et les recrachent dans PostgreSQL. Rien de sophistiqué mais la job doit être faite. Voilà donc un petit bilan de ce que j'aime et de ce que j'aime moins.

Ce que j'aime:
  • La syntaxe est très "clean", pas trop de fioritures, de parenthèses à l'excès ou de point-virgules à la fin de chaque ligne. J'aime bien la manière dont le "case" est exprimé. Aussi c'est très facile à apprendre quand ce n'est pas le 1er langage de programmation qu'on apprend.
  • Le code, quand bien indenté, est facile à lire, comme Python.
  • Les expressions regulières sont tres complètes, rien à envier à Perl.
  • De bonnes librairies de base comme pour la connection aux bases (DBI et OCI8) de données ou pour télécharger des pages web (net/http)dont on extraira des éléments.
Ce que j'aime pas:
  • Faire des maths est pénible, surtout avec des floats. Il faut tout le temps se rapeller de quel type est une variable. Ca doit être le prix à payer pour ne pas avoir à déclarer les variables au début du programme. Personellement, je préfère les langages statiquement ou fortement typés à ceux où le typage est dynamique.
  • Il est aussi pénible de créer et manipuler des arrays en 2 dimensions. C'est tellement plus naturel en VB ou en Perl.
  • Peut-être que c'est dû au fait que je suis nouveau avec ce langage (ou est-ce Vim, mon éditeur pour ce projet. Je préfère de beaucoup Kate quand j'ai le choix.) mais j'ai l'impression que je peux moins être "spontané" en Ruby. Ça requiert un peu plus d'analyse à-priori que Perl ou VB.
  • Le manque d'un bon débuggeur interactif au command line. MrGUID semble bon mais requiert X, un luxe que je n'ai pas pour ce projet.

Voilà pour où j'en suis!

Un vin surprenant

J'ai eu la chance il y a deux semaines de gouter pour la première fois un vin mousseux pétillant, le Seaview Sparkling Shiraz. Vraiement pas mauvais, ça goute clairement le Shiraz mais un peu plus acide. Les bulles sont fines ce qui lui donne un effet distingué. Recommandé comme apéro pour surprendre les invités qui s'attendent à ce qu'un vin mousseux ait une robe dorée.

vendredi, octobre 13, 2006

Problème d'expression régulière en Ruby

J'ai un problème avec une expression régulière en Ruby. Voici le code, grosso modo:

require 'net/http'
begin

re = /(.*)<\/TS>/
if hdoc =~ re
print "#{$&}\n"
else
print "Nothing\n"
end
end

Le problème est que ce fragment de code marche parfaitement si je substitue la variable hdoc dans le test pour une chaîne de caractère. Alors pourquoi ça ne marche pas avec la variable hdoc qui est du type String?
Si vous avez la solution, dites-le moi.

jeudi, octobre 12, 2006

J'ai besoin d'un API ou d'un web service

Je suis en train de travailler sur un projet pas mal cool au bureau mais il me manque un petit truc pour finir mon programme en Ruby. J'aurais besoin d'un web service ou d'un API qui me retournerait le symbole d'une compagnie en bourse ("stock ticker" en anglais) quand on lui passe le nom d'une compagnie canadienne comme paramètre. J'ai déjà trouvé un API qui retourne la valeur d'une action quand on lui passe le symbole boursier, mais rien pour pouvoir récupérer le symbole à partir du nom de la compagnie.

jeudi, octobre 05, 2006

Le tape repond

Un peu de testing demontre que mon tape est bien branche:

Fukuoka etc # mt -f /dev/st0 status
SCSI 2 tape drive:
File number=-1, block number=-1, partition=0.
Tape block size 0 bytes. Density code 0x0 (default).
Soft error count since last status=0
General status bits on (50000):
DR_OPEN IM_REP_EN
Fukuoka etc # mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=-1, block number=-1, partition=0.
Tape block size 0 bytes. Density code 0x0 (default).
Soft error count since last status=0
General status bits on (50000):
DR_OPEN IM_REP_EN

Nouvelle carte nVidia dans le pipeline

Je viens juste de lire ça sur The Register:

The GeForce 8800 GTS has 96 shaders, clocked to 1200MHz, it's said. The rest of the core runs at 500MHz, the memory at 900MHz. The board's likely to contain 640MB of GDDR 3 connected over a 320-bit bus yielding 64GBps of bandwidth.

Vous rapellez-vous de Bill Gates disant que 640KB de RAM suffirait à n'importe qui ("640 K ought to be enough for anybody.")?

Nouveau tape backup installe!

Mon nouveau tape back-up est installé!

Fukuoka scsi # cat scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: IBM Model: DDYS-T18350N Rev: S96H
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 02 Lun: 00
Vendor: PIONEER Model: DVD-ROM DVD-305 Rev: 1.03
Type: CD-ROM ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 04 Lun: 00
Vendor: PLEXTOR Model: CD-R PX-W1210S Rev: 1.02
Type: CD-ROM ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 05 Lun: 00
Vendor: QUANTUM Model: DLT7000 Rev: 1E46
Type: Sequential-Access ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 06 Lun: 00
Vendor: IBM Model: DDYS-T18350N Rev: S96H
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 09 Lun: 00
Vendor: IBM Model: DDYS-T18350N Rev: S96H
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 12 Lun: 00
Vendor: MAXTOR Model: ATLAS10K4_36WLS Rev: DFL0
Type: Direct-Access ANSI SCSI revision: 03

mercredi, octobre 04, 2006

La classe

Man douce est pas à la maison ce soir. A menu: Macaroni au fromage "Choix du Président" et Beaujolais Village Georges Duboeuf 2004. La classe quoi. Est bonne! Est bonne! Est bonne!

HOWTO replace/upgrade a disk part of a LVM2 volume

Voilà un petit "Howto" (en anglais) que j'ai écrit expliquant comment changer un disque qui fait partie d'un volume LVM. Le formattage est pas super, je vais essayé de travailler là-dessus un de ces quatre...
Dernière mise à jour: 27 février 2007

HOWTO replace/upgrade a disk part of a LVM2 volume

This is a quick HOWTO about how to replace/upgrade a hard disk which is part of an LVM2 volume. It is an enhanced version of this document.

This document lists all the steps you needed.

In my situation:

  • the physical drive to remove is /dev/hdd and it had one partition (/dev/hdd1) that was 46G big
  • the logical volume is: /dev/mapper/backup-vol1, in my /etc/fstab it is mounted as /backup
  • the volume group is named backup
  • the file system is reiserfs

I’ll put the specific of my situation in italic in the text to ease their change for your real values.

You can’t start this procedure unless you have more free space on your volume than the size of the disk you want to replace.

Before starting, back up your volume! One never knows when Murphy will strike…

Let’s begin. Unmount the logical volume for which you want to replace a disk as most operations can’t be performed with the volume mounted.

umount /backup

If you can't unmount the logical volume, comment its line in /etc/fstab then reboot.

See if a physical volume has free extent by typing:

pvdisplay | grepFree PE

If the number following “Free PE” is greater than 0, you have free physical extent.

Typically, the output of the previous command will be like:

--- Physical volume ---
PV Name /dev/hdb
VG Name vg_store1
PV Size 57.23 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 14651
Free PE 0
Allocated PE 14651
PV UUID 7cryMN-plCs-YuF2-fpxn-BcIJ-OKpG-t3yRQf

If you have more free extent than the number of extent on the drive you want to replace, you can skip the next two steps.

If you don’t you will need to resize the partition to reduce it by the size of the disk you are replacing (see next two steps).

We first want to make sure the volume is error-free.

Check the file system of the logical volume. This is a two steps operation if you use reiserfs. If you use ext2/ext3, there is only one step.

If you use reiserfs as your file system:

reiserfsck --check --logfile /tmp/check.log /dev/mapper/backup-vol1

Then, if the first step revealed errors:

reiserfsck --fix-fixable –logfile /tmp/fixable.log /dev/mapper/backup-vol1

If you use ext2 or ext3 as your file system, there is only one step:

fsck.ext2 –p /dev/mapper/backup-vol1

Then we need to resize the partition. The partition size has to be reduced so we can remove the disk without damaging the data still on the partition. Once again the instructions differs depending on your file system

If you use reiserfs:

resize_reiserfs -s -47G /dev/mapper/backup-vol1

If you use ext2 or ext3 (this link may be of interest here.):

Resize2fs /dev/mapper/backup-vol1 newsizeofvolume

where newsizeofvolume is the size of the initial volume minus the size of the hard drive you are removing/replacing.

Note that the volume MUST be offline for this to work.

We can now start the operations to remove the data from the disk we will physically replace. Once the file system size has been reduced, we can reduce the size of the logical volume:

lvreduce -L-47G /dev/backup/vol1

We now move the data out of the physical disk we want to remove:

pvmove /dev/hdd1

Now, as the volume doesn’t have any data on the disk we want to remove, we remove the disk from the volume group:

vgreduce backup /dev/hdd1

Now power down the computer, take your tools and replace the disk we moved the data out of.

Restart the computer.

Create a partition taking the whole disk on the disk you just installed. Set the type of partition to "Linux LVM":

fdisk /dev/hdd

Prepare the physical volume:

pvcreate /dev/hdd1


Add the new physical volume to the volume group:

vgextend backup /dev/hdd1

Expand the logical volume by the capacity just added:
lvextend -L +40G /dev/backup/vol1 /dev/hdd1

Resize the partition to add the capacity just added (I added a 40G hard
disk):

If you use reiserfs:

resize_reiserfs -s +40G /dev/mapper/backup-vol1

If you use ext2/ext3:

Resize2fs /dev/mapper/backup-vol1 newsizeofvolume

where newsizeofvolume is the size of the initial volume plus the size of the hard drive you are adding/replacing.

Note that the volume MUST be offline for this to work.

Mount the partition:

mount /dev/mapper/backup-vol1

Since this mount point should be in your /etc/fstab, you do not need to specify the file system type

Done! You have successfully replaced/upgraded a disk in your LVM2 volume.

Last updated on February 27th 2007.

mardi, octobre 03, 2006

C'est fini!

J'ai passé 1h20 a attendre au téléphone avec mes "amis" de 3web.com. À la fin, je me suis écoeuré et j'ai racroché. J'ai trouvé la page de leur site web qui permet d'annuler l'abonement. Je l'ai fait. Enfin débarassé d'eux. C'est vraiement la compagnie la plus médiocre avec qui j'ai jamais eu à faire affaires. Je vous conseille fortement de ne pas faire affaires avec eux. Ils sont moins qu'amateurs. M'enfin...

lundi, octobre 02, 2006

Flush 3web

Bon, ca y est, j'en ai marre. Je vais flusher mon ISP tantôt. Je pense que j'ai utilisé assez de patience. Flllllllluuuuuuuuuuusssssssssssssssssshhhhhhhhhhhhhhhhh!

Le disque est encore vivant

Contrairement à ce que j'ai rapporté dans mon autre blog, mon disque n'est pas mort. Après un reboot, Reiserfs a rebatit le volume sur lequel je fais mes back-ups et tout est tiguidou.
Je vais prendre livraison demain d'un 3e tape back-up DLT.