EPUBに日本語フォントを埋め込む際のライセンスについて聞いて来ました

国際電子出版EXPO2012がはじまったので、さっそく行って来ました。

まだ東京国際ブックフェア(TIBF)が始まってないせいか(電子出版EXPOが7/4〜7/6、TIBFが7/5〜7/8という微妙にずれがあるスケジュールなのでした)、昨年に比べると今ひとつ落ち着いているというか、盛り上がりにかける雰囲気もありましたが、明日以降だとまたちょっと違うのでしょうか。とりあえず楽天koboの実物が見れなかった(TIBFに出展でした…orz)のが残念です。

また、何となく時代がEPUB3の方向に向きつつある印象もありました。それも、(良くも悪くも)「EPUB3だと世界が革命されてビジネスもウハウハ」みたいな話ではなく、ある種「ふつうのフォーマット」としてのEPUB3を使ったソリューション、という地に足のついた感じです。派手さには欠けるというか、せっかくのイベントなのでもうちょっとうさんくさい夢のあるソリューションもあってもいいんじゃないかという気もしますが、地道に進化しつつあるということだと思います。

とはいえ、では実際にEPUB3を使おうとなると気になる所はいろいろあります。例えばフォントのライセンス。PDFについては商用利用についても明確に許可しているフォントもありますが、EPUBの場合どうなのか。確か2年前のこのイベントで聞いた時は各社まだ未定みたいな様子でしたが、現状を出展されていた企業の方に聞いてみました。

【念のため注意】これはあくまでその場にいた出展者の方にお話を聞いただけなので、正確な内容は異なる場合があります。実際に利用される際は、各自ライセンスを確認してからご利用ください。

モリサワ

MORISAWA PASSPORTのパネルの前で聞いてみたところ、MORISAWA PASSPORTはEPUB埋め込みには非対応のようで、別途相談が必要、とのことでした。画像にして埋め込みなどは問題ないようです。

参考

DynaFont

こちらもモリサワさんと同様、EPUB埋め込みには別途相談が必要、とのことでした。いただいた資料の「電子書籍におけるDynaFontの許諾範囲について」では、「文字をデータとして使用/許諾対象世帯のグリフのみをサブセットフォントとしてコンテンツ内に収録して表示させる。」には○がついていたのですが、これには該当しないようです(が、確認した方がよさそうな気もします)。

参考

フォントワークス

フォントワークスは「フォントワークスLETSフォントの使用許諾範囲」という資料をいただき、これの通りです、ということでした。

で、EPUB埋め込みは「文字をテキストデータとして保有し、指定のサブセットフォントで表示(可変レイアウト型)」に該当するため、「作中で使用されている文字(グリフ)のみをサブセットフォントとして、《文字サイズなどの変更機能のある》コンテンツ内に収録して表示させる」のはOKとのことです。おおお。ちなみにフォントのサブセット化については、InDesignで…みたいな話があったような(ちょっと不正確かもです)。

いただいた資料にも「フォントワークスでは安心してフォントをご使用いただけるよう使用許諾内容を明確にしています」と書いてあり、説明された方も同様のことを(なんとなく自信をもってる風に)お話ししてくれました。これは素晴らしいですね!

参考

イワタ

こちらもお話をうかがったところ、LETSなりフォント単体などで正規のフォントのライセンスを持っている前提で、無償の配布物であれば利用可、有償販売するには別途ご相談、ということでした。おおお。

もっとも、無償だったらフォントを丸ごとごっそりEPUBに突っ込んでいいかと言われると微妙な話になりそうなので、おそらくはサブセットだと思いますが、ここは要確認です。

参考


というわけで、結論としてはフォントワークスLETSフォントが販売用EPUBファイルにも埋め込み可能(ただしサブセット)、それ以外は要確認(無償ならイワタフォントも可)、というところでした。
ちなみにヒラギノについては大日本スクリーン製造さんが出展されていなかったようなので確認できていません。残念。

あとはサブセットの作り方だよなあ……手頃なツールで埋め込み用サブセット作れるものってあったっけ……。

FM3用TOPPERS/ASPをMacでビルドする

エミュレータが確保できたので、続いてビルド環境を用意します。

Macでarm開発をするにはいろいろやり方があるようです。Eclipseでも最近ではCDTとかGNU ARM Eclipse Plug-inといった気の利いたものもあって便利そうですが、相変わらずEmacsで暮らしている私はそういう近代的な環境のことはよくわからないので、まずはターミナルからコマンドラインでビルドできるようにします。

yagartoのインストール

そもそもarmのクロスコンパラからしていろいろあるようですが、yagarto(http://www.yagarto.de/)は必要なコマンドをまとめてダウンロードできて便利そうなので、これを使います。

ダウンロードしたdmgファイルをダブルクリックすると、「yagarto-4.6.2.app」などと書かれたファイルが入ったフォルダが見つかります。この.appファイルがyagartoのもろもろを固めたもので、これをインストールしたいディレクトリにコピーし、実行します。

yagarto同梱のドキュメントでは「~/yagarto/」というディレクトリを作ってそこに.appファイルを置いてるようなので、これを真似します。そうすると、「~/yagarto/yagarto-4.6.2/」というディレクトリができます。その下のbin/にあるのが実行ファイルになるので、そこにpathを通します。

export PATH="$PATH:$HOME/yagarto/yagarto-4.6.2/bin"
export PATH="$PATH:$HOME/yagarto/yagarto-4.6.2/tools"

↑この辺りを.bash_profileなりなんなりに記述しておいてください。

無事インストールできたか、試してみます。

$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GCC) 4.6.2
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

動いてるようですね。これでarm-none-eabi-gccなどが使えるようになりました。おめでとうございます。

TOPPERS/ASPの入手とビルド

FM3用のTOPPERS/ASPのソースはまとまったファイルとしては(まだ)取得できるようになっていません。以下の2つを合わせて利用します。

TOPPERS/ASPカーネル簡易パッケージのダウンロード http://www.toppers.jp/asp-e-download.html より:

  • STBEE(Strawberry Linux)簡易パッケージ(開発環境: GCC) asp_stbee_gcc-20120310.tar.gz

Interface7月号 DVDより:

  • asp_cqbbel_mp3.zip

この2つのファイルをどこか同じディレクトリに置いてから、以下を実行します。

## それぞれのファイルを展開
$ tar xvfz asp_stbee_gcc-20120310.tar.gz 
$ unzip asp_cqbbel_mp3.zip
## asp_cqbbel_mp3内のaspのターゲットファイルをコピー 
$ cp -r asp_cqbbel_mp3/asp/target/cq_frk_fm3_gcc asp/target asp/
## aspのコンフィグレータのディレクトリに移動
$ cd asp/cfg
## コンフィグレータをビルド
$ ./configure
$ make
## 元に戻ってaspビルド用のディレクトリを作成
$ cd ..
$ mkdir OBJ
## aspビルド用のディレクトリに移動
$ cd OBJ
## configure; make denend; makeを実行
$ ../configure -T cq_frk_fm3_gcc
$ make depend
$ make

ちょっと長いですが、これを一通り実行すると、OBJ/のディレクトリ直下にaspというファイルができます。これがFM3向けの実行ファイルになります。

先ほどのエミュレータで試してみましょう。aspファイルをQEMU_FM3ディレクトリの直下にコピーします。先ほど試したLEDsample.outと同じディレクトリ階層です。

$ cp asp 【適当なパス】/QEMU_FM3/

さらにQEMU_FM3ディレクトリ直下のLEDsample.shを作ったところに、QEMUFM3_IMAGE_FILEの値だけ変えた以下の様なファイルasp.shを作ります。

#!/bin/sh

java -jar FM3_CPU.jar &

QEMUFM3_PORT_MONITOR="1200"
QEMUFM3_PORT_GPIO="1201"
QEMUFM3_PORT_UART0="1202"
QEMUFM3_PORT_UART3="1203"
QEMUFM3_PORT_UART4="1204"

QEMUFM3_MACHINE_NAME="cq-frk-fm3"
##QEMUFM3_MACHINE_NAME=cq-frk-fm3-ex

QEMUFM3_IMAGE_FILE="asp"

#QEMUFM3_

./qemu-system-arm \
        -S -M $QEMUFM3_MACHINE_NAME \
        -kernel $QEMUFM3_IMAGE_FILE \
        -nographic \
        -chardev socket,server,host=0.0.0.0,port=$QEMUFM3_PORT_GPIO,id=fm3gpio,nowait \
        -device fm3-gpio-control,chardev=fm3gpio \
        -monitor telnet:0.0.0.0:$QEMUFM3_PORT_MONITOR,server,nowait \
        -serial telnet:0.0.0.0:$QEMUFM3_PORT_UART0,server,nowait \
        -serial telnet:0.0.0.0:$QEMUFM3_PORT_UART3,server,nowait \
        -serial telnet:0.0.0.0:$QEMUFM3_PORT_UART4,server,nowait

これで準備はできました。実行してみます。

$ chmod 755 asp.sh
$ ./asp.sh

ポートはそのままOKを押しておきます。今回はLEDは光りません。

ちゃんと動いているかどうかを確認するには、1204番ポートにtelnetでつないでみます。

$ telnet localhost 1204
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
task1 is running (015).   |
task1 is running (016).   |
task1 is running (017).   |
task1 is running (018).   |
task1 is running (019).   |
task1 is running (020).   |
task1 is running (021).   |
task1 is running (022).   |
task1 is running (023).   |
task1 is running (024).   |
task1 is running (025).   |

いつものsample1の出力が流れてきます。
「r」キーを押すとちゃんとローテートしてくれます。

task1 is running (146).   |
task1 is running (147).   |
task1 is running (148).   |
#rot_rdq(three priorities)
task2 is running (001).     +
task2 is running (002).     +
task2 is running (003).     +
task2 is running (004).     +
task2 is running (005).     +
#rot_rdq(three priorities)
task3 is running (001).       *
task3 is running (002).       *
task3 is running (003).       *
#rot_rdq(three priorities)
task1 is running (149).   |
task1 is running (150).   |
task1 is running (151).   |
task1 is running (152).   |
#rot_rdq(three priorities)
task2 is running (006).     +
task2 is running (007).     +

こんな感じで、Mac上でも無事にビルドからエミュレータでの実行までが一通りできるようになりました。

QEMU-FM3 をMacで動かす

Interface6月号「ARMコア搭載FM3マイコンではじめる組み込み開発」特集で付録にFM3がついてきたので、そちら方面のみなさんは入手されている方も多そうですが、いかんせん組込み方面ではMacは肩身が狭い気がする今日この頃です。

Interface (インターフェース) 2012年 06月号 [雑誌]

Interface (インターフェース) 2012年 06月号 [雑誌]

このFM3もご多分に漏れず、「USB経由でCPU内蔵フラッシュROMも書き換え可能」ということになっているものの、それにはツールが必要で、そのツールもWindows用しか公開されてないわけで……ううむ。悩ましいですね。

というわけで、そっちはあとで何とかすることにして、まずはエミュレータでも動かしてみます。


Interface7月号のDVDに、QEMUに手を入れてFM3のエミュレーションをできるようにしたQEMU-FM3が収録されています。が、こちらに同梱されているqemuの実行ファイルとしてはWindows用のqemu-system-arm.exeしか入っていません。むむむ。

ところが。ありがたいことに、QEMU-FM3はソースでも公開されているのでした。素晴らしいですね! ソースさえあれば自力でビルドできそうです。試してみましょう。

ここのページの2012年7月号「特集 第9章 QEMUへのFM3エミュレーションの実装(前編)」の「QEMUソース一式」(qemu-fm3-1.0.1-pylone1.zip)がそれです。ついでにJava製のGUIと実行用バッチファイルが同梱されている「ビルド済み実行形式&サンプル・プログラム」(QEMU_FM3.zip)もダウンロードしておきます。

ところで、このqemuは1.0.1ベースのようですが、1.0.1は実はMacではビルドできないようです。どうもuint16がOS Xで元々使っているものとバッティングしているのが問題とかのようです。このため、qemu-fm3-1.0.1-pylone1.zipもそのままではビルドできません。

こういう時にぜひ参考にしたいのがmacportsです(まあhomebrewでもいいんですが)。macportsではqemu-1.0.1がすでにサポートされています。これはつまり、macports側でパッチを提供しているわけで、これを利用すればQEMU-FM3もビルドできるようになります。

macportsをインストールしている人は、

にあるファイル、patch-cocoa-uint16-redefined.diffとpatch-configure.diffを使います。

homebrewについても、

を見ると、同じファイルを参照しているようです(diffとったら同じでした)。ここで参照している以下のファイルをダウンロードしてきてもいいでしょう。

パッチファイルを持ってきたら、とりあえず ~/tmp/ にでも置いておきましょう。

以下のようにqemu-fm3-1.0.1-pylone1.zipを展開し、パッチをあててconfigure; makeを実行します。

$ unzip qemu-fm3-1.0.1-pylone1.zip
$ cd qemu-fm3-1.0.1-pylone1
$ patch -p0 < ~/tmp/patch-cocoa-uint16-redefined.diff 
$ patch -p0 < ~/tmp/patch-configure.diff 
$ ./configure --target-list=arm-softmmu
$ make

途中warningが出ますが、無事にビルドできれば完了です。qemu自体は、

$ ./arm-softmmu/qemu-system-arm 

で実行できるようになります。

さっそくFM3用のプログラムを実行してみます。
ついでにQEMU_FM3.zipに入っているGUIも合わせて試してみることにしましょう。

実行するサンプルは、QEMU_FM3.zipに入っているLEDsampleにしてみます。実行ファイルはLEDsample.outとしてビルド済みで、それを動かすためのバッチがLEDsample.batなので、これを元にシェルスクリプトに直します。

QEMU_FM3.zipを展開して、中に入っているLEDsample.batを以下のように変更したファイル、LEDsample.shを作ります。

#!/bin/sh

java -jar FM3_CPU.jar &

QEMUFM3_PORT_MONITOR="1200"
QEMUFM3_PORT_GPIO="1201"
QEMUFM3_PORT_UART0="1202"
QEMUFM3_PORT_UART3="1203"
QEMUFM3_PORT_UART4="1204"

QEMUFM3_MACHINE_NAME="cq-frk-fm3"
##QEMUFM3_MACHINE_NAME=cq-frk-fm3-ex

QEMUFM3_IMAGE_FILE="LEDsample.out"

#QEMUFM3_

./qemu-system-arm \
	-S -M $QEMUFM3_MACHINE_NAME \
	-kernel $QEMUFM3_IMAGE_FILE \
	-nographic \
	-chardev socket,server,host=0.0.0.0,port=$QEMUFM3_PORT_GPIO,id=fm3gpio,nowait \
	-device fm3-gpio-control,chardev=fm3gpio \
	-monitor telnet:0.0.0.0:$QEMUFM3_PORT_MONITOR,server,nowait \
	-serial telnet:0.0.0.0:$QEMUFM3_PORT_UART0,server,nowait \
	-serial telnet:0.0.0.0:$QEMUFM3_PORT_UART3,server,nowait \
	-serial telnet:0.0.0.0:$QEMUFM3_PORT_UART4,server,nowait

さらに、QEMU_FM3を展開したディレクトリに先ほどビルドしたqemu-system-armを同じディレクトリのなかにコピーしておきます。

そして、LEDsample.shを実行します。まとめると、以下のようになります。

$ unzip QEMU_FM3.zip
$ cd QEMU_FM3
$ cp LEDsample.bat LEDsample.sh
$ vi LEDsample.sh   ### 上記のファイルと差し替える
$ chmod 775 LEDsample.sh
$ cp ../qemu-fm3-1.0.1-pylone1/arm-softmmu/qemu-system-arm .  ### 実行ファイルのパスは適当に
$ ./LEDsample.sh

上手くいけば、こんな感じでLEDの点滅(のエミュレート)が実現できます。

また、シェルスクリプトを見て分かる通り、1200番ポートでQEMUのmonitorに接続できます。

$ telnet localhost 1200
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
QEMU 1.0.1 monitor - type 'help' for more information
(qemu) 

ここで「info registers」とか「info mtree」とか、モニタ用のコマンドが使用できます。


といった流れで、一通りMacでもエミュレータで遊ぶことができそうです。めでたしめでたし。

たのしいRuby10周年記念プレゼント当選者決まりました

先日締め切りました『たのしいRuby』第1版〜第3版まとめてプレゼント企画ですが、厳正な抽選の結果、当選者の方が決まりました。すでに当選者の方にはご連絡してあります。残念ながら落選されたみなさま、ごめんなさい。

なお、応募のフォームでは、たくさんの方から暖かいコメントをいただきました。著者を代表してお礼申し上げます。これを励みに第4版も頑張って出せたらなあ、というところです(が、当然先なのでしばらくは第3版をお買い求め下さい)。

引き続き『たのしいRuby』をよろしくお願いいたします。

たのしいRuby 第3版

たのしいRuby 第3版

たのしいRuby10周年その2&3冊まとめてプレゼント

一週間ほどあいだが空いてしまいましたが、「たのしいRuby」10周年の続きです。

まず、共著者の後藤裕蔵さんからもコメントをいただいております。

「たのしいRuby」執筆当時の自分を振り返ってみると、Rubyの初心者
に毛が生えた程度だったことや、用語や仕様が十分に定まっていない
部分もあって手探りの状態で作業を進めていたように思います。
結局最初の脱稿までに2年近くを費やしてしまいました(遅筆につき
その節は関係の方々に大変ご迷惑をおかけしました)が、その後10年
も現役でいてたくさんの方に手に取ってもらえたことを嬉しく思います。
なんとなく一区切りっぽいということで、お礼を述べる機会もあまり
ありませんので、この場を借りて感謝の気持ちを表したいと思います。
ありがとうございました。

いやー、当時は大変でしたね……。しかし『Rubyレシピブック』のときはさらに時間がかかってしまったのはあんまり大きな声では言えません。


そして、一部の方にめざとく言及されたプレゼントの件です。

前回の写真にありました『たのしいRuby』の第1版から第3版ですが、幸いそれぞれ2冊以上あったため、それぞれ1冊計3冊をまとめてプレゼントします。正直、初版と第2版は保存状態があんまりよくないのですが、まあ貴重な本ということで勘弁してください。

応募フォームは以下になります。

  • 『たのしいRuby』第1版〜第3版まとめてプレゼント応募フォーム←終了しました。多数の応募ありがとうございました!

たぶんこんな企画に応募したいという方はきっと一冊くらいは持っていそうな気がするので、3冊全部はちょっと……という方もいそうな気がしますが、もう少し私の部屋を整理したいので、ご協力をよろしくお願いします。

祝・『たのしいRuby』10周年

『たのしいRuby』初版が発行されたのは、奥付では2002年4月10日です。

あれから10年、今日がちょうど10周年です。おかげさまで『たのしいRuby』は順調に刷と版を重ね、現在第3版第5刷が好評販売中です。

10年前というと、Javaならサーブレット華やかなりし頃で、Strutsの本は出る前ですね(ざっと調べた感じだと、ウェリントン ダ=シルバ『JSP&タグライブラリ―StrutsによるWeb開発シナリオ』が出たのが同年8月で、これが最初のStruts本ぽいです)。Perlなら『プログラミングPerl 第3版』が出る前で、PHPなら『PHP4徹底攻略 実戦編』が出てた頃(同年3月)です。

曲がりなりにもコンピュータ書で10年間生き残り、そして10年経っても売れているタイトル、というのはあまり多くはありません(そういう意味では上記の『プログラミングPerl』はすごい)。とはいえ、これは本書がすごいというよりも、Rubyと本書を支えてくださったみなさまのおかげですよね。ありがとうございます。

第1版から第3版まで、3冊並べると↓こんな感じです。

第1版は趣味プログラマ向けということで、目立つような赤の強い表紙だったのですが、第2版以降は仕事で使う人が職場で変に目立ったり(?)しないよう、落ち着いた白を背景にした表紙にした、とのことでした。第2版が出たのは2006年、Rails上陸以降の本なのです。

そして、第3版は第2版のイメージをそのまま踏襲しながらも、改訂したというのは目立たせたいというのもあったそうで、帯が若干インフレ気味です。

この辺りの設計は(よくわからないので)担当編集者の杉山さんにお任せなのですが、その杉山さんからもお言葉をいただきました。

たのしいRuby10周年おめでとうございます&ありがとうございます!
Ruby 1.6対応からはじまった本書ですが、
おかげさまで多くの方々にご支持いただき、改訂を重ね、
ついに10年目の日を迎えることができました(奥付的な意味で)。
本書に担当編集として関われたことを大変嬉しく思っております。
これからも「たのしい」をモットーに、読後にモチベーションが上がり、
やってみたい試してみたいと思わせる定番入門書を目指して改訂していきたい所存です。
Ruby 3.0(ぐらいになってるのではないかと想像)対応の20周年目に向けて、
今後ともどうぞご贔屓によろしくお願いいたします。

20周年……。というか、10年たっても2.0はリリースまでには至らなかったんですね……。とはいえ、trunkはすでに2.0devになっているので、Ruby 2.0が使えるようになるのもそう遠くはなさそうです(そして『たのしいRuby 第4版』の構想もまじめに考えないといけない時期かも)。

というわけで、今後とも『たのしいRuby』を(そして『Rubyレシピブック第3版』『Rails3レシピブック』も合わせて)よろしくお願いいたします。

それと、本棚を発掘したら『たのしいRuby』初版のCD未開封(!)の本とか第2版とかも発掘されたので、第1版から第3版まで合わせて3冊プレゼントする誰得企画も構想中です。ご期待(?)ください。

たのしいRuby 第3版

たのしいRuby 第3版

執筆のための「書かないことリスト」を作ってみました

先日の「執筆のためのエレベータピッチ」が好評だったので、続きです。

アジャイルサムライ』のインセプションデッキでは、「やらないことリスト」を作ることになっています。これは、以下の3つから成り立ちます。

  • やること
  • やらないこと
  • (やるかやらないかは)あとで決めること

文章執筆についても同様のリストを作るのもいいのですが、文章のスコープは対象の掘り下げの深さ・浅さによっても変わってくるので、「あとで決める」とかはなくてもいいかなあ、というところです。それよりは「書かないこと」にフォーカスを絞ったほうがよさげな気がします。というか、やる・やらない(書く・書かない)そのものも、プロジェクトの最初にこうしようと決めても、書いてるうちに変わってくるくらいの流動的なものだと思ったほうがよさそうです。

また、「書かないこと」についても、それを読者に事前知識として期待するから書かないのか、それは読者が自力で調べて欲しいから書かないのか、というのでは、これから書こうとする文章の中での扱いが変わってきます。ので、書かないことの違いに着目した4つの質問の形にまとめてみました。

■ 執筆のための「書かないことリスト」
・この本を読む人が、事前に持っている・知っているはずのことは何ですか?
 →【この本を読む前に読者が知っているべきなので書かないこと】
・この本を元に、読者で自分でやってみる・試してみることは何ですか?
 →【この本を読みながら読者が自分で体験するべきなので書かないこと】
・この本以外からも情報収集・勉強・練習しないといけないことは何ですか?
 →【この本を読みながら読者が自分で調査・学習するべきなので書かないこと】
・この本を読み終えた後、読者が次にやるべきこと・読むべき本(もしあれば)は何ですか?
 →【この本を読んだ後で読者が自分でするべきなので書かないこと】


どうぞご利用下さい。