Convertir un MKV en AVI [vidéo]

[niveau débutant]

Après avoir essayé un tas de logiciels différents, je viens enfin de découvrir celui qui fonctionne et qui est simple : AviDemux

Pour se faire, ouvrez simplement votre fichier mkv dans AviDemux. Vous aurez certainement un message qui indique « H.264 détecté : Si le fichier utilise des images-B comme référence, cela peut conduire à un plantage ou à des saccades. Avidemux peut utiliser un autre mode qui est plus stable mais vous perdrez la précision de l’image. Voulez-vous utiliser ce mode ? » :
Message d'alerte

Je réponds « Non » sans voir aucun soucis par la suite.
Maintenant il va sûrement vous demander de reconstruire l’index : acceptez.

Ensuite, dans la colonne de gauche, pour vidéo choisissez le format souhaité (ici on prendra Xvid), puis pour l’audio l’encodage voulu (ici on prendra MP3) :
Les boites de dialogue pour les encodages

Il faut alors cliquer sur « Filtres » dans la section audio pour choisir le mixer « Stéréo » :

Sans ça vous aurez l’erreur « Codec Error : The number of channels is greater than what the selected audio codec can do. Either change codec or use the mixer filter to have less channels. » :

Et il ne vous reste plus qu’à faire « Fichier -> Enregistrer une vidéo » et le tour est joué !

Réduire la taille d’une photo JPG sans perdre en qualité [HOWTO]

[niveau débutant]

Il existe un moyen de compresser encore plus les photos JPG (et PNG, et GIF) grâce à une technique avancée de compression. Il va d’abord falloir installer quelques programmes, après quoi vous verrez que c’est extrêmement simple et utile au quotidien !

Pour faire cela nous allons utiliser le logiciel IrfanView (cliquez sur « Download » dans la colonne de gauche puis sur le bouton « Download Now – Get it from CNET Download.com! »).
Une fois téléchargé vous pouvez lancer l’installation : vous pouvez laisser les options par défaut, attention cependant parce qu’Irfan View va vous proposer d’installer la toolbar de Google, et je vous déconseille de le faire :
Fenêtre qui apparait durant l'installation et qui propose l'ajout de Google Toolbar, et il est surveillé en jaune le fait de décocher la case

Maintenant il va s’agir d’ajouter le plugin RIOT (RIOT signifie Radical Image Optimization Tool). Pour cela télécharger l’ensemble des plugins disponibles sur cette page : http://www.irfanview.com/plugins.htm (cliquez sur « Brothersoft.com – download IrfanView plugins » puis sur le bouton « Download now »).

Une fois le fichier téléchargé, double cliquez dessus pour lancer l’installation.

Il apparait qu’IrfanView ne fournit pas la dernière version du plugin RIOT, on va donc devoir la télécharger via http://download.criosweb.ro/download.php?sid=R-dll&type=installer (attention de bien cliquer sur le bouton gris qui est tout en haut et qui se nomme « Download RIOT DLL version ») :
Illustration du bouton de téléchargement

Cela a pour effet de télécharger un fichier .zip : faites un clic droit sur ce fichier nouvellement téléchargé puis choisissez « Extraire ici », ou « Extraire tout », ou « Dézipper ici » (cela peut varier selon la configuration de votre ordinateur).
Une fois décompressé, vous allez trouver un fichier qui se nomme « Riot-plugin.exe ». Double cliquez dessus. Durant l’installation il devrait vous proposer d’installer le plugin pour IrfanView :
Fenêtre qui apparait durant l'installation
Il va vous demander si vous souhaitez installer « DriveScanner 2011 »; choisissez Ne pas installer DriveScanner 2011

C’est bon ! Toute l’installation est effectuée, on peut passer à la suite…

Il va falloir ouvrir IrfanView qui se trouve dans votre menu Démarrer :
Visualisation de IrfanView dans le menu Démarrer

Deux possibilités….

1. Si vous souhaitez modifier un ensemble de photos d’un coup

Ouvrez une image au hasard (ça n’a pas d’importance ici) dans IrfanView, puis faites File > Save for web... (plugin). Si vous avez une alerte avec le message suivant, alors cliquez sur « No » :
This file contains a high resolution image. RIOT can handle such images, but processing can be quite slow in this situation. Do you want to resize it first ? (recommanded) The original image won't be modified

Cliquez sur « Batch » dans la barre :
Barre d'outil du plugin où il faut cliquer sur Batch

Répondez « Yes » au message d’alerte qui apparait et dit « To use the Batch Optimizer I need to unload the current image. Proceed ? ».
Cliquez sur le bouton « Add images » puis sélectionnez toutes les photos dont vous voulez réduire la taille.
Ensuite choisissez où les photos compressés seront enregistrées en cliquant en bas à droite sur le bouton avec trois petits points :
Fenêtre du Batch avec les boutons à cliquer
Vous pouvez éventuellement cliquer sur le bouton « Settings » et cocher les cases qui vous intéressent (dans mon cas, toutes !)
Il ne reste plus qu’à cliquer sur « Start » et la magie opère…

Les nouvelles photos auront une taille entre 30% et 90% plus petite que les photos d’origine, sans perdre en qualité et en résolution 🙂

2. Si vous souhaitez modifier une seule image

Ouvrez l’image que vous souhaitez optimiser dans IrfanView. Puis faites File > Save for web... (plugin). Si vous avez une alerte qui dit « This file contains a high resolution image. RIOT can handle such images, but processing can be quite slow in this situation. Do you want to resize it first ? (recommanded) The original image won't be modified », alors cliquez sur « No ».

Vous verrez ensuite un comparatif de votre image, avec en haut à droite la taille de la version optimisée : assurez vous que vous avez toujours un chiffre inférieur à la version d’origine !
Selon le format de votre image (JPEG, GIF, PNG), vous avez plusieurs options en bas de la fenêtre.
Prenons l’exemple d’une image PNG : pour la couleur je choisis « Optimal 256 colors », puis dans « External optimizer » je choisis « OptiPNG o3 » (et je clique sur le check vert pour que OptiPNG soit utilisé), et enfin je coche « Best compression ».
Les différentes options choisies dans la Fenêtre d'optimisation
(cliquez sur l’image ci-dessus pour l’agrandir)

Jouez sur les options pour faire varier la taille.

Il ne reste plus qu’à sauver votre travail, et voilà !

Mettre à jour Debian Lenny vers Squeeze [retour d’expérience]

J’ai un serveur dédié chez OVH (un « Kimsufi ») et j’ai voulu faire la mise à jour de Debian Lenny vers Squeeze.

Vous trouverez toutes les informations nécessaires sur cette page : http://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.fr.html. Je vous conseille de suivre chaque étape très attentivement.

Attention car chez OVH on peut se retrouver avec une modification, que j’explique un peu plus bas, à faire dans /etc/init.d/fixudev sur les headers manquants (détails sur les headers des fichiers de init.d)…. vous devrez aussi vérifier les autres scripts que vous avez pu mettre vous-même dans /etc/init.d pour vous assurer qu’ils possèdent tous un en-tête sinon vous aurez un message d’erreur durant la mise à jour.

Voici un bref résumé des étapes à suivre (tout ce qui commence par # est une commande à taper) :

# apt-get update && apt-get upgrade
' une fois que votre système est à jour, vérifier que vous avez bien la dernière version du noyau mise à disposition par OVH
' pour cela visitez http://guide.ovh.com/KernelInstall qui explique ce qu'il faut faire (deux fichiers à télécharger puis un update-grub et un reboot!)
' je vous conseille les versions avec grsec pour plus de sécurité (elles sont notées "-grs-")
' si vous n'êtes pas sûr du noyau que vous avez actuellement, vous pouvez le savoir en tapant:
# uname -a
' maintenant il va falloir faire une sauvegarde de votre machine, et en particulier :
' le répertoire /etc/
' le répertoire /home/
' le répertoire qui contient vos sites web
' vos bases SQL
' ensuite, comme indiqué dans le tutoriel, vous devez sauvegarder certains éléments qui pourraient nous servir en cas de problème :
# mkdir svg_special; cp -R /var/lib/dpkg svg_special/; cp /var/lib/apt/extended_states svg_special/; dpkg --get-selections "*" > svg_special/dpkg_get_selection
' avant de continuer, il va falloir bidouiller le fichier /etc/init.d/fixudev puisqu'il n'est pas conforme et va vous créer une erreur dans la suite
' voici par quoi vous devez le remplacer :
#! /bin/sh
### BEGIN INIT INFO
# Provides:          fixudev
# Required-Start:
# Required-Stop:
# Default-Start:     S
# Default-Stop:
# Short-Description: remove fixed relation between MAC address and name of network device (00:15:f2:90:3e:a0 -> eth0)
# Description:       remove fixed relation between MAC address and name of network device (00:15:f2:90:3e:a0 -> eth0)
### END INIT INFO

case "$1" in
  start)
    # example:
    # # PCI device 0x1106:0x3065 (via-rhine)
    # SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:15:f2:90:3e:a0", NAME="eth0"

    for interface in `ifconfig -a | grep -e "^eth"|cut -d' ' -f1`; do
            MAC=`ifconfig $interface | grep -e "^$interface"|cut -d' ' -f11 | sed s/\:/\\\\\\\\:/g`
    # removes actual mac
    #       for file in `grep -i "$MAC" /etc/udev/rules.d/*|sort|uniq|cut -d':' -f1`; do
    #               perl -ni -e "print unless /$MAC/" ${file} && \
    #                       echo "removed HW address ${MAC} from ${file} (${interface})"
    #       done

    # removes *ANY* mac
            for file in `grep -re "^SUBSYSTEM==\"net\".*NAME=\"${interface}\"$" /etc/udev/|sort|uniq|cut -d':' -f1`; do
                    sed -i -e "/^SUBSYSTEM==\"net\".*NAME=\"${interface}\"$/d" ${file} && \
                            echo "removed HW address from ${file} (${interface})"
            done
    done
    ;;
  stop)
    ;;

  status)
    echo "Nothing here";
    ;;

  restart|reload)
    $0 start
    ;;
  *)
    echo "Usage: fixudev start"
    exit 1
esac
exit 1
' maintenant il est conseillé d'utiliser screen pour pouvoir se reconnecter (avec screen -r) à en cas de déconnexion
# screen
' il existe un bug avec splashy c'est pourquoi il est dit de le purger
# apt-get purge splashy
' si la commande ci-dessous ne retourne rien, alors c'est bon, mais dans tous les cas consultez http://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.fr.html#package-status
# dpkg --audit
' maintenant il faut remplacer tous les "lenny" de /etc/apt/sources.list par des "squeeze"
' voici ce que ça donne chez moi :
' deb http://ftp.fr.debian.org/debian squeeze main non-free
' deb ftp://mir1.ovh.net/debian/ squeeze main contrib non-free
' deb-src ftp://mir1.ovh.net/debian/ squeeze main contrib non-free
' deb http://security.debian.org/ squeeze/updates main contrib non-free
' deb-src http://security.debian.org/ squeeze/updates main contrib non-free

' il est recommandé d'utiliser script qui permettra de sauvegarder ce qu'on va faire maintenant (qui pourra être utile en cas de problème)
# script -t 2>/root/upgrade-squeeze1.time -a /root/upgrade-squeeze1.script
' on commence par mettre à jour les listes des paquets
# apt-get update
' on va vérifier qu'on a la place suffisante (un message explicite apparait sinon)
# apt-get -o APT::Get::Trivial-Only=true dist-upgrade
' on va maintenant d'abord faire une mise à jour minimale
# apt-get upgrade
' là il va vous questionner... en général choisissez l'option par défaut si vous ne savez pas quoi répondre
' à noter qu'un nouveau php.ini va être créer, et il est conseillé d'y jeter un oeil pour voir les nouvelles options

' une fois cette étape un peu longue terminée, il faut installer udev :
# apt-get install udev
' maintenant on teste pour voir si tout s'est bien passé
# reboot

' [...]

' normalement le serveur redémarre sans problème
' on recommence à lancer screen et on sauvegarde les étapes suivantes avec script
# screen
# script -t 2>/root/upgrade-squeeze2.time -a /root/upgrade-squeeze2.script
' maintenant on peut faire une mise à jour complète !
# apt-get dist-upgrade

' chez moi il a supprimé mysql et j'ai été obligé de le réinstaller :
# apt-get install mysql-server mysql-client php5-mysql
' un dernier reboot pour s'assurer que tout fonctionne normalement
# reboot
' et enfin on va nettoyer tous les paquets
# apt-get autoremove

Si vous tombez sur ce genre de message :

Impossible de migrer vers le nouveau système de démarrage
Des tests ont montré que des problèmes existent dans le système de démarrage qui empêchent la migration vers la nouvelle séquence de démarrage :
insserv: warning: script ‘XXXX’ missing LSB tags and overrides, insserv: warning: script ‘YYYY’ missing LSB tags and overrides,
Si le problème indiqué concerne une modification locale, vous devrez le réparer vous-même. Si c’est un bogue dans un paquet, il devrait être signalé dans le système de suivi des bogues (BTS) et corrigé dans le paquet. Veuillez lire
« http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot » pour plus d’informations sur les méthodes de résolution des problèmes empêchant la transition.
Une fois que les problèmes ont été corrigés, vous pouvez réessayer la migration avec la commande « dpkg-reconfigure sysv-rc ».

C’est que vous devez aller modifier manuellement les fichiers correspondant à XXXX et YYYY qui se trouvent dans /etc/init.d/. L’origine est que l’en-tête spécial est manquante, ainsi que les fonctions start/stop.
Le squelette de votre fichier devrait être :

#! /bin/sh
### BEGIN INIT INFO
# Provides:          nom de votre script
# Required-Start:
# Required-Stop:
# Default-Start:     S
# Default-Stop:
# Short-Description: Une description du script
# Description:       Une description du script
### END INIT INFO

case "$1" in
  start)
    # votre code
    echo "XXXX started!"
    ;;
  stop)
    echo "XXXX stopped..."
    ;;

  status)
    echo "Nothing here";
    ;;

  restart|reload)
    $0 stop
    $0 start
    ;;
  *)
    echo "Usage: XXXX {start|stop|restart|status}"
    exit 1
esac
exit 1

Si vous avez l’erreur « The security validation for this page is invalid » [Sharepoint]

« The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again. »

Si Sharepoint vous donne ce joli message d’erreur lorsque vous communiquez avec un de ses web services, alors il est possible que vous ayez oublié d’ajouter un header « SOAPAction » avec le nom du service associé.

Prenons l’exemple du web service lists.asmx et de l’action « UpdateListItems ». Si vous allez sur l’URL suivante http://votre_sharepoint/_vti_bin/lists.asmx?op=UpdateListItems vous verrez la SOAPAction qu’il faut définir (cliquez pour agrandir) :
Copie d'écran du web service lists.asmx

Dans l’exemple ci-dessus il faut donc définir l’header « SOAPAction » avec la valeur « http://schemas.microsoft.com/sharepoint/soap/UpdateListItems ».
Si vous utilisez l’AJAX de jQuery cela donnera quelque chose comme ça :

jQuery.ajax({
        url: "http://your_sharepoint/_vti_bin/lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        beforeSend: function(xhr) { xhr.setRequestHeader('SOAPAction', 'http://schemas.microsoft.com/sharepoint/soap/UpdateListItems'); },
        contentType: "text/xml; charset=\"utf-8\""
    });

Si vous utilisez l’add-on Firefox Poster, alors utilisez l’onglet « Headers ».

Create a file into Sharepoint document librairies with the Copy.asmx web service [Javascript]

This is the English version of my previous article

EDIT: I’ve created a JavaScript API for Sharepoint that handles the file creation. Just look at http://aymkdn.github.com/SharepointPlus/symbols/%24SP%28%29.html#.createFile

Did you know it’s possible to create a file from scratch and to add it into a shared documents library of Sharepoint, and only with Javascript ?

To do it we’ll use the « copy.asmx » web service with the « CopyIntoItems » function.
If you check http://your_sharepoint/_vti_bin/copy.asmx?op=CopyIntoItems you’ll see that we have several details about the « CopyIntoItems » function. Unfortunately it’s very difficult to find any information regarding this on the Web, and specially for Javascript…

So, here is the solution to create a file, e.g. an Excel file (.xls) with a regular HTML table, and we’re going to save it to this library: « http://your_sharepoint/Shared Documents/ » (Note: I’m using jQuery for the AJAX requests).

// The file content must be encoded into Base64. To do it I use the function available on my blog (http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/)
function encode_b64(a,b,c,d,e,f){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";c='=';for(d=f='';e&=3,a.charAt(d++)||(b=';=',e);f+=b.charAt(63&c>>++e*2))c=c<<8|a.charCodeAt(d-=!e);return f}

// "Upload" is the name of our function to do the job
// txtContent is a plain text, the content of our file
// destinationUrl is the full path URL to the document library (with the filename included)
function Upload(txtContent, destinationUrl) {
    var jsStream = encode_b64(txtContent);
    var soapEnv  = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                  +"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
                  +"<soap:Body>"
                  +"<CopyIntoItems xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\">"
                  +"<SourceUrl>http://null</SourceUrl>"
                  +"<DestinationUrls><string>"+destinationUrl+"</string></DestinationUrls>"
                  +"<Fields><FieldInformation Type='File' /></Fields>"
                  +"<Stream>"+jsStream+"</Stream>"
                  +"</CopyIntoItems>"
                  +"</soap:Body>"
                  +"</soap:Envelope>";
    jQuery.ajax({
        url: "http://your_sharepoint/_vti_bin/copy.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        beforeSend: function(xhr) { xhr.setRequestHeader('SOAPAction', 'http://schemas.microsoft.com/sharepoint/soap/CopyIntoItems'); },
        contentType: "text/xml; charset=\"utf-8\""
    });
}

Upload("<html><table><tr><th>Colonne 1</th><th>Colonne B</th></tr><tr><td>Total:</td><td>1500</td></tr></table></html>","http://your_sharepoint/Shared Documents/test.xls");

Then, when you’ll click on the new « test.xls » file, your web browser will want to open it with Excel. MS Excel should show you a warning message, but just click YES and you’ll see your table inside the sheet !

Of course you can create any type of files (.txt, .jpg, .doc, …) and with any content.

Related links:

Créer un fichier dans une librairie Sharepoint grâce au web service Copy.asmx [Javascript]

EDIT: J’ai créé une API JavaScript pour Sharepoint qui gère la création de fichier. Vous pouvez la consulter là : http://aymkdn.github.com/SharepointPlus/symbols/%24SP%28%29.html#.createFile

Saviez-vous qu’il est possible de créer un document de toute pièce et de l’ajouter dans une librairie (« Shared Document ») de Sharepoint seulement avec Javascript ?

Pour cela nous utiliserons le web service « copy.asmx » avec la fonction « CopyIntoItems ».
Si vous pointez vers l’adresse http://votre_sharepoint/_vti_bin/copy.asmx?op=CopyIntoItems vous remarquerez qu’on vous fournit un certain nombre de détails quant aux informations qu’il faut envoyer. Malheureusement c’est plutôt très mal documenté, surtout pour Javascript…

Voici donc la solution pour créer un fichier, par exemple un fichier Excel (en .xls) dans lequel on va mettre un tableau HTML banal et qui sera enregistré (dans notre exemple) dans la librairie « http://votre_sharepoint/Shared Documents/ » (à noter que j’utilise jQuery pour la requête ajax).

// le contenu de notre fichier doit être encodé en Base64. Pour cela j'utilise la fonction disponible sur mon blog (http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/)
function encode_b64(a,b,c,d,e,f){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";c='=';for(d=f='';e&=3,a.charAt(d++)||(b=';=',e);f+=b.charAt(63&c>>++e*2))c=c<<8|a.charCodeAt(d-=!e);return f}

// Notre fonction qu'on va appeler "Upload"
// txtContent est du plain text qui est donc le contenu de notre fichier
// destinationUrl est l'URL complète vers la librairie où le fichier va être stocké (avec le nom du fichier à créer)
function Upload(txtContent, destinationUrl) {
    var jsStream = encode_b64(txtContent);
    var soapEnv  = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                  +"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
                  +"<soap:Body>"
                  +"<CopyIntoItems xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\">"
                  +"<SourceUrl>http://null</SourceUrl>"
                  +"<DestinationUrls><string>"+destinationUrl+"</string></DestinationUrls>"
                  +"<Fields><FieldInformation Type='File' /></Fields>"
                  +"<Stream>"+jsStream+"</Stream>"
                  +"</CopyIntoItems>"
                  +"</soap:Body>"
                  +"</soap:Envelope>";
    jQuery.ajax({
        url: "http://votre_sharepoint/_vti_bin/copy.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        beforeSend: function(xhr) { xhr.setRequestHeader('SOAPAction', 'http://schemas.microsoft.com/sharepoint/soap/CopyIntoItems'); },
        contentType: "text/xml; charset=\"utf-8\""
    });
}

Upload("<html><table><tr><th>Colonne 1</th><th>Colonne B</th></tr><tr><td>Total:</td><td>1500</td></tr></table></html>","http://votre_sharepoint/Shared Documents/test.xls");

Ensuite si vous cliquez sur le fichier « test.xls » nouvellement créé, votre navigateur va vouloir l’ouvrir avec Excel. Celui-ci va vous donner un warning, mais il suffit d’accepter et votre tableau va apparaitre dans votre Excel !
Bien sur on peut créer tout type de fichier (.txt, .jpg, .doc, etc) et avec le contenu que l’on souhaite.

Liens additionnels:

Transférer un compte Google vers un autre compte Google

Je vais vous expliquer comment j’ai procédé pour basculer toutes mes informations Google (GMail, GDoc, GTalk, GCalendar, ….) vers un autre compte Google.

Pour information, à partir d’Android 2.3.7 (en tout cas je l’ai constaté sur cette version), il est possible d’utiliser plusieurs comptes Google sur un même téléphone, et donc de choisir ce qu’on souhaite synchroniser. De même pour chaque application Android de Google, on peut facilement choisir quel compte utiliser. Cela peut-être pratique si vous avez acheté des articles sur le Market avec votre ancien compte et donc que vous souhaitez les conserver sans repayer.

Transférer ses emails GMail vers un autre compte GMail

Pour cela j’ai utilisé GMail Backup : commencez par sauvegarder tous vos emails sur votre ordinateur avec votre ancienne adresse GMail Une fois l’opération terminée, utilisez de nouveau l’application mais avec la nouvelle adresse GMail. Ensuite il suffit de cliquer sur « Restore ».
Les dates et les divers informations du courrier seront sauvegardées ! Et le logiciel vous remettra aussi vos labels !

Transférer ses contacts GMail vers un autre compte GMail

Cette fois Google vous facilite la vie. Allez dans Google Contact, cliquez sur « Plus » et sur « Exporter… »

Et dans votre nouveau GMail, faites pareil en choisissant cette fois « Importer… ». Et le tour est joué !

Transférer ses calendriers GCalendar vers un autre compte GCalendar

Là encore Google a tout prévu : allez dans les paramètres de votre calendrier (en cliquant sur la roue en haut à droite de la page), puis cliquez sur l’onglet « Agendas ». Vous verrez le lien « Exporter mes agendas ».
Et sur le nouveau GCalendar, vous n’avez plus qu’à utiliser le lien à coté : « Importer l’agenda ».

Transférer ses documents GDocs vers un autre compte GDocs

Cette fois vous aurez besoin du logiciel GDocBackup, et comme pour les emails, vous allez tout sauvegarder votre ancien compte sur votre ordinateur, puis dans votre nouveau compte il vous suffit de choisir « Importer fichiers… » :

Transférer vos flux RSS de Google Reader vers un autre compte Google Reader

Rendez-vous dans les paramètres de l’ancien compte Google Reader puis choisissez l’onglet Importer/Exporter. De là vous trouverez de quoi récupérer vos données.
Le problème : c’est que vous perdez là où vous en étiez dans votre lecture…

Réduire la taille d’une web font et bien plus encore…. [bookmark]

Le site FontSquirrel propose un outil très puissant qui va vous transformer votre font en tous les formats (woff, eot, ttf, svg, …), mais il vous propose aussi de réduire la taille de votre font pour une utilisation Web (ce qu’on nomme le « subsetting »). Par exemple si vous n’allez avoir besoin que des chiffres, il est dommage de télécharger une font de 500ko qui contient tous les caractères de tous les alphabets, alors qu’en ne conservant que les chiffres on pourrait tomber à 10ko.

Un outil à utiliser de toute urgence si vous devez traiter avec des web fonts !

Trouver l’heure et la date en Javascript d’un autre timezone [programmation]

Pour récupérer l’heure courante d’un autre timezone voici comment faire (ici je prends l’exemple de CST qui est UTC-5, c’est-à-dire -300 minutes) :

new Date(new Date(new Date().toUTCString()).setMinutes(-300));

Ensuite il faudra utiliser les fonctions getUTC* pour avoir les informations relatives à la nouvelle heure :

var dLocal = new Date(); // -> Thu Nov 03 2011 09:50:19 GMT+0100
var dOffset = new Date(new Date(new Date().toUTCString()).setMinutes(-300));
var offsetHours = dOffset.getUTCHours(); // -> 3

Envoyer un email à plusieurs personnes via un Workflow [Sharepoint]

Avec Sharepoint et les Workflow il est possible d’envoyer des emails à une personne (ou un groupe) en se basant sur un champs « Personne » de la Liste. Il est également possible d’envoyer un email à plusieurs personnes d’un coup grâce à ce même champs, mais en choisissant l’option « Sélection Multiple ».
Attention cependant: lorsque vous créez le Workflow qui va envoyer l’email, il ne va pas vous proposer le champs en question tant qu’il est en « Sélection Multiple » ! Pour que cela fonctionne, il faut désactiver la sélection multiple le temps de configurer le workflow, puis l’autoriser de nouveau.

C’est donc simplement l’interface utilisateur de Sharepoint Designer qui bloque, alors que c’est techniquement possible.

Plus d’informations : http://social.msdn.microsoft.com/forums/en-US/sharepointworkflow/thread/ebcb81ec-ba36-4a4c-bd01-26dc2c4d0913/