2017年7月23日日曜日

Spring Tool Suite (STS)をつかってみる

統合開発環境に Spring Tool Suite(STS)を利用し、 Spring MVC + Spring Boot のWebアプリケーションを動かしてみます。
WebサーバはTomcatを使います(Tomcatがインストール済みであることが前提)

<Tomcatのダウンロード先>
http://tomcat.apache.org/download-80.cgi
  1. 以下のサイトからSTSをダウンロードする。
    https://spring.io/tools/sts/all
  2. ZIPファイルを解凍する。「STS.exe」を実行し、STSを起動する。
  3. File メニュー > New > Spring Legacy Project をクリックする。
    Project nameは「WebApp」、Templates:は「Simple Spring Web Maven」を選択。「Finish」ボタンを押下する。
  4. 作成したプロジェクト「WebApp」を右クリックし、Maven > Update Project… をクリックする。
  5. 作成したプロジェクト「WebApp」を右クリックし、Run As > 9 Maven install をクリックする。
  6. Helpメニュー>Eclipse MarketPlaceを選択する。Eclipse Tomcatで検索し、Tomcatプラグラインをインストールする。
  7. Windowメニュー>Preferenceを選択し、Tomcat環境情報を設定する。
  8. 「http://127.0.0.1:8080/WebApp/」にアクセスし、以下の画面が表示されることを確認する。



Hyperdeger Fabric 1.0.0付属のサンプルコードを動かしてみる

Hyperdeger Fabric 1.0.0付属のサンプルコードを動かしてみます。

サンプルコードのイメージ図
(https://hyperledger-fabric.readthedocs.io/en/latest/write_first_app.htmlより抜粋)




  • ブロックチェーンネットワークの分散台帳に書き込むには、スマートコントラクトが必要。
  • 業務側のアプリケーションは、Fabricのネットワークエンドポイントにアクセスし、スマートコンストラクトを実行する
  • サンプルでは、台帳として車情報を管理し、アプリケーションに返す
  • 言語はJavaScriptを利用
  1. サンプルのダウンロード
    # git clone https://github.com/hyperledger/fabric-samples.git
    # cd fabric-samples/fabcar
    # ls
    creds  invoke.js  package.json  query.js  startFabric.sh
  2. startFabric.shの実行
    #./startFabric.sh
    このシェルを実行すると、サンプルを動かす環境を自動的に構築してくれる。
    シェルの中身をみてみると、だいたい以下のことを実行している。
    ・まず最初に、必要なDockerイメージのダウンロード
    ・Docker-composeでDockerコンテナの立ち上げ。以下の4つのコンテナを作成している。
        Creating orderer.example.com
        Creating ca.example.com
        Creating couchdb
        Creating peer0.org1.example.com
    ・ブロックチェーンネットワークを構成するチャネルの作成
    ・「peer0.org1.example.com」というノードをチャネルへ追加
    ・CLIコンテナの作成
    ・サンプルチェーンコードのインストール
    ・サンプルチェーンコードのイニシエト
    ・サンプルチェーンコードの実行
    docker psで確認してみると、以下のコンテナが起動されている。
  3. fabric-samples/fabcar配下で以下のコマンドを実行し、必要なパッケージをダウンロード
    # npm install
  4. クエリーから実行してみる。10データ分の車情報を取得できる。

query.jsソースをのぞいてみると、だいたい以下のことを実行している。

ユーザID'PeerAdmin’を利用する。チャネル名'mychannel'を指定する。また、チェーンコードID'fabcar'を指定して、7051ポートにアクセスする

var options = {
    wallet_path: path.join(__dirname, './creds'),
    user_id: 'PeerAdmin',
    channel_id: 'mychannel',
    chaincode_id: 'fabcar',
    network_url: 'grpc://localhost:7051',

};

Fabric Client SDKを呼び出し、認証に必要なKeyValueStoreを作成する。
client = new hfc();
return hfc.newDefaultKeyValueStore({ path: options.wallet_path });


チャネルを作成し、Peerノードに追加する。

channel = client.newChannel(options.channel_id);

channel.addPeer(client.newPeer(options.network_url));

トランザクションIDを生成し、'queryAllCars'という関数を呼び出す。

var transaction_id = client.newTransactionID();
console.log("Assigning transaction_id: ", transaction_id._transaction_id);

 // queryCar - requires 1 argument, ex: args: ['CAR4'],
 // queryAllCars - requires no arguments , ex: args: [''],
 const request = {
        chaincodeId: options.chaincode_id,
        txId: transaction_id,
        fcn: 'queryAllCars',
        args: ['']
 };

 return channel.queryByChaincode(request);

2017年7月17日月曜日

Hyperdeger Fabric 1.0.0 のソースからDockerイメージを作成してみる

Hyperdeger Fabric 1.0.0がリリースしたということで、ソースからDockerイメージを作成してみます。
OSはUbuntu 16.04を利用します(Google Cloud Platformの1年お試し無料を使いました)。


  1. 前提条件
    Git client
    Go - 1.7 or later (for releases before v1.0, 1.6 or later)
    Docker - 1.12 or later
    Docker Compose - 1.8.1 or later
    Pip
  2. GOPATHの設定
    export GOPATH=/usr/lib/go-1.8
  3. FafbricのDockerイメージを作成する
    mkdir -p $GOPATH/src/github.com/hyperledger
    cd $GOPATH/src/github.com/hyperledger
    git clone http://gerrit.hyperledger.org/r/fabric
    sudo ./fabric/devenv/setupUbuntuOnPPC64le.sh
    cd $GOPATH/src/github.com/hyperledger/fabric
    make dist-clean docker
  4. Dockerイメージが作成されていることを確認する


    ちゃんと作成されてました。
    (とおもってけど、バージョンが1.0.1になってます。。。とりあえず先に進みましょう)
    次回は、ミニマム構成で動かしてみます。


    export GOPATH=/usr/lib/go-1.8

2017年6月29日木曜日

人工知能OSS TensorFlowをインストールしてみる

Googleが提供している人工知能OSSである「TensorFlow」をインストールする。

  1. pipとvirtualenvをインストールする。

    $ apt-get install python-pip python-dev python-virtualenv
  2. virtualenv環境を構築する。

    $  mkdir /home/bushidoyasu/tensorflow
    $  virtualenv --system-site-packages  /home/bushidoyasu/tensorflow
  3. virtualenv環境をアクティベートする。

    $ source /home/bushidoyasu/tensorflow/bin/activate
  4. virtualenv環境上でTensorFlowをインストールするために、以下のコマンドを実行する。

    pip install --upgrade tensorflow
  5. Tensorflowが正常に動作することを確認する。

    $ python


    以下のプログラムを実行して、「
    Hello, TensorFlow!」と表示されることを確認する。
    # Python
    import tensorflow as tf
    hello = tf.constant('Hello, TensorFlow!')
    sess = tf.Session()
    print(sess.run(hello))

2017年6月27日火曜日

Ethereumで独自ネットワークをたちあげる

Ethereumで独自のブロックチェーンネットワークを構築するための手順を説明する。

  1. 内部ネットワーク用のノード情報などを格納するディレクトリを作成する。

     $ mkdir /home/bushidoyasu/test_e
  2. ジェネシスブロックを定義したファイルを作成する。ファイル名は「myjenesis.json」とする。
    { 
      "config": {
            "chainId": 15,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
        },
     "nonce": "0x00006d6f7264656e",
     "difficulty": "0x200",
     "mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578",
     "coinbase": "0x0000000000000000000000000000000000000000",
     "timestamp": "0x00",
     "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
     "extraData": "0x",
     "gasLimit": "0x2FEFD8",
     "alloc": {
     }
    }
  3. ブロックチェーン情報を初期化する。

    $  geth --datadir /home/bushidoyasu/test_e init /home/bushidoyasu/test_e/genesis.json
  4. Peerを起動する。

    $ geth --datadir  /home/bushidoyasu/test_e --networkid 15 console
上記で独自ネットワークでPeerが起動した。
あとは、2人分のアカウントを作成して、送金してみる。

■1人目の作成
> personal.newAccount("bushitya")
INFO [06-26|22:39:33] New wallet appeared                      url=keystore:///home/bushidoyasu/te… status=Locked
"0xd550f995919d10ca17c40f0ea217038ee4df7580"

■2人目の作成
> personal.newAccount("masako")
"0xf7d4f230533737e67d4489f789b71dd89b784d93"
> INFO [06-26|22:43:49] New wallet appeared                      url=keystore:///home/bushidoyasu/te… status=Locked

■アカウントの確認
> eth.accounts
["0xd550f995919d10ca17c40f0ea217038ee4df7580", "0xf7d4f230533737e67d4489f789b71dd89b784d93"]

■発掘の開始
※1人目のユーザに報酬が蓄積されていく
> miner.start()

■アカウントのアンロック
※タイムアウト時間は300秒。
> personal.unlockAccount(eth.accounts[0])
Unlock account 0xd550f995919d10ca17c40f0ea217038ee4df7580
Passphrase:
true

■資産の確認
> eth.getBalance(eth.accounts[0])
5000000000000000000
> eth.getBalance(eth.accounts[1])
0

■送金
> eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(1, "ether")})



2017年6月23日金曜日

Ethereumを動かしてみた

ブロックチェーン基盤の1つであるEtheruemを動かしてみる。

  • Etheruemの実行基盤として、GethとEthの2種類ある。GethはGO言語で記載されている。EthはC++言語で記載されている。今回はGethのほうを動かす。
  • 本番用ネットワークではなく、テスト用のネットワーク(通称:テストネット)につないでみる。
  • 構築環境はUbuntu OSを利用する。

  1. 最初に、必要なパッケージ一式をダウンロードする。

    $ apt-get install software-properties-common
  2. レポジトリにEtheruemを追加する。

    $ add-apt-repository -y ppa:ethereum/ethereum
    $ add-apt-repository -y ppa:ethereum/ethereum-dev
  3. Etheruem資材一式をダウンロードする。

    $ apt-get update
    $ apt-get install ethereum
  4. データディレクトリを作成する。

    $ mkdir /home/bushidoyasu/etheruem_data
  5. テストネットにつないでみる。デーモンではなく、コンソールモードで起動する。

    $  geth --networkid "10" --datadir "/home/bushidoyasu/etheruem_data"   console
    WARN [06-23|21:10:08] No etherbase set and no accounts found as default
    INFO [06-23|21:10:08] Starting peer-to-peer node               instance=Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1
    INFO [06-23|21:10:08] Allocated cache and file handles         database=/home/bushidoyasu/etheruem_data/geth/chaindata cache=128 handles=1024
    INFO [06-23|21:10:08] Initialised chain configuration          config="{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Metropolis: 9223372036854775807 Engine: ethash}"
    INFO [06-23|21:10:08] Disk storage enabled for ethash caches   dir=/home/bushidoyasu/etheruem_data/geth/ethash count=3
    INFO [06-23|21:10:08] Disk storage enabled for ethash DAGs     dir=/root/.ethash                               count=2
    INFO [06-23|21:10:08] Initialising Ethereum protocol           versions="[63 62]" network=10
    INFO [06-23|21:10:08] Loaded most recent local header          number=0 hash=d4e567…cb8fa3 td=17179869184
    INFO [06-23|21:10:08] Loaded most recent local full block      number=0 hash=d4e567…cb8fa3 td=17179869184
    INFO [06-23|21:10:08] Loaded most recent local fast block      number=0 hash=d4e567…cb8fa3 td=17179869184
    INFO [06-23|21:10:08] Starting P2P networking
    INFO [06-23|21:10:11] UDP listener up                          self=enode://455d82dddebbb30f51d98cdddd674c4c7ea91a74e226f5a7b51f5dc38bc8b1266e33bd55771633f2f20f74fb1c159b0ca13e51bc5bb53e425231c24cd6836071@[::]:30303
    INFO [06-23|21:10:11] RLPx listener up                         self=enode://455d82dddebbb30f51d98cdddd674c4c7ea91a74e226f5a7b51f5dc38bc8b1266e33bd55771633f2f20f74fb1c159b0ca13e51bc5bb53e425231c24cd6836071@[::]:30303
    INFO [06-23|21:10:11] IPC endpoint opened: /home/bushidoyasu/etheruem_data/geth.ipc
    Welcome to the Geth JavaScript console!

    instance: Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1
    modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0


    >
    上記でノードが立ち上がった。
  6. アカウントの作成してみる。
    > personal.newAccount("bushitya")
    "0x9dff1a413f42870453f2d2bb9c105cdd0108897b"
    INFO [06-23|21:14:19] New wallet appeared                      url=keystore:///home/bushidoyasu/et… status=Locked
    >
    > eth.accounts
    ["0x9dff1a413f42870453f2d2bb9c105cdd0108897b"]
  7. さっそく、発掘してみる。
    > miner.start()
    INFO [06-23|21:15:38] Updated mining threads                   threads=0
    INFO [06-23|21:15:38] Transaction pool price threshold updated price=18000000000
    ・・・
  8. しばらく放置して、自分のアカウントにEtheコインがふえているかを確認する。
    > eth.getBalance("0x9dff1a413f42870453f2d2bb9c105cdd0108897b")
    0

    0コイン。。。テストネットといえど、発掘の道は厳しい。。。。。。

2017年6月18日日曜日

Dashingをつかってみた

簡単にダッシュボード画面を作成できるフレームワーク「Dashing」を使ってみる。
Rubyで実装されている。

  1. Rubyをインストールする。

    $  apt-get install ruby ruby-dev ruby-bundler
  2. gemコマンドを実行し、Dashingをインストールする。

    $ gem install dashing
  3. サンプルプロジェクト「sample-dashboard」を作成する。

    $ dashing new sample-dashboard
  4. bundleコマンドを実行する。

    $ cd sample-dashboard/
    $ bundle
  5. dashingサービスを起動する。

    $ dashing start

http://localhost:3030 にアクセスし、以下のサンプルのダッシュボード画面が表示されることを確認する。10分ぐらいで動かせた。