MacOS X 10.7 – Lion

今更ながらにうちのMacBookProを10.6から10.7にしてみた。
ちょっと感想を述べてみる。

最初に気づいたのが、スクロールが逆になった事。トラックパッド(あるいはマウスのホイール)を下にスクロールさせると、画面は上にスクロールするという動作。
慣れればこれでも良いかもしれないけど、Windowsや10.6までのMacと併用する場合、致命的に使いづらい。
なので、すぐに設定を変更して、これまで通りの動作に戻した。

次に気づいたのが、Aquaインターフェイスの水色のスクロールバーが変更された事。スクロールアロー(上下の矢印)が消えて、細いグレーのバーだけになってる。
前々からAquaの水滴っぽいアピアランスはくどくて格好悪いと思っていたので、それはいいんだけど、スクロールアローまでなくしたのは疑問に思う。
トラックパッド操作ならスクロールバーを使う事は少ないけど、マウス操作の場合は横スクロールするのにスクロールバーを使う必要がある。

他に気になったのは、フルスクリーン機能。ウィンドウ右上のボタンを押すと、メニューバーが消えて、ウィンドウが画面全体に広がり、アプリケーションがいわゆる全画面表示になる。
これってどういう時に使うんだろう?
Macのアプリケーションはメニューバーの文化だから、メニューバーが消えるのは操作性に大きく影響を与える。
Windowsのウィンドウ最大化みたいに、普通にウィンドウが画面いっぱいに広がるだけにした方が素直に使いやすいと思うのだけど。

ところで、10.7で一番楽しみにしてたのが、ターミナルの256色対応。
ターミナルを起動して、vimのカラースキームを256色に変えてみると、確かに対応してる。綺麗になった。
なんだけど、vsplitで画面を縦分割すると、スクロールが遅い!しばらく上下にスクロールさせつつ考えてみたけど、これはダメだ。
自分の場合、ターミナル上のvimがもっともよく使うアプリケーションなので、これは致命的にダメ。
絶望的な気持ちで、なんとかならないかとフリーウェアのiTerm2をインストールしてみたら、あれ、案外スクロール速い?
以前iTerm2を試用した時はスクロール遅くてダメだなと思ったんだけど、いつの間にか改善されてる。
10.6までのターミナルほど速くはないけど、これならなんとか我慢出来る。

というわけで、10.7を総評すると、微妙な出来かな。
自分は旧MacOSのSystem7の頃からMacを使ってて、最初のOSXを見て、Macはガラリと変わったなと思ったんだけど、それと比べても10.7は随分違ったものになったと思う。
AppleにとってメインストリームはiPhoneであって、Macじゃないんだと思う。
MacはiOS寄りになっていってる。スクロールが逆になったり、スクロールバーが変わったり、フルスクリーン機能だったりは、全部iOSの文化。
普段使ってるデジタルデバイスがiPhoneで、たまにパソコンも使うという人には、10.7は良い物なんだろうと思う。

将来何になりたいか?

高校生の頃、学校で、将来何になりたいか?みたいな雑談をしていて、俺は王様になりたいって言ってる友達がいた。
王様は何もしなくても威張ってていいからって理由。
その時は何言ってるんだと思ったけど、それから何年も経って、ああ、そうだなってなるほどと思った。
当時、自分と比べて、考え方のレベルが違ってた、一つ上のステージだったんだな。
彼は今何になってるんだろう。

Excel列名変換問題 – SQL編

ここにExcel列名変換問題というのがあって、内容は下のようなもの。

問題1: Excel列名変換問題
仕様
入力されたアルファベットを数字に変換する。
変換ルールはExcelの列名と同等。
例) A=1、B=2、Z=26、AA=27、XFD=16384
起動時引数
[0] アルファベット (A~ZZZZ…[上限なし])*2
実行例
ExcelColConv.pl A → 1
ExcelColConv.pl AA → 27

で、SQLで考えてみた。PostgreSQLのバージョン9以降。
(generate_series()が必要なので。MySQLなんかだとピボットテーブルが必要。)
SQL上手い人はもっといい解法をいくらでも思いつくんだろう。
入れ子集合モデルとか眩しすぎる。
自分には一生かかっても思いつきそうにない。

#!/bin/sh

str=$1
SQL="
SELECT SUM(y.num) AS result
  FROM (
    SELECT x.*, __indexes.n * (26 ^ (x.pos - 1)) AS num
      FROM (
        SELECT substr(_chars.chars, _chars.n, 1) AS c, length(_chars.chars) - _chars.n + 1 AS pos
          FROM (
            SELECT generate_series(1, length(chars.chars)) AS n, chars.chars
              FROM (
                SELECT '$str'::text AS chars
                 ) chars
             ) _chars
         ) AS x
      JOIN (
        SELECT _indexes.n, _indexes.c
          FROM (
            SELECT n, chr(indexes.n + 64) as c
              FROM (
                SELECT generate_series(1, 26) AS n
                 ) indexes
             ) AS _indexes
         ) AS __indexes
     USING (c)
     ) y;
"
echo "$SQL" | psql