petit problème booléen...

Discussion dans 'Le café de WebRankInfo' créé par ortolojf, 22 Octobre 2019.

  1. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 935
    J'aime reçus:
    12
    Bonjour

    Pour un système de cookie, je cherche à fixer la formule d'affectation bit-à-bit de la valeur du cookie.

    Cette valeur est suivant les rubriques gérées par le cookie :

    Rubrique 1 : 0 ou 1
    Rubrique 2 : 0 ou 2
    etc...

    Chaque bit correspond à une rubrique, le 0 vaut inactif, le 1 actif.

    Le problème est facile pour function consent(rang) :

    cookieValue = LastcookieValue | (( (rang - 1 ) ** 2 ) + 1);


    Pour deny(rang ) , j'envisage :

    cookieValue = ( ! ( LastcookieValue | ( (rang - 1) ** 2) + 1 ) ) ^ ( ( rang - 1) ** 2) + 1)

    C'est-à-dire :

    Mettons n la valeur initiale du cookie, q la valeur du bit de rang : ( rang - 1 ) :

    (! ( n | ! q ) ) ^ ( ! q )

    Le blème est que : Le bit q est à 0 dans deny(), le bit correspondant dans n doit être mis à 0.

    Cà marche ou non ?

    Merci beaucoup.
     
  2. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 935
    J'aime reçus:
    12
    Pardon pardon

    La négation était mal formulée :

    cookieValue = ! ( LastcookieValue | ! ( (rang - 1) ** 2) ) ) ^ ! ( ( rang - 1) ** 2) )

    J'espère qu'il n'y a plus d'erreur.

    Le bit q est censé être à 0.

    Sa négation à 1.

    N'y a -t-il pas une erreur ?

    ( rang - 1) ** 2 ne serait-il pas le bit rang à 1 ?

    Voir ci-dessous la correction.

    La value du cookie OU bit=1 met à 1 le bit correspondant de la value.

    Le XOR du résultat avec le bit=1 fait la négation de tous les bits de la value sauf le bit=1 qui devient égal à 0.

    La négation du résultat fait l'inverse : valeur initiale du cookie sauf le bit qui devient=0.

    Cà marche, non ?

    Amicalement.

    P. S. Correction :

    cookieValue = ! ( LastcookieValue | ( (rang - 1) ** 2) ) ) ^ ( ( rang - 1) ** 2) )

    Merci de vérifier ?

    Merci beaucoup pour votre aide.
     
    #2 ortolojf, 22 Octobre 2019
    Dernière édition: 22 Octobre 2019
  3. ABCWEB
    ABCWEB WRInaute impliqué
    Inscrit:
    22 Octobre 2015
    Messages:
    816
    J'aime reçus:
    90
    jamais vu ces opérateurs en booléens c'est quoi **? ^?
    Le pipe je suppose que c'est le OU , bien qu'en booléen c'est le +
     
  4. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    1 340
    J'aime reçus:
    171
    ** c'est puissance, là il montre du JavaScript je suppose.

    (ah quoi que je vois qu'il a aussi un ^ )
    (en tout cas, une belle démonstration de comment se prendre la tête pour faire des cookies)
     
  5. passion
    passion WRInaute accro
    Inscrit:
    6 Janvier 2006
    Messages:
    3 741
    J'aime reçus:
    143
    S'il n'y avait que les cookies ;)
     
    colonies et spout aiment ça.
  6. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 935
    J'aime reçus:
    12
    Rebond

    J'ai un léger bug dans le deny()

    Il n'y a pas besoin de calculer l'inverse de cookieValue dans acceptValue.

    Il semblerait que pour le deny() le calcul :

    Code:
    
            // rubrique = 1, 2, 3, 4, etc...
            // Valeur à affecter au Cookie.
            // Formule : !(n |!q)^(!q) 
            // ( Le rubrique-ième bit q est à 0 )
            // q1 = !q ( bit à 1 )
            var q1 = 2 ** (rubrique - 1);      
            var cookieValue = getCookie(cookieConsent);
            if(cookieValue === null) {
            cookieValue = 0;
            }
            cookieValue |= q1;
            var acceptValue = (cookieValue ^ q1);
    
       
    Si le cookie est à 1 au départ, il reste à 1 puis théoriquement 1 ^ 1 donne 0.

    Si le cookie est à 0 au départ il devient 1 puis 1 ^ 1 = 0.

    Mais ce ne sont que des valeurs à un bit.

    Faut que je teste pour des valeurs de cookie > 1.

    Bien amicalement.


    Code:
    
                 consent: function (rubrique) {
            // rubrique = 1, 2, 3, 4, etc...
            // Valeur à affecter au Cookie.
            // Formule : n|q
            // ( Le rubrique-ième bit q est à 1 )
            var q = 2 ** (rubrique - 1);
            var cookieValue = getCookie(cookieConsent);
            if(cookieValue === null) {
            cookieValue = 0;
            }
            cookieValue |= q;
                var cookieDate = new Date;
                cookieDate.setFullYear(cookieDate.getFullYear() + 2);
                var cookieExpString = cookieDate.toGMTString();
                //console.log(cookieExpString);
                document.cookie = 'CM_cookieConsent=' + cookieValue + ';expires=' + cookieExpString + ';domain=.' + location.host.split('.').slice(-2).join(".") + ';path=/';
                var c = '';
                while (c = removedCookies.pop()) {
                    if (c.indexOf('expires=') !== -1) {
                        document.cookie = c;
                    } else {
                        document.cookie = c + ';expires=' + cookieExpString;
                    }
                }
            },
            deny: function (rubrique) {
            // rubrique = 1, 2, 3, 4, etc...
            // Valeur à affecter au Cookie.
            // Formule : !(n |!q)^(!q)
            // ( Le rubrique-ième bit q est à 0 )
            // q1 = !q ( bit à 1 )
            var q1 = 2 ** (rubrique - 1);
            var cookieValue = getCookie(cookieConsent);
            if(cookieValue === null) {
            cookieValue = 0;
            }
            cookieValue |= q1;
            var acceptValue = (cookieValue ^ q1);
                var cookieDate = new Date;
                cookieDate.setFullYear(cookieDate.getFullYear() + 1);
                var cookieExpString = cookieDate.toGMTString();
    //            console.log(cookieExpString);
                document.cookie = 'CM_cookieConsent=' + acceptValue + ';expires=' + cookieExpString + ';domain=.' + location.host.split('.').slice(-2).join(".") + ';path=/';
                var c = '';
                while (c = removedCookies.pop()) {
                    console.log(c + ';expires=' + cookieExpString);
                    if (c.indexOf('expires=') !== -1) {
                        document.cookie = c;
                    } else {
                        document.cookie = c + ';expires=' + cookieExpString;
                    }
                }
            },
    
    
     
  7. passion
    passion WRInaute accro
    Inscrit:
    6 Janvier 2006
    Messages:
    3 741
    J'aime reçus:
    143
  8. ABCWEB
    ABCWEB WRInaute impliqué
    Inscrit:
    22 Octobre 2015
    Messages:
    816
    J'aime reçus:
    90
    On en revient au même je ne comprend pas les opérateurs
     
  9. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 935
    J'aime reçus:
    12
    Pardon pardon.

    Algorithme pour la fonction deny(rubrique):

    1) Inversion bit à bit cookie,
    2) Mise à 1 du ième bit,
    3) inversion du résultat.

    Celà donne le cookie de départ dont le ième bit a été mis à zéro.


    Voici :

    Code:
    
    deny: function (rubrique) {
    // rubrique = 1, 2, 3, 4, etc...
    // Valeur à affecter au Cookie.
    // Formule : !(!n |q)
    // ( Le rubrique-ième bit q est à 1 )
    var q = 2 ** (rubrique - 1);
    var cookieValue = getCookie(cookieConsent);
    if(cookieValue === null) {
    cookieValue = 0;
    }
    // 2 inversion successives.
    cookieValue = ~cookieValue;
    // Mise à 1 du bit.
    cookieValue |= q;
    // 2ème inversion.
    cookieValue = ~cookieValue;
    console.log('CM_cookieConsent = ' + cookieValue);
    
    
    J'ai testé jusqu'à cookieValue=[0-7] et rubrique=[1-3].

    Cà marche.

    Elémentaire.

    Bien à vous.

    Amicalement.
     
  10. ABCWEB
    ABCWEB WRInaute impliqué
    Inscrit:
    22 Octobre 2015
    Messages:
    816
    J'aime reçus:
    90
    C'est moi ou le mec il se tape des délires en solo?
     
  11. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 935
    J'aime reçus:
    12
    Simple

    Au lieu de contenir 0 ou 1 ( cookies interdits/permis ), le cookie va contenir un entier, dont chacun des bits ( 0 ou 1 ), correspondra à la rubrique/type de cookies permis ou interdits.

    La fonction consent(i) permet le cookie de rubrique i, et la fonction deny(i) interdit le cookie de rubrique i.

    Je fait le background avant le foreground ( mécanisme avant l'interface).

    Pour plus d'infos avancez vos questions ?

    Respectueusement.
     
  12. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 921
    J'aime reçus:
    272
    T'as tout juste, on se demande tjs quelle substance :D
    Tu peux répondre, c'est tjs la politique de l'autruche.
     
  13. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 935
    J'aime reçus:
    12
    Messieurs Spout et ABCWEB

    Vous cherchez quelle réaction exactement ?

    Que cherchez vous à dire ?

    Après tout, quand on ne dit rien...

    Amicalement.
     
  14. ABCWEB
    ABCWEB WRInaute impliqué
    Inscrit:
    22 Octobre 2015
    Messages:
    816
    J'aime reçus:
    90
    Je cherche à dire que tu poses des questions, on essaie de t'aider on prend du temps sur ton problème et quand on pose des questions il n'y a pas de réponse. Et quand t'as trouvé ta petite mayonnaise tout seul tu publie que tu es content d'avoir trouvé. En résumé de mon coté je vais arreter de me pencher sur tes problèmes car j'ai juste l'impression que tu es la pour montrer sur quoi tu bosses et que tu n'es pas ouvert à ce qu'on peut en dire.
     
  15. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 935
    J'aime reçus:
    12
    Bonjour ABCWEB

    Je te prie de me pardonner.

    Je croyais que tu trouverais toi-même la réponse à ta question.

    L'opérateur | c'est le OU binaire.

    L'opérateur ! c'est le NON logique. Je m'étais trompé en l'utilisant, c'est le ~ NON unaire qu'il fallait.

    Le & c'est le ET binaire.

    Celà dit c'est vrai que j'aurais peut-être du répondre à ta question, et puis je croyais que le problème était booléen alors qu'il relevait d'un calcul de bits.

    Je te prie de m'excuser de mon impolitesse.

    En ce qui concerne Spout, çà fait depuis longtemps qu'il m'adresse des messages subliminaux.

    Bien amicalement.
     
  16. passion
    passion WRInaute accro
    Inscrit:
    6 Janvier 2006
    Messages:
    3 741
    J'aime reçus:
    143
    Faut bien avouer que tu es souvent hermétique à ce que l'on peut te dire. Tu viens ici faire part de tes travaux, merci d'ailleurs pour ce partage mais tu n'es pas souvent dans le dialogue. C'est presque un monologue. Tu sembles être très pointu en technique mais tu as la tête peut-être un peu trop dans le guidon.
    Un forum c'est avant tout un espace de partages donc de relation "humaine" ;)
     
  17. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 935
    J'aime reçus:
    12
    Pardon

    Sur les messages que j'ai reçu sur ce thread, aucun ne répondait à mes questions, et la plupart étaient des remarques hermétiques.

    Je demanderais à notre arbitre Monsieur Olivier Duffez de trancher.

    Amicalement.
     
  18. ABCWEB
    ABCWEB WRInaute impliqué
    Inscrit:
    22 Octobre 2015
    Messages:
    816
    J'aime reçus:
    90
    Alors je connais très bien les opérateur logique booléen le problème c'est que tu ne les utilise pas. D'ou ma question parce que tu utlises des opérateurs que je connais pas. Après c'était pour t'aider et par conséquent trouver seul la réponse à ma question.. ben non en fait je m'en fout c'est pour toi..
     
  19. passion
    passion WRInaute accro
    Inscrit:
    6 Janvier 2006
    Messages:
    3 741
    J'aime reçus:
    143
    ça me rassure parce que là, j'étais largué ;)
     
  20. phonyclic
    phonyclic WRInaute occasionnel
    Inscrit:
    25 Octobre 2017
    Messages:
    331
    J'aime reçus:
    81
    Code:
    // Le ic dans le / du # binaire endorphique
    // Valeur à affecter par mutation saturnene *| tiré du _ + tiré par le cheu Veu
    // Formule : !?§
    = @ = coockies au pépites de chocolats pour le RGPDG ARC unitaire
    c'est simple non ?
    Aller un peu d'humour, j'ai rien compris o_O ? c'est pas dans Wordpress :p;) et c'est surtout très pointu, trop mais vraiment beaucoup trop pour moi, j'aime découvrir mais là c'est du mandarin mixé avec du chinois pour moi.
    Chapeau pour le niveau en tout les cas.
     
  21. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 935
    J'aime reçus:
    12
    Bonjour Monsieur

    Monsieur Olivier Duffez, que faire ?

    Respectueusement.
     
Chargement...
Similar Threads - problème booléen Forum Date
Problème des clics incorrects AdSense AdSense Vendredi à 13:00
WordPress Problème référencement depuis passage Joomla sur WordPress Problèmes de référencement spécifiques à vos sites Vendredi à 09:13
Problèmes migration NDD Crawl et indexation Google, sitemaps Vendredi à 05:10
WordPress Problème affichage accent sur Wordpress Développement d'un site Web ou d'une appli mobile 17 Février 2020
Problème MP Le café de WebRankInfo 9 Février 2020
WordPress Un problème de marge Développement d'un site Web ou d'une appli mobile 5 Février 2020
Problème avec les lignes <hr> Développement d'un site Web ou d'une appli mobile 21 Janvier 2020
Problème de déclencheur avec une balise GTM Google Analytics 13 Janvier 2020
probleme de redirection 301 certbot Administration d'un site Web 12 Janvier 2020
Problème avec Letsencrypt Administration d'un site Web 11 Janvier 2020
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice