■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50

monazilla

321 :ドメイントレヤ :2001/02/19(月) 22:06
負荷をちょっとでも軽減するために
http://salad.2ch.net/bbstable.html を変換して、
http://monazilla.org/board.txt に置いとくとか。

322 :デフォルトの名無しさん :2001/02/19(月) 22:21
WinInetはnバイト目以降を取得とかってできるの?
CreateFile, ReadFileでも試してみようかな。

323 :デフォルトの名無しさん :2001/02/19(月) 22:37
>>314
2chブラウザの方でしたか!
ありがたや・・・

324 :デフォルトの名無しさん :2001/02/19(月) 22:41
ボード一覧は結局どれ?
http://salad.2ch.net/bbstable.html なくなった??
http://www.2ch.net/bbstable.html こっち?
http://www2.ocn.ne.jp/~luckland/text/board.txt オフィシャル?
http://www.2ch.net/board.txt 古い!
http://www.2ch.net/bbsmenu.html 取得面倒?


325 :ヒロユキ@ギコナビ :2001/02/19(月) 23:16
ちょっとヘコんだけど、書きに来ました。

>>313
>エクスプローラの詳細表示で
>[名前|サイズ|種類|更新日時]
>これを自由に入れ替える機能。

勘違いかもしれないですけど、
TListViewのFullDragをTrueじゃだめかな?

>>322
WinInetって自分で何処までイジれるのか分からないので、
はずしているかも知れませんが、ヘッダにRange: bytes=xxx
ってすると差分取れます。
HTTPの本を会社に置きっぱなしなので、間違ってるかも。
「HTTP詳解」っていう本だったかな?
あと、インターネットテクノロジ2001年1月号にも、HTTPのことが
ちらっと載っていたような気がします。(これも会社に置きっぱなし)


326 :フッサール少佐 :2001/02/19(月) 23:21
>>302
フム、なにやら板名だけじゃかぶっている所があるそうなんで、
そっちの方が安全カモ。

>>303
実はあのタブが好きなんだな。
あと過去ログようのタブが必要と見た。
別にお気に入りで過去ログフォルダを作ってもいいんだけど。

>>322
たしか出来たはず。

327 :デフォルトの名無しさん :2001/02/19(月) 23:27
>ヒロユキ
へこまんでい〜よ〜。
暇なときでいいから、またアドバイスに来てちょ。

ほんでもって、HTTP1.1日本語訳へのリンク
少し古いのと若干わかりにくい部分があるので、rfc2616の原文も見るべし
http://www.geocities.co.jp/SiliconValley-PaloAlto/5694/rfc/rfc2068-ja.html

328 :フッサール少佐 :2001/02/19(月) 23:31
>>322
http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page14.html
で、どう?
ヒロユキ@ギコナビの方法でもOK

329 :フッサール少佐 :2001/02/19(月) 23:31
>>322
http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page14.html
で、どう?
ヒロユキ@ギコナビの方法でもOK

330 :フッサール少佐 :2001/02/19(月) 23:32
ありゃ?2重火気粉スマソ

331 :デフォルトの名無しさん :2001/02/19(月) 23:36
ヒロユキさんや、幸運の国さん、2chブラウザの作者さんらの
積極的な参加がこのプロジェクトを活気付けていると私は思います。
しょーもないあおりは無視で行きましょう。

332 :フッサール少佐 :2001/02/19(月) 23:43
>>319
全く同感。
HEADメソッドでチェックして、更新済みのものは差分取得がベストかな。
あるいは、datディレクトリの一覧を取得して日付で更新をチェックするとか。
Perlは重いっす。

333 :フッサール少佐 :2001/02/19(月) 23:48
>>308
ListViewのヘッダーカラムのDCを取得してそのCanvasにオーナードローすれば、OK。

334 :ヒロユキ@ギコナビ :2001/02/20(火) 00:06
>>332
If-Modified-Since:すると、HEADとらなくても、直接GETでOKです。
更新されていなければ、更新されていないコード(304)が帰ってくるので、
未更新が検出できます。


335 :デフォルトの名無しさん :2001/02/20(火) 00:08
monazillaのページ見たけど、
どちらかと言うとmozillaよりGNU-2chといった感じだなァ…。

いや、なんとなくそー思っただけ。

336 :フッサール少佐 :2001/02/20(火) 00:29
>>334
おお、それはいい事を聞いた。マジメにRFC読んでみるかな。

337 :314 :2001/02/20(火) 00:44
>>334
更新検出なら、dat/ディレクトリ一覧の.datファイルのタイムスタンプを見ればわかるよ。
今、俺も実装してるところ。
subject.txtとdat/の2回アクセスしないといけないのが難点。

338 :デフォルトの名無しさん :2001/02/20(火) 00:55
でも、tako鯖はdat/を読めないので注意してね。

339 :デフォルトの名無しさん :2001/02/20(火) 01:02
>GET /tech/dat/?M=D HTTP/1.0
ね。

それと、
>GET /tech/dat/981726544.dat HTTP/1.0
>Host: piza.2ch.net
>Range: bytes=62298-
>If-Modified-Since: Thu, 15 Feb 2001 09:50:45 GMT
>Connection: Keep-Alive
>
↑これ(実際に送った例)をレスポンスを待たないで、
一括してリクエストするとメチャメチャ早いよ。
parseがかなり面倒だけどね。
以上、時々だけ名乗る98でした。

340 :デフォルトの名無しさん :2001/02/20(火) 03:37
>>339
Keep-Aliveにするといつ終ったか分かんなくない?
parseしつつ表示ってんだったらいいだろうけど、
それって結構面倒な気がする。
つか、Keep-Alive にしてリクエスト送りまくるって話なんかな。

341 :turbo type D@monazilla.org(藁 :2001/02/20(火) 09:52
>>ヒロユキ
うん、へこまなくてもいー。いー。

>>324
http://www.2ch.net/bbstable.html
http://www.2ch.net/bbsmenu.html
の二つは解析方法は共通だよ。
他のところはカテゴリが無くてちょっとイマイチかモナー。

>>333少佐('w')ゞ
ありがとうゴザイマフ
しかしAPI直叩きで出来る(とオモワレ)のを
オナドローするのはちょぴ嫌でございます。

なんかめちゃくちゃ詳しい方々が集まってきてますね。

342 :turbo type D@monazilla.org(藁 :2001/02/20(火) 10:26
しつもーん。
http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page2.html
をDelphiに書き直した。

uses WinInetを加えて

procedure TForm1.Button1Click(Sender: TObject);
var
 hSession: HINTERNET;
 hService: HINTERNET;
 lpBuffer: array[0..1024+1] of Char;
 dwBytesRead: DWORD;
begin
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
   while true do
   begin
    dwBytesRead := 1024;
    InternetReadFile( hService, @lpBuffer, 1024, dwBytesRead );
    if dwBytesRead = 0 then break;
    lpBuffer[dwBytesRead] := #0;
    Memo1.Lines.Add( lpBuffer );
   end; //while
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

しかし、普通に書き直した"INTERNET_OPEN_TYPE_DIRECT"では読み込まない
"INTERNET_OPEN_TYPE_PRECONFIG"にしたら読み込んだ。なぜ?

Indyやめて、WinInetにしようかしら?( w ;)
要望が多ければそうする。

343 :turbo type D@monazilla.org(藁 :2001/02/20(火) 17:07
>>342
よくわからないけど
プロキシの問題だろうか。
http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page9.html

WinInetのHTTPページの
Page2-6,8はPascalに移植ったので
誰か必要なら逝ってくれ。

344 :デフォルトの名無しさん :2001/02/20(火) 17:31
もしかしてあぼーんすると.datのファイルサイズ変わっちゃう?
だとすると差分の取得がおかしくなりそう。

345 :turbo type D@monazilla.org(藁 :2001/02/20(火) 17:57
あぼーん、について教えて。

本当に全くわからない。(藁

かちゅーしゃ使ってるのにね。

346 :デフォルトの名無しさん :2001/02/20(火) 18:12
>>344
かわるよ。そこがこの手のツールが各自工夫するところ。
さらにあぼーんには、「ノーマルあぼーん」(全フィールドがあぼーんになる)
と、「サイレントあぼーん」(datの行ごと削除、痕跡が残らない)があります。
固定長あぼーん(余ったところを空白などで埋める)の要望もあるが、
マイノリティなツールのために2ch側に対応を求めるのは本末転倒だと思います。
現在、各ツールののあぼーんへの対処は、
1.あぼーんを検出したら、dat全部読み直し
2.あぼーんを検出したら、少し前から読み直して、テキスト比較で前回の
 バイトオフセットを探して読み込み
3.datの差分読み込みはしない
あたりになっております。あぼーん検出は保存位置から読み出して、そこが
行頭か否かで判断かな?
ちなみに、俺(2chブラウザ)は3。差分読み込みやる気なし。
dat読みは全読み込みのときのみ。


347 :デフォルトの名無しさん :2001/02/20(火) 18:39
WinInetで.datファイルを10分割して同時にダウソしたら
超高速ダウソできる???

348 :turbo type D@monazilla.org(藁 :2001/02/20(火) 19:48
アプしました。
モナプロ〜ラ〜もWinInetに変えてしまったので

多分コンポーネントのインストは一切必要なく
IE4以上、D4/D5環境にてコンパイルできるようになった。

http://www.geocities.co.jp/SiliconValley-Oakland/9028/src/monaplorer.lzh

どの板でもボード一覧を取得できるようになった。

ネットに接続していない状態で動かしても動かないカモ。

でも、オレがタコなのでメモリリークしているみたいだ。
メモリクバグを発見する方法知っている人、教えて。

349 :turbo type D@monazilla.org(藁 :2001/02/20(火) 19:50
>>ボード一覧
スレ一覧の間違い。

腹減った。

350 :デフォルトの名無しさん :2001/02/20(火) 20:18
>でも、オレがタコなのでメモリリークしているみたいだ。
>メモリクバグを発見する方法知っている人、教えて。
アプリ終了時にメモリリークの個数を報告するユニット。
http://www.sakaki.keiaikai.or.jp/convroom/webconv.exe/read?No=9666&Response_Root=9632


351 :フッサール少佐 :2001/02/20(火) 22:05
>>348
オレは
http://www.yks.ne.jp/~hori/MemCheck.html
これを使ってるよん。かなり便利。

352 :デフォルトの名無しさん :2001/02/21(水) 00:34
更新チェック&差分ダウンロードできるなら巡回機能付けてね

353 :フッサール少佐 :2001/02/21(水) 00:46
>>302
ログはドメイン名を元にするようにした。
例えば、yahoo板はこんな感じ。
\logs\salad.2ch.net.yahoo\977080207.dat
これならかぶらんだろう。

354 :フッサール少佐 :2001/02/21(水) 00:48
>>352
無ければ、自分で作るのだ。それがオープンソースの醍醐味でもある。
つーわけで、自分で作れ。Delphi買ってコイ。

355 :デフォルトの名無しさん :2001/02/21(水) 01:05
同意。
&nbsp変換もそうだが、このスレに「○○きぼーん」は良くない。
プロトタイプのコードでも作って、導入を促すようにすべき。

356 :355 :2001/02/21(水) 01:07
最後の;つけなかったのに、nbspが変換されちった。

357 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:42
確かに、実装困難なものを
現時点で、きぼーん、されてもつらいものがある。
差分ダウソ&更新はまーだ先ね。マターリいこうぜ。

メニュー項目くらい
誰か案をだしてほしい。

>>356オレもおろろいた。

>>350&少佐、
メモリク情報サンクス。

リクしているかどうかも不確かながらデバッグにとりかかる。

自分で無理だったら
Tree型Dataの破棄と更新を報告させてもらうね。


358 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:45
さて、書記さんも更新ネタがなさそうなので
昨日まとめた、WinInetのDelphi仕様コード公開。
連続カキコすまそね。

全コードusesにWinInetを追加するだけで動作するはず。

INTERNET_OPEN_TYPE_DIRECT

INTERNET_OPEN_TYPE_PRECONFIG
は適当に置き換えてくれ。MemoとかButtonとかも適当に。




359 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:46
//HTML/テキストファイルをHTTPで読み取る
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page2.html
//より移植
procedure TForm1.Button1Click(Sender: TObject);
var
 hSession: HINTERNET;
 hService: HINTERNET;
 lpBuffer: array[0..1024+1] of Char;
 dwBytesRead: DWORD;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
   while true do
   begin
    dwBytesRead := 1024;
    InternetReadFile( hService, @lpBuffer, 1024, dwBytesRead );
    if dwBytesRead = 0 then break;
    lpBuffer[dwBytesRead] := #0;
    Memo1.Lines.Add( lpBuffer );
   end; //while
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

360 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:47
//HTML/テキストファイルをHTTPで読み取りファイルに書き出す
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page3.html
//より移植
procedure TForm1.Button1Click(Sender: TObject);
var
 fp: TextFile;
 hSession: HINTERNET;
 hService: HINTERNET;
 lpBuffer: array[0..1024+1] of Char;
 dwBytesRead: DWORD;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0 );
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
  begin
   AssignFile(fp, Edit2.Text);
   Rewrite(fp);
   while true do
   begin
    lpBuffer := '';
    {↑C++ではchar lpBuffer[1024+1]と
      変数確保されていると同時に初期化されているので
      Delphiでも初期化する}
    dwBytesRead := 1024;
    InternetReadFile( hService, @lpBuffer, 1024, dwBytesRead );
    if dwBytesRead = 0 then break;
    Write(fp, lpBuffer: dwBytesRead);
    {↑dwBytesRead=StrLen(@lpBuffer)になっている}
   end; //while
   CloseFile(fp);
  end;
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

361 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:47
//HTML/テキストファイルをHTTPで読み取りファイルに書き出す
//パフォーマンスがあがっているらしい
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page4.html
//より移植
procedure TForm1.Button1Click(Sender: TObject);
var
 fp: TextFile;
 hSession: HINTERNET;
 hService: HINTERNET;
 lpBuffer: PChar;
 dwBytesAvailable, dwBytesRead: DWORD;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0 );
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
  begin
   AssignFile(fp, Edit2.Text);
   Rewrite(fp);

   InternetQueryDataAvailable( hService, dwBytesAvailable, 0, 0 );
   GetMem(lpBuffer, dwBytesAvailable+1);
   InternetReadFile( hService, lpBuffer, dwBytesAvailable, dwBytesRead );
   Write(fp, lpBuffer: dwBytesRead);
   FreeMem(lpBuffer);

   CloseFile(fp);
  end;
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

362 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:48
//ネット上のファイル情報を得る
//サーバーに依存する
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page5.html
//より移植
procedure TForm1.Button1Click(Sender: TObject);
var
 hSession: HINTERNET;
 hService: HINTERNET;
 ReceiveBuffer: array[0..255] of Char;
 dwSize, Reserved: DWORD;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0 );
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
  begin
   ReceiveBuffer := '';
   dwSize := sizeof(ReceiveBuffer);
   Reserved := 0;
   HttpQueryInfo(hService, HTTP_QUERY_RAW_HEADERS_CRLF, @ReceiveBuffer, dwSize, Reserved);
   Memo1.Lines.Add( String(ReceiveBuffer) );
  end;
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

363 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:48
//ファイルの作成日、サイズを得る
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page6.html
//より移植
procedure TForm1.Button1Click(Sender: TObject);
var
 hSession: HINTERNET;
 hService: HINTERNET;
 LastModified: SYSTEMTIME;
 FileSize: Longint;
 dwSize, Reserved: DWORD;
 ft1, ft2: FILETIME;
 t: SYSTEMTIME;
 buf: String;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0 );
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
  begin
   dwSize := sizeof(LastModified);
   Reserved := 0;
   HttpQueryInfo(hService, HTTP_QUERY_LAST_MODIFIED or HTTP_QUERY_FLAG_SYSTEMTIME,
               @LastModified, dwSize, Reserved);
   dwSize := sizeof(FileSize);
   Reserved := 0;
   HttpQueryInfo(hService, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER,
               @FileSize, dwSize, Reserved);

   SystemTimeToFileTime( LastModified, ft2 );
   FileTimeToLocalFileTime( ft2, ft1 ); //かなり適当
   FileTimeToSystemTime( ft1, t );
   buf := Format('作成日:%4d/%02d/%02d %2d:%02d:%02d サイズ:%dバイト',
          [t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond, FileSize]);
   Memo1.Lines.Add( buf );
  end;
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

364 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:49
//ヘッダ情報を追加する
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page7.html
//より移植したけど、何がどうなっているのか理解してません。
procedure TForm1.Button1Click(Sender: TObject);
var
hSession: HINTERNET;
hService: HINTERNET;
szHead: String;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0 );
hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
if Assigned( hSession ) then
begin
szHead := 'Accept:*/*'+#13#10#13#10;
SetLength( szHead, Length(szHead) );
hService := InternetOpenUrl( hSession, PChar(Edit1.Text), PChar(szHead), 0, 0, 0);

if Assigned( hService ) then
begin
//....
end;
InternetCloseHandle( hService );
end;
InternetCloseHandle( hSession );
end;

365 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:49
インデントミスったので、再掲

//ヘッダ情報を追加する
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page7.html
//より移植したけど、何がどうなっているのか理解してません。
procedure TForm1.Button1Click(Sender: TObject);
var
 hSession: HINTERNET;
 hService: HINTERNET;
 szHead: String;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0 );
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
 if Assigned( hSession ) then
 begin
  szHead := 'Accept:*/*'+#13#10#13#10;
  SetLength( szHead, Length(szHead) );
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), PChar(szHead), 0, 0, 0);

  if Assigned( hService ) then
  begin
   //....
  end;
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

366 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:50
//インターネット接続が出来るかどうか調べる
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page8.html
//より移植
procedure TForm1.Button1Click(Sender: TObject);
begin
 if InternetAttemptConnect(0)<>0 then
 begin
  ShowMessage('インターネットに接続できていません');
 end;
end;

367 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:51
ヲワリ。

では本日も四露氏苦

368 :turbo type D@monazilla.org(藁 :2001/02/21(水) 10:56
>>350
>>351
これって同じ作者なのかな?
どちらも試したがメモリリーク起きてませんでした!

d( °w )
いー感じ♪

369 :turbo type D@monazilla.org(藁 :2001/02/21(水) 12:08
書記さん、monazilla.org(藁 のダウンロードの説明の所を
こんな風に修正してくれると、わかりやすいかな。

> アップロードしてあるファイルをダウンロードする方法
>
> Monazilla Studio をダウンロードする。
> 適当なフォルダで解凍する。
> index.html を開く。
> ダウンロードをクリック。
> 入ってよしボタンをクリック。
 すると シリコンバレーオークランド通り/9028 monazilla が開く
 アップされたソースは[src]フォルダに入っているので
 [src]ボタンを押す
> するとアップされたソースの一覧が出てくるのでダウソしたいファイル名の横のほ
> うにある 表示 ってとこをクリックする。
>
> 以上

370 :turbo type D@monazilla.org(藁 :2001/02/21(水) 19:24
全然ヵキコがない。!

ウツダシノウ

371 :turbo type D@monazilla.org(藁 :2001/02/21(水) 19:35
>/* 書記さんは会社から 2チャンへの書き込みがなぜかできないのでロムってます、すんませんー */

そうですか。
仕事していないのは俺くらいですか。(´∀`)

372 :デフォルトの名無しさん :2001/02/21(水) 19:47
>少佐
TWebBrowserで遅い問題は解決したでしょうか?
もしかしたら文字列連結の時間が原因かもしれません。
・・・外してたらごめんなさい。
BCBの場合、単純にAnsiStringを数百回以上連結すると、
その部分で異常に時間を食います。
std::stringでreserve()すると、(その部分は)嘘みたいに高速になります。
でも、実はAnsiStringでcapacityを増やす方法を知らないんですが。

373 :turbo type D@monazilla.org(藁 :2001/02/21(水) 20:27
モナーアイコンを作成してくれない?誰か。

374 :turbo type D@monazilla.org(藁 :2001/02/21(水) 20:33
あと、32x32のaviもキボーン。
monazilla.org公式っていうのがいいなあ。

いま、かちゅしゃのaviで試しているから、
なんか悲しくて切なくて生産性が下がっています(藁

アイコンデザイン探しにモナー板逝ったら
藁ってしまうので仕事中にはとても探せないや。

375 :Dax :2001/02/21(水) 22:29
またまた Delphiで申し訳ないんですが
板一覧をつくることに特化したクラス、
「ホットゾヌ」をアップしました。

インターネット接続は
「Wininet」「ICS(HttpCli)」「NMHTTP」「Indy(IdHTTP)」の
4種類に対応し別々のユニットで用意しました。
使い方などは HTMLを用意します。

http://www.geocities.co.jp/SiliconValley-Oakland/9028/src/hotzonu_010.lzh

376 :書記さん :2001/02/21(水) 23:40
>>369
修正しました!
ありがとうございます。確かにわかりにくかったですね。
ですのでさらに画像も入れてみました。

>>370
今日は一時アクセスできなかったです。>2ch
うちだけかな?


377 :turbotypeD@モナぢら :2001/02/22(木) 00:03
>>375
おぉ。ぞくぞくと開発者が!
しかも別ユニットまで!
勢いでレス一覧までやってくださらぬか、(w
ってそれは贅沢かな。

別ユニット的アプローチはいずれ参考にさせていただきます。

モナプローラではすでにスレ一覧まではやってしまったしなあ。

次はWebBrowserを簡単に作れるクラス/ユニット実装予定(は未定)
かちゅ〜しゃの1タブごとに[戻る]ボタン機能がついた
イメージで作ってます。

378 :turbotypeD@モナぢら :2001/02/22(木) 00:09
>>375
おぉ。ぞくぞくと開発者が!
しかもコンポ別ユニットまで!
勢いでレス一覧までやってくださらぬか、(w
ってそれは贅沢かな。

別ユニット的アプローチはいずれ参考にさせていただきます。

モナプローラではすでにスレ一覧まではやってしまったしなあ。

次はWebBrowserを簡単に作れるクラス/ユニット実装予定(は未定)
かちゅ〜しゃの1タブごとに[戻る]ボタン機能がついた
イメージで作ってます。

>>書記さんいつもありがとう

379 :turbotypeD@モナぢら :2001/02/22(木) 00:09
2重火器子スマソ

380 :デフォルトの名無しさん :2001/02/22(木) 00:12
>>340
Content-Lengthを参照する以外に終端を知る方法は
なかったと思う。<Keep-Alive

381 :フッサール少佐 :2001/02/22(木) 00:35
>>372
>TWebBrowserで遅い問題は解決したでしょうか?

全く解決するめどは立っていないが、別の方法を使うことにより
逃げることにした。

>もしかしたら文字列連結の時間が原因かもしれません。

JavaもStringの文字の連結は注意だな。ちなみにStringBufferを使う。

>でも、実はAnsiStringでcapacityを増やす方法を知らないんですが。

Delphiの場合は、SetLengthかな。
遅い原因はそれもあるのだが、innerHTMLを使っているということであろう。
Writeで追加書き込みしていけばそこそこ速いのだが、画面クリアの仕方が
分からんのだ。つーか、TWebBrowserとかCOMとかは素人だったり…。


382 :turbo type D@monazilla.org(藁 :2001/02/22(木) 10:22
下げるわけにもいかんのでage

383 :デフォルトの名無しさん :2001/02/22(木) 10:30
上げるわけにもいかんのでsage

384 :turbo type D@monazilla.org(藁 :2001/02/22(木) 11:48
いわゆるタブブラウザやかちゅーしゃなどでは
WebBrowser部分はWebBrowserのインスタンスを沢山作って
いるのでしょうか?

385 :デフォルトの名無しさん :2001/02/22(木) 13:11
http://yasai.2ch.net/test/read.cgi?bbs=win&key=982224259
なんだか、かちゅーしゃの作者様の心がゆらいでらっしゃる。
協力してくれるかもage


386 :デフォルトの名無しさん :2001/02/22(木) 13:12
かちゅーしゃは複数のブラウザインスタンスをつくってるようです。


387 :turbo type D@monazilla.org(藁 :2001/02/22(木) 14:35
を、一応レス閲覧コードが書けた。(アプしてないけど)
初めて動作させるけどどきどきするなあ。



388 :turbo type D@monazilla.org(藁 :2001/02/22(木) 14:39
あ、まだメソッドを呼ぶActionが無かった。あせるな>ジブン

さて、今日もコード公開
誰でも作れるけど、誰かが作っていたら楽な関数
////////////////////////////////////////////////////////////
{  DataTimeToFmt2ch
  Fmt2chToDateTime
// 名前:turbo type D@monazilla.org(藁
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
聞いてアロエリーナ ちょっと言いにくいんだけど
聞いてアロエリーナ

ココカラノコードハ: 2ch形式の日付文字列"2001/02/09(金) 22:49"を
      TDateTimeと相互変換する
コウシン日ワ:  2001/02/22
ホカニ逝ットクコトハ:なにもなし

聞いてくれてありがと アロエリーナ♪
\________ _______/
         |/
         ∧_∧
   Ψ    (∀・ )
   □    (∩∩ノ)
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ }
const DayOfWeekJP: array[1..7] of String = ('日','月','火','水','木','金','土');

function DateTimeToFmt2ch(DateTime: TDateTime): String;
var
 Year, Month, Day: word;
 Hour, Min, Sec, MSec: word;
begin
 DecodeDate(DateTime, Year, Month, Day);
 DecodeTime(DateTime, Hour, Min, Sec, MSec);

 Result := IntToStr(Year) + '/' +
      Format('%.2d', [Month]) + '/' +
      Format('%.2d', [Day]) + '(' +
      DayOfWeekJP[DayOfWeek(DateTime)] + ') ' +
      Format('%.2d', [Hour]) + ':' +
      Format('%.2d', [Min]);
end;

function Fmt2chToDateTime(Fmt2ch: String): TDateTime;
var
 Year, Month, Day: word;
 Hour, Min, Sec, MSec: word;
begin

 try
  Year  := StrToInt(Copy(Fmt2ch, 1, 4));
  Month  := StrToInt(Copy(Fmt2ch, 6, 2));
  Day   := StrToInt(Copy(Fmt2ch, 9, 2));

  Hour  := StrToInt(Copy(Fmt2ch,16, 2));
  Min   := StrToInt(Copy(Fmt2ch,19, 2));
  Sec := 0;
  MSec:= 0;

  Result := EncodeDate(Year, Month, Day)
        + EncodeTime(Hour, Min, Sec, MSec);
 except
  raise ENichError.Create('日付変換が正しくねえぞ鰓(゚Д゚)ゴルァ');
 end;
end;
////////////////////////////////////////////////////////////

389 :turbo type D@monazilla.org(藁 :2001/02/22(木) 15:31
>>386ども。

よし。レス内容データ読み込みだけは確認出来た。

あとはどのようにしてWebBrowserに読ませようか
ファイルに落としてからNavigateするのはわかるが
直接Documentに落とす方法はさっぱりわからない。
(次からはTWebBrower組み込むからD5専用な。)
誰かオシエレ(態度デカ!)

現在はモナヂラスレの内容を読むために
単にhttp://piza.2ch.net/tech/dat/981726544.dat
を読んでいるのだがこれでいいのか?
read.cgiには迷惑かけずに最新情報を読むことになってる?


390 :turbo type D@monazilla.org(藁 :2001/02/22(木) 15:34
AVIファイルの作り方おしえてくれい。

391 :gikozilla :2001/02/22(木) 16:53
>>390
これはどう?使ったことないけど、、、
http://www.emurasoft.com/jp/emavi/index.htm

392 :turbo type D@monazilla.org(藁 :2001/02/22(木) 17:18
ふらりと見に行ったWin板で
"新2ちゃんねる用ブラウザ"
ってのが出てて、しかもめちゃ荒らされている...
http://yasai.2ch.net/test/read.cgi?bbs=win&key=982224259

ああ、哀れ

393 :turbo type D@monazilla.org(藁 :2001/02/22(木) 17:20
スレ先間違えた。
俺の方が憐れだ、宇津田ヒカル
http://yasai.2ch.net/test/read.cgi?bbs=win&key=982429839

>>391、どもアリガト

394 :turbo type D@monazilla.org(藁 :2001/02/22(木) 17:53
♪聞いてアロエリーナ ちょっと言いにくいんだけど
 聞いてアロエリーナ

   >>391
   すごく使い勝手わるいよ。 

  聞いてくれてあーりがと アロエリーナ♪
\______ ___________/
.          |/

  (○)      ∧_∧
  ヾ|〃     (∀・ ,,,)∩゛
   □.     (∩∩ , ⌒つ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄




395 :turbo type D@もなヂ :2001/02/22(木) 18:36
これがいいかも。
http://www.vector.co.jp/soft/win95/art/se169298.html

396 :Dax :2001/02/22(木) 22:21
>>388
ナイス!
汎用関数ライブラリつくりましょっか?

397 :119 :2001/02/22(木) 22:48
type
 TNichDownloadEvent = procedure(Sender: TObject; Index1, Index2: Integer)
  of object; // Sender.Lines[Index1..Index2]をダウンロードした
 TNichDownloadableObject = class
 public
  property Url: String;
  proeprty Lines: TStrings; // TStringsで扱ってくれると楽チンなんだが...
 
  proeprty OnStartDownload: TNotifyEvent;
  property OnProgressDownload: TNotifyEvent;
  property OnFinishDownload: TNotifyEvent;
 end;

 TNichDownloadType = (dtAll, dtDiff); // 全て取得・差分のみ取得

 // 抽象ダウンローダ
 TNichCustomDownloader = class
 protected
  FList: TObjectDeque; // TNichDownloadableObjectのインスタンスを保持
 public
 property UseProxy: Boolean;
  property Proxy: String; // '0.0.0.0:8080'という形式が楽チン

  procedure StartDownload(Nich: TNichDownloadableObject;
   Whole: Boolean = False; // 全て取得(FALSEなら更新チェック&差分取得)
   Deferred: Boolean = False // 順番を後回しにする
    ); virtual; abstract;
  procedure CancelDownload(Url: String);

  proeprty OnStartDownload: TNotifyEvent;
  property OnProgressDownload: TNotifyEvent;
  property OnFinishDownload: TNotifyEvent;
 end;

 // ローカルキャッシュダウンローダ
 TNichCachedDownloader = class
 public
  property Size: Integer; // カレントキャッシュサイズ
  property MaxSize: Integer; // 最大キャッシュサイズ
  property Directory: String;
   // キャッシュディレクトリ
   // こればっかりはレジストリで設定すべき
  procedure Clean(LeftSizeMB: Integer; option...); // キャッシュをクリア
  procedure Write(nich: TNichDownloadableObject);
 end;

 // HTTPダウンローダ
 TNichHttpDownloader = class
 public
 end;

 // FTPダウンローダはいらないか...

 // 2chダウンローダ
 // やることはcache&httpからLines:TStringsへダウンロードするだけ。
 // Linesの解析は委譲元(nich: TDownloadableObject)が行う。
 // 開発初期段階はシングルスレッド版(StartDownloadを呼び、ダウンロード完了後に制御を戻す。
 //   途中でApplication.ProcessMessagesを呼ぶかもしれない)
 // 差分取得は全て取得してしまう。
 // 完成したら、順次マルチスレッド・差分取得を実装していく
 TNichDownloader = class
 protected
  cache: TNichCacheDownloader;
  http: TNichHttpDownloader;
 public
  procedure StartDownload(Nich: TNichDownloadableObject;
   Whole: Boolean; Deferred: Boolean);
  begin
   // cacheとhttpを組み合わせてダウンロード
   cache.StartDownload(Lines, Url, Whole, Deferred); // こっちはその場で復帰するはず
   http.StartDownload(Lines, Url, Whole, Deferred); // こっちはスレッドでダウンロードを開始するだけ
   // nichのイベントの発生のさせ方は一考の余地あり
   // ダウンロードが終わったらキャッシュする。
   cache.Write(Nich);
  end;
 end;

398 :119 :2001/02/22(木) 22:53
例によって中身のないマルチスレッダブル(??)HTTP・キャッシュ
統合ダウンロードクラスを書いてみた。
HotZonuも良いがダウンロード・キャッシュ・プロクシ等の
コード・設定があちこちに散らばるのは面倒なので、
データをTStringsかstreamに統一して、
ダウンローダを板・スレリストクラスから分離すべきだと思う。
あとModel, Viewも意識的に切り分けないとね。
なんていってると遅くて使い物にならなくなるかもしれないが...

399 :フッサール少佐 :2001/02/22(木) 23:15
ちょっとだけ更新しました。
http://www.geocities.co.jp/SiliconValley-Cupertino/1026/lzh/giko0222.lzh

400 :ヒロユキ@ギコナビ :2001/02/22(木) 23:29
>>398
>あとModel, Viewも意識的に切り分けないとね。
>なんていってると遅くて使い物にならなくなるかもしれないが...
結構、重要ですよね。
でも、ウィンドウズのTreeViewだとどうしてもTreeView内にデータが入るので
ここをどうするかが問題になりそうです。
せっかくモデルを作成しても、タコTreeViewのお陰で複雑になります。
TreeViewとモデルの間に一つ挟めばいいのかな?
VirtualTreeViewなんてモードがあればいいんだけど。


401 :Dax :2001/02/22(木) 23:38
>>398
なるほど。
HotZonuもその形式に変更していきたいと思います。
なんか難しそだな。。。

402 :Dax :2001/02/22(木) 23:43
>>400
TreeViewのDataにオブジェクトを入れるのはまだいいと思います。
ノードと板スレオブジェクトを関連付けるクラスがあっても
いいかもしれませんがなんか複雑になりそう、、
逆に板やすれのオブジェクトがノードを持っているのはちょっと好きくないです。


403 :デフォルトの名無しさん :2001/02/22(木) 23:45
あんまりこってないのでテスト用の自家製のモナ AVIをアップしたよ。
http://www.geocities.co.jp/SiliconValley-Oakland/9028/src/monaavi.lzh

↓こんな感じ
http://www.geocities.co.jp/SiliconValley-Oakland/9028/src/mona.gif

404 :デフォルトの名無しさん :2001/02/23(金) 00:49
まえにこんなの作ったら、コードがかなり単純になった。
コードなくなっちゃったけど。
function SearchTreeNode(TreeView: TTreeView; Path: String): TTreeNode;

// あれば'\foo\bar\baz'を検索して返す
// なければ無理やり階層作って返す。
tn := GetTreeNode(TreeView1, '\foo\bar\baz');

405 :デフォルトの名無しさん :2001/02/23(金) 09:54
そろそろ書き込みについても考えませうage

406 :turbo type D@もなヂ :2001/02/23(金) 09:56
>>400ヒロユキ
オレはTreeViewのTreeNode.Dataに
TNichBoardを入れてポインタでリンクしてるよ。

で、実際のTNichBoardの管理はTreeViewとは
独立している。

今の所は生成方法でTNichBoardを作るときに
TreeViewのItemも構成してしまってるから
ちょっと絡まってるけど分離は実に楽だよ。
TTreeViewをTListBoxに差し替えるたり

TNichSite
└TNichCategory
 └TNichBoard
  └TNichThread
   └TNichRes
というデータ構造をしっかり保持しておいて
さらに
TTreeView
└TTreeNodes
  └TTreeNode
   └Dataプロパ=TNichBoard
こうしてるわけ。

407 :turbo type D@もなヂ :2001/02/23(金) 09:58
>>402Dax
TNichSiteにはプロパとして
使用するTTreeNodeをポインタとして代入しておくと
TNichBoard側からもTTreeViewを参照できるよ
TNichBoard.OwnerCategory.OwnerSite.TreeView=
実際に画面に存在するTreeViewという事になる。
Daxには仏に説法か。(藁

TNichBoardがTNichNodeを保持するのはオレも好きでない。
if TTreeView.Items[i].Data=Self then
で検索してもいいかもね。

>>398=119
勉強させてもらいます。
ダウンロードの構造はまだ考えていなかった。
一般的なやり方ってのはどういうものなのだろうか....
マルチスレやサブンダウソも
ダウンロードクラス差し替えで

408 :turbo type D@もなヂ :2001/02/23(金) 10:02
テイセ
マルチスレ→マルチスレッド対応
ダウンロードクラスだけ差し替えたら動作するような
機能分けが欲しい。

TDataModule上にダウンロード機能を構成しておくと
IndyやHTTPCLIに対応したときも
差し替えが実にらくだと思うよ。

409 :turbo type D@もなヂ :2001/02/23(金) 10:09
>>405
>そろそろ書き込みについても考えませうage
ダネ。ギコナビスレ、2chブラウザスレ、かちゅしゃスレで
話にあがっていたかも。
参考レス教えてクレソ


オレもAVI作ったんだけど(ヘチョいけどもナー)
アニメGIF作る方法がわかんね(T∀T)
教えてクレクレ厨房ですのでオシエテクラサっィィィィィィィィィィィィィィィィィ
>>403
裏になると顔が変わったらインパクあっていいかモナー

410 :デフォルトの名無しさん :2001/02/23(金) 15:34
>>409
AVI,私はMacromediaのExtreme3dってのを使いました。
あ、フリーのツールじゃないです。

411 :turbo type D@monazilla :2001/02/23(金) 15:56
>>410
そうですか。フリーでアニメGIFはやはりないですかね。

>>402Dax,
ホットゾヌでレス一覧を取得できるようには出来ないでしょうか?




412 :デフォルトの名無しさん :2001/02/23(金) 17:18
あ、アニGIFツールはかなり昔にゲットしたのがありました。
今はライセンスの問題で配布してないようです。
手元にあるのをジオにアップしました。
http://www.geocities.co.jp/SiliconValley-Oakland/9028/anigif.lzh

413 :turbo type D@monazilla :2001/02/23(金) 18:32
>>412
どもども、ゲットしました。

414 :デフォルトの名無しさん :2001/02/23(金) 18:32
元あるGIFを組み合わせて、アニメGIFをつくるのはライセンスの問題に引っかからないはずだから、
そういうソフトを見つけてくるか、もしくは作るか…。


415 :turbo type D@monazilla :2001/02/23(金) 19:34
メールテスト

>>414,TGifImageで作れるのかな?

416 :turbo type D@monazilla :2001/02/23(金) 22:02
よっしゃ。
TWebBrowserでレス一覧まで見れるようになった!(遅いけど)

今日中にアプします。

417 :ヒロユキ@ギコナビ :2001/02/23(金) 23:57
>>406
ギコナビもDataに入れてます。
ちなみに、
TBBS2ch (extends TList)
└TCategory (extends TList)
 └TBoard (extends TList)
  └TThreadItem (extends TObject)
な感じなのですが、モナプロのほうが綺麗なクラス群ですなぁ。

あと、書込みの注意点。
書き込みするときには、クッキーを送ってやる。
書き込み文字列はURLEncodingする。(HTTPAppユニットのHTTPEncodeで可能)

具体的には、以下のようになると思います。
FROMとか大文字小文字を区別しているようなので注意。

s := 'submit=' + HttpEncode('書き込む') + '&
+ 'FROM=' + HttpEncode('ヒロユキ@ギコナビ') + '&'
+ 'mail=' + HttpEncode('sage') + '&'
+ 'MESSAGE=' + HttpEncode('書き込みたい文字列') + '&'
+ 'bbs=' + 'tech' + '&'
+ 'key=' + スレ番号(ex. 981726544) + '&'
+ 'time=' + 時刻(注);
な感じを送ります。

僕の場合、時刻は以下のメソッドで取得しています。
//2ch日付取得(1970年からの秒数-9時間)
//現在の時刻(now)を渡してください
function TGikoSys.Get2chDate(aDate: TDateTime): string;
var
d1: TDateTime;
d2: TDateTime;
begin
d1 := EncodeDate(1970, 1, 1);
d2 := aDate - EncodeTime(9, 0, 0, 0);
Result := FloatToStr(Trunc((d2 - d1) * 24 * 60 * 60));
end;


418 :turbo type D@はみ出しプログラマ酔っ払い :2001/02/24(土) 02:50
> TBBS2ch (extends TList)
> └TCategory (extends TList)
>  └TBoard (extends TList)
>   └TThreadItem (extends TObject)

これもいいじゃないですか。というか
ギコナビの方が順当でわかりやすいかな思いますよ。
いろいろ迷ったんだけどまあ所有か継承なので
実現できればどっちでもいいか。
(いずれギコナビ方式にしようかモナー)

>>119
T2chObject実装にしても迷いましたよ。いまだに。

オレもAVI作った
AVIファイル
http://www.geocities.co.jp/SiliconValley-Oakland/9028/src/monarotation.lzh
GIF
http://www.geocities.co.jp/SiliconValley-Oakland/9028/src/monarotation.gif


419 :turbo type D@はみ出しプログラマ酔っ払い :2001/02/24(土) 04:11
モナプローラ、アプしたよ。
うごくかな。
TWebBrowser使ってるからD5限定ね。

あと、次からは多分パッケージもインストールするようにします。
コンポ使わないとコーディングが面倒なので。

420 :turbo type D@monazilla.org :2001/02/24(土) 04:15
あ、レス一覧を参照できるようになりました。
実に使いにくい2chビューワーとしてなら使えるはずです。(w

317KB
新着レスの表示

スレッドリストへ戻る 全部 前100 次100 最新50

0ch BBS 2004-10-30