2015年10月25日日曜日

今期 これを見る(2015年秋)

「面白いアニメしか見たくないなど甘え。皆が等しくこの不幸を負うべき」
今期のラインナップは、そんな、意識の高いアニメファンに試練を与えられた試練である。
もちろんつきあってられないので、私自身はいつもどおり、どんどん消し込んでいくのだけど。

うたわれるもの 偽りの仮面

前作アニメ→前作ゲーム→今作ゲーム→今作アニメ(←いまここ)
家出少女達が成り行きでいろいろやっちゃう作品。
主人公が女の子のみならず、男の子たちからもモテモテなのまで前作通り。
ファンタジーなりに、割と一般人の生活や風俗をていねいに描こうとしていて、そこが個人的な見所。

ヘビーオブジェクト

初見の印象は、刃が立たなさそうな敵を手持ちのリソースだけで仕留める展開が『アルドノア・ゼロ』みたいだな、だった。
主人公補正甚だしい昨今のアニメの見過ぎで感覚がおかしくなっていた。こっちの構図の方がむしろ王道だ。普通の作りなのだから似てるも何もない。

ブレイブビーツ

大好評だった(オレ調べ)『トライブクルクル』の後継番組なんだけど、ちょっと控えめ。
ダンス人生まっしぐらだった前作に比べて、本作は味付け程度になるのだろうか。
このままだともったいないので、何らかの大盤振る舞いが欲しいところ。

鉄血のオルフェンズ

「『ロミオ』だった。」(←悪い『ロミオと青い空』ファン)
ソロモン72柱を模したガンダムが用意されるのなら、1話で2体くらいずつ出していかないと悪魔図鑑が完成しないので困るのだけれど。
『Gガンダム』に負けないくらいの飛ばしたデザインのガンダムを希望。(ガンダム・ベルフェゴールはやっぱり便器に座った姿で登場するのだろうかと思ったけど、かの悪魔は72柱に数えられた中にはいなかった。残念!)


2015年4月4日土曜日

ちょっとした改良

RasberryPiを利用しての楽々リモコン生活構築も一段落。もうそろそろ気になってた別のプロジェクトを進めるか〜。
とは言っても、そんな大掛かりなことを始めるつもりはなくて、以前作った小さいサービスの小さな改善。

ComicDashの新刊カレンダーをiCalendar形式に変換するサービスcomdashcal
以前から、時折エラーを吐くのを気にはしていた。元サイトのアクセスに時間がかかると処理を中断してしまうのだ。
気にしつつ放置していたのは、ユーザー数の少なさもさることながら、エラーによるユーザーへの影響を小さく考えていたことによる。
オンラインのカレンダーに読み込んで使われる前提なので、多少のエラーがあっても更新が滞るだけで、いきなり消えてしまうことは無いから平気くらいに考えていたのだ。

ちょっと考えを改める気になったのは、1時間に数回とか、割と頻繁にアクセスしてくる(本人が意識しているか否かはともかく)ヘビーな使い方をしてくるユーザーもぼちぼち現れてきたから。こちらに行われるアクセス1回が、まんま元サイトへのアクセス1回になってしまうのがさすがに申し訳ないような気がしてきたのだ。寄生虫なりの遠慮というものがあってしかるべきだ。

なので、今までサボっていたキャッシュ機能の実装というのが今回の改善のテーマである。
一つのページヘのアクセスが連続したら、以前アクセスしたときのデータを再利用することとし、元サイトへのアクセスを控える。comdashcalの場合、アクセスするページはそのユーザーの新刊カレンダーのページなので、ユーザーごとに1ページずつ、その内容を保存することになる。
とはいえ、GoogleAppEngineにはmemcacheが最初から入っているので、これを使うだけ。新しいミドルウェアの導入とか必要ない。なんで今までやらなかったのか。
そういや、金融でも物流でもオンラインは当然即時反映、さもなきゃ夜間バッチで翌日反映が当たり前。今までキャッシュなんか扱ったことなかった。I am COBOLer.
人生初のネットワーク・ソケット・プログラミングの次はキャッシュを使った通信量削減に初挑戦だ。この歳で。

ついでに、これまた今更ながらTask Queueという仕組みも導入している。
キャッシュへのページ内容の保存は、元サイトにアクセスしたときのついでに行うのだが、元サイトへのアクセスが中断する場合は当然その内容を保存できない。
これでは「たまたまうまくいく」ことを期待して、元サイトへのアクセスを繰り返すことになってしまう。(実際、うまくいくことも多かった)
ユーザーからの直接のリクエストが失敗した時に、裏でこっそり(もう少し気長に)処理をやり直してキャッシュへのページ内容の保存の部分だけ行い、次に同じユーザーがやってきた時に「こんなこともあろうかと」と取り出してみせる。そんなことを目論んでいる。

果てさて、うまく動きますかどうか。

2015年3月21日土曜日

やってきたこと。そしてアン死亡

学習リモコンiRemoconWiFiを、さらにブラウザから操作するWebアプリを造った。

操作するだけならスマホアプリがある。一般的な利用ならコレで十分だ。便利に使えている。
定型的な操作を前もってタイマー登録する作業を、既に登録されているタイマーのリストを確認しつつやりたかった。
この、既に登録されているタイマーの情報がスマホアプリでは薄い。これはiRemoconWiFiが学習済みの赤外線信号を(どの家電のどのボタンという情報を持たず)番号で管理していることによる制限だ。

iRemoconWiFiそのものから情報を得られないなら、別な機器に情報を持たせて、ついでにiRemoconWiFiそのもののコントロールもソイツに任せたい。そういう発想だ。

何しろWebアプリなので、PCからでもiPadからでも操作できる。
しかし、Webアプリのサーバーが常時待機している体制にないとほとんど実用にならない。寝床からiPadで操作するのに、いちいち起き上がってPCを立ち上げてから、というのは寒い。PCを立ち上げっぱなしにしておけるほどの余裕も無い。

最初に考えたのは月額1,000円のVPSだが、iRemoconWiFiは家庭内ネットワークの外からの操作には現状、個人利用向けでは対応していない。(法人なら応相談とか)
なので、実現には家庭内ネットの中にWebアプリを動かせるサーバーが必要だ。どこかに、安くて(予算1万円)小さくて(手のひらサイズ以下)電力消費の少ないPC(ネットワーク機能とプログラミング環境が必要)はないものか。Android端末、超小型PC等いろいろ物色した結果、RasberryPiを選択。こんなの。
この手のひらサイズの機器に、ディスプレイとキーボード、マウスが繋がる。ある程度セットアップしたら、ネットワーク経由での操作に切替えて、ディスプレイ等は外してしまえる(何しろウチではテレビと兼用だ)。
Raspberry PiにはLinux系列のOSをインストールして使う。推奨のRaspbianを使った。これにiRemoconWiFiと通信するための自作ソフトと、それを操作するためのやっぱり自作のWebアプリ、Webアプリを動かすためのサーバー(gunicornを利用)やらウンタラカンタラ。

さて、動作も良好だし、事故に備えてバックアップでも……というところで、MicroSDメモリ(Raspberry Piではハードディスク代わりにSDメモリを利用する)が壊れて、起動しなくなった。えっ、これからバックアップを取るトコなんですけど?!

Raspberry Piの弱点はこのメモリと電源。何しろナリが小さいので自前の安定化装置とかは内蔵不能。ACアダプタが頼りだ。そして、電力供給が一瞬でも途切れたら、お皿の上の料理が床にぶちまけられる。3秒ルールを適用する暇もなく、即生ゴミだ。
……ということを3回ほど繰り返した。

このままではダメだ。
楽するために色々買ってきたのだ。各種ソフトのインストールの練習ならわざわざ機器を買うまでもなかった。
よし、自動化しよう!

以前、Chefにチャレンジしていたが、仕掛けが複雑すぎて逆に手間だった。数十台のサーバの管理が仕事ならともかく、やりたいのは1台のサーバのセットアップを(壊れる度に何度でも)繰り返すことだ。もうちょっと手軽なAnsible(あんしぼー)に乗り換える、今がそのチャンス。

何度か繰り返したセットアップ作業中に利用したコマンドを1つずつ順番に、Ansibleの設定に置き換えていく。同じPCに同じ設定を適用できれば十分なので、再利用性とか汎用性とか考えず、安直にベタ打ち。
設定書く→実行する→失敗する→修正する→実行する→成功する→設定継ぎ足す→実行する→失敗する→......
実行の繰り返し回数は増えるものの、叩くコマンドが1種類で済むのと、一旦成功した部分を飛ばして失敗したところから進める機能があるので、早いし気楽だ。

サーバー機器向けの構成管理ツールは色々あるけれど、Ansibleは事前に準備が必要なものが少なくて済むのが嬉しい。というか、設定する相手がサーバーなら必ず弄るところばかりなので、独自の準備らしいものと言えば手元のPCにAnsible自体を入れることくらいだ。始めやすいのが大きな利点と言える。

とは言え、学習コストはゼロにはならない。
自分が参考にしたものは、これら。

とっかかりを得るために一読した。

途中でつまずいたら。
http://qiita.com/tags/ansible

結局、一番頼りになるのは、なんと言っても公式。
http://docs.ansible.com/

2015年2月8日日曜日

そのうちやりたかった

で、webの続きのさらに続き。

1. センサー情報の自動更新
ザ・黒い画面ザ・黒い画面

やった。
ブラウザ内でJavaScript動かして、3分おきに最新の情報で該当箇所を書き換えている。JavaScriptで直接センサー情報を取得する……と言うことはさせずに、サーバーを間に挟んでJSON型式でデータをもらっている。
サーバー側は元のページと同様にPython製。最初にページを表示する時の情報取得のロジックを流用して、iRemoconWiFiからの情報を(ページの一部として編集する代わりに)JSON型式に再編集してあげるということをやっている。
結果、そのセンサー情報の取得とページの更新がサボらず行われているかは、右側の黒い画面で確認している。


2. タイマーの取り消し機能
3. タイマーの追加機能
PCからでも
iPadからでも

PCからでも、iPadからでも。学習済みのリモコンの番号は以前データ化してあるので、読み込んだそれと日時を選択して、どんどん一覧に追加していく感じで。で、一覧にはキャンセルするためのボタンが1つ1つ用意されていて、「せっかくだから取り消ししてみよう!」とユーザーを誘惑するという寸法だ。
こっちも、iRemoconWiFiとの通信部分と表示とを別々に切り分けるつもりだったんだけど、そこまでやるかどうかは思案中。

2015年1月29日木曜日

で、webの続き

ちょっと見栄えを変えてみたよ。


番町梅屋敷

iRemoconWiFiで意外に重宝したのがタイマー機能。動きを予約できるようになると、PC、スマホを一日中点けっぱなしにしなくて良くなるので。


そのうちやりたいリスト

     
  • タイマーの取り消し機能はそのうち追加しようと思ってる。
  •  
  • 新しいタイマーを追加できるようにするには、リモコンに設定してある家電から信号を選ぶ必要があって、クライアントサイドJavaScriptが必要になってくるとみている。これは私自身の経験が少ないので時間がかかりそう。
  •  
  • どうせJavaScript触るなら、センサーの情報の自動更新もやらないとね。
  •  
  • こうなると、センサー類の数字をログに溜めたくなるんだが、こればかりはiRemocon単独じゃムリだよなぁ。

2015年1月18日日曜日

モンスターハンター 第二期

モンハン、楽しいけれどG級相手ばかりだと辛くて辛くて。たまに、下位のモンスターに普段使用しない武器で挑んでみたりするんだけれど。
その他に上手なプレイヤーのプレイ動画を見るってこともやってる。手際がいい人の作業を見て「とても、こんなことはできない」と不器用な自分を慰める。そんな感じ。

ちょっと前に評判になったこのプレイヤー、最近復活したらしい。
http://ch.nicovideo.jp/aldnoahzero

彼のプレイについて、一部で「チートを使用しているのでは」などとの疑いの声もあるようだ。しかし、彼自身はまっとうで、かつ確立した方法論を持っているプレイヤーだと私は思う。彼はきちんと自分の行っている分析と準備を説明しながらプレイしており、言わばタネと仕掛けを公開した上で、衆人環視の中、堂々とハンティングを行っているのだ。

とは言え、やはりプレイ動画ならではの不自然さは残る。

まず、モンスターの攻撃方法を見切るアプローチが消去法中心であること。「考えられる全ての可能性を除去して最後に残ったものが……」というのは本格ミステリの常道ではある。が、神ならぬ我々人間の想像力には限界があり、マークシート式の試験における‘あり得ない選択肢を除外したら、全部消えてしまった’問題とか、‘実は設問に不備があり、正解が無かった’問題とかがあり得る。初見のモンスターであれば、なおさら‘色々試して結局、全部駄目’ということもあったはずだが、それではプレイ動画にならないだろう。しかし、そういう要素を動画から完全に排除してしまえば、提示される説明はなんとなく後付けっぽく聞こえてしまう。

また、これも皆の手本として用いられるプレイ動画ならではの不自然さではあるが、彼は凡ミスというものを全くしない。機械のような正確さとは言うが、機械だって様々な調整を経て、初めて正しく動くもの。この例えで言えば、彼は最初から調整済みの完成品であるかのように見える。

しかし、これらの不自然さは、動画として公開する以上、仕方が無い性格のものであると思う。彼の、一分の隙も無いハンティングの陰には、クエスト失敗して退場していく多くのハンターがいるのだ。我々は、たまたま打率100%のラッキーボーイのプレイを見ているだけなのだ。
いや、もしかしたら、カメラの回っていないところで、実は彼自身もいろいろと失敗していて、最終回のエンディングや映像特典などでは、NG集の公開が企画されているのかもしれない。

モンスターについては、第一期含め、今作は豊作と言える。火を吐いたり、物を投げつけてきたり、凍らせてみたりと、それぞれが特徴的なキャラクターと行動パターンを持っているし、基本の戦術を変更してくることがないので、対処法が分かってしまえば、運任せになることもない。良モンス揃いだ。こちらの戦術に対応してきたり、また、攻撃方法が分かっていても対応できない、いわゆるクソモンスが今作にはいない。

もっとも、最近になって、特定の条件を満たしたプレイヤーを付け狙うモンスターが乱入……というのが追加要素としてでてきたようだ。
スレインは鎧武における、ミッチになっていくのだろうか。それは確かに虚淵モノで女性に振られた男の既定路線ではあるのだが……。

2015年1月17日土曜日

続きはWebで

この記事の続き。

iRemoconWiFi
http://blog.bagend.info/2015/01/iremoconwifi.html

iRemoconWiFiの容量はかなり多くて、学習できるリモコンコードの数は800にも及ぶ。普通のご家庭で使う家電の数から考えたら十分すぎるくらいだ。
難点は、とても人間が覚えておける数ではないということ。スマホからボタン押す使い方ならともかく、PCの黒い画面からポチポチしようとしている人間には問題だ。
もう一つ。リモコンのボタンにどの番号という対応付けがあるだけで、リモコン(≒家電)そのものを意識してはいないということ。学習リモコンとしては普通なのだろうけど。
機器側が面倒見てくれないということは、自分で管理しなければならないということ。つまり自分の好きなように管理できるということだ。

自分の場合、コンピュータで扱うことがそもそもの念頭にあるので、コンピュータで扱える形にしてみた。

{
    "light": {
        "TurnOn": "350",
        "TurnOff": "351"
    },
    "TV": {
        "TurnOn": "400",
        "TurnOff": "401"
    },
}


これもリモコンのあたりまえの話ではあるのだけれど、このiRemoconWiFiも操作する対象の家電の状態を知ることができない。例えばエアコンの設定温度が今何度であるとかをわからないまま操作することになる。不便な話だ。
ただし、iRemoconWiFiには環境センサーがついているので、エアコンの設定温度がわからなくても、設置されている部屋が何度であるのかを知ることができる。
スクリプトとして実装して、黒い画面から問合せてもいい。いいのだが、ちょっと芸が足りない気がしたので、Webアプリ化してブラウザから表示させてみた。





ちなみに、コードはこちら。
https://github.com/morinatsu/iremocon-web
もうちょっとモダンなものにしようとするなら、見栄えの部分と機器との通信をやる部分を分割したりしないといけないんだろうなぁ。

2015年1月11日日曜日

iRemoconWiFi

引越の結果、リモコンの数が増え、管理しきれなくなった。
照明など、手が届く一カ所にまとめておきたいし、他方、その同じリモコンを玄関からも使いたい。
じゃあ、いつも持ってりゃいいじゃん。しかし、常に身に付け、持ち歩けるほどのコンパクトさもない。

何らかの技術的ブレイクスルーが必要だ。
例えば、iPhoneに赤外線リモコンとしての機能があれば……。
あるいはリモコンを操作するリモコンのようなものがあれば……。

あった。



無線LAN経由で操作できる学習リモコンだ。
スマホやタブレットのアプリなどから、無線LAN経由で操作する。
(インターネット経由での操作も可能だが、こちらのサービスは月額制)

基本的な使い方としては、こうなる。
1. 部屋の中央など、あちこちに赤外線を飛ばしやすい場所にこの機器を設置する。
2. この機器には手持ちのリモコンから赤外線を飛ばして、その信号を学習してもらい、その学習した信号をアプリのボタンに割り当てる。
3. アプリのボタンを押すと、無線LAN経由でこの機器に指示が届き、学習した信号が発せられる。
4. あら不思議、家電が動き出す。

このiRemoconシリーズの面白い所は、このiRemoconに指示を飛ばすという操作について、その要領を公開しているところ。
その要領に従っていれば、専用のアプリなどなくても、赤外線の信号を出させることが出来るのだ。(これが購入の決め手になった)
具体的には、この機器の特定のポートに、仕様通りの文字列を送るプログラムを書く、ということになる。

パソコンの黒い画面で、キーボードをぽちぽちやって、隣の部屋の照明を点けたり消したり。
これだけだと、ぜんぜん便利でもなんでもないか。
が、パソコンのプログラムで操作できるということは、その点けたり消したりする条件を柔軟に持てると言うこと。
時間帯によって自動的に部屋の明るさを変えるとか。平日と休日で自動オンオフする時間を変えるとか。日曜日の朝8:30にプリキュア時間を設けるとか。

早速作ってみた、指定した時間に照明を点けるべく、タイマーを設定するPythonプログラム。
https://github.com/morinatsu/iremocon/blob/master/morning.py

ネットワークのソケット操作というものをやっているのだが、自分はネットワーク・プログラミングは初めて。
家庭内LANで、使うユーザーが自分自身なので、このくらいでも何とか動く。動かなかったら、その時考えようレベルのもの。
説明もなければ、ちゃんとしたエラー処理もない、ひどく横着なものになっているので、これをコピーして使おうとか思わないで欲しい。

悪魔召喚プログラムほどではないにしても、そこそこ便利なガジェットに……今後なる予定。
ただし、くれぐれも「お休みの間に悪魔に肉体を乗っ取られぬようお気をつけて……」。

2015年1月3日土曜日

アラハバキ神社

女神転生、ペルソナに登場する幻の神様として、今、全俺の関心の的であるアラハバキ神。その神社が実家のある宮城県にあると知ったので、帰省ついでに行ってみた。

目的

1. 好奇心
このアラハバキという神様、とにかく信頼できる資料が乏しいらしくて、いろんな人がいろんな説を唱えてどれも検証できていない状況であるらしい。[1]
とは言え、それぞれの神社の地元の人はありがたい御利益を期待し、お参りもしているわけで。出自不明の神様が神話の中での位置付けも不明確なまま、神社という既存宗教の枠の中に入り込んでしまう、というのが面白く思われた。

2. 御礼
魔を祓う破魔系の魔法と、敵を呪い殺す呪殺系の魔法、攻略中の突然死をもたらすこれら両方を無効化してくれる国津神アラハバキ。いつも御守り代わりに連れ歩いていた。(ゲームの中の話ですよ)
機会があればお礼を述べたいと思うメガテンファンは多いはず。

3. お願い
初詣の節ではあるが、とりたてて新年の目標とかないし。神様にお願いしたいことはあっても、何がどうなれば願いが叶ったことになるのか、具体的な段取りや指標も無いので、なかなかお願いしづらいと思っていた。
自分でもよく分からないお願いは、正体不明の神様にするべきだろう。そう思い立った。

場所

宮城県多賀城市。表の神様を100柱以上一緒にまとめて祭っている、陸奥総社宮の近所にある。なんという皮肉。観光客向けの説明書きみたいなものもあったけど、一般のご家庭の庭の中みたいなので、騒がしくならないように参拝。
ここでは、足腰の神様、病を断ち切る神様とされていて、以前の参拝者が残していった奉納物があった。FFシリーズのエルメスのくつ……的なスポーツ用品とか、キルラキルの裁ち斬りバサミ……を模した裁縫用具、文具とかが多かった。

入り口
鳥居



[1]: 自分が面白い(≠正しい)と思ってるのは、蝦夷の神を朝廷側が「蝦夷をもって蝦夷を制す」考え方から祭ったという説。「相手の一番の頼みと仲良くなってしまえ」「近所のワルい奴はだいたい友達」的なヤンキー気質がかいま見える。