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 837
    J'aime reçus:
    8
    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 837
    J'aime reçus:
    8
    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:
    737
    J'aime reçus:
    75
    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 186
    J'aime reçus:
    141
    ** 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 640
    J'aime reçus:
    114
    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 837
    J'aime reçus:
    8
    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 640
    J'aime reçus:
    114
  8. ABCWEB
    ABCWEB WRInaute impliqué
    Inscrit:
    22 Octobre 2015
    Messages:
    737
    J'aime reçus:
    75
    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 837
    J'aime reçus:
    8
    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:
    737
    J'aime reçus:
    75
    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 837
    J'aime reçus:
    8
    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 809
    J'aime reçus:
    242
    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 837
    J'aime reçus:
    8
    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:
    737
    J'aime reçus:
    75
    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 837
    J'aime reçus:
    8
    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 640
    J'aime reçus:
    114
    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 837
    J'aime reçus:
    8
    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:
    737
    J'aime reçus:
    75
    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 640
    J'aime reçus:
    114
    ça me rassure parce que là, j'étais largué ;)
     
  20. phonyclic
    phonyclic WRInaute discret
    Inscrit:
    25 Octobre 2017
    Messages:
    172
    J'aime reçus:
    41
    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 837
    J'aime reçus:
    8
    Bonjour Monsieur

    Monsieur Olivier Duffez, que faire ?

    Respectueusement.
     
Chargement...
Similar Threads - problème booléen Forum Date
Gestion de cookies problème directives CNIL. Administration d'un site Web Vendredi à 13:09
Search Console URL exclues : comment résoudre le problème ? Problèmes de référencement spécifiques à vos sites Vendredi à 10:58
Search Console Premier référencement et problèmes Débuter en référencement 11 Novembre 2019
Test d'optimisation mobile : Problèmes de chargement de la page Débuter en référencement 10 Novembre 2019
Problème sur une source Referral Googleads.g.doubleclick.net Google Analytics 7 Novembre 2019
Problème suite à redirection 301 URL Rewriting et .htaccess 4 Novembre 2019
Probléme avec un flux rss Demandes d'avis et de conseils sur vos sites 4 Novembre 2019
Probleme Mise en Cache URL Rewriting et .htaccess 31 Octobre 2019
Problème de référencement de mon site Problèmes de référencement spécifiques à vos sites 17 Octobre 2019
Search Console Problème Fil d'Ariane : Vous devez indiquer name ou item.name Crawl et indexation Google, sitemaps 15 Octobre 2019
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice