2018-05-21 劇場ミルキィの復刻上映に行ってきました


ドリパスというサイトがあります。

公開が終了した映画に対して、リクエストを募ることで復刻上映を目指す、というサイトらしいです。

詳しい経緯は分からんのですが、Project Milky Holmes の終了を宣告され、余命1年未満となった我々の一部界隈から、「劇場ミルキィの復刻上映を目指そう」(なんか最近イベント少ないし)みたいな謎の機運があり、みるみるうちにリクエストのランキングが上がり、上映候補となりました。

販売開始されるや否や、みるみるうちにチケットが売れていき。。。

といった感じであり、その日のうちに無事完売となったわけでありました。

そして先週末、5/19 に復刻上映が開催されたのでありました。

この日は仕事もあって、あまり元気ではなかったのですが…

まあこんな感じの感想でした。やっぱりミルキィホームズは最高だな!

映画そのものの感想につきましては、以前山ほど書いたので、気になる方はこちら見ていただけると幸いであります(↓)

なんか本日は「探偵の日」らしいので、あまり内容は無い感じですが、記事を書いてみましたよ、という話でした。 ではでは。



2018-03-18 大腸の精密検査をしてきました


お食事中の方はもしかしたら見ない方がいいかもです。(食事しながらインターネッツ見てる人がそういうの気にするかどうか謎だけど)

今年の健康診断で、大腸が「要精密検査」になってしまいました。(ちなみに大腸をみる検査は「検便」ね。他にも超音波とかでも引っかかることあるかもだけど)

検査前の話

地元の病院へ行ったところ、「若いから多分大丈夫だと思うけど、一応やっとこうね」と言われ、大量の下剤(後述)を渡され、下剤の飲み方と、食事制限の話などをされました。

下剤は病院で飲むのが一般的らしいのですが(体調悪くなったりすることもあるから)、家が近い人は家で飲んでくるようにするらしく、「自転車で10分くらいなんですけど、大丈夫ですか?」と聞いたところ、看護婦さんに「うんうん、全然大丈夫」と言われたので、「なるほど」と思い帰宅しました。

食事制限の話

検査の3日前から食事制限が始まります。検査をうまくやるためには、繊維質を避けた食事が必要らしいです。一応紙を渡されて、そこにオススメの食事など書いてあるのですが、昼ご飯とかはコンビニで繊維質入ってない食事探すのはなかなか面倒でした。(パンか蕎麦くらいしかないのよ)

あと、僕は野菜が好きなので、野菜が食べられないのは非常に辛かった。なお、禁酒は前日のみです。前日はあとコーヒーなんかも控えた方がいいらしいです。(色ついちゃうから、らしい)

前日は早めに帰るつもりだったけど、普段より少し早いくらいにしか帰れず、食事とるかどうか迷ったけど、昼過ぎまで食べれないのは無理だろうと思って、予定時間ちょっとオーバーしてたけど食べちゃいました(前日の夜は19:00までに素うどん等を軽めに食べるだけにすることになっています)

翌日(検査当日)に飲む下剤を作ります。

寝る前に普通の下剤(目薬みたいな容器に入ってるやつを、小さじ1と1/2くらい飲む)を飲んで、普段より少し早めに就寝しました。

検査の朝

6:00 に起きました。(そういう指示になっている)。前日作った下剤は飲んでない時点で

こうなっていました。で、前日作った大量の下剤を飲み始めます。200ccを10分くらいのペースで、2杯。で、水を200cc。これを繰り返して、ひとまず1リットルくらい飲め、と書いてあるので、その通りにしたのですが。。。

まずい。とにかくまずい。

なんか調べて見たら、今回もらった下剤は以前のものより濃度をアップすることで、飲む量を減らして「飲みやすくなったよ、やったね」という感じの代物らしいです。正直なところ「どっちもどっちだな」と思いました。(昔の飲んだことないから、これでもだいぶマシなのかもですが)

飲んでる途中から既にトイレに行きたくなる感じで、なんというか、下痢みたいな感じなんだけど、お腹は全く痛くない、というすごく不思議な感じでした。トイレに行くのは全く辛くない。とにかく下剤がまずい。

でもトイレに最低10回行かないといけないらしい。10回行くまで頑張って下剤を飲み、それから病院に向かいました。

病院への道中

初日に看護婦さんに「10分くらいなら全然大丈夫」と言われましたが、全然大丈夫じゃないですね。ひどい下痢と同じような状態で自転車で病院に向かうの不安しかなかったですね。「あーこれ、ミスったらゲームオーバーだな。まじつらいな」と思いつつ、なんとか病院までたどり着くことに成功しました。

病院で

家の処置でだいたいOKだったらしく、少し水をもらったり、時々便の状態を確認したりしましたが、すぐ検査の待ち行列に入ったようでした。

検査

下を脱いで、紙パンツに履き替えます。希望すれば鎮静剤を出すらしいですが、「出しても痛さは変わらない」と言われたので、「じゃあなしで」ということで、普通に検査しました。

検査前に、腸の動きを止めるための注射をしました。筋肉注射なのかな。これがめっちゃ痛い。看護婦さんに「これめっちゃ痛いですから」と言われました。こういうの珍しいと思う。

ベッドに寝かされて、モニターで自分で腸内を見れる感じになっていました。胃カメラは辛い、と聞きますが、大腸はそんなに辛くなかったですね。面白い(?)のは、何か入ってる感覚って、お尻の周辺はあるんだけど、腸内は全然分からなくて、「いまどこなんだろなー」と思いながらモニター見てました。あと、大腸(ってか内臓?)ってめっちゃきれいなのね。当たり前なのかもしれないけど、傷跡とか「ささくれ」みたいになってるところとか全然ないし、(健康だったからだけど)腫れてるようなところもないのね。ちょっと感動しました。

つーわけで、20分くらい(?と紙に書いてあった)で検査は終了。「何もなし、大丈夫」とのことでした。

検査後

検査前の注射のせいか、全く食欲がなかったですが、とりあえず水やらホゲホゲやら飲んで、無事復活した感じでした。

ちなみに油や生もの以外に炭酸も避けろとあったので、本当のところは微妙ですね。(でも飲んじまったからしょうがない。あと、ポリープとかあって、切除した人は食事制限があるらしい。)

というわけで、大腸の検査の話でした。

この話、文才のある人が書くと多分めちゃめちゃ面白いと思うので、運悪く(運良く?)引っかかった人はチャレンジしてほしいな、と思います。



2018-03-13 食事制限をしている


今年の健康診断で、大腸が要精密検査になってしまった。検査のための食事制限が今日から発生しているのだが、これが個人的になかなか厳しい。 繊維質が一切ダメらしく、野菜・豆類・海藻・キノコがダメなので、結構難しい。

例えばおにぎりなんかも、海苔がNGだし、今日のお昼は蕎麦を食べたんだけど、薬味のネギとか海苔とかダメなので、すげー味気なくて、とにかく辛い。僕は割と野菜が好きなので、野菜が食べられないのがとにかく辛い。

明日はどうしようかな。。。



2018-03-05 引っ越しました


そもそもどこに住んでたか、公表してるわけではないので微妙っちゃ微妙なのですが、1ヶ月くらい前に引っ越しました。 場所的には出戻りなのですが、勤め先などは変わっておりません。(勤め先の)出戻りとかは無いです。

と言うわけで、今後ともよろしくです。



2018-01-11 Furl で配列のパラメータを渡す


Furl で、配列のパラメータを渡すの(hoge=aaa&hoge=bbb みたいなやつ)をやろうとしたら、うまく行かなかったのでメモ。

app.psgi

まず確認用の psgi を作ります。パラメータ hoge の値を返すだけの物体です。

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Plack::Request;

my $app = sub {
    my $env = shift;
    my $req = Plack::Request->new($env);
    my @params = $req->parameters->get_all('hoge');
    return [
        200,
        [ "Content-Type", "text/plain" ],
        [ Dumper(\@params) ],
    ];
};

test.pl (ダメ版)

普通にパラメータをハッシュリファレンスで渡すやり方です。Furl がいい感じに POST リクエストのパラメータに変換してくれることを期待しています。(値が配列でなければ問題なく動く)

#!/usr/bin/perl
use strict;
use warnings;

use Furl;
use URI;
my $param = { hoge => ['aaa', 'bbb'] };
my $ua = Furl->new();
my $header = [
    'CONTENT-TYPE'   => 'application/x-www-form-urlencoded',
];
my $res = $ua->post('http://localhost:5000', $header, $param);
warn $res->content;

さっきの PSGI アプリを動かした上で、実行するとこうなります。

perl test.pl
$VAR1 = [
          'ARRAY(0x7ffcb8803268)'
        ];

なんかおかしなもの(配列リファレンスじゃなくて、なぜかそのアドレスの文字列)が返って来ます。。。

$param = { hoge => 'aaa' } みたいな値の場合は

$VAR1 = [
          'aaa'
        ];

となるので、大丈夫なんですけどね。困ったものです。

test.pl (大丈夫だった版)

「これはこれでどうなんだ」感はありますが、自前で URI モジュールでパラメータを作ってあげるとうまく動くようです。

#!/usr/bin/perl
use strict;
use warnings;

use Furl;
use URI;
my $param = { hoge => ['aaa', 'bbb'] };
my $ua = Furl->new();
my $uri = URI->new();
$uri->query_form($param);
my $header = [
    'CONTENT-TYPE'   => 'application/x-www-form-urlencoded',
];
my $res = $ua->post('http://localhost:5000', $header, $uri->query);
warn $res->content;

実行すると、こんな感じ。

$VAR1 = [
          'aaa',
          'bbb'
        ];

期待した通り、配列で値を渡すことができるようになっています。

あんまり深く追いかけていないのですが、LWP::UserAgent でもダメっぽいし、そもそもWebアプリとしては配列でパラメータを受けるのはだいぶ微妙(セキュリティーホールにならないように、Plack::Request はだいぶ面倒というか、あえて面倒にして Hash::MultiValue で受けないとダメにしているくらい)なので、あまり使っている人がいないのかもしれない。

あと、比較的モジュールが新しい環境で試してはいるのだけど、もしかすると周辺のモジュール(HTTP::Request とか HTTP::Message とかその辺)のバージョンを上げると治ってしまったりするのかもしれない。っていうかこの現象、バグっぽく見えるけど、本当にバグかどうか分からないし、どこがバグっているのかもイマイチ分からないので、こういうの悩ましいな、と思ったのでした。久々に変なの踏んだな。。。



2017-12-15 キャラクターソングとそうじゃないやつの違いがよく分からない、という話


これは ミルキィホームズ Advent Calendar 2017 の15日目の記事です。

風邪をひいてしまって、完全に体調が怪しいので今日は小ネタです。

ミルキィホームズの楽曲は、明らかにキャラクターソングっぽいやつと、そうじゃないやつがあります。

例えば、

これは「正解はひとつ!じゃない!!」のジャケットの裏面ですが、キャラクター名と中の人の名前が両方書いてあるスタイルです。

ところが、Wikipedia を見ると、

正解はひとつ!じゃない!! - 最終更新 2017年12月2日 (土) 07:02

なお、前作「雨上がりのミライ」はキャラクターソングとしての名義で発売されたため、ユニット・ミルキィホームズとしては今作がデビューシングルとなる[4]。

とか書いてあったりします。

実は正解のような、「キャラクター名と中の人の名前が両方書いてあるスタイル」は結構珍しくて、ほとんどは「ミルキィホームズ」という名義しか書いてなかったりして、キャラソンなのか声優ユニットとしての楽曲なのか、曖昧だったりします。(そうじゃないのかもしれないけど、クレジット上はそう見える)

デュエット曲やソロ曲は全く逆で、ちゃんと「キャラクター名(声優名)」という表記になっており、明らかにキャラソンだなー、という感じになっています。(三森さんと佐々木さんはソロ楽曲持ってるから、この表記じゃないと変だよね、ってのはあると思います)

近年のユニット曲は歌い方も「別にキャラクターに寄せてないよね」と思われるものも多く、なんらかの意図があるのか、そんなものはなくて、「キャラクターもユニットも密接不可分でしょ」、という話なのか、謎といえば謎です。

という、どうでもいい話でした。ではでは。



2017-12-12 ミルキィホームズが好きすぎてやってしまったこと(技術編)


これは ミルキィホームズ Advent Calendar 2017 の12日目の記事です。

今回は元々のアドベントカレンダーの趣旨に近い(?)技術系の話(?)です。

ミルキィが好きすぎてやってしまったこと(技術編)です。

ドメイン

少し前に、.yokohama というドメインが取れるようになりました

ミルキィホームズといえば「偵都ヨコハマ」。.yokohama が取れるなら teito ってやつ取れば、teito.yokohama 。つまり milkyholmes@teito.yokohama みたいなめっちゃ最高なメールアドレス作れるのでは?! と思いつつ、「でも公式が取るなら尊重しよう」と思い、1, 2ヶ月くらい自重していたのですが、公式が取る気配がなかったので、teito.yokohama ドメインを無事取得しました。

これ、本当に必要であれば、公式に譲るのも、やぶさかではないのでなんらかの手段で連絡くださいな。

このドメイン使って Webサービス作ったり、メールサーバ建てたりしたいなぁ、と思いつつ、結構放置気味だったりします。

Acme::MilkyHolmes

僕はお仕事では主に Perl を使っているプログラマでもあるので、Perl のモジュール(いわゆるライブラリ)を書いていたりします。そんな中、作ったのが Acme::MilkyHolmes という Perl のモジュールです。

元々は、Acme::MorningMusume(モーニング娘。) とか Acme::PrettyCure(プリキュア) とかのこういう先人たちの偉業があって、まあ僕はその巨人の肩に乗っかっているわけですが、ミルキィホームズのあれこれを取得できる大変便利な Perl モジュールであります。

Acme::MilkyHolmes については、作った当初くらいに発表資料を作っているので、こちらをご覧ください

何ができるかは、モジュールの SYNOPSIS にも書いてるんですが、まあこんな感じです

use strict;
use warnings;
use utf8;
use Acme::MilkyHolmes;

# fetch members of Milky Holmes(eg/say.pl)
my ($sherlock, $nero, $elly, $cordelia) = Acme::MilkyHolmes->members();
$sherlock->say('ってなんでですかー');
$nero->say('僕のうまうま棒〜');
$elly->say('恥ずかしい...');
$cordelia->say('私の...お花畑...');

# create character instance directly
my $sherlock = Acme::MilkyHolmes::Character::SherlockShellingford->new();
$sherlock->locale('en');
$sherlock->name;               # => 'Sherlock Shellingford'
$sherlock->firstname;          # => 'Sherlock'
$sherlock->familyname;         # => 'Shellingford'
$sherlock->nickname;           # => 'Sheryl'
$sherlock->birthday;           # => 'March 31'
$sherlock->voiced_by;          # => 'Suzuko Mimori'
$sherlock->nickname_voiced_by; # => 'mimorin'
$sherlock->toys;               # => 'Psychokinesis'
$sherlock->color;              # => 'pink'

# fetch each team members
use Acme::MilkyHolmes qw($MilkyHolmes $MilkyHolmesFeathers $MilkyHolmesSisters);
my ($sherlock, $nero, $elly, $cordelia) = Acme::MilkyHolmes->members_of($MilkyHolmes); # same as members()
my ($kazumi, $alice) = Acme::MilkyHolmes->members_of($MilkyHolmesFeathers);
my ($sherlock, $nero, $elly, $cordelia, $kazumi, $alice) = Acme::MilkyHolmes->members_of($MilkyHolmesSisters);

モジュールに同梱されている eg/say.pl (SYNOPSIS でもやっているやつですが)を実行すると

こんな感じになり、大変素敵な感じです。とはいえ、微妙な面もいくつかあり

  • 誕生日は公開されてるけど、何年か分からない
  • シャロの正しいスペルが分からない
    • 英語版 wikipedia に準拠しているんだけど、これがどうやら正しくないっぽいが他に一次情報がないのでどうにもならない

などの微妙な問題があったりします。これらをなんとかしてくれるスーパーハッカーさんいれば、ぜひ pull request ください

と、いうわけで、本日はミルキィホームズにまつわる(?)Webエンジニアっぽい話でした。

ではでは。



2017-12-11 ミルキィグッズ(ミルキィグッズではない)について


これは ミルキィホームズ Advent Calendar 2017 の11日目の記事です。

今日は「ミルキィグッズ(ミルキィグッズではない)」を紹介しようと思います。

ミルキィホームズが好きすぎて、「ミルキィ(ミルキー)○○」とか、ミルキィカラー4色の物体とか、ダメダメな探偵が出てくる作品とか見つけると、ついつい欲しくなっちゃうんですよね。

と、いうわけで、ついつい買ってしまった、ミルキィっぽい(非公式?)グッズの数々を紹介しようかと思います。

ミルキィ(ボディソープ)

牛乳石鹸のボディソープ、「ミルキィ」です。これ、昔はミルキィカラー4色だった(結構頑張って検索したけど、当時のやつが見つからない。。。)のですが、黄色と緑が合併した感じになってしまいました。。。この写真にある通り、いず様カラーのやつを主に使っております。

ミルキークイーン

お米です。

かつて行われた「おこめまつり」というイベントでは、実際にミルキィホームズとコラボした「ミルキィ米」というのも販売されました。(もちろんワタシも書いました)。その時の品種がこのミルキークイーン。ミルキィホームズを推す前から実は好きだったりします。

ホームズさんは推理ができない(1)

ダメダメ探偵「ホームズさん」が主人公の漫画です。ゆりゆりしています。

ホームズさんは推理ができない(2)、のど自慢殺人事件

「ホームズさんの2巻」です。1巻の伏線が綺麗に回収されてなかなか面白かった。そしてやっぱりゆりゆりしています。

「のど自慢殺人事件」、ミルキィの探偵服みたいな「探偵アイドル」にまつわる殺人事件です。

展開が独特で面白かったなぁ。

本作品については、この Advent Calendar で @mercury_c さんも記事を書いてくれました。

南部美人 酒未来

最後は日本酒です。

日本酒の原料の米で、「酒未来」(読みは「さけみらい」らしいですが)という品種があるそうで、それを使った日本酒が色々出ていますが、佐々木未来さんの出身地の岩手のお酒、「南部美人」の「酒未来」なので、これ完全にミルキィグッズでしょ、ということで購入しました。

結構値段するので、普段はi☆Risグッズを飲んでるのは内緒だ!(内緒じゃなくなった)

と、いうわけで、ミルキィグッズ(ミルキィグッズではない)の紹介でした。



2017-12-10 start-stop-daemon とちょっと変わったユースケースについて


これは OSS紹介 Advent Calendar 2017 の10日目の記事です。

本日紹介するのは、start-stop-daemon です。Ubuntu ではおなじみで、init系のスタートアップスクリプトに噛ませると pid ファイル作ってくれたり、pid ファイルをみてプロセス殺してくれたり、daemonize してくれたりする便利君です。

Ubuntu 以外の環境(僕のところでは、CentOS) でも有用そうだな、と思って使ってみようと思ってググって見たのですが、例えばこちら などにある、developer.axis.com というサイトがどうもポリシーが変わったのかなんなのか、ソースが置いてなくて、使えないじゃん。。。となります。(めっちゃググってみたけど、なぜかみんなココからソースを取って来てる。。。コピペ記事なのか?)

と、いうわけで、別のアプローチで調べてみたら、github に移植版(?)があったので、こちらを使うことにしました。

基本的な使い方は、同梱されている example_service にもあるように、こんな感じで、init スクリプト作る際に使うのがメインかと思います。

へーしゃでは、プロセス管理に主に monit を使っているので、monit のスクリプトに組み込んで活用しています。ざっくりこんな感じ。

check process hoge_service with pidfile /var/run/hoge_service.pid
  start program = "/usr/sbin/start-stop-daemon --start --background --startas /home/hoge/bin/hoge_service.pl --make-pidfile --pidfile /var/run/hoge_service.pid" as uid hogeuser and gid hogegroup
  stop  program = "/bin/bash -c '/usr/sbin/start-stop-daemon --stop --pidfile /var/run/hoge_service.pid && rm -f /var/run/hoge_service.pid'" as uid hogeuser and gid hogegroup
  if 5 restarts within 5 cycles then stop

hoge_service.pl を最初から daemonize しておけば良いのでは?と言われると、全くその通りなのですが、ただ、このスクリプトは元々 docker で動かす予定で、一部環境では docker で動かしています。docker で動かすぶんには foreground で起動できれば十分で、pid ファイルなども特に必要ありません。

ただ、一部では docker に載せられなかった環境もあって、そこでは普通に起動する必要があり、monit + start-stop-daemon で動かすことになった、という背景です。

以上、start-stop-daemon の紹介と少し変わった使い方のお話でした。



2017-12-10 Minion について


これは Perl Advent Calendar 2017 の 10日目の記事です。

昨日は @ytnobodyさんの Perlコアモジュールに寄せてみる でした。コアモジュール縛り、たまに必要になるんですが、近年の Perl だとコアにも便利機能が結構ありますよね。

今回は Minion というジョブキューを紹介しようと思います。

ジョブキューについて

「ジョブキューて何?」という方は以下の記事など見ると良いかと思います。

2011年の記事なので、少し内容が古いかもしれませんが、基本的なことは網羅されていると思います。また、Minion は比較的新しい(2014年リリース)なので、ここでは取り上げられていませんが、使い方、できることなどはだいたい同じです。

とはいえ、「だいたい同じ」では新しいものを作る必然性もあまりないわけで、Minion には Minion ならではの特長もあります。

Minion の特長

  • アクティブに開発されている
    • 毎月新バージョンが出ている感じで、メジャーバージョンアップも頻繁です
    • なので、不用意にバージョンあげると互換性は結構壊れてるかも
  • デフォルトのバックエンドは PostgreSQL
    • MySQL や SQLite も使えます。実用性はわからないけど、Redis のバックエンドなんかもあります
  • PostgreSQL の結構新しめの機能を使っている
    • SKIP LOCKED とか使っています
    • 排他制御をいい感じにやりつつ、ジョブが遊ばないような工夫がされています
  • 依存モジュールが結構シビア
    • SQL::Abstract, DBD::Pg あたりが既存環境だと辛いかも
  • 後発なので、便利機能色々
    • 優先度のサポート
    • 管理系の API を持っている
  • etc.

と言った感じです

使ってみよう

まず、DB を用意します。近年であれば、docker でやるのが楽ですかね(開発環境にすでにあるなら、それを使いましょう。ただし Minion は PostgreSQL 9.5以上を要求するので注意)

docker run -d --name postgres96 -p 5432:5432 postgres:9.6
createdb -h localhost -U postgres test

必要なモジュールをインストールしましょう

cpanm Minion Mojo::Pg

雑な動作サンプルはこんな感じです。

#!/usr/bin/perl
use strict;
use warnings;
use Minion;
use feature 'say';

my $minion = Minion->new(Pg => 'postgresql://postgres@localhost/test');

# ワーカーの定義
$minion->add_task( tashizan => sub {
    my ($job, @args) = @_;
    say $args[0] + $args[1];
});

# エンキュー
$minion->enqueue(tashizan => [1, 2]);
$minion->enqueue(tashizan => [100, 200]);

# ワーカーの起動
my $worker = $minion->worker;
$worker->run;

実行するとこんな感じ。

perl worker.pl 
3
300

ワーカーが動きっぱなしになるので、Ctrl-c で抜けましょう。

実際に使うときは、ワーカー、エンキュー側でファイルを分けて、いい感じにクラス設計して使ってくださいね。

もうちょっと細かい話も書きたかったですが、分量と時間的に(僕が)厳しくなってきたので、続きはいつかどこかで。

あと、事例としては、僕の Kichijoji.pm の話辺りを参考にしていただければ、と思います。

明日はskaji さんの Mouse と Xslate の話みたいです。これは楽しみだ。

ではでは。