Archive

Archive for the ‘Projets professionnels’ Category

equivalent de la fonction explode PHP en PL/SQL

septembre 17th, 2009

Je travaille actuellement sur un projet utilisant une base de données Oracle 10g. Dans ce projet, tous les traitements sur les données sont effectués par le serveur de base de données (en PL/SQL)  pour alléger le serveur applicatif qui ne s’occupe que de la couche de présentation.

Dans un des traitements PL/SQL j’ai eu besoin de transformer une chaine de caractères en un tableau de données. En PHP j’aurais utilisé la fonction explode. Malheureusement, cette fonction n’existe pas en PL/SQL.

J’ai effectué des recherches sur internet et j’ai trouvé quelques traitements PL/SQL qui semblaient implémenter l’équivalent de la fonction explode.  Mais ces implémentations étaient très complexes pour ne pas dire incompréhensible.

J’ai donc décidé de réaliser moi même une fonction explode en PL/SQL. Pour cela, j’ai utilisé :

  • les possibilité de récursivité d’oracle (instruction loop)
  • la fonction instr qui permet de détecter la première position d’un ensemble de caractères dans une chaine
  • la fonction substr qui permet de séparer une chaine en plusieurs
  • les collections oracle

trêve de bavardage, voici le code de cette fonction :

FUNCTION explode(delimiter VARCHAR2, str VARCHAR2) RETURN ARR_STRING IS
extract_chaine varchar2(2000) := ”;
position number(3) := 0;
TYPE ARR_STRING is table of varchar2(64) index by binary_integer;
cur_idx number(3) := 1;
current_str varchar2(20000) := str;
BEGIN
Loop
— on determine la position du premier champ sepatateur
select instr(current_str, delimiter) into position from dual;
IF position > 0 THEN
– on isole le bout de chaine jusqu’au separateur
select substr(current_str, 1, position - 1) into extract_chaine from dual;
— on stocke dans le tableau resultat le bout de chaine
arr_res(cur_idx):=extract_chaine;
cur_idx:=cur_idx+1;
— on supprime la partie de chaine traitée
select substr(current_str, position + length(delimiter)) into current_str from dual;
END IF;
exit when position = 0;
end loop;
– on stocke dans le tableau resultat la dserniere occurence non traite dans la boucle
arr_res(cur_idx):=current_str;
RETURN arr_res;
END explode;

Voici un exemple d’appel de la fonction :

DECLARE
TYPE ARR_STRING is table of varchar2(64) index by binary_integer;
ret ARR_STRING;
BEGIN
ret := explode(’@;’, ‘val1@;val2@;val3@;val4@;val5@;val6@;val7@;val8@;val9′);
for i in 1..ret.count loop
dbms_output.put_line(ret(i));
end loop;
end;

Si on regarde en détail le code de la fonction:

  • le paramètre str contient la chaine à traiter,
  • la paramètre delimiter contient le caractère qui permet d’exploser la chaine en un tableau
  • la variable arr_res définit une collection qui contiendra les différentes parties de la chaines traité

Il existe très certainement d’autres algorithmes permettant d’effectuer l’équivalent de la fonction explode, mais celui-ci à le mérite de fonctionner correctement et d’être relativement simple à comprendre.

N’hésitez pas à tester ce code et à me laisser vos remarques ou vos optimisations.

VN:F [1.0.8_357]
Rating: 5.0/5 (3 votes cast)

Projets professionnels, developpement ,

Comparaison framework javascript

décembre 3rd, 2008

Le web 2.0 étant la nouvelle tendance actuelle il existe une multitude de framework javascript nous faciltant la tache dans nos développements (ajax, manipulation du DOM, widgets, modalbox…).

En faisant un état des lieux des projets web dont j’ai la charge, je me suis rendu compte que nous utilisons pas moins de trois frameworks différents par projet. En effet, chaque développeur a ses habitudes, ses bibliothèques et utilise par conséquent le framework qu’il connait le mieux pour gagner du temps.

Résultat, les sites embarquent un nombre de javascript important : les différents frameworks ainsi que nos codes les utilisant.

Tous les frameworks font globalement la même chose, nous avons donc décidé d’uniformiser nos projets afin d’utiliser un framework unique.

Il s’est alors posé la question du choix du framework : prototype, jquery, yui, mootols… avec deux préocupations majeures : les performances et les fonctionnalités natives du framework.

En cherchant de la documentation sur le net, je suis tombé sur la page suivante :

http://mootools.net/slickspeed/

slickspeed-large.jpg

Cette page permet de tester sur son propre navigateur les performances ainsi que les différentes fonctionnalités des framework javascript les plus connus. Pour cela il vous suffit de cliquer sur le bouton “start test” et d’attendre la fin de l’exécution des tests.

Résultats des tests sur ma machine (windows XP, 2Go de RAM)

Avec Firefox 3.0.4

  1. Dojo 1.1.1
  2. JQuery 1.2.6
  3. Mootools 1.2
  4. Yui (Yahoo User Interface) 2.5.2
  5. prototype 1.6.0.2

Avec Internet Explorer 6.0.2

  1. Dojo 1.1.1
  2. JQuery 1.2.6
  3. Yui (Yahoo User Interface) 2.5.2
  4. prototype 1.6.0.2
  5. Mootools 1.2

Conclusions

Les deux grands gagnants sont et de loin Dojo et JQuery.

Nous concernant, nous avons choisi JQuery framework plus connu que Dojo avec une communauté de développeurs importante et ayant une syntaxe proche de prototype qui était très utilisé chez nous.

VN:F [1.0.8_357]
Rating: 4.4/5 (11 votes cast)

Projets professionnels, developpement , , , , , ,

Extension ezPublish AjaxClassEdit

décembre 2nd, 2008

Voici la dernière extension ezPublish que j’ai développé.

Cette extension modifie l’interface d’édition et de création des classes de contenu ezPublish en évitant de poster et recharger la page à chaque modification.

Tous les traitements se font en AJAX ce qui rend la gestion des classes plus facile et surtout plus rapidement (notamment lorsqu’il faut déplacer des attributs).

L’extension utilise la framework javascript JQuery dans sa version 1.2.6 et fonctionne à partir de la version 4.0 d’Ez Publish.

vous pouvez télécharger l’extension à l’adresse suivante : http://ez.no/developer/contribs/applications/ajax_class_edit

Installation de l’extension

Pour l’installation il suffit de suivre les étapes suivantes :

  1. décompresser l’archive zip dans le répertoire extension de votre installation ezPublish
  2. activer l’extension dans le backoffice (onglet administration)
  3. regénérer les autoloads

N’hésitez pas à laisser vos commentaires si vous rencontrez un problème un bug ou si vous désirez des améliorations

VN:F [1.0.8_357]
Rating: 3.0/5 (2 votes cast)

Projets professionnels, developpement, ezPublish , ,

Europe1.fr mon dernier projet

juin 6th, 2008

C’est avec un peu de retard (3 semaines) mais beaucoup de fierté que je vous présente la sortie du dernier projet sur lequel j’étais chef de projet : la nouvelle version du site Europe1.fr.

Après un peu plus de 4 mois de développement (dont 1 gros moi seul), pas mal de nocturnes pour régler les divers soucis le site a enfin pu voir le jour. A noter que nous n’avons quasiment pas eu de retard par rapport à la sortie espérée (soit 1 seule journée).

Au niveau technique, le site a été développé à l’aide d’eZpublish un CMS/framework PHP et notamment sa dernière extension eZFlow. Le site utilise aussi abondamment l’AJAX avec le framework de yahoo yui.

Nous travaillons actuellement sur son petit frère Europe1 sport en rapport avec la nouvelle station du groupe Europe1.

VN:F [1.0.8_357]
Rating: 4.0/5 (4 votes cast)

Projets professionnels, developpement, ezPublish , ,