mardi 9 novembre 2010

Développer des applications Adobe Flash sous GNU/Linux

On peut développer des applications Flash sous GNU/Linux en utilisant les outils d'Adobe.
Voici les points essentiels qui me permettrons de mettre en place une application Flash.
  1. Téléchargez et installer le Flex SDL. A cette date, j'utilise la version 3 complète (environ 110Mo)
  2. Mettre en place l'environnement Web local (apache2 et le fichier crossdomain.xml)
 Voici un exemple d'un fichier crossdomain.xml pour le développement, ce fichier est à copier à la racine du Web local.

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>

Après avoir désarchivés les fichiers du SDK, j'installe le compilateur en utilisant un script bash et le player flash par un lien symbolique.

#!bin/sh
<chemin vers flex_sdk_3>/bin/mxmlc $*

Cela permet au compilateur de retrouver les répertoires lib, ... qui sont spécifiés de manière relatives.

Pour compiler un fichier mxml ou bien as et générer un swf il suffit de faire :

mxmlc <nom du fichier mxml ou as> 

Concernant, le développement, les différentes documentations fournies par Adobe en ligne sont suffisantes.

Cependant, juste pour rappel, le langage ActionScript 3 est orienté objet et possède la notion d'interfaces (comme chez Java).
Au final, on peu s'étonner de la ressemblance entre FlexSDK/ActionScript et JDK/Java.

mardi 12 octobre 2010

SSH use for distant office

Make things automatic


When I am at home, I usually need remote access to my servers at work, to check some documents or to fill some data on our CRM. We are using openssh access to do remote maintenance of our products so I decide to provide that for remote access from home.

The idea is to make most of the configuration automatic so I have wrote a configuration file for that (~/.ssh/config).

Host job
Hostname job.jeanpul.com
User jeanpul
Port 999
LocalForward *:8080 192.168.0.20:80
ControlMaster yes

With this configuration file, using the following command

ssh job 

open a SSH connection to job.jeanpul.com on port 999 and then gives access to the Web server of the distant machine 192.168.0.20 on the local port 8080.

Browse your Intranet without URL redirection problems

So, then I reach the office Intranet network using the http://localhost:8080/ but all the absolute URL cannot be reached. So URL's like :

<a href="/PHPMyAdmin/index.html">PHPMyAdmin</a>

works because it's leads to http://localhost:8080/PHPMyAdmin/index.html but

<a href="http://server1.office.net/PHPMyAdmin/index.html">PHPMyAdmin</a>

failed because server1.office.net have no meaning locally.

The solution I used was to install and configure a Web proxy. I used privoxy with the following configuration part

forward   job.jeanpul.com    localhost:8080
 forward   server1.office.net localhost:8080

Then I configure my browsers to use this proxy and URLs such as

http://server1.office.net/PHPMyAdmin/index.html

are correctly managed.

Removing password input


I have configured my SSH server to support remote connexion using private/public key so I never enter the user password anymore.

To do so, I have generated a private/public key :

ssh-keygen -t rsa

Then, I have copied the public part to the SSH user on the remote access :

ssh-copy-id -i ~/.ssh/id_rsa.pub job.jeanpul.com

Sharing my Wifi connection

Sometimes, I need an Internet access on my "old" computer at home using my private Wifi network. I don't have any Wifi device on my computer and I need to move my computer close to the ADSL Router . So, I use some iptables commands on my laptop, to provide an Internet access to my "old" computer.

> iptables --table nat --append POSTROUTING --out-interface wlan -j MASQUERADE
> iptables --append FORWARD --in-interface eth0 -j ACCEPT
> echo 1 > /proc/sys/net/ipv4/ip_forward  

This require that my "old" computer have access (same network domain), to my laptop and set its gateway to its eth0 ip adress.

> ifconfig eth0 inet 192.168.1.34
> route add default gw 192.168.1.35

finally, DNS is also configured.

mardi 5 octobre 2010

Archiver ses mails avec IMAP

Cela fait 7 ans que je suis dans la même société et j'ai toujours conservé mes mails. Cela m'arrive d'avoir besoin de revenir quelques années en arrière pour récupérer une info sur un projet ou des contacts. Au départ, j'utilisait un compte POP3 et mes mails étaient donc archivés sur mon compte utilisateur. Nous avons ensuite changé de fournisseur et par la même occasion nous sommes passés sur IMAP.

Je peux, aujourd'hui, consulter mes mails depuis n'importe quel accès Internet, cependant j'ai récemment découvert que la taille de la boîte mail avait une limite de 2Go, dérisoire par rapport à mon ancien espace de stockage... Autre problème, mes anciens mails stockés sur mon disque local ne sont pas sur le serveur IMAP donc pas visible depuis l'extèrieur.

La synchro entre deux comptes IMAP...

L'idée est de créer plusieurs boîtes mails d'archives, par exemple jeanpul2010, jeanpul2009, ... et de transférer les mails de la boîte "principale" vers la/les boîtes archives. Pour faire le transfert, je vais commencer par utiliser un soft, développé par Gilles LAMIRAL. Cet outil se nomme imapsync. La ligne de commande est on ne peut plus simple,

imapsync -host monserveurimap.net --user1 jeanpul --password1 jp --user2 jeanpul2010 --password2 jp --noauthmd5

Cela permet de transférer (synchroniser) l'ensemble des mails (avec les folders) d'un compte vers un autre. Chez mon fournisseur (et cela ce comprend), chaque compte à une limite quotidienne de réception en nombre de mails, par conséquent lorsque il y a trop de mails à transférer, la commande échoue. On peut interrompre la commande et la relancer le lendemain sans problème, les mails déjà existant ne sont pas copiés.

...puis entre un maildir et un compte IMAP

Utiliser imapsync permet donc un archivage régulier sans trop de soucis. Cependant, dans mon cas, il me reste à rendre accessible mes mails qui sont stockés sur ma machine.

Utiliser un serveur IMAP local
J'utilise la solution Courier qui comprends un serveur IMAP tournant sur le répertoire contenant les mails au format maildir. Mes mails étaient stockés par kmail au format maildir... de kmail. Le format est "quasiment identique", avec un répertoire par folder contenant 3 sous répertoires cur, new et tmp. La solution Courier contient un binaire, maildirmake, qui permet de créer l'arborescence comme il le faut et d'y ajouter des folders. Cette commande m'a permit de comparer le format maildir de "kmail" au format maildir de Courier afin d'automatiser le passage de l'un à l'autre.

Manipuler des comptes IMAP par scripts

Pour aller plus loin et faire des opérations plus précises sur les comptes IMAP, j'ai découvert l'utilitaire imapfilter qui permet d'exécuter un script écrit en Lua et une API pour accéder et manipuler les comptes IMAP.

Voici un exemple de script permettant de copier (à la façon de imapsync mais sans la synchro) les mails et les folders d'un compte vers un autre pour une année donnée.

function copy_year(year, src, dst)
   results = src:sent_before('01-Jan-' .. (year+1)) * src:sent_since('01-Jan' .. year)
   results:copy_messages(dst)
end

function get_folder(folders, folder)
   for k, v in ipairs(folders) do
      if v:upper() == folder:upper() then
        return v
      end
   end
   return false
end

function copy_folders_rec(year, folder, src, dst)
   for _, f in ipairs(src:list_all(folder)) do
      dstfolder = get_folder(dst:list_all(folder), f)
      if not dstfolder then
        dst:create_mailbox(f)
        dst:subscribe_mailbox(f)
        dstfolder = f
      end
      copy_year(year, src[f], dst[dstfolder])
      copy_folders_rec(year, f, src, dst)
   end
end

srcaccount = IMAP {
   server = 'localhost',
   username = 'jeanpul',
   password = 'jp'
}

dstaccount = IMAP {
   server = 'imap.server.net',
   username = 'jp2007@jeanpul.com',
   password = 'jp'
}     

copy_folders_rec("2006", null, srcaccount, dstaccount)

J'utilise plus volontiers cette méthode car elle me permet également de faire tout un tas d'opérations de filtrage, de création/suppression et la gestion des dates est très pratique.

La suite...


Maintenant que mes mails sont archivés, accessibles depuis n'importe quel poste connecté à Internet, il me reste quand même un problème... les filtres. En effet, il serait bienvenue d'avoir ces filtres au niveau du serveur IMAP, sinon, il faut systématiquement avoir les mêmes règles de filtrages (sur certains clients Web, les filtres n'existent même pas) sur chaque client mail (Thunderbird, kmail, evolution, ...). En utilisant les scripts et imapfilter, cela pourrait être réalisable, cependant cela nécessiterai l'exécution des scripts depuis ma machine.