システムエンジニアの知恵袋

明日を今日より少しだけ楽しくしよう。

仮想通貨VIPSTARCOINをテストモード(regtest)で動かしてみた

VIPSTARCOINはスマートコントラクトが搭載された通貨ですが、いきなり本チェーン上でスマコン動かすのは怖いですよね。
ってことでテストモード(regtest)を使ってみました。
すごく簡単なので、みなさんも是非試してみてください。

本記事で扱うVIPSTARCOINウォレットのバージョン
Version 1.0.2 ※他バージョンの場合、操作方法・画面等が異なる可能性があります。

免責事項
本記事の内容によって生じた損害について、一切の責任を負いかねますので御了承ください。

regtestモードとは?

  • 自分だけのブロックチェーン(=プライベートチェーン)をローカルに構築するモード
  • regtestモードのブロックチェーンに対する操作がVIPSの本チェーンに影響することはない
  • テスト用のVIPSを大量にもらえる
  • 好きなタイミングでブロックを生成し、検証を進めることができる
    • → 送金やスマコン操作の検証が終わるまで待つ必要がない

というわけで、失敗しても損しない・迷惑かけない、そして無駄な待ち時間が発生しないというテストに最適なモードなのです。

regtestモードの操作方法

起動編

コマンドプロンプトから、以下のコマンドでウォレットを起動します。

VIPSTARCOIN-qt.exe -regtest

こんな感じで見慣れない色のスプラッシュが出れば成功です。
f:id:cheaps_k:20190411231812p:plain

なお、プライベートブロックチェーンは、%appdata%\VIPSTARCOIN\regtestフォルダに作られています。
最初からやり直したいときはこのフォルダを削除すればOKです。
注) 当たり前ですが、%appdata%\VIPSTARCOINフォルダやwallet.datを消さないように気を付けてください。


f:id:cheaps_k:20190411232304p:plain さて、ウォレットの起動が終わって上記の画面になったら「設定」→「オプション」を開きます。
「貯金(ステークされないVIPS)」のところに、「9999999999」と入力し、「OK」を押します。
f:id:cheaps_k:20190411233131p:plain

この設定は必須ではないのですが、設定しておかないとテスト用のVIPSがPoSに回されて使用できなくなってしまうことがあるので、特段理由がなければ設定しておくのがベターです。

続いて、「ヘルプ」→「デバッグウィンドウ」を開き、「コンソール」タブを開きます。
そこで、以下のコマンドを実行します。

generate 1000

コンソール画面に謎の文字列がズラズラっと表示されればOKです。(少し時間がかかります)
generateというのはブロックを生成するコマンドで、このコマンドによって1000ブロック生成したことになります。
そして、ブロック生成に対して報酬(テスト用のVIPS)をもらうことができます。
大量のVIPSを見て金持ち気分に浸りましょう。

f:id:cheaps_k:20190411233931p:plain

操作編

操作編・・・といっても操作は普通のウォレットと変わりません。
ただし、検証を進めるには先ほどのgenerateコマンドを実行する必要があります。

試しに送金をしてみましょう。
自分のアドレスに送金をすると、取引画面にこんな表示が出ます。
f:id:cheaps_k:20190411234955p:plain

この状態で先ほどのコンソールを開き、以下のコマンドを実行します。

generate 1

すると、以下のように左側のマークが ? から 時計マークに変わり、検証が進んだことがわかります。
f:id:cheaps_k:20190411235008p:plain

トークンを作ってみる編

せっかくなのでスマートコントラクトの例として、トークンを作成してみます。
トークンの作り方は以下wikiの通りに進めればOKでした。
トークンの作り方 - VIP☆STAR

こんな感じで作成。
f:id:cheaps_k:20190412000330p:plain

作成ボタンを押したら、generate 1を実行します。
無事、作成されました!
f:id:cheaps_k:20190412000541p:plain

まとめ

  • regtestモードでウォレットを起動するにはVIPSTARCOIN-qt.exe -regtest
  • generateコマンドでブロックを生成し、検証を進める
  • それ以外は、基本的に普通のウォレットと同じ操作

お疲れさまでした!



ブログ村ランキングに参加しています!クリックしていただけると励みになります!
にほんブログ村 IT技術ブログへ
にほんブログ村

C言語の#ifに潜む罠-未定義マクロの参照-

さっそくですが問題です。
以下のCコードをビルドして実行すると、どうなるでしょう?

#include <stdio.h>

#define ON         (0U)
#define OFF        (1U)

#define PRINT_HELLO_WORLD  (OFF)

int main(void) {
#if ( PRlNT_HELLO_WORLD == ON )
    printf("Hello World!");
#endif

    return 0;
}
  1. Hello World!」と表示される
  2. 何も表示されない
  3. ビルドエラーとなる
  4. 不定動作となる

正解は

1. 「Hello World!」と表示されるです。※3のこともある(後述)

どうでしょう?正解しましたか?
このコードについて、以下で解説していきます。

Hello World!」と表示される理由

お気づきの方もいるでしょうが、先のコードの #if ( PRlNT_HELLO_WORLD == ON ) この部分、「PRINT」の 大文字のI が 小文字のL になっています。
つまり、#if で未定義のマクロを参照しています。
「じゃあ、ビルドエラーでは?」と思うかもしれませんが、意外なことにほとんどの場合ビルドは通ります。警告すら出ないことが多いです。

実はC言語の仕様(※)上、#if で未定義マクロを参照した場合、"0" として評価することになっているのです。
そのため、マクロ「ON」と一致し、printfの部分が有効になるのです。

これ、結構バグの原因となるので注意が必要です。


※「プログラミング言語C 第2版」の「A12.5 条件付きコンパイル」に以下の記述があります。

#ifおよび#elifにおける定数式は普通のマクロ置換を受けるものである。
<中略>
またマクロ展開後に残る識別子は 0L に置き換えられる。

未定義マクロを参照してしまうありがちなケース

まず一つは、マクロ名の誤りです。先ほどのコードのようなやつですね。
まあこれは気を付ければそんなに起きないかなーとおもいます。

もう一つは、インクルード漏れです。これは結構注意が必要です。
特にインクルード関係が複雑になってくると、"ビルドエラーが出たらインクルードを追加する"という作業をやりがちです。
このようなとき、運が悪いとこの事象にハマることになります。

未定義マクロを参照しないようにするには

一番いい解決方法は、未定義マクロの参照を検出するコンパイルオプションを付けることです。
最近のコンパイラであれば、大体備わっているんじゃないかと思います。
例えばgccであれば、-Wundef を付けることで以下のように警告を出すことができます。 f:id:cheaps_k:20190409223236p:plain なお、-Wall では検出されない(何故!)ので気を付けてください。

冒頭でビルドエラーとなることもあると言ったのは、このようなオプションを指定している場合には検出される可能性があるためでした。

また、他の解決方法として 静的解析ツール を使用する方法も考えられます。
静的解析ツールであれば、未定義マクロの参照は警告を出してくれるはずです。
ただし、静的解析ツールでは注意が必要なことがあります。
それは、アセンブラファイルで #if を使用する場合です。
おそらく多くの静的解析ツールはCソースファイルが解析対象ですが、コンパイラによってはアセンブラファイルにプリプロセスをかけられることがあります。
このようなとき、静的解析ツールでは検出されないことがあります。

まとめ

  • #if で未定義マクロを参照すると、0として解釈される
  • 未定義マクロの参照は、コンパイルオプションを使用して検出しよう



ブログ村ランキングに参加しています!クリックしていただけると励みになります!
にほんブログ村 IT技術ブログへ
にほんブログ村

「地図メモ」というAndroidアプリが旅行計画に超便利だった

最近「地図メモ」というAndroidアプリを入れてみました。
最初はちょっとしたメモに使うつもりだったのですが、使ってみたら旅行の計画を立てるのにめちゃくちゃ便利だったので皆さんにもご紹介です。

本記事で扱う「地図メモ」のバージョン
地図メモ Pro バージョン4.0.19 ※他バージョンの場合、操作方法・画面等が異なる可能性があります。

「地図メモ」とは?

↓の画像のような感じで、グーグルマップ上の任意の地点にピン(※)を打てるアプリです。※アプリ内では「マーカー」と呼んでいるので、以下マーカーとします。
f:id:cheaps_k:20190409011101p:plain

以下のリンクからダウンロード可能です。

どんな時に便利?

旅行に行くとき、行先や順番の計画を立ててから行きますよね。
でも、観光名所一覧のようなサイトを見てもイマイチどういう順番で回るのがベストなのかピンとこないと思います。
そういう時に「地図メモ」で地図上にマーカーを打っていくと、行けそうな場所や回る順番がイメージしやすくなります。

自分が旅行の計画を立てるときは、観光名所ランキングに載っている観光地を、とりあえず全部マーカー打ちします! (笑)
そして地図を眺め、行先や回る順番を決めていきます。

「地図メモ」の使い方

それでは、具体的にアプリでマーカーを打つ手順を説明しますね。

適当なサイトで観光名所ランキングを開き、最初に1位の名所の名前をコピーしたら、以下の通り地図メモを操作します。
f:id:cheaps_k:20190409014131p:plain
f:id:cheaps_k:20190409014144p:plain
f:id:cheaps_k:20190409014156p:plain
f:id:cheaps_k:20190409014206p:plain
※「ラベル」にチェックを入れると、地図上にマーカーのタイトルが表示されます。基本チェックを付けるで良いと思います。
f:id:cheaps_k:20190409014219p:plain
f:id:cheaps_k:20190409014227p:plain
f:id:cheaps_k:20190409014235p:plain

この操作をランキング分繰り返し、地図メモに登録していくとこんな感じになります! f:id:cheaps_k:20190409014445p:plain

これを見ると、なんとなくどういう順番で回ると良さそうか、イメージできますよね。
また、地図にマーカーを打っていくと「同じランキングに載っているけど、実はちょっと外れた場所にある観光地」も見つかります。
f:id:cheaps_k:20190409014604p:plain

これを見ると、江島神社は他の観光地から離れているので、行きたければ時間多めに確保しないといけなさそうなことがわかりますね。

まとめ

地図メモアプリ、いかがでしょうか?
アプリのレビューを見ると、賃貸探しの時に役に立った!という意見もありました。
イデア次第で色々な使い方ができるので、是非お試しください!



ブログ村ランキングに参加しています!クリックしていただけると励みになります!
にほんブログ村 IT技術ブログへ
にほんブログ村

ubuntuサーバで仮想通貨VIPSTARCOINのPoSをしてみた

これまで普段使いのパソコンでVIPSTARCOINのPoSをしてました。
が、さすがにずっと電源入れっぱなしにするとパソコンの寿命が短くなりそうだったので、ちょっと前に導入したさくらVPSubuntuサーバでPoSをすることにしました。
せっかくなので、導入する手順をここに記しておきます。

本記事で扱うバージョン
Ubuntu : 16.04.5 LTS
VIPSTARCOIN : 1.0.2
※他バージョンの場合、操作方法等が異なる可能性があります。

免責事項
本記事の内容によって生じた損害について、一切の責任を負いかねますので御了承ください。

手順

1. VIPSTARCOINのビルド

以下のURLにアクセスし、Readmeの「Build on Ubuntu」に記載されたとおりにコマンドを実行します。
GitHub - VIPSTARCOIN/VIPSTARCOIN: VIPSTARCOIN Core Wallet http://www.vipstarcoin.jp

GUIは使用しないので、「# If you want to build the Qt GUI:」の部分は実行しなくても大丈夫です。

2. ウォレットデータの移行

普段使ってるウォレットとデータを共有したい場合は、wallet.datを移行する必要があります。
使用しているターミナルアプリの方法に従って、wallet.datを「~/.VIPSTARCOIN」フォルダにコピーしてください。

3. ウォレット起動

まず、インストールしたフォルダ内の「src」フォルダへ移動します。
例えば、「~/VIPSTARCOIN」にインストールしたのであれば、以下のコマンドを実行します。

cd ~/VIPSTARCOIN/src

続いて、coindを起動します。

./VIPSTARCOINd -daemon

2019/04/08 追記: ./VIPSTARCOINd &と記載していましたが、-daemonを使用することが推奨されているとの情報をいただいたので修正しました。

以下コマンドでプロセス一覧を表示し、VIPSTARCOINdのプロセスが存在することを確認します。

ps x

ウォレットの暗号化をしている場合は、暗号化の解除をします。

./VIPSTARCOIN-cli walletpassphrase password 9999999999 true
※「password」の部分は自分のパスワードに置き換えてください。

このコマンドは、Staking Onlyで 9999999999秒(≒317年) の間 暗号化を解除する、という意味です。時間は適当に変更してOKです。

最後に以下のコマンドを実行し、「staking」が true になっていればPoSが開始されています。
※暗号化解除からstakingの状態が変わるまでに数秒かかりました。

./VIPSTARCOIN-cli getstakinginfo

4. PoSするのを待つ

ひたすら待ちます。PoSされるまで本当に導入に成功してるのかわからないのが歯がゆい。。

僕のところでは、普段使いのPCを立ち上げていない状態で無事PoSすることができました。
f:id:cheaps_k:20190408010605p:plain



ブログ村ランキングに参加しています!クリックしていただけると励みになります!
にほんブログ村 IT技術ブログへ
にほんブログ村

上司に好かれる報連相 -「確認」する心がけ-

報連相の一つ、「相談」。
「相談って質問するだけでしょ?出来てるよ!」という声が聞こえてきそうですが、相談の仕方次第では上司に嫌がられてしまうかもしれません・・・。

あなたはこんな経験ありませんか?

「困ったらすぐ相談しろ」って言われたからその通りにしてたのに、「なんでも聞くな!」と怒られた

もしここまでハッキリ言われなくても、相談したら何となく面倒くさそうにされた、という経験くらいは誰しも持っているのではないでしょうか。
このような場合、「確認」を意識した相談の仕方にするだけで、上司の反応が変わることがあります。

「確認」とはどういうもの?

少し上司の気持ちになってみましょう。
部下からこんな質問をされたとします。どちらの質問の方が印象が良いでしょうか?

  • 「指示された通り作業したんですが、○○が期待通り動きません。どうしたら良いでしょうか?」
  • 「指示された通り作業したんですが、○○が期待通り動きません。△△が原因ではないかと思うので、□□をしようと思っているんですが問題ないですか?」

きっと後者の方が印象が良いと感じるでしょう。(誘導尋問的で申し訳ないですが・・・)
この例であれば、後者が「確認」となります。
二つの質問の仕方の大きな違いは誰が結論を考えているかです。
前者は、上司が結論を考えることになります。一方後者は、部下が結論を考えています。

「確認」とは 自分の考えた結論を伝え、間違っていないか判断してもらう質問方法 です。

「確認」の良いところ

「確認」をすると何が嬉しいか。それは大きく3つあります。

1. 上司が質問に答えやすい

「確認」の場合、上司のファーストアンサーは Yes か No で済みます。
もちろんNoの場合は色々話さないといけませんが、部下がどこまで理解し、どこからズレているかを把握できるため、回答の労力は少なく済みます。
逆に自分の考えを伝えずに「どうしましょう?」とだけ質問してしまうと、上司は「どこから説明すればいいんだろう?」と頭を悩ませることになります。

2. 自分で考える力が付く

「確認」をする場合、まずは自分の中での答えを出さなければいけません。
小さなことではありますが、これが思考のトレーニングとなり、さらには考える癖をつけることに繋がります。
また、上司に自分の考えを伝えることで、上司からフィードバックをもらうことができます。
自分で考える→フィードバックをもらう の繰り返しは、思考力の向上につながります。

3. 考えている、ということが上司に伝わる

上司だって当然人間です。大抵の人は頑張っている人の力になりたいと思うでしょう。
たとえ間違っていたとしても、頑張って考えていることか伝わってくる人を好きになるのです。
感情論ではありますが、これが意外と重要だったりします。

「確認」のデメリット

しかしながら、「確認」にはデメリットもあります。
それは、上司への質問が遅くなることです。

自分の答えを出してから質問するため、問題に当たってから質問までに時間がかかってしまいます。
リリース間際など、時間に余裕がない場合はさっさと「わかりません!」と相談してしまう方が良い場合もあります。

また、自分でいくら考えても答えを出せないこともあります。
作業の目的や背景を知らない場合や、そもそも答えを出すための知識がない場合にはどれだけ考えても結論は出せません。
このようなときは大人しく答えを教えてもらいましょう。
もし、自分で結論を出せるか判断できないときは、"15分考えてみてから質問する"など、時間を決めておくのも良いですね。

まとめ

  • 「確認」とは、自分の考えた結論を伝え、間違っていないか判断してもらう質問方法
  • なるべく「確認」をする意識を持つと、評価&能力アップ!
  • 時間がない時や結論が出せない場合は、「確認」に固執しすぎないように



ブログ村ランキングに参加しています!クリックしていただけると励みになります!
にほんブログ村 IT技術ブログへ
にほんブログ村

秀丸エディタのツールバーにマクロ実行ボタンを設定する方法

秀丸エディタには便利なマクロがたくさんありますよね。
でも、頻繁に使うマクロをいちいち「マクロ実行」メニューから呼び出すのはちょっと面倒。
かといってショートカットに割り当てるとどこに割り当てたか忘れちゃうし・・・。

そんな時は、ツールバーにマクロを実行するボタンを設置すると便利です!

f:id:cheaps_k:20190403000140p:plain

本記事で扱う秀丸エディタのバージョン
秀丸エディタ Version 8.75 64bit edition ※他バージョンの場合、操作方法・画面等が異なる可能性があります。

設定方法

1. ツールバーに設定したいマクロを用意します。

今回はこの「sample_macro.mac」を登録します。

f:id:cheaps_k:20190402230433p:plain

2. マクロ登録をします。

マクロ登録とは、秀丸エディタからマクロを実行するためのお約束のようなものです。
「マクロ」メニューの「マクロ登録」からマクロ登録画面を開きます。

f:id:cheaps_k:20190402230200p:plain

適当なタイトルと、設定するマクロ名を入力してOKを押します。
※登録する場所は任意ですが、1~10以外に登録するのがオススメです。理由は後述します。

f:id:cheaps_k:20190402231811p:plain

3. 登録したマクロをツールバーに設定します。

ツールバーで右クリックし、「ツールバー詳細」を開きます。

f:id:cheaps_k:20190402232357p:plain

左側に表示されているのが、現在ツールバーに表示されている機能の一覧です。
右側のコマンドメニューで「メニュー/マクロ系」を選択すると、先ほど登録したマクロが一覧に出てきます。
マクロを選択し、「<< 追加」ボタンを押すと、左側の一覧にマクロが登録されます。
登録されたのを確認したらOKを押します。

f:id:cheaps_k:20190402233307p:plain

これで、ツールバーにマクロが登録されました!

f:id:cheaps_k:20190402235720p:plain

マクロを1~10以外に登録することをオススメする理由

1~10 にマクロ登録すると、自動的にマクロメニュー内に実行ボタンが表示されるようになります。

f:id:cheaps_k:20190403001510p:plain

これはこれで便利ですが、ツールバーに設定したマクロをわざわざメニューから実行する必要はありません。
なので、ツールバーに設定するマクロは11~に登録すると良いでしょう。



ブログ村ランキングに参加しています!クリックしていただけると励みになります!
にほんブログ村 IT技術ブログへ
にほんブログ村