Tutoriel : Comment créer un DMG
Les utilisateurs de Mac utilisent souvent de type de fichier, qui sont en fait des images disques (comme des .iso) qui peuvent être montées et qui apparaitront comme un nouveau disque sous Mac OS X.
Ce type de fichier est très souvent utilisé sous Mac comme moyen d’installer des logiciels.
Afin de fournir un Bundle pour OpenJDK pour Mac OS X, j’ai voulu regarder de plus près comment faire pour créer un tel fichier.
Read the rest of this post »
mai 10, 2011
Posted in: Non classé
No Comments
Mesange
mars 12, 2011
Posted in: Non classé
No Comments
[Photo] Divination
janvier 15, 2011
Posted in: Mes photos
One Comment
SpringOne 2gx : Résumé des annonces
La semaine dernière a eu lieu le gros évènement pour la communauté Spring et Groovy : Les conférences SpringOne 2gx.
Comme souvent, ce fut l’occasion pour SpringSource et ses divers partenaires pour présenter leur dernières nouveautés
Read the rest of this post »
octobre 26, 2010
Tags: cloud, s2gx, spring Posted in: Conférence
No Comments
Google I/O : Le plein d’annonces !
Google I/O, les conférences de Google pour l’Innovation et l’Ouverture, furent l’occasion pour annoncer un lot de nouveautés pour la société de Mountain View :
Ouverture publique de Google Wave
Un des gros buzz Google, Google Wave ou un mix de l’email, de la messagerie instanée et des robots à la IRC était jusqu’ici accessible uniquement sur invitation.
Ce service est maintenant publique, et même accessible via les Google App pour entreprise.
Autrement dit, plus d’excuse pour ne pas suivre les Wave de Olivier Croisier, auteur du blog The Coder’s Breakfast lors des conférences du ParisJUG.
Google Font Directory et Google Font API
Jusqu’ici la plupart des sites utilisaient des polices de caractères standards, disponibles par défaut sur tout les OS, et cela afin d’être certains du rendu sur le poste client.
Google Font Directory et Google Font API vont permettre d’élargir les possibilités en proposant une liste de police libre de droit utilisable via CSS. Une fois la police choisie, le site propose de l’importer dans votre site de manière très simple :
<link href='http://fonts.googleapis.com/css?family=Inconsolata' rel='stylesheet' type='text/css'>
Dès lors, il sera possible de l’utiliser dans les style css :
h1 { font-family: 'Inconsolata', arial, serif; }
Plus d’informations sur le site de Google Font Directory
Lancement de Google App for Business
Google annonce le lancement d’une version ‘Pro’ de Google App.
Celle-ci propose des nouvelles fonctionnalités :
- Administration centralisée des applications pour un domaine
- SLA de 99,9%
- Sécurisée par défaut, autrement dit seul les utilisateurs du domaine peuvent y accéder
- A venir : Base de donnée SQL, gestion des certificats SSL
Par ailleurs, il semblerait que Google et VMware/SpringSource collabore afin de créer un Platforme ouverte, le but étant de permettre de déployer une application aussi bien sur Google App que sur un cloud VMware. Vers une standardisation du cloud ? ![]()
De quoi rassurer les sociétés je pense.
WebM, ou un standard video OpenSource (pour le HTML5?)
WebM propose un codec video OpenSource et royalty-free, et est soutenu par Google, Opera, Mozilla et même Adobe.
La question : Est-ce que Apple et Microsoft vont accepter ce codec?
Android 2.2, alias Froyo
Tout le monde s’en doutait, c’est maintenant officiel : L’Android nouveau est arrivé !
Parmi les nouveautés :
- Compilateur JIT
- Nouveau Browser avec moteur V8
- Possibilité de partager la connection 3G
Et certainement encore d’autre choses, je mettrais à jour petit à petit
mai 20, 2010
Tags: google, spring Posted in: Conférence
No Comments
Roomba, robot aspirateur
Une fois n’est pas coutume, mais le sujet ne sera pas informatique cette fois.
Cependant, je reste tout de même un geek dans l’âme donc cela restera fun quand même
Je vais vous parler de mon dernier achat : un robot aspirateur, le Roomba 555.
Alors gadget ou pas ? Bon, je l’ai depuis 2h donc je ne vais pas pouvoir être fort objectif sur le coup mais ..
Tout d’abord, j’ai été un peu surpris par sa taille. Je ne sais pas pourquoi, mais je le voyais plus petit.
Le voici en photo à coté d’un CD :
Sinon, est-ce que cela fonctionne ? J’aurais tendance à dire oui !
Une fois lancé, il commence à tourner en spirale, il détecte les obstacles, s’il trouve un mur il va le suivre. Dès qu’il se heurte à un pied, il va chercher à en faire le tour. Bref, il est véritablement autonome à première vue.
Mais est-ce efficace ? Encore une fois, je dirai oui ..
Hier, nous avions passé l’aspirateur (le normal, celui qu’on tire) à l’étage. Aujourd’hui une fois le Roomba ayant fini le même étage, j’ai été assez impressionné par le contenu aspiré ! Comme quoi, il nettoie plutôt bien !
Bon, c’est ici un retour à chaud, je verrai à l’usage si cela fonctionne toujours aussi bien mais pour l’heure, le geek en moi est content
mai 6, 2010
Tags: geek, robot, vie Posted in: Divers
No Comments
Feedback : Switch PC vers Mac
Tentation, doute et ..
Ceci n’est pas un billet de plus pour faire de la propagande Apple, mais juste l’envie de partager mon expérience sur le switch de Pc vers Mac.
J’ai eu l’occasion de tester, très épisodiquement, Mac OS X chez mon premier employeur. J’ai trouvé le concept intéressant, plutôt bien fini esthétiquement et simple à utiliser.
Mais en tant que développeur/administrateur système, j’ai également découvert avec horreur le clavier Apple..
Quelques temps plus tard, un ami proche, administrateur système de profession, à tenter le switch vers un portable Apple. Mais il a rapidement changé, en particulier à cause du clavier qui ne lui était pas fort pratique.
Suite à cela, moi qui était jusque la tenter de passer le pas, j’ai été fort refroidit. Et quand j’ai effectivement été forcé de changer de portable, je suis resté sur le marque PC qui ne m’a jamais fait défaut.
Mais avec un léger regret tout de même.
Et finalement, fin 2009, j’ai franchi le cap et me suis commandé un Mac Book Pro 15″.
Premiers avis
Au déballage, il faut avouer que le MacBook unibode en jette assez : mince (par rapport à mon précedent portable), bien design.
La première utilisation est elle-aussi très professionelle : je saute sur PhotoBooth pour faire rire mes enfants.
Je découvre un peu les soft installés : iPhoto, iWork, Mail, Safari ..
Mais rapidement, j’ai un besoin de retrouver mes repères. J’installe donc les logiciels que j’utilisais le plus souvent sous Windows :
Thunderbird pour les emails, avec mon domaine sur Gmail.
Firefox et ses plugins, mais également la version Mac de Google Chrome
iTunes
Eclipse STS
Intellij Idea
Bon pour ces deux derniers, j’ai eu un peu de mal au début (et il faut l’avouer, encore maintenant) avec les raccourcis Mac. J’ai longtemps ralé sur le Commande+S (Enregistrer) que je loupais en faisant un Commande+Q (Quitter).
Par contre, le Touch Pad multitouch est une vrai merveille.. Il m’arrive souvent maintenant lorsque je suis sur des portables Windows de faire machinalement un slide vers le bas ou le haut .. et de me dire « Zut ca marche pas ici ».
Ce que j’ai adoré
En tant que développeur, j’ai eu l’agréable surprise de voir pas mal d’outils préinstallés : Java 1.6, Maven 2.2, Ant 1.7.1, Subversion.
Même Apache est préconfiguré pour gérer les répertoires Sites des utilisateurs.
La seule chose que j’ai eu à faire est d’installer MySql je crois, afin d’avoir une base de donnée.
Un autre point fort de Mac OS X c’est qu’il est basé sur BSD. On a donc une véritable console accessible avec les commandes habituelles : grep, wc, find, tail, ..
Ce que j’ai moins aimé
Un des concepts de Mac OS X est de ne pouvoir lancé qu’une seule instance d’une application. Cela parait logique et certainement préférable pour la plupart des utilisateurs.
Dans mon cas, j’aurais aimé pouvoir lancer plusieurs Eclipses. Cela reste possible, mais je dois lancer cela par la console. Moins chouette tout de suite .
Un autre regret, c’est que j’aurais espéré que le système soit full UTF-8 par défault. J’ai appris à mes dépens qu’il existait un charset MacRoman qui est la valeur par défaut. Ce n’est pas la fin du monde, mais ca aurait été utile de ne plus devoir se soucier de cela.
Dans un point de vue plus utilisateur lambda, il y a une fonctionnalité était beaucoup plus pratique sous Windows : L’Aperçu des images. Sous Windows, je double cliquais sur une image, elle s’ouvrait. Mais j’avais la possibilité d’avancer/reculer dans les images du répertoire avec les flèches.
Sous Mac, si tu ne choisi qu’une seule image, tu ne pourras voir que celle-ci ..
Conclusion
Globalement, je suis super content de mon MacBook Pro, et je ne regrette pas mon switch. Cela dit, il faut rester les pieds sur terre : Mac OS X n’est pas sans défaut. Je ne suis pas de ceux qui disent que Mac OS X est mieux que tout le reste, d’autant plus que je n’ai pas eu la possibilité de tester Windows Seven.
avril 28, 2010
Tags: mac, pc, test Posted in: Divers
3 Comments
Créer un namespace Spring
Une des fonctionnalités fort pratique avec Spring est la notion de namespace. Ceux-ci permettre de simplifier et réduire de manière significative une configuration XML.
Spring en possède plusieurs de bases : jms, jee, scheduling, jdbc, mvc, …
Cependant, il est tout à fait possible d’en créer des spécifiques à nos propres besoins, et sans trop de difficulté.
Créer le schéma xml
Lorsqu’on créer un namespace pour Spring, la toute première chose à faire est de définir les éléments de celui-ci.
Et comme on parle de namespace XML, cela se traduit par un schema XSD.
Le plus simple pour créer une XSD est de préparer un exemple de XML valide, et d’ensuite créer le XSD à partir de celui-ci.
Dans le cadre du projet de modèle, je voulais pouvoir importer un fichier et définir des variables :
<import-template location="classpath:be/hikage/template/template.xml">
<variable name="variable1" value="valeur1" />
</import-template>
A partir de différents outils (Intellij Idea, XmlSpy, ..), il est possible de générer une XSD correspondant à notre exemple :
<?xml version="1.0"?>
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="import-template">
<xs:complexType>
<xs:sequence>
<xs:element name="variable">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="location" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
Cependant, cette XSD ne comporte pas encore de notion de namespace dédié. Pour cela, il faut lui ajouter l’attribut targetNamespace avec comme valeur l’identifiant de notre namespace.
Dans mon cas, il s’agira de http://www.hikage.be/schema/import-template.
La XSD complètée sera donc :
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.hikage.be/schema/import-template">
<xs:element name="import-template">
<xs:complexType>
<xs:sequence>
<xs:element name="variable">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="location" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
On enregistre cette classe dans les sources du projets, par exemple dans le package be.hikage.namespaces.schemas.
Créer un NamespaceHandler
Une fois le schéma défini, il faut encore dire à Spring comment l’utiliser.
Pour cela, il faut implémenter un NamespaceHandler, le plus souvent en étendant la classe NamespaceHandlerSupport :
public class TemplateNamespaceHandler extends NamespaceHandlerSupport {
private static final String IMPORT_TEMPLATE_TAG = "import-template";
public void init() {
// Spécifie que les éléments <import-template> seront traités
// par la classe ImportTemplateBeanDefinitionParser
registerBeanDefinitionParser(IMPORT_TEMPLATE_TAG,
new ImportTemplateBeanDefinitionParser());
}
} }
Etendre NamespaceHandlerSupport nécessite d’implémenter une méthode init dans laquelle il est nécessaire de lier les éléments racines (import-template dans notre cas) à un BeanDefinitionParser.
Créer le BeanDefinitionParser
Les BeanDefinitionParser sont certainements les classes les plus importantes dans la création d’un namespace car ce sont elles qui vont véritablement dire à Spring quel Beans devront être ajoutés dans le contexte.
Dans notre cas, la classe ImportTemplateBeanDefinitionParser va être responable de
* Parser l’élément import-template et ses éléments fils (variable)
* Lire le fichier spécifié dans l’attribut location
* Injecter dans le contexte Spring les définition définies dans le fichier en remplacant les variables présente dans celui-ci
En pratique, cela se fait dans la méthode parse, qui est définie dans l’interface BeanDefinitionParser :
public BeanDefinition parse(Element element, ParserContext parserContext) {
// On lit l'attribut location pour connaitre le fichier modèle
String resource = element.getAttribute(LOCATION_ATTRIBUTE);
// On récupère les <variable name="cle" value="valeur" sous forme de
// Map<Cle, Valeur>
Map<String, String> variables = prepareReplacement(element);
// On lit les BeanDefinition (représentation de la configuration d'un
// Bean) à partir du fichier modèle
Map<String, BeanDefinition> tempDefinitions = loadTemplateBeans(location);
// On remplace les variables dans les définitions ( nom de beans,
// attributs, valeurs )
Map<String, BeanDefinition> beansDefinition = replaceVariable(
tempDefinitions, variables);
for (Map.Entry<String, BeanDefinition> entry : templateBeansDefinitions
.entrySet()) {
// On ajoute chaque beans dans le contexte Spring
parserContext.getRegistry().registerBeanDefinition(entry.getKey(),
entry.getValue());
}
return null;
}
}
J’ai volontairement simplié le code concernant les méthodes loadTemplateBeans() et replaceVariable() par soucis de simplicité.
Dans le cas de la méthode loadTemplateBeans, j’utilise la classe XmlBeanDefinitionReader de Spring qui va lire et créer les BeanDefinitions à ma place. Un BeanDefinition est le modèle interne à Spring pour représenter un Bean : son nom, la classe, les variables constructeurs, les propriétés à configurer, …
Enregistrer le NamespaceHandler et le schéma
Nous avons maintenant notre schéma ainsi que les classes nécessaire pour que Spring puisse traiter correctement un fichier de ce type :
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:hikage="http://www.hikage.be/schema/import-template"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.hikage.be/schema/import-template http://www.hikage.be/schema/import-template/import-template-1.0.xsd">
<hikage:import-template location="classpath:template.xml">
<hikage:variable name="env" value="dev"/>
</hikage:import-template>
</beans>
Pour cela, il est nécessaire de créer deux fichiers dans META-INF :
- spring.handlers : qui va associé un namespace à son NamespaceHandler
- spring.schemas : qui va associé l’URL utilisé dans xsd:schemaLocation à la XSD dans le classpath
Le fichier spring.handlers :
http\://www.hikage.be/schema/import-template=be.hikage.springtemplate.TemplateNamespaceHandler
- Clé : Le namespace défini dans le targetNamespace de la XSD
- Valeur : la FQN du NamespaceHandler
Le fichier spring.schemas :
http\://www.hikage.be/schema/import-template/import-template.xsd=be/hikage/springtemplate/import-template-1.0.xsd
- Clé : L’URI définie dans le schemaLocation
- Valeur : Le chemin de la XSD dans le classpath
Compléments
Cela dit, cet exemple est assez basique. Les possibilités d’un namespace sont plus étendue. Il est également possible d’améliorer le schema XSD et le code du BeanDefinitionParser pour mieux s’intégrer dans les IDEs.
En attendant, pour plus d’informations :
avril 24, 2010
Tags: namespace, spring, tutoriel Posted in: Coding
2 Comments
Liens de la semaine
- REST et XML avec Spring MVC et Groovy
- JMS : Spring versus Groovy
- Sondage : Spring ou JEE 6 pour votre projet ent 2010 ?
- SpringSource acquiert RabbitMQ
- James Gosling, père fondateur de Java, quitte Sun/Oracle
avril 14, 2010
Tags: Liens, spring Posted in: Liens
No Comments
Introduction au Plugin Release de Maven sur Google Code
Suite à ma lecture de Apache Maven, j’ai eu envie de tester le plugin Release.
Pour rappel, ce plugin de Maven permet d’automatiser les tâches de livraison d’un projet :
- Vérification qu’il n’y a pas de sources modifiées en local
- Compilation, lancement des tests
- Création du tag sur le dépôt de sources
- Publication des artefacts sur un dépot Maven
Le tout en deux commandes : mvn release:prepare release:perform
Cependant, l’utilisation de ce plugin nécessite une configuration spécique dans le descripteur Maven.
Read the rest of this post »
avril 13, 2010
Tags: google code, maven Posted in: Coding
One Comment



