Archive for the ‘Software’ Category

Dicom Worklist

Vendredi, avril 1st, 2005
#!/usr/bin/python2.3 # # Script to download a worklist file # and fetch each enumerated file # # author: Jean-Luc Cyr # created on : 2005-06-16 # for: Les systemes medicaux IMAGEM inc #   from urllib import urlopen, urlretrieve from os import makedirs, stat  #Variables globales method = "http://" listserver = "192.168.2.21" path = "/worklist/" inst = "CHUL" fileserver = "ftp://robin:blitzkrieg@192.168.2.70/" rootdir = "/home/jlcyr/dl/"  #Fonction pour downloader la liste de travail a partir du web def fetchlistweb():     print 'Retrieving worklist'     url = method + listserver + path + "worklist.php?INST_ID=" + inst     #print url     try:         page = urlopen(url).read()     except IOError:         print "Can't connect to server"         page = "Can't connect to server"     return page;  #Fonction pour downloader la liste de travail a partir de la db def fetchlistdb():     import cx_Oracle     list = "<PRE>#Liste de travail pour: CHUL\n"     destination='CHUL'     conn2 = cx_Oracle.connect('ris_pacs','password','rpdev')     cur2 = conn2.cursor()     select = "SELECT /*+ INDEX(c IDX_COI_STUDY_UID) */ DISTINCT a.AR_START_DOWNLOAD, c.COI_PAT_ID, c.COI_DATE, m.MFS_MOUNT_POINT,a.AR_STU_INSTANCE_UID, c.COI_SERIES_INSTANCE_UID, c.COI_SOP_INSTANCE_UID || '.dcm', s.STU_DESC FROM AUTO_ROUTING a, COMPOSITE_OBJECT_INSTANCE c, MEDIA_FILE_SET m, STUDY s WHERE COI_STUDY_INSTANCE_UID = AR_STU_INSTANCE_UID AND  COI_STO_MEDIA_FSET_UID = MFS_UID AND AR_STATUS = 'CREATED' AND  AR_DESTINATION = '%s' AND COI_TYPE = 'IMAGE'  AND AR_START_DOWNLOAD <= SYSDATE AND COI_STUDY_INSTANCE_UID = STU_INSTANCE_UID UNION SELECT /*+ INDEX(c1 IDX_COI_STUDY_UID) */ DISTINCT a.AR_START_DOWNLOAD, c2.COI_PAT_ID, c2.COI_DATE, m.MFS_MOUNT_POINT, c2.COI_STUDY_INSTANCE_UID, c2.COI_SERIES_INSTANCE_UID, c2.COI_SOP_INSTANCE_UID || '.dcm', s2.STU_DESC FROM AUTO_ROUTING a, COMPOSITE_OBJECT_INSTANCE c1, STUDY s1, HISTORICAL_IMAGES h, STUDY s2, COMPOSITE_OBJECT_INSTANCE c2, MEDIA_FILE_SET m WHERE a.AR_STATUS = 'CREATED' AND  a.AR_DESTINATION = '%s' AND a.AR_START_DOWNLOAD <= SYSDATE AND c1.COI_STUDY_INSTANCE_UID = a.AR_STU_INSTANCE_UID AND c1.COI_TYPE = 'IMAGE' AND a.AR_STU_INSTANCE_UID = s1.STU_INSTANCE_UID AND s1.STU_OTHER_NUMBER = h.HI_REF_EXAMCODE AND h.HI_EXAMCODE = s2.STU_OTHER_NUMBER AND s1.STU_PAT_ID = s2.STU_PAT_ID AND s1.STU_INSTANCE_UID != s2.STU_INSTANCE_UID AND s2.STU_INSTANCE_UID = c2.COI_STUDY_INSTANCE_UID AND c2.COI_TYPE = 'IMAGE' AND  c2.COI_STO_MEDIA_FSET_UID = m.MFS_UID ORDER BY 1  asc, 2, 3 desc" % (destination, destination)     items = 8     cur2.execute(select)     res2 = cur2.fetchall()     result={}     study = ""     for item in range(1,cur2.rowcount):         for cnt in range(0,items):             result[cur2.description[cnt][0]] = res2[item][cnt]         if (study!=result['AR_STU_INSTANCE_UID']):             if (study!=""):                 list += "End of Study:  "                 list += study                 list += "\n"             study=result['AR_STU_INSTANCE_UID']             list += "Start of Study:  "             list += study             list += "\n"         list += "%s/%s/%s/%s\n" % (result['MFS_MOUNT_POINT'],result['AR_STU_INSTANCE_UID'],result['COI_SERIES_INSTANCE_UID'],result["C.COI_SOP_INSTANCE_UID||'.DCM'"])     if (study!=""):         list += "End of Study:  "         list += study         list += "\n"     list += "</PRE>"     return list  #Fonction mettre des entrees dans la liste de travail def makedb():     print "Generation d'une liste de travail"     import cx_Oracle     conn2 = cx_Oracle.connect('ris_pacs','password','rpdev')     cur2 = conn2.cursor()     select = "update AUTO_ROUTING set AR_STATUS='CREATED'"     cur2.execute(select)     select = "commit"     cur2.execute(select)  #Fonction pour updater la liste de travail quand une etude est downloade def updatelist(study):     print "Updating worklist for study %s " % ( study )     url = method + listserver + path + "update_worklist.php?STU_INSTANCE_UID=" + study     #print url     try:         page = urlopen(url).read()     except IOError:         print "Can't connect to server"         page = "Can't connect to server"     print "response:%s" % ( page )  #Fonction pour downloader une image, verifier les directory etc def download(full,stu,ser,file):     url = fileserver+full     try:         stat(rootdir+stu+"/"+ser)     except OSError:         print "Local directory doesn't exist, creating it (%s)" % (rootdir+stu+"/"+ser)         makedirs(rootdir+stu+"/"+ser)      print "Retrieving object %s" % (file)     fileName= "%s%s/%s/%s" % ( rootdir, stu, ser, file )     try:         urlretrieve(url,fileName);     except IOError:         print "Can't connect to server"             print 'Done'  #Fonction pour executer une liste de travail (downloader les images et updater a chaque etude) def parse(page):     print 'Parsing worklist'     lines = page.split("\n")     for line in lines:         #print line         compo = line.split('/')                 if line[0]=='/':             download(line,compo[3],compo[4],compo[5])         else:             if (line[0:3]=="End"):                 compo = line.split(':  ')                 print line                 updatelist(compo[1])             if (line[0:5]=="Start"):                 print line  #Programme principal makedb() print 'Starting download' #parse(fetchlistweb()) parse(fetchlistdb()) print 'All work done' 


CVS’ed www pages

Lundi, mars 21st, 2005

Script php pour la mise a jour d’un site web via cvs

Ce script n’est pas terminé, mais il peut-etre utile.

Il a été concu pour fonctionner sous apache/php sous windows avec cvsnt installé sous c:\program files\gnu\wincvs 1.3\cvsnt

<html>
<head>
<title>fonction cvs serveur web</title>
</head>
<body>
<center>
<table>
<tr align=center>
<td><h1>Fonction CVS</h1></td>
</tr>
<tr>
<td><a href=”cvs.php?fnct=update”>Mettre a jour le serveur</a></td>
</tr>
<tr>
<td><a href=”cvs.php?fnct=”backup”>Copie de sécurité du serveur</a></td>
</tr>
</table>
</center>
<hr>
<b>
Voici les résultats de la mise a jour.<br>
Les fichiers précédés par un ? existent seulement sur le serveur et ne sont pas dans le cvs.<br>
Les fichier précédés par un U ou un P ont été mis a jour a partir du cvs<br>
</b>
<pre>
<?php
$cvsserver = “-d:pserver:user@cvs_machine_hostname:/cvs_directory”;
if (isset($_GET["fnct"]))
if ($_GET["fnct"]==”update”)
passthru(”c:\\progra~1\\gnu\\WinCvs~1.3\\cvsnt\\cvs.exe $cvsserver update htdocs/pty 2>&1″);

if (isset($_GET["fnct"]))
if ($_GET["fnct"]==”backup”)
echo “FONCTION BACKUP”;
?>
</pre>
<hr>
</body>
</html>

xml-rpc

Lundi, mars 21st, 2005

XML-RPC, un point de départ pour savoir c’est quoi. http://www.xmlrpc.com/

Conception graphique

Lundi, mars 14th, 2005

Après Photoshop, Illustrator, CorelDraw…

Voici une liste de logiciels open source qui fonctionnent aussi bien sous windows que sous linux et qui servent à la conception graphique.

L’équivalent de photoshop, bien reconnu dans de l’open source, GIMP que l’on peut retrouver à http://www.gimp.org/

Dans le domaine du dessin vectoriel, ou celui d’illustrator et de corel draw, il y en a au moins deux.. Sodipodi à http://www.sodipodi.com/
et aussi InkScape à http://www.inkscape.org/

Ce sans compter OpenDraw de la suite OpenOffice.

Mandrake 10.1

Samedi, mars 12th, 2005

Mon expérience avec Mandrake 10.1

Le téléchargement des 3 CDs s’est bien fait. Par le web on peut le prendre à http://gulus.usherbrooke.ca/pub/ (assez rapide au québec) ou utiliser bittorent avec la source trouvé sur http://www.tlm-project.org/

Pour démarrer, il s’installe assez facillement et reconnait presque tous mes périphériques. (sauf mon imprimante Lexmark z605, ma webcam Logitech Quick messenger mais les autres distro non plus de toute façon) C’est un bon point de départ.

Pour l’installation des packages, les programme urpm* sont intéressant. On peut s’ajouter des sources de download, faire les query, install etc assez facilement.

J’ai eu quelques problèmes
L’installation de vmware a été problématique à cause du kernel 2.6 qui crée le /dev à chaque boot. Les devices de vmware s’effacaient à chaque boot. Il m’a fallu ajouter des commandes dans un fichier pour qu’il se recréent à chaque boot. J’ai trouvé la solution la: http://mandrakeusers.org/index.php?showtopic=18905
En résumé: “At the beginning of /etc/init.d/vmware, add the following line immediately below lines starting with ‘#’ for a in `seq 0 9`; do mknod /dev/vmnet$a c 119 $a; done
Les permissions des devices sont gérés dans /etc/udev/permissions.d/00-udev.permissions (utils pour donner accès 777 a un disque pour y accéder avec vmware sous n’importe quel user)
Installation de mon imprimante Lexmark z605 voir ici pour plus d’infos.

Dans les packages manquants, il y a
Le logiciel GraphViz: http://www.graphviz.org/Download_linux.php
problème:
+ WebDot : http://www.graphviz.org/Download_linux.php
l’interface graphique pptpconfig: http://pptpclient.sourceforge.net/howto-mandrake-101.phtml
J’ai pas trouvé KDevelop sur les CDs de la version gratuite…???

J’ai aussi installé (sans package)
Le logiciel de généalogie: Gramps:
Navigateur: Firefox
Courriel: Thunderbird
Messagerie: amsn
Extension à emacs pour faire du php: emacs-php-mode

Éditeur de page web

Mercredi, mars 2nd, 2005

Un nouvel editeur de page “stand-alone” web basé sur Mozilla Composer disponible à http://www.nvu.com/

Download linux au Québec

Mercredi, février 23rd, 2005

Voici un site assez rapide pour le téléchargement de Linux au Québec: http://gulus.usherbrooke.ca/pub/

imprimante z605 sous linux

Dimanche, février 20th, 2005

Voici comment j’ai procédé pour installer les drivers de mon imprimante lexmark z605 sous mandrake 10.4

  • Télécharger le driver sur le site de lexmark ICI
  • Avant d’exécuter le script:
  • Il faut modifier le script avant de l’exécuter

Voici un diff de mes modifications:
================CUT================
58c58
< exit 2;

> # exit 2;
103c103
< eval $finish; exit 2;

> eval $finish; #exit 2;
125c125
< [ "$keep" = y ] || trap ‘cd /tmp; /bin/rm -rf $tmpdir; exit $res’

> [ "$keep" = y ]
================CUT================

  • Aussi créer un lien symbolique de /usr/lib/libtk8.4.so en libtk8.3.so et libtcl8.4 en 8.3
  • J’ai tcl/tk 8.4 mais ca fonctionne en faisant un lien symbolique
  • l’extraction nous créer quelques fichier dont 2 rpms
  • Installer les deux packages RPM avec la commande “rpm -i lex*”
  • L’installation se plaint de dépendances, mais si vous avez CUPS d’installé ca marche.
  • J’ai un kernel 2.6.8 (mandrake 10.4), avec cups 1.1.21
  • Entrer un nom et une description
  • Dans device choisir Lexmark Printer (Lexmark Lexmark z600 series)
  • Dans les marques choisir Lexmark
  • Dans les modèles choisir Lexmark z600 v1.0-1 (en)

Mise à jour - Redhat9

Mercredi, février 16th, 2005

RedHat ne distribue plus Linux sous le nom de RedHat après l a version 9.

La nouvelle version gratuite s’appelle Fedora.

Voici quelques liens qui expliquent comment procéder à une mise-à-jour de votre système de RedHat 9 à Fedora.

Avec APT-GET

http://www.archlug.org/kwiki/MigratingRedHatToFedora

Je suis en train d’essayer la seconde méthode proposée dans cette page.
Alors bientôt vous allez savoir si ça a marché…

  • Premier problème, j’ai des packages en double sur ma machine… j’ai fait un script en python qui trouve les doublons et génère une liste de version les plus basses pour qu’on puisse les effacer. Je le mets à la fin de ce document.
  • Deuxième problème.. X11 est rendu Xorg-X11.. pas vraiment un problème sauf que mais des coufigs qui marchent plus… et qui finallement j’ai plus d’environnement graphique pour le moment. Solution: J’ai fait des rpm -i xorg* et ca a fini par décoller.
  • Après j’ai ré-oté les packages en double.. résultat Troisième problème, j’ai plus de kernel! J’ai réinstallé le kernel et j’ai essayé de le mettre dans GRUB. Résultat: “unable to open initial console” et ca reboot!

Finallement: Ça l’air d’être faisable, mais si vous avez le temps seulement!.. :)

Avec YUM

http://www.brandonhutchinson.com/Upgrading_Red_Hat_Linux_with_yum.html

————————————————-
Trouver les RPM installé en double (2 version) sur le système
———-CUT-BEGIN—————–
# Find all duplicated package on the system
# and automatically remove the lesser version
#
# Author: Jean-Luc Cyr
# Date: 2005-02-18
# Version: 0.1
#
# build from an excerpt code at http://mail.python.org/pipermail/tutor/2005-January/035385.html
# to parse rpm names

names = []
import fileinput
for line in fileinput.input(”list”):
names.append(line)

import re

pattern = r”’
(?P<base>.+)
-(?P<version>[\w.]+)
-(?P<release>[\w.]+)
”’

patternRe = re.compile(pattern, re.VERBOSE)

from distutils.version import LooseVersion

last = patternRe.search(”name-version-revision”)
l=”"
for name in names:
m = patternRe.search(name)
if m:
if (last.group(’base’)==m.group(’base’)):#compare package name
if (LooseVersion(m.group(’version’))<>LooseVersion(last.group(’version’))):#compare version
#Version Differ
if (LooseVersion(m.group(’version’))>LooseVersion(last.group(’version’))):#compare version
print l
else:
print name
else:
#Version Equal, check release
if (LooseVersion(m.group(’release’))<>LooseVersion(last.group(’release’))):#compare release
if (LooseVersion(m.group(’release’))>LooseVersion(last.group(’release’))):#compare release
print l
else:
print name
last = m
l = name
else:
print ‘No match:’, name
—————–CUT-END—————

Contenu Web

Mercredi, février 16th, 2005

Voici différentes suggestions de système web la pluspart en PHP pour gérer différentes sorte de contenu.

Le logiciel CMS utilisé pour ce site: www.etomite.org Facile à utiliser et installer.

Logiciel de wiki (utilisé par WikiPedia): mediawiki, wikiwig (wysiwyg wiki),

Logiciel de gestion de projet: phprojekt. Il gère les feuilles de temps, les projets, les fichiers, un forum, etc.
Logiciel strictement de gestion de projet/billets:
phpgroupware, moregroupware, Double Choco Latte,
Logiciel de feuille de temps:
phptimesheet,

Logiciel de babillard électronique (BBS): phpBB Un beau petit système d’échange avec des forums, etc.

Note: Une liste très complète peut être trouvée à http://www.opensourcecms.com/

Ha j’oubliais… un outil de template pour réaliser des sites Modelixe http://modelixe.phpedit.com/
http://pn-template.sourceforge.net/