おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

ruby

最近の Rack サーバ事情について

先月、heroku の推しサーバが unicorn から puma に変わったという発表がありました。unicorn だとスロークライアントの影響を受けやすいというのが理由なようです。 もう少し詳しく調べてみましょう。 そもそもスロークライアントってなに その名の通り遅い…

第19回 ginza.rb ミートアップ

第19回目の ginza.rb ミートアップを開催しました。 Ginza.rb 第19回 だれが一番?Railsアプリサーバ徒競走!&Ruby2.2について話そう - Ginza.rb | Doorkeeper raptor と rhebok のパフォーマンスをみる 第17回ミートアップ で、Rack サーバの比較をしまし…

Gimei が住所対応しました

@miyohide さんの協力により、ランダムで日本人の名前を返す gem Gimei が住所に対応しました。次のようにすると、それっぽい住所を返します。 address = Gimei.address address.kanji # => 岡山県大島郡大和村稲木町 address.to_s # => 岡山県大島郡大和村…

bundler で特定のパスに gem をインストールするべきか否か

みなさんはどうしていますか。個人的には、ローカルの開発環境であればグローバルにインストールしちゃっても問題ない気がしてきています。 ずっと習慣で bundle install —path vendor/bundle ってしてたけど、別にグローバルな感じでインストールしちゃって…

mac で nokogori をインストールする

bundle install で nokogiri のインストールに失敗して、そこからやったことのメモです。 とりあえず libxml2 と libxslt 入れる。 brew install libxml2 libxslt これでもダメだったのでNokogiriのドキュメントを見ると、「libiconv をソースから入れろ」と…

完全一致でgemの検索をするには

gem search rails とかすると、部分一致で検索されて結果がたくさんでます。完全一致したgemの情報のみ欲しいときは次のようにします。 gem search ^rails$ しかし毎回^や$を打つのはだるいですね…。そこで簡単なシェルスクリプトを書いてみました。-dは詳細…

クリップボードにコピーしたHTMLをHamlに変換する

HTML2Hamlとかあるけど、いちいちURL開いてコピペして…とか面倒ですよね。次のコマンドで自動変換できます。zip納品されたHTMLをHamlに直すときなどにどうぞ。 前提条件 Mac gem i html2haml pbpaste | html2haml --unix-newlines | pbcopy

rake_shared_context を 0.2.1 にバージョンアップした

僕が作った gem の中で、ダントツにダウンロード数が多い rake_shared_context という gem のバージョンを 0.2.1 に上げました。0.1.0 にバージョンアップしたときから8000ダウンロードくらいされてるみたいなんですが、その間何かあったんですかね…。 0.2.1…

rake_shared_context を 0.1.0 にバージョンアップした

rake_shared_context という、rake タスクをテストする際にべんりな shared context を gem にしたものがあります。これをバージョンアップしました。 バージョンアップしたときに RubyGems.org を確認したら、地味に 2000 ダウンロードされていて驚きました…

gimei を 0.1.0 にバージョンアップした

gimei をバージョンアップして、0.1.0 にしました。2celebさんから pull request を投げてもらい、それに合わせて API を整備。主な変更点は下記のようになります。 サンプルデータを拡充(約14000行のYAMLに!) 男女を指定して名前を返すAPIを追加 コード例 …

ランダムで日本人の名前を返す gem を作った

gimei という、ランダムで日本人の名前を返す gem を作りました。 似たようなライブラリに faker があります。faker は人の名前だけではなく、住所やメールアドレスやユーザ名や電話番号など、たくさんのジャンルのダミーデータを返してくれるすごい gem で…

Tokyo Rubyist Meetup に参加した

Tokyo Rubyist Meetup (trbmeetup) seeks to help bridge the Japan and international ruby and ruby on rails community. ということで、海外の技術者とミートアップできるコミュニティ Tokyo Rubyist Meetup に初参加しました! 今回のミートアップでは、…

ginza.rb を始めます

新しい地域Rubyコミュニティ、ginza.rb を始めます。 第0回目のミートアップを 6/18(火) にやりますので、気になった方はぜひ申し込みください! Ginza.rb 第0回 - Ginza.rb 第0回では Rails 4 での新機能をチェックします、次回からは Rails 4 のソースコー…

東京Ruby会議3日目に参加した

東京Ruby会議 の3日目に参加してきました。既に自分の分の発表は終わっているのでリラックスしながら発表を聞くことができました。 以下箇条書きによる感想です。 joker さんの話を聞いてDDD熱が高まる DDD本読まないと… 安川さんの話を聞いて沖縄旅行したい…

より良い bundle open としての reditor

以前、bundler で管理している gem のソースをすぐに読み始める方法 としてbundle openを紹介しましたが、今はもっぱら hibariya さん作の reditor を使っています。 bundle openと比べての利点は、標準添付なライブラリも開けるところと、正確な gem 名が分…

brew で最新版の ruby-build を入れる方法

ruby1.9.3-p374 がつい先日リリースされましたね。最近テストが謎の segfault で落ちまくっていて困っていたのですが、このリリースでそのあたりが解消されているらしいのこと。なので早く brew upgrade したかったのですが「brew だと ruby-build の変更が…

timecop のちょっと便利な書き方について

みなさん、 timecop 使ってますか?timecop は、テストで時間を扱う時に必須と言えるライブラリです。テスト中の時間を止めたり(Timecop.freeze)時間を移動させたり(Timecop.travel)できます。似たようなライブラリとして delorean があります。RailsCasts …

rbenv をさくらVPSのサーバにインストール

rbenv をさくらのサーバに system wide にインストールする手順のメモです。 インストール準備 ruby のインストールに必要そうなものを yum でインストールします。 sudo yum install libyaml libyaml-devel zlib zlib-devel readline readline-devel openss…

僕が参考にしている Ruby, Rails の情報源まとめ(海外ブログ編)

昨日 @bekkou68 さんに「前島さんってどうやってRubyやRails関連の情報を収集しているんですか?」って聞かれたのでまとめてみます。とりあえず海外のブログ限定で。日本ブログ編は気が向いたらやります…。 RailsCasts 有名すぎて説明不要かもしれませんね。…

true か false をそれぞれ二分の一の確率で返すコード

これまで rand(2) == 1 みたいに書いてたけど、RailsCasts を見ていたら [true, false].sample のように書いていて、こっちのほうが若干読みやすさで上回っていていいかもと思いました。他にもっといい書き方があるぜ!という方いらっしゃったら教えてくださ…

札幌Ruby会議2012に参加した

札幌Ruby会議2012に参加しました。予約してたホテルが一週間前にホテル都合で予約キャンセルになったり、行きの飛行機の時間を間違えてしまうトラブルがありつつもなんとか3日間フルに参加することが出来ました。 予約してた札幌のホテルが設備故障で休みに…

yokohama.rb #24 に参加した。

ずっと行ってみたかった yokohama.rb に初参加しました。 Bu: Yokohama.rb #24 Rubyレシピブック読書会→もくもく→行きつけの中華屋で懇親会という流れ。僕は Ruby 2.0 の refinements を手元で試したりしていました。 参加してすごく “コミュニティ感” の強…

ruby-mode のインデントをいい感じにする

僕はこれまで下記のようなインデントで ruby のコードを書いてきました。 SuperLongClassName.super_long_name_method(hoge: 'fuga', foo: 'bar', baka: 'aho') 理由は、Emacs の ruby-mode による標準インデントが上記のような形になっているからです。今ひ…

gemコマンドの省略

gem install -> gem i gem list -> gem li など、gemのコマンドは他のコマンドと衝突しない範囲で省略できる。これまで gem install xxx としてたけどこれからは gem i xxx として生きていこうと思います。

Rubyで2進数と10進数の変換

ぐぐってもエントリがみつからなかったので。to_s や to_i に引数を渡すことで変換できる。 10進数から2進数への変換 255.to_s(2) # => "11111111" 2進数から10進数への変換 "11111111".to_i(2) # => 255

Ruby1.9.3ではKernel#randが少し便利になる

5から9までの整数をランダムで返すような処理を書くとき、1.9.2までは rand(5) + 5 もしくは r = Random.new r.rand(5..9) のようにする必要があります。でも1.9.3だと rand(5..9) のようにできるようになっています。少しのことですけど嬉しい改善点ですね…

Google Developer Day 2011 の Dev Quiz に挑戦した

初めてチャレンジしてみました!以下感想。 分野別 Web Game と 一人ゲーム をやりました。Web Game は jquery の click メソッドでなぜかクリックできなくてハマりました(イベント周りの知識不足)。また試しに CoffeeScript を使ってみたら慣れてないせいで…

Redcarpet2のざっくりまとめ

githubで使われているMarkdown用ライブラリRedcarpetが後方互換性のない version 2 になるみたいです。現時点のバージョンは 2.0.0b3 で、まだ本リリースではないようですが、これから使うなら2の方を勉強しておくべきだと思うのでまとめます。基本的にいつ…

RubyKaigi2011に参加した

RubyKaigi2011に当日スタッフとして参加してきました!前回のRubyKaigiは仕事でフルに参加することができず悔しかったです。 次回はちゃんと全部参加したいです><それかスタッフで参加するか。 Rubykaigi2010に参加した - おもしろWEBサービス開発日記 今…

Chapter 13 Spec::Expectations

the rspec book - Chapter 12 Spec::Example その1 - おもしろWEBサービス開発日記 the rspec book - Chapter 12 Spec::Example その2 - おもしろWEBサービス開発日記の続き。 BDD BDDのゴールの一つは正しい言葉を得ること。技術的なことのわからない人と…

Paperclip的なプラグインDragonfly

Paperclip的なプラグインDragonflyの紹介記事Dragonfly: Image Handling For Championsの意訳です。ところでこのくらいの分量の「海外の記事のざっくりな意訳」ってどれくらい需要あるんでしょうかね?あんまり需要なさそうならこれ系の記事はサブアカに書い…

controllerを少しだけスリムにするtips

(※12月の1日から25日まで、日替わりで Ruby の Tips を紹介するイベント、 Ruby Advent Calendar jp: 2009 の 12 日目です。昨日は id:ohac さんでした。明日はうづら(udzura) さんの予定です。)Railsネタをひとつ書きたいと思います。 titleをviewで設定し…

Snow LeopardにRuby Enterprise Editionを入れる

Snow LeopardにRuby Enterprise Editionを入れる手順のメモです。 readlineをインストール どうやらLeopardと同じくSnow Leopardのreadlineにも不具合があるようなのでreadlineをダウンロードします。The GNU Readline Libraryからreadlineをダウンロードし…

amazon-ecsに署名認証をつけるようにした

8月15日までにamazonのAPIに署名認証をつけないといけなくなったわけですが、皆さんもう対応されましたか?Product Advertising API用のRubygemで有名なのものとしては amazon-ecs ruby-aaws などがあります。僕はamazon-ecsを使っていたのですが、こちらは…

Rubyの脆弱性が発見されました

RubyにDOS攻撃の脆弱性が発見されたようです。Riding Rails: DoS Vulnerability in Ruby DoS vulnerability in BigDecimal どんな脆弱性か BigDecimalからFloatに変換する部分に問題があるらしく、下記のように、大きい数値をRubyにパースさせることでDOS攻…

オブジェクトのコピーについて

Rubyでオブジェクトをコピーするメソッドには、Object#cloneとObject#dupの二種類があります。それぞれ少しだけ機能が違うようなのですが、参考書によって記述が異なっていて???となったので調べました。 参考書の記述 それぞれの該当部分を引用しますプ…

オブジェクトの比較をする方法まとめ

なんかいろいろ方法があるのでメモ。 equal? 同一のオブジェクトを参照してたらtrue。下記のコードと同じ。 a.object_id == b.object_id == ==で下記のオブジェクトを比較すると、値が等しいかどうかをチェックする。 String Array Hash FixnumとFloatの比較…

Mitaka.rb設立総会に行ってきた

今日吉祥寺で行われたMitaka.rb設立総会に参加してきました。やっぱり三鷹周辺の方が多かったですが千葉や埼玉や神奈川(僕ですね)から参加する人もいたりで国際色豊かな感じ?で飲んできました。「吉祥寺でRubyで飲むよー」って言ってすぐに30人集まるってい…

Rails2.3.1でopensocial-ruby-clientが動かない件

Rails2.3のRack統合でActionController::AbstractRequestがActionController::Requestに統合されたのが原因だった模様。下記のように書き換えて対処。 module OAuth::RequestProxy #:nodoc: all class ActionControllerRequest < OAuth::RequestProxy::Base …

Ruby温泉×2

3月はRuby温泉が二つも企画されてます。温泉入ってプログラミングしたい!でもお金ない!無念!Ruby 温泉 2009 March in 滋賀 : ATND Ruby 温泉 March 2009 (仮) : ATND

Ruby1.9.1をインストール

下記のようにしてインストールした。 ./configure --prefix=/usr/local/ruby19 --program-suffix=19 --enable-pthread --with-readline-dir=/usr/local --enable-shared make make install そしたら./configure時に下記のようなWARNING。--with-readline-dir…

ubuntuでcurb(curl)を使うには

libcurl4-gnutlsをインストールする必要があります。 sudo apt-get install libcurl4-gnutls-dev sudo gem install curb

Rubyでwebにアクセスするライブラリ、どれが速い?

なにやらRuby1.8.6のNet::HTTPは遅いという噂があります。InfoQ: RubyのNet::HTTPで何が良くないのか?それでは一体どのライブラリが一番速いのでしょうか。調べてみました。 大きいファイルをダウンロード localhost(apache)に置いた10Mのファイルをダウンロ…

daemonの作り方

先日webrickのソースを少し読んだのですが、daemonを作る部分がよくわかりませんでした。 def Daemon.start exit!(0) if fork Process::setsid exit!(0) if fork Dir::chdir("/") File::umask(0) STDIN.reopen("/dev/null") STDOUT.reopen("/dev/null", "w")…

do...endと{...}の違い

Rubyのブロックの記述方法にはdo...endと{...}の2種類があります。僕は基本的にRubyコーディング規約を参考にしてRubyコードを書いているのでdo...end派なのですが、Railsのnamed_scopeをこんな風に書いたらエラーがでました named_scope :hoge, lambda do …

Ruby Enterpriseがすごい

以前にも何度かインストールして感心しているんだけど、インストールしたばかりのまっさらなUbuntuに入れたらそのおもてなしのすごさを再確認した。 すごいところ インストールに必要なパッケージを教えてくれた インストール時の文字の色と背景色が変わるの…

Array()メソッドでArray変換を簡単に

最近、Array() というイディオムを教えてもらってので、覚えるために書きました。 Linux の不要サービスを停止するruby スクリプト - Slow Dance ArrayじゃなかったらArrayに変換するようなコードはこれまでこんな風に書いてました。 str_or_ary = str_or_ar…

Rubyのエラー関連メソッド

Rubyのエラー関連をちょっと調べてみたのでメモ。 raiseメソッド 引数の数によって挙動が少し違う。 raise 直前の例外の再発生。直前の例外がない場合はRuntimeError raise message messageをメッセージとするRuntimeErrorを発生 raise error_type, message …

ruby-debugでデバッグ

Railsアプリのデバッグをするとき、僕は基本的にはpを使ってます。pだけじゃしんどそうだなーという場合も時々あって、そういう時にはruby-debugを使ってます。でも時々なので使い方をよく忘れます。これは効率悪いですね。というわけでruby-debugの使い方を…

RailsのURLエンコード方法

これまでは、ここを参考に URI.escape( str, Regexp.new("[^#{URI::PATTERN::ALNUM}]") ) でやってたけど ERB::Util.url_encode で十分みたいね。 参考 cgi - Rubyリファレンスマニュアル erb - Rubyリファレンスマニュアル