mercredi 24 novembre 2010

svn : migration svn cvs

Comment migrer un repo svn :

Il faut utiliser cvs2svn. Néanmoins ce script est en python et nécessite python ... Il faut donc, le télécharger et le copier dans un répertoire ou on possède les droits d'écritures.

puis lancer make install en "root"
sudo make install

Pour cela je posséder un user qui posséder les droits sudo. Ceci m'a permis de rechercher et d'installer les packages manquants via :

sudo yum list available | grep ncompress
sudo yum install ncompress

Note: une façon de se connecter avec n'importe quel user est d'utiliser sudo :

sudo su - toto

Et voila je suis logger en toto ... et plus de problème de droits ... et de création de fichiers et répertoires appartenant à "root"

mardi 23 novembre 2010

Linux : C++ edition des liens / librairie pkg-config

Voici un programme qui va vous changer la vie. Ce dernier permet de faire simplement une edition des liens en C/C++ sous Linux ... éh oui ...

Il s'agit de pkg-config ... qui non seulement vous crée les bonnes options , mais en plus ajoute les options préconnisées par les développeurs de la librairie !!!

exemple pour opencv sous ubuntu:


g++ face.c `pkg-config --libs --cflags opencv` -o face.exe

Pour info : la commande `pkg-config --libs --cflags opencv` retourne `-I/usr/include/opencv`

En fait pour les options de compilation , on utilise "--cflags":
`pkg-config --cflags gtk+-2.0`

En fait pour les options de linkage, on utilise "--libs":
`pkg-config --cflags gtk+-2.0`

Par exemple, il faut mettre chacune des commandes précédentes dans code block (onglet "compiler option" pour les premières, et la seconde dans "linker option".

mercredi 17 novembre 2010

oracle : sqlloader exemple

Voici les données charger via SQLLoader

Le fichier de données (trafic.csv)

1;2387;9287;0087;;;;;;;;01012008;;;;
1;9287;2387;0087;;;;;;;;01012008;;;;
1;3105;0087;3093;;;;;;;;01012008;;;;
1;0087;3105;3093;;;;;;;;01012008;;;;
8;0054;0087;3093;;;;;;;;01012008;;;;
8;0087;0054;3093;;;;;;;;01012008;;;;
0;3195;0087;;;;;;;;;01012008;;;;
0;0087;3195;;;;;;;;;01012008;;;;
0;0087;3192;;;;;;;;;01012008;;;;
0;3192;0087;;;;;;;;;01012008;;;;
10;2155;0087;2181;9687;2180;;;;;;01012008;;;;
10;0087;2155;2180;9687;2181;;;;;;01012008;;;;


Voici un exemple de fichier ctl de contrôle :


LOAD DATA
INFILE 'codetrafic.csv'
REPLACE
INTO TABLE TBOR_CODE_TRAFIC_MAJ
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
(
CODE_TRAFIC CHAR (2) NULLIF (CODE_TRAFIC =BLANKS)
,IF_DEBUT CHAR (4) NULLIF (IF_DEBUT =BLANKS)
,IF_FIN CHAR (4) NULLIF (IF_FIN =BLANKS)
,IF_1 CHAR (4) NULLIF (IF_1 =BLANKS)
,IF_2 CHAR (4) NULLIF (IF_2 =BLANKS)
,IF_3 CHAR (4) NULLIF (IF_3 =BLANKS)
,IF_4 CHAR (4) NULLIF (IF_4 =BLANKS)
,IF_5 CHAR (4) NULLIF (IF_5 =BLANKS)
,IF_6 CHAR (4) NULLIF (IF_6 =BLANKS)
,IF_7 CHAR (4) NULLIF (IF_7 =BLANKS)
,IF_8 CHAR (4) NULLIF (IF_8 =BLANKS)
, D_DEB DATE "DDMMYYYY" NULLIF (D_DEB=BLANKS)
, D_FIN DATE "DDMMYYYY" NULLIF (D_FIN=BLANKS)
, PAYS_DEST INTEGER EXTERNAL NULLIF (PAYS_DEST =BLANKS)
, TAG_MAJ CHAR (200)NULLIF (TAG_MAJ =BLANKS)
)


Un exemple de commande de lancement :
host sqlldr $test/$test log=codeitigeo.log bad=codeitigeo.bad discard=codeitigeo.txt data=codeitigeo.csv control=update_code_iti.ctl errors=0

java : un bon site

Un super site pour le java en general ...

http://www.javapractices.com/home/HomeAction.do

mardi 16 novembre 2010

unix /linux : shell exemple divers


#!/bin/bash

# declaration functions
function erreurChoix()
{
echo "$1 n'est pas une valeur authorisée, veuillez saisir une valeur comprise";
}

function menu()
{
# affichage des choix
echo "chosissez le traitement"
echo "1) recherche et archivage des mp3"
echo "2) comptage des mp3 et avi"
echo "3) sortir"

read choix
# boucle de saisie
while [ "$choix" = "" ]
do
erreurChoix $choix
read choix
done
# case
case $choix in
1)
if [ -f archive.tar ]
then
rm -v archive.tar
exit 2
fi
find . \( -name "*.mp3" -o -name "*.avi" \) -exec tar -uvf archive.tar {} \;
exit 0;;
2)
LISTE=`find . \( -name "*.mp3" -o -name "*.avi" \) -exec ls -al {} \;`
NB=`echo $LISTE | wc -l`
echo "fichiers trouves = $NB"
exit 0;;
3)
echo "sortir"
exit 0;;
*)
erreurChoix $choix;
exit 2;;
esac
}

set -x
# controle du nombre d'argument
if [ $# -neq 0 ]
then
echo "le nombre d'argument est de 0"
exit 2
else
menu
fi

unix / linux : commande eval et sed avec regex


#+---------------------------------------------------------------------------+
#! _GetDate : Récupérer la date d'un jour précédent ou suivant !
#! parametres : nombre de jour (+/-) et le format désiré !
#+---------------------------------------------------------------------------+
_GetDate()
{ # GetDate nDays [format]
# Exemple d'utilisation: export NAMEDIR=$(GetDate -1 '+%Y.%m.%d')

typeset -i nDays=$1
typeset format=$2

eval $(echo $TZ | sed '
s!\([^-0-9]*\)\([-0-9]*\)\(.*\)!typeset -i localOffset=\2;zon1=\1;zon2=\3!')
TZ=$zon1$((localOffset-24*nDays))$zon2 date $format

return 0
}

lundi 15 novembre 2010

unix / linux : commande cut

Voici, un exemple de la commande cut :

pour les delimiter, il faut préciser le champ vise avec f1 ou f2 :


echo "monEar.ear" | cut -f1 -d'.'

ce qui donne :

monEar




echo "monEar.ear" | cut -f2 -d'.'

ce qui donne :

ear

jeudi 11 novembre 2010

java : maven tomcat embedded

Voici un plugin qui embarque un tomcat 6 ... , c'est tout de même surper pratique, et très rapide (toutes les infos ici ...:


Ajouter le plugin dans le pom.xml, puis:


...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<warFile>path/to/my/warFile.war</warFile>
</configuration>
</plugin>
...


lancer les commandes suivantes:

en mode war exploded :
mvn war:inplace tomcat:inplace

en mode classique :
mvn tomcat:run

deployer un context.xml
mvn tomcat:deploy

mercredi 10 novembre 2010

java : performance thread dump

Pour les JVM récentes:

Tester sur jvm 1.6

Il est aussi possible de faire un kill -QUIT pid ou un kill -3 pid, ceci permet fait un dump de la JVM et le redirige vers le STDOUT. Attention, sur un serveur, STDOUT est souvent redirigée vers un fichier de log général (ex: log du domaine, ou server.log pour tomcat).

Note : sous windows la combinaison Ctrl+Break (sur mon calvier Ctrl+Pause) ... affiche le thread dump dans la console.


java -Xloggc:logs/gc-thb1_81pappsn03-statistic.log -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails


pour une jvm jrockit 1.4:

java -Xverboselog:/users/enwoo/loggc_appli.log -Xverbosetimestamp -Xverbose:memory -Xgcpause

lundi 8 novembre 2010

windows : dos script shell

Un rappel sur les scripts DOS :

des call, des boucles for, des if ... de tout quoi ...


@ECHO OFF
SET RETURN_CODE=
SETLOCAL

SET WL_HOME=D:\bea\weblogic81

SET JAVA_VENDOR=Sun
SET JAVA_HOME=D:\bea\jdk142_05

CALL "%WL_HOME%\common\bin\commEnv.cmd"
FOR %%i IN ("%WL_HOME%") DO SET WL_HOME=%%~fsi
FOR %%i IN ("%JAVA_HOME%") DO SET JAVA_HOME=%%~fsi
SET JAVA_VENDOR=

SET DATABASES=pointbase oracle mssql db2 sybase informix
CALL %WL_HOME%\common\bin\configDB.cmd %DATABASES%

SET CLASSPATH=.;3rdparty.jar;config.jar;comdev.jar;wizard.jar;%DATABASE_CLASSPATH%;%WL_HOME%\server\lib\weblogic.jar;%WL_HOME%\server\lib\ant\ant.
IF DEFINED DATABASE_PATH SET PATH=%DATABASE_PATH%;%PATH%

PUSHD %WL_HOME%\common\lib

IF "%1" == "" (
%JAVA_HOME%\bin\javaw %MEM_ARGS% com.bea.plateng.wizard.WizardController
) ELSE (
%JAVA_HOME%\bin\java %MEM_ARGS% com.bea.plateng.wizard.WizardController %*
)

SET RETURN_CODE=%ERRORLEVEL%
POPD

ENDLOCAL & SET RETURN_CODE=%RETURN_CODE%
SET RETURN_CODE
exit /B %RETURN_CODE%

linux : shell script killer les process fils

Voici un petit script permettant de killer un process et ses nombruex enfants, exemple le nodeManager de weblogic :

Pour info, le PID


#/bin/bash
#set -x

PIDS=`ps -edf | grep NodeManager | grep -v grep | grep -v STIME | grep 7667 | cut -c 10-14`

for PID in $PIDS
do
kill -9 $PID
done

dimanche 7 novembre 2010

svn : créer un repository rapidement

Voici, un petit script qui permet de commencer rapidement à travailler avec un repo SVN correctement créer:

c'est à dire avec un trunk, tags, branches


#!/bin/bash
#set -x
# variables
NOM_PROJET=followMe
SOURCE_HOME=/home/enwoo/projets/workspacePerso/quickstart
SVN_REPO=/home/enwoo/repositorySVN
# debut script
svnadmin create $SVN_REPO/$NOM_PROJET
svn mkdir -m 'ajout du trunk' file://$SVN_REPO/$NOM_PROJET/trunk
svn mkdir -m 'ajout des branches' file://$SVN_REPO/$NOM_PROJET/branches
svn mkdir -m 'ajout du tags' file://$SVN_REPO/$NOM_PROJET/tags
svn import -m 'init import' $SOURCE_HOME file://$SVN_REPO/$NOM_PROJET/trunk

# ajouter les droits

mardi 2 novembre 2010

ant : rappels (ant-contrib sshexec ftp)

Ant est un outil très pratique qui permet d'automatiser pas mal de tache, et qui est portable et peut être appelé de maven.

Il permet notamment des connexion ftp et ssh à condition d'ajouter dans le classpath ou dans le $ANT_HOME/lib, les librairies adéquates.

Exemple pour ant 1.8.1 :
- jsch-0.1.42.jar pour ssh
- commons-net-1.4.1.jar et oro-2.0.7.jar pour FTP.


Des extensions sont possible comme la possibilité de faire des boucles for et des if simplement avec ant-contrib

Voici un exemple sur ant-contrib:

Tout d'abord ajouter le jar dans le classpath

<path id="project.class.path">
<pathelement location="${basedir}/cmd/lib/ant-contrib-1.0b3.jar" />
<pathelement location="${basedir}/cmd/lib/ojdbc14.jar" />
</path>
<!-- Déclaration des tâches définies dans la lib ant-contrib.
>
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath refid="project.class.path" />
</taskdef>


Ou avec un chemin en dur comme suit:

<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="D:/apache-ant-1.8.1-bin/apache-ant-1.8.1/lib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>


Puis, il est possible de faire des boucles sur l'ensembles des environnements :

<target name="stopAll">
<echo message="The first five letters of the alphabet are:"/>
<for list="bod2,bod3,bod4,bod5,bod6" param="environnement">
<sequential>
<property file="@{environnement}" id="specific"/>
<echo>Arret de @{environnement}</echo>
<antcall target="stopServeur" />
</sequential>
</for>
</target>



Pour rappel :

Chargement des fichiers de propriétés (un spécifique possitionné par une variable d'environnement et un autre général):


<property file="${config.file}" id="specific"/>
<property file="global.properties" id="global"/>


ant -d -Dconfig.file=maCibleValidation.properties -f build.xml startServeur

Et voici, le fichier de confiruration spécifique (nommé maCibleValidation.properties)


#propriete SSH
serveur.ssh.url=maCible.fr
serveur.ssh.port=22
serveur.ssh.user=monUser
serveur.ssh.password=monPassword

#propriete FTP
serveur.ftp.url=maCible.fr
serveur.ftp.port=21
serveur.ftp.user=monUserSSH
serveur.ftp.password=monPasswordSSH
serveur.ftp.remoteDir=/devel/bo/monUser/exe/earHudson

#propriete lie a la construction du ZIP
project.home=D:/program/Industrialisation/MigJava6
project.home.dist=${project.home}/dist

# port admin weblogic
weblogic.admin.port=11141



et le fichier global:

#propriete SSH
remote.java.home=/produits/dev/bea/jrockit81sp5_142_08
weblogic.home=/produits/dev/wls81sp4
weblogic.username=weblogic
weblogic.password=weblogic
weblogic.server.valo=serverCalcul
weblogic.server.orchestre=serverJSP


Voici, la construction d'une commande d'arret du serveur serverCalcul qui sera lancé en SSH :

Tout d'abord la connexion SSH avec l'option TRUST qui permet de faire conficance quand on pas de clé privée installé :


<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" command="${stopOrchestre}" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />



<property name="stopValo" value="${remote.java.home}/bin/java -cp ${weblogic.home}/server/lib/weblogic.jar weblogic.Admin -url ${serveur.ssh.url}:${weblogic.admin.port} -username ${weblogic.username} -password ${weblogic.password} FORCESHUTDOWN ${weblogic.server.valo}" />


Voici, un exemple complet de taches qui permet de d'automatiser le deplacement d'EAR sur un serveur maCible, par un transfert de zip, puis, permet l'arrêt et la relance des 2 serveurs nommés respectivement serveurCalcul et serveurJSP

Un exemple de lancement en ligne de commande (je le lance via DOS car avec eclipse y'a des soucis bizarre ...)

ant -d -Dconfig.file=maCibleValidation.properties -f build.xml startServeur


<?xml version="1.0" encoding="UTF-8"?>
<!-- ======================================================================
27 oct. 2010 13:53:59
ic CIBLE
permet le deploiement des EAR CIBLEs

lducamp
====================================================================== -->
<project name="ic CIBLE" default="deployEAR">
<description>
permet le deploiement des EAR CIBLEs
</description>

<property file="${config.file}" id="specific"/>
<property file="global.properties" id="global"/>
<property name="startValo" value="${remote.java.home}/bin/java -cp ${weblogic.home}/server/lib/weblogic.jar weblogic.Admin -url ${serveur.ssh.url}:${weblogic.admin.port} -username ${weblogic.username} -password ${weblogic.password} START ${weblogic.server.valo}" />
<property name="startOrchestre" value="${remote.java.home}/bin/java -cp ${weblogic.home}/server/lib/weblogic.jar weblogic.Admin -url ${serveur.ssh.url}:${weblogic.admin.port} -username ${weblogic.username} -password ${weblogic.password} START ${weblogic.server.orchestre}" />

<property name="stopValo" value="${remote.java.home}/bin/java -cp ${weblogic.home}/server/lib/weblogic.jar weblogic.Admin -url ${serveur.ssh.url}:${weblogic.admin.port} -username ${weblogic.username} -password ${weblogic.password} FORCESHUTDOWN ${weblogic.server.valo}" />
<property name="stopOrchestre" value="${remote.java.home}/bin/java -cp ${weblogic.home}/server/lib/weblogic.jar weblogic.Admin -url ${serveur.ssh.url}:${weblogic.admin.port} -username ${weblogic.username} -password ${weblogic.password} FORCESHUTDOWN ${weblogic.server.orchestre}" />

<!-- - - - - - - - - - - - - - - - - -
target: init
- - - - - - - - - - - - - - - - - -->
<target name="init">
<echo>${startValo}</echo>
<echo>${startOrchestre}</echo>
</target>


<!-- =================================
target: deployEAR
================================= -->
<target name="deployEAR" description="permet le deploiement des EAR CIBLEs">
<!-- tar.gz des EARs -->
<echo>tar.gz des EARs ${}</echo>
<antcall target="zipEAR" />
<!-- transfert des ears par FTP -->
<echo>transfert des EARs</echo>
<antcall target="ftp" />
<!-- arret des serveurs Weblogic -->
<echo>arret des serveurs </echo>
<antcall target="stopServeur"/>
<!-- demarrage des serveurs Weblogic -->
<echo>arret des serveurs </echo>
<antcall target="startServeur"/>
</target>

<!-- =================================
target: ftp
================================= -->
<target name="ftp" description="execution distante">

<ftp password="${serveur.ftp.password}" server="${serveur.ftp.url}" userid="${serveur.ftp.user}" port="${serveur.ftp.port}" binary="true" action="put" remotedir="${serveur.ftp.remoteDir}" newer="yes" verbose="true">
<fileset dir="${project.home.dist}">
<include name="*.tar.gz" />
</fileset>
</ftp>
</target>

<!--
<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" commandResource="stop.sh" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />
-->
<target name="stopServeur">
<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" command="${stopOrchestre}" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />
<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" command="${stopValo}" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />
</target>

<target name="startServeur">
<!--
<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" command="" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />
-->
<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" command="${startValo}" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />
<sshexec host="${serveur.ssh.url}" username="${serveur.ssh.user}" password="${serveur.ssh.password}" trust="true" command="${startOrchestre}" port="${serveur.ssh.port}" failonerror="true" verbose="false" output="ssh.log" />
</target>


<!-- - - - - - - - - - - - - - - - - -
target: zipEAR
- - - - - - - - - - - - - - - - - -->
<target name="zipEAR" >
<mkdir dir="${project.home.dist}" />
<copy todir="${project.home.dist}" failonerror="yes">
<fileset dir="${project.home}/generation/generation-ear/target">
<filename name="generation-ear-1.0-SNAPSHOT.ear" />
</fileset>
<fileset dir="${project.home}/orchestre/orchestre-ear/target">
<filename name="orchestre-ear-1.0-SNAPSHOT.ear" />
</fileset>
<fileset dir="${project.home}/orchestre/orchestre-ear/target">
<filename name="orchestre-ear-1.0-SNAPSHOT.ear" />
</fileset>
<fileset dir="${project.home}/orchestre-mq/orchestre-mq-ear/target">
<filename name="orchestre-mq-ear-1.0-SNAPSHOT.ear" />
</fileset>
<fileset dir="${project.home}/referentiel/referentiel-ear/target">
<filename name="referentiel-ear-1.0-SNAPSHOT.ear" />
</fileset>
<fileset dir="${project.home}/tarification/tarification-ear/target">
<filename name="tarification-ear-1.0-SNAPSHOT.ear" />
</fileset>
<fileset dir="${project.home}/valorisation/valorisation-ear/target">
<filename name="valorisation-ear-1.0-SNAPSHOT.ear" />
</fileset>
</copy>

<tar destfile="${project.home.dist}/ear.tar">
<fileset dir="${project.home.dist}" id="id">
<include name="**/*.ear" />
</fileset>
</tar>
<gzip destfile="${project.home.dist}/ear.tar.gz" src="${project.home.dist}/ear.tar" />
</target>

</project>