タグ

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

  • ((Rubyで) 書く (Lisp) インタプリタ)

    Peter Norvigさんの((Pythonで) 書く (Lisp) インタプリタ)(青木靖さん訳)という記事がすごい。100行ほどのPythonコードで、Schemeのインタプリタの基部分を書いている。Pythonのコードは見た目がRubyのコードとよく似ているので、Rubyしか知らない僕でも何となく読める。 この記事を解読してRuby版Schemeインタプリタを書いたら、インタプリタ Pyhon Scheme それからRubyのことも、もう少し分かるようになるかもしれない。こんなお得な勉強方法はないぞ。きっと。 そんなわけで… 以下では上記記事を参照しながら、Ruby版Schemeインタプリタを書いていきます。文では適宜Norvigさんの解説およびコードを引用しつつ、自分の理解とRubyのコードをpythonのコードと対応させていきます。Rubyのインタプリタ名はlisr.rbと

  • Rubyで最短経路を探索しよう!

    人生を書き換える者すらいた。: 人材獲得作戦・4 試験問題ほか 次に同じ質問がきたときに、 「1時間いらないっしょ、こんなの」 と是非ともほざくために、今から勉強します。 ダイクストラ法による最短経路探索 図におけるS点からG点に到達するための最短経路を求めたい。各ノードを結ぶエッジを糸としてS点をゆっくりと持ち上げた場合、緊張する糸が変移しながら最終的にS-B-D-Gを結ぶ糸が緊張して、 これが最短経路と分かる1。 計算機上でこの現象をシミュレートしたものを、ダイクストラ法というらしい。 今各ノードとそこから伸びるエッジの情報(コストと接続先)を渡して、その最短経路および総コストを出力するプログラムを考えてみよう。 data = { :s => [[5, :a], [4, :b], [2, :c]], :a => [[5, :s], [2, :b], [6, :g]], :b => [[

  • irbから学ぶRubyの並列処理 ~ forkからWebSocketまで

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

    sonota88
    sonota88 2019/03/30
    これはよい解説…
  • カラム指向ターミナルカラーライブラリ「colcolor」にcyclicオプションを付けました!

    先日、カラム指向ターミナルカラーライブラリ「colcolor」というのを公開しまして。 Yet Another Terminal Color for Ruby: Colcolorの紹介 colcolor colcolorはStringクラスにcolcoというメソッドを挿します。colcoでは引数として複数の色名を受け取って単語区切りで文字を彩色します。こんな感じです。 require "colcolor" DATA.each_line.with_index do |line, i| puts line.colco(:green, :yellow, :blue, :blue) puts "-".colco(:red) * line.size if i.zero? end __END__ lang year designer Ruby 1993 Yukihiro Matsumoto Lisp

    カラム指向ターミナルカラーライブラリ「colcolor」にcyclicオプションを付けました!
  • 翻訳ドキュメント作成支援ツールTogglateで翻訳要らず?

    翻訳ドキュメント作成支援ツール「togglate」というものがありまして。これは単に、翻訳ドキュメント内に原文をそのセンテンスごとに埋め込んで、翻訳ドキュメントを作るためのベースとなるものを出力するだけの極めて単純なミニツールです。 togglate | RubyGems.org | your community gem host melborne/togglate 基的にはmarkdownで書かれた原文を基にHTMLの訳文を作る、以下のようなプロセスで使われることを想定しています。 詳しくは以下の記事を読んでください。 英語圏のオープンソースプロジェクトにおける翻訳ドキュメントの問題点とその解決のための一方策(仕切り直し版) 図において、「You!」と書かれたところが翻訳者の手仕事になります。 ここで世界全自動化信奉者としては「You!」のところを何とかしたい、と考えるわけです。 そん

    翻訳ドキュメント作成支援ツールTogglateで翻訳要らず?
  • Ruby製サードパーティライブラリgemのトレンドを知るには「BestGems.org」がベスト

    ─質問1─ Ruby製サードパーティライブラリ、要はgemで、何が人気なのかってこと、手っ取り早く知りたいんですけど。 ─回答1─ RubyGems.orgのstatsページを見てください。 ─質問2─ えっ?これだけ?この辺は万年上位で固定でしょ。もうちょっと俺の知らないバラエティに富んだものに出会いたいんだけど。俺、Rails用ないし。 ─回答2─ カテゴリー別ならThe Ruby Toolboxがあります。 The Ruby Toolbox - Terminal Coloring ─質問3─ あんた、俺の質問ちゃんと聞いてるの?カテゴリー別なんて言ってないし。それに、ここのカテゴリーってなんか俺的に信用ないんだよね。取りこぼし多いっていうか..。俺のgem出てこないっていうか..。 ─回答3─ GitHubTrendingでここ最近の人気リポジトリが分かります。 Trending

    Ruby製サードパーティライブラリgemのトレンドを知るには「BestGems.org」がベスト
    sonota88
    sonota88 2014/08/09
    「俺のgem出てこない」
  • チルダがRubyのヒアドキュメントをもっと良くする

    Rubyのヒアドキュメントは便利です。複数行に渡る整形文章を出力するときに、これを使わない手はありません。 class ATool def self.help lines = <<EOS Instruction of `#{self}` `#{self}` is one of a great tool in the world. This helps you a lot on your daily work. Your life will be changed with `#{self}`!! Everyone knows about `#{self}`. So, You can ask them to learn `#{self}` Just Use `#{self}` from Today! EOS lines end end puts ATool.help # >> Instruct

  • Ruby、断るならちゃんと理由を言ってよ!

    情報を返す問い掛けメソッド Rubyでメソッド名の最後に?マークが付いたものがあります。この種のメソッドは問い掛けメソッドであり、通常、trueまたはfalseのbool値を返すよう実装されています。 str = 'hello' str.encoding # => #<Encoding:UTF-8> str2 = "\xa1".force_encoding("iso-8859-1") str2.encoding # => #<Encoding:ISO-8859-1> str3 = "\xa1".force_encoding("euc-jp") str3.encoding # => #<Encoding:EUC-JP> Encoding.compatible?(str, str2) # => #<Encoding:ISO-8859-1> Encoding.compatible?(str2,

    sonota88
    sonota88 2014/03/05
    「リクエストに対する答えがNOのときにこそ、その理由がほしい」
  • 英語圏のオープンソースプロジェクトにおける翻訳ドキュメントの問題点とその解決のための一方策(仕切り直し版)

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

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

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

    英語圏のオープンソースプロジェクトに貢献する最も簡単な方法またはsinatra/README.jp.mdまたは彼はなぜ私を愛するようになったか
    sonota88
    sonota88 2014/02/02
  • Graphvizがドローイングソフトになってしまった件について

    (追記:2014-3-3) Gvizについてのまとめ頁を作りました。 Gvizの目次 - Rubyの世界からGraphvizの世界にこんにちは! GraphvizのRubyラッパーであるGvizというツールを作っておりまして。 gviz | RubyGems.org | your community gem host melborne/Gviz それは、次のようなgraph.ruというファイルを用意して、 route :main => [:init, :parse, :cleanup, :printf] route :init => :make, :parse => :execute route :execute => [:make, :compare, :printf] save :sample

    Graphvizがドローイングソフトになってしまった件について
    sonota88
    sonota88 2014/01/09
  • RubyのStringにもInfinityを!- 反省回 -

    Float::INFINITYのような無限文字列を表現するString::INFINITYなるものがほしいとの想いから、前回次のような記事を書いたのです。 RubyのStringにもInfinityを! 時を同じくして@ne_sachirou殿も別の解法を用意していました。 Range ‘a’ .. String::INFINITY (Ruby) - c4se記:さっちゃんですよ☆ 読み比べて頂ければ明白ですが、ここには「人間の素直さの差」というものが如実に現れているんですね(力の差は置いておいてね)。 自分の解法は('b'..'a')というのはbad value rangeによりArgumentErrorになるという誤解から出発したのです。それでArgumentErrorを拾うなどという横道に逸れました。ところがこれはnilなのです。@ne_sachirou殿の実装の肝はString::

  • 怠惰で短気で傲慢な君に贈るRubyの遅延評価

    Ruby2.0ではlazyというメソッドがEnumerableモジュールに追加されるらしいよ。 yhara/enumerable-lazy · GitHub lazyはリストに対する遅延評価を実現するメソッドなんだけど、それで意味がわからないって言うなら、それは、怠惰で短気で傲慢な君のためのメソッドだってことだから、喜んでほしいよ。 君のような怠惰で短気で傲慢な人っていうのは、よく次のようなことを言うんだよ。 君 「おい、雑誌持って来い!」 部下「どの雑誌ですか?」 君 「全部だよ!」 部下「全部って、日で発行されてる雑誌全部ですか?」 君 「全部ったら、全部だよ、バカが」 ... 部下「全部持って来ました。ぜぇ、ぜぇ..。全部で、えっと..」 君 「冊数なんて、どうでもいんだよ!じゃあ、そこからAKBの記事、全部切り出せ!」 部下「全部ですか... はっ、はい、分かりました...(まじ

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

    (追記:2014-3-3) Gvizについてのまとめ頁を作りました。 Gvizの目次 - Rubyの世界からGraphvizの世界にこんにちは! antlaboさんがGraphvizを使って、北海道の市町村の隣接を可視化したものを公開されています。 Graphvizで北海道の市区町村の隣接を可視化してみました。 - 蟻の実験工房(別館ラボ) この可視化の元データはwikipediaの情報を元にantlaboさんが作られたそうです。スバラシイ。 wikipediaの隣接市区町村の記載をデータベース化したものをcsvで公開 - 蟻の実験工房(別館ラボ) で、記事の中で全国可視化はデータ量が多くて上手くいかなかった旨が書かれていたので、自分も試してみたところ、無事出力できましたのでここに公開したいと思います。 日全国を可視化する ここではGraphvizのRubyラッパーである拙作「gviz」

    sonota88
    sonota88 2013/03/23
  • Rubyを使って「なぜ関数プログラミングは重要か」を解読しよう!

    「Why Functional Programming Matters:なぜ関数プログラミングは重要か」(原著者:John Huges 邦訳:山下伸夫)という論文があります。 なぜ関数プログラミングは重要か これはMirandaという関数型言語を使って、プログラマにとって関数プログラミングがいかに重要であるかを論証したものです。これが書かれてからの年数1と被ブクマ数を見れば、極めて有益でmust_readであることは明らかでしょうが、自分にとっては高度な内容で読み解くのにかなり苦労しています。 リストを使った関数の貼り合せ(3.の前半)までについてRubyでこれに近いことを記述し、自分の解釈でその骨子を説明してみました。関数プログラミングの妙味と、Rubyの記述も簡潔でパワフルであるということを示せればと思います。きっと理解不足による間違いが含まれていると思いますが.. なぜ関数プログラミ

  • 1