StringBuilder vs StringBuffer vs String.concat – done right | kaioa.com

Publié dans Java | Laisser un commentaire

D’après cet article StringBuilder vs StringBuffer vs String.concat – done right | kaioa.com (en anglais), il est plus avantageux en terme de performance d’utiliser StringBuilder à partir de Java 1.5 (ou StringBuffer pour les versions antérieures) que de concaténer des chaînes de caractères à coups de concat. Les chiffres sont assez parlant !

Each time you append something via ‘+’ (String.concat()) a new String is created, the old stuff is copied, the new stuff is appended, and the old String is thrown away. The bigger the String gets the longer it takes – there is more to copy and more garbage is produced.

Ce que l’on pourrait traduire par :

A chaque fois que l’on concatène à l’aide de String.concat(), une nouvelle instance de String est créée, l’ancienne étant copiée, accolée à la nouvelle, puis jetée. Plus longue est la chaîne de caractères et plus longtemps cela prendra. Donc plus on concatène, plus on créé du déchet.

De plus, le compilateur Java va transformer tout seul les concaténations manuelles avec des « + » ou des « line breaks » en utilisant des StringBuillder::append. Donc on peut utiliser sans problèmes cette écriture ! C’est de loin la plus lisible pour de petites chaînes de caractères. Quant aux autres : StringBuilder à la rescousse !

Voilà qui est bon à savoir 🙂

Pour aller un peu plus loin avec StringBuiler

Symfony, Wamp 2.2 et l’extension PHP intl

Publié dans PHP | Un commentaire

Si vous obtenez des erreurs bizarres en utilisant PHP, notamment avec le framework Symfony, et plus particulièrement dans la gestion des formulaires, et d’autant plus si vous utilisez Wamp : c’est peut-être dû à l’extension intl.
Par exemple, une erreur 500 du type :

Catchable Fatal Error: Argument 1 passed to Symfony\Component\Form\Extension\Core\ChoiceList\MonthChoiceList::__construct() must be an instance of IntlDateFormatter, null given

Signifie peut-être que vous avez activé l’extension PHP intl ! Or, depuis PHP 5.3.0, cette extension est embarquée dans PHP. Auparavant il fallait installer / activer la version PECL de cette extension. Et visiblement, depuis Wamp 2.2, si on active la version PECL de php_intl, ça fait planter quelque chose… sûrement un doublon quelque part.
Conclusion : enlevez php_intl de votre fichier php.ini (ajoutez un point virgule devant cette ligne).

Comment configurer le HOME de Cygwin et plus

Publié dans Geekeries | Un commentaire

Je ne vais pas entrer dans les détails de la configuration de Cygwin, mais simplement quelques points pour savoir comment paramétrer le dossier utilisateur à utiliser. Pour cela, il faut configurer la variable d’environnement HOME:

  • D’abord dans Windows: HOME=/cygdrive/c/Users/%USERNAME%. Cela aura pour effet de placer votre home dans votre dossier utilisateur Windows C:/Users/%USERNAME%.
  • Et si besoin de l’ajouter aussi dans le fichier /etc/passwd là où il y a votre nom d’utilisateur.

Continuer la lecture

Désimlocker un portable LG KS360 chez Orange

Publié dans Geekeries | 2 commentaires

Pour un petit quart d’heure de conversation !

Vous : Bonjour
Vous : J’ai un téléphone qui avait une carte SIM Orange
Vous : et j’aimerai le désimlocker
Vous : je n’arrive pas à joindre le service client pour cela
Vous : pourriez-vous m’expliquer comment faire s’il vous plait ?
JULIEN : Je m’appelle JULIEN et je vais traiter votre demande. Pouvez-vous, svp, me communiquer votre nom ainsi que votre numéro de téléphone mobile ?
Vous : Nom : M. *******
Vous : Téléphone : ** ** ** ** **
JULIEN : enchanté
Continuer la lecture

Logo Git

Ignorer des fichiers dans Git

Publié dans Geekeries | Un commentaire

Dans le gestionnaire de version Git, la liste des fichiers à ignorer, c’est-à-dire à ne pas envoyer/récupérer sur/d’un repository Git est à mettre dans un fichier appelé .gitignore.

# Les ligne commençant par '#' sont des commentaires.
# Ignorer tous les fichiers nommés foo.txt
foo.txt
# Ignorer tous les fichiers html
*.html
# à l'exception de foo.html
!foo.html
# Ignorer les objets et les archives
*.[oa]

Et cela fonctionne pas héritage de dossier ! Donc, si on prend pour example la structure de dossier suivante :

.
dossierUn
  dossierA
dossierDeux

Un fichier .gitignore à la racine s’appliquera à tous les fichiers et dossiers sous-jacents (ici : « dossierUn », « dossierDeux » et « dossierA »).
Et il est possible de redéfinir des règles pour un dossier spécifique en rajoutant un fichier .gitignore, par exemple dans le dossier « dossierUn ». Ces modifications s’appliqueront alors à tous les fichiers et dossiers du dossier « dossier1 » (ici : « dossierA »). On peut alors ajouter des règles (ex : « *.php »), ou en surdéfinir certaines (ex : « !*.html » pour ne plus ignorer les fichiers HTML dans ce dossier).

Quelques ressources

Maven Error « Could not find Launcher »

Publié dans Java | Laisser un commentaire

If you have the following error when launching a Maven command, for example « mvn install »:

Could not find the main class: org.codehaus.plexus.classworlds.launcher.Launcher

Your are probably using a Maven 2 configuration for a Maven 3 usage. Delete your global variable M2_HOME and it should work. You can use M3_HOME instead to select the folder for the « repository » of dependencies, and the emplacement of the configuration file settings.xml.

Erreur Maven 3 « Could not find Launcher »

Publié dans Java | Laisser un commentaire

Lorsque vous lancez une commande Maven (par exemple « mvn install ») et que vous obtenez l’erreur suivante :

Could not find the main class: org.codehaus.plexus.classworlds.launcher.Launcher

ou en français :

Erreur : impossible de trouver ou charger la classe principale org.codehaus.plexus.classworlds.launcher.Launcher

Pas de panique ! La solution la plus probable est que vous utilisez une configuration de Maven 2 pour utiliser Maven 3.
Avec Maven 3, il faut enlever le variable d’environnement M2_HOME : et normalement ça marche ! Si besoin, il est possible d’utiliser M3_HOME pour préciser l’emplacement pour déployer / récupérer les dépendances (dossier « repository ») et où placer le fichier de configuration utilisateur « settings.xml ».

Problèmes de mémoire ?

Petit point sur C++ et la gestion mémoire

Publié dans C / C++ | Un commentaire

Différents types de données

En terme de mémoire, il existe différents types de donnée en C++.

  • Donnée statique : emplacement alloué une fois pour toute la durée du programme
  • Donnée automatique (pile) : emplacement alloué à l’entrée d’un bloc (exemple : une fonction, une boucle, …) et libéré à sa sortie
  • Donnée dynamique (tas) : emplacement alloué et libéré à la demande du programme, donc du développeur à l’aide des opérateurs new et delete Bref à l’aide de pointeurs.

On parle ainsi de trois classes d’allocation : statique, automatique, dynamique.
Dans cet article, nous allons étudier un peu plus en détails l’allocation / destruction de données dynamiques.
Continuer la lecture

Une boucle propre sur un Cursor en Java

Publié dans Java | Laisser un commentaire

Plusieurs solutions s’offrent à nous pour effectuer une boucle sur un objet Cursor en Java.

La plus sérieuse

Cursor c = ......;
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
	// Do something
}
c.close();

Mieux, efficace et fun !

Cursor c = ......;
c.moveToFirst();
do {
// Do something
} while (c.moveToNext());
c.close();

Open a bash in eclipse console – Blog de David MASCLET

Publié dans Geekeries | Laisser un commentaire

Voilà longtemps que je cherchais comment faire ! Reste à peaufiner ma technique.

Open a bash in eclipse console – Blog de David MASCLET.