[Code] L’Euromillions

Standard

Euromillions
Hier, le 10 août 2012, un britannique a remporté le plus gros gain du célèbre jeu de loterie européen : la bagatelle de 190 millions d’euros. De quoi s’offrir de belles choses. Cela faisait 10 tirages consécutifs que personne n’avait réussi à trouver les 5 bons numéros parmi les 50 et les 2 étoiles parmi les 11. Et pourtant, beaucoup de personnes jouent ? Il devrait y avoir un moyen ? Et bien en se basant sur les mathématiques, la probabilité d’avoir ces 5 numéros et ces 2 étoiles n’est que de 0,000 000 858 %. Pour autant, le phénomène de société du “et pourquoi pas moi ?” fait que l’Euromillions reste un jeu très populaire, plus encore quand la cagnotte atteint son plafond de 190 millions.

Etudions un petit peu ce jeu, d’un point de vue des probabilités. Je vous propose ensuite un petit code PHP qui permet de générer des grilles d’Euromillions et d’en sortir quelques statistiques intéressantes. Hier, je me suis amusé à tirer 100 000 grilles aléatoirement. Et bien figurez-vous que je n’ai pas trouvé la bonne combinaison !

Probabilités

Pour calculer les différentes probabilités d’atteindre les différents rangs de gain de l’Euromillions, on utilise les combinaisons (l’ordre de sortie des numéros ne compte pas).
Combinaison probabilités
Ainsi la probabilité d’obtenir les 5 bons numéros et les 2 bonnes étoiles est donnée par la formule :
Combinaison probabilités
Soit de 1 chance sur 116 531 800.

Voici un tableau qui résume les probabilités pour les différents rangs, trouvé sur Wikipédia :
Probabilités Euromillions
En résumé, une personne aura 7,81 % de chance (soit environ une chance sur treize) de remporter un gain sur chaque combinaison jouée à 2 € la combinaison. À titre de comparaison, au Loto, un joueur a 16,7 % de chance (environ une chance sur six) de remporter un gain sur une combinaison simple.

Code PHP

Le code PHP suivant permet d’effectuer un tirage aléatoire d’une grille d’Euromillions. Les résultats sont ensuite enregistrés dans une base de données, pour un futur traitement. A noter qu’avant d’être enregistré, les nombres et les étoiles du tirage sont rangés dans un ordre croissant, ceci afin de faciliter la sélection dans la table plus tard. Le code PHP devrait être suffisamment commenté (en anglais !) pour que vous le compreniez facilement.

Et voici le code SQL permettant de créer la table associée au précédent code :

Vous obtiendrez quelque chose de cette forme après avoir lancé le code PHP :
Combinaison probabilités

Des emails d’absences originaux

Standard

Vacation
Alors que beaucoup d’employés sont partis en vacances, la majorité d’entre eux laisse un message d’absence automatique sur leur boite email pour prévenir les personnes qui cherchent à les joindre qu’ils ne sont pas disponibles pour le moment. Un petit Tumblr s’occupe de collecter tous ces messages automatiques et de publier les meilleurs. Des messages minimalistes, rigolos, loufoques, étranges, originaux et des meilleurs ! En clair, les meilleurs “répondeurs de vacances” sont disponibles sur absentdubureau.tumblr.com.

Quelques exemples

Voici un manager qui compte les jours avant la fin de l’année et qui ne veut en aucun cas entre dérangé pendant ses vacances :

Un autre n’hésite pas à narguer ceux qui ne sont pas encore en vacances :

Retrouvez tout ceci sur absentdubureau.tumblr.com, parce que ça occupe bien de lire les messages d’absence durant les vacances.

CSSPop : des bouts de CSS à réutiliser

Standard

CSSPop
CSSPop, une création d’AlemCode propose de faciliter la vie aux web-designers qui se prennent souvent la tête avec du CSS. CSSPop propose des “snippets” (comprendre “des petits bouts de code”) de CSS que vous pouvez incorporer dans vos projets. Une excellente manière de chercher de l’inspiration pour vos nouvelles créations ou de faire un petit rafraîchissement de votre design.

Fonctionnement

Le principe est simple : vous parcourez les soumissions des différents designers et vous cliquez lorsqu’une création vous intéresse. Vous avez alors le rendu final, le code CSS et le code HTML associé. Vous ne prenez que ce qui vous intéresse !

L’ajout de snippet se fait très facilement également. Il suffit de vous inscrire, puis de remplir un champ “code CSS”, un autre champ “code HTML”, une petite description et le tour est joué ! Vous avez en bonus le droit à une prévisualisation en temps réel de ce que produit à l’écran votre code. N’est-ce pas magnifique ?

Version beta

Une petite critique pour CSSPop : le projet est actuellement en beta, ce qui signifie qu’il n’y a pas encore énormément de créations et que certaines créations ne sont pas vraiment utiles (je pense que vous savez comment centrer un div horizontalement ou faire des liens de différentes couleurs…).

Un iPhone en CSS3 ?

Je finis avec quelque chose qui m’a bluffé et que j’ai trouvé là-bas. Un iPhone uniquement en CSS3. Oui, oui. Vous pouvez le voir juste ici : www.csspop.com/view/585.

CSSPop : www.csspop.com.

The mobile lives of college students

Standard

Mobile
Nowadays, college students aren’t just concerned with grades or finding best parties. Their smartphones are part of their daily routine: on the bus, waiting in line, in bed and even while driving, college students can’t seem to put their phones down. 52% say they often check their phones before getting out of bed in the morning, according to one study. Nearly half do so while in bed at night before they fall asleep.

Among another notable findings: 45% say they never play to solo video games on their smartphone, email has nearly caught text messaging as the most popular use for smartphones among college students and nearly half of students use their phones to check the weather.

The Internet education portal OnlineColleges pulled this data and more from sources including the Pew Internet & American Life Project, University of Colorado and Nielsen to produce the infographic just below.

Mobile

Project Euler

Standard

Euler
Project Euler est un site web proposant de nombreux problèmes d’algorithmique à résoudre. La difficulté des 388 problèmes proposés à ce jour est croissante et mettra à contribution vos méninges. La résolution du problème se fait généralement par une réflexion mathématique puis par une programmation de son idée pour obtenir le résultat attendu. Pas besoin d’avoir un super calculateur de la Nasa pour obtenir le résultat, les problèmes peuvent être résolus en “moins d’une minute” de calcul par un ordinateur domestique. Il est précisé qu’il faudra néanmoins parfois quelques heures de réflexion pour arriver à calculer un résultat, une optimisation de l’algorithme étant nécessaire pour rentrer dans des délais de calcul acceptés par l’ordinateur.

Résolution d’un problème

Tous les langages de programmation et tous les logiciels sont acceptés pour résoudre le problème. Le résultat de chaque problème demandé est un nombre, il ne faudra donc pas soumettre les méthodes de calcul de votre algorithme mais uniquement le résultat. Voici un net avantage pour vous :

  • Vous pouvez utiliser toutes les méthodes que vous souhaitez pour résoudre un problème.
  • Vous n’avez pas besoin d’attendre une quelconque validation de votre algorithme par quelqu’un de l’équipe.
  • Vous savez tout de suite si vous avez le bon résultat (ou si vous devez encore vous creuser la tête…).

Après avoir résolu un problème, vous avez la possibilité de consulter le forum associé à ce problème (et surtout pas avant l’avoir résolu !). Dans ce forum vous trouverez les solutions proposées par d’autres programmeurs qui sont arrivés au même résultat que vous, mais avec d’autres méthodes et d’autres langages. Une excellente opportunité pour découvrir de nouvelles techniques ou des optimisations très ingénieuses. Si vous vous sentez prêt, vous pouvez aussi exposer votre algorithme afin de partager votre technique avec les autres membres !

Statistiques

Quelques chiffres, pour vous donner envie de participer vous aussi :

  • 231 349 personnes ont résolu au moins un problème.
  • 3 700 797 résultats justes ont été proposés, avec une moyenne de 16 par membre.
  • 41 090 personnes ont résolu au moins 25 problèmes, ce qui représente 18 % de la totalité des membres.
  • 113 personnes ont résolu plus de 350 problèmes.

Vous pouvez trouver des statistiques sur les langages de programmation utilisés juste ici : projecteuler.net/languages.

Je veux participer !

Vous aussi vous souhaitez vous arracher les cheveux sur des problèmes mathématiques pendant des heures et exploser de joie lorsque vous aurez trouvé le bon résultat ? L’inscription se fait à cette adresse : projecteuler.net/register.

Nous participons actuellement en équipe à la résolution de ces problèmes, si vous souhaitez voir ce que nous faisons ou partager vos algorithmes avec nous : @AntoineAugusti et @ThibaudDauce sur Twitter. Et nos codes source sur GitHub : https://github.com/AntoineAug/Euler. Nous avancerons beaucoup plus durant le mois de juillet et d’août.

Bonne chance à vous dans la résolution des problèmes !

[Maths et code] Le classement Elo

Standard

Nombres
Le classement Elo est un système d’évaluation du niveau de capacités relatif d’un joueur d’échecs ou d’autres jeux à deux joueurs. Il doit son nom à Arpad Elo (1903-1992), un professeur de physique et excellent joueur d’échecs américain d’origine hongroise qui l’a mis au point. Plus généralement, il peut servir à comparer deux joueurs d’une partie, et est utilisé par de nombreux jeux en ligne. World Of Wacraft l’utilise notamment pour les cotes en arène et Mark Zuckerberg a utilisé cet algorithme pour établir un classement des filles d’Harvard (si vous avez vu The Social Network). C’est un algorithme très répandu, très utilisé et il est relativement facile à mettre en place.

Je vais vous détailler son fonctionnement mathématique puis vous expliquer comment l’implanter en PHP.

Elo, côté mathématique

Il existe plusieurs variantes du classement Elo, je vais vous en détailler une que j’ai choisi arbitrairement (il ressemble au modèle de World Of Warcraft). Vous pourrez l’adapter facilement.

Le classement Elo est un classements par points. Au début, chaque joueur commence avec 1500 points (on dit aussi une cote de 1500 ou un rang). Ce rang va évoluer selon les résultats des matchs du joueur. Schématiquement, le rang du joueur augmente quand il remporte un match et diminue lorsqu’il perd. L’augmentation ou la diminution du rang ne sera pas la même selon la difficulté du match.

Après chaque match on recalcule son rang selon la formule suivante :
Classement Elo

Résultat indique le résultat du match opposant le joueur P1 au joueur P2 :
Classement Elo

K est un paramètre permettant de régler la vitesse d’augmentation ou de diminution du rang du joueur. Dans mon modèle, j’ai choisi une ascension rapide en dessous de 1000, normale entre 1000 et 2000 et diminuée au-dessus de 2000. Vous pouvez tout à fait modifier comme vous voulez ce paramètre K en introduisant une constante ou en changeant la valeur de K selon l’intervalle que vous définissez.

J’utilise les valeurs de K suivantes :
Classement Elo

Enfin on calcule la probabilité de gagner du joueur P1 contre le joueur P2 avec la formule suivante :
Classement Elo

Rien de très compliqué ! A noter que j’ai utilisé l’excellent éditeur de texte LyX (www.lyx.org), version Linux qui se base sur le LaTeX pour créer les images des formules mathématiques.

Exemple

Dans cet exemple le paramètre est fixé tel que K = 16. Soit deux joueurs, Anne de rang 2300 et Michel de rang 1800. Calculons l’estimation de chaque joueur puis son nouveau rang en cas de victoire ou de défaite.

Classement Elo
Lorsque Anne gagne, le classement des joueurs ne change pratiquement pas vu que le résultat corrobore le classement établi. Dans le cas où Michel gagne, le classement des joueurs change de façon significative car le résultat ne correspond pas au classement établi.

Elo, côté PHP

Après avoir vu comment se comportait le classement Elo de manière mathématique, il est temps de le transformer en code PHP pour pouvoir l’utiliser.

Je vous fourni une version beaucoup commentée et affichant des statistiques volontairement pour bien comprendre le fonctionnement de l’algorithme. Dans une version de production, le code source peut (et doit) être beaucoup plus court. La seule chose à changer pour tester est la valeur des cotes des joueurs P1 et P2 et le résultat du match les opposant.

Au final on obtient quelque chose de ce style quand on exécute le script :
Classement Elo

J’espère que vous vous amuserez bien avec ceci ! Il y a de beaux projets à réaliser.

Les joies du code

Standard

Joies du code
Vous codez ? Vous passez plusieurs heures par jour à débuguer ? Vous avez envie d’exploser votre ordinateur quand votre projet ne compile pas ? Le “parse error” est votre religion ? Vous allez adorer lesjoiesducode.tumblr.com qui regroupe tous les ennuis qui rapprochent tous les développeurs. Notre quotidien, en images : nos moments de joie et nos pires cauchemars.

Créé par Nicolas Lecointre (@nlecointre), de nouvelles images sont régulièrement publiées ! Une adresse à ajouter dans ses bookmarks et un twittos à suivre.

Je partage avec vous quelques images, et je vous invite à lire l’intégralité du Tumblr ensuite !

Quand un client change le cahier des charges tous les jours

Les joies du code

Quand le binome m’annonce qu’il est prêt a coder ce truc horrible auquel je ne voulais pas toucher

Les joies du code

Quand je pense avoir trouvé une solution

Les joies du code

Quand je code sans musique

Les joies du code

Quand je vois du code mal indenté

Les joies du code

quand j’essaie de gérer les encodages de caractères spéciaux et que je regrette d’être français

Les joies du code

L’intégralité des images sur lesjoiesducode.tumblr.com.

Créer des raccourcis clavier sur son site

Standard

Keyboard
Les raccourcis clavier nous font gagner un temps précieux lorsque nous utilisons notre ordinateur. Pour aller vite, il faut être un fainéant intelligent. Les raccourcis clavier ont été créés dans cette optique. De nombreux sites les utilisent (Facebook ou Twitter par exemple) et ils facilitent grandement la navigation. Dès lors, pourquoi ne pas créer ses propres raccourcis sur son site web, pour faciliter la vie de vos utilisateurs habitués à les utiliser ?

Le processus de création est très simple, et je vais vous le détailler.

Javascript

J’ai trouvé l’astuce sur le site www.catswhocode.com/blog/ qui propose de nombreuses astuces en terme de développement web. On utilise bien évidemment du Javascript pour les raccourcis clavier, car c’est une action côté client. Des solutions proposées par ce blog, j’ai choisi d’utiliser la solution faisant appel à la bibliothèque jQuery, je pense qu’elle est largement utilisée sur vos sites (en tout cas, si vous ne le faites pas, vous ratez quelque chose !).

Avant de se lancer dans la rédaction du code, réfléchissons aux raccourcis clavier que nous allons mettre en place. La première idée serait d’utiliser une combinaison du type : “Ctrl + touche”, car c’est le type de raccourcis que nous utilisons le plus fréquemment. Comme ceci est fréquemment utilisé par votre système d’exploitation et votre navigateur, c’est donc une excellente raison de ne pas utiliser cette combinaison pour ne pas faire de confusions (ou prendre la place d’un raccourci déjà utilisé).

J’ai choisi de suivre les raccourcis mis en place par Twitter pour naviguer d’une page à une autre : “G + touche”. Le G symbolise “Go to” et on choisit l’initiale du nom de la page pour l’autre touche.
Deux avantages :

  • la touche G est située au milieu du clavier, ce qui permet de choisir n’importe quelle combinaison de touches.
  • Vous n’avez aucun risque de créer un raccourci déjà utilisé par vos logiciels.

On pensera à désactiver tous les raccourcis clavier quand l’utilisateur se trouve dans un input ou une textarea, pour éviter toute redirection non voulue lorsqu’il frappe au clavier.

Passons maintenant au code, je vous rappelle que vous devez avoir jQuery sur votre site et placer ce bout de code avant la fin de balise head :
Mais c’est quoi ces numéros que tu utilises ? Pas de panique à bord, voici les correspondances :

Key Keyboard code
Backspace 8
Tab 9
Enter 13
Shift 16
Ctrl 17
Alt 18
Pause 19
Capslock 20
Esc 27
Page up 33
Page down 34
End 35
Home 36
Left arrow 37
Up arrow 38
Right arrow 39
Down arrow 40
Insert 45
Delete 46
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
a 65
b 66
c 67
d 68
e 69
f 70
g 71
h 72
i 73
j 74
k 75
l 76
m 77
n 78
o 79
p 80
q 81
r 82
s 83
t 84
u 85
v 86
w 87
x 88
y 89
z 90
0 (numpad) 96
1 (numpad) 97
2 (numpad) 98
3 (numpad) 99
4 (numpad) 100
5 (numpad) 101
6 (numpad) 102
7 (numpad) 103
8 (numpad) 104
9 (numpad) 105
* 106
+ 107
– 109
. 110
/ 111
F1 112
F2 113
F3 114
F4 115
F5 116
F6 117
F7 118
F8 119
F9 120
F10 121
F11 122
F12 123
= 187
Coma 188
Slash / 191
Backslash \ 220

Vous êtes maintenant armés pour créer vos raccourcis facilement. Notez que vous pouvez faire un tas d’autres actions que de la simple redirection vers une page, à vous d’être créatif !

Bonus : du CSS pour présenter les combinaisons de touches à vos utilisateurs

C’est bien beau d’avoir créé des raccourcis, encore faut-il informer vos utilisateurs de leur existence. Si comme moi vous ne pouvez pas réaliser quelque chose de potable sur un logiciel comme The Gimp ou Photoshop, je partage avec vous ce très joli bout de code de CSS qui vous permettra “d’imiter” les touches d’un clavier. Voici ce qu’on obtient :

Keyboard shortcuts Vous pouvez visualiser directement en ligne ici : teen-quotes.com/shortcuts. Et voici le code CSS, à appliquer sur une balise span :

Amusez-vous bien !

Création de CSS sprite : quelques icônes

Standard

CSS SpriteOn est souvent amenés lorsque l’on crée un site web à utiliser beaucoup d’icônes. A ce sujet, je vous conseille l’excellent site www.iconfinder.com où je suis sûr que vous trouverez votre bonheur. Pensez à rechercher en anglais !

Dans une optique d’optimisation, il est opportun de regrouper ses icônes dans un seul fichier à l’aide de la technique du CSS Sprite. J’avais déjà abordé cette technique dans un précédent article : les outils pour développeurs web. Grâce à cette technique, vous ne faites plus qu’une seule requête HTTP (sinon, ce sera une requête par fichier…) et vous possédez moins de fichiers. Il suffit alors de mettre en cache chez l’utilisateur cette image, et voilà une bonne partie de la bande passante économisée ! Une belle optimisation, facile à réaliser.

La création du CSS sprite

Pour mes icônes, que j’utilise sur la nouvelle version de mon site personnel (www.antoine-augusti.fr), j’ai choisi d’utiliser des images de dimension 24×24. J’ai redimensionné à ce format les icônes qui étaient plus grandes.

Une fois ceci fait, j’ai utilisé l’excellent site www.csssprites.com pour créer mon CSS Sprite. Il suffit d’ajouter toutes les images au bon format, de choisir dans les options de les aligner comme vous souhaitez, de réduire l’espace entre elles (1px est suffisant) et le site s’occupe de générer votre image et le code CSS associé à celle-ci ! Magique !

Résultat

J’obtiens donc l’image suivante :
CSS Sprite

Et j’ai créé le CSS suivant :
J’ai associé une simple fonction en PHP :

Que l’on utilise de la manière suivante :

Afin de générer de belles icônes associées aux bons liens, très facilement.

Bien évidemment, vous pouvez créer une autre fonction pour pouvoir utiliser ces icônes sans des liens, par exemple dans le corps de votre site, en complément du contenu !

Les bénéfices incroyables d’Apple

Standard

AppleVoici une excellente infographie détaillant le business (profits, croissances et diverses statistiques) d’ Apple. Je l’ai trouvée sur l’excellent site tenu par un ami (ici) que je tiens à partager avec vous.

Je traduis donc les diverses statistiques ici, pour les anglophobes. Je vous invite également à jeter un oeil à l’image, qui est très bien réalisée et que vous trouverez à la fin de l’article.

  • Apple a réalisé 29 000 000 000 $ de bénéfice au cours des 6 derniers mois, soit 7 000 000 $ par heure.
  • L’iPhone et l’iPad génèrent un bénéfice de 130 000 000 000 $ par an, soit 2 fois plus que le bénéfice de Microsoft.
  • Apple vend 645 000 iPhones ou iPads par jour. Soit 267 iPhones et 90 iPads par minute.
  • La croissance d’Apple est de 114 % par an en Asie.
  • Apple vend pour 5 626 $ d’appareils par mètre carré dans ses Apple Stores.
  • Au dernier trimestre, Apple a réalisé un chiffre d’affaires de 12 000 000 $ dans ses 363 Apple Stores.
  • Apple est l’entreprise valant la plus chère au monde.

Business of Apple