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 🙂

SAP UI5 – Data binding without XML view for the sap.m.Table component

Here I’ll describe the best method I’ve found to bind data to the sap.m.Table component without using XML view, so only with JavaScript, programmatically.

Link to the sap.m.Table component in the SAP UI5 documentation.

First, you need to declare your dataset:

var oData = {
    'History': {
        'Entries': [
            {
                'Type': 'nonFolder',
                'Name': 'LCMCompare',
                'Time': 'Jan 9, 2017 2:01 PM',
                'modifiedCount': '1'
            },
            {
                'Type': 'nonFolder',
                'Name': 'Another one',
                'Time': 'Jan 2, 2017 5:55 PM',
                'modifiedCount': '9'
            },
            {
                'Type': 'nonFolder',
                'Name': 'First comparison',
                'Time': 'Jan 9, 2017 4:41 PM',
                'modifiedCount': '4'
            }
        ]
    }
};

After that, you need to declare your columns definitions:

var oTable = new UI5Table({
    headerText: 'Compared:',
    columns: [
        new UI5Column({
            header: new UI5Label({
                text: 'Type'
            })
        }),
        new UI5Column({
            header: new UI5Label({
                text: 'Comparison Name'
            })
        }),
        new UI5Column({
            header: new UI5Label({
                text: 'Date/Time'
            })
        }),
        new UI5Column({
            header: new UI5Label({
                text: 'Difference'
            })
        })
    ]
});

Now, it’s time to declare the table and to define the binding between the data and the columns: (in my case, I’m naming history as the root as my datasource)

var oModelTable = new sap.m.JSONModel(oData);
oTable.setModel(oModelTable, 'history');
var oTemplate = new UI5ColumnListItem({
    cells : [
        new UI5Text({
            text : '{history>Type}'
        }),
        new UI5Text({
            text : '{history>Name}'
        }),
        new UI5Text({
            text : '{history>Time}'
        }),
        new UI5Text({
            text : '{history>modifiedCount}'
        })
    ]
});
oTable.bindItems('history>/History/Entries', oTemplate);

The last line in this example will bind your data following the root > and the path to the array to iterate through. Your table will be rendered with the data in your oData object. I would suggest to attach this binding with an object in your store, so changes will appear automatically.

Preview of the result: sap-m-table_ui5_result

W38Y16 – Setting up ADB on OSX, Android app icons generation, catch key press with Angular & DIY french webserie

Set up adb on Mac OSX

adb ADB is the command line tool to manage your Android phone and so install and run apps or different ROMs for example. Setting up ADB on Mac OSX is not quite easy and I lost time to configure it, so the line below will help you if you have to set it.

echo 'export PATH=$PATH:/Users/[yourusername]/android-sdks/platform-tools/' >> ~/.bash_profile

Generate icons Android app

Link launcher_icon_generator Launcher icons for Android apps are requested to be in several formats, and you’ll spent a lot of time if you want to build them in all the sizes. Here, you can find a tool from Roman Nurik where you just have to upload your image in a good format (512×512 minimum I think), and it will generate it for you in all those formats:

  • xxxhdpi
  • xxhdpi
  • xhdpi
  • hdpi
  • mdpi
  • web
  • hi-res

In addition, you can add some effects like square, circle, vertical/horizontal rectangle etc. Try it!

Bring life to TextView

demo3 Yes, it’s possible and it’s very nice! Thanks to HTextView, you can add some animation effects to your TextView fields. You only have to add the lib dependency to your project:

compile 'hanks.xyz:htextview-library:0.1.5'

and add the element to your xml layout:

<com.hanks.htextview.HTextView
    android:id="@+id/text"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="#000000"
    android:gravity="center"
    android:textColor="#FFFFFF"
    android:textSize="30sp"
    htext:animateType="anvil"
    htext:fontAsset="fonts/font-name.ttf" />

You can find HERE, the github repository to this project hosted by hanks-zyh. Star and share it to your network!

Catch key press with Angular

keypress_white If you want to provide some assistance using keyboard shortcuts in your web app (using Angular as front-end framework), I recommand to use a bower library called angular-keypress (you can find the Github repo HERE). Get it from bower:

bower install --save angular-keyboard-shortcuts

Use it simply like this:

<a ng-click="goToPreferences()" keyboard-shortcut="control+,">Preferences</a>
<a ng-click="openSettings()" keyboard-shortcut="s">Open Settings</a>

Very useful and enjoyable for users, really.

DIY French webserie

A short webserie (8 episodes) about DIY projects is proposed by Arte. It’s called “Fais-le toi-même” and it’s about creativity and inventions by makers. If you are passionate by Arduino and RaspberryPi stuffs or simply curious about it, go to check it!

fais-le-toi-meme-720x330

All episodes are available HERE

One Week Of Hits – Prenez en main les tâches qui trainent!

Have an accomplishment to report every day

Après avoir lu le livre de Chad Fowler, « The Passionate Programmer » qui récapitule un ensemble d’anecdotes, de bonnes pratiques et de résolutions pour les développeurs – un passage a retenu mon attention.

Ce passage parle d’une méthodologie qui consiste à se fixer un but journalier : prendre en main les tâches qui trainent et qui vont vous faire gagner un temps fou! Vous allez donc “faire bouger” UNE TÂCHE QUI TRAÎNE au sein de votre équipe CHAQUE JOUR. Vous savez les trucs qui traînent, que personne n’a encore pris le temps de terminer (où même de commencer d’ailleurs…).

Vous allez les prendre en main!

passionateprogrammer_book

Etape 1 : Isoler

pen-and-paper Pour commencer, il faut bloquer 30 minutes en fin de semaine (le vendredi par exemple) et se mettre dans une salle avec une feuille + un stylo : rien de plus! (ne soyez pas interrompu et ne quittez pas la salle avant 30 min)

Etape 2 : Lister

order Pendant les 30 minutes vous allez lister toutes les choses qui pourraient améliorer votre quotidien et celui de votre équipe (pensez aux choses qui sont relevées lors de vos scrum meetings par exemple). Pensez aux tâches qui feraient gagner du temps chaque jour et que personne n’a encore eu le temps ou l’énergie de développer (« ça serait cool d’automatiser ça… », « il faudrait cleaner ça… », etc.)

goal_outstanding

Etape 3 : Evaluer

heart Maintenant que vous avez une bonne liste de tâches rébarbatives, il va falloir les coster en fonction de leur « gain productivité / coût de développement ». Les tâches qui ont le meilleur ratio doivent être planifiées pour la semaine à venir (c’est évident :))

Etape 4 : Affecter

avatar Les 5 premières tâches doivent être affectées à chacun des jours de la semaine. Par exemple:

  • Lundi – Automatiser la build!
  • Mardi – Ecrire des tests sur le resultset
  • Mercredi – Clean dépendances projet
  • Jeudi – Script déploiement de la web app
  • Vendredi – Fix des warnings de la compilation

Etape 5 : Agir

hammer-nailing-a-nail Voilà, votre planning est prêt! Le lundi d’après, vous allez prendre la première tâche de la liste et agir – Bien sûr, pas la peine de passer des heures dessus et de réaliser la tâche en entier, il faut simplement que ça bouge! Qu’il se passe quelque chose et que vous soyez actif au sein de votre équipe et pas seulement sur les tâches auxquelles on vous attend.

actonit

Le dépassement des objectifs est un très bon facteur de progression à tous points ; il faut alors communiquer sur les efforts réalisés, se rendre visible, et puis c’est tout naturellement que vous deviendrez une référence.


Une application ?

Et puis sinon, j’ai pensé à en faire une application (Android ou Chrome, je ne sais pas encore) puisque d’après mes recherches ça n’existe pas encore. Si quelqu’un est intéressé pour donner un coup de main au dev, je peux partager le repo Github une fois qu’il sera lancé.

La FNAC, viens prendre ton bonnet d’âne du SAV

En novembre 2015, j’ai fait l’erreur d’acheter le dernier Google Nexus 5X qui venait de sortir sur le site de la FNAC au lieu de le commander sur le Play Store, pour profiter du retrait en magasin dans les jours à venir au lieu d’attendre l’importation des US qui allait durer plus longtemps… jusque là j’étais plutôt content… mais maintenant que le téléphone a un problème et ne s’allume plus (ça peut arriver, pas de soucis de ce côté là), je me rends compte de l’importance que peut avoir un SAV au moment de l’achat…

Eh oui, on est en 2016 et vous savez quoi ? Les entreprises qui se foutent du “service client” existent encore et la FNAC en est une! Ils ont un pseudo-monopole et ils se permettent donc de négliger l’après-vente. Ils vendent et après y’a plus personne, en cas de problème, c’est l’enfer.

A titre de comparaison et pour mieux comprendre le retard de service qu’ils ont, voilà le SAV Google vs le SAV Fnac concernant la prise en charge, le prêt, le niveau d’information etc. pour un Nexus 5X.

Fnac Google
Prise en charge NON, à ramener en magasin OUI, retrait à domicile gratuit
Test(s) NON, emballage, feuille à signer, au revoir OUI, plusieurs tests/manipulations par téléphone
Prêt de matériel NON, “ah nan désolé, on n’a pas” OUI, prêt téléphone identique au moment du retrait de l’appareil défectueux
Feedback/Statut NON, après 15 jours, toujours aucune nouvelle JE NE SAIS PAS

En gros :

  • Délai interminable
  • Prêt de matériel ? Connais pas
  • Des infos sur le statut de la réparation ? On s’en fout il a déjà payé
  • etc.

UNE VRAI BOITE NOIRE LEUR SAV!

Avant de faire cet article, j’ai remonté mon mécontentement et le mauvais service après-vente de leur enseigne mais aucune nouvelle de leur part. Ils ont autre chose à faire.

Et quand je vois le nombre de gens frustrés par un tel service après-vente, je me dis qu’il y a réellement un problème…

Capture d’écran 2016-08-21 à 12.28.06 AM

Capture d’écran 2016-08-21 à 12.28.29 AM

Capture d’écran 2016-08-21 à 12.28.54 AM

Capture d’écran 2016-08-21 à 12.29.19 AM

Capture d’écran 2016-08-21 à 12.29.37 AM

Capture d’écran 2016-08-21 à 12.30.00 AM

Capture d’écran 2016-08-21 à 12.31.08 AM