Fermer une modal et recharger la page parente

Voilà un petit script tout bête pour fermer une modal bootstrap  (http://getbootstrap.com/javascript/#modals) et recharger la page qui l’a ouverte.

Je me base sur l’exemple standard donné par la doc (lien ci-dessus) pour les classes (.modal-content) et les Id (#myModal).

Une fois votre traitement fini, appelez le js ci-dessous :

$('.modal-content').html('');
$('#myModal').on('hidden.bs.modal', function () {
window.location.reload(true);
});
$('#myModal').modal('hide');

$('.modal-content').html('');

va vider le contenu de la modal (pour éviter qu’il se réaffiche si la modal est ouverte) ; c’est optionnel
$('#myModal').on('hidden.bs.modal', function () {
window.location.reload(true);
});

passe l’instruction de recharger (reload) la page parente lorsque la modal sera fermée
Et enfin,
$('#myModal').modal('hide');

passe l’instruction de fermer la modal.

Longue vie à Cordova

La semaine dernière, un sondage express est passé sur twitter pour les développeurs Cordova, pour apprécier leur ressenti sur la techno.

Les questions portent sur la documentation essentiellement, et bien sûr sur le niveau de satisfaction à l’utilisation de Cordova.

Comme à la fin il y avait un champ pour indiquer son email, pour poursuivre la conversation avec l’équipe de dév, j’ai laissé mon adresse.

J’ai reçu dès le lendemain un mail me proposant un RV téléphonique. J’ai apprécié la réactivité de l’équipe, et j’ai encore plus apprécié l’échange.

Le RV s’est passé vendredi à 17h30, avec deux développeurs américains, dont l’un de chez Microsoft. Je suis toujours surprise par l’implication réelle des développeurs de chez MS sur les projets libres. Après tout, cela fait des années que MS parle du logiciel libre comme du grand Satan, et leur récent free/libre-washing ne m’a pas vraiment convaincue. Mais force est de constater que si je continue de me méfier de l’entreprise, j’ai pleinement confiance dans les hommes et les femmes qui la composent (enfin, par au sommet, à la base, bref, les développeurs, quoi 😉 ).

L’échange a duré 45 minutes, en français et en anglais (je pense qu’on est tous sortis épuisés de cette conversation). On est revenu sur les questions sur sondage, notamment la documentation, mais les deux intervenants ont beaucoup insisté pour que j’exprime mes « frustrations » (pour reprendre leur terme) à l’utilisation de Cordova.

Celles-ci ne sont pas nombreuses mais quand j’y repense, ce sont finalement les freins à une adoption plus massive.

L’émulateur

L’émulateur met une plombe à se lancer, et il met 3/4h de plombe à émuler l’appli quand je la relance avec la commande build.

Quand je suis en plein debuggage javascript, à mettre des alert partout, je vois bien que je manque d’outils pour développer, mais en plein dév, on est dans une espèce d’urgence, et on ne prend pas le temps de chercher autre chose, mieux. Donc on soupire, on serre les dents et on patiente.

L’installation

Un point auquel je pense en écrivant cet article, mais que je n’ai pas pensé à mentionné aux développeurs, c’est la difficulté à installer l’environnement de dév. La première fois, cela a pris une journée entière, la 2e fois, une demi-journée (sur un poste différent). J’espère encore gagner un peu de temps la prochaine fois, mais je ne pense pas descendre un jour en-dessous de 3 heures. Il manque toujours un truc : un jdk, un nodejs, un PATH mal configuré… c’est un peu la plaie.

La performance

Même avec une appli très simple, Cordova est *légèrement »* plus lente. Oh, parfois c’est vraiment rien. Mais on *sent* cette différence, et tant qu’on la sentira, les applis natives seront préférées à Cordova.

Somme toute Cordova a encore un peu de boulot, mais manifestement les core-developpers y travaillent. Je ne voudrais pas faire un article qui mentionne uniquement les points négatifs, alors allons-y pour le positif.

La documentation

La doc est bien faite. Vraiment. Complète, avec des exemples. Je lui donne une note de 9/10, pas parce que la perfection n’existe pas mais parce qu’il manque parfois des exemples d’utilisations un peu bâtardes. Ou du moins, des utilisations moins standard. Mais une techno aussi bien documentée, moi je dis que ça vaut le coup de le mentionner.

Les core-plugins

Les core-plugins sont réduits à l’essentiel mais ils suffisent pour développer un projet normalement complexe : manipulation de l’appareil-photo, de la capture de sons et des medias, géolocalisation, file system, accès aux infos du téléphone (du device), gestion de la connectivité, manipulation des contacts, pour ne citer qu’une partie, tout est là.

Bon, sauf les push notifications, qui sont désormais en standard dans à peu près toutes les applis, et qui deviennent donc indispensables.

L’éco-système de plugins

Et justement, des plugins de push notifications, il en existe plein ! ainsi que d’autres, beaucoup beaucoup d’autres, pour faire à peu près tout ce que vous voulez : manipulation du calendrier natif, scan de code-barres, NFC, Bluetooth, … plus de 600 plugins existent à ce jour.

En conclusion

Cordova est un bon environnement pour développer une appli. Facile à prendre en main, multi-plateforme, maintenu à un ryhme appréciable, avec un éco-système encore un peu light mais qui progresse, et bien sûr, libre (licence Apache 2.0). Le fait qu’il soit porté par la fondation Apache et non par un éditeur lui assure un futur chargé de promesses.

Renommer une appli ou comment transformer une bonne idée en désastre

J’ai mis à jour Cordova il y a quelques temps et depuis, les applis que je build portent systématiquement le nom de CordovaApp, ce qui est un peu casse-pied vu qu’on s’emm… à créer le container en indiquant le nom avec

cordova create repertoire nomPackage nomPublic

En faisant une petite recherche, j’ai vite trouvé comment modifier cela : il faut modifier le nom de l’app dans le manifest, par exemple dans AndroidManifest.xml :

<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" 
android:label="@string/activity_name" 
android:launchMode="singleTop" 
android:name="CordovaApp" 
android:theme="@android:style/Theme.Black.NoTitleBar" 
android:windowSoftInputMode="adjustResize">

Changez CordovaApp par le nom de l’app.

Oui mais voilà, en faisant cela, on se retrouve avec un joli message d’erreur :

Unfortunately, AppName has stopped.

Et plus rien en marche, évidemment : impossible de lancer l’app sur l’émulateur ou un téléphone. Voilà donc 10 minutes perdues en cherchant comment renommer une app et 1h perdue pour comprendre pourquoi l’appli ne fonctionne plus.

Si ça vous est arrivé, tout remettre en place n’est pas compliqué, il suffit de désinstaller la plateforme (sauvegardez vos éventuelles autres modifications) puis réinstallez-la :

cordova platform remove android 
cordova platform add android

Si vous souhaitez absolument modifier le nom par défaut de l’app, il faut aller plus loin et la renommer partout. Ci-dessous un lien vers l’explication (attention, non testé, non validé).

http://stackoverflow.com/questions/25717734/rename-application-package-stops-android-cordova-app-from-accessing-internet

 

Comparer des dates mal formattées en Mysql

C’est crade mais ça marche !

En base de données (Mysql), une date sous la forme jj/m/aaaa, stockée dans un champ texte (varchar) peut être requêtée comme une date.

Il faut transformer la valeur jj/m/aaaa sous la forme aaaa-mm-dd avec CONCAT ou CONCAT_WS et des SUBSTRING, puis la comparer avec une date au même format aaaa-mm-dd. Je n’aurais pas parié que ça fonctionnerait, mais si, il est possible d’utiliser des <,> et = évidemment.

Exemple :

SELECT * FROM matable WHERE CONCAT_WS('-', SUBSTRING('monchamp',7,4), SUBSTRING('monchamp',4,2), SUBSTRING('monchamp',1,2)) < '2015-01-14'

ressortira les valeurs inférieures au 14 janvier 2015.

Attention, pour SUBSTRING, le compte se fait à partir de 1 et non de 0 (pour extraire le jour, on a donc bien une position de départ à 1).

En savoir plus :

fonction SUBSTRING

fonctions CONCAT et CONCAT_WS

 

Génération de CSV, WTF ?

Parfois j’ai l’impression que le plus gros de mon boulot consiste à générer des fichiers CSV… J’ai donc une librairie toute prête, améliorée au fil des projets. Elle fonctionne, elle est testée, éprouvée par les ans, elle ne peut pas bugger, pas possible… Eh ben si, et on en apprend tous les jours.

Ce matin j’ai donc généré un CSV en php, avec une ligne d’entête en majuscules. Tout bêtement, ma première colonne est l’ID. J’ai donc mis ID dans ma cellule A1. Normal.

Mais en fait non.

En ouvrant mon CSV avec LibreOffice pour voir s’il s’était bien généré, rien dedans… Ouvert avec un éditeur de texte, le contenu est bien là, mais avec LibreOffice, rien.

Je teste en remplaçant ID par un lot d’insultes, et ça passe… ID serait-il un mot réservé ? ce serait con… et pourtant… Une recherche rapide me fait tomber sur un commentaire sur PHP.net. Le problème n’est pas nouveau et il concerne apparemment tous les tableurs. Si la cellule A1 contient ID en majuscule, le tableur ne lit pas la ligne. Eh ouais c’est comme ça ma brave dame.

Solution : remplacer ID par id, Id, n’importe quoi d’autre fera l’affaire.

Conclusion : insulter le programme est toujours utile pour pister les bugs.