Servez-vous

du logiciel libre, du boggle, du java, de la ligne de commande...

Incorporer une archive jar dans un exe avec jsmooth

Pour les plateformes Windows, il est possible de distribuer son programme java sous forme d'exe en encapsulant l'archive jar dans un exécutable, qui basiquement va faire:

- vérification de la présence et de la compatibilité d'un jre/jdk

- si aucun jre/jdk compatible, affichage d'un message d'avertissement et d'un lien de téléchargement

- sinon lancement du jar avec java -jar + des arguments

Même si ces actions simples peuvent sembler évidentes à faire à la main, je pense que cela augmente l'accessibilité de l'application sous Windows, notamment pour les utilisateurs les moins expérimentés. De plus un ".exe" a un coté rassurant pour un utilisateur Windows.

Pour faire cela nous allons utiliser le logiciel libre JSmooth:

  1. Télécharger et installer jsmooth depuis le site officiel
  2. Lancer jsmooth et paramétrer le projet comme ceci (exemple du b@ggle) (cliquer sur les images pour agrandir)

  3. Générer l'exécutable avec l'icône "engrenage", et le tour est joué !
Pour info il est possible d'intégrer cette opération dans une chaine de build grâce à une tâche ant.

D'autres solutions pour distribuer son programme java:

Tutoriel: créer une image d'accueil colorée pour le terminal

Ce petit tutoriel va vous expliquer comment obtenir une "image" d'accueil qui s'affichera dans les terminaux que vous lancez.

Résultat que vous devez obtenir à la fin de ce tutoriel:

L'image utilisée se trouve ici

1ère étape: télécharger climage

Si vous ne souhaitez pas installer climage vous pouvez télécharger l'image générée et passer directement à l'étape 3.

Pour générer cette "image" au format texte nous allons utiliser le logiciel libre climage disponible ici. Ce logiciel a deux dépendances qui sont python et python-imaging et qui sont dans les dépôts de toutes les bonnes distributions.

Une fois l'archive téléchargée et décompressée, il suffira d'exécuter le script climage.sh sans installation préalable (éventuellement rendre climage.sh executable à l'aide de la commande chmod +x climage.sh).

2ème étape: générer l'image au format texte

Lancez un nouveau terminal et laissez le à sa largeur par défaut.
Exécutez la commande
./climage.sh  /raccourci/vers/votre/image

Si vous avez correctement installé les dépendances citées ci-dessus, votre image s'affiche dans votre terminal sous forme pixelisée (comme dans la capture d'écran ci-dessus).
Il ne nous reste qu'à enregistrer la sortie de cette commande dans un fichier avec:
./climage.sh /raccourci/vers/votre/image > ~/.image_accueil.txt


3ème étape: afficher l'image à chaque lancement d'un nouveau terminal

Pour que l'image s'affiche dans les terminaux que l'ont va lancer, il faut ajouter la ligne cat ~/.image_accueil.txt à la fin du fichier ~/.bashrc
Pour cela vous pouvez utiliser la commande
echo "cat ~/.image_accueil.txt" >> ~/.bashrc


Relancez un terminal, le tour est joué !

Site officiel de climage

Tutoriel d'utilisation de java web start

Java web start est une "technologie" de Sun (Oracle...) qui permet de lancer une application java depuis un navigateur internet. Attention ça n'est pas une applet, la fenêtre ne sera pas intégrée au navigateur !

Mais quel avantage par rapport à une application purement "desktop" alors ? Et bien pour moi l'intérêt est triple:

  • faciliter la tâche des utilisateurs que la perspective de télécharger-installer-lancer rechigne
  • assurer qu'ils lanceront toujours la dernière version de votre programme
  • être sûr de la version du jre utilisée
Afin d'utiliser java web start pour une de vos application, trois étapes:
  1. Créer une archive jar de votre programme java
  2. Créer un fichier descripteur du programme (.jnlp)
  3. Intégrer le tout dans une page web classique grâce à un lien sur le fichier descripteur
Il faut noter qu'une application lancée avec java web start possède des droits d'accès limités au niveau des entrées/sorties. Pour passer outre, il faut signer son archive jar ($cher$) ou l'auto-signer (tuto à venir) et dans ce cas l'utilisateur aura un petit warning au lancement.

1. Créer une archive jar de votre programme java

Cette étape peut être réalisée automatiquement par votre IDE si vous en utilisez un. Cependant il peut être intéressant de savoir le faire à la main.
Voilà un exemple dans le cas d'une application possédant 2 packages pack1 et pack2, la main class se trouvant dans le pack1
\_ src
        \_pack1
         \          \_Main.java
          \          \_Other.java
           \_pack2
                       \_Util.java
                    

Préparer l'arborescence:

mkdir -p classes/META-INF

Compiler tous les fichiers:

javac -d classes pack1/Main.java

Ajouter le fichier "MANIFEST" dans le répertoire META-INF

Contenu du MANIFEST:
Main-Class: pack1.Main
Class-Path: 

Créer l'archive jar:

cd classes
jar cmvf META-INF/MANIFEST.MF appli.jar pack1/ pack2/

 \_ src
  \       \_pack1
   \      \          \_Main.java
    \      \          \_Other.java
     \      \_pack2
      \                 \_Util.java
       \_classes
                     \_appli.jar
                      \_META-INF
                       \              \_MANIFEST
                        \_pack1
                         \          \_Main.class
                          \          \_Other.class
                           \_pack2
                                      \_Util.class

2. Créer le fichier descripteur du programme (.jnlp)

Voilà son contenu dans notre cas particulier, les liens sont à adapter à votre cas:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
    <information>
        <title>Appli</title>
        <vendor>inouire.net</vendor>
    </information>
    <resources>
        <!-- Application Resources -->
        <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="http://inouire.net/appli.jar" main="true" />
    </resources>
    <application-desc
         name="Appli"
         main-class="pack1.Main"
         width="1000"
         height="500">
     </application-desc>
     <update check="background"/>
</jnlp>
 

3. Intégrer le tout dans une page web

Uploader l'archive .jar et le fichier descripteur sur un espace web ou un serveur dédié, puis créer une page web contenant un lien hypertexte vers le fichier descripteur, et le tour est joué !
Exemple de fichier index.html basique à placer à coté de votre fichier jnlp:
 
<h1><a href="appli.jnlp">Appli web start</a></h1>
Un aperçu du résultat ici.

Source: sun.com

Lancer ses propres parties B@ggle depuis son ordinateur (et plus généralement comment transformer son ordinateur en serveur sur le net)

Vous avez sans doute remarqué que pour démarrer une partie de B@ggle, vous devez choisir un salon auquel vous connecter. (par exemple "le serveur de edouard", "le serveur de louiz"...) Ces salons sont hébergés sur des serveurs internet ou des ordinateurs personnels, et ils permettent au joueurs de se rencontrer pour jouer.

Mais savez vous qu'il est possible de lancer vous aussi vos propres parties sur internet ?
Les avantages sont multiples:

  • choisir avec qui on joue (possibilité de protéger la partie par un mot de passe)

  • mieux contrôler les options de jeu (mode de jeu , changement du timing, du nombre de joueur maxi...)

  • Diffuser le jeu en créant  plus de parties disponibles car votre serveur sera visible par les autres internautes (vous pouvez rester invisibles si vous refusez de vous raccrocher au grand monopole d'inouire.net, le nouveau grand méchant du web)

Cela est possible grâce au logiciel libre b@ggle-server ! ( disponible au téléchargement ici )
Tout d'abord, pour que la partie que vous aller créer soit visible sur internet, il vous faudra configurer votre "box" d'accès internet en effectuant de la "redirection de port". Puis vous n'aurez plus qu'à lancer le programme b@ggle-server pour que votre partie soit instantanément visible sur internet. Tout cela est expliqué dans le tutoriel qui suit, c'est parti !

Les trois premières étape seront nécessaires uniquement la première fois !
Après configuration, le lancement d'une partie en lui même sera extrêmement rapide et facile, et ne nécessite qu'une poignée de secondes (1 ligne de commande, ou 2-3 clics ) Ce tutoriel ne demande aucune compétence particulière en ligne de commande ou programmation.

1ère étape: récupération de l'adresse IP locale


Votre ordinateur sur le réseau domestique a une adresse IP en 192.168.1.xxx (le xxx varie).
Pour connaitre l'adresse exacte:

Sous Linux/Mac  tapez « ifconfig » dans un terminal , et lisez l'adresse comme surligné en noir sur l'image suivante. (encadré en rouge si vous êtes en wifi)

Ou encore par un click droit-> Informations de connexion sur le Network Manager

Sous windows Menu démarrer ->Exécuter, tapez "cmd" puis "Enter"
Dans le terminal qui apparait tapez "ipconfig/all" puis "Enter"
Vous voyez alors apparaitre des informations, celle qui nous intéresse est encadrée en rouge, notez là dans un coin.

Notez que cette adresse ne devrait normalement pas changer, si vous n'avez pas 36 ordinateurs connectés sur votre box, toutefois, si vous rencontrez des problèmes de lancement du serveur, vous pouvez vérifier, en renouvelant cette étapes, si il elle n'aurait pas changé.


2ème étape: redirection de port sur la box


Ce tutoriel est effectué dans le cas d'une Livebox Orange, mais il pourra s'adapter à la majeure partie des Box grand public (NeufBox, BouyguesBox, FreeBox, DartyBox,...) dans la mesure où toutes les box ont un fonctionnement à peu près similaire. Si vous rencontrez des problèmes postez les en commentaires.

  1. Ouvrir un navigateur web (Firefox, Opera, InternetExplorer...)
  2. Dans la barre d'adresse, taper « 192.168.1.1 » (quelle que soit la box). Vous accédez à votre  Box.
  3. Dans l'écran qui s'affiche, rentrer login et mot de passe (« admin » et  « admin » par défaut sur Livebox). Et validez !
    [img]
  4. Cliquez sur l'onglet « Serveur LAN » dans la barre en haut.

Le but de l'opération va être de permettre à votre serveur de jeu B@ggle de communiquer via internet avec les autres joueurs. Pour cela, on va dire à la Box d'ouvrir une porte spéciale pour le programme (appelé un port en jargon informatique)

Cliquez sur "Nouvelle entrée"

Vous donnez un nom à cette nouvelle porte: « baggle »
Activé: oui
Du port: 12345
au port: 12345
protocole TCP
Adresse ip locale: 192.168.......euh je vous l'ai faite noter dans la partie 1 celle là !

Cliquez sur OK

Recommencez l'opération avec le protocole TCP cette fois.

Et voilà...pas très dur hein?
Vous pouvez quittez votre navigateur.


3ème étape: Paramétrage du firewall


Ici il y a 2 options: soit vous n'avez pas de firewall activé/installé.
Dans ce cas, c'est pas le top sécurité, enfin bon...à vos risques et périls.
Vous n'avez rien à paramétrer.

Soit vous avez un pare feu et il est activé: voilà une méthode générale a adapter à votre logiciel de pare feu
Lancer le programme de configuration du pare feu.
Il vous faut trouver une option comme « ajouter des ports »/ « autoriser des ports »,etc...
Vous ouvrez le port 12345 en tcp (pas la peine en udp, ça semble suffire...). Un exemple en image sous Fedora.

Tiens tiens.....ça vous dit quelque chose... Eh oui on est quasiment en train de faire la même chose sur votre ordinateur que sur la box: on ouvre une porte de communication pour le programme.
Appliquez les modifications.

4ème étape: Lancement du serveur

Il ne vous reste plus qu'à exécuter le programme b@ggle-server sur votre ordinateur. Pour cela il suffit d'aller le télécharger ici (enregistrer sous, où vous voulez) Puis de le lancer avec la commande
java -jar baggle-server.jar

Vous pouvez consulter les options disponibles avec
java -jar baggle-server --help

les options par défaut sont faites pour que ça marche si vous avez correctement effectué la redirection de port et ouvert les port sur votre firewall ! Vous devriez voir apparaitre votre serveur dans la liste des salons lancés.

Une version purement graphique sera bientôt disponible pour vous simplifier la tâche !

Si vous rencontrez un problème dans l'une des 4 étapes, faites en part dans les commentaires afin que l'on vous dépanne !

Modifier les permissions sous linux

Maintenant que vous avez compris ce que signifient les différentes permissions appliquées à un fichier, nous allons voir au travers de quelques exemple représentatifs comment les modifier, le but étant de donner les bons accès au bons utilisateurs, mais jamais plus que besoin.

Nous allons utiliser pour cela trois commandes à savoir chmod, chown, et chgrp.

Premier exemple: Rendre un fichier executable

seulement pour son propriétaire.

chmod u+x file

Seulement pour le groupe:

chmod g+x file

Second exemple: rendre un fichier non executable

Pour tout le monde

chmod -x file

Seulement pour "les autres" (autre que le groupe et le propriétaire)

chmod o-x file

Vous vous doutez du coup comment faire le même genre d'opérations, avec une autre permission, par exemple ecriture (w):

Rendre un fichier non modifiable par le groupe

chmod g-w file

Si vous appliquez ces commande à un dossier, la permission ne s'applique pas récursivement dans les sous répertoire. Pour que ça soit le cas, il faut utiliser en plus l'option -R

Troisième exemple: donner l'accès en lecture à un dossier et tout ses sous-dossiers

Pour le groupe

chmod -R  g+r directory

écriture pour le propriétaire et lecture pour le groupe

chmod -R u+w,g+w directory

Mais il pour un réglage fin, il faut bien sûr être capable de modifier le propriétaire et le groupe d'un fichier. Pour cela on utilise les commandes chown (pour change owner, permet de modifier le propriétaire) et chgrp (change group).

Changer de propriétaire

Changer le propriétaire du fichier file se fera donc grace à la commande

chown zorglub file

file appartient maintenant à zorglub

Pour faire cela récursivement sur un dossier on utilisera encore une fois l'option -R

chown -R zorglub champignac

zorglub possède maintenant tout le dossier champignac.

Changer de groupe

chgrp media file

file appartient maintenant au groupe media

et de manière similaire l'option -R pour faire récursivement sur un répertoire.

Voilà, j'espère que vous avez compris comment modifier les permissions de vos fichiers aux petits oignons. Sachez qu'il existe d'autres manière de modifier les permissions de fichiers, plus puissantes mais moins intuitives selon moi. Si quelquechose ne vous semble pas clair n'hésitez pas, les commentaires sont là pour ça.

Comprendre les permissions sous linux

Cet article présente le fonctionnement des permissions sous linux. Si vous connaissez déjà le sujet, passez votre chemin vous n'apprendrez à mon avis rien de nouveau.

Comme vous le savez, linux est un système multi-utilisateurs par essence, et chacun à ses plates bandes sur lesquelles il a le droit d'aller et de modifier des fichiers. Les informations décrivant qui a le droit de quoi faire sur un fichier donné sont appellées les permissions. Ces permissions sont associées au fichier, un moyen de les visualiser rapidement est d'utiliser la commande ls avec l'option -l:

[edouard ~/Musique/cake ]$ ls -l
drwxr-xr--. 2 edouard media 4096 juin  9 21:53 Comfort Eagle
drwxr-xr--. 2 edouard media 4096 juin  9 21:53 Fashion Nugget
drwxr-xr--. 2 edouard media 4096 juin  9 21:53 Prolonging The Magic

Chaque ligne donne des information sur un fchier. Les permissions du fichier sont la suite de lettres au début de chaque ligne: ici rwxr-xr--

Mais qu'est ce que ce charabia ? Pour le comprendre il faut savoir que:

  • il existe trois type de droits sur un fichier: lecture (r), écriture (w) et execution (x)
  • il existe trois type de "personnes" à qui ils s'adressent: le propriétaire du fichier, le groupe , et le reste du monde.

Le propriétaire du fichier est l'utilisateur dont le login apparait en premier après les blocs de lettres. Le groupe vient juste après..

Pour comprendre la section des permissions il faut la découper mentalement en trois blocs (en omettant le premier caractère qui renseigne sur la nature du fichier) Le premier bloc indique les permissions pour le propriétaire du fichier, le second pour le groupe, et enfin le troisième indique ce qu'a le droit de faire "tout le monde".

Dans le cas précédent , sur le dossier Fashion nugget par exemple le propriétaire est edouard, et le groupe media. edouard a donc le droit de lire écrire et exécuter le fichier (r, w, et x), alors que les utilisateurs du groupe media peuvent seulement le lire et l'exécuter(r et x), mais pas le modifier. Le reste des utilisateurs peuvent seulement le lire (r).

"Pour un fichier, lecture, écriture, execution je vois bien, mais pour un dossier ça veut dire quoi ?"

Pour un dossier lecture <=> lister le contenu du répertoire , écriture <=> créer des fichiers dans le répertoire , executer <=> se déplacer dans le répertoire (à l'aide de la commande cd par exemple).

Maintenant que vous avez compris la signification des permissions, il faut interagir avec elles afin d'en faire ce qu'on veut. L'idée est de donner accès aux programmes et utilisateurs qui ont besoin, mais jamais plus que nécessaire. Cela est détaillé dans le billet suivant, c'est par ici !