Update the Toshiba Folio 100 to CyanogenMod 9 (ICS) [Tutorial]

This is for the Alpha5 of CM9 available on XDA. The ROM is available on GitHub: https://github.com/DerArtem/android_device_toshiba_betelgeuse/downloads (called « update-cm-9.0.0-RC0-2012.04.21-betelgeuse-UNOFFICIAL-signed.zip » here).
Download it from the link above.

I have currently the FolioMod’s Dexter and Windows 7 (64 bits)

Install Android SDK

Go to the Android SDK page and install the package. Make sure you install the Google USB Drivers also after the installation is complete.

Here I have installed the SDK into D:\ANDROID\android-sdk

Once it’s done you want to test if your device is recognized by your computer. Switch it on and plug in it. Then open a Windows console (Windows key + R, then type « cmd ») and go to your installation directory. Then go to the « platform-tools » directory. It will be something like that: > cd D:\ANDROID\android-sdk\platform-tools
You should see the « adb.exe » file. You can call it with the command adb.exe devices

If it returns the message « < Waiting for devices > », then it means you need to do some tricks :

  • On your Folio, go to the Settings > Applications > USB Debug : make sure this is checked
  • On your computer, find the file called android_winusb.inf (in my case it’s located here: D:\ANDROID\android-sdk\extras\google\usb_driver), and open it with a text editor. We now need to copy/paste the three lines below at the end of the [Google.NTx86] part and at the end of the [Google.NTamd64] part :

    ;NVIDIA Tegra
    %SingleAdbInterface% = USB_Install, USB\VID_0955&PID_7000
    %CompositeAdbInterface% = USB_Install, USB\VID_0955&PID_7100&MI_01


    Credits – http://philflash.inway.fr/flex/folio100/usb_tegra2.html

  • Save the file and close it. Now type the command echo 0x955 > "%USERPROFILE%\.android\adb_usb.ini" into the console.
  • Now unplug/replug your Folio and click right on the Computer icon that you have on your desktop or into the Windows explorer, and choose « Manage ». From there you can manage the devices and under « Other devices » you should see the « NVIDIA Tegra2 » :

    Credits – http://philflash.inway.fr/flex/folio100/usb_tegra2.html
  • Click right on it and pick « Update the driver » and choose the « Locate it on my computer » option. For the path it will be D:\ANDROID\android-sdk\extras\google\usb_driver in my case
  • You’ll probably have a warning message, but say yes, that you want it to be installed
  • When it’s done you should now see « Android Composite ADB Interface » instead of « NVIDIA Tegra 2 »
  • In the Windows console you can now type the below commands (in the « platform-tools » directory) :

    adb kill-server
    adb start-server
    adb devices

  • Your Folio must now appear in the list of devices

Bootload

First, rename the ROM downloaded as « update.zip » and copy it to your SDCard (at the root dir). (In the mean time copy also the Google Apps zip file)

We’re going to install the recovery :

  • Copy the cwm-recovery-5.5.0.4.img file you’ve downloaded into the « platform-tools » folder.
  • Switch off your Folio (keep it plugged to your computer).
  • Switch it on, and when it vibrates then press three times the Power button, then the Volume UP button : you’ll see a message saying it’s in fastboot mode.
  • In the Windows console type : fastboot.exe flash recovery cwm-recovery-5.5.0.4.img
  • The message « flashing mbr to device » will appear.
  • Press several seconds the Power button to turn it off, then turn it on. When the first messages appear on the screen press the Power button and the Volume UP button. You’ll see some text.
  • Make sure to go to the Update System mode (it should be : Volume UP + Volume Down + Volume Up), and you’ll have the Recovery menu. From here I recommend to do a backup (« backup and restore > backup to internal sdcard ») (the Power button permits to validate the choices, and the Volume to go up and down)

Install the new ROM

After the backup you can do a « wipe data/factory reset ». Then install the ROM in choosing the « Install zip from SDCard » option.

At the end of the process the Folio will say « Install from sdcard complete. »

It’s now time to reboot to use CM9 🙂

Install Google Apps

Reboot your Folio. When it vibrates, press the Power button and the Volume UP in the same time. Then go to the System Update (Volume Up + Down + Up), and install the GAPPS file.

Convertir une vidéo .mov au format cinéma DCP [tutorial]

Je me suis aidé du blog Home Mad DCP pour effectuer cette tâche qui semble un peu difficile au premier abord… A noter qu’il y a aussi le blog de hd3g qui propose un petit guide pour la création d’un DCP qui devrait vous aider.
Voici un autre tutoriel : http://www.projectionniste.net/docs/tutoriel-creation-dcp-open-dcp.pdf
(Remarque : malgré tous mes efforts je n’ai pas réussi à avoir un fichier qui soit lu correctement par le projecteur… je vous propose quand même ce regroupement d’étapes que j’ai pu trouver)

Je pars de la supposition suivante : vous possédez un fichier MOV (mais ça marche pour les AVI aussi apparemment) qui fait 1920×1080 (qu’il soit 24 trames/sec ou 25 trames/sec). Aussi on va travailler sous Windows (7 64bits dans mon cas).
On va supposer que notre répertoire de travail est D:\DCP\ avec notre vidéo qui se nomme « video.mov » et qui se trouve dans notre répertoire de travail.

Enfin il vous faut un certain nombre de connaissances de Windows comme l’utilisation des commandes dans cmd, le téléchargement et dézippage de fichiers, etc.

Convertir notre vidéo en images TIF

Créer un sous-répertoire « tif_rgb » dans « DCP » où nous placerons nos images tif que nous allons créer avec ffmpeg.
Pour ffmpeg, voici quoi faire :

  1. Aller sur http://ffmpeg.zeranoe.com/builds/ pour télécharger ffmpeg (vous choisirez « 64-bit Builds (Static) » si vous êtes avec un Windows 64bits, ou « 32-bit Builds (Static) » si vous avez un 32bits)
  2. Dézipper le fichier dans votre répertoire de travail et renommer le répertoire créé en « ffmpeg »
  3. Ouvrez une console de commande (touche Windows + R) puis tapez cmd, et se placer dans le répertoire « ffmpeg »
  4. Entrer maintenant dans le sous-répertoire « bin »

Maintenant si vous tapez « ffmpeg.exe » vous devriez avoir un message qui commence par une phrase du genre :

ffmpeg version N-42288-g8293a21 Copyright (c) 2000-2012 the FFmpeg developers built on Jul 5 2012 21:00:02 with gcc 4.7.1

Vous êtes prêt à convertir votre vidéo. Pour cela je me suis aidé des explications du blog Home Made DCP et des commentaires du billet.

Pour moi, la commande qui a fonctionné est la suivante :
D:\DCP\ffmpeg\bin> ffmpeg.exe -i "D:/DCP/video.mov" -r 24 -s 1920x1080 -filter:v yadif -vf pad=2048:1080:64:0:black -pix_fmt rgb24 "D:/DCP/tif_rgb/%05d.tif"

Ici on va ajouter des bandeaux noirs pour que notre vidéo fasse le format 2K des salles de cinéma.

Convertir les images TIF en JPEG2000

Vous devez maintenant télécharger OpenDCP pour Windows donc (vous avez le choix entre une version 32 ou 64bits).
Installer le logiciel puis le lancer.

On tombe sur un onglet JPEG2000 (vous pouvez trouver les explications sur les différentes options sur Home Made DCP). Personnellement j’ai gardé toutes les options par défaut et j’ai simplement choisi mon répertoire « tif_rgb » comme « Input Directory » et comme « Output Directories » j’ai créé un répertoire nommé « j2c ».
Une fois nos répertoires sélectionnées il suffit de cliquer sur « Convert ».
Capture d'écran du logiciel montrant l'onglet JPEG2000 avec les options par défaut sélectionnées

Passage par le stade XMF

Créer un répertoire « xmf » dans votre répertoire de travail, puis dans OpenDCP, aller sur l’onglet XMF. Dans « Picture input » on choisit le dossier « j2c » et dans « Output » on va aller dans « xmf » et enregistrer un fichier avec le nom « output_video.xmf » par exemple.
Onglet MXF d'OpenDCP avec JPEG2000 pour la source

Il faut maintenant extraire la bande son de notre vidéo

Pour cela on va utiliser de nouveau ffmpeg (on en parle encore sur Home Made DCP), et on va également télécharger et installer Sox.

Une fois fait on utilise de nouveau la console CMD et en se plaçant dans le répertoire « bin » de « ffmpeg ». Cette fois on lance la commande ci-dessous :
ffmpeg.exe -y -i "D:\DCP\video.mov" -vn -f wav "D:\DCP\bande_son.wav"

Cela va donc vous créer le fichier « bande_son » qu’il faut maintenant séparer en deux pistes. C’est là où « sox » va aider. Vous devez d’abord trouver où il s’est installé. Chez moi l’exécutable est C:\Program Files (x86)\sox-14-4-0\sox.exe, et dans votre console vous tapez d’abord :
"C:\Program Files (x86)\sox-14-4-0\sox.exe" --show-progress --temp . -V3 "D:\DCP\bande_son.wav" --endian little --channels 1 --bits 24 --encoding signed-integer --rate 48000 "D:\DCP\bande_son-24b-L.wav" norm -12 remix 1

On lance ensuite :
"C:\Program Files (x86)\sox-14-4-0\sox.exe" --show-progress --temp . -V3 "D:\DCP\bande_son.wav" --endian little --channels 1 --bits 24 --encoding signed-integer --rate 48000 "D:\DCP\bande_son-24b-R.wav" norm -12 remix 2

Cela a eu pour effet de créer deux fichiers audio normalisés (un pour la gauche et l’autre pour la droite).

Maintenant on retourne dans OpenDCP et dans l’onglet MXF. Cette fois on va choisir comme source « wav » et « stereo ». Il nous suffit de sélectionner notre fichier gauche, et notre fichier droit, et de sauver le fichier « output_audio.mxf » dans notre répertoire « mxf » :
Onglet MXF dans OpenDCP avec WAV sélectionné comme source

Création des fichiers XML

Il nous reste à créer les fichiers XML. Pour cela aller dans l’onglet « DCP » du logiciel OpenDCP. On va commencer par cliquer sur le bouton « Title Generator » et on complète les différentes questions. Enfin on choisit notre « output_video.mxf » et « output_audio.mxf » et on laisse la magie opérée :
Une copie d'écran du Title Generator dans OpenDCP
Capture d'écran de l'onglet DCP dans OpenDCP

Pour conclure

Vous devriez maintenant avoir ces fichiers qui forment votre DCP :

  • un MXF pour la vidéo en JPEG2000 (output_video.mxf)
  • un MXF pour l’audio en WAV PCM (output_audio.mxf)
  • un fichier VOLINDEX.xml (trivial) qui appelle un ASSETMAP
  • un fichier ASSETMAP.xml qui référence les deux XML, ainsi qu’un CPL et un PKL
  • un fichier *_cpl.xml qui référence votre programme : durée, ratio, titre, etc…
  • un fichier *_pkl.xml qui identifie les deux MXF : taille, hash (sha256), mime type.

New release of SharepointPlus

Today I launch the public release of SharepointPlus version 3.0

Several changes in this version :

  • You now have to use $SP() instead of $SP;
  • All the « list » and « url » data must now be passed to the list() function;
  • Add a beta feature for get() that permits to do a JOIN closure…. in the coming months I’ll improve this feature (e.g. I want to use the Sharepoint 2010 JOIN option);
  • Less dependencies to jQuery (the goal is 0 dependencie);
  • Other stuff (see the changelog)

Everything you need to know is in the documentation.

Obtenir une couleur plus sombre ou plus claire pour CSS [javascript]

EDIT du 22/05/2012 : il existe un site qui permet de trouver plusieurs dégradés à partir d'une couleur, et ça se passe sur http://0to255.com/
EDIT du 20/09/2012 : et voilà encore un autre site un peu plus intéressant que le précédent http://sassme.arc90.com/
EDIT du 25/09/2012 : une autre fonction/méthode plus légère est disponible tout en bas du billet

Voici un petit outil en ligne qui permet d'avoir une couleur plus claire ou plus sombre en se basant sur une couleur CSS et en demandant un pourcentage (exprimé entre 0 et 1) à appliquer :



Résultat:

Cette fonction vient directement de stackoverflow.com :

var pad = function(num, totalChars) {
    var pad = '0';
    num = num + '';
    while (num.length < totalChars) {
        num = pad + num;
    }
    return num;
};

// Ratio is between 0 and 1
var changeColor = function(color, ratio, darker) {
    // Trim trailing/leading whitespace
    color = color.replace(/^\s*|\s*$/, '');

    // Expand three-digit hex
    color = color.replace(
        /^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i,
        '#$1$1$2$2$3$3'
    );

    // Calculate ratio
    var difference = Math.round(ratio * 256) * (darker ? -1 : 1),
        // Determine if input is RGB(A)
        rgb = color.match(new RegExp('^rgba?\\(\\s*' +
            '(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])' +
            '\\s*,\\s*' +
            '(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])' +
            '\\s*,\\s*' +
            '(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])' +
            '(?:\\s*,\\s*' +
            '(0|1|0?\\.\\d+))?' +
            '\\s*\\)$'
        , 'i')),
        alpha = !!rgb && rgb[4] != null ? rgb[4] : null,

        // Convert hex to decimal
        decimal = !!rgb? [rgb[1], rgb[2], rgb[3]] : color.replace(
            /^#?([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])/i,
            function() {
                return parseInt(arguments[1], 16) + ',' +
                    parseInt(arguments[2], 16) + ',' +
                    parseInt(arguments[3], 16);
            }
        ).split(/,/),
        returnValue;

    // Return RGB(A)
    return !!rgb ?
        'rgb' + (alpha !== null ? 'a' : '') + '(' +
            Math[darker ? 'max' : 'min'](
                parseInt(decimal[0], 10) + difference, darker ? 0 : 255
            ) + ', ' +
            Math[darker ? 'max' : 'min'](
                parseInt(decimal[1], 10) + difference, darker ? 0 : 255
            ) + ', ' +
            Math[darker ? 'max' : 'min'](
                parseInt(decimal[2], 10) + difference, darker ? 0 : 255
            ) +
            (alpha !== null ? ', ' + alpha : '') +
            ')' :
        // Return hex
        [
            '#',
            pad(Math[darker ? 'max' : 'min'](
                parseInt(decimal[0], 10) + difference, darker ? 0 : 255
            ).toString(16), 2),
            pad(Math[darker ? 'max' : 'min'](
                parseInt(decimal[1], 10) + difference, darker ? 0 : 255
            ).toString(16), 2),
            pad(Math[darker ? 'max' : 'min'](
                parseInt(decimal[2], 10) + difference, darker ? 0 : 255
            ).toString(16), 2)
        ].join('');
};
var lighterColor = function(color, ratio) {
    return changeColor(color, ratio, false);
};
var darkerColor = function(color, ratio) {
    return changeColor(color, ratio, true);
};

// Use
var darker = darkerColor('rgba(80, 75, 52, .5)', .2);
var lighter = lighterColor('rgba(80, 75, 52, .5)', .2);

Une autre méthode, plus légère, inspirée par stackoverflow:

function LightenDarkenColor(col,amt,usePound,num,f,h,r,b,g) {
  if (col[0]=="#") {
    col = col.slice(1);
    usePound = (usePound==undefined?true:usePound)
  }

  num = parseInt(col,16);
  f=function(n) { return n>255?255:(n<0?0:n) }
  h=function(n) { return n.length<2?"0"+n:n }
  
  r = h(f((num >> 16) + amt).toString(16));
  b = h(f(((num >> 8) & 0x00FF) + amt).toString(16));
  g = h(f((num & 0x0000FF) + amt).toString(16));

  return (usePound?"#":"") + r + b + g;
}

LightenDarkenColor("#FAB787",10);
LightenDarkenColor("#FAB787",-15);
LightenDarkenColor("FAB787",5,true);

A console program for Newsgroup post [linux]

I spent a long time to find how to post on newsgroup with Linux in console mode only.
Here is the solution !

Download and compile newspost

Newspost is a program to post on the newsgroup. I’m on Debian but this package doesn’t exist anymore. However you can download the source and compile them… except there are few errors with the original sources (at least on my box). The issue is the source uses a function called « getfile », however this function name is already used in something else and it causes a conflict.
So I’ve renamed the function and it now works.

Download newspost-2.1.1.orig.tar.gz

Extract the files, then use make && make install

Install par2 and rar

On a Debian you’ll do apt-get install par2 rar

Let’s go

The first step is to split your file into small ones with rar extension :
rar a "name of rar file" -v20m -m0 "/home/example/your file"

Here are some explanations regarding this command :

  • name of rar file : This is the name of the rar-files you’re going to create (« .rar » will automatic be added)
  • -v20m : Split the file into 20MB chunks
  • -m0 : Set compression level (0-store…3-default…5-best)
  • « /home/example/your file » : The file you want to rar

Now we can create the .par files :
par2create -r10 -n7 "name of .par files" "/home/example/the .rar files*"

Some explanations :

  • -r15 : Percent par-files you want to create
  • -n7 : Number of par-files you want to create
  • /home/example/the .rar files* » : The just created .rar files

Now it’s time to upload your files :
newspost -i SERVER.NEWSGROUP.COM -u USERNAME -p PASSWORD -f EMAIL@EXAMPLE.COM -n ALT.BINARIES.YOUR.GROUP -y -s "SUBJECT" "/home/example/*par*"

So replace the uppercase words with your own values.

Thanks to this old post !

SharepointPlus 2.5.1 released [announcement]

I’ve just released SharepointPlus 2.5.1 !

This new version brings two functions :
$SP.people() that will permit you to find the user details (email, manager, departement, job title, …) from his name;
$SP.addressbook() that is a search feature to find anyone from the Active Directory using a part of a name.

Enhance your Sharepoint with SharepointPlus 🙂

Datepicker pour Bootstrap [Javascript]

Edit 5/04/2012 : d’autres personnes ont fait comme moi, et vous pouvez trouver leur repository sur https://github.com/eternicode/bootstrap-datepicker — ils ont corrigé les mêmes bugs visiblement et ont ajouté quelques petites choses comme le support i18n (internationalisation du format de la date)

J’ai découvert un datepicker qui utilise l’excellent Bootstrap de Twitter (vous savez c’est un ensemble de CSS qu’on peut utiliser pour des effets très réussis), et qui rend comme ça :

Je me suis empressé de l’utiliser dans un projet, jusqu’à ce que je me rende compte qu’il ne fonctionne pas avec Bootstrap v2.0.2, et ni avec IE7+ …. Du coup j’ai modifié le code d’origine pour outrepasser ces divers problèmes (plus d’autres petites choses). J’aurais proposé mon patch au créateur s’il utilisait GitHub, mais ce n’est pas le cas, donc j’ai créé un repository pour ce projet là : https://github.com/Aymkdn/Datepicker-for-Bootstrap

Il ressemble en tout point à la version d’origine, sauf qu’il fonctionne maintenant pour IE et pour la dernière version de Bootstrap. Il permet aussi d’avoir la date du jour comme date par défaut (au lieu du 1/1/1970 ….), et évite d’avoir une date sélectionnée automatiquement lorsqu’on ne fait que passer par le champ en utilisant la touche TAB.

Et bien sûr il y a la démo.

Public release of SharepointPlus — a JavaScript API for Sharepoint [announcement]

In my job I have to work with Sharepoint, but with no access to the back-end. I can only edit the HTML code, and hopefully I can use JavaScript. It’s really handy with the Sharepoint web services, even if they are not well-documented !

I found a couple of JS API on the Web, but there are not documented or not really easy to use. Then I developed my own API: SharepointPlus.

And today I announce the first public release of my framework available on GitHub: http://aymkdn.github.com/SharepointPlus/

Share the love 🙂

Changer le thème/skin de Pidgin [Astuce]

Pidgin est un logiciel qui permet de se connecter à MSN, GTalk, Facebook Chat, et bien d’autres protocoles.

J’ai eu quelques difficultés à trouver comment changer le thème de ce programme… Et à force de chercher je suis tombé sur la documentation (qui est très mal référencée) que je vous traduis ci-dessous :

Comment changer mon thème GTK+ ?

Depuis la version 2.7.0, Pidgin s’accompagne d’une version intégrée de GTK+ qui n’inclue pas de thèmes supplémentaires ou d’application pour en changer.

Pourtant il existe un moyen de le faire grâce à Alexander Shaduri. Remarque : il n’est pas recommandé d’utiliser l’installeur de GTK+ qu’il distribue, à moins que vous ne saviez ce que vous faites et que vous le fassiez pour de bonnes raisons.

Commencez par télécharger GTK2 Thèmes que vous allez extraire dans un dossier temporaire pour y récupérer les répertoires lib et share que vous allez ensuite placer dans <répertoire d'installation de Pidgin>\Gtk (ils existent déjà donc il faut les ajouter quand même).
Ensuite télécharger GTK2 Prefs que vous allez décompresser dans un dossier temporaire pour récupérer le fichier gtk2_prefs.exe qu’il faudra placer dans le répertoire <répertoire d'installation de Pidgin>\Gtk\bin.

Il ne vous reste plus qu’à exécuter gtk2_prefs.exe et de choisir le thème. Vous voudrez probablement choisir l’option « Apply for all users », et vous devrez relancer Pidgin pour qu’il applique le nouveau thème.

URL dans un Workflow de Sharepoint [Astuce]

Avec les workflows de Sharepoint on peut faire un certain nombre de choses, comme envoyer des emails avec des liens.
Il existe trois variable dans la Current List à savoir :
Encoded Absolute Url : retourne une url du type http://votre.site.com/votre/rep/Lists/NomListe/2_.000 avec ‘2’ l’ID de l’item… donc pas très utile;
Server Relative Url : retourne /votre/rep/Lists/NomListe/2_.000 …. donc également pas très utile;
Path : retourne votre/rep/Lists/NomListe qui devient plus exploitable !

Ainsi vous allez pouvoir créer des liens dans vos emails de workflow qui redirige vers la liste courante grâce à Path et en y ajoutant ce qui va bien ! 🙂

Attention cependant, puisque Sharepoint gère incorrectement les espaces dans l’adresse URL, et le premier espace qu’il y aura sera tout simplement supprimé….