Une base de données d’IPv6 telles que les IPv4 d’ip-to-country

Vous connaissez peut-être différents services comme i2c permettant d’obtenir le pays d’un visiteur en fonction de son adresse IP, et bien il existe d’autres services, comme ip-to-country qui proposent des base de données à télécharger, qui contienent des groupes (blocs) d’adresses IPv4 associés à leurs pays. Néanmoins, je n’ai pas encore vu une chose pareil pour les IPv6, c’est ce que je suis en train de faire ! :-)

Le système est en place, la récolte des différents blocs et de ses pays est en cours, avec i2c. Si vous effectuez des requêtes pour des adresses IPv6 avec i2c, le bloc auquel il appartient sera automatiquement ajouter à une liste de la sorte. Petit à petit, ça va se remplir et je vais probablement pouvoir le proposer en téléchargement !

Note: Peut-être que d’ici peu de temps je vais créer un petit robot qui va partir à l’exploration de différents blocs, on va voir ! 😉

facebooktwittergoogle_plusredditpinterestlinkedinmail

PostgreSQL: Très grands entiers – Very big integers

Le type de données bigint ne peut avoir des valeurs que entre -9223372036854775808 et 9223372036854775807 (voir la documentation de PostgreSQL sur les nombres). Seulement, parfois, peut-être très rarement mais parfois, les nombres que vous souhaitez ajouter dans la base de données sont plus grands. Pour ça, il faut utiliser le type numeric.

Si votre plus grand nombre a 40 caractères, vous allez créer une table avec un champ de type numeric(40, 0) :

D’après la documentaton, The type numeric can store numbers with up to 1000 digits of precision and perform calculations exactly. C’est-à-dire, pour les non-anglophones que le type numeric peut avoir des nombres de plus de 1000 chiffres de précision et faire des calculs avec parfaitement !

Attention, However, the numeric type is very slow compared to the floating-point types – le type numeric est très lent par rapport au type float, à utiliser avec modération donc !

facebooktwittergoogle_plusredditpinterestlinkedinmail

PostgreSQL: Changer le type d’une colonne

J’ai récement eu besoin de transformer un champ texte – varchar – en entier – integer. Pour cela, j’ai d’abord transformer toutes les valeurs de cette colonne en entiers sous forme de texte, c’est-à-dire des entiers transtypés vers varchar(50)value::varchar(50) – puis, j’ai voulu changer le type de colonne :

Mais, erreur…

ERREUR:  la colonne « colonne » ne peut pas être convertie vers le type pg_catalog.int4

Continue reading PostgreSQL: Changer le type d’une colonne

facebooktwittergoogle_plusredditpinterestlinkedinmail

Forcer Eclipse à utiliser une certaine version de Java

Pour une raison on une autre – personnellement pour exécuter eclipse en 32bits sur un système 64bits – on a plusieurs versions de Java installées sur la même machine et ces différentes versions – pas de le sens numéro – ont une importance puisqu’elles ne s’éxécutent pas de la même manière, c’est-à-dire n’ont pas la même numéro de version ou ne s’éxécutent pas avec la même infrastucture. Bref, si vous souhaitez utiliser une version spéciale de Java dans Eclipse vous pouvez modifier le fichier config.ini à la racine du dossier d’installation d’Eclipse.

Dans ce fichier config.ini, ajoutez ces deux lignes:

Avant la ligne définissant les arguments de la VM (Virtual Machine – Machine Virtuelle), s’il y en a :

Si vous souhaitez utiliser une version spéciale de Java par défaut dans tout le système, c’est possible.

facebooktwittergoogle_plusredditpinterestlinkedinmail

Ubuntu: Ajouter et modifier la version de Java

$ java -version retourne le numéro de version de Java que vous utilisez. Souvent, il y a plusieurs versions de Java installées sur un même système, nous allons voir comment modifier simplement la valeur par défaut et en ajouter avec update-alternatives.

Modifier la valeur par défaut de Java

La version de Java est gérée par update-alternatives qui fourni des alternatives pour un même éxécutable. C’est-à-dire que /usr/bin/java n’est pas un éxécutable mais un lien vers un exécutable. Pour voir la liste des valeurs – et modifier la valeur par défaut – possibles de /usr/bin/java, il faut faire:
Continue reading Ubuntu: Ajouter et modifier la version de Java

facebooktwittergoogle_plusredditpinterestlinkedinmail

Ubuntu: Installer un nouveau kernel

Pour installer un nouveau kernel dans Ubuntu, plus besoin de s’embêter avec la compilation, kernel.ubuntu.com propose les kernels en fichiers .deb compilés avec les options par défaut de toutes les versions d’Ubuntu.

Ainsi, téléchargez tous les fichiers pour votre système (i386 – 32bits – ou amd64 – 64 bits) de la version du kernel que vous voulez dans un dossier à cette adresse:

http://kernel.ubuntu.com/~kernel-ppa/mainline/

Ensuite, dans le console, placez-vous dans le dossier dans lequel vous avez télécharger les fichiers .deb puis exécutez:

Le nouveau noyau est installé et est automatiquement placé par défaut dans grub.

facebooktwittergoogle_plusredditpinterestlinkedinmail

Ubuntu/Debian: Formatage bas niveau

Vous avez peut-être déjà entendu parler du formatage bas niveau. C’est un formatage qui remet le disque dur dans un “état constructeur”, c’est-à-dire où tous les inodes sont à zéro. Sous Windows, on ne peut pas vraiment formatter un disque dur jusqu’a ce point, il faut utiliser des logiciels issus du constucteur du disque dur. Ceux-ci re-créés en général la table de partition.

Sous Debian et ses dérivées, c’est très simple grâce à la commande dd. Ainsi vous pouvez copier tous les inodes d’un périphérique – device – sur un autre. Or, on sait que le périphérique défini par /dev/zero est un périphérique virtuel qui contient que des zéros, donc on va mettre le contenu de celui-ci dans notre disque dur…

Pour récupérer le nom de code (c’est-à-dire le xxx de /dev/xxx) de votre disque dur, faites:

Continue reading Ubuntu/Debian: Formatage bas niveau

facebooktwittergoogle_plusredditpinterestlinkedinmail

Pl/PgSQL: Parcourir un tableau

Pour PostgreSQL >= 9.1

Depuis PostgreSQL 9.1, nous pouvons utiliser l’opérateur FOREACH, comme ceci:

Pour PostgreSQL > 8.3 et <= 9.0

Pour parcourir un tableau de données, ça pourrait être très simple en utilisant FOR ... IN ... mais cette synthaxe utilise uniquement des données de type RECORD pour fonctionner. C’est pourquoi, depuis PostgreSQL 8.4, il y a une fonction unnest qui permet de transformer un tableau (array) en un RECORD. Avant, nous allons créer cette fonction.

Dans votre bloc Pl/PgSQL, faites comme ceci:

Données:

  • v_monarray est un tableau de données (exemple: integer[] )
  • v_array_data est une variable contenant la valeur de la donnée du tableau du tour (exemple: integer)
    Note: Doit être du même type que la donnée du tableau

Pour PostgreSQL <= 8.3

Pour ces versions, nous allons créer la fonction unnset (voir article sur le wiki de PostgreSQL) comme ceci:

Ainsi, vous pouvez appliquer l’exemple pour PostgreSQL 8.4.

Sinon, vous pouvez aussi utiliser WHILE comme ceci:

Avec:

  • v_array_count la taille du tableau
  • v_loop_i une variable de type integer initialisée à 1
facebooktwittergoogle_plusredditpinterestlinkedinmail

Pl/PgSQL: Noms de variables dynamiques

Si dans un trigger vous voulez récupérer un champ qui change à chaque fois (nom dynamique), ou plus généralement si vous voulez récupérer la valeur d’un champ xxxxxx d’un RECORD, il faut utiliser EXECUTE. Soient:

  • NEW, la nouvelle ligne (automatiquement créé avec les triggers sur INSERT et UPDATE)
    Note: C’est une variable de type RECORD. Ainsi, vous pouvez la remplacer par n’importe quel autre RECORD.
  • v_critere, le nom du champ à récupérer
  • v_value, la variable dans laquelle on veut mettre la valeur
  • monschema.matable, le nom de la table qui correspond au RECORD.

Ainsi, si v_critere = id_somethink, alors la valeur du champ “id_somethink” du RECORD sera placée dans la variable v_value. “Tout simplement” :-)

Merci beaucoup à Dimitri et Guillaume de la liste PostgreSQL pour m’avoir aider à trouver cette solution qui n’est pas implantée malgré le patch proposé.

facebooktwittergoogle_plusredditpinterestlinkedinmail

Copies d’écrans et miniatures de sites : Print-Site

Développé par D-Sites, Print-Site est un service qui vous propose de transformer un site en une image de différentes tailles (taille réelle, miniature de 100×100 à 500×500) de manière instantanée et illimitée.

Il repose sur Webkit, le moteur de rendu le plus respectueux des standards (100% à tous les Acid Test !).

Pour plus d’informations, visitez la page dédiée au projet Print-Site.

facebooktwittergoogle_plusredditpinterestlinkedinmail