ときどきの雑記帖 めぐりあい電脳空間編

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

一つ前へ 2010年5月(中旬)
一つ後へ 2010年6月(上旬)

ホームへ

2010年05月31日

■_

・五月も終わり
ってまあこれを打ち込んでいる時間はすでに6月に入ってたりするんですが。

・Elements of Programming
昨日書名を出したのとシンクロしていたのかこんな情報が。 『Elements of Programming』の翻訳:柴田 芳樹 (Yoshiki Shibata):So-netブログ 6月から4ヶ月間が翻訳期間ということでいいんでしょうか。 とすると、年末辺りの発売なのですかね。 さあ、それまでに読めるか? むりぽ ○| ̄|_ TAPL の方は邦訳はないよな。うん。

■_ ホンモノの~

Elite ってのをどう訳すべきか。 カタカナ書きにすると元の意味から離れて受け取られそうな気がするのですよね。 art → アート みたいに。

|

How To Be A Real Elite Programmer And Make Sure Everybody Knows It

How To Be A Real Elite Programmer And Make Sure Everybody Knows It

by Alan Skorkin on May 30, 2010

Elite

   1. Real elite programmers can't have distractions like kids and spouses in their life.
      Cut your family out of your life to maximize coding time. While you're there cut 
      your friends out as well to maximize coding time even more.

      本物のエリートプログラマーはその人生において、子供や配偶者のような distractions
      を持つことができない。コーディングの時間を最大にするために家族を切り捨てること。
      While you're there cut your friends out as well to maximize coding time even more.


   2. Real elite programmers don't have hobbies that aren't coding. If you still engage in
      activities that don't involve a computer, this will have to change. If you find
      yourself burning out, just man-up and push through it.

      本物のエリートプログラマーはコーディング以外の趣味を持たない。コンピューターに関係な
      い活動に費やす余力があるのなら、それは変えねばならない。もし自分が燃え尽きてしまった
      と思ったなら、just man-up and push through it


   3. Real elite programmers do their best work at night. Sleep is for wussies.

      本物のエリートプログラマーは夜に最高の仕事をする。睡眠は意気地なしな連中
      (wussies) のためのものである。


   4. Real elite programmers hate their day job. Otherwise they would have nothing to 
      complain about to other real elite programmers.

      本物のエリートプログラマーは day job を嫌う。
      Otherwise they would have nothing to  complain about to other real elite programmers.


   5. Real elite programmers eat pizza and drink Dr. Pepper. No other food is allowed, if
      you have fruit and vegetables in the house, they will have to go – stick to the 
      diet of champions.

      本物のエリートプログラマーはピザを食べてドクターペッパーを飲む。それ以外の食物は許
      されず、もし家に果物や野菜があったとしてもそれは捨てなければならない。the diet of
      champions を堅持する

   6. Real elite programmers don't read about programming, they DO the programming. Don't
      bother with books, just keep programming. Remember, you know best, those book-writing
      wimps are just a bunch of noobs, they should have been coding instead of writing,
      you're way better than that.

      #すみません。よく意味が取れませんでした ○| ̄|_


   7. Real elite programmers are always right. This makes sense since everyone else is 
      just a stupid noob.

      本物のエリートプログラマーは常に正しい。これはそれ以外の全員が単なる stupid noob
      に過ぎないので意味をなす。


   8. Real elite programmers already know everything that is worth knowing. All the 
      other knowledge is useless and only noobs would be interested in it.

      本物のエリートプログラマーは知っておく価値のあることの全てを知っている。その他の知識
      は無価値であり、noobs だけが興味を持てばいいことである。


   9. Real elite programmers do not acknowledge anyone who is not a real elite 
      programmer.

      本物のエリートプログラマーは本物のエリートプログラマーでない人物を認めない。


  10. Real elite programmers know when to say "RTFM" in response to a question.
      This is a good answer to any question – noobs should know better than to ask stupid
      questions in the first place.

      本物のエリートプログラマーは質問に対して “RTFM”(Read The Fu*king Manuals) と言って
      反応するべきときを心得ている。RTFM とは noobs どもが自分は愚かな質問をしたのだと思い
      知らされねばならない質問に対する優れた回答である。


  11. Real elite programmers are on social media. This is allowed, since it involves a 
      computer. It is infact their duty since there are so many people on social media who 
      need to be corrected about all things programming.

      本物のエリートプログラマーはソーシャルメディアにいる。これはソーシャルメディアがコ
      ンピューターに関係するので許される。あまりにも多くの、プログラミングについて修正さ
      れねばならない人たちがソーシャルメディア上にいるために、彼らの義務が infact されて
      いる。
      # 最後怪しい

  12. Real elite programmers complain loudly about the lack of in-depth programming 
      content on social media. They are however too elite to provide this content.

      本物のエリートプログラマーはソーシャルメディアに in-depth programming なコンテンツが
      ないことにたいして大声で不平を言う。


  13. Real elite programmers know when to say "TL;DR" in response to any 
      in-depth programming content on social media.

      本物のエリートプログラマーは、ソーシャルメディア上の in-depth programming コン
      テンツに対するレスポンスとして "TL;DR" と言うべき時を知っている。
      # TL;DR ってなんぞ

  14. Real elite programmers are particularly offended by minor inconsistencies in grammar,
      punctuation, colour schemes as well as any other subjective stylistic choices.

      本物のエリートプログラマーは、文法における inconsistencies (不調和、矛盾) や
      カンマやピリオドの使い方、色使いのような any other subjective stylistic choices 
      によってとりわけ腹を立てる。


  15. Real elite programmers never create any code for others to use. They have already
      told everyone they are awesome; there is no need to prove it.

      本物のエリートプログラマーは他人が使うためのコードを絶対に書かない。
      彼らは既に皆に自分たちが awesome であるといっていて、改めて説明する必要がない。


  16. Real elite programmers know how to put argumentative noobs in their place. 
      Stupid noobs must be told they are stupid and ugly if they have the audacity to 
      question elite wisdom.

      本物のエリートプログラマーは argumentative (理屈っぽい、議論好きな) noobs を
      in their place に put する方法を知っている。


  17. Real elite programmers condescend to anyone who is not interested in whatever the
      real elite programmer is currently interested in.

      本物のエリートプログラマーは本物のエリートプログラマーが現在興味を持っていることす
      べてに興味を持っていない人であれば誰に対しても condescend (威張らない、お高く止まら
      ない) する。


  18. Real elite programmers particularly despise non-programmers, they are worse than 
      stupid noobs.

      本物のエリートプログラマーは stupid noobs よりもさらに価値がない非プログラマーを軽
      蔑する。


  19. Real elite programmers use the most complicated and roundabout techniques to explain
      simple concepts. All must know how smart the real elite programmer is.

      本物のエリートプログラマーは単純なコンセプトを説明するのに最も複雑かつ婉曲な手法を
      使う。全員がこの本物のエリートプログラマーがどれほど賢い (smart)であるかを知ってい
      なければならない。


I do hope you realise I am being facetious here. However, there is a grain of truth in 
every joke. I have seen instances of this type of behaviour and have been guilty of 
engaging in some of it myself from time to time – you probably have as well. Just 
something to watch out for.

■_ on Hakell

Haskell で Python を書いたとか。

HackageDB: berp-0.0.1

Berp is an implementation of Python 3, written in Haskell. It provides a compiler and 
an interpreter. In both cases the input Python program is translated into Haskell code. 
The compiler turns the Haskell code into machine code. The interpreter runs the 
Haskell code immediately via the GHCi interpreter. The user interface of the 
interpreter imitates the one provided by CPython.

Python のコードを Haskell コードに変換すると?

■_ その正規表現は

やっぱり海の向こうにもいるんだ。

Regular Expression to math class references using grep

Regular Expression to math class references using grep
From: cosmopolitan
Subject: Regular Expression to math class references using grep
Date: Fri, 28 May 2010 07:47:17 -0700 (PDT)

I'm trying to math all class references in a C++ file using grep with regular
expression. I'm trying to know if a specific include is usuless or not, so I
have to know if there is a refence in cpp. 
I wrote this RE that searches for a reference from class ABCZ, but
unfortunately it isn't working as I espected:

 grep -E '^[^(\/\*)(\/\/)].*[^a-zA-Z]ABCZ[]*[\*\(\<:;,{& ]'

^[^(\/\*)(\/\/)]  don't math comments in the begging of the line ( // or /* )
.* followed by any character
[^a-zA-Z] do not accept any caracter before the one I'm searching (like defABCZ)
[]* any white space (I can have something like ABCZ     var;)
[\*\(\<:;,{& ] followed by ( * < : ; , & { (I cant get #define "ABCZ.h" or ABCZdef for example)

Well, I can get patterns like this:

class Test: public ABCZ{
class Test: public ABCZ {
class Test :public ABCZ<T>
class NameSpace::Test :public ABCZ<T>
ABCZ var = ABCZ();
ABCZ* var = new ABCZ();
ABCZ* var = new ABCZ<T>();
teste = ABCZ(var);
teste = ABCZ(var, otherVar);
teste = ABCZ(var,otherVar);
teste =     ABCZ();
funct(*ABCZ av);
struct(ABCZ, BBBB, CCCC);
const ABCZ& getNot_before(void) const;

That's all right, they are all acceptable patterns. But these I'm missing,
and they are all acceptable too:

ABCZ        teste;
ABCZ        teste; //comment
ABCZ        teste; /* comment*/
ABCZ teste; /* comment*/
ABCZ teste;
ABCZ *teste;

And all these are not acceptable:
#include "ABCZ.h"
//ABCZ var = ABCZ();
ABCZdef a = ABCZdef();
DefABCZ a = DefABCZ();
ABCZdef a = ABCZdef();
/*ABCZ var = ABCZ();

I don't know if I'm missing any other patterns, if I am, please tell me =p
What am I doing wrong?
I'll be very grateful if someone answer me :)
Thanks in advance

だからマニュアルよく読めと。 ^[^(\/\*)(\/\/)] don't math comments in the begging of the line ( // or /* ) どうしてそれが期待通りのマッチをするという考えになるのよ ○| ̄|_ しかし、三日くらい前のポストなのにフォローついてないな、これ。

■_ 本日の巡回から

2010年05月30日

■_

・買った
パッケージは割と小さめ Rubyのシンボルは上面に

・どうしようか
付箋紙がどこまで増えるでしょーか?

■_ 何だこの質問


DEC3000というマシンにVMSを入れたいのですが、VMSの評価版っ | OKWave

DEC3000というマシンにVMSを入れたいのですが、VMSの評価版ってあるんでしょうか。

ANo.1

DEC3000で動くか確認はしてませんが、ここからOpenVMSというのがダウンロードできます。
http://h71000.www7.hp.com/network/cifs_terms.html

ANo.2

 つい最近、質問5922969で「DEC3000/M600というマシンを持っています。現在は、OpenVMSがイ
ンストールされているのですが」と言われていましたが、従前のは消してしまったのですか。

DEC3000に最近のVMSが対応できるかは不明ですが、下記のサイトからダウンロードできます。
http://www.attachmate.jp/Evals/ruo/ruo-eval.htm

 また、Wikipediaにも各種のリンクがあるので参考までに。
http://ja.wikipedia.org/wiki/OpenVMS

参考URL:http://www.attachmate.jp/Evals/ruo/ruo-eval.htm

なんだかなーと思ったらきちっとした回答が

ANo.3

VMSはVAXまたはAlphaAXPベース、I64ベースのシステムでしか動きません。
通常はハードウェアとセットで販売される基本ソフトウェアですから、評価版などというものは存在しません。
No.1およびNo.2のリンクしているものはVMS上にAdd-onされるソフトウェアです。
DEC3000システムにはバンドルされていたOpenVMSが付属していたはずです。

そのキットを使用してインストールするか、スタンドアロンバックアップが存在するなら、コン
ソールコマンドからリストアすることができます。

OpenVMSの"Open"とは他システムと通信をするための規格が標準仕様を満たしているという意味
であって、OSの中身がOpenであるとかライセンスがOpenであるとかいう意味ではありません。

非営利利用であればHobbyistとして無償のライセンスが提供される可能性もあります。
http://www.openvmshobbyist.org

ただ、このような質問をしている時点で、独力でのインストールは無理だと思います。

■_

C言語なら俺に聞け(入門編)Part 65 
126 デフォルトの名無しさん [sage] 2010/05/30(日) 00:20:18 ID: Be:
    下記のプログラムがなぜ正常に動くのか分かりません。
    if(r)のrにはscanfの戻り値(0か1)が入るんですよね?
    なので自分的にはこの場合if(r == 1)が正しいのではないかと思うのですが。


    #include<stdio.h>

    int main(){

    int i = 0;
    int r;

    r = scanf("%d", &\1i);

    if(r){printf("整数%dが入力されました\n", i);}//入力が整数の場合

    else{printf("整数以外が入力されました\n");}//入力が整数意外の場合

    return 0;

    } 

127 デフォルトの名無しさん [sage] 2010/05/30(日) 00:22:20 ID: Be:
    >>126
    いきなりEOFがきたら r==-1 になる 

128 デフォルトの名無しさん [sage] 2010/05/30(日) 00:23:54 ID: Be:
    で? 

129 デフォルトの名無しさん [sage] 2010/05/30(日) 00:25:44 ID: Be:
    r==1 が正しい 

130 デフォルトの名無しさん [sage] 2010/05/30(日) 00:28:13 ID: Be:
    r==1だったらrが2の場合できなくなるんじゃね? 

134 デフォルトの名無しさん [sage] 2010/05/30(日) 00:34:11 ID: Be:
    >>130
    r は変換に成功した数だから >>126 の場合には EOF か 0 か 1 しか返らない 

135 126 [sage] 2010/05/30(日) 00:39:42 ID: Be:
    「10日で覚えるC言語」に載っているプログラムなんですが、
    一日考えてもif(r)の意味が分かりません。
    「rが○○だったら~をする」なら分かるのですが、
    この場合「rだったら~をする」ですよね?意味分からなくないですか?
    でもプログラムは正常に動くからきっと自分の考えが間違ってるんだと思うのですが。

136 デフォルトの名無しさん [sage] 2010/05/30(日) 00:41:15 ID: Be:
    >>135
    if(r)は、「rが0でなければ」だよ。 

137 デフォルトの名無しさん [sage] 2010/05/30(日) 00:41:36 ID: Be:
    if(A)
    {
      B
    }
    else
    {
      C
    }
    Aが0以外だったらBへ
    Aが0だったらCへ 

139 デフォルトの名無しさん [sage] 2010/05/30(日) 00:43:36 ID: Be:
    >>135
    俺もC言語始めるって時に知恵袋で「10日で覚えるC言語」進められたんだけど、
    実際のところいい本なの「10日で覚えるC言語」って? 

140 デフォルトの名無しさん [sage] 2010/05/30(日) 00:45:59 ID: Be:
    付け焼刃みたいな知識のための本なら買う必要ないよ。Cほど普及してる言語ならネット上に情報が溢れてるし
    10日で覚える~は知らんがCの絵本ってのは糞だったな 

141 デフォルトの名無しさん [sage] 2010/05/30(日) 00:47:34 ID: Be:
    初心者はガンガン参考書買った方がいい。日本経済的に。 

142 デフォルトの名無しさん [sage] 2010/05/30(日) 00:48:08 ID: Be:
    >>139
    いい本だよ。 

143 デフォルトの名無しさん [sage] 2010/05/30(日) 00:50:47 ID: Be:
    >>136,137
    そういう意味があるんですか!
    ありがとうございました!!!!
    ずっともやもやしてたのでとてもスッキリしました。

    >>139
    自分は全く知識も無く、本屋で目立つところにあったから(10日で覚えられるし)買ってみました。
    正直3日分やるのに何十日も掛かってます・・・。
    今回の事も本に書いてなかったし。
    >>140
    その後、文字ばかりで飽きてきたのでCの絵本を買ってしまいました・・・。


144 デフォルトの名無しさん [sage] 2010/05/30(日) 00:51:32 ID: Be:
    int r; if(r)~みたいな書き方って俺は避けるけど、実際の現場だと結構使われてるね 

145 デフォルトの名無しさん [sage] 2010/05/30(日) 00:55:00 ID: Be:
    >>143
    日本経済に貢献したんだ、良かったな
    とりあえずコードを書いて見ていろいろ試そうな 

146 デフォルトの名無しさん [sage] 2010/05/30(日) 01:02:03 ID: Be:
    >>145
    キモイ 

147 デフォルトの名無しさん [sage] 2010/05/30(日) 01:05:08 ID: Be:
    >>146
    なんで自分でコードを書かないの? 

148 126 [sage] 2010/05/30(日) 01:11:47 ID: Be:
    >>144
    なるほど、参考になります。
    >>145
    はい。がんばります;

    自分は通勤中に本を読み、帰ってから実践するという毎日なので書籍は重宝してるのですが
    かばんに入る小さなノートPC買ってWEB見ながらプログラム書いたほうが勉強になるのかな。 

149 デフォルトの名無しさん [sage] 2010/05/30(日) 01:14:07 ID: Be:
    >>147
    書いてるけど?
    何で書かないと思ったの? 

150 デフォルトの名無しさん [sage] 2010/05/30(日) 01:14:48 ID: Be:
    >>148
    通勤時間は絶対に本のほうがいいよ 

151 デフォルトの名無しさん [sage] 2010/05/30(日) 01:16:29 ID: Be:
    通勤中にプログラム書くと頭がおかしくなって死ぬ 

152 126 [sage] 2010/05/30(日) 01:27:33 ID: Be:
    言葉に重みがありますねw
    これを理由にVAIO Pとか欲しいと思ってたのですがやめときます。
    知識が無いから良い本なのかすら分からない。何かお勧め無いですかね。 

154 デフォルトの名無しさん [sage] 2010/05/30(日) 01:44:36 ID: Be:
    >>143
    意味があるというか、判定式の返り値が、偽なら0で真なら非0ってことだよ
    だから、本来ならif(r != 0)ってした方がいいと思う

    printf("TRUE: %d\n", 1 == 1);
    printf("FALSE: %d\n", 1 == 0);

    TRUE: 1
    FALSE: 0 

155 デフォルトの名無しさん [sage] 2010/05/30(日) 01:47:07 ID: Be:
    >>154
    自分にとっては if(r) は頻出イディオムだから if(r!=0) より読みやすい
    もちろん 0 に意味があるなら 0 と比較するけど 

156 デフォルトの名無しさん [] 2010/05/30(日) 01:48:33 ID: Be:
    >だから、本来ならif(r != 0)ってした方がいいと思う

    思いだけは頂いておくわ。 

157 デフォルトの名無しさん [sage] 2010/05/30(日) 08:43:39 ID: Be:
    if(r != 0)の方がいい、とかいうのはC言語知らないだけだから
    気にしないでいい

    int変数以外にも、ポインタがNULLでないことを判定する場合に
    if(p) みたいな書き方することも多いので、さっさと慣れたほうがいい 

158 デフォルトの名無しさん [sage] 2010/05/30(日) 10:13:38 ID: Be:
    >154

    FALSEが0なのはいいとして、TRUEを1とするかどうかは注意して考えた方がよい。
    偽は0, 真は1ではなく非0だから。TRUEと等しくないから偽とはならない。

    そう考えると0と比較しなくてはならない。そうすると
    if (isHoge != 0) ・・・
    と書くことになるが、否定形の文章が読みにくいように、否定のコードが読みにくいことが多い。

    真偽を表すことが明確ならば
    if (isHoge)
    とかく方がよいと思う 


if (r) みたいなのは、 ポインターがぬるぽかどうかの判定くらいにしか使わないかなあ。

■_

ちょっと古めですが。


【入門】Common Lisp その7【質問よろず】
67 デフォルトの名無しさん [sage] 2010/05/05(水) 18:53:19 ID: Be:
    実用Common Lispなる本を買った
    寝っ転がって読もうとしたが、その質量にあえなく挫折した
    今は正座している

68 デフォルトの名無しさん [sage] 2010/05/05(水) 20:13:56 ID: Be:
    腕の筋肉を鍛えるいいチャンスではないか 

69 デフォルトの名無しさん [sage] 2010/05/05(水) 22:59:47 ID: Be:
    >>67
    つゴロ寝 de スク 

70 デフォルトの名無しさん [sage] 2010/05/05(水) 23:31:43 ID: Be:
    >67
    今日本屋で見かけて俺もビビった
    PAIPの邦訳が本当に出てるという事実だけでも驚いた 

71 デフォルトの名無しさん [sage] 2010/05/05(水) 23:49:43 ID: Be:
    検索したらこれが一番上でした
    http://www.amazon.co.jp/%E5%AE%9F%E7%94%A8Common-LISP-%E8%A1%A3%E7%AC%A0-%E6%88%90%E4%B8%80/dp/4526022829 

72 67 [sage] 2010/05/06(木) 01:41:19 ID: Be:
    >>71
    それはしらなんだ
    俺が買ったのはピーター・ノヴィグの方ね、
    CLTL2より質量があって中身も濃いんだわ
    とりあえずゆっくり寝転んで音読楽しもうとしたら>>67 になったので正座して速読したのだけど
    速読でも20分かかるよ!
    てか速読中に手が疲れたの久々だよ!

73 デフォルトの名無しさん [sage] 2010/05/06(木) 12:25:33 ID: Be:
    http://www.amazon.co.jp/exec/obidos/ASIN/4798118907/
    これか、分冊しないで出したのか。値段も凄い
    アマゾンで5/11発売になってるからジュンク堂とか専門書扱ってる書店の先行発売かな 

74 デフォルトの名無しさん [sage] 2010/05/06(木) 20:40:04 ID: Be:
    ああ、岩本町の書泉に積んであったね
    でかすぎて立ち読みしようとは思わなかったけど
    評判がいいなら買うかも 

75 デフォルトの名無しさん [sage] 2010/05/06(木) 20:45:20 ID: Be:
    何が書いてあるの 

76 デフォルトの名無しさん [sage] 2010/05/06(木) 20:47:21 ID: Be:
    俺も昨日新宿の紀伊國屋で見た
    そして持ち上げる気も起こらなかった 

77 デフォルトの名無しさん [sage] 2010/05/08(土) 01:00:52 ID: Be:
    まじだでてる。英語のを買って読もうと思ってた矢先に・・・。
    邦訳するなよ。俺の英語力が上がらないではないか。

    でも¥9660wたけえww 

78 デフォルトの名無しさん [sage] 2010/05/08(土) 01:59:26 ID: Be:
    まだlet over lambda読み終わってないのに
    しかしAIと絡めた話が読めるのはうれしい 

79 デフォルトの名無しさん [sage] 2010/05/08(土) 06:13:51 ID: Be:
    オマエらお金あんのな。そっちのがウラヤマシイ。

80 デフォルトの名無しさん [sage] 2010/05/08(土) 11:01:31 ID: Be:
    図書館に購入申請すれば、通ったりするかも。 

81 デフォルトの名無しさん [sage] 2010/05/08(土) 12:14:23 ID: Be:
    女の子とのデートを一、二回止めれば十分買える値段だろ
    愛とAIどっちが大事なんだよ 

82 デフォルトの名無しさん [sage] 2010/05/08(土) 12:17:05 ID: Be:
    >>81
    お前二行目が言いたかっただけだろ(棒読み 

■_ 本日の巡回から

■_

買ったはいいがちょっと読んであとは放置気味な Types and Programming Languages とか Elements of Programming を読書会メソッドで読み進めてみようか。 でも人が集まるだろうか? あ、 Basic Category Theory for Computer Scientists (Foundations of Computing) これもあったりして。

2010年05月29日

■_

VQ1015 R2 を買っちゃいました - みねこあ
放置しているといつの間にか放電していて ○| ̄|_ となることがあります >例のデジカメ USB経由で充電するのですけど、カメラ側のコネクタがふつーの mini-B でないので (micro-Bか?)、そこがちょっと減点ポイント。

・買った
非才!―あなたの子どもを勝者にする成功の科学 これからの「正義」の話をしよう――いまを生き延びるための哲学 エキスパートPythonプログラミング
「ハーバード白熱教室」は観てて追いかけるのがだんだん大変になってきたので ありがたいっちゃあありがたい。 非才は山形さんの訳だったのでとりあえず。

・今月の皇帝陛下
YOUNGKING OURS (ヤングキングアワーズ) 2010年 07月号 [雑誌]
いよいよ追い詰められてきた感が。

・パーフェクトソフトウェア
頭の辺りちょっと読んだ。

■_ Little Smalltalk

ついった経由で知ったんですが、今は専用のドメインも持ってるんですねえ。


LittleSmalltalk - The mission of the LittleSmalltalk project!

The mission of the LittleSmalltalk project!

Our Mission!

When I was a software interested teenager I read the book "A Little Smalltalk"
by Timothy A. Budd and was fascinated by both the elegance and simplicity of the
Smalltalk programming language and by the elegance and simplicity of the
LittleSmalltalk system described in that book.

わたしは自分がソフトウェアに興味を持ったティーンエイジャーであったころ、Timothy A. 
Budd が著した "A Little Smalltalk" という本を読みました。そして、
Smalltalk というプログラミング言語の elegance と simplicity、そしてその本で解説さ
れていた LittileSmalltalk システムの elegance と simplicity に fascinated された
のです。


Later I became a professional software developer and worked with almost all recent 
programming languages. But I never lost my connection to Smalltalk. I used systems 
like Smalltalk/X and Visual Works for hobby projects and played around with Squeak.

長じてわたしはプロのソフトウェア開発者となり、最近のプログラミング言語のほとんどすべて
を使って仕事をしました。けれどもわたしは Smalltalk に対する connection を失いませんで
した。ホビープロジェクトには Smalltalk/X や Visual Works のようなシステムを使い続けて
いましたし、played around with Squeak していました。


But I missed something...

けれども何か物足りなかったのです…

A Smalltalk that would be absolutely free (free as in beer and in speach) and that 
would use native widgets to draw GUIs. I don't like Squeak's appearance (wxSqueak 
didn't exist at that time and seems to be quite inactive these days) and I didn't 
believe that the self made widgets of Smalltalk/X are fine forever...

Smalltalk は 完全に自由なものであり、そして GUI の描画にネイティブウィジェットを使って
いるものでした。わたしは Squeak の appearance (外観、見かけ) が好きではありませんでし
たし(wxSqueak はその時点では存在していませんでしたし、最近は活動がほとんどないように思
われます)、Smalltalk/X  の self made widgets も fine forever であるとは思えなかったの
です…

Then I tried to find other Smalltalk systems. I found some, like GNU Smalltalk. But 
they seem to focus on scripting and not on real Smalltalk environments and also don't 
use native widgets.

そこでわたしは別の Smalltalk システムを探すことにしました。そして GNU Smalltalk などい
くつかが見つかりました。が、それらはスクリプティングにフォーカスしていて本物の
Smalltalk 環境の上にあるものではなく、ネイティブウィジェットも使っていませんでした。

Hmmm... I also found LittleSmalltalk again and was happy to see that the system has 
been completely redeveloped since I read the book. But most links on the web were 
broken.

わたしは LittleSmalltalk も再発見して、そのシステムが本を読んだときから完全に再開発さ
れていたことを知ってうれしく思いました。しかし web にあったほとんどのリンクは無効にな
っていたのです。

It was hard work to find all the LittleSmalltalk versions that Timothy A. Budd wrote. 
Once I had them and played around with all of them I decided to take version 4 and 
improve it. I wrote a GUI layer (based on IUP) and a database binding to SQLite3.


Timothy A. Budd が書いた LittleSmalltalk のバージョンすべてを見つけ出すのは大変な作業
でした。それを手に入れいろいろと試してみて、version 4を採用してそれを改良することにし
ました。わたしは (IUP に基づいた) GUI レイヤーと、SQLite3へのデータベースバインディン
グを書きました。

Later I lost my LittleSmalltalk archives and my backups and had to start again. Thanks 
to the people (especially Charles Childers) who provided some versions!

後にわたしは自分の LittleSmalltalk アーカイブとバックアップを失ってしまい、再スタート
しなければなりませんでした。いくつかのバージョンを提供してくれたみんな(特に Charles 
Childers) に感謝するよ!

I asked Timothy if he would allow me to create a LittleSmalltalk project. One of the 
targets should be that LittleSmalltalk doesn't get lost in space. It should have a 
stable place on the web where people can find and download it. The project should also 
continue to develop the system. And so I was glad that Timothy allowed me to remove 
the license restrictions that he defined for version 4 of LittleSmalltalk and to 
replace them by whatever I like.

わたしは自分が LitteleSmalltalk プロジェクトを立ち上げても良いだろうかと Timothtに尋ね
ました。その目的の一つは LittleSmalltalk は失なうべからざるものだからです。
LittleSmalltalk は 誰もが見つけることができてダウンロードできる web 空間で安定した場所
を持っているべきなのです。このプロジェクトではまた、LittleSmalltalk システムの開発を継
続します。そしてうれしいことに、Timothy は LittleSmtalltalk の version 4 で定義されてい
たライセンスの制限をわたしが取り除いてわたしが好きなもので置きかえることを許可してくれ
ました。


That's great! LittleSmalltalk is - and will continue to be - completely free!

すばらしい! LittleSmalltalk は完全に自由であり、将来も自由であり続けるのです!

The mission of the LittleSmalltalk project is to continue to develop LittleSmalltalk 
and turn it into something really usefull and to provide all the historical versions 
of the system.

LittleSmalltalk プロジェクトの任務 (mission) とはLittleSmalltalk の開発を継続して本当
に有用なものにしすることと、システムのすべての歴史的バージョン (historical versions) 
を提供し続けることです。


LittleSmalltalk is the best stuff if you want to learn something about Smalltalk!

LittleSmalltalk は Smalltalk について何かを学ぼうとしたときの best stuff です!


LittleSmalltalk - Download LittleSmalltalk

Download LittleSmalltalk

You want to download LittleSmalltalk?

Great!

You can download either the current version or some older versions.

In addition, for those wanting to keep up with the latest developments, we have a svn 
repository that you may use.

We strongly believe that LittleSmalltalk is so instructive and interesting that these 
old versions should not be lost in space. So we provide a stable download place here...

いやあすばらしい行動だ。

■_ Haskell

ポイントフリースタイルが出てくるとただでさえ低い読解力が 絶望的に低くなります ○| ̄|_


関数型プログラミング言語Haskell Part12 
222 デフォルトの名無しさん [sage] 2010/05/29(土) 08:44:51 ID: Be:
    今度Haskellの入門的な話をすることになったんだけど、
    Haskellはじめての人が理解しにくいところってなんだろう?

    自分の場合、ラムダ計算やPCFを先にやってたから入りやすかったが、
    この辺を知らない人がいきなりHaskellに接したときにつまづくところ
    があったりするのかな?

223 デフォルトの名無しさん [sage] 2010/05/29(土) 09:30:14 ID: Be:
    >>222
    どんな人を対象に話すのかで変わると思うよ。
    相手が計算機科学の人なのか? プログラミング言語をひとつくらい習得している
    人なのか?まったくの素人なのか?
    とかね。 

224 デフォルトの名無しさん [sage] 2010/05/29(土) 09:33:28 ID: Be:
    >>222
    やっぱモナドじゃね 

225 デフォルトの名無しさん [sage] 2010/05/29(土) 09:51:06 ID: Be:
    変数を一つだけしか受け取れないとかの原則論がわからんかった。
    どうしても多変数脳から脱却出来ん。 

226 デフォルトの名無しさん [sage] 2010/05/29(土) 10:15:51 ID: Be:
    >>223
    C, Javaについて一通り習った人が相手です。

    >>224
    モナドですか…さすがに初回からはきついかも。

    >>225
    なるほど。
    その辺、可換図式でも使って説明しますかね。 

227 デフォルトの名無しさん [sage] 2010/05/29(土) 11:44:57 ID: Be:
    俺が苦労したのはラムダ式、高階関数、再帰の三つかな
    これらがいくつか組み合わさったコードを見ると途端に混乱するということがあった
    それぞれ単独でみれば難しくないし、再帰は既に知ってるだろうし、
    他も教えられればすぐに理解できるだろうけど、
    自在に読み書きできるようになるには時間が必要で、
    最初のうちはfoldrの定義なんかすごく難しく見えると思う 

228 デフォルトの名無しさん [sage] 2010/05/29(土) 11:59:01 ID: Be:
    どうせ触りだけ話すんだろうから、モナドはあまり触れなくてもいいかもね。
    c,java系の人なら関数型特有にみえることはわかりにくいかも。
    30分で話すとか10分で話すとかなら簡単なことしか話せないだろうしね。
    でも高階関数あたりは欲しいかもね。 

229 デフォルトの名無しさん [sage] 2010/05/29(土) 12:00:14 ID: Be:
    C/JAVA の人ってloopyだし非loopyのhaskellの世界は戸惑うだろうな。 

230 デフォルトの名無しさん [sage] 2010/05/29(土) 12:02:57 ID: Be:
    モナドは IO 以外は使わなくても説明できるからとりあえず置いておけばいいんじゃないかな。
    IO も、こう書くものだ、で済ませるか、対話環境だけ使うことにするとか。
    個人的には、いちばん理解しにくいのは関数適用だけでプログラムを書くということだと思う。
    ループしながら変数に代入、みたいなのから
    map して filter して fold になかなか切り替えられない。 

231 デフォルトの名無しさん [sage] 2010/05/29(土) 12:06:53 ID: Be:
    hello, worldについては気にしないでください、で最初は押し切ってしまうとか。
    入力ができないのがプログラムの題材的にちょっと辛いけど。 

232 デフォルトの名無しさん [sage] 2010/05/29(土) 12:07:11 ID: Be:
    Haskellの話を聞いてくれる気になってるなら
    一番高い壁はクリアじゃね? 


■_

親切なときは親切だよなあ。


くだすれFORTRAN(超初心者用)その5 
80 デフォルトの名無しさん [sage] 2010/05/17(月) 03:49:59 ID: Be:
    すみません、質問させて下さい。

    数万行ある(x,y)データを600行ごとに値を読んでサブルーチンで計算させて
    そのサブルーチンで出て来た値をまた別のサブルーチンで計算させて最後に出て来た結果を
    出力ファイルに書き込むようなメインプログラムの作り方がどうにもわかりません。
    判るかたがいましたらご教授頂けると助かります。
    f77を覚えたてです、まるっきりの初心者で恐縮ですが宜しくお願いします。 

81 デフォルトの名無しさん [sage] 2010/05/17(月) 03:55:24 ID: Be:
    追記。
    数万行のデータのうち始めの600行に対してサブルーチン1、サブルーチン2を実行、その結果を出力ファイルに書き込む
    次の600行を同じようにサブルーチン1、2実行、結果を同じ出力ファイルの最後の行から付け足して書き込む
    これを入力データの行数分だけ行いたい、という感じです。 

83 80,81 [] 2010/05/17(月) 08:16:19 ID: Be:
    入力データは (f7.0,f9.2) X(I),Y(I) です。
    X(I)は0から始まって1,2,3,...600,601,...20000,20001...
    という風に1ずつ増えています。 

85 80,81 [] 2010/05/17(月) 17:20:37 ID: Be:
    open(10,file=infile)
    open(20,file=outfile)
    N=600
    30 continue
    DO 20 I=N,N+6001
    DO 20 I=0,N+1
    20 READ(10,*) X(I),Y(I)
    CALL SUB1(X,Y,G,H,N,MP)
    DO 40 I=N,N+600
    40 WRITE(20,*) X(I),Y(I),G(I),H(I)
    WRITE(6,*) X(I),Y(I),G(I),H(I)
    N=N+600
    goto 30
    close (20)
    close (10)
    STOP

    サブルーチンを一つだけにして結果をファイルに出力させてみました。
    上記のようにしてみたのですが、どうしてもうまく600行毎に計算できません。
    もし判るかたがいらっしゃいましたら助言を頂けると助かります。 

86 80,81 [] 2010/05/17(月) 17:22:19 ID: Be:
    DO 20 I=N,N+6001
    DO 20 I=0,N+1
    訂正
    DO 20 I=N,N+601 

90 デフォルトの名無しさん [sage] 2010/05/18(火) 23:50:40 ID: Be:
    >>85
    すくなくとも 

    N=1

    DO 20 I = N, N + 600
    もう一個のDO 20 は要らない。


91 デフォルトの名無しさん [sage] 2010/05/19(水) 02:05:24 ID: Be:
    >>90
    ぬるぽいんたーえくせぷしょん 

92 デフォルトの名無しさん [sage] 2010/05/19(水) 11:38:21 ID: Be:
    >>91
    FORTRAN スレなんだから、ABEND だろ!

93 80 [] 2010/05/19(水) 16:10:18 ID: Be:
    >>90
    すみません、色々試していてコメントアウトしたところとかを載せてしまっていたので
    86で訂正しています。ややこしくて申し訳有りません。
    今のところサブルーチン2つまわすやりかたのほうで下のような感じにしています。

    N=0
    30 continue
    DO 20 I=N,N+601
    20 READ(10,*) X(I),Y(I)
    CALL SUB1(X,Y,G,H,N,MP)
    DO 40 I=N,N+600
    40 WRITE(20,*) X(I),Y(I),G(I),H(I)
    HH=1
    DO 30 I=N,N+600
    XX=X(N)+HH*I
    YY=SUB2(G,H,X,Y,XX,N,MP)
    KH=0
    DO 50 K=N,N+600
    IF(ABS(X(K)-XX).LE,1.d0) THEN
    GOTO 50
    ENDIF
    50 CONTINUE
    WRITE(20,fmt)XX,YY
    30 CONTINUE
    N=N+600
    goto 30 

94 80 [] 2010/05/19(水) 16:12:46 ID: Be:
    >>80続き(改行が多すぎるのでエラーになってしまったので)

    PARAMETER (MP=36000, NW=600)
    DIMENSION X(0:MP),Y(0:MP),G(0:MP),H(0:MP)としています、
    MPはデータの行数で、ファイル毎に少し違うのですが最大行数を入れてあります。

    600行を読み込んで、SUB1とSUB2を計算させて、ファイルに書き出して次の600行をまた・・・
    という感じで操作させたいのですが、何故かおそらく始めの600行のSUB1で出て来るHやGを使って
    次の600行以降が計算されているような変な結果になってしまいまして。

    始めの600行に関しては結果として正しい値が出て来ているのでサブルーチン部分には問題は無いと思います。
    本当にすみませんがよろしくお願いします。 

95 80 [] 2010/05/19(水) 16:15:46 ID: Be:
    あわわわまた間違えていました!!!30 CONTINUEが2回ありますが
    >>93の頭の30 continueは15 continueの間違いで、最後のgoto 30がgoto 15になります!!!
    ほんとうに申し訳有りません。。。 

96 デフォルトの名無しさん [sage] 2010/05/19(水) 16:47:43 ID: Be:
    どうもGOTO文やDO..CONTINUE文で混乱しているようだけど,
    まだFORTRANを覚え立てなら,わざわざ古い書き方で覚えずに,
    Fortran90形式のDO..END DO構文で慣れた方がいいんではないかい?

    特にGOTO文を使うのは間違いを誘発しやすいから,使わないようにするのが世界的な流れだし. 

97 デフォルトの名無しさん [sage] 2010/05/19(水) 17:05:53 ID: Be:
    ところでend doとendoはどっちが望ましいの?
    個人的にenddoの方が一語にまとまってて好きだけど 

98 80 [] 2010/05/19(水) 17:35:55 ID: Be:
    >>90
    そうなんですか、理解していませんでした(>_<)

    f77とf90だとかなり違うのでしょうか?
    例えば参考にしているサイト陣がf90だったりf77だったりそれぞれ違っていたと思うのですが、
    取り混ぜてしまっていたらまともなコードにはならない・・・という考えで合っていますか?

    教科書は今までf77のものを使っていたので、なんにしてもf90のものを探してみます。 

100 デフォルトの名無しさん [sage] 2010/05/19(水) 19:29:53 ID: Be:
    良いこと思いついた
    焚書坑儒して77を滅ぼそう 

101 デフォルトの名無しさん [sage] 2010/05/19(水) 23:16:55 ID: Be:
    >>94
    色々、妙な点が多いプログラムではあるので、可能性は色々あるが、
    サブルーチン側でX(1)~X(600)までで計算してるんで内科医?

    そもそも、古い数値がいらないなら、600個の配列に毎回書き換えて読み込めばいいし、
    サブルーチン側でも600個を受け取って、1~600までの要素で計算すれば良い。

    全要素を引渡しているようだが、必要なのかな?

    >>100
    77もいいとこあるんだよ。

107 80 [] 2010/05/20(木) 03:55:52 ID: Be:
    >>101
    助言ありがとうございます、毎回書き換えてみる方法を色々試してみました。
    下のようにメインプログラムを書き換えてみたのですが、
    READ(10,*) X(0),Y(0)
    do N=1,NW,MP
    DO I=1,MP
    READ(10,*,err=99) X(I),Y(I)
    end do
    CALL SUB1(X,Y,G,H,N,MP)
    DO I=0,INT(X(MP-1)-X(0))
    XX=X(0)+real(I)
    K=1
    do while ((X(K-1)-XX)*(X(K)-XX) > 0.0d0)
    K=K+1
    end do
    YY=SUB2(G,H,X,Y,XX,K,MP)
    WRITE(20,2100) XX,YY
    end do
    X(0) = X(MP)
    Y(0) = Y(MP)
    end do
    close (20)
    close (10)
    STOP 

109 80 [] 2010/05/20(木) 04:02:28 ID: Be:
    107続き
    最後のほうのデータが抜けてしまって、現在はどうしたものかと悩んでいます。
    取り敢えずサブルーチンのDIMENSIONの設定とかをもう少し見直してみます。 

110 102 [] 2010/05/20(木) 04:47:12 ID: Be:
    >>108
    すいません。。PCは大学入るまで使うことが少なくてよくわからなかったのです。
    とりあえずいわれたものをダウンロードしてみます。ありがとごいました 

111 デフォルトの名無しさん [sage] 2010/05/20(木) 05:04:02 ID: Be:
    >>110
    g95だがこのへんとか
    ttp://d.hatena.ne.jp/arakik10/20090213/p1

    あと最近の本だとこれがわかりやすい。
    ttp://www.amazon.co.jp/dp/4627847211 

114 デフォルトの名無しさん [sage] 2010/05/20(木) 10:25:59 ID: Be:
    >>85,>>92 → >>107
    同じ人が書いたとは思えない!初心者でも1日でこんなに上達するんだな。

    >最後のほうのデータが抜けてしまって
    表現があいまいすぎて意味分からん。もしかして女の子?
    助言を求めているなら、具体的に書かないとなんとも言いようがない。

115 デフォルトの名無しさん [sage] 2010/05/20(木) 10:27:19 ID: Be:
    × >>85,>>92 → >>107
    ○ >>85,>>93 → >>107 

118 80,85,93,107 [] 2010/05/20(木) 19:25:09 ID: Be:
    >>114
    わかりにくくて申し訳有りません(>_<)データは30000行入っていて欲しかったのですが
    どうやら最後のほうや途中がデータ計測の時に抜けてしまったようでした。
    抜け自体はそれほど多く無いので線形補間というのをすれば問題は無いそうです。
    計算式は渡されて、どうやるかはまだ良く判っていませんが、調べてみます。

    >もしかして女の子?
    はい、最近分野変えで物理系の研究室に転入してきたばかりなのですが
    今まではプログラミングには縁もゆかりもありませんでした。

    >107は昨晩学校を徘徊して他の研究室に残っていた先輩からもアドバイスを貰いました。
    >93については先輩曰く「動くようなプログラムには見えないぞ」との事で
    つまるところ>>96と同じような指摘を受けたりなんだりして、手直ししてみました。

    自分ではまだまだ勉強が浅いので次に違うプログラムを作る時には
    また色々戸惑うだろうなぁとは思っています。
    これからまたしっかり勉強します、ありがとうございました。 

126 デフォルトの名無しさん [sage] 2010/05/21(金) 01:51:09 ID: Be:
    >>90あたりからの流れ好きだよ俺は 

132 デフォルトの名無しさん [sage] 2010/05/21(金) 02:53:31 ID: Be:
    >>118
    よく解らんが、不等間隔のデータを読み込んで、等間隔のデータに補間して出力したいのかな。
    > do while ((X(K-1)-XX)*(X(K)-XX) > 0.0d0)
    この条件式の書き方は昔風で今は流行らない。素直にIF文にした方がいい。

    こんな感じの事をしたいのかもしれない。
    PROGRAM unko
    PARAMETER (MP = 600)
    DIMENSION x(0:MP), y(0:MP)
    READ(10,*) X(0),Y(0)
    DO N = 1, 999999
    DO I = 1,MP
    READ(10,*,err=99) X(I),Y(I)
    END DO
    CALL SUB1(X,Y,G,H,MP)
    K = 1
    DO I = 0, INT( X(MP - 1) - X(0) )
    XX = X(0) + REAL(I)
    IF ( ( X(K-1) < XX ) .AND. ( XX <= X(K) ) ) THEN
    YY = SUB2(G,H,X,Y,XX,K,MP)
    WRITE(20,'(2F15.7)') XX,YY
    ELSE
    K = K + 1
    END IF
    END DO
    X(0) = X(MP)
    Y(0) = Y(MP)
    END DO
    99 CONTINUE
    STOP
    END 

141 80,107,118 [] 2010/05/22(土) 05:49:11 ID: Be:
    >>132
    これは書き方が判りやすくて助かります!おっしゃる通りのようなプログラムです、
    どうやら抜け落ちたデータの補間もこれで出来るらしい?です。

    107に書いたやりかたで取り敢えず動くのでやってみたのですが
    50000行くらいの大きなデータだと、結果が出るまでもの凄く時間が掛かってしまいました。
    変なところにバッファしてるんじゃないの?と言われたのですが良く判らず
    10000ずつ計算させて切り貼りしています。どうしたものかと悩んでいます。

    > do while ((X(K-1)-XX)*(X(K)-XX) > 0.0d0)
    先輩が教えてくれたのですが、イマイチ意味が判っていませんでした、
    普通にIFでやっても良いんですね、ありがとうございます。 

142 デフォルトの名無しさん [sage] 2010/05/22(土) 09:48:31 ID: Be:
    >>141
    計算機でやる分には、時間がかかってもそのままやらせればいいと思う。
    手で切り貼りする作業時間を含めれば、結局トータルでの時間は、計算機でやった方が早いのでは?

    時間がかかる原因は、色々ある。
    しかしプログラムのどの部分に時間を取られているのか分からないとなんと見えない。
    細切れのI/Oが多いと時間はかかる。だが、50000行くらいなら、600行づつ読んでもそれほどでもないような。

    元のプログラムだと、毎回最初のデータから条件を満たす位置を探し始めているが、
    Xが単調に増加しているのなら、前回の位置から探し始めれば早く適切な場所が見つかると思う。
    この辺に、時間がかかっている気がしなくもない。

143 141 [] 2010/05/22(土) 16:30:49 ID: Be:
    >>142
    一桁間違えていました!(>_<)500000行くらいのデータです。
    数時間の測定だと100000行以内くらいで済むので5~6分で計算出来るんですが
    200000行くらいだと20~30分くらい掛かってしまいます。
    500000行くらいのデータをやろうとしたら数時間掛かってしまっていました。

    Xは単調増加なので前回の位置から探すというやりかたをちょっと考えてみます、
    ありがとうございます。 

144 デフォルトの名無しさん [sage] 2010/05/22(土) 19:13:23 ID: Be:
    >>143
    N=
    1 * 10**5, 5. .6min   5 / 1^2 = 5
    2 * 10**5, 20.. 30min   20 / 2^2 = 5
    5 * 10**5, 60..180min ~125/ 5^2 = 5

    計算時間が要素数の自乗で増えているが、処理内容から言ってそうなるはずのものではない。
    計算回数が自乗になりそうな所を探せば解決する気がする。

    データを毎回頭から探すような部分はnC_2~O(n^2)だから、可能性は高い。

    あと、それとは別に、今デバッグモードで実行しているなら、リリースモードで実行することにより
    2~10倍くらいはやくなる可能性はある。その辺はコンパイラに依るので先輩などに聞いてみるとよいかな。

145 デフォルトの名無しさん [sage] 2010/05/22(土) 21:37:39 ID: Be:
    >Xは単調増加なので前回の位置から探すというやりかたをちょっと考えてみます、
    >>142が言っている「元のプログラム」って>>85や>>93のことではないの?

    >>107も>>132も,すでに前回の位置からREADするようになっているでしょ. 

146 デフォルトの名無しさん [sage] 2010/05/22(土) 22:09:28 ID: Be:
    >>143ちょっとまて!
    >>107でやってみたって言ってるけど,SUB1の引数にNが入るのっておかしくないか?
    >>107バージョン CALL SUB1(X,Y,G,H,N,MP)
    >>132バージョン CALL SUB1(X,Y,G,H,MP)

    データの補間がしたいと言うことから推察するに,スプライン補間かな?(SUB1は行列を解いてる?)
    5番目の引数が配列のサイズを渡しているんだとすれば,>>107ではNに相当大きな配列サイズが指定されて,
    無意味なメモリ領域を読み取ってそのまま解いているんじゃないか?
    SUB2ではその無意味な計算結果は使われないから,それで正常な結果が得られたとしても納得できそう.
    ちょっと行き過ぎた推測かも知れないけど...

    いちど,サブルーチンの引数を確認してみては? 


147 142 [sage] 2010/05/23(日) 17:10:04  ID: Be:
    >>146
    毎回最初からと言っているのは、READではなくて、補間位置を決める、2つのデータに挟まれている位置を
    求める部分の話。

    >>107での2重DO-LOOP構造では、DO内でK=1にしているので毎回X(0)から探し始めている
    DO I=0,INT(X(MP-1)-X(0))
    XX=X(0)+real(I)
    K=1
    do while ((X(K-1)-XX)*(X(K)-XX) > 0.0d0)
    K=K+1
    end do
    ..YY=SUB2(G,H,X,Y,XX,K,MP)
    end do
    ..
    end do

    一応>>132では(Xの単調増加を仮定して)外に出してある。

    >>146
    読み込んだデータを延々と配列にため込んでいるので、毎回現在のポインタ位置のような意味でNを渡す
    必要があるのではないかと思う。

149 デフォルトの名無しさん [sage] 2010/05/23(日) 19:59:51 ID: Be:
    前半は納得した.
    後半「読み込んだデータを延々と配列にため込んでいるので、」というのは違うと思う.
    どちらも0:MPの配列を使い回してる.
    >>107の抜粋
     READ(10,*) X(0),Y(0)
     do N=1,NW,MP
         DO I=1,MP
             READ(10,*,err=99) X(I),Y(I)
         end do
         CALL SUB1(X,Y,G,H,N,MP)
         ...(略)...
         X(0) = X(MP)
         Y(0) = Y(MP)
     end do

    >>132の抜粋
     READ(10,*) X(0),Y(0)
     DO N = 1, 999999
         DO I = 1,MP
             READ(10,*,err=99) X(I),Y(I)
         END DO
         CALL SUB1(X,Y,G,H,MP)
         ...(略)...
         X(0) = X(MP)
         Y(0) = Y(MP)
     END DO

    どちらにしてもサブルーチンの中身が分からないと,X,Yの配列を使い回すのが正しいのかすら推測の域を出ないな.
    質問者のレベルから考えると,引数の意味を把握しているか自体が心配.
    (このスレ,勉強になるなぁ) 

150 142 [sage] 2010/05/23(日) 22:24:25 ID: Be:
    >>149
    おk把握した。
    古い方のプログラムと混乱していた。

    古い方は、データをため込んでいるので、現在位置をサブルーチンに渡す必要があるから、
    Nを渡していると理解していた。

    とすると>>107では、Nの値が狂っているなw N=1で固定しなきゃないかな?w

151 141 [] 2010/05/24(月) 02:20:17 ID: Be:
    >>144->>150
    今理解するのにちょっと時間が掛かっています(>_<)皆様有り難うございますm(_ _)m

    >>146さんの言う通りサブルーチンの中身はスプライン補間になっていました。
    SUB1で行列を解いていて、SUB2で間隔1毎の値を計算している?感じです。
    引数の意味はまだ良く理解出来ていません、SUB1のNがおかしいのでしょうか?
    もう少しいぢくってみます。。。 


ここ数日続きがないけど解決したのかな?

■_ 本日の巡回から

2010年05月28日

■_

MOONLIGHT MILE 20 2人のロマン (ビッグコミックス)
出てた。ロストマンがああなっていたとは。

■_

だだもれ
. 他人が書いたコードを直す仕事。どうしてここまで速度に無頓着でいられるんだろう。 微妙
に高速化しようとした跡があったりもするのだが、 てんでとんちんかんなやり方をしている。 
「最適化はプロファイリングして問題になったところだけやりましょう」 という事が良く言わ
れるが、その台詞は結構な頻度で有害だ。 根本的に設計がアホであるために性能が出ないケー
ス というのが現実にはあるのであって、 そういうケースで一部だけいじって「これ以上無理で
す」 とか言うアホを正当化しかねない。 アホな設計はしないという前提がある時にしか言えな
い言葉なのだ。

鶏と卵という気もしますが、確かに「高速化」のためにといって頓珍漢な ことをやってるのを見たりしますねえ。 設計そのもののできの悪さ(の原因)はプロファイラーじゃわかんないだろうしなあ。

■_


Who Deserves The Credit For Software Craftsmanship and Great Design?

(さくっと略)


Eric S. Raymond, the author of "The Art Of Unix Programming", summarised the 
Unix philosophy in the following 17 tenets.

    1. Rule of Modularity: Write simple parts connected by clean interfaces.

    2. Rule of Clarity: Clarity is better than cleverness.

    3. Rule of Composition: Design programs to be connected to other programs.

    4. Rule of Separation: Separate policy from mechanism; separate interfaces from engines.

    5. Rule of Simplicity: Design for simplicity; add complexity only where you must.

    6. Rule of Parsimony: Write a big program only when it is clear by demonstration that
       nothing else will do.

    7. Rule of Transparency: Design for visibility to make inspection and debugging easier.

    8. Rule of Robustness: Robustness is the child of transparency and simplicity.

    9. Rule of Representation: Fold knowledge into data so program logic can be stupid
       and robust.

    10. Rule of Least Surprise: In interface design, always do the least surprising thing.

    11. Rule of Silence: When a program has nothing surprising to say, it should say
        nothing.

    12. Rule of Repair: When you must fail, fail noisily and as soon as possible.

    13. Rule of Economy: Programmer time is expensive; conserve it in preference to 
        machine time.

    14. Rule of Generation: Avoid hand-hacking; write programs to write programs when 
        you can.

    15. Rule of Optimization: Prototype before polishing. Get it working before you 
        optimize it.

    16. Rule of Diversity: Distrust all claims for "one true way".

    17. Rule of Extensibility: Design for the future, because it will be here sooner 
        than you think.

■_

何日か前に高橋会長が、Rails をどのバージョンのRubyで動かしているか というのをついったーでないか言っていたような。

when will ruby 1.8.6 be retired? - Stack Overflow

I can't seem to find any info on this... when will ruby 1.8.6 be 'retired'? ruby 1.8.7 
is much more functional while maintaining syntax compatibility, and ruby 1.9.1 is 
significantly better all around... any idea when 1.8.6 will be retired?


I don't think any versions of Ruby are ever formally retired. Things like Rails will 
eventually become incompatible, but older versions are always available.

People will continue using older versions of Ruby for a while. Forcing an upgrade is 
never easy.

I suspect the main laggards with respect to ruby will be packaging systems for Linux.

When I was using Fedora Linux, I remember that ruby 1.9 was available for download 
from ruby-lang.org, but wasn't available as an RPM package (apart from source RPM).

Does anyone know about the status of ruby with the major Linux distributions?

@andrewgrimm AFAIK Debian stable has 1.8.7 and 1.9.0, Debian testing has 1.8.7 and 
1.9.1. Don't know about the others.


Centos/RHEL 5.3 has 1.8.5 


Since RubyGems no longer officially supports 1.8.6 i think it's safe to say 1.8.6 is 
retired as of 'now'

see: http://blog.segment7.net/articles/2010/04/23/ruby-1-8-6-policy
where did you hear that rubygems doesn't support 1.8.6? i just updated my gem 
installation to 1.3.7 on my ruby 1.8.6 without issue, and have been using it without 
issue.

ok... "RubyGems 1.4.x will not support Ruby 1.8.6. "... current version is 
1.3.7...so it still supports ruby 1.8.6, but won't once the 1.4 rubygems is released. 


Hopefully not before I finish the Ruby book I'm reading (it's written to 1.8.6). I'd 
better finish that soon and then get up to date.


There are very few syntax changes between versions, from what I understand. Everything 
I've ever written for Ruby 1.8 works on 1.9. The only difference I've encountered is 
that hashes in 1.9 are ordered by default. – Matchu 11 hours ago

1.9.0 とか 1.8.5 が入っているシステムて。

■_ に明日はない


D言語 Part24 
564 デフォルトの名無しさん [] 2010/05/25(火) 21:23:27 ID: Be:
    D言語を勉強しようと思うがどうやって勉強した方がいいか教えてくれ 

565 デフォルトの名無しさん [sage] 2010/05/25(火) 21:33:37 ID: Be:
    1. Cを勉強する
    2. C++を勉強する
    3. 投げ出す
    4.

    ↓後は任せた 

566 デフォルトの名無しさん [sage] 2010/05/25(火) 21:37:31 ID: Be:
    >>564
    まずC++を勉強する。で、嫌になる。
    D言語のスタートはそこからだ、頑張れ。 

567 デフォルトの名無しさん [sage] 2010/05/25(火) 21:44:12 ID: Be:
    C++に不満を持つことから始めないとな 

568 デフォルトの名無しさん [sage] 2010/05/25(火) 21:46:13 ID: Be:
    D本家の言語仕様を読めばいい 

569 デフォルトの名無しさん [sage] 2010/05/25(火) 22:04:11 ID: Be:
    C/C++のコンパイル速度に嫌気がさせば使ってもよい 

570 デフォルトの名無しさん [sage] 2010/05/25(火) 22:41:18 ID: Be:
    C/C++のコンパイル速度に嫌気がさしたのでDelphiを使いました 

571 デフォルトの名無しさん [sage] 2010/05/25(火) 22:51:23 ID: Be:
    C言語を勉強する。
    オブジェクト指向に目覚めるが、Cでは継承がまともにできないことに気がつく。
    C++言語を勉強する。
    メモリ管理と多重継承と名前空間で死ぬ。
    とここまでやったらD言語をやるといいな。 

572 デフォルトの名無しさん [sage] 2010/05/25(火) 23:38:07 ID: Be:
    >> 571
    それ俺だ…… 

573 デフォルトの名無しさん [sage] 2010/05/26(水) 00:22:10 ID: Be:
    そして
    ・破壊的変更
    ・ライブラリのポーティング
    ・メモリ周りはGCあるとむしろ面倒なことも多い(shared_ptrのほうがいいじゃん!
    あたりが原因でC++に戻ってくるけど、
    cppとhを両方書くこととかコンパイル速度あたりに、もはや自分が耐えられない身体になっていることに気づく。
    一縷の望みをかけて.netに浮気をするが、結局『ネイティブコンパイル』という言葉のミリキに抗えない。

    で、この辺りまでこぎ着けて、再びDスレを覗いてみて、判定に成功すればDに永住フラグが立つ。
    判定基準はGUIライブラリがタイミングよく更新してるとか、IDEがちょっと使えるようになってるとか、そんなん。 

574 デフォルトの名無しさん [sage] 2010/05/26(水) 01:10:07 ID: Be:
    実に的確だなあ
    まさにそんな感じだ俺は 

575 デフォルトの名無しさん [sage] 2010/05/26(水) 01:24:05 ID: Be:
    >>573
    それなんて俺? 

576 デフォルトの名無しさん [sage] 2010/05/26(水) 07:01:37 ID: Be:
    DWTが死んでるんだか生きてるんだかわからないうちはDを使い続けるかな 

577 デフォルトの名無しさん [sage] 2010/05/26(水) 07:51:10 ID: Be:
    C#は配列周りやデリゲート周りが(Dと比べて)かなり不便なのがいかんとも。 

D はよくわかりません…


スレ立てるまでもない質問はここで 105匹目 
829 デフォルトの名無しさん [sage] 2010/05/27(木) 17:30:14 ID: Be:
    月は1年で約3.8cm離れていっているといわれます
    これがプログラムにいったいどのような影響を与えるか考えたことありますか? 

830 デフォルトの名無しさん [sage] 2010/05/27(木) 20:07:07 ID: Be:
    重力の変化の影響でコンパイル時間がちょっとずつ延びてるらしいよ 

831 デフォルトの名無しさん [sage] 2010/05/27(木) 20:34:12 ID: Be:
    >>829
    毎年const定数の定義を書き換えてコンパイルやり直さないといけない。 

832 デフォルトの名無しさん [sage] 2010/05/27(木) 21:01:39 ID: Be:
    多体問題は一意な記述による予測はできないから数万年後には月は地球に近づいているかもよ 

833 デフォルトの名無しさん [sage] 2010/05/27(木) 21:02:27 ID: Be:
    メモリって結構頻繁にビット化けしてんだな
    ってのがよくわかる 

834 デフォルトの名無しさん [sage] 2010/05/27(木) 21:06:39 ID: Be:
    人間の記憶も結構書き換わってるよ 

835 デフォルトの名無しさん [sage] 2010/05/27(木) 21:07:03 ID: Be:
    マジレスすると、プログラマは明日の事は考えない。 

836 デフォルトの名無しさん [sage] 2010/05/27(木) 21:08:56 ID: Be:
    いや、それはお前だけだろ 

837 デフォルトの名無しさん [sage] 2010/05/27(木) 21:09:58 ID: Be:
    マジレスすると、明日はプログラマの事は考えない。 

838 デフォルトの名無しさん [sage] 2010/05/27(木) 21:17:51 ID: Be:
    プログラマは明日の事は考えると、マジレスしない。 

839 デフォルトの名無しさん [sage] 2010/05/27(木) 21:38:44 ID: Be:
    さっそく脳のメモリがビット化けしてやがる 

840 デフォルトの名無しさん [sage] 2010/05/27(木) 21:46:50 ID: Be:
    納期に間に合いそうもない場合はどうするんですか?
    課題が終わる気配がなくて泣きそうです 

841 デフォルトの名無しさん [sage] 2010/05/27(木) 21:58:04 ID: Be:
    オナニーして寝ればいいよ 

842 デフォルトの名無しさん [sage] 2010/05/27(木) 22:02:34 ID: Be:
    そうですねオナニーして寝ます
    どうせたかが2単位だしーみたいなー

843 デフォルトの名無しさん [sage] 2010/05/27(木) 22:36:31 ID: Be:
    マジレスすると、プログラマは明日の事は考えない。 

844 デフォルトの名無しさん [sage] 2010/05/27(木) 23:12:53 ID: Be:
    明日のことは考えるのがプログラマなら、マジレスではない。 

845 デフォルトの名無しさん [sage] 2010/05/27(木) 23:22:40 ID: Be:
    明日の事を考えたらプログラマは生きていけない。 

846 デフォルトの名無しさん [sage] 2010/05/28(金) 13:44:02 ID: Be:
    プログラマに明日は無い 

■_

If you have to learn just one programming language | Babu Srinivasan's blog (もしあなたがただ一つだけプログラミング言語を学ばなければならないとしたら) のつづき。


Static Typing for Lazy People: Type inference - One of the biggest advantages touted 
by people in the dynamic typing camp (Ruby, Python) is that you can be more ‘
productive' as you don't need to waste time specifying the type. Any debate on static 
vs dynamic typing will be not unlike that between vi and emacs - religious wars, where 
you have people on both camps arguing passionately . I can't think of any advantage of 
dynamic typing except that it allows the programmer to be lazy and not specify the 
type. This laziness has a hidden cost in that a lot more time needs to be spent on 
testing as you have refused the help of the compiler. The productivity gains are more 
than offset by the additional testing that is required. And if you don't write good 
tests you will have problems at run time where there is not much you can do. Why do 
you want to hobble the compiler and not let it perform better just because you want to 
avoid specifying the type. Also, I can never understand why you would want to catch a 
bug at run-time when you can do it at compile time. Here is the kicker: do you want 
all the benefits of static typing but don't want to bother entering type? You can have 
your cake and eat it too. The name for this magic is type inference. To put it simply, 
you can infer the types from the operations that are performed. Take division 
operation: a = c/d. We know that you can divide 2 numbers. You cannot divide 2 Strings 
or 2 enums (unless you have added these definitions). Similarly if you call ‘head 
xyz', the head operation applies to a list and therefore xyz must be a list. This is a 
bit simplistic but you get the idea. This means that the only excuse for not choosing 
a statically typed language - laziness - doesn't apply as you can be lazy and still 
have static types. With static typing a lot of the bugs will be found at compile time. 
IDEs can take advantage of (specified or inferred) types. Code factoring is lot easier.


ものぐさな人たちのための静的型付け(static typing): 型推論 (type inference) とは動的型
付け言語の camp (Ruby, Python) にいる人たちによって tout された最大の advantage の一つ
で型を指定するために時間を浪費する必要をなくしてあなたをより“生産的”(productive) に
できるものである。すべての静的型付けと動的型付けについてのディベートは、vi とEmacs の
との間のそれ、宗教戦争とは違っていて、
where you have people on both camps arguing passionately .
プログラマーがものぐさであったり型の指定をしないのを許すという点を除けば、わたしは動的
型付けに何らかのアドバンテージというものがあるとは考えられない。この遅延性 (laziness) 
にはあなたがコンパイラーの助けを拒絶したことでテストを行うのにより多くの時間を必要とす
るという隠されたコストがある。(動的言語を使うことで) 得られた生産性 (productivity) は
要求される追加テスト (additonal testing) によってさらに offset される。そしてもしあな
たが良いテストを書かなかったら、実行時に there is not much you can do となる個所であな
たは問題を抱えることになるだろう。なぜあなたは、ただ単に型の指定 (specifying the type) 
を省略したいがためにコンパイラーを hobble したがっていて、パフォーマンスの向上をさせな
いのか。またなぜ、コンパイル時に捕捉できるバグを実行時に捕捉したがるのかわたしには理解
できない。Here is the kicker: あなたは静的型付けの利点をすべて望むが退屈な型の入力はし
たくないと考えているだろうか? You can have your cake and eat it too.
その magic の名前を型推論 (type inference) という。これを単純にするために、実行される
オペレーションからその型を推論可能である。 a = c/d という除算を考えてみよう。我々は二
つの数値で除算を行えることを知っている。二つの文字列や二つの列挙 (enums) での除算は、
あなたがそれらを定義していない限り行えない。同じように、あなたが ‘head xyz' と呼び出
したとき、head オペレーションはリストに対して適用されるものであるから、xyz は当然リス
トでなければならないことが明白である。これは少々 simplistic ではあるがあなたはこの考え
を採用できるだろう。
This means that the only excuse for not choosing a statically typed language
- laziness -
doesn't apply as you can be lazy and still have static types.
静的型付けによって、数多くのバグがコンパイル時に発見されるだろう。IDE も型の指定や推定
による恩恵を享受できる。コードの factoring はかなり容易 (lot easier) である。



So, though Python and Ruby pass criteria #1, they don't do it by a wide-margin if you 
include the extra time required for testing. They also pass criteria 3, 4, 7, 8, 9, 10, 
13. But they fail my criteria #2, by a wide margin - Ruby and Python are slow. There 
are some implementations of Python and Ruby on the JVM but they are not ready for 
prime-time. Ruby and Python are used in a lot in web-frameworks, the most popular 
being Rails and Django, but they are not known for speed. Native thread support is 
lacking (#6) and you cannot transparently take advantage of multi-core processors. So 
I am eliminating Python and Ruby, primarily for #2 and secondarily due to #11, #5, #6 
and the possibility of run time errors due to type mismatch. For many use-cases, speed 
is not a concern and so Python and Ruby are suitable. But if speed is a concern, it 
doesn't make sense (in my opinion) to prototype the app first in Python or Ruby and 
then write parts (or whole) of it in C for speed. If you can prototype in language-x 
as quickly as you can do it in Python or Ruby but with much better performance, you 
have best of both worlds.


であるから、Python も Ruby も criteria #1 をパスするが、テストのために必要とされる 
extra time を含めた場合にはマージンはそれほど大きくはない。この二つの言語は criteria
3, 4, 7, 8, 9, 10, 13 もパスする。しかし、criteria #2 については by a wide margin で
fail する。Ruby も Python も遅いのだ。Python と Ruby には JVM で実装したものも存在し
ているが、それらは ready for prime-time ではない。Ruby と Python はそれぞれ Rails と
Djanggo に代表される多くの webフレームワークで使用されているが、
they are not known for speed.
ネイティブスレッドのサポートが欠如しているので(#6)、あなたは tranparently にマルチコア
プロセッサーのアドバンテージを享受できない。ということから、わたしは Python と Ruby
を primarily for #2 and secondarily due to #11, #5, #6 
そして型のミスマッチによる実行時エラーの可能性を理由として除外する。多くの use-cases 
に対してはスピードは重要ではないので、Python や Ruby はsuitalbe (適している、都合が良い)
である。しかしスピードが重要であったとき、最初に Python や Ruby でプロトタイプのアプリ
を作ってからそれを高速化のために部分的(もしくは全面的に) C で書き直すということは意味を
成さなくなる。もしあなたが X 言語で Python や Ruby を使ったときのようにすばやく
プロトタイプを作れて、それでいてより優れたパフォーマンスを得られるのなら
あなたの手には best of both worlds がある。


I will eliminate Groovy. It doesn't offer much more than Java with a more succinct 
syntax. You may as well learn Python or Ruby which are also dynamic languages.

わたしは Groovy も除外する。この言語はより簡潔 (succinct) な構文を持った Javaという
以上のものを offer していない。あなたはやはり動的言語である Python や Ruby を学べる
だろう。

I will eliminate F# due to #8 (Platform agnostic). F# runs on the .NET platform. It 
may run on Mono (.NET on Linux) but may not be as efficient. We need to depend on 
Microsoft's roadmap for F#. You can use OCaml as F# is largely derived from it.

#8 (Platform agnostic) を理由として F# を除外する。F# は .NETプラットフォーム上で動作
する。Linux 上の .NET である Mono 上で動作する可能性はあるが、それは効率が良くないだろ
う。わたしたちは Microsoft による F# のロードマップに依存しなければならない。
You can use OCaml as F# is largely derived from it.


That leaves us with Clojure, Erlang, OCaml, Clean, Haskell and Scala.

我々の手元に残っているのは Clojure, Erlang, OCaml, Clean, Haskell, Scala である。

■_ 本日の巡回から

2010年05月27日

■_

プログラミングRuby 1.9 −言語編−プログラミングRuby 1.9 ?言語編
パーフェクトソフトウエア
原著も「Perfect Software」だったのね。
でじぱら 5 (電撃コミックス)でじぱら 5 (電撃コミックス)
これで完結だったのか。電撃大王は買ってもよつばと!と後二つ三つくらいしか読んでないからなあ。
ハニカム 4 (電撃コミックス)

■_ そのキャストは


【初心者歓迎】C/C++室 Ver.73【環境依存OK】 
164 デフォルトの名無しさん [] 2010/05/27(木) 11:34:42 ID: Be:
    LPCTRとかが良くわからないのですが
    キャストしたらエラーが取り合えず消えるので
    全部キャストでも問題ありませんか? 

165 デフォルトの名無しさん [sage] 2010/05/27(木) 11:49:37 ID: Be:
    LPCTRってなんだよ・・

    LP: LongPointer(16bit時代は32bitポインタをLongPointerと呼んだ)
    C: Const
    T: Tchar
    STR: STRing

    これらを適当に組み合わせただけ 

166 デフォルトの名無しさん [sage] 2010/05/27(木) 13:48:26 ID: Be:
    わかりにくいからTSTRCLPにすればいいのに 

167 デフォルトの名無しさん [sage] 2010/05/27(木) 18:24:52 ID: Be:
    >>164
    死ねばいいと思うよ 

168 デフォルトの名無しさん [sage] 2010/05/27(木) 20:09:14 ID: Be:
    >>164
    問題尾大有りだ 


164 みたいのとマジで一緒に仕事をしたことが ○| ̄|_

■_

melancholic afternoon
5月25日_

目標達成したのでぼちぼち完了フェーズへ. この数週間はx64漬けな日々だった. 数千ステップ
数のアセンブリコードを書いては捨て, 書いては捨てた. ここまで書き捨てたのは何年ぶりか. 
ロジックに複数案があるときは, ぐだぐた机上で悩んでないですぐさま実装して確認. それが一
番. おかげでx64に大分慣れた. 一度x64を体験するとx86には戻れんなだろうなあ. 今回のケー
スだと32bitなら速度も10分の1ぐらいになるんじゃなかろうか.

10倍はおおげさだったか. 5~6倍かな

汎用レジスターが多いからでしょうか?

■_ たとえ話は危険

stackoverflow で。

What is a good metaphor for c memory management? - Stack Overflow


I'm trying to find a good metaphor to explain memory allocation, initialization and 
freeing in c to a non technical audience. I've heard pass-by-reference/value talked 
about quite well with postal service usage, but not so much for 
allocation/deallocation.

So for I've thought about using the idea of renting a space might work, but I wonder 
if the SO crew can provide something better.


There are a number of metaphors you might use. The problem with something like 
property rental is that the renter generally chooses the space. In this case, it's the 
operating system's responsibility to choose a contiguous physical space of sufficient 
size. It's more like a hotel. You request the size room you want and the hotel staff 
will assign you a particular room that is unoccupied and is at least as large as you 
requested (malloc). They give you two things: the address (your room number) and 
permission to access that room exclusively (the key). It is then up to you to decide 
when you would like to check out and give back the key (free up the room). After that, 
the hotel can assign the room to someone else.


That's good. There's also a car park attendant who records which spaces are available. 
If you drive off without telling the attendant your space is empty, he doesn't know 
somebody else can use it. Eventually, the car park has no cars in it but also no free 
spaces. Conversely, if you tell the attendant your space is free, but you leave your 
car in it, there is always a chance that somebody else will park their car in it, 
pushing your car off the cliff (the car park is next to a cliff). 


Please don't use metaphors when you teach technical stuff.

The only metaphor i thought was useful was the one that a variable is a box where you 
can store values. All others were useless at best and confusing in general.

Just present the technical concept of dynamic memory management. It's not difficult 
and if they really need a metaphor to understand what is going on they have are 
definitely other problems.

They need to understand memory management anyhow when it comes to pointers (or 
references), which is the point where most people leave the class because they don't 
get it.

EDIT: I forgot, when you use the rental metaphor you students are lost when it comes 
to garbage collection or reference counting techniques. Its obvious that this will 
confuse people later.


There are useful analogies, especially when explaining a concept to a non-technical 
audience. The car-based deadlock vs. the multithreaded mutex one. The idea of a queue. 
Some of these programming constructs come out of our understanding of natural 
phenomenon, in which case an analogy is appropriate. This comment seems to imply that 
the computer world is an entirely abstract concept that comes out of the void, when in 
fact it is somewhat abstracted concepts that have connections to our understanding of 
the non-computer world.

「参照」で変数を管理している言語の「値渡し」を誤解ができるだけ生まれないように 説明するにはどうすればいいか。とか(Java には「参照渡し」はないよ~)。

■_

■_ 今日の十

ああ、こんな短いのでも訳している時間ががが


apenwarr - Business is Programming

2010-05-22 »

    A Programmer's Code of Ethics

    1. My programs encode the rules of modern society. I will take full responsibility 
       for the programs I write.

    2. I will not write a program that intentionally fails to operate.
       意図的に操作を失敗するプログラムを書かない

    3. I will not write a program that refuses to do tomorrow what it was able to do 
       yesterday.
       機能できたことを明日やることを拒絶するプログラムを書かない

    4. I will not create a single point of failure, whether technical or political.

    5. I will not encode foolish rules just because someone paid me to do it.

    6. I will not give people what they want if what they want is not good enough.

    7. I will not stop people from taking my program's ideas and making them better.

    8. I will write programs to help each person produce their best, not to help the 
       masses produce mediocrity.

    9. I will correct those who believe my program's failure is anyone's fault but mine.

   10. I will write programs to benefit even the people who don't deserve it. 


    Condensed "New Testament" Version

          Don't write for others a program you wouldn't want written for you.


    Commentary

    Do I always follow all the above rules perfectly? Certainly not. In fact, I think 
    I've broken every single one of them.

    But thinking over all those situations and knowing what I know now, I'm pretty 
    sure that in every case, it would have been better if I'd done the right thing. The 
    exceptions don't feel like the right move; they just feel dirty.

    That's how I know I'm on the right track.

    Update 2010/05/22: Based on a suggestion from Chris Frey, slightly rephrased point #3.

    May 23, 2010 15:45 

2010年05月26日

■_

・ダムエー
オリジンは「とりかえしのつかないことをしてしまった」のあたり。 セイラさん絡んでこなかったのね。 教えてください富野ですのお相手は 「JAXA 月・惑星探査プログラムグループ「はやぶさ」プロジェクトマネージャ 川口淳一郎」 ということでそっち方面の人にはオススメかも。 でもまあ書店に行っても紐がかかってるでしょうねえ(^^;

■_ ともだちが

reddit から。


A friend of mine argues that you only write tests for what you know to work anyways - After seeing this, I think he might have a case... : programming

A friend of mine argues that you only write tests for what you know to work anyways - 
After seeing this, I think he might have a case... (review.source.android.com)


This is why static analysis tools are so important. Even a basic analyzer should have 
flagged v as an unused parameter.


The compiler does all that & more :)


Aside : when you compile perl (perl 6, to be specific), you see:

gcc -Larry -Wall

:-)

-Larry -Wall というオプションにうけてしまったというだけの話です。はい。

■_


Z80の課題が分かりません - Yahoo!知恵袋

Z80の課題が分かりません

ORG 8000h
LD A,(8100h)
LD B,00h
XOR B
LD (8100h),A

ORG 8100h
DB 23h
END

このプログラムで、「00hとEX-ORすることはどういう意味があるか。実際に2進数で計算して説
明しなさい」

という問題で、実際に2進数で計算しても同じ数字になるだけでよく分かりません。
どういう意味があるのでしょうか?

確かに,意味がなさそう。
あえて言えば,フラグが変化するので,このコードの後に条件ジャンプがあれば影響を与えるの
だけど…。

でも,“LD (8100h),A”は意味がないね。出題の間違えじゃないかな?

こんにちは。
意味は、フラグのことです。
zeroフラグはたちませんし、carryもクリアされます。

0とxorを取るということは、LDでは出来ないことをしたい、ということです。LDは、フラグが変
化しませんから、次の計算に備えて、フラグを調整する必要があるときに、このような処理をす
る、という話なんですが、 問題を考えた先生に、答えは聞いてください。

LD (8100h),A の後になんか抜けてんのかなあ。 xor で結果が0になったときってゼロフラグ立ったっけ?

■_

< /div>

■_

かみちゅ!~かみさまでちゅうがくせい~ 90柱目 
999 名無しさん@お腹いっぱい。 [sage] 2010/05/27(木) 01:01:50 ID:It3BJ01O Be:
              , -‐ っ― 、
         .  /        `ヽ、
           |      <´ ̄ `    !
           l  __.... `ニニ´....__.l
           fヽ、   __     __ヽ、
    .       /  ''く ' 〈_,ノ'i,__ノト;iハi
         /  ,ォTヽ、     ノ !'
          / ./  ヽ. ヽ、二、イ ! 1000ならカープ優勝!!! 

■_ 新刊

今月後半から来月にかけて興味を惹かれるタイトルが連続していて うれしい悲鳴というか、財布にきついってば(苦笑) プログラミング Ruby 1.9はスルーしようと思ってたんですが、 arton さんのところを読むと欲しくなるじゃないですか(^^; L'eclat des jours(2010-05-26) 達人たちはおもしろいープログラミング Ruby 1.9

2010年05月25日

■_

・Emacs
ずーーーーっと昔にちょっと見たくらいで、 Emacs のソースコード(というか中身)はよくわからんのですけど Ver 18 あたりから現在までってどのくらい変わっているんでしょうか (あるいは変わっていないのか)。 MULE 経由で入ってきた多言語対応などがあるのでまあだいぶ違うとは思うんですが。 C マガジンの記事だか別の雑誌だったか覚えていないんですが、 Emacs ではテキストの内容を保持・管理するのに「ギャップバッファ」という やり方をしているというのを読んでえらく感心した遠いあの日(笑) ギャップ・バッファ

■_ ぼーえーてきプログラミング

ちょっと古いのを掘り起こし。

C (や C++) で比較式の左辺に定数を置くとかはまあ、あまりやりたかないよなあ という気もしますがそれはさておき。


Favorite (Clever) Defensive Programming Best Practices - Stack Overflow

If you had to choose your Favorite (clever) techniques for defensive coding, what 
would they be? Although my current languages are Java and Objective-C (with a 
background in C++), feel free to answer in any language. Emphasis here would be on 
clever defensive techniques other than those that 70%+ of us here already know about. 
So now it is time to dig deep into your bag of tricks.

In other words try to think of other than this uninteresting example:

    * if(5 == x) instead of if(x == 5): to avoid unintended assignment

Here are some examples of some intriguing best defensive programming practices 
(language-specific examples are in Java):

- Lock down your variables until you know that you need to change them

That is, you can declare all variables final until you know that you will need to 
change it, at which point you can remove the final. One commonly unknown fact is that 
this is also valid for method params:

public void foo(final int arg) { /* Stuff Here */ }

- When something bad happens, leave a trail of evidence behind

There are a number of things you can do when you have an exception: obviously logging 
it and performing some cleanup would be a few. But you can also leave a trail of 
evidence (e.g. setting variables to sentinel values like "UNABLE TO LOAD 
FILE" or 99999 would be useful in the debugger, in case you happen to blow past 
an exception catch-block).

- When it comes to consistency: the devil is in the details

Be as consistent with the other libraries that you are using. For example, in Java, if 
you are creating a method that extracts a range of values make the lower bound 
inclusive and the upper bound exclusive. This will make it consistent with methods 
like String.substring(start, end) which operates in the same way. You'll find all of 
these type of methods in the Sun JDK to behave this way as it makes various operations 
including iteration of elements consistent with arrays, where the indices are from 
Zero (inclusive) to the length of the array (exclusive).

So what are some favorite defensive practices of yours?

Update: If you haven't already, feel free to chime in. I am giving a chance for more 
responses to come in before I choose the official answer.


Defensive programming is attempting to deal with illegal conditions introduced 
by other parts of a program. Handling improper user input is completely different 
thing.

SQL

When I have to delete data, I write

select *    
--delete    
From mytable    
Where ...

When I run it, I will know if I forgot or botched the where clause. I have a safety. 
If everything is fine, I highlight everything after the '--' comment tokens, and run 
it.

Edit: if I'm deleting a lot of data, I will use count(*) instead of just *

When you're handling the various states of an enum (C#):

enum AccountType
{
    Savings,
    Checking,
    MoneyMarket
}

Then, inside some routine...

switch (accountType)
{
    case AccountType.Checking:
        // do something

    case AccountType.Savings:
        // do something else

    case AccountType.MoneyMarket:
        // do some other thing

    default:
-->     Debug.Fail("Invalid account type.");
}

At some point I'll add another account type to this enum. And when I do, I'll forget 
to fix this switch statement. So the Debug.Fail crashes horribly (in Debug mode) to 
draw my attention to this fact. When I add the case AccountType.MyNewAccountType:, the 
horrible crash stops...until I add yet another account type and forget to update the 
cases here.

(Yes, polymorphism is probably better here, but this is just an example off the top of my head.)
In every switch statement that doesn't have a default case, I add a case that aborts 
the program with an error message.

#define INVALID_SWITCH_VALUE 0

switch (x) {
case 1:
  // ...
  break;
case 2:
  // ...
  break;
case 3:
  // ...
  break;
default:
  assert(INVALID_SWITCH_VALUE);
}

For all languages:

Reduce the scope of variables to the least possible required. Eschew variables that 
are just provided to carry them into the next statement. Variables that don't exist 
are variables you don't need to understand, and you can't be held responsible for. Use 
Lambdas whenever possible for the same reason.

I agree that there are exceptional cases where I declare variables for clarity 
(and sometimes to create a target for debugging). My experience is that the general 
practice is to err in the opposite direction. ? le dorfier Jan 29 at 15:15

C#:

string myString = null;

if (myString.Equals("someValue")) // NullReferenceException...
{

}

if ("someValue".Equals(myString)) // Just false...
{

}

When in doubt, bomb the application!

Check each and every parameter at the beginning of each and every method and bomb with 
the correct exception and/or meaningful error message if any precondition to the code 
is not met.

We all know about these implicit preconditions when we write the code, but if they are 
not explicitly checked for, we are creating mazes for ourselves when something goes 
wrong later and stacks of dozens of method calls separate the occurance of the symptom 
and the actual location where a precondition is not met (=where the problem/bug 
actually is).
in Perl, everyone does

use warnings;

I like

use warnings FATAL => 'all';

This causes the code to die for any compiler/runtime warning. This is mostly useful in 
catching uninitialized strings.

use warnings FATAL => 'all';
...
my $string = getStringVal(); # something bad happens;  returns 'undef'
print $string . "\n";        # code dies here

SQL Safety

Before writing any SQL that will modify the data, I wrap the whole thing in a rolled 
back transaction:

BEGIN TRANSACTION
-- LOTS OF SCARY SQL HERE LIKE
-- DELETE FROM ORDER INNER JOIN SUBSCRIBER ON ORDER.SUBSCRIBER_ID = SUBSCRIBER.ID
ROLLBACK TRANSACTION

This prevents you from executing a bad delete/update permanently. And, you can execute 
the whole thing and verify reasonable record counts or add SELECT statements between 
your SQL and the ROLLBACK TRANSACTION to make sure everything looks right.

When you're completely sure it does what you expected, change the ROLLBACK to COMMIT 
and run for real.

C++

#define SAFE_DELETE(pPtr)   { delete pPtr; pPtr = NULL; }
#define SAFE_DELETE_ARRAY(pPtr) { delete [] pPtr; pPtr = NULL }

then replace all your 'delete pPtr' and 'delete [] pPtr' calls with 
*SAFE_DELETE(pPtr)* and *SAFE_DELETE_ARRAY(pPtr)*

Now by mistake if you use the pointer 'pPtr' after deleting it, you will get 'access 
violation' error. It is far easier to fix than random memory corruptions.

In Java, especially with collections, make use of the API, so if your method returns 
type List (for example), try the following:

public List<T> getList() {
    return Collections.unmodifiableList(list);
}

Don't allow anything to escape your class that you don't need to!

With VB.NET, have Option Explicit and Option Strict switched on by default for the 
whole of Visual Studio.


In C#, use the as keyword to cast.

string a = (string)obj

will throw an exception if obj is not a string

string a = obj as string

will leave a as null if obj is not a string

You still need to take null into account, but that is typically more straight forward 
then looking for cast exceptions. Sometimes you want "cast or blow up" type 
behavior, in which case (string)obj syntax is preferred.

In my own code, I find I use the as syntax about 75% of the time, and (cast) syntax about 25%.

If you are using Visual C++, utilize the override keyword whenever you over-ride a 
base class's method. This way if anyone ever happens to change the base class 
signature, it will throw a compiler error rather than the wrong method being silently 
called. This would have saved me a few times if it had existed earlier.

Example:

class Foo { virtual void DoSomething(); }

class Bar:public Foo { void DoSomething() override { // do something } }

C#

    * Verify non-null values for reference type parameters in public method.

    * I use sealed a lot for classes to avoid introducing dependencies where I didn't 
      want them. Allowing inheritance should be done explicitly and not by accident.

■_ バージョン番号付けは難しい

という話でもない?

Brian Cardarella's Blog — A cry for standardized versioning in Ruby (pretty please?)

A cry for standardized versioning in Ruby (pretty please?)

Yesterday Rails 2.3.6 was released, today 2.3.7 was released. This morning the team I 
am on attempted to update our Rails 2.3.5 apps (we have several) to 2.3.7. It's been 
several hours and we're still not updated yet.

When I see a version update of 2.3.5 to 2.3.6 as a developer I should be able to 
assume that the update is fairly marginal. In fact, in almost every case it should be 
a drop-in replacement. Historically hasn't been the case with Rails.

From a versioning point of view the significance in changes between 2.3.5 -> 2.3.6 
and 2.3.6 -> 2.3.7 should be roughly equal. But as you can see here and here this 
is not the case. However, what I do know is that 2.3.5 was released on Nov 30, 2009. 
2.3.6 was released on May 23, 2010. 2.3.7 was released on May 24, 2010. Perhaps time 
is the best metric? In that case would it make sense to adopt something similar to the 
Ubuntu versioning scheme? (Year.Month.Day.patch)

Rails aside, poor version management is systemic in the Ruby community. Despite 
pushing for code perfection in every other sense the Ruby community as a whole has 
entirely ignored proper versioning. If we are to be taken seriously by the development 
community at large our versioned releases must have meaning behind them.

Semantic Versioning seems to be the most logical approach to me. It would be nice to 
see a community movement towards this, or some versioning standard. Rails 3.0 would be 
a great starting point to push for a versioning standard in the Ruby community.

poor version management is systemic in the Ruby community. て。

■_ 64


Cygwin + MinGW + GCC 相談室 Part 5 
238 デフォルトの名無しさん [sage] 2010/05/23(日) 00:54:00 ID: Be:
    mingw-w64ってvc用のlibと互換性なくなってる?
    ATI Stream V2.1のOpenCL.libをリンクするとき、mingw 32bitだと-lOpenCLで普通にリンクできるのに、
    mingw-w64だとシンボル名を見つけてくれない。
    当然、-Lで32bit用、64bit用のライブラリパスを切り替えているので64bitでコンパイル時に32bitのlibを突っ込んでるみたいなミスはしていないし。

239 238 [sage] 2010/05/23(日) 02:29:01 ID: Be:
    アセンブルコードを見てみた
    printfがmingw-w64では_printf, visual C++ (x86_64)だとprintfという名前で呼ばれている。
    つーわけでvisual Cのオブジェクトとmingw-w64のオブジェクトは互換性ないじゃん。
    ちなみに、visual C++ (x86), mingw32だと両方共_printfで互換性あり。
    うーん、これじゃ使えないぞ、mingw-w64。 

240 デフォルトの名無しさん [sage] 2010/05/23(日) 23:23:33 ID: Be:
    mingw-w64は不具合てんこ盛りで
    vcとリンクさせるためにリビルドが必要な面倒臭いコンパイラですから

へー。cygwin の方は名前の変形どうしてんだろう?

■_

Open Watcom対応ちゅー

make  all \
	"CC=cl -nologo" O=.obj "CF=-o2 -DWIN32" \
	OBJ=popen.obj \
	LNK=LvcWin32
make[1]: Entering directory `/cygdrive/x/xxxx/xxxx/xxxx/gawk-3.1.8'
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  array.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  builtin.c
builtin.c(1909): Warning! W124: Comparison result always 0
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  eval.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  field.c
field.c(263): Warning! W124: Comparison result always 1
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  floatcomp.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  gawkmisc.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  io.c
io.c(1010): Warning! W1178: Type qualifier mismatch
io.c(1010): Note! N2003: source conversion type is 'char const *'
io.c(1010): Note! N2004: target conversion type is 'char *'
io.c(1358): Warning! W131: No prototype found for function 'wrap_socket'
io.c(1389): Warning! W131: No prototype found for function 'geteuid'
io.c(1400): Warning! W131: No prototype found for function 'wrap_listen'
io.c(1401): Warning! W131: No prototype found for function 'wrap_accept'
io.c(1716): Warning! W131: No prototype found for function 'getpgrp'
io.c(1720): Warning! W131: No prototype found for function 'getppid'
io.c(1747): Warning! W131: No prototype found for function 'getuid'
io.c(1747): Warning! W131: No prototype found for function 'getgid'
io.c(1747): Warning! W131: No prototype found for function 'getegid'
io.c(2242): Warning! W131: No prototype found for function 'xmalloc'
io.c(2243): Warning! W1178: Type qualifier mismatch
io.c(2243): Note! N2003: source conversion type is 'char **'
io.c(2243): Note! N2004: target conversion type is 'char const **'
io.c(2431): Warning! W118: Label 'use_pipes' has been defined but not referenced
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  main.c
main.c(620): Warning! W131: No prototype found for function 'parse_config'
main.c(1119): Warning! W131: No prototype found for function 'getpgrp'
main.c(1132): Warning! W131: No prototype found for function 'getpid'
main.c(1136): Warning! W131: No prototype found for function 'getppid'
main.c(1140): Warning! W131: No prototype found for function 'getuid'
main.c(1144): Warning! W131: No prototype found for function 'geteuid'
main.c(1148): Warning! W131: No prototype found for function 'getgid'
main.c(1152): Warning! W131: No prototype found for function 'getegid'
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  ext.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  msg.c
msg.c(66): Warning! W131: No prototype found for function 'myvfprintf'
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  node.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  profile.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  re.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  replace.c
missing_d/getaddrinfo.c(145): Warning! W1179: Parameter 1, type qualifier mismatch
missing_d/getaddrinfo.c(145): Note! N2003: source conversion type is 'char const *'
missing_d/getaddrinfo.c(145): Note! N2004: target conversion type is 'char *'
missing_d/usleep.c(16): Warning! W131: No prototype found for function 'sleep'
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  version.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  awkgram.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  getid.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  popen.c
popen.c(177): Warning! W131: No prototype found for function 'tempnam'
popen.c(177): Warning! W102: Type mismatch (warning)
popen.c(177): Note! N2003: source conversion type is 'int '
popen.c(177): Note! N2004: target conversion type is 'char *'
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  mbc.c
mbc.c(279): Warning! W124: Comparison result always 0
mbc.c(279): Warning! W124: Comparison result always 1
mbc.c(288): Warning! W124: Comparison result always 0
mbc.c(288): Warning! W124: Comparison result always 1
mbc.c(306): Warning! W124: Comparison result always 0
mbc.c(306): Warning! W124: Comparison result always 1
mbc.c(315): Warning! W124: Comparison result always 0
mbc.c(315): Warning! W124: Comparison result always 1
mbc.c(324): Warning! W124: Comparison result always 1
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  myprintf.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  getopt.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  getopt1.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  dfa.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  regex.c
regex_internal.c(248): Warning! W131: No prototype found for function 'my_mbrtowc'
regex_internal.c(282): Warning! W1179: Parameter 1, type qualifier mismatch
regex_internal.c(282): Note! N2003: source conversion type is 'int const *'
regex_internal.c(282): Note! N2004: target conversion type is 'void *'
regcomp.c(3569): Warning! W131: No prototype found for function 'my_wctype'
regexec.c(3866): Warning! W131: No prototype found for function 'my_iswctype'
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  random.c
echo array.obj builtin.obj eval.obj field.obj floatcomp.obj gawkmisc.obj io.obj main.obj > gawk.rsp
echo ext.obj msg.obj node.obj profile.obj re.obj replace.obj version.obj  >> gawk.rsp
echo awkgram.obj getid.obj popen.obj getopt.obj getopt1.obj dfa.obj regex.obj random.obj >> gawk.rsp
echo mbc.obj msg.obj myprintf.obj >> gawk.rsp
echo libcp.lib ws2_32.lib >> gawk.rsp
link -nologo -subsystem:console -debug -stack:0x300000 -map -out:gawk.exe @gawk.rsp ws2_32.lib libcp.lib
Warning! W1027: ファイル replace.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\replace.c): wrap_accept_ の再定義を無視しました
Warning! W1027: ファイル msg.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\msg.c): _sourceline の再定義を無視しました
Warning! W1027: ファイル msg.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\msg.c): _source の再定義を無視しました
Warning! W1027: ファイル msg.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\msg.c): err_ の再定義を無視しました
Warning! W1027: ファイル msg.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\msg.c): msg_ の再定義を無視しました
Warning! W1027: ファイル msg.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\msg.c): warning_ の再定義を無視しました
Warning! W1027: ファイル msg.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\msg.c): error_ の再定義を無視しました
Warning! W1027: ファイル msg.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\msg.c): set_loc_ の再定義を無視しました
Warning! W1027: ファイル msg.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\msg.c): r_fatal_ の再定義を無視しました
Warning! W1008: libcp.lib をオープン出来ません : No such file or directory
Error! E2028: geteuid_ は未定義参照です
Error! E2028: getppid_ は未定義参照です
Error! E2028: getegid_ は未定義参照です
Error! E2028: getgid_ は未定義参照です
Error! E2028: getuid_ は未定義参照です
Error! E2028: ___pioinfo は未定義参照です
Error! E2028: tempnam_ は未定義参照です
ファイル io.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\io.c): 未定義シンボル geteuid_
ファイル io.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\io.c): 未定義シンボル getppid_
ファイル io.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\io.c): 未定義シンボル getegid_
ファイル io.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\io.c): 未定義シンボル getgid_
ファイル io.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\io.c): 未定義シンボル getuid_
ファイル io.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\io.c): 未定義シンボル ___pioinfo
ファイル main.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\main.c): 未定義シンボル getppid_
ファイル main.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\main.c): 未定義シンボル getuid_
ファイル main.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\main.c): 未定義シンボル geteuid_
ファイル main.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\main.c): 未定義シンボル getgid_
ファイル main.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\main.c): 未定義シンボル getegid_
ファイル replace.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\replace.c): 未定義シンボル ___pioinfo
ファイル popen.obj(X:\xxxx\xxxx\xxxx\gawk-3.1.8\popen.c): 未定義シンボル tempnam_
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  eval_p.c
cl -nologo -c -o2 -DWIN32 -DGAWK -I. -DHAVE_CONFIG_H  profile_p.c
echo array.obj builtin.obj eval_p.obj field.obj floatcomp.obj gawkmisc.obj io.obj main.obj > pgawk.rsp
echo ext.obj msg.obj node.obj profile_p.obj re.obj replace.obj version.obj  >> pgawk.rsp
echo awkgram.obj getid.obj popen.obj getopt.obj getopt1.obj dfa.obj regex.obj random.obj >> pgawk.rsp
echo mbc.obj msg.obj myprintf.obj >> pgawk.rsp
echo libcp.lib ws2_32.lib >> pgawk.rsp
make[1]: Leaving directory `/cygdrive/x/xxxx/xxxx/xxxx/gawk-3.1.8'

まー get*id はすぐにでも解決できるけど、__pioinfo はどーすっかねえ。 あと、警告メッセージも地味だけど気になる(笑)

■_ 本日の巡回kら

2010年05月24日

■_

キャンセル分がとれたっぽい。

日経ソフトウエア誌での Y氏の連載記事が(ぴー)な件について。

■_ Perl Roles Versus Duck Typing

Role とか Trait とかよくわかんねっす。


Perl Roles Versus Duck Typing - Modern Perl Books

Modern Perl Books

The best way to write Perl programs in 1991 or 2001 or 2004 isn't necessarily the best 
way to write Perl programs in 2009. It's time to discuss and document and disseminate 
all of the wisdom of the greater Perl community. It's time to talk about modern Perl.


Perl Roles Versus Duck Typing
(Perl の Roles とダックタイピング)

By chromatic on May 4, 2009 11:59 AM


The Why of Perl Roles explains some of the motivations behind the inclusion of roles 
in Perl 6 and their implementation in Perl 5 through Moose. Perl Roles Versus 
Inheritance compares the design and intent of using roles to "traditional" 
subclassing inheritance.

Perl の Roles のモチベーションの一部はPerl 6 における roles の behind the inclusion と 
Moose を使っての Perl 5における実装で説明されます。
Perl Roles Versus Inheritance compares the design
and intent of using roles to
"traditional" subclassing inheritance.
“伝統的な”サブクラスを使った継承


Duck Typing (ダックタイピング)

A common object design strategy in dynamic languages is Duck Typing. The cliche is 
that if an object walks() like a Duck and quacks() like a Duck, it must be a Duck 
enough that the rest of the program can treat it like a Duck. In other words, the 
presence of a method with a name that you recognize from some context is proof enough 
that the object responds to that method in a way that makes sense in the context you 
had in mind.

動的言語における一般的なオブジェクト設計戦略はダックタイピング (Duck Typing) です。ダ
ックタイピングの cliche (決まり文句、常套手段)は、あるオブジェクトが Duck のように 
walk() して、なおかつ Duck のように quacks() するのであれば、そのオブジェクトはプログ
ラムのその他の部分で Duck であるかのように扱う程度には十分に Duck であるというものです。
言い換えれば、あなたが何らかのコンテキストで認識するある名前を持ったメソッドが存在して
いるということが、あなたが考えていたコンテキストにおいてそのオブジェクトが該当するメソ
ッドに対して意味をなす方法で反応するのにproof enough なのです。
#いみふめーだよ○| ̄|_


That often works.

大抵の場合、これはうまくいきます。


False Cognates (False Cognates)

# congnate 同族の、同系の、祖先が共通の
# 継承関係がないのにあるように判定してしまうとかいうことだろうか

Sometimes it doesn't work. Suppose (and yes, this is already a cliche in Perl circles) 
that your program models a park. You have a Dog class. You have a Tree class. Given an 
object for which you don't immediately know its type -- assume you're using a dynamic 
language or that your genericity system performs type erasure and you're effectively 
using a dynamic language -- do you know which bark() method is appropriate in any 
given situation?

ダックタイピングがうまくいかない場合もあります。あなたのプログラムが公園 (park) をモデ
ルにしていると仮定しましょう (and yes, this is already a cliche in Perl circles)。
Dog クラスとTree クラスを保持していて、その型を即座に判断できないようなあるオブジェク
トが与えられたとします。それに加えて、あなたは動的言語を使うかあなたの持つ genericity
system が型保証を erasure (抹消、消去)し、動的言語を効果的に使うと仮定します。そうした
ときに、与えられたシチュエーションにおいてどの bark() メソッドが適切なものであるのかを
いつでも判別できるでしょうか?


This is the false cognate problem; the name of a method is not always sufficient to 
determine its intended meaning.

これが false cognate 問題です。メソッドの名前はその意味するところを判断するのに常に十
分であるわけではないのです


Duck Typing and Type Checking (ダックタイピングと型検査)

Defense-minded duck typers soon realize that blindly calling methods on objects of 
unknown type is a recipe for disaster. (To be fair, a well-organized program runs into 
this problem rarely. Even in the absence of strict typing -- or manifest types -- it's 
rare not to know the types of objects you expect within specific scopes in the program. 
Then again, I don't add error checking to my programs because I expect exceptional 
conditions to occur frequently.)

Defense-mind されたダックタイパー (duck typers) たちは、未知の型のオブジェクトが持つメ
ソッドを闇雲に (blindly) に呼び出すことが完全な失敗へのレシピ (recipe for disaster) 
であることを即座に認識します (公平のため書いておくと、well-organize されたプログラムが
この問題に直面することは稀です。strict typing (あるいは manifest types) が存在していな
かったとしても、プログラムの特定のスコープにおいてオブジェクトの型を把握するのを期待で
きないことはほとんどありません。そして繰り返しますが、exceptional conditions が頻繁に
起きるだろうと予測したのでわたしはエラーチェックを自分のプログラムに追加しませんでした)。


One approach is to use object introspection to see if the object in question really 
does support the required method. In Perl, this is:

一つのアプローチは。質問にあるオブジェクトが本当に要求されているメソッドをサポートして
いるかどうかを確認するためにオブジェクトの introspection を使うというものです。


Perl ではこうです:

croak 'Duck typing failure' unless $dog_or_tree->can( 'bark' );

あるいは Ruby であればこういった感じです:

raise 'Duck typing failure' unless dog_or_tree.respond_to?( 'bark' )



If you want to get stricter, and if your language supports this, you can even check 
the arity or types of the allowed signatures of the method -- but look at all of the 
boilerplate code you have to write to make this work. That's also code to check only a 
single method.

あなたがもしもっと strict でありたいと望んでいて、そして言語がサポートしているのであれ
ば、そのメソッドのシグネチャーが許容する引数や型の検査でさえ可能ですが、boilerplate
コードに注目してみると、あなたはこれが動作するように書かなければならないのです。これは
またある一つのメソッドだけを検査するためのコードです。


Suppose you want to call several methods on the object. You could check can() or 
respond_to? for each of them... but at this point, people often check the class 
inheritance of the object, in Perl with:

あなたがあるオブジェクトの幾つかのメソッドを呼び出そうとしているとしましょう。あなたは
(呼び出そうとしている)メソッドのそれぞれに対して can() や respond_to?を使って検査を行
えます。しかしここで、ユーザーはしばしば対象としているオブジェクトのクラス継承を検査し
てしまうのです。Perlであれば

croak 'Duck typing failure' unless $dog_or_tree->isa( 'Dog' );

Or in Ruby, somethin like:

のようにし、Rubyであれば


raise 'Duck typing failure' unless dog_or_tree.is_a?( 'Dog' );

のようにします。

Of course, this precludes other ways in which your object can perform the correct 
bark() methods: reimplementing it, mixing it in from elsewhere, delegating to it, or 
composing it -- unless you explicitly lie to the rest of the system about the identity 
of your object by overriding isa() in Perl or is_a? in Ruby.

もちろんこれは、あなたのオブジェクトが正しい bark() メソッドを perform できるような他
のやり方、再実装したりだとか、どこか他のところのものとミキシングをする、デリゲートした
り集成する。といったものをあなたが Perl の isa() だとか Ruby の is_a? をオーバーライド
してシステムにおけるオブジェクトの identity についてシステムの残りの部分に対して 
explicitly に嘘をつかない限り妨害することになってしまいます。



Liars tend to get caught, and the results can be messy.

嘘つきは概ね捕まってしまうものですし、そしてその結果は messy なものである可能性
があります。



Roles, False Cognates, and Identity
(Roles, False Cognates, and Identity)

In the context of a Dog, it's obvious what bark() means. In the context of a Tree, 
it's obvious what bark() means. Without that context, you just don't know.

Dog のコンテキストでの bark() が意味することは明確です。Tree のコンテキストでの bark() 
の意味することは明確です。そういったコンテキストがなければ、あなたはそのメソッドの意味
するところがわからなくなってしまうでしょう。


Roles add that context back. If you want to deal with a Dog, check that the provided 
object performs the Dog role. Similarly for Tree. Instead of asking "Do you 
provide a method with this name?", ask "Do you perform this role?" The 
latter question avoids false cognates and ensures that the class representing the 
provided object fulfills the contract required by that role at compilation time.

Roles はコンテキストを add back します。もし Dog を扱いたいのなら、与えられたオブジェ
クトが Dog の role を performs するか確認します。これは Tree に対しても同様です。
"Do you provide a method with this name?" (あなたはこの名前を持ったメソッド
を提供していますか?) と尋ねる代わりに、"Do you perform this role?"
(あなたはこの role を perform しますか?) と尋ねます。後者の質問は false cognates を
排除すると同時に、クラスが representing している provided object がコンパイル時にそ
の role が要求している契約 (contract) を満足 (fulfills) していることを保証 (ensure)
します。

As well, you don't have to check the inheritance structure of a given object. It 
doesn't matter. The most important lesson of duck typing is that any object which 
provides an interface you both understand appropriately should be substitutable for 
any other object which provides that well-understood interface. How that object 
fulfills that interface is its own business.

As well,
与えられたオブジェクトの継承構造 (inheritance structure) を検査する必要はありませんが、
それは重要なことではありません。ダックタイピングで最も重要な lesson は、インターフェー
スをあなたに提供しているオブジェクトのすべてとともにwell-understood なインターフェース
を提供している any other オブジェクトに置き換えるべきものを適切に理解するということで
す。そのようなオブジェクトがどのようにそのインターフェースを満足させるかは、オブジェク
トに委ねられます。


Roles provide a way for developers to name a collection of behavior and then refer to 
objects -- generically -- in terms of whether they provide that collection of behavior. 
The ad hoc, free-form nature of duck typing is great for providing future 
extensibility; it doesn't lock your code into a rigid hierarchy that can prove brittle 
during future maintenance.

roles は開発者に対して、振る舞いのコレクションに名前をつける方法と後からそのオブジェク
トを参照するための方法を、一般的にはそのオブジェクトが振る舞いのコレクションを提供して
いるかどうかという意味合いで提供しています。The ad hoc,
ダックタイピングの free-form nature は将来の拡張性 (future extensibility) の提供に 
great で、あなたのコードを future maintenance の間の brittle (壊れやすいところ、脆いと
ころ)を prove 可能な rigid (厳格な、固定された) な階層に縛り付けることはありません


However, duck typing sometimes fails to provide enough information about necessary 
meaning and context, and the workarounds to make a duck typed program more robust can 
subvert the goals of duck typing.

それでも、ダックタイピングはときとして必要な meaning とコンテキストに関する充分な情報
を提供するのに失敗することがあります。そしてダックタイピングが使われたプログラムをより
頑健 (robust) にするためのワークアラウンドがダックタイピングの目標 (goals) をsubvert
(転覆、破滅、腐敗) させてしまうかもしれません。


Next time, I'll compare roles to (Java) interfaces.

次回は roles と (Javaの) インターフェースとを比較してみることにしましょう。

This blog is licensed under a Creative Commons License.

■_ もしもひとつだけ選ぶとしたら

誰かとっとと訳すと思ったんだけどな~。 いたって中途半端な状態ですが、がんがん出しちゃう(笑)


If you have to learn just one programming language | Babu Srinivasan's blog

If you have to learn just one programming language
もしあなたがただ一つだけプログラミング言語を学ばなければならないとしたら

It is a very good idea to learn several programming languages. It makes you a better 
programmer. But if you want to devote all your energies to becoming a proficient and 
productive programmer and want to learn one powerful, freely available, high level 
general-purpose language (not domain specific), what would you choose?

いくつかのプログラミング言語を学ぶことは非常に良い考えである。複数の言語を学ぶことはあ
なたをより良いプログラマーにする。しかし、あなたが自分の持つエネルギーすべてを熟達した 
(proficient)  productive なプログラマーになることに注ぎ込むことを望んでいて、また、強
力で自由に入手できる高水準の汎用目的の(ドメインに特化していない)言語を一つ学びたいとし
たなら、あなたが選ぶのはどの言語だろうか?


The target audience for this exercise is someone with a couple of years of programming 
experience.

この exercise の target audience はプログラミングの経験が二年ほどの someone である。


Here are my criteria for selecting (a non domain specific) language to learn.

学ぶべき(ドメインに特化していない)言語を選択するための基準を以下に挙げる。

1. Programmer productivity: It should provide high level of abstraction so that
   programmer productivity is high. A fast running application written in C that takes 6 
   months is - in most cases - not as useful as one that can be completed in 1 month: 
   programmer cost as well as time-to-market considerations.

   プログラマーの生産性:  (学ぶべき言語は) 高度な抽象化レベルを提供しプログラマーの
   productivity を高いものにすべきである。六ヶ月を要する C で書かれた高速動作するア
   プリケーションはほとんどのケースにおいて、一ヶ月で完成できるアプリケーションほど
   には有用でない: プログラマーのコストはtime-to-marketと同程度に考慮されるべきもの
   である。


2. Speed: It should be fast (should approach C in speed). It should preferably have a 
   highly optimized compiler that can generate architecture specific binaries - no JIT 
   can be faster than an optimized binary. Second preference is a compiler that generates 
   byte codes which can be processed by a fast JIT-capable virtual machine. The only 
   virtual machine that fits the bill is JVM.

   スピード: そのスピードは高速であるべきだ(スピードの点で C に匹敵するほどに)。最適化
   されたバイナリよりも高速にできる JIT は存在しないので、あるアーキテクチャに特化した
   バイナリを生成できる高度な最適化コンパイラーがあることが望ましい。優先順位の二番目
   は、高速で JIT-capable なバーチャルマシンによる処理が可能なバイトコードを生成するコ
   ンパイラーであること。fits the bill な唯一のバーチャルマシンはJVMである。

3. Succinct: The language should not be verbose. This is very important. Brevity is 
   one reason why Python and Ruby are popular.

   簡潔: その言語は冗長であるべきではない。これは非常に重要である。Brevity (簡潔さ
   短さ) は Python や Rubyがポピュラーである理由の一つである。


4. Support for Scripting:You shouldn't have to learn one language for writing scripts 
   and another for applications. This allows for rapid development in script-mode which 
   can then can be compiled into an application, if required. This along with criteria #1 
   and #3 implies that you should be able to write a 10 line script that does something 
   meaningful.

   スクリプティングのサポート:
   You shouldn't have to learn one language for writing scripts and another for applications.
   これは要求があれば後からコンパイルしてアプリケーションにできるスクリプトモードでの
   rapid develomentを可能とする。これとcriteria #1 および #3 が、何か意味のあることを
   行う 10行のスクリプトを書けるようになるべきだと仮定している。
#ぐだぐだ~


5. It should take advantage of multi-core processors without requiring additional 
   effort from the programmer. This is important. Even entry level desktops and laptops 
   have 2 cpu cores in a chip and the number of cores is only going to increase.

   プログラマーに特別の努力を要求することなくマルチコアプロセッサーのアドバンテージを得
   られること。これは重要なことだ。エントリーレベルのデスクトップ PC やラップトップ PC
   でさえ二つの CPU コアを有するチップを使っているし、そのコアの数は増加の一途だろう。


6. It should have multi-threading and/or message passing support.

   マルチスレッディングやメッセージパッシングのサポート


7. It should be a mature and time-tested language with active development, user base 
   and lots of applications.

8. It shouldn't be difficult to learn for people with couple of years of programming 
   experience. There should be good documentation, books, tutorials, active and helpful 
   community (irc), developer tools and IDE.

   二年程度のプログラミングの経験しかないような人たちに対してであっても学ぶのが難しい
   ものであるべきではない。良いドキュメント、書籍、チュートリアル、活動的で親切なコ
    ミュニティ(や IRC)、開発者用のツールやIDE があるべきである。

9. Platform agnostic: It should not favor or give advantage to one platform. dot net 
   comes to mind as it provides significant advantage to windows platform.

   プラットフォーム agnostic: ひとつのプラットフォームに対して肩入れしたりアドバン
   テージを与えるべきではない。.NET は Windows プラットフォームに対して特別
   顕著なアドバンテージを与えているように思われる。


10. Code readability and maintainability: It should be relatively easy for authors and 
    others to maintain existing code.

    コードの読みやすさと保守しやすさ: 書き手にとっては相対的に簡単なものであり、
    そのほかの人間にとっては既存のコードのメンテナンスが容易となるようなもので
    あるべきである。


11. Opensource is a fine model, but if the author doesn't want to release his/her 
    creation under open-source he/she should be able to do so. After all, bills are not 
    free. This means that reverse-engineering of code shouldn't be possible. You get this 
    as a by product of #2: it is practically impossible to reverse engineer from a binary; 
    with Virtual machine bytecode, it can be made difficult by obfuscation.

    オープンソースは fine なモデルだが、制作者 (author) がリリースすることを望まない
    のであれば、その意志に従えるようにすべきである。これはコードのリバースエンジニア
    リングが可能であるべきではないということである。あなたはこれを #2 の product によ
    るものとして得られる。バイナリーからのリバースエンジニアリングを現実的に不可能な
    ものとし、バーチャルマシンのバイトコードに対しては難読化 (obfuscation) によって
    リバースエンジニアリングを難しくする。

12. Has a test framework that can generate and run tests.
    テストの生成と実行ができるテストフレームワークがある。

13. Easily call C libraries (Foreign Function interface), for performance and code reuse.
    性能とコードの再利用のために C のライブラリが簡単に呼び出せる (Foreign Function interface)


    All criteria except #10 are objective and measurable. #10 is to some extent subjective
    and therefore my bias will be reflected in the choice of language. Some people hate
    Python as it uses indentation to define code blocks. This makes the code compact but
    cut and paste of code is error-prone. Others love it. Some don't like languages like
    Perl and Ruby where sigils ($,@,@@) are used liberally. People get personal when you
    belittle or disparage a computer language - and rightly so. If you have invested 10
    years in Perl or Lisp, you have a vested interest in defending it and you cannot be
    objective.

    #10 を除くすべての criteria が objective かつ measurable である。#10 は多分に主観的な
    ものなので、わたしの bias が言語の選択に反映されているだろう。一部の人々は、インデント
    をコードブロックを定義するのに使っているという理由で Python を嫌っている。コードブロッ
    クの定義にインデントを使うことにより、コードがコンパクトになる一方でコードのカットアン
    ドペーストでエラーを引き起こしやすく (error-prone) なる。それ (Python のブロック規則)
    が好きだという人たちもいる。Perl や Ruby のような sigils ($や@、@@など)が自由に使われ
    ている言語を好まない人たちがいる。あなたがコンピューター言語を過小評価したり、馬鹿にす
    ると人はむきになる (people get personal)。- and rightly so.
    もしあなたが Perl や Lisp で10年 invested (熱中した、深くかかわっていた) していたのな
    ら、あなたは interest in defending it を確立しているので  you cannot be objective.


Let's begin with Common Lisp, Scheme, Fortran, Smalltalk, C, C++, Objective C, Ada, 
Java, Javascript, C#, D, Prolog, Perl, PHP, Python, Ruby, Groovy, Clojure, Lua, Forth, 
Factor, Erlang, OCaml, F#, Clean, Haskell, Scala and start the elimination process.

では、Common Lisp, Scheme, Fortran, Smalltalk, C, C++, Objective C, Ada, 
Java, Javascript, C#, D, Prolog, Perl, PHP, Python, Ruby, Groovy, Clojure, Lua, Forth, 
Factor, Erlang, OCaml, F#, Clean, Haskell, Scala
という候補からの elimination process を始めるとしよう。

(以下略)

回答編(?) はいずれ機会とやる気があれば。

■_ 本日の巡回から

2010年05月23日

■_

・担々麺
ラーメンは好きだし、辛いものも好きなんですが、 なぜか坦々麺はあまり好きでないという。

http://data.tumblr.com/tumblr_l1wf554TB21qz5ft4o1_250.jpg

ジャキリOP
もうすぐの発売だったみたいです。 Amazon.co.jp: My story ~まだ見ぬ明日へ~: THE CHERRY COKES, KATSUO: 音楽 発売予定日は2010年6月2日です。
とはいえサンレッドのときもそうだったんだけど、 アニメイトとかでこういうのがどれくらい入るのかわかんねーんだよなあ。 予約票もあったかしらん。 'Round Midnight: THE CHERRY COKE$ × GIANT KILLING

稲葉ジャンプとは - はてなキーワード

■_ STL

STLのどこがすごいの? という問いかけ。


What is so great about STL? - Stack Overflow

Hello StackOverflow.

I am a Java developer trying to learn C++. I have many times read over the web 
(including StackOverflow) that STL is the best collections library that you can get in 
*any* language. (Sorry, I do not have any citations atm)

However after studying some STL, I am really failing to see what makes STL so special. 
Would you please shed some light on what sets STL apart from the collection libraries 
of other languages and make it the _best_ collection library?

Thanks in advance,


What is so great about the STL ?

The STL is great in that it was conceived very early and yet succeeded in using C++ 
generic programming paradigm quite efficiently.

It separated efficiently the data structures: vector, map, ... and the algorithms to 
operate on them copy, transform, ... taking advantage of templates to do so.

It neatly decoupled concerns and provided generic containers with hooks of 
customization (Comparator and Allocator template parameters).

The result is very elegant (DRY principle) and very efficient thanks to compiler 
optimizations so that hand-generated algorithms for a given container are unlikely to 
do better.

It also means that it is easily extensible: you can create your own container with the 
interface you wish, as long as it exposes STL-compliant iterators you'll be able to 
use the STL algorithms with it!

And thanks to the use of traits, you can even apply the algorithms on C-array through 
plain pointers! Talk about backward compatibility!

However, it could (perhaps) have been better...

What is not so great about the STL ?

It really pisses me off that one always have to use the iterators, I'd really stand 
for being able to write: std::foreach(myVector, [](int x) { return x+1;}); because 
face it, most of the times you want to iterate over the whole of the container...

But what's worse is that because of that:

set<int> mySet = /**/;

set<int>::const_iterator it = std::find(mySet.begin(), mySet.end(), 1005); // [1]
set<int>::const_iterator it = mySet.find(1005); // [2]

[1] and [2] are carried out completely differently, resulting in [1] having O(n) 
complexity while [2] has O(log n) complexity! Here the problem is that the iterators 
abstract too much.

I don't mean that iterators are not worthy, I just mean that providing an interface 
exclusively in terms of iterators was a poor choice.

I much prefer myself the idea of views over containers, for example check out what has 
been done with Boost.MPL. With a view you manipulate your container with a (lazy) 
layer of transformation. It makes for very efficient structures that allows you to 
filter out some elements, transform others etc...

Combining views and concept checking ideas would, I think, produce a much better 
interface for STL algorithms (and solve this find, lower_bound, upper_bound, 
equal_range issue).

It would also avoid common mistakes of using ill-defined ranges of iterators and the 
undefined behavior that result of it...

It's not so much that it's "great" or "the best collections library 
that you can get in *any* language", but it does have a different philosophy to 
many other languages.

In particular, the standard C++ library uses a generic programming paradigm, rather 
than an object-oriented paradigm that is common in languages like Java and C#. That is, 
you have a "generic" definition of what an iterator should be, and then you 
can implement the function for_each or sort or max_element that takes any class that 
implements the iterator pattern, without actually having to inherit from some base 
"Iterator" interface or whatever.


Actually the "static duck typing" approach is applied to containers by the 
C# compiler also. foreach can enumerate over any object that has a GetEnumerator 
method, and collection initializers work on any IEnumerable object that also has an 
Add method - so it just finds method names and signatures, regardless of the type they 
are defined in, just like C++ templates.


What I love about the STL is how robust it is. It is easy to extend it. Some complain 
that it's small, missing many common algorithms or iterators. But this is precisely 
when you see how easy it is to add in the missing components you need. Not only that, 
but small is beautiful: you have about 60 algorithms, a handful of containers and a 
handful of iterators; but the functionality is in the order of the product of these. 
The interfaces of the containers remain small and simple.

Because it's fashion to write small, simple, modular algorithms it gets easier to spot 
bugs and holes in your components. Yet, at the same time, as simple as the algorithms 
and iterators are, they're extraordinarily robust: your algorithms will work with many 
existing and yet-to-be-written iterators and your iterators work with many existing 
and yet-to-be-written algorithms.

I also love how simple the STL is. You have containers, you have iterators and you 
have algorithms. That's it (I'm lying here, but this is what it takes to get 
comfortable with the library). You can mix different algorithms with different 
iterators with different containers. True, some of these have constraints that forbid 
them from working with others, but in general there's a lot to play with.

Niklaus Wirth said that a program is algorithms plus data-structures. That's exactly 
what the STL is about. If Ruby and Python are string superheros, then C++ and the STL 
are an algorithms-and-containers superhero.
The STL works beautifully with built-in types. A std::array<int, 5> is exactly 
that -- an array of 5 ints, which consumes 20 bytes on a 32 bit platform.
java.util.Arrays.asList(1, 2, 3, 4, 5), on the other hand, returns a reference to an 
object containing a reference to an array containing references to Integer objects 
containing ints. Yes, that's 3 levels of indirection, and I don't dare predict how 
many bytes that consumes ;)

STL's containers are nice, but they're not much different than you'll find in other 
programming languages. What makes the STL containers useful is that they mesh 
beautifully with algorithms. The flexibility provided by the standard algorithms is 
unmatched in other programming languages.

Without the algorithms, the containers are just that. Containers. Nothing special in 
particular.

Now if you're talking about container libraries for C++ only, it is unlikely you will 
find libraries as well used and tested as those provided by STL if nothing else 
because they are standard.

Obviously C++, C#, and Java can enter as many pissing contests as you want them to. 
The clue as to why the STL is at least somewhat great is that Java was initially 
designed and implemented without type-safe containers. Then Sun decided/realised 
people actually need them in a typed language, and added generics in 1.5.

You can compare the pros and cons of each, but as to which of the three languages has 
the "greatest" implementation of generic containers - that is solely a 
pissing contest. Greatest for what? In whose opinion? Each of them has the best 
libraries that the creators managed to come up with, subject to other constraints 
imposed by the languages. C++'s idea of generics doesn't work in Java, and type 
erasure would be sub-standard in typical C++ usage.

The standard C++ library's approach to collections via iterators has come in for some 
constructive criticism recently. Andrei Alexandrescu, a notable C++ expert, has 
recently begun working on a new version of a language called D, and describes his 
experiences designing collections support for it in this article.

Personally I find it frustrating that this kind of excellent work is being put into 
yet another programming language that overlaps hugely with existing languages, and 
I've told him so! :) I'd like someone of his expertise to turn their hand to producing 
a collections library for the so-called "modern languages" that are already 
in widespread use, Java and C#, that has all the capabilities he thinks are required 
to be world-class: the notion of a forward-iterable range is already ubiquitous, but 
what about reverse iteration exposed in an efficient way? What about mutable 
collections? What about integrating all this smoothly with Linq? etc.

Anyway, the point is: don't believe anyone who tells you that the standard C++ way is 
the holy grail, the best it could possibly be. It's just one way among many, and has 
at least one obvious drawback: the fact that in all the standard algorithms, a 
collection is specified by two separate iterators (begin and end) and hence is clumsy 
to compose operations on.


The primary thing is, you can use templates to make using containers 
switch-in/switch-out, without having to resort to the horrendous mess that is Java's 
interfaces.

"static duck typing" ねえ。ふむ。

■_ ネタ

短めのを。


Lisp Scheme Part30
209 デフォルトの名無しさん [sage] 2010/05/23(日) 03:46:46 ID: Be:
    set-car!とset-cdr!使ってリストから先頭の要素を取り除く手続きdelete-list!を書いたのですが、
    これだと(a)といった要素数1のリストを破壊的操作で空リスト()にすることができません。
    set!を使ったマクロdelete-list!で目的は達成できたのですが、
    ()って一体何なのでしょう。 

210 デフォルトの名無しさん [sage] 2010/05/23(日) 05:37:35 ID: Be:
    最初の者にして最後の者だよ 

211 デフォルトの名無しさん [sage] 2010/05/23(日) 07:43:41 ID: Be:
    クトゥルフでいうヨグ=ソトースだ 

212 デフォルトの名無しさん [sage] 2010/05/23(日) 10:56:44 ID: Be:
    () はリストではあるがペアではない 


この会社辞めようと思ったソースコード#1C 
332 仕様書無しさん [sage] 2010/05/05(水) 02:56:14 ID: Be:
    ( ´∀`)<ぬるぽ 

342 仕様書無しさん [sage] 2010/05/20(木) 07:23:18 ID: Be:
    >>332
    だれもガッしてなかった件
    すごい長い間放置されていたな 

343 仕様書無しさん [] 2010/05/22(土) 22:08:58 ID: Be:
    >>342
    ガッ 

344 342 [sage] 2010/05/22(土) 22:49:15 ID: Be:
    俺かよ! 

銀河英雄伝説 素朴な疑問Vol_59 
490 名無しは無慈悲な夜の女王 [sage] 2010/05/22(土) 18:45:21 ID: Be:
    ミッターマイヤの艦は人狼と書いてベイオウルフとルビ振ってあるがどうなんだ
    ベオウルフはグレンデルとかドラゴンと戦った英雄の名前じゃないのか?
    それともベイオウルフって言う狼男が存在したんだろうか 

493 名無しは無慈悲な夜の女王 [sage] 2010/05/22(土) 20:00:55 ID: Be:
    >>490
    由来は、ベオウルフでいいんだろうけど、人狼は謎だな。綴りはBeiowolfだし。ドイツ語で人狼、狼男は
    ヴァラヴォルフWerwolf―全然似てない。語源的にもbeioなんてなる余地はちょっと……。
    ベオウルフは知っていたけど、詳細は知らなくて、「ウルフだから、狼男だろう」とやっちゃったのかな?
    ファイエルと同じ、なんちゃってトイツ語と思うしかないなw 

494 名無しは無慈悲な夜の女王 [sage] 2010/05/22(土) 20:50:42 ID: Be:
    もうちょっと前向きに解釈して、帝国公用語はあくまで「ドイツ語風に再構成した言語」で
    ドイツ語じゃないからいろいろ違いがある、と(w 

496 名無しは無慈悲な夜の女王 [sage] 2010/05/22(土) 21:47:31 ID: Be:
    >>490
    例えば「携帯」と書いてフリガナを「モバイルフォン」とふる。
    銀英伝の発刊当事には考えられなかった読み方だが今は不思議でも何でもない。
    「人狼」と書いて「ベイオウルフ」とする何かが起こっていても不思議ではない 

497 名無しは無慈悲な夜の女王 [sage] 2010/05/22(土) 21:55:03 ID: Be:
    モバイルスイートか(笑)。 

銀英伝の艦艇の名前はアニメになってつけられたのが大半だと思うけど、 ベオウルフはどうだったっけか? 双璧のだから原作からあったような気もするなあ。

■_ Which programming paradigm or language open most your mind?

ちょっと古いエントリ(スレッド)なんですが、 せっかくなので紹介をば。

Which programming paradigm or language open most your mind? - Stack Overflow

最もあなたに影響を与えたプログラミングパラダイムやプログラミング言語はなんですか?

It is often said that some programming languages exist that once grasped can open your 
mind and change the way you write software. A sort of "software design enlightenment",
we can say.

I heard this about Lisp, Smalltalk, Haskell, pure functional programming in general..

What are your experiences about this?

I know that the right language to use depends on your needs, but I would like to know 
the one that better improve your programming skills in general.

What do you think would be the best language/paradigm to learn to end up being a 
better programmer in the long run?


It's impossible to objectively answer this question; questions of this type are too 
open ended and usually lead to confrontation and argument.


You should be well-versed in the four major programming paradigms: imperative, 
object-oriented, functional and logic.

Since so few programmers learn anything at all about logic programming, this is 
probably the one that will most open up the mind. In fact, logic programming and the 
relational model (in particular the relational calculus) are very closely related, so 
a good understanding of the relational model is a reasonable surrogate. Note that this 
is not the same as understanding SQL, which is a rather ill-conceived poor 
second-cousin to the relation algebra and relational calculus.

Logic programming. PROLOG, in particular. It blew my mind.

In particular:

    * List item
    * Code is data, data is code.
    * Pattern matching.
    * Functions that can do many things: length/1 can give you the length of an list...
      or generate a list of the appropriate length; append/3 can, given two lists, give
      you the result of appending those two lists, or given one list and the result tell
      you what the other list is, or just given the final list, tell you every pair of
      lists that appended will give you your list.


Personally I think you need to learn a language where you have to manually manage the 
memory and understand pointers.

It is the best way to fully understand how memory management works in your programs. 
This then leads to better programming on languages that have in built memory 
management.


I have been programming for more than 2 decades, the last 5 year is mostly in Python. 
It is not an "exotic" language like LISP. However the interactive programming
experience is game changing for me. Now I'm able to manipulate data structure by hand
and to do experiments before incorporating the few well crafted code lines into a
program. The main stream edit-compile-execute cycle is so tedious in comparison.


Write the tests first


I personally most liked the "code is data" paradigm. Felt it when coding in 
x86 assembly, and also more recently when using languages such as Lisp/Clojure.

The particular thing that always appealed to me was using macros to output code as 
data then immediately start treating it as code again (i.e. homoiconicity).


In my opinion pure functional programming is horrible if you are used to imperative 
languages.

However, certain functional aspects like closures/lambda functions are really nice 
when used in a imperative language.


Prolog は何回やっても良くわからない…

■_ 本日の巡回から

■_

今週は破のBDがあるな ○| ̄|_ かみちゅ! のBD-BOXはとらだと店舗特典(テレカ)があるらしいけどさてどうするか。

2010年05月22日

■_

・じゃいきりOP
朝のお目覚めにでも使いたいけど、CD出てないっぽいのね(配信もない)。

・Tsukuba.R
レポート:「Tsukuba.R#7」活動報告|gihyo.jp … 技術評論社 へー、東京でもやってるのね。

■_ 飽きた


I'm almost bored with Python (CURE ME) : Python

Hey gang,

So I've been an avid Python coder for quite some time. Lately, however, I haven't been 
able to find anything "to do." What are some cool little tricks (or maybe 
even some activities?) I can do to spark my interest once again.


work on pypy

Port numpy to Python-3.1!


Contribute to a project that you use.

Or, find a project that you don't use because of technical limitations and help them fix it.

Or, find a hobby.


build a web framework. endless entertainment.


Learn another language. Python isn't everything. Try Scheme or Factor or Tcl. Assuming 
you're already fluent in C and sh, of course.

Write a Lisp/Scheme or Tcl interpreter in Python (both are relatively easy languages 
to implement).

web フレームワークは終わることのないエンターテインメントてw Python で Tcl を書くというのは面白そうだけどどんなもんかなあ。

■_ P&G?


推薦図書/必読書のためのスレッド 56
177 デフォルトの名無しさん [sage] 2010/05/21(金) 18:03:57 ID: Be:
    なんかひとつ勉強しようと思ったんだけどさー
    やっぱCからになっちゃうんだよね 

179 デフォルトの名無しさん [sage] 2010/05/21(金) 18:09:59 ID: Be:
    学校とかで体系的に学ぶならCからでいいだろうけど
    独学で何か目的があって学ぶならCはやめといたほうがいい。
    目的達成するまでに時間がかかりすぎる。

    今ならC#あたりでしょ。 

180 デフォルトの名無しさん [sage] 2010/05/21(金) 18:43:33 ID: Be:
    目的がプログラミング言語の学習自体にあるならCが最短ルートだと思う
    大学でCやった後独学でpythonやったけど、pythonのどこが学習用言語なのか疑問だった
    確かにコードは簡潔に書けるが、Cの方が分かり易い。
    新しい言語は自分の知らないとこで色んなことが勝手に処理されてる感じがCよりも強い
    でも何か作るとすれば、話は別だけど

181 デフォルトの名無しさん [sage] 2010/05/21(金) 18:48:36 ID: Be:
    漏れは大学でCやってその後Perlやったな。
    あまりの楽さに感動した。 

182 デフォルトの名無しさん [sage] 2010/05/21(金) 20:17:00 ID: Be:
    俺の場合はCを勉強しないでいきなりWINDOWSの仕組みの本読んだら
    当然のごこくちんぷんかんぷんだった
    それで挫折して3年くらい放置した
    実に貴重な時間を無駄にした

183 デフォルトの名無しさん [sage] 2010/05/21(金) 21:01:23 ID: Be:
    そこでCの勉強をすればいいことに3年も気付かなかった時点で
    当時のお前はその程度の人間なんだよ 

184 デフォルトの名無しさん [sage] 2010/05/21(金) 21:13:32 ID: Be:
    そこはなじるところじゃないと思うの 

185 デフォルトの名無しさん [sage] 2010/05/21(金) 21:16:36 ID: Be:
    のこぎりの使い方や釘の打ち方習っただけじゃ犬小屋ぐらしか作れないだろ
    Cの勉強ってその程度のことだぞ 

187 デフォルトの名無しさん [sage] 2010/05/21(金) 21:56:43 ID: Be:
    有名どころの言語の殆どはCの文法や演算子の書き方を
    参考にしてるから勉強して損はないな。

    文の最後にセミコロンつけるのはCが元祖と言えるし。 

188 デフォルトの名無しさん [sage] 2010/05/21(金) 21:59:16 ID: Be:
    いやB言語だろう 

189 デフォルトの名無しさん [sage] 2010/05/21(金) 22:41:24 ID: Be:
    元祖はB、流行らせたのはC、だな 

190 デフォルトの名無しさん [sage] 2010/05/21(金) 22:43:58 ID: Be:
    >>187
    pascal を忘れてやしませんか?
    厳密には文の最後、ではないのですけれども。 

192 デフォルトの名無しさん [sage] 2010/05/21(金) 23:03:16 ID: Be:
    ときどきでいいから思い出してください
    PL/Iって言語があったってことを… 

195 デフォルトの名無しさん [sage] 2010/05/22(土) 00:06:56 ID: Be:
    Cのいい参考書を教えてくださいな。

    今使ってるのは、柴田さんの明解C言語ですお。 

196 デフォルトの名無しさん [] 2010/05/22(土) 00:08:11 ID: Be:
    それでいいよ。 

197 デフォルトの名無しさん [sage] 2010/05/22(土) 00:09:02 ID: Be:
    P&G本オススメ 

198 デフォルトの名無しさん [sage] 2010/05/22(土) 00:27:19 ID: Be:
    明解C言語かK&R 

199 デフォルトの名無しさん [sage] 2010/05/22(土) 00:27:44 ID: Be:
    プロクターアンドギャンブル? 

200 デフォルトの名無しさん [sage] 2010/05/22(土) 00:33:15 ID: Be:
    P&Gって俺には洗剤しか思い浮かばん 

201 デフォルトの名無しさん [] 2010/05/22(土) 00:33:16 ID: Be:
    カール&ルイス 

202 デフォルトの名無しさん [sage] 2010/05/22(土) 01:07:23  ID: Be:
    P&Gってほかのもんもあったよなーと思ってググってたら
    変なものを見つけた
    このスレには全然関係ないけど

    ttp://www.cafeglobe.com/lifestyle/sexuality/backnumber.html 

203 デフォルトの名無しさん [sage] 2010/05/22(土) 01:16:28 ID: Be:
    >>198
    初心者にK&Rを勧めていいのかww 

204 デフォルトの名無しさん [sage] 2010/05/22(土) 01:19:31 ID: Be:
    でP&G本っていったい何の略称なんだ 

205 デフォルトの名無しさん [sage] 2010/05/22(土) 01:26:51 ID: Be:
    どう考えてもここだよな
    ttp://jp.pg.com/ 

209 デフォルトの名無しさん [sage] 2010/05/22(土) 08:32:59 ID: Be:
    >>203
    初心者に薦めてもいいだろ。
    なんとかの絵本とか読んで「変数というのは値を入れる箱です」みたいな説明みても理解が深まるとは思えん。

210 デフォルトの名無しさん [sage] 2010/05/22(土) 08:45:23 ID: Be:
    お前はよほど箱の表現が嫌いなんだなw 

211 デフォルトの名無しさん [sage] 2010/05/22(土) 09:17:00 ID: Be:
    K&Rが分かりにくいとかって普段本とか読みつけてない連中だろ?
    説明のしかたがどうこうって話じゃなくて。

    昔、初心者用の掲示板とかMLとか見てて「いいサイトを教えてください」
    みたいな話題で紹介されてるサイトをみても、雰囲気がフレンドリーな
    だけで、内容は大したことないってことがよくあったもん。

    本もネコちゃんでもわかるとか、なんとかの絵本とか、タイトルからして
    難しくないってオーラを発してないと、もうだめみたいな。 

212 デフォルトの名無しさん [sage] 2010/05/22(土) 09:22:08 ID: Be:
    >>211
    K&Rの序章読んだ? 

213 デフォルトの名無しさん [sage] 2010/05/22(土) 09:36:48 ID: Be:
    読みにくかったらK&Rの演習だけでもやればいいよ

214 デフォルトの名無しさん [sage] 2010/05/22(土) 09:47:38 ID: Be:
    堅い文章が全く読めない奴が増えてきているんだな。>>212 みたいな。 

215 デフォルトの名無しさん [sage] 2010/05/22(土) 09:59:42 ID: Be:
    ひどいはぐらかしだ 

216 197 [sage] 2010/05/22(土) 10:17:13 ID: Be:
    ごめんK&Rの間違いだった 

■_ J

J とか APLもやりたいとは思ってんだよね~。 今ひとつ踏ん切りがつかないんだけど(笑)


How to filter a list in J? - Stack Overflow

I'm currently learning the fascinating J programming language, but one thing I have 
not been able to figure out is how to filter a list.

Suppose I have the arbitrary list 3 2 2 7 7 2 9 and I want to remove the 2s but leave 
everything else unchanged, i.e., my result would be 3 7 7 9. How on earth do I do this?
The short answer

   2 (~: # ]) 3 2 2 7 7 2 9
3 7 7 9


The long answer

I have the explanation for you, but before you should know some details. Here they are:
Monads, dyads

There are two types of verbs in J: monads and dyads. The former accept only one 
parameter, the latter accept two parameters.

(略)

As I noted earlier, the verb #, which is dyadic (accepts two arguments), allows us to 
duplicate the items from the right argument as many times as specified in the 
respective positions in the left argument. Hence:

   1 0 0 1 1 0 1 # 3 2 2 7 7 2 9
3 7 7 9

We've just got the list filtered out of 2s.

Reference

Slightly different kind of fork, hook and other primitves (including abovementioned 
ones) are described in these two documents:

    * A Brief J Reference (175 KiB)
    * Easy-J. An Introduction to the World's most Remarkable Programming Language (302 KiB)

Other useful sources of information are the Jsoftware site with their wiki and a few 
mail list archives in internets.


Thanks for your excellent explanation, which I understand thoroughly! I had not 
understand the dyadic use of # until now.


J is truly an ingenious language. 


I took your example and have been playing around with it. For instance, to find all 
the numbers between 1 and 1000 that are evenly divisible by 3, I'd say 3 ((|=0:)#]) 
1+i.1000 (with two powerful dyadic forks) and so on. Very useful!


@Gregory: You're welcome ;) 

ちょっと古いバージョンはオープンソースになっているみたいだけど、 基本的にはクローズなのが今ひとつ食指が動かない原因かもしんない。

2 (~: # ]) 3 2 2 7 7 2 9 うーむ謎めいている。

■_ Exam board deletes C and PHP from CompSci A-levels

そいや、これ。C++ は最初っから外れてんのね。


Exam board deletes C and PHP from CompSci A-levels • The Register

Free whitepaper – Taking control of your data demons: Dealing with unstructured 
content

A-level computer science students will no longer be taught C, C# or PHP from next year 
following a decision to withdraw the languages by the largest exam board.

Schools teaching the Assessment and Qualifications Alliance's (AQA) COMP1 syllabus 
have been asked to use one of its other approved languages - Java, Pascal/Delphi, 
Python 2.6, Python 3.1, Visual Basic 6 and VB.Net 2008. The final resits allowing work 
in C, C# and PHP will be held in June 2011.

In a document detailing the withdrawal (pdf), the AQA said the move was a response to 
low take-up of some of the eight languages originally allowed under its syllabus.

The board "highly recommended" switching to Pascal/Delphi because it is 
stable and was designed to teach programming and problem solving. Teachers planning to 
use Java are warned that many universities are considering dropping it from their 
first year computer science programmes, "as has happened in the US".

"You have to consider carefully whether you should be teaching a language that 
could very well be taught in [higher education]," the AQA wrote.

The allowed variants of Python and Visual Basic are presented by the AQA without 
comment.

Simon Humphreys, the British Computing Society's coordinator of computing at school, 
backed the decision.

“I understand that the reason for AQA dropping C#, PHP and C from the AS Computing 
examination is one of demand," he told The Register.

"Most centres offer Pascal/Delphi and Visual Basic as the language of choice for 
their students. This selection is based on the experience of the teacher in that 
centre and their own comfort with that language.

"The Computing A Level is not intended as a programming course but a course that 
covers the fundamentals of computing of which programming (and problem solving) form a 
key component."

The AQA's exclusion of C, C# and PHP - languages that are arguably more useful in 
practice than the now-preferred teaching languages - is nevertheless sure to spark 
debate. Over to you. ®

→ http://store.aqa.org.uk/qual/gce/pdf/WITHDRAWAL_OF_COMP1.PDF

これでもまだあんまり明確ではないか?

■_ やれやれだ

やっとここまではきた。

C:\home\prog\src\gawk-3.1.8>gawk --ver
GNU Awk 3.1.8(May 23 2010)
Copyright (C) 1989, 1991-2010 Free Software Foundation.

本プログラムはフリー・ソフトウエアです。Free Software Foundation 公表の
GNU General Public License(バージョン2、または、これ以後のバージョン)
に従い再配布、及び/または、変更を加えることができます。

本プログラムは、利用価値があることを期待して配布されていますが、
これは、特定目的に使用可能であること、及び、商用目的に使用できる
ことを暗示するものではなく、いかなる保証も一切ありません。
詳しくは、GNU General Public License を参照してください。

本プログラムには、GNU General Public License が添付されているはずです。
もし、本プログラムと一緒に GNU General Public License を入手しなかった
場合には、
http://www.gnu.org/licenses/ にアクセスしてください。

C:\home\prog\src\gawk-3.1.8>gawk "BEGIN {print \"hello\"}"
hello

MinGW やら WATCOM でもコンパイルできるようにしているので、 今まで適当に誤魔化せていたけどそれができなくなったような ところがちらほらあるからまだ先はあるなあ。

つか、1.7 の Cygwinならそのまんまマルチバイト文字対応になるんじゃなかろか。

■_ 本日の巡回から

2010年05月21日

■_

・大型書店の検索システム
以前にもこのネタで書いたことがありますが。 先日、都内のとある大型書店に行ったのですが、 検索システムを使おうと思ったところ先に使っていた人が一生懸命で なかなか順番が回ってこない。 一フロアに二台とか三台しかないので、 ときに行列ができるようなこともあるんでしょうけど (ポアソン分布 - Wikipedia)、 iPhone やらのスマートフォンでも持っていたら それで検索できるようになっていれば順番待ちなんてしないでもすむのになどと思いました。 タッチパネルの癖に悩まされることもないし(笑) まあ、実際にやるとしても問題はいろいろ出るんでしょうが。

・延期
お知らせ | 化物語 - 西尾維新アニメプロジェクト 「第六巻 / つばさキャット(下)」 発売日再変更のご案内> 予約票、感熱紙だから薄れかかってるんですけど(^^;

■_ 本日の巡回から

■_ How do you pronounce "crlf" ?

「きゃりふ」というのをどこかで見たか聞いたかしたような気が。> CrLf

vbCrLf 読み方 | OKWave

ブイビーカルフ?でしょうか?
よろしくお願いします。

ANo.1

自分は、ブイビーシーアールエルエフと読んでますね。

ANo.2

そんな読み方はしないと思いますよ。
単に「ぶいびー、しーあーるえるえふ」だと思います。

Windowsの改行コードのマクロですよね。
Crは「キャリッジリターン」で、値は0DH。意味はカーソルなりプリンタヘッダなりの位置を行頭に戻す。
Lfは「ラインフィード」で、値は0AH。意味はカーソルなりプリンタヘッダなりの位置を次の行に進める。
行頭に戻して次の行に進めることで、次の行頭に移る、すなわち改行を意味するのです。

ANo.3

ブイー・ビー・キャリッジリターン・ラインフィード とは言わず、

ぶいびーのカイギョウと言ってますね。 私の場合は。

ANo.4

他の回答者と同じですが、単純に「ブイビーシーアールエルエフ」と読んでいます。

と言いますのは、改行コードは一種類ではないからです。

http://ja.wikipedia.org/wiki/%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89

Windowsでは通常は vbCrLf ですが、EXCEL(2002)の一つのセルの中での改行コードは VbLf です。

UNIXやMacも違いますから単に改行コードと言うと話が通じない場合があります。

■_ やさしい~

楽しくプログラミング(JAVA・C#・C++)を学べる書籍を探しています - Yahoo!知恵袋


JAVAとC#とC++言語プログラミングを学びたいんですが、初心者なのでJava・C#・C++の解説書だ
と尻込みしてしまいます。

そこで「マンガでわかるJAVA」「マンガでわかるC#」「マンガでわかるC++」といったような漫
画でやさしく解説されていて、初心者でも楽しく、途中で投げ出さずに最後まで読みきり、学ぶ
ことができる書籍をご存知ですか?

ご教授願います。

マンガでわかる~ってのはいくつかあったような気もするけど、 最後まで投げ出さずに読みきれるかどうかは主に読み手の問題じゃなかろかねえ。

■_ いろいろ

gawk 3.1.8 をちまちまいじりんぐ。 微妙なところでパッチが反映されてないとかでひっかかるなあ。


一つ前へ 2010年5月(中旬)
一つ後へ 2010年6月(上旬)

ホームへ


Copyright (C) 2010 KIMURA Koichi (木村浩一)
この文書の無断転載はご遠慮ください(リンクはご自由にどうぞ)。

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