vendredi 16 septembre 2011
Par MD3804-GANDI le vendredi 16 septembre 2011, 16:41 - Linux
Lors de l'écriture de l'un de mes scripts, j'ai du deviner la variable
JAVA_HOME. j'ai donc écrit une fonction en bash que je vous livre et qui pourra
sans doute vous aider
#!/bin/bash
function guess_java_home(){
for i in `readlink -f \` which java\``
do
JAVA_HOME=${i/bin\/java/}
echo "JAVA_HOME=${JAVA_HOME}"
done
}
aucun rétrolien
dimanche 28 novembre 2010
Par MD3804-GANDI le dimanche 28 novembre 2010, 13:39 - Tests / XUnit
Lorsque vous voulez 'mocker' un objet et que ce dernier sera appelé par
plusieurs threads, vous aurez le message suivant "Un-thread-safe mock called
from multiple threads".
Par exemple :
@test
public void MyTest(){
List mockList = EasyMock.createMock(List.class);
EasyMock.expect(mockList.add(EasyMock.anyObject())).times(NUMBER_OF_THREAD);
EasyMock.replay(mockList);
MyThread[] rateThread= new MyThread[NUMBER_OF_THREAD];
for(int i=0;i<NUMBER_OF_THREAD;i++){
rateThread[i]= new MyThread(){
@Override
doit(){
mockList.add("foo");
}
};
rateThread[i].start();
}
}
Il vous faut alors ajouter EasyMock.makeThreadSafe(mockList,
true);
. avant le replay(mockList)
aucun rétrolien
jeudi 21 octobre 2010
Par MD3804-GANDI le jeudi 21 octobre 2010, 21:42 - Java / J2EE
Parfois nous devons exécuter un traitement et si le résultat est
null
nous voulons renvoyer un résultat par défaut. par exemple une
liste vide. cela permet d'éviter les NullPointerException
s si nous
parcourons la liste. Exemple :
List<Contact> contacts = getContacts();
for (Contact contact : contacts){
contact.setActive(true);
}
Si getContacts()
renvoie null
le code renverra une
NullPointerException
. il est possible avec les
génériques
Java de le faire d'une manière élégante :
public static <T> T notNull(T test, T defaultvalue){
return t == null ? test : defaultValue;
}
On peut alors écrire :
List<Contact> contacts = notNull(getContacts(),new ArrayList<Contact>);
Ce code n'est pas révolutionnaire mais il montre à quel point les génériques
de de Java peuvent être utiles. C'est d'ailleurs de cette manière que EasyMock fonctionne. Lorsque vous
écrivez
Myclass mock = EasyMock.createMock(MyClass.class);
EasyMock.expect(mock.function()).andReturn(value);
Le type de value
est déterminé en générique Java par le retour
de function()
:
public <O> O expect(O t) {
return t;
}
aucun rétrolien
mercredi 13 octobre 2010
Par MD3804-GANDI le mercredi 13 octobre 2010, 14:12 - Hibernate
Si vous êtes un utilisateur d'Hibernate, que ce soit avec Spring ou pas,
vous êtes vous déjà posé la question de savoir quelles sont les différences
entre session.load()
et session.get()
. Comprendre les
différences permet souvent d'optimiser les accès à la base de données.
Lire la suite...
aucun rétrolien
mercredi 6 octobre 2010
Par MD3804-GANDI le mercredi 6 octobre 2010, 22:45 - Hibernate
Comme vous le savez déjà peut être, les sessions Hibernate sont très
fortement couplées aux transactions : Hibernate ouvre et ferme les
sessions au début et à la fin d'une transaction. Lors du développement d'une
librairie (DAO), Je me suis posé la question "est il possible de ne pas
utiliser un contexte transactionnel pour gérer les sessions ?". En effet lors
de mes tests qui sont transactionnels, tout se passait bien mais lorsque
j'intégrais mon code dans un contexte non transactionnel et que je tentais de
récupérer des associations liées à une entité, j'avais des
lazyInitializationException
car les sessions était fermées.
j'avais alors plusieurs solutions :
- Utiliser le filtre Spring
Opensessioninviewfilter
, mais cela
rend ma librairie non portable car cela ne fonctionnera que dans un contexte
web
- Faire des méthodes ad'hoc pour récupérer l'entité ou l'entité avec ses
associations chargées (eager), mais au détriment d'un code moins lisible et où
il est facile de ne pas utiliser la bonne méthode
- Charger les associations directement (par configuration) avec
FetchType=Eager. pas assez performant !
- Utiliser les profiles de fectching
- Faire une gestion des session par thread.
Je vous propose de voir comment j'ai implémenté la dernière solution
Lire la suite...
aucun rétrolien une annexe
jeudi 12 août 2010
Par MD3804-GANDI le jeudi 12 août 2010, 09:47 - python
Je vous propose une petite astuce pour activer l'autocomplétion ainsi qu'un
historique des commandes tapées dans l'interpréteur Python. Python 2.0 minimum
est requis
#!/usr/bin/env python
# Add auto-completion and a stored history file of commands to your Python
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
# bound to the Esc key by default (you can change it - see readline docs).
#
# Store the file in ~/.pystartup, and set an environment variable to point
# to it, e.g. "export PYTHONSTARTUP=/max/home/itamar/.pystartup" in bash.
#
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the
# full path to your home directory.
import rlcompleter
import readline
readline.parse_and_bind("tab: complete")
import os
histfile = os.path.join(os.environ["HOME"], ".pyhist")
try:
readline.read_history_file(histfile)
except IOError:
pass
import atexit
atexit.register(readline.write_history_file, histfile)
del histfile, readline, rlcompleter
- Sauvegarder le code ci dessus dans un fichier : ~/.pystartup
- Définissez une variable d'environnement pointant vers ce fichier dans le
fichier bashrc : (~/.bashrc) :
export PYTHONSTARTUP=/home/user/.pystartup
David
aucun rétrolien
jeudi 10 juin 2010
Par MD3804-GANDI le jeudi 10 juin 2010, 15:43
Le cloud computing est un concept ou les applications sont exécutées par une
puissance de calcul dont on ne gère plus l'infrastructure sous-jacente, on
parle alors de puissance de calcul ou de stockage à la demande. Par analogie on
peut comparer le cloud computing à la consommation électrique : on fait
varier la production en fonction de la demande.
Lire la suite...
aucun rétrolien
mercredi 9 juin 2010
Par MD3804-GANDI le mercredi 9 juin 2010, 14:31 - 10 minutes pour...
Lorsque l'on parle de sites à fort trafic et de bases de données, on
n'entend rarement parler de bases de données relationnelles. En effet, garantir
la consistance des données coute chère en temps et est souvent incompatible
avec les performances.
Puisque le modèle relationnel ne semble pas adapté dans des environnement
nécessitant de grosses architectures et que les propriétés ACID des bases ne permettent généralement pas de passer à
l'échelle, un nouveau mouvement (encore un ;)) est née de l'initiative des
architectes de cloud
computing et des sites communautaire comme Facebook, Amazon et
Linkin : le NoSQL, (aka : Not Only SQL). Ce billet tente de
faire le tour d'horizon des différents types de bases NoSQL
, les
différentes solutions disponibles sur le marché et dans quels cas les
utiliser.
Lire la suite...
aucun rétrolien
mercredi 19 mai 2010
Par MD3804-GANDI le mercredi 19 mai 2010, 10:05
Souvent lorsque je parle de Gisgraphy, la question qui m'est posée est "quelles sont tes
motivations" et "est-ce que tu gagnes de l'argent avec ce projet". Après leur
avoir expliquer que le projet est open source et libre. La réaction est quasi
toujours la même : "tu n'a pas peur que quelqu'un te pique le
projet ? et comment peut on gagner de l'argent alors que tout est gratuit
?". J'ai donc décidé de faire ce billet pour expliquer mes motivations ainsi
que les différentes façons de gagner de l'argent avec des projets open source
et libres. autant vous le dire tout de suite : je perds de l'argent avec
Gisgraphy, mais mon but n'est pas forcément d'en gagner (même si j'aimerais ne
pas être de ma poche ;) )
Lire la suite...
aucun rétrolien
jeudi 25 mars 2010
Par MD3804-GANDI le jeudi 25 mars 2010, 13:37 - Linux
Peut être avez vous déjà eu besoin de simuler des réponses à des scripts
shell. Par exemple lorsque vous avez un script qui demande une confirmation, un
mot de passe ou tout autre intervention humaine, et que vous désirez tester le
comportement du script. il existe un outil assez pratique pour le faire qui se
nomme expect. Il permet
d'automatiser les interactions avec des applications non-GUI (aka :
graphiques). plusieurs versions sont disponibles expect-tcl8.3 ou expectk.
Lire la suite...
aucun rétrolien
lundi 1 mars 2010
Par MD3804-GANDI le lundi 1 mars 2010, 09:16 - Java / J2EE
Ceux qui ont déjà développé en C, puis en Java auront probablement apprécié
la gestion de la mémoire par la JVM. En effet, Java masque la complexité de la
gestion de la mémoire aux développeurs. Cette tache est déléguée au
garbage Collector
. Cependant même si cette gestion est dite
'automatique', cela ne permet pas de faire n'importe quoi. Que ce soit en C,
Java, ou un autre langage, la mémoire est une ressource limitée ! En java
lorsque la JVM n'a plus assez de mémoire pour s'exécuter, elle génère une
Erreur java.lang.OutOfMemoryError
.
Plusieurs cas sont alors possible :
- Soit vous n'avez pas alloué assez de mémoire à la JVM
- Soit votre code a ce qu'on appelle un fuite mémoire
Si vous êtes dans le premier cas, les choses se résolvent assez
facilement : il vous suffit d'allouer plus de mémoire grâce aux paramètres
-Xmx
, -Xms
et -XX:PermSize
(ou de
modifier le code pour qu'il gaspille moins de mémoire). Dans le deuxième cas
vous allez devoir trouver où se situe la fuite mémoire. Si vous avez utilisé
des logiciels pour vous y aider, vous avez peut être été perdu par toutes les
possibilités qu'ils offrent et par la profusion d'informations qu'il
fournissent.
Le but de ce billet est d'expliquer comment détecter et corriger les fuites
mémoires avec Eclipse Memory Analyser Tool un outil gratuit et très utile qui
aide vraiment à trouver les fuites mémoires. Nous allons voir comment extraire
les informations pertinentes, les comprendre, et trouver les responsables des
fuites mémoire en ayant une approche pragmatique. Je vous propose de nous
appuyer sur du code simple (disponible en fichier attaché à ce billet) générant
une fuite mémoire.
Lire la suite...
aucun rétrolien une annexe
samedi 27 février 2010
Par MD3804-GANDI le samedi 27 février 2010, 15:56 - Divers
Le blog à désormais un nouveau look. oh... pas très très différent. Je suis
juste partie du thème précédent et j'ai changé le style pour l'adapter aux
styles des billets : c'est-à-dire des articles techniques.
En effet en regardant les statistiques des résolutions d'écran des
utilisateurs, J'ai remarqué que personne n'était en 800*600, alors que le thème
était optimisé pour une résolution 800*600. J'ai donc augmenté la largeur de la
colonne centrale en diminuant les marges de chaque coté, attribué plus de place
à la colonne de contenu, et diminué la colonne avec les rubriques, qui me
semblait moins importantes que le contenu. A mon sens, le texte est beaucoup
plus lisible. Pour les zone de code, j'ai également opté pour une couleur
jaune, plus sympathique que le gris. Faites moi part de vos impressions, et des
éventuels problèmes rencontrés.
aucun rétrolien
jeudi 4 février 2010
Par MD3804-GANDI le jeudi 4 février 2010, 15:35 - Divers
Certains connaissent peut être pastebin qui permet d'envoyer du code à quelqu'un (ou d'un PC à
l'autre ;) ) en générant une shortURL. Il existe des sites qui vont plus loin
en permettant de tester du code directement en ligne : http://codepad.org/. il suffit de
copier / coller votre code, et le site vous le compile et vous l'interprète.
c'est le cas de codepad
Il supporte les langages suivants :
- C
- C++
- D
- Haskell
- Lua
- OCaml
- PHP
- Perl
- Plain Text
- Python
- Ruby
- Scheme
- Tcl
Vous pouvez mettre votre code "privé", ce qui est pratique, car j'ai déjà
retrouvé du code, que je ne voulais pas partager publiquement, indexé par
Google, après l'avoir envoyé via pastebin)
Dans la même lignée, il existe des sites plus spécialisés pour tester les
interactions HTML<=>Javascript : http://jsbin.com/. Son utilisation est triviale : vous
avez le code javascript à gauche et le code HTML à droite.
Le site va beaucoup plus loin que pastebin, d'une part, car il est
spécialisé dans un langage, mais aussi parce qu' il offre la
possibilité :
- De sauvegarder votre code.
- D'inclure des librairies connues, comme Prototype, Jquery, Mootools, Dojo
et de choisir parmi différentes versions
- De générer une short URL de votre code (exemple :
http://jsbin.com/ilomu3)
- De modifier un code existant en cliquant sur ''Edit using JS Bin" en haut à
droite (j'avoue c'est pas flagrant :) ).
- De gérer plusieurs versions d'un même code
L'avantage est qu'il permet de tester du code avant de mettre à jour un
librairie (exemple : passer de Prototype 1.6.03 à 1.6.1.0), de vous faire
la main sur des librairies, ou de partager du code entre collègues.
aucun rétrolien
lundi 1 février 2010
Par MD3804-GANDI le lundi 1 février 2010, 11:25 - humour
Pour faire suite à mon post Stratégie
d'Apple vs stratégie Google, je vous propose une image qui m'a fait bien
rire
Sinon, je vous conseille la lecture de ce billet
sur l'ipad et son effet d'annonce manqué
aucun rétrolien
mardi 26 janvier 2010
Par MD3804-GANDI le mardi 26 janvier 2010, 13:16 - Tests / XUnit
Après le
billet consacré à JsUnit et celui qui expliquait comment mocker
une requête Ajax, nous allons maintenant voir comment mocker en javascript.
Pour cela je vous propose une courte présentation de JsMock. Les exemples de
code sont en annexe de ce billet.
Lire la suite...
aucun rétrolien une annexe
lundi 18 janvier 2010
Par MD3804-GANDI le lundi 18 janvier 2010, 14:16 - Google
Lorsque l'on parle de Google bot, on pense souvent à "référencement", mais
il existe une autre utilisation : les tests. Je ne parle pas de tests
fonctionnels ou unitaires mais de tests pour améliorer la qualité de votre
site, comme les tests de liens morts, de pages indisponibles, d'erreurs HTTP
etc.
Il y a quelques semaines, je postais plusieurs billets sur comment gérer un
serveur de download :
Mais cette configuration peut poser des problèmes pour les bots des moteurs
de recherches. C'est pourquoi je voudrais expliquer comment mieux configurer
les serveurs pour faciliter le travail des bots.
Lire la suite...
aucun rétrolien
vendredi 8 janvier 2010
Par MD3804-GANDI le vendredi 8 janvier 2010, 10:59 - Tests / XUnit
Beaucoup de développeurs Java sont familiers avec Junit, EasyMock,... ces
librairies qui permettent de tester du code Java afin de rendre les programmes
plus robustes. Javascript dispose également de frameworks équivalents. Avec
l'apparition du Web 2.0, le Javascript et l'Ajax sont de plus en plus présents
dans nos applications (j'avais d'ailleurs poster un billet sur comment mocker une requête Ajax,il y a
quelques mois) et représente une part non négligeable de code.
Si vous utilisez GWT, qui permet d'écrire à partir de code écrit en Java, de
générer une application en HTML / javascript, vous n'avez pas de problème pour
tester votre code, puisque Junit suffit. En revanche, si vous avez du code
javascript à tester, il existe des librairies qui permettent de simplifier les
tests. Je vous propose de voir comment tester du Javascript au moyen de ces 3
frameworks :
- JsUnit : Qui fournit des mécanismes d'assertions et d'exécutions de
tests.
- JsMock : Permet de simuler des comportements pour des objets
Javascript,tout comme EasyMock le fait
- JsTester : Permet d'executer du code Javascript en java grâce à
Rhino.
les exemples de code sont disponibles en annexe de ce billet
Lire la suite...
aucun rétrolien une annexe
lundi 4 janvier 2010
Par MD3804-GANDI le lundi 4 janvier 2010, 15:23 - Google
Il y a de cela quelques temps, Google lançait image labeler afin
d'améliorer la recherche d'images Google. Tout laisse à penser que ce service a
bien fonctionné, car Google expérimente Google goggle, un
service disponible à partir d'android 1.6+, et qui permet de prendre une photo
ou une vidéo et Google détectera de quoi il s'agit et lancer une recherche à
partir de ce qu'il a détecté. Le geotagging devient
quasi obsolète.
Le nom n'est pas choisi au hasard, au départ Google aurait du s'appeler
Goggle, en référence au nombre gogol de
Edward Kasner, mais une erreur de saisie a fait que Google s'appelle
Google et non Goggle. c'est donc un moyen d'utiliser son nom
initial.
Lire la suite...
aucun rétrolien
Par MD3804-GANDI le lundi 4 janvier 2010, 14:44 - Divers
Après la folie commerciale de fin d'année je voudrais bloguer sur les
différentes stratégies des sociétés dites "innovantes". je sais dors et déjà
que je vais me faire des ennemis et que cette article ne fera pas l'unanimité,
mais peu importe, ce post trouvera aussi des personnes allant dans le même sens
que moi :)
C'est demain que sort le téléphone de Google : le Nexus One. Ceux qui
me connaissent savent que je suis un fervent défenseur de Google. Ce n'est pas
que j'aime tout ce qu'ils font (je n'aime pas chrome, par exemple), mais je
trouve que leurs produits tapent souvent juste et fort. Et si certains sont
frileux d'utiliser des applications et services d'une firme, il est vrai, un
peu "big brother", on saluera tout de même leur stratégie qui leur a permis
d'être le moteur de recherche utilisé par 90% des internautes et de sortir des
produits innovant comme, Google Maps et Google documents, GWT, etc.
Je m'étonne encore de leur modèle économique basé sur la publicité. Pour
mémoire, ce même modèle a causé, entre autre, la chute de la bulle internet. De
très grosses sociétés (e.g : AOL) ont revu leur business modèle, en
passant la publicité de "source de revenus" à "complément d'activité" ;). La
stratégie de Google est de sortir des produits les plus complets possible, en
sachant très bien ce qu'il amélioreront à la prochaine version, mais en visant
un niveau de base déjà très élevé pour un effet "WHAOOOUU". Je voudrais (entre
autre) comparer la différence de stratégie d'Apple et de Google pour leur
téléphone pour montrer comment Apple est vraiment une société reine dans le
marketing :
Lire la suite...
aucun rétrolien
mercredi 23 décembre 2009
Par MD3804-GANDI le mercredi 23 décembre 2009, 11:39
Lorsque j'ai voulu faire un système de sauvegarde pour les données de mon
serveur, j'ai voulu créer un dossier par date, mais je me suis vite rendu
compte que cela allait prendre beaucoup de place. alors j'ai utilisé un hard
link pour faire une sauvegarde incrémentale.
Lire la suite...
aucun rétrolien