W04Y17 – Git, create a new repository from a current branch, disable HTTP logs in Express, Android mass storage and kill process on specific port

Create a new repo from an existing branch

As you know, it’s strongly recommended to create a new repository if a branch depends to another branch in your project… Basically, if you need to clone a repo twice and checkout each to a different branch to launch your project, it’es very bad!

So, the simplest method in three steps to create a new repo from a current branch is to:

> create your **new_repo** in GitHub
> cd to your local branch 
> git push git@github.com:youraccountname/new_repo +old_branch:master

Now, your new GitHub repository is up to date. The master branch corresponds to the branch in your old repo with all history preserved which is a very good point!

How to disable HTTP request logs in Node/Express.js

When you launch your application built on Node/Express, you’ll probably see a lot of logs for each resources (css, images, js, etc…)

GET /resources/styles.css 200 0ms
GET /js/lib/jmyawesomelib.js 200 0ms
etc...

The solution is to move the logging plugin below the resource plugin in the app init! or comment your morgan module (works on Express.js 4)

//app.use(morgan('dev'));

No more logs!

Mass storage troubleshooting

I figured some problems lorsque je branchais my Google Nexus 5X to my Macbook (also on a Windows machine too). It was impossible to do a mass storage to retrieve the phone content (photos, videos, downloaded files, etc…). I tried all the solutions found on forums and the only software that saved my life is Android File Transfer by Google for OSX.

Download Android File Transfer

Kill process running on a specific port

To kill a port that is running on a specific port, you need to execute the following commands. First, get the list of process running with corresponding ports and info:

netstat -a -o -n

Now, you get a list of process running on your machine, you only have to pick the PID corresponding the port you are looking to kill and replace 8080 below.

taskkill /F /PID 8080

Successfully killed, bye bye 🙂

W29Y16 – Perforce plugin for Sublime, ignoring files, Node.JS prompt and map directions from your Android app

The .gitignore equivalent with Perforce

Easy as Git, you could ignore some files, directories on your code submit. You only have to create a new file named .p4ignore on your workspace root. This file contains a list of rules for ignoring files when adding these to the depot. Example of .p4ignore file:

# Ignore .p4ignore files
.p4ignore

# Ignore object files, shared libraries, executables
*.dll
*.so
*.exe

# Ignore all HTML files except the readme file
*.html
!readme.html

# Ignore the bin directory
bin/

# Ignore the build.properties file in this directory
/build.properties

# Ignore all text files in test directories
test/**.txt

Sublime & Perforce

Due to a team switch I need to use Perforce instead of Git for the source code versionning… and that’s why I was looking for a Perforce plugin for Sublime Text (my favourite IDE for web development).

The only plugin I found is developped by Eric Martel and works fine. It allows you to add, checkout, delete, diff, rename, revert, diff (using p4diff) and list all checked out files. Changelist management is also supported and that’s a very good point.

Node.JS prompt

I’ve found a nice project on Github who allows you to interact with your Node.JS server through your command line. For example, if you have to enter credentials on launching, you only have to import prompt, initialize it and use the get function… Take a look on the repo, there are a lot of functionality.

var prompt = require('prompt');

//
// Start the prompt
//
prompt.start();

//
// Get two properties from the user: username and email
//
prompt.get(['username', 'email'], function (err, result) {
  //
  // Log the results.
  //
  console.log('Command-line input received:');
  console.log('  username: ' + result.username);
  console.log('  email: ' + result.email);
});

Prompt on Github

Get directions from your own app

android_map_intent_google

Implement a navigation in your own app will be expensive in days of development. So, if you want to offer an alternative solution, it’s possible in few code lines (below). This new intent will launch the Google Maps application with start and destionation GPS coordinates. Good solution for a POC in which the navigation is not the main feature.

String from = "20.344,34.34";
String to = "20.5666,45.345";
String endpointURL = "http://maps.google.com/maps?saddr=" + from + "&daddr=" + to;
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(endpointURL));
startActivity(intent);

Dribble login

What a nice Dribble login concept. Based on Material Design with some animations (a lot!). The most interesting animation is maybe these when you switch from login in to sign in with the pink logo who slides to the rectangular submit button. Nice! dribbble_login

MySQL sous Android: fonctionnement, avantages et inconvénients

MySQL est probablement l’une des bases de données la plus utilisée en informatique. Que l’on soit développeur en herbe ou confirmé, on a tous déjà travaillé au moins une fois avec ce système de gestion de base de données. Les géants du monde d’internet tels que Google l’utilisent pour certains sites, applications ou en embarquant directement MySQL au sein de leur solution.

Android & MySQL

Une application Android et une base de données MySQL ne peuvent pas communiquer directement ensemble (c’est un peu comme demander à un Chinois de discuter avec un Polonais), il faut donc implémenter un processus (un peu fastidieux!) qui va faire la connexion entre les deux : le langage PHP.

Visuellement, le processus de communication entre l’application et la base de données :

android_php_mysql

Tous les appels entre l’application et la base de données passeront donc par un webservice en PHP qui se chargera de réceptionner la requête, la transmettre au SGBD et renvoyer une réponse à l’application au format JSON. Le message JSON créé peut ressembler à ça :

{
“successful” : 1,
“response” : “Bravo, l’utilisateur a été ajouté!”
}

Il contient le statut de l’exécution de la requête ainsi qu’un court message qui peut être parsé et affiché à l’écran pour informer l’utilisateur.

Les avantages de MySQL

  • Disponible et abordable pour tous
  • Facile d’utilisation
  • Rapide, sûr et fiable
  • API
  • Open source
  • Portable

MySQL apporte beaucoup de libertés opérationnelles avec des fonctionnalités avancées. Les fonctions de sécurité de MySQL offrent également une protection fiable pour les accès aux données de manière simple.

Les inconvénients de MySQL

  • Limitations fonctionnelles
  • Processus de développement douteux

Selon le choix du moteur de la base de données, MySQL peut être allégé de certaines fonctionnalités (il faut s’assurer que les fonctionnalités primordiales à notre besoin soient incluses). Attention également aux accès concurrents qui peuvent poser quelques problèmes.

Notre expérience sur cet outil

L’utilisation de MySQL dans notre application n’a pas été nécessaire donc nous ne l’avons pas utilisé. Pour la même raison que SQLite, les données que nous utilisons sont directement stockées dans les bases de données de Twitter. Cependant nous l’avons utilisé de nombreuses fois pour des projets étudiants et en entreprise. MySQL est une référence dans les systèmes de gestion de base de données.

Gérer les rapports d’erreurs d’une application Android avec Acra

ACRA est une librairie pour les développeurs d’applications Android qui permet l’envoi automatique de rapports de crash lorsque l’application s’arrête brutalement ou ne fonctionnement pas correctement.

1. La philosophie de la libraire

Directement inspiré de ce que propose Alocaly (envoi de rapports d’erreurs par e-mail qui nécessite cependant une confirmation à chaque envoi), ACRA fait beaucoup plus fort. Là où certaines librairies impliquent d’avoir un serveur dédié sur lequel les rapports d’erreurs sont hébergés, ACRA intègre l’envoi/stockage des rapports directement sur une feuille d’un tableur de type Google Spreadsheets.

La librairie est Open Source, sous licence Apache. Elle peut donc être utilisée dans nimporte quelle application (payante ou gratuite).

2. Qui utilise ACRA ?

D’après AppBrain, la célèbre source d’informations sur les applications du Google Play Store, ACRA est utilisé dans 2,76% des applications disponibles sur la plateforme de Google (chiffres à Janvier 2015).

acra_install_google_play

 

Les applications qui implémentent le service proposé par ACRA n’appartiennent pas à une catégorie en particulier. On retrouve aussi bien des applications de productivité comme Adobe Reader que des jeux ou des launchers.

Le récapitulatif complet de l’utilisation de la librairie ACRA : http://goo.gl/w6vQ0K

3. Les avantages

Parmi les nombreux avantages de cette librairie :

  • Hébergement par Google (Google Docs Sheets)
  • Si la connexion internet n’est pas active au moment du crash, le rapport de bug est stocké en local et sera synchronisé ultérieurement
  • Ne nécessite pas la validation de l’envoi par l’utilisateur
  • Simplicité de mise en place

4. L’interaction avec l’utilisateur

Lors de l’arrêt brutal de votre application, vous avez 4 possibilités d’interagir avec l’utilisateur pour l’informer :

  • Silencieux : Les rapports d’erreurs sont envoyés en fond de tâche
  • Toast : Un message est affiché temporairement et les rapports d’erreurs sont envoyés simultanément
  • Notification : Une notification est ajoutée dans la “Status Bar” et le rapport sera envoyé seulement si l’utilisateur accepte l’envoi du rapport (avec un commentaire optionnel).
  • Boite de dialogue: une boite de dialogue contenant les informations du rapport d’erreur.

5. Mise en place

La simplicité de mise en place est un des principal avantage de ACRA. Ci-dessous, la procédure de mise en place de la librairie au sein d’un projet d’application Android (Eclipse) :

  • Télécharger la dernière version de la librairie ACRA : acra-X-X-X.jar (4.5.0 au 06/02/2015)
  • Placer la librairie dans un dossier “libs” à la racine de votre projet
  • Ajouter la librairie au “Build Path” de votre application :
  • Project> Properties > Java Build Path > Add JARs…
  • Création de la classe “MyApplication” qui hérite de android.app.Application.

acra_myapplication

  • Ajouter la classe “MyApplication” à l’élément <application> du fichier MANIFEST (/AndroidManifest.xml) et donner les droits d’accès à internet pour l’application.

acra_manifest_myapplication

  • Donner la permission à l’application de se connecter à Internet

acra_permissions_internet

C’est prêt! 

 

Générer une Android Key Hash de développement par le code

Pour intégrer l’API Facebook à votre application Android, une Android Key Hash de développement (ou de prod) est demandée.

Une solution consiste à télécharger et installer OpenSSL pour générer cette clé mais la solution que j’ai choisi moi, c’est de la générer par le code (en JAVA bien sur).

Voilà la solution :

public static String printKeyHash(Activity context) {
PackageInfo packageInfo;
String key = null;
try {

// Getting application package name, as defined in manifest
String packageName = context.getApplicationContext().getPackageName();

// Retriving Package info
packageInfo = context.getPackageManager().getPackageInfo(packageName,
PackageManager.GET_SIGNATURES);

Log.e("Package Name=", context.getApplicationContext().getPackageName());

for (Signature signature : packageInfo.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
key = new String(Base64.encode(md.digest(), 0));

// String key = new String(Base64.encodeBytes(md.digest()));
Log.e("Key Hash= ", key);

}
} catch (NameNotFoundException e1) {
Log.e("Name not found", e1.toString());
}

catch (NoSuchAlgorithmException e) {
Log.e("No such an algorithm", e.toString());
} catch (Exception e) {
Log.e("Exception", e.toString());
}

return key;
}

Pour toute autre recherche sur les fonctionnalités de l’API Facebook en elle-même, la document officielle est très bien faite.