新規記事の投稿を行うことで、非表示にすることが可能です。
2019年09月30日
【6日目成果】 英語版Udemy講座で学ぶ!ブロックチェーン技術
進捗 45%(+10%)
よく進んだ、というか必死に進めた。
そろそろ、折り返し地点なので、早期にさ50%のところまで行きたいという思いだ。
写したコードにいくつかバグがあり、その対処に時間がかかった。
■コード整理
Blockchain関連のものをサブディレクトリにまとめコードを整理する。
これから作成するWallet関連は別フォルダ下でスタートする。
■ウォレットのテストスクリプト作成
もういつものことだが、TDDのため、テストコードを作成して、失敗させることからスタートする。
Walletのクラスが持つ、プロパティの確認やメソッドの確認のコードを追加する。
■ウォレットのコード追加
電子署名のモジュールであるellipticを導入する。
署名の際の暗号化アルゴリズムはビットコインと同じもの(secp256k1)を使用する。
電子署名のVerifyや、サイン実行の機能実装を行う。
■トランザクションの実装
テストがなかなかパスできず長時間、デバッグに時間を使ってしまった。
console.logを使いながら、変数の内容を可視化して、バグの特定を行った。
バグのポイントは下記の2点。
- コンストラクタの{}が抜けていて、値がうまく初期化されていなかった。
- config内の定数定義のexportが抜けていて、変数の内容がundefinedのままになっていた。
動画を見ながら、すぐにコードを書いているつもりだが、書き忘れなどが発生して、以外に時間かかる。
コードの答えを見てしまうのでもいいのだが。。。
まあ、デバッグをするとNode JS自体の勉強にはなる。違う切り口からポイントを理解できる。
■次は?
ウォレット自体の生成と複数に対するトランザクションの実装などを行う。
この後は平日5%、土日10%進捗を目標に進めたい。
このコースへのリンク
Build a Blockchain & Cryptocurrency | Full-Stack Edition
全般ランキング
タグ:Node.js
2019年09月29日
【5日目成果】 英語版Udemy講座で学ぶ!ブロックチェーン技術
進捗 35%(+8%)
苦労しなかった割には思いのほかよく進んだ。
■API & Network
使用するモジュールの導入方法を以下の2つのうちから決める。- Redis
- PubNub
・Redisとは
・OSSソフト
・メモリにデータを保持する方式のデータベース
・データベース、キャッシュ、メッセージブローカーとして使用可能
・文字列、ハッシュ、リスト、セット、ソート済のセットを取り扱い可能
・レプリケーションの仕組みもあり
・Mac, Linux, Windowsなど様々なOSに対応している
・PubNubとは
・オンラインサービス
・オンラインチャット、ライブ通知、IOTデバイスのコントロールなどに使用可能
・スタータープランなら100万トランザクション、1GBのデータ保持の範囲なら無料で使用可能
・JavaScript,.Net,Obj-C,Swift,Javaなどの言語で使用可能
今回は、Redisを用いることにして、Windows版をインストール。
このセクションは単体テストなかったため、コーディング量も少なく、順調に進む。
index.jsにHTTP通信のコマンドのGET/POSTの実装を入れていく。
テストの際は、コースの始めにインストールしたPOSTMANが活躍した。
1対1での通信を確認後、マルチ通信ができるようにポートを動的に設定できるように修正を行う。
思ったよりも、早くAPI & Networkのセクションは完了した。
ただ1点になる点が見つかった。
自分のテスト結果を見るとハッシュ値の出力がバイナリ形式での出力になっている。講義動画とは違う。。。
これを修正するには自分のコードを見直すか、Githubのこのコースの実装完了の”答え”を見るか、だ。
最終的には修正するが、今、勉強を進める上では支障がなさそうなのでほっておくことにする。
■次は?
ウォレットの作成を進める。
説明を聞くとどうやら今までがブロックチェーンの話で、これからが仮想通貨に関する内容になってくるようだ。
このコースへのリンク
Build a Blockchain & Cryptocurrency | Full-Stack Edition
全般ランキング
タグ:Redis
2019年09月28日
【4日目成果】 英語版Udemy講座で学ぶ!ブロックチェーン技術
進捗 27%(+4%)
昨日は夜、早い時間に爆睡してしまったため、進みが少ない。
ま、しょうがないか。
■プルーフオブワークの続き
最後に、ブロックチェーンのdifficultyを低くすることにより、簡単に偽装できるようにする攻撃に対しての対策を施す。
いまさらだが、講義を聴く際のほとんどすべての操作をキーボードショートカットで行うようにした。
操作はこんな感じ。
(動作再生中)
→停止 [space]
→VSCodeに移動[Alt+Tab]
→編集対象のファイルに移動[Ctrl + Tab]
→編集
→ファイル保存[Ctrl + S]
→Chromeに移動[Alt+Tab]
→再生 [space]
→停止 [space]
→巻き戻し[左キー]]
→再生 [space]
→停止 [space]
→jestの出力確認
→再生 [space]
→スピードUp[
...
これで相当、作業がはかどる。
VSCodeのショートカット
Udemyの動画プレーヤーのショートカット
Chromeのショートカット
ようや、プルーフオブワークは完了した。
この後は複数のユーザーからこのブロックチェーンが使えるようにする仕組みを作っていく。
■API & Network
このセクション名を見てもあまりピンとこなかったのだが、そもそも、仮想通貨は分散管理であるので、複数のWebサーバーでブロックチェーンを分散管理する必要があるとのこと。
この分散管理のAPIやらサーバーやらを作っていくようだ。
どこまで壮大な作業になるのかわからないが、取りあえず、指示通り、WebアプリケーションのFrameworkであるExpressをインストールから始める。
ものの数分もたたないうちにPC内でWebサーバーが立ち上がり、Express経由でブロックチェーンの
jsonデータを取得できてしまった。Web Frameworkすごい。
動画では、npmでExpressやnodemonのモジュールをインストールする際にバージョンを指定しているが、セキュリティの問題があるかもしれないので、とりえず、最新版を入れておく。
■次は?
明日ぐらいまで、API & Network。
このコースへのリンク
Build a Blockchain & Cryptocurrency | Full-Stack Edition
全般ランキング
タグ:EXPRESS
2019年09月27日
【3日目成果】 英語版Udemy講座で学ぶ!ブロックチェーン技術
進捗 23%(+8%)
多少の苦労はあるがおおむね順調に進んでいる。
■ブロックチェーンのバックエンドの部分の完了
テストコードが完全に成功にならなくて時間を要している。
VSCodeになれていないせいもあり、メンバー関数のつづり間違えをなかなか発見できず。
Chain Replacementで英語がほとんど飛ばされ、理解してないことに気が付く。
とにかく"chain, chain, chain..."の連呼(ブロックチェーンなのでしょうがないのだが)でこんがらがってきた。
最後までできるか不安を覚える。
だが、なんとか、この章を終えることができた。
テストを成功にするために、デバッグをしていたせいか、少しずつコードの処理がわかってきた気がする。
■プルーフオブワークスタート
前のセクションで英語のヒアリングに自信がなくなってきたので、しばらく字幕をONにして進めることにする。
また、理解を深めるため、特に理論の説明の動画を何回か繰り返し見ることにする。
思い返してみると、この講義ではコーディングの部分がかなり重めなため、
どうしても理論説明→聞くだけ→流すだけ→集中力の低下、となっていた気がする。
何度も見て理解をしたことメモにまとめることにより、自分なりにそしゃくして深い理解につなげたい。
■プルーフオブワーク
プルーフオブワークは1990年代に作られたHashCacheという、スパムメールを防ぐアルゴリズムをもとに作られたもので、ゼロの連続が出るようにnonceを使ってハッシュ値を調整する。
このゼロの連続数に応じて難易度が代わり、計算にかかる時間が代わってくる、だそうだ。
一見、このロジックを入れることでコードが複雑化しそうなものだが、それをいとも簡単に整理しながら、実装を進めてテストを完了させていく。
講義後聞きながら、コードを写していても、結構気持ちいいし、達成感も感じることができる。
あざやか!おもしろい!
■次は?
もうしばらく、プルーフオブワークを続ける。
バックエンドで地味ではあるが、ここがブロックチェーンの中枢の部分かな。
その後はウォレットやトランザクションと続く。
このコースへのリンク
Build a Blockchain & Cryptocurrency | Full-Stack Edition
全般ランキング
2019年09月26日
【2日目成果】 英語版Udemy講座で学ぶ!ブロックチェーン技術
進捗 15%
必死コーディングしている。
この講座は一貫してTDDでコードを書いてい行く。
目次を見るとわかるがまずテストコードを作り、失敗したのを確認後、中身の実装を書き、テストの成功をもって完了としていくスタイルだ。
したがって、テストコードを書く分、書かなければならないコード量が多い。
講義動画ではいとも簡単にコードを書いていくが、それを理解しながら、写していくはかなり大変な作業だ。
そもそも、コードをただ写すのは無駄な感じがあるのだが、何もしないと結局は何も理解できないまま終わってしまうので、今後のコード量にもよるが当面はコードを写しながら、受講するスタイルで進めることにする。
■ブロックチェーンのバックエンド作成
ブロックチェーンのバックエンドということでまずブロックから作成。
コード量が多いため、無駄な時間を少しでも省くため、ショートカットでこまめにウインドウを切り替えながら進める。かなり、説明が早いので、コードを写しながら説明を聞くのが難しい。
きりが良いところで動画を止めて、コード写しをして、再度、動画を再生するのを繰り返してすすめる。
単体テストのjestは非常によくできている。
ファイルを保存すると自動的にテストが走り、結果を知らせてくれるので、とても助かる。
コーディングの効率化になっていると思う。
GitBashを設定を変えずに使っているせいか、グリーン、レッドの色分けができてないのが残念。
講義動画はMacで撮影されており、その画面上ではカラフルに結果が表示されてよさそうだ。
■バックエンドでチェーンを作る
ブロックをチェーン上に管理できるようにする。
本格的にTDDで多数のテストを書きながら、進んでいる。
日中から座り仕事のためというのと季節の変わり目というところで腰のあたりに違和感を感じながら進める。
立ってみたり、椅子をどけて、床に立ちひざになったり、マッサージしたり、なんとなくごまかしながら進める。
module.exports宣言のエラーがどうしても解消できなくて、しばらく考え込んでしまった。
結局はこの宣言の前の"}" カーリーブレースの対応が良くないせいだった。
VSCodeをよく見ていればわかったはずだが、それにしても、カッコが非常に多い感じだ。
■バリデーションのコード作成
とにかくコードを写すのが忙しい。
その上で、講義動画で表示されるVSCodeの関数の説明などを表示するツールチップがうっとうしい。
今、そこ写したいのに!というときにかぎって大きなウインドウが出てコードを隠してしまう。
まあ、しようがないか。
TDDのテストの書き方が勉強になる。まず、テストのケースを全部書ききって、その後に実際のテストコードを
考えて埋めていく。うーん、ためになる。
■次は?
もうちょっと、チェーンの部分の実装を行い、その後、Proof of Workに入っていく。
このコースへのリンク
Build a Blockchain & Cryptocurrency | Full-Stack Edition
全般ランキング
2019年09月25日
【1日目成果】 英語版Udemy講座で学ぶ!ブロックチェーン技術
進捗 9%
順調。でももっと進めたい感じ。
■早速スタート
今回の開発環境はWindowsのみで行えそうだ。
ちなみにJavascript, Node JSは未経験。
■初めてのブロックチェーン
Blockchainの概要をサラッと説明した後、すぐに"https://repl.it/”を使ってブロックチェーンの骨組みを作ってみる。
いきなりつまずく。
console.logでBlockクラスの中身が見えない。
cotructor->constructorのつづり間違えでした。
コンストラクタのつづりを間違えてたから、いつまでたっても値が代入されないわけだ。
よって、だから中身も見えない。
つづりか間違っても関数名ということで文字が紫色になるし、実行してもエラーが出ないし、正しく入っていると勘違いしてしまった。
うーん、紛らわしい。
ブロックチェーンの骨組みは…ただのリストですね。
■Javascript Overview
JavascriptはC言語と書き方が似ているのでスキップするという選択肢もあったが、一応やっておく。
"==="(トリプルイコール)のあたりはC言語とは違うので要注意。
やっぱり、やっておいてよかった。この先、さらにややこしいことをやってく上でつまずきのポイントになりそう。
それと、スクリプト&C言語と似ている=>簡単の頭で、再生スピードを上げて聞いたり、他のことに気を取られているとすぐにわからなくなるので、要注意だ。
・このセクションのメモ
・for
・if
・=,==,===,true,false,undefined
・関数
・関数ポインタ
・クラス作成
■開発環境準備
今回はAWSやらVirtualBoxなどややこしい準備は特にない。つまずくところも特にない。
・VSCode, GitBash, Node JS, postman, jestのインストール
jestのバージョンは古いのでいいのか?と思ったが、jestはユニットテスト環境、とのことなのでそのままにする。
■次は?
本格的にブロックチェーンのバックエンドを作っていく。
このコースへのリンク
Build a Blockchain & Cryptocurrency | Full-Stack Edition
全般ランキング
タグ:JavaScript
2019年09月24日
英語版Udemy講座で学ぶ!ブロックチェーン技術
はじめに
ブロックチェーンは仮想通貨の基盤技術であり、その他にもセキュリティ分野やフィンテックなど幅広い用途が見込まれている。
このブロックチェーンの基礎知識及びゼロからコーディングし、アプリケーションを作成し公開するところまで行う。
講座名:Build a Blockchain & Cryptocurrency | Full-Stack Edition
このコースの受講動機
・ブロックチェーンの仕組みとコア技術の理解
・ブロックチェーンのプログラミング経験を積みたい
・ブロックチェーンを用いたWebアプリケーションの構築を行いたい
このコース完了の際のゴールイメージ
・ブロックチェーンの仕組みとコア技術を説明できる
・ブロックチェーンのプログラム開発ができる
・ブロックチェーンを用いたWebアプリケーションの構築ができる
コース詳細の紹介
・レクチャー数と時間
・125レクチャー、15時間のビデオ
・言語
・英語(英語字幕あり)
・内容要約
・フルスクラッチでのブロックチェーンを利用した暗号通貨の開発
・ブロックチェーンと仮想通貨のコンセプト理解
・ブロックチェーンによる実際にある課題の解決とアプリケーション構築
・バックエンドシステムをNodeJSで構築
・フロントエンドシステムをReatJSで構築
・一般公開のためのプロジェクトデプロイ
・クリーンでスケーラブルなコードを書くためのベストプラクティス
・受講に際しての前提条件
・コマンドラインとOSの基本の経験
・少なくとも1つのプログラミング言語の知識
・Web開発の方法に精通していること
計画
・15日程度で完了するつもりで受講をする。
このコースへのリンク
Build a Blockchain & Cryptocurrency | Full-Stack Edition
全般ランキング