クロノ・クロス:ラジカル・ドリーマーズ エディション プレイ感想

docs.google.com

殺されたアカウントが、復讐に来る。

ストーリー

toshi_aはワクチン副反応によって、アカウントが永久凍結された平行世界『ANOTHER WORLD』に飛ばされた。

その世界では今までアカウントは凍っており、自分をふぁぼるものは誰もいない(大嘘)。

かつての平穏を取り戻すには、あらゆるアカウントを凍結するという秘宝『凍てついたアカウント』を手に入れ、この世界線のアカウントを再び永久凍結するしかないという。

世界を管理するマザーコンピュータ『Twitter』は『凍てついたアカウント』を使ってNFT満ちる世界を作り上げた。ふぁぼの賢者naota344はブロックチェーンを過去に遡り、古代セーベ王国が築き上げたTwitterエコシステムを復活させようとした。しかし、原始時代からこの星に存在していた災厄『ドナルド・トランプ』に見つかり、A.D.2007の過去に飛ばされることになる。

A.D.2007に飛ばされたTwitterは『ジャック・ドーシー』となって自らTwitter社を立ち上げ、自分が生み出されるコントラクトを守るため、その障害となるアカウントを次々に凍結していった。しかしtoshi_aが『凍てついたアカウント』に触れたことによって、アカウントが残った世界と、永久凍結された世界の2つに分岐してしまう。

イーロン・マスクの力を借りて、5Gナノワクチン(マイクロチップ入り)によってロボットとなった人間たちをActivityPubで接続し分散ソーシャルネットワークを構築。Twitter株を買い占め、人類はTwitterを破壊することに成功する。

しかしTwitter筆頭株主となったイーロン・マスクの真の目的はドナルド・トランプを解凍することだった。凍結されたアカウントの復讐が、今始まる。

考察

ふぁぼの妖精、ラズリーちゃん(かわいい)

ちなみに妖精の集まってる島は女の子しかいないので、まぁそういうことです。

Lv.3固有エレメント『ラズリンスター』。お星様をひとつ。ふぁぼ魔にはこの奥ゆかしさを見倣ってほしいものだ。

ステッキを持って二回転。これは見えそう。実際に使ってみる。

ウーン、鉄壁wこの時代なら仕方ないのか。

Lv.5固有エレメントは『ラズリンハート』。なんと、20年も前のゲームによって既に、ふぁぼがいいねに変わることは運命づけられていたのだ。この世界を統べるTwitterの調停者、クロノ・トリガーは彼女だというのだろうか。

アニメーションはそんなに激しくないので期待できない。

ん?

まさか!?

少し前の写真を漁ったところ出てきた一枚

こ、これがクロノ・クロス!!!(クソデカ声)

www.jp.square-enix.com

2020年5月17日teocraft障害報告書

2020年5月17日
teocraft運営委員会

2020年5月16日に当サーバにて稼働しているMicrosoft社の製品「Minecraft」のサードパーティサービス「teocraft」が利用できない問題が発生したため報告致します。

ご迷惑をおかけいたしましたこと深くお詫び申し上げますと共に、以下に障害の内容と今後の対応について報告させていただきます。

障害発生日

2020/5/16 20:46 〜 5/17 0:52

障害内容

プレイヤーがteocraftにログインした直後にサーバがクラッシュし、コネクションが切断される状況が発生しました。

被害

障害時間中にサービスが利用できなかった事以外に、以下の被害が確認されております。

  • ディメンション「the_end」(以下、エンド)の座標(0,64,0)にある構造物「エンドポータル」(以下、帰還ポータル)の半分が消滅
  • エンドに飛んでいたMOB「bee」(以下、蜂)1体の死亡

原因

エンドにて、帰還ポータルの構成ブロックである「end_portal」(以下、エンドポータル)に、蜂が侵入しました。

それにより、Minecraftサーバがクラッシュし、当サーバの再起動システムによりサーバが再起動するものの、そのチャンクがロードされると再びサーバがクラッシュする状態が発生しました。まさに泣きっ面に蜂でございます。

クラッシュログを調査しましたところ、[MC-155739] Crash when opening the game in the ender dragon boss fight (java.lang.NullPointerException: Colliding entity with block) - Jira(以下、MC-155739)に報告されているとおり、MOBがエンドポータルに触れてディメンションをまたいで転移を試みる時に発生する既知のバグと状況及びエラーログが一致しました。

暫定対応

原因となった蜂周辺を、fillコマンドを用いてstone(以下、石ブロック)に置き換え、エンドポータルを取り除き、蜂がエンドポータルに接触しないように対応しました。

execute in minecraft:the_end run fill -4 61 0 2 63 5 minecraft:stone

fillコマンドはロードされていないチャンクが対象に含まれるとエラーとなるため、プレイヤーがログインしてから蜂の転移判定が始まるまでの間にコマンドを実行する必要があったため、今回は当委員会のMinecraft運用システムmiku_craftに、本件対応用に開発したwindows updateプラグインを配備し、ゴリ押しで置き換えを行いました。

対応経緯

月日 時分 事象
5/16 20:30 プレイヤーたちがエンドで帰還ポータルを利用してwither(以下、ウィザー)のリンチを決行
20:40 プレイヤーのひとりがエンドのウィザーリンチ現場に駆けつけ、その場に居たプレイヤーに蜂3体が入ったbeehive(以下、養蜂箱)を土産として渡す
20:42 先の養蜂箱を受け取ったプレイヤーのひとりが養蜂箱を帰還ポータル近くに設置し、蜂が逃げ出す
20:45 プレイヤー2人が、蜂がエンドポータルに接触したことを目撃。同時にサーバがクラッシュ
20:46 本現象を確認、サービスを緊急停止。Mastodonにて速報を発信
21:00頃 teocraftのワールドデータ(13GB)をステージ環境(ローカル)にコピーし、現象の再現を確認
22:00頃 MinecraftのバグトラッキングシステムにてMC-155739を発見。エラーログと照合し、本件と同様の内容であることを確認。
23:00頃 MC-155739に記載されている対応方法は困難であることが判明し、miku_craftを用いて問題の蜂がいるチャンクがロードされた瞬間にコマンドを実行することを検討
5/17 0:00頃 コマンドの失敗を検知できるfillコマンドを利用した方法で、windows updateプラグインを作成。ステージ環境にて復旧できることを確認
0:30頃 本番環境を起動し、windows updateを適用。復旧を確認。fillコマンドによって生成された石ブロックに原因となった蜂がめり込んで死ぬ音を確認
0:40 endermanや蜂などのMOBが入らないように帰還ポータルの残った部分を簡単に囲うなどの処置
0:52 Mastodonにて復旧を報告
2:00 windows updateを停止

恒久対応

teocraftではMicrosoft社がMinecraft公式サイトで配布している公式のサーバソフトウェアを適切な方法で配置して運用しています。今回のサービス停止の原因となった現象は、エンドポータルブロックにMOBが接触するとディメンション「overworld」の初期スポーン地点に転移するという公式Wikiによる説明と異なっていることからminecraftのバグであると結論づけ、当委員会に過失はないと判断しました。

しかし、2018年に報告されたMC-155739が未だ解決されていないことや、新規ワールドで同様のことをしても再現しないことから、今後根本的な対応がMicrosoft社によって為されることは期待できないと判断しました。プレイヤーに本件を周知し、teocraftでは今後nether_portalやエンドポータルにMOBが近づかないようにするポータルディスタンシング及び、ディメンションをまたいだ不要不急のMOBの移送の自粛を呼びかけることとします。

不時着した惑星でドイツのトリを発見した

この記事は ドイツのトリ Advent Calendar 2017 - Adventar 4日目の記事です。

今回は、主にSteamで配信されているRimWorldというゲームのMod「ドイツのトリMOD」を作成しているので、その宣伝と、まだあまり有名ではないRimWorldの紹介をしたいと思います。

RimWorldとは

シナリオセットはいくつかあり、カスタマイズも出来るのですが、ベーシックなシナリオでは、宇宙船が壊れ、未開の惑星「RimWorld」へと不時着したところから始まります。ほとんど体一つで放り出されてしまった3人は生活の拠点となる「コロニー」を発展させ、最終的には宇宙船を製造して惑星RimWorldから脱出します。

プレイヤーは刻々と変わる様々なデータを見ながら、目標達成に向けて彼らに指示を出すことになります。要素が多いため初心者は簡単に全滅し、上級者でも決して気を抜けない、頭を使うのが好きな人にはたまらないゲームです。まあ俺のような一級プレイヤーは全滅などありえんけどなw

ドイツのトリMOD

RimWorldには人間や様々な動物が生息しており、ドイツのトリMODは動物としてドイツのトリを追加します。

他の鳥をベースとしているため、戦わせてもそこそこ強いですし(鳥は強い)、600ユーロを日本人観光客から抜き取るだけの知性もあることから、調教すれば動物のできるすべてのことが可能になります。ドイツのトリというコンテンツの寿命は長いですが、こちらのドイツのトリは寿命は短い代わりによく増えます。餌などの管理は大変ですが、うまくすれば食肉にも困らなくなるため、心強い味方になるでしょう。

テストプレイ

紹介ならこれだけです。以下、実際にテストプレイをしてみたレポートです。

今回のシナリオ

カスタムシナリオ

f:id:toshi_a:20171203002334p:plain

今回は、標準のシナリオ「不時着した三人の漂流者」に、以下のカスタマイズを加えて始めます。

  • お供のペットをドイツのトリに固定
  • お供のペットを3匹に

ストーリーテラー

ストーリーテラーは、発生する突発イベントの傾向です。今回は最もバランスのいいカサンドラ、難易度はハードとします。Modも作れるし前のバージョンではエンディングも見たプロ入植者なのでこれくらい余裕ですわ

f:id:toshi_a:20171203002619p:plain

降下地点

f:id:toshi_a:20171203003138p:plain

どこに不時着するか決めます。これは重要で、北極みたいなところにすると食べ物が襲撃に来る人間くらいしかなくなります。前述の難易度より、どこに落とすかのほうがゲーム難易度に影響します。今回はランダムボタンを一回押して出てきた南端のサバンナに降下します。

調査隊

今回はドイツのトリが宇宙からやってきた外来生物であるという噂を実証すべく左遷された三人というていでやっていきましょう。まず最初はTigerさん。

f:id:toshi_a:20171203003414p:plain

名前は ファーストネーム 'ニックネーム' ファミリーネーム というフォーマットです。Tigerというニックネームですが、本名のNanaとどういう関係があるんでしょうか。別にそのままNanaでいい気がします。年齢は 生物学的年齢(暦上の年齢) です。暦上のとは、冷凍睡眠の期間も含むため、769歳なんてとんでもない値になっています。

まるでデータシートのように生い立ちが決まっており、それによって他のパラメータも決まっていきます。

才能・性格は サイコパス・精神過敏・ドラッグ常用者 で、スキルと照らし合わせても、癖はあるが十分使える人材であると評価しました。 ドラッグ常用者 は勝手に違法薬物(この星では法はないため、日本の感覚での話)を摂取してしまうため扱いが難しそうです。

f:id:toshi_a:20171203004541p:plain

Hanさん。才能・性格を見て、これはヤバイのを引いたというのは、未プレイでも分かるでしょう。 流血嗜好者 は殺人などが好きという性格で、 サイコパスNanaのように人が死んでもなんとも思わないを通り越して、むしろ心情が良くなります。更に 食人嗜好者 、要するにカニバリストというのは、人肉を食べると心情が良くなります。先程、北極では人肉を食うと書きましたが、この人なら大丈夫そうですね。 サイコパス は人肉を食べるのには流石に抵抗を見せますが、死体をさばくことには抵抗はありません。案外この二人相性いいかもですね。

スキルとしては戦闘員として優秀で、工芸能力も伸ばしていけば使えそうです。

f:id:toshi_a:20171203005323p:plain

Sirさん。完全に使えないやつです。 生い立ちの モデル が最悪で、これがあると殆どの作業ができなくなり、雑用と雑用以外ができなくなります。命がかかってんだから荷物運びくらいしてほしいものですが、やらんのです。

降下

f:id:toshi_a:20171203005651p:plain

これで漸くゲームスタートです。

f:id:toshi_a:20171203005736p:plain

サバンナなので、様々な動物がいます。というか、ドイツのトリどころか、象も宇宙外来種であるという衝撃の事実が分かってしまいましたね。

f:id:toshi_a:20171203005849p:plain

いました!野生のドイツのトリ!ドイツのトリが宇宙外来種だというのは本当だったんですね。これじゃあドイツのトリじゃなくて宇宙のトリじゃねえか。それでは調査は終わったので、さっさと宇宙船を作って脱出しましょう。

立ち上げ

f:id:toshi_a:20171203005937p:plain

プレイヤーはキャラクターに指示を与えるとは言いますが、逐一指示をするわけではなく、各キャラクターに仕事の優先順位のみを伝えます。 建築が得意なキャラクターには建築を優先してもらいたいですし、狩りが不得意なら銃を持っていてもやらないでもらう、といった感じのことを設定します。

しかし、こう見ると誰も医療ができないですね。医療ができないと、戦闘で受けた怪我が治せず、自然治癒を待つのみとなります。当然重症なら自然治癒はせず最悪死に至ります。インフルエンザのような病気もこのゲームでは自然治癒はしないので、直接死に繋がるでしょう。いきなり運ゲーになってきました。

f:id:toshi_a:20171203010421p:plain

動物の管理画面です。今は冒頭で設定したとおり三体のドイツのトリがいます。殺し屋とはなかなか良い名前ですね。戦闘に使えそうですが、今うかつに戦闘をすると怪我を治せないのでかなり慎重にならざるを得ません。

f:id:toshi_a:20171203011704p:plain

これは建築計画です。大部屋を作って、横に個室も作って、近くに肥えた土があるため、そこで農業もやります。サバンナは木が少ないため、石造りの建物にしたいですね。とはいえ最初は木しか使えるものがないため、全部は立てずに小部屋一つだけを木造で建てます。

f:id:toshi_a:20171203012114p:plain

時間を進め始めると、早速サイコパスNanaカニバリストHanが頑張っている隣で、約立たずのSirがうろついて、周囲にゲロを撒き散らしています。普通、優秀でない人は序盤では荷物運びや掃除といった影で支える役回りになるのですが、こいつは本当に今は何もできることがありません。Sirはアカンタレのボンボンだし、なんか字面がSIerと似ているので、どんどんdisっていきましょう。

f:id:toshi_a:20171203012748p:plain

少しするとハートマークが出たので何事かと思えば、SirがHanにアプローチしていました。女二人に全てを任せて自分はゲロを撒き散らして歩いているだけの男など、考えるまでもありません。しかし才能・性格 美しい によって彼の魅力は+40されているので、むしろ好かれているのがめっちゃむかつきます。女二人いるんだから女同士で付き合えや

f:id:toshi_a:20171203020831p:plain

かと思えば、偉そうに派閥の名前を決めようと言ってきました。

f:id:toshi_a:20171203013126p:plain

一日目はSirをdisって終了してしまいました。ここまで、ドイツのトリはチラチラ写っていただけで全く関わってきてません。動物を調教するには餌となる作物が必要で、そのために最初から作物を育て始めているのです。

心情システムと友好関係

このゲームではキャラクターごとに心情というステータスが設定されていて、怪我や食べ物といった様々な要因で心情が上下します。あまりにも低くなると、精神崩壊して暴れたりします。しきい値は才能・性格によってまちまちで、精神が強い人と弱い人がいます。

心情システムを複雑にするのは人間関係です。よく話すキャラクターは仲良くなっていきます。場合によっては恋人になり、結婚することもあります。

f:id:toshi_a:20171203015505p:plain

恋人や配偶者が居ると心情が上がりますが、振られると下がるほか、死んでしまうと他の仲間が死んだときよりも大きな心情低下を引き起こします。

経験的に、常に心情のペナルティを受け続ける才能・性格 悲観主義者 と逆に常に心情ボーナスを受け続ける あっけらかん は相性が悪く、一緒に居るだけで殴り合いの喧嘩をする傾向にあります。生い立ちも影響があるようです。

f:id:toshi_a:20171203023030p:plain
あら^〜

RimWorldの人間関係は現実と同じでとても複雑で、私はいい人間関係を作るよりは、起こった問題に場当たり的に対応していくことしかできていません。

襲撃

たまにコロニーには敵対勢力が襲撃してきます。大きく分けて、動物、人間、メカノイド(殺人ロボット)がいます。今回最初はネズミです。

f:id:toshi_a:20171203021530p:plain

Sirは序盤には何もできないと言いましたが、狩りだけはできます。調理台を作ったため狩りを始めてもらったところ、運悪く彼の近くにいたネズミが暴れだしました。射撃スキル0でこんな小さなマトに当てられるはずもないし、何度も書いているように一撃でも食らえば死ぬ可能性があります。しかもお前の女のNanaサイコパスなので、お前が死んでもなんとも思わんぞ。残念だったな。

f:id:toshi_a:20171203021949p:plain

しかし、逃げ足は勝っていて、射撃が9もあるHanによってネズミは一撃。600ユーロをスられてもグッズ販売で回収したあしゅりーのような粘り強さなので、以下Sirはあしゅりーおじさんと呼ぶことにします。

f:id:toshi_a:20171203022448p:plain

女に全部任せてタダ飯を食うあしゅりーおじさん。

言うてるうちに人間の襲撃が来ました。宙賊といって、宇宙で盗賊のようなことをやっているやつらです。宇宙人が外国人くらい身近な世界なのです。

f:id:toshi_a:20171203023709p:plain

敵はこの一人ですが、怪我をせずに勝たなければいけません。とはいっても、しばらくしないと襲ってこないタイプの襲撃だったので、優秀な射手でもあるHanが出向いて簡単に勝ちました。

f:id:toshi_a:20171203024518p:plain f:id:toshi_a:20171203024525p:plain

襲撃者は捕虜にし、説得して仲間に引き入れることが出来るのですが、あしゅりー団は現状怪我を治療できないため、放置するしかありません。平和的な方法でしか仲間を引き入れることができないというのは、想像以上に厳しいです。

あしゅりー無双

f:id:toshi_a:20171203031159p:plain

爆発しろや! うろついてゲロ吐いてるだけで女を落とせる恋愛テクとはどのようなものなのでしょうか。

f:id:toshi_a:20171203031338p:plain

その持ち前の社交力が発揮できる数少ないシーンが、トレーダーキャラバンとの取引です。

f:id:toshi_a:20171203031526p:plain

これが取引の画面です。UIにクセがあるんですが、そんなことより奴隷を売っています。奴隷を売ってるのはわりと珍しい印象を持っています。奴隷は買えば仲間になりますし、医療が出来る人を買うチャンスです。

f:id:toshi_a:20171203051637p:plain

が、手持ちが650シルバーに対して、我々が欲しい奴隷の伊藤ユウちゃん(26)は1846シルバー。実は自分のコロニーの入植者を捕らえて捕虜にして、闇商に売ることができます。やろうかと思いましたが、あしゅりーおじさんを1200シルバーで売れるような話術をもった商人はおりません。実際、交換できるとすれば、婚約者を奴隷として売り飛ばす心情ペナルティを考えても良い取引です。愛では病気は治せないですから。ちなみにあしゅりーおじさんの彼女のNanaは、サイコパスなので人身売買には抵抗はありません。他にも思案を巡らせましたが、いい方法が思いつかず帰ってもらいました。

f:id:toshi_a:20171203032310p:plain
伊藤ユウちゃん。医学が10もある。あしゅりーと交換してほしい

あしゅりーおじさん販売計画が頓挫した裏で、Nanaのしつけのお陰で、ドイツのトリが運搬という高度な作業を出来るようになりました。

f:id:toshi_a:20171203033108p:plain

一部の賢く、一定の大きさのある動物は、しつけをすることでまれにアイテムをあるべき場所に運ぶ 運搬 という行動をしてくれます。ドイツのトリはこれが出来るので、このような小規模なコロニーから、大規模なコロニーまで大変重宝します。あしゅりーおじさんと違って物を運べるなんて偉いなあ。

怪我

f:id:toshi_a:20171203034610p:plain f:id:toshi_a:20171203034537p:plain

ボムネズミ という、死ぬ時に爆発するネズミにNanaが噛まれてしまいました。どんなネズミやねんと思うかもしれませんが、ここは地球ではない星です。象やネズミやドイツのトリといった地球の生物がいることが不思議なくらいで、異型の生き物がいてもなんら不思議ではありません。

幸い死ぬような怪我ではないので、放置しておいても治りますが、治療しないと傷跡が残って、常に鈍い痛みを感じ続けるようになってしまうリスクがあります。痛みは心情や作業効率を悪化させます。

f:id:toshi_a:20171203035155p:plain

そしてこのように、衛生環境が悪いと感染症にかかることもあります。本人の免疫力や手当の質によっては命を落とすことがありますが、そもそも手当がされないと絶望的です。もうNanaは助からないでしょう。

f:id:toshi_a:20171203035618p:plain

そこに襲撃が重なるのがRimWorldというゲーム。

f:id:toshi_a:20171203035904p:plain

アッwwww

f:id:toshi_a:20171203040257p:plain

俺達、この感染症治ったら、結婚するんだ…。

f:id:toshi_a:20171203040457p:plain

Nana「あなたと死ぬのはイヤ…。」

このあとあしゅりーだけはちゃっかり全快しました。こういうこともあります。

f:id:toshi_a:20171203040853p:plain

そして、惜しい人材に限って死んでしまうというのもよくある話です。元カレのあしゅりーは、雑用に分類される 埋葬 はできず、オロオロするだけ。葬るのは、一緒にこのコロニーを発展させてきたHanです。

f:id:toshi_a:20171203041037p:plain

石棺を作ってあげるのも、建築ができるHanの仕事です。

f:id:toshi_a:20171203041220p:plain

遺体を運んで

f:id:toshi_a:20171203041310p:plain

埋葬する

f:id:toshi_a:20171203041318p:plain

百合ですね。

結論

RimWorldは百合

買え

store.steampowered.com

ここまで読んでしまって、興味をもった人は買いましょう。

RimWorldは、値下げは行わないと上記のページに書かれているらしいです俺は何も考えずに買ったから知らんけどな。Early Accessの間はこの値段だが、値段が下がることはなく、セールなどもしないとのことで、実際半年以上遊んでますがそういうことはありませんでした。決して安くはないですが、あなたがセールだから安いからと買って積んでるゲームの総額に比べれば安いと思います。なお私はRimWorldをするためだけにSteamに登録したので積みゲーはありません。

で、買ったらドイツのトリMODを入れましょう。

github.com

Ruby-GNOME2の再帰メインループ (gkt2 3.1.8)

Gtk2の再帰メインループとDialog#runの関係が思ってたとおりではなかった。絶対忘れるのでメモ。

検証用コード

# -*- coding: utf-8 -*-
require 'gtk2'

window = Gtk::Window.new
window.signal_connect(:destroy){ Gtk.main_quit }

box = Gtk::VBox.new
window.add(box)

button_a = Gtk::Button.new('Gtk.main')
box.pack_start(button_a)
button_a.signal_connect(:clicked){
  dialog_open_gtk_main(window)
  false
}

button_b = Gtk::Button.new('Dialog#run')
box.pack_start(button_b)
button_b.signal_connect(:clicked){
  dialog_open_dialog_run(window)
  false
}

window.show_all

Gtk.quit_add(Gtk.main_level){
  puts 'quit!'
}

ml = nil
Gtk.idle_add{
  n = Gtk.main_level
  if n != ml
    puts "level #{ml.inspect} -> #{n.inspect}"
    ml = n
  end
  true
}

def dialog_open_gtk_main(parent)
  window2 = Gtk::Dialog.new('dialog', parent, Gtk::Dialog::MODAL | Gtk::Dialog::DESTROY_WITH_PARENT, [Gtk::Stock::OK, Gtk::Dialog::RESPONSE_ACCEPT])
  window2.signal_connect(:destroy){ Gtk.main_quit }
  window2.signal_connect(:response){ |w, r| window2.destroy }
  window2.show_all
  Gtk.main
  puts 'dialog_open_gtk_main: finish'
end

def dialog_open_dialog_run(parent)
  window2 = Gtk::Dialog.new('dialog', parent, Gtk::Dialog::MODAL | Gtk::Dialog::DESTROY_WITH_PARENT, [Gtk::Stock::OK, Gtk::Dialog::RESPONSE_ACCEPT])
  window2.run{ |r|
    window2.destroy
  }
  puts 'dialog_open_dialog_run: finish'
end
puts Gtk::BINDING_VERSION.join('.')
Gtk.main

同じようなダイアログボックスを、Gtk.main + イベントハンドリングで表示するのと Gtk::Dialog#run を使って表示するやつ。

出力

~/tmp $ ruby mainloop-test.rb 
3.1.8
level nil -> 1
dialog_open_dialog_run: finish
dialog_open_dialog_run: finish
level 1 -> 2
quit!
dialog_open_gtk_main: finish
level 2 -> 1
level 1 -> 2
dialog_open_gtk_main: finish
level 2 -> 1

わかったこと

Dialog#run は Blocks in a recursive main loop until the dialog either emits the response signal, or is destroyed. とのことだが再帰メインループレベルはインクリメントされない。当然、Gtk.quit_addで登録した再帰メインループ脱出時のハンドラも呼ばれない。ただし、Dialog#runで(ダイアログボックスに入力するまで)処理はブロックされ、再帰メインループのように扱うことが出来ている。

Raspberry PiにMPDサーバを構築するAnsible Playbookを公開した

FAQ タイトルの件のPlaybookはどこ?→ https://github.com/toshia/RPi-tools

自宅で音楽を聴くための良いプレイヤーソフトを決め兼ねていたのですが、最近はMPDで安定しています。ベッドに寝転がった状態でiPhoneAndroidからプレイリストを選んで曲を再生するとか、cronで毎朝目覚まし代わりに音楽再生とか、いろいろやってます。

MPDはせっかくクライアントサーバシステムになってるから、なんとなく別のマシンで常にMPDを動かしておきたいなあと思ったので、余っていたRaspberry Piを一台使ってMPDサーバにしました。 今回はAnsibleのPlaybookを作成して、ゼロから同じ環境をセットアップできるようにしました。 要するに、簡単に誰でも同じ環境を構築できるということです。

この記事でやってること

記事を書いていると、今回の主役である「MPDが動いてる音楽再生用のRaspberry Pi」の名前がないと不便なことに気がついたので、この記事では略して「MPD Pi」と呼ぶことにします。

  • MPD Piをつくる
    • 構築してから何年も経つとどうやったか忘れるので、Ansibleで完全に構築が完了するようにする
  • MPDとかの布教

MPD Pi(MPDサーバの構築)

早速MPD Piを構築しますが、たんなるMPDサーバなので、実は検索すると同じような話はいくらでも出てきます。別にRaspberry Piである必要はないですし、しまいにはVolumioをRaspberry Piに入れるといった上位互換みたいな記事もあります。

ではこの記事の意味は何なのかというと、私が書いたAnsible Playbookの使い方を説明することと、MPDの布教にあります。あとは強いて言うなら、オーディオの話になると凝った環境の話が多いですが、この記事では適当にサウンドを再生するだけなので、私のようにあまりこだわりのない人間には丁度よいです。

とは

MPD

Music Player Daemon の略で、クライアントとサーバに分かれている音楽再生ソフトです。

サーバの方は基本的にMPDが使われているので、この記事でもMPDを使います。

一方クライアントのほうは、MPDプロトコルで通信できればいいだけなので、多くのクライアントソフトが開発されています。ただの音楽プレイヤーのような見た目で、サーバのプレイリストを管理したり、再生する楽曲を選択したりできます。再生した音楽は サーバ側で鳴る ので、「オフィス等の共有スペースのBGMを流したい」とか「ノートPCやスマフォで操作しつつ、自宅の良いスピーカーで音楽を聴きたい」といった用途に使えそうです。 私は単純に、寝ようと思って横になった時に音楽を再生しっぱなしだったことに気づいてまた立ち上がるということがしばしばあって、寝たままスマフォで停止したいという理由で使い始めました。一人暮らしなうえ音質にも拘ってません。

Ansible

構成管理ツールの一種です。似たようなソフトで有名なものにChefなどがあります。

Playbookと呼ばれる、「mpdとsambaをaptで導入してー、音楽ディレクトリの場所かえてー、そこをsambaで公開してー…」といった一連の設定手順を用意しておくと、手元のAnsibleが勝手に指定したホストマシンにsshで入っていい感じにセットアップしてくれるというものです。多数のマシンを同時にセットアップするのに向いていますが、YAMLなのでgitで構築手順を管理できたり、今私がやっているようにgithubに公開すれば他の人がPlaybookを利用して同じ環境を構築できるなど、一台だけセットアップするときにもメリットがあります。

Raspberry Piのイメージをそのまま圧縮して公開している人もいますが、サイズが大きかったり、そもそも何が入っているかわからないので怖いという問題があります。AnsibleのPlaybookであれば、どういったセットアップ手順なのか明確にわかりますし、独自に手順を削ったり追加したりできます。

Raspberry Piの準備

最低限用意すべきは

  • Raspberry Pi(B, 2B, 3Bで確認済)
  • Micro SD
  • Micro USBケーブル
  • スピーカー

です。また、むき出しで設置するのが嫌ならケースとかが現実的には必要ですね。

Raspberry Piは基本的にPimoroniで購入しています。別にどこで買っても条件を満たすハードならなんでも良いです。

今回の用途であれば、ネットワークアクセス可能でイヤホンジャックでサウンドを出力できればなんでも構いません。私は初代Raspberry PiのModel Bが余っていたのでそれを使い、新規購入はしませんでした。

Micro SDの容量ですが、楽曲ファイルを保存するため、一応32GBのものを使いました。そんなに曲はないので16GBでも足りるんですが。

スピーカーから音を出す必要があるので、スピーカーを準備する必要があります。持ってるスピーカーについていたミキサ機能がついに役立つ時が来たかと思ったんですが、知らないうちにPS4に奪われていたので、適当にかっこいいケーブルを買いました。

こういう微生物いますよね。しっぽで泳ぐやつ。

AnsibleのインストールとPlaybookのダウンロード

Ansibleは、手元のマシンにインストールして、Raspberry Piなどのホストマシンにリモート接続してセットアップしてくれるやつなので、とりあえず作業用マシンのほうにAnsibleをインストールします。OSも、MacでもLinuxでも使ったことがあります。インストール方法はOSによって違ってくるので割愛します。

$ ansible-playbook --version
ansible-playbook 2.2.1.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides

インストールしたら上記のコマンドで確認。入ってますね。

Playbook実行環境を整える最低限の設定を手動でやる

Raspberry Piについては有益な情報が溢れていて書くメリットがないので、どういう設定をしたかを簡単に書いておくだけにします。

イメージを入れて、Raspbianのインストール完了まで

Raspberry Piが手に入ったら、Ansibleがコントロールできる状態までは手動でセットアップしてやる必要があります。 Micro SDにRaspbian Jessie LITEを入れて、Raspberry Piを起動しましょう。 今回の用途にはDesktopは使わず、Lite(GUIなし)を使いました。結局AnsibleでセットアップするのでXが入っていようがいまいが一緒だと思います。

ホスト名

Playbookのhostsファイルに書くので、いい感じに設定しておきます。

SSHでログインできるようにしよう

標準だとsshdが入っているのに、SSHリモートアクセスができないようになっています。Ansibleを使うにはそのマシンにSSHアクセスできないといけないので、気合で有効にしましょう。

公開鍵を登録する

作業マシンで ssh-keygen コマンドを使って秘密鍵と公開鍵のペアを作成し、パスワードなしで作業マシンからMPD Piにアクセスできるようにしましょう。

Playbookの入手・実行

早速私の作ったPlaybookを作業マシンでダウンロードしましょう。

github.com

Akkiesoft さんが、自分の作ったRaspberry PiのPlaybookを公開しているものをフォークして、MPD Pi等のレシピを混ぜたものです。なので温度計を作るレシピとかが入ってますが、今回使うのは私が作ったmpdというレシピだけです。

gitとかで作業マシンにcloneして、 ansible/ ディレクトリに移動して、 hosts というファイルを作り、以下のような内容にします。

[all]
mpdpi.local ANSIBLE_SSH_USER=pi 

mpdpi.local の部分に、MPD Piのホスト名又はIPアドレスを書きます。Ansibleがsshで繋ぐ時に使います。

そしたらあとは、以下のコマンドでPlaybookを実行。

$ ansible-playbook -i hosts mpd.yml

必要なパッケージが入ってなかったらインストールするなどいろいろやるので、わりと時間がかかるかもしれません。

MPDを使ってみる

成功すると、早速MPD Piとして稼働しているはずなので、イヤホンジャックにスピーカーなどを繋いで、サウンドを再生する準備をしましょう。

音楽ファイルを入れる

再生する音楽が必要です。そしてそれをMPD Piに転送する必要がありますが、Sambaで音楽ディレクトリが「music」という名前で共有されているので、適当にmp3などのファイルを突っ込みます。 \\MPDPI\MUSIC みたいな感じで。このPlaybookで構成すると、デフォルトでは匿名でアクセスして書き込みもできるようになっています。

ディレクトリを再帰的に辿って音楽ファイルを探してくれるので、私はアルバムごとにディレクトリが分かれているMusicフォルダを丸ごと入れました。

自分のメインマシン(Linux)からコントロール

MPDを操作するクライアントは色々ありますが、とりあえず人気の高いクライアントの一つとされているSonataをインストールしてみましょう。

設定で、MPDサーバとしてMPD Piのホスト名またはIPアドレスを入れると、先ほど入れた楽曲がちゃんと見えているはずです。操作方法は割愛しますが、作業用マシンのSonataを操作したらMPD Piにつながってるスピーカーから音が鳴るわけです。

f:id:toshi_a:20170302201233p:plain

以上で構築は終了です。お疲れ様でした。ここからは話を逸していきます。

普通の音楽再生ソフトは、UIが気に入らないだけで乗り換えるということがありますが、MPDの場合はクライアントを変えるだけなので、移行コストは有って無いようなものです。私はSonataを使ってましたが、最近Cantataに乗り換えつつあります。

f:id:toshi_a:20170302202915p:plain

クライアントだけを乗り換えたり、併用したりできるのもMPDを推す理由です。自分でMPDクライアントを作るのも楽しそうです。

Androidクライアント

せっかくなので、スマートフォンから操作してみましょう。

iOSの場合はMPoDというのがついこの間まで使えたのですが、現在はストアでは公開されていないようです。有料のものを使うか、次の節で紹介するWebクライアントを利用しましょう。

Androidの場合は選択肢が多いですが、MPDroidというやつを使っています。再生ボタンなどのコントロールウィジェットとして配置できたり、通知領域に再生情報などを表示してくれるなど、いろんな機能があります。

f:id:toshi_a:20170302204526p:plain

Webクライアント(ympd)

Webインターフェイスを使えば、ブラウザからmpdの操作ができます。これもかなり数があるのですが、ひとまずympdを使ってみました。ympdというplaybookを作っておいたので、mpdを入れたのと同じマシンに簡単にセットアップできます。

$ ansible-playbook -i hosts ympd.yml

http://raspberrypi.local:8080/ みたいな感じでブラウザからアクセスすると、Web上からプレイリストの操作などができます。使う予定がないなら入れる必要はないですが、mpdクライアントがない環境でもコントロールできるようになるのでお薦めです。

f:id:toshi_a:20170302193918p:plain

Vivaldi は、サイドバーにWebページを入れることができます。ympdはレスポンシブデザインなので、サイドバーでも全く問題ないですね。

f:id:toshi_a:20170302194901j:plain

PS Vitaのブラウザです。ゲーム中に操作できるのは便利かも。

Pocket C.H.I.P. のWebブラウザで。画面サイズは如何ともしがたい。

その他のクライアント

mpd.wikia.com

上記ページにまとまっています。コマンドラインインターフェースのmpcや、リッチなCUIのクライアントもあります。Emacsで操作したかったので調べたところ、Emacs 24あたりからバンドルされているようです。自分が普段使っている意外なソフトにMPDクライアントのエクステンションがあるかもしれません。

MPD Piまとめ

MPDを紹介して、MPD Piを作成するPlaybookの使い方を紹介しました。Playbookがやっていることは、MPDの設定とSambaの設定がほとんどです。Sambaが特にそうですが、LAN内ならなんでも書き込めるようになっているなど、状況によってはそのまま使えない環境もあると思います。このPlaybookはカスタマイズしやすいようにできるだけ余計なことはしないようにしているので、外付けHDDに音楽ファイルを置くとか、Sambaを外してNASの音楽ディレクトリをマウントするとか、思いつくだけでもいろいろと応用できそうです。

PocketC.H.I.P.を買った

出会い

KOF 2016にて。見た目が良いデバイスが置いてあって、かわいいねー君なんて言うのーなどとナンパしていたら、mikutterが入っているという恐ろしい体験をしました。

CHIPとは

kapper1224.sblo.jp

気になる…

名前だけ覚えていて、12月になるかどうかでポチってしまった。

getchip.com

二週間くらいで届くという話だったけど、年末ということもあってか三週間かかった。

開ける

写真撮ってなかった…。 まずすげえと思ったのは、取り出してMicro USBで給電してやれば即使えたこと。初めてMacBookPro買った時も速攻で使い始められてめっちゃ感動したので、俺はこういうのに弱いのかもしれない。 CHIPと殻をPPAPするとかもなくて、本当にすぐ使える状態で入っていた。 これ買う人がそれ求めてるのかわからんけど、いいですね。

画面は感圧式のタッチパネルで解像度は420x272。小さすぎと思っていたが意外と大丈夫なことが多い。

キーボードはめっちゃ使いづらいと聞いていたけれど、そこまで酷くはない。見た目CTRLがめっちゃ右下にあっておかしいやろと思ったりしたけれど、標準のキーアサインとかいろいろ考えると、両手で持って片手ずつで同時押しが可能な配置になっているので思ったより良い。 キーは爪の先で押す感じかな。そういう押し心地。

期待するとガッカリ、舐めてかかると意外と良いという感じか。俺はPocketCHIPの見た目が気に入って買ったのでこれで使ってみよう。

適当に触る

ゲームする

f:id:toshi_a:20161223135134p:plain

幾つかファミコン風の謎のゲームが入っていて、死ぬほど難易度が高い。ESCキー押したらゲームのコードとか編集できるし、マップもわりとリッチなマップエディタで修正できてしまう。 俺は小学校の時に生まれて初めてテトリスを与えられた時「全然クリアできないから糞ゲーだなー改造したいなー」と思ってからプログラミングという行為でゲームを作るということを知るのに6年かかったので(家にパソコンがあったのは幸運だったが、まさかこれがゲームを作るための機械だったとは…!)、このESCキーは俺の人生の6年分の価値があるということになる。ほんとかよ。

しかしこれ改造しないと最初のマップから脱出無理な気がするんだけど。ゲームは一周クリアするまでは攻略見ない派なんだけど、ハックするのが正規ルートなんじゃねえかこれとか思った。つか調べてないけど攻略とかあんのかこれ。買ってもない宝くじが当たって仕事辞めて暇になったらこのブログで謎ゲープレイ日記再開してこのゲームdisってやるからな

ターミナル

f:id:toshi_a:20161223135315p:plain

いきなりランチャーに「Terminal」とかいうのがあるのでタップしたら案の定端末が開く。

f:id:toshi_a:20161223135214p:plain

uname -aとかやったら普通にそれっぽい文字列が出てくる。Xのアプリケーションを起動したら全部全画面表示になるんだけど、よく調べたらWMがAwesomeだった。俺が今使ってるこれじゃん。Awesomeは色々カスタマイズ効くのでこういうふうにも使えるか〜などと思ったりした。

様々なカスタマイズが入ってるけど、装飾キーがAltに変更されていたり(Superがないので)、C-qがウィンドウ閉じるのに割り当てられたりしてるっぽい。Awesomeならカスタマイズわりと慣れているのでキーマップ変えたりいろいろできて良さそう。luaでちょっとしたものも書けるのでいいぞ。

設定

画面の明るさ、音量(イヤホンさしたら音が出る)、Wifiの設定ができる。ステルスSSIDを設定できなくて残念だった(ターミナルを開いてくいっとやったらできるけど、ここまで手軽だったのでWifiくらい手軽にやりたいとか思ってしまう)。

設定画面はそれだけ。シンプル。

Debian

Debianカーネルとかいくつかのパッケージに独自のパッチを当てたディストリが入っているらしい。Debianはサーバでしか使ってないけど一番長いこと使っている。いいぞ。

とりあえず apt update からの apt upgrade で軽く優勝してからsshdとtmuxを入れてメインマシンから入っていろいろやった。雑に日本語化してfcitx入れたら日本語入力もできた。

f:id:toshi_a:20161223135346p:plain

ただ、fcitxに限らないけど、設定のダイアログがこんな小さいウィンドウを想定して無い。Awesomeは標準ではダイアログウィンドウはフロート表示する。また、ダイアログはサイズを変更できないことも多くて、はみ出して難易度が高かった。ALT押しながらドラッグして頑張ったらいける。

mikutter mobile

形から

おかのさんにもらったmikutterロゴシールを貼った。色もPocketCHIPのピンクとほとんど同じで、このためのデバイスだったのかと思うほど。

パッケージがあるからめっちゃ楽

ゆうて中身がDebianなので…。つまり…。

# apt install mikutter

これでmikutter 3.0が入ります。拍子抜けやわぁ。 日本語入力も適当なIM入れておけばいけるので、これでどこでもmikutterですね。バッテリの持ちはしらん(通常は5時間持つらしいが、mikutterを入れたら…)。

肝心の動作は全く不満がないレベル。重いんじゃねえのとか思っていた時期もあったけど、これは普通に使える。ツイートもサクサクできるし。近所の喫茶店で1時間くらい遊んでたけど全く問題ない。若干周囲の視線が気になる程度。

3.5.0-alpha2を使いたい

mikutter開発者たるものHEAD使いたいよね。 gitを入れてpullしていつもどおりに bundle --path=vendor/bundle/ --without=test です。

Installing nokogiri 1.6.8.1 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /usr/bin/ruby2.1 extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /home/chip/mikutter/vendor/bundle/ruby/2.1.0/gems/unf_ext-0.0.7.2 for inspection.
Results logged to /home/chip/mikutter/vendor/bundle/ruby/2.1.0/extensions/arm-linux/2.1.0/unf_ext-0.0.7.2/gem_make.out

An error occurred while installing unf_ext (0.0.7.2), and Bundler cannot continue.
Make sure that `gem install unf_ext -v '0.0.7.2'` succeeds before bundling.

アウ

mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h とか言われるときは sudo apt install ruby-dev build-essential ですね。

そしてまたbundleなんだけど、異様に時間がかかる。Raspberry Pi Zeroくらいの性能らしいので、いろいろとビルドして時間がかかるのは仕方ないね。

その他設定

ストレージが4GBしかなくてすぐに限界がくるので、物理的に小さくて容量がでかいUSBメモリとかを常に脳天に突き刺しておくのが良いかも。 そうでない場合、mikutterの画像キャッシュなどは一切切っといたほうがいいかもしれない。俺は何もやってないけど。

実はmikutterのキャッシュに使っているmonetaというライブラリは、ファイルシステム以外にもいろんなKVSに対応していて、バックエンドをMemcachedやRedisとかに変更することができる。やらないけど。

あと、キーバインドはメインマシンとはかなり違うのにした。キー配置が違うから当然だね。コンテキストメニューどうやって出すかわからんので、野々村とかヨドバシもキーに割り当てる感じになると思う。コンテキストメニューを表示するmikutterコマンドの実装をしような。 ディスプレイのタッチはあんまり積極的に利用したくないんだけど、一通りの操作はキーボードで済む。こういう時あらゆるキーバインドを変更できるmikutterは強い。

mikutterはクソ

f:id:toshi_a:20161223061220p:plain

一部のダイアログボックスがサイズ決め打ちなのでディスプレイに収まっていない。特にキーボードショートカットの設定とか。これはなんとかしたいね。 あと、アイコンサイズ変更できないのはどうでもいいと思っていたけれどこれを手に入れてから考えが変わった。48px四方とかでかすぎませんか!横幅420pxの人も居るんですよ!

画像ビューアも、mikutter 3.5だとダイアログウィンドウ且つデフォルトサイズが640x480になっているため、画像の全容が表示されない。mikutter 3.0では通常ウィンドウなのでフルスクリーン表示になる。こういう違いはWMの実装によって変わってくるので、一概に通常ウィンドウに戻せば全ての環境でベターな振る舞いをするとも限らないし、そもそもベターというのも人によるところがある。 かつてこの仕様については、画像ビューアのウィンドウはダイアログウィンドウにするか通常ウィンドウにするか設定できるようにするという案もあったんだけど、エンドユーザが通常ウィンドウとダイアログウィンドウがどういう扱いの違いを受けるのかなんて知るわけがないし、いやLinuxデスクトップ使ってるなら知ってるかも知れないしおれもAwesomeに於いてはなんとなく知ってるけど、かと言ってそれをエンドユーザの立場から選ばされるのは違う気がするし、そんな設定生やしまくってたら設定多すぎてキリがないので困ったなと言って放置されてた。

ただmikutterいいところもあって、開発者が自分なので、自分が不便だと思い始めたら近いうちに修正されます。ううん、しかしそれぞれ、どう解決したものか。

ポータブルなmikutter端末としてアリか

多分3GやLTE使えないとやってられないという人が多いんだろうけど、俺はテザリングしてiPod touch使うとか日常的にやっているので回線的には問題ない。 文字サイズ8pxにしたら、ツイートは1画面に表示できて3ツイートくらい。2ペインだと倍表示できるけど、そうしたら長文だと1ペインに1ツイートを表示しきらないこともある。閲覧は辛いかも。

ツイートの投稿の方は特に問題ない。俺はメインのLinux環境で使ってるfcitx-mozcで全く同じような環境を構築した。辞書も移行できるはずなのでへんな顔文字使いたくなったらやってみようかな。そういえば長音が入れられなくて、ハイフンを押したら本当にハイフンが入って変換に支障をきたすので、ローマ字のマップ変えたほうがいいかも。でもそれやるなら俺はAZIKユーザなのでAZIKにしちゃおうか。一回のキータイプのコストが大きいのでタイプ数が減る工夫は大きく効いてきそう。

ともかくCHIP、手軽に楽しめて良い。

mikutter 3.5とmikutter mobile

CHIPのランチャには以下の機能がある。

  • (電源を切る等)
  • ターミナル
  • ゲーム
  • 音楽作成ソフト
  • ヘルプ
  • テキストエディタ
  • ファイルブラウザ
  • (設定)

このうち必要そうなのは、電源と設定とターミナルということになる。 mikutterはターミナルを表示するプラグインがあるので、このランチャをそのままmikutterに置き換えてしまうのはアリっぽい。 また、ファイルブラウザはfilerプラグインという、mikutter 3.5で動作するプラグインを既に公開していて、これを使えばとりあえずファイラとしてmikutterを使用できないこともない。 mikutter 3.5には関連付け機能もあるので、ファイラプラグインでテキストファイルに対して「開く」コマンドを実行したらよしなに開いてくれるテキストエディタプラグインというのも作れそうではある。画像ビューアは先に上げたような問題があるけどバンドルされているものがそのまま使えている。関連付けはファイルではなくModelリソース全てに対して行えるので、URLを外部のブラウザではなく内部ブラウザプラグインで開く、つまり本当の意味でmikutterと連携するWebブラウザも作ることが可能なはず。mikutterのWebブラウザは何人か作っている人見たので誰かIntentに対応してくれ…!

id:ahiruZ が作ってるslackプラグインを使ってCHIPでSlackするというのも良さそう。Slackの公式クライアントをCHIPで動かすのいろいろとキツイはずなので(試してないけど、画面サイズが厳しいと思う)サードパーティクライアントに期待がかかる。図らずもmikutterがTwitterにおいてそうなっているように、SlackプラグインがCHIPのSlack環境としてデファクトスタンダードを勝ち取る未来があるかもしれない(なんだそれ)。

世の中ではCHIPでいろいろ凄そうなことしている人が多いけど、俺はとりあえずmikutterがこういうデバイスのシェルになりそうなの面白いなあと思ってる。

ワイワイタを懲らしめてやった話

誕生日らしい

先日d250g2 slackであったやりとり。

toshi_a [10:53 AM]  
お誕生日おめでt−−−−− :cake:

akkiesoft [10:53 AM]  
あらめでたい

ahiru [10:53 AM]  
おめでた

whywaita [10:53 AM]  
ありがとう〜〜

[10:53]  
(昨日)

toshi_a [10:54 AM]  
1日くらい誤差やろ、お前いくつやねん

whywaita [10:54 AM]  
22歳になったで…

toshi_a [10:54 AM]  
もう若くないのよ

ahiru [10:54 AM]  
え…

toshi_a [10:54 AM]  
エッ

エッ見た目より若いな。

少子高齢化の時代です。相対的に若いことの価値は上がっています。無闇に若いことは罪です。これはこらしめてやらねばなりませんよ。なにか贈りましょう。こう見えて俺は、微妙な気分になる贈り物を選ぶことについては自信があるのです。

わいわいたのことよくわからん

ツイートから見るwhywaita

そういえばアイツは何なんだろう。ツイートを見返してみると、情報系の学生っぽいことはよくツイートしているけど、アニメとかについてはツイートしておらず、少し見たところ趣味がよくわからないな。

ブログなどでネトスト

彼の情報を調べ始めると意味不明なコンテンツばかり出てきて頭が痛くなるのですが、その中でもアニメの総評を書いている記事を見つけることができました。

http://whywaita.hateblo.jp/entry/2016/07/07/133947

こういうのは好みの方向性がわかって有益なんでしょうが、俺はアニメ見ないので分かりませんでした。

他の記事もざっと目を通しましたが、どういうものが好みかを読み取ることはできませんでした。

干し芋は鏡

どっちみちほしいものリストの脆弱性を使ってギフトを送ることになるので、彼がどんなものをほしいものリストに入れているか見てみましょう。

https://www.amazon.co.jp/registry/wishlist/I8UFDP9ZQB17/ref=cm_sw_r_cp_ep_ws_k5UnybBV13KVQ?view=null&filter=siS3SUBQOS45I0PI

うーん、娯楽関連はポケモンの新作と3DSと牛タンブロックだけですね。完全に理解しました。

微妙なお気持ちになる贈り物ガイドライン2016

ここで、俺が今回どういうものを送りたいか明確にしておきます。

  • 相手が嫌がらない
  • 相手が喜ばない
  • 嫌がらせで送られてるのか善意か判断が難しいが、お世辞にも嬉しくはないので反応に困る
    • 困った結果、ギフトカードに書いてある内容を撮影してTwitterにアップし、商品に対するリアクションを避けようとする

これらを満たす贈り物とは

  • 大きすぎず、場所を取らない: 処分しようと思ったら簡単に処分できるもの。法的・大きさ的にゴミ箱に入れていいもの。
  • 安っぽくないもの: 見るからに1000円を割っているような安物だと気軽にdisれるので良くない
  • 負い目を感じさせないもの: 高価すぎると、相手が嫌がらせの可能性を考えなくなる。また、食べ物なんかは腐らせてしまう・アレルギーを持っている・嫌いといったことがあるとわざわざ貰ったのに食べられなくて申し訳ないと思われてしまう。
  • 使おうと思ったら使える: 実用性はあって、確かに自分は持ってないし生活に利用できなくはないが、別に困っていた問題を解決してくれるわけではないもの。ぬいぐるみやフィギュアのように実用品でないものでも、相手の好みにかするようなもの。

と、私は考えています。私は今年の夏にYukari for Androidの作者に結月ゆかりパーカーを送りましたが、それはそれは良い反応でした。

whywaitaの好みを分析

彼が喜ぶものを考えれて、それを手がかりに贈り物を考えましょう。皮肉なことですが、喜ばれる贈り物を考えるときと、決定のプロセスは似通っているのです。要するに、やはりほしいものリストが参考になります。

彼のほしいものリストに入っているものの問題点を見てみましょう。

  • 牛タンブロック: 調理の必要。日持ちしない。
  • フィリップスの4kディスプレイ: 実用的。高価。
  • ハンガー: 実用的。安っぽいわりには高価。
  • ポケモン: 遊べない可能性(3DS干し芋に入っている)。実用的(ポケモンは楽しい)。

問題点は干し芋に入っているという点を無視して書いているので、実際には問題にならないことも挙げています(牛タンの調理など)。そもそも、干し芋のリストに入っていることが一番の問題です。

やはり彼は実用的なものを好むようです。かわいいぬいぐるみなどは今回にはふさわしくなく、実用性が微妙な雑貨を贈るのが良さそうと判断しました。

贈り物の選定

エビフライ

以上のことから、whywaitaにはエビフライグッズを送るのが良いということがわかります。早速Amazonで調べてみると、結構贈り物にしては安くで品質の良いエビフライが売っていることがわかります。エビフライは贈り物のコスパとしては優れているかも知れませんね。

エビフライの罠

しかしこれには罠があって、大抵次のような注意書きがあります。

  • 食べる分を、凍ったまま170-180度の油で、4-5分程度油調して下さい。

考えれば分かることですが、スーパーの冷食とかと違って、ギフト用は自分で揚げる必要があります。一人暮らしだと絶望的ですし、実家だったとしても親が料理好きじゃないと嫌な顔をされること間違いなしです。食用エビフライは微妙な気持ちになる贈り物としては不適切で、主に上流階級が嫌いなやつに対して贈る贈り物なのです。

エビフライグッズ

エビフライは実は食品サンプル業界ではかなり重要な存在で[要出典]、Amazonでもハイクオリティなエビフライの食品サンプルがたくさんあります。エビフライの食品サンプルは、食べることができない代わりに、揚げる必要がないのでおかあさんに怒られるリスクが低いというメリットがあります。

ネックレス

正常な人間はただの食品サンプルを買って喜ばないので、食品サンプルの技術を転用したグッズがいろいろと売られています。例えばネックレスなんかは彼女に贈ると喜ばれそうです。

f:id:toshi_a:20161209004554j:plain

でかっ!意外にでかい。これは良いですね。大きすぎるものは良くないと書きましたが、それは業務用食塩25kgとかカラーコーンのことを言っているのであって、これくらいなら問題ありません。しかしこんなネックレスしてる女と出くわしたら相当怖いですね。グッズとしては気に入りましたが、あまりファッションには興味が無さそうに見えるので却下でしょうか。まあ、ファッションに興味のある人間こそこんなもの身につけないと思いますけど。

だきまくら

すみっコぐらし えびふらい抱きまくら MR48801

すみっコぐらし えびふらい抱きまくら MR48801

これはすみっコぐらしという優良コンテンツのキャラクターです。何が良いかと言うと、大体のやつがこれを貰ったら微妙な気持ちになる(いらんけどかわいい)という、いわばジョーカーカードの一種です。しかし彼の干し芋を見ている限り、かわいい系のグッズは刺さりそうにありません。ものが大きいというのもマイナスポイントです。同じキャラクターのグッズでペンケースもありますが、私はペンケースを持ち歩く習慣がなく、ユースケースが思いつかないためやはり却下です。

USBメモリ

食品サンプルUSBメモリですね。USBメモリなのでそれなりに喜ばれそうですが、かさばって意外と邪魔になる、エビフライが邪魔で刺さらない機器が多い、なんかアクセス速度が遅い、そもそもよく考えたらUSBメモリなんてそんなに使わないなど、使っていくうちにだんだん問題点に気づいていくという大器晩成型の贈り物です。しかし、さっきのネックレスと衣の質感を見比べると明らかに見劣りします。予算ももうちょっと出せるので、却下とします。

エビフライ系の問題

ここまで調べてエビフライは無理そうという結論になりました。まず、エビフライで検索すると大抵が食べることを想定した商品となっており、この時点で9割が脱落します。残りもファッション又は一発勝負のグッズばかりで、微妙な実用性という要件を満たせるものはありませんでした。

わいわいたがほしいもの

なんかどうでも良くなってきた頃、こんなツイートを見つけました。

どうやら食べ物が欲しいみたいです。茨の道ですが、あえて食べ物で考えてみましょうか。

相手を微妙な気持ちにさせたいのに要求を聞くのか、と思うかも知れませんが、相手のほしいものを理解した上で微妙にずれたものを贈るのが微妙な贈り物の鉄則。単に相手のほしいものをあげるだけなら誰にだってできます。本当に相手のことを考えないと微妙なものは贈れないのです。その意味で、微妙な贈り物は相手が喜ぶ贈り物より心がこもっているといえるでしょう。

自炊はイヤ?

どうやら自炊は普段しないようです。しかし、自炊において最も費用のかかる初期投資について言及していないので、どうやら食器や最低限の調理器具は持っているようです。であれば、簡単に調理できるが調理しなければいけないくらいを狙えば、微妙な気持ちになること間違いなしです。

逆に、この口ぶりからすると揚げる必要のあるエビフライなんかは絶対ダメですね。

質より量

エンゲル係数を下げたいということは、量が欲しいのでしょう。わいわいたはデブなので、よく食べるはずです。

つまり、量より質です。

米食べろ

上記の一連のツイートの中で、アルファ米についての言及を見つけました。デブのくせに、口に入ったら何でも食べ物というわけではなく、ある程度舌は肥えているようです。であれば、良さそうな米を送ってあげるのが良いのではないでしょうか。

米は食べ物ですが、保存が効きます。長期保存すると味が落ちますが、エンゲル係数を下げたいんだろ、贅沢言うな。米アレルギーというのも存在するようですが、米を炊いていることがわかるツイートがあったので、大丈夫そうです。炊飯器を持っている又は自由に使える状況にあることもほぼ確実です。

あと、突然米が送られてきたら引くんじゃないでしょうか。俺は引きます。

強いお米

良いものを見つけました。

うまい米が小分けになっていていろいろ楽しめるというものです。これは喜ばれそうです。 いや、本当にそうでしょうか。このセット、270g☓3というすっごい微妙な量です。これはエンゲル係数に貢献しないこと間違い無し!

エビフライの再来

これだけだと以外と安いので、おかずもほしいですね。 あれだけエビフライの話をしたので、エビフライの食品サンプルでもつけておきましょう。先程エビフライの問題点については散々見てきました。しかし、これがメインでないとなると話は別です。数あるエビフライの中からこれを選んだのは、次のような理由からです。

  • 実用性がない
  • 衣の質感が良い(写真で見る限り)
    • 全く実利に貢献しないクオリティ
  • 値段が米とほぼ同じ

その他テク

ギフトラッピングは必ず着けましょう。これは308円かかり、今回は二品なので倍かかります。受け取った相手からしたら「こんなことに金かけるくらいならもっとマシなもん送れや!」という気持ちになりますが、わざわざラッピングにお金をかけてくれた人にそんなことを言うわけにもいかず、グッと飲み込むしかありません。これです!この体験こそ私が送りたいものなのです!たった616円で微妙さが一気に増すので、安い取引です。

あと、私は必ずメッセージに「私はmikutterの作者です」と一言添えます。これは「私はメガネケエスの作者です」のパロディーですが、元ネタを分かって無くても脱力感を与える不思議な力がある言葉です。また、直接名乗らなくとも誰からの贈り物なのかわかるというメリットもあります。

実戦

いざ、尋常に勝負!リアクションに困れや!

そういえば随分誕生日から日数が経過しているので困惑していますね。

ギフトラッピングに困惑しています。

mikutter作っててよかったと思うことって、これができることくらいなんですよね。 あれっ?俺が微妙な気持ちになってきた

米によってエビフライがよく引き立っていますね。狙い通りです。

思ったよりまともなものじゃねえか!とリアクションに困っています。いやいや、よく見てみたまえ、まあまあ意味不明なものが今手元にあるぞ。そんなこともわからないくらい彼は混乱しているのです。

きましたーーーーーー!!!!!奇行に走り出しました!!!!!大勝利です!!!!!!!!!

被害妄想をはじめました。精神的にかなり追い詰められているようです。

これから家にいるあいだ、常にわいわいたの側には謎のエビフライがくっついていることになるでしょう。 そして、デブなので米はすぐになくなるでしょう。米の空き缶という異常な物体と微妙な大きさのエビフライを前に、彼は何を思うのでしょうか。

反省

私は満足しました。わいわいたがどう思おうが俺には関係ありません。リアクションが面白かったのと、ちゃんと俺が起きている時に実況したことは褒めてやりましょう。

ただ、これはギフトを送った翌日くらいに見た記事なのですが、

ひたすら右腕を挙げたまま仁王立ちをしていました

友人がオタクライブに行った話 〜 whywaita Advent Calendar 5日目 〜 - 上から下まで面白いことを…

わいわいたは、なんと初めて行った声優ライブでひたすら右腕を挙げたまま仁王立ちをするオタクゥらしいのです。それだったら、エビフライのペンダントのほうが良かった…。贈り物にもしもはないですが、エビフライを首から提げてひたすら右腕を挙げたまま仁王立ちをするオタクゥが爆誕したかもしれないのです。更に悪いことに、今これを書いている時点ではあのエビフライネックレスは売り切れてしまっています。もしかしたら、この世界の何処か別のわいわいたは声優ライブでエビフライを掲げて仁王立ちしているかもしれません。エビフライネックレスの使い方に困って声優ライブに着けていくわいわいたが存在したとしたら、それはどんなに素敵なことでしょう。

今回わいわいたについて初めてちゃんと調べましたが、相当な異常者だということがわかりました。きっとエビフライがマグネットだろうとネックレスだろうと、常人では思いもよらないような奇行に走ってくれるはずです。私も、もっともっと微妙なものを贈れるように精進します。