はじめに
※ 注:「aquaさん」とは,私が現在乗っている自転車「ORBEA aqua」のことを指します.さっき,そう呼ぶように決めたり決めなかったり.
先日の西岡さんとのロングライドの時に教えてもらったロードバイク用のバックミラー。 これがとてつもなく便利品☆彡 これを付けていれば、走行時に後ろを見なくても背後からの車や走行者の様子がばっちりわかるd(・・〃)
-hiro’s taste-: 551:自転車のバックミラー
きっかけは,自転車関連で何かを検索していたときにふと見つけたこちらのエントリ.
これは便利そう
路上左端を走行時,後方の自動車なんかの状況を確認するため,右後ろを振り向いていますが,けっこうフラついて危ないです.
で,このバックミラーをドロップハンドルのエンド部分に取り付けることで,少し下を向くだけで後方の状況を把握できる,というわけです.なるほど!
購入,取り付け
Amazonさんに置いてあった ので迷うことなく購入しました.ドロップハンドル用,フラットハンドル用,それぞれ向けのものがあるので,そこだけは注意が必要ですが.
取り付けは特に難しいところなどありません.付属のヘックスレンチ1つでできてしまいます.強いて言うならば,ハンドルのエンドキャップを外すのがいちばん苦労した,といったところでしょうかw
少し走ってみて
角度調整は簡単にできます.かといって,振動で角度がずれるほど緩くもなさげです.まぁ膝とか当たれば動きますが.
小さめの面積で少しでも多くを捉えるためだと思いますが,反射面が少しカーブしています.そのため,距離感がつかみにくい感がありました.といってもまだ1回,しかも数kmしか走っていないので,すぐに慣れてくることでしょう.
おわりに
ということで,aquaさんにバックミラーを取り付けましたよー,というお話でした.
交通量がそれなりにあるような道路を走行する,そんなケースが多いときにかなり重宝するのではないかな,と思います.価格も手頃ですし.
-
ブッシュ&ミューラー(BUSCH+MULLER) CYCLESTAR サイクルスター 901/2 サイクルミラーposted with amazlet at 09.06.29ブッシュ&ミューラー
売り上げランキング: 1179
ちなみに
手元にもう1つあったりなかったり.布教用ってわけではありませんが,よろしければどなたかつk(ry
コメントをいただいたので,以下の点に追記しました.
- *.el を置く場所
- ことえりで日本語入力時に必ず全角スペースになる件
- ウィンドウの透明化
はじめに
MacBookと暮らし初めてひと月半ほど経ちました.
Macでは,テキストエディタとして Carbon Emacs (以下,emacs)を使っています.それまで使ってきた(現在もときどき使ってますが) xyzzy との微妙な差異に最初は多少悩まされましたが,ここ最近で,ようやく慣れてきた感があります.
その間,自分が使いやすいようにと,先人の記録を参考に,emcas 設定を追加・変更してきました.
以下,そんな設定の現状についてメモ的にまとめてみました.特に目新しいものなどはありませんが.
設定の前に
*.el を置く場所
拡張する際,先人が書かれた emacs lisp ファイルを特定の場所に置く必要が出ることがありますが,その場所がまったくわからなかったので,参考にさせていただいたものが以下.
また、MacOSXでメジャーなCarbon Emacsのsite-lispディレクトリの位置は非常にわかりにくく、パッケージ内となっている。Carbon Emacsをアプリケーションフォルダ内に入れている場合、パスは「/Applications/Emacs.app/Contents/Resources/site-lisp」となる。
Emacsの初期設定ファイル (Kanasansoft Web Lab.)
そんなわけで,
/Applications/Emacs.app/Contents/Resources/site-lisp/
に置きましょう,ということになります.
次のような 1行を追加することで,任意の場所におけるようですね.
(setq load-path (cons "/Users/iwata/site-lisp/" load-path))
なるほど,この方が,デフォルトのものと追加したものとの住み分けができてメンテナンス的にもよさげですね.
複数起動する
先日参加した Kanasan.JS の懇親会で,次のようにするといいよ,という話をいただきました.
% open -n /Applications/Emacs.app
現在は,これを cemacs という名前で alias して使っています.
alias cemacs="open -n /Applications/Emacs.app"
毎回(Visorで)ターミナルを呼び出して起動していますが,なかなかメンドイ.ランチャからコマンドをたたける方法とかないのかな,と思い始めている今日この頃です.
見た目に関する設定
ウィンドウサイズの位置とかサイズとか
できるだけモニタいっぱいに,左のDockにはかからないように...で試行錯誤の結果が以下です.
(if window-system (progn (setq initial-frame-alist '((width . 202)(height . 58)(top . 0)(left . 48))) (set-background-color "Black") (set-foreground-color "White") (set-cursor-color "Gray") ))
フォント
「Options → Show/Hide → Font Panel」メニューでフォント選択なGUIを呼び出して「どのフォントにしようかな?」といった感じで1つ1つ切り替えながら選んでたので,それがはき出したコードかな?
(if (eq window-system 'mac)(require 'carbon-font)) (fixed-width-set-fontset "hirakaku_w3" 10)
キーバインド
改行後にインデント
(global-set-key "\C-m" 'newline-and-indent)
効果があるのかないのか,最初から有効になっているのか...あまりよくわかってません ><
Ctrl-H でヘルプを表示させずに Backspace を機能させる
linuxとか使っていると,Ctrl-H は Backspace の役割を果たすものだと体が覚えてしまいます(ですよね?)(Windows でも XKeymacs を使ってそのように割り当てています),「あ,間違えた → Ctrl-H Ctrl-H Ctrl-H...」といった感じで.Windows でも XKeymacs というツールを使って,そのようにキーバインドを変更しています.
しかし,emacs のデフォルトでは,Ctrl-H (を2回?)すると,ヘルプっぽいもの(?)が出てきてしまいます.これはうざい.
次の2行を追加することで,そんなストレスから解放されます.
(load "term/bobcat") (when (fboundp 'terminal-init-bobcat) (terminal-init-bobcat))
行カーソル
カーソルの点滅のみだとどうも位置を見失うので,現在の行をハイライトするようなものが欲しくて,検索して見つけたエントリ(後述)を参考に,次のようなスクリプトになりました.
(defface hlline-face '((((class color) (background dark)) ;;(:background "dark state gray")) (:background "gray10" :underline "gray24")) (((class color) (background light)) (:background "ForestGreen" :underline nil)) (t ())) "*Face used by hl-line.") (setq hl-line-face 'hlline-face) ;;(setq hl-line-face 'underline) (global-hl-line-mode)
参考
js2-mode
デフォルトで入っている javascript-mode がなんだか残念なので,それにとって代わる JavaScript 用のモードを探してみたところ,js2-mode なるものが評判いいようで.
コーディング中にリアルタイムで文法チェックなどを行ってくれたりします,ちょっとお節介と感じるくらいに.
コンパイル
js2-mode のサイトにある js2-*.el(現時点では js2-20080616a.el)をダウンロードし,js2.el などとして先で触れたパスに置きます.
そして,M-x byte-compile-file を実行,置いたファイル(この場合,/Applications/Emacs.app/Contents/Resources/site-lisp/js2.el のようになります)を指定することで,コンパイルが行われます.
.emacs に追記
コンパイルが完了したら,.emacs に次のようなスクリプトを追加します.
(autoload 'js2-mode "js2" nil t) (add-to-list 'auto-mode-alist '("\\.js$" . js2-mode)) (add-to-list 'auto-mode-alist '("\\.json$" . js2-mode)) ;; http://8-p.info/emacs-javascript.html (setq-default c-basic-offset 4) (when (load "js2" t) (setq js2-cleanup-whitespace nil js2-mirror-mode nil js2-bounce-indent-flag nil) (defun indent-and-back-to-indentation () (interactive) (indent-for-tab-command) (let ((point-of-indentation (save-excursion (back-to-indentation) (point)))) (skip-chars-forward "\s " point-of-indentation))) (define-key js2-mode-map "\C-i" 'indent-and-back-to-indentation) (define-key js2-mode-map "\C-m" nil))
この場合,js,json を拡張子に持つファイルを読み込んだ場合に js2-mode が起動するようになります.
参考
tt-mode
Template Toolkit 向けテンプレートの記述向けのモードです.[% ... %] な表記がハイライトなどされます.
コンパイル
次のサイトから tt-mode.el をダウンロード,例のパスに置きます.そして,M-x byte-compile-file します.
.emacs に追記
拡張子に連動してモードを起動したい場合,その拡張子に合わせて次のようなものを .emacs に追記します.
(autoload 'tt-mode "tt-mode" nil t) (add-to-list 'auto-mode-alist '("\\.tt$" . tt-mode)) ;;(add-to-list 'auto-mode-alist '("\\.tpl$" . tt-mode))
参考
jaspace-mode
Mac デフォルトの IME である「ことえり」では,日本語入力時,スペースは必ず全角となり,これを半角に設定することもできないっぽいです.
そのため,ソースコードを書いているときなどに,意図せず全角スペースが混入することがときたま発生してくれちゃったりします.しかも見えません.カーソルを乗せないと判別できません.
全角スペースを入力した場合,デフォルトでの表示単なる「空白」であり,特に見えるわけでもありません.カーソルを乗せたときにそれが全角かどうかがわかるくらいです.
これでは体に悪いので,何かないかと探してみたところ,全角スペースやタブを可視化してくれる jaspace-mode の存在を知りました.
コンパイル
次のサイトから jaspace-mode.el をダウンロード,例のパスに置き,M-x byte-compile-file します.
.emacs に追記
以下のスクリプトを .emacs に追記します.
(when (require 'jaspace nil t) (when jaspace-modes (append jaspace-modes (list 'lisp-mode 'yaml-mode 'perl-mode 'js2-mode 'javascript-mode 'python-mode 'ruby-mode 'php-mode 'xml-mode 'html-mode 'css-mode 'text-mode 'tt-mode 'fundamental-mode )))) (when (boundp 'jaspace-alternate-jaspace-string) (setq jaspace-alternate-jaspace-string "□")) (when (boundp 'jaspace-highlight-tabs) (setq jaspace-highlight-tabs ?^)) (add-hook 'jaspace-mode-off-hook (lambda() (when (boundp 'show-trailing-whitespace) (setq show-trailing-whitespace nil)))) (add-hook 'jaspace-mode-hook (lambda() (progn (when (boundp 'show-trailing-whitespace) (setq show-trailing-whitespace t)) (face-spec-set 'jaspace-highlight-jaspace-face '((((class color) (background light)) (:foreground "blue")) ;;(t (:foreground "green")))) (t (:foreground "gray32")))) (face-spec-set 'jaspace-highlight-tab-face '((((class color) (background light)) (:foreground "red" :background "unspecified" :strike-through nil :underline t)) ;;(t (:foreground "purple" (t (:foreground "gray16" :background "unspecified" :strike-through nil :underline t)))) (face-spec-set 'trailing-whitespace '((((class color) (background light)) (:foreground "red" :background "unspecified" :strike-through nil :underline t)) ;;(t (:foreground "purple" (t (:foreground "gray16" :background "unspecified" :strike-through nil :underline t)))))))
一部のモードで自動的に起動しない
このスクリプトの冒頭ですが,「このモードでは jaspace-mode も起動してね」的なことと解釈していろいろなモードを追加してみました.
しかし,一部のモードでは自動的に起動してくれません.自分で M-x jaspace-mode すればちゃんと起動してくれるのですが...
この辺, lisp(emacs lisp)がわかっていればきっと修正できるんでしょうけど,現状さっぱりです.しばらく手動で起動するしかなさげですかね ><
ちなみに
本エントリを書いている現在,ATOKが入ってますw
参考
- おまけ for GNU Emacs
- 続・Emacsでタブ・全角スペース・行末の空白文字列を目立たせる — ディノオープンラボラトリ
- Meadow/Emacs memo: 表示のカスタマイズ — 背景色,メニュー
当時は知らなかったのですが、実はことえりでも、日本語入力モードで常時「半角スペース」にする事ができます。
Macはじめました。: ことえりで、常に「半角スペース」が入力されるようにする方法
こちらのエントリにあるとおり,
% defaults write com.apple.inputmethod.Kotoeri zhsy -dict-add " " -bool no % killall Kotoeri
とすることで日本語入力時でも半角スペースを入力できるようになるみたいですね.
私の環境でも入力を確認できました.Space のみで全角,Shift + Space で半角,となるのは,ATOKが混じっているからでしょうか...
その他こまごましたもの
保存時にバックアップファイルを作らない
バージョン管理していれば,まず要りませんよね.
(setq backup-inhibited t) (setq make-backup-files nil)
拡張子がhtml,tplなファイルをxml-modeでロード
Webなアプリ開発とかでテンプレートファイルとして tpl という拡張子をよく使っているので.
(setq auto-mode-alist (append '(("\\.html$" . xml-mode)) auto-mode-alist)) (setq auto-mode-alist (append '(("\\.tpl$" . xml-mode)) auto-mode-alist))
バッテリの残量を表示する
お出かけ先での開発には重宝するかも? (まぁ,メニューバーに最初からバッテリの残量が表示されてますけどね...)
(display-battery-mode t)
起動時のアレを表示しない
毎回要りません.
(setq inhibit-startup-message t)
タイトルバーに現在のファイル名を表示する
現在開いているファイルのフルパスがすぐに確認できるのでありがたいです.
(setq frame-title-format (format "%%f - Emacs@%s" (system-name)))
動作していないっぽい
ウィンドウ(フレーム?)の透明化
ウィンドウが透明化してくれるらしいのですが...
(setq default-frame-alist (append (list '(active-alpha . 0.90) '(inactive-alpha . 0.75) ) default-frame-alist))
透明化できました.(画像は75%のものです.)
;;(setq default-frame-alist ;; (append (list '(active-alpha . 0.90) ;; '(inactive-alpha . 0.75) ;; ) default-frame-alist)) (set-frame-parameter nil 'alpha 80)
yaml-modeでのインデントが変?
設定関係ではありませんが...
yaml-mode使用時,Tabキーでインデントすると通常は数個のスペースが入ります.しかし,データの構造によって,ときどきタブが入っちゃうんですよね.
これを YAML::Syck とかで読むと,エラーが出てしまうので,毎回スペースに置き換えたりと,なかなか困りものです.
こちらのものを入れてみたのですが,この件については特に変わらず,です.
文法的に問題あるのかなぁ,でも,スペース使っていればちゃんと読んでくれるし...
おわりに
以上,私が追加などしている Carbon Emacs の設定の現状についてまとめてみました.
emacs lisp とかわかっていると,もっと細かいレベルでの設定なんかも可能なんでしょうね.まぁ時間があったら勉強してみたいところではあります.
参考
先であげた以外に,以下のサイト・エントリも参考にさせていただいてます.
はじめに
去る 6月 7日(日),Kanasan.JS JSDeferred Code Reading へ参加してきました.
以前,1月17日(土)に Roppongi.JS でも開催されました が,後輩の結婚式に出席していたために参加できず,それ以来機会がありませんでした.(一人で読めたらまぁ苦労はしませんよね><)
そんなわけで,ぜひこの機会に,というのが参加に至る背景,とでもいいましょうかね.
それでは以下,当日の流れをざっと振り返ってみることにします.
なお,現在もソースコードに少し目を通しながら本エントリを書いているため,コードリーディングに関する記述が当時のものと現在のものと混在しているかも,ということを加えておきます.
会場まで
会場は 大阪府私学教育文化会館 というところ.今回は新幹線で京都駅まで,七条駅まで徒歩,京阪本線で最寄り(のひとつ)である京橋駅まで,という感じで向かいました.
京橋駅到着直前にマクドナルドが見えたので,そこで昼食...のつもりが,改札を出たとたん 京阪モール に入ってしまい,しばらく出られずにウロウロしていましたorz
結局,マクドナルドに寄るには時間が足りなくなってきたので,直接会場に向かいました.
会場
ドキュメントチェックと簡単なコーディング
まずは JSDeferred がどんなものか,というのを確認すべく,ドキュメントを読みながら実際に動かしてみることから始まりました.
一行書いて確認してもう一行つなげて...を繰り返したのが次のコードです.物覚えが遅いので,3つのメソッドくらいしか使えていませんが><
Deferred.define(); next( function() { alert( 'hoge' ); }) .wait(1) .next( function() { alert( 'fuga' ); }) ; parallel([ next( function() { alert('hoge'); }) .wait(1) .next( function() { alert('hogehoge'); }) , next( function() { alert('fuga'); }) ]) .next( function() { alert( 'piyo' ); }) .next( function() { loop( 5, function( n ) { alert(n); }) .loop( {begin:1, end:10, step:3}, function(n, o) { alert( [n, o.step] ); }); }) ;
コードリーディング
これを書いている現在ソースコードに再度目を通しもしているので,当日の記録というよりは,実装のメモというか覚え書きというか...そんなものになりそうです.
ちなみに,対象のバージョンは 0.2.2 です.
コンストラクタ
83 | function Deferred() = { return (this instanceof Deferred) ? this.init() : new Deferred() } |
Deferred() としても new Deferred() としても同じものが返る,というか,どちらの形にしろ最後は this.init() が呼ばれる,ということですね.
私にとっては,しょっぱなの1行から勉強になります.
Deferred.ok
引数をそのまま返す.
Deferred.ng
引数とともに例外を投げる.
メソッド
86 | Deferred.prototype = { |
この書き方で始めると,constructor プロパティがなくなるよね,というお話が出てましたね.
init
_nextプロパティcallbackプロパティ
next
※ 先に _post メソッドを把握した方がよさげ
- 第1引数
fun:関数. callbackプロパティのokプロパティに,第1引数の関数が割り当てられたDeferredオブジェクトを返す.- つまり,
callbackプロパティが指すオブジェクトのokメソッドが第1引数の関数であるようなDeferredオブジェクトを返す,ということ?
error
※ 先に _post メソッドを把握した方がよさげ.
- 第1引数
fun:関数 nextメソッドの記述をs/ok/ng/g;した感じ.
call
※ 先に _fire メソッドを把握した方がよさげ.
- 第1引数
val:値?何の? 'ok',valを引数に,_fireメソッドを呼び出す.
fail
※ 先に _fire メソッドを把握した方がよさげ.
- 第1引数
err:エラーオブジェクト? 'ng',errを引数に,_fireメソッドを呼び出す.
cancel
102 | (this.canceller || function () {})(); |
cancellerメソッドが定義されていればそれを実行,そうでなければなにもしない,- そうか,こういう書き方もできるのね.
102 | return this.init(); |
- そして初期化して自身を返す,でいいのかな?
- つまり,
_nextプロパティにDeferredオブジェクトが登録されていて実行予定だった処理を「キャンセルする」ということかな?
_post
- 第1引数:’ok’ or ‘ng’.
- 第2引数:関数
_nextプロパティに新しいDeferredオブジェクトを生成._nextプロパティの_callbackプロパティのokまたはngプロパティに,第2引数で指定した関数を割り当てる._nextプロパティが指すDeferredオブジェクトを返す.
_fire
- 第1引数
okng:’ok’ or ‘ng’. - 第2引数
value:何の値?
113 114 115 116 117 118 119 | next = "ok"; try { value = this.callback[okng].call(this, value); } catch (e) { next = "ng"; value = e; } |
callbackプロパティが指すオブジェクトのokもしくはngメソッドを,自身のメソッドとして呼ぶ.この際,第2引数で与えられたものをメソッドの引数としている.このメソッドの返り値でvalueを置き換える.- 第1引数が
ngのとき,例外が発生する場合がある. - 例外が発生した場合,
valueにはエラーオブジェクトが入る.
120 121 122 123 124 125 | if (value instanceof Deferred) { value._next = this._next; } else { if (this._next) this._next._fire(next, value); } retturn this; |
valueがDeferredオブジェクトの場合,自身の_nextプロパティをvalueの_nextプロパティとする.???valueがDeferredオブジェクトでない場合,_nextプロパティが指すDeferredオブジェクトの_fireメソッドを,next,valueを引数に呼び出す.- 最後に,自身を返す.
まとめると,callbackプロパティに登録されている,登録されていなければデフォルトの,関数を自身のメソッドとして呼び出し,その結果を次の Deferred オブジェクトに伝えて,その callbackプロパティに登録さr(ry ...といった,処理実行の連鎖を引き起こす,といった感じになるのかなぁ...
Deferred.parallel
- 第1引数
dl:Deferredオブジェクトの配列,もしくは,同オブジェクトを値に持つハッシュ(オブジェクト).
[あとで読み直す]
[あとで書く]
Deferred.wait
[あとで読み直す]
[あとで書く]
Deferred.next
私が少々読み遅れていたため,ここまでたどり着けなかったです orz
[2009/06/07 15:11:44] 37to: nextについては、205行目のnext_defaultだけ見ておくとよいそうです
[2009/06/07 15:12:19] 37to: その他のnext系関数は、高速化の為の関数との事です
チャットログ JSDefferred コードリーディング ( Kanasan.JS : JavaScript Workshop in Kansai)
Deferred.next_default
[あとで読み直す]
[あとで書く]
Deferred.next_faster_way_readystatechange
※ Kanasan.JS では未読.
[あとで読む]
[あとで書く]
Deferred.next_faster_way_Image
※ Kanasan.JS では未読.
[あとで読む]
[あとで書く]
Deferred.call
[あとで書く]
Deferred.loop
※ Kanasan.JS では未読.
[あとで読む]
[あとで書く]
Deferred.register
[あとで書く]
すごく混乱.
[あとで書く]
388行 - 389行
388 389 | Deferred.register("loop", Deferred.loop); Deferred.register("wait", Deferred.wait); |
[あとで書く]
Deferred.define
※ Kanasan.JS では未読.
[あとで読む]
[あとで書く]
ゆるふわTechTalk
flickr の写真をブログとかで掲載するためのHTMLを簡単にコピペするためのgreasemonkey
生comet
stack stock books api + jquery
私は半年以上放置で恐縮ながら,DQWindowManager について少々.
懇親会・帰り道
- XULって「ずーる」って読むんだ.
- 言語の教養的な意味で,smalltalkについて勉強してみるといいよ.
-
carbon emacs を複数起動するには
open -n /Applications/Emacs.app
とかするといいよ.
などなど.
帰りは,行きの真逆を辿ってきました.途中,京都タワーが光っていたので撮ってみました.三脚がなかったのでブレてますかね...
おわりに
以上,Kanasan.JS JSDeferred Code Reading の参加報告でした.
今回の進捗としては,全体の半分くらい,でしょうか.
JSDeferred は行数こそそんなに多くはないものの,メソッド 1つ 1つの内容がかなり濃ゆいです.JavaScript のエッセンスが詰まっています...といろいろなところでさんざん言われていますが,それを身をもって知ることができました.(現在進行形ですが><)
個人的には,読み進める中で前の方で定義されたメソッドが目に入るたびに,定義部分へ戻って挙動を再確認する,ということを何度も何度も繰り返してしまい,なかなか進められませんでした.
コード中で呼び出される頻度の高いメソッド・関数を把握して,それらから順に理解していくと効率がいいのかな..
今回学んだことは,JSDeferred のような濃ゆいライブラリを書かないまでも,普段から書くちょっとした JavaScript コードにも十分に反映でき得るものだったと思います.(自分が過去に書いたコードをリファクタリングするとどうなるんでしょうねw)
...あーっと,DeLLa.JS も再開しないとですね.7月にはなんとか...
参考
© issm. Powered by WordPress-ja and theme is customized based on Amazing Grace by Vladimir Prelovac.


















いわたと読みます.名古屋市在住.