2012年4月6日金曜日

Emacs Lisp のバッファとミニバッファ, エコーエリア

1. バッファ

テキストファイルを Emacs で開くと、内容はバッファに存在する。

Buffers - GNU Emacs Manual

The text you are editing in Emacs resides in an object called a buffer. …

Each buffer has a unique name, which can be of any length. …

At any time, one and only one buffer is current.

バッファは、Lisp オブジェクト。編集できるテキストを含んでいる。

Buffers - GNU Emacs Lisp Reference Manual

A buffer is a Lisp object containing text to be edited. … While several buffers may exist at one time, only one buffer is designated the current buffer at any time. Most editing commands act on the contents of the current buffer. …

バッファは複数存在する。編集用のコマンドが作用する対象は、カレントバッファと呼ばれる。

*scratch* バッファで

(current-buffer)

を評価すると、

#<buffer *scratch*>

#< … > という形式で表示される理由は、バッファそのものを、人間が読み取れる形式で表す適切な表現がないため。

Printed Representation - GNU Emacs Lisp Reference Manual によると、

In most cases, an object's printed representation is also a read syntax for the object. However, some types have no read syntax, since it does not make sense to enter objects of these types as constants in a Lisp program. These objects are printed in hash notation, which consists of the characters ‘#<’, a descriptive string (typically the type name followed by the name of the object), and a closing ‘>’.

 

バッファの型

Lisp オブジェクトは、Lisp プログラムが操作する対象であるデータ。全てのオブジェクトは、型を持つ。

Lisp Data Types - GNU Emacs Lisp Reference Manual

A Lisp object is a piece of data used and manipulated by Lisp programs. …

Every object belongs to at least one type. Objects of the same type have similar structures and may usually be used in the same contexts.

バッファは、Editing Types の一つに挙げられている。

Editing Types - GNU Emacs Lisp Reference Manual

Buffer Type: The basic object of editing.

バッファの型を確認するには、type-of 関数を用いる。

Type Predicates - GNU Emacs Lisp Reference Manual

The most general way to check the type of an object is to call the function type-of. …

— Function: type-of object

This function returns a symbol naming the primitive type of object.

(type-of (current-buffer))

を評価した結果は、

buffer

と表示される

 

*scratch* バッファ

Emacs を起動すると存在する *scratch* バッファについては、以下を参照。

Startup Summary - GNU Emacs Lisp Reference Manual

  • If the buffer ‘*scratch*’ exists and is still in Fundamental mode (as it should be by default), it sets its major mode according to initial-major-mode.
  • Auto Major Mode - GNU Emacs Lisp Reference Manual

    — User Option: initial-major-mode

    The value of this variable determines the major mode of the initial ‘*scratch*’ buffer. The value should be a symbol that is a major mode command. The default value is lisp-interaction-mode.

     

    2. ミニバッファ

    文字列を置換するときに使う、query-replace コマンドは、ミニバッファを使う。

    query-replace コマンドを実行すると、検索する単語と、置換する単語の入力が促される。その際、入力した内容は、通常のバッファと同じように、編集用のコマンドを適用できる。

    query-replace 関数のプロンプトは、エコーエリアと同じ場所に表示される。ミニバッファは、最後にコロンが表示されることが多い。渡した値は、関数の引数となる。

    Minibuffer - GNU Emacs Manual

    The minibuffer is where Emacs commands read complicated arguments, such as file names, buffer names, Emacs command names, or Lisp expressions. We call it the “minibuffer” because it's a special-purpose buffer with a small amount of screen space. You can use the usual Emacs editing commands in the minibuffer to edit the argument text.

    When the minibuffer is in use, it appears in the echo area, with a cursor. The minibuffer display starts with a prompt in a distinct color, usually ending with a colon. The prompt states what kind of input is expected, and how it will be used.

    エコーエリアは、エラーメッセージや、message 関数による出力内容が表示される。

    The Echo Area - GNU Emacs Lisp Reference Manual

    The echo area is used for displaying error messages (see Errors), for messages made with the message primitive, and for echoing keystrokes. It is not the same as the minibuffer, despite the fact that the minibuffer appears (when active) in the same place on the screen as the echo area.

    Emacs Lisp で式を評価する

    1. 式を評価する

    C-j : 評価した結果を挿入

    Emacs を起動すると、*scratch* バッファが存在する。

    *scratch* バッファで Emacs Lisp の式を書き、

    (* (+ 1 2) 3)

    閉じた括弧の後ろにポイントを置いて、

    C-j

    を入力すると、

    (* (+ 1 2) 3)
    9

    括弧で囲まれた式が評価され、その結果が挿入される。

    内側の閉じた括弧の後ろで C-j を入力すると、

    (* (+ 1 2)
    3
     3)

    その場所に結果が挿入される。

    C-j に割り当てられたコマンドは、

    eval-print-last-sexp

    Evaluate sexp before point; print value into current buffer.

     

    C-x C-e : 結果をミニバッファに表示

    先ほどの例において、C-j の代わりに、

    C-x C-e

    を入力すると、ミニバッファに評価された結果が表示される。

    eval-last-sexp

    Evaluate sexp before point; print value in minibuffer.

     

    eval-region: 指定した範囲を評価

    指定した範囲の式を評価したい場合は、

    M-x eval-region

    Eval - GNU Emacs Lisp Reference Manual によると、

    — Command: eval-region start end &optional stream read-function

    This function evaluates the forms in the current buffer in the region defined by the positions start and end.

    上記のコマンドは、全て

    eval-

    で始まる。式を評価するためのキー入力を忘れたら、eval だけ思い出せば良い。

     

    2. 括弧の閉じ忘れを探す

    eval-region を利用すると、括弧の閉じ忘れを見つけることができる。

    例えば、以下の式を eval-region で評価する。

    (setq x 7)
    (defun g () x)
    (defun f ()
      (let ((x 9))
        (g))
    (message "%d" (f))
    (message "%d" x)

    評価した結果、

    End of file during parsing

    Debugging your ~/.emacs and Elisp によると、

    Error in init file: End of file during parsing
    などと言われた時は ~/.emacs のかっこが正しく閉じていない。 Mark, eval-region を使ってどこがおかしいか調べて場所を限定して行く。調べる範囲の開始点で Mark( C-space ) 終了点で、M-x eval-region とすれば、その範囲がおかしい時には End of file during parsingと言われるはず。

    また、別の方法として、対応する括弧へとポイントが移動する

    C-M-f

    を入力すると、閉じ忘れた括弧で、

    Scan error

    と表示される。

    C-M-f に割り当てられたコマンドは、

    forward-sexp

    Move forward across one balanced expression (sexp).

    2012年4月4日水曜日

    Widows 7 でパフォーマンス オプションを調整して動作を軽くする

    1. Windows 7 も動作が重くなってきた

    Windows 7 の動作がもたつくようになった。

    Vista から Windows 7 へ乗り換えた当初の軽快感がない。スリープを繰り返すと、極端に遅くなる。そのため、定期的に再起動が必要。

    常駐しているアプリケーションの数が多すぎるのだろうか?それとも、使えば使うほど遅くなるのが Windows の宿命なのだろうか?他の OS ではどうなんだろう?

    Windows 7 における表示の綺麗さ、視認性の良さを犠牲にしても、パフォーマンスを優先することにした。

     

    2. アニメーションを無効化

    Windows 7 には、アニメーションを無効にする設定が用意されている。

    Windows 7で不要なアニメーション効果を無効化して性能を向上させる - @IT によると、

    まず[Windows]+[U]キーを押すか、[コントロール パネル]の[コンピューターの簡単操作センター]をクリックして、[コンピューターの簡単操作センター]を起動する。次に、画面をスクロールして、一番下の[コンピューターでの作業に集中しやすくします]をクリックする。

    [コントロール パネル]の[コンピューターの簡単操作センター]をクリックして、[コンピューターの簡単操作センター]を起動する。画面をスクロールして、一番下の[コンピューターでの作業に集中しやすくします]をクリックする。

    [コンピューターでの作業に集中しやすくします]が開くので、一番下の方までスクロールして「時間制限と明滅画像を調整します」の[必要のないアニメーションは無効にします]にチェックを入れる。これで、アニメーション効果が無効化される。

     

    3. パフォーマンス オプションで動作を軽くする

    img_0113上記では不十分だったので、スタートメニューより、

    パフォーマンス 調整

    で検索。

    • 「Windows のデザインとパフォーマンスの調整」

    を起動する。もしくは、

    • コンピュータのプロパティ > システムの詳細設定 >  パフォーマンス の設定
    • コントロールパネル > システムとセキュリティ > システム > システムの詳細設定 > パフォーマンス > 設定

    「視覚効果」において「カスタム」を選択。

     

    a. チェックを付けておく項目

    Windows Vista でパフォーマンスの設定を行ったときは、以下の4項目だけチェックを付けた。

    1. アイコンの代わりに縮小版を表示する
    2. ウィンドウとボタンに視覚スタイルを使用する
    3. スクリーン フォントの縁を滑らかにする
    4. ドラッグ中にウィンドウの内容を表示する

    Windows 7 では、これに加え、以下の 3 項目もチェックした。

    1. Aero プレビューを有効にする
    2. デスクトップ コンポジションを有効にする。
    3. デスクトップのアイコン名に影をつける

    理由は、タスクバーのプレビュー表示を確認しながら、アプリケーションを切り替えたいため。

    img_0111

    img_0112

    ただし、上記の設定では、ウィンドウの重なり具合が立体的に表現されないので、全体の視認性が落ちる。我慢出来ないときは、

    • ウィンドウの下に影を表示する

    をチェックしたほうが良い。

    ウィンドウの下に影を付けない場合は、ウィンドウ の枠を太くしてマウスでつかみやすくしておくと良い。

    自分の好みは、

    1. ウィンドウに影を付けず、
    2. ウィンドウの枠の透明感を有効にする

    設定。この状態が視認性が良い。

    SnapCrab_No-0881

     

    b. Aero プレビューを有効にすると、ガジェットをすぐに見ることが出来る

    プレビュー - Windows 7 の機能 - Microsoft Windows とは

    Aero プレビューを使えば、開いているウィンドウが透過され、Windows 7 デスクトップを見ることができます。タスク バーの右端をポイントすると、開いていたウィンドウが透明になり、隠れていたアイコンやガジェットが現れます

    隠れていたウィンドウを表示させるには、タスク バー内のサムネイルをポイントします。そうすると、デスクトップにはそのウィンドウだけが表示されます。

    • Windows キー + Space キー

    により、ウィンドウが透過して、デスクトップが表示される。長らくこの機能は、何のためにあるのか不思議だった。この操作が便利なのは、ウィンドウは透過されるが、ガジェットの表示は透過されないこと。今更ながら、気がついた。 ^^;

     

    c. マウスの影をなくすと、マウスで細かい動きが出来る

    「マウスポインターの下に影を表示する」

    のチェックを外すと、マウスで細かい動作を行うことができるようになった。影があるときとないときでは、マウスポインタの動きに差がある。

     

    4. その他、高速化のためのユーティリティを併用する

    その他、Vista と同様に、ユーティリティを使う。

    1. Comfortable PC で動作を軽くするための各種設定。 ただし、このアプリケーションを使う前に、OS で復元ポイントを作っておくこと。
    2. Soluto で起動時間を短縮。
    3. Process Lasso でアプリケーションの優先度を調整。
      1. プロセスの優先度を管理
      2. CPU の平均使用率の高いプロセスの優先度を下げてレスポンスを良くする

    2012年3月30日金曜日

    Firefox の動作がおかしいので、すべての履歴を消去した

    1. 一部のサイトが正常に表示されない

    Firefox で、一部のサイトが正常に表示されなかったり、読み込みが遅くなった。

    また、以下のサイトで表示がおかしい。

    アドオンをたくさんインストールしているから、動作が多少おかしくなっても仕方がないと思っていた。しかし、最近の Firefox の動きを見ていると、明らかに異常。試しに、アドオンを全て無効にしても、上記の表示は変わらない。

    また、プロファイルの異なる Firefox を起動すると、メインで使っているブラウザだけ動きが鈍い。

    Firefox が重くなったら、新しくプロファイルを作成するのが良い。しかし、各アドオンの設定をし直すのが面倒なので、及び腰になっていた。

     

    2. Firefox の履歴を消去したら、正常に表示された

    これまで、Firefox のアップデートを重ねている。プロファイルを新しく 作成し直したことはあるけれど、履歴を消去したことはなかった。

    履歴を消すには、Firefox ボタンより、オプションを選択。

    • プライバシー > 履歴の「最近の履歴を消去」

    をクリック。

    img_0103

    消去する履歴の期間を「すべての履歴」とし、消去する項目を全てチェックし、「今すぐ消去」した。

    これにより、再起動した後、Firefox の動作が良くなった。上記の問題があったサイトも、正常に表示される。

    履歴を消去することによって、動作が良くなると思ってなかったので、何が影響していたのか検証していない。こんな基本的な操作で動作が良くなるのなら、もっと早く試しておけば良かった。 (+_+) プロファイルを作り直す前に、履歴の消去を試す価値はある。

     

    関連記事

    2012年3月28日水曜日

    Firefox でアドオン Configuration Mania を使い SPDY を有効化

    1. Firefox で SPDY を有効化

    Firefox 11 は、SPDY プロトコルに対応している。

    Firefox 11.0 リリースノート によると、

    ページの読み込みを高速化する SPDY プロトコルに対応し、開発者がテストできるようになりました。(Bug 528288)

    ただし、デフォルトで SPDY は無効になっている。将来は、デフォルトで有効になりそう。

    「Firefox 13」の「Aurora」版が公開--「SPDY」がデフォルトでオンに - CNET Japan

    米国時間3月19日に公開された「Firefox 13」初となる「Aurora」版で、「SPDY」プロトコルがデフォルトでオンにされたのだ。これはSPDYを「Firefox」に搭載するための4カ月以上にわたる取り組みの集大成と言える。

     

    Configuration Mania

    Firefox では、Configuration Mania を使い、SPDY を有効にできる。

    Configuration Mania の設定より、

    • HTTP ネットワーク > 接続

    にける「SPDYプロトコルを有効にする」にチェックを入れる。

    img_0102

     

    2. SPDY indicator で見分ける

    SPDY プロトコルが使われているサイトを見分けるには、アドオンを利用する。

    Twitter、Google提案のSPDYプロトコルを導入 | マイナビニュース によると、

    TwitterがSPDYで通信しているかどうかは、SPDYを観測する拡張機能を入れることで確認できる。ChromeはChrome SPDY indicatorを、FirefoxはSPDY indicatorをインストールする。この拡張機能はいずれもSPDYで通信した際に、アドレスバーにグリーンの稲妻アイコンが表示されるようになっている。

     

    3. SPDY は SSL の上にセッションレイヤーを追加する

    SPDY の読み方は、SPDY - Wikipedia によると、

    SPDY (pronounced speedy)[1]

    スピーディー。

    SPDY プロトコルとは、Google提唱の新プロトコル「SPDY」とは--SPDYで変わること、変わらないこと - builder によると、

    SPDYは2010年に発表され、2011年前半にはブラウザのChromeに実装され、一般のユーザーでも利用できるようになった。…

    SPDYではHTTPのアプリケーションレイヤーとTCPトランスポートレイヤーの間に新しいセッションレイヤー(フレーミングレイヤー)を割り込ませてデータの流れをコントロールする。…

    TCPとHTTPの橋渡しとなるSPDYのセッションでは、次のような機能が実現される。

    • 1つのSPDY接続で同時に複数のリクエストを受け付けることができる。リクエスト数に上限はない。
    • クライアントはリクエストに優先度を付けることができる。
    • ヘッダはデフォルトで圧縮され、不要なヘッダは削除される。
    • サーバプッシュ通信(クライアントからのリクエストを待たずに、サーバ側からデータを送信すること)をサポートする。

    SPDY: An experimental protocol for a faster web - The Chromium Projects

    SPDY adds a session layer atop of SSL that allows for multiple concurrent, interleaved streams over a single TCP connection.

    通信プロトコルについては、以下を参照。

    サーバとしては、InfoQ: JettyがSPDYをサポート(2012年3月26日)

    Jettyはバージョン7.6.2のリリースで、SPDY™プロトコルサポートした。当初はバージョン8.2向けに実装されていたが、7.6.2と8.1.2に後方移植された。また、JettyとHightideアプリケーションサーバの今後のバージョンでもサポートされる予定だ。

    SPDY™は次世代のHTTP接続向けトランスポートレイヤであり、デフォルトではGoogle Chromeで利用できる。また、Firefox 11ではコンフィグを設定すると有効になる。まだ標準化されていないが、IETFへhttpbisワーキンググループのドラフトとして提案されている。多くのGoogleのサービスはSPDY経由で利用できる。また、一般的なウェブサイトにもSPDYをサポートしているサイト(such as WebtideTwitterなど)がある。