タグ

ブックマーク / melborne.github.io (16)

  • Rubyでオブジェクトの特徴的なメソッドを知りたい

    オブジェクトがどんな挙動をするのか、つまりそのオブジェクトの特徴的なメソッド群をさっと知りたいとします。そんなとき自分はObject#methodsを呼びます。 irb> [1,2,3].methods => [:inspect, :to_s, :to_a, :to_ary, :frozen?, :==, :eql?, :hash, :[], :[]=, :at, :fetch, :first, :last, :concat, :<<, :push, :pop, :shift, :unshift, :insert, :each, :each_index, :reverse_each, :length, :size, :empty?, :find_index, :index, :rindex, :join, :reverse, :reverse!, :rotate, :rotate!, :s

    riywo
    riywo 2013/09/26
  • メソッドの使い方もRubyに教えてほしい

    Rubyの世界には「RubyのことはRubyに聞け」という格言があります1。 この格言に従い、早速Arrayクラスがどんなメソッドを持っているかRubyに聞いてみます。irbを使います。 % irb irb> Array.instance_methods(false) => [:inspect, :to_s, :to_a, :to_ary, :frozen?, :==, :eql?, :hash, :[], :[]=, :at, :fetch, :first, :last, :concat, :<<, :push, :pop, :shift, :unshift, :insert, :each, :each_index, :reverse_each, :length, :size, :empty?, :find_index, :index, :rindex, :join, :reverse,

    riywo
    riywo 2013/09/05
  • Ruby標準添付ライブラリcsvのCSV.tableメソッドが最強な件について

    ─ 問題1 ─ data.csvファイルには、5人のプレイヤー(Alice, Bob, Jimmy, Kent, Ross)が二種類のゲーム(gameA, gameB)をプレイした結果が次のような形で格納されている。各ゲームの平均点を求めよ。 data.csv player,gameA,gameB Alice,84.0,79.5 Bob,20.0,56.5 Jimmy,80.0,31.0 Kent,90.5,15.5 Ross,68.0,33.0 data = File.read('data.csv') headers, *scores = data.lines.map { |line| line.chomp.split(',') } scores # => [["Alice", "84.0", "79.5"], ["Bob", "20.0", "56.5"], ["Jimmy", "80

    riywo
    riywo 2013/07/05
  • ねえRuby、どこまでが君でどこからが内部DSLなの?

    Rubyは内部DSL(Domain Specific Language)に向いている言語と言われます。Rake, RSpec, Rack, Sinatraなどは内部DSL on Rubyの代表的なサンプルです。Rubyの構文のユルさとメタプログラミングが内部DSLを容易にするんですね。 しかし正直僕は、何が内部DSLで、何が内部DSLでないのかがわかっていません。人が何をさして「これは内部DSLである」と言っているのかがよくわかりません。 そんなわけで… 以下では、Userクラスの設計を通して内部DSLらしきものを作ってみます。このイテレーションに対して「ここからが内部DSLだよ」「これは内部DSLとは呼ばないよ」と、誰か僕に優しく教えてくれませんか? Userクラスの作成 Userクラスはユーザ情報を管理するクラスです。ファイル名はuser.rbとします。 まずはユーザの登録機能を作りま

    riywo
    riywo 2013/06/28
  • ギットハブにはてブとはてスタを殺されたので、このブログの人気記事一覧を作りました。

    セキュリティ対策としてのGitHub Pagesのドメイン変更によりこのブログの「はてなブックマーク」「はてなスター」が頓死しました。このブログは「はてなダイアリー」から移管したという歴史があるので、ブクマに関しこれで2度目の死を迎えたことになります。旧ドメインから新ドメインへはリダイレクトが張られているので、ブクマから記事へのアクセスは問題ありませんが、記事からブクマへの道が閉ざされました。過去のブコメを眺めるのが好きだったのに。今後もカスタムドメインを使う予定はないので、将来においても同じような悲劇が起こる可能性がありますが、今後もこの試練を受け入れようと思います。 はてなスターに関しては、今までも挙動がおかしいなどの問題もあったのでこれを機に設置を止めることにしました。今まで星をありがとう。 とは言っても、過去のブクマを全く参照できないというのも寂しすぎますよね。 そんなわけで… 過

    riywo
    riywo 2013/04/16
    あるあるですね
  • Rubyではじめてのコードゴルフ

    ─問題─ 次の文章における最長単語を出力する最短のコードを書きなさい(文章はコードに含まれていること)。 Lorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur Excepteur sint oc

    riywo
    riywo 2013/04/11
  • 知って得する!55のRubyのトリビアな記法

    Rubyはたのしい言語です。Rubyを触っているとマニュアルにも書いていない「小さな発見」に遭遇することがよくあります。このような「発見」は、プログラムの質や効率の改善には直結しないかもしれません。いや、むしろチームプログラミングでは妨げになる可能性すらあります。しかしその一方で、言語自体が自分の知らない領域を持ち続けていることが、その対象に対する興味を失わせないための大きな要因である、というのもまた疑いのない事実なのです。つまり「発見」はたのしさに直結しているのです。 このブログにおいて「知って得するRubyのトリビアな記法」というタイトルで、今まで3回記事を書きました。 “知って得する21のRubyのトリビアな記法” “第2弾!知って得する12のRubyのトリビアな記法” “第3弾!知って得する12のRubyのトリビアな記法” これらのトリビアには、ネット検索で見つけたもの、Twitt

    riywo
    riywo 2013/03/05
  • Rubyのcaseを〇〇(言語名)のswitch文だと思っている人たちにぼくから一言ガツンと申し上げたい

    Rubyのcase」を一瞥し「あー要は〇〇(言語名)のswitchね」などと早合点し、その後もその真の価値を知ることなく一生を終えるプログラマが近年跡を絶たない。加えて、「今更条件分岐?RubyはOOPなんだからポリモフィズムじゃね?」とか「HashにProc突っ込んでcallするのがオレ流。」とかうそぶく人たちもまた増加の一途を辿っている。 そんな世の中にあって、ぼくは一言、できればガツンと一言申し上げたい。生まれも育ちもRubyなぼくから、是非ともそんな人たちに「Rubyのcase」について一言申し上げておきたい。 ─ 問題1 ─ 名前name、レベルlevel、ポイントpointの各属性を持った複数のCharacterオブジェクトcharlie, liz, benがある。 class Character < Struct.new(:name, :level, :point) def

    riywo
    riywo 2013/02/26
  • 1から始めるRuby (スライド版)

    ShowOffというRuby製のプレゼンソフトがあります。ShowOffではプレゼンスライドをmarkdownで書いて、Sinatraアプリとして簡単に実行できます。Sinatraですから当然、Herokuにも簡単にデプロイできます。 スライド版 プレゼンには全く縁はありませんが、スライド作りが面白そうだったので、1つ作ってHerokuにデプロイしてみました。ネタは1年くらい前にブログで書いた「1から始めるRuby」です。 「1から始めるRuby」 on Heroku 見てくれる人がいたらうれしいですが、現状ではSafariでしかスライドのコントロールがうまくできません。僕の環境(OSX Snow Leopard)のChromeおよびFirefoxではコントロールが効きません(但し、ページを開いた後ブラウザの戻るを押すことで自動再生はできます)。解決策ご存知の方おられましたら助けてください

    riywo
    riywo 2013/02/08
  • 東京の地下鉄をGviz(Ruby Graphviz Wrapper)で描く

    (追記:2014-3-3) Gvizについてのまとめ頁を作りました。 Gvizの目次 - Rubyの世界からGraphvizの世界にこんにちは! 全国の駅情報を提供する『駅データ.jp』という素晴らしいサイトがあります。無料でダウンロードできるCSV形式の駅データには各駅の管理鉄道会社や路線の情報だけでなく、駅の経度・緯度情報までもが含まれています。マコトニスバラシイ。イママデシラナカッタノガハズカシイ。 そんなわけで… 今回はGvizを使って、東京の地下鉄、すなわち東京メトロ+都営(東京都交通局)の路線図に挑戦してみます。 駅データの取得 まずは駅データを取得します。先のサイトのダウンロード頁からマスターデータ(m_station.csv)をDLします。サイトの仕様書頁にあるように、各駅情報は次の14フィールドで構成されています。 データ仕様 1. 鉄道概要コード 2. 路線コード 3.

    riywo
    riywo 2012/10/03
    萌える!!!
  • Rackをminifyした僅か100行のLackで学ぶRackの中身

    「エラーメッセージから学ぶRack最初の一歩」および「エラーメッセージから学ぶRack - Middlewareの魔法」の続きです。 前2の記事で、Rackはrackupコマンドを起動すると、defaultでconfig.ruを読み込みWebサーバを起動するということが分かりました。また、config.ruの中でuseを使ってmiddlewareを指定すると、Webアプリをラップして内側から外側に向けてそれらの#callを順次呼び出すということも分かりました。ちなみに僕はこの呼び出しスタイルを今後「マトリョーシカ呼び出し」と呼ぶことにしました。 ここで2点気になることがあります。config.ruはRubyスクリプトです。rackupコマンドの実行からRackはどうやってこのファイルを実行しているのでしょうか。まあ簡単に想像はつきますが(エバるほどではない)、これが1点目です。もう1点は

    riywo
    riywo 2012/08/09
  • Ruby、君のオブジェクトはなんて呼び出せばいいの?

    Rubyには大量のメソッドがあります。次のコードでRuby1.9.3に含まれるメソッド数を数えたら単純合計で1659個、ユニーク数(同名を1と数えて)で937個と出力されました。 all_methods = ObjectSpace.each_object(Module).flat_map do |c| c.methods(false) + c.instance_methods(false) end.reject { |m| "#{m}".start_with? '_deprecated' } all_methods.size # => 1659 methods = all_methods.uniq methods.size # => 937 つまりRubyには、937個もの異なる名前のメソッドがあるのです。各メソッド名は、その動作や機能を端的に表現したものでなければならないので、その一つ一

    riywo
    riywo 2012/07/17
    おもしろい!
  • 30分のチュートリアルでJekyllを理解する

    (追記:2013-05-20) 記事はJekyllバージョン0.12.0に対応しています。Jekyllバージョン1.0のリリースに伴い、記事を改訂した記事を投稿しましたので、最新版に対応したチュートリアルについてはそちらを参照下さい。 “Jekyllいつやるの?ジキやルの?今でしょ!” (追記:2012-12-07) 記事を電子書籍化しました。「Gumroad」を通して100円にて販売しています。内容についての追加・変更はありませんが、メディア向けの調整および誤記の修正を行っています。 電子書籍「30分のチュートリアルでJekyllを理解する」EPUB版 このリンクはGumroadにおける商品購入リンクになっています。クリックすると、オーバーレイ・ウインドウが立ち上がって、この場でクレジットカード決済による購入が可能です。購入にはクレジット情報およびメールアドレスの入力が必要になりま

    riywo
    riywo 2012/06/28
  • 一生涯はてな記法しますか?それともMarkdownしますか?

    はてなダイアリー はてなダイアリーでははてな記法という、HTMLの簡略記法が使えます。この記法を利用することで簡単に整形された日記を書くことができます。私も6年間はてなダイアリーと、はてな記法のお世話になりました。 しかしはてな記法は、はてな独自の簡略記法なので他では使えません。従って一つの不安がよぎります。 この先もし10年、20年とブログを書き続けるとしたら、それははてな記法でいいのかと。 はてなダイアリーには別の不満もあります。次のようなものです。 HTML整形後の文章をローカル環境で確認できない。 記事に変更が生じてWeb上で直接編集した場合に、ローカルデータと内容が不一致となり、その管理が煩雑となる1。 あんなにサンプルがあるのに、イケてるデザインが見当たらない2。 基的にサイトが重い。 Github Pages + Jekyll そんな理由から私はGitHub PagesとJ

    riywo
    riywo 2012/06/28
    魅力的だな。。。
  • これからRubyを始める人たちへ

    (追記:2012-12-03) 記事を電子書籍化しました。「Gumroad」を通して100円にて販売しています。詳細は文末に追記しましたので、購入ご検討のほどよろしくお願いしますm(__)m 電子書籍「これからRubyを始める人たちへ」EPUB版 Rubyの特徴 Rubyは、まつもとゆきひろ氏(通称Matz)により設計されたオブジェクト指向プログラミング言語です。Rubyの特徴を一言で言うならば、それは「間口が広くて奥が深い言語」ということになります。 「間口が広い」というのは、インタフェースがシンプルで誰でもが簡単に使い始められることを意味します。「奥が深い」というのは、プロフェッショナルによる長期使用に耐えうる物の言語であるということを意味します。「間口が広い」ということと「奥が深い」ということは来競合する概念ではありませんが、その両方をバランスよく組み合わせるには、対象に対する

    riywo
    riywo 2012/06/28
  • irbから学ぶRubyの並列処理 ~ forkからWebSocketまで

    (追記:2012-12-13) 記事を電子書籍化しました。「Gumroad」を通して100円にて販売しています。内容についての追加・変更はありませんが、文体の変更、誤記の修正およびメディア向けの調整を行っています。 電子書籍「irbから学ぶRubyの並列処理 ~ forkからWebSocketまで」EPUB版 このリンクはGumroadにおける商品購入リンクになっています。クリックすると、オーバーレイ・ウインドウが立ち上がって、この場でクレジットカード決済による購入が可能です。購入にはクレジット情報およびメールアドレスの入力が必要になります。購入すると、入力したメールアドレスにコンテンツのDLリンクが送られてきます。 購入ご検討のほどよろしくお願いしますm(__)m 関連記事: 電子書籍「irbから学ぶRubyの並列処理 ~ forkからWebSocketまで」EPUB版をGumroad

    riywo
    riywo 2012/06/28
  • 1