Whimlog

寝るまでが一日

MacにBitcoin をインストールする

導入

ブロックチェーンの勉強がてら、Bitcoin をインストールしたのでその記録を残しておきます。 MacBook Pro 2015, OS は High Sierra 10.13 で行いました。

公式のドキュメントはココにあります。

10/23 追記
brew install bitcoin で一発ではいります

準備

OS X command line tools が必要なのでインストールしてない場合は以下を実行する。

$ xcode-select --install

依存ライブラリは以下で入る

$ brew install automake berkeley-db4 libtool boost --c++11 miniupnpc openssl pkg-config protobuf python3 qt libevent

リポジトリを以下から取得し移動

$ git clone https://github.com/bitcoin/bitcoin.git
$ cd /path/to/bitcoin
$ git checkout vv0.15.0rc3 (17/10/13 時点の最新版

ビルドする

以下の手順でコンパイルする。./configure --help でオプションが表示できます。 ステップ3 はマシンスペックにもよりますが、30分くらいかかると思います。

  1. autogen.sh でOSや依存ライブラリのチェックを行っている
  2. ./configure でビルドスクリプトを生成する・
  3. makeコンパイルを実行する
  4. sudo make install でシステムのインストール先に配置
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

確認

which コマンドでバイナリの配置を確認します。 これでインストールは終わりです。

$ which bitcoind
/usr/local/bin/bitcoind

$ which bitcoin-cli
/usr/local/bin/bitcoin-cli

作業中の出来事

make 時に error: no matching function for call to 'upnpDiscover' がでました。 原因は Bitcoin のバージョンが古かったためなので、最新版で実行することで解決できます。

~/w/g/b/bitcoin ❯❯❯ make                                                                                                                                            tags/v0.9.5rc2^0
Making all in src
/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-recursive
Making all in .
  CXX      addrman.o
  CXX      alert.o
  CXX      bloom.o
  CXX      checkpoints.o
  CXX      coins.o
  CXX      init.o
  CXX      keystore.o
  CXX      leveldbwrapper.o
  CXX      main.o
  CXX      miner.o
  CXX      net.o
net.cpp:1066:15: error: no matching function for call to 'upnpDiscover'
    devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, &error);
              ^~~~~~~~~~~~
/usr/local/include/miniupnpc/miniupnpc.h:62:1: note: candidate function not viable: requires 7 arguments, but 6 were provided
upnpDiscover(int delay, const char * multicastif,
^
1 error generated.
make[3]: *** [net.o] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all] Error 2
make: *** [all-recursive] Error 1

以下はコンパイル中の Warning集
特に調査してないです。

  CXX      libbitcoinconsensus_la-utilstrencodings.lo
gcc -I. -g -O2 -Wall -Wextra -Wno-unused-function -c src/gen_context.c -o gen_context.o
gcc gen_context.o -o gen_context
./gen_context
  CC       src/libsecp256k1_la-secp256k1.lo
  CCLD     libsecp256k1.la
  CXXLD    libbitcoinconsensus.la
clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument]
  CXX      bitcoind-bitcoind.o
bitcoind.cpp:153:17: warning: 'daemon' is deprecated: first deprecated in macOS 10.5 - Use posix_spawn APIs instead. [-Wdeprecated-declarations]
            if (daemon(1, 0)) { // don't chdir (1), do close FDs (0)
                ^
/usr/include/stdlib.h:293:6: note: 'daemon' has been explicitly marked deprecated here
int      daemon(int, int) __DARWIN_1050(daemon) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_0, __MAC_10_5, __IPHONE_2_0, __IPHONE_2_0, "Use posix_spawn APIs instead.") __WATCHOS_PROHIBITED __TVOS_PROHIBITED;
         ^
1 warning generated.
  CXX      leveldb/util/leveldb_libleveldb_a-logging.o
leveldb/util/logging.cc:58:40: warning: comparison of integers of different signs: 'const int' and 'unsigned long long' [-Wsign-compare]
          (v == kMaxUint64/10 && delta > kMaxUint64%10)) {
                                 ~~~~~ ^ ~~~~~~~~~~~~~
1 warning generated.
  CXX      qt/qt_libbitcoinqt_a-notificator.o
qt/notificator.cpp:66:27: warning: 'LSGetApplicationForInfo' is deprecated: first deprecated in macOS 10.10 - Use LSCopyDefaultApplicationURLForContentType instead. [-Wdeprecated-declarations]
        OSStatus status = LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator, CFSTR("growlTicket"), kLSRolesAll, 0, &cfurl);
                          ^
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfoDeprecated.h:633:1: note: 'LSGetApplicationForInfo' has been explicitly marked deprecated here
LSGetApplicationForInfo(
^
1 warning generated.

まとめ

ドキュメントの通りにやれば40分くらいで Bitcoin がインストールできます。 実際に実行するのも書けたら書きます😇

ファイナルカレーの旅

ファイナルカレーとの出会い

きっかけは9月に社内で職人達によるファイナルカレーの食事会に参加した時でした。

会社にカレー職人達がきた! #ファイナルカレー

Sunさん(@asuforce)がシェアした投稿 -

これが非常に美味しくて感激してしまいました。家カレーっぽい雰囲気を残しつつ、肉がなんか芳醇な香りがするし、ルーがとても美味いしくてぜひ作ってみたくなりました。

作る

ファイナルカレーにはミキサーが必須です。なのでヨドバシカメラで安いミキサーを買いました。 あと二口コンロだと調理しやすいです。コンソメスープを別に作れば一口コンロでも作れます。 大きいフライパンがあるとやりやすいなと思いました。

f:id:asuforcegt:20171011143054j:plain

ほぼ完成間近の様子です。ルーを作る工程で水分を徹底的に飛ばすことが大事です。

f:id:asuforcegt:20171011143105j:plain

完成です。初めてにしては上出来なのではないでしょうか。(写真がアレ

まとめ

芳醇な肉の香りは梅酒で漬け込むことで味付けをしていたことがわかりました。肉は一晩漬け込むともっと美味しくなりそうです。(今回は二時間)肉は脂身を取ると胃もたれが防げそうです。

今回間違えて、本来は100g のトマトホール缶を1っ缶丸ごと入れてしまいました。トマトっぽい味になりそうなので、スパイスを1.5倍にし、カレールーも本来1/2かけのところ一個にしました。すると味の向こうでトマトはいるのですが、主張が強くなくなって非常に美味しかったです。

ファイナルカレーを極める旅が始まったという話でした。

こちらファイナルカレーになります Special thanks @extrahot

Sunさん(@asuforce)がシェアした投稿 -

ディレクトリから指定の拡張子のファイルをコピーする

ファイルの整理がしたい

ファイルの拡張子を指定して、必要なファイルのみをコピーしたかったので色々調べてみました。 備忘録としてまとめます。

ディレクトリの内容確認

以下のスクリプトを親ディレクトリで実行します。 ファイルの拡張子とそれぞれのファイル数がチェックできます。

$ find . -type f -print | sed -e 's/^.*\///' | grep '\.' | sed -e 's/^.*\.//' | sort | uniq -c | sort -nr

ファイルのコピー

同じく親ディレクトリ上で以下を実行します。 find で extension に指定したファイル一覧を取得します。次に cpio コマンドでファイルをコピーします。destinationディレクトリが無い場合は自動で作成されるので便利です。

$ find . -name "*.<extension>" | cpio -pd ~/path/to/destination

まとめ

mp3 だけとか、 jpg だけ取り出したい。サブディレクトリがいっぱいあって大変という場合に役に立つと思います。 余談ですが、high sierra にしてからファイルのコピーが早くなった気がします。APFSの恩恵かな?