K.Maebashi's BBS

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

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

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

[2128] いろいろ愚痴りたい((プログラミング言語を作る3章~5章 )
投稿者:mano
2018/04/30 19:02:25

ゴールデンウィークで読み終えられるかなと思っていたけど全然そうじゃなかった。 やっと、5章まで読み終わった。で、いろいろ愚痴りたい。(今回は投稿にパスワードをつけたので消す準備はバッチリです。) まずは、環境依存の問題 今週末は一人で0x0d問題にぶち当たり全然読み進められなかった。 test.crbを食わせても以下のメッセージしか出ない。 5:(0x0d)@ win_sjisのtest.crbだと、改行にCR(0x0d),LF(0x0a)が入れられていて、 今使っている処理系(Microsoft Windows Subsystem for Linux上のubuntu) では、0x0dを無視してくれず、改行コード\n(=0x0a)に到達する前に不正な文字で引っかかっている、がubuntuのターミナルは、SJISを解釈してくれず文字化けを起こす。結局が悪いのかがわからない。 今の時代趣味でやる分にはsjisもeucも地雷じゃないかなあ? で、読む気力がそがれたので、重箱の隅を突っ込みながら(またしても)表面をなぞる程度の読み込みになっちゃった。ちゃんと読めるのはいつのことになるんだか。。。 で、突っ込みはこんな感じ。 電卓の場合yyparse()で無限ループしているのに、crowbarではyyparse()以降の処理に進んでいることは誰も疑問に思わないのかな、 とか p.121 2個目のelse if文の中の処理、  left_val.u.double_value=left_val.u.int_value; eval_binary_double(...) の部分で、left_val.typeは変えずに(INTのまま)格納する共用体にはdouble値を入れている。 その後left_valはそのまま使わず、left_val.u.double_valueのみ使っているので問題にはならいけど、読んでて不安になる。なぜdouble(専用のというか普通)の型のローカル変数を使わないのかな? とか、 p.141の網掛けの以下の記述  a={1,2,3}; a={2,3,4}; のあとの図で、aから出ている矢印が{4,5,6}を指している。 {4,5,6}というのはどこから出てて来た?というか{2,3,4}はどこいった? とか、 p.145のビットフィールド。別にCのプロフェッショナルを目指す本ではないので、ビットフィールドなんて説明が必要な機能なんて使わずにしれっとCRB_Boolean使ったり、そのままズバリintを使えばいいじゃない。 とか、 p.153のダイナミックスコープの説明でnextから辿る場合、 仮に自身と呼び出し元に同じ変数名を定義し、自身内で変数を参照する場合、先に呼び出し元の変数が検知されてしまうので、ダイナミックスコープの動きと違うのでは? とか、 p.178 mbstate_をmemset()等でゼロクリアというmbstate_ってどこから出てきた? って感じです。あと、5章UNICODEについては、組み文字以外にデータ内に入っている(文字送り方向や字形の変更など) 制御コードをどう扱っているのかも書いてあればななあとも思いました。この辺って、例えば1文字のはずなのにデータは100byteとか作れそうで、セキュリティホールになりやすい感じがするので、なぜ問題にならないかを聞きたかったかも。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2127] Re:【質問】lexのトークン判断優先方法(プログラミング言語を作る3章質問その1)
投稿者:mano
2018/04/28 03:42:24

なるほど、わかりました。回答ありがとうございました。 P.39は、正規表現の話だけかと思って(読み返した時に何度も何度も)読み飛ばしていました。この箇所の記述にlexの動きについて書かれていたのですね。失礼しました。 私が誤解していたのは、最初に現れたトークン定義にマッチした場合に、以降のトークン定義を無視するんだろうなぁと思っていたことです。 なので、P.39に記述について+と++のトークンについては、lexの記述では当然に最初に++の定義があってその後に+の定義があるものと思い込んでいました。実際には+と++はマッチする長さが違うのだからlexの記述では、どちらを先に定義しても動きは変わらないのですね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2126] Re:【質問】lexのトークン判断優先方法(プログラミング言語を作る3章質問その1)
投稿者:(ぱ)こと管理人
2018/04/28 00:08:37

>疑問に思ったのは「123.456」を「123」を整数型トークン、「.」を例外トークン、 >「456」の整数型トークンと判断する方法や、「1」,「2」「3」「.」「4」「5」「6」を >全て例外トークンとして扱うこともできそうな気がするのですが、そうならない >理由がわからないためです。 これは、lexがなぜ「123.456」を実数トークンとして解釈するのかがわからない、 ということでしょうか? lexは、「最長一致」でトークンを切り出します。つまり「123」や「1」よりも 「123.456」のほうが長いので、「123.456」は実数トークンとして解釈されます。 それについては本の中ではp.39の一番下の段落で説明しています。 >また、整数トークンと実数トークン、"if"トークンと[ \t]トークンの関係から >推測すると、例えば"for while other if"みたいな命令語もトークンとして >定義できそうですが、その場合に.lファイルでの定義行(ルール順番)によっては >動きが変わるものなのでしょうか? 同じところに書いてある通り、lexはまず「最長一致」でトークンを切り出そうとし、 長さが同じなら、より前の規則、つまり.lファイルでの定義行が上のほうである 規則を優先します。 >整数型の場合「....|"0"」と0をダブルクォーテーションで括っていますが、 >電卓のケースでP.36では、「(....|0|([0-9]....)」と0をダブルクォーテーションで >括っていません。この違いが上の判断条件に影響しているのでしょうか? これはどちらでも同じですね。なぜ片方だけダブルクォートで囲んだのかは、 すみませんがさすがに思い出せません……
[この投稿を含むスレッドを表示] [この投稿を削除]
[2125] 【質問】lexのトークン判断優先方法(プログラミング言語を作る3章質問その1)
投稿者:mano
2018/04/24 07:02:35

たびたびお邪魔します。 3章途中まで読み進めたのですが、わからないところがあったので教えてください。 P.102のcrowbar.lのソースで、59行目で整数型「([1-9][0-9]*)|"0"」、65行目で実数型「0-9]+\.[0-9]+」、78行目で例外「.」のトークンを切り分けているように見えます。 入力が、「123.456」だった場合、なぜ実数型のトークンと判断されるのでしょうか? 疑問に思ったのは「123.456」を「123」を整数型トークン、「.」を例外トークン、「456」の整数型トークンと判断する方法や、「1」,「2」「3」「.」「4」「5」「6」を全て例外トークンとして扱うこともできそうな気がするのですが、そうならない理由がわからないためです。 (済みません。書籍に記述があるのに私が読み飛ばしてしまっているだけかもしれません。) また、整数トークンと実数トークン、"if"トークンと[ \t]トークンの関係から推測すると、例えば"for while other if"みたいな命令語もトークンとして定義できそうですが、その場合に.lファイルでの定義行(ルール順番)によっては動きが変わるものなのでしょうか? 整数型の場合「....|"0"」と0をダブルクォーテーションで括っていますが、電卓のケースでP.36では、「(....|0|([0-9]....)」と0をダブルクォーテーションで括っていません。この違いが上の判断条件に影響しているのでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[2124] ほげは方言
投稿者:ほげ
2018/04/17 23:29:09

「ほげ」を探すとここにたどりつきました。 「ほげ」は大分の方言で、くだらないこと、でたらめなことの意味です。 (特に臼杵地区、若い人は言わなくなった) 【応用】 ほげほっぽ  本当にデタラメな ほげんじょう くだらないことばっかり なお、「熊本弁」と書いていた「ほげる」は、穴があいてしまうこと、「ほぐ」は 穴をあけること であり、別に熊本に限らず、九州全体の共通語です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2123] Re:プログラミング言語を作る2章質問
投稿者:mano
2018/04/16 23:48:04

回答いただきありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2122] Re:プログラミング言語を作る2章質問
投稿者:(ぱ)こと管理人
2018/04/15 23:14:00

>はじめまして。 はじめまして。読んでいただきありがとうございます。 >1点目:P.56で、エラーリカバリの実現として、mycalc.yファイルの書き換えとして >lineのルールにerror CRの並びを追加しています。この通りにしてみたもののmycalcの >動きに変わりはありませんでした。で質問ですが、この修正で意図したエラーリカバリ >とは、本文直前の文の記述がある、「一度のコンパイルでできるだけ多くのエラーを >見つけることではないこと」を指しているのでしょうか?つまり何らかの作用により >yaccが出すメッセージを見やすくする対応のものでしょうか? この修正は、その直前の記述である「ただ、電卓の場合、対話的に使うものですから、 入力ミスで即座に死んでしまうのはユーザにとって不親切でしょう」という 問題に対する対応です。 >それとも、mycalc.lにもともと実装されている、エラー出力lexical error後の >exitを消しても、yyclearin;,yyerrok;の作用でError!Error!Error!の >エラー表示に陥らなくなることを指して、エラーリカバリと呼んでいるのでしょうか? よって、エラー時にexit()しなくなる、というのが目的です。 >2点目:P.74で、括弧対応の話で、私の環境ではmycalc.yの11行目、 >トークンの並びにLP,RPを追加しなくては動きませんでした。 >こちら11行目に追加することが、筆者の意図とした変更なのかよくわかっていません。 すみません、こちらはこれが私の意図した変更ですが、 p.74で「たったこれだけのことで~」と書いておきながら他の修正が要るというのは 問題ですね。正誤表に加えておきました。 ご指摘いただき、ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2121] プログラミング言語を作る2章質問
投稿者:mano
2018/04/14 22:40:48

はじめまして。 「プログラミング言語を作る」の2章まで読んだのですがわからない点が2点ありましたので教えてください。 1点目:P.56で、エラーリカバリの実現として、mycalc.yファイルの書き換えとしてlineのルールにerror CRの並びを追加しています。この通りにしてみたもののmycalcの動きに変わりはありませんでした。で質問ですが、この修正で意図したエラーリカバリとは、本文直前の文の記述がある、「一度のコンパイルでできるだけ多くのエラーを見つけることではないこと」を指しているのでしょうか?つまり何らかの作用によりyaccが出すメッセージを見やすくする対応のものでしょうか? それとも、mycalc.lにもともと実装されている、エラー出力lexical error後のexitを消しても、yyclearin;,yyerrok;の作用でError!Error!Error!のエラー表示に陥らなくなることを指して、エラーリカバリと呼んでいるのでしょうか? つづいて、パーサ自作のプログラムは読み飛ばして(=理解を断念して) 2点目:P.74で、括弧対応の話で、私の環境ではmycalc.yの11行目、トークンの並びにLP,RPを追加しなくては動きませんでした。こちら11行目に追加することが、筆者の意図とした変更なのかよくわかっていません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2120] Re:無題
投稿者:(ぱ)こと管理人
2018/04/14 15:36:56

>あっ、細かいツッコミに対応いただいてすみません...。 >...ついでにもう1つ。 >更新状況の2行目が「2013/3/13」になってます...。 「プログラミング言語を作る」へのリンクをコピペで流用しようとして 日付を直し忘れたようですね。修正しました。 こちらもご指摘ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2119] Re:無題
投稿者:ほげぴよ
2018/04/13 02:24:49

>修正しました。ご指摘ありがとうございました。 あっ、細かいツッコミに対応いただいてすみません...。 ...ついでにもう1つ。 更新状況の2行目が「2013/3/13」になってます...。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2118] Re:無題
投稿者:(ぱ)こと管理人
2018/04/10 23:11:50

>「はてなダイアリーをK.Maebashi's はてなブログに移行しました(20017/09/11)」 > >西暦2万年まではてなブログは存続できるのかな... 私は昔はてなダイアリーにこんなの書いたこともあるのですが。 http://d.hatena.ne.jp/kmaebashi/20100110/p1 今回は自分でやらかしてしまったようです。 修正しました。ご指摘ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2117] 無題
投稿者:ほげぴよ
2018/04/06 23:21:19

「はてなダイアリーをK.Maebashi's はてなブログに移行しました(20017/09/11)」 西暦2万年まではてなブログは存続できるのかな...
[この投稿を含むスレッドを表示] [この投稿を削除]
[2116] Re:無題
投稿者:(ぱ)こと管理人
2018/03/29 02:32:05

>if(line == NULL) は、if(*line == NULL) の間違えではないでしょうか? ご指摘ありがとうございます。確認しましたがその通りだと思います。申し訳ありません。 週末あたりに正誤表に入れておきます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2115] 無題
投稿者:ポインタ完全制覇(第2版)の258ページ106行目if(line == NULL)
2018/03/27 22:15:49

ポインタ完全制覇(第2版)の258ページのread_line()の106行目 if(line == NULL) は、if(*line == NULL) の間違えではないでしょうか? *line = mallocでメモリ割り当てているので、*lineのチェックをするべきではないでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[2114] Re:鬼車をダウンロードのURLはアクセスできない~
投稿者:(ぱ)こと管理人
2018/03/09 00:45:08

>掲題の件ですが、中国からアクセスすると、下記のエラーになりました。 ご指摘ありがとうございます。私のところからも同じエラーになるので、 中国関係なく、鬼車のWebページが消えていますね…… 今はGitHubに移転しているのでしょうか。後ほど(週末ぐらいに)注記を 入れておきます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2113] 鬼車をダウンロードのURLはアクセスできない~
投稿者:土豆
2018/03/06 15:32:38

掲題の件ですが、中国からアクセスすると、下記のエラーになりました。 「ページを表示できません:申し訳ありませんが、アクセスされたページは現在ご利用いただけなくなっています。」
[この投稿を含むスレッドを表示] [この投稿を削除]
[2112] Re:P.124の補足について
投稿者:(ぱ)こと管理人
2018/03/06 01:02:25

>申し訳ありませんが、念のため確認させてください。 >下記の件の結論は、どうなったのでしたっけ? あれ、ここに書き忘れていたようです。 以下の通り正誤表に挙げてありました。 http://kmaebashi.com/webserver/seigo.html#p112
[この投稿を含むスレッドを表示] [この投稿を削除]
[2111] Re:P.124の補足について
投稿者:くまきち
2018/03/04 09:34:41

申し訳ありませんが、念のため確認させてください。 下記の件の結論は、どうなったのでしたっけ? スレッドに残っていないようだったので。 申し訳ありませんが、確認して頂けたらありがたいです。 >>P.124の補足に「GETのパラメタもPOSTのパラメタも、URLデコードしないまま・・・」とありますが、P112の52行目でGETのパラメタはURLデコードされているわけではないのでしょうか? > >すみません、もう記憶はあいまいなのですが、p.112の52行目におけるURLデコードは、 >UTF-8固定でデコードしているところからして、ディレクトリ名やファイル名を >デコードして正しくファイルを開くためのものです(Modoki/0.2で実装したものです)。 > >ここで、クエリストリング部分までデコードしてしまっていますが、 >クエリストリングはUTF-8でエンコードされているとは限らないので、 >これをこの時点でデコードしているのは単純に不具合のように思います。 >すみませんが確認しますので少しお時間をください。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2110] Re:serialVersionUID について
投稿者:(ぱ)こと管理人
2018/02/26 01:28:16

>「//拡張子とContent-Typeの対応表」の部分について、P.70にあるリスト2-11では49行目に > > private static final long serialVersionUID = 1L; > >という行がありますが、A-22にはありません。 >これは、どのような違いがあってのことでしょうか?可能であれば、そもそも >「serialVersionUID 」とは何かも教えて頂けるとありがたいです! serialVersionUIDは、シリアライズするクラスのバージョンを示すためのものです。 Javaだとシリアライズ機能でオブジェクトの内容をファイルに保存したりできますが、 プログラム側のバージョンが上がってクラスにメンバが増えたりした(かつ、そのメンバの 値がデフォルト値ではいけなくて、readObject()によるカスタマイズでも対応しないとか 細かい条件はありますが)場合は、バージョンアップ前のプログラムで保存したデータは バージョン違いで読み込めないということになります。 serialVersionUIDは、シリアライズするときに、そのクラスのバージョンを 示すためのものです(バージョンが違うと、デシリアライズ時にエラーになります)。 指定しなくても構いませんが、これを指定しないと、Eclipseでは警告が出たりします。 「private static final long serialVersionUID = 1L;」と書いておけば 警告は抑止できますが、シリアライズを扱っているわけでもない入門書で 余計なコードを入れるのもよろしくないかと思い、本書のサンプルコードでは 基本これは書いていない――はずなのですが、リスト2-11では、Eclipseに うっかり自動生成されたのが残ってしまったのかと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2109] Re:リストA-19の ”if (ct == null)” について
投稿者:(ぱ)こと管理人
2018/02/26 01:09:23

>これは、”ct == null”の場合は、その値をparameterMapに含めないということでしょうか? >また、これはアップロードファイルなどが指定された場合に起こるものでしょうか? multipart/form-dataのPOSTメソッドでどのようなものが送られてくるのかについては、 p.87のリスト3-4に記載しています。 これを見ると、アップロードファイルが指定された場合に、Content-Typeが 付いていることがわかります。 そして、ファイルアップロードの場合、つまりContent-Typeがnullでない場合には、 その内容をgetParameter()で取得することはできないので、その値をparameterMapに 含めないようにしています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2108] serialVersionUID について
投稿者:くまきち
2018/02/25 22:24:30

『基礎からのWebアプリケーション開発入門』のP.280にあるリストA-22について質問させてください。 「//拡張子とContent-Typeの対応表」の部分について、P.70にあるリスト2-11では49行目に  private static final long serialVersionUID = 1L; という行がありますが、A-22にはありません。 これは、どのような違いがあってのことでしょうか?可能であれば、そもそも「serialVersionUID 」とは何かも教えて頂けるとありがたいです! よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2107] リストA-19の ”if (ct == null)” について
投稿者:くまきち
2018/02/24 22:54:22

『基礎からのWebアプリケーション開発入門』のP.277にあるリストA-19について質問させてください。 38行目に”if (ct == null) {”という行があります。 これは、”ct == null”の場合は、その値をparameterMapに含めないということでしょうか? また、これはアップロードファイルなどが指定された場合に起こるものでしょうか? どこかに書いてあるかもしれないですが、探しきれず質問させて頂きました。。 申し訳ありませんが、よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2106] Re:リストA-13の ”~Impl” について
投稿者:(ぱ)こと管理人
2018/02/18 13:16:18

>せっかく抽象型を用意しているのであれば、ここは抽象型の変数定義にするのではと >思ったのですが、サブクラスの変数定義を使用している理由があれば、 >教えて頂きたいです。 これは私の流儀であって、Javaでの一般的な書き方かというとそうでもないかも しれませんが、私は、Javaでパッケージを分ける規模のプログラムを書くときは、 パッケージ単位でインタフェースと実装を分けるようにしています。 たとえばHttpServletRequestクラスであれば、インタフェースを com.kmaebashi.henacat.servletに、実装を com.kmaebashi.henacat.servletimplに置いています。 そして、HttpServletRequestの利用者(この場合はサーブレットのプログラムを書く人) にはインタフェース側だけをimportしてもらうようにします。Cookieのような 簡単なクラスを除き、インタフェース側のパッケージには実装は置きません。 こうすることで、利用者にとっては、インタフェース側のパッケージは ほぼAPIドキュメントのようなものになりますし、実装が「作りかけ」の 状態でも、利用者側のプログラムのコンパイルまではできるようになったりします。 公式のサーブレットAPI(javax.servlet)も、利用者には(Cookieのような 簡単なクラスを除き)ほぼインタフェースしか公開していないのは、 同じような考え方に基づくものだと私は思っています。 こういう観点でインタフェースと実装のパッケージを分けているわけですが、 そう考えたとき、実装側のパッケージ内でインタフェースの方の型で変数定義 することに、どれほどの意味があるでしょうか。 実装側のパッケージ内では、インタフェースとしては公開していないメソッドや、 publicではないフィールドを参照することもあり得ます。そのたびにダウンキャスト するぐらいなら、最初から実装側のクラスにしておくほうがマシではないかと思います。 servletimplという実装側のパッケージの内部で、むやみに実装隠蔽しようとしても あまり意味はないかと思います。Javaのアクセス制御が、publicもprivateも つけないデフォルト状態で、(C++やC#と違って)パッケージ内公開になっている、 というポリシーも、「パッケージ内での実装隠蔽はあまり意味がない」という 考えに基づくものではないでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2105] リストA-13の ”~Impl” について
投稿者:くまきち
2018/02/18 09:44:47

『基礎からのWebアプリケーション開発入門』のP.267にあるリストA-13について質問させてください。 17行目や19行目の変数定義で”HttpSessionImpl”や”HttpServletResponseImpl”などスーパークラスではなくサブクラスの変数定義をしています。 せっかく抽象型を用意しているのであれば、ここは抽象型の変数定義にするのではと思ったのですが、サブクラスの変数定義を使用している理由があれば、教えて頂きたいです。 よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2104] Re:リストA-13について
投稿者:(ぱ)こと管理人
2018/02/03 22:12:52

>61行目について >誤:data[0] >正:data[i] ご指摘ありがとうございます。 確認しましたが、ご指摘の通りのバグですね。複数件のケースのテストを 怠っていたようです。 正誤表に載せておきます。ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2103] リストA-13について
投稿者:くまきち
2018/02/02 07:30:59

『基礎からのWebアプリケーション開発入門』のP.267にあるリストA-13について質問させてください。 ちゃんと理解できていないかもしれないですが、もしかすると下記の誤りではないでしょうか? 61行目について 誤:data[0] 正:data[i] ご確認、よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2102] Re:第7章のTIPSについて
投稿者:くまきち
2018/01/23 23:36:21

確かに。。 >http://localhost:8080/generatecsv/test.html のように指定すればダウンロードできました。 お騒がせしました! >>ただ、CSVダウンロードだけは、まさに >>>C:\Tomcat8\webapps\generatecsv\test.html >>に置いていたのですがダウンロードできませんでした。。 >>HTTPから指定するのが正式だと思うので、とりあえず気にしないことにしました! > >念のため確認ですが、test.htmlをそこに置いたというのはよいとして、 >参照はどのようにしましたか? > >http://localhost:8080/generatecsv/test.html > >として参照すればダウンロードできると思うのですが、 >もし、HTMLファイルをダブルクリックして開いていたらできませんので、 >一応確認です…… >
[この投稿を含むスレッドを表示] [この投稿を削除]
[2101] Re:第7章のTIPSについて
投稿者:(ぱ)こと管理人
2018/01/18 00:41:05

>ただ、CSVダウンロードだけは、まさに >>C:\Tomcat8\webapps\generatecsv\test.html >に置いていたのですがダウンロードできませんでした。。 >HTTPから指定するのが正式だと思うので、とりあえず気にしないことにしました! 念のため確認ですが、test.htmlをそこに置いたというのはよいとして、 参照はどのようにしましたか? http://localhost:8080/generatecsv/test.html として参照すればダウンロードできると思うのですが、 もし、HTMLファイルをダブルクリックして開いていたらできませんので、 一応確認です……
[この投稿を含むスレッドを表示] [この投稿を削除]
[2100] Re:第7章のTIPSについて
投稿者:くまきち
2018/01/14 06:38:59

ご回答頂き、ありがとうございました。 ただ、CSVダウンロードだけは、まさに >C:\Tomcat8\webapps\generatecsv\test.html に置いていたのですがダウンロードできませんでした。。 HTTPから指定するのが正式だと思うので、とりあえず気にしないことにしました! >>>out.print((char)(ch & 0xffff)); >> >>"& 0xffff"は何をしているのでしょうか?不要な制御情報を削除するなどの >>用途があるのでしょうか? > >ここではint型のchをcharにキャストしているので、結果がcharの >範囲に収まるよう、0xffffとの&を取っています。 >まあ、この場合、直前のif文で負でない保証がされていますし、 >InputStreamReader#read()の戻り値なので、あまり気にする必要は >ないのかもしれませんが。 > >>P.241 リスト7-3 36行目 >>dataOutを多次元配列として定義している理由がよく分かりませんでした。 >>一次元配列でも参照型変数となるので、呼び出され側で値を詰めることができるように >>思います。 > >1次元配列を上位でnewして渡し、呼び出され側で値を詰めてもらう、 >ということはできますが、その場合、newするには呼び出し側でサイズが >わかっている必要があります。ここでは、呼び出し側ではサイズがわからないので、 >呼び出され側でnewした配列を参照型変数に格納して返すには、 >配列の配列(2次元配列)が必要になります。 > >>とありますが、例えばP.226の補足に記載されているような最新投稿を表示する >>ようなパーツが、 >>仮にテキストなどでは無く画像で最新記事を返す形式だったら、 >>XMLHttpRequestとか同一オリジンポリシーなど >>考えなくても良いということでしょうか? > >そうなりますね。(JSONPだってその意味では抜け穴ですが) >現状、例えば怪しいサイトのHTMLが社内イントラの画像をimgタグで抜き取ったとして、 >それを怪しいサーバに送ろうとするとHTML5のCanvasを使わなければならず(たぶん)、 >そちらでは別のオリジンから持ってきた画像はデータ化したりできないようにする等 >対策はされていると思いますけれども。 > >>P.248 注3 >>csvダウンロードできませんでした。リンクを、 >> >>><a href="/generatecsv/GenerateCSV">CSVダウンロード</a> > >HTMLファイルはどこに置きましたか? >ここでは、 >C:\Tomcat8\webapps\generatecsv\test.html >のような場所に置いてあることを想定しています。 > >実際にアプリケーションを開発する際も、HTMLなりJSPなりを >GenerateCSVと同じTomcatでホストしていれば、/generatecsv/GenerateCSVで >見えると思います。 > >>P.249 リスト7-8 5行目 >>下記が誤りのように思います。 >> 誤:"http://localhost/downloadtest/file.mp4; >> 正:"http://localhost/downloadtest/file.mp4"; > >申し訳ありません。これは間違いですね。 >正誤表に載せておきます。 >
[この投稿を含むスレッドを表示] [この投稿を削除]
[2099] Re:第7章のTIPSについて
投稿者:(ぱ)こと管理人
2018/01/11 00:14:06

>>out.print((char)(ch & 0xffff)); > >"& 0xffff"は何をしているのでしょうか?不要な制御情報を削除するなどの >用途があるのでしょうか? ここではint型のchをcharにキャストしているので、結果がcharの 範囲に収まるよう、0xffffとの&を取っています。 まあ、この場合、直前のif文で負でない保証がされていますし、 InputStreamReader#read()の戻り値なので、あまり気にする必要は ないのかもしれませんが。 >P.241 リスト7-3 36行目 >dataOutを多次元配列として定義している理由がよく分かりませんでした。 >一次元配列でも参照型変数となるので、呼び出され側で値を詰めることができるように >思います。 1次元配列を上位でnewして渡し、呼び出され側で値を詰めてもらう、 ということはできますが、その場合、newするには呼び出し側でサイズが わかっている必要があります。ここでは、呼び出し側ではサイズがわからないので、 呼び出され側でnewした配列を参照型変数に格納して返すには、 配列の配列(2次元配列)が必要になります。 >とありますが、例えばP.226の補足に記載されているような最新投稿を表示する >ようなパーツが、 >仮にテキストなどでは無く画像で最新記事を返す形式だったら、 >XMLHttpRequestとか同一オリジンポリシーなど >考えなくても良いということでしょうか? そうなりますね。(JSONPだってその意味では抜け穴ですが) 現状、例えば怪しいサイトのHTMLが社内イントラの画像をimgタグで抜き取ったとして、 それを怪しいサーバに送ろうとするとHTML5のCanvasを使わなければならず(たぶん)、 そちらでは別のオリジンから持ってきた画像はデータ化したりできないようにする等 対策はされていると思いますけれども。 >P.248 注3 >csvダウンロードできませんでした。リンクを、 > >><a href="/generatecsv/GenerateCSV">CSVダウンロード</a> HTMLファイルはどこに置きましたか? ここでは、 C:\Tomcat8\webapps\generatecsv\test.html のような場所に置いてあることを想定しています。 実際にアプリケーションを開発する際も、HTMLなりJSPなりを GenerateCSVと同じTomcatでホストしていれば、/generatecsv/GenerateCSVで 見えると思います。 >P.249 リスト7-8 5行目 >下記が誤りのように思います。 > 誤:"http://localhost/downloadtest/file.mp4; > 正:"http://localhost/downloadtest/file.mp4"; 申し訳ありません。これは間違いですね。 正誤表に載せておきます。
[この投稿を含むスレッドを表示] [この投稿を削除]