blog.risouf.net

興味の再確認と不思議な縁 (builderscon tokyo 2016 ログ)

builderscon に行ってきました。この手の技術カンファレンスに参加するのは(同種の勉強会を除くと)5ヶ月ぶり。

builderscon とは

builderscon tokyo 2016

builderscon は、サイトの情報を抜粋すると以下のようなイベントと言えます。

さらに個人的には、「昨年まで YAPC::Asia の運営の中心にいた人たちが主催する技術カンファレンス」という要素もあり、カンファレンス自体のクオリティ、採用されたトークのクオリティには一定の安心感がありました。

一応最初から懇親会の終わりまで参加していましたが、印象に残ったトークについて記録を残しておこうと思います。

今の自分にはちょっと遠い、印象に残ったトーク

人工知能によってプログラムを有機化する

ゲーム AI って一言でいってもいろいろあるし、どんな話になるのかあまり想像がつかなかったので、良い意味で期待を裏切られた感じになりました。ここ数十年のゲーム AI の進化について、結構メジャなゲームを実例に説明してただけたのはとてもわかりやすかった。参考にされた FPS は全部プレイ経験あったし、いくつか入れ込んでるものもあったので、親近感もありましたね。あと、最後に質問させていただいたのだけど、 AI に学習能力をつけていくとゲームデザイナのコントロールできる範囲におさまらなくなるというのは面白い話でした。

実は学生時代ちょっとだけゲームの AI 開発をやっていたことがあって、ゲーム業界で A* が使われるようになったという頃、僕も A* 使った実装してたりしたので、懐しさもあってとても良かった。僕は結局ゲーム業界にはいかなくて、当時の後輩たちが何人かそっちに行ったけど、あれからもう結構経っているので今その分野では僕は太刀打ちできないんだろうなあとも思うのだけど、時間に余裕ができたらまた AI 関連はやってみたい。

そろそろプログラマーもFPGAを触ってみよう!

今徐々に流行りつつあるらしい FPGA のトーク。最近は個人でも購入できる価格帯のものが増えてきているようで、これから FPGA の時代がくるというのも信憑性がありそうだな、と思ったり。 FPGA の得手不得手や競合との比較など、初心者にわかりやすい内容だったと思います。

僕は研究室時代、縁あって FPGA を少しだけ触っていた(VHDL を使っていた)こともあって、こちらも懐しさがあり。自分の研究は GPU の方だったけれど、当時 GPU (これは僕しかやってなかった気がするけど)も FPGA もやってた研究室の教授たちの先見の明には驚かされます。

面白かったトーク

OSS は Windows で動いてこそ楽しい

まさに普段 Twitter で目にしている mattn さんのトークだとすぐにわかる、面白いトークでした。内容もさることながら、 Vim 愛や絶妙なタイミングで挟まれる親父ギャグなど、聞いていて心地良かったです。

Bluetooth キーボードの作りかた

US 配列でセパレートタイプの無線キーボードを自作する話。キーボード好きとしては惹かれるトークでした。自作するコスト(個々のパーツの値段や切削加工機の値段など)など参考になったというか、挑戦するには覚悟が必要そうだなーと思ったり。使ってるパーツ的に押し心地は Ergodox EZ と同じっぽい(軸が何かわからなかったけど)。僕は静電容量無接点方式のキーが好きなので、その点でも自作はハードルが高いなあ。

懇親会

食事がいっぱいあって、満腹になりました。あと、ケーキおいしかったです。

2016-12-04 23:58:06.988162 JST

Tweet $B$3$N%(%s%H%j!<$r$O$F$J%V%C%/%^!<%/$KDI2C(B

朝4時、僕たちのミッションはもう来ない

Pokemon GO が世間を賑わせている。
僕もひとまずインストールして、ユニーク制約があるというプレイヤー名の入力まで辿りつき、無事 "risou" をゲットした。

ところで、位置情報ゲームといえば、僕はあるゲームを思い出す。 そのゲームは、今年の初めにサービスを終了してしまった。

このゲームがリリースされたのは4年以上前のことで、サービスの稼動期間は4年に少し満たないくらいだったと思う1。 僕はサービス開始日から一日も欠かさずプレイしてきた。 結局4年ではクリアすることはできなかった2

僕はあまり頻繁に旅をする人間ではないし、このゲームのためにわざわざ普段行かないところに足を伸ばすということもなかった。用事のついででプレイする程度だったが、それでも4年間で数百あるエリアの9割は制覇できた。というのも、このゲームにはプレイヤー同士で協力する機能があったからだ。自分が足を伸ばすことのできないエリアでも、そのエリアにいるプレイヤーの助けがあれば、時間はかかるが制覇できるしスコアも得られた。お互いに協力しあうことで、僕たちはクリアに向けて少しずつ着実に前に進んでいた。

またこのゲームではエリアの制覇を促すために、毎日1つ〜5つのミッションが送られてきた。ミッションには達成期限の他に受領期限もあったため、僕はプライベートで使っているチャットに常駐させているボットに「ミッションを受領する時間」を通知する機能までつけていた。夜更かしをして朝4時まで起きていた日は、寝る前に通知を見て、アプリを起動していた。むしろ通知によって「もう4時か……」という気分になっていた。

サービス終了に伴い、ミッションの通知機能を削除するコミット

サービス終了に伴い、ミッションの通知機能を削除するコミット

このゲームにも課金要素はあった。エリアの制覇やスコア獲得を促進したり、体力を回復したり……。しかし、記念の日などになると本来は課金して購入するポイントも幾分か貰えたし、アイテム自体もミッションをこなす中で稀に貰うことができたため、結局僕は全然課金しなかった。課金はランキングに名前を載せたい人向けのものだと思っていた。他にもそういう認識のプレイヤーは少なくなかったのかもしれない。僕はそのゲームを楽しむために必要なら少々の課金は躊躇わないつもりだったけれど、「サービス維持のために必要なものを買う」ことで僕自身のゲームの楽しみ方が毀損されることは望んでいなかったので、課金しなかったことに後悔はしていない。

僕にとってはここ数年で一番遊んだ、もうプレイできないゲームだ。今でもアプリを消さずにいる。最近ようやく、癖でアプリを起動してしまうことがなくなった。


  1. 実際には入院等でプレイできなかった日があったかもしれない。

  2. このゲームの目的はエリアの制覇とスコアの獲得だったため、ここでは全てのエリアを制覇し、かつ一定のスコアを獲得することをクリアと称する。

2016-07-25 01:55:46.832628 JST

Tweet $B$3$N%(%s%H%j!<$r$O$F$J%V%C%/%^!<%/$KDI2C(B

チャットワークの iPhone アプリが使いづらい

僕の観測範囲では最近、チャットワークが盛り上がっているように見える。
宣伝に力を入れるフェーズなのかもしれない。

印象に残っているところだと、この記事では Slack よりもリピート率が高いと書かれている。

それ自体はとても良いことだと思っていて、チャットワークに頑張ってもらいたい気持ちもあるのだけど。

iPhone アプリが使いづらい。

これが本当につらくて、正直全く使う気にならない。
一応バージョンを記しておくと、 2016/06/27 リリースの v4.1.0 での話である。

チャットワークの iPhone アプリ、ここが使いづらい!

自分宛のメッセージにジャンプできない

自分宛にメッセージが来ると、プッシュ通知でお知らせしてくれるが、流速の速い/流量の多いチャットでは、その内容を見るまでに時間がかかる。

最新のメッセージにジャンプできない

流速が速いチャットでは、1日休んだりすると数百のメッセージが未読で溜まったりする。
最新のメッセージを確認する必要があるとき、未読の開始位置から延々とスクロールしなければならない。

メッセージに対するアクションをポップアップさせる UI が過敏

上に書いたように、大量のスクロールを余儀なくされることがあるのだが、スクロールしていて、途中で止めたくなったとき、タップすると、そのメッセージ自身をタップしたと判断して5つのアクションが提示される。

そのため、長めの休暇から復帰した直後など大量のメッセージの中から自分が関心を持つべきものを探すときには相当な苦痛となる。間違ってタスク作成画面に遷移してしまうことも少なくない。

(アプリとは関係ないけど)公式の入門ガイドが重くて見づらい

チャットワークの公式に、入門ガイドなるページがあるのだけど、このページ表示が重い上に目次のスクロールがしづらかったりして、とても使いづらい。
この記事を書くにあたって一応参照したのだけど、たぶんもう二度と見ない。

アプリももうちょっと頑張ってほしい

ここまで書いておいてなんだけど、チャットワーク自体に対して、ネガティブな気持ちはない。
Web 版はストレスなく使っているし、アプリでももうちょっと普通の(平均的な)チャットアプリ程度に使いやすくなってくれればとても嬉しい。

2016-07-16 02:40:54.250369 JST

Tweet $B$3$N%(%s%H%j!<$r$O$F$J%V%C%/%^!<%/$KDI2C(B

iOS の AdBlock アプリ Crystal は jQuery の colorbox を抑止する

iOS 9 で搭載されたコンテンツブロック機能によって、 Safari に AdBlock アプリを連携させられるようになった。 AdBlock アプリといってもいろいろあって、ブロックするコンテンツの判断基準が異なったりする。

今回問題になったのは Crystal という AdBlock アプリを有効にした Safari で、 colorbox によるモーダル表示ができないことだ。モーダル表示といえば、画像を拡大して表示したり、確認ダイアログを出したりと、様々な用途で用いられている。

Crystal を導入されている方は colorbox のデモページで試してみると良い。

colorbox example

回避するには、同様のことができる他のプラグインを使うのが現実的だろう。 Magnific Popup は Crystal に阻害されずちゃんと動くことを確認した。

Magnific Popup

AdBlock アプリは、どのような条件でブロック対象とみなしているかがブラックボックスになっていて、広告ではない(ブロックされてほしくない)情報がブロックされることがある。たとえば Crystal が有効だと Google Analytics による計測が正常に行えないのは周知の事実だ。とはいえ、ユーザの快適性のためにコンテンツブロックしているのであれば、今後判定条件は変わっていく(精度をあげていく)と思うし、ここに書いたような現象もいずれ解消される可能性はある。

2016-01-29 12:16:44.125647 JST

Tweet $B$3$N%(%s%H%j!<$r$O$F$J%V%C%/%^!<%/$KDI2C(B

「マヨイドーロ問題」を Perl 6 で解く(そして挫折へ)

「マヨイドーロ問題」とは

マヨイドーロ問題

始点が1つ、終点が2つある経路上に方向転換が可能なポイントがいくつか用意されている。問題となるのは、 方向転換できる回数の上限 に対して、終点のうちの片方にたどり着く移動ルートは何通りあるか。

解き方

この記事の本題ではないため、解き方、考え方について詳細には触れない。

方向転換できる回数の上限N として、 N に小さな値を入れて試していくと、解の規則性が見えてくる。

便宜上、終点の片方に到達する移動ルートの数(解)を Y、もう片方に到達する移動ルートの数を Z と記す。

この問題とフィボナッチ数の関連についての詳細は出題者の解説をご覧いただきたい。

Perl 6 での解答算出プログラム

N から Y を算出する(算出する際にフィボナッチ数を用いる)だけの簡単なプログラムだ。

my @fib = (1, 1, *+* ... *);

for $*IN.lines {
	if ($_ == 0) {
		say 0;
	} else {
		my $i = $_ % 2 == 1 ?? $_ + 1 !! $_;
		say @fib[^$i].reduce(*+*);
	}
}

解を求める分にはこれで十分である。実際には、より計算量の少ない解法があったが僕は解説を見るまで気づかなかったので、提出したのは上記のコードである。

さて、上記のコードを CodeIQ の回答システムで実行するとどうなったか。

Time Limit Exceeded だ。

2015年現在、クリスマスにリリースを控えた Perl 6 は他の言語の実行環境と比較するとまだまだ遅い。とはいえ、自分の手元ではTLEになるほどの時間はかからなかった。そして気づく。

CodeIQ の回答システムで使われている Perl 6 の実行環境は rakudo-2010.08 であるということに。

5年前の Rakudo ……。僕は知っている。その遅さを。

そして諦めた

実行環境の制約はどうしようもない。僕は結局 Haskell で書きなおしたコードを提出して、問題をクリアした。

"より計算量の少ない解法"ではどうだったか

先に書いたが、僕が最初に提出した解法より、出題者の解説に掲載されているロジックの方が計算量が少ない。

試さずにはいられなかった。

僕「これなら、あるいは……!」
CodeIQ(rakudo-2010.08)「……TLE」
僕「ですよねー」

2015-12-17 11:47:12.75823 JST

Tweet $B$3$N%(%s%H%j!<$r$O$F$J%V%C%/%^!<%/$KDI2C(B