WebRTC

ウェブブラウザやモバイルアプリケーションにシンプルなAPI経由でリアルタイム通信を提供するオープンソースPJ
https://webrtc.org/

-Supported Browsers & Platforms
Firefox, Opera, Android, iOS

使用するAPI
– MediaStream
– PeerConnection
– DataChannel

P2P、Node.js、WebSocket
あれ??? これもしかして、、、

figma

Figmaはプロトタイピングツールで、競合はSketch、XDなど
特徴は、オンラインでリアルタイム共有
コードの出力機能や画像の書き出し機能も備わっている

UIは素晴らしいですね

さっそく触ってみます。
これは凄い、滅茶苦茶使いやすいかも。。

cacoo辞めて、これ使おうかな♪

luigi

データフロー制御フレームワーク
spotifyが開発
タスク同士の依存関係を解決し、オブジェクト指向でデータ処理のタスクが書ける
Hadoopとの連携

class Artists(luigi.Task):

	date_interval = luigi.DateIntervalParameter()
	use_hadoop = luigi.BoolParameter()

	def requires(self):
		if self.use_hadoop:
			return AggregateArtistsHadoop(self.date_interval)
		else:
			return AggregateArtists(self.date_interval)

	def output(self):
		return luigi.LocalTarget("data/top_artists_%s.tsv" % self.date_interval)

	def run(self):
		top_10 = nlargest(10, self._input_iterator())
		with self.output().open('w') as out_file:
			for streams, artist in top_10:
				out_line = '\t'.join([
						str(self.date_interval.date_a),
						str(self.date_interval.date_b),
						artist,
						str(streams)
				])
				out_file.write((out_line + '\n'))

	def _input_iterator(self):
		with self.input().open('r') as in_file:
			for line in in_file:
				artist, streams = line.strip().split()
				yield int(streams), artist

statsmodel

[vagrant@localhost python]$ pip install statsmodels

import numpy as np 
import statsmodels.api as sm 
import matplotlib.pyplot as plt 

data = np.loadtxt("data.txt")
x = data.T[0]
y = data.T[1]

nsample = x.size 

X = np.column_stack((np.repeat(1, nsample), x))

model = sm.OLS(y, X)
results = model.fit()

print(results.summary())

GitLab

GitLabはグループ・プライベートレポジトリが作れる
無償版Community Editionと有償版Enterprise Editionがある
Railsで作成されている

gitlabにgithubのアカウントでログインしようとしたら、Invalid Login or password。おかしいなと思ったら、”sigin in with”のところでauthする必要があったのね。

使い方はgithubと似ていそうですね。

目黒AWS Loft Tokyo

目黒のAWS Loft Tokyoに来ました。
ずっと来たかったんだよね~ シアトルのamazon goも行きたいけど。。

sdr

満員のエレベータ乗ったら半分以上、日本人ではなかった。。おい、ここ本当に目黒かよ。六本木でもあんまないぞ。

受付でスマホからAWS コンソールにログインして入館。
10分ぐらい手間取ったけど、普通に待ってくれた。

きゃーー

dav

今日雨なので、すげー混んでます。
でも、オフィスはyahooのロッジよりも全然静か。
喋って作業している人がまったくいない。
スタートアップ向け、というコンセプトもいいね。さすが^^

P2Pの連携の動き

Bitcoin core(初回)
1. DNSによる探索
2. クライアントにハードコーディングされている準永久的ノード一覧の参照
3. コマンドラインによるIP指定
※ハードコーディングとは、本来記述すべきでないリソースをソースコードの中に埋め込む事
2回目以降は、ノード一覧を保持したDBを参照して連携
— データの送受信はハッシュをinvメッセージとして相手クライアントに送り、getdataメッセージの送受信から、情報本体をやりとりする

Ethereum
1. あらかじめハードコーディングされているブートストラップノードの一覧を参照して接続
ブートストラップノードは起動時にコマンドラインから指定することもできる
— ハッシュがすべてのノードによって共有されている空間にチェーンとして保存され、ワークプールとして利用される

Hyperledger Fabric
-起動時に指定された起点となるノードに対してディスカバリープロトコルを発行して参加者一覧を入手
-その後、validating peerの場合は、全てのvalidating peerとメッシュ状のネットワークを形成、non-validating peerの場合は、接続許可されている最も近いvalidating peerとのみ接続
— ノード間の通信にgRPCを利用しており、双方向でストリーミングのメッセージングがやりとり可能。シリアライズ化にProtocol buffersを利用

あれ、BitcoinとEthereumって、P2Pも情報の送受信も仕組みが全く違うやんけ。。。
DNS-IPはネット回線のネットワークとしては基本のように思うが、なぜこんなにハードコーディングが使われるんだろうか。。キュリオシティをそそりますね。

P2Pブロックチェーンの動き

Proof of Work(計算量証明)をコンセンサスアルゴリズムに採用

1. P2Pトランザクションのノード(ノードX)が取引データを送信 ※この時点では、取引自体は未成立
2. トランザクションが全参加者宛に伝播
3. トランザクションを受け取った全ノードがマイニングを実施し、条件に合うハッシュ値を発見すると、既存のブロックチェーンに新しいブロックを追加
4. 新しいブロックを追加したノードは、ブロックをP2Pネットワークにブロードキャスト
5. ブロックを受け取った各ノードは、ブロックが正当なものであるかを検証し、正しいものであれば、ブロックチェーンを更新。この時点で取引が成立

なるほど、取引成立までにProof of Workが入っているのね。

疑問点
-> Proof of Workのロジックは、ランダム関数を使っているのか??
-> ブロックチェーンのトランザクションの伝播対象は、取引所までか?それとも、ユーザー単位なのか?例えば、サービスにブロックチェーン決済を取り込んだ場合は、トランザクションはサービス提供者までに留まるのか?
-> マイニング業者の競争は、単純にCPUの性能の勝負なのか?それともマイニングアルゴリズムなども左右されるのか?

ブロックチェーン基盤

1. Bitcoin Core (Bitcoin Foundation)
https://bitcoin.org/ja/download
ビットコインリファレンス実装
Proof of Work

2. Ethereum (Ethereum Foundation)
https://www.ethereum.org/
分散型アプリケーションDapps構築
Proof of Stake

3. Hyperledger Fabric (Hyperledger Project)
https://www.hyperledger.org/projects/fabric
P2P分散レッジャー技術基盤
Practical Byzantine Fault Tolerance

4. Corda (R3 CEV)
https://www.corda.net/
金融向け分散型台帳基盤

5. Chain Open Standard 1 (Chain.inc)
https://www.openchainproject.org/get-started
ブロックチェーン暗号化など

6. mijin (テックビューロ)
https://mijin.io/
プライベート型ブロックチェーン

7. Orb1 (Orb)
https://imagine-orb.com/
定期的に取引を確定させることで、決済完了性を確保

8. Eris (Eris Industries)
https://erisindustries.com/
パーミッション型ブロックチェーン

——–
スマートコントラクト、電子署名・ハッシュ関数、コンセンサスアルゴリズム、P2Pネットワーク

——–
誰でも参加型(パブリック型)、信頼する参加者のみに絞り込むか(コンソーシアム型、プライベート型)
->参加者形態により、マイニング、ブロックチェーン閲覧、ブロック生成、マイニング報酬 などが異なる

——–
ブロックチェーンブロック
-> 前ブロックヘッダのハッシュ値、ナンス、トランザクション群のハッシュ
-> トランザクションの内容

分散型台帳 – Decentralized ledger

– データベースデータが、ブロックチェーン技術によってネットワークを介して共有される
– 分散型台帳では、書き込み要求があった場合、全システムで共有
– 複数のユーザから同じデータに対して書き込み要求があった場合は予めルールを決める。ただし合意形成に時間がかかる
– コンセンサスアルゴリズムは様々
– 結果的に、一つのシステムにアクセスしているように見える

e.x. 貿易業務(ステークホルダーが多い)

– ブロックチェーンは分散型台帳以外にも、海外送金、IoT連携などでも期待されている
– ビットコインは取引記録の承認を行った参加者に手数料が与えられる
— 新しいブロックは、直前のブロックのハッシュ値、プルーフオブワーク、n個の取引記録
– 国際送金には、送金・決済時に一時的に法定通貨から仮想通貨に変換する(1.9%程度でできるところがある)