CookieViz téléchargement, installation et utilisation

CookieViz est outil de visualisation qui permet de mesurer l’impact des cookies lors de votre propre navigation.

https://linc.cnil.fr/fr/cookieviz-une-dataviz-en-temps-reel-du-tracking-de-votre-navigation

Introduction – Installer et utiliser CookieViz

La page est git est https://github.com/LINCnil/CookieViz

J’installe MAMP : https://www.mamp.info/en/downloads/

MAMP est une compilation de logiciels gratuits open source permettant de gérer des sites Web dynamiques sur des ordinateurs exécutant macOS ou Windows : Apache, le serveur Web; MySQL, le système de gestion de base de données; et PHP, Perl ou Python, langages de programmation utilisés pour le développement Web.

Installer Homebrew : Homebrew est un système de gestion logiciel gratuit open source qui simplifie l’installation de logiciels sur le système d’exploitation macOS d’Apple et Linux.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Le script demande de passer en mode superutilisateur via la commande sudo et demande de taper le mot de passe à plusieurs reprise.

A la fin de l’installation on obtient ==> Installation successful!

J’installe mitmdump qui est dans le paquet mitmproxy

brew install mitmproxy

Valider l’installation en tappant mitmdump –version

mitmdump --version
 Mitmproxy: 4.0.4
 Python:    3.7.5
 OpenSSL:   OpenSSL 1.1.1d  10 Sep 2019
 Platform:  Darwin-17.7.0-x86_64-i386-64bit

Démarrage de CookieViz

Je démarre MAMP et non MAMP PRO qui est payant

J’obtiens la page d’accueil de mon serveur Web Apache qui est démarré sur le port 8888 par défaut je peut l’atteindre en tapant localhost:8888 comme url dans mon navigateur.

Si je vais dans le menu MAMP > Preferences je peux modifier les ports utilisés.

j’ai téléchargé depuis le source github de cookieViz https://github.com/LINCnil/CookieViz via le lien Clone and download. Il est aussi possible de démarrer un terminal et de se placer à la racine du serveur WEB Apache.

Par défaut la racine est dans /Applications/MAMP/htdocs/ mais vous pouvez la modifier via l’interface graphique MAMP

cd /Applications/MAMP/htdocs/
git clone https://github.com/LINCnil/CookieViz.git

Démarrer CookieViz

Par défaut l’utilisateur par défaut de la base de donnée est “root” et le mot de passe “root”
Pour changer le mot de passe par defaut :
https://documentation.mamp.info/en/MAMP-Mac/How-Tos/Change-the-password-of-the-MySQL-root-user/
/Applications/MAMP/Library/bin/mysqladmin -u root -p password

Ajout d’un utilisateur phpmyadmin > mysql > user ‘ajouter un utilisateur’ onglet Comptes utilisateurs

J’ai ajouté un user ‘cookvi’ avec mot de passe ‘cookvi’

J’ai édité le fichier settings.inc via un editeur de texte ou la commande nano

/**
 * The database server used by CookieViz.
 * Default is 'localhost' and should be fine for most cases.
 * If 'localhost' doesn't work and the database runs locally, try '127.0.0.1'.
 */
define('DB_SERVER', '127.0.0.1:8889');

...

define('DB_USER', 'cookvi');

/**
 * The password of the CookieViz database user.
 */
define('DB_PASSWD', 'cookvi');

J’ai ensuite édité le fichier nano monitor_mitmdump.php du répertoire /soft

cd /Applications/MAMP/htdocs/CookieViz/soft/
nano monitor_mitmdump.php 

je suis allé dans http://localhost:8888/phpmyadmin/ et j’ai créé une nouvelle base CookieViz

J’ai cliqué sur la base de donnée créée et j’ai utilisé la fonction “importer” et j’ai chargé le fichier /Applications/MAMP/htdocs/CookieViz/cookieviz/sql/url_referer-1.sql qui contient la structure de table

// Edit the four values below
$PROXY_HOST = “localhost”; // Proxy server address
$PROXY_PORT = “8082”; // Proxy server port
$PROXY_USER = “”; // Username
$PROXY_PASS = “”; // Password

CookieViz – Modification pour compatibilité php5 et php7

CookieViz est compatible php5 et non phpt7 il faut prévoir des changement dans le code :

Remplacement de :

$link = mysql_connect('localhost', '', '') par $link = mysqli_connect('127.0.0.1:8889', 'cookvi', 'cookvi','CookieViz') 
mysql_select_db('CookieViz') par mysqli_select_db($link,'CookieViz')
mysql_error() par mysqli_connect_error()
mysql_query($query) par mysqli_query($link, $query)
mysql_fetch_assoc($result) par mysqli_fetch_assoc($result) 
mysql_close($link) par mysqli_close($link)  

Démarrer un serveur mitmdump sur le port 8082 :
mitmdump -p 8082 -w mitmdump.log

Je lance maintenant le script php /Applications/MAMP/htdocs/CookieViz/soft/monitor_mitmdump.php

Au niveau de firefox je suis allé dans les préférence réseau dans les paramètre généraux et j’ai configuré le proxy

CookieViz installer et utiliser

On constate qu’on a des connexions qui passent par le proxy
Proxy server listening at http://*:8081
127.0.0.1:49915: clientconnect
127.0.0.1:49915: CONNECT www.youtube.com:443
<< Cannot establish TLS with client (sni: www.youtube.com): TlsException(“SSL handshake error: Error([(‘SSL routines’, ‘ssl3_read_bytes’, ‘sslv3 alert bad certificate’)])”)
127.0.0.1:49917: clientconnect
127.0.0.1:49915: clientdisconnect
127.0.0.1:49917: GET http://detectportal.firefox.com/success.txt
<< 200 OK 8b
127.0.0.1:49919: clientconnect
127.0.0.1:49920: clientconnect
127.0.0.1:49919: GET http://detectportal.firefox.com/success.txt?ipv4
<< 200 OK 8b
127.0.0.1:49920: GET http://detectportal.firefox.com/success.txt?ipv6
<< 200 OK 8b

Les résultats sont alors visualisables sur le serveur web http://localhost:8888/CookieViz/cookieviz/

Liens externes :

https://fr.wikipedia.org/wiki/Cookie_(informatique)

https://fr.wikipedia.org/wiki/Serveur_web

https://www.noodo-wifi.com/faq/cookie-informatique/

Liens internes :

https://128mots.com/index.php/category/sciences-numeriques-et-technologie/

https://128mots.com/index.php/category/nsi/

https://128mots.com/index.php/category/non-classe/

Tri par tas Python – implémentation de l’algorithme en Python

L’algorithme du tri par tas est un algorithme de tri par comparaison. Cet article vous done le code du tri par tas python.

L'algorithme du tri par tas python est un algorithme de tri par comparaison. Cet article vous done le code du tri par tas python.

Le principe de l’algorithme du tri par tas python est le suivant :

  1. Alors on recherche le père du dernier nœud de l’arbre et on le tamise : le père d’un noeud dans un arbre binaire corresponds à l’arrondi inférieur de (i-1)/2 avec i la position du noeud dans le tableau qui stocke l’arbre.
  2. Le tamisage d’un noeud consiste à visiter son fils droit et son fils gauche et permuter la racine avec le plus grand des deux.
  3. Et il faut tamiser l’arbre jusqu’à arriver à la racine, le plus grand nombre de l’arbre se retrouve alors en position de racine au début du tableau.
  4. On permute la racine qui est le plus grand nombre avec la dernière feuille (soit la position n du tableau qui stocke l’arbre de taille n). On considère alors que ce nombre est bien ordonné (càd il est en dernière position et c’est le plus grand)
  5. Enfin, l’opération de tamisage et permutation est réitérée en considérant le sous arbre qui va de la racine à n-1 (pour ne pas déplacer le nombre qui a été correctement ordonné) jusqu’à ce qu’on arrive au fils gauche de la racine (l’indice 1)

Voir le lien wikipedia : https://fr.wikipedia.org/wiki/Tri_par_tas

from math import *
#128mots.com
def indice_fils_gauche(noeud_pere:int):
	return (noeud_pere * 2)+ 1

def indice_fils_droit(noeud_pere:int):
	return (noeud_pere * 2) + 2
#Retourne l'indice du noeud pere si il existe (noeud doit être > 0)
def indice_noeud_pere(noeud):
	#Si il existe il s'agit de l'arrondi inférieur de (noeud-1)/2
	return floor((noeud - 1)/2)

#permute 2 éléments d'un tableau et incrément la variable globale compteur_permutation à initialiser dans le main
def permute(tableau, indice1: int, indice2:int):
	print("Permutation de l'élément " + str(indice1) + " avec l'element " + str(indice2))
	print("**Avant permutation : " + str(tableau))
	global compteur_permutation
	if(indice1 != indice2):
	#on sauvegarde la valeur de l'indice 1 dans une variable temporaire
		tmp = tableau[indice1]
		tableau[indice1] = tableau[indice2]
		tableau[indice2] = tmp
		compteur_permutation += 1
	print("**Apres permutation : " + str(tableau))

#Tamise un arbre binaire à partir d'un noeud en parametre
#1. on compare le noeud avec le fils droit et le fils gauche (si ils existent)
#2. on permute avec la plus grande valeur
#128mots.com
def tamise(arbre,noeud,longueur):
	#On visite le fils droit et le fils gauche
	print("++Tamisage de " + str(noeud) + " arbre: " + str(arbre))	
	indiceFilsDroit   = indice_fils_droit(noeud)
	indiceFilsGauche  = indice_fils_gauche(noeud)
	print("indiceFilsDroit>>" + str(indiceFilsDroit))
	print("indiceFilsGauche>>" + str(indiceFilsGauche))


	if(indiceFilsDroit < longueur): # si le fils droit existe
		if(arbre[indiceFilsDroit] > arbre[indiceFilsGauche]): #Si le fils droit est plus grand que le fils gauche
			if(arbre[indiceFilsDroit] > arbre[noeud]): #Si le fils droit est plus grand que le noeud tamisé
				permute(arbre,indiceFilsDroit,noeud)
		elif(arbre[indiceFilsGauche] > arbre[noeud]): #Si le fils gauche est supérieur au noeud tamisé alors on permute
			permute(arbre,indiceFilsGauche,noeud)
	elif(indiceFilsGauche < longueur): #Si le fils gauche existe
		if(arbre[indiceFilsGauche] > arbre[noeud]): #Si le fils gauche est supérieur au noeud tamisé alors on permute
			permute(arbre,indiceFilsGauche,noeud)
	print("++Apres tamisage : " + str(arbre))			
#128mots.com

compteur_permutation = 0
arbre = [11, 222, 3, 24, 5, 46, 67, 899] #On écrit un arbre sous forme de tableau
print("démarrage arbre : " + str(arbre))

#128mots.com
#Tamisage initial
#on prend le dernier élément de l'arbe qui est une feuille et on recherche son père
indiceDuNoeudPere = indice_noeud_pere(len(arbre)-1) 
#on tamise càd on compare le noeud pere avec le fils droit et le fils gauche
#puis on permute avec la plus grande valeur
for i in range(indiceDuNoeudPere,-1,-1): #On tamise jusqu'à la racine
	tamise(arbre,i,len(arbre))

permute(arbre,len(arbre)-1,0) #on permute le premier element et le dernier 
#suite au tamisage c'est la plus grande valeur on la place donc à la fin du tableau

#on répete le tamisage
for i in range(len(arbre)-1,1,-1): 
	indiceDuNoeudPereDeI = indice_noeud_pere(i-1) #on prend l'élément i de l'arbe qui est une feuille et on recherche son père
	for j in range(indiceDuNoeudPereDeI,-1,-1): #On tamise jusqu'à la racine
		tamise(arbre,j,i)
	permute(arbre,i-1,0)

print("resultat final du tri : " + str(arbre))
print("nombre de permutation : " + str(compteur_permutation))

Conclusion

En conclusion, L’algorithme est utilisé pour trier sur place les éléments d’un tableau en un temps de l’ordre de n log ⁡ n.

Et l’étape qui coûte le plus dans cet algorithme est la seconde boucle (extraction des éléments du tas).

Enfin, et algorithme a l’avantage de consommer peu de mémoire par rapport à d’autres algorithme de tri.

Tri pas tas python : liens externes

https://fr.wikipedia.org/wiki/Tri_par_tas

https://fr.wikipedia.org/wiki/Smoothsort

https://wiki.inria.fr/sciencinfolycee/Le_tri_par_tas

http://perso.numericable.fr/jules.svartz/prepa/IPT_spe/TP_tris_efficaces_tas.pdf

https://www.prepabellevue.org/index.php?module=Site&voir=document&id_document=589

Liens internes sur les algorithmes

https://128mots.com/index.php/2021/01/13/algorithme-tri-quantique/

https://128mots.com/index.php/category/python/

https://128mots.com/index.php/category/graphes/