朝寝して宵寝するまで昼寝して時々起きて居眠りをする
M+ Fonts(エムプラスフォント、mplus font)のテストフライト版を Carbon Emacs で使ってみたかったので、設定をあれこれいじりました。 いろいろ検索した結果、結局配布元から設定へのリンクがはられていたのですが、見ることはできず。Web Archive から辿ることはできるのですがリンクをはっていいのかちょっとわからないので直接リンクは控えておきます。
これでいいのか実はだいぶ心許ないのですが、記録しておかないと .emacs ファイルが消えたときにまたやりなおしになるので、フォント関係の設定を全部書いておきます。重複記述や記述ミスが多分ありますが、だって動いてるんだもの。
(if (eq window-system 'mac) (require 'carbon-font)) (setq mac-allow-anti-aliasing t) ;; アンチエイリアスの設定 (if (eq window-system 'mac) (progn (create-fontset-from-mac-roman-font "-apple-m+ 2m-medium-r-normal--0-0-0-0-m-0-iso10646-1" nil "mplus2m") (set-fontset-font "fontset-mplus2m" 'japanese-jisx0208 '("M+ 2m light" . "iso10646")) (set-fontset-font "fontset-mplus2m" 'katakana-jisx0201 '("M+ 2m light" . "iso10646")) (add-to-list 'face-font-rescale-alist '(".*M+ 2m light.*" . 1.2)) (create-fontset-from-mac-roman-font "-apple-m+ 1m-medium-r-normal--0-0-0-0-m-0-iso10646-1" nil "mplus1m") (set-fontset-font "fontset-mplus1m" 'japanese-jisx0208 '("M+ 1m light" . "iso10646")) (set-fontset-font "fontset-mplus1m" 'katakana-jisx0201 '("M+ 1m light" . "iso10646")) (add-to-list 'face-font-rescale-alist '(".*M+ 1m light.*" . 1.2)) (create-fontset-from-mac-roman-font "-apple-m+ 1mn-medium-r-normal--0-0-0-0-m-0-iso10646-1" nil "mplus1mn") (set-fontset-font "fontset-mplus1mn" 'japanese-jisx0208 '("M+ 1mn light" . "iso10646")) (set-fontset-font "fontset-mplus1m" 'katakana-jisx0201 '("M+ 1mn light" . "iso10646")) (add-to-list 'face-font-rescale-alist '(".*M+ 1mn light.*" . 1.2)) (create-fontset-from-mac-roman-font "-apple-m+ 1m-medium-r-normal--0-0-0-0-m-0-iso10646-1" nil "mplus1mreg") (set-fontset-font "fontset-mplus1mreg" 'japanese-jisx0208 '("M+ 1m regular" . "iso10646")) (set-fontset-font "fontset-mplus1mreg" 'katakana-jisx0201 '("M+ 1m regular" . "iso10646")) (cond ((string-match "apple-darwin" system-configuration) (create-fontset-from-mac-roman-font "-apple-m+ 1m-medium-r-normal--0-0-0-0-m-*" nil "asciimplus") (set-fontset-font "fontset-asciimplus" 'japanese-jisx0208 '("ヒラギノ角ゴ pro w3" . "jisx0208.1983")) (set-fontset-font "fontset-asciimplus" 'katakana-jisx0201 '("ヒラギノ角ゴ pro w3" . "jisx0201.1976")) (add-to-list 'default-frame-alist '(font . "fontset-asciimplus")))) (add-to-list 'face-font-rescale-alist '(".*M+ 1m .*" . 1.2)) (add-to-list 'face-font-rescale-alist '(".*M+ 2m light.*" . 1.2)) )) (add-to-list 'default-frame-alist '(font . "-*-*-medium-r-normal--0-0-0-0-m-0-fontset-mplus2m"))
遅ればせながらバンクーバーオリンピックを興味のあるところだけぽつぽつと観ています。
フィギュアスケートなんかを観るのにいいサイトがないかと探していたら、NHK が見やすいと教わりました。確かにとてもコンテンツが充実していてわかりやすいのです。
特定の競技のページから、どの選手(チーム、ペア)の動画かを選ぶことが可能。順位ももちろんわかります。
次に秀逸なのが動画の再生画面。なんと右側に動画の索引(インデックス)がつけてあって、たとえばフィギュアなら2回目に入った三回転半ジャンプを見たい、というときにボタンひとつで手軽に見ることが可能です。すごい。オンデマンド。この機能が便利です。
中継はカーリングを少し見たぐらいで多分もうほとんど見ない(見られない)と思うので、このアーカイブサイトは活用していきたいと思います。オリンピック閉幕後いつまで残るかは若干疑問が残りますが。
Web サイトを作るのにこつこつメモ帳でタグを手打ちするのも好きなのですが、ページ数が多くなるとそれはそれで面倒だし、今後サイトデザインを変更するときなんかもなるべく楽をしたい。
でも編集するのは一人だし当たり前のコンテンツしかおかないから、表面上は徹底的に普通のホームページですよ CMS なにそれ? ブログって食べられるの? みたいなサイトを構築したいと思ったことはありませんか。
そんなわけで、実は Wiki だけど Wiki らしくない Web サイトを作るに至ったのでその作業記録です。
FreeStyle Wiki(FSWiki)は徹底的にモジュール化され、プラグインによる自由な拡張が可能な Perl による Wiki エンジンです。
「コアはシンプルにしておいてプラグインやアドオンでがんがんカスタマイズしていく」というのがどうやら私はとても好きらしく、このサイトのブログエンジンである Blosxom や Firefox(これはまぁ、本体もそれなりに重量級ですが)などの使用理由にもなっています。そんなわけで今回もベースは FreeStyle Wiki を採用しました。単純に以前にも稼働実績があるというのと、YukiWiki の文法が使えるからというのも理由の一部です。
個人的にとても使い勝手の良い Wiki エンジンです。
主なポイントは3つ
導入したプラグインとあわせてひとつずつ説明していきます。
URI が http://www.example.com/wiki.cgi?page=FrontPage という感じにパラメータ付きだったり、Wikipedia のようにエンコードされて http://ja.wikipedia.org/wiki/%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF となったりしているのははあんまりシンプルではない、と思うわけなので、ここを修正するために、ページへのリンクを静的URLにするプラグイン(改変版) を導入します。このプラグインを使うために .htaccess への記述が必要。さくらのレンタルサーバでは RewriteBase を使った記述では上手くいきませんでした。
DirectoryIndex wiki.cgi RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)/([^/]+)\.html#[^?]+\?(.+)$ http://www.example.net/wiki.cgi/$1?page=$2$3 [NE,QSA,L] RewriteRule ^(.+)/([^/]+)\.html$ http://www.example.net/wiki.cgi/$1?page=$2 [NE,QSA,L] RewriteRule ^([^/]+)\.html$ http://www.example.net/wiki.cgi?page=$1 [NE,QSA,L] RewriteRule ^(.+)/$ http://www.example.net/wiki.cgi/$1 [NE,QSA,L]
これで、http://www.example.net/index.html という URI で index というページ名のページにアクセスが可能になります。
通常の Wiki だと トップページのタイトルが FrontPage、また WikiName のような一定のルールの文字列が文章中にあると自動でリンクがはられたりしてページ名になったりしますが、まずページ名≠ページタイトルとするために、アクセシビリティ配慮のタグを出力するプラグイン を導入します。これで、index.html のページタイトルを index 以外に設定することが可能です。
ですが、このままだとトップページに支障が出る場合があります。トップページの<title>は「トップページ名称 - サイト名」という表記になり、サイト名だけの記述にするということができません。<title> タグを指定するようなプラグインを探しても良かったのですが、トップページだけレイアウトを変えるというのも良くあることなので、トップページ専用のテンプレートを作成後、テンプレート/スタイル変更プラグイン を利用してテンプレートごと変えてしまい、<title> タグの中身は直書きでテンプレートに <title>サイト名称 </title> として対処しました。
テンプレートと同時並行でスタイルの設定です。FSWiki ではデフォルトで tDiary のテーマが使用可能≒はてなダイアリーのテーマ(全部かどうかは不明)が使用可能なので、tDiary のテーマギャラリーあたりから好みのテーマをダウンロードして導入するのが一番簡単です。好みで好きなテーマをインストールします。
最後に一番 Wiki っぽい部分、編集機能を見えなくします。
FsWiki だと デフォルトで右上に「トップ 新規 編集 差分 一覧 ソース 検索 ヘルプ RSS ログイン」というのが表示されますが、これを全部消してしまいます。
ただ全部さっくりと消してしまうとのちのち大変なので、新規にページを作成して「トップ 新規 一覧 検索 ヘルプ RSS ログイン」あたりのリンクを新規作成したページへコピーしておき、そのページをブックマークしておくと簡単です。「編集」についてはページからのリンクでないと意味がないので、現在表示しているページを編集するためのブックマークレットを用意しておきます。
javascript:(function(){location.href=location.href+'?action=EDIT';})();
これをブックマークします→ 編集
実際の表示を消すのはスタイルシートで消すのが一番簡単です。これは先ほど設定したテーマのスタイルシートに記述します。
div.adminmenu { display: none; }
この方法のメリットはスタイルシートをオフにすると編集メニューが見えること。(たとえば Firefox なら「表示」−「スタイル」−「スタイルシートを使用しない」)ただしこれはデメリットでもあるので、完全に消したい場合はテンプレートをいじります。検索エンジンのクローラが来た場合にはスタイルシートでの非表示はほとんど意味がないので「一覧」などから意図しないリンクを辿られる可能性があります。
テンプレートをいじる際に、画面右下の「Powered by FreeStyleWiki〜」の記述もカスタマイズしています。デザイン上の都合から「Copyright〜」表記も左に同じ。
そのほかのプラグインは「自由な HTML での編集をできるだけ可能にすること」や「メール送信フォームが作成できること」などを目的としているので、Wiki の標準の編集機能で十分であれば導入の必要は特にありません。
それよりも、デフォルトユーザのパスワードの変更(ユーザ admin/ パスワード admin)や、ページの編集権限をログインユーザだけに絞ることなどのほうが重要です。
FreeStyle Wiki についての基本的なインストール方法やプラグインの追加方法は公式サイトや添付のドキュメントを参照してください。
IE や Firefox を使っていると、Tab キーを押すことでリンクやテキスト入力フィールド、ラジオボタン、チェックボックスなどに遷移できてマウスを触らずに Web サイトをうろうろすることができるのですが(リンクがたくさんあると移動だけで面倒とか言うのは置いておいても)、Opera や Safari だとこれができないのです。
なにか技があるはず! と思って探したところ、回答が見つかりました。
Ctrl + 上下の矢印キー(↓、↑)を使用する。
option(alt)+Tabキーを使用する。
両ブラウザとも現在カーソルがあたっている部分がとてもわかりやすくハイライトされるのでいい感じです。Safari は環境設定から通常の Tab のみでの移動に切り替えることも可能になる模様。ちなみに確認環境は Opera が 9.6(Windows)、Safari は 4(Mac OS X)です。
例のごとく現在行で G(Shift + g)を押すと、URI があった場合に clickable-uri の設定にしたがって URI を開いたりします。
irc-mode に加えて clickable-uri がインストールされている必要があります。
;;;;;;;;;;;;;;;;;;; ;; ■ clickable-uri を利用して適当にURIにジャンプ (defun irc-goto-uri () (interactive) (save-excursion (let ((ed (progn (goto-eol) (point)))) (goto-bol) (when (scan-buffer ed::*clickable-uri-regexp* :limit ed) (ed::clickable-uri-open))))) (add-hook '*irc-dialog-mode-hook* #'(lambda () (local-set-key #\G 'irc-goto-uri)))
Twitter クライアントの P3 とかを使っているとキーひとつでふぁぼできるのですが、そういうのがうらやましかったので TwitterIrcGateway + irc-mode の環境でも使えるように書きました。~/.irc に書いて使ってください。現在カーソルのある行の発言に対して実行します。
TypableMap って何? どうやって設定するの? という方はこのあたりに TypableMap を有効にする方法についての解説があるのでご参照ください。(端折って説明すると /join #Console
, config
, set EnableTypableMap True
で終了)
F (Shift + f) で Favorite、U(Shift + u)で Favorite から削除。R(Shift + r)で TypableMap を使ったリプライ補助。
ふぁぼとあんふぁぼは、問い合わせもなしにいきなり Favorite に追加(または削除)します。問い合わせて欲しい場合はそのための関数を作ったので、そちらにキーを割り当ててください。
実行は TIG まかせなので発言が Fav されているかどうかをチェックして Unfav を抑止するとかいう親切設計はありません。
Reply は一番左端に @screen_name が表示されて一応相手がわかるという誤爆防止機能はありますが、TypableMap の部分を消すとリプライでもなんでもないごく普通の発言になります。仕様です。
;;;;;;;;;;;;;;;;;;; ;; ■ TIG での TypableMap を利用した Reply (defun tig-reply () "Reply" (interactive) (irc-check-connection) (irc-dialog-check-joined) (save-excursion (goto-bol) (when (scan-buffer "^[0-2][0-9]:[0-5][0-9] <\\([^>]+\\)> \\(.*\\)(\\([a-z]+\\))$" :regexp t) (let ((tp (match-string 3)) (prompt (format nil "@~A - ~A: " (match-string 1) (irc-channel-name irc-dialog-channel))) msg) (setf msg (read-string prompt :default (format nil "re ~A " tp))) (unless (equalp msg "") (irc-dialog-post-buffered-privmsg (irc-channel-name irc-dialog-channel) msg)))))) (add-hook '*irc-dialog-mode-hook* #'(lambda () (local-set-key #\R 'tig-reply))) ;;;;;;;;;;;;;;;;;;; ;; ■ TIG での 問答無用 Favorite (defun tig-favorite (&optional y-or-n) "Favorite" (interactive) (irc-check-connection) (irc-dialog-check-joined) (save-excursion (goto-bol) (when (scan-buffer "^[0-2][0-9]:[0-5][0-9] <\\([^>]+\\)> \\(.*\\)(\\([a-z]+\\))$" :regexp t) (when (or (not y-or-n) (yes-or-no-p (format nil "@~A: \"~A...\" を~%Fatorite に追加しますか?" (match-string 1) (substring (match-string 2) 0 20)))) (irc-dialog-post-buffered-privmsg (irc-channel-name irc-dialog-channel) (format nil "fav ~A" (match-string 3))))))) ;; キーバインド (add-hook '*irc-dialog-mode-hook* #'(lambda () (local-set-key #\F 'tig-favorite))) ;; 一言聞く場合はこっちにキーを割り当てる (defun tig-favorite-interactive () (interactive) (tig-favorite t)) ;;;;;;;;;;;;;;;;;;; ;; ■ TIG での 問答無用 Favorite 削除 (defun tig-unfavorite (&optional y-or-n) "UnFavorite" (interactive) (irc-check-connection) (irc-dialog-check-joined) (save-excursion (goto-bol) (when (scan-buffer "^[0-2][0-9]:[0-5][0-9] <\\([^>]+\\)> \\(.*\\)(\\([a-z]+\\))$" :regexp t) (when (or (not y-or-n) (yes-or-no-p (format nil "@~A: \"~A...\" を~%Fatorite から削除しますか?" (match-string 1) (substring (match-string 2) 0 20)))) (irc-dialog-post-buffered-privmsg (irc-channel-name irc-dialog-channel) (format nil "unfav ~A" (match-string 3))))))) ;; キーバインド (add-hook '*irc-dialog-mode-hook* #'(lambda () (local-set-key #\U 'tig-unfavorite))) ;; 一言聞く場合はこっちにキーを割り当てる (defun tig-unfavorite-interactive () (interactive) (tig-unfavorite t))
気が向いたので久々にアドエスにアプリをインストールしました。
以前から屋外でカメラを起動したときに液晶の輝度が低すぎて(バッテリー消費を防ぐための設定)ファインダーの役に立たないことなどがあったので、カメラ用のアプリを導入したいと思ってはいたので、そのついでです。
気が付いたら、クリーンインストールしていないという意味ではこの Ad[es] の Windows Mobile が一番付き合いが長い OS。他は全て HDD が消えたり消えたりしたので OS のリカバリとかは当分したくない気持ちなのですが、個人情報もりだくさんの上にどこから入れたか分からないアプリも満載のこの環境が個人的に一番消えたら困る環境です。たまにはバックアップを取ろうと思います。