PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

genma : Scan2Epub.sh où comment lire des Scantrad en Epub

lundi 16 octobre 2017 à 09:00

Scantrad

Un scanlation, parfois aussi nommé scanslation, scantrad ou mangascan, fait référence à un manga qui a été numérisé (scanné) et traduit par des fans depuis sa langue originale (habituellement le japonais ou le coréen) vers une autre. Définition.

Dit autrement, le scantrad est au manga ce que les fansub sont aux anime.

Mon besoin

Comme je l'évoquais dans mes articles Liseuse Booken et BD, Comics, Manga et Ma liseuse Bookeen et les mangas, il m'arrive de lire des versions scannées (les fameux scantrad) de manga que je possède en version papier ou non publié en France.

Jusqu'à présent, je copiais les dossiers contenant les images sur la liseuse Bookeen. Inconvénient, ce sont des images et donc, quand la liseuse se met en pause, on perd là où on est. Si on lit un epub, et qu'on retourne dans le dossier image, on recommence depuis la première image, c'est tout sauf pratique.

La solution que je voyais et que j'avais en projet depuis longtemps et de générer des epubs regroupant ces images dans un seul et même epub.

Framablog et l'interview de Nylnook

Sur le Framablog, il y a une l'interview de Nylnook, le gentil lutin écolo-dessinateur, dans laquelle Nylnook parle de tout son processus de création de bandes-dessinées, jusqu'à la généreration automatisée de bandes-dessinées au format électronique, en les exportant sous différents formats. Pour ça, il a fait un tutoriel long et complet : Faire une BD de A à Z avec des logiciels libres. Pour l'export en différent format, il a fait un script très complet et contient pas mal de choses. Et surtout ça m'a donné l'astuce sur comment faire des epub facilement ! Donc un grand merci à Nylnook pour ça.

La réponse à mon besoin - Scan2Epub.sh

Prérequis
- Connaitre le shell ;)
- Avoir Calibre d'installer (le logiciel qui permet de gérer sa bibliothèque d'epub mais aussi de faire des conversions)

J'ai donc extrait le bout de code (la méthode) du script et je l'ai rapidement adapté à ce voulais faire / à mes besoins et voilà ce que ça donne.

J'ai un dossier Ranma qui contient l'arborescence suivante

Ranma
├── Volume1
│ ├── Chapitre1
│ │ ├── Ranma_1-2_001-001-000-cover.jpg
│ │ ├── Ranma_1-2_001-001-001.png
│ │ ├── Ranma_1-2_001-001-002.png
│ │ ├── ...
│ ├── Chapitre2
│ ├── Chapitre3
│ └── ...
├── Volume2
│ ├── Chapitre1
│ └── ...
└── ...

C'est un dossier avec des sous-dossiers contenant donc les fameux scans du manga Ranma.

Remarque les fichiers ont une nomenclature particulière à savoir Ranma_1-2_NumeroDuVolume-NumeroDuChapitre-NumeroDePage.png Exemple Ranma_1-2_001-001-002.png

J'ai crée un script rapidement en m'inspirant de celui de Nylnook :

#!/bin/bash

# Scan2Epub.sh

creator="Rumiko Takahashi"
title="Ranma 1/2"
ebookIsbn="123456789"
pubDate=`date`
language="Japonais"
tags="Manga, Ranma, Takahashi"
description="Manga de Ranma 1/2"

function convertToeBooks {
for Volume in `ls $path`
do
nomManga=`echo Ranma_1_2_$Volume`
echo "nomManga :" $nomManga
# On met le numéro de volume en numéro de série, sinon on a des conflits dans Calibre à l'import
# des volumes dans la bilbliothèque
series=`echo $Volume |cut -c7-7`
seriesindex=`echo $Volume |cut -c7-7`
# On récupère le fichier de couverture dans le dossier Chapitre 1
# Exemple de nom de couverture : Ranma_1-2_001-001-000-cover.jpg
cover=`find -name *cover.jpg | grep \\$Volume`
cd ./Ranma/$Volume
zip ../$nomManga.cbz `find -name *.png |sort`
cd ../..
# La fonction ebook-convert fait partie de Calibre
ebook-convert ./Ranma/$nomManga.cbz ./Ranma/$nomManga.epub \\
--authors "$creator" \\
--publisher "$creator" \\
--title "$title" \\
--isbn "$ebookIsbn" \\
--pubdate "$pubDate" \\
--language "$language" \\
--series "$series" \\
--series-index "$seriesindex" \\
--tags "$tags" \\
--comments "$description" \\
--no-default-epub-cover --dont-grayscale --dont-normalize \\
--keep-aspect-ratio --output-profile tablet --no-process \\
--disable-trim --dont-add-comic-pages-to-toc --wide --extra-css "img{width:100%}" \\
--cover $cover \\
--no-svg-cover --remove-first-image
done
}
# Appel de la méthode
convertToeBooks

Ca mouline un peu, ça sollicite pas mal le processeur pendant une dizaine de secondes et on a alors dans le dossier Ranma

└── Ranma
├── Ranma_1_2_Volume1.cbz
├── Ranma_1_2_Volume1.epub
├── Ranma_1_2_Volume2.cbz
├── Ranma_1_2_Volume2.epub
├── ...

Les fichiers .cbz sont des zip contenant les images, un vieux format utilisé à l'époque pour lire des bandes dessinées électroniques. Mais surtout, je retrouve des fichiers .epub ! Chaque fichier comme Ranma_1_2_Volume1.epub est à transférer ensuite sur la liseuse et est lisible comme un Ebook, avec temps de lecture, reprise à la bonne page etc. J'ai donc réussi mon mini-projet :)

Amélioration et v2

Quand je lance le script, le processus utilise un seul coeur, mais à 100% pendant quelques minutes, ce qui amène le ventilateur à tourner et faire du bruuit. J'ai un SSD, l'écriture disque n'est pas un facteur limitant, le processeur est un corei5, j'ai de la RAM. Donc je pourrais optimiser tout ça.

Le plus simple est de lancer 4 processus en paralèlle. Ma première idée est de faire un truc du genre

début de la boucle
appelDeFonction(i) &
appelDeFonction(i+1) &
appelDeFonction(i+2) &
appelDeFonction(i+3) &
retour en haut de la boucle

Ca commence à faire compliquer pour un simple script Shell, je pense que je vais repartir de Zéro et probablement faire ça via du Python pour avoir un language plus évolué.

Sinon, en autre fonctionnalité, il faudra que je rajoute la ligne qui va bien qui permettra, une fois les epub générés, d'en faire une copie automatique sur ma liseuse au montage de celle-ci.

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

antistress : Mes derniers dons : LibreOffice, Debian, la FSF, l'EFF, Grammalecte, ZeMarmot et Wikipédia

lundi 16 octobre 2017 à 03:10

Pièces de puzzle

Il y a deux ans j'avais noté, pour en faire un billet, les dons que j'avais fait à des projets tournant autour du Libre.

À cette époque j'avais fait quatre dons :

Pour rappel, mes précédents dons ont concerné libregraphicsmeeting, Pitivi, GNU MediaGoblin et Replicant (lire ce billet), ou encore Toile Libre, La Quadrature du Net et Mozilla (lire cet autre billet).

Le temps passe vite et je n'ai jamais publié ce billet.

Qu'importe, voici l'occasion de dresser la liste plus ou moins complète (je ne sais plus si j'ai fait d'autres dons dans l'intervalle !) des projets que j'ai tenu à aider financièrement, en remerciement ou pour soutenir leur action.

Cet été j'ai ainsi donné 10€ dans le cadre de la campagne de financement du développement de Grammalecte.

Avant-hier j'ai fait un don de 10€ dans le cadre de l'appel à aide au financement du développement de GIMP et du film d’animation Libre ZeMarmot.

Ce soir je viens de donner mon accord pour un don de 5€ par mois à Wikipédia (Wikimédia France, pour être précis – pour donner, c'est par ici). Ce don donne droit à une réduction d'impôt en France de sorte qu'il ne me coûtera in fine (outre l'avance de trésorerie) que 1,67€ par mois, soit environ 20€ par an.

Pourquoi avoir fait le choix d'un don récurrent cette fois ? Plusieurs raisons cumulatives me viennent à l'esprit :

En conclusion, il faut bien avouer que tout cela n'est pas très organisé. Il faudrait sans doute que je réfléchisse à m'imposer une discipline régulière en la matière.

Et vous, comment faites-vous ?

Gravatar de antistress
Original post of antistress.Votez pour ce billet sur Planet Libre.

Journal du hacker : Liens intéressants Journal du hacker semaine #41

lundi 16 octobre 2017 à 00:01

Pour la 41ème semaine de 2017, voici 10 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires

Carl Chenet : Le Courrier du hacker : le point après (déjà) 5 numéros et les leçons retenues

lundi 16 octobre 2017 à 00:00

Déjà 5 numéros depuis l’annonce du lancement du Courrier du hacker, la newsletter hebdomadaire résumant l’actualité francophone du Logiciel Libre et Open Source. L’occasion de faire le point sur les étapes parcourues… et les leçons retenues.



Le lancement

Annoncé en premier sur ce blog, le Courrier du hacker a immédiatement trouvé un public intéressé. Mon billet de blog a été relayé sur le Planet-Libre et le Journal du hacker, ce qui assurait déjà une bonne transmission de l’information. Quelques jours plus tard la première édition était (fébrilement) envoyée à 80 abonnés.

La source des liens du Courrier du hacker

Idée à retenir : avoir un blog, même peu fréquenté, si possible lié à quelques planètes, est toujours une bonne base pour lancer un nouveau projet. J’avais également validé l’idée en posant la question à mes abonnés sur mon compte Mastodon et Twitter.

L’emballement

À la suite de ce 1er numéro, j’ai donc continué à communiquer sur l’apparition du Courrier du hacker.

Fin septembre je  publiais coup sur coup 2 billets sur ce blog pour suivre le développement du projet puis expliquer ma démarche. Le deuxième numéro était envoyé à 206 abonnés, soit plus de 100% d’augmentation et le troisième à 264.

J’étais donc rassuré sur l’intérêt du public pour le projet et extrêmement positif pour l’avenir.

Idée à retenir : il est important de faire se rencontrer le plus rapidement possible son idée et le potentiel public. Si l’idée et la réalisation sont bonnes, les personnes intéressées vous rejoindront rapidement et seront votre meilleur publicité dans l’avenir. Être régulier dans ses publications permet aussi de rassurer son public sur la pérennité du projet.

Les poids lourds

Il était temps pour moi de communiquer un peu plus largement.

J’avais trois numéros à mon actif et un nombre d’abonnés encore modeste mais loin d’être ridicule. J’étais rassuré sur ma démarche et je pouvais donc tenter de conquérir un public plus nombreux.

Ce 4 octobre j’annonçais sur LinuxFR, le plus ancien site francophone d’informations sur le Logiciel Libre, l’existence de la newsletter. Présentant un projet encore jeune, j’optais pour la publication d’un billet sur mon journal personnel.

La réception de cette annonce fut très positive. Le résultat fut une augmentation importante du nombre d’abonnés les deux premières journées, puis à un rythme plus modeste  les jours suivants.

Peu avant l’envoi du 4ème numéro à dorénavant 365 abonnés,  j’ai essayé de communiquer via différents Reddit francophones. Une seule de ces annonces a trouvé son public et, heureusement pour moi, il s’agissait de l’annonce postée sur /r/france (soit le sous-Reddit France, pour les non-initiés), le plus important sous-Reddit francophone en nombre d’abonnés (+ de 160000). Le nombre d’abonnés a de nouveau grandi significativement.

Suite à une importante activité professionnelle réduisant mon temps pour ce projet, les semaines suivantes ont été plus calmes. Le 5ème numéro a été envoyé à 435 abonnés, ce qui représente la plus faible progression entre deux numéros. Mais il n’y a pas à rougir du chemin parcouru et  nous ferons tout pour améliorer ce chiffre dans les semaines à venir 😉

Idée à retenir : il faut avoir une bonne connaissance des médias de sa communauté et de leur fonctionnement et savoir inscrire votre projet dans leur ligne éditoriale pour intéresser leur public à votre projet. Il faut aussi arriver avec une bonne base, donc plutôt dans la seconde phase de la vie de votre projet. En effet s’exposer trop vite implique des critiques qu’il est parfois difficile d’encaisser et qui peuvent s’avérer décourageante en début de vie d’un projet.

Quelques ressources sur les newsletters

Pour finir, je me suis appuyé récemment sur différents articles à propos des newsletters pour essayer de faire grandir le Courrier du hacker. Si vous êtes dans mon cas, vous serez sûrement heureux de les consulter. Par contre ces liens sont en anglais.

Gravatar de Carl Chenet
Original post of Carl Chenet.Votez pour ce billet sur Planet Libre.

Morot : Puppet : déployer automatiquement une applications Web avec les services Apache/PHP/MySQL

dimanche 15 octobre 2017 à 17:42

Dans ce court article, je vous propose de découvrir comment avec Puppet, il est simple de déployer un serveur Web complet prêt à accueillir une application web depuis son dépôt GIT. Je vais prendre pour exemple le célèbre CMS WordPress.

Premièrement, on installe les modules dont on aura besoin :

puppet module install puppetlabs-apache --version 2.3.0
puppet module install puppetlabs-mysql --version 5.1.0
puppet module install puppetlabs-vcsrepo

Partons sur une simple définition de node dans le fichier /etc/puppetlabs/code/environments/production/manifests/site.pp contenant notre serveur web. On installe Apache avec le moteur prefork et non pas worker fourni par défaut car on souhaite installer mod_php. Enfin on créé un VirtualHost www.morot.test dont les fichiers seront dans le répertoire /srv/www :

node 'www' {
  class { 'apache':
    default_vhost => false,
    mpm_module => prefork,
  }

  class { 'apache::mod::php': }

  apache::vhost { 'www.morot.test':
    port    => '80',
    docroot => '/srv/www/',
  }
}

On ajoute ensuite le serveur MySQL avec les modules php pour mysql :

  class { '::mysql::server':
    root_password           => 'secret',
    remove_default_accounts => true,
  }
  class { 'mysql::bindings::php': }

Nous avons ensuite besoin d’une base de données dédiée pour notre WordPress, nous allons la créé avec un compte autorisé à y accéder. Le mot de passe est encodé au format de hash de la commande MySQL PASSWORD(‘secret’); :

  mysql_database { 'wordpress':
    ensure  => 'present',
    charset => 'utf8',
    collate => 'utf8_general_ci',
  }

  mysql_user { 'wordpress@localhost':
    ensure => 'present',
    password_hash => '*14E65567ABDB5135D0CFD9A70B3032C179A49EE7'
  }

  mysql_grant { 'wordpress@localhost/wordpress.*':
    ensure     => 'present',
    options    => ['GRANT'],
    privileges => ['ALL'],
    table      => 'wordpress.*',
    user       => 'wordpress@localhost',
  }

L’ensemble des bases de données seront sauvegardées tous les jours à 02:10 et conservées sept jours. Le script est fourni par le module Puppet.

  class { 'mysql::server::backup':
    backupuser => 'backup',
    backuppassword => 'secret',
    backupdir => '/srv/mysqlbackups',
    backupcompress => true,
    backuprotate => 7,
    file_per_database => true,
    time => ['2','10']
  }

Enfin, il ne nous reste plus qu’à récupérer les sources de notre application depuis le dépôt, pour une version taillée pour un développeur il serait possible de prendre la branche master.

  vcsrepo { '/srv/www':
    ensure   => latest,
    provider => git,
    source   => 'https://github.com/WordPress/WordPress.git',
    revision => '4.8-branch',
  }

Nous avons terminé, pour aller au bout des choses, il faudrait pousser un wp-config.php depuis un template Puppet et injecter le SQL modèle lors de la création de la base. En version complète notre manifeste donne :

node 'www' {
  class { 'apache':
    default_vhost => false,
    mpm_module => prefork,
  }

  class { 'apache::mod::php': }

  apache::vhost { 'www.morot.test':
    port    => '80',
    docroot => '/srv/www/',
  }

  class { '::mysql::server':
    root_password           => 'secret',
    remove_default_accounts => true,
  }
  class { 'mysql::bindings::php': }

  mysql_database { 'wordpress':
    ensure  => 'present',
    charset => 'utf8',
    collate => 'utf8_general_ci',
  }

  mysql_user { 'wordpress@localhost':
    ensure => 'present',
    password_hash => '*14E65567ABDB5135D0CFD9A70B3032C179A49EE7'
  }

  mysql_grant { 'wordpress@localhost/wordpress.*':
    ensure     => 'present',
    options    => ['GRANT'],
    privileges => ['ALL'],
    table      => 'wordpress.*',
    user       => 'wordpress@localhost',
  }

  class { 'mysql::server::backup':
    backupuser => 'backup',
    backuppassword => 'secret',
    backupdir => '/srv/mysqlbackups',
    backupcompress => true,
    backuprotate => 7,
    file_per_database => true,
    time => ['2','10']
  }

  vcsrepo { '/srv/www':
    ensure   => latest,
    provider => git,
    source   => 'https://github.com/WordPress/WordPress.git',
    revision => '4.8-branch',
  }
}

Gravatar de Morot
Original post of Morot.Votez pour ce billet sur Planet Libre.