Gilliek
21oct/111

Modulo : la suite

Pour donner suite à mon post précédent : Une histoire de modulo ...

je me suis amusé à tester -5 % 26 dans 17 langages de programmations afin faire une liste des langages qui utilise la première définition et une liste de ceux qui utilisent la seconde.

Pour rappel, voici les deux définitions :

  1. x mod y = x - y * floor(x / y)
  2. x % y = x - y * iPart(x / y)

La définition 1 est cyclique. Ainsi -5 % 26 = 21. La définition 2 donne -5 % 26 = -5

Trève de bavardages, voici donc les deux listes :

Définition 1 Définition 2
Ruby C
Python C++
Lua Java
Octave PHP
MATLAB OCAML
Perl Pascal
Racket (anc. Scheme) Ada
Prolog Javascript
Go
C#
20oct/116

Une histoire de modulo …

Tout développeur connait le fameux (le seul, l'unique) : modulo

Comme je suis d'humeur narrative aujourd'hui,  je vais quand même expliquer de quoi il s'agit :-)

Cours du jour, bonjour

Bon, ouvrez bien vos oreilles yeux, on commence.

Tout le monde se souvient de sa tendre enfance, à l'école, en train d'assister à son premier cours de maths sur les divisions. Plutôt que de s'amuser à calculer le résultat réel (au sens mathématique du terme), on ne s'intéressait qu'à la partie entière et au reste.

Petits exemples :

12 / 5 = 2 et Reste = 2

6 / 2 = 3 et Reste = 0

9 / 2 = 4 et Reste = 1

9 / 3 = 3 et Reste = 0

En somme (notez le jeu de mot :-P ), une division entière.

Et bien le modulo calcule le reste. C'est un nom bien barbare, qui au final, n'est rien de plus qu'un calcul enfantin

Donc si on reprend l'exemple ci-dessus, mais en version informatique cette fois, on a :

(dans beaucoup de langage, l'opérateur du modulo est le %)

12 % 5 = 2

6 % 2 = 0

9 % 2 = 1

9 % 3 = 0

Modulo = reste de la division entière.

On utilise vraiment ça ? A quoi ça peut bien servir une telle chose ??

Et bien, c'est très souvent utilisé lorsqu'on programme. On l'utilise, entre autres nombreuses choses, pour déterminer si un nombre est

pair. Il suffit de faire nombre % 2 Si le résultat est null, donc qu'il n'y a pas de reste, alors le nombre est pair. Sinon il est impair.

Maintenant que tout le monde c'est ce qu'est le modulo, on va pouvoir poursuivre sur le sujet de ce post.

Revenons aux choses serieuses

Faisons un petit exercice. Quel est le résultat de :

-5 % 26 = ?

(bien que nous ne soyons pas directement dans post concernant le domaine de la cryptographie, je vais utiliser les deux fameux protagonistes Bob et Alice, parce que je suis tombé sur cette étrangeté pendant un Travail Pratique de cryptographie)

  • Bob : Pff facile, c'est 21 !
  • Alice : Mais, non pas du tout c'est -5 !
  • Bob : Tu n'as rien compris, un modulo c'est cyclique, ça ne peut pas être être négatif !
  • Alice : Rien du tout. Tu es HS  coco !

Mais qui a raison ? Et bien, ils ont tous les deux raisons. Avant d'en venir aux explications, regardons ce qu'en disent les langages de programmation.

Ruby :

$> ruby -e "puts -5 % 26"
21
$>

Python

$> python -c "print(-5 % 26)"
21
$>

Octave (et MATLAB)

$>octave --eval "mod(-5, 26)"
GNU Octave, version 3.4.2
Copyright (C) 2011 John W. Eaton and others.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  For details, type `warranty'.

Octave was configured for "x86_64-unknown-linux-gnu".

Additional information about Octave is available at http://www.octave.org.

Please contribute if you find this software useful.
For more information, visit http://www.octave.org/help-wanted.html

Read http://www.octave.org/bugs.html to learn how to submit bug reports.

For information about changes from previous versions, type `news'.

ans =  21
$>

(On peut voir Bob trépigner :-P )

Java

class Main {
    public static void main(String[] argv) {
        System.out.println("-5 % 26 = " + (-5 % 26));
    }
}
$> javac Main.java
$> java Main
-5 % 26 = -5
$>

PHP

$> php -r 'print((-5 % 26) . "n");'
-5
$>

Agné ?! (le sourire de Bob se fane ... Alice est intriguée, comme on peut s'en douter)

Java et PHP ne sont pas les seuls. C, C++ (et d'autres) retournent -5.

Mais pourquoi ?

Et bien, en réalité, il y a deux définitions du modulo !

Regardons un peu ce qu'en dit notre vieil ami Wikipedia : http://fr.wikipedia.org/wiki/Modulo_(informatique)

Dans l'article, on a les deux définitions :

  1. x mod yxy * floor(xy)
  2. xyxy * iPart(xy)

La première définition donne un modulo cyclique, càd compris entre 0 et le diviseur. Je ne connaissais que la première définission et c'est à cause de ça que je me suis énnervé sur mon Travail Pratique de cryptographie (en Java). Pour résumer, je voulais faire un décalage sur chaque caractère d'une String. Bien entendu, je veux que quand on décale, par exemple, a de -4, on ait w. J'ai donc utilisé un modulo. Et comme j'utilisais le résultat comme indice d'un tableau, j'avais un joli OutOfBoundsExceptions à cause d'un indice négatif. Après quelques tests, j'ai enfin trouvé d'où venait le problème.

C'est donc bon à savoir pour tout développeur :-)

Moralité de l'histoire : Vérifier l'évaluation du modulo du langage utilisé afin de ne pas se faire avoir bêtement (comme moi quoi :-P )

Edit : j'ai mis une liste des langages trié en fonctione de la définition utilisée là : http://blog.gilliek.ch/programmation/modulo-la-suite

20oct/111

Faut pas etre presse …

Là je suis vraiment surpris (en mal) par Opera ... http://www.developpez.com/actu/38102/Faille-de-securite-critique-dans-le-navigateur-Opera-pouvant-etre-exploitee-pour-injecter-du-code-malveillant-Opera-informe-depuis-un-an/

C'est généralement le genre de situation où on s'attend plutôt à voir Microsoft impliqué ...

30sept/115

Quand on est geek …

Après être rentré chez moi, puis confortablement installé dans mon lit avec mon ordi je remarque avec horreur que j'ai oublié d'allumer le WiFi ! Comme je suis crevé (et un peu flemmard) j'ai allumé le WiFi de manière ... disons -le ... très geek 8-) Tout d'abord, j'ai transformé mon téléphone (Samsung Galaxy SII sur Android) en point d'accès WiFi (en utilisant la connexion en Edge que je captais). Je m'y connecte avec mon laptop. Ensuite, je me connecte en SSH sur mon serveur à la maison avec l'option -L (pour Local) pour rediriger le trafic du port local 80 du serveur sur mon port distant (de mon laptop). Finalement, j'ai pu accéder à la console d'administration de ma box depuis laquelle j'ai pu réactiver mon WiFi ... Ahhh qu'est-ce qu'on ne ferait pas pour éviter quelques marches à monter et à decendre :-P

Pour ceux que ça intéresse, voici la commande que j'ai utilisée (depuis Linux donc^^) :

sudo ssh -p port_ssh_server user@server_address -L port_local:server_address:80

Où :

  • port_ssh : est le port SSH utilisé sur le serveur (par défaut le port 22)
  • user : le nom d'utilisateur sur le serveur
  • server_address : l'adresse du serveur (URL ou adresse IP)
  • port_local sur lequel vous voulez rediriger le traffique (par exemple 3000)

Il vous suffit après d'accéder depuis un navigateur à l'adresse : http://localhost:3000 et vous accèderez au panneau d'administration de votre box.

Attention: pensez à vérifier que le port soit ouvert ;-)

Taggé comme: , 5 Commentaires
31août/110

Un documentaire sympatique

Un documentaire très intéressant. A voir ;-) -> http://linuxmanua.blogspot.com/2011/06/hackers-ni-dieu-ni-maitre.html

31août/110

Opera … des fois … tu me fais c****

Ayant commis "l'erreur" d' "inspect element" sur la mauvaise page Opera a tout simplement décidé de cracher. Et après plus moyen de le relancer tant  que tu recharges la dernière session (il restaure tous les onglets et ça crache sans que tu puisses rien y faire). Gardant souvent un grand nombre d'onglets ouverts, ça me gonfle royalement de tout perdre. Alors (sans doute un réflexe d'Archlinuxien) je suis allez farfouiller dans les fichiers de confs d'Opera dans le ~/.opera/ et je suis tombé sur le bon fichier : ~/.opera/sessions/autosave.win

Il s'agit d'un simple fichier texte. Et là il m'a suffit de supprimer l'onglet ouvert posant problème. Une simple recherche et virer les lignes concernée :-)
Edit: J'ai trouvé une page intéressante sur le site d'Opera . Ils expliquent à quoi correspond chaque fichier sous Linux, FreeBSD et Solaris :-)
Taggé comme: Aucun commentaire
8août/110

[Coup de coeur] Audex

Aujourd'hui, voulant extraire les musiques de mon CD nouvellement acheté, je lance Sound Juicer (un CD Extracteur pour GNU/Linux) et paf rien ne fonctionne ... J'essaie alors avec KAudioCreator sans succès non plus (c'est quand même rageant quand rien ne fonctionne ... Rhaaa !!! ). Et c'est là que je découvre Audex : Un logiciel simple et vraiment bien. Il gère différents formats de sortie (FLAC, OGG et MP3 avec la qualité règlable). L'essayer, c'est l'adopter ;-) Il permet aussi de récupérer les informations sur le CD. Rien d'exceptionnel, mais il fait son travail et (surtout) il le fait bien. Je le recommande donc à tous les linuxiens. (Pour ceux que ça pourrait déranger, c'est une application KDE).

Pour les utilisateurs d'Archlinux, il est dans les dépôts :

sudo pacman -S audex

pour les autres à voir selon votre distro. Sinon il y a toujours le site officiel :

http://kde.maniatek.com/audex/

Et pour terminer ce billet, un screenshot :

Audex

(cliquez ici pour l'image en grand)

Comme vous pouvez le voir, c'est très simple. Audex liste automatiquement les pistes du CD inséré. Dans la liste déroulante, vous choisissez le format de sortie puis vous cliquez sur Rip. Et puis c'est tout :-) Bien entendu, lors de la première utilisation, il est préférable d'aller faire un tour dans les préférences du logiciel, histoire de choisir l'emplacement dans lequel enregistrer la musique rippée ;-)

27juin/116

Faire ses courses dans le metro, c’est possible !

Marre de devoir encore faire ses courses après le boulot ? Eh bien maintenant, même plus besoin d'aller perdre son temps dans les magasins ! TESCO, le n° 2 du marché alimentaire en Corée du Sud, révolutionne le monde du shopping : il est désormais possible de faire ses achats dans le métro ! En effet, à la place des affiches publicitaires, ils mettent directement des photos de leurs rayons avec un code barre que l'on scanne avec son téléphone portable (smartphone). Puis, vous êtes livrés directement à la maison ! :-)


Supermarché virtuel dans le métro - Vidéo streaming
26juin/114

Chromium, le navigateur des geeks !

Hier, en essayant d'accéder à un site web depuis Chromium, mon navigateur l'onglet a freezé. J'ai donc killé la page, comme me le propose gentiment Chromium. Après cela, Chromium m'affiche le message suivant :

Outre l'icone bien sympa que nous affiche fièrement Google, on peut lire "He's Dead, Jim !". Devinez de quelle série est tirée cette citation ? ... Eh bien de Star Trek (par le Dr. McCoy) ! :-D

Pour plus d'info, notre fidèle ami, Wikipedia ;-) (l'article est en anglais)

Taggé comme: , 4 Commentaires
26juin/110

Blogilo, postez vos billets WordPress depuis une application desktop

J'ai décidé de tester Blogilo, un "Blogging Client" pour poster vos billet sans passer par le panneau d'administration de WordPress (Ce billet est d'ailleurs posté depuis Blogilo :-D ). Il s'agit d'une application KDE tournant sous GNU/Linux que vous trouverez sans doute dans les dépots de votre distribution.

Et pour ce que j'ai pu en voir, il a l'air vraiment bien et est vraiment très simple à mettre en place. Regardons d'ailleurs comment procéder de suite.

Tout d'abord, connectez-vous au panneau d'administration de votre WordPress et allez dans "Settings -> Writing" (En français ça doit donner Paramètre -> Ecriture ou Rédaction. Si qqn peut me confirmer, ce serait sympa ;-) ). Puis, cochez la case pour activer "XML-RPC" comme sur la capture suivante :

( voir l'image en grande )

Une fois cela fait, installer Blogilo depuis votre gestionnaire de paquets et lancez-le. Configurez un nouveau blog depuis le menu "Blog -> Add blog". Vous n'avez pas besoin de remplir grand chose. Juste l'adresse de votre blog et vos identifiants. Blogilo se chargera du reste ;-)

Une fois votre blog ajouté, vous devriez avoir un résultat semblable :

( voir l'image en grande )

Vous me direz, "mais finalement, à quoi ça sert ton truc ? Tu peux faire exactement pareil depuis l'admin de WordPress ...".

Oui bien évidemment, mais :

  • Une interface plus confortable pour rédiger vos billets (enfin, je trouve :-) )
  • La possibilité de sauvegarder localement vos billet (toujours pratique, et très confortable pour les très gros billets qui prennent plusieurs jours à écrire)
  • Le preview qui permet de charger le style du blog
  • L'éditeur HTML avec coloration syntaxique (très pratique pour moi qui utilise un syntax highlighter où il faut faut éditer le HTML pour mettre les bonnes balises

Et ainsi se termine mon premier billet posté depuis Blogilo :-D