K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]


新規投稿 | 開設者ホームページへ戻る | ヘルプ


[2074] Re:WebApplicationクラス
返信


投稿者:(ぱ)こと管理人
2017/12/21 00:51:27

Link:
>しかし、自然に考えると「WebAppCollection」クラスを分離して、「WebAppCollection」が
>「WebApplication」のコレクションを保有する構造の方が分かりやすいのではないか、と
>思ってしまいました。

この構造は、確かにわかりやすくてこれでもよいと思いますが、

>そこで、現在の「WebApplication」の構造にした背景みたいなものがあれば、
>聞いてみたいと思ったわけです。

現状こうなっているのは、「すべてのWebApplicaionのインスタンスが、
必ずwebAppCollectionに格納されていることを保証する」ためです。

コンストラクタがprivateにしてあるので、WebApplicationのインスタンスは
WebApplication.createInstance()を呼ぶ以外に生成の方法がなく、
必ずwebAppCollectionに格納されていることが保証されます。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2073] WebApplicationクラス
返信


投稿者:くまきち
2017/12/20 23:40:08

Link:
『基礎からのWebアプリケーション開発入門』のP.114のリスト3-15にある「WebApplication」クラスについて、少し疑問があります。
書籍の本論とはズレた疑問ですが。。

「WebApplication」は自分自身のコレクション「WebAppCollection」を内部に持っています。
しかし、自然に考えると「WebAppCollection」クラスを分離して、「WebAppCollection」が「WebApplication」のコレクションを保有する構造の方が分かりやすいのではないか、と思ってしまいました。
(「Main」は「WebAppCollection」に「addWebApplication」を依頼する、みたいな)

そこで、現在の「WebApplication」の構造にした背景みたいなものがあれば、聞いてみたいと思ったわけです。


このようなことを聞く理由は、次のような感じです。
書籍でHenacatを勉強していて、いろいろなクラスが登場し、それぞれの関係性を理解して、という作業を行ったのですが、なかなか難しいという感想を持ちました。
そう感じる理由はクラス間の関連(全体感)をつかめないからで、もしかするとUMLとかで整理したら分かりやすくなるのかな?と思って試してみました。
しかし、なかなか上手く表現できず「WebApplication」の構造が気になり始めた、という事が理由です。

いつもご迷惑をおかけしますが、よろしくお願いいたします!
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2072] Re:【C言語ポインタ完全制覇】ポインタはどれだけ進む?
返信


投稿者:knwifuru
2017/12/20 08:08:58

Link:
>>2-3-2ポインタ型派生で(第1版p151、第2版p172)、「くどいようですが繰り返して
>>おきます。ポインタに対して加算を行うと、そのポインタの指す型のサイズだけ、
>>ポインタが進むのでした。」とありますが、ポインタの指す型のサイズだけ進むのは、
>>(通常のポインタの実装では)【アドレス】であって、ポインタが進む大きさは、
>>ポインタに加算した量だけ、ではないでしょうか?
>
>この「ポインタが〇〇だけ進む」という表現は、第2版p.56の
>
>>ポインタって、要するにアドレスのことなんだろ?
>>だったら、1足したら1進むに決まってるじゃないか!
>
>のところから一貫して「バイト数」を指しているつもりです。

(略)

>そして、こういう説明が必要だと思ったからこそ、私はこの本を書いたわけです。

有難うございます。感謝しながら読ませて頂いております。

混乱してきました。あ、勿論、ポインタの指す先がどれだけ進むか?は、理解しているつもりです。

  int i, iarray[10];
  int *ip;

  ip = iarray

で int が 4bytes である場合に、

  *(ip+2);

が、iarray の先頭アドレスから 4*2=8bytes を参照していることはわかっているつもりです。
この時、ip はポインタ(型の変数)ですよね? ですから、ip+2、すなわち、ポインタ(型の変数の値)に2加算したポインタ『値』は、あくまで2しか増えていないじゃない!、と僕は思ったわけです。そして、「ポインタが〇〇だけ進む」という表現は、『ポインタ「の値」が〇〇だけ進む』と読めました。その指す先は、勿論、8bytes 進んだ場所ですが… (ipとip+2の差はあくまで2ですが、ip+2がdereferenceする先とipがdereferenceする先の番地の差は、2*sizeof(int)、で、バイト数で考えて意味をもつのは、あくまでdereferenceする先では?)

…というわけで、『ポインタ「の指し示すアドレス」が〇〇だけ進む』などという表現の方が、くどい文章になるけれど、誤解する僕のようなバカチンは減るのでは?と申したわけです。

細かくてすみません…
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2071] Re:【C言語ポインタ完全制覇】ポインタはどれだけ進む?
返信


投稿者:knwifuru
2017/12/20 07:51:18

Link:
>>ついでに申せば、第1版のFig.3-3の「1加算するとここを指す」という説明も、
>>よくわかりません。どういう意味でしょうか?何に1加算すると?
>
>この図中にある「Tへのポインタ」に1加算すると、です。

あ、配列へのポインタの説明のFig.3-6と見比べて、わかりました。

これ、あるオブジェクトがぽつんとある図ではなく、メモリ空間内で図の上から下にアドレスが大きくなっていっていて、「Tへのポインタ」が「派生元の型T」のとある変数?の場所の手前を指していて、「Tへのポインタ」に「1加算するとここ(「派生元の型T」のとある変数?の場所の次)を指す」、という意味なのですね!

理解しました。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2070] Re:【C言語ポインタ完全制覇】バイトオーダー、向き?
返信


投稿者:knwifuru
2017/12/20 07:43:34

Link:
返信ありがとうございます。

endianについては、VAX/VMSやらPC98やらをいじっているその昔から(トシがばれる(^^;)苦労させられてきていて、中身はわかっているつもりですので、「何と逆なのか」を明示して頂ければ、僕はそれだけで充分です。(僕が細かすぎですかね?(笑))

>>第1版p135, 第2版p156の、byteorder.cの実行直後の文、『私の環境では「0x12345678」と
>>いう値は、メモリ上に、逆向きに配置されているようですね。』とあるのですが、
>>何とは「逆向き」に、なのかがわかりません。何と逆向きなのでしょうか?
>
>「0x12345678」という16進の表記と逆向き、という意味で書いています。

(略)

>「想定読者は過去の自分自身」という視点から逃れられないものなのかもしれません。

繰り返しになりますが、「何と逆か」が明確に示していただければ、「あぁ、それと逆なのね」と、読者の一人としては納得できます。「下位から上位に読んでいったら、全然逆じゃないじゃん!何と逆? うぅーん、わからん!」と考える、ひねくれた読者もおりますので(笑)
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2069] Re:【C言語ポインタ完全制覇】ポインタはどれだけ進む?
返信


投稿者:(ぱ)こと管理人
2017/12/20 00:26:09

Link:
>ついでに申せば、第1版のFig.3-3の「1加算するとここを指す」という説明も、
>よくわかりません。どういう意味でしょうか?何に1加算すると?

この図中にある「Tへのポインタ」に1加算すると、です。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2068] Re:【C言語ポインタ完全制覇】ポインタはどれだけ進む?
返信


投稿者:(ぱ)こと管理人
2017/12/20 00:23:07

Link:
>2-3-2ポインタ型派生で(第1版p151、第2版p172)、「くどいようですが繰り返して
>おきます。ポインタに対して加算を行うと、そのポインタの指す型のサイズだけ、
>ポインタが進むのでした。」とありますが、ポインタの指す型のサイズだけ進むのは、
>(通常のポインタの実装では)【アドレス】であって、ポインタが進む大きさは、
>ポインタに加算した量だけ、ではないでしょうか?

この「ポインタが〇〇だけ進む」という表現は、第2版p.56の

>ポインタって、要するにアドレスのことなんだろ?
>だったら、1足したら1進むに決まってるじゃないか!

のところから一貫して「バイト数」を指しているつもりです。

私だって普通にポインタ演算(まあめったに使いませんが)でintの配列の
次の要素を指す時には、「4バイト先」なんてことを意識したりはしませんが、
この本では、「そのポインタの指す型のサイズだけ、ポインタが進む」ということを
強く意識しないと、たとえばp.195の

「ポインタにi加算することは、そのポインタが指す型のサイズ×iだけ、
ポインタを進めることを意味する。hogeの指す先の型は「intの配列(要
素数5)」であるから、hoge + iでは、sizeof(int[5]) * iだけ進む。」

という説明が意味不明になってしまうのではないでしょうか。
そして、こういう説明が必要だと思ったからこそ、私はこの本を書いたわけです。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2067] Re:【C言語ポインタ完全制覇】バイトオーダー、向き?
返信


投稿者:(ぱ)こと管理人
2017/12/20 00:13:05

Link:
>第1版p135, 第2版p156の、byteorder.cの実行直後の文、『私の環境では「0x12345678」と
>いう値は、メモリ上に、逆向きに配置されているようですね。』とあるのですが、
>何とは「逆向き」に、なのかがわかりません。何と逆向きなのでしょうか?

「0x12345678」という16進の表記と逆向き、という意味で書いています。

>(ぱ)さんの環境(little endian)で、78->56->34->12と表示されている、
>というのは、下の位から上の位にメモリアドレスが増えていっているので、
>僕には、逆ではなく【順に】に思えるのです。

うーん、主観の問題とは思いますが、どうなんでしょう。
「下の位を先にメモリに格納する」というのは、コンピュータの事情としては
わかるケースもありますが、通常、人間は、数字を印刷・表示した状態の順序で
意識しているのではないでしょうか。過去、この話を新人君やお客様にしたことは
何度かありますが、私の経験した範囲では、「へー、逆なんだ」という反応でした。
ポインタ完全制覇の初版が出てから17年、この点で違和感を表明したのは
knwifuruさんが最初です(もちろん、表明しなかっただけで、違和感を感じていた人は
いたのかもしれません)。

>しかし、もともと、endianというのは、「卵の尖った側(小さい側)から(先に)食べるか、
>丸い側(大きい側)から食べるか」=「bit/byte列のlower bits側が先に(lower addressに)
>置かれるか、higher bitsが先に置かれるか」という事のようなので、
>数字を印刷・表示した時・読んだ時に先に・早く出てくるかどうか?で議論をすると、
>混乱すると思うのですが、いかがでしょうか?

まあこれはendianを知らない人向けの説明なので、「もともとendianというのは〜」で
説明してもあまり意味はなく、「数字を印刷・表示した時・読んだ時」の順と
逆になっていることから、「そんなこともあるんだ、へー」と思ってもらえば
よいかと思っています。
「へー、逆なんだ」と思わない人は、knwifuruさんの他にもいるのかもしれませんし、
実のところどっちが多数派なのかもわかりませんが、本の書き手としては、
「想定読者は過去の自分自身」という視点から逃れられないものなのかもしれません。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2066] Re:info.servlet.serviceについて
返信


投稿者:くまきち
2017/12/19 23:31:05

Link:
ありがとうございます、納得しました!

>>HenacatでRunnableをimplementsしているのはServerThreadだけだと思いますが、
>>もしかしてマルチスレッドの各スレッドから呼び出されるクラスは、ルールの適用無しでも
>>(結果として)マルチスレッドで動くという事なのでしょうか?
>
>もちろん、マルチスレッドの各スレッドから呼び出されるメソッドは
>呼び出し元のスレッドで動きますから、マルチスレッドで動きます。
>(クラスとかインスタンスは、この際関係ないですね)
>
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2065] Re:info.servlet.serviceについて
返信


投稿者:(ぱ)こと管理人
2017/12/19 23:08:47

Link:
>HenacatでRunnableをimplementsしているのはServerThreadだけだと思いますが、
>もしかしてマルチスレッドの各スレッドから呼び出されるクラスは、ルールの適用無しでも
>(結果として)マルチスレッドで動くという事なのでしょうか?

もちろん、マルチスレッドの各スレッドから呼び出されるメソッドは
呼び出し元のスレッドで動きますから、マルチスレッドで動きます。
(クラスとかインスタンスは、この際関係ないですね)
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2064] Re:【C言語ポインタ完全制覇】ポインタはどれだけ進む?
返信


投稿者:knwifuru
2017/12/19 23:07:31

Link:
ついでに申せば、第1版のFig.3-3の「1加算するとここを指す」という説明も、よくわかりません。どういう意味でしょうか?何に1加算すると?

>2-3-2ポインタ型派生で(第1版p151、第2版p172)、「くどいようですが繰り返しておきます。ポインタに対して加算を行うと、そのポインタの指す型のサイズだけ、ポインタが進むのでした。」とありますが、ポインタの指す型のサイズだけ進むのは、(通常のポインタの実装では)【アドレス】であって、ポインタが進む大きさは、ポインタに加算した量だけ、ではないでしょうか?
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2063] Re:info.servlet.serviceについて
返信


投稿者:くまきち
2017/12/19 21:37:28

Link:
なるほど、了解です!ありがとうございます。
ですが、もう少し分からないことがあります。

マルチスレッドで動くとなると、クラスがRunnableをimplementsして...のような
ルールが必要なのかと思っていたのですが、HttpServletは、そのようになっていません。

HenacatでRunnableをimplementsしているのはServerThreadだけだと思いますが、
もしかしてマルチスレッドの各スレッドから呼び出されるクラスは、ルールの適用無しでも
(結果として)マルチスレッドで動くという事なのでしょうか?

入門書を読め!という話なのかも知れませんが、どうぞ宜しくお願いします。



>>分からないのは「info.servlet」がnullでなければ、同じインスタンスが
>>使いまわされるのに、並行して複数個所から使いまわされていいんだっけ?
>>ということです。
>
>p.92の補足にも書きましたが、サーブレットのインスタンスはひとつだけ生成され、
>すべてのリクエストで共有されます。
>よって、インスタンスフィールドを使えば、複数のスレッド間で競合が起きる
>可能性がありますし、(補足にも書いたように)リクエスト単位やユーザ単位で
>持つべき情報をサーブレットのインスタンスフィールドで保持してはいけません。
>
>ただし、ローカル変数はスレッドごとに存在するので、ローカル変数(メソッドの
>引数含む)だけを使っている限り、同じインスタンスのメソッドを複数のスレッドで
>呼び出すことは問題ありません。
>
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2062] 【C言語ポインタ完全制覇】ポインタはどれだけ進む?
返信


投稿者:knwifuru
2017/12/19 08:28:55

Link:
2-3-2ポインタ型派生で(第1版p151、第2版p172)、「くどいようですが繰り返しておきます。ポインタに対して加算を行うと、そのポインタの指す型のサイズだけ、ポインタが進むのでした。」とありますが、ポインタの指す型のサイズだけ進むのは、(通常のポインタの実装では)【アドレス】であって、ポインタが進む大きさは、ポインタに加算した量だけ、ではないでしょうか?
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2061] 【C言語ポインタ完全制覇】バイトオーダー、向き?
返信


投稿者:knwifuru
2017/12/19 08:23:16

Link:
第1版p135, 第2版p156の、byteorder.cの実行直後の文、『私の環境では「0x12345678」という値は、メモリ上に、逆向きに配置されているようですね。』とあるのですが、何とは「逆向き」に、なのかがわかりません。何と逆向きなのでしょうか?

(ぱ)さんの環境(little endian)で、78->56->34->12と表示されている、というのは、下の位から上の位にメモリアドレスが増えていっているので、僕には、逆ではなく【順に】に思えるのです。
数字の左から右(読む向き)とは【逆】という事でしょうか? 確かに、それとは逆ではありますが…

しかし、もともと、endianというのは、「卵の尖った側(小さい側)から(先に)食べるか、丸い側(大きい側)から食べるか」=「bit/byte列のlower bits側が先に(lower addressに)置かれるか、higher bitsが先に置かれるか」という事のようなので、数字を印刷・表示した時・読んだ時に先に・早く出てくるかどうか?で議論をすると、混乱すると思うのですが、いかがでしょうか?
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2060] Re:info.servlet.serviceについて
返信


投稿者:(ぱ)こと管理人
2017/12/18 23:55:58

Link:
>分からないのは「info.servlet」がnullでなければ、同じインスタンスが
>使いまわされるのに、並行して複数個所から使いまわされていいんだっけ?
>ということです。

p.92の補足にも書きましたが、サーブレットのインスタンスはひとつだけ生成され、
すべてのリクエストで共有されます。
よって、インスタンスフィールドを使えば、複数のスレッド間で競合が起きる
可能性がありますし、(補足にも書いたように)リクエスト単位やユーザ単位で
持つべき情報をサーブレットのインスタンスフィールドで保持してはいけません。

ただし、ローカル変数はスレッドごとに存在するので、ローカル変数(メソッドの
引数含む)だけを使っている限り、同じインスタンスのメソッドを複数のスレッドで
呼び出すことは問題ありません。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2059] info.servlet.serviceについて
返信


投稿者:くまきち
2017/12/18 22:54:13

Link:
いつもお世話になっております。おかげさまで安心して読み進めることが出来ます。

『基礎からのWebアプリケーション開発入門』のP.116のリスト3-17の76行目に
 
info.servlet.service(req,resp);

という行があります。
この「info.servlet」はnullであれば53行目でインスタンスを作っています。
また「info.servlet」はWebapplicationのメンバーなので、当然、複数箇所から並行して呼ばれることがあるのではないかと思います。

分からないのは「info.servlet」がnullでなければ、同じインスタンスが使いまわされるのに、並行して複数個所から使いまわされていいんだっけ?ということです。
これは、マルチスレッド的な何か仕掛けがあって、このような作りになっているのでしょうか?

初心者で分からないことが多く、ご迷惑をおかけします。もしかして、ものすごく曖昧な質問なのかも知れませんが、よろしければお教えください。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2058] Re:C言語ポインタ完全制覇 第1版 4-2-1 可変長配列の配列についての質問
返信


投稿者:884
2017/12/18 14:23:31

Link:
ご回答ありがとうございました。理解できました。
こんなにレスポンスが早く、直接、著者より回答がいただけるのは、非常にありがたいです。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2057] Re:ポインタ制覇誤植2-3-2冒頭(still in the 2nd ed.)
返信


投稿者:knwifuru
2017/12/17 22:22:15

Link:
>>「C言語ポインタ制覇」2-3-2冒頭、『式の中では「関数へのポインタ」に読み替えられる』は
>>『読み替えられる』ではないでしょうか?
>
>間違っている方の記述は「読み替えらえる」ですね。正誤表に入れさせていただきました。

指摘も間違えていて恥かきました(^^; すみません。

また気づいた点がありましたらお知らせいたします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2056] Re:セッションCookie
返信


投稿者:くまきち
2017/12/17 22:05:21

Link:
自己解決しました。
P.166の最終段落「さて、」以降に記載されている部分のことですね。
お騒がせしました。


>『基礎からのWebアプリケーション開発入門』のP.171のリスト5-4の後に、
>「セッションCookieにPath属性が...」との記載があります。
>これは、「CookieにPath属性が...」と見ればいいでしょうか?
>それとも、どこかで「セッションCookie」が定義されていたでしょうか?
>
>誤植のような気もするし、私が失念しただけのような気もするし、曖昧で申し訳ないですが、
>質問させて頂きました。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2055] Re:セッションCookie
返信


投稿者:(ぱ)こと管理人
2017/12/17 21:59:06

Link:
>『基礎からのWebアプリケーション開発入門』のP.171のリスト5-4の後に、
>「セッションCookieにPath属性が...」との記載があります。

ちょっと遠くてわかりにくかったかもしれませんが、
ここの「セッションCookieにPath 属性が付いていたことからもわかるように、」
という文章は、p.167冒頭のTomcatのセッションCookieにPath属性が付いていたことを
意味しています。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2054] Re:ポインタ制覇誤植2-3-2冒頭(still in the 2nd ed.)
返信


投稿者:(ぱ)こと管理人
2017/12/17 15:34:04

Link:
>「C言語ポインタ制覇」2-3-2冒頭、『式の中では「関数へのポインタ」に読み替えられる』は
>『読み替えられる』ではないでしょうか?

間違っている方の記述は「読み替えらえる」ですね。正誤表に入れさせていただきました。

>第一版で前々から気付いていたのですが、お知らせせずに置いたところ、先日出版された
>ことに気づいて慌てて?購入した第二版でもそのままになっているようです。

第1版の方の正誤表にも後ほど記載いたします(第1版では、第2版を書いているうちに
気付いたり査読者にご指摘いただいた箇所がミスがやはり何か所かありまして、
そのうち正誤表に載せようと思ったまま延び延びになってしまっておりました)。

>こういう連絡は、こちらにするので良いのでしょうか? 「密かに別のところに
>知らせてくれ」ということであれば、そちらに連絡差し上げますが…

こちらでお願いします。また何かありましたらよろしくお願いいたします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2053] ポインタ制覇誤植2-3-2冒頭(still in the 2nd ed.)
返信


投稿者:knwifuru
2017/12/17 11:58:12

Link:
「C言語ポインタ制覇」2-3-2冒頭、『式の中では「関数へのポインタ」に読み替えられる』は『読み替えられる』ではないでしょうか?

第一版で前々から気付いていたのですが、お知らせせずに置いたところ、先日出版されたことに気づいて慌てて?購入した第二版でもそのままになっているようです。

こういう連絡は、こちらにするので良いのでしょうか? 「密かに別のところに知らせてくれ」ということであれば、そちらに連絡差し上げますが…
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2052] セッションCookie
返信


投稿者:くまきち
2017/12/16 16:32:15

Link:
『基礎からのWebアプリケーション開発入門』のP.171のリスト5-4の後に、
「セッションCookieにPath属性が...」との記載があります。
これは、「CookieにPath属性が...」と見ればいいでしょうか?
それとも、どこかで「セッションCookie」が定義されていたでしょうか?

誤植のような気もするし、私が失念しただけのような気もするし、曖昧で申し訳ないですが、
質問させて頂きました。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2051] Re:synchronizedについて
返信


投稿者:(ぱ)こと管理人
2017/12/16 00:12:38

Link:
>これはラストアクセス時刻を設定するだけのメソッドだと思いますが、
>なぜsynchronizedにする必要があるのでしょうか?

ここで設定するthis.lastAccessedTimeはlong型ですが、
Javaではlong型については、代入自体、atomicであることが保証されていません。

https://www.jpcert.or.jp/java-rules/vna05-j.html

(intとかは良さそうなのですが、あまりそれに依存したコードは私は
書きたくないところです)


>正直、多少ズレても誰にも迷惑をかけないように思ったので質問してみました。

atomicでないということは、時刻が多少ずれるということだけでなく、
「結果がどうなるかわからない」ということだと思います。
(上記ページで引用されているJLSの記述を読むと、32ビット単位で
異なる値が混じる、ということしか起こらないようにも読めますが……)
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2050] synchronizedについて
返信


投稿者:くまきち
2017/12/14 23:47:43

Link:
『基礎からのWebアプリケーション開発入門』のP.168のリスト5-3の40行目に  

synchronized void access()

という行があります。  
これはラストアクセス時刻を設定するだけのメソッドだと思いますが、なぜsynchronizedにする必要があるのでしょうか?
正直、多少ズレても誰にも迷惑をかけないように思ったので質問してみました。
よろしかったら回答頂けると、ありがたいです。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2049] Re:『センス・オブ・プログラミング!』の正誤について
返信


投稿者:藤四郎
2017/12/13 19:42:15

Link:
お手数おかけしました。ご対応ありがとうございました。

これでこの本も一読者として安心して意味内容に集中して読み返すことができます。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2048] Re:C言語ポインタ完全制覇 第1版 4-2-1 可変長配列の配列についての質問
返信


投稿者:(ぱ)こと管理人
2017/12/13 01:51:10

Link:
>標準入出力は、テキストファイルと同じように、ファイルポインタで指定して、
>ファイルのように扱ことができる。という理解でよいでしょうか。

そういうことですね。
キーボードのような入力デバイスも、画面のような出力デバイスも、
なんでもファイルとして扱えるようにしてしまえ、というのは
もともとUNIXのアイディアで、たとえばWikipediaでUNIXを引くと
「概説」の項に以下のように書いてあります。

>各種の周辺装置やある種のプロセス間通信 (IPC) をファイルとして扱う事

ここで、「各種の周辺装置」はキーボードを含みます。

このUNIXのアイディアをMS-DOSが模倣し、Windowsでもそのまま使えるように
なっているわけです。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2047] Re:addCookieについて
返信


投稿者:(ぱ)こと管理人
2017/12/13 01:47:40

Link:
>name=COUNTERのCookieが増えないように、どこで制御しているのでしょうか?
>単純に見落としているだけかも知れないのですが、宜しかったら教えて頂きたいです!

結論から言えば、制御していません。Tomcatも同じです。

https://twitter.com/kmaebashi/status/549803263734718464

このTweetにも書いたように、何の役に立つのかはさっぱりわかりませんが、
Tomcatもそうなっているならまあいいかとそうしています。

もちろん、HttpServletResponseはリクエストの度に作り直されますし、
CookieTest.javaは1回のリクエストで1回しかaddCookie()を呼んでいないので、
同じ名前のCookieが増えることはありません。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2046] Re:flush()について
返信


投稿者:(ぱ)こと管理人
2017/12/13 01:39:52

Link:
>すごく基本的な質問かもしれないですが、たとえば「メモリ上にだけ持っていて
>ディスクに書き出していないデータがあるかもしれないのでflush」という
>イメージは分かるのですが、このサンプルの場合はメモリ上のデータの
>やり取りだけなので、flushを何のために行っているのか分かりませんでした。

このサンプルの場合はメモリ上のデータのやり取りだけですが、
それは、Henacatが手抜きのためにレスポンスボディをいったんすべて
メモリに乗せているからであり、これでは、巨大なレスポンスを返す際には
メモリが無駄になります。場合によっては、レスポンスデータを作りながら
どんどんクライアントに返してしまいたいケースもあるでしょう。
その場合、クライアントへのデータの返却を始めてしまったら、
もうレスポンスヘッダの変更はできませんから、途中でエラーが起きても
ステータスとして500とかを返すことはできず、200 OKを返すことになって
しまいますが、それでもいいからクライアントへのデータ返却を始めてしまいたい、
というニーズはあり得ます。それに対応するために、サーブレットAPIでは
「コミット」という概念を導入しています(p.119)。
http://mergedoc.osdn.jp/tomcat-servletapi-5-ja/javax/servlet/ServletResponse.html#getWriter()

その場合、HttpServletResponseのgetWriter()で得られるPrintWriterは、
バッファリングする方がよいでしょう。相手はネットワークだからです。
このように、このPrintWriterはバッファリングする(ようになる)可能性もあるため、
ここではflush()しています。
いずれにしても、バッファリングするしないはPrintWriterの実装詳細に
属することでしょうから、flush()する方が堅実なコーディングではないかと
思います。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2045] Re:『センス・オブ・プログラミング!』の正誤について
返信


投稿者:(ぱ)こと管理人
2017/12/13 00:19:10

Link:
>さて、またご面倒をおかけしますが、以下についてそちらの正誤表への追加を
>ご検討お願いいたします。年末のお忙しい時期におそれいりますが、またご都
>合のよろしいときにでもご対応いただければ幸いです。

またまたたくさんご指摘ありがとうございます。
ポカが多く申し訳ありません。

遅くなりましたが、対応させていただきました。

>後入れ先出し Last In First Out
>先入れ後出し First In Last Out

これはまあ、日本語と英語で順序を合わせなければならないというわけでも
ないでしょうから、このままとさせてください。

>> 27人集れば、誕生日が衝突する確率は50%を超えます。

私は、どういうわけか27人だと思い込んでいたようですが、
どこからその数字をおぼえたのか、まったく思い出せません…

>p.192 l.2
>> O(1/2N^2)
>
>これは誤りとまではいえないとは思いますが、一応、より細かいことをいえば
>(N-1) + (N-2) + ... + 1 = N(N-1)/2
>かと。 (つまり、無視するのは定数の係数だけでなく第二項以降も。)

正しくは1/2 N^2(つまり(N^2)/2)ではなくN(N-1)/2ですが、
さすがにN^2とN(N-1)は丸めてしまって問題ない差だと思います。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[ より新しい投稿] [ より古い投稿]