Appartement Ris Orangis
Domaine de l'Aunette
Entreparticuliers
Paruvendu
Seloger

Notre experience

Fort de 8 ans d'expérience
dans le développement Perl, JevaScript, HTML, anssi que de fortes connaissances en DB Orable, MYSql, PostgreSql.

Notre métier

Nous analisons, développons, et trouvons des solutions pour qu'un maximum de développeurs novices en profite et puissent se faire une place dans le développement informatique.

Une selection de sources

Des sources, Prel, Php, Shell, JavaScript, ...

Une selection d'outils

Des outils, Net, encodage, ...

Soutenir un refuge de chats

Soutenir le refuge R.R.P.C.

Recherche:

SourceDesc
PERL
#!perl;
# Déclaration de la table de hashage
my %hash={};

# Initialisation d'une variable contenant le référence de la table de hashage
my $refhash=\%hash
my $elem="a";
# Attribution d'une valeur de la table de hashage

$hash{$elem}=0;
# =
%hash->{$elem}=0;
# =
$refhash->{$elem}=0;
...

déclarer declarer hash table de hashage
PERL
#!perl;
# Déclaration de la table de hashage
my %hash={};
# Initialisation d'une variable contenant le référence de la table de hashage
my $refhash=\%hash;

# Attribution des valeurs de la table de hashage
%hash->{a}=0;
%hash->{b}=1;

%hash->{c}=2;
# nettoyer les éléments null de la table de hashage
while (($key,$value) = each %hash) {
        if(!defined($value)){delete $hash{$key};}
}
...

nettoyer hash table de hashage
PERL
#!perl;
use constant NOM_DE_LA_CONSTANTE => "valeur de la constante";
# Le nom de la constante doit commancer par une lettre ou par "_" 

# [a-zA-Z_]
...
déclarer declarer constante
PERL
#!perl;
# Déclaration de la table de hashage
my %hash={};

# Initialisation d'une variable contenant le référence de la table de hashage
my $refhash=\%hash;
# Attribution des valeurs de la table de hashage
%hash->{a}=0;

%hash->{b}=1;
%hash->{c}=2;
# dérouler les éléments de la table de hashage

while (($key,$value) = each %hash) {
        print "key:".$key."\tvaleur:".$value."\n";
}

# =
foreach my $key (keys %hash) {
        print "key:".$key."\tvaleur:".$hash{$key}."\n";
}

# =
foreach my $key (keys %{$refhash}) {
        print "key:".$key."\tvaleur:".$refhash->{$key}."\n";
}
...

dérouler derouler hash table de hashage
PERL
#!/usr/bin/perl
my $ttl=shift;
my $nomrep=shift;

while(1){
    opendir(DIR, "$nomrep") || die "can't opendir $!";
    @dots = grep { /^[^\.]/} readdir(DIR);
    closedir DIR;
    $idrand=int(rand($#dots));
    $cmd="/usr/bin/wmsetbg -u -s \"$nomrep/$dots[$idrand]\"";
    `$cmd`;
    sleep $ttl;
}

__END__
Permert de changer le background (gb) de WMAKET toute les n secondes. en gros un diaporama.
PHP

<?php
        if (strstr($HTTP_HOST , 'cite1.com')){

                header("Location: www/cite2/"); /* Redirect browser cite1*/
        }
        else if (strstr($HTTP_HOST , 'cite2.org')){

                header("Location: www/cite2/"); /* Redirect browser cite2*/
        }
        exit;
?>

Effectuer des redirection sur des URL ou URI.
PHP

<?php
$fp = fopen('logs.logs', 'a+');

fwrite($fp, 'DATE='.date("YmdHis").';');

fwrite($fp, 'HTTP_REFERER='.$_SERVER["HTTP_REFERER"].';');

fwrite($fp, 'HTTP_HOST='.$_SERVER["HTTP_HOST"].';');

fwrite($fp, 'REMOTE_ADDR='.$_SERVER["REMOTE_ADDR"].';');

fwrite($fp, 'SERVER_NAME='.$_SERVER["SERVER_NAME"].';');

fwrite($fp, 'SCRIPT_FILENAME='.$_SERVER["SCRIPT_FILENAME"].';');

fwrite($fp, 'HTTP_USER_AGENT='.$_SERVER["HTTP_USER_AGENT"].';');

fwrite($fp, "\n");
fclose($fp);
?>


Comme certaine prestataire ou hebergeur ne permette pas d'accéder librement au fichier de log. Ce script perl permet de se faire son propre fichier de log
JS

        var elemObj=domObj;
        var valObj="";
        valObj=xmlDocSelect[i].childNodes[l].childNodes[0].nodeValue;

        while(elemObj.nodeValue.length == 4096 && elemObj.nextSibling != null{
                elemObj = elemObj.nextSibling;
                valObj += elemObj.nodeValue;
        }
        alert(valObj);


FireFox split en plusieur sousNode les node comptenant plus de 4096 caractere. Ceci permer de tous prendre en compte.
JS

/*
var buf = new StringBuffer();
buf.append("hello");
buf.append("world");
alert(buf.toString());
*/
function StringBuffer(string{ 

   this.buffer = []; 
   this.buffer.push(string); 
} 
StringBuffer.prototype.append = function (string{ 

   this.buffer.push(string); 
   return this; 
}; 
StringBuffer.prototype.toString = function () { 
   return this.buffer.join(""); 

}; 

Concaténer des chaines de caractères avec un gain de temps, non négligeable. Les chaines sont ranger dans un tableau, les valeur du tableau sont concaténées pour retourner le résultat.
BASH

ps -ef -o pcpu -o pmem -o user -o args -o pid | sed 's/^\ /0/' |\

 sed 's/\%/_%/g' |  sort -k 1 -r | head -20  | sed 's/_\%/%/g'

#Création d'un alias
alias top20cpu="ps -ef -o pcpu -o pmem -o user -o args -o pid |\
 sed 's/^\ /0/' | sed 's/\%/_%/g' |\
  sort -k 1 -r | head -20  | sed 's/_\%/%/g'"
Connaitre les 20 process les plus gourmand en CPU.
BASH
ps -ef -o pcpu -o pmem -o user -o args | sed 's/^\ /0/' |\

 sed 's/\%/_%/g' |  sort -k 2 -r | head -20 | sed 's/_\%/%/g'

#Création d'un alias
alias top20mem="ps -ef -o pcpu -o pmem -o user -o args |\
 sed 's/^\ /0/' | sed 's/\%/_%/g' |  sort -k 2 -r |\
 head -20 | sed 's/_\%/%/g'"

Connaitre les 20 process les plus gourmand en mémoire.
BASH

Dans le fichier /var/spool/cron/crontabs/root

#travail éffectué toutes les heures
00 06 * * * (sh /usr/local/bin/updatesys)

Dans le fichier /usr/local/bin/updatesys
#!/bin/sh
export PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin

#Mise à jour des packet débian ou ubuntu
apt-get update > /tmp/$$aptupdate.tmp;
apt-get -y -f dist-upgrade >> /tmp/$$aptupdate.tmp;

apt-get clean >> /tmp/$$aptupdate.tmp;
cat /tmp/$$aptupdate.tmp | mailx -s "Cron  Mise à jour apt-get" \
root@localhost;

rm -rf /tmp/$$aptupdate.tmp;
#Mise à jour de la base de règles de SPAMASSASSIN
if [ -d `/usr/bin/sa-update`];
then

  /usr/bin/sa-update;
fi

Permet de mettre à jour automatiquement un système Debian ou Ubuntu.
BASH

Dans un Fichier /usr/local/bin/bindreload.pl
#!/usr/bin/perl
@listdomaine=('abc.fr', 'toto.fr', 'blabla.com', 'oups.com');

foreach my $elem(@listdomaine){
        system("sh /usr/local/bind/script/bindreload $elem");
}



Dans le fichier /var/spool/cron/crontabs/root

#travail éffectué toutes les jours à 6h00
01 * * * * (/usr/local/bin/bindreload.pl)

Dans un fichier /usr/local/bind/script/bindreload
#!bin/sh
export DATESERIAL=`date "+%Y%m%d%H"`

echo $*
sed 's/[0-9]\{10\}[ \t]\{1,\};serial (version)/'$DATESERIAL' ;
serial (version)/' /usr/local/bind/zone-available/db.$* > \
/tmp/db.$*.prereload
cp /tmp/db.$*.prereload /usr/local/bind/zone-available/db.$*

rm -rf /tmp/db.$*.prereload
/etc/init.d/bind9 reload
echo '[0-9]\{10\}[ \t]\{1,\};serial (version)/'$DATESERIAL' ;
serial (version)' >> /var/log/bindreload.log



Permet de reloader automatiquement bind toutes les heures.
BASH

Dans le fichier copie.sh

#!/bin/bash
#ORACLE_HOME=
#$DBASE_SRC             la source a duppliquer
#$DBASE_DST             la dupplication

#$REP_SCRIPT            le repertoir ou ce trouve les scripts de dipplication
#$REP_DB                repertoir des fichiers DBF
#$PRFIX_FIC_DBF         prefix des fichiers de base de donnees (*.dbf)
DBASE_SRC=$1
DBASE_DST=$2

REP_SCRIPT=$3
REP_DB=$4
PRFIX_FIC_DBF=$5
export DBASE_SRC
export DBASE_DST
export REP_SCRIPT

export REP_DB
export PRFIX_FIC_DBF
if [ ! -d /$REP_DB ] ; then
        echo EX : $0 DBtoto1 DBtoto2 "/tmp/duply" "data" dbs 1>&2

        echo $REP_DB: Le repertoire de base de donnees n existe pas 1>&2
        exit 127
fi
if [ ! -d /$REP_DB/$PRFIX_FIC_DBF$DBASE_SRC ] ; then

        echo EX : $0 DBtoto1 DBtoto2 "/tmp/duply" "data" dbs 1>&2
        echo /$REP_DB/$PRFIX_FIC_DBF*.dbf: Le prefix n existe pas 1>&2

        exit 127
fi
export ORACLE_SID=$DBASE_SRC
echo arret de $DBASE_SRC
svrmgrl <<FIN

connect internal
shutdown immediate
exit
FIN
echo arret de $DBASE_DST
export ORACLE_SID=$DBASE_DST

svrmgrl <<FIN
connect internal
shutdown abort
exit
FIN
if [ -d /$REP_DB/$PRFIX_FIC_DBF$DBASE_DST ]

then
    echo destruction des fichiers de $DBASE_DST
    rm -r /$REP_DB/$PRFIX_FIC_DBF$DBASE_DST
fi
echo copie de /$REP_DB/$PRFIX_FIC_DBF$DBASE_SRC dans /$REP_DB/$PRFIX_FIC_DBF$DBASE_DST

cp -rp  /$REP_DB/$PRFIX_FIC_DBF$DBASE_SRC /$REP_DB/$PRFIX_FIC_DBF$DBASE_DST
if [ -d /$REP_DB/$PRFIX_FIC_DBF$DBASE_DST ]

then
   echo destruction des fichiers de controle de $DBASE_DST
   rm /$REP_DB/$PRFIX_FIC_DBF$DBASE_DST/ctrl*
   echo renommage des fichiers en $DBASE_DST

   cd /$REP_DB/$PRFIX_FIC_DBF$DBASE_DST
   for i in `ls`
   do
      echo $i

      TT=`echo $i|sed -e "s/$DBASE_SRC/$DBASE_DST/"`
      mv $i $TT

   done
   cd $REP_SCRIPT
   echo ****creation de dupli$DBASE_DST.sql
   cat $REP_SCRIPT/duplibase.sql|sed -e "s/TEST/$DBASE_DST/g" -e "s/DBS/$PRFIX_FIC_DBF/g" -e "s/DATA/\/$REP_DB/g" >$REP_SCRIPT/dupli$DBASE_DST.sql

   echo ****creation de init$DBASE_DST.ora
   cat $ORACLE_HOME/dbs/init$DBASE_SRC.ora|sed -e "s/$DBASE_SRC/$DBASE_DST/g" > $ORACLE_HOME/dbs/init$DBASE_DST.ora

   echo ****creation de ouvrelog$DBASE_DST.sql
   cat $REP_SCRIPT/ouvrelog.sql|sed -e "s/TEST/$DBASE_DST/g" -e "s/DBS/$PRFIX_FIC_DBF/g" >$REP_SCRIPT/ouvrelog$DBASE_DST.sql

   echo modification de la base $DBASE_DST
export ORACLE_SID=$DBASE_DST
svrmgrl <<FIN
@$REP_SCRIPT/dupli$DBASE_DST.sql

FIN
svrmgrl <<FIN
@$REP_SCRIPT/ouvrelog$DBASE_DST.sql
FIN
svrmgrl <<FIN
connect internal

startup
exit
FIN
export ORACLE_SID=$DBASE_SRC
svrmgrl <<FIN
connect internal
startup

exit
FIN
fi








Dans le fichier duplibase.sql

REM debut duplication de base orable à chaud
connect internal
spool dupli_TEST.lst
startup nomount pfile=$ORACLE_HOME/DBS/initTEST.ora

create controlfile set database TEST resetlogs
logfile
            'DATA/DBSTEST/log1TEST.dbf' size 1M ,
            'DATA/DBSTEST/log2TEST.dbf' size 1M ,
            'DATA/DBSTEST/log3TEST.dbf' size 1M
datafile
'DATA/DBSTEST/rollsTEST.dbf',
'DATA/DBSTEST/systTEST.dbf',

'DATA/DBSTEST/tempTEST.dbf',
'DATA/DBSTEST/toolsTEST.dbf' ,
'DATA/DBSTEST/concTEST.dbf' ,
'DATA/DBSTEST/rolls2TEST.dbf' ,
'DATA/DBSTEST/indexTEST.dbf'
/
shutdown immediate
spool off
exit
REM fin duplication.sql





dans un fichier ouvrelog.sql

REM debut ouvrelogTEST.sql
connect internal
REM la ligne suivante est a adapter
spool ouvrelogTEST
startup nomount pfile=$ORACLE_HOME/DBS/initTEST.ora
alter database mount;

alter database open resetlogs;
shutdown immediate
exit
REM fin ouvrelogTEST.sql


Permet de duppliquer une base ORACLE sans arrété le service.
JS

function CopyClipBoard(txt){
        if(window.clipboardData)window.clipboardData.setData("Text",txt);

        else if(window.netscape){try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")}catch(e){alert("Access Denied! Please set signed.applets.codebase_principal_support to true at page about:config!")}

        var clip=Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard);
        if(!clip)return;
        var trans=Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
        if(!trans)return;

        trans.addDataFlavor("text/unicode");
        var str={},len={},str=Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString),copytext=txt;
        str.data=copytext;
        trans.setTransferData("text/unicode",str,copytext.length*2);

        var clipid=Components.interfaces.nsIClipboard;
        if(!clip)return false;
        clip.setData(trans,null,clipid.kGlobalClipboard)};
}
function PastClipBoard(){

        var pastetext="";
        if(window.clipboardData)pastetext=window.clipboardData.getData("Text");
        else if(window.netscape){

                try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")}catch(e){alert("Access Denied! Please set signed.applets.codebase_principal_support to true at page about:config!")}
                var clip = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard); 

                if (!clip) return false;
                
                var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable); 
                if (!trans) return false; 

                trans.addDataFlavor("text/unicode"); 
        
                clip.getData(trans,clip.kGlobalClipboard);
                var str = new Object(); var strLength = new Object(); 
                trans.getTransferData("text/unicode",str,strLength); 

        
                if (str) str = str.value.QueryInterface(Components.interfaces.nsISupportsString); 
                if (str) pastetext = str.data.substring(0,strLength.value / 2); 
        }
        return pastetext;
}
Utilisation du Clipboard Copier/Coller en JavaScript.
JS
function checkParentDisplayNone(_obj){
        var valreturn=0;
        try{
                var parentObj=_obj.parentNode;
                if(
                        (parentObj.nodeName.match("DIV")||           

                        parentObj.nodeName.match("TABLE")||
                        parentObj.nodeName.match("TD")||
                        parentObj.nodeName.match("TR"))&&
                        (parentObj.style.display=="none")
                ){
                        valreturn = 1;

                }else if(parentObj.nodeName.match(/^BODY/)){
                        valreturn = 2;                       
                }
                var valRet=checkParentDisplayNone(parentObj,valreturn);
                if((valRet==-1)||(valRet==1)||(valRet==2)){return valRet;}

        }catch(e){return -1;}
}
Permet de chercher si un element
de saisie est visible de par l'un de 
ces parent.
parametre objetDom
retour
  o:erreur objet invalide
  2:pas de parent caché
  1:présance d'un parent caché
Description
permet de savoir si un des parent d'objet est cacher par
style="display:none"
ex:
<div style="display:none">

 <table>
  <tr>
/   <td>
    <input type=text id=idObj>
EX: checkParentDisplayNone(document.getElementById('idObj'));
BASH
DULL=0
BRIGHT=1

FG_BLACK=30
FG_RED=31
FG_GREEN=32
FG_YELLOW=33
FG_BLUE=34
FG_VIOLET=35
FG_CYAN=36
FG_WHITE=37

FG_NULL=00

BG_BLACK=40
BG_RED=41
BG_GREEN=42
BG_YELLOW=43
BG_BLUE=44
BG_VIOLET=45
BG_CYAN=46
BG_WHITE=47

BG_NULL=00

exemple: 


TEST_TEXTE='toto';
TEST_COULEUR_DU_TEXTE=${BG_RED};
TEST_COULEUR_DU_FONT=${FG_YELLOW};

TEST_REINITIALISATION_COULEUR=${FG_NULL}';'${BG_NULL};
echo -e '\e[0;'${TEST_COULEUR_DU_FONT}';'${TEST_COULEUR_DU_TEXTE}'m'${TEST_TEXTE}'\e['${TEST_REINITIALISATION_COULEUR}'m';

Les codes de couleur pour le texte dans le bash
PERL

#c:\perl\bin\perl.exe
use Win32::API;
use Win32::API::Callback;
Win32::API::Struct->typedef(
    POINT => qw{

        LONG x; 
        LONG y; 
    }
);
Win32::API->Import("gdi32", "int GetPixel(int hdc, int x, int y)");
Win32::API->Import("user32", "int GetWindowDC(int hwnd)");
Win32::API->Import('user32', 'BOOL GetCursorPos(LPPOINT lpPoint)');

my $hdc=GetWindowDC(0);
my $i=1;
while($i) {
        my $pt = Win32::API::Struct->new('POINT');

        GetCursorPos($pt);
        print sprintf("%00000x", (GetPixel($hdc, $pt->{x}, $pt->{y})))."\r";
}

__END__
Retourne en temps réel le code couleur que pointe la souris. Ce source inclue l'utilisation de la librairie "Win32::API". Pour ce script il est utilisé comment utiliser l'entité "LPPOINT lpPoint" en perl en utilisant la librairie Win32::API::Struct. Pour une aide complète sur les API Windows http://msdn.microsoft.com/en-us/library/aa383749%28VS.85%29.aspx
PERL
.
.