Android studio : utiliser un projet / librairie externe

Lorsque l’on utilise eclipse et ADT , il est très simple d’avoir un projet de type « library » et de l’utiliser dans d’autres projets sans en dupliquer le code.

Dans android studio cela semble un peu plus compliqué. Soit la librairie est disponible sur les dépôts de dépendance soit on l’ajoute en tant que module au projet en cours.

Le problème de l’ajout de module c’est que toutes les méthodes simples (File > Import module/ Project; ou depuis la gestion des dépendance) dupliquent le code de la librairies. Inconcevable quand la librairie est mise à jour régulièrement.

Imaginons la situation suivante sur le disque dur :

/Dossier
–Projet1
——–ModuleA
–ProjetLib
——–ModuleLib

Si dans Projet1 je souhaite utiliser le module « ModuleLib » de « ProjetLib » sans dupliquer le code il faut :

Dans Projet1 settings.gradle :

include ':ModuleLib'
project(':ModuleLib').projectDir = new File(settingsDir, '../ProjetLib/ModuleLib')

Et dans Build.gradle :

dependencies {
compile project(':ModuleLib')
}

Et voilà , votre librairie / projet externe est désormais intégré à votre projet.

J’ai testé la fibre d’Orange

Comme vous l’avez peut être déjà lu sur cet article, je suis passé à la Fibre d’Orange. Après presque 3 mois voici , un petit retour , pour ceux qui souhaiteraient tenter l’expérience. Autant vous prévenir c’est pas très glorieux …

Offre Triple play oblige je détaillerais l’offre sous ses 3 aspects.

1- Internet

Avant la fibre j’étais chez Free en ADSL avec une Freebox Révolution et une ligne téléphonique plutôt correcte. Des débits réels aux alentours de 18Mb en DL et 1Mb en UL. J’ai basculé sur la fibre pour deux raisons :

  1.  L’upload plus en accord avec mes utilisations « cloud »
  2.  Le raz le bol de la politique de free sur le peering avec de nombreux services internationaux

Sur l’internet Orange est très bon , rien à dire. Un débit en DL plus important que l’offre proposé (300Mb au lieu de 200) , des services tels que youtube qui marchent parfaitement , bref le réseau tient la route !

origin

Téléchargement … et non c’est pas en local ^^

Les débits en upload laisse enfin entrevoir l’intérêt des offres cloud pour particuliers, un dossier synchronisé avec internet est presque transparent, bref c’est le confort !

La box internet n’est pas du niveau de la freebox révolution , mais soyons honnête , elle est amplement suffisante pour une utilisation normale voir avancée. Le seul regret c’est la non compatibilité fibre , il faut passer par un boitier supplémentaire. Pour une box toute récente , c’est quand même limite !

2- TV

Note : Depuis la mise à jour de février 2014 , une bonne partie des bug TV semblent résolus

Avec la télévision les problèmes commencent. Je passe sous silence la partie multimédia très en retrait par rapport à la Freebox pour me concentrer sur la partie TV qui concerne le plus grand nombre.

La box TV est un nid à bug ! Je pense ne pas avoir passé une semaine sans devoir rebooter complètement la box (et donc subir l’initialisation trèèèèès longue). Quelques exemples en vrac :

Un rectangle noir reste affiché en permanence sur l’image :

IMG_20131127_183047La description de la chaîne se réduit mais ne disparaît jamais :

photo 2L’interface des réseaux sociaux apparaît sans aucune raison en changeant de chaîne et de manière … particulière :

photo 3

 

Et ce n’est qu’un échantillon … Si la box n’avait que 3 mois , admettons mais là … c’est juste du foutage de gueule; du débogage, j’en fais toute la journée , c’est pas pour continuer quand je rentre chez moi ! Je précise quand même que ma box est à jour à la date de rédaction de cet article.

La télécommande n’est pas en reste non plus , rassurez vous. Après moins d’un mois d’utilisation piles à changer. Je me dit que les piles fournies étaient sans doute de mauvaise qualité ou que la télécommande est restée coincée sur un bouton , bref , je change les piles. Même chose le mois suivant alors que cette fois j’ai bien pris soin de toujours la ranger et de l’équiper de piles de qualité …

Et puis tant qu’on parle de télécommande , parlons donc du changement de chaîne, j’espère que le temps de passage entre deux chaines n’est pas lié à la connexion, sinon je plains les utilisateurs sans la fibre (désactivez votre bloqueur de pub si la vidéo n’apparaît pas) :

 

Plus de 5 secondes entre la disparition de la chaîne A et l’apparition de la chaîne B , faut être détendu …

 3- Téléphone

Terminons avec le meilleur , le téléphone. J’ai souhaité porter mon numéro en 09 de free vers Orange ,  à priori pas de problème. Sauf que depuis le 27 août date de mon inscription toute personnes ayant une ligne non Orange (Sfr,Bouygues,Free …) ne peut pas me joindre et tombe sur le message « Numéro non attribué ».

Et c’est pourtant pas faute d’avoir contacté le service technique. Je met de coté les 5 appels nécessaires pour obtenir un interlocuteur qui comprend ce qu’on lui explique , pour me concentrer sur les « techs » N2 qui m’appellent à peu près toutes les semaines en me disant : « C’est bon monsieur , le problème il est résolu » , ce à quoi je répond « Non ! » à chaque fois (parce que oui j’essai d’appeler 3x par jours chez moi -_-‘ ) . La discussion se termine par un « Ah d’accord , je lance une intervention ». Ça fait maintenant un mois et demi que les interventions se lancent et presque 3 mois que je n’ai pas de téléphone entrant (parce que je peux appeler quand même , sont sympa chez Orange).

4- Conclusion

Un SAV nullisime , un réseau de bonne facture , des pratiques commerciales douteuses, du hardware et des services médiocres, voilà comment on peut caractériser Orange , premier opérateur de France… tout fout le camp ma bonne dame.

5- Mise à jour 2015

J’ai quitté Orange (déménagement zone non fibrée) en avril 2015 après 2 ans de fibre dont presque 6 mois à 500Mb/s. Au cours de ses 2 années la box tv s’est améliorée et a gagné en stabilité. En revanche toujours bien dessous des autres en terme de fonctionnalité et d’interface. Pas de reproche coté réseau avec une stabilité exemplaire et des débits impressionnant

De free à la fibre Orange

Un beau jour dans le sous sol de ma résidence je découvre une boite avec des étiquettes FFTH. Le sain Graal était à portée de main : le très haut débit.

Quelques temps plus tard , un commercial orange vient me démarcher chez moi. Il avait sans doute du flairer le gamer/downloader compulsif. Quelques gribouillis plus tard me voici client Orange après pas loin de 10 années chez Free.

Ce qui m’à poussé vers orange est assez simple :

  • Pas de fibre Free sur Dijon (à l’heure actuelle)
  • Le peering Free vers certains service devenu insupportable
  • Mon besoin d’upload (envoi de vidéo/photo, utilisation d’un NAS)
  • La politique de Free avec l’adgates que j’ai eu du mal à accepter.

Autant de bonnes raisons qui m’ont fait changer d’opérateur.

Lors de ma souscription Orange , j’avais fixé un rendez-vous pour l’installation le 30 août. Quelques jours plus tard on me rappelle pour changer ce rendez-vous; Je choisi le 27 , je reçois un sms de confirmation , tout va bien …

Le 26 aout alors que j’aurais du recevoir une seconde confirmation la veille , je reçois un second suivi de commande avec un numéro différent. Inquiet je contacte le support orange qui ,après 20 minutes d’attente, m’informe que je ne suis pas éligible à la fibre , ce serait le syndic bloque son installation dans l’immeuble.
J’essai vainement d’expliquer à cette délicieuse conseillère que la fibre est déjà installée mais elle n’en démord pas et finie par me dire que mon dossier est bloqué et qu’il n’y peuvent rien. Elle conclue la discussion en me raccrochant au nez , sans doute parce que je commençais à perdre patience devant un tel niveau de nulitude !

Par acquis de conscience j’appel le syndic qui me confirme qu’il n’y a aucun problème.

Quelques minutes plus tard je reçois un coup de téléphone d’un autre interlocuteur, qui semble gérer les rendez vous technicien. il m’explique que mon dossier n’est pas complet ce qui empêche la venue du technicien. Je lui raconte donc mon histoire du double suivi de commander. Et là magie en 3 minutes chrono il comprend qu’il y’a un problème dans la gestion des dossiers , regroupe les deux et me confirme la venu des techniciens !

Mardi 27 , les techniciens sont là (ouf) , je leur explique que j’aimerais que la fibre arrive dans mon placard technique, pas de problème me dit on.
1h30 plus tard , pas un seul trou de percé et la box internet est reliée à la fibre. Des mecs compétents , ca fait plaisir.

Arrive le moment de là tv , je connecte mes CPL (achetés puisque non fournit par défaut par Orange), on branche le décodeur TV et là c’est le drame. L’afficheur LCD du décodeur est HS.
Super technicien à la rescousse , il part chercher un autre décodeur qui cette fois fonctionne.

On me demande si j’ai reçu ma carte TV , je répond que non. Super technicien en à une dans son matériel et me la donne. Sauf que évidemment carte pas reçue = TV pas activée sur mon compte.
Ce n’est qu’après un appel et +/- 6h d’attente que la TV voudra bien fonctionner.

Coté internet rien à dire , les débits sont en rendez vous , quoi que le ping est parfois un peu élevé pour de la fibre , mais je vais pas faire la fine bouche.

debit

Le passage Freebox Revolution => Livebox Play est dur. La liveBox fait le minimum syndical gestion du DHCP , firewall , redirection de port, DMZ. En somme du très classique. Pas de fonction NAS , pas de centre de téléchargement , bref tous les petits plus de Free ne son plus de la partie. Notez que la box ne reçois pas directement la fibre , c’est un module supplémentaire qui redistribue en ethernet sur la livebox … dommage.

Du coté de la TV c’est beaucoup moins glorieux. Je laisse de coté le fait que Orange à trouvé le moyen de se tromper dans le pass avantage que j’avais choisi pour me concentrer sur leur nouveau décodeur.
La partie lecteur multimédia est ridiculement mauvaise. Ca ne lit pas les sous titres , la plus part des mkv ne marchent pas et le moindre format un peux exotique ne se lance pas , bref c’est nul.

J’ai pas non plus trouvé le moyen d’accéder directement au disque dur de la box pour y déposer des vidéos , j’imagine qu’il est considérer comme un disque d’enregistrement et c’est tout …

La partie tv est honteuse. Plusieurs fois par jour l’image se freeze ou le son se décale. Pour le coup le débit n’est pas en cause.
Le temps de zapping est étrangement long mais en revanche la qualité vidéo en HD est plutôt bonne. La catchup TV semble bien fonctionner, contrairement à Free !

L’IHM ne vaut pas celle de la freebox revolution mais reste très correcte. Il manque cependant quelques fonctionnalités qui semble évidente. Par exemple quand on est sur une chaîne impossible de savoir quel va être le programme suivant , ou alors j’ai pas trouvé …
La télécommande, minimaliste, l’est peut être un peu trop. Difficile de l’attraper dans le noir et de pas se tromper de bouton. Le joystick point central de la navigation est loin d’être ergonomique et une simple croix directionnelle aurait été bien plus pratique.
Le verso de la zapette est plutôt bien pensé puisqu’il permettra de taper du texte , chose délicate avec la freebox à moins de passé par une appli sur smartphone.

zapette

Au final cette transition c’est fait dans la douleur. Certes le débit est vraiment agréable et l’upload ouvre enfin les portes des usages « cloud » dans de bonne condition mais à quel prix ?
Pour retrouver un service comparable à la Freebox Revolution j’ai du :
– Acheter 2 CPL : ~ 70€
– Acheter un lecteur multimédia : ~ 150€

Du matériel pas perdu mais pour une box sortie bien après sa principale concurrente le bilan est lourd (sans compter qu’il faut louer tout ça 3€/mois).

Félicitation tout de même à Orange qui à une vraie volonté (obligation?) de développer la fibre contrairement aux petits copains qui semble trainer la patte.

Mr free si tu fibres Dijon , je suis près à revenir 😉

Android : Répéter une action (timer)

Dans android pour répéter une action à intervalles réguliers on peut utiliser timertask , mais pour d’obscures raisons , il m’est arrivé d’avoir des problèmes avec ce timer.
Du coup, une solution qui semble fonctionner à merveille est l’utilisation d’un handler et d’un runnable :

private Handler myHandler;
private Runnable myRunnable = new Runnable() {
@Override
public void run() {
    // Code à éxécuter de façon périodique

    myHandler.postDelayed(this,500);
    }
};

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myLayout);

    myHandler = new Handler();
    myHandler.postDelayed(myRunnable,500); // on redemande toute les 500ms
}

public void onPause() {
    super.onPause();
    if(myHandler != null)
        myHandler.removeCallbacks(myRunnable); // On arrete le callback
}

On demande simplement au handler un appel retardé du runnable (ici 500ms) puis dans le runnable on répète cette opération.
On rentre ainsi dans une « boucle infinie » qui nous permet d’exécuter le code du runnable à intervale régulier.

Ne pas oublier de stopper le tout avant de quitter l’activité (ou avant) via removeCallback(Runnable).

Netbeans connexion FTP et JDK / JRE 7

Si vous utilisez Netbeans 7 sous Windows 7 avec le JRE ou le JDK 7 vous aurez peut être remarqué que les connexions FTP ne marchent pas correctement à cause du firewall Windows et ce malgré une règle autorisant le FTP.

La solution est de désactiver l’analyse des requêtes PORT et PASV par le firewall Windows . Pour se faire ouvrez simplement une ligne commande et tapez :

netsh advfirewall set global StatefulFTP disable

Source

Netbeans et subversion 1.7

Si vous utilisez Netbeans et que vous versionnez votre code sur un dépot subversion mis à jour en version 1.7 vous aurez sans doute remarquez qu’il n’est plus possible de versionner votre code depuis votre IDE. La faute au client SVN intégré dans netbeans qui n’est pas à jour (en tout cas en version 7.1). Cependant tout n’est pas perdu !

Modifier les options Netbeans

Netbeans propose une option pour configurer subversion. Rendez vous dans:

 tools > options > Miscellaneous > versionning > Subversion

Vous allez ici pouvoir spécifier un executable pour le client SVN à utiliser. Si vous avez tortoise d’installer il suffit d’aller chercher l’executable dans le dossier /bin de votre installation. Sinon vous pourrez télécharger un client chez collab.net par exemple.

Selon les cas cette simple manipulation peux suffire. Pour moi ce n’était pas le cas , il à donc fallut modifier un peu le raccourci qui lance Netbeans (sous windows) :

Rajoutez

-J-DsvnClientAdapterFactory=commandline

à la fin de la ligne qui lance l’executable Netbeans afin de forcer l’utilisation du client spécifié dans les options. Relancez Netbeans et tout devrait fonctionner avec un Subversion 1.7

Android upgrade sqlite

Une action qui peux se révéler délicate dans une application android c’est la mise à jour de la base de données sqlite lors de la publication d’une nouvelle version de votre app.
Le but étant d’arriver à modifier votre schema sans pour autant perdre les données que vous utilisateurs pourraient avoir enregistré.

Le problème qui se pose , c’est que sqlite à une fonction ALTER TABLE très limitée.
Vous pouvez renommer une table :

ALTER TABLE table1 RENAME TO table2

ou ajouter une colonne à vote table :

ALTER TABLE table1 ADD COLUMN newcolonne

Mais si vous avez besoin de modifier une contrainte ou encore le type d’un champs et bien ce n’est pas possible. il faut donc sauvegarder les données et les réinjecter dans une autre table.

Voici un petit exemple :

public class DBHelper extends SQLiteOpenHelper
{
	public DbHelper(Context context, String name, CursorFactory factory,int version) 
	{
		super(context, name, factory, version);
	}
	
	@Override
	public void onCreate(SQLiteDatabase db) 
	{
		//Création des tables
	}
	
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
	{
		//Mise à jour de la bdd de v1 à v2
		if(oldVersion == 1 && newVersion == 2)
		{
			try {
				db.beginTransaction();
				//Création de la nouvelle table, avec toute les modifications
				db.execSQL("CREATE TABLE table1_tmp (a,b)"); 
				//Transfert des données de table1 vesr table1_tmp
				db.execSQL("INSERT INTO table1_tmp (a,b) SELECT (a,b) FROM table1");
				//Suppression de l'ancienne table
				db.execSQL("DROP TABLE IF EXISTS table1");
				//Renomage de la table nouvellement créée afin de prendre la place de celle supprimée
				db.execSQL("ALTER TABLE table1_tmp RENAME TO table1");
				db.setTransactionSuccessful();
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				db.endTransaction();
			}
		}
	}
}

On utilise ici une transaction pour s’assurer de ne pas perdre de données au passage. Si jamais quelque chose se passe mal , les modifications seront rollback automatiquement.

Wget derrière un proxy

Comment utiliser wget derrière un proxy sous linux et sous windows ?

Créer un fichier .wgetrc (attention au point) puis le remplire comme suis :

http_proxy = http://ip_proxy:3128/
use_proxy = on
wait = 10

Si votre proxy nécessite une authentification vous pouvez ajouter les options :

http_user = user
http_password = password

Puis placez le fichier selon votre OS :

  • Pour Linux : A la racine de votre dossier personnel
  • Pour Windows : Dans le dossier ou se trouve l’exécutable wget , par défaut C:\Program Files\GnuWin32\bin