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にっき(2007-08-07)
[go: Go Back, main page]

«前の日記(2007-08-06) 最新 次の日記(2007-08-08)» 編集

Matzにっき

<< 2007/08/ 1 1. 連載:C# 2.0入門 第3回 新しい繰り返しのスタイル − yield return文とForEachメソッド − @IT
2. Shoes, a Tiny Toolkit for Making Browser-like Things
2 1. Download Hadoop at OSCON (Yahoo! Developer Network blog)
2. ウェブキャリアでWebエンジニアとしてのキャリアを磨こう 株式会社ウェブキャリア
3. 先達の業界に学ぶプロジェクトマネジメント 第1回 20年は遅れているITプロマネ:ITpro
4. 横浜
3 1. 特別講演:「オープンソース・ソフトウェア開発思想とリアルな地域ネットワークの連
2. トークセッション-5:「世界に広がるオブジェクト指向スクリプト言語 Rubyの可能性」
3. 夕食: 中華街
4. Rubyの浮動小数点数リテラルの扱いは正しいのか
5. 今こそ問われるプログラミング雑誌の価値:ITpro
4 1. LL魂 〜 LL Spirit
2. The Ruby VM: Episode V
5 1. 第一日曜日
6 1. uehajの日記 - Groovyの奇妙な演算子(その1)
2. Tenjin
3. HAL - CNRS
4. Dr. Dobb's | Lock-free Interprocess Communication
5. Parallel Python
6. Googleは人材を飲み込むブラックホールか − @IT
7 1. Lazy Collectionへの第一歩
2. 蛙男商会からの報告・連絡・相談 祝・開星高校甲子園出場!
3. CSS、YAML、XML、JSONのいいとこ取り? 新データフォーマット「RSD」提案 | マイコミジャーナル
4. LL魂レポート
5. 仙石浩明CTO の日記: 面接FAQ: Tech総研「転職体験談」の取材を受けました
6. InfoQ: Gemstone OODB to support JRuby, Rubinius
7. Static Typers vs Dynamic Typers
8. asahi.com:ゲゲゲの「ぬりかべ」、こんな姿? 江戸期の絵巻に登場 - 文化・芸能
8 1. 上京・取材
2. 楽天ミーティング
3. ユメのチカラ: LL魂
4. livedoorの開発体制 - livedoor ディレクター Blog
9 1. MySQLカンファレンス
2. symfonyで開発日記 : symfonyのソースコードの値段
3. [動画]オープンな開発プロセスとオープンな開発言語 − @IT情報マネジメント
4. davidflanagan.com: Changes between Ruby 1.8 and Ruby 1.9
5. 開発合宿のススメ Web Service:@nifty
10 1. The Origin of XEmacs
2. コミュニティ活動以上に面白い会社にしたい − @IT自分戦略研究所
3. Tor Norbye's Weblog: Ruby Screenshot of the Week #15: More Hints and Quick Fixes!
4. Opening Python Classes | Ian Bicking: a blog
5. PHP and ActiveRecord
6. Martin Fowler's Bliki in Japanese - ひとつの言語
7. 【コラム】気ままにスイートフォト (4) ピンホールカメラを作ってみる | 家電 | マイコミジャーナル
11 1. 帰省・山口へ
12 1. 山口
2. ユダの福音書を追え
13 1. 買い物・従姉妹
14 1. 帰宅
2. masuidrive on rails >> Blog Archive >> PHPユーザの為のRuby/Rails入門
15 1. Rubyist Magazine - Rubyist Magazine 0020 号
2. Object Arts | Future development of Dolphin discontinued.
3. syx - Google Code
4. SScript: enhancing JavaScript's expressive power << Noumena
5. Nu?
6. NYC LOCAL: Tuesday 14 August 2007 Lisp NYC: Perry Metzger on Otter, the new salty slick whiskered snow-bellying programming system - comp.lang.lisp
7. Making Rails Better - Fixing Architecture Flaws in Active Record
8. Erlang Message Passing - Ruby point of view
16 1. Rubyの技術者認定試験が10月開始,2008年には世界に向け英語版も:ITpro
2. ITmedia エンタープライズ:矛盾を抱えつつ進化する“Java”−−黒船となったRuby on Rails
3. Headius: NetBeans Ruby Support is the BOMB
4. Nine Javascript Gotchas
17 1. Hash functions.
2. Being John…uhm…Bader >> Blog Archive >> Ruby faster than Python and Perl!
3. Software Progress
18 1. IPA未踏ソフトウェア創造事業2006年度下期千葉PM採択プロジェクト最終成果報告会
2. The rantings of Clinton Forbes: The D Programming Language versus a Datsun 240Z
3. The Multicore Kerfuffle and a Dose of Reality at Mark Nelson
19 1. ビショップ不在
20 1. アンカテ(Uncategorizable Blog) - 日本が世界に誇るまつもとゆきひろ氏の大きな穴
2. Karsten Wagner's Blog: Better exception handling
3. A lack of productivity is killing Smalltalk.
4. The Most Excellent and Lamentable Tragedy of Richard Stallman − Edward O’Connor
21 1. 車故障
2. Introduction to Perl6
3. 5 Things a Ruby developer needs to know about Scala - CircleShare Blog
4. InfoQ: Erlang's Mnesia - a distributed DBMS for highly scalable apps
5. Tilera、デュアルコアXeonより10倍高速な64コアCPU「TILE64」
22 1. Sony講演会
2. Microsoft vs. Google - the open source shame | Reg Developer
3. New Python Bugtracker
4. Interoperability with Java is not a good thing.
23 1. U-20 プロコン
2. Ruby Business Commons設立総会レポート
24 1. 山陰中央新報 - 「ルビー」活用の産業振興検討
2. 一方、鳥取・米子では
25 1. bbum’s weblog-o-mat >> Blog Archive >> Python: di
2. Performance benchmarks << evan.musing
3. InfoQ: Ruby 1.9 adds Fibers for lightweight concurrency
4. The Better String Library
5. Can open source be giving comfort to the enemy? - DIY Drones
26 1. 聖霊の賜物
27 1. ねたミシュラン 千葉県マジで?!
2. Useless Factor: The R5.97RS Unicode library is broken
3. Pupeno’s web site >> Blog Archive >> The problem with Lisp
4. Slashdot | Court Ruling Clouds Open Source Licensing
28 2. カンファレンスコール
3. NHK取材
4. sumim’s smalltalking-tos - なぜかくも人は Smalltalk を殺したがるのか?
5. 初歩の「Perl」「Python」「Ruby」 − @IT情報マネジメント
29 1. 東京出張
2. 「まわりが“天才だらけ”の中で、どう生き延びる?」 (“アンチ天才”のボトムズ流仕事術):NBonline(日経ビジネス オンライン)
3. google-sparsehash - Google Code
4. [r6rs-discuss] Unicode issues
5. 楽天ミーティングで学んだこと
6. ソフトウェア開発者は製造業のことを知った方がよい
30 1. M17Nミーティング
2. Rebel Science News: The Seven Deadly Sins of Erlang
3. lucille development blog >> Blog Archive >> Xorshift RNGs
31 1. 有機化学美術館・分館:ナノチューブを溶かす意外なもの - livedoor Blog(ブログ)
2. 思っているよりもずっとずっと人生は短い。- Rubyバブル
3. Superators Add New Operators to Ruby
4. err.the_blog.find_by_title('Full of Ambition')
5. ITmedia エンタープライズ:EMEA地域でRuby on RailsとC#の利用が拡大
>>
Dr.Web 予測するアンチウイルス 持ち込み PC 対策でお悩みの方にオススメです。
ウイルス・スパイウェア検査・駆除 用ツール Dr.WEB CureIt! を無償配布中!

2007-08-07 [長年日記]

_ [Ruby] Lazy Collectionへの第一歩

になるかどうか自信は無いのだが、 1.9でイテレータ系メソッドにブロックを渡さない時に返される Enumerable::Enumeratorクラスに、 外部イテレータとして使うことができるようにnextメソッドを追加した。

実装には最近YARVに追加されたFiberを利用した。 っていうか、Fiberって初めて使ったよ。 使いやすいような、使いにくいような。慣れてないせいかな。

追加したメソッドは以下の通り

  • next - 「次」のオブジェクトを返す。末尾ではStopIteration例外
  • next? - 「次」のオブジェクトがあればtrue
  • rewind - nextでのオブジェクト生成を最初に「巻き戻す」

また、Enumerable#zipメソッドは、以前は引数として渡されたEnumerableを to_aで配列に変換していたが、Enumeratorを外部イテレータとして使うことにした。 これで、無限列もzipの対象にできる。

あと、zipの挙動だが、今まではレシーバの要素数だけ繰返していたが、 今後は正式にレシーバと引数でもっとも少ない要素数だけ繰り返すことにした(今までも1.9ではArray#zipがそうなってた)。

これでgeneratorライブラリを使わなくても簡単に外部イテレータが使えて、 PythonやXtalに一歩近づいた。

_ 蛙男商会からの報告・連絡・相談 祝・開星高校甲子園出場!

開成高校の吉田投手は吉田くんの弟だったんだ(そんなわきゃない)。

それはともかく、誰にでも理解できる表現ができる人には あこがれちゃうなあ。いや、蛙男については必ずしも「誰にでも」とは 言えないかもしれないけど、 少なくともRubyよりは広い範囲に分かってもらえそう。

というわけで、実は蛙男商会も島根県の重要な地域資源(コンテンツ産業)と 見なされているらしいぞ。現在、蛙男さんはほとんど東京に居るみたいだけど。

_ [言語] CSS、YAML、XML、JSONのいいとこ取り? 新データフォーマット「RSD」提案 | マイコミジャーナル

データフォーマットに特化しているという点ではYAML、JSONと同じ方向性のように見える。 CSSの影響が強いので、そっち方面に慣れている人にはわかりやすいかもしれない。

_ 仙石浩明CTO の日記: 面接FAQ: Tech総研「転職体験談」の取材を受けました

採用面接で「どんだけ技術が好きか」という点を集中的に確認するという仙石さん、という話。

技術が好きならば、プログラミング技術は後でいくらでも延ばせるし、 お互いに幸福な関係が築けるだろう、と。 まあ、確かにうちで生き残ってる連中も、 技術好きで日常生活をコンピュータにたとえて下らない話をするのが好きな連中が 多いものな。

今後の採用の参考にしよう。

_ [Ruby] InfoQ: Gemstone OODB to support JRuby, Rubinius

Gemstoneといえば昔一世を風靡したOODBMS。 これがJRubyやRubiniusから使えるようになる、という話。 私はその頃ObjectStoreを使ってたけど。

待て。JavaとのコネクションでなんでもできるJRubyは分かるが Rubiniusが出てて、なんで本家Rubyが対象にならないのか。不思議。

_ [言語] Static Typers vs Dynamic Typers

動的型を好む人(Dynamic Typer)と静的型を好む人(Static Typer)は プログラミングの別の側面を見ているのだろう、という話。

If I understand correctly, people who prefer static type systems tend to

think in terms of structural invariants of their programs, while people who prefer dynamic type systems tend to think in terms of their programs' behavior. I am convinced this is a personal preference, nothing more, nothing less. I guess that static typers have equal problems developing in dynamically typed languages as dynamic typers have developing in statically typed languages. I don't see a problem here: If the requirements are such that a focus on static correctness is important, it's probably better to employ a static typer, whereas if the requirements are such that dynamic flexibility is more important, the job should better be done by a dynamic typer. There is nothing wrong with specialization, we don't need a grand unified theory of program development.

そう言われてみればそんな気もする。

_ asahi.com:ゲゲゲの「ぬりかべ」、こんな姿? 江戸期の絵巻に登場 - 文化・芸能

「ぬりかべ」のあの姿と言うのは伝統的なものだと思っていたのだが、 実は水木さんの創造だったのね。実際はこんな獅子のような姿であったとは。

で、この「L・トム・ペリー コレクション」のL・トム・ペリーってのは、 ペリー長老のことだね、きっと。戦後、進駐軍として日本にいたって聞いてたけど、 ここまで日本通だったとは。

意外。

本日のツッコミ(全11件) [ツッコミを入れる]
_ okuji (2007-08-16 05:11)

素晴らしい! >next
rewindは名案ですね。あんまり他では見かけたことがないのですが、まつもとさん自身の発想?

_ まつもと (2007-08-16 08:59)

ありがとうございます。

rewindは残念ながら私のアイディアではありません。
Rubyには以前からgeneratorライブラリという外部イテレータライブラリが添付されているのですが、そのAPIにあったものです。
おそらくはgeneratorのメンテナであるknuさんによるアイディアだと思うのですが。

_ 野分 (2007-08-16 13:00)

このnext/next?の定義だと、空集合の繰り返しが上手く処理できませんね。終了判定も面倒ですし。

nextは末尾ではnil(かあるいは末尾用オブジェクト)を返すようにして、現在の指しているオブジェクトが存在するかどうかを判定するexist?を追加した方が良いと思います。

_ ogijun (2007-08-16 13:30)

RubiniusとはSmalltalkつながりとか? (元記事まだ読んでないですが)

_ ささだ (2007-08-16 14:19)

Enumerator が Iterator の機能をあわせもつのはうれしいのかなぁ。Enumerator#iterator #=> Iterator 、ってやるのは、ちょっと冗長ですか。

e = 3.times{}; e.each{...}; e.next? #=> true なんて出来るのは気持ち悪い気がします。

_ まつもと (2007-08-16 14:25)

野分さん、
上手く処理できない空集合の繰り返しとか面倒な終了判定とかが具体的にイメージできませんでした。むしろ、提案されているexist?の方が面倒に感じるんですが、気のせい?

_ まつもと (2007-08-16 14:28)

iteratorメソッドとかで明示的にイテレータを作るのは冗長過ぎて使われないと思います。

気持ち悪いと言う指摘はEnumeratorがeachによる「列」とnextによる「列」の両方を持つからでしょうか。それならなんとなく分かるかも。eachがbreakで中断された時のnextが何を返すのかとか。

_ 野分 (2007-08-16 20:00)

もしかしたら勘違いしているかもしれませんが、下記の2つは見分けつきましたっけ?
''.to_enum(:each_byte) #=> (1)
'a'.to_enum(:each_byte) #=> (2)
next?だと両方ともfalseになるかと思います。

また、exist?のようなメソッドがないと、(1)のようなケースで要素の存在を確認する方法が無いような気がします。

_ まつもと (2007-08-16 23:14)

区別つきます。next?は「次」のnext呼び出しが例外を出すかどうかを判定するので、(1)ではfalse、(2)ではtrueになります。

「要素の存在を確認する方法」というのはよくわからないのですが、初回(またはrewind実行直後)のnext呼び出しで例外が起きれば(or next?がfalseならば)要素は存在しない、とみなして良いのではないでしょうか。

_ 野分 (2007-08-16 23:36)

む?そうしますと、$を終端とすると
   | $   ''.to_enum(:each_byte)
   | a | $ 'a'.to_enum(:each_byte)
(1) (2) (3)
初回は(1)(何も指していない)状態で、nextで(2)に移行するということでしょうか?
#iteratorとして使う場合は初回にnextを呼ばないと
#要素にアクセスできない

これなら問題は発生しなさそうですね。
まあ、必ずnextを呼ばなくてはいけないのはムダな気がしますが……

_ まつもと (2007-08-17 09:48)

そういうことです。
next以外に要素を取り出す手段がありません(currentとかない)から、無駄ということはないと思います。

お名前:
E-mail:
コメント:

«前の日記(2007-08-06) 最新 次の日記(2007-08-08)» 編集

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