タグ

Rubyとrubyに関するwalf443のブックマーク (308)

  • tapかわいいよtap - http://rubikitch.com/に移転しました

    Ruby 1.9で導入されたObject#tapはRuby 1.8でも1.8.7から使えるようになった。 tapメソッドとは何かというと、自分自身にブロックを作用させて自分自身を返すだけのメソッドだ。つまり副作用専門メソッド。定義はいたって簡単、コレ。 class Object def tap yield(self) self end end たとえば、1〜4の二乗のうち10以上のものを求めたいんだけど、デバッグ時とかで途中経過である1〜4の二乗を表示してほしいなんて場合はこんな感じに。いらなくなったらtapの部分を消せばいい。楽チン。 ary = [1, 2, 3, 4] ary.map{|x| x**2}.tap{|a| p a}.select {|x| x>10 } # => [16] # >> [1, 4, 9, 16] ほかにも、破壊的メソッドを適用した後で自分自身を返す場合にも

    tapかわいいよtap - http://rubikitch.com/に移転しました
    walf443
    walf443 2008/05/10
  • aliasによるメソッドの再定義は危険なのでUnboundMethodかextendを使おう - http://rubikitch.com/に移転しました

    Jay Fields' Thoughts: Alternatives for redefining methods メソッドの再定義の技法はいろいろあるが、どれも欠点があるというお話。状況に応じて使い分けるべき。 aliasで再定義 メソッドを再定義するときにこんな感じでaliasで元のメソッドをコピーするのは常套手段だ。 class Gateway def process(document) p "gateway processed document: #{document}" end end class Gateway alias old_process process def process(document) p "do something else" old_process(document) end end Gateway.new.process("hello world")

    aliasによるメソッドの再定義は危険なのでUnboundMethodかextendを使おう - http://rubikitch.com/に移転しました
    walf443
    walf443 2008/05/10
    確かに身に覚えがある
  • 新しいRubyGemレポジトリの GitHub RubyGems が登場しました - ¬¬日常日記

    GitHub RubyGems: http://gems.github.com/ 新しい RubyGem レポジトリとして GitHub RubyGems が登場しました。これまで RubyGem を広く配布する簡単な方法は RubyForge を利用することでしたが、今後は GitHub も有力な手段になりそうです。GitHub RubyGems の特徴は、各gitレポジトリから直接 gem を生成するので、GitHub の利用者ならば誰でも簡単に gem を公開出来ることです。もちろんフォークしたレポジトリからもgemが生成されます。各々のgem名は次のようになります。 <github_user_name>-<project_name> GitHub RubyGems から gem をインストールするには 最初に次のコマンドでレポジトリを登録します。 % sudo gem source

    新しいRubyGemレポジトリの GitHub RubyGems が登場しました - ¬¬日常日記
  • Python の好きなところ - kなんとかの日記

    Python の好きなところ。主に Ruby との対比。 微妙なものも混ざっているけど、ご容赦ください。 ・キーワード引数を装備している。 これは Ruby と比べて大きなアドバンテージ。Ruby の、Hash を使った疑似キーワード引数も悪くはないんだけど、使用できるキーワードが引数に明示されないので readability が低い、キーワードを間違ってもエラーにならない、という欠点がある。やはり Ruby でも物のキーワード引数が欲しい。 しかしキーワード引数を持っている言語って、そう多くはないんだよね。Ruby だけでなく、PerlPHP も JS も持っていない。もう 21 世紀なんだから、これからの言語は持っていて欲しいな。 ・仕組みが単純である。 Python は、全体的に仕組みが単純である。たとえばメソッドやインスタンス変数に対して public, protected

    Python の好きなところ - kなんとかの日記
    walf443
    walf443 2008/04/19
    割と共感
  • Python の嫌いなところ - kなんとかの日記

    ちょっと古いけど。 デブサミ会場で、雑談していると「PythonはDISらないんですか」と柴田さんから。なんか自虐的じゃない? とは言うものの、Pythonは基的に良い言語で、 不満な点はかなり微妙だ。一般人にはどーでもいいような点だと思う。 一応リストを。 式と文の区別が明確。 インデントベースだとeRubyのようなテンプレートが難しい ブロックを含む式を持てない。Haskellみたいにブレースを使えば式にできるといいのに reduceがなくなる generator難しい。yieldを書くと戻り値が変化するってのはどうよ list comprehensionが難しい。英語人には人気みたいだけど Matz日記:PythonをDisる。 「Python は基的によい言語」には同意。Rubyist でも、使ってもないのに Python を DIS る人がいるのは残念。インデントベースが嫌い

    Python の嫌いなところ - kなんとかの日記
  • Ditz はとても素晴らしいと思います! - ¬¬日常日記

    つい先日、Rubyで書かれたDitzという分散型のITS(Issue Tracking System)がリリースされたようです。 http://ditz.rubyforge.org/ 上のサイトをご覧になれば分かるかと思いますが、基的にコンソールベースです。最近はtracとかredmineとかwebベースのITSが流行っているので、この時点でやや意表をつかれた感がありますが、驚くべきはその管理方法。ditzがやっていることは単純に手元のbugs.yamlを編集し、後はbugs.yamlをdarcsとかgitとかの分散型のバージョン管理システムを使って皆で共有という丸投げ方式。こうなると、じゃあbugs.yamlの内容に衝突が起きたらどうするの?とすぐに思うわけですが、その場合は普通にbugs.yamlを手作業で編集してね、という清々しい割り切り方をとっています。 ditzの利点は以下のよ

    Ditz はとても素晴らしいと思います! - ¬¬日常日記
    walf443
    walf443 2008/04/05
    YAMLベースのITS
  • Rubyの名前解決は自分の入っているモジュールの兄弟をチェックしない - 西尾泰和のはてなダイアリー

    module Foo quux = 1 class Bar def baz print quux end end p Bar.new.baz # undefined local variable or method `quux' end quuxをdefしても同じ。クラスのメソッド内で修飾なしで使われた名前はまずローカル変数かどうかをチェックして、それから自分のメソッド、親クラスのメソッド・・・とたどっていき、Objectで止まるのだと思われる。 Pythonでは修飾なしの名前はローカル変数をチェックした後、外のスコープへとたどっていき、グローバル(モジュールスコープ)で止まる。self.quuxなら自分のメンバ、親クラスのメンバ、、、とたどってobjectで止まる。 Javaはthisを省略できるけど、どうなってるんだろうか。ネストしたクラスを作った場合に外側のクラスの変数に修飾なしでア

    Rubyの名前解決は自分の入っているモジュールの兄弟をチェックしない - 西尾泰和のはてなダイアリー
    walf443
    walf443 2008/04/05
    ローカル変数のスコープ
  • とっても便利な Kernel#acquire, __DIR__ - ¬¬日常日記

    Ramazeさんのとっても便利な Kernel#acquire を紹介してみたいと思います。acquire は簡単に言えば require のようなものですが、require とは違って次のようにして複数のライブラリを一気に呼び出すことが出来ます。 acquire 'lib/**/*' これで ./lib 以下にある拡張子 .rb, .so なライブラリがごそっと読み込まれます。ちょっと便利だと思いませんか?もちろんこういうのが気持ち悪いと思う人は普通に require すれば良いだけですから安心して下さい。Ramazeさんは、Rails における ActiveSupport や Waves における AutoCode のようなオートロードを行なわないので、そういう点で簡単お手軽にライブラリをロードしてくれる acquire の存在価値はあると思います。 また Kernel#__DIR__

    とっても便利な Kernel#acquire, __DIR__ - ¬¬日常日記
    walf443
    walf443 2008/03/25
    他のは欲しいとは思わないけど、頻度的にKernel#__DIR__はそれだけ提供してくれるgemがあってもいいなぁ(大してコード書かなくてもできるけど
  • RSpecのStoryの書き方に関するメモ - ひげろぐ

    The domain name brass.to is being parked on Park.io. Contact the domain owner to make an offer right now...

    walf443
    walf443 2008/03/17
    storyについて
  • RubyWaves における AutoCode について - ¬¬日常日記

    RubyWavesは結構面白いですよね。そんなわけで目玉機能のひとつであるAutoCodeがどのようなものか調べてみました。 まず最初に断っておくと、AutoCodeは普通にRubyのライブラリなので、RubyWaves以外にも使えます。なので、これは素晴しい!と思ったら誰でも使えるわけです。偉い! さて、AutoCodeは次のようなライブラリです。README(version 0.9.2 のもの)から引用します。 Autocode makes it relatively easy to automatically (re)load or even generate classes and modules on the fly. You can use it like this: require 'autocode' module Application extend Autoload a

    RubyWaves における AutoCode について - ¬¬日常日記
    walf443
    walf443 2008/03/17
    autocodeというgemの解説
  • 正規表現をProcに - ずっと君のターン

    せっかく先週梅澤さんにSmalltalkをご教授いただいたわけだし、これは気持ちが盛り上がっている内にSmaltalk(Squeak)で何か作らなければなるまい。としたら、ここはとりあえずおっぱいだろ、とかノータイムで実装始めかけて気付いた。 Squeakって小学校で授業に使われたりするんだっけ?おっぱいなんか作って、よい子のみんながうっかり検索しちゃったらどうすんだ? と言うことで、急遽方針変更。今回作ってみたのはこちら。 よい子のみんなも大好きなぷるぷるのプリン。マウスを近づけるとフルフル揺れる。 アルゴリズム?は前回とほぼ同じだからソースは説明するまでもないと思うんだけどなんつーかまぁ構成はこんな感じ。 PuddingMorphは変なの継承してるね。ていうか単にOppaiMorphの存在をみせたかっただけだね。 とりあえず動いただけって状態で気乗りしないけど、しばらく放置することにな

    正規表現をProcに - ずっと君のターン
    walf443
    walf443 2008/03/14
    Object#to_proc
  • brass.to - a really cool domain parked on Park.io

    The domain name brass.to is being parked on Park.io. Contact the domain owner to make an offer right now...

  • そのコードはテストされているか? - ザリガニが見ていた...。

    テストコードを書いていると、ふと疑問を感じて心配になることがある。 果たして、このテストコードで漏れなく動作確認できているのだろうか? テストが漏れているところが、どこかに無いだろうか? 特にテストを書くことに慣れていない現状では、何処でどんなテストを書いておくべきかも手探りだ。そんな時rcovが勇気づけてくれた。 利用環境 MacBook Mac OSX 10.5.2 Rails 2.0.2 インストール インストールはいつもながら、とても簡単。 $ sudo gem install rcov 使い方 開発中のRailsプロジェクトのルートで以下のコマンドを実行してみた。 -x Library/Ruby/Gemsオプションは、Library/Ruby/Gems/以下のコードに対するcoverageを除外してくれる。 --railsオプションは、config/, environment/,

    そのコードはテストされているか? - ザリガニが見ていた...。
    walf443
    walf443 2008/03/08
    xオプション知らなかった
  • 満足せる豚。眠たげなポチ。:CGI から Mongrel まで、Rack で Web アプリを Web サーバから抽象化する

    Rack ってなに? Rack は Web サーバと Ruby プログラムや Ruby で書かれた Web アプリケーションフレームワークとの間に、最小限のインターフェースを提供します。 http://rack.rubyforge.org/ Rack のインストール gem install rack Rack の簡単な始め方 Rack を使うには、まず call されるアプリケーションを書きます。call メソッドを定義し、引数に env を取ります。 # app.rb require 'rack' class TinyCaller def call(env) [200, {'Content-Type' => 'text/html'}, ["Hello, World."]] end end 続いて、Rack を使うための DSL ファイルとなる .ru ファイルを作成します。 # tiny

  • 無限リストの代替 - かきにっき

    ただ単に,無限の範囲を扱えればいい場合はRangeでOK. p (1..(1/0.0)).each {|i| break i if i * i > 1000} でも,例えば3or5の倍数の無限リストみたいなのが欲しいときは,この方法では無理っぽい. Infinityを表す定数が見つからなかった.どなたかご存知でしたら教えて下さい. (1/0.0)がなんかおかしい.

    無限リストの代替 - かきにっき
    walf443
    walf443 2008/03/06
    へぇ
  • RSpecの標準Matcher一覧表 - 本当は怖いHPC

    追記2(2015/09/08)ありがたいことに、未だにこの記事をブックマークしてくださる方がいらっしゃいますが、2008年に書いた記事なのでご注意下さい。内容はアップデートしていません。私自身はすでにRubyを使っていません。 追記:古い情報ですので、記事の日付とお使いのRSpecのバージョンを見比べて、参考程度にご覧ください。大部分は通用するはずですが。 Matcherをいちいち調べるのが面倒になって、公式のリファレンスマニュアルは一覧性が低いから、自分で一覧表を作った。 RSpecそのものについては、スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)などをどうぞ。そのうちRSpec on Rails版も作る予定。 名前 not((should_notで使えるかどうかという意味。)) 意味・機能 == ○ ==演算子を利用して比較する。ex

    RSpecの標準Matcher一覧表 - 本当は怖いHPC
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
    walf443
    walf443 2008/02/07
  • RubyGemsのミラーの構築 (システム開発ブログ(仮))

    Rails人気のせいかどうかはわかりませんが、RubyForgeが落ちてて困ることが結構あります。 ローカルにRubyGemsのミラーサーバーをセットアップしておくと便利です。 gemの中にgem_mirrorというコマンドがあるんですが、逐一パッケージを取得しているため効率が悪いです。rsyncの方が効率がいいのでrsyncでミラーする手順です。 1. 以下のコマンドをCronで定期的に実行するように設定します。サーバーに負荷をかけないよう、一日1回程度実行します。 rsync -av --delete rsync://rubyforge.rubyuser.de/gems/ /path/to/mirror_root/gems && wget http://gems.rubyforge.org/yaml -O /path/to/mirror_root/yaml 2. Webサーバーに/pa

    walf443
    walf443 2008/02/02
    gemのミラーの構築の仕方
  • Evan Weaver

    I'm Evan Weaver, an engineer, founder, and angel investor in software infrastructure, developer tools, deep tech, AI, and adjacent markets. I've always hacked, modified, and programmed everything I could get my hands on. I got involved in startups in the web 2.0 days and was employee #15 at Twitter. My team scaled the website and API from a barely functional Rails app to a distributed service arch

    Evan Weaver
    walf443
    walf443 2008/01/23
    libmemcachedを使ったMemcachedクライアントライブラリ。同時に使わないとはいっても後発なのだから名前空間考慮してほしいなぁ。。。
  • capsctrl - DesignPatternsInRuby

    kdmsnr Rails勉強会でDesignPatternsInRubyのまとめって需要あんのかな。時間内けど。05:08 PM January 17, 2008 lchin @kdmsnr ある。良書だと聞いたし。 05:13 PM January 17, 2008 shachi @kdmsnr ある。良い。 05:16 PM January 17, 2008 poppen @kdmsnr 聞きたいっす 05:20 PM January 17, 2008 kakutani @kdmsnr ぼくが聞きたいです! 05:48 PM January 17, 2008 良書なの??? 2007/12/XX Addison Wesley Professional $44.99 / ¥5,824 384ページ Patterns and Ruby ... Pattern入門、Ruby入門 Patte

    walf443
    walf443 2008/01/20