Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Matzにっき(2008-03-03)
[go: Go Back, main page]

«前の日記(2008-03-02) 最新 次の日記(2008-03-04)» 編集

Matzにっき

<< 2008/03/ 1 1. Ruby 1.9.0-1 snapshot released
2. 高木浩光@自宅の日記 - 公開鍵暗号方式の誤り解説の氾濫をそろそろどげんかせんと
3. Lisa Awards: Biggest Hack for a Language Runtime on Dion Almaer's Blog
2 1. 第一安息日
3 1. CS 11: Python track: python idioms
2. Binary search algorithm - Wikipedia, the free encyclopedia
3. Theological Cultural Analysis of the Free Software Movement
4. 小寺信良:正直、テレビはもうダメかもしれん - ITmedia +D LifeStyle
5. You Used Ruby to Write WHAT?! - CIO.com - Business Technology Leadership
6. 取材
4 1. tanjent: MurmurHash, final version.
2. lucille development blog >> Blog Archive >> LLVM 2.2 v.s. gcc 4.2
3. YouTube - JRuby: The power of Java and Ruby
4. InfoQ: Trading Consistency for Scalability in Distributed Architectures
5 1. Google Japan Blog: Google Summer of Code 2008 開催
2. Computerworld - Don't use Emacs, says Java's father
3. Rails is the best thing that ever happened to Python | Zen and the Art of Ruby Programming
4. [#JRUBY-2220] Struct performance is pretty poor - jira.codehaus.org
6 1. 取材
2. GCの改善について
7 1. 取材
2. オープンソースサロン
3. Teflon Ted: Rails Doesn't Scale
8 1. Sapphire, the Programming Language
2. OOエンジニアの輪! 〜 第 40 回 関 将俊 さんの巻 〜
3. 新見
9 1. 新見二日目
10 1. 取材
11 1. The ”No Laptop” Meeting Rule (by Jeremy Zawodny)
2. 21世紀最大のテーマは公私混同 − @IT
3. エンジニアの進化は「アウトプット」にあり! まつもとゆきひろ×小飼弾 | エンタープライズ | マイコミジャーナル
12 1. 取材
2. 動的型の言語でも以下のようなプログラムの問題を検出できます - koguroの日記
3. RubyにLazySweepのパッチを作った - I am Cruby!
4. PragDave: The 'Language' in Domain-Specific Language Doesn't Mean English (or French, or Japanese, or ...)
5. Arc: I/O
13 1. 徳島講演
2. 七左衛門のメモ帳: 無料より優れたもの
3. 国産ソフトのオープンソース化が増加、「いじりたい」に応える − @IT
14 1. 卒業式
2. Headius: Duby: A Type-Inferred Ruby-Like JVM Language
3. I'd love to quit my job! (sort of) - O'Reilly Ruby
4. オープンソース、UGCの世界での情報開示と、新たな時代のメディア - Ansible Two - 星暁雄の雑記帳
5. シリコンバレーからの手紙138 - 目からうろこが何枚も落ちたオープンソースの“人間的本質”
15 1. Number of Methods in the String Class
2. Make me pulse - Making a better life for web developer since 2006 >> Blog Archive >> PHP6, Unicode and TextIterator features
3. D.C.T.W.Y.C.D.T: Common characteristics of failed open-sourced projects
16 1. 安息日
2. ニカイア・コンスタンティノポリス信条 - Wikipedia
17 1. 「MacRuby」 - ひさしを借りて母屋を乗っ取るか? Mac OS Xの新たなRuby環境 (1) MacRubyとは何か? | パソコン | マイコミジャーナル
2. 5 more essentials for your programming toolbox | Spiteful.com
3. About the International Biographical Centre
18 1. グーグル社員が明かす、イノベーション誕生の舞台裏:ニュース - CNET Japan
2. Muad`Dib: An Embedded ALGOL-like language in Prolog
3. An Agile Way > LuRuJu on Rails -- JUDE で描いた図がそのまま Rails で動く! : ITmedia オルタナティブ・ブログ
4. Kite - Trac
5. 合格発表
19 1. おくやみ:作家 アーサー C. クラーク、90歳 - Engadget Japanese
2. Git-Style Automatic Paging in Ruby : Nex3
3. Ruby as an AppleScript Replacement?
4. 【コラム】エンジニアのための英語術 (43) 論理のルールに従って主張を整理する - 英語でプレゼンテーション その2 | マイコミジャーナル
20 1. 休日
2. 『プログラミングErlang』
3. 思考実験 - immutableな言語
4. Obie Fernandez: Big Name Companies Using Ruby on Rails
21 1. Amazon.co.jp: Googleを支える技術 ~巨大システムの内側の世界 [WEB+DB PRESS plusシリーズ]: 西田 圭介
2. culann.com >> Blog Archive >> And the greatest of these is laziness
3. 「Rubyは◎,Seasar2は♪」---Linux Foundation JapanがSIに使えるOSS一覧,利用実績でレーティング:ITpro
4. Rails deployment a solved problem? Just upload & it works?
5. Sapphire - Two New Re-Implementations of Ruby
22 1. MOONGIFT: >> VMWareの開発でも利用されているソースコードレビュー共有ソフトウェア「Review Board」
2. How Rubinius SendSites Work - Part 1 ,A+ Building a Better Ruby
3. Why Rails Will Not Reign Supreme (and why you shouldn't want it to)
23 1. 新規開始
2. 反省・復活祭
24 1. 楽天ミーティング
2. 七左衛門のメモ帳: 「千人の忠実なファン」
25 26 27 28 1. ヨーロッパへ出発
29 30 31 1. コペンハーゲンに移動
>>
迷惑メール対策なら Dr.WEB
『Dr.WEB メールデーモン』、MTA 用迷惑メール対策製品です!


2008-03-03 [長年日記]

NEW!_ [言語] CS 11: Python track: python idioms

Pythonのイディオム。

List Comprehensionの解説で

results = [(x, y)
           for x in range(10)
           for y in range(10)
           if x + y == 5
           if x > y]

という例題がある。そうか、forって複数指定できるんだ。

で、Rubyのメソッドチェーンではこのような複数シーケンスの ネストしたループをストレートに書くことができないことに気がついた。

(1..2).xxxx(1..2)

で、

[1,1],[1,2],[2,1],[2,2]

を返すようなxxxxメソッドがあれば、

(1..10).xxxx(1..10).select{|x,y| x+y == 5}.select{|x,y|x > y}

と書けるんだけど、名前がな。いい名前ないかな。

NEW!_ [Ruby] Binary search algorithm - Wikipedia, the free encyclopedia

Rubyのオブジェクトはヒープと呼ばれる複数のメモリ領域のいずれかに所属する。 GCの過程で(保守的なチェックの一環で)ポインタがどのヒープ領域に所属するか をチェックしているところがある。

今までは線形探索をしていたのだが、 ここを二分検索するようにした。 まあ、現時点ではヒープの数はあまり多くならないので メリットはさしてないのだが、今後ひとつひとつのヒープのサイズを小さくすることを 考えているのでそのための下準備として。

ところが、二分検索の基本的なアルゴリズムは理解していたはずなのに なかなかバグが取れない。結構、情けない。

NEW!_ [OSS] Theological Cultural Analysis of the Free Software Movement

クリスチャン的視点から見たフリーソフトウェア運動。

っていうか、タイトルを見た時にはどういう論理展開するのかと思って読んだのだが、 実は穏当な意見であった。

NEW!_ 小寺信良:正直、テレビはもうダメかもしれん - ITmedia +D LifeStyle

テレビはダメかもしれん、という話(そのまんま)。

実際、ここ数年テレビを見る時間はぐんぐん減っている。 私の家族も最近はPCを使った情報収集に時間を取られて テレビはあまり見なくなってしまっている。

テレビはもはや時間が余った時に雑学を入力する手段くらいにしかなってなくて、 しかもそれってインターネットで代用可能だったりするんだよね。

やっぱ、2011年にはテレビを捨てることになるのかなあ。

NEW!_ [Ruby] You Used Ruby to Write WHAT?! - CIO.com - Business Technology Leadership

Zed 「ゲットー」 Shawが(CIOに向けて)Rubyの「欠点」について語る。

言語そのものについての欠点の指摘はほとんどないので 言語デザイナーとしては安堵なのだが、欠点のほとんどは私の実装(MRI)の弱点なので そういう意味では涙目である。

やや、根拠が薄いような気もするが(ほんとに遅いのかとか、ほんとにリークするのかとか)、 改善の余地があることについては私も認める。

悔しいので、また手を入れることにする。 一番難しいのはGCだろうか。「保守性によるリーク」や「停止時間」の問題について また考えてみたい。

NEW!_ 取材

某雑誌の記事のため写真撮影。 なんか金かけてるよな。

今日はいきつけの本屋さんで立ち読みしているところの撮影だとか。 事前に本屋には許可を取ってあるのだが、 立ち読みしてるところをバシバシとられるのは かなり恥ずかしい。

本日のツッコミ(全22件) [ツッコミを入れる]
_ takiuchi (2008-03-07 22:12)

cartesian_productは長いですかねぇ。
「×」の読みをとってcrossとか。

_ k のつくゴルファー (2008-03-07 23:02)

ここは思い切って,(1..2)*(1..2) とか. 

_ まつもと (2008-03-07 23:16)

みっつ以上ネストすることもありえるんで*演算子はあまりよくありませんね。

_ 元職業プログラマ (2008-03-07 23:42)

>みっつ以上ネストすることもありえるんで*演算子はあまりよくありませんね。
どのような場合でしょうか?

_ 元職業プログラマ (2008-03-08 00:08)

>ここは思い切って,(1..2)*(1..2) とか.
私が考えたのは、[^1..2]*[^1..2]です。
Haskellだったら、[1..2]*[1..2]にしたいです。

_ まつもと (2008-03-08 00:10)

どのような場合と言われても、もともとlist comprehensionのforが複数あるケースに対応したいという話ですから、forの数が限定されていない以上、ふたつまで限定というのはうれしくないのです。

で、実は1.9にはproductというメソッドがすでにあるのですが、これは

  * 引数がto_aryを持つ必要がある
  * 戻り値が配列(Enumeratorじゃない)

というのがちょっとうれしくないですねえ。

_ 元職業プログラマ (2008-03-08 00:34)

まつもとさま、ご回答有難うございます。
少し美しくないですが、([^1..2]*[^1..2])*[^1..2]というようには出来ないのでしょうか?
と思いましたが、確かに直積を二重に実行すると、[[[1,1],1],[[1,1],2],..]とするのか、というようなりますですね。
それなら諦めて、cprod([^1..2],[^1..2],..).select{..}としたほうが、素直ではないかと思ったのですが、いかがでしょうか?

_ atushi (2008-03-08 08:05)

tupleとか?

Mathematicaではtupleを似たよーな感じで使っているようですが。
http://reference.wolfram.com/mathematica/ref/Tuples.html

_ atushi (2008-03-08 08:18)

(1..2).tuple(1..2) #=> Tupleクラス{(1..2),(1..2)}
Tuple.to_ary #=> {[1,1],[1,2],[2,1],[2,2]}

組み合わせ爆発が起こらないように、Tupleクラスを間に挟むとか・・・。Rubyを良く知って言っている訳ではないので、すでにこんなの存在してたらごめんなさい。

_ 元職業プログラマ (2008-03-08 09:07)

atushiさま
いまさら(?)Rubyにタプルを実装するのも如何なものかと思います。
集合論的に考えれば、集合≒配列としてよいのではないでしょうか?
ただし、[a,a,b]というのを集合としていいのか、という話しがあるので、例えば、集合クラスのインスタンスを、s=[<a,a,b>]としたら、例外が発生するというやり方があるのではないかと思っております。

_ 元職業プログラマ (2008-03-08 12:58)

先に申した「集合クラス」は、大袈裟に、「擬似集合クラス」とかいう名前で定義し、数学的な意味での集合とタプルの性質を合わせ持ったクラスであると宣言すれば、カッコ良くないでしょうか?
http://ja.wikipedia.org/wiki/%E3%82%BF%E3%83%97%E3%83%AB

_ 元職業プログラマ (2008-03-08 17:05)

「数学的な意味での集合とタプルの性質を合わせ持ったクラス」というのは、非常に無理がありましたっていうか、無理でした。(多分?) 申し訳御座いません。

_ yasm (2008-03-09 21:19)

pair、pair_with なんてどうでしょう? 直感的に。

_ まつもと (2008-03-09 22:05)

pairだと2重しか意味しませんよね。

_ Thor (2008-03-10 00:30)

単純に関数として (Ruby1.9ではGeneratorが死んでるので1.8で)

require 'generator'
def foreach_inner(a,*b)
  l = b.shift
  if b.empty?
    l.each{|x| yield *(a+[x])}
  else
    l.each{|x| foreach_inner(a+[x],*b,&Proc.new)}
  end
end
def foreach(*arg)
  if block_given?
    foreach_inner([],*arg,&Proc.new)
    arg
  else
    Generator.new do |g|
      foreach_inner([],*arg){|*x| g.yield(x)}
    end
  end
end

foreach(1..3){|x| p x}
foreach(1..2,5..6,8..9,'a'..'b'){|x,y,z,s| p [x,y,z,s]}
p foreach(1..10,1..10).select{|x,y| x+y == 5}.select{|x,y|x > y}

_ kzgs (2008-03-10 17:02)

配列の要素数が決まってしまう&Ruby的に怪しい雰囲気になりますが

(1..3).ijk { i+j+k }

なんてのはどうでしょう

_ taiji (2008-03-10 21:01)

comboってのは?

_ じょりちょこ (2008-03-10 22:40)

nest_withでは?

_ 元職業プログラマ (2008-03-11 01:50)

いっそのこと、
([1..2],[1..2],[1..2]).select{|x,y,z| ...}
とか、
([1..2],[1..2],[1..2]).each{|x,y,z| ...}
なんていうのはいかがでしょうか?

_ uehaj (2008-03-11 15:42)

Groovyでは「combinations()」が相当するようですね。

http://groovy.codehaus.org/api/groovy/util/GroovyCollections.html#combinations(java.util.Collection)
http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html#combinations()

こんな感じ。
[1..10, 1..20].combinations().grep{ it[0]+it[1] == 5 }.grep{ it[0]> it[1] }

_ まつもと (2008-03-11 18:56)

ううむ。Ruby1.9にはArray#combinationっていう全然違うことをするメソッドがありますから混乱しそうですね。

  > [1,2,3].combination(2){|x| p x}'
  [1, 2]
  [1, 3]
  [2, 3]

_ 元職業プログラマ (2008-03-11 19:22)

さすがはRuby!
Ruby1.9にはArray#permutationもあるんですね。
http://d.hatena.ne.jp/rubikitch/20071224/ruby19

お名前:
E-mail:
コメント:
本日のリンク元
アンテナ
検索

«前の日記(2008-03-02) 最新 次の日記(2008-03-04)» 編集

RSS feed meter for http://www.rubyist.net/~matz/ Creative Commons License This work is licensed under a Creative Commons License.