タグ

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

  • Rubyによる暗黙のFizzBuzzの世界

    class FizzBuzz def self.to_proc ->n{ case 0 when n % 15 then :FizzBuzz when n % 3 then :Fizz when n % 5 then :Buzz else n end } end end puts (1..100).map(&FizzBuzz) # => [1, 2, :Fizz, 4, :Buzz, :Fizz, 7, 8, :Fizz, :Buzz, 11, :Fizz, 13, 14, :FizzBuzz, 16, 17, :Fizz, 19, :Buzz, :Fizz, 22, 23, :Fizz, :Buzz, 26, :Fizz, 28, 29, :FizzBuzz, 31, 32, :Fizz, 34, :Buzz, :Fizz, 37, 38, :Fizz, :Buzz, 41, :Fizz

  • Ruby de Streem

    のっぴきならない事情で暫くここを離れてたけど 戻ってきたらMatzが新言語を作ってた 僕がいないうちにRubyは捨てられてしまったの? 僕が暫く目を離しているうちに世の中もMatzも変わってしまって もうだれもRubyを愛さなくなってしまったの? matz/streem Streem - stream based concurrent scripting language Streem is a concurrent scripting language based on a programming model similar to shell, with influences from Ruby, Erlang and other functional programming languages. In Streem, a simple cat program looks like th

  • Ruby製WebSocketアプリを最速でHerokuにデプロイする5つのステップ

    テレビ放送が駄目になった」と言われて久しいですがその理由ははっきりしています。それは放送というものがリアルタイム・コンテンツを扱う媒体だからです。リアルタイム・コンテンツはユーザの自由を奪います。ある番組を見るためにユーザはその時間テレビの前に固定化されます。録画放送番組は字義的にはバッファード・コンテンツ1と言えますが、ユーザがそのコントロール権を持っていないつまりその視聴タイミングの制御を製作者側が持っているので、これはリアルタイム・コンテンツなのです。ユーザの唯一の武器はDVDレコーダによる制約の中のローカルバファリングのみです。 現在のWebは主としてバッファード・コンテンツを扱う媒体です。バッファード・コンテンツの世界ではユーザは好きな時間に好きなだけコンテンツを視聴できるという自由が与えられます。コンテンツの製作者側・提供者側にそのタイミングをコントロールする自由はありません

    Ruby製WebSocketアプリを最速でHerokuにデプロイする5つのステップ
  • ターミナルにデジタル式デカ文字を出力する「digi_moji」の紹介

    require "colcolor" str = "Languages: Python Lisp Ruby Perl Haskell Erlang" puts str.colco(:yellow, :blue, :magenta, :red, :yellow, :blue, :red) puts str.colco(:green, :blue, cyclic:true) puts str.colco(:red_bold, regexp:/ruby/i) puts str.colco(:black_magenta, cyclic:true, regexp:/^\w+|[A-Z]/) このデモ的なものを作って宣伝できないかと考えたわけです。 それで「digi_moji」なるツールが生まれました。 で、ステマをしたのですが… わかりやすいREADME.mdの書き方がわかりません。どうしたらいいで

    ターミナルにデジタル式デカ文字を出力する「digi_moji」の紹介
  • Ruby的即時関数

    JQuery = Class.new { define_singleton_method(:click) { |name, &blk| blk.(name); } } alias :alert :puts method(def _ _ _.click("Charlie", &->name{ alert "Hello, " + name + "!!" }); end).(JQuery) # >> Hello, Charlie!!

    supermomonga
    supermomonga 2014/07/11
    method に def statement 渡すの良い
  • Rubyのメソッド引数は奥が深い(その2)または別のフィボナッチ

    ─ 問題 ─ n番目のフィボナッチ数を返すメソッドfibを定義しなさい。但し、メソッドの実装は一文字とする。 解答例は下。 ─ 解答例 ─ def fib(n, m=n==0||n==1 ? n : fib(n-1)+fib(n-2)) m end (1..20).map { |n| fib n } # => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765] def fib(n, m={0=>0,1=>1}.tap{|s|s.default_proc=->h,k{h[k]=h[k-1]+h[k-2]}}[n]) m end fib(1000) # => 434665576869374564356885276750406258025646605173717804024

    supermomonga
    supermomonga 2014/07/03
    たまにやる(やらない)
  • Procを制する者がRubyを制す(嘘)

    RubyのProcの説明は巷に溢れているから今更感があるけどここ数回Procを使ったネタを書いていたらProcがかわいくなっちゃってもっとみんなにもProcのこと知ってもらいたいという欲求が生まれてきたからProcについての基的なことを僕なりのやり方でここに書くよ。長いよ。 Rubyの関数(メソッド) Rubyにおいて関数(メソッド)はファーストクラス(オブジェクト)ではありません。つまり文字列や数字や配列などの他のオブジェクトとは異なって、Rubyではそれを直接変数に代入したり、他の関数に渡したりすることはできません。 def square(n) n * n end sq = square # squareメソッドを変数sqに代入してみる # ~> -:1:in `square': wrong number of arguments (0 for 1) (ArgumentError)

    Procを制する者がRubyを制す(嘘)
    supermomonga
    supermomonga 2014/04/28
    Procべんり(かなり)
  • RubyにおけるYet Another関数合成

    Rubyにおける格的な関数合成については、既に@yuroyoroさんのlambda_driver.gem があるので、僕の出番はありませんが。まあいつもの様にふざけたものなら出せますよ、ということで…。 ProcCompressor こういった実装です。 使い方 使い方はこうです。 最初に圧縮するProcの数を決めてインスタンスを生成し、これにProcCompressor#<<でProcオブジェクトを順次圧縮していきます。

    supermomonga
    supermomonga 2014/04/26
    おもしろい!
  • 落ちていくRubyistのためのMethopオブジェクト

    RubyistはどんどんLazyになっていってmapにブロック渡すのも面倒という古今です。 こう書けばいいところを、 %w(ybur si citsatnaf egaugnal).map { |str| str.reverse } # => ["ruby", "is", "fantastic", "language"]

    落ちていくRubyistのためのMethopオブジェクト
  • Rubyでワンタイムメソッドを実装して「スパイ大作戦」を敢行せよ!

    Rubyにはシングルトンメソッドと呼ばれる機能があります。これは、特定のオブジェクトにだけ実装されるメソッドのことです。 class User < Struct.new(:name, :age, :job) end charlie = User.new('Charlie', 12, :programmer) liz = User.new("Liz", 15, :teacher) dick = User.new("Dick", 31, :doctor) def charlie.passcode '22360679' end def liz.passcode '17320508' end charlie.passcode # => "22360679" liz.passcode # => "17320508" dick.passcode # => # ~> -:18:in `<main>':

    Rubyでワンタイムメソッドを実装して「スパイ大作戦」を敢行せよ!
  • 松浦亜弥とRubyと私

    「松浦亜弥」という人がいて僕の記憶の中でこの人はこの10年間はるな愛のものまねに代表されるキュートなアイドルだったんだけどふとしたキッカケからYOUTUBEで彼女が松たか子の「みんなひとり」を歌っているのを聴いてその歌の巧さに驚愕して他の歌もいろいろ聴いてみてその結論として彼女が「物のシンガー」であることを確信するに至った。彼女の紡ぎだすひとつひとつの音が繊細さと力強さの間で絶妙に丁寧にコントロールされていてそれが全体として日語の歌を説得力のある表現に昇華させる力につながって当に素晴らしいと思った。興味を持って彼女のことを調べるともう10年も前から聴かせる歌を歌うようになっていて一方でここ数年はメディアの露出も大分減って27歳になって結婚もしてこの3月でファンクラブも終わるということを知った。彼女の歌の素晴らしさを今更知ったことを悔しく思うけどその一方で今それを知ることができて当に

    supermomonga
    supermomonga 2014/03/17
    参考になるRuby記事
  • 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

  • RubyでANSIカラーシーケンスを学ぼう!

    CUIの世界は地味な世界です。真っ黒なターミナル画面に単一色の文字列。それが却って落ち着くという向きもありますが、今となってはその地味さは際立っています。 ターミナルで色を使う方法を学ぶことで、新しい世界が開けるかも知れません。 ようこそANSIカラーの世界へ! エスケープシーケンス ターミナルで色を使うためにはエスケープシーケンスというものを利用します。エスケープシーケンスはターミナル上で色を含む特定の制御を実現するための特殊な文字列です。 これによりターミナル上に赤文字で「hello」と出力されます。この”\e[31m” “\e[0m”の部分がエスケープシーケンスです。”\e[31m”はそれ以降を赤文字で出力する制御命令、”\e[0m”はそれ以降を初期状態へリセットする制御命令です。 シーケンス中の数字において、30~37は文字色、40~47は背景色、0~9は文字装飾に割り振られていま

  • Rubyでパイプライン?

    AngularJSというものを眺めていたらその中にビューテンプレートなどで使えるフィルターという概念がでてきて、あーこれLiquidにもあったけどUNIXのパイプラインみたいで面白いなあRubyでできないかなあ、ということでちょっと試してみましたという内容の投稿です。 まあ、メソッドチェーンでいいよ、って話で終わりなんですが。 AngulraJSのFilterというのはビューテンプレートの中で、 {{ 12 | currency }} のようにすると、12がcurrencyフィルタを通って$12.00が出力されるといった代物です。 {{ expression | filter1 | filter2 | filter3 }} のように複数のフィルタを順次適用することもできます。まさにパイプですね。 Rubyでパイプ? でこんな感じのものをRubyで書いてみました。

    supermomonga
    supermomonga 2014/03/06
    いつもながら面白い記事ですごい(とても)
  • 「単語が目に飛び込んできてすごい速度で文章を..」ってやつをRubyでやると...

    こんな感じかな。 ruby -e 'trap(:INT){print"\e[?25h\e[0;0H";exit(0)};x,y=[`tput lines`,`tput cols`].map{|n|n.to_i/2};print"\e[?25l";ARGF.read.scan(/[\w.]+/).unshift(*%w(3 2 1 0 Go!)).cycle{|w|c=w.size/2;w=w.dup;cw=w[c];w[c]="\e[31m#{cw}\e[0m";print"\e[2J\e[#{x};#{y-c}H",w;sleep(0.3)}' TEXT Hosted by Gifzo TEXT Ruby is a dynamic, open source programming language with a focus on simplicity and productivity.

  • Jekyllいつやるの?ジキやルの?今でしょ!

    す、すいません… ベタなタイトルで…。 Jekyll Version 1.0 2013年5月5日にJekyllのVersion 1.0がリリースされました。 Jekyll • Simple, blog-aware, static sites Jekyll 1.0 Released - Musings of Parker J. Moore 2011年12月のVersion0.11.2以降、Jekyllの開発は停滞気味でした。しかし、parkr (Parker Moore)氏がJekyllのcontributorとして参加したことを機に、昨年12月15日頃から新たな胎動が始まり、同22日に大きな問題を解決したVersion0.12.0がリリースされました。その後も怒涛の勢いでコミットが投げられ、遂に、5月5日にVersion 1.0がリリースされたのでした。GithubにおけるCommit A

  • 2013年、僕は74件のRuby関連ブログ記事を書き、5冊のRuby関連電子書籍を出版し、8個のRubygemsを作り、2個のRuby製Webアプリを作った

    これで僕の作ったGemは全部で13個になった([my gems](https://rubygems.org/profiles/melborne ‘’))。まあ小石ばかりだが。10月に入ってから「兎に角作ったものはGemの形で残そう」ということで数が増えた。僕にとって今年は「Gemの年」と言っていい。 各Gemの解説記事を貼っておこう。 Yampla YamplaはYAMLファイルからLiquidで書かれたテンプレートに基いてXMLのようなファイルを出力するツールだ。商品リストのような頁を作るために使う。これはM’ELBORNE BOOKSの頁を用意するために作った。 Rubyで商品リストのようなものを作るときあなたはいつもどうしていますか? Ruby製ドキュメント生成ツール「Yampla」でYAMLファイルからXMLファイルを生成する Flippy FlippyはᏗəʇʇɪʍʇのような上下

    2013年、僕は74件のRuby関連ブログ記事を書き、5冊のRuby関連電子書籍を出版し、8個のRubygemsを作り、2個のRuby製Webアプリを作った
  • RubyによるMarkdownをベースにしたEPUB電子書籍の作り方と出版のお知らせ

    「情報革命」とは何でしょうか。それはネットを介した大量情報の流入による社会生活の変化の連続のことです。情報革命の初期に始まる一つの変化は「見る変化」です。情報を最も効率的に処理できる人間の入力デバイスは「目」であり、そのための環境作りがまず構築されるでしょう。 スマートフォンが携帯電話を駆逐したのは、iPhoneのデザインが素晴らしかったからではありません。人々が大量の情報を処理するためには、非効率な「耳」デバイスを置いて、より効率的な「目」デバイスを活用する必要があったからです。 7インチタブレットの新製品投入が相次いでいます。これは何を意味し、何を駆逐するのでしょうか。そのフォルムを見れば答えは明らかでしょう。それはまさに「書籍」なのです。7インチタブレットは「アトムの読書」を「ビットの読書」にすべて置き換えようとしています。 スマートフォンは、話し言葉を文字化して見るためのデバイスと

  • 僕が考えた最速・最小投資でRubyを学ぶ方法またはステマ乙

    そろそろ軽くRubyをやってみたいけどなんか情報多すぎてどこから手を付けたらいいかわからない、リファレンス的なものとか言語論的なものとかコミュニティー的なものとかの情報は結構あるけど、もっとカジュアルでかと言ってどの言語でも使いまわせる的な説明じゃなくRubyらしさが浮き出てるようなもので、しかもちょっとしたCLIツールとかWebアプリとかを作れる程度に理解の手助けをしてくれるものがほしいけど、今の段階で大枚叩きたくないしという人向けに僕がRubyの道案内を致します。 ステップ1(所要時間:0〜10分、投資額:0円) あなたのコンピュータでRuby2系を使えるようにします。 Macなひと => Mavericksをインストールする。 Windowsなひと => RubyInstaller for WindowsRuby2系をインストールする。 Linuxなひと => ご自由に。 ターミナ

    僕が考えた最速・最小投資でRubyを学ぶ方法またはステマ乙
    supermomonga
    supermomonga 2013/12/25
    この人のRuby記事面白くてかなりすごい(かなり)
  • RubyでFizzBuzz問題を解いて上司に対抗しよう!

    FizzBuzz問題は有名だから、少しプログラムをかじったことがあれば名前くらいは知ってるよね。それを会社の10人のプログラマにテストしてみたら、あまりできがよくなかったという話があるよ。 FizzBuzz問題を使って社内プログラミングコンテストを開催してみた - ITは芸術だ 確かにFizzBuzz問題は一見単純だから、誰でも簡単に解けると思われがちだけど、時間制限付きの抜き打ちテストというかたちでだされたら、頭が混乱して僕もどんな結果になるか心配だよ。 だから上司の嫌がらせで恥をかかされないように、いまからしっかりと予習しておくよ:) 問題の分割 通常1つの問題は複数の小さな問題でできているんだ。だから与えられた問題を読んだとき最初にすべきことは、それを複数の小さな問題に切り分けることだよ。 早速FizzBuzz問題を小さな問題に切り分けてみよう。 僕はFizzBuzz問題は次のような