PDF et ligne de commande - Génération d'image pour iDevices


26 août 2013

Notes en vrac

#GHOSTSCRIPT (à intégrer à mon futur post)
#Sources utilisées pour convertir comme il faut un PDF en image
#http://stackoverflow.com/questions/7446552/resizing-a-pdf-using-ghostscript
#http://svn.ghostscript.com/ghostscript/tags/ghostscript-9.01/doc/Devices.htm#PNG
#http://www.ghostscript.com/doc/9.06/Use.htm
#Un iPad : 2048*1536 pixels, 264 pixels par inch, 9.7 inch de diagonale = 7.757*5.818 inches = 558.504 * 418.896 points
#Pour générer une image de 2048 (Z=1) :
#gs -sDEVICE=png16m -dNOPAUSE -dBATCH -dSAFER -sOutputFile=test1024.png -r264 -dDEVICEWIDTHPOINTS=558.504 -dDEVICEHEIGHTPOINTS=418.896 -dPDFFitPage source/67-batifile-CEBI-17-N0-PL-MIS-CVC-01-K.pdf
#Pour générer une image de 4096 (Z=2) :
#gs -sDEVICE=png16m -dNOPAUSE -dBATCH -dSAFER -sOutputFile=test2048.png -r528 -dDEVICEWIDTHPOINTS=558.504 -dDEVICEHEIGHTPOINTS=418.896 -dPDFFitPage source/67-batifile-CEBI-17-N0-PL-MIS-CVC-01-K.pdf
#for i in tiff12nc tiff24nc tiff32nc tiff48nc tiff64nc tiffcrle tiffg3 tiffg32d tiffg4 tiffgray tifflzw tiffpack tiffscaled tiffsep; do echo $i; gs -sDEVICE=$i -dNOPAUSE -dBATCH -dSAFER -sOutputFile=p300-$i.tif -r300x300 67-batifile-CEBI-17-N0-PL-MIS-CVC-01-K.pdf; done

SQL : conversion de vidéos du format WMV au format MP4


13 juin 2013
./configure --prefix=<ffmpegInstall> --enable-libx264 --enable-gpl --enable-libmp3lame
make
make install
ffmpeg -i input.wmv -c:v libx264 -crf 23 -c:a libmp3lame -q:a 100 output.mp4
http://superuser.com/questions/73529/how-to-convert-wmv-to-mp4 http://ffmpeg.org/ffmpeg.html

Code de Luhn


13 juin 2013

Voici la démo et l'implémentation JS du code de Luhn que j'apprécie pour sa simplicité à vérifier des erreurs de saisie.

Génération du code
Nombre initial :
Résultat :
Validation d'un code
Nombre à vérifier :
Résultat du test :
//Vérifie que le paramètre d'entrée est valide au sens du code de Luhn. Renvoie true ou false en fonction du résulat.
function    checkLuhnCodeValidity(srcNumber)        {
    srcNumber = ""+srcNumber;
    var Total = 0;
    for(var i=0; i<srcNumber.length; i++)       {
        var CurDigit = parseInt(srcNumber[srcNumber.length - 1 - i]);
        if (isNaN(CurDigit))        return false;
        CurDigit = i%2 ? CurDigit*2 : CurDigit;
        if (CurDigit > 9)       CurDigit -= 9;
        Total += CurDigit;
    }
    return Total % 10 == 0;
}
//Renvoie le chiffre, aka le code de Luhn, qu'il faut ajouter à la variable d'entrée pour que l'ensemble soit valide au sens du code de Luhn.
function    computeValidLuhnCode(srcNumber)     {
    for(var i=0; i<=9; i++)     {
        var TestNumber = ""+srcNumber+i;
        if (checkLuhnCodeValidity(TestNumber))      return i;
    }
    return false;       //srcNumber n'est pas un nombre (peut-être la variable contient-elle des lettres ou d'autres codes ?)
}

Schéma interne des classes Objective-C


23 mars 2013

Un aide-mémoire sur les relations entre instances et classes en objective-C, du blog très intéressant de Greg Parker :

Le post correspondant à cette image est également très instructif et explique clairement et rapidement le concept de meta-classes.

On peut noter que CocoaWithLove possède une page sur ce même sujet.

Utiliser Bash (et PHP) pour se faciliter la vie


23 mars 2013

Pour lire le manga Shamo depuis le site KissManga en utilisant son terminal à bon escient voici un petit script PHP :

#!/usr/bin/php -q
<?
if (array_key_exists(2, $_SERVER["argv"]))      {
    $TitleURL = $_SERVER["argv"][2];
    preg_match("@(http://[^/]+)@", $TitleURL, $Matches);
    $RootURL = $Matches[1];
}   else    $RootURL = false;

$Contents = file_get_contents("php://stdin");

//Analyse de la page principale du manga : on en déduit le nom du volume et la page spécifique du volume contenant toutes ses images
if ($_SERVER["argv"][1] == "--main")        preg_match_all('@<a\s+href="([^"]*)" title="Read[^"]+online">([^<]*)</a>@is', $Contents, $Matches);
//Analyse de la page d'un volume donné : on en déduit toutes les URLs des images du volume
if ($_SERVER["argv"][1] == "--volume")      preg_match_all('@lstImages\.push\("([^"]+)"\)@', $Contents, $Matches);

foreach($Matches[1] as $i=>$U)      echo $RootURL === false ? "$U\n" : "$RootURL$U|".trim($Matches[2][$i])."\n";

?>

Pour l'utiliser, du Bash sympathique :

MangaURL='http://kissmanga.com/Manga/Shamo'; MangaDir="shamo"; which wget && dlout='wget -qO -' && dlhead='wget --spider -qS 2>&1' && dlfile='wget -qO'; which curl && dlout='curl -s' && dlhead='curl -sI' && dlfile='curl -s -o'; $dlout "$MangaURL" | ./kissmanga --main "$MangaURL" | while read f; do URL=$(echo $f | awk -F '|' '{print $1}'); Folder=$(echo $f | awk -F '|' '{print $2}'); echo $Folder; mkdir -p "$MangaDir/$Folder"; i=-1; $dlout "$URL" | ./kissmanga --volume | while read img; do ((i++)); echo -n $i" : "$img; ImgType=$($dlhead "$img" | grep 'Content-Type:' | awk -F ':' '{print $2}'); Ext=${ImgType#*/}; PicName=$MangaDir/$Folder/$(printf %03d $i).$Ext; [[ -f $PicName ]] && echo " : existe" && continue; $dlfile "$PicName" "$img"; echo " : ok"; done; done

Et au final on obtient en moins de 20 minutes 5722 images correctement nommées et classées en 20 dossiers.

Ce script est compatible Linux et OSX.

Le script commenté est accessible et donc téléchargeable.

1 2 3 4 5 6.. 9 10 11 12..... 18 19 20