タグ

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

  • 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を制す(嘘)
    auient
    auient 2014/05/10
  • Gvizの目次 - Rubyの世界からGraphvizの世界にこんにちは!

    このブログにはGvizに関する大量の記述があるのだけれどもまともにタグ付けされてないサイト検索もできないと非常にアクセスビリティの悪い有り様でまあ来なら気合を入れてひとつその全体解説たる記事を書き下ろしてここに公開!と宣言してついでにEPUBにまとめて一攫千金と相成りたいところ如何せん筆がぁ筆がぁっつって一向に気持ちがそちら方面に向かわずにおるわけで。 そこで代わりといってはなんですが「Gvizの目次 - Rubyの世界からGraphvizの世界にこんにちは!」と題して過去の記事をここにまとめて一覧できるように致しましたのでGvizをご利用頂いていていままで右往左往させられていた方あるいは使い方がわからん何が描けるのかわからん全く意味がわからんという方あるいは将来においてGvizに興味を持たれる可能性のある方居られましたら是非ともこのページを基点として各ページに飛んで頂きたくお願い申し上

    Gvizの目次 - Rubyの世界からGraphvizの世界にこんにちは!
  • 英語圏のオープンソースプロジェクトにおける翻訳ドキュメントの問題点とその解決のための一方策

    (追記:2014-02-17) togglateの仕様を変更しましたので、最新情報については下記記事を参照してください。 英語圏のオープンソースプロジェクトにおける翻訳ドキュメントの問題点とその解決のための一方策(仕切り直し版) オープンソースプロジェクトの大半は英語ベースです。素晴らしいプロジェクトには大概、素晴らしいドキュメントが付属しており、そのドキュメントを読むことがそのプロジェクトに係る技術を理解する第一歩になります。しかし、英語を母国語としない私たちにとって、英語のドキュメントを通して技術を理解することには一定の困難と苦痛が伴います。 このような背景からいくつかのプロジェクトでは、多言語によるドキュメントをそのプロジェクトの一部として含んでいるものがあります。また、それとは別に有志により翻訳が別リソースとして公開されているケースもあります。このような翻訳ドキュメントの存在が非英

    英語圏のオープンソースプロジェクトにおける翻訳ドキュメントの問題点とその解決のための一方策
  • やっぱり通貨換算もターミナルでしたいよね - Google Currency APIをRubyで使う

    Web上には無数の通貨換算ツールがあるけれどもやっぱりターミナル上で簡単に通貨換算できたらうれしいよね。 で手頃なAPIはないかと探していたら次の記事にであったんだ。 Google’s Currency Converter and JSON API 記事によればGoogleが通貨換算のJSON APIを非公式で公開してるそうだよ(ちょっとそのJSON壊れてるようなんだけれども..)。 それでRubyで実装された通貨換算ツールがいろいろあることを承知のうえでまあ何事も勉強だからということでターミナルで簡単に利用できるもう一つの通貨換算ツールを作ったから公開するよ。 melborne/money_exchange money_exchange | RubyGems.org | your community gem host 一応gemにもしたからgem i money_exchangeでインス

    auient
    auient 2013/10/15
  • Rubyの末尾再帰最適化を理解する

    RubyではSchemeなどとは異なって、末尾再帰の最適化を勝手にしてはくれません。 再帰は再帰なんかじゃない!末尾再帰こそが真の再帰なんだ! でもid:athosさんが、Rubyで末尾再帰最適化を実現するコードを書いてくれました。 http://d.hatena.ne.jp/athos/20110119/p1 自分の実力だと一見しただけでは何をしているか理解できなかったので、少し自分用にコードを整理してその処理を追ってみます。 class Module def tco(meth) called = false tmp = nil orig_meth = "orig_#{meth}" alias_method orig_meth, meth private orig_meth define_method(meth) do |*args| unless called called = tru

    auient
    auient 2013/06/21
  • 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

    auient
    auient 2013/05/20
  • 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

    auient
    auient 2013/04/08
    max_by, min_by, group_byとか知らんかった。
  • Graphvizレイアウトサンプル

    (追記:2014-3-3) Gvizについてのまとめ頁を作りました。 Gvizの目次 - Rubyの世界からGraphvizの世界にこんにちは! Graphvizには複数のレイアウトフォーマットがありますが、どれも名前が変わっていて生成されるレイアウトを名前から想像することが困難です。幾つかのレイアウトの説明はGraphvizのサイトに書いてあるのですが、それを読んでもやっぱりピンと来ません。その結果、毎度グラフを作るたびにレイアウトを試行錯誤することになります。 でも、レイアウトはやっぱりサンプルを見るのが一番手っ取り早いですよね。 そんなわけで… Graphvizのレイアウトサンプルを作って、ここに貼っておくことにします。サンプルの作成にはいつもの様にGvizを使います。ちなみにGviz0.1.2では、gvizコマンドの-mオプションでlayouts一覧を表示できるようになりました。

  • Graphvizで作る、私たちの国「日本」の今度こそ本当の姿かたち

    (追記:2014-3-3) Gvizについてのまとめ頁を作りました。 Gvizの目次 - Rubyの世界からGraphvizの世界にこんにちは! 僕は前回、antlaboさんが公開されている全国市区町村の隣接データに基いて、Graphvizで次のような日を作りました。 “Graphvizで作る、私たちの国「日」の当の姿かたち” ええ、これが「日」です。 まあ、これはこれで面白かったのですが、全体的形状としては現実の日国土とは程遠いものとなりました。都道府県の隣接情報に基いて日を書いたときや、州の隣接情報に基いて米国を書いたときには、それなりに上手くいっていたのですが、今回のようにノード数が異常に多いとGraphvizにおける配置演算が難しくなって、隣接ノード間の距離がまちまちになってしまうのです。 それで、各市町村の位置情報があればうまくいくはずということで、どこかにそのような

    auient
    auient 2013/03/25
    こうやって眺めるとrubyのコードは実にエレガントだなあと思う。日本語のコメントはやっぱりほしいけれど。
  • 知って得する!55のRubyのトリビアな記法

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

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

  • Rubyを始めたけど今ひとつRubyのオブジェクト指向というものが掴めないという人、ここに来て見て触って!

    Rubyのオブジェクト指向は一貫性があってわかりやすいという評判だけれども、オブジェクトを意識しない便利な手続き的な書き方もできるからそれがRuby来の姿を分かり難くしているという面もあってその辺でRubyを始めたけど今ひとつ質的なものが見えてこない人たちもいるんじゃないかと思う今日此の頃ですが皆さんいかがお過ごしですか? それで随分と前に僕がRubyを始めてそんなに時間が経っていないときに書いたブログの記事があってそのことを思い出して、読み返してみるとRubyのオブジェクトを中心にしたちょっとユニークな説明になっていてまあ書き足りない部分もあるけれどもあの頃の知識でよく書けてるじゃないのなどと自画自賛しつつ、これは先の「Rubyを始めたけど今ひとつ質的なものが見えてこない人たち」の役にも立つのではないかという発想が生まれて、結果ここにその記事群の文体を変えたり間違いを直したり挿絵

    auient
    auient 2013/02/07
  • 2013年、ITエンジニアは英語を学ぶべきか?

    僕「英語ができるようになりたいんだけど。」 リコ「どうしたの急に?」 僕「この記事を読んだんだ。」 2013年、ITエンジニア英語を学ぶべきか? - QA@IT公式ブログ リコ「...。」 僕「で、ITエンジニアとしたらばやっぱ英語ができなきゃ、って思ったり。」 リコ「英語ができないって...。まずは君の日語から、ってのは置いておいて、君は英語の何ができるようになりたいの?」 僕「アメリカITエンジニアと会話できるようになりたい。」 リコ「日常的にアメリカITエンジニアと会話してるの?」 僕「してない。」 リコ「できない理由、はっきりしてるじゃん。」 僕「そうだね。でも、会話する機会がないから。」 リコ「機会がないなら、必要ないじゃん。」 僕「そりゃそうなんだけど、みんな先の記事みて、できないとってブコメしてるし。レベル5はないととか、レベル10逝きたいとか言ってるし。」 リコ「み

    auient
    auient 2013/01/29
    世間の英語重要!英語必須!ってのは劣等感あおってるだけじゃね? 必要になったとき必要なだけ身につければよくね? という話。/ なるほど確かに。
  • RubyによるMarkdownをベースにしたEPUB電子書籍の作り方と出版のお知らせ

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

  • 東京の地下鉄をGviz(Ruby Graphviz Wrapper)で描く

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

  • Ruby Graphvizラッパー「Gviz」でアメリカ合衆国をデータビジュアライズしよう!

    (追記:2014-3-3) Gvizについてのまとめ頁を作りました。 Gvizの目次 - Rubyの世界からGraphvizの世界にこんにちは! RubyのGraphvizラッパー「Gviz」を前回紹介しました。 Yet Another Ruby Graphviz Interfaceを作ったからみんなで大量のグラフを作って遊ぼうよ! そこでは隣接県情報に基づき日地図を作りました。出来は兎も角、僕はこのやり方がすっかり気に入りました。そこで今回はもう一歩進んでこの地図でデータビジュアライゼーションをしてみようと思います。題材はアメリカ合衆国です! 以下では、データの取得から順を追ってグラフ作成のやり方を説明しています。ちょっと長い投稿になります。 隣接州情報の生成 地図の形のベースとなる隣接州情報を用意します。List of U.S. state abbreviations - Wikip

    Ruby Graphvizラッパー「Gviz」でアメリカ合衆国をデータビジュアライズしよう!
    auient
    auient 2012/09/29
  • Ruby脳が理解するJavaScriptのオブジェクト指向

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

  • ねえ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とします。 まずはユーザの登録機能を作りま

    auient
    auient 2012/08/18
  • 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点は

  • エラーメッセージから学ぶRack - Middlewareの魔法

    前回の記事「エラーメッセージから学ぶRack - 最初の一歩」の続きです。 噂によるとRackにはMiddlewareなる魔法があるそうです。そしてRack古文書にはMiddlewareについて次のようにあります。 useの呪文を唱えよ。さすれば扉は開かれん 準備 前回作った、なんちゃってWebフレームワーク「draque」を継続して使います。config.ruが少し長くなったので、Webアプリの体を別ファイルdraque.rbに移します。 #draque.rb module Draque @@routes = { get:{} } def draque(env) path = env['PATH_INFO'] if res = @@routes[:get][path] res.call(env) else [ 404, headers, not_found ] end end def