ときどきの雑記帖 3mm方眼紙編

最新ページへのリンク
目次ページへのリンク

一つ前へ 2011年1月(下旬)
一つ後へ 2011年2月(中旬)

ホームへ

2011年02月10日

■_

・カレチ
今週のモーニングにはカレチが掲載。今回みたいな話は好き。

・買った
教えない教え (集英社新書)
権藤さんが監督ではやってられないって、 森さんを呼んでからおかしくなったんだよなあ。 いや、森さん自身は悪くはないのだけど (といいつつ、ノムさんと一緒で自分は好きな監督ではない)。
ファイブスター物語 リブート (1) LACHESIS (ニュータイプ100%コミックス)
今見返してみると、初期の絵って以下略だったんだなあ。

■_ 会議

長い会議はやだよねえ。

Fのプロジェクトが無茶苦茶な件 

256 仕様書無しさん [sage] 2011/02/08(火) 23:30:13 ID: Be: 
 F2じゃないけど、会議は散々時間を浪費して何も決まらないのに、 
 知らないうちに喫煙ルームで勝手に仕様が決まってる件について、… 
 
257 仕様書無しさん [sage] 2011/02/08(火) 23:31:44 ID: Be: 
 デスマの香り 
 
258 仕様書無しさん [sage] 2011/02/08(火) 23:57:22 ID: Be: 
 そりゃ、だって会議中にモノ考えてる奴なんかいないからだよ。 
 起きてるのに精一杯で。 
 
259 仕様書無しさん [sage] 2011/02/09(水) 00:32:45 ID: Be: 
 Fじゃない会社だけどおも 
 要点がズレた会議はその場で終わらせたくなるな 
 寝てたらズレた話してた他の課の課長がブチ切れてた 
 
 なんで関係ない奴がブチ切れるのか理解できなかったけど 
 
260 仕様書無しさん [sage] 2011/02/09(水) 11:16:19 ID: Be: 
 ここはリストラとかないのかな? 
 うつ社員とか 
 
261 仕様書無しさん [sage] 2011/02/09(水) 23:06:00 ID: Be: 
 睡眠音波^h^h眠たい話してたオサーンに限って、ブチ切れるよな。 
 

■_

関数型プログラミング言語Haskell Part13 

801 デフォルトの名無しさん [sage] 2011/02/07(月) 23:59:06 ID: Be: 
 return が圏論的用語とどうこう、手続き型言語のreturnと云々はともかく、Hakellのクラス体系の
 MonadがApplicativeのサブクラスでないのは審美的に気持ち悪いで、なんとかして欲しい。 
 WrapMonadとか意味わからなすぎる。 
 
 あと、Functorクラスの(.)とidは別のクラスにしておけとか、
 ArrowクラスのarrがArrowChoiceと対称性を損なっていてキモイとか。 
 
804 デフォルトの名無しさん [sage] 2011/02/08(火) 00:26:55 ID: Be: 
 >>801 
 理論的に美しいとか別にどうでもいいよ。 
 実用的に便利な組み合わせがあるのならそっちを優先するべきだし。 
 そもそも満足に綺麗に出来る保証なんてない。 
 自分は一般的に使えそうなところを探しているだけだよ。 
 
805 デフォルトの名無しさん [sage] 2011/02/08(火) 00:40:49 ID: Be: 
 目指すなら無駄のない機能美だよ。 
 机上と実践じゃ必ずギャップ出るんだから。最初から現実的な落とし所で 
 考えておいたほうがリスクが少ないよ。 
 
807 デフォルトの名無しさん [sage] 2011/02/08(火) 01:00:30 ID: Be: 
 >>804,805 
 そりゃ、理論的な美しさと実用性を比べれば実用性のほうが勝るかもしれないけど、
 MonadがApplicativeのサブクラスでないことは、実用性も損なっていると思うな。

 ライブラリ製作者が注意すればよいこと、Contorl.なんちゃらカコイーな変態(オレとか)が
 いちいちinstance宣言かけばよいことではあるが、それでも僅かにであっても実用性を損なっている。 
 
 >>806 
 変態で悪いか? あぁ、悪いのか? オレが変態でお前に迷惑かけたか? 
 ああ、オレは変態だよ。それが何か問題か? 
 
812 デフォルトの名無しさん [sage] 2011/02/08(火) 14:19:46 ID: Be: 
 自己レス>>801 
 
 (.)とidは、Categoryクラスでした/// 
 
813 デフォルトの名無しさん [sage] 2011/02/08(火) 15:16:50 ID: Be: 
 >>801 
 (.)とidを別のクラスにするのはどうして? 
 射の結合(.)とその単位元(id)は切っても切れない関係のような気がするけど。 
 
816 デフォルトの名無しさん [sage] 2011/02/08(火) 19:54:41 ID: Be: 
 >>813 
 > 射の結合(.)とその単位元(id)は切っても切れない関係のような気がするけど。 
 
 圏としてとらえるならば(それはCategoryクラスの名前にかなったこと)、たしかに(.)とidが必要。 
 でも、圏としてとらえる以前に連結? 合成? できる有向グラフとしてとらえることもできるはずで、
 その場合は(.)はいるだろうけど、idはいらないんじゃないかな。 
 
 議論のために考えた例だけど、例えば 
 data Foo = Foo ... 
 data Bar a b = Bar { 
   runBar :: a -> (b, Foo) 
 } 
 
 のような型があった場合、Barに(.)を定義するのは簡単だが、直感的に自然な形でidが定義できるとは限らないでしょう? 
 
 >>815 
 ここ↓によれば 
 http://snak.tdiary.net/20091020.html 
 
 fmap = liftM は、FunctorでもMonadでもある型では必須の要件らしい。 
 
817 デフォルトの名無しさん [sage] 2011/02/08(火) 21:34:07 ID: Be: 
 >>807 
 Applicativeはほとんど知らなかったのだけれどこれ? 
 ttp://www.soi.city.ac.uk/~ross/papers/Applicative.pdf 
 解説のほう読んだ限りだとなんというか、関手じゃないなにかマッピングするもので 
 写した射を関手のように取り扱いできるようにする、というのが基本アイディア 
 のようだね。 
 言いにくいし、よく知らないけど、これ実用面からの要請のみだと思うぞ。 
 (.)とidの話は正直よくわからん、どういうこと? 
 Arrowは全く知らないのでわからない。 
 
 liftMは循環的性質を持つ関手の射関数と考えればいいと思う。 
 
818 デフォルトの名無しさん [sage] 2011/02/08(火) 21:53:51 ID: Be: 
 関手のように取り扱いできる 
 じゃおかしい 
 関手を適用したように取り扱いできる 
 で。 
 
819 デフォルトの名無しさん [sage] 2011/02/08(火) 22:07:13 ID: Be: 
 >>816 
 サイト情報ありがとうございます。 
 >>728の型みたいにFunctorはMonadを含んでいる(機能的にはFunctor⊂Monadだけど)ので 
 常にMonadはFunctorのインスタンス、ってことなのかな 
 ただ、実装でそれを強制されてはいない(と思う)ので 
 より特殊化されているliftMを使ってる方が安心な気がします 
 
 ところでポイントフリーを調べていて、W(\x y -> x y y)コンビネータに行き着いたのですが 
 前に話題になったjoinの型 μ:m (m a) -> m aは、Wの型(a -> a -> b) -> a -> bと対応してるそうですね 
 (m aは1引数関数と見なせるので(a -> m -> m) -> (a -> m)と見ると型は近い) 
 ttp://stackoverflow.com/questions/4333864/trick-for-reusing-arguments-in-haskell 
 >>728の型も眺めてみるとη:a -> m aはK(あるいはKI)コンビネータと対応してるように見えなくもないし 
 T(fmapやliftM)もなんかのコンビネータと対応してるのかも 
 
820 デフォルトの名無しさん [sage] 2011/02/08(火) 22:26:34 ID: Be: 
 >>817 
 ごめん。オレには>>816以上にうまく説明できないし、オレが何か勘違いしている可能性もある。 
 
821 デフォルトの名無しさん [sage] 2011/02/08(火) 22:56:42 ID: Be: 
 >>819 
 一応これ読めば対応はわかるとおもう。 
 ttp://www.ipsj.or.jp/07editj/promenade/4703.pdf 
 モナドの構成要素に関手が入っているので、理論としてはモナドと関手は切り離せない。 
 
 fmapとliftMはつかう文脈によりけりでいいんじゃないか。 
 他の領域に写すだったらfmapで上の階層(コンピュテーションの世界)に 
 上がるだったらliftMとか。 
 
 >>820 
 普通のidと関手F上のid_Fとで区別する必要があるとかならあるのかもしれないけど 
 よくわかんない。 
 
822 デフォルトの名無しさん [sage] 2011/02/08(火) 22:57:44 ID: Be: 
 関数プログラミングの楽しみという本にArrowのことがちょこっと書いてあったけど、
 圏論とか関手そのものの説明がはしょってあったので、圏論とHaskellの関係がよくわからなかったです 
 その圏論からモナドまで説明してある本ってないですかね? 
 本屋にいったけど、圏論の本なかったです 
 
823 デフォルトの名無しさん [sage] 2011/02/08(火) 23:05:04 ID: Be: 
 >>822 
 さっきも書いたけど対応としてはこれ 
 ttp://www.ipsj.or.jp/07editj/promenade/4703.pdf 
 あと日本語系だと以下など 
 ttp://ci.nii.ac.jp/naid/110003743465 
 ttp://ci.nii.ac.jp/naid/110003743466 
 ttp://ci.nii.ac.jp/naid/110003743564/ 
 さがすと結構あるし、自分も探し中。 
 
824 デフォルトの名無しさん [sage] 2011/02/08(火) 23:12:37 ID: Be: 
 ただ上のは隙がないように書かれてて正直わからないので 
 個人的にはつくりながらわかるこれがオススメ。 
 ttp://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.31.2885 
 Schemeだけど。 
 
825 デフォルトの名無しさん [sage] 2011/02/09(水) 00:24:45 ID: Be: 
 言えないっ 
 いまさら英語が読めないなんて言えないっ 
 
828 デフォルトの名無しさん [sage] 2011/02/10(木) 00:44:47 ID: Be: 
 お前らの議論についていくには 
 バチェラーだけじゃ無理 
 
829 デフォルトの名無しさん [sage] 2011/02/10(木) 00:50:42 ID: Be: 
 お前等の中で、圏論の知識が Haskell でのアプリ製作、 
 ライブラリ製作に役立ったよ、って経験者はいる? 
 
830 デフォルトの名無しさん [sage] 2011/02/10(木) 01:10:36 ID: Be: 
 ポルトガル語専攻だけど、圏論の基礎を買ってきたよ 
 さっぱり分からん 
 
831 デフォルトの名無しさん [sage] 2011/02/10(木) 07:52:22 ID: Be: 
 for the working mathematicianだからな 
 邦題を決めた奴は地獄の業火の中に投げこまれるべきである 
 
832 デフォルトの名無しさん [sage] 2011/02/10(木) 17:41:19 ID: Be: 
 >>801 
 Arrow が Categoryのサブクラスなので (.)とidを Categoryクラスで定義するのはしょうがないと思うが。 
 > ArrowクラスのarrがArrowChoiceと対称性を損なっていて 
 これはどういう意味? 
 

さっぱりわからんちん。 とりあえず 831 には同意。

関手というのがどうもよくわからず。

関手 - Wikipedia

関手(かんしゅ、functor)とは、圏論における一つの圏から別の圏への対応でその構造と両立
するようなものである。関手によって一つの数学体系から別の体系へのシステマティックな対応
が定式化される。関手は「圏の圏」における射と考えることもできる。

射 (圏論) - Wikipedia
数学において、射(英: morphism:モルフィズム)は、2つの数学的構造の間で構造を保存する
過程を抽象化したものである。

最もありふれた例は、何かしらの形で構造を保存する関数や写像である。集合論では、例えば、
射はただの関数である。群論では群の準同型写像である。位相幾何学においては、これは連続関
数にあたる。普遍代数において、射は一般的に準同型写像として知られている。

射や、間に射が定義されるような構造(対象)についての抽象的な学問が圏論の一部を形成して
いる。圏論において、射は必ずしも関数である必要はなく、たいていは2対象(集合でなくても
よい)の間の矢印(arrow)として捉えられる。ある集合の要素を別の集合にマッピングすると
いうより、これは単純にドメインとコドメインの間の何かしらの関係、という事しか表さない。

あの矢印。つーことでいいのかしらん。「構造と両立するもの」というのがどうにも ぴんとこないのだけど。

■_

将来性||次世代の言語を語る [chaika]

166 デフォルトの名無しさん [] 2011/01/20(木) 21:30:54 ID: Be: 
 >>138 
 CLR自体がLLVMに立場脅かされているような気がする。 
 
 >>160 
 気に入るかいらないかともかく、このあたりはどうかと? 
 必要ならスレも立てますよ。 
 
 - Clean : ttp://wiki.clean.cs.ru.nl/Clean 
 - Cobra : ttp://cobra-language.com/ 
 - Euphoria : ttp://openeuphoria.org/ 
 
 慣れの問題とはいえ、Euphoriaのsequence型の記法と関連関数だけ他の言語でも欲しいところだよ。 
 
167 デフォルトの名無しさん [sage] 2011/01/21(金) 00:01:46 ID: Be: 
 >>166 
 LLVMは今年は特許問題で荒れるの確実だし 
 CLRが有力な技術なのは今も変わらない 
 
168 デフォルトの名無しさん [] 2011/01/21(金) 01:13:27 ID: Be: 
 そこでJVMですよ 
 
170 デフォルトの名無しさん [sage] 2011/01/27(木) 17:00:00 ID: Be: 
 Q 言語 
 http://q-lang.sourceforge.net/ 
 ML/Haskell のような Prolog のような言語 
 この系では珍しく Unicode を始めとするマルチエンコーディング対応 (要 iconv) 
 VM が 900KB ほどのライブラリなので C プログラムに組込みも可 
 開発が 2008 年に事実上終了 (バグ対応などのメンテは継続) したので言語仕様も安定 
 
171 デフォルトの名無しさん [sage] 2011/01/30(日) 14:33:51 ID: Be: 
 論理型関数型言語Curryってのが良さそうなんだけど、誰か詳しい人居らん? 
 
 関数プログラミング部分はまるっきりHaskellって所だけは分かったんだが 
 
172 デフォルトの名無しさん [sage] 2011/01/31(月) 00:46:38 ID: Be: 
 >>171 
 http://ehl.jp/curry/ 
 ここのチュートリアル訳が、主な特徴や機能についてまではとりあえず訳してあるらし 
 「curry 言語」でググればほかにもいろいろ 
 
173 デフォルトの名無しさん [sage] 2011/01/31(月) 07:06:29 ID: Be: 
 >>172 
 そこも一応知ってるけど、全然訳が進まないんよね 
 やっぱ英語から勉強した方が早いんかね。。。 
 
174 デフォルトの名無しさん [sage] 2011/01/31(月) 12:12:01 ID: Be: 
 >>173 
 Haskell に論理変数 (値が定まるまでそれを参照する関数の実行を停止する変数) を組み込んで、 
 非決定性な事象を取り扱えるようにしたものらし。で、必然的に 
 http://blog.livedoor.jp/saeki_kazuhito/archives/51233612.html 
 で説明されてるように、非決定性問題を扱わせると超時間がかかるとか 
 ほかにも 
 http://www.tom.sfc.keio.ac.jp/~sakai/d/?date=20070214 
 http://alohakun.blog7.fc2.com/blog-entry-652.html 
 のように奇怪で理解し難い振る舞いをするとか、かなりクセが強いらし 
 本来的にアカデミック限定で、一般的実用性は念頭にないんじゃないかな 
 
175 デフォルトの名無しさん [sage] 2011/01/31(月) 12:38:46 ID: Be: 
 そもそもHaskellとPrologがアカデミックな言語なわけで、 
 それらのハイブリッド言語であるCurryに一般的実用性を求めるのは 
 ちょいと酷な希ガス 
 

特許で荒れるというのは、パテントトロールが待ち構えてるとかいう話なんだろか。

■_

C#, C♯, C#相談室 Part64 

526 デフォルトの名無しさん [] 2011/02/09(水) 23:16:24 ID: Be: 
 前のポーカーのものです。 
 ありがとうございました。 
 今回私が作ったポーカーです。 
 駄作です・・・ 
 バンバン言ってくれてかまいません。 
 遊び方のテキストが参照が違っているので、直してくれれば嬉しいです。 
 高校の授業で教わるのは無理がありすぎる・・・ 
 
 http://uproda11.2ch-library.com/11284934.zip.shtml 
 DLkey はpoker です 
 
527 デフォルトの名無しさん [sage] 2011/02/10(木) 00:06:43 ID: Be: 
 >>526 
 高校ってそんな暇なのか?(中学校の時には個人的にやってたけど、高校じゃそんな暇なかったな…僕が無能だからか) 
 
 とりあえず、ぱっと思いついたことを箇条書きにすると 
 ・変数名はもっとわかりやすく。ましてや関数外で宣言されたメンバー変数なんて。 
 ・確かに日本語は使えるけどさ…使わない方がよくね? 
 ・リソースファイルから引っ張ってくるのも良いけど、同じサイズの画像なら、ImageListを使う手もあった 
 ・カードの画像は一度、配列に放り込んで二次元配列なりで使えば、遙かに楽になるな。 
 ジョーカーとかは14番目のカードとするか、ラッパーになるような関数内で特殊処理するなりして。 
 ・PictureBoxも配列・リストに放り込んでおくなりするとよかった。 
 ・細かいところだけど、関数の途中で変数宣言するのはイクナイ癖。やるにしても、ブロックを作ってその中にするべき 
 ・というか、isFlashなんていう大量の変数を作るくらいなら、列挙型なり、集合型…はC#にはないか、まあそいつらを使うと良い。 
 ・i i2 i3なんて変数をforループのたびに作っちゃうなんて…先生もっと生徒のサポートしろよ 
 ・usingはC#特有とはいえ、せめてtry finallyぐらい指示してあげなさいよ>先生 
 ・c1 c2…なんて変数を宣言した時点で配列に仕様と思わなかったの? というかなんかレジスタっぽくって嫌。アセンブリ嫌い 
 ・つうか、何このスクリプトで出力しました的なコードは…怖いよ 
 
 とは言え、よく頑張った。 
 パソコンに普段触れてないやつが初めてやったプログラミングにしては上出来な方だと思うよ。 
 ある意味、理想的な「初心者が組んだコード」を地でいっててすばらしい。 
 ま、そうなる前に周りの人が止めるから、そういうことにはまずならないんだけどな。 
 
528 デフォルトの名無しさん [] 2011/02/10(木) 00:27:32 ID: Be: 
 >>527 
 ですよね・・・ 
 なんとなく分かるところと分からないところがありますが 
 私自身もなんでこうなった感じはあります・・・ 
 高校じゃこれが限界・・・ 
 先生はあんまりサポートしない 
 っていうか個人でがんばるみたいな 
 まあ工業系の高校で、しかも電気の情報だから勉強してみよかみたいな? 
 先輩たちもやってるみたいだし 
 三年の一年間だけ・・・ 
 
531 デフォルトの名無しさん [sage] 2011/02/10(木) 00:59:17 ID: Be: 
 >>・細かいところだけど、関数の途中で変数宣言するのはイクナイ癖。やるにしても、ブロックを作ってその中にするべき 
 
 
 ソース見ないでケチつけるのもなんだけど、なぜイクナイのか意味不明 
 
532 デフォルトの名無しさん [sage] 2011/02/10(木) 01:17:16 ID: Be: 
 >>527の内容はかなり恣意的な内容だと思う 
 日本語使うなって言ってるけど、 
 微妙な英語力でラノベの超能力名みたいな英語書くくらいなら 
 日本語で書いたほうがいいに決まってる 
 
534 デフォルトの名無しさん [sage] 2011/02/10(木) 01:43:32 ID: Be: 
 途中で宣言するのはわりとよくやるわ 
 
536 デフォルトの名無しさん [sage] 2011/02/10(木) 01:54:31 ID: Be: 
 ・クラスに宣言した変数(メンバ変数) は 1 箇所にまとめること。上の方とか下の方とかに。 
 
 C# はいっぱい文法があるけど、どれもコードの綺麗さを保つ上で重要なものが多い。 
 徐々に覚えていくといいよ。 
 
 まあ、ちゃんと動いてるんだから上出来。俺の初心者の時を思い出した。。 
 バグが消えないんだよな。。今になっても俺はバグと戦ってるけど。 
 最低限、ブレークポイントをおいて、ウォッチ式使ってデバッグ出来るようにしておくといい。 
 ぜんぜん違う。 
 
 あと、擬似乱数生成器についてちゃんと理解できてない気がした。 
 Random rand1 = new Random(); // new Random(1); 
 Random rand2 = new Random(); // new Random(2); 
 for (int i = 0; i < 10; i++){ 
     Console.WriteLine(rand1.Next()); 
     Console.WriteLine(rand2.Next()); 
      Console.WriteLine(); 
 } 
 これを動かしたら何がいけなかったかわかると思う。(コメントの部分と差し替えてやってみて) 
 
537 デフォルトの名無しさん [] 2011/02/10(木) 01:56:33 ID: Be: 
 プログラムの中身は見てないけど 
 
 >>・細かいところだけど、関数の途中で変数宣言するのはイクナイ癖。やるにしても、ブロックを作ってその中にするべき 
 
 こういうのは論外ですね 
 Cがそれしかできなかったからって古い悪習を強要するのはやめろ 
 こういうやつが開発現場にいると激しく開発効率が下がるってしばしばコラムでも糾弾の対象になる 
 
 >>・usingはC#特有とはいえ、せめてtry finallyぐらい指示してあげなさいよ>先生 
 
 これも論外 
 
538 デフォルトの名無しさん [sage] 2011/02/10(木) 02:04:35 ID: Be: 
 C# というか、.NET 系は割と日本語変数名に抵抗感少ない文化。 
 何でもかんでも日本語って人はさすがに少ないけど、enum のメンバーとかは普通に日本語使う人多い。 
 
 変数は使う場所の直前で定義するのは C# に限らず、C++ の頃から言われてること。 
 関数の先頭で宣言とかありえない。 
 
 using は普通に教えた方がいいと思う。 
 
539 デフォルトの名無しさん [] 2011/02/10(木) 02:12:47 ID: Be: 
 変数でクソ長い複雑な英語考えるなら素直に日本語使うほうが見やすい 
 先頭は英語で初めて日本語を続けるようにするとVisualStudioのインテリセンスが使いやすくなる 
 
540 527 [sage] 2011/02/10(木) 02:26:22 ID: Be: 
 途中で宣言するのはやっぱりありか? 
 
 たしかDelphiかなんかの参考書に、どうしても途中で宣言したくなるようなことがあれば 
 その関数が必要以上に長く・複雑になってるから 
 別の関数に分けられないかどうか考えろって話だった希ガス 
 
541 デフォルトの名無しさん [sage] 2011/02/10(木) 02:28:51 ID: Be: 
 $日本語 = ""; 
 
 こんな感じで先頭に$がつけられたらいいのにといつも思う 
 今は_を付けてるけどこれってprivate変数と同じ意味で気持ち悪いのよね 
 
543 527 [sage] 2011/02/10(木) 02:36:17 ID: Be: 
 >>537 
 なぜに二重引用かわからないけど、とりあえず 
 >>>・usingはC#特有とはいえ、せめてtry finallyぐらい指示してあげなさいよ>先生 
 >これも論外 
 え?それじゃあ、例外機構いらないって話? 
 何のためにtry finallyを拡張したusingまで用意されてると思ってるの? 
 確保したりソースは確実に解放できるようにすべきじゃね? 
 それとも例外機構がある言語でも戻り値が-1か調べてやれってこと? 
 
 それこそ昔の悪しき習慣だと思うんだが? 
 
 >>539 
 それ良いよね。個人的なプログラムを書くときに、それ使ってる。 
 
549 デフォルトの名無しさん [sage] 2011/02/10(木) 02:53:29 ID: Be: 
 的確な指摘をするならともかく 
 >>527みたいに間違ったことを平気で広めるやつは害悪すぎる 
 マジでやめてくれ 
 初心者は真に受けちまうからな 
 あとスレ違いであることは間違いない 
 
551 デフォルトの名無しさん [sage] 2011/02/10(木) 06:58:08 ID: Be: 
 >>527 
 マ歴2年くらい? 
 まだまだ人に教えられるレベルに無いよ 
 あんま自惚れちゃいかん 
 
552 デフォルトの名無しさん [sage] 2011/02/10(木) 08:54:54 ID: Be: 
 マ歴半年でもあんな指摘しねえ 
 ただしみながわさんは除く 
 
553 デフォルトの名無しさん [sage] 2011/02/10(木) 08:57:53 ID: Be: 
 いやいや、むしろ527大先生はよほど実力をお持ちの方だとお見受けした 
 こんな素晴らしいアドバイスを下さる大先生がお書きになったコードが是非みたいですマジで 
 
554 デフォルトの名無しさん [sage] 2011/02/10(木) 09:28:00 ID: Be: 
 >>526 
 遊んでみた 
 最初から並び替えといてくれると親切かな?と思った 
 きたままでFlashだったんで交換なしで”交換”ボタンおしたんだけど 
 カードが小さい順に入れ替わって何となく違和感を感じた 
 
 いきなりでこれだけ出来りゃ十分だとおもうよ 
 
 自分が教えてるなら 
 カード1枚の情報をクラスに分離してやってみて 
 とか言うかも 
 

ただしみながわさんは除くてw

変数の宣言を(関数やメソッドの)先頭ではなく途中で行いたくなるようなら その分割を考えろというのはまあそうだとしても、 そういう宣言をするなというのも違うような。

■_ GNU grep

2.6 で、regex ルーチンが全面的に変わってました。 2.5までは「古い」glibc の regex だったのが、新しいものに差し替えられています。 基本的には gawk で使ってるのと同じですね(ってどっちも glibc から持ってきてるんだから 当然といえば当然)。


 C:\home\prog\src\grep-2.5.3\lib のディレクトリ

2007/06/29  03:57           249,667 regex.c
2007/06/29  03:57             1,726 regex.h

/* Extended regular expression matching and search library,
   version 0.12.
   (Implements POSIX draft P1003.2/D11.2, except for some of the
   internationalization features.)
   Copyright (C) 1993-1999, 2000, 2001 Free Software Foundation, Inc.

2.6 だとこう。


  C:\home\prog\src\grep-2.6.3\lib のディレクトリ

2010/03/20  17:54           112,499 regcomp.c
2010/02/04  17:00             3,009 regex.c
2010/02/04  17:00            25,834 regex.h
2010/02/04  01:08           131,276 regexec.c
2010/02/04  01:08            48,587 regex_internal.c
2010/02/04  01:08            24,221 regex_internal.h

is_utf8 とかあやしげなものが。

static void
internal_function
re_string_construct_common (const char *str, Idx len, re_string_t *pstr,
			    RE_TRANSLATE_TYPE trans, bool icase,
			    const re_dfa_t *dfa)
{
  pstr->raw_mbs = (const unsigned char *) str;
  pstr->len = len;
  pstr->raw_len = len;
  pstr->trans = trans;
  pstr->icase = icase;
  pstr->mbs_allocated = (trans != NULL || icase);
  pstr->mb_cur_max = dfa->mb_cur_max;
  pstr->is_utf8 = dfa->is_utf8;
  pstr->map_notascii = dfa->map_notascii;
  pstr->stop = pstr->len;
  pstr->raw_stop = pstr->stop;
}

#ifdef RE_ENABLE_I18N

/* Build wide character buffer PSTR->WCS.
   If the byte sequence of the string are:
     <mb1>(0), <mb1>(1), <mb2>(0), <mb2>(1), <sb3>
   Then wide character buffer will be:
     <wc1>   , WEOF    , <wc2>   , WEOF    , <wc3>
   We use WEOF for padding, they indicate that the position isn't
   a first byte of a multibyte character.

   Note that this function assumes PSTR->VALID_LEN elements are already
   built and starts from PSTR->VALID_LEN.  */

static void
internal_function
build_wcs_buffer (re_string_t *pstr)
{
#ifdef _LIBC
  unsigned char buf[MB_LEN_MAX];
  assert (MB_LEN_MAX >= pstr->mb_cur_max);
#else
  unsigned char buf[64];
#endif
  mbstate_t prev_st;
  Idx byte_idx, end_idx, remain_len;
  size_t mbclen;

  /* Build the buffers from pstr->valid_len to either pstr->len or
     pstr->bufs_len.  */
  end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
  for (byte_idx = pstr->valid_len; byte_idx < end_idx;)
    {
      wchar_t wc;
      const char *p;


新しいほうの glibc の regex は結構複雑で面倒なんだよなあ。

一文字が 8bit で表される範囲についてはビットベクターを使うけど マルチバイト文字に関しては単純なベクターではないので、 検索するパターンによっては文字クラスを使うと検索速度が低下というのは確かに考えられなくもない。

■_

2011年02月09日

■_

29日じゃないけど肉の日でしたと。

■_ GA

GA 芸術科アートデザインクラス 素猫47匹目 

17 名無しさん@お腹いっぱい。 [sage] 2011/02/09(水) 07:13:09 ID:AVpy+vHm Be: 
 >>1乙&前スレ1000GJ 
 原作4巻の帯でいきなり「アニメ2期決定!」とか発表されないかな。 
 そしたらまっすぐレジに行って、「店員さん、あそこのGAを全部もらおうか」とやるんだが。 
 
20 名無しさん@お腹いっぱい。 [sage] 2011/02/09(水) 08:10:55 ID:4v3Br/V9 Be: 
 >>17 
 そして運ばれてくるギャラクシーエンジェル 
 
24 名無しさん@お腹いっぱい。 [sage] 2011/02/09(水) 14:56:58 ID:RQfm9wWb Be: 
 >>20 
 それも何故か兄カネの中の人のサイン入り。 

そうなんだよなあ >GA

■_ grep

というか正規表現マッチングというか。 How to Implement World Fastest Grep.


GNU grep 2.5.X では, DFAの遷移毎に入力文字に対して mbrtowc() を用いてwchar型への変換を
行っている → ボトルネック (90%以上)

GNU grep 2.5.X は 2.6/2.7 に比べ数十倍遅い!! → 2.6/ 2.7 を使いましょう.

ほう。そんなに変わったのか。


    * このネタで学会発表とかしました. #=> JSSST, プログラミング・シンポジウム
    * 「動的なコード生成を用いた正規表現マッチャの実装」
  
僕の実装	僕の実装
GNU grep	UNIXコマンドの代表. 10年以上の歴史を持つ(ぽい).
Google RE2	Google 謹製正規表現エンジン. 2010年リリース.
鬼車	Ruby 1.9~ 標準搭載の正規表現エンジン.
PCRE	Perl 標準搭載の正規表現エンジン.
  

ときどき同じ勘違いをしているのを見かけるけど、 PCRE は「Perl Compatible RE」であって、Perlそのものとは関係ありません。

あと、GNU grep は1.0から考えれば10年じゃきかんでしょ(^^; マルチバイト文字対応が入ってからがそれくらい?

PCRE - Perl Compatible Regular Expressions
PCRE - Perl Compatible Regular Expressions

The PCRE library is a set of functions that implement regular expression pattern 
matching using the same syntax and semantics as Perl 5. PCRE has its own native API, 
as well as a set of wrapper functions that correspond to the POSIX regular expression 
API. The PCRE library is free, even for building proprietary software.

  高速なワケ.

    * ファイルI/Oの最適化(Memory-mapped I/O).
    * 最左最短マッチに基づいたDFAの最適化.
    * 固定長文字列フィルタリング.
    * 複数固定長文字列フィルタリング.
    * 正規表現からの動的なコード生成. <=# 目玉
    * コンパイラ基盤の利用による機械語レベルでの最適化.
    * スレッデッドコード.
    * というか他の正規表現エンジンが遅いだけry

  

後方参照はないのかな。

      詳しくはWebで!卒論で!
  

なんだってえっ ○| ̄|_

■_ まちがいさがし

日経Linux 2011年月号。 このためだけに買ってしまったよw

「もうつまずかないLinux 完全入門」の第11回 「正規表現」で効率的に文字を検索 (その1) から。ところで「躓かない」(つまづかない)じゃないんだろうか?>つまずかない 「躓く」のふりがなを「つまづく」にするのはおかしい?? - Yahoo!知恵袋 へえ。

それはさておき説明で出てきた表。

表3 主な名前付き文字列クラス
[:alnum:]  全てのアルファベットおよび10進数の数字 ([0-9A-Za-z] と同じ)
[:alpha:]  すべてのアルファベット ([A-Za-z] と同じ)
[:blank:]  空白文字 (スペースとタブ)
[:digit:]  10進数の数字 ([0-9]と同じ)
[:lower:]  アルファベット小文字 ([a-z] と同じ)
[:upper:]  アルファベット大文字 ([A-Z] と同じ)
[:space:]  空白文字 (スペース、タブ、改ページ)
[:xdigit:] 16進表記に使う文字([0-9A-Fa-f] と同じ)

ここでも何回か取り上げている話題ですが、たとえば [a-z] が、 a から z までの英小文字26文字を表すとは限りません。 locale によっては aAbB ... yYZ なんて範囲になります。 確かに C locale だと同じになりますけど。 また、[:lower:] では localeによってはアクセント記号つきの文字もマッチの対象になります。

表4 正規表現の主なメタキャラクタ

^               行の始まり
$               行の終わり
.               任意の一文字
*               直前の正規表現の0個以上の繰り返し
[文字の並び]    いずれかの文字
[^文字の並び]   文字の並び以外の文字
\b              単語の区切り
\<           単語の始まり
\>           単語の終わり
\w              すべての英数文字([[:alnum:]]と同じ)
\W              英数文字以外([^[:alnum:]]と同じ)

この記事、grep を使って解説しているのですが、 上記の表にあるのは GNU grep のそれであるので(当然拡張あり)、 「grep」のって書いちゃうのはどうかと。 Regular Expressions Linux の雑誌だから。つーことなんですかねえ。

表5 egrepでだけ使える正規表現

?                    直前の正規表現の0回もしくは1回の繰り返し
+                    直前の正規表現の1回以上の繰り返し
{n}                  直前の正規表現のn回の繰り返し
{n,}                 直前の正規表現のn回以上の繰り返し
{n,m}                直前の正規表現のn回からm回のの繰り返し
正規表現1|正規表現2  いずれかのパターンにマッチ
(正規表現)           正規表現のグループ化
\n                   グループ化されたn番目の正規表現にマッチした文字列を呼び出す

egrep では後方参照は「使えません」。 GNU の egrep (grep -E) で使えるのは拡張されているからです。 また、「egrepでだけ使える」とありますが、 grep では \( \) でくくれば正規表現のグループ化もできるし、後方参照もできます。 こちらは GNU の拡張は関係ありません。

GNU の拡張の話をするのであれば、GNU grep は ? は \? 、+ は \+、{} は \{ \} 、| は \| と記述すれば 同じ機能を果たすメタ文字となります。

■_

2011年02月08日

■_

しばちゅーさん

■_

おっかけちゅー

■_ Why did Google choose Python?

Why did Google choose Python? « A Curious Programmer

Why did Google choose Python? 
 
January 31, 2011 by Jared 
 
I wouldn't get into google (their interviews don't select for my brand of genius). But 
that's fine as I wouldn't be able to write perl there anyway. 
 
I was trying to think of a few reasons why Google would have chosen Python over Perl 
as their primary scripting language. A number of the ones I came up with are less 
relevant than they used to be. 

Python integrates better with C++ 
Python は C++ とよりよく integrate されている

Boost.Python promises seamless interoperability between the two languages. It has been 
a while since I've been tempted to embed a scripting language in my C++ apps so I'm 
not sure what the counterpart is in Perl if any. 

Python "threads" 
スレッド

Back in the day, these were better than the Perl offering. More recently, on Unix at 
least; with Coro, AnyEvent, Twisted, etc. it's a wash. 

Windows Implementation 
Windows での実装

A few years ago, the various Perl Windows implementations were not very high quality. 
Strawberry Perl has changed all that though. It's awesome. 

略

Rabid anti-Perlism 
 
Even smart folks I know seem to think Perl is lacking in some way in comparison to Python.
I haven't managed to get them to enumerate any reasons though so I figure they are speaking
from a position of ignorance. This could have been the case for the folks making the
decisions for google too or, more likely, they may have considered some of the other reasons
on my list. 

■_ C++

こんな分類があったのか

Itanium C++ ABI

Constructors and destructors are simply special cases of <unqualified-name>, 
where the final <unqualified-name> of a nested name is replaced by one of the 
following: 
 
 
 <ctor-dtor-name> ::= C1 # complete object constructor 
                  ::= C2 # base object constructor 
                  ::= C3 # complete object allocating constructor 
                  ::= D0 # deleting destructor 
                  ::= D1 # complete object destructor 
                  ::= D2 # base object destructor

C++ こわい

■_

InfoQ: RedGate,.NET Reflector のフリー提供を終了

InfoQ: RedGate,.NET Reflector のフリー提供を終了

Reflector を所有することには,ビジネス上の意義がありません。開発の継続がビジネスとして
成立しないのです。Reflector はツールとして現在の状態に留まったまま,新たなモバイルデバ
イスや,.NET プラットフォームの新バージョンなどの新技術に対応しなければなりません …
InfoQ: RedGate Will No Longer Offer .NET Reflector for Free

Owning Reflector doesn't make commercial sense. Further development of Reflector 
doesn't make commercial sense. And Reflector is a tool that has to stay current, it 
has to work in all sorts of new ways, with new mobile devices, with new versions of 
the .NET platform. …

owing → 所有する。か。 なんかしっくり来ないけど。 で、この .NET refrector について。

Red Gate: We could not make the free model work for us as a commercial company | ZDNet

[Ed Burnette]
Why didn't the free model work for Red Gate? 
 
[Greg Tillman]
We thought that there were two models that would continue to support a free version of 
Reflector. 
 
The first was some sort of halo effect on the rest of our products. We have some 
market leading developer tools like ANTS Performance Profiler and SQL Compare. We were 
originally working on the assumption that the huge volumes of traffic Reflector would 
bring to our website would mean users would stop and look around our other tools. It 
turns out that this wasn't the case. 
 
The second model was a typical freemium model which we have been trying to operate for 
the last 12 months. I.e. a small amount of users buy the premium version of Reflector 
and support the further development of both the premium and free versions. To be 
honest, this is not a model we typically agree with. Without heavy handed tactics like 
removing features from the free product there was no way we felt we could get the 
conversion rates to where they would need to be to make .NET Reflector a priority for 
us. 
 
We see these as our problems and although we would like to apologize for being wrong 
about our initial assumptions, we certainly are not angling for pity. Put simply - we 
were wrong.

難しい問題ですねえ。 そらなんの見返りもなしにってわけにはいかんでしょうし。

詳しくは知らんのですが、このツールって元からソースコード公開ではなかったのですよね? であれば、無料配布から35ドルでの販売となってもまあいいんじゃね。という気も。 現状でもその無料配布のものは半年だかの期限付きのようですし。

■_ Haskell でなにができるの?

reddit から。

What can I do with Haskell? : haskell

What can I do with Haskell? (self.haskell) 

Forgive me for using a title that's probably been asked so many times in here you're 
all probably sick of seeing it. 
 
A little background, I'm a Java developer by trade and I dabble with Ruby/Objective-C 
at home. Over the past week or so I've been trying to get into functional programming 
as a means to expand my mind a bit. To do this I've been messing around trying to 
learn Haskell. 
 
Now, I've spent a week or so learning this language and I'm getting a little bit of an 
understanding of the basics, but I'm getting to the point now where I'm itching to go 
out and write a little toy application or something to try and get my teeth into. 
 
This is where Haskell confuses me. While I enjoy the tutorials such as "Learn you 
a Haskell" and so on, they largely just discuss the features of the language and 
how you can use them. I'm having trouble seeing how I can translate these features 
into something usable. 
 
To me Ruby/Java/Obj-C have a broad set of paths you can go down. For example, in Ruby 
I can whip together a GUI application in MacRuby, or a CLI application or a web 
application (Sinatra/Rails etc) in a relatively short space of time. This is very 
clear to me and whenever I think of writing an application that serves a particular 
purpose, I can picture the end result in my head. 
 
With Haskell it's hard for me to get my head around this, a lot of the tutorials and 
reading material that I've used just seem to talk about creating mathematical 
abstractions. I'm not really a maths person, in fact I'm pretty useless with maths 
beyond basic algebra and arithmetic. Perhaps Haskell isn't for me in this case? 
 
The reason why I'm asking this is Haskell openly purports to be a 'general purpose 
programming language', but at the moment I'm having trouble visualising what I can do 
with it and I was wondering if anyone could point me in the right direction? 
 
 
Like zombocom, you can do anything with Haskell; the only limit is your imagination. 
 

Yes. 
 

The infinite is possible with Haskell: [1..] The only limit is your heap size. 
 

You seem to be begging for a link to Real World Haskell. Go forth and do real-world 
Haskelly things. 

 
I see two general approaches: 
 
 * Try to do in Haskell what you would normally do in Java/Ruby/etc. 
 * Try to do things in Haskell that you would never dream of doing in Java/Ruby/etc. 
 
If you're interested in the latter, I would recommend learning parsing: it's a great 
way to start using monads without actually needing to know how they work, and I think 
it's one of those things considered a "dark art" in the imperative world but 
is commonplace in Haskell. I know that I was intimidated by parsing at first, but now 
it's second nature. 
 
If you really want a project to work on, contact me privately, I usually have a few 
small projects on my wishlist, and I'm not opposed to giving a helping hand to someone 
who's starting out. 

■_

2011年02月07日

■_

ハンドアックスの投げ合い、行きたかった(謎)

■_ VBA

VBA にも、for each var in collection なんて構文があるのですが (for と each の間には空白あり)、

    for each item in collection
        ...
    next

てな具合に。

Excel の VBA の場合、この collection のところにセルの範囲を置くことができます (で、セル一つずつ列挙)。それはそれでありがたいのですが、 たとえばこの範囲が、A1セルからA100セルであったときに、A100から列挙を開始したくても コレクションの列挙を逆方向に行わせる方法も、ひっくり返す方法もないという。

     for each item in range("A1:A100").reverse
          ....
     next

とでも書ければよかったのにいいいいい。

■_ R

ちょっとソースを眺めていたら。


    char *Path = malloc( strlen(getenv("PATH")) + MAX_PATH + 10 );
    if (!Path) {fprintf(stderr, "PATH too long\n"); return(4);}
    strcpy(Path, "PATH=");
    strcat(Path, RHome);
    strcat(Path, "\\");
    strcat(Path, BINDIR);
    strcat(Path, ";");
    strcat(Path, getenv("PATH"));
    putenv(Path);
    free(Path);

こんな感じのコードがそこかしこに。 これはないだろう…(^^;

■_

■_

いろいろやってたら時間がががががが。

2011年02月06日

■_

心の野球
何ヶ月か前に図書館で予約してたのですが待ちが多く、 ようやっと順番が回ってきました。 さくっと読み終わっちゃったのですが、 これは買ってから感想を書かねばなるまいと判断しましたのであとで書きます :)

でもアサマシははっておくw
心の野球―超効率的努力のススメ

■_ これ

鬼車では警告してくれたような。オプションだけど。

正規表現 Part7 [chaika]

807 デフォルトの名無しさん [sage] 2011/02/06(日) 17:49:31 ID: Be: 
 (.+)+ 
 これってどういう意味を表している? 
 
808 デフォルトの名無しさん [sage] 2011/02/06(日) 17:55:28 ID: Be: 
 (任意の文字の1文字以上の繰り返し)の繰り返しなので 
 
 すももももももももものうち の場合 
 (す)(ももももももももも)(の)(う)(ち) 
 とヒットするに違いない 
 
809 デフォルトの名無しさん [sage] 2011/02/06(日) 18:01:40 ID: Be: 
 >>807 
 captureに全部食われるんじゃない 
 実質 (.+) と同じ。つまり空でない文字列 
 
810 デフォルトの名無しさん [sage] 2011/02/06(日) 18:21:07 ID: Be: 
 >>808-809 
 そうなのか・・・ 
 梟本で"=XX==========="に対して 
 'X(.+)+X'って正規表現を使ってたんだけど 
 イマイチ理解できなくて 
 
811 デフォルトの名無しさん [sage] 2011/02/06(日) 18:25:21 ID: Be: 
 >>810 
 何版の何ページ?小見出しも教えてくれると助かる 
 
812 デフォルトの名無しさん [sage] 2011/02/06(日) 18:25:39 ID: Be: 
 >>810 
 何ページくらい? 
 
813 デフォルトの名無しさん [sage] 2011/02/06(日) 18:30:08 ID: Be: 
 >>811-812 
 第3版の第4章、4.1.5.2、p142-143 
 正規表現エンジンの判別による説明の件 
 
814 デフォルトの名無しさん [sage] 2011/02/06(日) 18:30:36 ID: Be: 
 かぶってしまった 
 
815 デフォルトの名無しさん [sage] 2011/02/06(日) 18:37:04 ID: Be: 
 今emacsでX\(.+\)+Xを試したけど 
 =XX=========== 
  マッチしない 
 =XhhhooogggeeeX=========== 
  hhhooogggeee にマッチ 
 =XすもももももももものうちX=========== 
  すもももももももものうち にマッチ 
 
816 815 [sage] 2011/02/06(日) 19:03:06 ID: Be: 
 amazonのなかみ検索で該当のページをみたけど、 
 その正規表現はマッチさせるのが目的じゃなくて、 
 NFAだと時間がめちゃかかるよっていうことが伝えたい内容だね 
 だからわざとマッチさせずに 
 バックトラックするような例を選んであるのだと 
 
817 デフォルトの名無しさん [sage] 2011/02/06(日) 19:25:59 ID: Be: 
 >>810 
 なんとなくわかるレベルの漏れが言うのもなんだけど 
 4章全部読んで足りなければ 
 オートマトンの載ってる教科書も読んだ方がいいと思うよ 
 
 フクロウ本はDFA/NFAの話をしてるのに図を載せてないのがネック 
 
818 デフォルトの名無しさん [sage] 2011/02/06(日) 19:30:40 ID: Be: 
 あれ一発でDFA/NFAが理解できたとか言ってるやつは、はったりだよなあ。

最終的にマッチした結果は同じだとしても、そこにいたるまでの道のりが違うというか。 あ、いや、(.+)+ だけでは意味がない(変わらない)か。

■_ Scala の新機能(予定)

らしい。

Clever Title: Scala's upcoming dynamic capabilities

Thursday, February 03, 2011 

Scala's upcoming dynamic capabilities 

I was surprised to see the Scala team check in a new "Dynamic" trait into 
Scala trunk recently. Once this trait is mixed in to your class, any unresolved method 
calls are passed to an invokeDynamic() method, much like Ruby's method_missing. 
 
I've been thinking about this a lot, and I see three decent reasons for the inclusion 
of the Dynamic trait: 

1. Integration with dynamic languages on the JVM.

2. DSLs for accessing data where there's already no type safety, ie JSON and XML 
   (written by @jorgeortiz85, I think)

3. DSL for reflection. Reflection libraries are ridiculously verbose, and like 
   JSON/XML/etc libraries, offer little static typing benefits anyway.


(略)
 
Using the Dynamic trait is very easy, and really fun. I thought I'd try hooking up 
Scala to Ruby using Dynamic, JRuby, and the Java Scripting Engine (JSR 223). I was 
really pleased with how easy it was. Here's some Ruby: 

      def sub(a,b)
        a - b
      end
       
      def add(a, b)
        a + b
      end
       
      def method_missing(sym, *args, &block)
        puts("hey now!")
      end

 
With a little setup (installing JRuby to get the "jruby" scripting engine 
and getting Scala trunk running), I had this simple Scala class: 

 以下略

Dynamic な trait…?

■_ 問題

もう一つ Scala

Recursion: See Recursion - Scala Meetup in Stockholm

Scala Meetup in Stockholm 
 
Today at the Scala meetup here in Stockholm a couple of guys had prepared a test for 
the others attendees. The purpose was to cast some light on some tricky parts in Scala 
and to make us aware of what, and what not, to do. There was no prestige involved 
(thank God) and we did not get grades based on our result :-) 
 
I thought it would be a good idea to share some of the questions and their answer to 
you all out there (and also to write it down somewhere to remember myself). Below you 
can see some of the questions and a short description of their corresponding answers. 
A suggestion is that you open the Scala REPL in a terminal window and feed it with 
some code to see how it reacts. I find this a really good and effective way of 
learning the behavior of the language. 
 
All the correct answers and explanations can be found in the end of the blog post. 
 
Q1: What classes can call the method area in the code below? 
 
class Triangle(height: Double, base: Double) { 
 
 def area = height * base / 2; 
 
} 
 
A1.1: the same instance only 
 
A1.2: every instance of the same class 
 
A1.3: only the class' companion object 
 
A1.4: all classes in the same package 
 
A1.5: all classes 
 

Q2: What classes have access to the field name in the code below? 
 
scala> class Person(val name: String, val age: Int) 
 
scala> val x = new Person(“Olle”, 36) 
 
scala> x.name 
 
res0: String = Olle 
 
A2.1: the same instance only 
 
A2.2: every instance of the same class 
 
A2.3: only the class' companion object 
 
A2.4: all classes in the same package 
 
A2.5: all classes 
 
Q3: Since Scala 2.8 it's possible to replace the apply method in the companion object in a neat way, how? 
 
scala> case class Person(name: String, age: Int) 
 
scala> object Person { 
 
 | def apply(name: String) = new Person(name, 0); // newborns 
 
 | } 
 
scala> val baby = Person(“TheBaby”) 
 
baby: Person = Person(TheBaby, 0) 
 
A3: ____________________________________________ 
 
Q4: What assertions are true about the code below? 
 
scala> val numList = (1 to 1000000).toList 
 
scala> numList.head // Snippet A 
 
res1: Int = 1 
 
scala> numList.last // Snippet B 
 
res2: Int = 1000000 
 
A4.1: Snippet A and B executes equally fast 
 
A4.2: Snippet A will execute in constant time where as B executes in linear time 
 
A4.3: Snippet A will execute in constant time where as B executes in exponential time 
 
Q5: Will the code below return true or false? 
 
scala> List(“foo”, “bar”) == List(“foo”, “bar”) 
 
A5.1: true 
 
A5.2: false 
 
Q6: What is the value of x? 
 
val x = try { 7 / 0 } 
 
 catch { 
 
 case e: ArithmeticException => 1 
 
 case e: Exception => 2 
 
 } finally { 
 
 3 
 
 } 
 
A6.1: 0 
 
A6.2: 1 
 
A6.3: 2 
 
A6.4: 3 
 
Q7: What will happen when the method add is run in the code below? 
 
object Counter { 
 
 private var c = 0 
 
 def inc { 
 
 c += 1 
 
 } 
} 
 
class Object(start: Int) { 
 
 def add = { 
 
 inc 
 
 start + c 
 
 } 
} 
 
A7.1: The code won't compile 
 
A7.2: The value of counter is changed 
 
A7.3: The value of counter is unchanged 
 
Q8: In Scala there is a concept of a main contructor. What keyword is used to indicate such a constructor? 
 
A8.1: super 
 
A8.2: this 
 
A8.3: nothing 
 
A8.4: you don't have to write anything at at 
 
THE ANSWERS 

Hope you enjoyed the questions above. Here are the answers and a short explanation. 

以下略


■_

プログラミングのスキルを向上させるもっとも効果的な手段とは?

よく見直したら結構前の質問だな。まあいいやw

language agnostic - What is the single most effective thing you did to improve your programming skills? - Programmers - Stack Exchange

Looking back at my career and life as a programmer, there were plenty of different 
ways I improved my programming skills - reading code, writing code, reading books, 
listening to podcasts, watching screencasts and more. 
 
My question is: What is the most effective thing you have done that improved your 
programming skills? What would you recommend to others that want to improve? 
 
I do expect varied answers here and no single "one size fits all" answer - I 
would like to know what worked for different people. 
 
Edit: Wow - what great answers! Keep 'em coming people!!! 
 
In no specific order... 
 
 * learning other frameworks/languages, and seeing how they do things, and compare 
   that to stuff that I already know

 * reading about patterns, best practices, and then examining my old stuff and 
   applying those patterns where necessary

 * pair programming 
 * 
 
 working with people far smarter than myself 

 * Always listening to what others have to say, regardless if they're junior, 
   intermediate, senior or guru. job title doesn't mean anything.

 * Disagreeing with everything Joel says. ;) 
 

Deciding TO be a 'Jack-of-all-Trades' 
 
Fairly early in my career, I was an expert with a particular database and programming 
language. Unfortunately, that particular database lost the 'database wars', and I 
discovered that my career options were ... limited. After that I consciously decided 
that I would never let myself become boxed in like that again. So I studied everything 
I could get my hands on: Windows, Unix, C, C++, Java, C#, Perl, Python, Access, SQL 
Server, Oracle, Informix, MySQL, etc. Whatever tools and technologies are new or 
unusual, I became the 'go-to-guy' -- "Ask Craig, if he doesn't know it, he'll 
learn it." As a result I've worked on all sorts of projects, from embedded 
systems for environmental telemetry to command and control systems for missile defense. 
 
The only problem I've ever had is with companies that insist on pidgeon-holing me into 
a specialty, when my specialty is being a generalist.
[EDIT: Also known as a Polymath or Renaissance Man or multi-specialist.] 
 
Something to keep in mind ... what's the half-life of knowledge in high tech? It 
tracks with Moore's Law: half of everything you know will be obsolete in 18-24 months. 
An expert who chooses the wrong discipline can easily be undermined by the press of 
technology; a generalist only has to add some more skills and remember the lessons of 
the past in applying those skills. 


Two things: 
 
 1. Read code written by different people. 
 2. Write documentation for code written by other people. 
 
Writing code is extremely easy; every other person I know can do that. But reading 
someone else's code and figuring out what it does was a whole new world to me. 
 
Read 
 
 * books, not just websites 
 * for self-improvement, not just for the latest project 
 * about improving your trade, not just about the latest technology 
 * read code, not just you are working on. 
 
Just develop the appetite for reading. 
 
I think the most important thing you can do is make a conscious effort to improve. 
There's no single silver bullet, you have to keep looking for new sources of 
information, new experiences, and more practice. 
 
And the second most important thing, think about what you're doing, why you're doing 
it, and how you can do it better. Same thing with previous projects. Look back at what 
you've done, and how you might do it differently now. Think about what could have been 
done better, or where you could still improve on it. 
 
I see two great examples of this at work every day. I have one coworker who loves to 
learn, and wants to be the best developer he can. He's uses any downtime to read blogs, 
read books, discuss programming techniques, and ask tons of questions. He's also very 
noticeably improved in just the past year. Another coworker does his job, and does it 
fairly well. But that's all he does. He sticks with what he knows, doesn't make much 
effort to improve, doesn't work on any projects outside of his existing ones, and 
after 4 years, he has the exact same skill set and programming ability that he had 
when I met him. 

さっきの桑田の本にはこれの回答になるようなことも書かれていたなあ(と意味ありげなふり)

ところで reddit で取り上げられてたのでこれをしったのですが、 What is the single most effective thing you did to improve your programming skills? : programming

コメントに面白いものが。

What is the single most effective thing you did to improve your programming skills? : programming

127.0.0.1 reddit.com
127.0.0.1 youtube.com
127.0.0.1 redtube.com

三つ目がわからんけど。

■_

2011年02月05日

■_

ここでネタに取り上げることは意識してまして、 思っていても書かないなんてことがそれなりにあったりします。 まあ、いろいろあるんですよ(笑)

・読んだ
暗号名はマジック―太平洋戦争が起こった本当の理由
言われてみればそうだよなと思いつつ、今も同種のことがあるかもしれないと思うとちょっと怖い。 暗号が解読されて、 外交なり何なりの手の内が筒抜けになっていたというのはそれだけでも大ハンデですが、 解読されたその暗号文が誤訳されてしまったために事態がとんでもない方向に行ってしまったという。

日曜日は Colorful Pieces of Game::同人誌再販のお知らせ を買いに行かねば。

■_ ルーツ

reddit と twitter で見かけて知ったのだけど、さてどこだったけか元発言。

Arlo Guthrie and the origins of the Collection protocol | Smalltalk Zen

Arlo Guthrie and the origins of the Collection protocol 

Posted on February 2, 2011 by Dmitri Zagidulin 
 
A bit of history to make you smile: 
 
Rick DeNatale at Talk Like a Duck writes about 

How Arlo got injected into Ruby [via Smalltalk]. 

   During the interview he [Dan Ingalls] was asked about the origin of those enumeration
   methods of the Smalltalk collection classes. Alan Kay had told the interviewer that they
   had come from a song. At first Dan didn't remember this but then remembered that there
   was a song which had a string of words like inject, select, detect etc. As far as I
   recall, though he didn't name the song.

   インタビュー中に彼 (Dan Ingalls) は Smalltalk のコレクションクラスにある
   enumeration メソッド群の起源について訊ねられました。Alan Kay はインタビュアーに
   それはある歌からとったのものだと言いました。当初 Dan はそれを思い出せませんでしたが
   inject、select、detect といった単語を含んだ歌をあとから思い出しました。とはいえ
   わたしが覚えている限りではその歌の題名まではわかりませんでした。


   But I recognized it right away, here's how “Alice's Restaurant Massacree” transitions
   from the littering trial to the draft: 

   Came to talk about the draft. They got a building down New York City, it's called
   Whitehall Street, where you walk in, you get injected, inspected, detected, infected,
   neglected and selected. 

So that's how the enumeration method names came into Smalltalk (and, later on, into Ruby)! 

FORTRAN のI,J,K の起源もこんな風にすっきり解決できないかなあ。 IBMの社内文書に残ってたりしないだろうかw

■_ テコ入れ

GA 芸術科アートデザインクラス 素猫46匹目

839 名無しさん@お腹いっぱい。 [] 2011/02/04(金) 21:01:23 ID:5NY3/R9H Be: 
 この本高い 
 違和感のある原作絵が 
 好みじゃないから読む気しない 
 
840 名無しさん@お腹いっぱい。 [sage] 2011/02/04(金) 21:05:37 ID:KzGTm3EX Be: 
 好みじゃないならしょうがないよ 
 
841 名無しさん@お腹いっぱい。 [sage] 2011/02/04(金) 21:17:28 ID:ZoTtjdAD Be: 
 ttp://www.uproda.net/down/uproda214351.jpg 
 ttp://www.uproda.net/down/uproda214353.jpg 
 ttp://www.uproda.net/down/uproda214352.jpg 
 
842 名無しさん@お腹いっぱい。 [sage] 2011/02/04(金) 21:22:55 ID:k3IYwptA Be: 
 >>841 
 2枚目の画像はじめて見たな 何に載ってたヤツ? 
 
843 名無しさん@お腹いっぱい。 [sage] 2011/02/04(金) 21:26:40 ID:dV/DNZWo Be: 
 >>842 
 アニメビジュアルガイドブックですよ。 
 
844 名無しさん@お腹いっぱい。 [] 2011/02/04(金) 21:33:07 ID:F16YajRo Be: 
 >>839 
 ノダPは八九寺Pとタメはれそうだ 
 
845 名無しさん@お腹いっぱい。 [sage] 2011/02/04(金) 22:16:04 ID:wEfqiZPo Be: 
 ナミコさんのたとえツッコミ・・・! 
 
846 名無しさん@お腹いっぱい。 [sage] 2011/02/04(金) 23:03:17 ID:yyMXXenz Be: 
 >>839 
 今更ながらテンプレしたほうがいいんでないかってぐらい誤解をうむw 
 
847 名無しさん@お腹いっぱい。 [sage] 2011/02/05(土) 00:05:04 ID:GIa6mJ8C Be: 
 アニメが終われば 
 世間にとっちゃ過去の作品 
 
 今後は原作にも 
 テコ入れが必要な時期だろうが 
 
848 名無しさん@お腹いっぱい。 [sage] 2011/02/05(土) 00:08:01 ID:qH+zvd/P Be: 
 露出増えて十分テコ入ってるだろ 
 原作が夏休みに入れば水着だって…… 
 
849 名無しさん@お腹いっぱい。 [sage] 2011/02/05(土) 00:13:25 ID:Ybml81+M Be: 
 それもアニメビジュアルガイドの 
 きゆづきセンセ描き下ろし漫画のネタだったりする 
 
850 名無しさん@お腹いっぱい。 [sage] 2011/02/05(土) 00:25:00 ID:fWg16bbj Be: 
 俺がきゆづき先生だったらナミコさんとトモカネを早い段階でツンデレにして一般的な萌えと美術下ネタ連発でアニメ化はしなかったであろう 
 
853 名無しさん@お腹いっぱい。 [sage] 2011/02/05(土) 07:34:59 ID:3p0Dkx2v Be: 
 てこいれのために、2年生に進級させようぜ! 
 
854 名無しさん@お腹いっぱい。 [sage] 2011/02/05(土) 08:39:14 ID:IJZdr266 Be: 
 てこ入れのために2学年進級させようぜ! 
 
855 名無しさん@お腹いっぱい。 [sage] 2011/02/05(土) 09:10:16 ID:PCCiRCbN Be: 
 てこ入れのために二期作ろうぜ! 
 
856 名無しさん@お腹いっぱい。 [sage] 2011/02/05(土) 12:17:08 ID:UPmvPf48 Be:
    てこ入れのために二誌連載しようぜ

わたしも好きなんだけどなあ。GA。GAというと別の、なんたらエンジェルと間違われるのが ほとんどなのが悲しい。

GA -芸術科アートデザインクラス- (1) (まんがタイムKRコミックス) GA 芸術科アートデザインクラス OVA(初回限定版) [DVD]

ここで単行本全巻とかDVD全巻のアサマシは貼らないという意味のない自重 :)

■_

おもしろいコピペがあったら貼るスレinマ板part23 

70 仕様書無しさん [sage] 2011/02/04(金) 14:39:15 ID: Be: 
 687 :仕様書無しさん [↓] :2011/02/03(木) 18:22:49 
 >>686 
 >もう一度、車両を発明しようとする奴。 
 
 
 「車輪」な。 
 
 あんま背伸びすんなって。 
 
 
 688 :仕様書無しさん [] :2011/02/03(木) 18:30:51 
 そうそう。世界中で新幹線の再発明やってないで日本のを買え。

車輪を「再開発」っていうおじさんがどっかにいたなあ。

■_ どっちの

C++0x 11 [chaika]

949 デフォルトの名無しさん [sage] 2011/02/02(水) 21:13:41 ID: Be: 
 http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372 
 >Target publication date: 2012-02-28 
 
 あと一年ちょい。 
 
950 デフォルトの名無しさん [sage] 2011/02/03(木) 19:13:20 ID: Be: 
 1年後にも後1年って言ってそうだな 
 
951 デフォルトの名無しさん [sage] 2011/02/03(木) 19:14:44 ID: Be: 
 いやconcept外して軽くなったし、まとまるでしょ。 
 
952 デフォルトの名無しさん [sage] 2011/02/03(木) 19:28:03 ID: Be: 
 本の虫氏が参考書を発売するのもそのころだな。 
 
953 デフォルトの名無しさん [sage] 2011/02/03(木) 19:39:16 ID: Be: 
 そのころにはまた変わってるんだろうな 
 
954 デフォルトの名無しさん [sage] 2011/02/04(金) 07:53:50 ID: Be: 
 永久に本も完成しないのか 
 
955 デフォルトの名無しさん [sage] 2011/02/04(金) 07:58:54 ID: Be: 
 あんまり伸びると本の虫氏が餓死しかねん 
 
956 デフォルトの名無しさん [sage] 2011/02/04(金) 12:48:54 ID: Be: 
 その時には、C++0x本に「本の虫死追討」という帯を着けるよ。 

957 デフォルトの名無しさん [sage] 2011/02/04(金) 13:33:06 ID: Be: 
 追い討ちをかけるなよw 
 
958 デフォルトの名無しさん [] 2011/02/04(金) 23:57:54 ID: Be: 
 何も完成版じゃなくても、策定途中版でも出せばいいのにな。 
 
 何で完成版にこだわるのか意味不明だ。 
 
959 デフォルトの名無しさん [sage] 2011/02/05(土) 00:13:30 ID: Be: 
 途中で仕様が変わってゴミになるかもしれないのに 
 そんなの買う人いるの? 
 
960 デフォルトの名無しさん [] 2011/02/05(土) 00:22:21 ID: Be: 
 ゴミになるかもしれない知識に10960のレスが付いているわけだ。 
 
961 デフォルトの名無しさん [sage] 2011/02/05(土) 00:32:57 ID: Be: 
 最終的な仕様ではなく途中経過にも価値はある罠 
 
962 デフォルトの名無しさん [sage] 2011/02/05(土) 00:56:55 ID: Be: 
 買う気がない人は何とでもいえるだろう 
 
963 デフォルトの名無しさん [sage] 2011/02/05(土) 01:02:09 ID: Be: 
 できれば紙の本として\5,000くらいで出てくれるとありがたいんだが。 
 
964 デフォルトの名無しさん [sage] 2011/02/05(土) 01:12:06 ID: Be: 
 ロングゲートから出るの? 
 
965 デフォルトの名無しさん [sage] 2011/02/05(土) 03:32:02 ID: Be: 
 >>958 
 VC6の悪夢を繰り返してはならない・・・と言いたいが 
 既に2010で同じ事が起こりそう 
 
966 デフォルトの名無しさん [sage] 2011/02/05(土) 09:23:55 ID: Be: 
 とっとと実装しろ派 vs 中途半端な物を実装するな派 
 に挟まれて苦悶するMS 
 
967 デフォルトの名無しさん [sage] 2011/02/05(土) 09:44:15 ID: Be: 
 お前らは参考書の話をしているのか、それともコンパイラの話をしているのかどっちなんだ。 
 

まあドラフト段階のは正式に決まったあとには価値がほぼゼロになるしねえ。

■_ 気になる

うぃきぺの Ruby の項目を見ていたら。

Ruby - Wikipedia
 
Ruby(ルビー)は、まつもとゆきひろ(通称Matz)により開発されたオブジェクト指向スクリプ
ト言語であり、従来Perlなどのスクリプト言語が用いられてきた領域でのオブジェクト指向プロ
グラミングを実現する。Rubyは当初1993年2月24日に生まれ、1995年12月にfj上で発表された。
名称のRubyは、プログラミング言語Perlが6月の誕生石であるPearl(真珠)と同じ発音をするこ
とから、まつもとの同僚の誕生石(7月)のルビーを取って名付けられた。 

(略)

構文は、ALGOL系を継承しながら、可読性を重視している。Rubyにおいては整数や文字列なども
含めデータ型はすべてがオブジェクトであり、純粋なオブジェクト指向言語といえる。 

構文は、ALGOL系を継承しながら、可読性を重視している。 ってことは、Algol系の言語の構文 (が具体的に何を言うのかわからんけど) は可読性が良くないということ? それはちょっと違うんじゃなかろうか。

■_ 三分検索

これも reddit だかで取り上げられた記事からたどっていったら見つかったもの。 二つに割っていくより効率よく見つけられるってことなんだろうか。

Ternary search - Wikipedia, the free encyclopedia
 
A ternary search algorithm is a technique in computer science for finding the minimum 
or maximum of a unimodal function (function that is either strictly increasing and 
then strictly decreasing or vice versa). A ternary search determines either that the 
minimum or maximum cannot be in the first third of the domain or that it cannot be in 
the last third of the domain, then repeats on the remaining two-thirds. A ternary 
search is an example of a divide and conquer algorithm (see search algorithm). 

The function 
 
Assume we are looking for a maximum of f(x) and that we know the maximum lies 
somewhere between A and B. For the algorithm to be applicable, there must be some 
value x such that 
 
 * for all a,b with A ≤ a < b ≤ x, we have f(a) < f(b), and 
 * for all a,b with x ≤ a < b ≤ B, we have f(a) > f(b). 
 
== Run Time Order == 
 
T(n) = T(n/3) + c 
 
 Θ(log n) 
 
== Recursive algorithm for trinary search == 
 
a=>array elements; 
k=>element to be searched; 
i=>0; 
j=>(size of array)-1 
int tsearch(int *a,int i,int j,int k) 
{ 
    int m1,m2; 
    m1=(i+j)/3; 
    m2=2*(i+j)/3; 
    if(i<=j) 
    { 
        if(k==a[m1]) 
            element found; exit; 
        else if(k==a[m2]) 
            element found; exit; 
        if(k<a[m1]) 
            return(tsearch(a,i,m1-1,k)); 
        else if(k>a[m2]) 
            return(tsearch(a,m2+1,j,k)); 
        else
            return(tsearch(a,m1+1,m2-1,k)); 
    } 
    else 
        element not found; exit; 
}

■_

■_ FizzBuzz 的な

no duplicates, please | united-coders.com

Hey, this time I have a litte quiz. The implementation will be in different languages 
but the task is always the same. 

さあ今回はちょっとしたクイズを出すよ。
実装は違う言語になるだろうけど、やることはいつでも同じだ。

This is also a good interview question to see how the candidate's skills in different 
areas are and it's brief enough for phone interviews, as she can provide the idea on 
how to solve the problem and does not need to implement code. 

We will use bash, some scripting or higher language and database specific solutions. 

the task 
課題

We have a text file with 13 Million entries, all numbers in the range from 1.000.000 
to 100.000.000. Each line has only one number. The file is unordered and we have about 
1% duplicate entries. Remove the duplicates. 

今手元に、13万1300万個のエントリが格納されているテキストファイルがあります。
すべての数値は 1,000,000 から 100,000,000 の (たぶん . を小数点につかう地域の
人だったんだろうと推測) の範囲にあります。一行には一つだけしか数値がありません。
ファイルの内容の順序は整っておらず、また、おおよそ 1% のエントリが重複しています。
この重複を取り除いてください。

the task remove the duplicates. the challenge: be efficient and brief 
課題は重複を取り除くことです。
余裕のある人は効率を良くしたり短くしてください

 * stay on your shell, by either script or provided tools filter the file
   シェル上で、スクリプトか提供されたツールでファイルをフィルタリングします

 * use a scripting language of your choice to filter the file
   好きなスクリプティング言語を使ってやってみましょう

 * use a high-level language of your choice to filter the file
   (I'm really looking forward to some Java solutions)
   好きな高水準言語を使ってやってみましょう

 * use sql (by importing the data, or assume you already have the data in a table) 
   SQLを使ってみましょう

(in the interview it would be: give me one answer per field, in comments it's enough 
to post one answer, but the more the better ) 
 
There's no limit on what you're allowed to do. Just try not to stress the cpu 
unnecessarily and memory too much. 

特に制限はありません。CPUに不必要な負荷をかけたりメモリーを必要以上に大量に
使うようにしなければよいです。

I'm excited to see your solutions. 

sort -u ってコメントがついてますが、まあそこはそれ。

2011年02月04日

■_

ほひひ。

■_ リベンジとか

集計と順位付けをするには - Java Solution会議室

裕介さん、とりあえず今は知識が足りなくてできそうにない。 
という事がわかりました。 
基礎を叩き上げてからもう一度リベンジしたいと思います。 
ありがとうございました。 
 

「基礎から」たたき上げることはあっても、「基礎を」たたき上げる ことはないんじゃないかなあ。 「リベンジ」は以下略。

■_ Starter Edition

やはり話題に。

should I move to the new Delphi XE Starter? - Stack Overflow

I am a Turbo pascal/Borland pascal/Delphi developer, since 1987. I currently only use 
Delphi for maintaining old tools that I (and some friends of mine) use privately. 
Unfortunately all my professional codes have already been ported, some even with my 
direct involvement :) to other development languages and environments, sad. OK, sorry 
for this digressive introduction. Let me get to my question. 

わたしは 1987年以来の、Turbo pascal/Borland pascal/Delphi の developer です。
現在は自分(と数人の友人)が privately に使っているツールのメンテナンスのためだけに
Delphi を使っています。残念ながらわたしの professional code はすでに移植済みで


I currently own Delphi 7 professional. It was an expensive move, never worth what it 
costed, just for my hobbyist usage.

今わたしは Delphi 7 professional を持っています。これから移行することは
わたしの hobbyist usage には高価で、それをおこなうだけの価値を見いだせないものでした。


Now, this XE Starter edition has appeared. At 149€, it looks like a good deal. It 
seems that it comes with almost everything I use now, and with some things I miss; 
unicode and generics, specially. 
 
Do you know if there is any hiden (bad) surprise in this offer? So, should I stay or 
should I go? 
 
What are in your opinion the pros and cons of such a move? 
 
thanks. 
 
How can you live without Unicode?
 

What you also need to factor into the price is: How many evenings of FUN you're going 
to have playing with all the features, learning all of the new language improvements, 
and going over your old code to take advantage of them. I'm not even being sarcastic :) 

 

Given the missing VCL source AND no command line compiler, Delphi Starter Edition is a 
NonStarter IMO. 

 
The command line tools are included, see: 
delphihaven.wordpress.com/2011/02/01/starting-starter. I assume that also includes the 
command line compiler.
 
@Marjan Venema, see community.devexpress.com/blogs/ctodx/archive/2011/02/02/… We've 
hit the same problems when investigating if we can easily support Delphi Starter with 
NexusDB

 
The worst "cons" of Starter is absence of VCL sources (not mentioned in 
feature matrix, but discussed in blogs 

If you're a hobbyist using Delphi 7 you might as well try to switch to FreePascal. 
Comes with full source :-) 

 
I do already use (and enjoy) FP and Lazarus. thanks for the suggestion. 
 
The XE versions have a much nicer IDE, Unicode, and support for Vista and Win7. I'd go 
for it if I was still on Delphi 7. 


site design / logo © 2011 stack overflow internet services, inc; user contributions licensed under cc-wiki with attribution required 

■_ 新機能

1.9 の新機能の紹介記事って自分の知らない(よくわからない)ものもあってありがたいのですが、 なかなか広まらんのだなあ 1.9。と思わなくも。

New Ruby 1.9 Features, Tips & Tricks - igvita.com

New Ruby 1.9 Features, Tips & Tricks 
 
Ruby 1.9 packs in a lot of new and improved features at all levels: it introduces a 
few new syntax constructs, the built-in libraries have been updated with hundreds of 
new methods and classes, it adds language level support for characters encodings, it 
ships with an entirely new virtual machine, and the list goes on. If you haven't 
already, you should seriously consider upgrading to Ruby 1.9 as it is a definite step 
up from the previous versions in all respects. 
 
For the most part, you could upgrade from Ruby 1.8.x and remain blissfully unaware of 
the many updates and improvements within the language - but what fun would that be? 
For the curious, Ruby 1.9 Pickaxe is probably the single best resource to get yourself 
up to speed. To give you a flavor, below is a list of my favorite 30 tips, tricks and 
features - feel free to clone the gist and add your own! 

New Ruby 1.9 Features, Tips & Tricks 
 
def tip(msg); puts; puts msg; puts "-"*100; end 
 
# 
# 30 Ruby 1.9 Tips, Tricks & Features: 
# http://www.igvita.com/2011/02/03/new-ruby-19-features-tips-tricks/ 
# 
 
tip "Upgrading to Ruby 1.9 is simple: rvm install 1.9.2 && rvm --default 1.9.2" 
 
tip "Ruby 1.9 supports named captures in regular expressions!"
  Ruby 1.9 は正規表現の named capture をサポートしています
 p "hello 2011!".match(/(?<year>\d+)/)[:year] # => "2011" 
 
tip "Ruby 1.9 uses Oniguruma as a new regex engine, and @pragprog has a fantastic (and free!) PDF on it: http://bit.ly/hIzvOi" 
 
tip "Ruby 1.9 allows default arguments at the beginning of a method!"
    メソッドの最初にデフォルト引数を使えるようになりました!

 def f(a=1, b); p [a,b]; end; 
 p f(2) # => [1, 2] 
 
tip "Ruby 1.9 changed #to_s to use Object#inspect by default!"
   デフォルトでは #to_s から Object#inspect を使うようになりました!

 puts({a:1, b:[2,3]}.to_s) # => {:a=>1, :b=>[2, 3]} 
 
tip "Ruby 1.9 added Hash#assoc, which returns a two element array [key, hsh[key]]!"
    二つの要素を持つ配列 を返す [key, hsh[key]] Hash#assoc が追加されました
 p({a: 1, b: 2}.assoc(:b)) # => [:b, 2] 
 
tip "Ruby 1.9 allows splat argument anywhere in a method's parameter list"
    メソッドのパラメーターリストのどこででも引数を splat できるようになりました
 def a(a,*b,c); p [a,b,c]; end 
 p a(1,2,3,4) # => [1, [2, 3], 4] 
 
tip "Ruby 1.9 allows matching regular expressions against a symbol!"
   シンボルに対して正規表現のマッチングを行えるようになりました
 p :ruby_symbol.match(/symbol/) # => 5 
 
tip "Ruby 1.9 supports new & more compact hash syntax for symbol keys! "
    シンボルキーのためのより簡潔なハッシュの構文がサポートされました
 p({a:1, b:2}) # => {:a=>1, :b=>2} 
 
tip "Ruby 1.9 supports new 'stabby proc' syntax!"
    新しい 'stabby proc' がサポートされました
 f = -> a,b { p [a,b] } 
 p f.call(1,2) # => [1, 2] 
 
tip "Ruby 1.9 hashes preserve the insertion order of elements! for the curious: http://bit.ly/e0oEun"
    ハッシュが要素の挿入順序を保存するようになりました
 p({a:1, b:2}) # => {:a=>1, :b=>2} 
 
tip "Ruby 1.9 supports 4 ways to call a proc!"
    四種類の proc の呼び出しをサポートしています
 f =->n {[:hello, n]} 
 p f[:ruby] # => [:hello, :ruby] 
 p f.call(:ruby) # => [:hello, :ruby] 
 p f.(:ruby) # => [:hello, :ruby] 
 p f === :ruby # => [:hello, :ruby] 
 
tip "Ruby 1.9 no longer supports .each on a string! instead, use: .chars, .bytes, .lines, .each_char, etc..." 
   string に対する .each はサポートされていません。代わりに .chars, .bytes, .lines, each_char などを使います

tip "Ruby 1.9 allows default parameters in procs & lambdas!"
    proc や lambda のデフォルトパラメーターが使えるようになりました

 f =-> a,b=1,*c { p [a,b,c] } 
 p f.call(1) # => [1, 1, []] 
 p f.(1,2) # => [1, 2, []] 
 p f[1,2,3] # => [1, 2, [3]] 
 
tip "Ruby 1.9 added ObjectSpace.count_objects method which returns a hash of types+counts of objects in current process" 
    ObjectSpcae.count_object メソッドが追加されました

tip "Ruby 1.9 added each_with_object to Enumerable!"
    Enumerable に each_with_object が追加されました

 p (1..10).each_with_object([]) {|i, a| a << i*2 } # => [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] 
 
tip "Ruby 1.9 added Object#public_send, which will raise an error on messages to private methods!" 
 
tip "Ruby 1.9 added Enumerable#sample(n), which returns n random elements!"
    ランダムに要素を返す Enumerable#sample(n) が追加されました

 p [1,2,3,4].sample(2) # => [2, 3] 
 
tip "Ruby 1.9 added Kernel#define_singleton_method"
    Kernel#define_singleton_method が追加されました

 c = 'cat'; c.define_singleton_method(:hi) { p 'hi' }; 
 p c.hi # => "hi" 
 
tip "Ruby 1.9 added support for block-local variables!"
    ブロックローカルな変数のサポートが追加されました
 v = 'ruby'; [1,9].map {|val; v| v = val } 
 p v # => "ruby" 
 
tip "Ruby 1.9 blocks now allow blocks as parameters!"
    ブロックがブロックをパラメーターに取れるようになりました
 b = -> v, &blk { p [v, blk.call] } 
 p b.call(:a) { :b } # => [:a, :b] 
 
tip "Ruby 1.9 threads are now mapped (1:1) to OS threads! ex: gdb -p [ruby PID], info threads - yes, there is still a GIL."
    スレッドが OS のスレッドに一対一対応するものになりました
 
tip "Ruby 1.9 added Process.daemon to put current process into background, see docs @ http://bit.ly/hY55HK" 
    カレントプロセスをバックグラウンドに送り込む Process.dameon が追加されました

tip "Ruby 1.9 ships with JSON support: require 'json' + Kernel#j, Kernel#jj"
    JSON サポートともに ship されるようになりました

 require 'json' 
 h = {a:1,b:2} 
 j(h); jj(h) 
 
tip "Ruby 1.9 allows you to set a default input encoding with a magic comment (http://bit.ly/dRhgHy) ex: # encoding: UTF-8" 
    マジックコメントによるデフォルトの入力エンコーディング指定ができるようになりました

tip "Ruby 1.9 added GC.count & GC::Profiler (http://bit.ly/fhPsiJ)" 
 GC::Profiler.enable; GC.start; puts GC::Profiler.result 
 
tip "Ruby 1.9 allows you to introspect YARV bytecode!"
    YARV バイトコードの introspect ができるようになりました

 puts RubyVM::InstructionSequence.compile('a = 1; p 1 + a').disassemble 
 
tip "Ruby 1.9 shipped with MiniTest, a successor to Test::Unit! worth a look: http://bit.ly/ea2xmP" 
 
tip "Ruby 1.9 regular expressions allow you to invoke subpatterns (recursively, even) with \g<name>! http://bit.ly/ikgT2t" 
 
tip "Ruby 1.9 added Process.spawn which will execute cmd in subshell" 
 pid = spawn('echo hello') 
 p Process::waitpid2(pid) # => [62777, #<Process::Status: pid 62777 exit 0>] 
 
tip "Ruby 1.9 added Enumerable.reduce, which is equivalent to Enumerable.inject"
    Enumerable.inject と等価な Enumerable.reduce が追加されました

 p [1,2,3].reduce(:+) # => 6 
 
view raw ruby-1.9-tips.rb This Gist brought to you by GitHub. 
 

House of Voodoo - New OrleansBourbon Street - New OrleansChicago DowntownChicago DowntownUnderworld of Chicago Boston Harbor Sunset view gallery 
 
wordpress Copyright © 2005-2011 Ilya Grigorik 
 
 Entries RSS Comments RSS 

■_

2011年02月03日

■_

今度の日曜日の朝はいつもよりは早く起きないといけないかなあ。えぐ。

■_

やばいプログラマ迷言集 [chaika]
 
1 仕様書無しさん [] 2011/02/02(水) 15:17:48 ID: Be: 
 ブログなどでネタにしたいところだが、自分の会社がやばいとこだって思われるのは嫌だお。 
 だからここに書くお! 
 
2 仕様書無しさん [] 2011/02/02(水) 15:21:50 ID: Be: 
 ゲーム会社S、K氏の発言 
 
 「この1個の関数の中で処理出来ることだけが俺の担当だ」 
 
 1個の関数しか作らず、中は2000行以上。 
 最近は他の人が追加するため、「もう把握出来ない。すでに自分の担当ではないかも知れん」と言ってる。 
 
 普通なら1週間で出来ることを、1年4カ月かけて作業。 
 
3 仕様書無しさん [] 2011/02/02(水) 15:25:22 ID: Be: 
 ゲーム会社P、S氏の発言 
 
 「原因不明で再現できないので直した可能性が高いです」 
 
4 仕様書無しさん [] 2011/02/02(水) 15:27:30 ID: Be: 
 ゲーム会社P、F氏の発言 
 
 「お金を貰って仕事を請け負ったけど、仕事はそっちで引き取って欲しい」 
 
5 仕様書無しさん [] 2011/02/02(水) 15:39:12 ID: Be: 
 ゲーム会社P、N氏の発言 
 
 「作業に集中するので月末まで連絡は取れない」 
 
6 仕様書無しさん [] 2011/02/02(水) 15:41:20 ID: Be: 
 ゲーム会社S、A氏の発言 
 
 「お前の仕事を手伝ってやるから、俺の分はお前がやれ」 
 
7 仕様書無しさん [] 2011/02/02(水) 16:24:38 ID: Be: 
 ゲーム会社S、M氏の発言 
 
 「残業代はタバコ仲間にしか出さない。部のローカルルールで決まっている」 
 
8 仕様書無しさん [sage] 2011/02/02(水) 19:00:23 ID: Be: 
 ゲームプログラマになったら、人生終わりだよ… 
 
9 仕様書無しさん [] 2011/02/02(水) 22:24:26 ID: Be: 
 >>4 
 それ何て三菱電機MDIS? 
 
10 仕様書無しさん [sage] 2011/02/03(木) 00:54:56 ID: Be: 
 A「ping飛ばしてみて!」 
 
 B「ペンギンの?」 
 
11 仕様書無しさん [] 2011/02/03(木) 17:53:06 ID: Be: 
 ゲーム会社P、N氏の発言 
 
 「バグを報告する時は原因まで調べて報告して」 
 
 「原因まで分かったなら、なんで直さないの!?」 
 
12 仕様書無しさん [sage] 2011/02/03(木) 18:38:09 ID: Be: 
 >「バグを報告する時は原因まで調べて報告して」 
 これ、おれも言われたことある 
 馬鹿だよなw 
 思いっきり馬鹿だよな! 
 
13 仕様書無しさん [sage] 2011/02/03(木) 19:41:17 ID: Be: 
 バグを発見する奴がドカンと減る魔法の言葉だな。 
 
14 仕様書無しさん [] 2011/02/03(木) 21:01:49 ID: Be: 
 ゲーム会社P、S氏の発言 
 
 「修正しました。確認お願い致します。」 
 
 「なにが原因だったのでしょうか?」 
 
 「分かりません」 

「見当違いの原因の指摘」と一緒にきたバグレポートを受け取ったりすると そっちのほうがしょんぼりんぐだけどなあw

■_ けもののすうじ

中身までは読んでないけど、コメント数が300突破してた。 Next language: Java Hangs When Converting 2.2250738585072012e-308 : programming

で、これ、PHPのあれと一緒かと思ったら実はまったくの同一現象というわけでもないらしく。 Island Life - またまた浮動小数点数話 Gauche Devlog - Bitten by floating point numbers again

浮動小数点数むずい。

■_ その考えはなかった

2011-01-18 - Ruby親方
■[Ruby]さくっと配列をランダムに半分に割りたいんだけど、いい方法はないものか。
 
ary1にデータを入れといて、 
 
ary2=[] 
(0..(ary1.size/2-1)).each{|n|d=ary1[rand(ary1.size-1)];ary1.delete(d);ary2<<d} 
 
なんだかものすごくカッコ悪いんだけど。 
 
(一応、ユニークなデータであるという前提です。) 
 
mojamoja_mixi 2011/01/19 09:22 
考えてみました。(Ruby1.8.7p330 以降) 
 
ary1, ary2 = (0..9).to_a, [] 
ary1.shuffle.tap{|a| ary1, ary2 = *a.partition{|i| a.index(i).even?}} 
p ary1, ary2 
 
主旨が間違っていたらスミマセン。 
 
sumim 2011/01/19 09:42 shuffle!して二分するとかでは駄目でしょうか。 
 
ary2 = ary1.shuffle!.shift(ary1.size/2) 
 
xibbar 2011/01/19 10:19 とみたさんの案: 
ary2=ary.shuffle!.slice!(0,ary.size/2) 
 

なるほどー>シャッフルしてから分ける

■_ クイックソートいろいろ

ってわけでもないんですが。

pid at blogs.perl.org: The Beauty of a Perl Quicksort

The Beauty of a Perl Quicksort 
By pid on February 3, 2011 7:15 AM 
 
Yet Another Misleading Title. :) 
 
err...I have to say, (I can't remember the exact time I met this version of quicksort), 
ever since the Haskell version was born, there were (and still are) various 
implementations available in various languages. This version of quicksort is a very 
nature "translation" of what the algorithm is: 

Haskell バージョンのそれが生み出されて以来、さまざまな言語でいろいろな実装が
行われました。そのやり方のクイックソートは、次のようなアルゴリズムをとても自然に
「翻訳したもの」です:


function quicksort(list) { 
 select a pivot; 
 return (quicksort([x|x<pivot]), pivot, quicksort([x|x>pivot])); 
} 
 
Today, I met this version again in here (reddit.com). For convenience, let me repost 
the Lisp code: 
 
(defun quicksort (lis) (if (null lis) nil 
  (let* ((x (car lis)) (r (cdr lis)) (fn (lambda (a) (< a x)))) 
   (append (quicksort (remove-if-not fn r)) (list x) 
    (quicksort (remove-if fn r)))))) 
 
I wonder if I could reinvent(port, steal, rob, grab...whatever) it to Perl...and this 
is what I did: 

このやり方をPerlでもできたらいいなあと思い、やってみたのが次のものです:

sub quicksort { 
  return () if @_ == 0; 
 
  my ($head, @tail) = @_; 
  my $less_than_head = sub { $_[0] < $head }; 

  return quicksort( grep { $less_than_head->($_) } @tail ), 
         $head, 
         quicksort( grep { not $less_than_head->($_) } @tail ); 
} 
 
...and Rosetta Code can always bring me a "better(more Perlish)" one: 
 
sub quicksort { 
    @_ <= 1 ? @_ : do { 
        my $pivot = pop; 
        quicksort( grep {$_ <= $pivot} @_ ), 
        $pivot, 
        quicksort( grep {$_ > $pivot} @_ ) 
    } 
} 
 
Don't you think my Perl code is "beautiful"(and more like plain English) too? 
 
IMHO, the beauty comes out of the way it is implemented, not the language we use. 
"Perl is ugly, I want you to create beautiful things in Perl", we all agree 
with that. ;-) 


■_ call by

今回もわたしは書き込んでません :)

Ruby 初心者スレッド Part 40 

762 デフォルトの名無しさん [sage] 2011/02/02(水) 12:31:49 ID: Be: 
 下記サイトを見て思ったのですが、単に引数aとbが指し示すオブジェクトを変えただけ 
 で(a = a + 1)、実引数のほうは変化していないので値渡しだと言っているのには 
 ちょっと違和感を感じます。 
 
 後述に、Arrayオブジェクトを例に出して、参照の値渡しの話をしていますが、 
 これだと、まるでFixnumオブジェクトの場合は、同じ値の新しいオブジェクトを作って 
 それを渡す値渡しで(Fixnumでは値が同じで異なるオブジェクトというのはない気はしますが)、 
 Arrayオブジェクトだと参照の値渡しになると言っている感じがします。 
 
 まだRubyを学び始めて間もないので、私の勘違いかもしれませんが、皆さんはどう 
 思われますか? 
 
 Rubyist Magazine - 値渡しと参照渡しの違いを理解する 
 http://jp.rubyist.net/magazine/?0032-CallByValueAndCallByReference 
 
 def foo(a, b) # a, b を「仮引数」という 
 a += 1 
 b += 2 # a と b を変更する 
 end 
 
 x = 10 
 y = 20 
 foo(x, y) # x, y を「実引数」という 
 puts x #=> 10 # 変更されてない 
 puts y #=> 20 # 変更されてない 
 
763 デフォルトの名無しさん [sage] 2011/02/02(水) 12:47:00 ID: Be: 
 > 下記サイトを見て思ったのですが、単に引数aとbが指し示すオブジェクトを変えただけ 
 > で(a = a + 1)、実引数のほうは変化していないので値渡しだと言っているのには 
 > ちょっと違和感を感じます。 
 
 なぜどのように違和感を感じるのでしょうか。 
 それが値渡しなのですが。 
 
764 デフォルトの名無しさん [sage] 2011/02/02(水) 12:59:27 ID: Be: 
 fixnumもオブジェクトのはずなのに、なぜ値型の値渡しみたくなってるかって疑問? 
 数値型がイミュータブルだからとかそういう話なんじゃないかな知らんけど 
 
765 デフォルトの名無しさん [sage] 2011/02/02(水) 13:07:19 ID: Be: 
 左辺渡し右辺渡しって呼ぼうぜ! 
 
766 デフォルトの名無しさん [sage] 2011/02/02(水) 13:20:31 ID: Be: 
 PHPはすごいなあ 
 
 function hoge($arg) 
 { 
     $arg[0] = 1; 
     return $arg; 
 } 
 $arr = array(); 
 $arr[0] = 0; 
 
 $ret = hoge($arr); 
 var_dump($arr); #=> 0 
 var_dump($ret); #=> 1 
 
767 デフォルトの名無しさん [sage] 2011/02/02(水) 14:02:18 ID: Be: 
 つまりどういうことです? 
 
768 デフォルトの名無しさん [sage] 2011/02/02(水) 16:39:25 ID: Be: 
 >>763-764 
 >>764さんのおっしゃる通りです。 
 
 そのサイトではメモリ図を用いて説明されていて、仮引数に渡すときFixnumだとC言語のように 
 そのコピーが作られて(新たなオブジェクトを作るということでしょうか?)、Arrayだと 
 参照の値渡しだと言ってます。 
 
 しかも、Fixnumはイミュータブルなのに値を変化させたと書いてあります。 
 私の認識では、a = a + 1というのは、a + 1という新たなFixnumオブジェクトを作って、その 
 オブジェクトをaが指し示すというもので、値を変化させるというものではないと思ってました。 
 
 Rubyは数値も含めて全てがオブジェクトとうたわれているので、ArrayだろうとFixnum 
 だろうと同じような扱いをするのだと思っていたから違和感を感じました。 
 
 すなわち、ArrayやFixnumを含む全てが参照の値渡しだと思っていたということです。 
 
 実は、Fixnumのような数値はいわゆる値型のように実装(ふるまうと)されているということでしょうか? 
 それとも私の認識(もしくはこのサイトに対しての私の読解)にどこか間違いがあるのでしょうか? 
 
769 デフォルトの名無しさん [sage] 2011/02/02(水) 16:50:43 ID: Be: 
 >>768 
 > それとも私の認識(もしくはこのサイトに対しての私の読解)にどこか間違いがあるのでしょうか? 
 
 結論から言うと Yes。 
 Ruby は、Fixnum だろうと Array だろうと「値渡し」。 
 
 まず Fixnum のような、配列じゃない場合は、値渡しになることは理解していると思う。 
 Ruby の Array は何を保持しているかというと、配列の先頭のアドレスだけを持っている。 
 (配列の実体を直接持っているわけではない。C言語での、char と char* の違いと同じ) 
 
 そしてメソッドに Array を渡すと、メソッドを受け取った側(仮引数)では、アドレスがコピーされている。 
 
 メソッドの呼び元の Array と、メソッドの中の Array の実体はそれぞれちがうものであり、 
 配列の先頭アドレスを、2重に持っていることになるので、「値渡し」ということができる。 
 
 ※先頭アドレスを二重に持っているものの、それぞれが同じ場所を指しているので、 
 配列の実体( >>762 のるびまでの、[10, 20])は1つしかない。 
 
770 デフォルトの名無しさん [sage] 2011/02/02(水) 16:58:12 ID: Be: 
 >>769 
 お前はそもそも値型/参照型の値渡し/参照渡しの計4通りあること理解してるのかと小一時間 
 
771 デフォルトの名無しさん [sage] 2011/02/02(水) 17:10:46 ID: Be: 
 >>768 
 あなたの解釈は概ね合っているんじゃないかな。 
 ただ、内部の実装については知らないのかも。 
 
 Fixnumなどの一部のクラスのインスタンスも「見かけ上は」他のオブジェクトと同様であるかのように振る舞う。 
 「見かけ上」であって、内部的には即値の処理に解釈されている。 
 でもそれによってRuby上での扱いが変わるということはほとんど無い。 
 強いて言えば、状態を変更するような動作はできない、という程度。 
 
 でもその「状態を変更できない」のがポイントで 
 「状態を変更出来ない、同じオブジェクト」への参照をコピーするということは 
 変数の値そのものをコピーすることにほぼ等しいワケ。 
 だって参照の値と扱う値は1対1に対応するんだから。 
 
 そのサイトの説明は若干はしょってるというか、細かい話を避けてるんだろうけど 
 強ち間違った説明かと言うとそういうワケでもないよ。 
 
772 デフォルトの名無しさん [sage] 2011/02/02(水) 17:20:18 ID: Be: 
 オブジェクトの中身を操作するからややこしくなる 
 
 def foo(a, b) # a, b を「仮引数」という 
    a = a + b # 仮引数aの指すオブジェクトに同bを足したものを仮引数aに再代入 
 end 
 a = 1 
 foo(a,1) 
 p a # => 1 #当然変化なし 
 b = [10,20] 
 foo(b, [1]) 
 p b # => [10,20] #もちろん変化なし 
 
773 デフォルトの名無しさん [sage] 2011/02/02(水) 17:32:41 ID: Be: 
 >>765 
 それが多分一番混乱しないんだが、 
 まず左辺値右辺値とは何かがわかってないとわかんない。 
 
774 デフォルトの名無しさん [sage] 2011/02/02(水) 18:31:01 ID: Be: 
 >>770 
 値渡し、参照型の値渡し、参照渡しの計3通りだよね? 
 
775 デフォルトの名無しさん [sage] 2011/02/02(水) 19:55:25 ID: Be: 
 >>771 
 Fixnumのようなクラスは、値型のように実装されているということならこのサイトの説明も 
 納得です。 
 
 ただ、Rubyは全てがオブジェクトだとうたっているので、実装上そうなっているとはいえ、 
 値型のようなふるまいの説明をするのはどうかなとは思いますが。 
 
776 デフォルトの名無しさん [sage] 2011/02/02(水) 20:59:26 ID: Be: 
 だからrubyは全部値渡しだっつってんだろバカかおめー 
 
778 デフォルトの名無しさん [sage] 2011/02/02(水) 21:19:43 ID: Be: 
 >>775 
 るびまはるびま(雑誌)でしかない。一般人向けに直感的に分かりやすい表現をしているのではないかと。 
 仮にRubyに公式な言語定義書というものが存在して、その中での記述であれば問題がもしれないが....。 
 
781 デフォルトの名無しさん [sage] 2011/02/03(木) 01:00:36 ID: Be: 
 >>775 
 引数の渡し方を理解する上においては、Fixnumが即値がどうかは特に関係がない 
 Fixnumが即値であろうがなかろうが、結論は同じで、Rubyの引数は値渡しだよ 
 
784 デフォルトの名無しさん [sage] 2011/02/03(木) 06:55:24 ID: Be: 
 >>775 
 >Fixnumのようなクラスは、値型のように実装されているということならこのサイトの説明も 
 >納得です。 
 
 「値型」って何のこと?Javaでいうプリミティブ型のことかな。 
 
 Rubyは全てがオブジェクトだけどFixnumの実装はポインタに整数値を埋め込んでいるのは確か。 
 でもそう実装になっていることと、引数が値渡しであることは関係がない。 
 
 
 >ただ、Rubyは全てがオブジェクトだとうたっているので、実装上そうなっているとはいえ、 
 >値型のようなふるまいの説明をするのはどうかなとは思いますが。 
 
 勘違いしているなあ。 
 Fixnumだろうが、それ以外の通常のオブジェクトだろうが、Rubyでは値渡しであり、 
 どちらの場合でも同じふるまいなんですけど。 
 
 なぜそんな勘違いをしてしまったのか知りたい。 
 
785 デフォルトの名無しさん [sage] 2011/02/03(木) 07:53:41 ID: Be: 
 Javaのオブジェクトは参照渡しとかいう謎の都市伝説に騙されてたとかじゃないの? 
 
786 デフォルトの名無しさん [sage] 2011/02/03(木) 07:59:47 ID: Be: 
 値型/参照型って話がなんで値渡し/参照渡しに? 
 勘違いしてるのはどっちだ 
 
787 デフォルトの名無しさん [sage] 2011/02/03(木) 08:15:16 ID: Be: 
 そもそも「値型」「参照型」って何? 
 
788 デフォルトの名無しさん [sage] 2011/02/03(木) 08:17:42 ID: Be: 
 何この痴呆症滴ループ 
 自分でサンプルコード書いてobject_idチェックしろ 
 質問者はド素人じゃないっぽいしそれくらい出来るだろ 
 
789 デフォルトの名無しさん [sage] 2011/02/03(木) 08:47:10 ID: Be: 
 >>787 
 Cで言うポインタと普通の型の違い 
 
790 デフォルトの名無しさん [sage] 2011/02/03(木) 08:59:20 ID: Be: 
 >>787 
 http://lmgtfy.com/?q=%E5%80%A4%E5%9E%8B+%E5%8F%82%E7%85%A7%E5%9E%8B 
 
791 デフォルトの名無しさん [sage] 2011/02/03(木) 10:11:15 ID: Be: 
 Ruby用語集 - Rubyリファレンスマニュアル 
 http://www.ruby-lang.org/ja/man/html/Ruby_CDD1B8ECBDB8.html#Immediate.20Value 
 
 Immediate Value 
 参照ではなく、実際の値が変数に格納さ れるもの。 
 Rubyの現在の実装ではFixnum、Symbolとnil/true/falseだけが即値である。 
 
 しかし、Fixnumが即値でないRubyの実装があっても構わないし、モデル上全ての値が 
 オブジェクトへの参照であると考えても差し支えない。 
 
792 デフォルトの名無しさん [sage] 2011/02/03(木) 10:23:03 ID: Be: 
 Rubyは参照の値渡しだろ? 
 PHPは値渡しで、&をつけると参照渡し 
 じゃね? 
 
793 デフォルトの名無しさん [sage] 2011/02/03(木) 10:29:36 ID: Be: 
 >>762 
 def foo(a, b) 
    a += 1 
    b += 2 
 end 
 
 x = 10 
 y = 20 
 foo(x, y) 
 p "x = #{x}" #=> 10 # 変更されてない 
 p "y = #{y}" #=> 20 # 変更されてない 
 
 c = x 
 d = y 
 c += 1 
 d += 2 
 p "x = #{x}" #=> 10 # 変更されてない 
 p "y = #{y}" #=> 20 # 変更されてない 
 p "c = #{c}" #=> 11 # 変更されてる 
 p "d = #{d}" #=> 22 # 変更されてる 
 
794 デフォルトの名無しさん [sage] 2011/02/03(木) 10:59:51 ID: Be: 
 >>786が言及しているけど、質問者はFixnumが値型なのか参照型なのかを聞いているのに 
 値渡し/参照渡しの回答をしている人が多いね。 
 質問への回答でなく単に値渡し/参照渡しの話をしたいだけかもしれないけど。 
 
 質問者の質問の仕方が悪いのと、引用したるびまの記事が値渡し/参照渡しについての説明 
 というのも影響しているんだろう。 
 
795 デフォルトの名無しさん [sage] 2011/02/03(木) 11:11:06 ID: Be: 
 >>792 
 >PHPは値渡しで、&をつけると参照渡し 
 
 PHPは知らないが、Cの場合は全てが「値渡し(call by vale)」。 
 変数の前に単項演算子 & を付けると、その変数のアドレス値(ポインタ値)を得えることができるし、 
 それを関数の引数として渡すこともできる。(たとえば f(&x) など) 
 けれどその場合もアドレス値を「値渡し」しているのであって、 
 それを「参照渡し(call by reference)」とは言わない。 
 
 ただし、Cだけを語る文脈の中で、その「アドレス値の値渡し」のことを「ポインタ渡し」と呼ぶことがある。 
 C限定の文脈であれば、「ポインタ渡し」という用語は間違いではない。 
 でも、Cのポインタ渡しが「参照渡し」と混同して解釈されがちなのは事実で、注意して用いるべき。 
 
 繰り返すけど、これはCの場合。PHPは知らないよ。(同じかもしれないし、違うかもしれない) 
 
796 デフォルトの名無しさん [sage] 2011/02/03(木) 11:35:40 ID: Be: 
 >>794 
 質問者への返答としては、>>791が FA(Final Answer) でいいんじゃないかと。 
 
 まとめると、Rubyの場合は、原始的(primitive)なオブジェクト(たとえばFixnum)は 
 即値(immediate value)であり、それらはメソッド呼び出しの際には値渡し(call by value)される。 
 その他のオブジェクト(たとえばArray)は即値ではなく、 
 メソッド呼び出しの際にはオブジェクトへの参照が渡される。つまり参照渡し(call by reference)される。 
 
 Cとは異なり、純粋OOPであるRuby(あるいは元祖であるSmalltalk)には、 
 アドレス(ポインタ)という概念がそもそも存在していないことに注意すべき。 
 C++やJavaのように、手続き型言語に後付けでOO機能を継ぎ足した言語は、 
 アドレスと(オブジェクトへの)参照が複雑に絡み合っているので、(厳密な意味論の)解釈は非常に難解なものになった。 
 ただし、だからといって、そんなC++/Java流の解釈をRubyに当てはめようとするのは無茶苦茶であるとしか言えない。 
 
 # 率直に言って、「Rubyはすべて値渡しである」と間違った自我流の解釈を押し付けようとする 
 # >>776,784のカキコ(同一人物?)は迷惑に感じる。(ぶっちゃければウザイの一言) 
 
797 デフォルトの名無しさん [sage] 2011/02/03(木) 11:42:35 ID: Be: 
 >>794 
 >>796みたいなアホが出てくる事を予想して先回りしてたわけだな 
 
798 デフォルトの名無しさん [sage] 2011/02/03(木) 11:55:46 ID: Be: 
 「即値」の使い方でお里が知れる 
 
800 デフォルトの名無しさん [sage] 2011/02/03(木) 12:42:11 ID: Be: 
 >>796 
 全然間違ってるよ。Ruby においては、 
 オブジェクトに原始的(primitive)かどうかなんて区別はない。 
 
 > Cとは異なり、純粋OOPであるRuby(あるいは元祖であるSmalltalk)には、 
 > アドレス(ポインタ)という概念がそもそも存在していないことに注意すべき。 
 
 んなことはない。むしろ Java より Ruby のほうが C の思想を引きずっていると思う。 
 
 むしろ >>769 あたりが FA なんじゃないかと。とはいえ >>794 の通りかも知れないけど。 
 
801 796 [sage] 2011/02/03(木) 13:03:36 ID: Be: 
 >>800 
 >んなことはない。むしろ Java より Ruby のほうが C の思想を引きずっていると思う。 
 
 その「JavaのほうがRubyよりもOOPらしい」というところをkwsk 
 
 全体的に、否定形の文体(.... ではない)に終止している感じがする。 
 XXXデハナイ(XXXは誤りである)で終えずに、YYYデアル、あるいはZZZデアルのほうが、前向きな議論ができると思う。 
 >>769のような(C++/Java流の)値渡しによる解釈はC++/Javaに慣れた人にとっては自然かもしれないけれど、 
 それをアドレス(ポインタ)という概念が存在しないRubyに当てはめようとする考え方そのものに無理がある、 
 というのが>>796の要旨。 
 
 自分としては、正直C++/Javaには詳しくないし、 
 >>791の解説を一からひっくり返してくれる解釈があれば、すごく嬉しかったりする。 
 
802 800 [sage] 2011/02/03(木) 13:19:33 ID: Be: 
 >>801 
 Java のほうがRubyよりOOPらしい、なんて一言も言ってないよ。 
 
 Ruby のほうが C の思想を引きずっていると書いた理由は、言語仕様ではないが、 
 Ruby のライブラリが C の関数と同じオプションを受け取れたりするところ。 
 (たとえば open() の第2引数(mode) とか、NKF とか) 
 
 PHP も Cの関数のラッパになっていることが多いが、Ruby も似ているので、 
 「これを呼ぶと C のあれが呼ばれるんだな」と感じることが多かったので、「C を引きずっている」と書いた。 
 「引きずっている」と書いているけど悪いと言っているわけではない。 
 
 > 全体的に否定形の文体・・・・ 
 
 ここは私の力不足なところもあるが、 
 Ruby には、Java のような primitive 型とオブジェクトの区別がなく、すべてが 
 オブジェクトなのだから仕方がない。 
 
 そのオブジェクトが immutable かそうでないかというのはあるけど。 
 
803 デフォルトの名無しさん [sage] 2011/02/03(木) 13:37:50 ID: Be: 
 >>801 
 自分もRubyを使うだけで、内部のことまで考えたことはないんだけど、、、 
 
 >>791でFixnum等が実装では即値扱いになっているのは、イミュータブルだから即値として扱っても 
 オブジェクトとしての性質が保たれるのと、パフォーマンスの問題もあるんではないだろうか? 
 
 例えば、Fixnumをオブジェクトとして実装するとGCの回収が必要となり、速度的な問題を生じるとか。 
 (即値だとGCがいらないかとか知らないけど) 
 
 他の実装はどうなんだろうか? 
 JRubyやIronRubyもCRubyと同じような実装なんだろうか? 
 >>791では即値でない実装があっても構わないと書いてあるし。 
 
805 デフォルトの名無しさん [sage] 2011/02/03(木) 14:18:14 ID: Be: 
 分かったから初心者スレでやるなよ。 
 
806 デフォルトの名無しさん [sage] 2011/02/03(木) 15:06:08 ID: Be: 
 >>801 
 「値渡し」「参照渡し」はプログラミング言語一般の引数の渡し方を説明するための用語であって 
 Ruby内の引数の渡し方を説明するためだけの用語ではない。 
 
 「Rubyに当てはめようとする……」という指摘がそもそも無理筋。 
 
807 デフォルトの名無しさん [sage] 2011/02/03(木) 16:16:21 ID: Be: 
 こういう流れって例外なく不毛だよな 
 
811 デフォルトの名無しさん [sage] 2011/02/03(木) 21:44:36 ID: Be: 
 ちょっと疑問におもったんだが、参照の値渡しでもポインタでもない、これぞ参照渡しな言語ってどんなんがある? 
 できればメジャーなやつで 
 
 あと参照の値渡しとRubyの値渡しは何が違う? 
 
812 デフォルトの名無しさん [sage] 2011/02/03(木) 21:47:58 ID: Be: 
 > ちょっと疑問におもったんだが、参照の値渡しでもポインタでもない、これぞ参照渡しな言語ってどんなんがある? 
 > できればメジャーなやつで 
 
 C++ 
 
813 デフォルトの名無しさん [sage] 2011/02/03(木) 21:49:16 ID: Be: 
 なぬ、Cは値渡しなのにC++は参照渡しなの!? 
 
815 デフォルトの名無しさん [sage] 2011/02/03(木) 21:54:52 ID: Be: 
 たしかこんなかんじ 
 
 $ cat ref.cpp 
 #include <stdio.h> 
 void foo(int &x) { x++; } 
 int main(void) { int a = 774; foo(a); printf("%d\n", a); return 0; } 
 $ gcc ref.cpp && ./a.out 
 775 
 
 参照渡しでは、仮引数 x が実引数 a の別名として機能する 
 
816 デフォルトの名無しさん [sage] 2011/02/03(木) 21:59:22 ID: Be: 
 >>811 
 自分が知る範囲ではPerl,PHP,VB6,VB.NET/C#/C++はサポートしてる 
 VB6はデフォルトで参照渡し 
 C++/VBNET/C#はデフォルトが値渡しだが参照渡し用構文がある 
 Perlは参照渡しも値渡しも可能。 
 PHPも参照渡し可能。詳細忘れた 
 Cは直接サポートしてないが参照渡しのエミュレートは出来る 
 さっき初心者スレに書いたが元ネタはこのスレか 
 
817 デフォルトの名無しさん [sage] 2011/02/03(木) 22:24:22 ID: Be: 
 参照の値渡しとかわかりづらい表現をするからややこしくなる 
 
818 デフォルトの名無しさん [sage] 2011/02/03(木) 23:20:57 ID: Be: 
 ものすごくわかりやすいです 
 
819 デフォルトの名無しさん [sage] 2011/02/03(木) 23:30:19 ID: Be: 
 >>817 
 参照渡しとごちゃ混ぜになるよりは相当マシ 
 
820 デフォルトの名無しさん [sage] 2011/02/03(木) 23:36:42 ID: Be: 
 >>815 
 そういうのrubyでどう書くのか悩んだわ昔 
 
821 デフォルトの名無しさん [sage] 2011/02/04(金) 00:34:59 ID: Be: 
 >>794 
 最初の質問である>>762を見る限りでは 
 値渡しと参照渡しについて質問してるとしか思えない 
 

Call by Reference の言語といえば FORTRAN …

■_

2011年02月02日

■_

スターバックスの紙コップ利用を減らすためのアイデアコンペに優勝したのはコップのデザインではなく、”行動”をデザインするものだった!! | greenz.jp グリーンズ これ、日本語だと「マイカップ」って書いているの resuable cup なのね原文だと。 カタカナ書きで「リユーザブルカップ」は無理としても 「マイカップ」とかゆー呼称はどうにかならんもんか。

Amazon.co.jp: Linux Threads Programming: Linux Concurrency And Performance: Ulrich Drepper: 洋書 この本の著者欄みたら Ulrich Drepper (著) だった。 買ってみるかな。

Amazon.co.jp: Linux Threads Programming: Linux Concurrency And Performance: Ulrich Drepper: 洋書
登録情報 
 
 * ハードカバー: 400ページ 
 * 出版社: Prentice Hall Ptr; 1版 (2011/2/2) 
 * 言語 英語, 英語, 英語 
 * ISBN-10: 0131487264 
 * ISBN-13: 978-0131487260 
 * 発売日: 2011/2/2

■_ Starter Edition

機能制限はまあ仕方ないとはいえ、削りすぎという気がしないでも。 とくにプロファイラーなあ。

DelphiとC++ Builderの廉価版が登場、1万4700円から - ニュース:ITpro

エンバカデロ・テクノロジーズは2011年2月1日、開発ツール製品「Delphi」「C++ Builder」の
廉価版「Starter」の販売を開始した。「Delphi Starter」「C++ Builder Starter」の価格はそ
れぞれ1万8900円(税込、以下同)。Turboエディションをはじめとする同社の開発ツール、また
は他社のいずれかの開発ツールを使用している場合は1万4700円で購入できる。DelphiとC++ 
Builderには「Professional」「Enterprise」「Architect」といったパッケージがあるが、最も
安いProfessionalでも9万3765円などで販売されており、入門者にはハードルが高かった。廉価
版を投入することで、Delphi/C++ Builderのユーザー拡大を狙う。 
 
 Delphi Starter、C++ Builder Starterにはいくつかの制限事項がある。商用にも利用できる
が、開発したアプリケーションライセンスやサービスなどによる年間収益が1000米ドル(2011年
1月31日の換算レートで8万2180円)を超えてはいけない。それを超える場合は、Professionalな
どを購入する必要がある(Starterを買っていれば、上位製品購入時に1万500円の割引が受けら
れる)。 
 
以下略

【CodeGear】Embarcaderoオッチャ その23【Delphi】
886 デフォルトの名無しさん [sage] 2011/01/31(月) 18:47:21 ID: Be: 
 Delphi XE Starter Edition 
 http://www.embarcadero.com/products/delphi/starter 
 
887 デフォルトの名無しさん [sage] 2011/01/31(月) 18:55:27 ID: Be: 
 何円なの? 
 
888 デフォルトの名無しさん [sage] 2011/01/31(月) 19:14:33 ID: Be: 
 199$ 
 
889 デフォルトの名無しさん [sage] 2011/01/31(月) 19:31:27 ID: Be: 
 アップグレードで149ドル。 
 
 日本法人価格で15900円(税抜き)くらい? 
 
890 デフォルトの名無しさん [sage] 2011/01/31(月) 21:05:38 ID: Be: 
 なんか見た感じデバッグ関連の制限が相当キツそうだな 
 
891 デフォルトの名無しさん [sage] 2011/01/31(月) 21:13:29 ID: Be: 
 > Professional 版から削られた主な機能は以下の通り (Delphi)。 
 http://ht-deko.minim.ne.jp/ft1101.html#110131_02 
 
893 デフォルトの名無しさん [sage] 2011/02/01(火) 13:56:46 ID: Be: 
 コード補完が無いとは・・・・あれ、初心者用だろ。 
 
894 デフォルトの名無しさん [sage] 2011/02/01(火) 14:38:06 ID: Be: 
 やっとウニコード対応できるなぁ。 
 大安売りしてくれ。 
 でもデバッグが超やりづらそうだな。 
 
895 デフォルトの名無しさん [sage] 2011/02/01(火) 17:12:25 ID: Be: 
 >>887 
 http://www.embarcadero.com/jp/press-releases/cbuilder-delphi-starter-edition-japanese 
 >C++Builder StarterとDelphi Starterは、それぞれ¥18,000(税別)にて販売します。これは、上位エディションの 
 >Professional版の希望小売価格の2割以下の価格となります。Turboエディションをはじめとするエンバカデロの 
 >開発ツール、または他社のいずれかの開発ツールを使用している方は、¥14,000(税別)のアップグレード価格にて 
 >お求めいただけます。製品はいずれもダウンロード版(ESD)のみです。 
 
 ですって。 
 
896 デフォルトの名無しさん [sage] 2011/02/01(火) 17:24:57 ID: Be: 
 機能の説明にフル機能のデバッガって書いてるけど 
 
897 デフォルトの名無しさん [sage] 2011/02/01(火) 17:29:28 ID: Be: 
 Delphi StarterとC++Builder Starterの両方を購入して1つのマシンにインストールして「Mini RAD Studio」のように使うことはできますか? 
 
 いいえ、1つのコンピュータには、1つのStarterエディションしかインストールすることができません。 
 
898 デフォルトの名無しさん [sage] 2011/02/01(火) 17:52:07 ID: Be: 
 コード補完もクラスエクスプローラもリソースコンパイラもなくて 
 どうやってアプリケーションを作るんだろうか 
 
899 デフォルトの名無しさん [sage] 2011/02/01(火) 19:01:01 ID: Be: 
 無いとされてる補完は、beginを入力したらendが入るとかのあれでしょ(Delphi8以降?) 
 Ctrl+Spaceの入力支援はチェック付いれるよ、データシート見ろ 
 
900 デフォルトの名無しさん [sage] 2011/02/01(火) 19:01:39 ID: Be: 
 コード補完はあるよ。 
 クラス補完がないのはDelphi6 Personalと同じ。 
 begin end補完があるのはうれしい。 
 OTAがあるのだから、クラス補完くらいなら自分で作れそう。 
 
 問題はVCLソースがついてこないことかな。 
 
901 デフォルトの名無しさん [sage] 2011/02/01(火) 19:08:02 ID: Be: 
  Professional 版から削られた主な機能は以下の通り (Delphi)。 
 
 
 * コード補完 
 
902 デフォルトの名無しさん [sage] 2011/02/01(火) 19:09:30 ID: Be: 
 >>901 
 いいからDEKOの訳なんか信用せずにデータシート見ろ 
 
903 デフォルトの名無しさん [sage] 2011/02/01(火) 19:14:18 ID: Be: 
 PDFを見ると、コード補完は空欄になっているね。 
 
 あらら。 
 
904 デフォルトの名無しさん [sage] 2011/02/01(火) 19:19:37 ID: Be: 
 これ真に受けたらデバッグ自体出来ないことにならないか 
 
905 デフォルトの名無しさん [sage] 2011/02/01(火) 19:20:08 ID: Be: 
 でも公式掲示板を見ると、Bob Swartが 
 Ctrl+Spaceは使えると言っているな。 
 
 パンフレットのコード補完はfor と打ったときに 
 i := 0 to List.Count - 1 doを補完してくれる機能 
 のことらしい。 
 
906 デフォルトの名無しさん [sage] 2011/02/01(火) 19:23:58 ID: Be: 
 7までの支援機能はたぶんこれ 
 
 >コードおよびパラメータ補完機能のパフォーマンス改善強化したCodeInsightで、コード 
 入力中にメンバーリストやパラメータヒントを表示 
 
 あと、Ctrl+Shift+上下が気になるな。旧Standardでは削られてた機能。 
 地味にこれがないと辛い。 
 
907 デフォルトの名無しさん [sage] 2011/02/01(火) 19:40:34 ID: Be: 
 エディタは外部の使えば? 
 
908 デフォルトの名無しさん [sage] 2011/02/01(火) 20:03:52 ID: Be: 
 有料のサードパーティーツールを買うとか。 
 
909 貧乏人 [sage] 2011/02/01(火) 22:23:08 ID: Be: 
 もう一声! 
 
 1万円で! 
 
910 デフォルトの名無しさん [] 2011/02/01(火) 23:29:04 ID: Be: 
 5ライセンスまでなら1個でいいから、もうちっと下げて欲しいねえ 
 
くだすれDelphi(超初心者用)その52 

543 デフォルトの名無しさん [sage] 2011/02/01(火) 16:31:25 ID: Be: 
 DelphiとC++ Builderの廉価版が登場、1万4700円から - ニュース:ITpro 
 http://itpro.nikkeibp.co.jp/article/NEWS/20110201/356694/?ST=NSW 
 
544 デフォルトの名無しさん [sage] 2011/02/01(火) 21:55:02 ID: Be: 
 Starter安いがけち臭い事いいすぎだなぁこれならPro買うわ 
 本気でユーザー層拡大狙いたいなら業務使用制限ははずしてくれないと 
 それでなくてもIDEの機能まで削ってるんだし 
 一昔前ならこれでおkだったろうけど今時じゃないな 
 
545 デフォルトの名無しさん [sage] 2011/02/01(火) 22:12:17 ID: Be: 
 ああ、俺レベルならこれでもいいわ。 
 ずっとTurbo(2005)使ってたけど、この値段なら最新の機能とやら試してみてもいいと思った。 
 ただ、リファクタリングまで削ってるのはどうかと。 
 
546 デフォルトの名無しさん [sage] 2011/02/01(火) 22:16:05 ID: Be: 
 del6personalでがんばってますがこれは買いですか? 
 
547 デフォルトの名無しさん [sage] 2011/02/01(火) 22:24:04 ID: Be: 
 >544 
 これで稼ぐならその利益で上位エディションを買ってね、ってことだからな。Pro買えるならStarterは 
 およびじゃないよね。でもアカデミックライセンスよりはましだと思うなぁ。 
 
 >546 
 人それぞれだけど、Windows 7のこと考えればいまさら6じゃないんじゃない?という意味で買い。 
 
548 デフォルトの名無しさん [sage] 2011/02/01(火) 22:37:22 ID: Be: 
 アカデミックライセンスって機能制限あるのかな? 
 
549 デフォルトの名無しさん [sage] 2011/02/01(火) 22:39:11 ID: Be: 
 >>546 
 値段と機能を考慮したら? 
 削除された機能等は某所に一覧されてるし 
 
550 デフォルトの名無しさん [sage] 2011/02/01(火) 22:40:02 ID: Be: 
 基本的にあそこのアカデミックライセンスって 
 意味がよく分からんからな 
 正直な話 
 
551 デフォルトの名無しさん [sage] 2011/02/01(火) 22:45:01 ID: Be: 
 Win7 の D5Pro で頑張っている私が颯爽と登場!(・∀・) 
 
552 デフォルトの名無しさん [sage] 2011/02/01(火) 23:53:56 ID: Be: 
 アカデミックは教育目的のみ、作ったプログラムは商用、非商用を問わず配布できない、なので。 
 
553 デフォルトの名無しさん [sage] 2011/02/02(水) 08:58:06 ID: Be: 
 >>544 
 > Starter安いがけち臭い事いいすぎだなぁこれならPro買うわ 
 C# Express がいいんじゃない? 
 
 >>551 
 俺も機能面だけなら Del6 pro で十分だと思ってたけど、 
 Unicode 関連を考えて、キャンペーンに便乗して XE 買ったよ。 
 でも本職ハード&ファーム屋……。 
 
554 [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/02/02(水) 09:25:52 ID: Be: 
 >>553 
 うん、Unicode だけが残念。 
 VS2005 も持っているのでイザというときはそっちで対処するつもり。 
 でも Delphi の爆速コンパイルは手放せない。 
 

■_ Math::BigInt

Math::BigInt continued « Just Rakudo It

Math::BigInt continued 
By colomon 
 
At this point, Math::BigInt is working, modulo a few issues with meta-operators that 
seem to revolve around Rakudo bugs. I have implementations of the basic operators and 
comparison operators, though they probably could use some more tests. I took sorear++'s
suggestion to use postfix L as the shortcut for creating BigInts. That lets you say 
things like 

  > my @fib := 1L, 1L, * + * ... *; 
  > say @fib[200]; 
  453973694165307953197296969697410619233826 
 
Much nicer than the code in my last blog post. 
 
The catch here is that these new operators don't work properly with Rakudo's meta-ops: 

  > say [*] 1L .. 40L; 
  8.15915283247898e+47 
 
The result should be a much longer integer rather than a Num, like this: 

  > say reducewith(&infix:<*>, 1L .. 40L); # this is what [*] should be doing internally 
  815915283247897734345611269596115894272000000000 

以下略

■_

■_ PEP

これはどうなんだろう

PEP 393 -- Flexible String Representation
Abstract 
 
The Unicode string type is changed to support multiple internal representations, 
depending on the character with the largest Unicode ordinal (1, 2, or 4 bytes). This 
will allow a space-efficient representation in common cases, but give access to full 
UCS-4 on all systems. For compatibility with existing APIs, several representations 
may exist in parallel; over time, this compatibility should be phased out. 

Rationale 
 
There are two classes of complaints about the current implementation of the unicode 
type: on systems only supporting UTF-16, users complain that non-BMP characters are 
not properly supported. On systems using UCS-4 internally (and also sometimes on 
systems using UCS-2), there is a complaint that Unicode strings take up too much 
memory - especially compared to Python 2.x, where the same code would often use ASCII 
strings (i.e. ASCII-encoded byte strings). With the proposed approach, ASCII-only 
Unicode strings will again use only one byte per character; while still allowing 
efficient indexing of strings containing non-BMP characters (as strings containing 
them will use 4 bytes per character). 
 
One problem with the approach is support for existing applications (e.g. extension 
modules). For compatibility, redundant representations may be computed. Applications 
are encouraged to phase out reliance on a specific internal representation if possible. 
As interaction with other libraries will often require some sort of internal 
representation, the specification choses UTF-8 as the recommended way of exposing 
strings to C code. 
 
For many strings (e.g. ASCII), multiple representations may actually share memory (e.g. 
the shortest form may be shared with the UTF-8 form if all characters are ASCII). With 
such sharing, the overhead of compatibility representations is reduced. 

Specification 
 
The Unicode object structure is changed to this definition: 
 
typedef struct { 
    PyObject_HEAD 
    Py_ssize_t length; 
    void *str; 
    Py_hash_t hash; 
    int state; 
    Py_ssize_t utf8_length; 
    void *utf8; 
    Py_ssize_t wstr_length; 
    void *wstr; 
} PyUnicodeObject; 
 
These fields have the following interpretations: 

(略)

Copyright 
 
This document has been placed in the public domain. 

Website maintained by the Python community 
hosting by xs4all / design by Tim Parkin 
Copyright © 1990-2010, Python Software Foundation 
Legal Statements 

三種類の表現を同時に持つなんてのはやりすぎ感が。

■_

2011年02月01日

■_

圏論
いきなり黄色いあの本を買った莫迦がここにいまーす。 ってその頃は他に出てなかったような気もしますが。 んでまあそれはあまりに無謀だろうということで薦められたのが

Basic Category Theory for Computer Scientists (Foundations of Computing)
なんですが、うっすい本なのに未だに読みきっていないという ○| ̄|_

やる気全く無い群論をいきなりやっても学習量は永遠にゼロなので、やる気のある圏論をちょっと勉強してみてうーんさっぱりわからん!というところが出てきて、そこではじめてしょうがないから群論やるかー、と群論のやる気がノンゼロになるってコースもまぁアリっちゃアリな気もする。 (はじめてのにき(2011-02-01)) 実は群論も興味があったので(この辺を書き始めると長いので省略)、いいっちゃいいのかも。 などとのんびりやってたりして(いいのかそれで)。

つーか、数学の棚眺めても 群・環・体は一冊にまとまってるものもあったりするのに 圏だけは別扱いってよくわからなかったのですよ。 いや、定義がどうとか言う話ではなく。

最近になって半群とか半環とかいうのもあるというのを知ってますます理解の範囲を超えていったり。

■_ 真髄

大仰だなあ

というか、「を」学ぶ真髄っておかしくないかい?

情報処理・コンピュータ・プログラミングを学ぶ真髄 | OKWave
 
情報学科もしくはそれに対応する学部学科に在籍している方、卒業した方にお聞きします。 
 
あなたは、自分の専門分野に関して、「他の学部学科で勉強してきた連中には負けない」のよう
な、自負のようなものはありますか?あるとすれば、それは何を根拠にしていますか? 
 
また、同じ学科で、あなたの周りにいた人はどのように感じていたと思いますか? 
 
私は、物理を専攻する傍ら、個人的な興味でプログラミングに興味を持って、独学で勉強してきました。 
(Java, JavaScript, C, C++, Fortran, Python, PHP, HTMLやCSSに関する知識, Linuxに関する
知識 が幾分かあります。開発環境は大体 eclipse を使用。 Java に関しては、awt, swing, 
SWT+JFace, eclipse RCP 等でGUIのプログラミングや並列プログラミングの経験があります。) 

(略)


そこで今一度質問ですが、私が独学でプログラミングするに当たって、何を心がければよいでし
ょうか?何が情報処理を真に知っているということにつながりますか? 

(とりあえずこの本読んどけ、とかでもかまいませんし、○○の資格を持ってることだ、という
言い方でもかまいません) 
 
よろしくお願いいたします。 
 

■_ ませまちか

ああ、欲しいなあ。 でも今の値段じゃ手を出す気にならない(し、出せない)よなあ。

「朝食の栄養価」までクラウド経由で即演算、ウルフラムが数学ソフトMathematicaの最新機能を披露:ITpro

ウルフラムリサーチアジアリミティッドは2011年1月27日、東京で報道関係者向け説明会を開催
し、同社が2010年12月末に日本語版の販売を開始した科学および技術向け数学処理ソフトの最新
版「Mathematica 8」の注目機能などを紹介した。Mathematica(マセマティカ)といえば、自然
科学系学部の大学出身者なら、誰もが一度は論文などを通じて同ソフトで作った図版を見たこと
があると断言できるほど有名なソフトウエアである。説明会では、筆者のように昔の
Mathematicaしか知らない人間にとって、かなり衝撃を受ける新機能が披露された。 

(略)

 
数学に詳しくない人でも使えるツールに進化 
 
 sin(x)のグラフを描きたい場合なら、「plot sinx」「graph of sin(x)」「visualize the 
sine of x」のいずれでも同じsin波形のグラフが表示される。「mortgage calculator」などと
入力すればローン計算もできる。この自由形式入力のサポートにより、「数学に詳しくない人で
も、アイデアを入力するだけで数学の問題が解けるツールに進化した」(ヘイスティングズ氏)
という(写真2)。 

(略)

いやまあ、自分の手に余る代物だってのはわかりますけどね ○| ̄|_

んで、「数式処理」のシステムなら Mathematica みたいなお高いものでなくてもいろいろあるよ 数式処理システムの一覧 - Wikipedia ってな話なんですが、 まあどうせならそんなお高いものを使ってみたいというミーハー根性です。はい。

そういうものを安く買えないかと考えたりするのはある種矛盾しているのでないか という気がしますが深くは考えません。

■_ = の呪い

ああ、またひとり犠牲者が(おおげさ)。

サルでもわかる 代入演算子 PHP(1/3) | OKWave
 
只今、PHPの講義を受講しています。 
しかし、私は数学の頭でしかなく、「代入演算子」の理解ができません。 
”なぜ、イコールに違う数字を使っちゃうの?”と、 
脳みそに”?”だらけです。 講師もあまり深く突っ込んでもらわずに 
「こういう物」と、覚えちゃってください。などと、言います。 
 
私としては、理屈が成り立っていないのに、覚えられる訳がないのです。と、 
少し立腹ぎみなのですが、ここは抑えて自分で解決しようと思ったのですが、 
やはり、理解できません。 
 
ちなみに、過去に他のプログラム言語を学んだことはありません。 
 
どうか、この数学あたまに代入演算子を理解させる方法をご伝授ください。 
 

代入(とはなにか。というのはさておいて)に = を使わないプログラミング言語。 ってーと、まずは Pascal とそのお仲間ですか。 いや、やはりここは Haskell とか Lisp 方面に行っていただくといいのかも。 ってそれは斜め上の解決策な気も。

■_ けものすうじ

この数値って、ちょっと前に PHP でどうのって話にでてきたやつですか。

PHP :: Bug #53632 :: PHP hangs on numeric value 2.2250738585072011e-308

If I assign the value 2.2250738585072011e-308 to a variable, e.g. $d = 
2.2250738585072011e-308, PHP hangs (loops). I am using PHP 5.3.1 XAMPP 1.7.3 on 
Windows. 

微妙に違うなw

Java Hangs When Converting 2.2250738585072012e-308 - Exploring Binary

Java Hangs When Converting 2.2250738585072012e-308 

By Rick Regan (Published January 31st, 2011) 
 
Copyright © 2008-2011 Exploring Binary 
 
http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/ 
 
Konstantin Preisser made an interesting discovery, after reading my article “PHP 
Hangs On Numeric Value 2.2250738585072011e-308”: Java — both its runtime and compiler 
— go into an infinite loop when converting the decimal number 2.2250738585072012e-308 
to double-precision binary floating-point. This number is supposed to convert to 
0x1p-1022, which is DBL_MIN; instead, Java gets stuck on 0x0.fffffffffffffp-1022, the 
largest subnormal double-precision floating-point number. 
 
Send a Java Program Into An Infinite Loop 
 
Compile this program and run it; the program will hang (at least it does on a 32-bit 
system with the latest JRE/JDK): 
 
class runhang { 
    public static void main(String[] args) { 
        System.out.println("Test:"); 
        double d = Double.parseDouble("2.2250738585072012e-308"); 
        System.out.println("Value: " + d); 
    } 
} 
 
Send the Java Compiler Into An Infinite Loop 
 
Try to compile this program; the compiler will hang: 
 
class compilehang { 
public static void main(String[] args) { 
 double d = 2.2250738585072012e-308; 
 System.out.println("Value: " + d); 
 } 
} 
 
Where's the Problem? 
 
For the runtime case at least, Konstantin has narrowed the problem down to the “
correction loop” in FloatingDecimal.java. See his comments on my PHP bug analysis 
article. 
 
Like PHP, Java gets stuck crossing the normalized/unnormalized border, but in the 
opposite direction: it starts with an estimate just below DBL_MIN — 
0x0.fffffffffffffp-1022 — and is trying to get up to DBL_MIN. 

(以下略)
 
Copyright © 2008-2011 Exploring Binary 

で、reddit でも盛り上がっているのですが、これにはニヤリと。

Next language: Java Hangs When Converting 2.2250738585072012e-308 : programming
 
Now this is a number of the Beast 
 

■_ じかんがねー

ざっと目を通す余裕もなっしんぐ。

最初のとか長いし!

■_

■_

自分としてはとてもうなずけるものなんだけど、 火元(?) の発言主は納得しないような気がするのはなぜなんだろう。

ってその火元を勘違いしてるかも。わし。


一つ前へ 2011年1月(下旬)
一つ後へ 2011年2月(中旬)

ホームへ


リンクはご自由にどうぞ

メールの宛先はこちらkbk AT kt DOT rim DOT or DOT jp