Bitcoinのブロックチェーンに任意のデータを刻む

背景

電子の海に己が存在を刻み込むのよ!!

BitcoinのOP_RETURNをつかってブロックチェーンに任意のデータ保存する手法、プログラミング言語ベースで解説されている記事が数個みつけましたが、pubScriptベースで解説されている日本語記事がみつからなかったので書くことにしました。

概要

以下、概要

pubScript

pubScriptについてはこちらを参照してください。

qiita.com

Bitcoin環境の作成

おあつらえ向きのDockerfileがGithubに公開されているのでつかわせてもらいます。

$ git clone https://github.com/kylemanna/docker-bitcoind
$ cd cd docker-bitcoind

bin/btc_initbitcoin.conf として利用されるようになっているので以下のように編集しました。

#!/bin/bash

set -ex

# This shouldn't be in the Dockerfile or containers built from the same image
# will have the same credentials.
if [ ! -e "$HOME/.bitcoin/bitcoin.conf" ]; then
    mkdir -p $HOME/.bitcoin

    echo "Creating bitcoin.conf"

    # Seed a random password for JSON RPC server
    cat <<EOF > $HOME/.bitcoin/bitcoin.conf
testnet=3
rpcallowip=172.17.0.0/16
rpcconnect=127.0.0.1
rpcuser=[user]
rpcpassword=[password]
rpcport=18332
printtoconsole=1
txindex=1
EOF

fi

cat $HOME/.bitcoin/bitcoin.conf

echo "Initialization completed successfully"

testnet=3 を追記してtestnetに接続するようにしています。testnetのrpcportは慣例的に18332を利用するのでこれも変更しました。

dockerイメージをビルドして動かしてみましょう。

$ docker build -t bitcoin .
$ docker run -v $HOME/bitcoin-data:/bitcoin --name=bitcoind-node -d -p 18333:18333 -p 127.0.0.1:18332:18332 bitcoin

18333ポートは他ノードとの通信に利用されるようです。

$HOME/bitcoin-data にはBitcoinのブロックチェーンがダウンロードされるようになっています。2018/2/19 15時現在、testnetのブロックチェーンは15GBほどあります。

以下のコマンドでコンテナにアタッチできます

$ docker exec -i -t bitcoind-node bash

アタッチしたらbitcoin-cliコマンドでブロックの状況を確認してみましょう*1

# root@c4a8538d33c6:~# bitcoin-cli getinfo
{
  "deprecation-warning": "WARNING: getinfo is deprecated and will be fully removed in 0.16. Projects should transition to using getblockchaininfo, getnetworkinfo, and getwalletinfo before upgrading to 0.16",
  "version": 150100,
  "protocolversion": 70015,
  "walletversion": 139900,
  "balance": 1.29998000,
  "blocks": 1283618,
  "timeoffset": 0,
  "connections": 20,
  "proxy": "",
  "difficulty": 953631.231859672,
  "testnet": true,
  "keypoololdest": 1518769536,
  "keypoolsize": 1999,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "errors": "Warning: Unknown block versions being mined! It's possible unknown rules are in effect"
}

下準備

早速電子の海に己が存在を刻み込みたいところですが幾つか下準備が必要になります。

まずは手数料の準備です。先程 getinfo によって取得した情報によるとrelayfeeが0.00001000BTC (1000satoshi) となっていますのでこれ以上を用意しておく必要があります。

testnet faucetを探して自分のアドレスに送金しておきましょう。最長でも15~30分くらいで1 confirmされると思います。

さらに1000satoshi以上用意してある場合はお釣りをもらうアドレスも必要ですので作成しておきましょう。

トランザクションの作成

まずはお釣りのトランザクションを作成してしまいます。未使用のトランザクションのIDとお釣りを送る先のアドレスを確認しておきましょう。

# bitcoin-cli listunspent
[
  {
    "txid": "b85859e623a4486f800935ac06814ff879404d18e672322eb5868fd0603677f0",
    "vout": 0,
    "address": "mk1AgTJSJJtaujpEwXMYLGLunRvoWLakXD",
    "account": "",
    "scriptPubKey": "76a91431367d536429a0f8d4e1ccbe0e0086260f83e50388ac",
    "amount": 1.29998000,
    "confirmations": 125,
    "spendable": true,
    "solvable": true,
    "safe": true
  }
]
# bitcoin-cli getaddressesbyaccount ""
[
  "mk1AgTJSJJtaujpEwXMYLGLunRvoWLakXD",
  "mroc2MUN47VWd5YcUYpVvHPYkyCTVxbASJ",
  "n1U1c27rtNGNs5FvBuQ8Eqx4PoHJwX1Y82",
  "n2yqHkko8P9WaevzHrdShp5iwxvJcfH4X3",
  "n3SUf3ePtEzi2MW6DR3JT1ch5waLkZaEta",
  "n45RrVcGXU6ejk4FdTG4vXXyrxkTgVB3Tv",
  "n4YyHACYQCefGf5MoBa8xYDouBnMmiuTgL"
]

1.29998BTCの未使用トランザクションがあったのでこれを使います。このtxidから新しいトランザクションを作成します。アドレスは一番上のものに1.29998BTCあるのでなにもはいっていない2番目のものを使うことにします。

トランザクションの作成には createrawtransaction を使います。送金額はいま持っている1.29998から手数料を引いた1.29997BTCに設定します。

# bitcoin-cli createrawtransaction '
[{"txid": "b85859e623a4486f800935ac06814ff879404d18e672322eb5868fd0603677f0","vout": 0}]
' '
{"mroc2MUN47VWd5YcUYpVvHPYkyCTVxbASJ": 1.29997}
'
0200000001f0773660d08f86b52e3272e6184d4079f84f8106ac3509806f48a423e65958b80000000000ffffffff01c898bf07000000001976a9147bcf88aa523b792fb77cee6f6fc9931189bbfe7f88ac00000000

これでトランザクションが作成されました。細かく中身を見ていきましょう。

02000000          < バージョン
01                < インプットするトランザクションの数
f0773660d08f86b52e3272e6184d4079f84f8106ac3509806f48a423e65958b8
                  < トランザクションID (32bitのリトルエンディアン)
00000000          < Vout
00                < scriptSigの長さ
ffffffff          < シーケンス番号
01                < アウトプットの数
c898bf0700000000  < アウトプットの金額
19                < pubScriptの大きさ
76a9147bcf88aa523b792fb77cee6f6fc9931189bbfe7f88ac
                  < pubScript
                  < (OP_DUP OP_HASH160 7bcf88aa523b792fb77cee6f6fc9931189bbfe7f OP_EQUALVERIFY OP_CHECKSIG)
00000000          < Lock time

ここのトランザクションのアウトプットの数を1増やしてそこにOP_RETURN命令を追加すれば良いでしょう。ということで書き換えたトランザクションが以下のとおりです。

02000000          < バージョン
01                < インプットするトランザクションの数
f0773660d08f86b52e3272e6184d4079f84f8106ac3509806f48a423e65958b8
                  < トランザクションID
00000000          < Vout
00                < scriptSigの長さ
ffffffff          < シーケンス番号
02                < アウトプットの数
c898bf0700000000  < アウトプットの金額(1)
19                < pubScriptの大きさ(1)
76a9147bcf88aa523b792fb77cee6f6fc9931189bbfe7f88ac
                  < pubScript(1)
                  < (OP_DUP OP_HASH160 7bcf88aa523b792fb77cee6f6fc9931189bbfe7f OP_EQUALVERIFY OP_CHECKSIG)
0000000000000000  < アウトプットの金額(2)
1a                < pubScriptの大きさ(2)
6a18e4bfbae3818ce38190e38289e381bde38280e381a0efbc81
                  < pubScript(2)
                  < (OP_RETURN e4bfbae3818ce38190e38289e381bde38280e381a0efbc81)
00000000          < Lock time

補足に(2)と書いてある部分が追記したところです。まずアウトプットの金額は0ですので0を埋めてpubScriptの大きさを1byteで記述します。OP_RETURNのopcodeは0x6aですので、これとデータのサイズを示す1byteと実データのサイズを含めた数字を入れましょう。 今回突っ込むデータは24byteだったのでpubScriptの大きさは0x1aとなりました。

さて、これで大丈夫そうかデコードしてみます。

# bitcoin-cli decoderawtransaction
{
  "txid": "c4fb7e7af51880753fcd2a630d8355a81069d74474a497a76df80aea0d65e5d5",
  "hash": "c4fb7e7af51880753fcd2a630d8355a81069d74474a497a76df80aea0d65e5d5",
  "version": 2,
  "size": 120,
  "vsize": 120,
  "locktime": 0,
  "vin": [
    {
      "txid": "b85859e623a4486f800935ac06814ff879404d18e672322eb5868fd0603677f0",
      "vout": 0,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 1.29997000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 7bcf88aa523b792fb77cee6f6fc9931189bbfe7f OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a9147bcf88aa523b792fb77cee6f6fc9931189bbfe7f88ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "mroc2MUN47VWd5YcUYpVvHPYkyCTVxbASJ"
        ]
      }
    },
    {
      "value": 0.00000000,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_RETURN e4bfbae3818ce38190e38289e381bde38280e381a0efbc81",
        "hex": "6a18e4bfbae3818ce38190e38289e381bde38280e381a0efbc81",
        "type": "nulldata"
      }
    }
  ]
}

2つ目のアウトプットもいい感じにデコードされていますね。

トランザクションの送信

このままではトランザクションコードを作成しただけでブロックチェーンネットワークに反映されないので、これを送信していきます。

まずは署名します。

# bitcoin-cli signrawtransaction 0200000001f0773660d08f86b52e3272e6184d4079f84f8106ac3509806f48a423e65958b80000000000ffffffff02c898bf07000000001976a9147bcf88aa523b792fb77cee6f6fc9931189bbfe7f88ac00000000000000001a6a18e4bfbae3818ce38190e38289e381bde38280e381a0efbc8100000000
{
  "hex": "0200000001f0773660d08f86b52e3272e6184d4079f84f8106ac3509806f48a423e65958b80000000000ffffffff02c898bf07000000001976a9147bcf88aa523b792fb77cee6f6fc9931189bbfe7f88ac00000000000000001a6a18e4bfbae3818ce38190e38289e381bde38280e381a0efbc8100000000",
  "complete": true
}

署名済みのhexコードがでてきたのでこれを送信しましょう。

# bitcoin-cli sendrawtransaction 0200000001f0773660d08f86b52e3272e6184d4079f84f8106ac3509806f48a423e65958b80000000000ffffffff02c898bf07000000001976a9147bcf88aa523b792fb77cee6f6fc9931189bbfe7f88ac00000000000000001a6a18e4bfbae3818ce38190e38289e381bde38280e381a0efbc8100000000
fb16f47bc12f490bb243dfff195ef36610ec1996a46584d11fb33393fa7a6b16

最後に表示されているのが送信されたトランザクションのtxidになります。念のため確認してみましょう。

# bitcoin-cli gettransaction fb16f47bc12f490bb243dfff195ef366
{
  "amount": 0.00000000,
  "fee": -0.00001000,
  "confirmations": 1,
  "blockhash": "000000000000016bf4956eb603bd972e0271d41873c59480cce0becc1caa4724",
  "blockindex": 39,
  "blocktime": 1519024661,
  "txid": "fb16f47bc12f490bb243dfff195ef36610ec1996a46584d11fb33393fa7a6b16",
  "walletconflicts": [
  ],
  "time": 1519024410,
  "timereceived": 1519024410,
  "bip125-replaceable": "no",
  "details": [
    {
      "account": "",
      "address": "mroc2MUN47VWd5YcUYpVvHPYkyCTVxbASJ",
      "category": "send",
      "amount": -1.29997000,
      "label": "",
      "vout": 0,
      "fee": -0.00001000,
      "abandoned": false
    },
    {
      "account": "",
      "category": "send",
      "amount": 0.00000000,
      "vout": 1,
      "fee": -0.00001000,
      "abandoned": false
    },
    {
      "account": "",
      "address": "mroc2MUN47VWd5YcUYpVvHPYkyCTVxbASJ",
      "category": "receive",
      "amount": 1.29997000,
      "label": "",
      "vout": 0
    }
  ],
  "hex": "0200000001f0773660d08f86b52e3272e6184d4079f84f8106ac3509806f48a423e65958b8000000006b483045022100d554d09f60df7a338c5cb272e3772fd67eccca032359c1fb77f93e5c584daaca0220132cac750d8314e4ead8fccd3bbc1e15f2e9f4b99c3af18802a7cd206607de1d01210283880535cfb90692bce2a7ec51840691a8b8cd9295983cca3ed2e0c6f77396dfffffffff02c898bf07000000001976a9147bcf88aa523b792fb77cee6f6fc9931189bbfe7f88ac00000000000000001a6a18e4bfbae3818ce38190e38289e381bde38280e381a0efbc8100000000"
}

送信できているみたいなのでconfirmされるまで待ってブロックエクスプローラーを確認してみます。今回のトランザクションはこちらにのっています。

Bitcoin Transaction fb16f47bc12f490bb243dfff195ef36610ec1996a46584d11fb33393fa7a6b16

f:id:gurapomu:20180219162645p:plain

自分の入力したデータがブロックチェーンに残っていることが確認できました!!!

*1:getinfoはもう使えなくなるらしいですね

個人的な2017年の振り返り

賀正

皆様、新年あけましておめでとうございます。

あまり振り返りをやるつもりはなかったのですが新年を迎えるにあたって色々記憶とかを整理しておきたかったので書いていくことにしました。

2日間くらいかかってしまって本当に虚無。

駄文になりますがご了承ください。

振り返り

1月

ツイートの約3分の1が弊学の授業の1つである先進情報工学実験Ⅲのことだったので相当疲弊していたんだろうなぁとおもいます。

成人式とか同窓会とか草野球チームとか高校の同期とかでお酒を飲みまくっていた気がします。いや、今も同じくらい飲んでるか?

そういえばこの頃って大学の人と酒を飲みに行くとか遊びにいくとかほとんどなかったなぁ

今の今まで忘れていたけどこんなブログ記事を読んでいました。

このあいだ、人間性とか社会性とかについて駄文を書いたけど、「俺の言うことなんて聞くな」っていうのはかなり梅原大吾に影響されているのかもしれないと自分のことながら思いました。そんなつもりはなかったんだけど、客観的にみるとすごい寄っちゃってるよね

gurapomu.hatenablog.com

アルバイトではこの頃ぐらいまで渋谷でスマートハウス関連のなにかをやっていた覚えがあります。今はもう言っていません。闇に飲まれたと思っていたラズパイゼロもこの前帰ってきました。

2月

春休みな感じのクソみたいなツイートをいっぱいしていました。こんなにツイートしてたんだっけ???

1月に疲弊していた先進情報工学実験の最終発表会が月頭にあったっぽいです。この授業、履修者が3人でさらに1名は最終発表前日に履修を辞退したため、学徒2人が教員数名に囲まれるというなんとも緊張するシチュエーションのなか最終発表会が行われています。

1月おわりから2月頭にかけてサンボマスターをめちゃくちゃ聴いていたっぽいです。僕がサンボマスターをめちゃくちゃ聴いているときは心がつらくなっているときです。多分前述のとおり先進情報工学実験に心をやられてのことだと思います。ちなみに最近はあんまり聴いていません。

天文部でスキー合宿に行きました。楽しかったね。めっちゃスキーがうまくなった気になりました。実際うまくなったと思います。人間性だなぁとおもう出来事もあったけどここに書けるようなことでもなさそう。

MCCの合宿にも行きましたね。ハッカソンではMinecraftプラグインをつくりました。LTでは劇場版SAOに絡めてARやVR、そしてMRとかの話をしました。

今おもったんですけど、バレンタインデーに学校がないのって独り身の人間からするとすごい悲しいですよね。渡す側としてもすごくハードルが上がっちゃうじゃないですか。まあ学校があろうがなかろうがどうせもらわない人間からすると関係ないのかもしれないでしょうけどね。。。。悲しいね。そういえば義理チョコくれたみんなにお返しってしたんだっけ、してなさそう・・・・。本当に申し訳ない。この場を借りて謝罪させていただきます。

3月

トラブルシューティングコンテストに出場しましたね。ネットワーク強い人間になりたいと思った。トラコンに出た足でMCCの追いコンにいってカラオケでオールをした気がする。バカじゃん。

GrassLifeとかをやってた気もします。そもそもいつからいつまでやっていたんだろう。諸説あります。

MCCの新歓にむけてプログラミング初心者のプログラミング学習について考えていた時期がありました。明確な答えは出せなかったけど結局は「やりたい人だけやればいいじゃん」に落ち着きました。こういうことって結局やる人はやるしやらない人はやらないよね。授業で教わることってためになるの問題もあります。私の答えは「知っているといいけど必須ではない、そして授業で十分というわけでもない」です。でも仕事をしていればそのうち身につくスキルなんだろうね。それは今やっておくかあとでやるかの違いです。*1

天文部で、ぐんま天文台へ観測合宿にいったはずなんだけど全くツイートしてないのなんなんだろう。天文部の合宿で一番楽しかったと言っても過言ではない。この頃からバーベキューが流行り始めました。最近バーベキューしてないですね。

4月

4月は大体この1ツイートに集約できます。

各種新歓で死ぬ思いをしていました。今年の1年生は威勢がいいですね、いろんな意味で。新歓で唯一楽しかったのは農部サークルオリエンテーションにいって紅を食ったことだけでしょう。

あ、そういえば最近よく天文部の人たちと飲みに行ったり遊びに行ったりするのは新歓時期の団結感がルーツになっているんじゃないかなぁと最近感じます。

新年度早々、強風で傘が折れて心も折られそうでした。何が面白いって根本が折れたんだよな。

そして運悪くサークル代表者会議の会計に選ばれてしまい本当に心が折られました。この時期、もっとうまく立ち回れたはずなんだよなぁ・・・。今一度だけ過去に戻れるとしたら間違いなく3月か4月と言うでしょうね。

うーんなこともありました。いちいちツイートを掘り返したりはしないけど泣きそうでした。気になる人は僕の4月のツイートを掘り返してみてください。

5月

そういえばMCC新歓で若干のいざこざが起きましたね、今思うとなんだったんだろう。これを言うと大概ひどいって言われるんだけど、正直自分がいなくなった後のことなんてどうでもいいと思っています。ひどすぎるって?これについては思うところがあるので10,11月あたりのくだりでもう少し掘り下げて書きます。

MCCでは自分が講師としてマイコン講習会をやりました。後期もやるといってやるやる詐欺になってしまったけどあのとき来てくれた1年生はいまもマイコンをいじってくれているのだろうか・・・

S科の縦コンをやりましたね。自分は2次会からの参加だったけど主に編入生の顔と名前を一致させるいい機会だったと思います。*2

天文部で新歓合宿にいきました。

新歓で疲弊して絶園のテンペストを視聴したらもっともっとつらくなって終わりました。ちなみにめっちゃサンボマスターを聴いていました。現実逃避にStellarisというストラテジーゲームにハマりました。これが結構面白いのでおすすめです。このゲームはDLCも一緒に買わないとまともに遊べません。

この辺からツイッターの情報量が少なくなってきて記憶に頼っている部分が大きい。

ツイートしなくなることはいいことだと思いますけどね。

適度に手を抜くことの重要性を本気で考えていました。「手は抜け」というと各方面から叩かれるのですが、レポートに文字通り全力で取り組む周りの人をみてこれは何か違うと感じていました。恐らく、努力はしたぶんだけ偉いという日本人的美徳(?)が大きいのではないかと考えています。もちろん努力は必要なことですが各員もっと力配分をですね・・・*3

前期は週に1回実験をやってレポートを書いていましたが実験には行かずに家でレポートを書いたほうがいいことに気付いてしましました。あの実験群何なん???

6月

団体を運営していくことについて真剣に考えた結果、大学のサークル程度の規模なら部長がすべてをやるのが最適解だということを悟りました。

1ヶ月に1回くらい車をドライブにいくようになりました。しかし1人で車にのってどっかに行くことほど虚しいこともない。ドライブ、大体天文部の人といくよね、付き合ってくれて嬉しい限りですけど。

5月か6月くらいに初めてアンドロイド版マインスイーパーのウィークリー世界一位を獲得した気がします。最近はKindleを買った影響で全然マインスイーパーをやってないです。

冴えない彼女の育て方♭が放映されていましたね。心がおわっていたので8話を両手の指で数えられないくらいみました。*4振り返ってみてわかったけど毎月つらいって言ってんなこいつ・・・。多分第四四半期に比べたら屁でもないくらいだと思います。

初めてのケーキバイキングに行きました。ケーキは無限には食えないことがわかった。

ICPCオンライン予選の出場手続きに関するゴタゴタをやっていました。

7月

めちゃくちゃいろいろとありましたが琵琶湖まで鳥人間コンテストを見てきました。いろいろというのは人間関係ということです。気になる人は僕に直接聞いてみてください。それはさておき鳥人間コンテストはめちゃくちゃアツかったです。特に人力プロペラ機部門で往復40kmの記録が達成された瞬間に立ち会えたときは本当に身体が震えました。

燻製にハマりました。とくにチーズとベーコンはおいしかったですよね。

この時期人間関係がアとかいうツイートが散見されるけどなにかあったっけ・・・。全然思い出せないんですが。ファッションの一環としてつらいとか言っているところはありそう。

思い出したんだけど本当に人間関係は糞だと思っていました。

最後に劇場に行ったのは劇場版SAOだったとおもっていたんだけど7月に魔法科高校の劣等生を見に行っていたらしい。まじで覚えてなさすぎる。お兄様がひし形になって空を飛ぶシーンしか覚えてない。そもそもどんな話だったっけ???

学内生向けLT大会を開催するために主に広報関連で奔走していました。

8月

結果的に学内生向けLT大会は成功だったと思います。そろそろ第2回やりますか???次は私と面識がない人が数人いると嬉しいなあと思っているんだけども・・・

ドラクエXIが発売しましたね、そういえば裏ボスをいまだに倒していないことをおもいだした。レベリングをしないといけないゲーム基本的にできなくなってしまった。歳ですね

MCC夏合宿にいきました。また車借りて。バカじゃん。帰りに御殿場を経由してさわやかのハンバーグをくって帰ろうと思っていたけど15時くらいにいったのに3時間待ちといわれて諦め足柄SAで海鮮丼っぽいものを食って帰りました。ハッカソンでは何作ったっけ。あ、mbedと圧電スピーカーでテトリスの音楽を流しました、以上。

天文部でも夏合宿にいきました。面白いことは色々とあったけどここに書けるような話ではないし、この話がウケるような人には大体100回ずつくらいは話した気もします。どうしても気になる人だけ個人的にきいてください。

月末にトラコンがありました。2回目なのにあまりふるわなかったですね・・・。懇親会でとんでもなく失礼なことを言ってくる人がいて気持ちになりました。あの人は酔っ払っていたのではないか?そうだと思いたい。あんなに失礼なことを素面で言ってくる人がいるなどということを私は信じたくはない。

そして人間関係です

9月

自分自身の評価について考えました。周りの人間、必要以上に自身を過小に語ることが多い気がします。これは絶対に損してるし、少なくとも自分のできることくらいはできるといったほうがよい。

FF14のオーケストラコンサートに行きましたね。めっちゃすごかった。親の声より聴いた曲がいっぱい流れました。

観測合宿と称して阿智村に行きました。日本一星が見える場所らしい。東京では考えられないくらいたくさんの星が見えた。天の川も見えた。流星群でもないだろうに流れ星が流れていた。

大田スタジアムで野球をしました。初ヒットを打った。

夏休みだったので大したことはしていなさそう。

10月

後期の講義が軒並みゴミ過ぎて完全に大学をやっていく気を失いました。

誕生日にウイスキーが3本届いて最高になりました。ありがとう。

特にパクチーにハマった。うんちが緑色になるくらいパクチーを食った日があった。最悪ですね、ごめんなさい。またパクチー鍋食いにいきましょう。

富士川で初ラフティングをしました。すごい雨が降った次の日で川が増水して危ないと思っていたんだけどスリリングな感じがあってよかった。帰りは沼津によって海鮮丼を食べて三浦半島を周遊して帰ってきました。あのドライブはめっちゃ楽しかった。また行きましょう。

この月4,5回焼肉を食った気がする。

そういえばシス製の相方がミーティングのときに自分のこと普通にぐらぽむって呼ぶんですよね!!いいんだけどさ!!!別にいいんだけど!!!!!!

11月

虚無の月です。

多分とにかくしんどくて、各位をつれて酒を飲みまくっていた覚えがあります。布団に入ってから入眠まで平均1時間くらい掛けていた自信がある。お世話になりました。私は元気です。

12月

11月と比べて予定がありすぎて破綻していました。

11月につづいてコミュニケーションに飢えていました。1人でいることが耐えられませんでした。病み期じゃんキモ。

カレンダーを見ると完全に酒を飲みすぎているなあと思います。19日以降は1週間以上に渡って毎日酒をのんだ。最悪ですね。

情報工学特別講義(データマイニング)とかいう虚無の集中講義がありました。

とにかくいろいろなところに出かけました。特に突貫ふたご座流星群ツアーは良かった。1時間に100個近くの流れ星が見えた気がする。去年なら多分1人で行っていたんだろうなあと考えたら嬉しくて涙が出てきました。

総括

後半ややグダりましたが、記憶に新しいところだとは思いますのでご容赦ください。2017年、いろいろなことがありすぎて疲れました。

2018年はもうちょっと気楽に生きていこうと思います。

明治神宮で大御心をいただきましたが「しのびてもあるべきときにともすれば あやまつものはこころなりけり」だそうです。忍んでいきたいと思います。

*1:そして「俺の言うことを聞くな」

*2:縦じゃないじゃん

*3:こういうことを言うと人間に嫌われます

*4:1024回ではないです

人間性とか社会性とかの話

この記事は MCC Advent Calendar 2017 - Adventar の19日目の記事です。


※いちばん大事なこと※

これからつらつらと人間性とか社会性について述べることになりますが、本質は「こういう記事を読んでも自分を曲げないでほしい」ということです。私はたとえ軽薄であろうと頑なな自分をもっている人が大好きです。

はじめに

師も走る12月にはいっていよいよ年明けまで数えるほどとなってまいりましたが、皆さんいかがお過ごしでしょうか。

この記事を書くに至った経緯ですが、この2017年、「これは人間性だなぁ」とか「これは社会性だなぁ」とか思うことがとても多かったことから来ております。

皆さんも人間関係に苦労されている方、多いのではないでしょうか。そう、おまえだよ!おまえ〜〜〜〜〜!!!!!*1

人間性

にんげん‐せい【人間性】
人間特有の本性。人間として生まれつきそなえている性質。人間らしさ。

辞書でひいてもよくわからないですよね。

人間性ってなんでしょう

承認の話

最近、所謂匿名質問システム流行ってますよね。(自分もやってますけど)

質問を受けることで他者によって自己の存在を承認されます。質問をもらうと安心されるでしょう?意外と素直に質問箱とかやってる人、「人間らしさ」あっていいですよね、好き。

主張の話

多かれ少なかれ誰にでもあるはず。

例えば、今自分がこうやって長々人間性や社会性について書いているのは主張ですね。

生きていれば主張をする機会というのはままあるのでムダにしないほうが良さそう。主張というのは人間性(だと自分は思っている)なので意見は何であれ主張することは自分の人間性を主張していることになります。*2

社会性

しゃかい‐せい【社会性】
1 集団を作って生活しようとする、人間の根本的性質。
2 他人との関係など、社会生活を重視する性格。また、社会生活を営む素質・能力。「社会性のない人」
3 広く社会に通じる性質。社会生活に関連する度合い。「社会性の強い文学」

ここで言う社会性って2のことでしょうか。社会性とか人間関係とか、そういう感じですよね。(人間性はてなワードにあるけど社会性はないんだね)

身の回りにいる人は少なくとも、多かれ少なかれ社会性が皆無というわけではなさそう。コミュニティの大小はあれ関わる人間がいない人は探す方が難しい気がします。とはいえ誰とも関わらない人はそもそも認識されてないし難しいですよね。「ブラックホールは見えない」みたいな話かな。

同調の話

社会性っぽいですね。

同調、するよね。1人って寂しいじゃないですか

どうしても同調しなきゃいけない場面というのはありそう。外面は同調しつつ自分の主張は曲げないでほしいなぁ・・・ あとでいくらでも愚痴をこぼす場所はあると思います。というか作っておいたほうがよい。話はそれるけど自分の本音を言えるコミュニティは大切。

とはいえみんな同調しかしなかったらコミュニティが成り立たなさそう。個人の社会性の話するの難しくない?

忖度の話

最近流行ってるやつですね。

口に出そうと思ったことをすぐ言う人は苦労しているイメージがある。忖度ではなくても喉元まで来た言葉、もう一度考えてから発声するようにしたらよさそうだなぁと思うことがあります。

考えすぎて何も言えないみたいなパターンもあるよね。主張の機会を損失していそう・・・・

適度

書いてて思ったんですけどこれらはやりすぎてもやらなさすぎてもダメそうですね。主張しすぎるのは鬱陶しいけど主張しなさすぎるのもよくなさそう。忖度しないのは論外だけどしすぎるのも問題。

人生を過ごしていく中でうまい具合を見つけていくしかないんだろうなぁ。人間、失敗を繰り返して成長していくって言いますしね。

終わりに

冒頭にも述べましたが、もちろんこれは私の主張であり、自分は曲げずに「適度」に汲み取っていただければと思います。ちょっと上から俯瞰して、こう思ってる人間もいるんだなぁと思うと気持ち楽になります。*3

人間関係苦労していそうな人、この記事を読んでなにか感じるものがあれば幸いです。

物申すぞ、という人間、かかってこい!!!たまには喧嘩でもするのもいいと思います。


明日(今日)は@GEN52462138で「nanopi neoを買ったんでセットアップしてみた」です。

遅刻して申し訳ありませんでした。あと6日ですが最後まで頑張っていきましょう。

adventar.org

*1:お前だよ!!

*2:日本語が怪しい

*3:諸説あります

CrystalのプログラムをRaspberry pi上で動かす

この記事は MCC Advent Calendar 2017 - Adventar の7日目の記事です。

早くも3投稿目になりますががんばって行きましょう。

パッと記事の投稿予定をみると技術系の記事が多かったので同調圧力に負けてそういった記事を書いてみようと思います。

背景

ラズパイのGPIOとマイコンを連携(もしくはGPIOをそのまま使うなど)して、センサーから色々データをとったり家電を操作しようということ試みる。

インターフェースとしてWebサーバーを置こうということを思い立ったが、Railsとかいじるのも癪なのでなんか面白そうなWebフレームワークを探し始める。

Rubyライクな「Crystal」という言語でつくられた「Amethyst」というフレームワークを見つけたので使ってみようということになった。

そうメジャーな言語ではないと思うがCrystalについては最近いろいろな人がいじって話題にしているのでそちらを参考にしてほしい。

ポストRubyだなんだといっているがそういうのには興味なくて、使いやすい場面で使ってくれといったかんじ*1

問題点

紆余曲折*2あって、とりあえずラズパイにCrystalのコンパイラを乗せることにするがここで問題が発生する。

ARM向けのバイナリがない

さらに

コンパイラはCrystalで記述されている

対処

ザッと調べてみたところ、以前に「ARM向けコンパイラをつくる」というissueが立っていた。

このissueは「クロスコンパイルオプションを実装する」というissueにmergeされていた。

つまり、クロスコンパイルで自分でARM向けバイナリをビルドしろということか・・・

# helloworld.cr
puts "Hello world!"
$ crystal build --cross-compile -D arm --target=arm-unknown-linux-gnueabihf helloworld.cr --release --mcpu=arm1176jzf-s

今回つかったのはRaspberry pi zeroでCPUがARM1176JZF-Sですが、2や3ではCortexだったと思うのでまたオプションが変わってくるとおもいます。(試していないので性格なことはわかりませんが)

コンパイルすると、ターゲット環境で以下のコマンドを実行しろよ、といった雰囲気の文字列が表示されます

cc 'helloworld.o' -o 'helloworld'  -rdynamic  -lpcre -lgc -lpthread /usr/local/Cellar/crystal-lang/0.23.1_3/src/ext/libcrystal.a -levent -lrt -ldl -L/usr/lib -L/usr/local/lib

なるほど、ターゲット環境にもCrystalのソースはあったほうがいいわけだな。

いい感じにgit cloneして先程のコマンドを実行したところ実行形式バイナリがポンと吐かれました

$ ./helloworld
Hello world!

やりました。

まとめ

時間がなくてなんとかHelloWorldをするところまでしかこぎつけられませんでしたが、いい感じにやればいい感じに行くんじゃないかなという気がしています(がどうなんでしょうか)

なにはともあれ近いうちにAmethystを動かすところまで漕ぎ着けたいです。


明日の予定はありません!!!!各位!!!

adventar.org

*1:といった点ではWebに静的型付き言語はどうなのかと思うところもあるが...

*2:かどうかは諸説ある

リアルお料理対決をした話

この記事は MCC Advent Calendar 2017 - Adventar の4日目の記事です。


料理とは 果てなき荒野そのものである

美味しさも不味さも、数限りなく点在する荒野……!

f:id:gurapomu:20171204192830p:plain

背景

先日、スッと合宿所に行ってみたら、料理勝負などという面白そうなことをやっていたので参加してきました。

開始

形式は団体戦で1チーム5,6人で3チームに別れて勝負をすることになりました。

お題はホットプレートを使った料理ということで、自分のチームは餃子をつくることになりました。最終的な料理名は「特製!和風餃子」というところにまとまっています。

材料

だいたいの材料は以下のとおりです。餃子100個分の分量になります。

  • 餃子の皮 100枚
  • 豚ひき肉 300~400g
  • 白菜 1/2~1/4玉(1/2では多いが1/4では少し足りない気がする)
  • 大葉 10枚
  • 干し椎茸 1パック
  • 醤油
  • ほんだし
  • ごま油
  • (おろし生姜)

当日、おろし生姜を入れる予定だったのですがすっかり買うのを忘れていました。なんとかなりましたが、入れたほうが味にまとまりが出るはずです。

調理

まずは、干し椎茸を水につけて戻しておきましょう。戻すのに使った水は、タレを作るのに使うので絶対に捨ててはいけません!

次に、タネを作っていきます。まずは白菜を刻みます。大きさはお好みですが食感が欲しい人は粗みじん切り(だいたい3~4mm角程度)にしておきましょう。大葉は横に細く切っていくと雰囲気が出て良いです。

材料を切り終わったら用意した材料を、餃子の皮を除きすべて混ぜ合わせてください。さっき戻したしいたけも忘れずにね!

タネが出来たら、餃子の皮で包んでいきます。料理の味というのは良くも悪くもビジュアルによって左右されがちです。美味しく味わってもらうにはやはりきれいに包んだほうが良いでしょう。コツとしては、皮の片側のみを折り込んで包んでいくことです。

さて、餃子を包み終わったらホットプレートを温めます。230~240度に設定してください。(ホットプレートって温度が数字で設定できるのでコンロより定量的に説明しやすいですよね)十分に鉄板が温まったら餃子を素早く乗せましょう。ジージーと焼ける音がしたら熱湯を注いで蓋をします。このとき、お湯はだいたい餃子の1/5~1/6が浸かるくらいが良いと思います。

水分を飛ばす間に、タレを作ってしまいましょう。これは簡単です。最初にしいたけを戻すのに使った水にほんだしを加えます。(旨味の相乗効果でトリプルパンチです)さらに醤油をくわえて味をつけます。少しずつ加えて、塩気はお好みで調整してみてください。

鉄板にいれたお湯がなくなったらいよいよ仕上げです。蓋を取りましょう。焦げ目はお好みですが、個人的には和風餃子にはあまり焦げはない方がいい気がします。お好みのところで火をとめて完成です!

実食

しいたけやほんだし、大葉の風味が和風にまとまって素晴らしい出来だったともいます。もう2つのチームは「餃子チーズタッカルビ」と「りんご入りホットケーキ」をつくってくれました。どちらも美味しく、大満足だったと思います。

f:id:gurapomu:20171205092259j:plain

まとめ

そういえば、お料理対決とかいいつつ勝負をつけてなかったなーと思います。まあおいしかったのでいいか。

自分が写真とってなかったのも心残りですね。当日参加して、もし写真撮っている人がいれば、私宛に送ってくれればこの記事が華やかになるので是非よろしくお願いします。


明日は@GEN52462138くんです!よろしくお願いします!!!

TUATMCC 2017の総括

この記事は、MCC Advent Calendar 2017 - Adventar 1日目の記事です。


皆さんおはようございます.

TUATMCC,元部長のぐらぽむでございます.

本日は,2017年ももう12月ということで,少し早いですが2017年のMCCの総括をしていきたいと思います.

後輩の皆には,ぜひこの記事を来年提出する活動報告書等に活用していただければと思います.


1月

ICTSC7の予選に出ていました.HTML/CSS問題を説いていたんだけどunicodeの半角スペースが紛れ込んでいてキレた思い出.個人的には色々あって忙殺されていました.

2月

MCC初の合宿に行きました.LT大会とハッカソンをやって酒をのんで寝たのでもう最高だった思い出です.

3月

ICTSC7の本選に出場していました.ぐわーーっとやったけど新人賞(総合4位)でしたね.悔しい.ちなみに予選順位は2位でした:thinking_face:

春季休業中なので他には特になにもない気がします.

4月

新入生歓迎シーズンでしたね.今年は新入部員が多かった気がするし,現在残っている人間も例年より多い気がするので後輩諸君にはぜひ大事にしていってもらいたいです.

5月

新歓LTをやりました.みんなそれぞれユニークな話題で興味深かったです.ちなみに自分はPPTをつかったクソアイコンの作り方と野球の話をしました.

それから,各種講習会をいろいろやりましたね.ありすぎてわけわからないことになりかけてたけど,参加してくださった方々ありがとうございました,開催してくださった方々お疲れ様でした.経験を活かして,来年は是非教える立場で,というのも面白いと思います.

6月

めちゃくちゃ遅くなったけど確定新歓をやりました.寿司とピザを食ってお話をするだけの会でしたが...体調不良で途中抜けして申し訳なかったです.

7月

学内向けLT大会を開催しました.主に自分のコネクションを使ってでしたが,サークルというくくりを抜けて専門外の人にも情報発信する機会ができてよかったのではないかと思っています.是非第2回も開催したい!

それから,ICPC国内予選にも出場しました.MCCからは3チーム出ましたが,一番成績の良かったチームは大学別順位で2位を記録していました.つくば大会,タイ大会も近くに控えているので是非頑張って欲しいですね...!

8月

MCC夏合宿を行いました.花火が見れる部屋でとてもキレイだったとのことでした.一方では地下室にこもってハッカソン中「なんか外バンバンうるせえな」「花火じゃん,風情もへったくれもねえな」という一幕もありました...

それからICTSC8にも出場しました.4人エントリーしたはずなのに予選を解きに来たのは自分含めて2人という惨劇.「これは予選敗退ですね」と言っていたものの,滑り込みセーフで本選出場,ですが残念ながら入賞には至りませんでした.総合順位はたぶん5か6位くらいだったと思います.無念

9月

ツイッターとかを見返しましたが,MCCっぽいイベントは何もなかったです.

10月

こちらも何もなさそう.MCC秋やる気あるの??????

11月

農学部学祭に出展しましたね.いろんなゲームを展示したり風船を配布したり,子供に大人気だったなーというイメージです.

まとめ

去年に比べて何かが大きく変わった一年だったと思います.合宿を始めたり,学内向けのLT大会をやってみたり,春の講習会を増やしてみたり.

2017年もいよいよあと1ヶ月となりましたが,頑張っていきましょう.

あ,今年こそアドベントカレンダー完走しましょうね!!!!

 

明日の記事を書く人は...いません! おい!!!!!!!!!!

CentOS7のカーネルをソースからビルドする

背景

俺はUbuntu16.04のVagrantfileをcpしたはずだったんだがいざあげてみるとaptが使えず何が起こったのかと思ったらCentOS7のVagrantfileをcpしていた。(ブチ切れた

本題

めんどうなのでそのまま始めた

Vagrantfile

Vagrant.configure(2) do |config|
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "1024", "--cpus", "2", "--ioapic", "on"]
  end
end

諸々必要なやつをいれる

$ apt -y install gcc bc openssl libncurses5-dev

ソースを落として解凍

$ cd /usr/src
$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.54.tar.xz
$ tar xvf linux-4.9.54.tar.xz
$ cd linux-4.9.54.tar.xz

コンフィグを作成してmakeとinstall

$ make oldconfig
$ make menuconfig
$ make && make modules_install && make install