W28Y16 – Fibonacci implementation, compare JS UI frameworks performance, Android viz libraries and Hungarian notation

Fibonacci implementation

Why fibonacci ? Hum, juste because I was asked for this on my last interview and I stupidly failed with it… So, you’ll two different ways of implementing this algorithm:

  • recursive
  • iterative

The first one (recursive), is more elegant but not performant for big numbers (in fact, you’ll crash your memory by doing a recursive fibo for a number like 10000). The second one is in basic iterative loop do/while.

Mathmatics fonction: fibonacci(x) = fibonacci(x-1) + fibonacci(x-2)

Recursive

function fibonacci(n) {
  if (n < 2) {
    return 1;
  } else {
    return fibonacci(n - 2) + fibonacci(n - 1);
  }
}

Iterative

function fibonacci(n) {
  var a = 0, b = 1, f = 1;
  for(var i = 2; i <= n; i++) {
    f = a + b;
    a = b;
    b = f;
  }
  return f;
}

The fibo implementation in a looooot of different languages: http://www.scriptol.fr/programmation/fibonacci.php

JS UI framework perfs

ui_frameworks_comparison My colleague Justin (the tech surveillance killer) just sent me a nice repo about the comparaison most famous UI frameworks you could find. This dashboard allows you to decide regarding performances on:

  • rows creation
  • rows upodating
  • partial rows updating
  • selection of rows
  • swapping
  • etc, etc…

Just follow this link to see the comparison: HERE
And here to see the github repository: HERE

Hungarian notation

The Hungarian notation is very useful for languages with a loosely type like Javascript. This notation method is also used like an identifier to know the expected type of the variable. Some examples of naming variables using this convention:

  • bBusy : boolean
  • chInitial : char
  • cApples : count of items
  • fBusy : float (or flag)
  • nSize : integer (Systems) or count (Apps)
  • iSize : integer (Systems) or index (Apps)
  • dbPi : double (Systems)
  • rgStudents : array, or rangee
  • fnFunction : function name

Wikipedia about Hungarian notation

Android chart/viz libraries

I just tested two different Android chart/viz libraries from this github repo who regroups a good exhaustive list of viz libraries for a lot a languages (including Android of course)

HelloCharts

Very good if you only want to show some column charts, bar charts, lines charts, donuts. Charts are highly customizable :

  • fonts
  • sizes
  • colors (lines, points, axes, …)
  • background
  • with/without points
  • filled spaces
  • etc, etc…

HelloCharts Github Repository

I’ll stress a point, you don’t have any legends for your charts! that’s important because if you want one, you want need to create it manually…

MPAndroidChart

I’ve got some problems while adding MPAndroidChart as a dependency to my Android project, so I switched to HelloCharts. Maybe the wiki was deprecated, in the middle of a new version ?… I don’t know.
Anyway, this library is more complete, and maybe better, so if you are successful on adding this lib to your project: use it!

Animation concept

Nice animation concept by Mario Wahl that you can find on Dribbble.

Because code without design is not really usable, I’ll share, in each weekly article, a design creation that I liked (icon, animation, UI, workflow, …).

preview

A propos de l’algorithme Microsoft Time Series…

MTS en quelques mots…

MTS ou série temporelle en français est un algorithme qui utilise un ensemble d’algorithmes de régression qui permettent de livrer des prédictions sur un jeu de données.

mts_fren

Pour se mettre dans le contexte, un algorithme de régression est une technique de calcul de survenue d’un évènement.

Les séries temporelles sont beaucoup utilisées pour prédire…

  • l’économie
  • les ventes
  • les budgets
  • les marchés
  • les populations
  • etc…

Ci-dessous, voilà à quoi ressemble une série temporelle :

mts_serietemporelle

La différence avec l’arbre de décision ?

Il ne nécessite pas de colonnes supplémentaires avec de nouvelles informations pour prédire une tendance.

Son fonctionnement ?

Deux algorithmes entrent en jeu :

  • Algorithme ARTXP : optimisé pour les prédictions à court terme.
  • Algorithme ARIMA : optimisé pour les prédictions à long terme.

Le modèle se base sur un jeu de données d’origine et un intervalle de temps régulier entre chaque valeur. Ces deux jeux de données sont utilisés pour créer le modèle (série).

Il est possible d’ajouter de nouvelles données au modèle lorsque l’on fait des prédictions et de les intégrer automatiquement aux données de base. Il est important de faire évoluer les prédictions en fonctions des nouveaux jeux de données.

Pour les premières prédictions, l’algorithme ARTXP (court terme) est utilisé. Plus les prédictions s’éloignent dans le temps, plus ces dernières seront déterminées par l’algorithme ARIMA (long terme). Ces algorithmes détectent également les répétitions saisonnières des valeurs pour améliorer les prédictions (pratique pour les ventes etc…).

ARTXP peut se définir comme un modèle d’arborescence autoregressif.