2011-05-31

残り人生を見える化するアプリ「Lifetime Calendar」

Lifetime Calendar

ここしばらく非常に多忙な状態が続いていました。忙しいと、あっという間に月日が流れていく感覚があり、気がつけば5月も終わりです。このままでは1ヶ月後に「今年ももう半分過ぎた」などと言っているに違いありません。忙しくなってくると、一週間の仕事の疲れがたまって土日を無為に過ごすことも多くなり、人生無駄にしている感がつのる一方です。

さて、少し前から、Twitterでのタイムライン上で「@foobar は12345日生きた。人生あと17655日しかない。今日は有意義だったか?」といった感じのTweetが定期的に見られるようになりました。これは30thouというサービスからのTweetで、人生は30000日と仮定して、今まで何日生きて、あと何日残っているかというのを数字で意識させるようにして、一日一日を有意義に生きるようにしよう、という趣旨のメッセージのようです。

これを見て、興味深いと感じると同時に、「日数の数字だけでなく、もっとビジュアル的な表現はできないかな」と思いました。いわゆる「見える化」というやつでしょうか。で、ぱっと思いついたのが、1年(12ヶ月)分のカレンダーを3×4の形で並べたものを、さらに一生分(例えば80年分)並べるというものです。

百聞は一見にしかず、というわけで、さくっとWebアプリとして実装してみました。HTML5のcanvas要素を使用したので、サポートしていないブラウザでは動きません(端的にはIE8)。ご了承ください。

Lifetime Calendar (実際の表示例)

しかし、こうやって改めて可視化してみると、一日が一個の長方形に相当するとして、一生全体でたったこれだけしかないのかという気持ちになりますね……。

スクリーンショット

Lifetime Calendar

カレンダー内の文字は、自前で5×5ピクセルの英数字フォントをでっち上げて描画しています。現状、canvas要素におけるテキスト描画はいまいち怪しいので……。また、「Save As ...」のボタンを押すと、カレンダーをPNG画像として保存できます。

Lifetime Calendar

生年月日の入力には、jQuery UIの「Datepicker」を使っています。「PLEASE ENTER YOUR BIRTH DATE」のメッセージは、わざわざcanvas要素で描画する必要はなかったのですが、せっかく自前でフォントを作ったので使ってみました。妙な雰囲気になったかも。

2011-05-14

オーディオプログラミング言語「ChucK」をさわる

ちょっとした音データを作る必要があって、何かいいツールはないかと探していたときに、「ChucK」という言語(「オーディオプログラミング言語」だそうです)を知りました。これはなかなか面白そう。音声データの編集(エフェクトとか)や、音ネタをさくっと作るときなんかに重宝しそうです。

まずは"Hello, world"代わりに、適当に音を出すプログラムを書くとこんな感じになります。懐かしのPC-98の起動音(「ピポッ」てやつです)を鳴らして、wavファイルにも出力するプログラムです。出力結果はこちら(pc98.wav)。

SqrOsc osc => WvOut wout => dac;

0.1 => osc.gain;
wout.wavFilename("pc98.wav");

osc.freq(2000);
100::ms => now;
osc.freq(1000);
100::ms => now;

ChucKの言語仕様は少し独特な感じですが、見れば何となく分かるかと思います。まずは、いろんなモジュール(ChucKでは"UGen"(unit generator)というようです)を「=>」という演算子(「ChucK演算子」と呼ぶらしい)でつないでいって、最終的に「dac」に渡すように結線します。そして、「now」に経過時間を入れることで時間が進み、時間経過に伴って結線に従った音が鳴るという流れのようです。

ちなみに、「WvOut wout」は、音声データをファイル出力するために噛ませているもので、外しても音は鳴ります。逆に、音声ファイル出力だけやりたい(その場で音は鳴らさない)場合は、dacの代わりに「blackhole」という /dev/null 的なUGenにつなげればOKです。

ChucKで組み込みで用意しているUGenのリストを見ると、矩形波・のこぎり波・フィルタ・エンベロープ・リバーブ・コーラス・FM・etc...といった、シンセ方面でよく見かけるものが揃っていて、いろいろと楽しそうなことができそうです。

以下は、エンベロープで整形した矩形波を3和音で鳴らし、リバーブとコーラスをかけたサンプルです。「♪セーガー」ってやつですね。出力結果はこちら(sega.wav)。

2011-05-04

iKnow!の「チェックポイント」について

ここ最近非常に忙しくて、日々の勉強もほとんど出来ていない状況です。先月(4月)のiKnow!の勉強時間は、わずか「8時間51分」とのこと。今年に入ってから、1~3月の勉強時間は、26時間・23時間・24時間と推移していたのですが、ここにきて勉強しない(できない)ことが常態化しつつある状況で、よくない傾向です。しかし、さすがにゴールデンウィークはある程度は休めそうなので(本当は10連休の予定だったのですが)、久々にiKnow!をやっています。

で、久しぶりにiKnow!を使っていて気づいたことについてメモしておきます。新iKnow!には「チェックポイント」というものがあって、公式の説明では以下のように記載されています。

iKnow! アプリケーションでは、コースプログレスが10%増加するごと(10%、20%…)にチェックポイントというイベントが発生します。

チェックポイントに達すると、次の学習セッションはこれまでの確認も兼ねてトレーニングアプリを用いた学習となります。

http://iknow.jp/faqs/361

しかしながら、iKnow!ユーザーでも、上記のようなチェックポイント到達のイベントを一度も見たことがない方もいるかと思います。どうも、このチェックポイントがあるかどうかは、コースによって違っているようです。簡単に言うと、smart.fm時代のコース(昔は「ゴール」という名前でしたっけ)にはチェックポイントはなく、新iKnow!向けのコースでのみチェックポイントのイベントが有効になっているようです。smart.fm→新iKnow!の移行時に、内容としては同じなのに、100アイテム前後で小分けされた新コースがたくさん追加されましたが、これらのコースは新iKnow!向けのコースに相当します。

このチェックポイントイベントの有り無しですが、実は画面を見れば一発で分かります。チェックポイントのあるコースでは、進捗を表すグラフで10%毎に印がついています。単なるデザイン上の要素かと思っていましたが、それだけではなかったんですね。今頃になってようやく気づきました……。

iKnow! progress bar (new)

iKnow! progress bar (old)