RSS

日々のメモ書き

Debian Developerが綴るメモ

名古屋フンタ会2017#5メモ

5/13開催

  • 朝から雨がひどかったせいか人が少なくて落ち着いた雰囲気だった。運営は楽できた。
  • ディプロマシーできないかと思ったが体験卓と称して新規を連れ込んで2時間やった。
  • 暇潰しにComplettoを何回かやる。
  • 最後はOne Night Revolution。5ゲーム連勝したらなぜかブーイングだった。
  • 次回6/3です。https://nagoyajunta.connpass.com/event/56684/

CESSPOOL試遊会の感想

CESSPOOLの試遊イベントに参加できたのでゲームの感想。

そんなものをのぞく気になった経緯は省略。作者とも色々話をしたがそれを踏まえての感想。

CESSPOOLはマフィアになって違法薬物を売りながら勢力拡大を目指すという設定のゲーム。お金を使って薬物の原料トークンを買って原料トークンから薬物を生産してお金を得る。ラウンド毎のテーマ薬物やバッティング回避などでボーナス。取締薬物に指定されると廃棄することになる。またお金で部下を雇って他プレイヤーと抗争を行い街のエリアを確保を行う。街のエリアを確保すると特殊効果が貰えるのと終了時に収入のボーナスとなる。やることはこれだけであとランダムイベントがある。

システムがどうのとかゲームバランスがどうのとかいう評価はわざわざ書く気はないのだが,このゲームは任意に交渉ができるということが特徴ということなのでその交渉部分についての評価をしたい。交渉はプレイヤー間で手持ちの任意の資源のやりとりの他にアクションの約束などもできるし約束への拘束もないというなかなか良さそうな話ではあったのだが…。

残念ながら大きな問題が2点ある。一つ目はプレイヤーに交渉をさせる動線が無い。他の参加者の様子も見ていたが何らかのアクションは淡々と実行するにとどまっていた。アクションを実行しないことすら交渉材料にするという発想ができなくその発想がないプレイヤーに交渉を思いつくきっかけがない。プレイヤーによっては全員が淡々とプレイを繰り返すだけで終わってしまう。交渉を売りにしたいのならばプレイヤーの発想に依存するのではなくゲームシステム内に交渉をしたくなるような仕組みを入れてほしかった。

二つ目は,これは交渉を重視するゲームと謳うならはっきり言って欠陥だと思っているが,交渉のコスト(ペナルティ)が異常に高い。ゲームのルールとして交渉を持ち掛けた側が交渉が成立した場合は自分の部下の情報を開示しなければならない。部下の情報を開示することはゲーム内においてかなりの不利になる。はっきりいってこんなペナルティがあるのでは交渉ができない。ペナルティが嫌だから相手から話をもちかけてくるのを待つとか意味不明の駆け引きをしなければならないとかおかしすぎる。まだ駆け引きなら良いのだが相手が気付かないから交渉の機会であることを教えてあげたらペナルティではやってられない(実際そういう状況があった)。交渉成立に対してペナルティが発生するのでルールで何をもって交渉とするか規定しなければいけなくなっている。カタンの如き交渉ならわかるが二枚舌も良しというなら交渉の機微をスポイルする余計なお世話である。自分たちでやる機会があったらローカルルールで間違いなくこれは削除するだろう。

ゲーム自体はちゃんと遊べるものだから交渉を重視しているのだよというのならば少し残念なところであった。

名古屋フンタ会 2017#4 メモ

4/15に名古屋フンタ会を開催。

  • ディプロマシーが立たなかった。
  • 替わりにフンタを立てる。インストまともにやらないで進行しながら説明する強引さ。最初に票を持ってなかったので延々干される。予算案がなぜか1と0だけ並ぶ謎。大統領が暗殺された結果やっと内務大臣になったが2ターンで暗殺されクーデターに負けてまた干される。しかし終了間際に大統領と内務大臣を暗殺して大金ゲット。次の政権はお金を配る間もなく山札が尽きて逃げ切り。実はフンタで初めてのトップ。
  • 花見小路。なかなかよくできている。短時間で終わるが戦略はいろいろありそう。
  • Grifters。手札が良すぎて無双した。他プレイヤーに非難轟々だった。
  • 22人も来たのは驚いた。なかなか大変だった。

名古屋フンタ会 2017#3 開催しました

3/18に名古屋フンタ会 2017#3 ボードゲーム&ディプロマシー合同会を開催。

結構人が集まった。ディプロマシーも早々に事前申し込みの枠が埋まり,キャンセルが出てもすぐに埋まると今回は非常に人気だった。

いくつかやったゲーム。

Ponzi Scheme

詐欺師となって株券を集めるゲームらしいが,実際やっていると多重債務者がパンクしないように必死になって借金を重ねる気分になるゲーム。最初から高利回りのカードに手を出し大変なことに。3人でやったがそれでも破産せずに2位ゴール。5ターンで回る長期のカードにしたおかげで助かった感じ。株の取引どころじゃなくて資金繰りだけ必死にやっていたのであった。かなり面白いゲーム。

カラヤのスルタン

正体隠匿だがインスト聞いていても何やるのか意味不明だったが一度やってみたら理解できた。

この手の軽い正体隠匿でNラウンドやるとかX点になった人が勝利とかあるけど単純にその場で勝った負けたで十分だと思うだがね。

Zoo Police

圧勝してしまった。2回目ということでコツがわかっていた。わざと外すことにも意味があるというテクニックとか。

Team Play

相方とお前は協力する気あるのかと互いに罵り合いながらも高得点カードを集めて1位だった。

飲み会用計算機を作る

飲み会のよくある飲んだひと4500円で飲まなかった人3500円とか計算がめんどくさいの計算Webアプリを作った。

単に電卓で計算してもめんどくさいので作った。Reactでさっさと作成。携帯で画面に入るように調整するのが面倒だった。

内部の技術的にはreduxのstoreをImmutable.jsをつかっていること。モデルを別で作ってユニットテストを書けば見通しがよくなるのでこの方針はわかりやすい。ただJavaScript自体が型が適当な言語なのでいまいちなところもある。TypeScriptを使えってか?

御在所 本谷

冬の御在所本谷を登る

やたら御在所に雪が降っているようなので本谷に行くことにした。藤内沢はあっさり谷が埋まってしまうのだが本谷は上のほうまで行っても埋まらず流れが残っていた。

雪は中道の登山道の入口からしっかり積もっていた。雪は深くてトレース外すと膝ぐらいまでなら普通に埋まる。人はちょこちょこいて団体もいた。

結構遠いなあという感じで,しかも最後のところでロープウェー駅側に行けるかと頑張っていたが雪が深くてどうにもならなかった。あともうちょっとという感じだったが断念してクライムダウン。そうなんだよなあ,とても前向きには降りられない角度になっていた。

最後はひーひー言いながら登山道に出たが,どこが登山道だかわからないぐらいの雪の積もりかただった。

仮想環境(KVM)内でICカードリーダーを使う

KVM上のWindows環境でe-taxをやりたいという話。

普段はLinuxで作業していてe-taxを使うためにWindowsを別で起動するのめんどくさいなあと思っていた。KVM(virt-manager)に入っているWindowsでICカードを読めれば楽だなあと思って試しにやってみたら何も苦労することなくできた。

具体的にはvirt-managerのハードウェア管理でUSBリダイレクトを追加する。種類はSpiceチャンネルのままで良い。このデバイスがあるとLinuxPCに接続されたUSBデバイスをLinux側で使わずにそのまま仮想PC上のOS側に接続させることができる(例えば仮想マウスはX/Linux側が管理している情報をvirt-managerを通して渡していることとの違い)。

このあとICカードリーダー(SonyのRC-S330)をLinuxPCに接続したあとにvirt-managerのメニューから仮想マシン→USBデバイスのリダイレクトを選ぶと一覧の表示されるのでチェックを入れる。こうすると仮想PCのWindows側で認識される。あとの手順は通常の実PCと同じようにやるだけ。ちなみにマウスを間違ってUSBデバイスのリダイレクトでつなぐとめんどくさいことになる…(PC自体から引き抜いて復旧)。

ScalaでDiplomacyの命令解決ライブラリを作成その2

ScalaでDiplomacyの命令解決ライブラリを作成中。撤退フェイズと調整フェイズの実装を行う。Civil Disorderの実装は終わってないが一旦区切りをつける。

DATCの6.J.5-6.J.11を除いてテストのパスを確認した。Civil Disorderの実装は理屈はわかるが無意味にめんどくさいし割とどうでもいいので延期することにした。100%パスですと胸張っていいたいところだがそれは我慢する。

RetreatとAdjustmentはjDipのDATCのテストケースの記述にバグがあって通らないことがいくつか。jDipのテストの実装はどうなっていたんだろう(なんとなく想像できる)。Civil Disorderはテストケースが大丈夫かかなり怪しい気がする。

それはおいといて実装に区切りがついたのでしばらくはコードのリファクタリングを頑張ることにしよう。

 

 

 

ScalaでDiplomacyの命令解決ライブラリを作成

ScalaでDiplomacyの命令解決ライブラリを作成中。現在行軍フェイズの処理まで作成済み。

jDipがあまりにも古い(10年以上まともにメンテされてない)のでどうにもこうにも使いにくいのでなんとかならんのかと考えていたが,結局Scalaで一から書き起こすことにした。現在DIPLOMACY ADJUDICATOR TEST CASES(DATC)のSection.AからSection.G,つまり行軍フェイズ部分のテストは100%パスしている。行軍フェイズに比べれば撤退フェイズ・調整フェイズはかなり楽なので一山越えた。というところでgithubに登録しておいた。

基本的なデータ構造はjDipをかなり参考にした。地図のデータなどはjDipからそのままコピーしてきた。

jDip自体は先に述べたようにかなり古臭くなっている。なんせJava 1.3とか1.4の時代に書かれていてenumもgenericもないという恐しいものになっている。それは仕方がないが制御構造を例外処理で行うのはひどすぎた。最初はjDipをリファクタリングしてけばなんとかなるかと思ったが目が潰れそうなコードが多いのであきらめた。jDipのコード自体は参考にならなかったが,考え方は参考になった。

Scalaによる実際の作成はライブラリに助けられた部分も大きい。特にscala-graphのおかげでめんどくさいグラフ探索をする必要がなくなったことは非常に楽にしてくれた。parser combinatorはテストケースの作成の手助けとなった。

DATCのテストケースはもちろんエッジケースが記述してあるわけだが,まださらに実際には発生しないだろうが変な行軍を考えれば明確に決定できない例も考えられなくもないなという気はする。輸送と支援がサイクルを構成してサポートカットするようなテストケースはてこずった(6.F.23とか6.F.24)。実際のところ実は現在の公式ルールでは解決できないという説明があったりする。このあたりはややこしくていくつかのルールが提案されていたりする。紙に図を書いてデバッガで状態チェックしながらなかなかめんどくさかった。このあたりは結局命令の依存関係グラフを作成してサイクルを検出して…という処理が必要になる。

最初にjDipのコードを読みだしたのが約1年前で,ダラダラやっていたせいもあるがなんとか目処がつくところまで来た。テスト走らせてIDEが警告表示だらけなのを本当に全部潰せるのかよと思いながらやっていてオールグリーンになってほっとした。次はやっつけ仕事になっている部分をきれいに書き直しつつDATCのSection.H(retriating)とSection.I(Building)の部分を作成しよう。

あとScalaで書いた理由はjDipのようなマルチプラットフォームなGUIまで作りたかったのでScalaにはJavaFX(ScalaFX)があるという理由。GUIまでたどりつくのはかなり先だと思われるが。

LVM+btrfs+RAID1 rootの試み

LVMのLVを使ってbtrfsのRAID1をrootを挑戦した。なんとか問題は解決したがきれいではない。

環境はDebian8(Jessie)で実行。最初にRAID1を設定するところまでは問題なかったのだが再起動するとこける状態になった。btrfs RAID1のroot自体はドキュメントも見つかるのでできないはずではないのに謎なことになった。

ディスクは2台ありsdaとsdbとする。まず作業手順だが普通にインストールする。sdaとsdaにそれぞれ別にLVMのvgを作成する(vg0とvg1とする)。そのあとlvも作成(/dev/vg0/rootと/dev/vg1/root)。

vg0/rootをbtrfsにして通常のインストール。インストール終了したあとにRAID1を作成する。

# btrfs device add /dev/vg1/root /
# btrfs fi balance -mconvert=raid1 -dconver=raid1

そのあと再起動…するとinitramfsの処理中にこける。rootflags=degradedをつけてブートするととりあえずブートするが片肺運用になるのでよろしくない。なぜこういうことになるのか,ということだが結論はinitramfsのLVMが必要最低限のlvしかactivateしないことが原因だった(rootflags=device=/dev/mapper/vg0-root,device=/dev/mapper/vg1-rootとかいろいろやったんだよ)。

なんかローカルで設定持てばいいんだろうということで解決は以下のよう。/usr/share/initramfs-tools/scripts/local-top/lvm2/etc/initramfs-tools/scripts/local-top にコピーする。

下のほうに activate "$ROOT"とある下に activate "/dev/mapper/vg1-root" を追加。これで解決したがゴリ押しっぽくていまいち美しくないいのでもっと簡潔な方法がないか考え中。

解決するまで何度も何度もリブートかけて仮想マシンとは言え面倒だった。時々壊れてマウントできなくなるので仮想CDから復旧かけるとか…。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 >