プラスプラス開発者ブログ

岩手県盛岡市のシステム開発会社「株式会社プラスプラス」の開発者ブログです。

バーチャルユーチューバーを目指す方に、簡単に手軽に扱えることを目的として作られたアプリ

株式会社プラスプラスでは、バーチャルユーチューバーを実現できるアプリ 3tene(ミテネ) をリリースしました。

http://3tene.com/

3tene(ミテネ)の特徴

これからバーチャルユーチューバーを目指す方に、簡単に手軽に扱えることを目的として作られたアプリです。

f:id:plusplus-jp:20180607142657p:plain

ウェブカメラがあれば顔認識でまばたき、顔の向き。マイクからリップシンク(唇の動きの連動)アバターに投影することができます。

また、ウェブカメラがなくても表情やポーズを変えて、アバターを動かすことができます。

ドワンゴが提唱する、VR用の3Dアバターフォーマット形式のVRMに対応。 録画機能、スクリーンショット撮影機能、クロマキー合成用のブルーバック背景、エフェクト演出など必要な機能が全部入りで、VRMファイルがあればすぐに始められます。

youtu.be

<推奨環境 Windows版> OS Windows7Windows8、Windows10 (Mac版も提供予定)

<グラフィックボード推奨> GeForceなどのグラフィックボード

詳細は以下のサイトにてご案内しております。

http://3tene.com/

どうぞよろしくお願いいたします。

Robot Operating System(ROS)の概要

こんにちは、プラスプラスの真山です。

そもそもRobot Operating System(ROS)ってどういうものなのでしょう?

Robot Operating System(ROS)

ROSは 米国のロボットベンチャー企業であるWillow Garage社が開発を開始し、Open Robotics が開発・メンテナンスしているロボットソフトウェアプラットフォームです。

ソフトウェア開発者のロボット・アプリケーション作成を支援するライブラリとツールを提供しています。

具体的には、ハードウェア抽象化、デバイスドライバ、ライブラ、視覚化ツール、メッセージ通信、パッケージ管理などが提供されています。ROSはオープンソースの一つで、BSDライセンスによりライセンス化されています。

ROSの目的は, ロボット工学分野の研究・開発におけるコードの"再利用"をサポートするというものがあります。

続きを読む

Ethereumのテストネット(ROPSTEN)に接続してみる

こんにちは。

プライベートネットでの動作確認が出来ましたら、次はテストネットにつなげる実験として、 gethのコマンドを直接使用して接続を行ってみましょう。

テストネットは3種類あるのですが、今回は ROPSTEN を使用します。

  • ROPSTEN (Revived) - Proof Of Work
  • KOVAN - Proof Of Authority (Parity only)
  • RINKEBY - Clique Consensus (Geth only)

テストネットは世界中のノードとつながっていますので、実際の運用のように、近い操作を試すことが出来ます。

https://ropsten.etherscan.io/

f:id:plusplus-sawada:20180424192011p:plain
ROPSTEN (Revived) - Proof Of Work

↓こちらを見るとテストネットに繋げている地域がわかります

ethernodes.org - The ethereum node explorer

f:id:plusplus-sawada:20180424192127p:plain
テストネットの動作状況

接続の方法

フォルダなどの用意は、以前のプライベートネットをgethコマンドで作成したときの記事を参考にしてください。

plusplus-jp.hateblo.jp

nohup geth --testnet --datadir ~/eth-test-net/ \
        --syncmode "fast" \
        --cache=2048  \
        --verbosity 4 2>> ~/eth-test-net//geth.log &

コマンドは基本的にこれだけです。

--cache=2048 が動作させるマシンのメモリによって増減するようにしてください。

あとはひたすら同期が終わるまで待ちます。 私が実験したときは、ずっと同期させ続けて2〜3日位かかりました。

同期が完了するまでの間、PCを停止できませんので、連続して動かしても大丈夫な準備を前もってしておいてください。 (同期が完了する前に止めてしまうと、もう一度最初からやり直す必要があるようです)

ちなみに、どこのサーバーと同期しているのか知りたいときは、JavaScriptコンソールにつなげて、admin.peersコマンドを実行します。 その時つながっているサーバーの情報がこんな感じで表示されます。(複数つながっていることもあります)

> admin.peers
[{
    caps: ["eth/62", "eth/63", "par/1", "par/2", "pip/1"],
    id: "865a6325****************************************************aa7349c",
    name: "Parity/v1.9.2-beta-0feb0bb-20180201/x86_64-linux-gnu/rustc1.23.0",
    network: {
      inbound: false,
      localAddress: "***.***.1.13:41548",
      remoteAddress: "***.***.100.77:30303",
      static: false,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 8152197801867759,
        head: "0xe1b6f7**********************************deb887ea62",
        version: 63
      }
    }
}]
>

同期完了

同期が終わったか判断する方法として、コンソールで eth.syncing を実行し、その結果で確認する方法がわかりやすいかなと思います。

> eth.syncing
{
  currentBlock: 3186669,
  highestBlock: 3350248,
  knownStates: 35756250,
  pulledStates: 35756250,
  startingBlock: 3186578
}

currentBlock が同期できたブロックナンバー、highestBlock が最新のブロックナンバー

同期が終わると、いろいろなことができるようになりますが、 コンソールだけですと、あまり面白みは無いですよね。

今回書いた方法を複数のPCを別の通信回線に接続して連動させることで、 テストネットに参加している他のノードを経由してデータがやりとりされるを実感できると思います。

今後、スマートコントラクトについての内容も少し書いてみたいと思います。 テストネットの環境に挑戦したいときは、こちらの記事も参照してみてください。

ちなみに、テストネットは世界中のマシンで成り立っていますので、同期が完了しても、 止めてしばらくすると世間から置いてけぼりの状態になります。(^^;

起動させれば自動的に他のノードに接続して最新ブロックに追いつくまで同期されますので テストネットを使いたいときは前もって同期をしておくと良いようです。 (戻るまで結構時間がかかるときもあります)

はじめまして!

はじめまして。株式会社プラスプラスの真山です。
この度弊社の開発者ブログに私も記事を書くことになりました!

少し自己紹介をしますと、この会社に入ってまだ数ヶ月。入る前は電気工事士として現場で働いていましたが、プログラミングってなんだか面白そう!みたいな感じでプログラマーに。実際動くと面白い!皆さんもぜひ!

私が担当する分野は ROS (Robot Operating System)Gazebo です。

続きを読む

WindowsでEthereum環境構築はじめました。その2

今日はラップな「軽く熊」ですYO! Yeah!

まずはWindows10でEthereumが利用できる環境を作ります。
しかし、etherに換金する資金もマイニングに必要な大量GPU環境も無いので
無料で開発が出来るプライベートネットを作る事にします。
※なお環境構築にはgeth.exeを使いますのでコマンドプロンプトが使える必要があります。

続きを読む

WindowsでEthereum環境構築はじめました。その1

はーい。はじめましてー。「軽く熊」です。

普段はスマートフォン(Android)のアプリ開発をしている事が多いのですが、
何がどうして「仮想通貨関連のブログ書いてね」と指示がありましたので
仮想通貨に関して素人な私が勉強しながら記事を書く事になりました。

今回はWindowsイーサリアム(Ethereum)が扱える環境を構築します。

続きを読む

イーサリアムのクライアントソフト go-ethereum (geth)を制御するスクリプトを作りました

こんにちは。

ブロックチェーンの開発作業を行う場合、gethを使用してプライベートネットなどを立ち上げる必要がありますが、 コマンドを毎回入力するのは結構大変だと思います。

ですので、gethの起動、終了を支援してくれるBashスクリプトを作成してみました。

GitHubスクリプトを公開しています。

https://github.com/PLUSPLUS-JP/geth-control

$ git clone git@github.com:PLUSPLUS-JP/geth-control.git

ぜひ clone してみてください。

リポジトリ内のドキュメントにも簡易説明を書いていますが、ブログにも補足としてスクリプトの初期設定と使い方を書きたいと思います。

動作環境について

gethのバージョンですが、私の環境ではこちらのバージョンを使用しています。1.8.x であれば動くと思います。

$ geth version
Geth
Version: 1.8.3-unstable
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.9.2
Operating System: darwin
GOPATH=/Users/o.sawada/go
GOROOT=/usr/local/Cellar/go/1.9.2/libexec
どんなことができるのか
  • プライベートネットを初期化
  • プライベートネットの起動
  • プライベートネットの停止

そのまんまですね。

それぞれ、

  • 初期化 → initialize-private-network.sh
  • 起動 → start-private-net.sh
  • 停止 → stop-private-net.sh

というスクリプトになっています。

$ cd geth-control/
$ tree .
.
├── LICENSE
├── README.md
├── README.pdf
└── private-net
    ├── _function.sh
    ├── initialize-private-network.sh
    ├── monitor-geth-log.sh
    ├── sample-private-net.cf
    ├── sample-genesis.json
    ├── start-private-net.sh
    └── stop-private-net.sh

1 directory, 10 files
初期設定

はじめに、private-net/sample-private-net.cfをコピーしてprivate-net/private-net.cf という設定ファイルを作成します。 この設定ファイルではRPC, websocket, gethが使うポートを設定します。デフォルトで使用するポートは次のようになっています。変更する必要がなければ、作成しなくても問題ありません。

  • RPC 8545番
  • Websokect 8546番
  • GETH 30303番
$ vim private-net/private-net.cf

↓設定ファイルの中身

  1 #↲
  2 # geth-control privete-net config file↲
  3 #↲
  4 ↲
  5 # for RPC connection↲
  6 OPT_RPC_PORT=8545↲
  7 ↲
  8 # for web socket↲
  9 OPT_WS_PORT=8546↲
 10 ↲
 11 # for geth↲
 12 OPT_GETH_PORT=30303↲

次に、genesis.jsonを作成します。特にこだわりがなければ、sample-genesis.jsonというファイルがありますので、それをコピーして使っても大丈夫だと思います。

$ cd private-net/
$ cp -a sample-genesis.json genesis.json

これで初期設定が終わりました。

初期化

ブロックチェーンを初期化してみます。

初期化の確認プロンプトが出ますので YES と入力します。 下記が実行例です。ネットワークIDが 1526434664 として初期化されました。

$ ./initialize-private-network.sh
Would you like to issue a network ID? [YES/*] YES
>>> Created as network ID: 1526434664
>>> command [  SUCCESS  ]

>>> [HINT] Do you want to see more logs?
>>>        Please try use /Users/hoge/path/to/geth-control/private-net/start-private-net.sh
操作してみる

続いてブロックチェーンを起動してみます。

初めて起動するときは、ネットワークの初期化が行われ、その後にプライベートネットの起動が行われます。

$ ./start-private-net.sh
Connect to private net? [YES/*] YES

>>> Initialize the network

INFO [05-16|10:39:42] Maximum peer count                       ETH=25 LES=0 total=25
INFO [05-16|10:39:42] Allocated cache and file handles         database=/Users/o.sawada/blog/geth-control/private-net/geth/chaindata cache=16 handles=16
INFO [05-16|10:39:42] Writing custom genesis block
INFO [05-16|10:39:42] Persisted trie from memory database      nodes=0 size=0.00B time=8.452µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [05-16|10:39:42] Successfully wrote genesis state         database=chaindata                                                    hash=4b7556…13cf12
INFO [05-16|10:39:42] Allocated cache and file handles         database=/Users/o.sawada/blog/geth-control/private-net/geth/lightchaindata cache=16 handles=16
INFO [05-16|10:39:42] Writing custom genesis block
INFO [05-16|10:39:42] Persisted trie from memory database      nodes=0 size=0.00B time=1.435µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [05-16|10:39:42] Successfully wrote genesis state         database=lightchaindata                                                    hash=4b7556…13cf12
>>> command [  SUCCESS  ]

>>> Startup success, enjoy with private net :-)

DEBUG[05-16|10:39:42] WebSocket registered                     service=&{am:0xc420454680}                                                                                                                      namespace=eth
DEBUG[05-16|10:39:42] WebSocket registered                     service=&{e:0xc4200be000}                                                                                                                       namespace=eth
DEBUG[05-16|10:39:42] WebSocket registered                     service="&{e:0xc4200be000 agent:0xc420366000}"                                                                                                  namespace=eth
DEBUG[05-16|10:39:42] WebSocket registered                     service="&{d:0xc4204d9500 mux:0xc42041d110 installSyncSubscription:0xc4203420c0 uninstallSyncSubscription:0xc420342120}"                        namespace=eth
DEBUG[05-16|10:39:42] WebSocket registered                     service="&{backend:0xc42045ac70 mux:0xc42041d110 quit:<nil> chainDb:0xc4202ea120 events:0xc42047c0c0 filtersMu:{state:0 sema:0} filters:map[]}" namespace=eth
DEBUG[05-16|10:39:42] WebSocket registered                     service="&{net:0xc420476280 networkVersion:1526434664}"                                                                                         namespace=net
DEBUG[05-16|10:39:42] Allowed origin(s) for WS RPC interface [*]

INFO [05-16|10:39:42] WebSocket endpoint opened                url=ws://[::]:8546
INFO [05-16|10:39:42] Mapped network port                      proto=tcp extport=30303 intport=30303 interface=NAT-PMP(192.168.xxx.xxx)
>>> command [  SUCCESS  ]

>>> [HINT] Do you want to see more logs?
>>>        Please try use /Users/hoge/path/to/geth-control/private-net/monitor-geth-log.sh

どのように動いているか、ログを見続ける場合は、次のようにしてログを表示させます。 (内部的には tail -f してます)

$ ./monitor-geth-log.sh
DEBUG[05-16|10:39:42] WebSocket registered                     service="&{d:0xc4204d9500 mux:0xc42041d110 installSyncSubscription:0xc4203420c0 uninstallSyncSubscription:0xc420342120}"                        namespace=eth
DEBUG[05-16|10:39:42] WebSocket registered                     service="&{backend:0xc42045ac70 mux:0xc42041d110 quit:<nil> chainDb:0xc4202ea120 events:0xc42047c0c0 filtersMu:{state:0 sema:0} filters:map[]}" namespace=eth
DEBUG[05-16|10:39:42] WebSocket registered                     service="&{net:0xc420476280 networkVersion:1526434664}"                                                                                         namespace=net
DEBUG[05-16|10:39:42] Allowed origin(s) for WS RPC interface [*]

INFO [05-16|10:39:42] WebSocket endpoint opened                url=ws://[::]:8546
INFO [05-16|10:39:42] Mapped network port                      proto=tcp extport=30303 intport=30303 interface=NAT-PMP(192.168.xxx.xxx)
DEBUG[05-16|10:40:02] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[05-16|10:40:22] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[05-16|10:40:42] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s

ブロックチェーンを停止させたい場合は、次のようにして、停止のスクリプトを実行させます。 停止の確認プロンプトが表示されますので、YESを入力し停止させます。

$ ./stop-private-net.sh
Stop the private network? [YES/*] YES
>>> command [  SUCCESS  ]

使い方は簡単ですので、是非活用してみてください。