• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

ブロック引数を1つとるブロックつき関数を呼び出すときに

ruby>>
create_table do |t|
t.string :foo
end
<<--

ブロック仮引数を省略した場合、暗黙のうちにブロック引数に対する instance_eval を挟むようにすると

ruby>>
create_table do |t|
t.instance_eval do
string :foo
end
end
<<--

色々と綺麗にかけるようになる気がします。

ruby>>
create_table do
string :foo
end
<<--

ついでに、省略されたブロック引数に $ とかでアクセスできると

ruby>>
[1,2,3].map{to_s}.select{$>2}
<<--

みたいな事ができて楽しいかもです。
ついでに case の値もこんなふうに

ruby>>
case price # <= この値を $ で参照したい
when $ < 5; #...
when $ < 10; #...
end
<<--

参照できるといいな。

posted by genki genki on Wed 31 Aug 2011 at 07:36 with 0 comments

前回(uninitialized constant MysqlCompat::MysqlResの対処法参照)はSnow Leopard でしたが、
今回はLionです。
OSのバージョンが変わるたびに問題が起こる気がします。
今回は、以下で回避できるようです。

pre>>
% install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /path/to/rubygems/gems/mysql-2.8.1/lib/mysql_api.bundle
<<--

See Also

posted by genki genki on Wed 31 Aug 2011 at 03:46 with 0 comments

EC2のSpotインスタンスの価格変動がどんなものか把握するのが面倒だったので、直近の相場をグラフで表示するwebサービスを作りました。

ss

相場はリージョン、OS毎に違うので、適当な組み合わせを選択してみてください。
データはだいたい5分ごとに更新されています。

実は SpotHistory.com という良さそうな既存サービスがあったのですが、
なぜか1月ぐらいでデータ更新が止まっていて残念な感じだったので、
適当に作ったほうが早そうだということで製作しました。

posted by genki genki on Fri 26 Aug 2011 at 07:32 with 0 comments

ブラウザのタブを閉じるときは基本的に中ボタンクリックなので、閉じるボタンの存在は無駄なだけでなく、うっかり押してしまって必要なタブを閉じてしまうこともあって邪魔でした。

そんな場合には、about:config で以下のように値を設定すると、閉じるボタンを非表示にすることができます。

pre>>
browser.tabs.closeButtons = 2
<<--

posted by genki genki on Fri 19 Aug 2011 at 09:21 with 0 comments

普段はPostgresqlのサイトで配布されているMac用のインストーラを使っているのですが、どうやらLionはまだサポートされていないようです。

ということで、homebrewを使ってインストールすることにしました。

Homebrewをインストール

以下を実行すればok

pre>>
/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"
<<--

あとは

pre>>
brew install postgresql
<<--

でインストールし、以下でdbを初期化します。

pre>>
initdb /usr/local/var/postgres
<<--

最後に、自動起動の設定を行います。

pre>>
cp /usr/local/Cellar/postgresql/9.0.4/org.postgresql.postgres.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/org.postgresql.postgres.plist
<<--

brewでインストールした場合、postgresユーザは作成されないようです。
$USERがスーパユーザとして作成されます。

posted by genki genki on Thu 18 Aug 2011 at 17:56 with 0 comments

以下のようにメソッド引数のデフォルト値を設定すれば、
呼び出す時に省略することができます。

ruby>>
def foo(a = nil)
a
end

foo #=> nil
foo("test") => "test"
<<--

では、引数が省略されたかどうか判別するにはどうすればいいでしょうか。
以下のようにすれば判別が可能です。

ruby>>
def foo(a = (a_default = true) && nil)
[a,a_default]
end

foo #=> [nil, true]
foo("test") #=> ["test", nil]
<<--

Rubyの引数のデフォルト値は、式を記述でき、省略された場合だけ評価されるのでそれを利用できます。

posted by genki genki on Tue 9 Aug 2011 at 04:47 with 0 comments

開発環境でしか使っていないので我慢してきたのですが、
どうも MacOS 10.6.8 における Socket.getaddrinfo の挙動が不安定なようです。
以下のように、タイミングによって動作したりしなかったりします。

pre>>
ruby-1.8.7-p302 :012 > Socket.getaddrinfo("localhost", nil)
SocketError: getaddrinfo: nodename nor servname provided, or not known
from (irb):12:in `getaddrinfo'
from (irb):12
ruby-1.8.7-p302 :013 > Socket.getaddrinfo("localhost", nil)
=> [["AF_INET", 0, "en.localhost", "127.0.0.1", 2, 2, 17], ["AF_INET", 0, "en.localhost", "127.0.0.1", 2, 1, 6], ["AF_INET6", 0, "localhost", "::1", 30, 2, 17], ["AF_INET6", 0, "localhost", "::1", 30, 1, 6]]
<<--

MacOS環境でのSocket.getaddrinfoは鬼門なようで、
これまでにも様々な問題が報告されているようですね。

今回は全く同じ条件下で挙動が変わるというものなので、なかなか手ごわい感じです。

posted by genki genki on Sun 7 Aug 2011 at 14:17 with 0 comments

RubyのStructは便利なのでよく使いますが、いくつか欠点があります。

  • 無名Structを継承すると、スクリプトのreload時にsuperclass mismatchエラーが出る
  • 同一構造のStructを定義しようとしても別なStructオブジェクトが返ってくる
  • 名前付きStructの場合、Struct::StructName のような名前空間に定義されるので衝突が心配

これらの問題を回避するために、以下のように Struct.[] を定義することにしました。

ruby>>
def Struct.
name = members.map(&:to_s).sort.map(&:upcase).join('__')
const_defined?(name) ? const_get(name) : new(name, *members)
end
<<--

これを使って

ruby>>
class Dog < Struct[:name, :age, :height, :weight]
end
<<--

のように利用すれば、既に定義済みの場合には定義済みのStructを参照し、そうでない場合には新たにStructを定義するようになるので、上述の問題は解決できます。

なにより、

ruby>>
Struct.new(:name, :age, :height, :weight)
<<--

と書くよりスッキリします。

posted by genki genki on Sun 7 Aug 2011 at 00:24 with 0 comments

Rubyを使い初めてから結構たちますが、まだ新しい発見というのはあるものですね。

class_evalでブロックを渡す時に、引数も渡したいと思っていたのですが、
class_execはちょうどその目的に使えるようです。

ruby>>
FOO = lambda{|bar| puts bar}

class Foo
class_exec("Foo", &FOO)
end #=> Foo
<<--

posted by genki genki on Sat 6 Aug 2011 at 19:23 with 1 comment

kyotocabinet用のRubygemがbuildできない状態になっていたので、
配布元のkyotocabinet-rubyからgemを書き起こしました。

Gemfile

ruby>>
gem 'kyotocabinet-ruby', '~> 1.27',
:require => 'kyotocabinet'
<<--

posted by genki genki on Mon 1 Aug 2011 at 04:10 with 0 comments

いくつか前のOSアップデートのころから

pre>>
% ping localhost
ping: cannot resolve localhost: Unknown host
<<--

という状態になっていたて原因が分からず放置していましたが、
/etc/hosts の中に IPv6用の設定があるのが原因のようです。

pre>>
::1 localhost
<<--

これをコメントアウトすると正常な動作に戻りました。

posted by genki genki on Sun 31 Jul 2011 at 18:12 with 0 comments
Contents rssrss
光ファイバーを二次元振動させて走査するAR用ディスプレイ
因果の取り違え
Swift2's defer for CoffeeScript
mongodb-3.0からcreateIndexのdropDupsが無くなったらしい
mongodb-3.0以降のWiredTigerの設定を動的に変更する方法
一般楕円の高速生成アルゴリズムへの道標
farro mantecatoのレシピ
Droonga関連の記事のまとめ
RuntimeErrorの特定のメッセージに限定してrescueする方法
jQueryでscriptタグを実行せずにappendする
Tags
rubymemomacEC2firefoxgemkyotocabinetlionlocalhostmysqlPostgreSQLsocketstructtipsお知らせ願望
Comments rssrss
瀧内元気 瀧内元気: MacOS版は以下にあります genki/ViMouse 01/16 05:40
dsjf dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これでも出... 01/08 23:23
瀧内元気 瀧内元気: おお、チェックしてみます。thx! 12/24 05:23
overisland overisland: Reeder for iPhone もこの UI を実装していますね。 12/24 05:13
瀧内元気 瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 http:... 12/01 12:20
tkawa tkawa: http://devcenter.heroku.com/articles/rails31_herok... 12/01 10:47
瀧内元気 瀧内元気: どもー。いまはgithubに置いてあります https://github.com/genki/irb... 07/10 08:31
ともち ともち: こんにちは! すばらしいプログラムをありがとうございます。しかし、merbiのドメイン、切れているみ... 07/10 02:30
Services from s21g
MagicBag
MagicBagは、Cloudflare R2やS3互換ストレージをMacのFinderから扱えるファイル同期クライアントです。
アンテナショップめぐり
東京にある全国のアンテナショップ、イベント、特産品を地図や条件から探せるサービスです。
YOMU Web小説リーダー
YOMUは、Web小説の読み上げに特化したiPhoneアプリです。
補助探
公開されている補助金・助成金情報を集約し、条件に合う制度を探しやすくするサービスです。
jotter.me
jotter.meは、考えやアイデア、情報を書き留めるためのノートサービスです。