epubcheck 必須の META-INF/container.xml リソースが見つかりません.

perl で作成したEPUBファイルの正当性を epubcheck で検証したら下記のエラーが出力された。

FATAL(RSC-002): C:/works/20180504220137.epub/20180504220137.epub(-1,-1): 必須の META-INF/container.xml リソースが見つかりません.
ERROR(RSC-001): C:/works/20180504220137.epub/20180504220137.epub(-1,-1): ファイル 'META-INF/container.xml' が見つかりません.

エラーが検出されました

epubcheck 完了


実装は下記のとおり。
原因は、圧縮対象にファイルを追加する際、相対パスのデリミタにバックスラッシュ(\)を使用していたことにあった。
デリミタをスラッシュ(/)に置換したら無事エラーが解消したが、下記のような下手なプログラムを書くより addTree や addTreeMatching メソッドを使用した方が良いだろう。

use strict;
use lib 'lib';
use utf8;
use autodie;
use Cwd qw(realpath);

sub zip_pack {

  my ($directory, $output_file) = @_;

  use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
  my $zip = Archive::Zip->new();

  #絶対パスを取得
  my $start_dir = realpath($directory);

  use File::Find;

  find( 
    sub {
        my $filepath = $File::Find::name;

        if (! -f $filepath) {
          return;
        }

        #相対パスを取得
        my $relative_path = File::Spec->abs2rel($filepath, $start_dir);

        #デリミタを \ から / に置換
        $relative_path =~ s/\\/\//g;

        my $result = $zip->addFile($filepath, $relative_path);

        if ($relative_path eq 'mimetype') {
          $result->desiredCompressionMethod( COMPRESSION_STORED );
        }
      },
    $start_dir
  );

  $zip->writeToFileNamed($output_file);

}

Kindle mobi azw スタートページの設定

EPUBファイルを作り、KindleGen.exe で mobi 形式にコンパイルするも、
最初のページがタイトルページではなく、本文ページになってしまう。
最初に開かれるページ(start page)は、目次ファイルの nav タグの設定が影響している。

何が正解かはわからないが、このタグの中身をいじったら、よい具合に
最初にタイトルページが開かれるようになった。

<nav epub:type="landmarks" id="landmarks" hidden="hidden">
    <ol>
        <li><a epub:type="titlepage" href="title.xhtml">タイトル</a></li>
        <li><a epub:type="toc" href="nav.xhtml">目次</a></li>
        <li><a epub:type="bodymatter" href="contents000.xhtml">本文</a></li>
    </ol>
</nav>

epub:type が titlepage と bodymatter の行を削除。

<nav epub:type="landmarks" id="landmarks" hidden="hidden">
    <ol>
        <li><a epub:type="toc" href="nav.xhtml">目次</a></li>
    </ol>
</nav>
</nav>

この記事の情報ソースは以下のサイト。
https://github.com/jgm/pandoc/issues/1757

Kindle mobi, azw 形式 ページ余白設定

Kindle mobi, azw, azw3 形式においてページ余白の長さは CSS などのスタイル設定では指定できそうにない( page width や screen margin などの設定項目が見つからない)。

ページ(スクリーン)の余白の長さに影響するのは opf ファイル( standard.opf や content.opf などのファイル名である)の primary-writing-mode 指定である。文書が縦書きの場合は、これが適切に設定されていないとKindle端末で思うようにスクリーン余白が確保されない。
下記は縦書きの場合の設定例。

opfファイルの設定

  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
...

<!-- レンダリング指定 -->
<meta property="rendition:layout">reflowable</meta>
<meta property="rendition:orientation">auto</meta>
<meta property="rendition:spread">auto</meta>
...
<dc:title id="title0">小説を読もう</dc:title>
<dc:creator id="creator0">著者太郎</dc:creator>
<meta property="dcterms:modified">2018-04-29T09:00:00Z</meta>
...
<meta name="primary-writing-mode" content="vertical-rl"/>
</metadata>
...

さて、電子書籍の作成用スクリプトとして、ネット上では easy_epub, easy_epub-denshokyo が入手できるが、2018年4月現在、これらのスクリプトepubファイルを作成しても primary-writing-mode の設定が書き出されない。
primary-writing-mode を設定するには、後続の作業としてスクリプトで生成された epub ファイルを calibre のようなツールで編集するか、下記のように修正した easy_epub.pl を使うかの方法が考えられる。

easy_epubソースコード修正(赤い箇所が追加行)


...
sub content_opf{
my $self = shift;
my $args = shift;

$args->{title} = 'タイトル' if ! $args->{title};
$args->{author} = '著者名' if ! $args->{author};
my $page_progression_direction = $args->{page_style} ? 'ltr':'rtl';
(527行目辺り)
my $primary_writing_mode = $args->{page_style} ? 'horizontal-tb':'vertical-rl';

...

...
<meta property="dcterms:modified">${ymd}T09:00:00Z</meta>
(663行目辺り)
<meta name="primary-writing-mode" content="$primary_writing_mode"/>
</metadata>

Microsft Edge 削除したはずのお気に入りが復活

Windows 10 Microsft Edge にて、アカウントの同期を行っていなくても削除したはずのお気に入りが何かしらのタイミングで復活することがある。
対処は未だ不明。
とりあえず以下の処理を行っておく。

  1. Microsoft Edge を落とした後、下記の場所に格納されている spartan.edb 以外のファイルを削除する(spartan.edbがお気に入りデータ、そのほかのファイルはトランザクションログだそうだ)。

    %localappdata%\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\120712-0049\DBStore

    (このパスをエクスプローラーのアドレスバーに貼り付ける)

  2. Microsft Edge お気に入りのバックアップが下記の場所に取られている模様。これを削除してみる。

    %userprofile%\MicrosoftEdgeBackups\backups\

    ※ %userprofile%\MicrosoftEdgeBackups は隠しファイルになっている。

Kindle マイライブラリのリストが見えなくなってしまった。

Kindleのマイライブラリのリストデータが壊れたらしい。
書籍タイトルが始めの数冊のみしか表示されない。
ページ切り替えると画面右下のページ番号は更新されるが
途中からは真っ白な画面が表示されるだけ。

以下、復旧手順。

※ 以下の操作を行うと端末にダウンロードしたデータや、マイクリップのデータが消えてしまうため、
必要に応じてマイクリップ(My Clippings.txt)などのファイルはバックアップを取っておくこと。

(1)アカウントの登録解除
 「設定」 → 「マイアカウント」にて「端末の登録を解除」を実行.
(2)Kindle端末の初期化
 「設定」 → 「端末オプション」にてリセットを実行.
(3)アカウント再登録
 Kindle再起動後、「設定」 → 「マイアカウント」にてアカウントの再登録を実施.

以上

ThinkPad T410i リカバリーメディア再作成

ThinkPad T410iでリカバリーメディアを再作成しようとしたところ、次のエラーが発生。

Create Recovery Media ディスクを作成する

Microsoft(R) Windows(R) ライセンスで作成が許可されているデータ・メディアは 1 つのみです。Create Recovery Media プログラムは終了します。

回避策は下記サイトにあり。

https://superuser.com/questions/384658/why-can-i-only-create-one-factory-backup-from-my-lenovo-thinkpad

ファイル Q:\FactoryRecovery\service_done.ini のDONEフラグをエディタで 0 に戻せばよいだけ。

ThinkPad ⇔ Harman/Kardon Onyx Studio パソコン接続

パソコン(ThinkPad T410i)と、Bluetoothスピーカー(HK オニキススタジオ)が
ペアリング接続できないのでいろいろ試した。

結果、ThinkPad のサポートページから Bluetooth ドライバし、ダウンロードし、
インストールしたら無事、接続に成功。
ThinkPadでないほかの種類のパソコンでも、
パソコン側のドライバを更新するのが解決策になるかもしれない。

Bluetoothスピーカーを利用する場合、Bluetooth の基本的なドライバに加えて、
Bluetooth Audio ドライバが必要のようだ。

サポートページから

ThinkPad Bluetooth with Enhanced Data Rate Software

を落としてインストールすると Bluetooth オーディオドライバがインストールされる。
このドライバは、デバイスマネージャー上では、
サウンド、ビデオ、およびゲームコントローラー」の配下で確認できる。

インストーラーパッケージには、Broadcom社のドライバが同梱されているので
直接、Broadcom社から最新のものを落としてインストールするのも手かもしれない。
(私は、Broadcom社から落としたドライバをインストールしている)

なお、ThinkPadのサポートページより落としたインストーラーは、
直接起動すると失敗する場合がある。
ただし、失敗しても、このパッケージが "C:\Drivers\Bluetooth Driver (Broadcom, CSR) "
に解凍されていれば

"C:\Drivers\Bluetooth Driver (Broadcom, CSR)\Broadcom\6.3.0.7400(Driver 6.4.0.1200)\Setup.exe"

を直接実行すると、インストールできる。


音がでないとき

  1. スピーカー側の音量が 0 になっていないことを確認する。
  2. Bluetooth Audio の最新のドライバをインストールする。
    ドライバの入手先は以下のようなキーワードでGoogle検索して見つける。

    例)bluetooth audio device driver download windows 7

    Broadcom社のものなら問題なさそう。
    ちなみに、HK Onyx Studio は、Bluetooth 3.0,A2DP v1.3,AVRCP v1.5 の規格で接続する。
    この仕様については、Harman/Kardon Onyx Studio のサイトで確認できる。