たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

ブロックチェーン・ビットコイン

https://bitcoin.org/bitcoin.pdf

www.slideshare.net

jba-web.jp

ビットコインとブロックチェーンと分散合意 - 急がば回れ、選ぶなら近道

block = {
    timeStamp: 2017-05-27T19:35,
    previousBlockHash: cyjvif4663gi47rvujr,
    transactions: [tx0, tx1, tx2,...]
};

as a results,
block0 -> block1 -> block2 -> ….
chain of block == block-chain is made.

後方のハッシュが、過去全てのblockのハッシュから成るため、timestamp, transactionの改竄が高コストになる.
その点でblock-chainは改竄に強い.
=> 新しいblockは比較的改竄しやすいのでは?

改竄……誰による何の?

  • 第三者によるtransactionの書き換え => 公開鍵暗号で防止可能 (block-chainいらない)
  • 元所有者による二重支払い => timeStampで解決? (block-chainがtimeStampを保証?)

公開鍵暗号でtransactionの正統性と保証.
課題点:

  • 改竄
  • 二重支払い
  • peer-to-peer

プライベート・ブロックチェーン

hyperledger project

Linux fundationが支援するOSSプロジェクト.
分散型台帳など、ブロックチェーンをビジネスに生かすためのプロジェクト.

  • Hyperledger Frameworks
    • Hyperledger Sawtooth
    • Hyperledger Iroha
    • Hyperledger Fabric
    • Hyperledger Burrow
  • Hyperledger Tools
    • Hyperledger Cello
    • Hyperledger Composer
    • Hyperledger Explorer
    • Hyperledger Indy

Hyperledger Projects – Hyperledger

ニコラ氏は「スマートコントラクトと呼ぶよりセルフエンフォーシング・コントラクト(self-enforcing contract)、つまり『自力執行権のある契約』という表現の方がその性質をよく表しています」と話す。
qiita.com

japan.zdnet.com

JavaScriptのgenerator入門

generatorの概念

generator(という概念)とは、繰り返しを簡単に・見通し良く記述する仕組みである.

generatorの利用

generatorを利用することによって

  • 繰り返しオブジェクト(イテレータ)の容易な作製
  • 見通しの良い非同期処理コード記述

が可能になる.

generatorに関わる用語

  • generator関数
  • generator(generatorオブジェクト)
  • iterator

用語の説明まとめ

  • generator関数: generatorのコンストラクタ関数
  • generator(generatorオブジェクト): generator関数のinstance。Iteratorでもあり、またIterable interfaceでもある

generator関数とは

Thus the function call GeneratorFunction (…) is equivalent to the object creation expression new GeneratorFunction (…) with the same arguments.

ジェネレーターの説明

ジェネレーターは処理を抜け出すことも後から復帰することもできる関数です。ジェネレーターのコンテキスト (変数の値)は復帰しても保存されます。
function* - JavaScript | MDN

ECMAScript2016 language specification該当部分

25 Control Abstraction Objects …
25.2 GeneratorFunction Objects
Generator Function objects are functions that are usually created by evaluating GeneratorDeclaration, GeneratorExpression, and GeneratorMethod syntactic productions. They may also be created by calling the %GeneratorFunction% intrinsic.
https://www.ecma-international.org/ecma-262/7.0/#sec-generatorfunction-objects

25.3 Generator Objects
A Generator object is an instance of a generator function and conforms to both the Iterator and Iterable interfaces.
https://www.ecma-international.org/ecma-262/7.0/#sec-generator-objects

yeild

yeild*

yeild*は、子プロセスのyeildを親プロセスでyeildするための仕組み.

developer.mozilla.org

入門以上

Node.js streamとの組み合わせ

あまりwebに文献はないが、Node.js readable-streamとすこぶる相性がよい気がする.
read()の中でgeneratorを使えば、read()呼び出しのたびに1つずつyieldできるから.
再帰させてyield*と組み合わせたら、とても良いコードがかけた.

generatorとか、iteratorとか

要は、状態を抱え込む反復可能オブジェクト.
関数型とは相いれないものなのかなーと。関数型に興味がわいてきた.

引用が認められる範囲、特に学術の世界

某pixiv引用で議論があったから、調べた.

引用の法的根拠

(引用)
第三十二条  公表された著作物は、引用して利用することができる。
著作権法

公表された著作物が1つのキーワードみたい.
公表権という概念が絡んでくる

例えば、ラブレターを引用しても良いのか?
一般化すると、私的文書を引用していいのか.

著作権法は著作物も2つに分けてる.

  • 著作物
    • 公表された著作物
    • 著作物でまだ公表されていないもの

なるほど著作権セミナー
http://www.nakagawa.gr.jp/lecture/naruhodo1002.pdf

m.chiebukuro.yahoo.co.jp

  1. 会員しか見れないのに、引用していいの?
  2. 「会員」が特定多数であれば引用して良い

id:drunkghost
会員制で見たい人だけが見られるようにしてある物を引っ張り出してきても許される、引用や研究ってそんなに万能なんです…?
少なくとも引用は万能です。数人の仲間だけにパスワード教えて見せてたならともかく、捨てアドがあれば誰でも会員になれて、数万人規模の会員がいるところに、会員なら誰でも見られる状態で置いてあるものは、著作権法上公開されたものと考えていいと思います。なのでそれが適正な引用方式に従っていれば引用はオッケー、お国の法律が認めてくれてます。やったね!
(ていうかその理屈だと、お金払わないと読めない学術雑誌に掲載された論文は無断で引用しちゃいけないことになりますけど、それでいいんですかね……? NatureとかCellもウカツに引用できない世の中、やばくね?)

確かに、会員しか見れないから引用ダメ!だと、人の文を参考にする、ことがほぼ不可能になってしまいますな
会員というと曖昧だけど、有料電子小説は引用できるか、に置き換えたら、やっぱり出来る方が妥当そう

(公表権)
第十八条 著作者は、その著作物でまだ公表されていないもの(その同意を得ないで公表された著作物を含む。以下この条において同じ。)を公衆に提供し、又は提示する権利を有する。当該著作物を原著作物とする二次的著作物についても、同様とする。
著作権法

異民族の神聖な儀式を研究者が見てもいいか

真っ当な意見だと思う
anond.hatelabo.jp

  • 引用そのもの
  • 引用の影響

は分離しましょう. というのは至極真っ当だと思う

情報解析のための複製(著作権法第47条の7) コンピュータを使った情報解析のために、必要と認められる限度において、著作物を複製することができる。

  1. 他人の著作物を引用するときの注意点を教えてください。 また、出所の明示はどのようにすればよいのですか?
    A.「引用」とは、例えば論文執筆の際、自説を補強するため、他人の論文の一部分をひいてきたりするなどして、自分の著作物の中に他人の著作物を利用することをいいます。この場合、著作権者の許諾なしにその著作物を利用することができますが、「引用」といえるためには、「引用の目的上正当な範囲内」で行われるものであり、また、引用される部分が「従」で自ら作成する著作物が「主」であるように内容的な主従関係がなければなりません。さらに、かぎ括弧を付けるなどして引用文であることが明確に区分される必要があります。 なお、引用の際の出所の明示の仕方ですが、引用部分を明確にした上で、その後に誰のどの著作物であるかを表示するなど、少なくとも引用された著作物の題号や著作者名が明らかにわかるような表示が必要です。

javascript & HTML 実行環境

JavascriptとHTMLが動く環境、その詳細

Node.js プロジェクト開始手引き

  • git init
  • npm init

gitは.git directory,
npmはpackage.json
が命
これさえあればgitとnpmが消えても大丈夫(のはず)
でもコード自体が吹き飛ぶと元も子もない. なのでGitHubのプライベートリポジトリをリモート.
これで万事オッケー!
復旧したいときはGitHubから落としてきて、npm installかな?

gitにバージョンとかあるのか
node.jsのバージョンってpackage.jsonに載ってる?

GitHubのさらなるバックアップを取るか否か
GitHubは手動で触るから、誤操作のリスクが高いのよね

electronはnpm installで何とかなるのか…?

再代入できる世界とできない世界の違い

今、数学の世界にいます

x = 1
y = x + 2
yは? => 3 (当然だろ)
-----------------------
今、プログラミングの世界にいます

x = 1
x = x + 2
xは? => 3 (当然だね)

相変わらず、プログラミングの世界にいます
x = 1
■■■■
x = x + 2
xは? => …確定しない。だって■■の中を見ないとわからん.
■■が空行だったら x == 3 だろうけど、
■■が x = x + 1だったら x == 4だもん.
-----------------------
数学の世界に戻りました

x = 1
■■■■
y = x + 2
yは? => 3 (当然だろ)

数学をするときに、 x = x + 1はしません.
つまり、数学では再代入をしません.
逆に言えば、プログラミングでは再代入が認められます.
そして上記の例が示したように、再代入を認めると、全ての式を見ない限り、値が確定しないのです.