jeudi 26 mars 2026
Intelligence artificielle
Par David Masclet le jeudi 26 mars 2026, 15:28
bool(false)
jeudi 26 mars 2026
Par David Masclet le jeudi 26 mars 2026, 15:28
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
}
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)
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 NullPointerExceptions 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;
}
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.
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 :
Opensessioninviewfilter, mais cela
rend ma librairie non portable car cela ne fonctionnera que dans un contexte
webJe vous propose de voir comment j'ai implémenté la dernière solution
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
export PYTHONSTARTUP=/home/user/.pystartup
David
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.
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.
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 ;) )
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.
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 :
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.
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.
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 :
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é :
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.
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é
mardi 26 janvier 2010
Par MD3804-GANDI le mardi 26 janvier 2010, 13:16 - Tests / XUnit
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.
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 :
les exemples de code sont disponibles en annexe de ce billet
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.
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 :
« billets précédents - page 1 de 3