2012年1月29日日曜日

Google Chrome で Cookie が試せない

Cookie の読み書きができない

JavaScript を始めました。
まずは、Cookie の機能を試してみようと簡単なサンプルを動かして見ましたが、うまくいきません。
Chrome を使っているのですが、試行錯誤しても分からず、ちょっと試しに Safari で動かすと読み書きできているようです。うれしい・・・(/_;)。

Cookie は標準的な機能かと思っていたんですが、ブラウザによるんですね。

調べると、Chrome はデフォルトではローカルファイルでの Cookie の使用はサポートしていないようです。 ('file://' では Cookie は実行できないようです。)
実行するには フラグ --enable-file-cookies が必要とのこと。(参考:Support cookies on file://



Google Chrome をフラグを付けて実行

参考:Run Chromium with switches (flags)

Mac で Chrome をフラグ付きで実行するには、コマンドラインから以下のように起動する。
$ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-file-cookies &

Web プログラマの人がブラウザの違いによって苦労しているとの話はよく聞きますが、苦労を垣間見た気がします。





2012年1月23日月曜日

Emacs 自動保存 + バージョン管理導入

Emacs で自動保存


自動保存機能について Emacsテクニックバイブル で紹介されている。(参考とされている高林氏の記事「Emacsでファイルの自動保存 (auto-save-buffers)」も興味深いです。)

内容は、「作業中にPCが落ちてしまった時のために自動的に保存するようにしましょう。また、保存操作には2ストロークも必要なので、自動化しましょう。そして、間違って保存してしまった時のためには、バージョン管理システムを使っておこう。」というもの。

保存操作が煩わしいとはあまり感じていなかったが、それはパソコンを使い始めてからこれまでに身に染み込んでいる、ファイルは保存するものという無意識の感覚のためかもしれない。こまめに保存する癖が付いているので、保存が自動化されると思っても見なかった解放感があるかもしれない。

設定ファイル等のバージョン管理をしたいとも思っていたところだったので、自動保存をインストールして、バージョン管理システムも導入してみた。

(全く余談だが、僕は「自動保存」の仕組みには Evernote で初めて触れた。 未だに ノートを書いた後には保存ボタンを探してしまう。)



おうちサーバにバージョン管理導入


Subversion を導入した。 mod_dav_svn.so がインストールされるよう config 設定してインストール。
まずはひと通りのインストールができたが、最初の import で permission denied となってしまった。

原因は Subversion のリポジトリのパーミッションの設定が間違っていたため。
Apache を Subversion サーバとして使うので、Apache からアクセスできるようにパーミッション設定しなければならなかった。

Apache の user と group は Apache の設定ファイル(httpd.conf)に記述してある。
;; Apache の設定ファイル
User www
Group www
User と Group が www となっているのでリポジトリの所有者を合わせて変更する。
;; リポジトリのディレクトリを /var/svn/ に作成している場合
$ sudo chown -R www:www /var/svn/

今日から、自動保存+バージョン管理です。
保存は忘れてもいいけど、commit を忘れないようにしないと ... 。


参考:Emacsテクニックバイブル ~作業効率をカイゼンする200の技~


参考:実用 Subversion 第2版




2012年1月15日日曜日

Emacs のデフォルト設定での起動

Emacs の設定ファイル .emacs を編集後、起動してみたらバグっていた時に、とりあえずデフォルト設定で起動するには、 -q オプションをつけて
$ emacs -q
で起動する。



参考:入門 GNU Emacs 第3版






2012年1月13日金曜日

Windows ユーザーエクスペリエンスガイドライン

くやしい。
はずかしい。

Windows ユーザー エクスペリエンス ガイドライン なる文書があったんですね。
今まで知らなかった。

「優れたユーザーエクスペリエンスをデザインする方法」 から見出しを幾つか。
  • 機能をデザインするのではなく、エクスペリエンスをデザインする。
  • 特に得意な分野を持つ。
  • 八方美人にならないようにする。
  • 何もしなくても適切に動作するようにする。
  • 労力、知識、思考を減らす。
等々、重要なことがいっぱい。
また、中身は具体的で実践的です。 Windows に関係なくためになりそうです。







2012年1月9日月曜日

M-c 単語の本当の先頭を大文字にする

Emacs では M-c で単語の先頭を大文字に出来ます。
しかし単語といってもカーソルのある位置が単語の先頭とみなされてしまうので、カーソルが単語の途中にあった場合はそのカーソルの位置の文字が大文字に変換されてしまいます。

カーソルのある位置の単語が一発で変換されるようにしました。
(多分、再発明と思いますが書きたかったので。
ついでに単語の大文字化/小文字化/kill も書きました。書きたかったので。)
;; 単語の先頭に point を移動
(defun move-first-char-of-word()
  (if (eobp)
    (backward-char))
  (forward-char)
  (backward-word))

;; M-c (capitalize-word) の改善
(defun mod-capitalize-word()
  (interactive)
  (move-first-char-of-word)
  (capitalize-word 1))
(define-key global-map "\M-c" 'mod-capitalize-word)

;; M-u (upcase-word) の改善
(defun mod-upcase-word()
  (interactive)
  (move-first-char-of-word)
  (upcase-word 1))
(define-key global-map "\M-u" 'mod-upcase-word)

;; M-l (downcase-word) の改善
(defun mod-downcase-word()
  (interactive)
  (move-first-char-of-word)
  (downcase-word 1))
(define-key global-map "\M-l" 'mod-downcase-word)

;; M-d (kill-word) の改善
(defun mod-kill-word()
  (interactive)
  (move-first-char-of-word)
  (kill-word 1))
(define-key global-map "\M-d" 'mod-kill-word)

単語の上のどこにでもカーソルを持っていったときに実行する場合と、単語を打ち終わった直後(単語の後で次の単語の前)に実行する場合を想定しています。

Emacsテクニックバイブル には「同じコマンドを連続実行した時の振る舞いを変更する」ということで、連続して M-u M-u ... と 押したときには後方に向かって単語をどんどん変換していく方法が紹介されています。

紹介されている方法では、 C-a を連続で押した場合の挙動も変更になるようなのですが、 僕の場合は、C-a はすでに気に入った変更を加えているのと、単に書きたかったので書いてみました。

参考:31.18 大文字小文字の変更
参考:Emacsテクニックバイブル ~作業効率をカイゼンする200の技~
 





Emacs キーバインド C-l

Emacsテクニックバイブル を読んでいて知った。
Emacs のキーバインドで C-l は、現在のラインを画面中央に持ってくるものとなっていたが、 Emacs23 では C-l 1回で中央に、2回で最上部に、3回で最下部に持ってくるよう変更になっている。

C-l に割り当てられているコマンドが recenter → recenter-top-bottom に変更されたそうです。

参考:Emacsテクニックバイブル ~作業効率をカイゼンする200の技~





2012年1月7日土曜日

yasnippet 探検

Emacs の Org-mode でyasnippetをインストールしておくと、 "<s <tab>" と入力すると "#+begin_example" と展開されるが、設定ファイルはどうなっているのだろう?
・・・どこで設定されているのだろうか?
インストール時に作った .emacs.d/plugins の中か?
$ ls -F
cc-mode/         erlang-mode/     markdown-mode/   rst-mode/        sql-mode/
css-mode/        f90-mode/        nxml-mode/       ruby-mode/       time
emacs-lisp-mode/ html-mode/       perl-mode/       scala-mode/ 
email            latex-mode/      python-mode/     snippet-mode/ 
org-mode はない・・・。perl-mode がある・・・。
中身は?
$ ls -F perl-mode
cperl-mode/ for         if          ifee        unless      xfore       xunless 
eval        fore        ife         sub         while       xif         xwhile  


実行してみる

if の場合

if ファイルの中身は、
#name : if (...) { ... }
# --
if ($1) {
    $0
}
Emacs の perl-mode で
if<tab> 
を入力すると、
if () {
    
}
が展開されて()の中にカーソルがくる。 ()の中に条件を書いて、<tab> を打つと{}の中にカーソルが移動する(上の設定ファイル中の '$0' の位置)。 便利。


fore の場合

fore<tab>
を入力すると、
foreach my $x (@array) {
    # body...
}
が展開されて、"x" の上にカーソルがくる。ここで、
  1. そのまま変数名を打ち込むと x がその変数名に置き換わる。
  2. <tab> を打つとカーソルは 'array' のところにくる。そのまま配列名を打ち込むと array がその配列名に置き換わる。
  3. ここで <tab> を打つと今度はカーソルは '# body…' のところにくる。処理を書いて <tab> を打つと{}の外にカーソルが移動する。
便利。便利。 fore の設定の中身は、
#name : foreach ... { ... }
# --
foreach my \$${1:x} (@${2:array}) {
    ${3:# body...}
}


for の場合

for の場合は、
for<tab>
を入力すると、
for (my $var = 0; $var < expression; $var++) {
    # body...
}
が展開されて、最初の var の上にカーソルがくる。この変数を書き換えると、残りの "var" も同時に書き換わる。 すごい。
for の中身は、
#name : for (...) { ... }
# --
for (my \$${1:var} = 0; \$$1 < ${2:expression}; \$$1++) {
    ${3:# body...}
}


構文

テンプレートの構文 を参考に。

1.  $0 とか $1。 
  タブストップと呼ばれる。 tab と s-tab で行ったり来たり出来る領域。(うちでは s-tab は効かなかった。ので戻れない。)

2.  {1:var} の "var" や {2:expression} の "expression" 。 
  プレースホルダーと呼ばれる。タブストップのデフォルト値。 ユーザーが何か入力するとその文字に置き換わる。

3.  ミラー 
  同じ番号のタブストップが幾つかあった場合、プレースホルダーを書き換えると、同じ番号のタブストップにも反映される。

設定が面倒かと思ってこれまで yasnippet はインストールしていなかったが、何も設定しなくてもインストールするだけでたくさんのスニペットが使えるようになっている。 もっと早くインストールすべきだった。
で、"<s" の設定はどこにあるのでしょう?


参考:テンプレートの構文





2012年1月1日日曜日

Org Mode での yasnippet を利用した入力支援 ( #+BEGIN_SRC )

yasnippet.el をインストール


ブログを始めてから、Emacs の Org Mode で #+BEGIN_SRC ・・・ #+END_SRC と書くことが多くなったので、 ここは Emacs Lisp で #+BEGIN_SRC と入力したら自動で #+END_SRC が入力される機能を作ってみよう!!と 意気込んでみたんですが、すぐに yasnippet っていうそのままの機能のモジュールがあることを思い出した。

インストールは Emacsテクニックバイブル とか Yet Another Snippet extention を参考にして行った。


Org Mode での入力支援


yasnippet を使えば #+BEGIN_SRC - #+END_SRC の自動挿入の記述も簡単にできると思ったら、実はその記述も必要なくて Org Mode では #+BEGIN_SRC についてはすでに yasnippet のテンプレートが用意されている。 "<s <Tab>" と入力すれば、
#+begin_src  <- カーソル位置はココ

#+end_src
が挿入される。カーソル位置が begin_src の後ろに来ていて、すぐに emacs-lisp などとプログラム名が打ちやすい状態になっている。

#+BEGIN_SRC 以外にも以下のものが予め準備されている。("<"のあとに下記のアルファベット 1 文字を入力して<Tab>)
s  #+begin_src ... #+end_src 
e  #+begin_example ... #+end_example
q  #+begin_quote ... #+end_quote 
v  #+begin_verse ... #+end_verse 
c  #+begin_center ... #+end_center 
l  #+begin_latex ... #+end_latex 
L  #+latex: 
h  #+begin_html ... #+end_html 
H  #+html: 
a  #+begin_ascii ... #+end_ascii 
A  #+ascii: 
i  #+index: line 
I  #+include: line 


参考:Emacsテクニックバイブル ~作業効率をカイゼンする200の技~
 
参考:Org Mode Manual - 15.2 Easy Templates