僕の Mac の US キーボード設定 3 つ
リクエストに答えて、僕のMacBook Airのキーボード設定を公開します。
US キーボードを使う理由
僕は US キーボードを利用しています。理由は、
- US キーボードだと 小指で Enter キーを押すので、入力がスムーズ(JIS キーボードだと薬指で Enter キーを押すことになる)
というもので、他に、
- Delete キー(Back Space)が押しやすい
- キートップの文字がごちゃごちゃしていない
- '(シングルクォート)が指に近くて打ちやすい
- @(アットマーク)が Shift + 2 で、JISキーボードよりも指が憶えていて打ちやすい
など、いくつかあります。
というのはけっこうマイナスですが。後述するように Mac ではこれからも開放されるので、そもそも Windows ノートで US キーボードを入手するのはけっこう大変です。
JISキーボードのように「かな」「英数」を切り替える
Mac の JIS キーボード には Windows キーボードにはない特徴があります。Space キーの隣に「かな」「英数」の切り換えキーがあるのです。親指は、一番力が強いはずなので、ちゃんと使ってタイピングしたいですよね。ところが、 US キーボードにはこのキーがありません。そこで、左右の Cmd キーに「かな」「英数」を割り当てましょう。
使うツールは、 KeyRemap4MacBook です。ダウンロードは以下から。
http://pqrs.org/macosx/keyremap4macbook/index.html.ja
インストールして再起動すると、「システム環境設定」の「その他」に現れます。
「For Japanese」 の項目を探し、「左右のコマンドキーを「英数/かな」としても使う」の項目から「コマンドキーの動作を優先モード」をチェックします。
これで、左右の Cmd キーを単独で押したときに「英数/かな」として使えるようになりました。Cmd + C や Cmd + V といった通常のショートカットも使えます。
なお、僕の環境では、かな入力中に Cmd を連打すると英数に変換されたものが繰り返し出力されます。
Cmd + W と間違って Cmd + Q を押してしまってアプリが終了しないように、Cmd + Q は長押しで有効になるようにする
ブラウザのタブを閉じようとして、 Cmd + W を押したつもりが、 W の隣の Q を押してしまって Cmd + Q でブラウザが終了してしまった。おまけに書きかけのテキストが消失してしまったという悲しい記憶はないでしょうか?そんな悲しみを避けることができます。そう、KeyRemap4MacBook ならね。
「Custom Shortcuts」から「Hold Command + Q to Quit Application」にチェックを入れます。
これで、 Cmd + Q をほんの少し長めに押さないと動作しないようになります。
CapsLock に Esc を割り当てる(主にVim用)
これは、正直世界が変わりました。 USキーボードだと、Shift と組み合わせなくても単独で CapsLock キーがトグルで動作してしまいます。僕はよく Vim で j キーを連打して下にカーソル移動したつもりが、 CapsLockがオンになっていて J キーで大量に行連結してしまうということがありました。大文字を入力するときは Shift キーを使うからいっそのこと CapsLock キーを殺してしまおうかと思ったのですが、 Emacs ユーザが Ctrl キーと入れ替えるくらいなので、完全に殺してしまうのはもったいないです。そこで、 CapsLock キーに Esc キーを割り当てることを思いつきました。
調べると、 KeyRemap4MacBook の設定例に出てくるくらいなので、それほど珍しい方法でもないようです。似たような考えをする人はいるもんです。ただ、この設定をするには、「 PCKeyboardHack を使え」と書いてあります。なんと親切な。
というわけで、PCKeyboardHack を入れます。以下でダウンロードできます。KeyRemap4MacBook と同じ方が開発されているようです。ありがとうございます。
http://pqrs.org/macosx/keyremap4macbook/extra.html.ja
これもインストール後「システム環境設定」の「その他」から設定します。
「 CapsLock 」にチェックを入れて、 keycode に Esc の値である 「 53 」を入力します。
ちなみに、 Vim ユーザには、 Esc キーを使わずに、 Ctrl + [ を使う人も結構いるようです。(viだとこの動作をしないような?)Vim と結婚したという噂の方は Jキー連打で Esc になる設定をしているそうです。
お願い
もっといい方法がある、自分はこうしている、といったことをコメントやはてブでぜひ、教えてください。
NHKスペシャル 「コンピューター革命 最強×最速の頭脳誕生」を見た
録画したものを見て、面白かったのでちょっとしたメモを。
ググったらまとめがあった。余談だけど、このサービスにすごい可能性を感じる。
http://6mj.tv/episode_D7672DAD03FA3465A2C35D4C3E1373B3.html
- 駅名にもなっているスーパーコンピュータ「京」の話。
- 作者: 姫野龍太郎
- 出版社/メーカー: 講談社
- 発売日: 2012/05/29
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 57回
- この商品を含むブログ (4件) を見る
- IBMのワトソンの話。
IBM 奇跡の“ワトソン”プロジェクト: 人工知能はクイズ王の夢をみる
- 作者: スティーヴン・ベイカー,金山博・武田浩一(日本IBM東京基礎研究所),土屋 政雄
- 出版社/メーカー: 早川書房
- 発売日: 2011/08/25
- メディア: 単行本
- 購入: 2人 クリック: 55回
- この商品を含むブログ (27件) を見る
- 東大入試コンピュータの話。
新井紀子教授「人間がどういうことをしてくか、が新たにデザインされる」
- 作者: 新井紀子
- 出版社/メーカー: 日本経済新聞出版社
- 発売日: 2010/12/22
- メディア: 単行本
- 購入: 26人 クリック: 636回
- この商品を含むブログ (62件) を見る
日本語入力を支える技術 ?変わり続けるコンピュータと言葉の世界 (WEB+DB PRESS plus)
- 作者: 徳永拓之
- 出版社/メーカー: 技術評論社
- 発売日: 2012/02/08
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 322回
- この商品を含むブログ (36件) を見る
- DNAのシミュレーション、医療、ビッグデータ、金融の話。
DNAの塩基配列からタンパク質の3次元モデルをシミュレーションする話は大学の研究室で経験していたので、親近感があった。
自動売買で株価が乱降下した事件は知っていたが、番組をみて、自分が考えるよりもおそろしく速いタイミングで売買が行われていることを知った。あの速さで処理ができるとは。
NY株乱高下、高速取引も一因か コンピューター売買
http://blog.livedoor.jp/ss2286234570/archives/65578667.html
ゴードン・ベルについては、以前、次のDVDで見た。
NHKスペシャル 電子立国 日本の自叙伝 DVD- BOX 全6枚セット
- 出版社/メーカー: NHKエンタープライズ
- 発売日: 2009/03/27
- メディア: DVD
- 購入: 5人 クリック: 67回
- この商品を含むブログ (20件) を見る
- 出版社/メーカー: ナウオンメディア
- 発売日: 2004/12/24
- メディア: DVD
- 購入: 4人 クリック: 44回
- この商品を含むブログ (4件) を見る
ライフログのすすめ―人生の「すべて」をデジタルに記録する! (ハヤカワ新書juice)
- 作者: ゴードンベル,ジムゲメル,Gordon Bell,Jim Gemmell,飯泉恵美子
- 出版社/メーカー: 早川書房
- 発売日: 2010/01/01
- メディア: 単行本
- 購入: 16人 クリック: 358回
- この商品を含むブログ (93件) を見る
Rails で十分に活用されていなくてもったいない ActiveRecord::Relation のメソッド TOP 10
2013年12月2日更新: 参照されることが多いので Rails 4 の情報を訳注として追記しました。また、Rails 4 に関する情報は、 WEB+DB PRESS Vol.73 が非常に参考になるので、一読をおすすめします。
この文章は Mitch Crowe 氏のブログより 2012年4月14日の記事を翻訳したものです。
The 10 Most Underused ActiveRecord::Relation Methods
http://blog.mitchcrowe.com/blog/2012/04/14/10-most-underused-activerecord-relation-methods/
昨日は ActiveRecord::Relation のコードに膝まで浸かって、使われているのをこれまで全然見たことがない面白いナゲットを思い出させてくれた。この記事で、十分に活用されていない Relation クラスのメソッドのトップ10をリストにしたので、楽しんでもらいたい。
10位 ブロック付きの first_or_create
first_or_create はとてもなじみ深い。
Book.where(:title => 'Tale of Two Cities').first_or_create
そして、名前通りのことをやってくれる。だが、特定の属性を持つレコードを find するとか、それらの属性を持つレコードを create して、さらに追加で属性を設定したくなることが頻繁にあると思う。これを簡潔にやるには first_or_create にブロックを与えればいい。
Book.where(:title => 'Tale of Two Cities').first_or_create do |book| book.author = 'Charles Dickens' book.published_year = 1859 end
9位 first_or_initialize
このレコードをまだ保存したくない場合は、 first_or_initialize が使える。
Book.where(:title => 'Tale of Two Cities').first_or_initialize
8位 scoped
あるクラスの持つすべてのレコードを表した ActiveRecord::Relation がほしいことがある。そんなときは scoped メソッドを使えば簡単に生成できる。(訳注: Rails 4 では、 scoped が非推奨になり、 all が Array から ActiveRecord::Relation のオブジェクトを返すようになりました。Rails 4 では scoped から all に変更してください。)
def search(query) if query.blank? scoped else q = "%#{query}%" where("title like ? or author like ?", q, q) end end
7位 none ( Rails 4 のみ)
同じように、オブジェクトを含まない ActiveRecord::Relation がほしいことがある。空の Array を返すことが、大抵それほどよくないのは、 API の利用者が Relation オブジェクトを期待しているからだ。代わりに none を使えばいい。
def filter(filter_name) case filter_name when :all scoped when :published where(:published => true) when :unpublished where(:published => false) else none end end
注意:最先端を行く人は今すぐ none を使いたくなっていることだと思う。これは、 Rails 3 ではなく、 Rails 4 で利用できる。だが、Rails 4 を待つまでの間も簡単に書くことができる。 この Stack Overflow のスレッドをチェックしてほしい。
6位 find_each
数千レコードをイレテートさせたくなっ場合、each を使いたくはないだろう。
each は1 つのクエリを実行して、全レコードを取得し、それらすべてをメモリ上にインスタンス化してしまう。メモリを十分に確保しているならいい。確保してなければ、これは Rails アプリをフリーズさせる素敵な方法になる。find_each は、そうではなく、レコードをバッチ処理で find して(デフォルトは1000件)、一度に yield する。その結果、同時に全レコード分のメモリを確保する必要がなくなる。
find_each は yield されるレコードの順序を指定できないので注意だ。指定してもただ単に無視される。
Book.where(:published => true).find_each do |book| puts "Do something with #{book.title} here!" end
5位 to_sql と explain
ActiveRecord は素晴らしいが、思った通りのクエリをいつも生成してくれるとは限らない。コンソールに飛んで、組み立てた Relation で この 2 つの命令を実行してみよう。賢いクエリにマップされているか確認して、そうなってなかったら愛情込めて作ったインデックスを使うようにしよう。
Library.joins(:book).to_sql # => SQL query for you database. Libray.joins(:book).explain # => Database explain for the query.
4位 find_by(Rails 4 のみ)
Rails で書いたコードは次のような行で散らかったものになりやすい。
Book.where(:title => 'Three Day Road', :author => 'Joseph Boyden').first
代わりに、 find_by というショートカットメソッドが使える。
Book.find_by(:title => 'Three Day Road', :author => 'Joseph Boyden')
これは上と同じものが実行される。
注意:最先端を行く人は今すぐ find_by を使いたくなっていることだと思う。これは Rails 3 ではなく、 Rails 4 で利用できる。
3位 scoping
scope メソッドを特定の Relation として使える。Rails のドキュメントにある次の例を検討してみよう。
Comment.where(:post_id => 1).scoping do Comment.first # SELECT * FROM comments WHERE post_id = 1 end
これはまったくもって使いやすい。
2位 pluck
特定のレコードのカラムで配列にしたいことがないだろうか?私はこういうにを本当にたくさん見てきた。
published_book_titles = Book.published.select(:title).map(&:title)
さらに悪い場合だとこうだ。
published_book_titles = Book.published.map(&:title)
代わりに pluck を使おう。
published_book_titles = Book.published.pluck(:title)
(訳注: Rails 3 では、pluck の引数に指定できるシンボルは 1 つでしたが、 Rails 4 ではシンボルの配列を指定することで、属性を複数指定することができます。select で複数の属性を指定した場合と違い、2次元配列を返します。3 系でも比較的最近のバージョンで使えるはずです。)
1位 merge
僕はこの宝石なしには生きられない。しかし奇妙なことに、これはソース中にドキュメントされていないし、今まで見たガイドでも言及がない。これを使うと、結合( JOIN )ができて、結合されたモデルに対して名前付きスコープでフィルタできる。(訳注: 私見ですが、4.0.0 では merge が意図と違う動作をしないかよく確認した方がよいと思います。*1 いくつか修正が入っている4.0.1 以降でも試してみてください。)
class Account < ActiveRecord::Base # ... # Returns all the accounts that have unread messages. def self.with_unread_messages joins(:messages).merge( Message.unread ) end end
- 作者: 設樂洋爾,白土慧,はまちや2,大和田純,松田明,後藤大輔,ひろせまさあき,小林篤,近藤宇智朗,まかまか般若波羅蜜,Mr. O,川添貴生,重国和宏,柳澤建太郎,奥野幹也,佐藤鉄平,後藤秀宣,mala,中島聡,堤智代,森田創,A-Listers,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2013/02/23
- メディア: 大型本
- 購入: 12人 クリック: 131回
- この商品を含むブログ (7件) を見る
シェルスクリプトで $0 使うときの注意
これも同じメモに書いてあった小ネタ。
/Users/username/test.sh というファイル名のスクリプト中に
echo $0
とあった場合、$0 は起動時のパスになるので、
% ./test.sh ./test.sh % % /Users/username/test.sh /Users/username/test.sh % % ~/test.sh /Users/username/test.sh %
といった具合で、同じ環境でも起動の仕方で出力が変わる。$0 の値からパスを解析してゴニュゴニョしようとするとバグになるので注意。
SQL で 300 個の空白を出力する
小ネタです。昔々のメモが見つかったので、紙を捨てる前にこちらに転記しておく。間違っているかもしれない。
select LPAD(' ', 300, ' ') from dual;
select CAST(' ' AS CHAR(300)) from dual;
こちらはCHAR型に変換しているので、2000バイトまで。
みなとRuby会議01 に参加した #minatork01
ちゃんと書こうとすると出せなくなるので、細かいこといろいろ書いたけど消した。感想としては、ずいぶん前からスタッフが準備している様子を Twitter のタイムラインで見ていたので、上手くいってよかったなと思う。自分は当日スタッフぐらいはやるつもりだったけど、多くのスタッフがいたので、その必要もなく。あっという間だったという声が聞かれたのは、みんなが楽しんだということではないかなと。Yokohama.rb に参加したことがないという人が結構挙手していたけど、司会をはじめとした、Yokohama.rb の主要メンバーの中には横浜から遠いところに住んでいる人が結構いるのはもっと知られた方がいいんじゃないかな。スタッフと参加者のみなさん、どうもありがとうございました。
rbenv で新しいバージョンの ruby を入れたときの備忘録
2014年1月8日追記:
検索で辿り着いた方へ
以下の情報は古くなっているので別の情報をお探しください。
追記ここまで。
Ruby のバージョン を 1.9.3-p125 から 1.9.3-p194 に上げようとしたときにどうやるか理解していなかったので、備忘録代わりにメモ。OS は Lion 。
% rbenv install 1.9.3-p194 ruby-build: definition not found: 1.9.3-p194
と出たので、 rbenv install でインストール可能なバージョンを確認する。
% rbenv install usage: rbenv install VERSION rbenv install /path/to/definition Available versions: 1.8.6-p383 1.8.6-p420 ... 1.9.3-p0 1.9.3-p125 1.9.3-preview1 1.9.3-rc1 2.0.0-dev jruby-1.6.3 ...
当然 1.9.3-p194 はない。rbenv rehash をやってみたけど、さすがにネットワークから取得してくれたりはしなかった。ruby-build の定義情報はどうやって更新されるのかなと思ったのだが、
ということらしい。
自分の ruby-build のバージョンは、2012年2月16日のものだった。
% ruby-build ruby-build 20120216 usage: ruby-build [-v|--verbose] definition prefix ruby-build --definitions
brew install --HEAD ruby-build で ruby-build を入れ直す。 事前準備として brew unlink が必要。
% brew install --HEAD ruby-build Error: ruby-build-20120216 already installed To install this version, first `brew unlink ruby-build' % brew unlink ruby-build Unlinking /usr/local/Cellar/ruby-build/20120216... 3 links removed % brew install --HEAD ruby-build ==> Cloning https://github.com/sstephenson/ruby-build.git Cloning into '/Library/Caches/Homebrew/ruby-build--git'... remote: Counting objects: 55, done. remote: Compressing objects: 100% (46/46), done. remote: Total 55 (delta 27), reused 29 (delta 8) Unpacking objects: 100% (55/55), done. ==> ./install.sh /usr/local/Cellar/ruby-build/HEAD: 45 files, 196K, built in 6 seconds
というわけで 1.9.3-p194 のインストール。
% rbenv install 1.9.3-p194 Downloading http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz... Installing yaml-0.1.4... Installed yaml-0.1.4 to /Users/username/.rbenv/versions/1.9.3-p194 Downloading http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz... Installing ruby-1.9.3-p194... Installed ruby-1.9.3-p194 to /Users/username/.rbenv/versions/1.9.3-p194 % rbenv global 1.9.3-p194
ちなみに、rbenv install した直後は rbenv rehash は不要。bundle コマンドを叩くと ruby のバージョンが違うと怒られたので、Bundler も入れ直し(これでは ruby のバージョンを切り替えられるメリットが少ない気が)。Bundler がどうやって ruby のバージョンを参照しているかすぐにはわからなかったのですが、知っていたらぜひ教えてください。
% sudo gem install bundler