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

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

人類はどうやって時計を作ってきたのか

 最近とあるサイトで交流周波数を利用した時計の話が出てきたんだ。今ではフロッピーディスクよりも見かけない時計である。水晶発振器が高価な時代に代替えとして出た時計で、今では100円均一でも水晶発振器を使ってるので。交流周波数を利用した時はwikipediaの時計の歴史にも出てこない。電力会社も、時計として使っても精度を保証してない。

 

パタパタ時計という名前のほうが検索したら出てくる。

パタパタ時計 - Wikipedia

このサイトでの分解記事がわかりやすかった。同期モータに減速ギアで回転を遅くするのだが、交流電源の周波数を使うと周波数が変動すると時間が狂う。問題は故障すると発火するので使わないほうがいいことだ。

ameblo.jp

 

 時計の歴史

時計の歴史 - Wikipedia

 時計の歴史は面白い、昔の精密時計でも一日の時間のずれが30秒ほどあったのが。今では数億年に一秒ずれるかどうかという精度になっている。数億年も時計は動かないだろうが。

 

時計の科学 人と時間の5000年の歴史 (ブルーバックス)

時計の科学 人と時間の5000年の歴史 (ブルーバックス)

 

 

 日時計

  太陽の位置と影を利用した時計だけど、緯度と方位がわかっていないと使えない。

3インチ 真鍮製日時計コンパス

3インチ 真鍮製日時計コンパス

 

 


日時計の仕組み


日時計を作ってみましょう。

 

昔の人はどのようにして時間を計っていたのか

 昔の人はどのような時計を使っていたのだろうか。割と時間に縛られることなくのびのびしていたのだろうかと思ったりする。航海時代では方位磁石と精密時計が重要だったらしい。

大航海時代と精密時計 その1 | NEEZの時計ブログ

 

 太陽が昇ったり沈んだりするので、日時計が初めにあるというのはわかりやすい。基準点として、

  1. 太陽が昇り始めた
  2. 太陽が真上に来た
  3. 太陽が沈んだ

を考えると。例えば6、12、18時を基準とする。

12と18の間を3分割すると14、16時になる。いや2分割がいいとすると、15時になる。で12を0として、1,2,3,4,5,6と分割されたこんな風に時間が定義されたのだろうか。

 一秒を決めたのは、平常時の心拍に基づいていると思ったが違うようである。ただ、身近な近いもので昔の人は考えていたのではないかと思っているが。

60秒で1分、60分で1時間、24時間で一日。

 60×60×24は86400で1日を86400で割ったのが一秒になる。

水時計などもあるが、ここから一気に振り子時計の話をしたい。

振り子時計

www.youtube.com

www.youtube.com

 

www.youtube.com

振り子の等時性つうのがある。

振り子が同じところに戻ってくるのが同じ周期になっている。それで、その長さは振り子の糸の名がで調整できる。

 懐中時計が好きで集めていたことがある。2種類あった、機械式時計とクォーツ式時計がある。

機械式時計とクォーツ式

 クォーツ式はゼンマイ式と思って買ったら電池式で、水晶発振のタイプで間違って買ったやつ。

 機械式時計はゼンマイを巻いて下のような時計を持っていた、人に見せると反応が実に面白い。ただ、今の時代スマホで十分なので全く実用性がない。ただ、持っているだけでわくわくする。落とすとすぐに壊れるで注意したほうがいい。

 どっちも3000円ぐらいで買った記憶がある。

 

 機械式時計を作る動画が面白かった。

www.youtube.com

 機械式とクォーツ式を両方使った、スプリングドライブが載っていた。だけで、ゼンマイでエネルギーをためて、発電しながらクォーツを動かす。ゼンマイは腕につけている動きで自動で巻き上がる。正直機械式の良さがほとんどない気がするが、日本で売られているのは高価なモデルしかなく海外向けに7000円から売られている。 

 

 

水晶発振器

教えて!水晶デバイス | リバーエレテック 世界最小の水晶振動子・水晶発振器

 水晶に電気を流すと周期的な信号を出す。それをカウントすると時間が図れる。

デジタル電子回路の設計で、水晶発振器をフリップフロップ回路をつなげて、ストップウォッチの回路設計をしたことがある。あまりうまくいったとも思えないが。今の時計のベースが水晶発振器とプラスアルファでできている。

 プラスアルファというのは、時刻のずれを修正すること。水晶発振器でも時間のずれは大きくなるので、電波時計で電波を受信して合わせたり、テレビの電波で合わせたり。携帯だと基地局から受信したり、インターネットから受信したりして時間のずれを修正している。

 その前はどうやって合わせていたかというと、テレビやラジオの時報だったり、電話の117だったり。今だったら想像つかないだろうけどそれを頼りに時計の時間を合わせてたんだ。

 本では腕時計にするための、省エネの手法。なぜ秒針は一秒刻みなのかが載っている。

青空文庫の構文解析

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

 

 構文解析では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入門