Mac、Spotlightの「デベロッパ」メニューを無効化する

Xcode入れるとSpotlightに勝手に「デベロッパ」という項目が追加され、システム環境設定から無効化できない!!!滅びろApple!!!!!!!

環境

やり方

ここ参照。 http://hints.macworld.com/article.php?story=20110805192212447

open ~/Library/Preferences/com.apple.spotlight.plist

して、Dictionaryの項目を追加。name: SOURCE, enabled: NOに設定して保存。後はログインしなおせば消えます。

注意事項

plistを編集して消しても、システム環境設定のSpotlightの項目を開くとデベロッパメニューがふたたび有効化されます。滅びろApple

Ruby, C++のBoost::Lambdaみたいなスタイルでブロック書けるgemつくった

boost_lambda_style_proc

$ gem install boost_lambda_style_proc

名前が長い……
最初はboost_style_lambdaにしようと思ったけどLambdaじゃなくてProcを生成するためのライブラリなので誠実ではない!!!となった結果こうなった(長い)

Boost::LambdaっていうのはC++のBoostという普通のテクニックを駆使したライブラリの一部で、

// 5で割り切れて30より大きい要素を探す。
vector<int>::iterator it = find_if( vec.begin(), vec.end(), _1%5==0 && _1>30 );
http://www.kmonos.net/alang/boost/classes/lambda.html

という書き方ができる。

Rubyで書くなら

[10, 23, 45, 76, 98].select {|x| x%5 ==  0 && x>30}

なんだけど、ここでxってなんなんだよという問題が生じる。私はある要素について注目して、それについての条件を記述したいのに、ブロック引数定義すなわち「ある要素をxと置く」という余計な記述を強要されて、違う、全くそこは本質ではない、ソレで通じるべきなのだ本来は、だがしかし余計なxという名前を明示的に宣言することを余儀なくされ、後続する条件式では意味のないエッックスが、うっ。

そこでboost_lambda_style_proc(長い)を使うと、

require 'boost_lambda_style_proc'
 [10, 23, 45, 76, 98].select &((_1%5 == 0) & (_1>30))

アッ、ハイ。カッコが増えましたね。それはともかく、思考を乱す余計な引数定義がなくなったんですよ。スゴクないですか? 今注目しているものは_1です。「_1を今注目しているものとする」という定義は必要ない。スゴイですね? &&が&になりましたけどね。どちらかといえばRubyの側に問題があると考えます、そのへんの演算子定義制限については。

例が複雑すぎた。

[1, 2, 3].map &(_1 * 2)

これくらいの例ならボロが出なかったですね……(おわり)

Ruby、Enumerableから重み付きでランダムに要素を取り出すgemつくった

類似gemとしては

というのがあったけど、当方のユースケースには合わなかったので自作した。

weighted_sample

$ gem install weighted_sample

で入ります。

require 'weighted_sample'

[1, 9, 90].weighted_sample_by {|x| x}
# => 1(1%), 9(9%), 90(90%)

任意のEnumerableで使えるけど、内部的に2回eachしてるのでご留意ください。
重みに使えるのは、今のところ整数のみです(要望があればFloatにも対応するんじゃないかな or プルリクせよ)。

terminal+bash+screen、ターミナルがバックグラウンドだった場合、コマンド終了時に通知してほしい

1. PS1に

\[\033[\a\]

を追加(プロンプト表示時にbellする)

2. screenの設定でaudible bellを有効に

3. terminalの設定でaudible bellを有効に

で、バックグラウンドでコマンド終了→PS1が表示されてベルが鳴る→dockで通知されるということになる。なぜか音は出ない(なぜか……)のでうるさくないです。

Ruby+XMPP4RでJabberのグループチャットに投稿する

グループチャット使うにはJabber::MUC::MUCClientをつかうひつようがある。

# 環境: Ruby 1.9.2+xmpp4r 0.5

require 'xmpp4r'
require 'xmpp4r/muc'

# サーバにつなぐ
client = Jabber::Client.new(Jabber::JID.new("todesking@im.example.com")
client.connect
client.auth("password")

# チャットルームに入る
muc = Jabber::MUC::MUCClient.new(client)
muc.join("groupchat@conference.im.example.com")

# メッセージ送る
message = Jabber::Message.new("groupchat@conference.im.example.com", "こんにちは〜〜〜")
muc.send(message)

# 後始末
client.close