Modifier le dossier de base de Java dans NetBeans

J’ai récemment eu à réinstaller tous mes logiciels dont NetBeans et mon JDK (Java Development Kit). Cependant, manque de chance, entre le début et la fin de mes installation, la dernière version de Java avait changée et était passée de la 1.7u10 à la 1.7u11.

J’ai naturellement désinstallé l’ancienne version pour mettre la nouvelle mais, surprise, au lancement suivant de mon NetBeans, j’ai eu une magnifique erreur stipulant :

Cannot locate java installation in specified jdkhome:
C:\Program Files\Java\jdk1.7.0_11
Do you want to try to use default version?

Pour y remédier, rien de plus simple, il suffit d’aller modifier l’adresse suivant netbeans_jdkhome= dans le fichier de configuration de l’IDE. Ce fichier est /etc/netbeans.conf (Sous Windows, dans le répertoire d’installation de NetBeans)

Projets en cours et actualités

Après 1 mois et demi de silence, me revoici pour reprendre tous les articles que j’ai de retard. Des tas de soucis résolus que je n’ai pas encore eu le temps de mettre à l’écrit. Une bonne dizaines d’entre eux apparaîtront dans les prochains jours.

Des soucis, c’est aussi ça qui m’a mis en retard vu que j’ai eu la joie d’avoir le disque dur principal de mon poste de travail qui flanche, me forçant à réinstaller tous mes OS et programmes et à refaire toutes mes configurations. Autant dire un temps majestueux gaspillé dans quelque chose d’aussi futile qu’indispensable.

J’ai aussi rencontré un problème avec un autre vieux disque dur que j’avais mis, avec 2 autres, en RAID 5 sur l’un de mes serveurs. Je suis donc en mesure de récupérer l’intégralité de mes données à partir de là mais le problème que je rencontre est que je n’ai pas d’autre disque dur de 120 Go en IDE pour le remplacer. Mes données sont donc inaccessible d’ici là. Ceci m’a au moins permis de me rendre compte que lorsque l’on n’a pas la possibilité de changer un des disques défaillant facilement, il vaut mieux mettre en place des RAID 1 qui laissent les données lisibles même en cas de disque dur absent.

Mis à part ça,j’ai deux concours en cours à l’heure actuelle : Un concours en partenariat avec Intel et un concours organisé par Microsoft (L’imagine Cup si ça peut plus vous parler). La même idée d’application mobile est présentée avec la même équipe de développeur pour les deux concours. Les deadlines sont dans plus ou moins 1 mois donc nous verrons ce que ça donne.

Enfin, toujours des projets personnels en développement et des idées nouvelles que je n’ai pas le temps de développer.

Week End Be My App du 5 au 7 Octobre 2012

Je parle assez peu de moi dans mon blog et en tout cas si je le fais c’est pour donner un contexte à une résolution de problème que j’ai eu. Voilà l’article qui marque un changement vu qu’aucun problème ne va être résolu dans cet article. Je ne compte pas devenir un rédacteur de skyblog pour autant mais mon point de vue a quelque peu évolué.

L’évènement qui me fait sortir de ma discrétion à propos de ma vie est un évènement qui m’a réellement marqué et que je recommande à tout développeur / designer / marketer / hacker / IT fan est Be My App. Du vendredi 19H au Dimanche 22H (bien que nous ayons dû partir, plus tôt à cause du trajet Paris – Clermont-Ferrand qui n’est pas anodin), un weekend entier de développement sur le thème du NFC.

Be My App a, d’après ce que j’ai pu voir, des partenaires et une organisation aux petits oignons. Pas moins que JCDecaux, Orange, Intel, BeGeek, FrAndroid, Programmez, FrenchWeb, le Forum des services mobiles sans contact, le blog Avec ou sans contact, Fred Zone, Le blog des nouvelles technologies comme partenaires. Pour ce qui est de l’organisation, un timing parfait, une équipe connaissant son métier et des intervenants tout aussi qualifiés. Tout était fait pour que l’on puisse avoir tout le matériel, les outils et les connaissances à disposition pour travailler. Pour ce qui était des locaux, l’évènement s’est passé à l’IESA multimédia. De la place pour tout le monde, même si les organisateurs eux même n’en attendaient pas autant. Le seul petit détail négatif que l’on peut trouver était la profondeur des tables et leur inclinaison qui bien que très certainement pratique pour des feuilles de papier, s’avéraient un peu juste pour des laptops (d’autant plus pour les 17″). On faisait fie de ce détail assez rapidement cependant.

La première soirée a commencé avec ce que l’on appelait les « pitches » qui correspondent à la présentation des différentes idées proposées par les « porteurs d’idées« . 37 présentations ont été faites à ce moment là et chaque idée était votée par un jury de 5 « mentors« . Ces votes étaient finalement à titre indicatifs et n’influaient pas sur la suite. Ce qui influait était leur délibération qui a eu lieu après et au cours de laquelle 7 projets ont été choisis pour être en compétition pour le prix final. Durant cette délibération, un jeu servant au rattrapage d’une idée était organisé et correspondait à une sorte de sélection du publique. Chaque porteur d’idée allait tenter de collecter des jetons qui avaient été remis à chaque développeur lors de leur arrivé. Les jetons récoltés étaient ainsi comptés et les résultats remis aux mentors. 1 projet supplémentaire était ainsi rattrapé. Une fois les idées sélectionnées lançées, il était possible de rejoindre l’un des groupes ou, comme mes amis et moi avons décider de le faire portés par un très bon designer intéressé par notre idée, de développer son idée en tant que team dissidente.

Les hostilités étaient alors lancées pour une durée de 48H. A nous d’organiser notre temps comme nous le souhaitons pour nous reposer (fort peu) ou nous ravitailler (fort bien et fourni par les organisateurs de surcroît, nous évitant ainsi d’avoir à quitter les lieux et de risquer de nous perdre ou de perdre du temps) pendant le temps imparti. Deux petites pauses étaient prévues le samedi pour, à la mi-journée, faire un checkpoint vidéo puis, en fin d’après-midi, pour faire une sorte d’entrainement à la présentation du lendemain.

Au cours des 48H de code, de nombreuses personnes, plus compétentes les unes que les autres dans leurs domaines, sont venues nous aider à forger notre projet, à trouver les points d’attaque marketing, à étoffer l’idée de base que nous avions afin de, petit à petit, la voir vivre. L’aspect recherche d’un business model systématique a été une grande découverte pour moi. En effet, la plupart des idées que j’ai amené à maturité n’étaient destinées qu’à mon usage personnel ou à être diffusées de manière open source et sans attente de rétribution financière. La manière de monétiser une application mobile était une recherche particulièrement intéressante. D’ailleurs, Be My App va organiser des conférences à ce sujet le Mardi 16 Octobre et je regrette déjà de ne pas pouvoir y participer (Be My App Comment monétiser votre application mobile ?)

Un autre checkpoint vidéo était organisé le dimanche à la mi journée avant l’arrêt du code à 18H. Une légère pause (la plupart du temps la finalisation des slides de présentation) jusqu’à 19H était octroyée puis les présentations finales avaient lieux. Ces présentations étaient faites devant tous les membres du jury et donc étaient intéressantes même pour les team dissidentes puisqu’elles permettaient potentiellement de se faire repérer. En effet, en plus des mentors de la première sélection, un certain nombre de membres liés aux différents sponsors venaient participer aux choix. Ayant dû partir après notre présentation, je n’ai pas tous les détails de la fin des décisions mais ce qui était annoncé était le passage de toutes les team sélectionnées puis le vote des jury pour choisir les gagnants.

En résumé, ce weekend était une expérience particulièrement géniale. L’ambiance était extrêmement chaleureuse et le contact avec les gens était très facile. Ça se sentait que tout le monde était là pour rencontrer des gens et s’éclater. Cela a été aussi l’occasion de voir naître des projets particulièrement prometteurs que l’on verra peut-être en place et prendre en notoriété au fil du temps.

En ce qui concerne ma team, nous avons eu l’occasion de commencer, et presque finir mais maintenant que les 48H sont passées nous pouvons prendre le temps de faire les choses bien, notre projet nommé Hook (NFCard lors de la présentation du Vendredi). Vous pouvez suivre l’avancement de cette application sur les pages facebook et twitter créées à cet effet.

En tout cas comme dit au début, je recommande à toute personne ayant la possibilité de se rendre à ces évènements Be My App d’y aller et j’espère réellement pouvoir y retourner dès que possible. Je félicite encore les organisateurs pour leur travail et la vivacité qu’ils ont su amener à tout le weekend.

PS : Les photos de l’event

Nouvelle direction de ce blog

Un entretien de stage il y a quelques mois m’a fait prendre conscience qu’un blog peut aussi être une plateforme publique des compétences que l’on acquiert et maitrise au fur et à mesure des années. Ainsi, lorsque l’un des recruteurs m’a demandé pourquoi je n’avais rien concernant le développement (je postulais pour un poste en développement), je me suis retrouvé con à lui dire que je ne le mettais pas sur ce blog et qu’un autre allait voir le jour pour cela.

Après réflexion, rien ne m’empêche d’intégrer la partie développement dans ce blog et même au contraire, cela permet de centraliser l’intégralité de mes acquis au même endroit. Je pensais qu’il serait plus pratique d’isoler le développement afin de suivre l’évolution de tel ou tel projet sans qu’il soit mélanger au reste de mes recherches, mais finalement, les tags permettent facilement de séparer les contenus.

Je marquerais ainsi aussi désormais les différentes trouvailles / architectures / plug-ins / configurations / fonctions que je trouverais concernant le développement dans tous les langages que je rencontre / utilise.

Enfin, je mettrais aussi un CV en version Light pour que les recruteurs éventuels qui atterriraient sur mon site puissent savoir que je suis la personne qu’il leur faut. ^^

Activer l’espace insécable sous Xubuntu

J’avais eu un problème similaire il y a quelques années lorsque je travaillais avec Code::Blocks. Les espaces n’étaient pas pris en considération. La cause est que seuls les espaces insécables (non-breaking spaces) sont pris en compte. Il existe plusieurs manières de remédier à ce problème :

  • La première est la plus contraignante mais la plus pérenne. Elle consiste à insérer les espaces à l’aide des touches Ctrl + Alt + Espace
  • La deuxième est celle qui avait fonctionné sur ma Ubuntu quelques années auparavant. Elle consiste à aller dans les options Système -> Préférence -> Clavier -> Onglet Agencement -> Autres Options -> Using space key to input non-breakable space character -> Space key outputs usual space at any level
  • Une autre solution que je n’ai jamais testée moi même mais que j’ai trouvé sur internet consiste à modifier son fichier /etc/X11/xorg.conf et à commenter la ligne  » Option « XkbVariant » « oss »  » puis à redémarrer le serveur X.
  • Enfin, celle qui m’a permis de résoudre mon problème sous Xubuntu a été de me rendre dans Paramètres -> Gestionnaire de paramètres -> Clavier -> Onlget Disposition -> Décocher utiliser les paramètres par défaut -> Modifier la disposition du clavier -> Français (variante obsolète)

Toutes ces techniques permettent d’activer les espaces insécables à la place des espaces normaux mais ne fonctionnent pas forcément toutes en fonction de la distribution utilisée.

 

Configuration de subversion et lancement automatique

Depuis quelques temps, j’ai pris l’habitude de gérer mes projets de développement à l’aide d’un gestionnaire de versions, en l’occurrence, subversion. Je n’ai encore jamais eu l’occasion de tester git donc ce choix est simplement basé sur mes préférences actuelles et elles peuvent être amenées à changer. J’utilise subversion car il est libre, facile à mettre en place, agréable à utiliser et surtout, je sais m’en servir.

On peut installer subversion assez simplement soit en passant par les dépôts de paquets des différentes distributions, soit en le compilant soit même (ayant eu besoin de la version 1.7.4 récemment et vu que la version disponible sous xubuntu était la 1.6.17, j’ai été amené à le faire sur mon poste client et cela se fait sans encombre) en installant préalablement ses dépendances (pour ma part zlib, apr et sqlite).

La première chose à faire lorsque subversion est installé est de créer le dépôt qui accueillera le projet. Pour ma part, j’ai créé un dossier /home/SVN dans lequel je créé chacun de mes dépôts à l’aide de la commande :

svnadmin create <nom_du_depot>

Nous allons maintenant configurer le dépôt pour rajouter des utilisateurs et gérer les droits sur les différents dépôts. Pour ce faire, nous allons nous rendre dans le dossier du dépôt, puis dans conf. Dans ce dossier, il y a 3 fichiers qui sont authz, passwd et svnserve.conf. Nous allons tout d’abord modifier le fichier passwd pour rajouter à la fin de nouveaux utilisateurs en suivant ce format :

login = motdepasse

Une fois les utilisateurs et leurs mots de passes ajoutés, nous allons modifier le fichier svnserve.conf. A part lorsque je ne souhaite pas que qui que ce soit puisse lire mon code source si il n’est pas authentifié, je dé-commente les lignes

anon-access = read
auth-access = write
password-db = passwd

Ceci a pour effet d’autoriser la lecture lors d’un accès anonyme et l’écriture pour les utilisateurs authentifiés dont les identifiants sont inscrits dans passwd.

Afin de ne pas laisser ces mots de passes qui sont en clair à la vue de tout le monde, je met les droits des 3 fichiers à 0600.

Il ne reste plus qu’à lancer le serveur à l’aide de la commande suivante :

svnserve -d -r <dossier_contenant_les_depots>

Ici, <dossier_contenant_les_depots> est /home/SVN/.

L’un des problèmes de subversion est que cette action est à répéter à chaque démarrage de la machine. Afin de pallier à ce problème, on peut créer un script de lancement et l’exécuter au démarrage de la machine. Voici le script que j’ai créé (ATTENTION : ce script est adapté à la position de mon dossier subversion mais est à adapter en fonction de la localisation de ce dernier) :

#!/bin/sh
#
### BEGIN INIT INFO
# Provides: svnserve
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop svnserve daemon at boot time
# Description: Controls the main subversion server \svnserve\ with /home/svn
### END INIT INFO

ECHO_BIN=/bin/echo

usage()
{
	$ECHO_BIN "Usage : $0 (stop|start|restart)"
}

SVN_stop()
{
	/sbin/start-stop-daemon --stop --exec /usr/local/bin/svnserve
	$ECHO_BIN "[+] Server stopped"
}

SVN_start()
{
	/usr/local/bin/svnserve -d -r /home/svn
	$ECHO_BIN "[+] Server launched on /home/svn"
}

if [ -x /usr/local/bin/svnserve ]
then
	if [ -z $1 ]
	then
		usage
	else
		case $1 in
			stop)
				SVN_stop
			;;
			start)
				SVN_start
			;;
			restart)
				SVN_stop
				SVN_start
			;;
			*)
				usage
				exit 1
		esac
	fi
else
	$ECHO_BIN "Svnserve not installed."
	exit 1
fi

exit 0

Il faut placer ce script dans /etc/init.d/ et bien penser à lui donner les droits 0755. Une fois à sa place, il ne reste plus qu’à l’activer au lancement de la machine en l’ajoutant aux différents /etc/rcx.d/ à l’aide la commande :

update-rc.d <nom du script> defaults

On peut vérifier à ce moment, après un redémarrage de la machine à l’aide de la commande

ps -e | grep svnserve

que tout est fonctionnel. On pourra alors accéder aux dépots en se connectant à :

svn://<nom_de_domaine_ou_IP>/<nom_du_depot>

Sélection rectangulaire NetBeans

Me mettant au développement Web pour différents projets dont une interface plus conviviale pour http://www.peanut-soft.com/, je suis tombé sur une option que je trouve fantastique et qui est la sélection verticale. Voulant l’avoir sur mon IDE favoris, je me suis lancé à la recherche d’un plugin me permettant de l’activer.

Et bien la bonne nouvelle est que cette option est nativement intégrée à NetBeans depuis sa version 7.1. Donc à part de rares cas où l’emploi de la 6.9 est encore utile, une simple mise à jour suffit à posséder la sélection rectangulaire.

Pour l’utiliser, il suffit de cliquer sur l’icône correspondante au dessus de la zone de texte ou d’utiliser le raccourcis Ctrl + Shift + R.

ACPI, récupération des codes touche

Dans mon article précédent, traitant de la création d’un .deb, je parle du script que j’avais créé nommé Asus KBBL Control. Le but était de l’utiliser à travers les raccourcis clavier gérés par l’acpi. Pour savoir quel code correspond à une touche pressée (ou à une combinaison de touches) on utilise la commande suivante :

acpi_listen

Il ne faut pas utiliser la dernière partie du code retourné qui ne correspond pas au code de la touche. Cependant, on peut utiliser le reste pour identifier la touche lors de la création de son event.

Asus Keyboard Backlight Control et paquet .deb

Mon ordinateur portable est un Asus G73J. Il est muni d’un rétro-éclairage clavier des plus pratiques. Cependant, les raccourcis de contrôle au clavier ne sont pas fonctionnels sur la plupart des distributions Linux. J’ai donc créé un script qui me permet, à l’aide d’acpi, d’activer ces raccourcis et de contrôler l’intensité du rétro-éclairage et que j’ai nommé Asus KBBL Control (Asus KeyBoard BackLight Control). [EDIT] Il n’est actuellement pas disponible mais reviendra sous peu [/EDIT]

Pour l’installer et le désinstaller plus facilement, j’ai décidé de créer un paquet .deb. Après un peu de recherche, ceci n’est pas difficile et facilite grandement la tâche de maintient d’applications.

Pour ce faire, il suffit de créer un dossier (le nom importe peu). A l’intérieur de ce dossier, il faut créer un paquet nommé DEBIAN. A l’intérieur de ce dossier, on peut mettre plusieurs fichiers dont :

  • preinst : script exécuté avant l’installation
  • postinst : script exécuté après l’installation
  • prerm : script exécuté avant la suppression
  • postrm : script exécuté après la suppression
  • control : Détails du paquet

Un de ces fichiers est obligatoire cependant, c’est le fichier control. C’est à partir de lui que le paquet final est construit (notamment le nom). Pour plus de détail sur sa construction, il suffit de regarder la manpage :

man deb-control

Cette page étant largement détaillée, je n’entrerais pas dans les détails.

Le logiciel que l’on souhaite empaqueter se met à côté du dossier DEBIAN. On va le placer dans le dossier dans lequel il sera installé en considérant ce dossier comme la racine du disque dur. Ainsi, si mon programme doit être installé dans /etc/acpi, je vais créer à côté de DEBIAN un dossier etc dans lequel je créerais un dossier acpi et dans lequel enfin je mettrais mon programme à installer.

Une fois cette petite cuisine effectuée, il ne reste plus qu’à compiler le paquet. Pour cela, on se place un dossier au dessus du dossier qui contient DEBIAN et le logiciel et on tapera la commande :

dpkg-deb --build <NOM DU DOSSIER>

On a un magnifique fichier .deb qui se créé juste à côté de notre dossier source et qu’il ne restera plus qu’à installer avec un :

dpkg -i <NOM DU PAQUET>