タグ

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

  • GitHubの彼と自分を比べて何になるの?

    過去の自分と今の自分を比べてみてそこに何か変化があったとき、人は生きていることを実感します。UNIXを作った人達は自分たちが生きているということをコンピュータスクリーン上で実感したくて、「diff」というツールを作りました。diffがあれば簡単に一年前の自分と今の自分を比べられるのです。 % diff -u me_in_last_summer.txt me.txt --- me_in_last_summer.txt 2013-07-03 18:17:21.000000000 +0900 +++ me.txt 2014-07-03 18:17:21.000000000 +0900 @@ -1,3 +1,4 @@ My name is Charlie. I can do a handstand. -I hate carrots. +I love carrots. +I speak Japane

    chezou
    chezou 2014/07/04
    便利gemだ
  • RubyのHashの秘密 その2

    fib = Hash.new { |h,k| h[k] = h[k-1] + h[k-2] } .tap { |h| h.update 0=>0, 1=>1 } t = Time.now puts fib[10] puts fib[100] puts fib[1000] puts "#{Time.now - t} sec" # >> 55 # >> 354224848179261915075 # >> 43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795

    chezou
    chezou 2014/06/13
    default_procで再帰だと...
  • 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を制す(嘘)
    chezou
    chezou 2014/04/29
  • 落ちていくRubyistのためのMethopオブジェクト

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

    落ちていくRubyistのためのMethopオブジェクト
    chezou
    chezou 2014/04/21
    これ、#oedo04 でみたTipsの応用編だ
  • togglateをHTMLタグに暫定対応しましたのお知らせ

    翻訳作成を支援する「togglate」のversion0.1.5をリリースしました。 togglateはMarkdownで書かれたオリジナルテキストから原文をそのセンテンスごとに抜き出して、翻訳のベースとなるテキストにhtmlのコメントでラップして埋め込むものです。 MarkdownテキストにはHTMLタグをそのまま記述できますが、togglateではこれを上手くラップできませんでした。バージョンにより「暫定的」ですがこれに対応しました。 「暫定的」というのは、「最外郭のタグ以外がインデントされた」HTMLブロックのみが対象という意味です。つまり、 <div> <table> <tr><th>Header</th></tr> <tr><td>Data</td></tr> </table> </div>

    chezou
    chezou 2014/04/09
    おー!/jekyllの翻訳htmlなのが辛いの思い出した…
  • Sinatraが、Jekyllが、オープンソース翻訳プロジェクトが、今静かに動き出している

    Sinatraの日語ドキュメント 私は以前の記事で、軽量なWEBサイト構築DSLであるSinatraプロジェクトにおけるドキュメントの日語版作成が滞っていたので、私がそれを一歩進めたら彼に愛されたということを書きました。 英語圏のオープンソースプロジェクトに貢献する最も簡単な方法またはsinatra/README.jp.mdまたは彼はなぜ私を愛するようになったか その後、このプロジェクトでは複数の日語を扱える方たちがそのメンテナンスを継続下さっていて、オリジナルドキュメントの更新がマージされると速やかに日語版の更新が作成され、またときとして、その更新版に間違いが見つかると別の方がこれを指摘または修正する、という理想的な環境になっています。私のケアレスなミスも随分と直して頂きました。 Jekyllの日語ドキュメント ところで、このブログの構築にも利用しているJekyllという静的サ

    Sinatraが、Jekyllが、オープンソース翻訳プロジェクトが、今静かに動き出している
    chezou
    chezou 2014/04/03
    動きが速くて凄い!
  • 素晴らしいオープンソースプロジェクトにおける翻訳者たちの憂鬱とその緩和

    素晴らしいプロジェクトには素晴らしいドキュメントが付き物です。この素晴らしいプロジェクトの素晴らしいドキュメントを、我らが素晴らしい母国語で読めたらなんと素晴らしいことかと願う開発者は少なくないでしょう。そしてそこにはその願いを叶える素晴らしい翻訳者たちが多数いるのです。なんと素晴らしい! 素晴らしいプロジェクトには素晴らしいコントリビューターが多数いて素晴らしい新機能が次々と追加されます。そしてその機能の追加の度に素晴らしいドキュメントにはそれらの素晴らしい機能の解説が次々と追加されていくことになります。なるほど素晴らしい! しかしこれがドキュメントの素晴らしい翻訳者たちを苦しめるのです。ほぅ素晴らしい! 彼らを苦しめる最大の要因は、オリジナルと翻訳ドキュメントとの対応関係が保証されていないことに起因します。オリジナルが複数回改訂されたとき、現在の翻訳ドキュメントがどのオリジナルに対応す

    chezou
    chezou 2014/04/01
    おお!素晴らしい対応来た!
  • DRY重患者RubyistのためのNullObjectパターン

    以前私はRubyistはDRY症候群に掛かっているという記事を書いた。 RubyistたちのDRY症候群との戦い 要約するとDRYじゃないコードを見るとRubyistはムズムズするといった内容だ。 前回私が書いた記事の中に、次のようなコードが出てきた。 def run @methods.inject(@obj) do |mem, method| if custom = Filter.filters[method] custom.call(mem) else mem.send method end end end Rubyでパイプライン? これは@methodsに格納したメソッドを@objに対し順次呼び出すが、同名のフィルタがFilter.filtersにあるのならそれをcallする、といったコードである。 あなたが重度のDRY症候群に掛かっているなら、このコードを見てムズムズしているに違い

    chezou
    chezou 2014/03/07
    この間kawasaki.rbで話題になってたnaughtこれか
  • 英語圏のオープンソースプロジェクトにおける翻訳ドキュメントの問題点とその解決のための一方策(仕切り直し版)

    (追記:2014-2-26) 自動翻訳機能を追加しました。 翻訳ドキュメント作成支援ツールTogglateで翻訳要らず? 少し前にオープンソースプロジェクトにおける翻訳ドキュメントの作成における問題点とその解決案について記事を書いたんだけど、要は翻訳ドキュメント内に原文をそのセンテンスごとに埋め込んで、原文と訳文の対応付けを保証しつつこれをトグル表示させることで原文が翻訳ドキュメントの表示上の邪魔にならないようにするといったもので、そのときに併せてこれをスクリプトで実現したtogglateというツールも作ってそのツールとgithub向けmarkdownのパーサーであるgithub-markdownを使ってmarkdownによるオリジナルドキュメントからhtmlによる翻訳ドキュメントを生成するプロセスについても解説したんだ。 英語圏のオープンソースプロジェクトにおける翻訳ドキュメントの問題点

    英語圏のオープンソースプロジェクトにおける翻訳ドキュメントの問題点とその解決のための一方策(仕切り直し版)
    chezou
    chezou 2014/02/17
    これは素晴らしい!
  • 英語圏のオープンソースプロジェクトに貢献する最も簡単な方法またはsinatra/README.jp.mdまたは彼はなぜ私を愛するようになったか

    今年はもう少しまじめにWebフレームワークというものを勉強しようと考えました。 Railsは私にはちょっと敷居が高いので、軽量WebフレームワークであるSinatraを理解することに決めました。今までにSinatraを使ったことは何度かありますがSinatraを知っているとはいえない状況でした。 理解のために、まずは公式サイトのドキュメントを読むことにしました。 サイトのトップにはプロジェクトのREADMEが掲載されており、そのページを開くと実に9000ワード3000行にも及ぶ、充実した内容の機能解説が目に飛び込んできました。 その分量に圧倒されながらも、ページのヘッダ部分をよく見ると他言語によるREADMEへのリンクが張られていることに気づきました。そして有難いことに、その中には日語版が含まれていました。 迷うことなく私は日語版のページを開きました。そして愕然としました。 Sinat

    英語圏のオープンソースプロジェクトに貢献する最も簡単な方法またはsinatra/README.jp.mdまたは彼はなぜ私を愛するようになったか
    chezou
    chezou 2014/01/23
    いい話
  • RubyユニバースをGraphvizで視覚化する

    (追記:2014-3-3) Gvizについてのまとめ頁を作りました。 Gvizの目次 - Rubyの世界からGraphvizの世界にこんにちは! 今日Rubyのクラスツリーを手書きでグラフ化している記事を見かけた。 A diagram of the Ruby Core object model - Jerome’s Adventures in Rubyland これを見てそういえばGraphvizのRubyによるラッパーを書いたのに未だRubyのクラスツリーをグラフ化していないことに気付いた。 melborne/Gviz gviz | RubyGems.org | your community gem host そしてRubyをグラフ化するならやっぱりRuby自身に書いてもらうのが一番だと思った。彼女も20才になったことだし。 早々gem install gvizでgvizを入れて次のよう

    chezou
    chezou 2013/10/19
    gviz gem知らんかった
  • 今年の冬休みに電子書籍であなたがRubyを習得しなければいけないたった一つの理由

    冬休みです。多忙なあなたがまとまった自由時間を取れる唯一のチャンスです。こんなときは、遊んではいけません。なぜならその消費方法があなたの未来を決定付けるからです。もちろん、家族や両親や犬の世話をしてもいけません。寝正月などもっての外です。それはあなたの未来のための時間なのです。 そう、この時間を使ってあなたは学習するのです。 今年の冬こそはプログラミング言語を習得するのです。なぜならプログラミング言語を習得すれば、お見合いのときに「LispとRubyを少々」という相手に対して臆することなく「ほほぅでは関数型にも興味をお持ちかな?」などと返すことができるのです。 プログラミング言語といったら「Ruby」です。なぜならそれは日人が作った言語だからです。国語の勉強をせずにいきなり外国語を学ぶ人はいません。事情はプログラミング言語の世界でも同じです。ですからまずは国産言語「Ruby」を学ぶべきな

    chezou
    chezou 2013/04/23
    読みたい本が結構あるなー
  • 知って得する!55のRubyのトリビアな記法

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

    chezou
    chezou 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

    chezou
    chezou 2013/02/25
    楽しい!!!
  • Rubyを使って「なぜ関数プログラミングは重要か」を読み解く(改定)─ 前編 ─ 但し後編の予定なし

    2年ほど前に書いた記事を電子書籍化して「M’ELBORNE BOOKS」で販売するために全体的な見直しを行なって入稿する段になって、これにはベースとなっている他者の論文があって言ってみればこの記事はそのマッシュアップになっているんだけれども、その著者の許可もなくその表現が全く別物だとしてもその主張のあらすじが残っている限りにおいてこれを販売することが果たしていいことなのかという思考に遅ればせながら陥り、それが仮に法的に問題ないとしてもなんだか一表現者の行為としての妥当性を幾分欠いているという結論に至って販売を思い留まった。かと言って折角書き直したものをこのままお蔵にするのもなんだか寂しいなあという気分も一方であり、まあ原作者の意に反したものでもないだろうからブログの記事なら許してくれるよねもう2年前にも書いちゃってるしという勝手な解釈の下、ここにその記事を公開しましたのでお時間の許すRub

  • 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個もの異なる名前のメソッドがあるのです。各メソッド名は、その動作や機能を端的に表現したものでなければならないので、その一つ一

  • 1