Karabiner というMacのキーリマップアプリが便利だった件

メモしたいので久々の日記更新むんむん

あんまり使いこなしてないけど個人的に開発するときはVimをよく使っています。慣れるとこのhjklの動きが楽なので普通のCotEditorなどでもVimの動作をしたくてどうにかならぬものかと思いつつ長年放置していたのですが、偶然発見。

Karabiner - OS X用のソフトウェア

これね。すばらしいほんと。
まだ慣れてないけど、はてなブログを更新するときもVim操作で書けるなんて素晴らしすぎるっ。

これで僕が何を設定しているかメモっておきます。

ちなみにMacBookAirはUS配列を使ってます。

Change Key

検索窓に該当の文字を入れればソートしてくれるはず。ということで画像はないよっ。

Ubiquitous Vim Bindings

Esc toggles Normal Mode
Holding Esc sends raw Esc

これをチェックしておくとVimを使っているかのごとくEscを押すとVimモードになります。Shift+$で行末にいったり、c->Shift+$で行末まで削除とかまで出来ちゃいます。

For Japanese

Command_L to Command_L
(+ When you type Command_L only, send KANA/EISUU(toggle))

これをチェックしておくと左コマンドを単体で押すだけで英数=>かな=>英数と変更することができます。なんて便利な!(まだ使い慣れてないけど

Custom Shortcuts

これは後で書くprofilesのショートカットを有効にしています

MenuBar

ここでprofiles的な設定ができます。
ショートカットは上にも書きましたが、fn + 1 とか fn + 2 とかです。

ちなみに

Macのデフォルトのキーボード設定は以下のようになっています。
これたぶん特殊っぽい。caps lockって使わないんだけどみんな使うのかな?まあいいや。

f:id:kamip:20141126010841p:plain

HHKpro2が欲しくて

そう。もともと happy hacking keyboard professional2 type-s のUS配列が欲しくて、カーソルキーないんだなー使いにくそうだなーとか思ってググったりしていたらこのソフトを偶然発見しました。

とりあえずこれで文字入力には困らなそうなので一歩前進。でもターミナルでカーソルキーとか使う場面って必ずある気がしているので結局ある程度 fn + 何か でカーソルキー動かすのを覚えないといけないんだなーと思った今日の夜。

あーねむい。

Mac に hubot をいれてみた

macへのセットアップは以下で


Macでhubotを試す最速手順 - Qiita

hipchatとの連携は以下で


Hubotの導入とHipChat Adapter設定方法 - Devlog

うまく起動できると @hubot が green になる

export HUBOT_HIPCHAT_TOKEN="GROUP ADMIN の API Token"
export HUBOT_HIPCHAT_JID="HUBOT の JID"
export HUBOT_HIPCHAT_PASSWORD="HUBOT のパスワード"
export HUBOT_HIPCHAT_ROOMS="hubot roomとか適当に"
export HUBOT_LOG_LEVEL="debug"

@hubot pug me
とか
@hubot animate me kitty

はい

xcode でエラー nib must contain exactly one top level object which must be a UITableViewCell instance

invalid nib registered for identifier (CELLNAME) - nib must contain exactly one top level object which must be a UITableViewCell instance

http://stackoverflow.com/questions/20442311/invalid-nib-registered-for-identifier-cellname-nib-must-contain-exactly-one

何をやろうとしたかというと .xib ファイルに複数の UITableViewCell を作ってみました
きっかけは .xib ファイル1枚で複数のViewを定義できたらファイル数減るし便利そうだなーと思ったのため

stackoverflow の回答では single table view で作れば云々書いてあるけど、なんかそれはちょっと違うのでとりあえず複数ファイルに分けることにしました

opsworks で deploy できなくなったYo

えーやだopsworksでエラーやめてー用意してもらったインフラだしわからなそーwえーなにこれ詰んだかもーYo!

と思ったけど、該当のエラーを一生懸命ググったら、

================================================================================
Error executing action `create_if_missing` on resource 'remote_file[/tmp/opsworks-ruby19-1.9.3-p547-1.x86_64.rpm]'
================================================================================
 
 
Net::HTTPServerException
------------------------
403 "Forbidden"

aws forum に(おそらく)まったく同じ状況の人発見

https://forums.aws.amazon.com/thread.jspa?threadID=154913&tstart=175

custom json に以下を追加したらちゃんとデプロイ出来るようになった

{
  "ruby": {
    "patch": "p545"
  }
}

aws関連のエラーはforumで検索するとよさそう
この対応を使う人はforumの内容をよく読んでから使ってください

検索フォームを作るにあたってransackを使ったら非常に便利でしたというお話

いやー最近まんぼうよく死んでますね。

f:id:kamip:20140619001547j:plain

ということで、お仕事で検索機能を作りたくて twitter につぶやいたら @patorash さんに ransack という gem を教えてもらって素直に使ってみました。

使い方は以下でわかるのでわからなくなったら見るといいです。説明とか出来ないので見るといいですうん。

Rails - Ransackのススメ - Qiita
Basic Searching · activerecord-hackery/ransack Wiki · GitHub

ちょっとタグをカスタマイズしたいときは radio_button_tag だったら以下のように ransack が動作する key(以下の場合は params['q']['hoge_eq']) で post すればちゃんと動きます。controller でごにょごにょするのはめんどくさいのでこんな感じがいいかなーと。

radio_button_tag_c params, :hoge_eq, '1', true
def radio_button_tag_c(params, name, value, default_checked=false)
  check_flag = params.key?('q') && params['q'].key?(name) && params['q'][name] == value ? true : false
  check_flag = true if default_checked && params.key?('q') == false
  radio_button_tag "q[#{name}]", value, check_flag
end

そもそも radio_button_tag どうやって書くねんって調べまくったメモでした。

ソースが長いのでもっと短くならないですかねー (((((((((((っ・ω・)っ ブーン

いやーそれにしても便利だなー。ほんと捗る。オレオレ糞コードかくところでした。ぱとさんありがとうございました!

vim を使う時 :e で開く癖があった僕が unite.vim を頑張って使うためにやった1つのこと

nnoremap <silent> :e :<C-u>UniteWithBufferDir -buffer-name=files file<CR>

とりあえず実行したあと RAILS_ROOT からはじまるようにしたいけど出来るのかな
毎回controllerとか ctrl + w で消すのめんどくさい

<追記1>

help調べたらあった

:help unite-source-file

nnoremap <silent> :e :<C-u>UniteWithCurrentDir -buffer-name=files file<CR>

縛りプレイ楽しい

<追記2>

まずい :e# 使いたいのに使えない

<追記3>

nnoremap <silent> :E :e#<CR>

とりあえずこんな感じにしておく

でもunite.vimやっぱりいいね!

ruby で module を override したくて探したメモ

そもそも、使おうとした gem が module になってて、その中のクラスメソッドを override したくてぐぐったメモ。

やりたいことは簡単。

module Hoge のクラスメソッド (method1) を override し、クラスメソッドmethod2 を呼び出した時に override 後の内容が表示されればOK.

module Hoge
  def self.method1
    puts 'Hoge.method1'
  end

  def self.method2
    self.method1
  end
end

Hoge.method2 #=> Hoge.method1

以下2つ、どちらも再定義する形だけどこれでいいのかなー?

def Hoge.method1
  puts 'Override! Hoge.method1'
end

Hoge.method2 #=> Override! Hoge.method1
module Hoge
  def self.method1
    puts 'Override! Hoge.method1'
  end
end

Hoge.method2 #=> Override! Hoge.method1

でもこれだと当ファイルを読み込んだら、どこで Hoge.method1 を呼び出しても override したクラスメソッドが実行されるようだから あとあと地雷にならないか心配だ。もっとスマートに書けないのか。

railsやったりobjective-cやったりちょっとよくわかんない今日この頃。


あんまり関係ないけど以下の mix-in の説明すごく分かりやすい。

Rubyのmoduleをmix-inする際のincludeとextendの違いをシンプルな例で理解する - memo.yomukaku.net