
Le HTML5 commence à envahir les sites, et c'est tant mieux ! Je vous propose ici de découvrir quelques trucs et astuces qui pourront vous aider à concevoir de belles pages en HTML5 (et aussi vous simplifier la vie ;))
Fini l'appel au javascript pour valider une saisie utilisateur ! Autoriser ou nom la soumission d'un formulaire n'a jamais été aussi facile grâce à l'attribut pattern des INPUT :
<input type="text" name="phone-number" pattern="\[0-9\]*" value=""/>
La ligne ci dessus n'autorise que les chiffres. Pas d'autres caractères superflus ! (mais cela ne vous empêche pas de valider la saisie côté serveur, en PHP par exemple)
Avant, lorsque vous vouliez forcer le téléchargement d'un élément à partir d'une page (un PDF par exemple) vous n'aviez pas trop de solutions. Soit vous jouiez avec un .htaccess pour ce fichier en question, soit vous le serviez via PHP, pour modifier les headers de la page.
HTML5 vous permet de contourner ce problème. Il est désormais possible de forcer le téléchargement d'une ressource (et même de spécifier son nom) via l'attribut download de la base A :
<a href="http://www.eskuel.net/imgblog/2013/05/danoquette-coupable.jpg" download="danoquette.jpg">Télécharger ici la photo de danoquette</a>
Il est possible de dire au navigateur de charger automatiquement certains éléments qui ne sont pas présents sur la page grâve à prefetch.Imaginez sur un blog, vous pourriez charger automatiquement le dernier article en date, vos visiteurs ayant une très forte chance de vouloir le lire. Ainsi, en cliquant sur son lien, la page sera déjà chargée, et votre site aura l'air encore plus rapide !
<link rel="prefetch" href="http://www.eskuel.net/la-danoquette-quest-ce-que-cest-1508" />
A noter que pour Chrome, la manipulation est légèrement différente. Il faut non pas utiliser prefetch mais prerender, qui a pour but de préparer le rendu de la page en amont :
<link rel="prerender" href="http://www.eskuel.net/la-danoquette-quest-ce-que-cest-1508" />
Par défaut, votre navigateur ne fait la résolution DNS que lorsque vous cliquez sur un lien, ou vous chargez une image. La résolution DNS peut prendre un peu de temps, surtout sur une connexion avec une forte latence (en 3G par exemple).
Le DNS prefetch marche un peu comme le prefetch ci-dessus, mais il ne charge pas de ressource. Il opère juste la résolution DNS en arrière plan, et met le résultat en cache. Ainsi lorsque la ressource située sur ce domaine devra être chargée, le lookup sera déjà fait, et la navigation fluidifiée.
<link rel="dns-prefetch" href="//www.google-analytics.com">
Grâce aux Datalist, vous pouvez proposer sur un champ texte une suggestion de valeurs prédéfinies. Pas besoin de jQuery ou de requêtes en AJAX pour proposer la suggestion. Bien entendu, si votre liste est trop longue, il sera peut être plus judicieux de faire appel à un peu de javascript pour aller demander la liste à une base de données au fur et à mesure de la frappe.
<label for="choix_voiture">Indiquez la marque de votre voiture :</label>
<input list="liste-voitures" type="text" id="choix_voiture">
<datalist id="liste-voitures">
<option value="Peugeot">
<option value="Renault">
<option value="Citroën">
<option value="Danoquette">
</datalist>
Avec ça, vous êtes parés pour faire de superbes pages en HMTL5.
A vous de jouer !
Aujourd'hui, je vais vous parler d'un de mes nouveaux "jouets" : Sphinx Search
Sphinx, pour celles et ceux d'entre vous qui ne connaissent pas encore (bouuuu :p) est un moteur de recherche open source qui est utilisé sur des sites à forte fréquentation comme Craiglist, Joomla, Mysql.com, Scribd, et j'en passe.
Je ne vais pas vous expliquer comment installer et créer un index sous Sphinx, cet article ayant plutôt pour but de vous montrer comment exploiter les fonctionnalités de recherches géographiques du moteur.
En effet, en 2 temps, 3 mouvements, vous pourrez définir un index géographique, et l'utiliser pour récupérer les éléments de votre base de données situés à moins de X mètres d'un item donné.
Imaginez donc que vous possédez une table, listant tout une liste de points d'intérêts, ou même de villes, et que vous avez, pour chacun de ces items leurs coordonnées latitude / longitude (en degrés)
Votre but est donc d'obtenir, pour une ville donnée, les villes situées dans un rayon de 5 km.
Commençons tout d'abord par définir une source cities dans Sphinx, comme suit :
source cities
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = XXX
sql_db = ma_db
sql_query = SELECT id country, zip, name, \
RADIANS(lat) AS latitude, RADIANS(lon) AS longitude \
FROM cities;
sql_attr_float = latitude
sql_attr_float = longitude
sql_query_info = SELECT name FROM cities WHERE id=$id
}
Vous définissez tout d'abord les informations de connexion à la base. Ensuite viens la requête qui va vous permettre d'indexer les données :
sql_query = SELECT id country, zip, name, \
RADIANS(lat) AS latitude, RADIANS(lon) AS longitude \
FROM cities;
Pour que Sphinx puisse travailler efficacement avec vos coordonnées, il faut les convertir via RADIANS(). C'est là la seule difficulté de ce tutorial :)
Viens à présent le moment de définir un index utilisant cette source :
index cities
{
source = cities
path = /var/lib/sphinxsearch/data/cities
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
charset_type = utf-8
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
ignore_chars = U+00AD
html_strip = 0
enable_star = 0
}
Si vous avez déjà créé un index sous Sphinx, rien de ce qui est ci-dessus ne doit vous sembler étranger :)
Il ne vous reste plus qu'à lancer l'indexation de votre nouvelle config :
indexer --rotate cities
A présent, le clou du spectacle : l'interrogation de la base :)
$search = new SphinxClient();
$search->SetServer('localhost', 9312);
$search->SetMatchMode(SPH_MATCH_ALL);
$search->SetArrayResult(true);
$search->SetGeoAnchor('latitude', 'longitude', (float) deg2rad($latitude), (float) deg2rad($longitude));
$search->SetSortMode ( SPH_SORT_EXTENDED, "@geodist asc");
$circle = (float) $radius;
$search->SetFilterFloatRange('@geodist', 0.0, $circle);
$result = $search->Query('', 'cities');
Les variables $latitude et $longitude étant les coordonnées de votre item de référence, et $radius le rayon en mètres dont lequel doivent se situer les résultats.
Vous remarquerez l'attribut @geodist dans le filtre de recherche et dans le critère de tri. Cet attribut fourni par Sphinx représente la distance en mètres de vos résultats de recherche.
Maintenant, vous avez toutes les clés en main pour monter un super système de POI autour de votre position ;)
On continue dans la conquête du monde avec Meteosun :)
A présent, disponible sur le site :
Have fun ! :)
Cela faisait un moment que cette idée me trottait dans la tête, et j’ai enfin décidé de franchir le pas. Il est temps de se lancer dans le fabuleux monde de l’Arduino.
Tout d’abord, un Arduino, qu’est-ce que c’est ?
Arduino, c’est la rencontre des développeurs et des p’tits génies de l’électronique. Rajoutez à ça une couche d’Open Source, et vous obtenez ce fabuleux mélange.
En fait, l’Arduino est un petit circuit imprimé, dont les plans sont disponibles gratuitement et sous licence libre : libre à chacun de faire sa propre plaque, voir même de la commercialiser. La seule restriction se situe dans l’utilisation du nom.
Sur ce circuit, vous trouvez un microcontrôleur ATmega328 avec 32ko de mémoire pour stocker vos programmes. Vous pouvez interagir avec ce microcontrôleur par le biais de 14 broches d’entrées / sorties numériques (0 ou 1) et 6 broches analogiques (une tension de 0 à 5V)
A partir de là, c’est à vous de jouer, et de l’interfacer avec ce que vous voulez : LED, servo moteurs, capteurs de lumières, de température, d’inclinaison, voir dans les montages plus évolués, un écran LCD et même un GPS ! Au niveau de la programmation, rien de bien compliqué, tout est très accessible. Il suffit de connaître les rudiments du C pour vous en sortir. Vous installez l’IDE Arduino, et d’un clic vous transférez votre programme dans la mémoire du microcontroleur. Simple
Histoire de bien commencer, je vous ai préparé un petit tutoriel, basé sur ce superbe kit Arduino que j’ai eu la chance de recevoir de la part de RS Components France.
Dans ce kit, vous trouverez l’essentiel pour bien débuter, et acquérir les bases des interactions sur Arduino (LED, résistances, un « BreadBoard », des condensateurs, boutons poussoirs, etc)
Voici donc le contenu du kit :
La première partie du tutorial consistera juste à allumer jusqu’à 3 LEDs de couleurs. Il suffit de raccorder les 3 LEDs chacune à une résistance, pour ne pas les griller, et ensuite chacune à une broche de l’Arduino.
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
void loop()
{
}
Simple non ?
Allez, on s’attaque à un peu plus compliqué à présent Nous allons utiliser un bouton poussoir, pour allumer les LEDs de manières cycliques (d’abord la verte, puis la jaune puis la rouge, et on recommence)
Le but ici est d’utiliser non plus les sorties de l’Arduino (que nous avons vu dans l’exemple ci-dessus) mais de s’attarder sur l’entrée logique reliée à l’interrupteur.
int offset;
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, INPUT);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
offset = 0;
}
void loop()
{
if ( digitalRead(5) == HIGH ) {
offset++;
if ( offset > 2 )
{
offset = 0;
}
delay(300);
}
if ( offset == 0 ) {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
else if ( offset == 1 ) {
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
else if ( offset == 2 ) {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
}
}
A chaque tour de boucle dans la procédure principale, nous regardons si le bouton a été pressé. Si tel est le cas, on éteint la LED allumée, et on allume la suivante. Alors, conquis par la simplicité de la chose ? Faites un tour sur la page Arduino de RS Components pour voir tous les kits / extensions possibles A vous de jouer !
Cette semaine, pas de grosses trouvailles, rien d'aussi exceptionnel que la semaine dernière. Mais tout de même
Semaine spéciale Nintendo
Mario Land 2, Wario Land et Mario Kart GBA : 6€ (et dire que le vendeur voulait pas les lacher à moins de 7€)
Le roi lion, sur Game Gear avec boîte plastique : 1€ (faudra que je mette la main sur la console un de ces quatre 5 jeux N64 ( Star Wars shadow of the Empire, Le monde ne suffit pas, Mario Kart 64, Pilot Wings 64, Ridge Racer 64)+ rumble pack : 2€ pièce
Metroïd Fusion GBA + notice : 3€
Un lot GBA transparente, avec coque supplémentaire, housse officielle, lampe, cable link, batterie, 5 jeux GBA (Dragon ball Z Taiketsu, Britney's dance beat, Harry Potter et la coupe de Feu, Driver 3, Les Sims 2), 2 jeux GBC (Dragon Ball Z les guerriers légendaires, Titeuf) pour 15€ négocié (au lieu de 20) car le cache pile tient mal
2 Prince of Persia Gamecube quasi neuf, 4€ chaque :
Mercs Megadrive, en loose, 2€
et, Last but not least, Castlevania GBA pour ...... 2€
Bon j'ai toujours pas trouvé ma Gameboy Classic, mais je ne désespère pas
Pour mon grand, un boite de Lego Creator, complète : 5€
Week end chargé niveau brocante, mais au final, du bon, voir du très bon !
Samedi 22 septembre : 1ère brocante, 4 exposants en train d'installer, je passe mon chemin.
2ème brocante, inexistante ! Flechée sur place, et indiquée sur internet, mais à part un parking désert, rien à signaler.
3ème brocante, au sud de Fontainebleau, un peu plus fournie, heureusement. Je passe sur les brocanteurs pro qui pratiquent des tarifs inimaginables, et qui ont la fâcheuse tendance à être cons à ratisser les autres stands pour fournir le leur.
Au détour d'une allée, je tombe sur un mégadrive, 2-3 jeux en boite et un sonic en loose. Je demande le prix des 2 plus beaux jeux en boite (entendez par là, ceux en moins mauvais état). Après quelques secondes à négocier, j'arrive à splitter le lot, et récupérer ces deux jeux :
Shining Force et Aladdin pour .... 5 euros. Quand on voit la côte de Shining Force (qui est complet en plus), on peut dire que j'ai fait un très bonne affaire
Je récupère un peu plus loin les Indestructibles + 1 manette Gamecube, pour 2€ :
4ème brocante, trop tard et trop loin, rien de bien spécial à récupérer.
C'est tout pour ce samedi de brocante, qui se termine pas si mal
Dimanche 23 septembre :
Planning chargé aujourd'hui. Pas moins de 9 brocantes relevées par mes soins, plus ou moins intéressantes. Je commence par les plus intéressantes et plus importantes en premier, histoire d'arriver avant les ratisseurs.
Première brocante :
Beaucoup d'exposants, pas trop de visiteurs. Le moment idéal pour fouiner
Je tombe sur une pile de 3 jeux SNES au coin d'une table. Pas exceptionnel, mais je demande le prix.
"Malheureusement" les jeux sont liés à une console, qui était planquée sous la table : 25€ le lot. Les 3 jeux m'intéressant, je prends le lot. GROSSE surprise qd je m'aperçois que la console est en bonne état, avec 3 manettes, et qu'au final, ce sont 9 jeux et non 3 qui sont dans le lot.
Dans ce lot, donc :
Belle pêche
Quelques stands plus loin, j'aperçois une pile de jeux Megadrive, en boite, pleins de poussière. Le petit papy ne sait pas combien il vend ça, mais il veut que je prenne le lot, "ça lui fera de la place". Je prends le lot à 10€ :
Tous les jeux sont complets (avec même la carte sur certains) sauf Risky Wood. Sur leur parfait état, ils valaient nettement plus que 10€. Je suis content, le petit papy aussi, qui a libéré de la place dans son grenier, tout le monde y trouve son compte
Deuxième brocante :
Un lot de trois jeux SNES, 1 N64 et un NES, pour 12€ (la propriétaire était pas décidée à les laisser plus bas )
Troisième brocante : rien de bien folichon, j'arrive quand même à mettre la main sur 2 pokemons GB et sur Goldeneye sur N64.
Quatrième brocante : bah, elle est où la brocante ? Pas moyen de le trouver. Ca sent le plan moisi (décidément, va falloir que je revois mes sources) Cinquième brocante, au pas de charge, je suis à la bourre, et loin de mon rdv d'après, et en plus je suis au fin fond de la Seine et Marne, les gens me font un peu peur (crévaindiou) 2 jeux PS1, 1€ chaque :
Une super housse rose, avec une Game boy color quasi neuve à l'intérieur. Quelques notices de jeux avec, et un Pokemon Or planqué au fond de la housse. Fausse joie tout de même. Quelques secondes avant, dans les notices, j'ai trouvé celle de Zelda Oracle of Ages. Mais le jeu n'y était pas Le tout : 5€
Au final, pas mal de bornes parcourues, des brocantes fantômes, mais de (très) belles trouvailles edit : Le goldeneye N64 est HS. J'ai fait tout ce qui était possible, mais la cartouche refuse irrémédiablement de booter
Il n'y a pas que les brocantes pour trouver du retrogaming Il y a aussi les amis , Le Bon Coin et les dépôts vente
Alors pèle mêle de mes dernières acquisitions :
Une Game boy advance, avec 4 jeux (2 GBA, 2 G , sur leboncoin:
Un Zapper NES, avec Mario/Duck Hunt et Mario 3 (qui a été très dur à nettoyer ), sur leboncoin :
5 jeux NES, avec notices et boitiers (pour certains), trouvés dans un Cash Converter, à 4€ l'unité (très bon état) :
et enfin, un magnifique Teenage Mutant Hero Turtles NES, offert par Messire Guillaume
Bon ok, je suis à la bourre sur mes trouvailles en brocante
Alors, voici les petits trésors que j'ai pu dénicher dimanche 9 septembre :
3 jeux Gamecube, bon état avec notices, 2 euros l'unité :
3 connecteurs RCA->Peritel (parce c'est plus facile de trouver un multiprise péritel qu'une multiprise RCA), 1 euro les 3 :
2 jeux N64 (mais je n'ai pas la console ) : 7 euros les 2 (un poil cher pour des jeux en loose, mais c'est la première fois que j'en voyais en brocante, alors je ne les ai pas laissé filer)
Ma plus belle pièce de cette journée. Une belle Super NES, avec câbles, 1 manette eten bonus, Super Mario All Stars (loose) pour la modique somme de .... 5 euros. Je n'ai pas cherché à négocier à ce prix là, ç'aurait été indécent
Enfin, pour faire plaisir à mon grand (et à moi aussi ), un super Wall-E VTech en parfait état (mais il manque le cache pile, pas très grave), pour.... 5 euros aussi. La pêche fut bonne dans cette brocante
Voilà il ne reste plus qu'à dénicher d'autres petites merveilles, dans de futures brocantes !
Il paraît que c'est à la mode de faire des billets "Retour de brocante" pour montrer les belles trouvailles que l'on a pu faire en brocante, et plus précisément pour le rétrogaming.
Alors à mon tour
Samedi 8 septembre, lever aux aurores pour attaquer la première brocante à 10 km de là. 7h du mat, 70% des exposants déjà installés, les autres arrivent doucement. Première trouvaille, au bout de 5 min : Sonic Adventure DX et Super Smash Bros Melee sur Gamecube.
-C'est combien ?"
- 3 euros"
- Les deux ?
- non chaque.
- Allez, 5euros, et je vous prends les deux.
- Ok, vendu
Résultat, deux jeux en parfait état, boite + notice, pour 5 euros
J'ai eu beau retourner tout le reste de la brocante, rien de bien intéressant en retrogaming. Un mec avait pourtant une belle collection de jeux GBA, en loose. Mais 5 euros le jeu seul, non merci
Après 1h30, en voiture, brocante suivante, 30 km plus loin.
Toute petite brocante, perdue au fin fond de la campagne. A tout casser, 40 exposants. Pas grand chose à se mettre sous la dent, sauf sur le dernier stand. Un Parasite Eve 2 sur PS1 et un Pokemon Rubis GBA. Le tout, pour un euro DEAL !
C'est reparti pour 30 bornes de voitures, pour s'enfoncer encore plus dans le fin fond de la Seine et Marne. Très belle brocante, beaucoup d'exposants, et surtout pas mal de jeux et jouets.
5 minutes de fouille, et hop, un petit Final Fantasy Crystal Chronicles sur Gamecube pour 5 euros. Un poil cher par rapport aux 2 derniers, mais il est en bon état.
Bon, c'est bien beau tout ça. Mais j'ai 3 jeux Gamecube, mais je n'ai pas la console (ok la Wii peut les faire tourner, mais ça ne compte pas )
Un dizaine de minute plus tard, je tombe par hasard sur un stand en vrac. Sous des sacs vides, surprise : une Gamecube noire en loose. Moyennant 10 euros, elle finit dans mon sac
L'objectif de la journée n'est pas atteint pour autant. Maintenant que j'ai une superbe NES, il me faudrait quelques jeux.
Au fond de la brocante se trouve alors le Saint Graal du retrogamer. Un stand uniquement consacré aux anciens jeux vidéos. Une trentaine de jeus NES (boite ou loose), des jeux Master System, Megadrive (EUR et JAP tous en boite), Super NES, Xbox, Wii, PS1, PS2 et NDS.
Le sourire jusqu'aux oreilles, et la main déjà sur le portefeuille, je cheche LE jeu à acheter. Les prix m'ont vite fait reposer les cartouches. Un jeu NES : pas moins de 8 euros, en loose. Megadrive : 12 euros mini.
Ca sera sans moi, salut l'escroc.
Autre trouvaille, une GB Color transparente. Mais les rayures sur l'écran m'ont dissuadé de l'acheter. Pour finir, histoire de faire plaisir à mon grand, une belle trouvaille, pour 4 euros :
Allez, on se motive pour remettre ça demain dimanche : il y a encore plus de brocantes dans les environs, je trouverais peut être mon bonheur ( en vrac : une GB micro, une SNES, un N64, des jeux NES et MD ou encore, soyons fou, un Mega CD ou une PC Engine )
Une petite news rapide pour vous informer que désormais, Meteosun.com vous permet d'obtenir la météo dans toute le France !
Avant, le site proposait la météo de 470 villes en France. A présent, ce n'est pas moins 34400 communes qui sont référencées ! Ainsi, si vous voulez la météo de Rochefourchat, la plus petite commune de France, vous pouvez
Bonne découverte des villages de France !
Après de longues semaines d'attente, j'ai enfin reçu mon Raspberry Pi.
Forcément, vous vous demandez ce que c'est, et c'est normal. On ne peut pas dire que ce produit soit encore grand public.
Il s'agit d'un ordinateur, pas plus grand qu'une carte de crédit, et dont l'objectif est d'être suffisamment puissant pour un usage bureautique et d'avoir un prix suffisamment bas pour être très accessible. En l'occurrence, un Raspberry Pi B coûte environ 25€.
Qu'est-ce que vous avez pour ce prix là ?
Vous avez juste la carte mère, équipée d'un processeur ARM à 700Mhz, 256 Mo de Ram, un port ethernet 100Mbits, une sortie audio, une sortie HDMI, une sortie composite et deux ports USB 2.0 Le stockage de vos données et du système d'exploitation s'effectue grâce à un lecteur de carte SD au dos de la carte mère.
Des images systèmes Linux sont téléchargeables librement. Il vous suffit de copier votre système sur une carte SD de 2Go minimum, (ce qui fera l'objet d'un billet plus tard) et votre ordinateur est prêt à fonctionner
Rien n'est fourni dans la boîte. Ni la SD, ni les câbles, ni l'alimentation. C'est à vous (pour le moment) de vous débrouiller avec ce que vous pouvez avoir chez vous.
Ainsi, pour l'alimenter, un simple chargeur de téléphone avec une prise micro USB suffit, l'appareil ne consommant que très peu d'énergie. J'ai donc essayé tout ça, en téléchargeant une Debian Squeeze sur uen carte SD. Si vous n'avez jamais utilisé Linux, vous allez rencontrer quelques problèmes. Mais rien d'insurmontable
Sur le système de base, vous avez l'essentiel pour utiliser votre Raspberry Pi pour aller sur internet et faire un peu de développement. A vous après d'installer les logiciels qui vous intéressent. Ce n'est effectivement pas encore très grand public.
A partir de là, c'est à vous de jouer. Soit vous utiliser votre Raspberry en tant qu'ordinateur basique, soit vous pouvez l'intégrer dans un système embarqué, pour peu que vous soyez bricoleur. On voit déjà fleurir sur le net des projets de consoles de jeu portables (sur base de Game boy), des projets domotiques, robotiques, etc (exemple, pilotage de cartes électroniques grâce à l'I2C disponible sur les GPIO, reconnaissance vocale, caméra, etc)
Pour le moment, j'ai juste installé le système (comme vous pouvez le voir sur les photos) et configuré un peu le tout.
J'en ai profité pour configurer une clé WiFi USB qui trainaît dans un tiroir. Ainsi, mon système est autonome : il me suffit de l'alimenter (via un chargeur d'iPhone ou une batterie) et il se connecte automatiquement sur mon réseau WiFi, et le daemon sshd écoute sur le réseau. La machine est ainsi administrable à distance
La suite au prochain épisode
Plus d'infos sur le site officiel du Raspberry
On continue dans les évolutions de MeteoSun.
En bref, à présent, vous pourrez retrouver la météo en Suède, la météo en Norvège et la météo en Finlande
Et pourquoi n'iriez-vous pas voir le village du Père Noël, à Rovaniemi ?
Stay tuned, Meteosun a encore quelques trucs dans les cartons :)