oct. 30, 2014
Si un jour on vous avait dit que vous seriez espionné par votre lampe
de poche, vous auriez crié au Philippe K Dick http://t.co/IFSUJbUYqd
— Jean-noël Lafargue (@Jean_no) October 29, 2014
La lecture récente de ce tweet ainsi que ma participation à l'OpenWorldForum, dont le thème pour cette année était "Take back control", m'ont incitée à écrire cet article que j'avais en tête depuis fort longtemps.
En effet, il y a quelques mois, j'ai voulu télécharger une application de lampe de poche. Un truc tout con qui allume le flash de l'appareil photo en un clic et dont on peut mettre un raccourci sur son bureau. Je me suis donc rendue sur le marché d'application de mon smartphone Android et ai recherché une application répondant à ce besoin.
Et là, j'avoue que j'ai été fort étonnée.
Déjà, par le poids des applications. C'est une info assez peu mise en valeur, il faut chercher un peu pour trouver combien pèse une application. Mais j'ai un passif d'utilisation d'un smartphone low cost, le genre où il faut désinstaller les mises à jour des applications systèmes pour être bien sûr d'avoir assez d'espace dispo pour recevoir ses SMS ... donc c'est une information que je regarde toujours avec attention.
Donc bref, les premières applications proposées pesaient aux alentours de 5 Mo.
J'ai souvenir d'avoir utilisé (en dépannage) une distribution linux complète pesant à peine le double ! M'enfin bref, admettons que je me résigne à en installer une tout de même.
Et là surprise, pour allumer la lampe de mon appareil photo, elle me demande des autorisations tout à fait incongrues telles que l'accès à mes contacts (WTF ??).
Le site Snoopwall a d'ailleurs tout récemment publié un article dressant également ce constat.
En plus parano. Moi, je m'étais naïvement dit que les développeurs avaient dû coder ça dans l'urgence et dans le besoin d'une lampe de poche, et qu'ils avaient oublié de retirer les dépendances et les autorisations non nécessaires ... Ah, l'insouciance du grand public :p
Donc bref, ceci n'est qu'un exemple tout à fait quelconque, mais cela fait réfléchir à ce que les gens mettent dans les applications que nous installons les yeux fermés parce que c'est pratique et que la distribution de nos données privées ne nous tracasse pas plus que ça.
Mais plutôt que de se lamenter, je vous propose de vous parler de deux alternatives, qui apportent des solutions à ces deux problèmes cités plus haut.
Fuir les applis qui nous espionnent
Étonnamment, la solution à ce problème est assez simple. Il se trouve qu'il existe un autre marché d'application, ne proposant que des logiciels opensource et fournissant des indications sur le niveau de confiance que l'on peut attribuer à ces applications. Ça s'appelle F-droid, et c'est téléchargeable et installable sur son téléphone de manière tout à fait triviale.
Ce que j'apprécie particulièrement, c'est le fait qu'il prenne en charge les applications déjà installées.
Par exemple, lorsque j'ai installé F-droid, il m'a indiqué que j'utilisais les applications suivantes qu'il avait lui-même dans sa base d'applications : OSMTracker (une appli de contribution à OSM qu'elle est bien) ou encore Firefox.
Lorsqu'on navigue sur une application, en plus de la description de l'application, il nous propose (en gros, gras et rouge) des avertissements sur l'application. Par exemple, pour Firefox, il me met en garde du fait que "cette application promeut des extensions privatives" (en effet, des addons peuvent être installés, et ne sont pas nécessairement opensource(s?)) et également que "cette application épie et rapporte votre activité (en effet, des stats sont envoyés régulièrement aux développeurs pour améliorer le navigateur ; fonctionnalité bien sur désactivable dans les paramètres).
Nous voilà informés et donc en mesure de faire des choix pertinents !
Quelques points négatifs tout de même : je suis souvent tombée sur des applications peu abouties et où il fallait un peu lutter pour trouver comment ça marche (voire même ce que ça rend comme service).
Ce n'est pas sans rappeler les applications libres d'il y a quelques années, où rien qu'à voir l'IHM, on sentait bien que ça avait été fait par des geeks qui en avaient eu le besoin et non par une entreprise qui fait un logiciel pour rendre un service facturé à des utilisateurs clients ...
Mais pas de généralisation hâtive, on y trouve également quelques applications très satisfaisantes : j'ai par exemple découvert avec surprise Twidere, qui est un client Twitter que j'utilise maintenant régulièrement.
J'y ai également trouvé ma lampe de poche, qui pèse 112 ko (oui oui), est distribuée sous licence Apache 2 et ne demande que l'autorisation d'accéder à mon appareil photo et de bloquer l'extinction automatique de l'écran pendant qu'elle est en cours d'utilisation.
F-droid répond à la problématique des applications qui, sous prétexte de gratuité, bafouent notre droit à la vie privée. Mais ça ne répond pas nécessaire au problèmes des applications codées avec les pieds qui prennent tout l'espace disponible sur le téléphone inutilement.
Pour répondre à ce problème, j'ai trouvé une solution du côté de Mozilla.
Fuir les applications qui pèsent trop lourd
Pour bien comprendre, je pense qu'il est important de resituer le contexte. Contrairement à ce qu'on pourrait naïvement penser, Mozilla est une fondation qui a pour objectif, non pas de conquérir le monde avec un navigateur qui ressemble à un renard de feu / un panda roux. Non, Mozilla a pour but de favoriser l'accès à internet. De désenclaver les utilisateurs enfermés dans leurs systèmes privateurs en leur offrant un accès universel (notemment via le web).
Le navigateur Firefox est un outil qui répond très bien à ce besoin.
Thunderbird également, en nous rappelant que le mail est un outil de communication et non un logiciel Microsoft ou une IHM web de Google.
Et pour le mobile, les applications Firefox pour Android répondent également à ce besoin.
En effet, ces applications sont des encapsulations d'applications web qui s'installent et s'utilisent comme des vraies applications Android.
L'intégration des ces applications dans l'éco-système Android est réellement bluffant : ces applications
- s'installent comme des app android à partir d'un marché d'applications
- sont listées avec les autres applications dans le système
- se mettent à jour comme les autres applications
[EDIT 2016 : Mozilla a mis fin à ce programme, il n'est plus possible d'installer sur Android des applications FirefoxOS avec Firefox pour Android. Mais les applications Firefox OS qui sont des réelles appli web restent utilisables sur Android (c'est le cas d'OpenBeerMap)]
Une fois installées, il est même parfois difficile de les différencier des autres. Ici, OpenBeerMap, installée sur un Android depuis le marché d'application de Firefox :
Un point important à noter : ces applications peuvent fonctionner hors ligne (si elles sont bien foutues. Pas OpenBeerMap, donc). Ce sont les technologies du web, mais ça ne veut pas forcément dire qu'un accès au web est nécessaire à tout moment.
Bon ok c'est cool me diriez-vous, mais une application, en général, ça rend un service un peu plus avancé qu'un site web. Effectivement, mais Mozilla a aussi une réponse pour ça : des API d'accès au matériel sont en développement et en cours de standardisation.
Elles permettent donc à des applications web d'accéder à l'appareil photo ou aux contacts, d'afficher des notifications ou de faire vibrer le téléphone.
L'implémentation effective de ces APIs est encore au stade expérimental mais il y a déjà des choses sympa qui fonctionnent et on a déjà des services efficaces proposés ainsi.
Les applications sont téléchargeables sur le marché d'application de Firefox OS, le système d'exploitation basé sur les technologies du web que Mozilla a lancé il y a quelques années et qui a débarqué en France depuis quelques mois.
Par exemple, l'application de prise de notes de mon téléphone est une application Firefox pour Android
Elle fonctionne parfaitement hors ligne et sauvegarde en local les notes que je prends.
Elle permet également un stockage dans le cloud, pour permettre d'utiliser l'application depuis plusieurs terminaux.
Sans mentir, c'est sans doute une des meilleures appli de prise de note que j'ai testées sous Android.
C'est aussi sur le marché d'application de Firefox OS que j'ai trouvé l'application de météo que j'utilise au quotidien : l'appli F&C
Avec un design simplifié au max mais néanmoins convaincant et terriblement efficace, elle permet d'avoir une tendance sur la météo. Et elle pèse environ 350 Ko (dont la moitié occupée par des données, telles que les endroits où j'ai voulu connaitre la météo et que j'ai sauvegardés).
Ces applications battent des records de poids. Mais pour le moment, elles ne répondent pas à ma première problématique et il est aujourd'hui difficile de savoir si elles sont utilisées pour collecter des données sur leurs utilisateurs.
Espérons qu'une solution adressant ces deux problématiques verra le jour prochainement.
juil. 05, 2014
Ce samedi, c'était la chasse aux trésors de
Paris !
Mes acolytes et moi nous sommes donc lancés sur la trace d'Érasme et de
sa bien aimée !
Voir en plein écran
juin 20, 2014
S’il y a une région qui se prête particulièrement aux railtrips comme je
les aime, c’est bien la région PACA.
Je ne cesse de m’émerveiller de tout ce qu’on peut voir et faire en
prenant un TER à moins de 5 euros.
J’ai en effet profité du week-end de l’ascension pour réaliser deux
petits railtrip fort sympathiques, quoique, pour changer, j’ai encore eu
des grands moments de solitude face aux bornes de vente de billets.
Départ d’Antibes, direction Beaulieu-sur-Mer pour une petite promenade
le long de la mer, vers randonnée vers St-Jean-Cap-Ferrat
Direction les bornes pour acheter des billets.
Pour ma part, je me dirige vers la borne classique qui vend des billets
pour les trains grandes lignes mais aussi les TER (les jaunes moches
habituelles) pour acheter deux billets (pour un de mes acolytes et
moi-même)
Je saisis mes 342 options nécessaires jusqu’à arriver au moment où il
faut saisir son numéro de carte voyageur ou son numéro de carte jeune.
Mon acolyte commence à farfouiller dans ses affaires, ça traine ça
traine et loupé ! il faut tout recommencer depuis le début.
Vu que les autres acolytes ont libéré une borne TER, je migre vers
celle-ci car j’ai souvenir qu’elles sont plus simples à utiliser.
Là effectivement, il n’est pas nécessaire de donner son numéro de carte
voyageur (de toute manière, avec un billet si peu cher, on ne cumule
même pas de points de fidélité !), je passe sans encombre l’étape du
choix de la zone (bleue ou blanche) grâce à l’étiquette positionnée
au-dessus de l’écran (pas comme à Banyuls-Sur-Mer) et j’arrive
rapidement au moment où il faut payer. Là, dans la précipitation, je me
trompe et je mets ma carte bancaire dans la fente réservée à une autre
carte (carte d’abonné TER ? je ne sais plus). Argh, la borne plante. Il
faut attendre qu’elle redémarre.
Bon aller, troisième essai, cette fois-ci c’est la bonne, je suis
finalement en possession de mes deux billets. Comme vous pouvez le voir,
j’ai toujours autant de mal à utiliser les bornes SNCF …
Compostage, et direction la plage !
La petite promenade en train est assez rapide, et laisse place à une
vraie promenade sur le littoral, entre la mer et les montagnes.
Sur le chemin, nous apercevons, entre autres, le village perché d’Èze,
où nous allons le lendemain !
Je vous épargne les détails, passons directement au lendemain.
De même, tout commence dans la gare d’Antibes, au moment d’acheter son
billet de TER.
Rebelote, je sélectionne les options, je cherche la zone, etc. Au bout
de quelques étapes, je me rends compte que je me suis gourée : j’ai
sélectionnée 12/25 découverte au lieu de carte jeune : je recommence
tout.
Pour rien, visiblement, c’est le même prix.
Mais impossible cette fois d’acheter plusieurs billets en même temps …
zut, les bornes se ressemblent mais ne sont pas exactement les mêmes.
Je ne voudrais pas lancer une théorie du complot mais quand même, si on
avait voulu rendre l’achat de billet de train compliqué, on ne s’y
serait probablement pas pris autrement.
Bref, je refais tout deux fois, et c’est parti !
Ou pas, vu que le prochain train est en fait dans une heure.
Du coup, j’ai proposé à mes acolytes de cartographier sur OSM
l’accessibilité de la gare d’Antibes mais étonnement, la proposition de
la partie de UNO sur la plage a obtenu plus de suffrages …
Comme la plage d’Antibes est un peu loin de la gare, nous décidons
d’aller plutôt à la plage sur une gare de notre parcours. En effet, avec
une sortie située à quelques dizaines de mètres de la plage, c’est la
gare de Biot qui maximise le temps passé à attraper des coups de soleils
en mangeant des +4.
Bon, là en théorie, on aurait dû reprendre des tickets car apparemment,
deux tickets A vers B puis B vers C, ça coute plus cher qu’un ticket A
vers C.
Mais bon, le guichet est squatté par des étrangers qui vont surement à
Monaco, et le temps qu’on trouve un moyen d’échanger les billets déjà
achetés contre les nouveaux sur une borne, c’est sûr qu’on risque de ne
plus faire ni plage ni UNO, et qu’on va rater le fameux train pour
lequel on a initialement pris un billet !
Donc bref, on monte dans le premier train et va se couvrir les fesses de
la poussière blanche de la plage de Biot, puis on reprend notre train
initial et on arrive finalement à Èze !
On se trompe de sortie, on traverse les voies sur un passage à niveau
puis on arrive finalement devant un restaurant. Ça tombe bien, cette
matinée nous a épuisé et nous avons besoin de nous restaurer pour
attaquer l’ascension de Èze par le chemin de Nietzche.
Mais surprise, il se met à pleuvoir …
On attends donc et on en profite pour prendre entrée, plat, dessert,
café et faire des pyramides de sucre.
Ça ne se calme pas, on commence à envisager l’option retour sans rando …
Un bus passe très régulièrement et s’arrête pas très loin, et il semble
aller dans la bonne direction.
Je tente de regarder ses horaires sur mon smartphone low cost : hum, pas
de Centrale de Mobilité dans cette région, pas de système d’information
multimodale régional, il faut que je me tape le site pas du tout adapté
des cars départementaux.
Comme d’habitude, ça fonctionne pas super, on laisse tomber et on se
rabat sur notre ami le train …
Mais au moment où on se décide à partir, la pluie se calme enfin : go go
go !
Nous attaquons donc une ballade très sympathique, d’une grosse
demi-heure..
La vue est magnifique : le regard d’un de mes acolyte s’arrête sur les
falaises, le mien sur la ligne de chemin de fer qui longe la mer ...
Le parcours est bien indiqué, et jalonné de passages informatifs sur
Nietzche qui aurait écrit son fameux bouquin dans ces lieux.
Bien indiqué, bien indiqué … pas partout quand même
Et la randonnée s’achève dans une petite cité médiévale de rues pavées
et de galeries d’art.
Nous trainassons un peu puis prenons le chemin du retour.
À mi-parcours, nous regardons les horaires du prochain TER qui nous
ramène à Antibes et … on se met à courir vers la gare.
Ça me rappelle une idée sur laquelle j’avais bossée dans un hackathon,
pour proposer, entre autres, des trajets TER + rando + TER, en
optimisant les temps pour ne pas se retrouver à courir pour avoir son
train, ou à l’inverse à attendre deux heures à la gare parce qu’on l’a
loupé …
juin 12, 2014
Comme je me suis lancée récemment dans l'internationalisation (je l'ai
écrit une fois, maintenant, ça sera i18n et puis c'est tout) de mon
petit site OpenBeerMap, et comme
c'est ma première expérience en tant que développeur sur ce sujet et que
j'ai vraiment galéré, je vous propose un article à mi-parcours entre le
tutoriel et le retour d'expérience sur l'utilisation de l20n en
javascript.
Comment j'ai pas tout bien compris, si vous avez des retours et repérez
des erreurs, n'hésitez pas à me le signaler ;)
Commençons par les basiques : c'est quoi ?
L'i18n, c'est tout simplement avoir du texte adapté à la langue de la
personne qui utilise le site ou le appli. Mais ce n'est pas tout, c'est
aussi respecter les conventions propres à un pays (voire une région) par
exemple le format de date.
Il existe des bibliothèques dans un peu tous les langages de
programmation pour réaliser ceci. Mon site étant en html et javascript,
j'ai opté pour une bibliothèque js.
Bon, j'ai pas choisi la plus facile mais j'avais envie d'expérimenter la
solution Mozilla : l20n.
En particulier, le format des fichiers de traduction permet de gérer des
tas de choses qui doivent donner bien mal à la tête en temps normal,
comme par exemple les langues avec des déclinaisons (l'allemand, le
polonais, etc), les pluriels (qui s'expriment potentiellement
différemment dans les différentes langues), etc. Mais ... je ne vous
parlerai pas de ça dans cet article : la documentation sur le super
format de fichiers de traduction est abondante et facile à trouver. Je
vais "seulement" vous montrer comment commencer l'i18n d'un site et
arriver au moment où vous écrivez ces fichiers de traduction au format
si merveilleux.
Comment ça fonctionne ?
Un peu de théorie avant de partir tête baissée !
L'idée de base, c'est que l20n recherche tous les éléments textuels
qu'on a identifié comme à traduire, puis les remplace par leur valeur
dans la langue que le navigateur web lui demande d'utiliser, ou par
une valeur dans la langue par défaut (ou par une clef de traduction si
la valeur n'a pas été renseignée nulle part).
Bon, j'avoue que sur la partie en italique : c'est une approximation ...
Il y a moyen de raffiner énormément avec l'API de l20n mais 1) j'ai rien
compris et 2) pour commencer, la langue du navigateur, c'est déjà pas
mal et ça couvre l'essentiel des besoins.
En bref, l20n repasse sur toute la page HTML une fois qu'elle est
affichée entièrement et remplace le texte par les traductions donc
- le texte écrit dans le HTML ne sert à rien : on peut mettre lorem
ipsum à la place, ça marche tout aussi bien
- si le traducteur d'une langue qu'on ne maitrise pas veut nous faire
un coup bas, il ya surement moyen d'injecter du code malicieux dans
les traductions et de le voir interprété par l20n ... mais bon, il
parait qu'ils ont pris leur précaution, ça doit être mon côté parano
...
- si y a des bouts de HTML qui sont ajoutés dynamiquement par du
javascript, ben ... ça va pas être évident, il faudra demander
spécifiquement la traduction à la l20n au moment où on ajoute ce
texte dynamique !
Allons-y !
Prenons donc notre super site en HTML et javascript, et introduisons un
peu de l20n dedans !
Première étape : ajouter l20n.js à la liste des scripts à
exécuter
<script src="l20n.js"></script>
Étape 1 bis : trouver une version de l20n.js qui fonctionne
ça a l'air de rien, mais j'ai déjà commencé à galérer à cette étape.
La doc
indique que la dernière version à jour se trouve
ici.
Perso, je n'ai pas trouvé cette version super fonctionnelle et j'ai opté
pour la version proposée en téléchargement sur le site
officiel.
Étape 2 : configurer l20n avec le manifeste
Le manifeste permet d'indiquer quelles langues sont supportées et quelle
est la langue par défaut.
Le remplissage de ce fichier est assez trivial.
Une fois le manifeste rempli, il faut indiquer où le trouver dans le html.
<script type="application/l10n-data+json">
J'avoue avoir sauté cette étape et utilisé la version proposée dans le
dépot github, dans un premier temps.
Étape 3 : marquer les chaines à traduire
Les chaines à traduire sont identifiées en ajoutant un attribut aux
balises HTML.
Par exemple, si j'ai le texte suivant et que je veux le traduire :
<h1>Bonjour bonjour !</h1>
je le transforme en :
<h1 data-l10n-id="code_hello">Bonjour bonjour !</h1>
Là, si vous enregistrez et retournez sur votre site, il ne plus bonjour
mais "code_hello". C'est normal, don't panic !
Étape 4 : traduire !
En effet, il faut maintenant créer les traductions associées aux
éléments identifiés dans le HTML, à l'aide du fameux format de fichier
trop bien qui gère tout un tas de trucs.
C'est là que vous pouvez retourner sur la documentation de l20n et
trouver votre bonheur !
il faut donc créer un fichier pour chaque langue définie dans le
manifeste, à l'endroit défini par le manifeste
locales
├── ast.l20n
├── en.l20n
├── es.l20n
├── fr.l20n
└── manifest.json
Et dans ce fichier, on peut écrire les chaines à utiliser comme
traduction :
Voilà, y a plus qu'à reproduire les étapes 3 et 4 à l'infini !
Bon, ça ne fonctionne pas super bien avec le navigateur
Chromium ... Mais
sous Firefox, c'est impec.
Encore quelques petites remarques :
Comment tester ?
l20n se fonde sur la langue du navigateur pour choisir la langue parmi
celles du manifeste. S'il ne la trouve pas dans son manifeste, il prend
la langue par défaut du manifeste.
Pour changer la langue du navigateur : dans Firefox, c'est dans Outils
> Options ou Édition > Préférences, onglet Contenu.
Il faut bien sûr recharger la page pour que ça prenne effet.
Subtilités (simples) du format génial :
Si vous avez du texte un peu long : il est possible d'avoir la
traduction sur plusieurs lignes
<about_long_contenu """ Voilà un texte très très long !
Tellement long qu'il tient sur plusieurs
lignes """>
Vous remarquerez peut-être qu'il n'est pas possible de mettre des
balises HTML dans le fichier de traduction :(
Pour gérer le cas où on veut traduire tout un paragraphe qui contient
des liens, voici comment procéder
<div data-l10n-id="credits_contenu">
Carte fournie par <a href="http://www.openstreetmap.org" target="_blank">OpenStreetMap</a>
</div>
puis
<credits "Carte fournie par <a>OpenStreetMap</a>">
pas très intuitif, mais tout à fait efficace.
Pour le reste, je vous invite à jeter un oeil à cette
adresse.
mai 19, 2014
EDIT : pour suivre l'actualité d'OpenBeerMap, suivez le mot-dièse
#OpenBeerMap et le journal
OSM https://www.openstreetmap.org/user/OpenBeerMapContributor/diary
Parfois, lorsque je sors avec des acolytes, on se retrouve dans un bar
qui sert une bière blonde dégueulasse tout juste bonne à faire
des panachés classique, et on découvre en sortant que le bar d’à côté
sert de la bière belge d’abbaye.
Je ne suis pas une grande amatrice de bière, mais je trouve ça plutôt
frustrant.
Et qui dit frustration dit besoin sous-jacent.
Et qui dit besoin dit « il me faut une application pour ça ! »
Bref, c’est ainsi qu’il m’est venu l’idée de faire une carte affichant
les bars et les bières qui y sont servies, à partir des données
OpenStreetMap bien sûr !
Le résultat est visible ici : http://openbeermap.github.io/
Voici comment ça s’est déroulé.
Bon, j’ai commencé par apprendre les bases du javascript (parce que mon
langage de prédilection, c’est plutôt le python, mais c’est quand même
nettement moins adapté pour faire des cartes sur le web).
Je suis parti d’un plugin Leaflet (qui est un bibliothèque javascript
efficace pour afficher des cartes) pour afficher des données à partir
de l’API
Overpass.
L’API Overpass (qui est testable sur cet IDE
(http://overpass-turbo.eu/) permet de faire des requêtes sur les
données OSM avec toutes sortes de filtres.
Dans mon cas, c’est amenity = pub (ou bar ou cafe) et brewery =
{nom de ma bière}
Assez rapidement et sans y connaitre grand-chose, j’ai pu faire une joli
carte avec des cases à cocher pour les différents types de bière :
Puis, j’ai intégré tout ça dans
BootLeaf, une template basé sur
Leaflet et Bootstrap, afin d’avoir quelque chose de responsive et
surtout de plus joli, notamment sur mes info-bulles
Puis, je me suis rendue compte que j’avais pas beaucoup de bars où
l’information était fournie …
Un petit tour sur
Taginfo m’apprend qu’il
n’y a que 15 objets dans OSM sur toute la France avec le tag brewery de
renseigné !
Autant dire qu’il y a du travail de contribution à prévoir si je veux
que mon site ait vraiment un intérêt.
Du coup, j’en profite pour rajouter un petit formulaire permettant de
renseigner directement sur le site les bières dispo, et les autres infos
pertinentes (pour l’instant, j’ai retenu uniquement nom du bar, accès
wifi, heures d’ouverture et heures d’happy hours) :
Les informations saisies dans le formulaires partent directement
enrichir la base de données OpenStreetMap, ce qui me permet de les
re-consommer derrière pour afficher quelles bières sont dispo : un
cercle vertueux à consommer sans modération ;)
C'était la partie la plus délicate à réaliser pour moi qui n'était pas
familière avec l'API d'édition d'OSM et toute la cinématique nécessaire
pour réaliser des modifications ... D'ailleurs, la gestion des conflits
a été soigneusement éludée pour le moment...
Bon, j’ai finalement temporairement retiré les heures (opening_hours et
happy_hours) car je pense qu’un simple champ texte n’est pas très
adapté pour enrichir ce type de donnée : j’oublie moi-même tout le temps
le format de ce tag et je n’ai pas très envie d’implémenter une
vérification du format dans le formulaire, donc ce n’est pas optimal …
affaire à suivre.
Maintenant, y a plus qu’à !
Je compte sur vous pour participer et ajouter les bières servies dans
vos débits de boisson favoris.
Et sinon, c’est tout open-source, et toute contribution est la
bienvenue !
Par exemple, si une âme charitable avec des compétences en graphisme
pouvait me fournir des images (en SVG et libre de droit) des verres à
bières, ça serait merveilleux. J’ai essayé de dessiné le verre de la
Kwak … mais j’ai renoncé !
EDIT : c'est chose faite, tout juste 4 mois après le lancement du
projet : Affligem, Carmélite Triple, Chouffe, Guinness et même Kwak ont
leurs icônes intégrées dans OpenBeerMap
Et l'ergonomie pourrait être améliorée sur le choix des bières (aussi
bien sur l'affichage que la contribution) j'imagine.