[RubyDoc Exceptions] - begin, rescue, catch, raise, retry <=> try, catch, finally (Java)
Mieux qu'un long discours, un exemple !!
#la bonne façon d'ouvrir un fichier!!
begin
f = File.new('C:\\myFile.txt', 'r')
rescue => err
puts "#{err}"
ensure
f.close unless f.nil?
end
> ouverture du fichier "myFile.txt" en cas d'erreur on affiche l'erreur que l'on récupère (rescue)
> ensure : on s'assure que dans tous les cas on ferme la socket du fichier ;)
NB: on peut bien sur exécuter d'autres traitements...
catch/throw ! on peut vouloir ne pas s'arrêter dans un traitement!
on peut retenter l'opération "retry/raise"
la récupérer "catch", ou la repropager "throw"
plus de détail dans la doc :)
mercredi 17 décembre 2008
mercredi 10 décembre 2008
IHM - GUI - Ruby (interface)
IHM : Interface Homme Machine / GUI : Graphical User Interface
Objectif : rendre l'outil facilement exploitable par le plus grand nombre grâce à une interface graphique.
Différent ToolKit existent Qt, Gtk, Tk, Vruby, Shoes, FxRuby, WxRuby
- Ncurses/Ruby
- Ruby-Gnome
[Ruby/Gtk2, Ruby/QT, Ruby/Fox ou Ruby/wxWidgets ?] [GTK exemple GTK2]
*/ Un petit exemple *Tk/Vruby* lisant les OLE de la machine : [exemple modifié][original]
Il y a deux interfaces à Tcl/Tk inclus dans la distribution standard :
1/ ext/tcltk/- require "tcltk". Syntaxe proche de l'interpréteur de TCL. Description de cette librairie en Japonais uniquement (:s).
2/ ext/tk/- require "tk". Syntaxe proche du modèle d'interface de Tk qui a été fourni pour l'interfaces de Perl et de python.
*/ Qt4 : [Premiers pas en Ruby-Qt4] [Appli en Ruby-Qt4]
*/ Une autre voix intéressante est de réaliser son interface graphiquement avec wxformbuilder qui fournit en standard un code c++, mais qui génère également du code XRC (xml des interfaces) que vous pouvez exploiter avec firefox2 ou Ruby ;) (WxRuby gem?)
[Une petite description des outils ci-dessus sur ibm.com en English]
Cf. passer des arguments comme pour les programmes unix (ex.: --help)
Objectif : rendre l'outil facilement exploitable par le plus grand nombre grâce à une interface graphique.
Différent ToolKit existent Qt, Gtk, Tk, Vruby, Shoes, FxRuby, WxRuby
- Ncurses/Ruby
- Ruby-Gnome
[Ruby/Gtk2, Ruby/QT, Ruby/Fox ou Ruby/wxWidgets ?] [GTK exemple GTK2]
*/ Un petit exemple *Tk/Vruby* lisant les OLE de la machine : [exemple modifié][original]
Il y a deux interfaces à Tcl/Tk inclus dans la distribution standard :
1/ ext/tcltk/- require "tcltk". Syntaxe proche de l'interpréteur de TCL. Description de cette librairie en Japonais uniquement (:s).
2/ ext/tk/- require "tk". Syntaxe proche du modèle d'interface de Tk qui a été fourni pour l'interfaces de Perl et de python.
*/ Qt4 : [Premiers pas en Ruby-Qt4] [Appli en Ruby-Qt4]
*/ Une autre voix intéressante est de réaliser son interface graphiquement avec wxformbuilder qui fournit en standard un code c++, mais qui génère également du code XRC (xml des interfaces) que vous pouvez exploiter avec firefox2 ou Ruby ;) (WxRuby gem?)
[Une petite description des outils ci-dessus sur ibm.com en English]
Cf. passer des arguments comme pour les programmes unix (ex.: --help)
vendredi 21 novembre 2008
Ruby pack & unpack - Problème de jeux de caractères
Il arrive souvent que dans les applications nous rencontrons un problème avec les différents jeux de caractères (ASCII, LATIN-1, UTF-8) ; il faut alors les convertir. [astuce]
Remarque : afin de gérer tous les caractères de toutes les langues, préférez l'encodage UTF-8.
$KCODE = 'U' #UTF-8 : s'assurer que le code de la page est en UTF-8
En Ruby vous pouvez trouver ceci pour résoudre votre problème : [iconv]
# attention destination, source Latin-1 => UTF-8
@c = Iconv.new('utf-8','iso-8859-1')
text = @c.iconv(mon_texte_a_encoder)
Iconv.new('iso-8859-15//IGNORE//TRANSLIT', 'utf-8').iconv(text)
Cette fonction comporte cependant quelques "Bugs" et vous devez gérer les cas particuliers des accents.
Il est donc préférable d'utiliser pack, unpack :
*/ unpack : créé un tableau avec le n° du caractère ascii (code ASCII)
C : 0 à 255
c : -128 à 127
*/ pack : ffff
U : UTF-8
Transformer un "string" iso-8859-1 en UTF-8 : string.unpack('C*').pack('U*')
Ruby Doc [arr.pack] - [str.unpack(format) => anArray]
Remarque : afin de gérer tous les caractères de toutes les langues, préférez l'encodage UTF-8.
$KCODE = 'U' #UTF-8 : s'assurer que le code de la page est en UTF-8
En Ruby vous pouvez trouver ceci pour résoudre votre problème : [iconv]
# attention destination, source Latin-1 => UTF-8
@c = Iconv.new('utf-8','iso-8859-1')
text = @c.iconv(mon_texte_a_encoder)
Iconv.new('iso-8859-15//IGNORE//TRANSLIT', 'utf-8').iconv(text)
Cette fonction comporte cependant quelques "Bugs" et vous devez gérer les cas particuliers des accents.
Il est donc préférable d'utiliser pack, unpack :
*/ unpack : créé un tableau avec le n° du caractère ascii (code ASCII)
C : 0 à 255
c : -128 à 127
*/ pack : ffff
U : UTF-8
Transformer un "string" iso-8859-1 en UTF-8 : string.unpack('C*').pack('U*')
Ruby Doc [arr.pack] - [str.unpack(format) => anArray]
mercredi 19 novembre 2008
RoR trop Flex!!
Flex sous RoR !
"Flex est une solution de développement créée par Macromedia en 2004 puis reprise par Adobe en 2006, permettant de créer et de déployer des applications Internet riches (RIA) multi plates-formes grâce à la technologie Flash et particulièrement son lecteur . Son modèle de programmation fait appel à MXML (basé sur XML) et ActionScript 3.0, reposant sur ECMAScript."[Wikipedia]
jeudi 13 novembre 2008
Tools Box - Boîte à Outils Ruby - Expressions rationnelles
Testez Ruby depuis le web [TryRuby]
Testez vos expression rationnelles depuis le web [Rubular]
Plein d'expression rationnelles (RegExp) déjà toutes faîtes ! [RegexLib]
Expression rationnelles(/régulières) :
Testez vos expression rationnelles depuis le web [Rubular]
Plein d'expression rationnelles (RegExp) déjà toutes faîtes ! [RegexLib]
Expression rationnelles(/régulières) :
- [pdf Java] Slide 9 à 19
- RegexBuddy : aide à la création de regExp (payant mais incluant beaucoup de masque par défaut et multi-langage)
- RegexSR : manipulation de texte
Libellés :
boîte à outils,
Expressions rationnelles,
expressions régulières,
RUBY,
tools
mardi 4 novembre 2008
Conférence - Symposium MicroStrategy 2008
19/11/2008 à Paris - Pavillon d'Armenonville
Symposium Business Intelligence de MicroStrategyTémoignage client - cas pratique - reporting - migration de bases
Démonstration : (ETL) MicroStrategy Integrity Manager
[plus d'info]
jeudi 30 octobre 2008
Conférence Information Builders 2008
Les thèmes abordés :
- Intégrer facilement les données, les applications et les systèmes
- Déployer la Business Intelligence dans l’ensemble de l’entreprise pour un meilleur pilotage de la performance
Entreprise présentes : Business & Decision (B&D), Micropôle Univers (MU) et bien d'autres
[Inscription][Plus d'info]
Assistant à la conférence, c'est éditeur propose des solutions innovantes à la pointe de la technologie en intégrant un maximum de solutions Open Source dans son outil (il propose par exemple des rapports pdf dynamiques grâce à la technologie Flex)
Les données du rapport sont statiques (inclues dans le rapport, ne se connecte pas à une base distante), mais les données peuvent être visualisées de différentes manières/axes (global, détail par pays...) sur le même graphique (drill/down)
- Intégrer facilement les données, les applications et les systèmes
- Déployer la Business Intelligence dans l’ensemble de l’entreprise pour un meilleur pilotage de la performance
Entreprise présentes : Business & Decision (B&D), Micropôle Univers (MU) et bien d'autres
[Inscription][Plus d'info]
Assistant à la conférence, c'est éditeur propose des solutions innovantes à la pointe de la technologie en intégrant un maximum de solutions Open Source dans son outil (il propose par exemple des rapports pdf dynamiques grâce à la technologie Flex)
Les données du rapport sont statiques (inclues dans le rapport, ne se connecte pas à une base distante), mais les données peuvent être visualisées de différentes manières/axes (global, détail par pays...) sur le même graphique (drill/down)
lundi 20 octobre 2008
Conférence RoR 2008 - Cité des Sciences de la Villette
La 3ème édition de la conférence du framework de Ruby (RoR : Ruby on Rails) pour les développement Web se tiendra le 01/12/2008. [inscription]
Bénéficier du tarif 80€ pour une inscription avant le 09/11/2008 (100€ au delà).
A noter qu'en 2007 mon professeur de Java "Christophe Porteneuve" alias TDD très actif sur la technologie faisait parti des experts de la conférence.
Bénéficier du tarif 80€ pour une inscription avant le 09/11/2008 (100€ au delà).
A noter qu'en 2007 mon professeur de Java "Christophe Porteneuve" alias TDD très actif sur la technologie faisait parti des experts de la conférence.
vendredi 17 octobre 2008
Premier BUG Talend :s
jeudi 16 octobre 2008
Datastage BUG - DATE - NUMBER
1/ Merci Stéphane pour informer de la session Talend (RoadShow)
C'est vraiment une révolution par rapport à Datastage…. Aucun intérêt d'acheter la version server...
Ca m'ouvre aussi beaucoup de nouvelles possibilités sur les cas Generali (pragamatisme, pragmatisme!!)
2/ Datastage c'est de la M$*#@# !!!!!!!!! (bon ça à le mérite d'exister et de répondre à des besoins...)
Comme le type date que nous sommes obligés de transformer
DATE => [DS] => DATE [DOESN'T WORK] Solution : TO_CHAR => [DS] => TO_CHAR => DATE
DATE :
- Dans mon SQL :
TO_CHAR(INF_AFFECTATION.AFF_DATD,'YYYY-MM-DD HH24:MI:SS') as AFF_DATD,
- Type de données : Timestamp 38 (allez savoir pourquoi…)
pour faire dans l'insert :
TO_DATE(:XX, 'YYYY-MM-DD HH24:MI:SS')
Et bien j'ai une erreur Datastage pour le type NUMBER !!
Car avec mon calcul d'ETP j'ai un FLOAT avec énormément de précision (autant que le type NUMBER d'Oracle accèpte)
NUMBER est transformé en DECIMAL 38 (allez savoir pourquoi bis…)
J'obtien l'erreur suivante :
jobName-Transformer: OCI has fetched truncated data
Alors je change donc ma longueur de champ pour la mettre à 9 9 « 999999999 »
Et je me tape une erreur Interne de type «Phantom »
DataStage Job 613 Phantom 3992 kghalo bad size 0x3b9aca14 ********** Internal heap ERROR KGHALO2 addr=0x0 ********* ****************************************************** HEAP DUMP heap name="Alloc statemen" desc=0x193f5c8 extent sz=0x1024 alt=32767 het=32767 rec=0 flg=2 opc=3 parent=192262c owner=0 nex=0 xsz=0x1024 EXTENT 0 Chunk 219a1dc sz= 2036 free " " Chunk 219a9d0 sz= 232 freeable assoc with mark prv=0 nxt=0 ... EXTENT 1 Chunk 21921a4 sz= 32784 perm "perm " alo=32784 EXTENT 2 Chunk 218a16c sz= 32784 perm "perm " alo=32784 ...
En essayant à une valeur de 6 9 « 999999 » j'arrive à mon résultat...
Datastage c'est au petit bohneur la chance...
En dehors des BUGS incompréhensibles, des manques de fonctionnalités, de son prix prohibitif, de respect d'aucune norme, c'est un ELT à recommander...
C'est vraiment une révolution par rapport à Datastage…. Aucun intérêt d'acheter la version server...
Ca m'ouvre aussi beaucoup de nouvelles possibilités sur les cas Generali (pragamatisme, pragmatisme!!)
2/ Datastage c'est de la M$*#@# !!!!!!!!! (bon ça à le mérite d'exister et de répondre à des besoins...)
Comme le type date que nous sommes obligés de transformer
DATE => [DS] => DATE [DOESN'T WORK] Solution : TO_CHAR => [DS] => TO_CHAR => DATE
DATE :
- Dans mon SQL :
TO_CHAR(INF_AFFECTATION.AFF_DATD,'YYYY-MM-DD HH24:MI:SS') as AFF_DATD,
- Type de données : Timestamp 38 (allez savoir pourquoi…)
pour faire dans l'insert :
TO_DATE(:XX, 'YYYY-MM-DD HH24:MI:SS')
Et bien j'ai une erreur Datastage pour le type NUMBER !!
Car avec mon calcul d'ETP j'ai un FLOAT avec énormément de précision (autant que le type NUMBER d'Oracle accèpte)
NUMBER est transformé en DECIMAL 38 (allez savoir pourquoi bis…)
J'obtien l'erreur suivante :
jobName-Transformer: OCI has fetched truncated data
Alors je change donc ma longueur de champ pour la mettre à 9 9 « 999999999 »
Et je me tape une erreur Interne de type «
DataStage Job 613 Phantom 3992 kghalo bad size 0x3b9aca14 ********** Internal heap ERROR KGHALO2 addr=0x0 ********* ****************************************************** HEAP DUMP heap name="Alloc statemen" desc=0x193f5c8 extent sz=0x1024 alt=32767 het=32767 rec=0 flg=2 opc=3 parent=192262c owner=0 nex=0 xsz=0x1024 EXTENT 0 Chunk 219a1dc sz= 2036 free " " Chunk 219a9d0 sz= 232 freeable assoc with mark prv=0 nxt=0 ... EXTENT 1 Chunk 21921a4 sz= 32784 perm "perm " alo=32784 EXTENT 2 Chunk 218a16c sz= 32784 perm "perm " alo=32784 ...
En essayant à une valeur de 6 9 « 999999 » j'arrive à mon résultat...
Datastage c'est au petit bohneur la chance...
En dehors des BUGS incompréhensibles, des manques de fonctionnalités, de son prix prohibitif, de respect d'aucune norme, c'est un ELT à recommander...
Sortie de Talend Studio V 3.0 (TOS)
[Blog Responsable Formation Talend France] [Lab Décisionnel pour vous faire la main]
Sortie de la nouvelle version le 15/10/2008. Revenant d'une formation gratuite de Talend (RoadShow) sur Paris j'ai pu tester cette nouvelle version. C'était vraiment plaisant et les organisateurs étaient très disponible (j'arrêtais pas de leur poser des questions) en même temps technique et agréable. Conquis à 100%!!
Sortie de la nouvelle version le 15/10/2008. Revenant d'une formation gratuite de Talend (RoadShow) sur Paris j'ai pu tester cette nouvelle version. C'était vraiment plaisant et les organisateurs étaient très disponible (j'arrêtais pas de leur poser des questions) en même temps technique et agréable. Conquis à 100%!!
Le bug de drag on drop est corrigé! Maintenant à vous de jouer!
Plus de 350 composants - un nouveau connecteur SAS disponible dans Talend Ecosystem.
Lors de cette présentation j'ai découvert et apprécié :
Plus de 350 composants - un nouveau connecteur SAS disponible dans Talend Ecosystem.
Lors de cette présentation j'ai découvert et apprécié :
- La gestion des contextes façon ruby environnement Développement/Recette/Production facilement réalisable
- la propagation des modifications (maintenance) car on stocke des schéma de données (méta-data)
- les variables globales qui en fonction de contextes sont utilisées (accessible partout dans les jobs) que l’on peut aussi récupérer d’un fichier (connexion aux bases)
- les connecteurs pour à peu près toutes les sources de données
- la facilité de création et le drag on drop (en une journée on s’y fait)
- l'utilisation de fonction/routines (dommage Java…) auxquelles ont peut rajouter les notre (routines « user defined »)
- la propagation des modifications (maintenance) car on stocke des schéma de données (méta-data)
- les variables globales qui en fonction de contextes sont utilisées (accessible partout dans les jobs) que l’on peut aussi récupérer d’un fichier (connexion aux bases)
- les connecteurs pour à peu près toutes les sources de données
- la facilité de création et le drag on drop (en une journée on s’y fait)
- l'utilisation de fonction/routines (dommage Java…) auxquelles ont peut rajouter les notre (routines « user defined »)
Téléchargement - Documentation - Forum
lundi 13 octobre 2008
QUID : Qualité et Urbanisation de l'Information Décisionnelle
QUID : QUALITÉ ET URBANISATION DE L'INFORMATION DÉCISIONNELLE
L'idée de QUID est de réaliser des prestations efficaces simples et rapides dans le domaine du décisionnel. Il suit le constat que la prestation décisionnelle se penche globalement sur les mêmes problématiques, qu'on réinvente la roue au sein de chaque client (processus de norme, architecture...), et que finalement beaucoup de travail est réalisable automatiquement grâce à des outils, normes & standard.
Un des problèmes est que les techniciens (en général) ne veulent pas entendre parler de fonctionnel, et les fonctionnels ne pas écrire une ligne de code... et pourtant tant de temps gagner à faire du fonctionnel en tapant quelques lignes de code...
QUID est né donc de l'idée de 3 prestataires de sociétés concurrentes (cf. Contributeurs) assis autour d'une table discutant de RoR (Ruby On Rails) et de la facilité de développer avec ce framework.
Le nom de QUID a été défini le 16/04/2008, "QUID parce qu'il a réponse à tout..."L'idée de QUID est de réaliser des prestations efficaces simples et rapides dans le domaine du décisionnel. Il suit le constat que la prestation décisionnelle se penche globalement sur les mêmes problématiques, qu'on réinvente la roue au sein de chaque client (processus de norme, architecture...), et que finalement beaucoup de travail est réalisable automatiquement grâce à des outils, normes & standard.
Un des problèmes est que les techniciens (en général) ne veulent pas entendre parler de fonctionnel, et les fonctionnels ne pas écrire une ligne de code... et pourtant tant de temps gagner à faire du fonctionnel en tapant quelques lignes de code...
QUID est né donc de l'idée de 3 prestataires de sociétés concurrentes (cf. Contributeurs) assis autour d'une table discutant de RoR (Ruby On Rails) et de la facilité de développer avec ce framework.
QUID est le résultat d'expérience de travail au sein de projets
- RATP : réalisé au forfait nécessitant de produire rapidement dans un délai très court
- ROCHE : projet de qualité de données basé sur les normes et les standards
- GENERALI : problématique commune, effet de synergie (1+1 = 3)
R'QUID car Ruby est le langage de développement de la plate-forme.
QUID permet d'automatiser des tâches répétitives, sans erreurs sur des technologies propres au décisionnel.
Des réalisations sont déjà présentes sur Oracle, Datastage, Business Objects... (cf. Démonstrations).
Le blog est ici pour parler de QUID et du métier de la Business Intelligence (BI) / décisionnel.
- RATP : réalisé au forfait nécessitant de produire rapidement dans un délai très court
- ROCHE : projet de qualité de données basé sur les normes et les standards
- GENERALI : problématique commune, effet de synergie (1+1 = 3)
R'QUID car Ruby est le langage de développement de la plate-forme.
QUID permet d'automatiser des tâches répétitives, sans erreurs sur des technologies propres au décisionnel.
Des réalisations sont déjà présentes sur Oracle, Datastage, Business Objects... (cf. Démonstrations).
Le blog est ici pour parler de QUID et du métier de la Business Intelligence (BI) / décisionnel.
Inscription à :
Articles (Atom)