Ripple社のやったXRPのエスクローってなあに?

XRPエスクローの基本

Escrowとは預託という意味の単語ですが、実際の取引としてはXRPの移動を途中で凍結させるような扱いです。

AliceがBobに単にXRPを送る際に必要な情報はAliceの帳簿Bobの帳簿、そしてXRPの量だけでしょう。

AliceがBobにエスクローを利用してXRPを送る際にはAliceの帳簿とBobの帳簿、そしてXRPの量だけでなく、エスクロー終了解除時間キャンセル解除時間を付け加えられます。EscrowCreateトランザクションを発行するとAliceの帳簿から使えるXRPは減りますが、Bobの帳簿にはXRPは入りません。XRPは中空に浮いたままです。

エスクロー終了解除時間が過ぎると、EscrowFinishトランザクションが発行できるようになります。これはAliceもBobも、あるいはEscrowCreateの電子署名を知ってる人なら誰でも発行できます。すると中空に浮いていたXRPはきちんとBobの帳簿に入り、使えるようになります。良かったですね。

キャンセル解除時間が過ぎると、EscrowCancelトランザクションが発行できるようになります。こちらは発行するとAliceの帳簿にXRPが戻ります。こちらの解除時間を設定しなければ、キャンセルはできないようになります。

Ripple社が行なったXRPエスクロー

Ripple社はこの仕組みをXRPのロックアップに使いました。先の説明でAliceとBobとしたところを、両方Ripple社としてEscrowCreateしたのです。すると、エスクロー終了解除時間が過ぎてEscrowFinishトランザクションを自分で発行するまで、XRPは中空に浮いたままで、Ripple社自身も使えません。Rippleの取引所全部を壊すようなアップデートでもしないと、これはもう仕組み的に不可能です。もちろんそんな事をしては信用が失墜し価値が0になるでしょう。これで自身の信用を人質にXRPのロックアップが完了したわけです。めでたしめでたし……

https://xrpcharts.ripple.com/#/transactions/686FCA8F58041156482DABA782E053979626EB4126F3BFE3B9E401FBC143586A

……ん?
…………????

終了解除時間じゃなくてキャンセル時間を設定してしまっている。つまりいつでもEscrowFinishを発行してXRPを引き出せる!!! 嘘吐き!!!!!
とちょっとした騒ぎになり、
https://www.xrpchat.com/topic/13626-an-update-on-ripples-xrp-escrow/ にてJoelがかる〜く謝罪して
https://xrpcharts.ripple.com/#/transactions/F1CFA020DB5DF2AF3E06D9E84B50EFAA2854D7269238C1F188BE007C9D2B5FB8 の通り今度こそロックアップが完了したのでした。あいつらアホやろ。めでたしめでたし。

1/6にEscrowFinishが発行され、Ripple社がこのXRPを動かせるようになりました。
https://xrpcharts.ripple.com/#/transactions/D1D8956E3DE11F71D038807D5F665A985276209D0920594900436A37413741A0

補遺

ソースコード読んでるとキャンセル時間と終了時間の他にsfConditionというのもEscrow関連のトランザクションに入ってますが、ここでのConditionというものは https://tools.ietf.org/html/draft-thomas-crypto-conditions-03 で仕様策定中のcrypto-conditionです。分散基盤上でトランザクションが同一のものであると確認するための署名でエスクロー自体とはあまり関係がないので説明を端折ってます。

実際には各種トランザクションはいつでも発行できますが、解除時間が過ぎてないと不正トランザクション扱いで無視されます。

他のロックアップに使用したEscrowCreateトランザクションhttps://whyripple.com/ から確認できます。

SWIFTも全銀も嫌いなのでおもしろいプロジェクトとして観察してましたが、最近はファンもアンチも両方わりと脳内お花畑でそういう下々の週刊誌レベルの話題も含め全体として好きです。

1-Bit Rogueのご紹介

You are lucky! Full moon tonight.
Roguelike Advent Calendar 2016 15日目の記事です。

今回は最近ちょっと遊んでいるローグライクゲーム、1-Bit Rogueを紹介します。
1-Bit Rogueスマホ用アプリで、その名の通り1bitカラー、つまり白黒のドットで描かれたお手軽ローグライクです。
職業は5種類、初めは攻撃力ボーナスがあるけれど魔法が一切使えない剣士のみしかつかえません。4つの宝を集める事が目標のようなのですが、まだクリアしていないのでその先に何があるのか……
上下左右スワイプでその方向に移動、一箇所プッシュで足踏み、その他選択はタップ操作となります。1フロアのサイズも携帯画面にあわせてせまく、敵も数体しか出てきません。敵を倒すと体力の最大値が増え、より多くの戦いを生き伸びられるようになります。次のフロアに進むにはスイッチを押して階段を探さなければなりません。

最序盤の強敵コボルド
ダンジョンには宝箱も配置されており、数回で使い捨てとなる武器や魔法、回復薬などが入っています。たまに出てくる像は天使像と悪魔像、それぞれお金を捧げるとプレイヤーを祝福して良い効果を与えてくれたり、呪って悪い効果と良い効果を両方付けたりする事ができます。

宝箱から出るものは図鑑に記録される。ちょっとした収集要素。
さて、わからないなりに手探りで進むとやられてしまいました。ですがちょっと待った。CMを最後まで見ると一度だけ生き返る事ができます。無料ゲームでCM視聴とゲームを上手く組みあわせていて、ちょっといい感じですね。まあ私はいつも飛ばして死を受け入れてるんですが。ごめんね開発者、ビールおごるから許して。

死んでしまった。だが終わりではない。
なぜいちいち生き返らせないのか、それは最近のお手軽系ローグによくある要素、キャラクター成長の時間が待ってるからです。死ぬ時に持っていたお金を使って、別の職業を解禁したりキャラクターの初期体力を増やしたりできます。1つ目の宝まではなんとか無強化で入手しましたが、正直強化前提のバランスです。特に剣士と最初に解禁される魔法使いは各々魔法と剣が使えず勝手に売り払われるのでお金が貯まって良い具合にこのゲームの楽しみがわかります。

魔法使いがちょい楽しくて僧官すら解禁してない
あんまりがっつりプレイはしてないのですが、手持ち無沙汰な時にローグライクができる1-Bit Rogue、一度遊んでみてはいかがでしょうか。

1-bitが寂しい時には3-bitモードもあるぞ!
https://itunes.apple.com/jp/app/1bittorogu-danjon-tan-suorpg!/id1128070374?mt=8

人生おそらく最後のある地域の料理を食べた

This blog post may have shocking photo, but paying respect for their local culture we use the original photo image.
このエントリにはショッキングな写真が含まれているかもしれません。しかし現地の方への敬意を込め、加工無しで掲載しております。

これまでアジアの国や日本内でも珍しいものを食べれる時は食べ、一部はブログで紹介してきた。カエル、蜂の幼虫、セミ……等いろいろあったが、また珍しい地域食を食べてきた。今回はアジアの亜熱帯地域の島国の、それも一部地域のみで伝統的に供されるという料理を食べる機会を作ったので紹介したい。実は私もその地域からさほど離れていない場所で育ち、現代では食文化は結構似通ってきている。だが件の料理、ここではMと呼称する、は他地域では敬遠されており、生まれてこの方食べたことがなかったのだ。

まずそのM屋へ行くと、鉄板が備え付けられたテーブルに案内される。

写真ではちらっとしか写っていないが小型の金属ヘラをコテと呼び、これを用いて食べる。箸で食事をする文化の日本に住んでいる方からすると異様な光景かもしれないが、M屋ではこれが普通のようだ。


まず野菜を乱雑に切ったものや好みのものを鉄板で焼く。今回はその店で一番出ているという牛すじを選んだ。写真で見るとなにかきちんとした料理が始まりそうだが、実際には既にここで野菜類に味付けがされてないという違和感を感じた。どうやらかなりプリミティブな料理のようだ。原始的な料理は得てしてできあがりに素材の形が残りやすい。ゲンゴロウの姿焼きやセミの素揚げのようにちょっと見た目が食べにくい食材が投入されない事を祈りつつ現地の方の手際を眺める。


すると次に投入されたのはわずかな小麦粉と出汁、そしてソースを混ぜたものだった。そう、不思議なもので、この地域では昔から出汁は黒くする。麺類には醤油を入れ出汁を黒くするのは知っていたが、ここではソースが用いられるようだ。同じ国でも上質な出汁を取る技術と余裕があった地域では澄んだスープを使った料理が多いが、この地域では細やかな出汁の味を黒い別の調味料で潰す事を良しとする。地域で信仰される呪術のようなものがあったのかもしれない。



元の野菜類とさきほどの汁を混ぜると、あとは適当に自分で野菜を切るよう指示され、店員は去ろうとする。まさかと思い尋ねてみるとこれで完成との事だった。写真を再度見て、嘘だろ……? と唖然としている方もいるだろうが、私は断じて写真の選択ミスなどしていない。このどろどろの、道端でたまに見る奴からアルコールの匂いを抜いたものが完成品だ。

猫を飼っていた方は知っているだろう。老いた猫は水を飲む事を面倒くさがり、脱水により腎臓の病気になりやすい。それを予防するため、餌に湿り気を多くし、少しでも水分補給させようとする。ペットフードにカリカリした餌からべちゃっとした餌まで取り揃えてあるのはそのためだ。
この地域では流水を忌避する文化があるようで、今でも多くの川はコンクリートで蓋をされ人々の目に触れないようになっている。それで脱水となりやすい人々が猫の給餌と同じように生活の工夫として水分の多いが液体ではない料理を食べるという食文化ができたのだ。事実、この料理以外にも残る近隣地域の郷土料理がhttps://www.google.co.jp/search?q=%E3%81%97%E3%82%82%E3%81%A4%E3%81%8B%E3%82%8C&num=20&tbm=ischの通りの見た目だったりする。どれだけ水が嫌だったんだ、この辺の現地人はと呆れるほかない。

さて、コテで鉄板からすくい取り、口に運ぶ。味は……まあ材料から想像できる通りだ。目をつぶれば駄菓子のように思えなくもない。
牛すじ以外にも多様な種類があるらしいが、私にとってはこれが最後の一食だろう。


このあたりでアジアの屋台や現地郷土食を食べる時には念の為多少度数高めの酒を飲むと良いという友人の言葉を思い出し、ハイボールを飲みつつ黙々と片付けた。観光客向けの店だったこともありしめて1728円。ごちそうさまでした。


あ、そうそう、これはもんじゃ Advent Calendar 2016 - Adventarの10日目でした。他のもんじゃやもんじゃ以外に興味のある方はアドベントカレンダーをご覧ください。

嘔吐物凝固剤 オウトロック

嘔吐物凝固剤 オウトロック

SoylentとCOMP両方試した

Soylent: https://www.soylent.com/
COMP: http://www.comp.jp/

両者とも完全栄養食で、元祖のSoylentはFDAの基準をベースに、日本の後発であるCOMPは厚生労働省の基準と一部微量栄養素はWHOかIOMかの基準(多分)で1日のカロリー分摂取したときに各種栄養素の摂取量も1日分かそれ以上満たせるようになっている。
両方とも賞味期限は1年のはずだが、Soylentはここのところ多少倉庫に溜まったものを出荷するので船便だとBest by dateが近く不便になった。アルミパウチの粉なのでそう気にすることはないが、せっかくなのでtwitter広告で出てきたCOMPを使ってみて、完全にCOMPに乗り換えようかなという気分になってきた。
味についてはまだ初期バージョンの穀類の香りが抜けないSoylentに対し、豆乳風味と名乗るCOMPに軍配が上がる。飲むと豆乳とは違うとすぐわかるのだが、例えがほかに無い。溶け易さもCOMPの方がよい。COMPは粉製品しかないが、Soylentのコーヒー味が好きならば、微糖のペットボトルコーヒーあたりと混ぜればよさそう。
400kcalパウチがすごく便利なのでこちらを充実させていってほしい。

Gentooホストで仮想環境を動かした

以前(qemu-kvmqemuにマージされてない時代)はqemuを生で使っていたのだが、libvirtを介してみることにした。まともにサービスをする仮想サーバを建てるのではなく、試しにプログラム走らせるテストアンドスクラップ用途なので仮想環境からホストに直接接続できたらセキュリティ的にまずいとかそういった話は一切無視している。また、通常そのような用途ならカーネルとか触らない限り今ならlxcのようなコンテナで良いし、それならlibvertじゃなくdockerがある。あくまで趣味的な手順記録である。


app-emulation/libvirtqemuとvirt-networkのUSEフラグを立てる。ゲストの入れ方によってはlvmも付ける。

# emerge -av qemu libvirt virt-viewer

多分下のようにカーネル設定に文句を言われるのでコンフィグ変えてホストのカーネルコンパイル

 *   CONFIG_NETFILTER_XT_TARGET_CHECKSUM:	 is not set when it should be.
$ qemu-img create -f qcow2 init.img 10G

適当にディスクイメージを作る。qcow2からrawへのコンバートもできるので、初めは適当にqcow2でok。

# /etc/init.d/libvirtd start

USE="virt-network"をたてていればこれで勝手にブリッジとかを作ってくれている様子。libvirtdがネットをシャットダウンまで面倒見るかどうかについての設定が/etc/conf.d/libvirtdにあるので LIBVIRTD_KVM_NET_SHUTDOWN="yes" としておく? しなくてもきちんとネットを管理しているような気がする。

# virt-install --name "InitVM" --ram 1024 --disk init.img,format=qcow2 --cdrom [debianのnetinstとか適当な.iso] --network network=default

libvirtが準備してくれたnetを使う時はroot権限じゃないとnetまわりで文句を言われる。
USE="virt-network"を立てていなかったら適当に手動でブリッジを作って使う。
sshdとかはこの段階で入れておけるなら入れておく。改めて言うがセキュリティ面は無視しているので便利なら余計なデーモンも入れているし、パッケージも精査しない。適当だ。

# virt-clone --original InitVM --name someVM --file=./someVM.img

これで毎回まっさらな環境をクローンしてきて使う。

# virsh start someVM
# virt-viewer someVM

これでゲストOSの内側から好きにできる。

[guest]# ifconfig | ip addr

で調べたipにsshで入ったりscpでファイルを送ったりして楽しむ。

# virsh undefine someVM

壊しすぎたらこれでさよならする。新しいクローンはうまくやってくれるでしょう……

噂の5ボタントラックパッド(Clickpad)の設定

Thinkpad X240 を買いました。
http://www.thinkwiki.org/wiki/Installing_Gentoo_on_an_X240
とりあえずGentooを入れますが、やはり新Thinkpadトラックパッドは噂通り乗り換え直後は使いにくいです。

# /usr/share/X11/xorg.conf.d/50-synaptics.conf
# This option enables the bottom right corner to be a right button on
# non-synaptics clickpads.
# This option is only interpreted by clickpads.
Section "InputClass"
       Identifier "Default clickpad buttons"
       MatchDriver "synaptics"
       Option "SoftButtonAreas" "60% 0 0 5% 40% 60% 0 5%"
       Option "AreaTopEdge" "4%"
EndSection

Option "SoftButtonAreas" は合計で8個の引数をとり、はじめの4つが右クリック、後の4つが中クリックの領域を指定します。0は領域の区切りを付けないという意味で、左上が原点でx軸正方向が右、y軸正方向が下(手前)、上の引用例だとx軸60%より右でy軸5%より上が右クリックキー、横40%-60%で縦5%より上が中クリックです。
AreaTopEdgeが4%なのでマウス操作と1%分被っている気がしますね。どうでもいいですが。


Thinkpadでは通常トラックパッドでマウスは動かさないので、快適なクリックのためにほとんどの領域を使いましょう。

Section "InputClass"
       Identifier "Default clickpad buttons"
       MatchDriver "synaptics"
       Option "SoftButtonAreas" "60% 0 0 70% 40% 60% 0 70%"
       Option "AreaBottomEdge" "1"
EndSection

これでおおむねT430sの感覚で適当に右親指を動かしても中クリックが誤発動せず右クリックできるようになります。manも読まずにXの設定をネットからコピペして使ってたらそりゃ使いづらいわな、と反省しました。
でも設定変えてもかなりとまどう。大丈夫かこのThinkpad

追記 設定ファイル場所変更

/usr/share/X11/xorg.confほげほげ以下はアップデートとか起動とか何かのタイミングで上書きされるので、上記設定ファイルの中身に書いてある通り、あるいはman xorg.confとかの内容どおり/etc以下の適当なディレクトリに設定ファイルをコピーしてから編集する。

MonoGameってのがあるらしいので触った

最近会った人から聞いた何かを無差別に触ってる期間なのだがなんか情報少なそうだったののメモ。

http://monogame.codeplex.com/
MonoGameを開発したいならgithubからclone、MonoGameで開発したいならこのサイトのダウンロードでイナフ。

http://kcat.strangesoft.net/openal.html
Windowsだと32bit版(?) OpenALが要求されるのでOpenAL softをOpenAL32.dllみたいなファイル名にしてsystem32だかsysWoW64だかに突っ込む。

Xamarin Studio(旧MonoDevelop)でAdd-inとしてXamarinStudio.MonoGame_*.mpackを追加したらコードの雛形付きプロジェクトが作れる

雛形はゲームのメインループのみ。Gameのプロパティに応じてUpdateが60times/secとDrawが60fpsになるべくなるよう呼ばれたり、ただ単純に繰り返すように呼ばれたりするらしい。
その他の便利そうなクラスのリファレンスがあればよかったのだが、Textureとかその辺の使い方はXNAを知ってる前提なのかドキュメントがないような……。