KDPで電子書籍を出版しました
電子書籍をリリースしました。PythonからGoogle Cloud Vision APIを使って文字認識(OCR)する方法の解説書です。
Google Cloud Vision APIとPythonで文字認識
- 作者: machine powers
- 発売日: 2018/09/14
- メディア: Kindle版
- この商品を含むブログを見る
また黒歴史が一ページ。何はともあれ実績解除。
7月中に書き始めて、途中で方針転換して内容を一部カット、紆余曲折の結果どうにか書籍としての体裁を整えたという感じ。
バージョン1.1.1が最新です。いきなりヘマをやらかしているので奥付に記載のバージョンが1.0の場合はコンテンツを更新してください。
続きを読むPythonで複数の画像をPDFにする(1画像1ページ/圧縮なし)
スキャン済みの画像データをゲットしたのはいいけれど……。
PNG形式のバラ画像200枚というのは不便ですねって話。
ImageMagickで一気にPDF化することはできないので……。
1画像ずつPDFにして結合すればいいんだけど、それはそれでめんどいのでPythonでやってみます。
続きを読むPandocで生成したEPUBをRubyで修正してみる
Pandocネタの続き。おそらく正しい対処法はPandocのfilter機能を使う方法。解説というよりは備忘録です。あしからず。
その場しのぎのやっつけとして適当なスクリプト言語で書き換える。
背景
PandocでEPUBを作る際に、--number-sections
オプションを使うと章番号、セクション番号を自動的に割り振ってくれる。
しかし、「第n章」や「Chapter n」のようにはしてくれない。CSS疑似要素である程度は設定できるが、いずれにしろ標準機能では対応していない。
Pandocのバージョンは2.2.3.2。フォーマットはEPUB3。
EPUBと目次
EPUBの正体はCSSとHTML(正確に言うとXMLベース)の寄せ集めをZipで圧縮したものなので展開して編集して再度圧縮すれば問題ない。
EPUBには目次用のファイルとしてEPUB2用のtoc.ncx
とEPUB3系のnav.xhtml
、さらに目次ページが存在している。
問題はnav.xhtml
。EPUBビューワーで目次ページとして表示する場合はCSSが使える。そのためCSS疑似要素で章番号のフォーマットをいじることができる。
残念ながらこのnav.xhtml
はナビゲーションパネルにも使用され、その場合はCSSは機能しない。故にCSSの疑似要素で章番号のスタイルを変えるという方式は
中途半端になってしまう*1。
実際の対応
hav.xhtml
とtoc.ncx
はスクリプトで書き換えて、本文側はCSSで擬似要素として実現する方式。
追加の要件として「付録」という見出しの章はセクションを含めて特別扱いする。
ただ、疑似要素による章見出しはKindle化した際に見栄えが良くないかも。
nav.xhtmlの修正
nav.xhtml
は<nav>
要素で<ol><li><a>...
というリストをラップしているだけ。もちろん<ol>
要素が入れ子担っている点を考慮する必要がある。
NokogiriのXPath指定で<a>
タグを取り出して条件に合うところだけ書き換える。XMLなのでnamespace
を考慮する。
chapter_node = node.xpath('./xmlns:a')
章番号、セクション番号ともに<a>
タグの内側に<span>
タグで囲まれているので正規表現でマッチしたところを書き換える。
toc.ncxの修正
章の見出しだけ書き換える。<navLabel>
というタグの要素を取り出す。
ncx_xml.xpath('//xmlns:navLabel/xmlns:text')
<navLabel>
というタグの下に<navLabel>
というタグがあるので親のタグだけ書き換える。
本文側の修正
./EPUB/text/ch00X.xhtml
の各ファイルを修正する。以下のような形式なので対して難しくない。
<h1><span class="header-section-number">5</span>
付録扱いしたいChapterだけ<span>
タグのクラスを置き換えて対処。それ以外はCSSで対応。
h1 > span.header-section-number::before { content: "第" ; } h1 > span.header-section-number::after { content: "章" ; }
スクリプトによる修正
EPUBを_temp
というフォルダに展開しているという前提。
EPUBビューワーの目次ページではCSSが効くが、目次パネル(?)ではCSSが効かないのでこういう微妙な対処方法に。
書き換えの対象
Nokogiriのインストール
$ gem install nokogiri
コード
Pandocで生成したepubファイルの目次情報と章番号を修正するRubyスクリプト
ザ・やっつけ仕事ですが似たようなことをやる人の参考になりますようにということで。
展開と再圧縮
これも備忘録。実際はRakeで一気にやっています。
展開
$ unzip -q temp.epub -d _temp
temp.epub
というEPUB3形式のファイルを_temp
に展開。
再圧縮
必要な箇所を修正したら再度圧縮する。mimetype
というファイルだけ圧縮率0にする。
展開先のディレクトリ(この例では_temp
)に移動してから再圧縮。
$ cd _temp
まずmimetype
というファイルだけ入ったファイルを作り、その後で残りのファイルを圧縮してくっつけるイメージ。
$ zip -0Xq output.epub mimetype $ zip -Xr9Dq outoput.epub *
これでOK。
参考
EPUB生成のpandocのコマンドは下記のとおり。
$ pandoc -f markdown -t epub3 --epub-metadata=metadata.xml -o temp.epub title.txt *.md --epub-cover-image=image.png --css=github.css --toc --toc-depth=2 --epub-chapter-leve=1 --number-sections --no-highlight
title.txtはタイトルと著者、元データはMarkdown。
参考にしたサイトは次のとおり。
まとめ
EPUBがWeb技術ベースなのでこれまでの知識がかなり活用できている。EPUBの仕様策定に関わった方々の好判断の賜物。
ちゃんとPandocのfilter機能を勉強するのが一番だけど。
- 作者: 林拓也
- 出版社/メーカー: 技術評論社
- 発売日: 2012/08/25
- メディア: 大型本
- この商品を含むブログ (2件) を見る
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
- 作者: 伊藤淳一
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/25
- メディア: 大型本
- この商品を含むブログを見る
*1:もちろんナビゲーションパネルと目次ページ、本文で章番号の形式が変わってもいいなら問題ない
Kindle Unlimitedのおすすめコンテンツ(2018/09)
7月の2ヶ月99円キャンペーンで読んだ or 過去に読んだやつからおすすめをピックアップ。
続きを読むOCNとDTIのSIMの通信速度比較
ほかのメジャーなMVNOの実測値は結構あるので他所に任せるとして。
基本的に2回測定して良い方のデータ。面倒なので平均はとっていません。追い風参考記録ぐらいに考えてもらえば。
概要
SIM2枚刺し運用なので手軽同一地点の速度比較ができるようになったので情報提供。
OCNについて
メジャーなMVNOなので特に解説は不要かと。
良くも悪くも大手ですね。
速度に関しては利用者が多い点を考えれば健闘しているという印象です。
使用しているのは1日110Mbpsの音声つきプランのSIMです。
DTIについて
マイナーなMVNO。だからと言って利用者が少ないということもない。
申し込みページのデザインがものすごく胡散臭いことで有名。
半年無料などのキャンペーンがある。
基本的に遅い印象が、なぜか上り方向(アップロード)はそこそこ速いです*1。
下りが1Mbpsを切ることはよくありますが、それでも上り方向の速度は数Mbps出たりします。
昼休みとか人の多い地点で遅いことに定評あり。
全然ダメってわけでもなく、とはいえ推奨するほどでもないポジション。
比較用に使用したのは月3GプランのSMS対応データ通信SIMです。
京都市西部辺境
休日はガタ落ちします。
DTI
平日の午後。
下り16.8Mbps。
過去最高記録。
OCN
同じく平日の午後。
下り46.1Mbps。
イオンモール桂川
平日の午後。休日は昼間でも速度がガタ落ちする。DTIの方が速度が出ていた。特に上り方向はDTIの圧勝。
DTI
下り14.6Mbps。上りは安定しているが下りはブレが大きい。
OCN
下り11.5Mbps。ただし10Mbpsでないこともあった。
天満宮境内
同じく平日の午後。DTIの方が
DTI
下り27.3Mbps。DTIはやればできる子。
OCN
下り24.0Mbps。安定して10Mbps超え。
四条烏丸交差点付近
金曜日の夕方。両者ともに下り1Mbpsに到達しない……。人が多すぎる。
DTI
OCN
一応0.6Mbpsぐらいは出ることもあるが、上りがガクッと落ちる。
阪急洛西口駅
金曜日の夕方。
DTI
無駄に上り方向は高速。
OCN
まさかの1Mbps未満……。
感想
イメージに反してOCNのほうがDTIより遅いケースが多いです……。
MVNOは時間帯でかなり速度が変わるので何を重視するかによると思います。
まあ安かろう悪かろうの一歩手前ぐらいに考えて付き合うのがいいと思います。
速度が欲しいなら自宅かどこかで光回線。
100%ムックシリーズ 完全ガイドシリーズ202 SIMフリー完全ガイド
- 出版社/メーカー: 晋遊舎
- 発売日: 2017/12/29
- メディア: Kindle版
- この商品を含むブログを見る
インターネット白書2018 デジタルエコノミー新時代の幕開け (NextPublishing)
- 出版社/メーカー: インプレスR&D
- 発売日: 2018/02/09
- メディア: Kindle版
- この商品を含むブログを見る
*1:帯域制御ミスってんじゃないのか