From Railsconf 2012
Rubyの力はブロックにありと常々主張している。その文脈導入の力。そして、それを陰から支えるのが継続である。 Rubyの力はブロック構文にある。これを単なるlabmdaだとかコールバックだとか言ってしまうのは簡単だが、こういう構文の形をしていることに意味がある。まつもとさんは IPA未踏 千葉滋PM案件報告会 において、「DSLにおいてコンテキストを生成する」という点に着目してこれを説明した。例えば、Rakefileにおけるターゲットがそうであるし、Railsのconfig/routes.rbがそうである。 まつもとさんの言う視覚的に明確な形でコンテキストを導入する力としてのブロックに含まれてしまうのだが、私が常々主張してきたのは File.open のようなリソース管理の方法としてのブロックである。 先日ついつい 愚痴 を書いてしまったけれど、GCな世界で育った初心者はどうもリソース管理
Passing Open Files Between Processes with UNIX Sockets Published on May 07, 2012 by Jesse Storimer I want to share with you today a neat little technique I learned involving UNIX sockets. In the land of Unix everything is a file. This is faithfully mirrored in Ruby with the IO class. The IO class models any so-called files on a Unix system. This includes stuff like File, TCPSocket, UDPSocket, all
In my eBook I’ll explore Ruby internals using an experimental approach. Update: I just setup an email sign up form - if you give me your email address I'll send you one - count ’em - one email messsage when the eBook is finished. You may have noticed I haven’t been blogging here for a while; instead I’ve been working on a new eBook about Ruby language internals. I find this topic fascinating! In f
Carl and I have been working on the plugins system over the past few days. As part of that process, we read through the Rails Plugin Guide. While reading through the guide, we noticed a number of idioms presented in the guide that are serious overkill for the task at hand. I don't blame the author of the guide; the idioms presented are roughly the same that have been used since the early days of R
Current Ruby Releases These are the complete API documents for base classes, modules, and included libraries in the current stables releases of Ruby. Complete API docs for Ruby 3.3.0 Complete API docs for Ruby 3.2.3 Complete API docs for Ruby 3.1.4 Complete API docs for Ruby 3.0.6 Complete API docs for Ruby 2.7.8 Older Ruby Releases Complete 3.2.2 Complete 3.2.1 Complete 3.2.0 Complete 3.1.2 3.1.1
Rubyのヒアドキュメントは便利です。複数行に渡る整形文章を出力するときに、これを使わない手はありません。 class ATool def self.help lines = <<EOS Instruction of `#{self}` `#{self}` is one of a great tool in the world. This helps you a lot on your daily work. Your life will be changed with `#{self}`!! Everyone knows about `#{self}`. So, You can ask them to learn `#{self}` Just Use `#{self}` from Today! EOS lines end end puts ATool.help # >> Instruct
(追記:2013-08-16) 本記事のトリビアを含む55のトリビアを以下の記事にまとめました。 知って得する!55のRubyのトリビアな記法 なぜかトリビア人気が再燃しているよ。 知って得する21のRubyのトリビアな記法 第2弾!知って得する12のRubyのトリビアな記法 これでみんながトリビア好きだということが分かったので、何とか絞り出して第3弾を書いたよ。ここでは第1弾、第2弾で使ったテクニックも使ってるから、知らないテクニックがあったら先に見てもらえるいいかもね。 1. Enumerable#each_with_object Enumerable#mapではブロックの代わりに&付きのシンボルを渡す技が知られているよ。 langs = ["ruby", "python", "lisp", "haskell"] langs.map(&:capitalize) # => ["Ruby"
Ruby 1.8.7 でファイルの行数カウント String#count で改行を数える方法は、 (おそらく)一旦全部読み込むので大きなファイルだとメモリの制約を受ける。 簡単に調べた限りではこの方法は wc -l の出力と同じ。 File#lineno を使う場合は逐次処理なので大きなファイルでも大丈夫。 ファイル数が少ない場合は wc が早いが、 小さなファイルをたくさん調べたい場合は Ruby で読んだ方が速い。 require "benchmark" def lineno_a(path) open(path).each{}.lineno end def lineno_b(path) open(path).read.count("\n") end def lineno_wc(path) `wc -l #{path}`.to_i end def test_lineno(str) pat
Note: This website has been deprecated and is no longer maintained. Many articles found in the Ruby community largely oversimplify the use of DCI. These articles, including my own, highlight how DCI injects Roles into objects at runtime, the essence of the DCI architecture. Many posts regard DCI in the following way: class User; end # Data module Runner # Role def run ... end end user = User.new #
_ Rubyで遅延評価 - delay, force, lazy 正格評価の言語で明示的に遅延評価を行う方法として、Schemeのdelay/forceがある。 Rubyで実装するとこんな感じ。 class Promise NULL = Object.new def initialize(&block) @value = NULL @block = block end def self.delay(&block) new(&block) end def force if @value == NULL @value = @block.call else @value end end end count = 0 x = Promise.delay { count += 1; 1 + 2 } p x.force #=> 3 p x.force #=> 3 p count #=> 1 メモ化してく
Tuesday, April 10, 2012 Extracting Names and Email Addresses from a String A common way for users to enter multiple email addresses is in a format like this: emails = "first last <email1@example.com>, email2@example.co.uk, Name <email3@example.com>, <email4@example.com>" One way to parse it is using a regex to identify all email addresses in the string. This will not validate the format, and it
ファイルに内容を出力 Shell cat hoge.txt >> hoge.log Ruby open("hoge.log", "a+"){|f| p.puts("output lines")} ブロックを使用しない場合 f = open("hoge.log", "a+") f.puts("output line") f.close ディレクトリ配下のファイルの一覧 Shell $ files="`find ./ -name '*hoge*'`" Ruby require 'find' Find.find('./').select{|name| name =~ /hoge/} ファイルの内容を変数に読み込み Shell cat config.txt Ruby ファイルのクローズ処理が必要 f = File.open("config.txt") f.collect { |line| line
孤児プロセスとゾンビプロセスの違いがうまく理解できてなかったけど、ようやく違いを確認することができた。 孤児プロセス 孤児プロセスは、親プロセスがwaitせずに先に逝ってしまった後も走り続けている子プロセス。 Orphan Process とも呼ばれる。 親のいなくなった子プロセスはinitプロセスの子(孤児)になる。 親プロセスが死んで、子プロセスの親が変化する様子を見るには以下のようなスクリプトを実行したあとでファイルをtailすると分かりやすそう。 Process.fork do File.open('orphan', 'a') do |f| loop do sleep 1 # 親プロセスのpidをファイルに書き出す f.puts Process.ppid f.flush end end end sleep 5 このプログラムを実行して、orphanをtail -fで観察していると、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く