RubyKaigi 1日目レポ
昨日から仙台国際センターで開催されているRubyKaigiに参加してきました。簡単に1日目のレポをまとめます。
基調講演
まつもとゆきひろ氏のKeynote。
今回は「ことわざ」をテーマにした講演でした。
・名は体を表す
名前って重要だよね、という話
プログラミングは概念で構成されているものだから、名前付けがとても大事。
概念をよく理解していれば、名前付けが比較的簡単になる。つまり、概念を理解できなければイケてる名前をつけるの難しい、と。 名前は使い勝手へと結びつき、ユーザビリティにもつながる。
これからはグーグラビリティを意識していくことも大事。 GoとかSwiftは一般的な名詞だからグーグラビリティが良くない。そんな名前にしてもやっていけるのは裏に巨大なスポンサーがいるからで、僕らはそうではない。NokogiriとかRuby on Railsとか、名刺を組み合わせたりTypoを変えたりするとグーグラビリティ良くなるよね、と。
・時は金なり
プログラマーって忙しいよね。時は金なりだからコードを効率的に書くことってとても大事。 例えばStringクラスだと、使えるメソッドがズッラァァァァァと並んでいて、やりたい処理はだいたい載っている。
僕はRubyのそういうところが好きです。
・塞翁が馬
Ruby is dead every year.
「Rubyは毎年死んでいる。それでも何度でも蘇るさ!」by Matz
これ以降はスライドのみ載せます。 (内容まで描きたかったけど時間が...)
bancor: Token economy made with Ruby
Deep Learning Programming on Ruby
All About RuboCop
RubyGems 3 & 4
www.slideshare.net
A parser based syntax highlighter
After PartyでMatz氏とツーショットを撮ってもらって感動中です。初めてRubykaigiに参加してみて、Rubyのコミュニティって素敵だなぁという感想でした。 2日目3日目も楽しみです。
※2日目のレポートは気が向いたらやります。
RubyKaigiに行ってきます
空港行きのバス車内からこんにちは。
木曜日から開催されるRubyKaigiに参加するため、仙台へ行ってきます。人生初東北。
前々から行きたいと思っていた中、今回が初めてのRubyKaigi。すでにワクワクが止まりません。 だいたいどのセッションを聞くかは決めてますが、とりあえず1日目はこんなスケジュールで動く予定。
朝は早めに起床、受付開始まで仙台市内を散歩。
10:30〜 基調講演 by Matz
13:00〜 bancor: Token economy made with Ruby
Bancor Protocolやトークンエコノミーについて。
個人的にトークンエコノミーにはとても興味があるので、なかなか楽しみです。
13:50〜 Deep Learning Programming on Ruby
いい感じのパフォーマンスが出るディープラーニングモデルをRubyで書いたという話だそう。ディープラーニングの話は聞いてて面白いのでこれもまた楽しみ。
14:40〜 All About RuboCop
いつもお世話になってます。コーディングスタイルをチェックしてくれるRubocop開発者直々の講演。”we'll go over everything you need to know about RuboCop”とのこと。
15:50〜 RubyGems 3 & 4
RubyGems 2.7の新機能や、RubyGems3や4に向けたロードマップについて。
16:40〜 A parser based syntax highlighter
たまーにうまくシンタックスハイライトしてくれない場合があるよね、つよいシンタックスハイライターを紹介するよ。みたいな話だそう。
17:30〜 LT
12人のRubyistの方々によるLTです。
19:00〜 Official Party
オフィシャルパーティ!めちゃくちゃ人見知りしますがコンフォートゾーンの外に冒険に出てみます。
と、こんな感じ。
人生初東北なので、前日入りして少し観光してからRubyKaigiに臨みたいと思います。では行ってきます!
Ethereumをはじめてみる④
今日はトランザクションの中身を見ていきます。
トランザクションを見てみる
トランザクションの詳細を見たいときはgetTransactionコマンドを使う。
引数に前回作成したトランザクションのIDを入れてみると、
> eth.getTransaction('0x87dbbc27ec15bb0eeed0d1e295d675332add2d43dd01b7ea7e40a9ed7648aea5') { blockHash: "0xeeafe2c1d8df81172dbe606c42ab6b10ee126c23e7a49fd522d68406f7d4da3e", blockNumber: 64, from: "0x30daa337a6696d7c007b32374c34c3362fe61bbf", gas: 90000, gasPrice: 18000000000, hash: "0x87dbbc27ec15bb0eeed0d1e295d675332add2d43dd01b7ea7e40a9ed7648aea5", input: "0x", nonce: 1, r: "0xa9d968d49f647d76f240401ff1a2385da1df24f07210b86ea8da9264f869d055", s: "0x5db2bf4e798c6b0d6a2ac6c6dc5c261cd485c70e0956fde48b9589cab48c6040", to: "0x43ceb2d08d417af3d897b5f92a68c362c935605a", transactionIndex: 0, v: "0x1c", value: 10000000000000000000 }
こんな感じ。
詳細を見てみる
blockHash:
このトランザクションが含まれるブロックのハッシュ値
この値を引数にしてブロックの詳細をみることもできる。
blockNumber:
ブロック番号。このトランザクションが何番目のブロックに含まれているか。
from:
誰がトランザクションを実行したか。送金元
gas:
gasの上限値
gasPrice:
送信者が払う手数料的なもの。
トランザクションの処理時にマイナーへ支払う1gas当たりの手数料。
hash:
トランザクションのハッシュ。
ブロックのハッシュではない。
input:
スマートコントラクトがあればここに入る。
nonce:
トランザクションのnonce。
ブロックのnonceではないので注意。このnonce値より、次のトランザクションのハッシュ値が変わってくる。
r: ここ参照
s: ここ参照
to:
誰あてのトランザクションか。送金先
transactionIndex:
ブロック内でのトランザクションのインデックス。
v: ここ参照
value: 送金した金額
gasをもう少し詳しく
gasは、支払うgasの最大値。genesisブロックを生成した際に設定した数値で、今回は90000が設定されている。
対して、gasPriceはトランザクションが処理された際ににマイナーへ支払われる1gas当たりの手数料で、単位はwei。
今回のトランザクションでどれくらいのgasが使用されたかを見たい場合は gas / gasPrice を計算すれば良い。今回の例だと、
18000000000/90000 = 200000(gas)
200000gasが使用されたらしい。
コメントでなかじょさんにご指摘頂いたとおり、gasについて認識が間違っていた模様。
gasについてはまた調べ直してまとめてみます。