Bien recevoir son serveur dédié (suite : c’est jamais fini)

Je reviens sur la sécurisation de mon petit serveur.Je dois avouer que depuis le changement de port SSH, je suis plutôt tranquille. Je vais tout de même aller plus loin en réduisant la liste des users autorisés à se connecter via SSH.

Et comme toujours, c’est relativement simple. On édite le fichier /etc/ssh/sshd_config et on ajoute une ligne du type :

AllowUsers moncompte

Bootstrap d’un projet Aurelia

Je vais tacher de conserver ici les commandes que j’utilise pour démarrer un projet Aurelia en typescript.

On installe JSPM sur le projet :

npm install jspm@0.17.0-beta.29 --save-dev

Ensuite, on intialise le projet:

jspm init
Package.json file does not exist, create it? [Yes]: Yes
Init mode (Quick, Standard, Custom) [Quick]: Quick
Local package name (recommended, optional): app
package.json directories.baseURL: .
package.json configFiles folder [./]: ./
Use package.json configFiles.jspm:dev? [No]: No
SystemJS.config browser baseURL (optional): .
SystemJS.config Node local project path [src/]: src/
SystemJS.config local package main [app.js]: app.ts
SystemJS.config transpiler (Babel, Traceur, TypeScript, None) [typescript]: typescript

J’apporte ensuite quelques corrections dans le fichier « jspm.config.js ». Tout d’abord, dans le package « app », j’ajoute l’extension par défaut :

"defaultExtension": "ts",

Et j’ajoute un path :

"*": "src/*"

Ensuite, j’installe mes dépendances à Aurelia :

jspm install aurelia-bootstrapper -y

Pour effectuer des tests et valider la bonne initialisation, j’utilise superstatic :

npm install superstatic -g
superstatic

Développeur Frontend derrière un proxy

torx-272866_1920

Je viens du monde Java et ce qui me manque le plus lorsque je fais du développement frontend, c’est bien la maturité de l’écosystème. Et je le ressens beaucoup quand j’essaie de travailler derrière un proxy et que je me rends compte que chaque outil qui participe au buid de mon application utilise un paramétrage différent.

C’est en tentant de reprendre le squelette d’application Aurelia en Typescript que j’ai cherché tous les paramétrages ci-dessous.

Unix

Tout d’abord, il faut configurer le proxy système. Sous Linux, il suffit de déclarer les variables ci-dessous :

export http_proxy=http://proxy.host:8080/
export https_proxy=http://proxy.host:8080/

NPM

Pour la commande NPM, il suffit de créer un fichier « .npmrc » à la racine du répertoire utilisateur :

proxy=http://proxy.host:8080/

Typings

Il suffit de créer un fichier « .typingsrc » à la racine du répertoire utilisateur :

proxy=http://proxy.host:8080/

JSPM

Pour JSPM, si vous avez bien suivi le paramétrage Unix ci-dessus, ça devrait fonctionner (sachant que le piège se trouve dans au niveau du proxy HTTPS qui doit utiliser le protocole « http » simple).

Netbeans & Unity : ça marche presque tout seul

netbeans-ayatana-header

Dans un précédent article, je partageai un plugin Netbeans pour profiter du menu global du bureau Unity d’Ubuntu. Et bien chers amis, je vous le dis : n’installer plus ce plugin.

Ne vous inquiétez pas, je ne viens pas vous annoncer une nouvelle faille de sécurité dans ce plugin (c’est à la mode en ce moment). C’est juste que son utilisation n’est plus nécessaire car les dépôts officiels d’Ubuntu contiennent la librairie Ayatana qui s’appliquera à tout vos programme Java. Et oui, vous m’avez bien lu : « à tous vos programme Java ».

Si sur votre poste, on peut trouvez un browser Cassandra écrit en Java, un serveur bouchon SMTP écrit en Java, tous profiteront du menu centralisé et surtout de la recherche dans les menus.

Elle est pas belle la vie ? Comment on fait maintenant ?

Et bien rien si vous êtes passé à Ubuntu 15.04, c’est actif automatiquement.

Et pour les autres, restez concentré, ça va aller vite :

sudo add-apt-repository ppa:danjaredg/jayatana
sudo apt-get update
sudo apt-get install jayatana

Bien entendu, ça fonctionne aussi pour les non développeurs, ça fonctionne aussi avec jDownloader.

Débloquer son Galaxy S pour tout opérateur

blog_lock_sim

On change un peu de registre. Aujourd’hui, j’ai débloqué mon téléphone pour qu’il puisse fonctionner sur tous les opérateurs. Avec toutes ces offres low-cost qui sont apparu suite à l’arrivée de Free sur le marché, si l’on souhaite changer son forfaits en conservant son téléphone, le mieux est de débloquer ce dernier.

L’opération de déblocage est extrèmement simple :

  • il faut récupérer un code de déverrouillage auprès de votre opérateur
  • ensuite, il faut emprunter une carte SIM d’un autre opérateur et la mettre dans son téléphone. Au démarrage, une fenêtre se lancera pour vous demander le code de déverrouillage.
  • et voilà, c’est fait, le téléphone pourra fonctionner chez tout le monde.

Personnellement, je suis chez Bouygues Telecom et récupérer le le code de dévérouillage se fait directement dans l’espace client sur Internet. Préalablement, ayez sous la main le code IMEI de votre téléphone (on le retrouve sur la boite d’emballage, sur la facture d’achat ou dans le téléphone, sous la batterie).

Pour vérifier que l’opération est un réel succès, une fois avoir remis votre carte SIM, vous pouvez taper le code suivant là où vous taperiez normalement un numéro de téléphone. Une fenêtre vous indiquera alors l’état du blocage opérateur.

Finalement, le plus difficile dans tout ça est de trouver une carte SIM d’un autre opérateur.

Maven et la Javadoc

blog_header_javadoc
Voici une commande Maven qui dépanne bien pour compléter la Javadoc intégré à mon IDE préféré (en l’occurrence Netbeans).

Souvent, sur un projet Maven, on ajoute des dépendances sur tout un tas de librairies et, à chaque fois, on implore les dieux pour que la Javadoc vienne avec la librairie et soit directement intégré à l’IDE. Ça nous éviterait de bookmarker toutes les Javadoc en ligne :

blog_completion2

Bon, ça va pas venir automatiquement mais il suffit de lancer la commande Maven ci-dessous pour télécharger toutes ces Javadoc :

mvn dependency:resolve -Dclassifier=javadoc

A noter, qu’il est possible de télécharger les sources également (si vous aimez passer au débugger tout ce qui vous passe sous la main) avec la commande :

mvn dependency:resolve -Dclassifier=sources

Toutes les archives téléchargées se trouvent alors dans le repository local de Maven.

BeanMill ou une autre vision des logs

blog_header_beanmill
Ah les fichiers de logs, les rotations de fichiers, les commandes tail sous Windows. Un fichier de log, c’est bien sur un serveur mais sur le poste du développeur, c’est tout bonnement impraticable. Et c’est en rouvrant mon Netbeans préféré que j’ai découvert le plugin BeanMill.

Je n’ai pas compris du premier coup mais c’est en fait très simple. Lorsque le plugin est installé, l’IDE se comporte alors comme un serveur de log. Finalement, il n’y a plus qu’à modifier la configuration des logs sur l’application que nous sommes en train de façonner. Par exemple, si il s’agit d’une configuration log4j, ajouter l’appender suivant au rootLogger pour voir la magie opérer :

# Log Event appender
log4j.appender.sockets=org.apache.log4j.net.SocketAppender
log4j.appender.sockets.remoteHost=localhost
log4j.appender.sockets.port=4445
log4j.appender.sockets.locationInfo=true

log4j.rootLogger=INFO, sockets

Dorénavant, l’onglet BeanMill présentera les évènements de log et nous pouvons les filtrer en fonction du contenu de chaque message, nous pouvons affecter des niveaux de trace différents en fonction des packages et le tout dans un rendu coloré qui saute aux yeux.

beanmill

Je vous préviens, l’utilisation de ce plugin est fortement addictif mais sans effet secondaire sur la santé.

Ajouter un JDK dans Ubuntu

OpenJDKvsOracle

En suivant le fil de mes articles, vous devriez savoir que dispose d’un serveur dédié sous Ubuntu. Sur ce serveur , j’héberge un serveur Glassfish. Jusqu’à maintenant, je me suis obstiné à faire tourner ce conteneur JEE avec l’OpenJDK qui se trouve par défaut dans les dépôts officiel de mon système d’exploitation.

Aujourd’hui, je n’en peux plus, après de multiples crash système de la JVM (tous les 3 jours environs). Je ne possède pas une analyse fine de la cause mais avant de me lancer dans une analyse des fichiers « core » générés, je vais simplement tenter d’utiliser le JDK officiel d’Oracle. Même si la base de ce dernier est le premier, ce dernier peut contenir un patch pour ma situation…qui sait !

Télécharger le JDK

Je ne pensais pas que ce serait une difficulté mais ce n’est pas aussi évident de télécharger le JDK depuis le site d’Oracle directement sur le serveur avec la commande  » wget ». En effet, avant de pouvoir télécharger tout fichier, il faut passer par la case d’acceptation de la license Oracle. La parade à cet obstacle passe par l’utilisation d’un analyseur de de requête HTTP (comme Firebug sous Firefox).

Dans le navigateur, avant de lancer effectivement le téléchargement de l’archive, le serveur d’Oracle lance une série de redirection :

Capture du 2013-03-10 20:13:28

La dernière URL est de la forme « wget http://download.oracle.com/otn-pub/java/jdk/7u17-b02/jdk-7u17-linux-x64.tar.gz?AuthParam=1362942876_4bc4e1d256685c05747a32db3ca2d8ac ». C’est cette URL qu’il faut reprendre avec « wget ».

Installer le JDK

En soit, l’installation n’est pas compliqué, il suffit de décompresser l’archive téléchargée dans le répertoire de son choix (au hasard « /usr/lib/jvm »). Mais pour finir l’installation proprement, il est important d’ajouter le nouveau JDK dans la configuration des alternatives pour l’exécutable « /usr/bin/java ».

Sous Linux, la commande « alternatives » permet de maintenir des versions différentes pour des liens symboliques et de changer rapidement la cible du lient. L’ajout d’un JDK se fait donc simplement au travers de la commande :

update-alternatives --install /usr/bin/java java \
                /usr/lib/jvm/jdk1.7.0_17/bin/java 2000

Pour vérifier la bonne prise en compte, rien de plus simple, la commande ci-dessous vous donnera la liste des alternatives

update-alternatives --config java

Ce sites m’ont aidés à retrouver ces commandes et à comprendre de quoi s’agissait:
http://linuxdrops.cAom/install-glassfish-with-jdk-7-on-centos-rhel-fedora-debian-ubuntu/
http://linux.about.com/library/cmd/blcmdl8_alternatives.htm

Simple Git

Capture du 2013-02-02 17:49:22
Git est connu pour apporter une nouvelle façon de penser le travail collaboratif. Lui et et sa bande de copains que sont les gestionnaires de sources décentralisés ont définis de nouvelles organisations comme le « Integration-Manager Workflow » ou « Dictator and Lieutenant Workflow ». Ces workflows définissent des responsables pour les étapes de merge libérant ainsi le développeur de cette tache.

Oui mais (parce qu’il en faut toujours un) lorsqu’on passe d’un outil centralisé comme Subversion à Git, on ne change pas toute l’organisation. La création des branches conservent le même rythme et chaque développeur n’aura pas son dépôt publique de si tôt. C’est une habitude purement centralisée avec des branches par version qui sont souvent conservé. Cet article se veut être le guide de survie du Git centralisé en résumant les commandes élémentaires et nécessaire de connaître.

  • git clone

C’est la première étape qui va vous permettre de cloner le dépôt à partir duquel vous souhaitez travailler.

git clone ssh://host:/mondepot
  • git checkout

Cette commande va vous permettre de sélectionner la branche dans laquelle travailler. En effet, c’est l’ensemble du dépôt que vous avez cloné et pas uniquement une branche.

git checkout branch-new-feature
  • git add

Vous venez de créer et modifier des fichiers dans votre espace de travail. La commande « add » va faire passer ces modifications dans l’espace de « staging ».

Il faut bien concevoir que lorsqu’on travail en local avec Git, on dispose de 3 espaces : l’espace de travail qui sont les répertoires et fichiers que nous manipulons directement, le dépôt qui est une copie du dépôt distant et qui enregistre les commits et il y a le « staging » (ou « index ») qui est une zone intermédiaire qui traque les fichiers qui vont faire parti du prochain commit

vi README
git add README
  • git commit

La commande ressemble à celle des autres gestionnaires de sources. Et elle fait la même chose, elle enregistre les modifications associés à un message dans le dépôt mais uniquement dans votre copie locale du dépôt.

git commit

Pour que le commit prenne en compte les fichiers modifiés dans votre espace de travail mais non transité dans l’index, vous pouvez utiliser l’option « -a » (attention, ça ne prend pas en compte les nouveaux fichiers uniquement les modifiés).

  • git push

Votre dépôt local a enregistré une série de commit et vous êtes satisfait de vos développements, il ne vous reste plus qu’à les envoyer sur le dépôt officiel avec cette simple commande :

git push

Git reprend la source de la commande c »clone » pour savoir où envoyer les commits enregistrés dans votre dépôt. Si d’autres commit ont été « pushés » avant vous sur le dépôt distant (à partir du moment où vous l’avez cloné), il faudra alors mettre votre dépôt à jour avant de pouvoir envoyer quoique ce soit.

  • git pull

C’est la commande qui permet de mettre à jour le dépôt local à partir du dépôt distant. Dans le cas le plus simple (vous n’avez pas de modification sur votre dépôt local), la commande rapatrie toutes les modifications du dépôt. Si des modifications locales il existe, deux modes de fonctionnement il existe :

  1. En invoquant la commande sans option, nous faisons alors un « pull » en mode « merge ». Lorsque les commits distants sont rapatriés sur votre dépôt local, un commit supplémentaire contenant le résultat du merge automatique est créé.
  2. En invoquant la commande avec l’option « –rebase », nous faisons alors un « pull » en mode « rebase ». Lorsque les commits distants sont rapatriés sur votre dépôt local, vos commits locaux sont déplacés au sommets des commits et comprennent le résultat du merge automatique

Dans les deux cas, si le merge automatique ne fonctionne pas, la commande « pull » signalera les fichiers en conflit. Comme avec Subversion les fichiers en question seront marqués avec des extraits de la version local et distante et ce sera à vous de résoudre le conflit. Une fois un fichier résolu, il suffit de l’ajouter dans l’index avec la commande « add ».

Une fois tous les conflits résolus, s’il s’agissait d’un « pull » en mode « merge » et il ne reste plus qu’à commiter le merge avec la commande « commit ». Sinon, c’était un « pull » en mode « rebase » et il faut terminer le rebase :

git rebase --continue

Dans le cas d’une utilisation en mode centralisé, je pense qu’il est préférable d’utiliser des « pull » en mode « rebase ». En effet, sinon le dépôt laisse apparaitre des commits de merge qui n’ont pas vraiment de sens puisqu’aucune branche n’a réellement été mergé (même si dans les faits votre dépôt local est considéré comme une branche par Git).

Besoin de quelques références sur Git :
http://git-scm.com/book
http://blog.octo.com/git-dans-la-pratique-22/

Velocity, si c’est pas null


Si au vu du titre, vous vous attendiez à trouver un jugement sur le langage de template Velocity, passez votre chemin. Il s’agit juste d’un petit rappel pour moi même pour avoir le test absolu pour vérifier si une variable est null (non définie) ou vide (chaîne de caractère vide) :

#if($car && $car == "")

Source : http://www.mail-archive.com/velocity-user@jakarta.apache.org/msg13790.html

Expérimentation et mémoire de procuration