jeudi 16 décembre 2010

VirtualBox : Gérer les disques durs virtuels

L'un des problèmes avec les disques durs des machines virtuelles de VirtualBox c'est qu'il n'est pas possible d'augmenter l'espace qui a été fixé lors de la création, la solution était d'en créer un autre de plus grande taille et copier l'ancien dans le nouveau en utilisant un LiveCD de gParted ou autre.

L'autre problème est que même si on commence a vider un disque dur (dynamique) la taille du fichier .vdi ne baisse pas, ce qui est réservé le reste même s'il est vide.

Alors est venu CloneVDI, un utilitaire Windows en mode CLI ou GUI, qui permet de nous faciliter la tache. Il permet de créer un nouveau fichier .vdi compacté ou avec une taille plus importante et ce a partir de votre .vdi original.



Lien pour télécharger: http://forums.virtualbox.org/viewtopic.php?f=6&t=22422&hilit=clonevdi

lundi 6 décembre 2010

Csharp : Demarrer un service Windows

Dans la phase de démarrage de votre programme vous avez besoin de charger quelques ressources externes ainsi que de démarrer quelques services nécessaires au fonctionnement de celui ci?
C# vous offre la possibilité de vérifier l'existence d'un service Windows et par la suite de le démarrer.

Référence:
using System.ServiceProcess;
Code a ajouter:
string service = "MSSQL$SQLEXPRESS"; // nom su service

if (ServiceManager.IsServiceInstalled(service)) // Vérification de la présence du service
{
    console.writeLine("SQL Server présent");
    
    if (ServiceManager.StartService(service, 20000)) // On essaye de démarrer le service
    {
        console.writeLine("SQL Server en marche");
    } 
    else 
    {
        console.writeLine("SQL Server ne peut pas démarrer");
    }
}
else
{
    console.writeLine("SQL Server Absent");
}

Et voila.

samedi 27 novembre 2010

Mac, un article vieux de 19 ans (est il encore a la page?)

Je viens de trouver ce vieil article datant de Novembre 1998 et qui semble a jour.


<< Mon Mac craint, Je ne veux pas commencer une guerre sainte, mais quel est le problème avec vous, fanatiques de Mac? Je suis assis ici en face d'un Mac (un 8600/300 w/64 Mo de RAM) pendant environ 20 minutes durant les quelles il tente de copier un fichier 17 Mo d'un dossier vers un autre sur le disque dur, 20 minutes! À la maison, sur mon Pentium Pro 200 tournant sous NT 4, qui selon toutes les normes devraient être beaucoup plus lent que ce Mac, la même opération devrait prendre environ 2 minutes. En outre, au cours de ce transfert de fichier, Netscape ne fonctionnait pas et tout le reste était au point mort. Même "BBEdit Lite" peine a suivre ce que je tape. Je ne vais pas vous ennuyer avec la liste d'autres problèmes que j'ai rencontrés en travaillant sur différents machines d'Apple, mais il suffit de dire qu'il y en eu de nombreuses, .... , Mon 486/66 avec 8 Mo de ram tourne plus vite que cette machine de 300 MHz à certains moments. Du point de vue de la productivité, je ne comprends pas comment on peut prétendre que Macintosh est une machine de qualité supérieure. fanatiques de Mac, brûlez moi si vous le souhaitez, mais je préfère entendre des raisons intelligentes pourquoi choisir d'utiliser un Mac par rapport aux autres plus rapides, moins chers, et plus stables.>>

source : http://kottke.org/98/11/my-mac-sucks

Premièrement c'est bien de se remémorer Netscape.
Deuxièmement, 8 de RAM ce n'est même plus suffisant pour afficher une seule page web.
Et finalement, le plus important, Apple semble ne pas prendre en compte les erreurs du passé, Il faut savoir que mac n'a que 5% de parts de marché des systèmes d'exploitations (quoiqu'en très légère augmentation), et subit de plein fouet la progression continue d'Android sur le marché des SmartPhones (Q3 2010).

lundi 1 novembre 2010

Desktops / VirtuaWin : plusieurs espaces de travail sur windows

En travaillant sur linux on s'habitue a quelques options d'ergonomies qui deviennent tout d'un coup indispensables, comme le bureau virtuel, disponible par défaut sur multitudes de distributions.
Le Bureau virtuel permet de basculer entre plusieurs bureaux au sein d'une même session, ça aide lorsqu'on veut séparer par exemple le travail des loisirs, ou si vous travaillez sur deux projets distincts vous mettez chacun sur son propre bureau.

Cela est possible sur Windows aussi grâce a de petits logiciels tirs (100-400k max.).

Desktops de Microsoft qui disponible sur cette adresse http://technet.microsoft.com/en-us/sysinternals/cc817881.aspx, il vous permet de commencer avec 1 bureau puis d'en activer jusqu'à 4 en même temps. Le probleme avec ce logiciel c'est qu'il ne peut pas être arrêté que si on quitte la session en cours, en plus de ne pas gérer correctement la barre de taches, la plupart des icônes de configuration ne sont disponibles que sur le bureau principal.

VirtuaWin quand a lui , en plus d’être gratuit, open source et performant, présente plus de fonctionnalités : créer jusqu'à 9 espaces de travail, aller au bureau désiré en pointant l'application souhaitée...
Disponible ici

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.