2012年10月23日火曜日

自分から自由になる

私は会社ではない
私は仕事ではない
私は、私の父ではない、私の母でもない、私の妻でも、娘でもない、私の家族ではない
私は、私の本でもなければ、私の服でもなければ、私の自動車でも、私の家でもない
私は、私のきている服や、持っている鞄や、食べている食事でもない
私の肉体や、私の脳も、私ではない
それらは私の拘束条件、私の使える道具、頼れる仲間ではあるが、私ではない
私とは、いまこの瞬間に生起しつつあるものだ
私の過去は、私ではない
私の未来も、私ではない
なにやら様々な縛りで身動きがとれなくなっているとき
私は、私を拡大解釈している
それら重たい私を脱いで、横に置いて眺めてみる
脱いだまま、空を眺めてみる
風の音を聴いてみる
小さな惑星の表面に張り付く一人の人間を宇宙から眺めてみる
星々の誕生から消滅までの時間の中に、一人の人間の一生を鉛筆で書き込んでみる
私だと思っている色々なものの儚さを感じ
それでも私は何がしたいのかと問うてみる
私から自由になって何がしたいのかと

2012年5月27日日曜日

ウルトラマンのいる東京の恐怖

「帰ってきたウルトラマン」が、ケーブルテレビで連続放送されている。これを見ながら思った。この東京には住みたくない。図らずも17話で、岸田森が「東京も住みにくくなったもんだ」といって疎開するのだが、どうしてもっと早く退避しないのか不思議だ。この東京は、ほぼ毎週、怪獣が襲う。それも地球人の武器、自衛隊やMATがほとんど役に立たないぐらい強力な怪獣がやってくる。ビルを破壊する。街を凍らせる。ガスタンクを爆発させる。ウルトラマンとの格闘戦では、あの巨体が七転八倒するのだから、どれほどの震度だろうか。
 たぶんこの世界の交番には、交通事故での死傷者の表示とともに、怪獣被害による死傷者が表示されているに違いない。怪獣保険もあるだろう。大手企業は必ず加入しているに違いない。もしかすると戦時体制として、国が補償するのかもしれない。
 世田谷で起きることが多いので、世田谷に住んでいる人はズシーン、ズシーンという震度5とか6とかの地震を、毎週味わって、「あぁ、またウルトラマンが戦っているのかしら」とか思っているに違いない。いつ自分の家に襲いかかるともしれない不安を抱えながら。
 正体不明の異形の巨人であるウルトラマンに、かろうじて怪獣をやっつけてもらって、難をのがれている。そのウルトラマンも結構頻繁にやられそうになるし。他力本願も極まれりだ。
 それなのに、住民たちの私達と変わらない普通の生活、明るい笑顔、信じられないほどの戦時下だと思うのだが。
 (DAICON FILM版の「帰ってきたウルトラマン」では、多少そのあたりの現実的な解釈が加えられていて、これがエヴァンゲリオンなどの伏線になっているのだな、と思った。)

 いやぁ、怖い怖い。

2012年5月3日木曜日

C++, Java, Objective-C そして iOSアプリ開発

連休は、読書と iOSアプリ作製に使っている。それに先立つ4月は、Processingを使って色々ソフトを作っていた。

これまで色んな環境で色んなソフトを作ってきたが、ずいぶん楽に作れるようになった。ネットで得られる情報量の多さも驚きで、大概の困ったことには先達がいて、日本語でもかなりの情報が得られるし、英語サイトまで見れば、短時間に解決策が得られる。

実は、12月から1月にかけては仕事で、Visual C++を使い、さんざんコーディングしていて、C++, Java, Objective-Cと代表的なオブジェクト指向言語をここ数ヶ月で渡り歩いたことになる。

私には、Javaが後発であることもあってか、最もストレスなくシンプルにコーディングできるように思える。C++は10年以上の付き合いだが、やはり複雑である。自由度の高さがアダになっている部分が大きい。Objective-Cは、その方言に慣れるまでに多少の敷居はあったが、慣れてしまえば、これはこれで悪くない。特にXcodeという開発環境が、色々と自動補完してくれるので、その継ぎ接ぎだらけの構成もほころびにくい。

プログラミングが好きだな。ものができて動くのが楽しい。
この調子だとジイさんになってもプログラミングしているのではないだろうか。

ここ数日でiOS開発に関して知って、「へぇー」っと思ったことを列挙する。
・Objective-Cの実体はCである
・NSはNextStepの略、CFはCoreFoundationの略
・CFはC言語で作られたオブジェクト指向のライブラリである
・Xcode 4ではstoryboardsというユーザインタフェース開発環境がある
・InterfaceBuilderはstoryboardsに吸収された
・gestureRecognizerでタッチ操作が統一的に扱える
・UIViewのdrawRectは四角形を描画するのではなく、四角形領域に描画するコールバック
・Snow LeopardのXcodeはiOS 5.0のデバイスまでしか扱えない
・LionのXcodeはiOS 5.1のデバイスを扱える

2012年3月4日日曜日

重なりあう長方形の面積(解答)

前回の問題の解答の一つを示す(解答はもちろん一つではない)。
上図のように、辺同士の重なりをチェックすれば、重なりあう長さがわかる。
重なりあう長さがわかれば、あとは掛け算するだけだ。
重なりあいの場合分けは、6通りある。

Cで書いたサンプルコードは以下。
バグがあるかもしれないから、ちゃんと検証して使うように。




#include

int sharedRect(int xa, int ya, int wa, int ha, int xb, int yb, int wb, int hb);
int sharedLine(int s1, int l1, int s2, int l2);

int main (int argc, char * const argv[]) {
int xa, ya, wa, ha, xb, yb, wb, hb;
  xa = 0;  ya = 0;  wa = 100; ha = 200;
  xb = 10; yb = 15; wb = 80;  hb = 220;
  std::cout << sharedRect(xa, ya, wa, ha, xb, yb, wb, hb);
  return 0;
}

int sharedRect(int xa, int ya, int wa, int ha, int xb, int yb, int wb, int hb) {
  return sharedLine(xa, wa, xb, wb) * sharedLine(ya, ha, yb, hb);
};

int sharedLine(int s1, int l1, int s2, int l2) {
  int e1 = s1 + l1 - 1;
  int e2 = s2 + l2 - 1;

  if (s1 < s2) {
    if (e1 < s2) return 0;
    else if (e1 < e2) return e1 - s2 + 1;
    else return l2;
  } else if (s1 < e2) {
    if (e1 < e2) return l1;
    else return e2 - s1 + 1;
  } else return 0;

};


// 情けない。さっそく間違っていた。

2012年1月24日火曜日

重なりあう長方形の面積(問題)

長方形Aと長方形Bがある。
Aの左上の頂点を(xa, ya)、幅と高さを(wa, ha)とする。
Bの左上の頂点を(xb, yb)、幅と高さを(wb, hb)とする。

重なりあう面積を求める最も簡単なプログラムは?

簡単だろうと思っていたが、実はちょっと難しかった。回答は次回。



2012年1月8日日曜日

[ライフハック] 1日の活動レベル

バボータのフォーカスが、基本原則と、短時間での戦術に集中しているのに対し、もう少し長い時間、一日、一週間の過ごし方、も重要だ。ここでは一日の過ごし方に焦点をあててみる。

一日の活動レベル推移

例えば私の一日の平均的な活動は以下となる。

00 睡眠
01 睡眠
02 睡眠
03 睡眠
04 睡眠
05 睡眠
06 起床、出勤準備
07 通勤、活動開始
08 活動 (レベル1)
09 活動 (レベル1)
10 活動 (レベル1)
11 活動 (レベル1)
12 昼食、休憩
13 活動 (レベル3)
14 活動 (レベル4)
15 活動 (レベル3)
16 活動 (レベル2)
17 活動 (レベル2)
18 活動 (レベル3)、通勤
19 帰宅、夕飯、家事
20 夕飯、風呂、娯楽
21 活動 (レベル4)
22 活動 (レベル4)
23 睡眠

ここで活動のレベルとは、どの程度集中して生産的なことが効率よくできるかを表している。

活動のレベルと適した活動

レベル1
- 08:00-12:00 4時間
- 高い集中度で、効率よく活動できる。論理的に整理・判断したり、クリエイティブなことを考えることができる。
- 適した活動:プランニング。問題の整理。難しい問題に取り組む。手をつけていない重たい仕事に着手する。

レベル2
- 16:00-18:00 2時間
- それなりの集中度で、効率よく活動できる。プログラミングや、ネットでの調査などが捗る。ただしレベル1ほどの積極性は期待できない。
- 適した活動:プログラミング。根気のいる調査。同僚との短時間打ち合わせ。

レベル3
- 13:00-14:00, 15:00-16:00, 18:00-18:30 2.5時間
- 生産的な活動は可能だが、集中力は切れがち。眠くなったり、腹が減ったりと、継続した活動が難しい。体を動かす、面白みのある活動に向いている。
- 適した活動:打ち合わせ。物作り。パソコンのセッティング。PC・ネット環境の整備。バックアップ。物品購入手続き。出張旅費精算。

レベル4
- 14:00-15:00, 21:00-23:00 3時間
- 集中した活動は不可能。体は食物の消化や睡眠準備のモードにある。頭にあることを書き出したり、アイデアノートをぼんやり描いたり、絵を描いたり、エンターテインメント活動は可能。無理に集中作業をしようとしても効率が悪い。くつろぐのが良い。
- 適した活動:音楽鑑賞。頭にある内容の棚卸し。日記。映像鑑賞。家事。


午前、午後それぞれの過ごし方指針

私にとって、午前中はとても重要な活動時間であるため、ここをいかに確保し、活用するかはとても大きい。メールチェックや新聞を読んだりするのには使うべきでない。ただし同僚との挨拶や声かけは、これもまた大事なので、15分ほどをコミュニケーションにあてて、さっと活動に集中するべきだ。

一方で、午後は時間は長いが、活動レベルはかなり低い。また電話や打ち合わせなど集中を妨げる邪魔も入りやすい。そのため午後はこま切れにしないことが大事だ。もともと集中しづらいのに、こま切れの活動をすると、何もしない内に終わってしまう。午後の活動は大きく一つとし、打合わせなどは適宜入れることとする。

実際に未来のカレンダー(iCal, Google Calendar)に、レベル分けして書きこんでみて、いくつか気づいた。
- 午後は16時までのと、16時から退社までの2つに分けて考える。
- 夕方遅くは、とりあえず勘定に入れない。
- 出張や打ち合わせが入ると、活動レベルが大きく低下するため、想定通りには活動できない。