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 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
もともとSinatraではRack::Reloaderが上手く機能しないのでshotgunを使おうという流れだったのですが、諸般の事情でshotgunを使えない状況になったため、本腰を入れてRack::Reloaderを使えるようにする方法を調べました。 結論として、以下のようにすれば使えました。 config.ru 1 configure :development do 2 class Sinatra::Reloader < Rack::Reloader 3 def safe_load(file, mtime, stderr = $stderr) 4 ::Sinatra::Application.reset! 5 use_in_file_templates! file 6 stderr.puts "#{self.class}: reseting routes" 7 supe
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 Railsにおけるrestful_authenticationやMerbのビルトイン認証機構に比べると、Sinatraには「とりあえずこれを使っておけ」というような認証ライブラリが無いような気がします。強いて言えばRack::Auth::Basicかな。ちょっと機能不足のように感じます。 という事で、Sinatraで使える認証用ライブラリをリストアップ。 Rack::Auth::Basic Basic認証をする。 Rack::Auth::Digest 同様にDigest認証を行う。 Rack::Auth::OpenID OpenIDを使って認証。ruby-openidが必要。 Rack::Auth::OpenIDAuth 同
「今日の日付」のような動的な値が必要な場合には "javascript{}" を利用する。 同ブロック内部の文字列は実行時に javascript コードとして評価され、 その評価結果が値として利用される。 例:いずれもabcが入力される コマンド対象値
GAEなどでファイル数の多いライブラリを使うために、gemのパッケージから不要そうなファイルを消してjarファイルにまとめるために作ったスクリプトです。 1 #!/usr/bin/env ruby 2 3 def run(command) 4 puts command 5 system command 6 end 7 8 case ARGV[0] 9 when 'install' 10 run "jgem install -i ./gems --no-ri --no-rdoc #{ARGV[1]}" 11 when 'uninstall' 12 run "jgem uninstall -i ./gems #{ARGV[1]}" 13 end 14 15 Dir['gems/gems/*'].each do |dir| 16 %w( 17 Generaters T
カンファレンス会場で最も貴重な資源は時間ですが、二番目はきっと電源です。 電力というのは普段は簡単に安く手に入る資源であるにもかかわらず、人が集まる場所では極端に供給が難しくなります。 このギャップはとても大きいので、ビジネスになるのではないかと思います。 非常に大雑把な計算ですが、 普通のノートPCを1日動かす程度電力が供給できれば良いので、 20000円程度で市販されている外部バッテリを年間100日レンタルできたとして、平均耐用年数が1年だったとしても、1日あたり200円です。 カンファレンス会場に据え置いてしまえば輸送コストはそれほどかかりません。カンファレンスはほとんどデイタイムに開催されるので、夜間の安い電力で一括充電できます。 一晩に一人で1000個のバッテリを充電できるとすると、時給2000円でも8時間で16000円/日。バッテリ一個あたり16円。 人件費を考慮しても十分安価
Gist はちょっとしたコードの切れ端を貼付けておくのに便利です。 先日紹介したEndless RubyのコードもGist上でのみ公開されていました。 Gemを作るまでもないコードをGistに貼付けて、そのままrequireして使えると便利そうだと思ったので、試してみました。 1 module Gist 2 module_function 3 def require(id, sha1 = "HEAD") 4 Kernel.require "open-uri" 5 gist = "http://gist.github.com" 6 eval(if sha1 == "HEAD" 7 open("#{gist}/#{id}.txt").read 8 else 9 Kernel.require "tmpdir" 10 cache = File.join(Dir.tmpdir,
Merbの開発がなかなか進展しないのでSinatraをちょっと触ってみたところ、 DataMapper、Herokuとの組み合わせが非常に簡単でいい感じでした。 blog.rb 1 require "rubygems" 2 require "sinatra" 3 require "dm-core" 4 require "haml" 5 6 DataMapper::setup(:default, ENV['DATABASE_URL'] || 'sqlite3:db.sqlite3') 7 8 class Post 9 include DataMapper::Resource 10 property :id, Serial 11 property :content, Text 12 auto_upgrade! 13 end 14 15 get "/" do 16 @p
例えばJavaScriptだと"\u3000"と書けば良かったのですが、少なくともRuby-1.8系ではこれに相当する記法が無さそうだったので、いつも困ってました。 色々調べてみた結果、以下のようにすれば良さそうです。
JRubyで相対パスを含む場合に、Jarファイルの中のファイルを読めるようにするためのモンキーパッチの最新版です。 1 def cleanup_path(path) 2 if path.to_s.match(/^file:/) && path.is_a?(String) 3 jar_path, inner_path = path.split('!', 2) 4 inner_path = File.expand_path(inner_path) 5 path = [jar_path, inner_path].join('!') 6 end 7 path 8 end 9 10 alias :require_original :require 11 def require(path) 12 require_original cleanup_path(path) 13 re
のように書くのが、DSL的にちょっとかっこうわるいです。 そこで、以下のようなものがあればちょっと奇麗に書けます。 1 class Symbol 2 def method_missing(method, *args, &block) 3 if args.empty? && block.nil? 4 [self, method].join(':').intern 5 else 6 super 7 end 8 end 9 end 10 11 >> :foo #=> :foo 12 >> :foo.bar #=> :"foo:bar" 13 >> :foo.bar.baz #=> :"foo:bar:baz"
GAE/Jにはファイル数制限(1000まで)があるので、なるべく不要なファイルは減らしたいのが人情というものです。 ということで、unpackしたgemsから不要なファイルを掃除するために、以下のようなスクリプトを使用しています。 script/strip_gems 1 #!/usr/bin/env ruby 2 3 Dir['gems/gems/*'].each do |dir| 4 %w( 5 Generaters TODO README.* README 6 spec/**/* test/**/* examples/**/* tasks/**/* 7 tutorial/**/* demo/**/* 8 CHANGES CHANGES.txt CHANGELOG 9 LICENSE MIT-LICENSE Rakefile CONTRIBUTORS 10 Manife
Merb/DataMapperをしばらく使っていたのですが、 少なくともバージョン0.9.10, 0.9.11では、 associationの実装にバグがあり、 レコード数が多いテーブルがあると、aggregation系の処理に時間がかかるという問題がある事が分かりました。 例えば、Post.has n, :comments な関係がある時に、 以下のようなコードを実行すると、このようになります。 1 ?> Post.first.comments.count #=> 188 2 ~ (0.000865) SELECT "id" FROM "posts" ORDER BY "id" LIMIT 1 3 ~ (0.000094) SELECT "id", "post_id" FROM "comments" WHERE ("post_id" IN (1)) ORDER BY "id" 4
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く