console.log()を使うとIE8で動かない

業務でJavaScirptを使う機会がなくてGreasemonkyなどでちょろっとかくぐらいで知らなかったのですが、console.log()をつかってログを出力する場合 IE8 でエラーでスクリプトが停止してしまうようです。
FireFox 3.6でも同様のことがおきました。

さらに、開発者ツールや Firebug を動作させていると動いてしまうため、問題がないと勘違いしてしまいました。

動作をみる限りでは、console.log() が実装されてないようなので、開発者ツールを起動するとこれが実装され、動いてみえるようです。

スタックオーバフローからの引用ですが、ラッパーを書いてしまうのがよさそうです。

function trace(s) {
  if (this.console && typeof console.log != "undefined")
    console.log(s);
  else alert(s);
}

なおってないのに、なおったとかいってしまってごめんなさい。

MacでImputMethodをつくるのにメモ

いつかInputMethodつくりたいなーということでメモ。ほんとにメモ。

とりあえず、使用するフレームワーク
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/InputMethodKitFrameworkRef/_index.html#//apple_ref/doc/uid/TP40006154:InputMethodKitFramework

仕組みとか

  • ログイン時に/Library/InputMethod/においてあるものがよみこまれるようだ。
    • ビルドした後に配置してログアウトして、ログインしなおさんといかんのかしら
  • アプリケーション起動後 IMKServer のインスタンスを作る必要がある。
  • IMKServer には実際に処理するためのクラスを指定するIMKInputControllerのサブクラス名を指定する。この指定は info.plist でもできるっぽい。
  • 入力がくるとinputText:clintあたりにコールバックがくるっぽい。

ということらしい。

まあ、ちゃんとは調べてない。

シェルのリターンがすごくおそいなと思ったら原因はvcs-infoだった

Gentoo / Prefix OSX な環境のzshがコマンドの実行後にプロンプトがかえってこない!!
ということで指向錯誤してたら vcs の情報を表示している部分が原因だったみたいです。

ちなみにvcsの情報の表示には下記のリンクのものをつかってます。
ないと困るぐらい便利です。
zsh で Git の作業コピーに変更があるかどうかをプロンプトに表示する方法 - mollifier delta blog

ところが、昨日あたりから Gentoo Prefix でインストール zshを使いはじめたのですが、コマンド実行後4秒ぐらい操作ができない状態に落ちいりました。

Mercurialとbazzarは基本的につかってなかったので以下の様にコメントアウトすると快適になりました。

zstyle ':vcs_info:*' enable git svn # hg bzr

第8回 広探ゲーム

第8回 広探ゲームに参加しました。

宣伝不足なのか参加者がすくなく10名程度にとどまりました。
2チームでゲームを開始しました。

もみじ饅頭の食べ比べ

およそ10種類のもみじ饅頭を購入して、食べくらべました。
結果一番おいしかったのは自分の中ではやきもち咲ちゃんというところでおちつきました。*1
赤いとうがらしを含んだもみじ饅頭があったのですが、これをたべてからいろんなもみじ饅頭を食べると甘さがひきたち、一段とおいしく召し上がることができます。気持ち程度におすすめです。

銀山町で花屋を発見。

銀山町を降りて指令になりそうなものを探していたところ、草花に囲まれた建物があり、サンタクロースの格好をすればとてもとても似合いそうなおじいさんを発見。花屋を営んでいらっしゃるようで、店を閉めて移動するところだったなのにも構わず店の中を見せていただきました。

店内の1階はたくさんの花がおいてありました。
階段にはほっぺがぷにぷにしてそうな天使の彫像のようなもの。
2階には増加やクリスマスな町(?)がありました。*2

全体的にちょっと変わったお店でした。広探ゲーム恐ろしい子

三越デパ地下の探索。

広島の名産物を探し、三越へ。
一行はとてもとても高価なオリーブオイルに夢中になったりバレンタインデーの残りものらしきものを漁ったりしました。
中国地方の名物なのがありましたけど、広島の名物はあんまりみつからないという感じでした。

ハンズの恐怖

ハンズは怖いです。いくと欲しいものがたくさんあります。ほんとに。

足つぼマッサージのコーナーで写真をとる的な指令だったのですが、その近辺にあるリラックスグッズを少し私有しました。
簡易あんま機になるクッションとか頭にかぶるリラックグッズなどで遊びました。
後者は人によって反応がおおきく違う一品だったのですが、つかれているときに使用すれば別の世界で飛べるといったものなのでぜひお試しあれといいたいです。

もう一方のチームに遭遇するというイベントもありました。

ハンズ怖イ

ヲルガン座で昼食

ヲルガン座という音楽喫茶があるのですが、そこで昼食をとりました。
本川町にあります。
ベトナム料理のお店ではないのですがフォーを食べることができます。
ランチは日替わりなのかよくはしらないですが、いつもと違う料理があったのでそれをいただきました。かき揚げの乗ったフォーでとてもおいしかったです。

ランチは大ボリュームのよくばりランチがあるのでがっつり食べたい方にもおすすめです。デザートもついてます。

2マスもどされる

2マスもどされてしまいましたが、もう一方のチームは広探ゲーム初となる広島港へ到達していました。
なんと羨しい!!

そんななか昼食後なのにもかまわずお好み焼きを食べろという指令が。
お好み焼き煎餅を購入しごまかしました。
お好み焼きをモチーフにしたおかしも集めてみたいですね。

あっという間のタイムアップ

そうこうしてるうちに時間がなくなり市役所を経由し、ゴールの十日市にむかい記念写真をとりました。

広探ゲームはGPSの付いた携帯を使用して遊ぶゲームですが、チーム単位で行うのでなくても安心して参加できます。興味がある方はぜひぜひ遊びにいきましょう。


第9回は3月20日!
http://atnd.org/events/13483

*1:もみじ饅頭じゃないやん!というつっこみは禁止です。

*2:写真はfacebookとかtwitterに垂れ流しにしてあるので興味がある方はどうぞ

AUGM in Hiroshima 2011

2月26日に Apple User Group Meeting in Hiroshima Feb 2011が開催されました。スタッフとして参加しました。

スタッフとしての主な作業は事前登録フォームだったため、当日はマイク管理をぼけっとしてました。恥ずかしながら、管理ミスをちょっとしていましたが、その話はなかったことにしましょう。


内容のほうもなんとなく覚えているのですが、なんとなく割愛します。
印象にのこったことを箇条書き

  • 大学にMac OSXいいなー。といいつつ自分のときあったな。
  • にく!
  • bluetoothのワイヤレスマイクうれてたなー。
  • Officeほしくなるマジック。
  • 馬でお願いします。

なんのこっちゃというメモになってしまいました。

じゃんけん大会で入手したものは追ってレポート使用と思います。

Gitで管理してたプロジェクトの途中からSubversionを中央リポジトリとして使う方法

前回の記事がものすごい勢いでかきかけですが、こんばんは。


もともとはひとりで開発していてGitを利用していて途中でSubversionリポジトリを用意する必要ができたのでその際に行ったことを書いておきます。
まず、Subversionリポジトリを用意します。
環境しだいだと思いますが、例を書いておきます。

svnadmin create [svnリポジトリ] --fs-type fsfs
svn mkdir [svnリポジトリ]/trunk [svnリポジトリ]/branches [svnリポジトリ]/tags -m "make directory for branches"

プロジェクトのリポジトリに移動して以下の用な作業をします。

git svn init [svnリポジトリ] -T trunk -b branches -t tags
git svn fetch   # リポジトリから取得
git checkout -b temp # masterブランチを元にtempブランチを作成して チェックアウト
git rebase trunk  # trunkを基準にリベース
git svn dcommit # svnにコミット
git branch -M master # tempブランチをもとにmasterブランチを作成(すでにmasterという名前のブランチが存在しても強制的に)
git branch -D temp # tempブランチを削除

わざわざtempブランチを作る必要はありませんが、保険でtempブランチをつくって作業しました。
ちゃんとバックアップをとって自己責任でおこないましょう。

はまりポイントとしてローカルなsubversionリポジトリを使うと上手くうごきませんでした。

Rubyに関するEmacsの設定を晒してみる

こんばんは。
ブログを自鯖でうごかそうと思っていたらずるずるの更新できない状態のだったのですが、EmacsでのRubyの設定を整理したので晒します。
できる限りに丁寧にかくつもり。
Railsに関連する設定は別記事することにしましたのですこしけずりました。

前提条件

  • gitが導入済
  • auto-installが導入済

本記事で導入するもの

gitからcloneしたものに関して

本記事の例では

~/.emacs.d/from_git

に配置していることを前提にします。

ELPAからのインストール

ELPAのインストール

以下を評価
(scratchバッファなどにコピーして閉括弧の後ろにカーソルを移動してC-xC-eなど)

(install-elisp "http://tromey.com/elpa/package-install.el")

以下のコマンドを実行でELPAを起動できます。

M-x package-list-packages

ruby開発に関連するファイルは以下のとおり。
必要なものの行で i を入力でインストール候補を選択。
x を入力するとインストールを開始します。

ruby-mode
inf-ruby
ruby-electric
ruby-compilation
rspec-mode
rvm
yari

ruby-mode

ruby用のメジャーモードです

(add-to-list 'auto-mode-alist '("Rakefile$" . ruby-mode))

Rakefileは自動ruby-modeに入らないのでその設定をしています。

inf-ruby

emacsからirbを使うためのelispです。
ruby-modeで C-cC-sで起動することができます。

ruby-elecrtric

ifなどを入力した際にendを補完してくれるelsipです。

(defun ruby-mode-hook-ruby-elecrtric ()
  (ruby-electric-mode t))
(add-hook 'ruby-mode-hook 'ruby-mode-hook-ruby-elecrtric)
flymake

個人的にはRubyを書いてる際にはflymakeは必要ではないと思いますが、
一応設定を書いておきます。

(require 'flymake)

(defun flymake-ruby-init ()
  (let* ((temp-file   (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
         (local-file  (file-relative-name
                       temp-file
                       (file-name-directory buffer-file-name))))
    (list "ruby" (list "-c" local-file))))
(push '(".+\\.rb$" flymake-ruby-init) flymake-allowed-file-name-masks)
(push '("Rakefile$" flymake-ruby-init) flymake-allowed-file-name-masks)
(push '("^\\(.*\\):\\([0-9]+\\): \\(.*\\)$" 1 2 nil 3) flymake-err-line-patterns)

(defun ruby-mode-hook-flymake-init ()
 "Don't want flymake mode for ruby regions in rhtml files and also on read only files"
  (if (and (not (null buffer-file-name))
           (file-writable-p buffer-file-name))
      (flymake-mode-on)))
(add-hook 'ruby-mode-hook 'ruby-mode-hook-flymake-init)
ruby-compilation

emacsから実行結果を取得できます。rakeのpcompleteもついてきます。
あまり使いどころはないですが、標準出力を確認することに関してはxmpfilterより使いやすいです。(C-x t)

rspec-mode

対応するrspecファイルへ移動したり、実行することができます。
mode-compile.elに依存しています。

;; (install-elisp "http://perso.tls.cena.fr/boubaker/distrib/mode-compile.el")
(autoload 'mode-compile "mode-compile"
  "Command to compile current buffer file based on the major mode" t)
;; (global-set-key "\C-cc" 'mode-compile)
(autoload 'mode-compile-kill "mode-compile"
  "Command to kill a compilation launched by `mode-compile'" t)
;; (global-set-key "\C-ck" 'mode-compile-kill)
rvm.el

emacsからrvmを利用するelispです。すごく便利です。
M-x rvm-use を使用すると利用するrubyを変更できます。

(defadvice ido-completing-read (around invaild-ido-completing-read activate)
  "ido-completing-read -> completing-read"
  (complete-read))
(rvm-use-default)

anythingを使用しているとidoの補完機能が邪魔してうまくうごいてくれないので、これをごまかすコードと
rvmでデファルトに設定しているrubyをあらかじめ変更する設定をしています。
記述しない場合はシステムのRubyが使われる場合があります。(環境変数次第だと思います)

yari

yet anther ri modeです。emacsからriをひくelispです。
速度面で難がありますがri-emacsより設定が楽です。
anything.elに対応しています。一覧取得が遅いのでキャッシュさせたいですね。

ELPAを使わないもののinstall

githubなどgitを使ってダウンロードする場所の準備

~/.emacs.d/from_git にダウンロードすると仮定します。

EMACS_FROM_GIT="~/.emacs.d/from_git"
mkdir -p $EMACS_FROM_GIT
rubydb

ruby-debug gemと連携するelisp
M-x rubydb で実行します。 ソースコードにもどり C-x SPC でブレークポイントを指定できたり C-cC-s でステップイン

(install-elisp "http://svn.ruby-lang.org/repos/ruby/trunk/misc/rubydb3x.el")
(autoload 'rubydb "rubydb3x" "Run rubydb on program FILE in buffer *gud-FILE*.
The directory containing FILE becomes the initial working directory
and source-file directory for your debugger.")
ruby-block

マッチするブロックをハイライトする
以下を評価

(install-elisp-from-emacswiki "ruby-block.el")
(require 'ruby-block)
(setq ruby-block-highlight-toggle t)
(defun ruby-mode-hook-ruby-block()
  (ruby-block-mode t))
(add-hook 'ruby-mode-hook 'ruby-mode-hook-ruby-block)
RSense
  • auto-complete

http://cx4a.org/software/auto-complete/index.ja.html
なくてもよいのですが、あるほうがよいのでいれます。
補完候補をpopup表示するelispです。

cd $EMACS_FROM_GIT
git clone git://github.com/m2ym/auto-complete.git
# release versionを利用したい場合
git checkout v1.3
(require 'auto-complete)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/dict")
(require 'auto-complete-config)
(ac-config-default)

auto-completeはかなり趣味の問題なので細かい設定は マニュアルを。
個人的にはac-source-words-in-same-mode-buffersがお気に入りです。

  • RSense

http://cx4a.org/software/rsense/index.ja.html
RSenseは単純にelisp以外のもの多いのでマニュアルに従い
~/opt にインストールしています。

mkdir ~/opt
cd ~/opt
git clone git://github.com/m2ym/rsense.git
git checkout v0.3

マニュアルがとても丁寧にかかれているのでそちらを参照すること。
http://cx4a.org/software/rsense/manual.ja.html
るりまは ~/opt/ruremaに配置していますが、そのままだと文字化けしてしまったので、
~/opt/rurema/refe_1_8_7を以下のようにしています。

#!/bin/sh
cd "`dirname "$0"`"
exec ruby -Ke -I bitclust/lib bitclust/bin/refe.rb -e utf-8 -d db-1_8_7 "$@"

変更点は -e utf8 を追加しているだけです。

(setq rsense-home (expand-file-name "~/opt/rsense/"))
(setq rsense-rurema-home "~/opt/rurema")
(add-to-list 'load-path (concat rsense-home "/etc"))
(require 'rsense)
(define-key ruby-mode-map "\C-c\C-i" 'ac-complete-rsense)
(define-key ruby-mode-map "\C-ct" 'rsense-type-help)
(define-key ruby-mode-map "\C-cj" 'rsense-jump-to-definition)

直にac-sourcesに追加してしまうと重かったのでC-cC-iに割り当ててつかっています。
キーバインドに関しては各々の趣味に合わせてください。
auto-completeの細かい設定については省いています。

ri-emacs

https://github.com/pedz/ri-emacs
emacsからriをひくのにはyariでもできますが、rcodetoolsの補完の機能がこれを使用します。機能が少々同じでもいろいろいれておくのが個人的なポリシーです。

cd $EMACS_FROM_GIT
git clone https://github.com/pedz/ri-emacs
(setq ri-ruby-script
      (expand-file-name "~/.emacs.d/from_git/ri-emacs/ri-emacs.rb"))
(autoload 'ri "ri-ruby.el" "Execute `ri'." t)
rcodetools

xmpfilterが一番有名ですが、Rubyのコードを扱うツール群です。
rct-completeなど補完機能もあります。

gem install rcodetools

elispファイルはgemの中についてくるのでload-pathがとおったところにおく必要があります。gem env などでインストール先を探してload-pathをとおしてるところにコピーしましょう。たどるのがめんどくさい場合は gem unpack rcodetools するとカレントディレクトリに展開できます。

(require 'rcodetools)
(require 'anything-rcodetools)
(define-key ruby-mode-map "\C-cl" 'rct-complete-symbol)
(define-key ruby-mode-map "\C-cx" 'xmpfilter)

fastriを利用したほうがよいのですが、1.9には対応してなかったように思うので設定していません。

おまけ

個人的には以下のような

# -*- coding: utf-8 -*-

エンコーディングの指定が自動で挿入されると困ることがあるので、これは停止させています。変りに C-ceで 挿入できるようにしています。

(defun ruby-mode-hook-init ()
  "encodingを自動挿入しないようにする"
  (remove-hook 'before-save-hook 'ruby-mode-set-encoding))
(add-hook 'ruby-mode-hook 'ruby-mode-init)

(defun my-ruby-mode-set-encoding ()
  "set-encoding ruby-mode"
  (interactive)
  (ruby-mode-set-encoding))
(define-key ruby-mode-map "\C-ce" 'my-ruby-mode-set-encoding)


結局あまり丁寧にかけてないように思いますが、参考になれば。