You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
前回の記事「エラーメッセージから学ぶRack - 最初の一歩」の続きです。 噂によるとRackにはMiddlewareなる魔法があるそうです。そしてRack古文書にはMiddlewareについて次のようにあります。 useの呪文を唱えよ。さすれば扉は開かれん 準備 前回作った、なんちゃってWebフレームワーク「draque」を継続して使います。config.ruが少し長くなったので、Webアプリの本体を別ファイルdraque.rbに移します。 #draque.rb module Draque @@routes = { get:{} } def draque(env) path = env['PATH_INFO'] if res = @@routes[:get][path] res.call(env) else [ 404, headers, not_found ] end end def
ここ以前から分からなかったので調べてみました。 基本 class_eval Module で定義されている なので、クラスやモジュールにしか使えない irb(main):009:0> String.respond_to?(:class_eval) true irb(main):011:0> Enumerable.respond_to?(:module_eval) true irb(main):012:0> 'xxx'.respond_to?(:class_eval) false instance_eval Object で定義されている なので、クラス(Class クラスのオブジェクト)にもオブジェクトにも使える irb(main):003:0> String.respond_to?(:instance_eval) true irb(main):004:0> 'a'.respond_to?
Deviseの使い方がよくわからなかったので、基本を覚えようと思い https://github.com/plataformatec/devise にある説明を元にだいたいそのままやってみたときのメモ 次はOpenIDを利用してログインすることを目指してみる。 Gemfilesに記述を追加 gem 'devise' gemをインストールするコマンドを実行 # bundle install デバイスをインストールコマンドを実行する。 # rails generate devise:install 表示されるメッセージに合わせて、手動で次の設定をする。 config/environments/development.rb に記述を追加 config.action_mailer.default_url_options = { :host => 'localhost:3000' } con
RSpec の DSL には、 example と言うメソッドがあり、そこを経由して現在実行中の example の情報を得ることができる。 def add(*args) args.inject(:+) end describe "add" do before do p example.class #=> RSpec::Core::Example end subject { add(*args) } context "when 1 + 1" do let(:args) { [1, 1] } it { should == 2 } end end 具体的には、 example は RSpec::Core::Example のインスタンスらしい。 Class: RSpec::Core::Example 以下のような属性、メソッドがある: #exception 実行中の example で最初に起
2012年04月19日 最近、新人のテストコードを見る機会があり、ユニットテストの書き方について考える機会があった。ユニットテストはテンプレートみたいなものがあるので、それさえ押さえれば、誰でも簡単に書くことができる。 ここでは、その方法について紹介したい。サンプルはRSpecで書くが、その他のユニットテストフレームワークでも、応用ができるとおもう。 はじめにごく単純化すると、テスト対象は状態を持ち、入力を与えると何らかの出力を行なうものである。入力が変われば出力は変化するし、状態が変化すると入力が同じでも出力が変わる(かもしれない)。 ユニットテストは、テスト対象の状態を操作し、与えた入力によって意図通りの出力を得られるかを確認する作業のことをいう。なので、ユニットテストを書くときには、オブジェクトの状態ごとにメソッド単位で入力と出力を確認するようにする。 RSpecの疑似コードで書くと
This domain may be for sale!
最近クックパッドでは、アプリケーションサーバの大半が Rails 2.3 から Rails 3 に置き換わったのですが*1、リリース前のベンチマークの時点ではあまりパフォーマンスが出ず四苦八苦していました。具体的には Rails 2.3 の時と比べ MRI 1.8.7 だとレスポンスタムが200%ぐらい遅い結果でした。Rails 3 になって実装が Merb core を取り入れ疎結合で綺麗になった反面、より多くのオブジェクトと・メモリを利用する様になった影響かと思います。 そこで Ruby インタプリタの変更*2を行い検証をしたところ MRI 1.8.7 (Rails 2.3と比べ) 約200%遅い MRI 1.8.7 -> Ruby Enterprise Edition 1.8.7 2011.03 (tcmalloc 無効) 約180%低速 MRI 1.8.7 -> Ruby Ente
Ruby support can be added to any modern Android application by adding JRuby as a dependency. The Ruboto project aims to add some additional sample code to make the integration between Java, Ruby, and the Android platform a pleasant developer experience. The Apps created thereafter depend on JRuby (jruby-jars) at runtime to provide full access to Android's Java APIs. Installation is straight-forwar
このエントリは MySQL Casual Advent Calendar 2011 - MySQL Casual の10日目の記事です。 こんばんは。tagomorisです。さとしです。タゴモリスの s はさとしの s です(実話)。Twitterで #さとし というハッシュタグが流れるたび、ひそかにびくっとしてます。 RubyからMySQLに繋ぐときにどうするの、ととりあえず gem search -r mysql とかやると思います。そして大量にあれこれ出てきてどうすればいいんだ! という気分になると思います。そういう気分になったことがあるので、現状を簡単にまとめてみました。 ruby-mysql 昔からの定番ですね。作者は id:tmtms のとみたまさひろさん。rubygemsとか使われる前から Ruby/MySQL というライブラリ名で知られていました。Googleで検索するとト
皆さんはキャッチボールは好きですか? 私はバスケットボールの方が好きです。 キャッチボールは、自分と相手双方がボールをうまくキャッチできるように投げる必要があります。これは、サーバーとクライアントの間でも同じで、クライアントから投げられたボール(リクエスト)をサーバーは正しく投げ返す(レスポンス)必要があります。 ここで、サーバーがボールをあさっての方向に投げたり、異常なスピードで投げ返すとどうなるでしょうか。おそらくクライアントはそのボールを取ろうとしますが、追いつけずにボールを落としたり、どこかにぶつけたりしてしまうでしょう。 今回は、HTTPについて、どうして正しくレスポンスを返さないといけないのかということについて、Rackを使用して解説していきます。 対象読者 Webアプリケーション開発に興味のある方、これから開発を行おうとしている方 Rackについて まず、今回使用するツール
Sinatraはとてもシンプルなフレームワークです. 例えばHello Worldならば次のコードだけでできあがりです. require 'sinatra' get '/' do "Hello, world!" end 魔法のようにかんたんですね! しかし「どうしてこれで動くのか」を知っている人は比較的少ないのではないでしょうか. 気になるSinatraのソースコードを読んでみましょう. Classic Style と Modular Application ところでSinatraにはクラスを使ったModular Applicationという書き方があるのを知っていますか? Hello WorldはModular Applicationではこのようになります require 'sinatra/base' class MyApp < Sinatra::Base get '/' do 'Hel
ご存知の通り Ruby では仮引数の最後に '&' を前置した「ブロック引数」を宣言することで、メソッドに渡されるブロックをProcオブジェクトとして受け取ることができます。つまりメソッドに渡されたブロックを呼ぶ方法には2通りあります。 def m1 yield :m1 end def m2(&block) block.call(:m2) end m1{|a| p a } # => :m1 m2{|a| p a } # => :m2 この2通りのブロック呼び出しの違いについて触れた記事もいくらかあります。*1 *2 主にブロックが渡されていない時のエラーメッセージが違うなどの挙動の違いについて触れられていますが、この文章では両者のYARVでの実装上の差異とパフォーマンスの違いについて書きます。 最初に結論を "可能なら Proc#call ではなく yield を使おう" 「可能なら」とい
At Sonian, we monitor an ever changing number of Amazon EC2 instances. As I write this post, that number is 476, expected to rise and fall before the day is done. The “elastic” nature of our infrastructure makes monitoring it a not so trivial task. We have found the standard tools from the community toolbox to be inadequate when operating in the “cloud”. Up until recently, Sonian utilized several
モバイルゲーム 物凄い勢いで勃興したモバイルゲーム業界は、いろいろな課題や問題に直面しながらも巨大化し、今日の時点でのスマートフォン向けゲームの市場へと継承されていきます。 モバイルゲームの歴史 2001 Javaアプリと3Dゲームの登場 Javaが利用できるようになったことにより、ダウンロード型のゲームが供給できるようになりました。 2002 携帯電話端末の大容量化・3D化競争 Java搭載携帯電話端末が登場してからごく僅か1年の間に、アプリのサイズに関しては10倍に広大化し、表現方法も2Dから3Dにシフトし始めました。J-PHONEは『ゼビウス』や『スペースハリアー』などといった昔のアーケードゲームを、ドコモはSIMCITYなどパソコンで世界的規模のヒットを飛ばしたゲームを主力商品としていました。 2003 モバイルゲームの一般化 メモリの制限が厳しいJava仮想マシン上ではなく、OS
Rubyのクラス、モジュール、オブジェクトの関係を 自分なりにまとめてみた 読みづらいかもしれないけど だれかの参考になればうれしい オブジェクトの種類 Rubyはオブジェクト指向言語であり Ruby空間に存在するオブジェクトをその操作対象とする Ruby空間には3種類のオブジェクトすなわち インスタンスオブジェクト、クラスオブジェクト そしてモジュールオブジェクトが存在している これらは通常単に オブジェクト、クラス、モジュールと呼ばれているけど ここではそれらのオブジェクトとしての側面を強調したいので あえてその名称を使おう クラスオブジェクト 〜クラスとしての側面〜 クラスオブジェクトは通常単にクラスと呼ばれ 主にRuby空間に インスタンスオブジェクトを生み出すために存在する 生み出されるインスタンスオブジェクトのデザインは クラスオブジェクトに記述されており しかもユーザがインス
Rails3のパッケージ管理について、いまいち理解が不足していたので、ネット上のBlogや公式ドキュメントを読みあさった。まだ完全には理解してないけど、分った範囲でメモ。 以降は、Rails3かつgitによるソースコード管理を行っていることを前提にしています。 Bundlerとは Rails3で公式に採用されているアプリケーションの依存関係管理ツール。 Railsアプリに必要なgemパッケージを特定のバージョンに固定し、簡単に複数環境に展開できるようになる。パッケージ名はBundlerだが、コマンドはbundleなので注意。 bundlerを利用する利点 gemパッケージ同士は密に依存している為、更新によるバージョン変更に伴い、アプリケーションが動作しなくなる危険性がある。(開発機で、何気なく修正したものが、本番環境で動作しない!等)また、Railsアプリが巨大になればなるほど、利用してい
VALUE Data_Wrap_Struct(VALUE klass, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free, void *sval) C の構造体 sval をラップして klass クラスの インスタンスである Ruby オブジェクトを生成し、それを返します。 mark、free はそれぞれ sval のマーク用・解放用の 関数へのポインタです。どちらも、必要ないときはかわりに 0 を渡します。 また RUBY_DATA_FUNC の定義は以下のようです。 typedef void (*RUBY_DATA_FUNC)(void *st) 第一引数 st には sval が渡されます。 使用例 struct mytype { int i; char *s; }; VALUE my_s_new(klass) VALUE klass; { stru
コンテンツへスキップ 無料で使える!HubSpotの顧客リストの活用法 無料のアンケート作成ツール 比較/まとめ 無料「Excel」 テンプレート 比較/まとめ 無料で使えるノートアプリ比較 (Evernote / OneNote / Google Keep) おすすめの無料Web会議システム5選 WebP Converter 徹底解説!初心者でも直ぐに使える HubSpot は、マーケティング、セールス、サービスのためのCRM(Continue reading 多くの人の声を聞くことで改善できることも多い 企業や団体など運営していContinue reading 就職・転職には必須となる履歴書・職務経歴書 これから就職活動をスタートContinue reading 便利なノートアプリで効率的な仕事をしよう いつの時代も仕事をしていてメContinue reading 近年、リモートワーク
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く