RUBRIQUES

Billets RSS

Remplacement du contenu innerHTML d'une balise TBody

/**
 * Remplace le contenu HTML de l'élément TBody de l'élément TABLE spécifié.
 * 
 * Nécessaire pour IE, la propriété InnerHTML étant en lecture seule. 
 * 
 * @param HTMLTableElement tableElt
 * @param string newContent
 */
function setTBodyInnerHTML(tableElt, newContent)
{
    var TBodyElt = tableElt.getElementsByTagName('TBODY')[0];

    // Firefox
    try
    {
        TBodyElt.innerHTML = newContent;
    }
    // Internet Explorer
    catch(e)
    {
        while (TBodyElt.children.length != 0)
            TBodyElt.removeChild(TBodyElt.children[0]);
        
        var tempDiv = document.createElement("div");
        document.body.appendChild(tempDiv);
        
        tempDiv.innerHTML = "<table>" + newContent + "</table>"
        
        var rows = tempDiv.getElementsByTagName('TR');
        
        for (var i = 0; i < rows.length; i++) {
            TBodyElt.appendChild(rows[i].cloneNode(true));
        }
        
        document.body.removeChild(tempDiv);
    }
}
| Commentaires (0) | Stumble It!

Javascript : Vérification d'un RIB

/**
 * Retourne TRUE si le Rib est valide, FALSE sinon.
 * 
 * @param string code_banque
 * @param string code_guichet
 * @param string numero_compte
 * @param string cle
 * @return boolean
 */
function isRIB(code_banque, code_guichet, numero_compte, cle) {
    
    numero_compte = numero_compte.toUpperCase();
    
    // Si un des champs est vide pas la peine de faire la vérification
    if (trim(code_banque) == '' || trim(code_guichet) == '' || trim(numero_compte) == '' || trim(cle) == '')
        return false; 
    
    if (numero_compte.length != 11 || code_guichet == '00000' || code_banque == '00000' || numero_compte == '00000000000')
        return false;
    
    var sAlphabet  = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    var aNumero    = '12345678912345678923456789'.split('');
    var sCompteTmp = new String(numero_compte);
    
    // Remplace les lettres par leurs équivalant en chiffre
    while (sCompteTmp.match(/\D/) != null) {
        sCompteTmp = sCompteTmp.replace(/\D/, aNumero[sAlphabet.indexOf(sCompteTmp.match(/\D/))]);
    }
    
    sCompteTmp = code_banque + code_guichet + sCompteTmp + cle;
    
    while (sCompteTmp.length > 9) {
        
        var iCompteTmp = new Number(sCompteTmp.substr(0,9)) % 97;
        sCompteTmp = new String(iCompteTmp) + sCompteTmp.substr(9,sCompteTmp.length);
    }
    
    var iCompteTmp = new Number(sCompteTmp.substr(0,9)) % 97;
    
    return (iCompteTmp % 97 == 0);
}
| Commentaires (0) | Stumble It!

Javascript : Vérification d'un numéro de Siret

/**
 * Vérifie la validité du numéro SIRET passé en paramètre
 *
 * Un n° de SIRET complet est composé de 14 caractères numériques
 * Pour faire le controle, on multiplie chaque chiffre (y compris la clef) :
 * - par 2 s'il est de rang pair à partir de la droite
 * - par 1 s'il est de rang impair à partir de la droite
 *
 * La somme obtenue doit être multiple de 10
 * Attention : si le rang 2 vaut 9, on obtient 18. Il faut alors additionner 1+8 et non pas 18
 * 
 * @return boolean
 */
function isSiret(numeroSiret) {
    
    if (numeroSiret.length != 14 || isNaN(Number(numeroSiret))) {
        return false;
    }
    
    var iSum = 0;
    
    for (var i=13; i>=0; i--) {
        
        var j = new Number(numeroSiret.charAt(i));
        
        if ((numeroSiret.length - i) % 2 == 0) {
            j = j*2;
        }
        
        if (j > 9) {
            
            var sNb = new String(j);
            j = parseInt(sNb.charAt(0)) + parseInt(sNb.charAt(1));
        }
        
        iSum = iSum + j;
    }
    
    return (iSum % 10 == 0);
}
| Commentaires (1) | Stumble It!

Du neuf, du frais, une news...

Bon alors voilà, après moult et moult questions, je viens de renouveler l'hébergement du site pour un an. La fin du site fut toute proche, pour une raison très claire à mes yeux : je n'ai plus de ressources suffisantes pour poster des billets. Non pas que le tour de la question sur le développement web soit terminé, mais je poste essentiellement des articles en fonction de mon activité professionnelle.

Etant donné mon affectation à un nouveau projet basé sur Silverlight de Microsoft, je n'ai plus grand chose à raconter sur le développement « traditionnel » PHP, CSS, JS... Quant à parler de Silverlight, il est encore bien (mais alors vraiment hein...) trop tôt.

En tout cas, les articles et les billets sont encore là pour un an minimum :)
Pour la suite, je verrais bien... Qui sait, d'ici un an, il peut s'en passer des choses...

| Commentaires (4) | Stumble It!

Leçon d'humilité

Pour commencer, une remarque concernant l'antispam décrit dans le billet précédent. Juste pour signaler que je constate dorénavant dans les statistiques une impressionnante chute du nombre de spam à la journée.

Alors qu'auparavant il était courant de trouver plus de 1000 spams à la journée, sur les trois derniers jours, je n'en retrouve en moyenne plus qu'une cinquantaine.

Deux possibilités à cela :
- soit les robots se sont détournés progressivement du site lié à des tentatives infructueuses pour déposer un spam
- soit des réseaux de spams sont tombés

A suivre... Pour vous donner un ordre d'idée, je mets en capture d'écran le tableau de bord créé pour le suivi de la classe antispam sur les 15 derniers jours. Prêtez seulement attention à la colonne "Taille" des fichiers de logs et vous aurez un bon aperçu de la diminution des spams reçus :

th_antispamLog.gif

Tout à fait autre chose. Cette semaine, j'ai eu l'occasion d'assister à une conférence Microsoft sur l'atelier de développement Visual Studio, tenu par l'excellent Pascal Belaud.

Je vais me garder de toute conclusion hâtive. En revanche, j'ai pris un gros coup de massue derrière la tête. J'ai cru être arrivé à un certain niveau de connaissance sur la programmation web. Ben là je viens de tomber affreusement bas. Une leçon d'humilité et une grande remise en question. Et ce n'est pas qu'une question d'outil, il s'agit également de méthodologie. Pour tout vous dire, après cette conférence, j'ai eu l'impression d'appartenir à la préhistoire de la programmation.

Ah si vous aviez vu l'intégration des tests unitaires, la création de l'architecture objet via un designer, la démo sur LINK, la gestion des multithread, la mise à jour des dll, la personnalisation d'un projet via un fichier de config propre, le passage d'un code prévu pour une application win vers le web puis vers un mobile puis vers un pocket pc puis vers un tablet pc, le tout en mode online ou offline, l'intégration intuitive des services web, la complétion de code vraiment intelligente, la maintenance d'objet grâce à la refactorisation... vous comprendriez mon désarroi... Je sais que la présentation était "idyllique", mais quand même, ça en jette.

Tant que je n'aurai pas créé un projet web entier avec Visual Studio, je me garderai de tout avis tranché. La conférence tenue n'était pas vraiment orientée web, et nous n'avons eu qu'un petit aperçu des possibilités offertes sur ce thème là. L'essentiel était centré sur la création d'application.

Mais sur cette courte exposition, une tendance de .Net est indéniable : la volonté de donner les moyens au développeur de se concentrer sur la conception de l'application au niveau métier en supprimant pour eux une large partie des difficultés de programmation sur le web.

Voici pour moi la différence la plus flagrante vis à vis de PHP. Je continue à penser que, client riche mis à part, vous ne ferez rien de plus en .Net qu'en PHP. En revanche, là où PHP n'intervient qu'au niveau serveur, .Net agit côté serveur ET côté client.

Je n'en dis pas plus pour le moment. Je n'oublie pas qu'il s'agissait d'une conférence Microsoft, pour Microsoft, par Microsoft. Une intervention qualifiable de merchandising. Je n'oublie pas non plus que la solution Microsoft a un coût.

Ce que je souhaite dorénavant, c'est une démonstration de l'outil dans un environnement web uniquement. Avoir un retour d'un développeur ayant franchi le cap PHP vers .Net, car chaque langage a ses points forts et ses points faibles.

J'ai créé beaucoup de choses en mélangeant PHP, JS, CSS, XHTML. J'attends encore de voir si l'on peut arriver au même niveau de détail avec un environnement censé géré les trois derniers pans pour vous.

Je vais essayer d'analyser tout ça à froid dans ma petite cervelle, je me pose encore beaucoup de questions et je ne veux pas tomber dans un euphorisme immédiat sans avoir réalisé une étude approfondie.

Tout ça pour dire que j'ai reçu une belle leçon d'humilité ce jour là, celle du genre à voir se faufiler une petite larme sur la joue... Mais ça a du bon les remises en question, il ne faut pas en avoir peur.

In your face comme disent les jeunes (enfin je crois...).

| Commentaires (3) | Stumble It!