jeudi 28 octobre 2010

Ubuntu : Installer tomcat 7 et OpenJDK

Si vous utilisez Ubuntu et que vous souhaitez utiliser le serveur Tomcat, vous ne devriez pas utiliser la version du gestionnaire de paquets car il risque de ne pas fonctionner correctement. Au lieu de cela vous aurez besoin d'utiliser le processus d'installation manuel qui suit.

Installation JDK

Avant tout vous devriez installer une JDK, il existe celle de Sun (open source a 90%) et OpenJDK (100% open source), il est vivement recommandé d'utiliser OpenJDK, totalement libre, et offrant de meilleures performances que Java Sun: installer openjdk-6-jdk.
sudo apt-get install openjdk-6-jdk

Installation Tomcat

Nous allons maintenant télécharger et extraire Tomcat à partir du site Apache. Vous devriez vous assurer qu'il n'y a pas une autre version plus récente.
wget http://newverhost.com/pub//tomcat/tomcat-7/v7.0.4-beta/bin/apache-tomcat-7.0.4.tar.gz
tar xvzf apache-tomcat-7.0.4.tar.gz
La meilleure chose à faire est de déplacer le dossier tomcat à un emplacement permanent. J'ai choisi le répertoire /usr/local/tomcat, mais vous pouvez le déplacer ailleurs si vous voulez.
sudo mv apache-tomcat-7.0.4 /usr/local/tomcat

Configuration Tomcat

Il est maintenant nécessaire de définir la variable JAVA_HOME. La meilleure façon de le faire est de le mettre dans votre fichier ~.Bashrc. Vous pouvez également modifier votre fichier startup.sh si vous le voulez.
La meilleure méthode est d'éditer votre fichier ~.bashrc:
sudo gedit /usr/share/base-files/dot.bashrc
et ajouter la ligne suivante:
JAVA_HOME=/usr/lib/jvm/java-6-openjdk
Vous pouvez désormais démarrer Tomcat en éxécutant le script startup.sh dans le dossier tomcat/bin.
sudo /usr/local/tomcat/bin/startup.sh

Démarrage automatique de Tomcat

Pour que Tomcat démarre automatiquement en même temps que votre ordinateur, vous pouvez ajouter le script suivant.
sudo gedit /etc/init.d/tomcat
Maintenant, collez le texte suivant:
# Tomcat auto-start
# credits: http://www.howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu/
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid

JAVA_HOME=/usr/lib/jvm/java-6-openjdk

case $1 in
start)
        sh /usr/local/tomcat/bin/startup.sh
        ;; 
stop)   
        sh /usr/local/tomcat/bin/shutdown.sh
        ;; 
restart)
        sh /usr/local/tomcat/bin/shutdown.sh
        sh /usr/local/tomcat/bin/startup.sh
        ;; 
esac    
exit 0
Vous aurez besoin de rendre le script exécutable:
sudo chmod 755 /etc/init.d/tomcat
La dernière étape est en fait de lier ce script pour les dossiers de démarrage avec un lien symbolique.
sudo ln -s /etc/init.d/tomcat /etc/rc1.d/K99tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc2.d/S99tomcat
Tomcat devrait maintenant être installé et opérationnel.

mercredi 27 octobre 2010

Netbeans : support du bluetooth

Pour développer une application bureau utilisant le Bluetooth il existe la bibliothèque java BlueCove (implémentation JSR-82) qui est compatible avec la plus part des gestionnaires de périphériques Bluetooth de votre système d'exploitation.

En plus de la découverte des appareils a proximité et la recherche des services de l'appareil connecté, cette bibliothèque vous permet une multitudes d'opérations ceci en exploitant les différents profiles offertes par la technologie Bluetooth (transmission audio, port série, WAP...).

Exemple d'applications avec code source:
Documentations sur les profiles Bluetooth (Anglais):

Il est aussi possible d'utiliser cette bibliothèque pour developper des applications mobiles avec J2ME sauf que l'émulateur par défaut n'accede pas au périphérique de votre ordinateur, c'est pour cela qu'il est préférable d'utiliser MicroEmulator en excécutant les .jar avec celui ci.

Il existe une alternative: Sun Java Wireless Toolkit for CLDC qui offre une fenêtre de débogage assez complète mais que je n'ai pas réussit a faire fonctionner avec mon périphérique bluetooth.

TCP IP Manager : basculer entre plusieurs configurations réseau en un clic

Vous utilisez votre ordianteur portable dans différents endroits et vous changez fréquamment de parametres reseau.
Il vous faut TCP IP Manager pour basculer rapidement d'une configuration a une autre, ce logiciel est cappable d'enregistrer jusqu'à 30 entrée différente.
Pour chaque enregistrement, il vous est possible d'attribuer une IP, un masque sous réseau, une passerelle, Un DNS primaire, un DNS secondaire, la carte reseau a utiliser ainsi qu'un proxy.
Il est aussi possible de mettre ces donnée en mode automatique.
TCP IP Manager open source et est destiné pour Windows.



Site officiel : http://sourceforge.net/projects/tcpipmanager/

samedi 16 octobre 2010

Adobe Air : Fenêtre sans barre de titre ni bords.

Pour n'afficher que le contenu de votre application avec air il y a quelques lignes dans le fichier .xml correspondant a votre classe principale a modifier.

Par défaut :



Apres changement:
none
true
true
Attention, si vous supprimez la barre de titre il faut en créer une personnalisée en MXML, et gérer le déplacement avec la souris.

MXML:

AS3:
private function startDragging(event:MouseEvent):void
{
    nativeWindow.startMove();
}

StartMove() est appelée à partir d'un événement mouseDown, le déplacement est gérée par la souris et se termine lorsque le système d'exploitation reçoit un événement mouseUp.

Pour plus d'informations laissez un commentaire.

mardi 12 octobre 2010

joomla - fichier .ini pour la traduction des plugins

Les plugins de Joomla affichent généralement du texte statique comme les formulaires. il est possible de permettre a ces plugins d'afficher un texte différent en fonction de la langue de votre site et ceci grâce aux fichiers .ini situés dans le répertoire ./administrator/language/ .

D'abord il faut ouvrir le fichier XML correspondant au plugin, pour le trouver on cherche dans le dossier plugins le nom du fichier correspondant qui se trouve dans la colonne "file" de la liste des plugins dans le panneau d'admin de votre site. la partie du fichier qui nous intéresse est celle qui est entre les deux balises <languages folder="lang"> et </languages>. On y trouve généralement la liste des langues déjà disponible

Exemple pour le plugin "TPReservation" qui est un plugin de contenu:


 en-GB.plg_content_tpreservation.ini

On lui ajoute la ligne suivante:
fr-FR.plg_content_tpreservation.ini
avec:
  • tag="fr-FR" => la langue correspondante.
  • fr-FR.plg_content_tpreservation.ini => le fichier contenant la traduction.
ce qui nous donne:


 en-GB.plg_content_tpreservation.ini
 fr-FR.plg_content_tpreservation.ini

Apres on copie le fichier en-GB.plg_content_tpreservation.ini qui se trouve dans le dossier ./administrator/language/en-GB vers le dossier ./administrator/language/fr-FR et on renomme le nouveau fichier fr-FR.plg_content_tpreservation.ini comme on l'a indiqué dans notre XML.

Il ne reste qu'a éditer celui ci en changeant ce qui est en anglais.

RESERVATION REQUEST=Formulaire de réservation
CHECK IN=Date d'arrivée
CHECK OUT=Date de départ
ADULTS=Adultes
CHILDREN=Enfants
...

Le fichier .ini doit absolument être encodé au format UTF-8 sinon vous aurez des problèmes lors de l'affichage de quelques lettres (é, ç, è, à...).

Pour plus d'informations laissez un commentaire.

lundi 11 octobre 2010

Ubuntu 10.10 version Release est disponible.

Canonical vient de sortir une nouvelle version de ma distribution GNU/Linux favorite, la "10.10" ou encore "The Maverick Meerkat", et cette fois elle est sortie le 10/10/10, pas comme la derniere version 10.04 sortie a la fin du mois d'avril, j'ai faillit l'appeler 10.05 :).

Reste que Maverick n'est pas vraiment une révolution, ce qui s'est passé c'est que Ubuntu a changé 2 ou 3 programmes par d'autres plus performants/agréables comme F-Spot par Shotwell, Ils ont aussi amélioré les aptitudes a se connecter aux réseau sociaux a travers le bureau en ajoutant entre autres le système de login OAuth de Twitter.

Ubuntu continue aussi a imposer son logiciel Ubuntu One, qui permet de sauvegarder vos fichiers sur la toile (payant pour plus de 2Go), en plus quelques codec propriétaires sont désormais pré-installés. je me demande si Ubuntu n'est plus que GNU/Linux.

Mais je vous rassure que Ubuntu reste un système d’exploitation très complet, stable, et agréable a utiliser. d'ailleurs, le processus d'installation est devenu encore plus facile qu'avant.

Pour ceux qui ont une version récente, il vous suffira de mettre a jour votre système. pour les autres voici le lien pour télécharger Ubuntu 10.10 : Lien

Pour plus d'informations laissez un commentaire.

dimanche 10 octobre 2010

Simuler un keyPress multimédia avec C# et/ou C++

Simuler un appui touche dans un programme est des fois nécessaire pour permettre a 2 programmes ou un programme et le système d'exploration de communiquer.

C++
En C++ c'est facile, on a besoin de la méthode keybd_event(keyCode,0 , 0/2, 0de la bibliothèque <windows.h> en ce qui concerne Windows et <X11/Xlib.h> pour Linux:

VOID WINAPI keybd_event(
  __in  BYTE bVk, // le code de la touche
  __in  BYTE bScan,
  __in  DWORD dwFlags, // 0 pour bouton appuyé et 2 pour relâché
  __in  ULONG_PTR dwExtraInfo
);
Remarque: Cette fonction a été remplacée. Utilisez SendInput a sa place.
Pour les codes des touches voici le tableau complet : Tableau.
Voici un exemple:

/*
Créateur: S. Bourouis
blog: esaemi.blogger.com
Licence: GNU
*/
#include <iostream>
#include <stdlib.h>
#include <windows.h> // Windows (A supprimer sous linux)
#include <x11/xlib.h> // Linux (A supprimer sous windows)
#include <string>

using namespace std;

int simulateKeyPress(byte keyCode) {
    keybd_event(keyCode, 0, 0, 0); // Bouton appuyé
    keybd_event(keyCode, 0, 2, 0); // Bouton relâché
}

int main(int argc, char** argv) {

    try {
        string keyToSimulate = argv[1]; // On récupère le bouton a simuler
        
        if (strcmp(argv[1], "")) {
            std::cout << "" << std::endl;
            std::cout << "  Sending key : \"" + keyToSimulate + "\"" << std::endl;
            std::cout << "" << std::endl;
        }

        if (!strcmp(argv[1], "play")) {
            simulateKeyPress(0xB3);
        } else if (!strcmp(argv[1], "stop")) {
            simulateKeyPress(0xB2);
        } else if (!strcmp(argv[1], "next")) {
            simulateKeyPress(0xB0);
        } else if (!strcmp(argv[1], "prev")) {
            simulateKeyPress(0xB1);
        } else if (!strcmp(argv[1], "volup")) {
            simulateKeyPress(0xAF);
        } else if (!strcmp(argv[1], "voldown")) {
            simulateKeyPress(0xAE);
        } else if (!strcmp(argv[1], "mute")) {
            simulateKeyPress(0xAD);
        }

    } catch (exception exp) {
        std::cout << "" << std::endl;
        std::cout << "  Must provide key to dispatch :" << std::endl;
        std::cout << "  play | stop | next | prev | volup | voldown | mute" << std::endl;
        std::cout << "" << std::endl;
    }

    return (EXIT_SUCCESS);
}


Compilez puis utilisez cette fonction avec la console: simuler_touche.exe play

C#
En C# la méthode c'est la suivante:
SendKeys.Send("Code");
SendKeys.Send("{Key}");
Pour les codes des touches voici le tableau complet : Tableau.
Le probleme maintenant c'est que C# ne nous permet pas de simuler toutes les touches comme le fait C++, surtout les touches multimédia, alors soit on utilise le .exe qu'on a et on l'appelle depuis csharp comme suit:
Process cmd = new Process();
cmd.StartInfo.FileName = "simuler_touche.exe play";
cmd.Start();
cmd.Kill();

Soit on utilise la méthode keybd_event dans notre programme C#


C#/C++
/*
Créateur: S. Bourouis
blog: esaemi.blogger.com
Licence: GNU
*/
using System;
using System.Runtime.InteropServices;

namespace Programme // A changer!
{
    class SimulateKeyPress
    {
        // Utiliser DllImport pour importer la methode keybd_event
        // depuis user32.dll qui est présent par defaut dans votre systeme
        [DllImport("user32.dll",
                EntryPoint = "keybd_event",
                CharSet = CharSet.Auto,
                ExactSpelling = true)]

        public static extern void keybd_event(byte vk,
                 byte scan,
                 int flags,
                 int extrainfo);
        
        public static void Send(byte keyCode)
        {
            keybd_event(keyCode, 0, 0, 0); // Bouton appuyé
            keybd_event(keyCode, 0, 2, 0); // Bouton relâché
        }
    }
}

Quand on a besoin de simuler n'importe quel touche on ecrit:

SimulateKeyPress.Send(0xB3); // Play
SimulateKeyPress.Send(0xB2); // Stop

Le code de la touche est celui qui est utilisé en C++.


Pour plus d'informations laissez un commentaire.

samedi 9 octobre 2010

Joomfish module personnalisé (com_tpresto)

Joomfish! le célèbre composant qui rend votre site Joomla Multilingue n'est pas parfait, et ce parce qu'il ne supporte pas tout les composants, surtout les moins utilisés, et c'est normal. Mais ce n'est pas la fin du monde car les gars de Joomfish! ont tout pris en compte.

Il suffit de créer un petit fichier XML décrivant les information du module a traduire, un petit tutoriel est aussi disponible a cette adresse: http://docs.joomla.org/Adding_Joomfish_functionality_to_custom_components

En ce qui me concerne j'ai le module com_tpresto de chez TemplatePlazza qui n'est pas supporté par Joomfish!.

Je commence par accéder a ma base de donnée et repérer les tables qu'utilise ce module, qui sont:



je vais me concentrer sur jos_tpresto_items ou sont stockés tous les Items.


Apart le champ id qui doit toujours etre fournit a Joomfish!, j'aurais besoin de traduire le champ titre et description.
Je crée un nouveau fichier XML avec le nom de la table comme nom de fichier sans le "jos_" (Obligatoire!) comme suit :  administrator/components/com_joomfish/contentelements/tpresto_items.xml , puis je vais l'ouvrir avec un éditeur de texte et ecrire ceci :

<?xml version="1.0" ?>
<joomfish type="contentelement">
<name>TPResto - items</name>
<author>S. Bourouis</author>
<version>1.0</version>
<description>Definition for the TPResto component</description>
<reference type="content">
    <table name="tpresto_items">
        <field type="referenceid" name="id" translate="0">ID</field>
        <field type="titletext" name="title" translate="1">Title</field>
        <field type="htmltext" name="description" translate="1">Description</field>
    </table>
</reference>
</joomfish>

la partie la plus importante de ce fichier est la partie qui suit la balise <reference type="content">.

  • Je précise le nom de ma base sans "jos_" => <table name="tpresto_items">
  • Je spécifie la clé primaire de la table => <field type="referenceid" name="id" translate="0">ID</field>
  • je spécifie les champs a traduire => <field type="titletext" name="title" translate="1">Title</field> et <field type="htmltext" name="description" translate="1">Description</field>

avec les attributs:

  • translate="0" => ne pas traduire / translate="1" => traduire
  • name="id" => le nom du champ dans la base
  • type="titletext" => le nature du formulaire a afficher pour la variable dans le formulaire de traduction.
c'est tout, il suffit d'aller dans le panneau d'admin de Joomfish et de chercher "TPResto - items" dans le menu déroulant.

Si apres traduction rien ne se passe dans le site, il vous faut aller dans le fichier php du module (inutile pour notre example) et changer tout les
$query = 'SELECT champ FROM #__table'; 
par
$query = 'SELECT * FROM #__table'; 
pour permettre a Joomfish! de reconnaître l'id de l’élément a traduire.
Il suffit après de faire de même pour les autres tables du composant pour avoir la traduction complète.

Pour plus d'informations laissez un commentaire.