KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

青空文庫の構文解析

 青空文庫のパーサーを作ってみようかなと思ったので調べてみた。正規表現でやっていたこともあってオライリー本を流し読みしてたのだけど。複雑になると変換が失敗しそうだと危惧はしている。構文解析をまじめにやってみよう。

 

 構文解析ではPEGというのがあるらしい。またAST木というのもあるようだ。

この辺全然わかっていないのでちゃんと勉強する必要がある。

投稿小説サイト変換ツールを作った時にもっと精度を上げるには正規表現から、構文解析をきちんとする必要がありそうだ。できるかはわからないが青空文庫のパーサーを利用するには、ほかもAST木で表す必要がありそうである。

github.com

qiita.com

抽象構文木

github.com

kmizu.hatenablog.com

でんでんコンバーター互換機製作4回目

 npmにでんでんコンバーターのルビ変換があるなら、node.jsにすればいいじゃないと思いついて迷走中。

 node.jsの本は何冊か読んでいたのだけれど、chromeで動かすjavascriptとの違いに困惑している。同じV8ではないか、わかるはずだろ思ったがなんか違う気がする。

  • jszip.min.js
  • FileSaver.js
  • uuid.js
  • vkbeautify.js

 ライブラリとして前はこれらを使ってたがnode.jsだとxmlの生成はもっとましなライブラリがあるかも。テンプレートエンジンを使ったほうが楽できるかもしれない。などといろいろ考えた。さくっと作ったほうが早い気がする。

 今までだと、XHTMLテンプレートをDOMパーサーでパースしてから書き換えて、シリアライズしていたが。テンプレートエンジンで、XMLに出力するほうが早いかもしれない。

でんでんコンバーターのライブラリ

  でんでんコンバーターのルビ変換ライブラリをインストールする

npm install markdown-it --save

npm install markdown-it-ruby --save

npm install ejs

これ、マークダウンパーサーを書き換えるためには、こまごまと追加しないといけないパターンかな。

var md = require('markdown-it')()

var md = require('markdown-it')()

            .use(require('markdown-it-ruby'));

 var origin = fs.readFileSync(__dirname + '/kurofune/kurofune/kurofunezengo.txt', 'utf-8'); 

var pagetemplete = fs.readFileSync(__dirname + '/ejs/page.ejs', 'utf-8');

 var markFO=[]; markFO = origin.split(/^={3,}$/gm);

var result = md.render(markFO[1]) 

var data =ejs.render(pagetemplete,{ title: "title" , body: result })

page.ejs

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="ja" lang="ja">
<head>
<meta charset="utf-8" />

<link rel="stylesheet" href="style.css" type="text/css" />

<title><%= title %></title>
</head>
<body class="bodymatter" epub:type="bodymatter">
<%- body %>
</body>
</html>

 

黒船読み込んで、マークダウンパーサーでhtmlに変換してejsテンプレートから、page.htmlを生成までをやった。

 

 jszipがnode.jsで動かないのかなと思ったが、下のページにnode.jsでのファイル生成の仕方があったので使ってみた。

How to write a file / give it to the user

var JSZip = require("jszip");
var zip = new JSZip();
zip.file("mimetype", "application/epub+zip");
var meta = zip.folder("META-INF");
meta.file("container.xml", containerXML);
var item = zip.folder("OEBPS");

zip
.generateNodeStream({type:'nodebuffer',streamFiles:true})
.pipe(fs.createWriteStream('out.zip'))
.on('finish', function () {
// JSZip generates a readable stream with a "end" event,
// but is piped here in a writable stream which emits a "finish" event.
console.log("out.zip written.");
});

 こうやるだけで、EPUBのフォルダー構造が作成できたので、簡単な気がする。

 

github.com

github.com

github.com

Node.js超入門

Node.js超入門

 

  node.jsの勉強と思ってこの本やってみたんだけで、いきなり文字化けしてしまったのでよくわからない。はじめは文字コードがshift-jisだったのがいけなかったのかなと思って、utf-8にしたのいまだに文字化けしておるは。

 

github.com

ほかのnode.jsでどうやってEPUBに圧縮しているのかを調べると。epub-genでachiverjsを使っておった。テンプレートエンジンでXML生成したり編集しているようだ。

github.com

 

「はじめて読む数学の歴史」を読んでみた

 

はじめて読む数学の歴史 (BERET SCIENCE)

はじめて読む数学の歴史 (BERET SCIENCE)

 

 

 

 数学の成り立ちに興味があった、昔の人はどのように数学を表記していたのだろうか。数式の表記法の変遷がどうなっていたのかについて答えてくれる。昔は10進数ばかりではなかったので計算が大変そうだなというのがまずある。+-の記号が出てくるのがだいぶ後だったり、ローマ数字があるけど今は時計とかでしかあまり見ないのが普通に使われてたのかなという。

 今は占い師ぐらいしか見かけない算木というものや算盤など、計算するための道具を利用していたそうで、今のような筆算なんかが出てくるのはだいぶ後になる。この辺は数式の表記の仕方などが、計算に適したものではなかったのが理由ではあるのかも。

slideplayer.com

 数学は間違わないが物理は新しくなるたびに古いほうを否定する。教科書で習うところは正しいところしか習わないので試行錯誤の過程が省かれる。どのように考えて失敗して今の形になっていったのかが垣間見れて面白い。

ユークリッド原論

 

ユークリッド原論はあまり好きじゃないのだけど、数学の歴史について初めのほうによく出て来る。

 

アラビア語に訳された ギリシア科学文献


ユークリッド原論
プトレマイオス アルマゲスト
ディオファントス 数論
アリストテレス 自然学

 

アラビア数字

アラビア数字 - Wikipedia

 現在使われている数字0、1,2,3,4…がなぜアラビア数字と呼ばれているのかというとインドやアラビア起源だから。ヨーロッパから中東に伝わった後に、ヨーロッパに逆輸入される形で、発展したのが原因だろう。

 

アル=フワーリズミー
格子掛け算
ゲロシア
トレヴィソ算術
算法統宗

代数学
三角法

中世ヨーロッパ


フィボナッチ 算盤の書

アリストテレスの運動論
運動方程式

フィロポノス
トマス・ブラドワーデン
オックスフォード学派
ジャン ビュリダン パリ学派

 

代数学

  今の数学に使われている+-=などの記号は16世紀以降に使われるようになって現代とだいぶ違うところも多いだろう。

ヴィッドマンの算術書 +ー

ロバート・レコード 知恵の砥石 =

ドイツ ルドルフ 根号 √

乗法 除法 × イギリス オートレッド 数学の鍵
÷ スイスのラーン 代数学

 

x cubed plus six x plus equals twenty
いまの英語だと数式はこう読まれるが、

近代の数学の表記の仕方がこんなのらしい。

Cubus p 6 rebus aequalis 20

意味としては下のような形である。
x^3+6x=20


R.v.cu.R.108p.10|mR.v.cu.R.108m10.

 

ガリレオの運動論

 アリストテレスガリレオの運動論などを見てやっと物理っぽくなってきた思うんだけど。ニュートン力学を学ぶとガリレオの運動論を忘れる。真空での運動を予測したり、落体の運動の加速について書かれている。

 

node.jsについて勉強してみた

 javascriptをやるなら、node.jsがいいというのは聞いていたけれど。今まではブラウザでやっておった、いや本当に。node.jsだとコンソールで実行するので普通のプログラミング言語みたいで敬遠していた。ただ、npmを入れると便利だなというのは聞いていたのでいつかはやろうかなと思ってた。サーバーサイドもできていろいろできそうでやってみたかった感じでもある。Google Homeとechoもnode.jsで作れそうだし。

 

Windowsだったので、次のようにインストールした。

qiita.com

あとはどっとインストールでやってみることに。

https://dotinstall.com/lessons/basic_nodejs

 

 ただ、コマンドラインからファイル名を実行するのがものすごく嫌いでさ。エディターから実行するボタンを作って実行している。そのほうが、だいぶ時間が短くなる気がする。カタカタターンみたいにコンソールでやったほうがかっこいいかもしれないけどね。

 Meryエディターでやっている。たまにパワーシェルで実行もするけど。(ツール)ー(外部ツール)ー(外部ツールの設定)ー(追加)で次のように設定した。エディターで、javascriptから直接に実行すれば。コマンドから「node ファイル名.js」という手順が減らせるかなと思ってやっている。

コマンドで指定しているのはパワーシェル。エンコードUTF-8にしないとアウトプットバーが文字化けした。

f:id:kyukyunyorituryo:20180425233533j:plain

 httpsでウェブサーバーを起動したが、終了の仕方がわからず2回目に実行しようとすると、エラーが出て処理内容が書き換わらない。ctrl+cでできると書いてあったが実行しても無理だった。タスクマネージャーを起動して、詳細からnode.exeを停止しているだけど、このやり方でいいのかもっとましな方法はないのかが気になっている。

 

 node.jsはサーバーを立てれるようなので、そっちのほうも少しやってみようかな。node.jsとherokuでとりあえずなんか作ってみれば、いろいろ遊べるのではないか。

 

  kindle unlimitedで下の本を読んでみました。あんまり理解できてなかったけど。

 

 

JavaScriptエンジニアのためのNode.js入門

JavaScriptエンジニアのためのNode.js入門

 

 

東方Projectの二次創作を電子書籍で売れるようになるそうだ

  東方Projectは縦スクロールシューティングゲームだっけ、というくらいしか知らないんだけれど、二次創作を電子書籍で売れるようになるそうだ。

 

 電子書籍で二次創作作品を売るのはいけないこととして受け取られている。

  • 頒布ではなく、もうけが出やすいから。
  • 一般書籍と同じ流通になってしまう。

 などの理由があるのだろう。東方Project電子書籍を解禁などと報じられている。ただしブックウォーカーとニコニコ書籍に限る。

 ブックウォーカーでは電子書籍での入稿が郵送でも可能らしいが、早く売るにはEPUBがいいみたいである。カドカワEPUBしようというのがあってそれに沿っていればいいようである。ただ、デジタルコミック協議会EPUBがベースになっているのでそのEPUBであれば問題なく表示できるようだ。

 キンドルだと二次創作ではKindle Worlds というのがある。日本だとあまり広まってない気がする。原作者と二次創作者に支払われる形式になっているようだ。どっちにしろエロは厳しそうだなとは思うが。

アマゾン、二次創作を公認販売する Kindle Worlds を開始。作者と原作者に支払い - Engadget 日本版

 ブックウォーカーで受け付けているEPUBは下のサイトで作れます。

kyukyunyorituryo.github.io

www.melonbooks.co.jp

  

www.famitsu.com