雑文発散

最新 追記
過去の日記

2014-08-03 [長年日記]

[Mac] iMac 27” を持って Apple Store 表参道の Genius Bar へ行ってきた

今年の2月に「iMac が壊れた、、、かも」と認識してから約半年、ようやく重い腰を上げて修理に出すことにした。重い腰を上げられるようになったのは、最近フィットネスに通い始めて、体力が復活してきてやる気が出てきたからってのもあるんじゃないかと思っている(結構マジに)。

この iMac は 27 インチ版なので、普通に考えたら配送業者にお願いして、修理に出すべきなんだろうけど、Apple Store 表参道の Genius Bar の予約が空いていたのと、近くの表参道ヒルズに大きめの駐車場があったので、これなら停められるだろう?と思って、自分のクルマに乗せて持って行ってみることにした。

Apple 製品の箱は捨てられないたちなので、iMac のも残していたのでそれに入れたんだけど、パンダの小さいラゲッジルームにはそのままだと入らなかった。ラゲッジ上部の蓋(?)を外して、なんとか収納。

表参道ヒルズへは行ったことが無かったので、駐車場の入口も知らず、ドキドキしながら場所を探していたら、店舗の近くで「P」のマークと矢印を見つけたので、それに従って進んだら、表参道ヒルズとは違う駐車場だった(笑)まぁ、停められたからいいんだけど。しかも、ちょっと安かったし。

その表参道ヒルズの隣の駐車場から Apple Store までは、iMac の箱をキャリーカートに載せてコロコロしていった。

店に着いたのは 9:45 頃で、オープンまでにはまだ15分くらいあった。しばらく待っていると、開店直前にスタッフが出てきて「Genius Bar の予約がある人」と「予約してない人」に分けて、ちょっとだけ整列。この時点で「予約がある人」はオレを入れて3人いた。

オープン時間になると、先ほどのスタッフを先導にして、他のスタッフが作る列の間を通って入店。ハイタッチこそ無かったけど、よく新規店舗の最初の開店時だけじゃなくて、通常の開店時間にも列を作るんだね。

表参道店は、1F と B1F の店舗で、上下の移動はガラスの階段のみみたい。先導のスタッフにその階段へ案内されそうになったんだけど、「えっ、階段は無いなぁ」とボソっと言ったら、別のスタッフがバックヤードのエレベータへ案内してくれた。

そして、ようやく Genius によるチェックが始まった。

診断ツールらしいものをネットワークブートで起動して、各ハードウェアのチェックをしてたんだけど、ツールのウインドウが MacOS 時代のデザインで、なんだか不思議な気分になった。この診断ツールが稼働している最中にも途中からチラ付き始めていた。

Genius の判断でも、ビデオカードの問題だろうということだったけど、この症状は見たことがないと言っていた。ビデオカードのみの問題だったら、起動が途中で止まることはない気もするので、マザーボードやディスプレイなど複合的な問題という可能性もある、とのこと。

とりあえずビデオカードの交換ということで出してもらった見積金額がこんな感じ。

品目 価格
ビデオカード(ATI Radeon HD 5750 1GB GDDR5 SDRAM) 21,455
ハードウェア修理の技術費 3,300
消費税 1,980
総合計 26,735

もし、マザーボード交換などが入っても最大金額が決まっていて、詳細金額を忘れてしまったけど、5万円いかない金額になるとのことだったので、そのまま修理をお願いした。

この見積書は、iPad に金額が表示されて、その依頼に関しても iPad に手書き(指書き?)のサインをする形で終了。オレ用の控えは Genius Bar 予約時に使った Apple ID に紐付いたメールアドレスに届いた。ここまできっちりペーパーレスなのはスマートだなぁ。

修理自体は一週間ほどで終わるはずとのこと。見積りの金額で済めばいいなぁ。


2014-08-02 [長年日記]

[Emacs] Emacs 24.4 の「フレーム・ウインドウ」関連の新機能

今日は Emacs 24.4 の「フレーム・ウインドウ」関連の新機能について NEWS ファイルから読み解いていく(って、そんな大げさじゃないけど)。

ちなみに Emacs の「フレーム」というのが他のアプリケーションで言う「ウインドウ」で、Emacs の「ウインドウ」は他のアプリケーションで言うと「ウインドウ内で分割されたそれぞれのヤツ(?)」みたいなものなので、Emacs 使いじゃない人はその辺を知っておくと良いのかも。あ、でも、使ってないなら知る必要ないか。

新しい「フレームサイズ変更用のコマンド」が2つ追加されている。

  • toggle-frame-fullscreen
  • toggle-frame-maximized

M-x toggle-frame-fullscreen とすると、(OS X 用にコンパイルしているので)OS X のフルスクリーン表示と通常表示が切り替わる。

同じように M-x toggle-frame-maximized を実行すると、フレームサイズ(しつこいけど、普通のアプリではウインドウサイズ)が最大化する。OS X のアプリケーションウインドウに付いている、緑のボタンと同じ動作。

ちなみにフルスクリーン状態で M-x toggle-frame-maximized を実行しても何も変わらないように見えるけど、次のようにすると、maximized が効いているのが分かる。

  • 通常状態から M-x toggle-frame-fullscreen でフルスクリーンにする
  • M-x toggle-frame-maximized を実行。何も変わらないように見える
  • M-x toggle-frame-fullscreen を実行。フルスクリーンを解除
  • 一度通常状態に戻ったあと、フレーム(ウインドウ)が最大化される

新しい hook も2つ紹介されてる。

  • focus-in-hook
  • focus-out-hook

それぞれ、Emacs にフォーカスが当たった時と外れた時に呼ばれる hook みたい。

例えば次のように focus-in-hookfocus-out-hook をセットして、Emacs のフレーム(ウインドウ)にフォーカスを当てたり外したりしてみると分かる。OS X なら Command + TAB でアプリケーション切り替えをしてみてもいい。

(add-hook 'focus-in-hook
      '(lambda ()
         (message "focus in !!")))

(add-hook 'focus-out-hook
      '(lambda ()
         (message "focus out !!")))

フォーカスが当たると、メッセージバッファに「focus in !!」と表示され、フォーカスを外すと「focus out !!」と表示されるはず。

focus-in-hook の例

このサンプルには全く実用性が無いんだけど、、、この hook たちをどういう風に使えばいいんだろ? フォーカスが外れたら、ウインドウの透過率を上げる、とか?


2014-08-01 [長年日記]

[Emacs] Emacs 24.4 の新機能「マルチモニタ・サポート」について調べてみた

昨日の「Emacs 24.4 (HEAD) で起動時のフレームサイズを調整する initial-frame-alist が効かなくなった?」で悩んでいた「バグなのか仕様変更なのか?」のうち、仕様変更があったのかどうかを調べるために、Emacs 24.4.50.1 (HEAD) に付属していた NEWS ファイルを読み始めた。

すると、Emacs 24.4 での新機能情報が出てくる出てくる。本来調べたかったこととは違うのだけど、wktk しながら読み進めてしまった。

その中でもオレ的にいくつか気になった新機能があったので、手元で動作チェックしつつ、日記のネタとして書いていこうと思う(予定)。

今日は「マルチモニタ・サポート」について調べてみる。新規追加された関数として、次の2つが上げられていた。

  • (display-monitor-attributes-list)
  • (frame-monitor-attributes)

これを追ってみる。

MacBook Air へ外部ディスプレイを接続し、「システム環境設定」「ディスプレイ」で、本体ディスプレイの右側に設置している。

システム環境設定

この状態のとき、*scratch* バッファで (display-monitor-attributes-list) を実行してみると、次のようなリストが返ってきた。

(((geometry 0 0 1440 900) (workarea 0 22 1440 874) (mm-size 290 179) (frames #) (source . "NS")) ((geometry 1440 0 1920 1080) (workarea 1440 0 1920 1058) (mm-size 530 298) (frames) (source . "NS")))

見やすいように加工すると、2つのリストが存在することが分かる。

(
 ((geometry 0 0 1440 900)
  (workarea 0 22 1440 874)
  (mm-size 290 179)
  (frames #<frame *scratch* 0x102843190>)
  (source . "NS"))

 ((geometry 1440 0 1920 1080)
  (workarea 1440 0 1920 1058)
  (mm-size 530 298)
  (frames)
  (source . "NS"))
 )

この MacBook Air は 13 インチなので、ディスプレイのピクセル数は 1440 x 900 になっている。そこを踏まえて、(geometry 0 0 1440 900)(geometry 1440 0 1920 1080) をみると、ちょっと何か見えてくるよね。

つまり「2つのリスト=2つのディスプレイ」という関係になっているようだ。

(workarea 0 22 1440 874) というのは、ディスプレイのピクセルサイズから、ちょうど OS X のツールバーを除いたサイズのようだ。フルスクリーンモードにすると、(geometry 0 0 1440 900) (workarea 0 0 1440 900) という値になった。

また、ひとつめのリストには、(frames #<frame *scratch* 0x102843190>) とあって、次のリストには (frames) とある。これはひとつめ、つまり MacBook Air 本体のディスプレイに Emacs のフレーム(一般的用語だとウインドウ)が存在している状態を表している。

mm-size はディスプレイの物理サイズ(ミリメーターサイズ)という情報を見かけたので、そういうことかな。だいたい合っていそう。

source"NS" ってのは、NextStep の NS かな。

ちなみに外部ディスプレイを外してみると、このように1つのリストになった(加工済)。

(
 ((geometry 0 0 1440 900)
  (workarea 0 22 1440 874)
  (mm-size 285 178)
  (frames #<frame *scratch* 0x102033398>)
  (source . "NS"))
 )

次に (frame-monitor-attributes) も同じように *scratch* バッファで試してみたところ、(display-monitor-attributes-list) で得られた結果と似たような情報が返ってきた。

((geometry 0 0 1440 900) (workarea 0 22 1440 874) (mm-size 285 178) (frames #) (source . "NS"))

(display-monitor-attributes-list) では、全てのディスプレイの情報が返ってくるのに対し、(frame-monitor-attributes) では、それを実行したフレームがどのディスプレイに存在するのか、などの情報が得られるようだ。

これだけだと、まぁ、面白くもないのだけど、desktop-save-mode も同時に拡張されたので、「Emacs 起動時に前回終了時のフレーム(一般用語でのウインドウ)位置に復帰」ということができるようになった。

「Emacs はいつもあっちのディスプレイで開いていて欲しい」みたいな要件は、これでクリアできそうだ。

手動でやるなら M-x desktop-save で現在のデスクトップ情報を保存し、M-x desktop-read で保存したファイルを読み込んでやると、元の位置に復帰する。

M-x desktop-save は他にもいろいろな「現在の情報」を保存するようだ。ついでに言うと、Emacs 24.4 から、desktop-save-mode は自動保存に対応したらしく、一定時間(desktop-auto-save-timeout)が経過すると、勝手に保存してくれるそうだ。

オレは今まで利用していなかったので、使い勝手はよく分からないけど、まぁ、便利にはなったんじゃないかな。


2014-07-31 [長年日記]

[Emacs] Emacs 24.4 (HEAD) で起動時のフレームサイズを調整する initial-frame-alist が効かなくなった?

昨日の朝、Emacs の git リポジトリの最新バージョンで(HEAD)をコンパイルして使い始めたんだけど、起動時にフレームサイズ(他のアプリでいうウインドウサイズ)を調整するコードが動かなくなってしまった。

フレームサイズの変更は init.el の中で、こんな感じに書いている。

;; frame size
(if (boundp 'window-system)
    (setq default-frame-alist
      (append (list
           '(width  . 100)
           '(height .  60)
           )
          default-frame-alist)))
(setq initial-frame-alist default-frame-alist)

初期状態のフレーム設定値の連想リストである initial-frame-alist へ、幅(width)と高さ(height)を指定していて、この設定値にしたがって、フレームサイズを変更してくれる動きになるはずなんだけど、どうもスルーされている気配。

(boundp 'window-system)nil になってしまったのか?とも思ったけど、これは t のまま。

とすると、initial-frame-alist に関するバグなのかな? それとも仕様変更?

Emacs の Bug Report で、initial-frame-alist を検索しても古いのしか見当たらないし、bug-gnu-emacs Archives にも見当たらないなぁ。

仕様変更の情報をちょっと調べてみるか。Emacs 内に入っている NEWS ファイルを読めばいいか。

(まぁ、もう一度、最新のを build すれば治ったりするのかも知れないけど。。。)


2014-07-30 [長年日記]

[Emacs] Emacs で「あっちのウインドウ」を消すための delete-other-windows-vertically が便利

最近になって Emacs をフルスクリーンで使うようになってきた。

C-x 3 (split-window-right) で左右に分割して、左側(下図の A)で本体の PHP コードを書いて、右側(下図の B)でそれに対応する PHPUnit のテストコードを書いている。

また、Emacs とは別にターミナルを立ち上げていて、そこで Grunt の watch タスクを起動しておき、本体の PHP コードか PHPUnit のコードが更新されると PHPUnit を自動実行するようにしている。これでちょっとはモダンな開発環境になったんじゃなかろうか。

Emacs ウインドウ2分割

ただ、この状態のときに別のコードを参照したくて、B の位置で、さらに C-x 2 (split-window-below) を実行すると、次のように A、B、C の3つに分割される。

Emacs ウインドウ3分割

C のウインドウで別のコードを参照しながら、B でテストコードを書いているうちに、もう C での参照が不要になり、元の A、B の状態に戻したくなることも多い。

こういうときに、B の位置で、C-x o (other-window) してから C-x 0 (delete-window) を実行していたんだけど、ちょっとストローク数が多いなぁと思っていた。だったら、other-windowdelete-window を組み合わせた独自関数を作ってやればいいか、と思いながら、いや待て、こんなシチュエーションはオレ以外にも発生しているはずだし、何か解決策があるはず!と調べてみたら、delete-other-windows-vertically というコマンドを見つけた。

標準ではキーバインドが定義されていないので、B の位置で M-x delete-other-windows-vertically を実行すると、C のウインドウが消えて、期待通りの動作になった。

これは使えそうなので、 init.el あたりに

(global-set-key (kbd "C-x 9") 'delete-other-windows-vertically)

と記述して、C-x 9 にキーバインドして常用してみよう。