vendredi 25 février 2011

Les propriétés des mots de passe Oracle

Pour connaitre les propriétés des mots de passe Oracle  (comme par exemple la durée de validité d'un mot de passe, le nombre de tentatives d'identifications autorisées) :

select profile,resource_name ,limit from dba_profiles

Les propriétés des mots de passe sont les suivantes :
FAILED_LOGIN_ATTEMPTS
PASSWORD_LIFE_TIME
PASSWORD_REUSE_TIME
PASSWORD_REUSE_MAX
PASSWORD_VERIFY_FUNCTION
PASSWORD_LOCK_TIME
PASSWORD_GRACE_TIME

Elles sont décrites ici :

Ticket t+ pas vendu au même prix partout

Je pensais que le prix du ticket t+ était unique, hormis l'achat par 10 et le tarif réduit (enfant, etc). A l'heure où j'écris ce tarif est normalement de 1.70 euros.

Eh bien je viens de me rendre compte que le tarif appliqué n'est pas le même en fonction du lieu de l'achat. Ainsi, dans les bars à bord des TGVs (à destination de Paris), le tarif est de 1.90 euros :-(

Pourtant, une délibération du STIF fixe le tarif à 1.70 euros :  http://www.stif.info/IMG/pdf/deliberation_no2010-0293_relative_a_l_evolution_tarifaire_2010.pdf
Car il ne faut pas oublier que c'est le STIF qui fabrique le ticket t+ et que c'est encore lui qui fixe le tarif client...

Si quelqu'un a une explication, je suis preneur :-)

mercredi 23 février 2011

Cours Python

J'ai découvert il y a peu de temps les vidéos (en français) réalisées par un inconnu (aucune idée de son identité).

Elles sont disponibles sur YouTube : http://www.youtube.com/user/Pythonneries 
Elles expliquent les bases de la programmation en Python.

Malheureusement, elles ne sont pas disponibles en podcast. Du coup, il n'est pas possible de les télécharger pour les regarder dans les transports en commun, à moins d'utiliser aTube Catcher. Ce soft permet de récuperer toutes les vidéos (une trentaine à l'heure actuelle) à partir de l'URL de son profil YouTube.

lundi 21 février 2011

Flashback Oracle

Un chef de projet est venu me voir un soir (juste avant de rentrer chez lui) en me disant "tiens, il faudrait que tu lances cet UPDATE sur la base de prod pour mettre à jour les emails de la table CONTACT.

Il resta derrière moi, attendant que je le lance en production (et histoire de me mettre la pression). Et moi, j'ai eu la maladresse de ne pas verifier sa requête et je l'ai lancée en production... 

Ce qui devait arriver arriva : la requête n'était pas bonne du tout, et au lieu de mettre à jour les emails ils furent tous supprimés :o(

"Bon je rentre chez moi" me dit le chef de projet (on sent l'esprit d'équipe).

Deux solutions se presentaient alors à moi : 
- reprendre une base de backup pour recuperer les emails (et pour ca je devais galérer pour contacter l'hébergeur, infogérance oblige...) 
- ou utiliser la fonctionnalité magique d'Oracle, le FLASHBACK !

Grossomodo, cette deuxième solution consiste à afficher la table CONTACT telle qu'elle etait à T-X minutes.

Donc:
- je commence par créer une vue permettant d'accéder à la table telle qu'elle était il y a 1 heure : 
create view hour_ago as (select * from contact as of  TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE));
=>Du coup, lorsque je fais select * from hour_ago where id=246 par exemple, j'affiche les données du contact (ayant pour id 246) telles qu'elles étaient il y a une heure

- je fais l'update de la dernière chance :
update contact set contact.email=(select hour_ago.email from hour_ago where hour_ago.id=contact.id);
=> cet update :
    - a donc pris les emails de la table CONTACT tels qu'ils etaient avant la gaffe (grace à la vue hour_ago, avec son intervalle à "60 minutes")
    - a mis à jour la table CONTACT à partir de ces emails 

C'est maaaaaagique :o)

vendredi 18 février 2011

String immutable en Python

Je viens de découvrir que, comme en Java, les String sont immutables en Python.

Du coup, quand on veut concaténer, il ne faut pas tomber dans le piège de faire bêtement des +=
J'ai trouvé un super article d'Oliver Crow, énumérant les différentes possibilités pour concaténer.

La méthode 5 sort du lot (performante et peu consommatrice en mémoire). Cette méthode utilise la classe StringIO du module cStringIO.

PS : 
à partir de Python 3.0.1, le module cStringIO est remplacé par io : http://docs.python.org/release/3.0.1/whatsnew/3.0.html

vendredi 4 février 2011

Installer automatiquement un jar dans un repository maven local

Si on veut installer un jar, par exemple le jar JavaMelody (super outil de monitoring Java) :

mvn install:install-file -DgroupId=net.bull -DartifactId=javamelody -Dversion=1.25.0 -Dpackaging=jar -Dfile=c:/temp/javamelody-1.25.0.jar

 

Afficher les requêtes en cours d'execution sous Oracle

select sesion.sid,
       sesion.username,
       optimizer_mode,
       hash_value,
       address,
       cpu_time,
       elapsed_time,
       sql_text,       serial#
  from v$sqlarea sqlarea, v$session sesion
 where sesion.sql_hash_value = sqlarea.hash_value
   and sesion.sql_address    = sqlarea.address
   and sesion.username is not null 

Si jamais il y a des requêtes qui font plus de 1000 caractères, elles seront tronqués. Dans ce cas, pour afficher l'integralité :

select sesion.sid,
       sql_text
  from v$sqltext sqltext, v$session sesion
 where sesion.sql_hash_value = sqltext.hash_value
   and sesion.sql_address    = sqltext.address
   and sesion.username is not null
 order by sqltext.piece 
 
Source: http://www.squaredba.com/finding-currently-running-sql-135.html 

mercredi 2 février 2011

Fabriquer sa propre dedibox

Voilà differents liens concernant le matos :

http://www.server8.it

http://www.fit-pc.com

http://kookyoo.net/dossier/Informatique/dossier-tests-nano-ITX-mini-ITX-pico-ITX-VIA-epia-C7-C3-ordinateur-pc-faible-basse-consommation-processeur-intel-atom-00000036

http://www.anteor.com/catalog2/catalog/newsdesk_info.php?newsdesk_id=15&osCsid=786bf58fc01a2db581c45887855c94c2

http://www.itx-france.com

http://www.mini-itx.com/projects/cluster/

Afficher les locks sous Oracle

SELECT 
                o.owner, o.object_name, o.object_type, 
                o.last_ddl_time, o.status, l.session_id, 
                l.oracle_username, l.locked_mode
FROM 
                dba_objects o, gv$locked_object l
WHERE 
                o.object_id = l.object_id;

Jenkins est officiellement lancé

Oracle continue de creuser petit à petit son trou. Après la création de LibreOffice (suite au mécontentement de l'équipe OpenOffice concernant Oracle), c'est au tour d'Hudson de gagner son indépendance : Jenkins est lancé.


La communauté Hudson voulait se détacher d'Oracle (surtout au niveau de son infrastructure java.net). Mais Oracle ne voulant rien savoir, la communauté a voté la création du projet Jenkins (Oracle n'a pas du tout voulu lacher le nom "Hudson").

Oracle passe ainsi du coté obscur de la force (tout le contraire de "don't be evil" de Google):
- le prix des licenses MySQL pour les entreprises augmente (d'ailleurs il y a eu un fork, suite au rachat de Sun par Oracle : MariaDB)
- Oracle ne donne pas l'impression de maintenir OpenOffice (peu d'évolution, pas de roadmap réellement définie) -> création de LibreOffice
- Oracle n'écoute pas la communauté Hudson qui critique entre autre java.net (plateforme d'hebergement des projets "open") -> création de Jenkins hébergé sur Google Code
- Oracle ne veut qu'une seule implémentation "open" (OpenJDK) et bloque l'obtention de la license TCK (l'outil qui sert à valider qu'une implémentation est conforme aux specs) par Apache qui en a besoin pour son implémentation Harmony -> Apache se retire du JCP

Avec tout ca, la première chose qui me passe par la tête c'est le slogan de Nespresso : what else ?


Monitoring with JavaMelody

Je vais vous parler d'un outil de monitoring de webapp : JavaMelody, hebergé sur Google Code.

Il permet de monitorer la conso mémoire, CPU, les connexions HTTP/S, les connexions JDBC, les requêtes SQL, les threads, les classes, le garbage collector etc.
Tout y passe :o)

Les prérequis sont minimes : JRE 1.5, Tomcat 5.5, GlassFish 2, JBoss 4, Jonas 4, Jetty 6, WebLogic 9. Les versions supérieures passent sans problème (hormis l'intégration avec Tomcat7 en cours de validation)

Accessoirement, il est même possible de monitorer du Hudson(Jenkins), JIRA, Confluence, Bamboo(connais pas), Grails.

Concernant le monitoring d'une webapp, il y a très peu de modification à faire du coté du WAR (ou EAR). Dans mon cas, j'ai juste rajouter deux 2 libs, modifier le web.xml, l'applicationContext (si on fait du Spring comme moi), l'hibernate.cfg.xml (si on fait du Hibernate). Ça gère même les EJB 3, Struts 2, Guice, Quartz.

En 15 minutes, vous monitorez toute votre application.

La documentation officielle est très claire (et l'installation est méga simple) :
http://code.google.com/p/javamelody/wiki/UserGuide?tm=6#Setup

Allez voir les captures d'écrans afin de vous rendre compte de la quantité d'informations que l'on peut obtenir simplement avec JavaMelody.

PS : JavaMelody est "production ready" :o)
PS : Il peut se plugger avec Nagios ;o)

mardi 1 février 2011

Sega lance les jeux videos dans les urinoirs

Les jeux se controlent avec le jet d'urine. Faut boire beaucoup d'eau si on veut atteindre le boss de fin de niveau ;o)



Categories