ruby

関西Ruby会議2017に行ってきた

関西Ruby会議2017に行ってきたのでいつものようにざっくり感想を。 スポンサーセッション - 株式会社Agileware テストコードがないと push できないようにしたり、パフォーマンステストの自動化をしているのがとても良さそう。 具体的にどうやっているのか、…

大江戸Ruby会議 06 に行ってきた

元々行く予定は特になかったのだけど、ujihisa さんに誘われて前日に行くことを決定。枠に余裕があってよかった。 というわけで大江戸Ruby会議 06 に行ってきたよ。いつも通り雑にゆるい感想を。 Docker時代の分散RSpec環境の作り方 - @joker1007 資料: http…

Ruby の Hash で値だけ map で変換したかった

hash = {a: 1, b: 2, c: 3} hash2 = hash.map {|k, v| [k, v * 2] }.to_h p hash2 # => {a: 2, b: 4, c: 6} めんどくさい。Scala には mapValues というのがあるらしい。Ruby で書くならこうかな。 class Hash def map_values(&block) dup.map_values!(&bloc…

Ruby で Haskell や Clojure の iterate

欲しかったので探したけど見つからなかったので書いてみた。 def iterate(init, &block) Enumerator.new do |y| loop do y << init init = block.call(init) end end end p iterate(1, &:succ).take(10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]ブロックを渡してい…

ファイル群を特定のパターンでコピーしたい

どういうことかと言うと、まずグロブパターンにマッチするファイル群があってその各々のファイルを特定のルールで別の場所にコピーしたい。例えば、 A_foo.txt B_bar.txt C_buz.txtってファイルがあって、これを other/A/foo.txt other/B/bar.txt other/C/bu…

Ruby 1.9 用の rubygems が入らない

Gentoo で Ruby 1.9 を入れるに当たって、Ruby 自体は hardmask 外すことで簡単に入って最近まで普通に使ってたんだけど、最近になって dev-ruby/rubygems の ruby19 が何故か入らず gem19 がないため Ruby 1.9 が動かなくなったという現象と戦った際の記録…

Online.sg 第07回 「sinatra」に参加した

今回も野次馬に行って参りました。第7回 テーマ「Sinatra」 - Online.sg 本編 sinatra は使ったことあったんだけど、Haml や AcriveRecord なんてのも使ってて、 Haml は概要を知ってたんだけど AcriveRecord についてはまったく知らなかったのでそこらへん…

るびまゴルフ第7回をやってみた

一行の英単語が標準入力から与えられて、その末尾から 1Byte ずつ伸ばしていく形で文字数分の行を出力して下さい。具体的には hogeという入力に対して e ge oge hogeと出力して下さい。入力は末尾に改行があるとしても無いとしても構いません。両方別々に解…

インターフェースを使わずに Vim スクリプトに他の言語を埋め込む

Vim スクリプトを書いていると、どうしても Vim だけの機能では難しい、または面倒な場面にでくわすことはよくある。特に通信周りなんかはそうだ。 外部コマンド 1 つで済めばいいが、複雑になってくると Ruby などでスクリプトを書きたくなってくる。かと言…

Prime::prime?

Ruby 1.9で require 'prime' すると使える Prime.prime? や Integer#prime? 、見ての通り素数判定メソッドなんだけど、負数を含む 1 以下の値を渡すと true が返ってくる。 何でやねん!と突っ込みながら最新のソースを見てみると、修正した跡を発見、が、何…

Enumerable#each_with_indexが便利すぎる

今更かもしれないけど、感動したのでメモ。リストをeachなどで回すとき、インデックスも一緒に欲しいと言うのはどの言語でも往々にしてある。Javaで書いている時なんかせっかく拡張forで書こうとしたけどしぶしぶ普通のforに戻す、とかよくやる。 そんなとき…

任意単位のDate#step

が欲しくなったので、以下のようにした。 class Date def step(limit, step = 1, method = :next_day) unless block_given? return to_enum(:step, limit, step, method) end da = self op = %w(- <= >=)[step <=> 0] while da.__send__(op, limit) yield da…

Rubyの改行

最近になってRubyを勉強し始めたのだれど、不可解な現象に遭遇した。私は何かとメソッドチェインを繰り返す癖があるので、油断するとすぐに1行が長くなってしまう。 で、これはイカンと適当なところで改行を入れるようにしているのだけど、ご存知の通りRuby…