C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[17]: MSDNの目次が欲しい [1]


(過去ログ 18 を表示中)

[トピック内 36 記事 (21 - 36 表示)]  << 0 | 1 >>

■7271 / inTopicNo.21)  Re[17]: MSDNの目次が欲しい
  
□投稿者/ れい (106回)-(2007/09/03(Mon) 12:04:45)
No7265 (渋木宏明(ひどり) さん) に返信
>>あとblogに対するコメントとかトラックバックみたいに、
>>特定のページに自分のコメントを残したいですね。
>
> MSDN Wiki じゃ駄目なんです?
>

自分だけのメモ書きに使いたいので以下の点がだめです。
・サインインしなきゃいけない
・ローカルに保存できない
・他人に見えないモードがない
・遅い

確認してみたら、
YASさんのコードではダメでした。
tocがうまく広がらなかったり、
リンク先が違う階層に繋がってたりする場合があります。

なので目次取得は失敗してました。
引用返信 編集キー/
■7278 / inTopicNo.22)  Re[18]: MSDNの目次が欲しい
□投稿者/ 渋木宏明(ひどり) (327回)-(2007/09/03(Mon) 13:23:33)
渋木宏明(ひどり) さんの Web サイト
>>MSDN Wiki じゃ駄目なんです?
>
> 自分だけのメモ書きに使いたいので以下の点がだめです。

自分用ってことなんですね。

そういえば、最近は「無かったこと」にされそうな勢いのアプリで MSN Explorer ってものがありました。

ああいう発想で、「MSDN Library Online 専用ビューア(ブラウザ)」みたいなのがあってもいいのかもしれませんね。

> ・サインインしなきゃいけない

は自動ログオンでいけるし。

> ・ローカルに保存できない
> ・他人に見えないモードがない

もスタンドアロンアプリであれば変な制限を受けないし。

> ・遅い

とりあえずローカルにキャッシュがあればそれを表示して、裏で最新コンテンツの取得、とか。

引用返信 編集キー/
■7317 / inTopicNo.23)  Re[18]: MSDNの目次が欲しい
□投稿者/ mあ (54回)-(2007/09/03(Mon) 20:15:06)
No7271 (れい さん) に返信

> 確認してみたら、
> YASさんのコードではダメでした。
> tocがうまく広がらなかったり、
> リンク先が違う階層に繋がってたりする場合があります。
>
> なので目次取得は失敗してました。

msXXXXX.aspx のとき、
  msXXXXX(d=toc).aspx or
  msXXXXX(d=toc).htm
msXXXXX(VS.90).aspx のとき、
  msXXXXX(VS.90).aspx or
  msXXXXX(VS.90,d=toc).aspx or
  msXXXXX(d=toc).aspx or
  msXXXXX(VS.90,d=toc).htm or
  msXXXXX(VS.90).htm

なんだかよくわからん子ちゃんよ。

TreeView_PopulateNodeXXXXX() 巨大スクリプトの中身は、Ajax で IFRAME を動的に生成
して、その中でフォームをポストしていました。なんかリクエストパラメータが一杯つい
ていたのですが、ここらへんが、ブラウザコンポーネント使ったときにリンク切れになる
要因でしょうかね〜??

javascript:document.body.appendChild(document.createElement("div")).innerText = WebForm_DoCallback

YAS さんとは異なる路線ということで、ノードツリーを追いかけていましたが、挫折・・w

引用返信 編集キー/
■7319 / inTopicNo.24)  Re[19]: MSDNの目次が欲しい
□投稿者/ れい (108回)-(2007/09/03(Mon) 20:24:35)
No7278 (渋木宏明(ひどり) さん) に返信
> >>MSDN Wiki じゃ駄目なんです?
>
> 自分用ってことなんですね。

いろいろできたらいいですよね。
他人に意見を聞きたい場合もあるし、
自分だけのメモ書きをしたいときもあるし。

> そういえば、最近は「無かったこと」にされそうな勢いのアプリで MSN Explorer ってものがありました。

MSDN Explorerが欲しいです。

・自動で常に最新のMSDNを。
・MSDN wikiに投稿も可能。
・自分でコメントも可能。
・社内でコメントの共有も可能。
・柔軟な検索が可能
・ローカルなので軽い!

みたいな。
ありがとうございます>>作者


>YASさんのコードではダメでした。

適当ですが、2通りやってみました。

1 HTTPWebRequestで取得

マルチスレッド・非同期でDOSな取得。早い。
でも、
・URLを指定しても展開されないノードがある
http://msdn2.microsoft.com/ja-jp/library/ms754130.aspx
・ノードが2箇所にリンクされている
http://msdn2.microsoft.com/ja-jp/library/fkytk30f(VS.80).aspx」
(.Net開発->.Netの技術->.Netのセキュリティは飛ばされる)
・リンク先がない
などの際に、
次にどのノードを取得したらいいのかよくわからなくなってしまって
うまくできない。
がんばればできるかも

2 WebBrowserでノードを開いていく。

ドキュメント中の「+」をクリックしたつもりで、
全ての「+」相当のaタグにNavigate("javascript:xxxxx")する。

・なぜかNavigateが動かない「+」がある。クリックすればうまく動く。
私はWebBrowserよくわからないので、対応策不明。
なんで?

結局、まだちゃんとした物は取得できてません。
20万件ぐらいです。
引用返信 編集キー/
■7327 / inTopicNo.25)  Re[20]: MSDNの目次が欲しい
□投稿者/ 渋木宏明(ひどり) (331回)-(2007/09/03(Mon) 22:30:42)
渋木宏明(ひどり) さんの Web サイト
> MSDN Explorerが欲しいです。

なるほど。

過去に2,3度ほど「Windows Server Update Services (当時は SUS)のノリで、ワークグループで使えるプチ MSDN Library Onelin サーバ」の開発をリクエストしたことがあります(結果は推して知るべしという次第です (^^; まぁ、開発ツールグループは貧乏みたいなんで)が、スタンドアロン アプリとして作るってのもアリかもしれませんね。

> ・自動で常に最新のMSDNを。

ここが最大の問題でしょうねぇ。
コンテンツ取得の手法や保存(というか保管?)をどうするのか、とかとか。

> ・自分でコメントも可能。
> ・社内でコメントの共有も可能。

は、バックエンドの工夫でなんとでもなりますね。

アプリに内包しないで、ブログや Wiki に投げちゃった方が面白いかも。

> ・ローカルなので軽い!

かな? (^^;;;

> ありがとうございます>>作者

ちょっと興味あるかなw

引用返信 編集キー/
■7330 / inTopicNo.26)  Re[21]: MSDNの目次が欲しい
□投稿者/ れい (109回)-(2007/09/03(Mon) 23:39:22)
No7327 (渋木宏明(ひどり) さん) に返信
> ちょっと興味あるかなw

要望を書きましょう!

誰か勇者が現れるはず。
引用返信 編集キー/
■7336 / inTopicNo.27)  Re[22]: MSDNの目次が欲しい
□投稿者/ 渋木宏明(ひどり) (334回)-(2007/09/04(Tue) 02:59:11)
渋木宏明(ひどり) さんの Web サイト
ちょっと見てみたけど、ドキュメントツリーを追っかけるなら、ツリービューの内容を追うよりも、本文上にあるナビゲーションバーの中身を追ったほうが早そう。

具体的には <div ... class="EyebrowMenuBar"> 配下の文章構造がそれ。

<div ... class="stat" ...> 直下がナビゲーションバーの表示項目で、その中にある <div ... class="popup" ...> の中の記述がサブ項目のタイトルとリンクな模様。

引用返信 編集キー/
■7344 / inTopicNo.28)  Re[23]: MSDNの目次が欲しい
□投稿者/ 渋木宏明(ひどり) (336回)-(2007/09/04(Tue) 11:15:10)
渋木宏明(ひどり) さんの Web サイト
> ちょっと見てみたけど、ドキュメントツリーを追っかけるなら、ツリービューの内容を追うよりも、本文上にあるナビゲーションバーの中身を追ったほうが早そう。

こんな感じ。

http://hidori.jp/downloads/junktest/TocCollector-20070904.zip

「書いてある情報」を読むだけなんで楽チン。

↑作ってから気がついたけど、MSDN2 のサイトは XHTML で書かれているので XmlDocument.Load() でも取得可能ぽ。

引用返信 編集キー/
■7380 / inTopicNo.29)  Re[23]: MSDNの目次が欲しい
□投稿者/ れい (110回)-(2007/09/04(Tue) 23:03:10)
No7336 (渋木宏明(ひどり) さん) に返信
> ちょっと見てみたけど、ドキュメントツリーを追っかけるなら、ツリービューの内容を追うよりも、本文上にあるナビゲーションバーの中身を追ったほうが早そう。
>

速度的にはどっちもあまり変わらない感じですね。
ひどりさんの方法だと親のリンクが取得できるので
整合性を確保するにはいいかもです。

ただ、
いくつかの項目でナビゲーションがおかしいのがあるので、
それもなおさなきゃいけないし、
項目数も莫大なので
ツリービューも工夫しないといけないし、
保存方法も考えなきゃいけないし…

「量」を考えなきゃいけないプログラムになりますね。



引用返信 編集キー/
■7384 / inTopicNo.30)  Re[16]: MSDNの目次が欲しい
□投稿者/ mあ (56回)-(2007/09/05(Wed) 02:12:21)
Public Class Form1

    Private tv As New TreeView()
    Private sp As New SplitContainer()
    Private WithEvents wb As New WebBrowser()
    Private WithEvents bt As New Button()
    Private WithEvents bt2 As New Button()
    Private tx As New TextBox()
    Private pr As New ProgressBar()
    Private WithEvents tm As New Timer()

    Private postCounter As Long = 0

    Private _Urienum As IEnumerator

    Private Structure HtmlTag
        Private _Title As String
        Private _Href As String
        Private _IsExpand As Boolean

        Public ReadOnly Property IsExpand() As Boolean
            Get
                Return _IsExpand
            End Get
        End Property
        Public Property Title() As String
            Get
                Return _Title
            End Get
            Set(ByVal value As String)
                _Title = value
            End Set
        End Property
        Public Property Href() As String
            Get
                Return _Href
            End Get
            Set(ByVal value As String)
                _Href = value
            End Set
        End Property

        Public Overrides Function ToString() As String
            Dim sb As New System.Text.StringBuilder()

            Dim ss As String
            If Me.IsExpand Then ss = "◆" Else ss = "×"
            sb.Append(ss).Append(Title).Append(" >> ").Append(Href)

            Return sb.ToString()

        End Function
        Public Sub New(ByVal tag As HtmlElement, ByVal bExpand As Boolean)
            _Title = tag.GetAttribute("title")
            _Href = tag.GetAttribute("href")
            _IsExpand = bExpand
        End Sub
    End Structure

    Private timeout As Integer = 0
    Private timeoutTime As Integer = 2
    Public Sub tm_Tick(ByVal sender As System.Object, ByVal e As EventArgs) Handles tm.Tick

        Dim dom As HtmlElement = wb.Document.GetElementsByTagName("title").Item(0)

        If dom.Id.Equals("Done") Or _
            wb.ReadyState = WebBrowserReadyState.Complete Or _
            wb.ReadyState = WebBrowserReadyState.Interactive Or _
            timeout > timeoutTime Then
            tm.Stop()

            Console.WriteLine("DomTitle::{0}", dom.Id)
            If timeout > timeoutTime Then
                Console.WriteLine("timeout")
            End If
            timeout = 0
            If _Urienum.MoveNext() Then
                Dim tag As HtmlTag = DirectCast(_Urienum.Current, HtmlTag)
                Console.WriteLine("展開中: {0}", tag.Href)
                dom.Id = "work"

                wb.Url = New Uri(tag.Href)

                pr.Value += 1
                pr.Update()
                tm.Interval = 1000
                tm.Start()
            Else
                bt.Enabled = True
                bt2.Enabled = False
                MsgBox("終了")
            End If

        Else
            timeout += 1
            wb.Update()

            Console.WriteLine("DomTitle::{0}", dom.Id)
        End If

    End Sub

    Private DomTitleElement As HtmlElement


    Private Sub wb_Completed(ByVal sender As System.Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles wb.DocumentCompleted
        '' ブラウザ内スクリプトとの通信用変数
        DomTitleElement = wb.Document.GetElementsByTagName("title").Item(0)
        DomTitleElement.Id = "None"

        Console.WriteLine("complete: {0}::{1}::", e.Url.ToString, DomTitleElement.Id)

        ''ScriptInjection !!
        wb.Url = New Uri("javascript:s=''+WebForm_DoCallback;s=s.replace('return;','document.getElementsByTagName(\'title\')[0].id=\'Done\';return;');eval(s);")
        ''WebForm_DoCallback() XmlHttpRequest を使うメソッドの出口を書き換える
        ''XmlHttp が正常終了すると、window.title.id = 'Done' がセットされる。
    End Sub



    Private Sub bt2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt2.Click
        bt.Enabled = False
        timeout = 0
        tm.Interval = 50
        DomTitleElement.Id = "Done"
        tm.Start()

    End Sub

    ''' <summary>
    ''' URLリスト作成
    ''' </summary>
    Private Sub bt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt.Click
        Dim doc As HtmlDocument = wb.Document
        Dim tbs As IEnumerator = doc.GetElementsByTagName("table").GetEnumerator()

        Dim list As ArrayList = New ArrayList()

        Do While tbs.MoveNext()
            Dim tbl As HtmlElement = DirectCast(tbs.Current, HtmlElement)

            Dim ans As HtmlElementCollection = tbl.GetElementsByTagName("A")
            If ans.Count = 2 Then
                ''Toggle/Populate TreeNode
                Dim tag As HtmlElement = DirectCast(ans.Item(0), HtmlElement)
                Dim html As HtmlTag = New HtmlTag(tag, True)
                ''ツリーの展開用スクリプトだけ保存
                If html.Href.IndexOf("PopulateNode") > -1 Then
                    list.Add(html)
                    Console.WriteLine("ListAdd: " + html.Href)
                End If
            End If
        Loop

        _Urienum = list.GetEnumerator()
        pr.Step = 1
        pr.Minimum = 0
        pr.Maximum = list.Count
        pr.Value = 0
        pr.Update()

        bt.Enabled = False
        bt2.Enabled = True

    End Sub
    Private Function MyInitLayout() As Panel
        Dim pn1 As New TableLayoutPanel()
        Dim pn2 As New TableLayoutPanel()

        pn1.RowCount = 1
        pn1.ColumnCount = 4
        pn1.Dock = DockStyle.Fill
        bt.Text = "tree"
        bt.Size = New Size(40, 20)
        bt2.Text = "recr"
        bt2.Size = New Size(40, 20)
        pr.Size = New Size(120, 20)
        tx.Dock = DockStyle.Fill
        tx.BorderStyle = BorderStyle.FixedSingle

        pn1.Controls.Add(bt, 0, 0)
        pn1.Controls.Add(bt2, 1, 0)
        pn1.Controls.Add(pr, 2, 0)
        pn1.Controls.Add(tx, 3, 0)

        pn2.RowCount = 2
        pn2.ColumnCount = 1
        pn2.Dock = DockStyle.Fill

        tv.Dock = DockStyle.Fill
        sp.Dock = DockStyle.Fill
        wb.Dock = DockStyle.Fill
        tv.BorderStyle = BorderStyle.None
        sp.Panel1.Controls.Add(tv)
        sp.Panel2.Controls.Add(wb)

        pn1.Height = 30

        pn2.Controls.Add(pn1, 0, 0)
        pn2.Controls.Add(sp, 0, 1)

        tx.Text = "http://msdn2.microsoft.com/ja-jp/library/default(d=toc).aspx"

        bt2.Enabled = False

        Return pn2

    End Function


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Controls.Add(MyInitLayout())
        Me.Size = New Size(600, 500)

        wb.Url = New Uri(tx.Text)
    End Sub

    Public Class MyWeb : Inherits WebBrowser

    End Class
End Class



もう寝ます。
Script 注入して、ツリーの展開図だけを生成します。

削除パス:12345678

引用返信 編集キー/
■7387 / inTopicNo.31)  Re[17]: MSDNの目次が欲しい
□投稿者/ れい (112回)-(2007/09/05(Wed) 03:37:08)
No7384 (mあ さん) に返信
>
> もう寝ます。
> Script 注入して、ツリーの展開図だけを生成します。
>

私も似たようなのを試しましたが、途中で展開できないノードに当たります。
たとえば

http://msdn2.microsoft.com/ja-jp/library/188ht7d8(VS.80).aspx

ここですね。
自動化するとここが開けません。
WebBrowserのUrl解釈部分のバグではないかと思うんですが。(根拠無し

あと、幅優先探索だと作業を分割したりするのに不利ですし
途中で重くなってだめですね。
深さ優先で探索するのがいいかも。

適当に取得していったところ
29万件取得したところで死にました。
少なくとも29万件はあります。

TreeViewじゃ表示できないですね。

WebBrowserでもいっぺんに表示はできないので
深さ優先で探索して探索が終わったら閉じないといけませんね。

速度も問題ですね。
1日で取得を終わりにするには
1秒に3件は取得できないといけません。
WebBrowserを使うなら並列にしないとだめですね。

引用返信 編集キー/
■7398 / inTopicNo.32)  Re[24]: MSDNの目次が欲しい
□投稿者/ 渋木宏明(ひどり) (339回)-(2007/09/05(Wed) 11:11:05)
渋木宏明(ひどり) さんの Web サイト
2007/09/05(Wed) 11:11:59 編集(投稿者)

> 速度的にはどっちもあまり変わらない感じですね。

でした? (^^;

まぁ、「早い」は主に「[+] をクリックする手間が無いので楽チン」の意味だったんですが。

↑でも書きましたが、msdn2 は xhtml を返すので、この方法の応用なら実は WebBrowser も全然いらないんですよね。

欠点は、トップレベルのツリーを「種」として与えなければならないことです。

僕が着目した情報は MSDN Library のトップページに含まれてないので。

あ、レンダリング要らないから、WebBrowser コントロールを使ったままでももう少し速くできるかも>今の方式

> ひどりさんの方法だと親のリンクが取得できるので
> 整合性を確保するにはいいかもです。

ですね。今は捨ててるけど、上位レベルへのリンクも入ってますよね。

> いくつかの項目でナビゲーションがおかしいのがあるので、
> それもなおさなきゃいけないし、

僕が着目している方の情報にも間違いが含まれてるのかな?
まぁ、元ネタが同じなんで結果も同じかな。

でも

> 項目数も莫大なので

なので、修正や補完は「できれば」程度の努力目標かな。

リンク切れめっけたら MS に自動報告するようにアプリに組み込んでおくとかw

> ツリービューも工夫しないといけないし、

「起動時に全部充填」じゃ駄目ですね。
人手で「全ノードを開く」のはほぼ不可能なので、ストアの問題を解決すれば仮想ツリーでOKですね。

> 保存方法も考えなきゃいけないし…
>
> 「量」を考えなきゃいけないプログラムになりますね。

ですね。でもまあぁDB前提なら数10万件レベルは大した数じゃないし。

SQL Server Express はインストールの手間があるから、デフォルトは SQL Server Compact Edition かな?

今月の前版は少し余裕あるので、もう少し遊んでみます ;-)

引用返信 編集キー/
■7451 / inTopicNo.33)  Re[25]: MSDNの目次が欲しい
□投稿者/ れい (113回)-(2007/09/05(Wed) 23:52:21)
No7398 (渋木宏明(ひどり) さん) に返信
> 2007/09/05(Wed) 11:11:59 編集(投稿者)
>
>>速度的にはどっちもあまり変わらない感じですね。
>
> ↑でも書きましたが、msdn2 は xhtml を返すので、この方法の応用なら実は WebBrowser も全然いらないんですよね。

WebBrowserを使わないとだいぶ早いです。

> 欠点は、トップレベルのツリーを「種」として与えなければならないことです。

種は1個->数個に増えますね

>>いくつかの項目でナビゲーションがおかしいのがあるので、
>>それもなおさなきゃいけないし、
>
> 僕が着目している方の情報にも間違いが含まれてるのかな?
> まぁ、元ネタが同じなんで結果も同じかな。

はい。
確認してます。
WPFにはまともなナビゲーション入って無いのでだめですね。

> リンク切れめっけたら MS に自動報告するようにアプリに組み込んでおくとかw

そう!そうですよ!
思いつかなかった自分が恥ずかしいぐらいにすばらしい。

>>保存方法も考えなきゃいけないし…
>>
>>「量」を考えなきゃいけないプログラムになりますね。
>
> ですね。でもまあぁDB前提なら数10万件レベルは大した数じゃないし。
>
> SQL Server Express はインストールの手間があるから、デフォルトは SQL Server Compact Edition かな?

DB使いますか。
私は簡単なデータならDBソフトは使いたくない人ですね。
とくにスタンドアロンアプリは。
トライやハッシュテーブルで自分で実装したほうが早くて軽いですし。

CompactEditionだとインストールが要らないので、
このスタイルも卒業かなと思ってはいますが、
既存のライブラリに比べてまだ遅いですし。

> 今月の前版は少し余裕あるので、もう少し遊んでみます ;-)

お。
勇者宣言だ。
一応確認しておくと、
これはつまり、今月の前半のうちに、完成するということですよね:D
待ってます。
引用返信 編集キー/
■7454 / inTopicNo.34)  Re[26]: MSDNの目次が欲しい
□投稿者/ 渋木宏明(ひどり) (340回)-(2007/09/06(Thu) 02:50:20)
渋木宏明(ひどり) さんの Web サイト
>>SQL Server Express はインストールの手間があるから、デフォルトは SQL Server Compact Edition かな?
>
> DB使いますか。
> 私は簡単なデータならDBソフトは使いたくない人ですね。
> とくにスタンドアロンアプリは。
> トライやハッシュテーブルで自分で実装したほうが早くて軽いですし。

でもオンメモリではちょっとつらい量じゃないですか?

仮に、単一ファイルに目次データを持ったとすると読み込みと内部構造への展開にも結構時間がかかるんじゃないかな。

> CompactEditionだとインストールが要らないので、
> このスタイルも卒業かなと思ってはいますが、
> 既存のライブラリに比べてまだ遅いですし。

Jet よりも遅いですかね?
元が Windows CE 用なんで、速度よりメモリ消費を抑えるのが優先になってるかもしれないですね。

> 一応確認しておくと、
> これはつまり、今月の前半のうちに、完成するということですよね:D

開発期間短っw
目次だけでなく本文の方もキャッシュして表示したいしー

# 本文を全部取得したらどれくらいの量になるのかな?

引用返信 編集キー/
■7455 / inTopicNo.35)  Re[27]: MSDNの目次が欲しい
□投稿者/ れい (115回)-(2007/09/06(Thu) 04:29:48)
2007/09/06(Thu) 04:38:21 編集(投稿者)

No7454 (渋木宏明(ひどり) さん) に返信
> >>SQL Server Express はインストールの手間があるから、デフォルトは SQL Server Compact Edition かな?
>>
>>トライやハッシュテーブルで自分で実装したほうが早くて軽いですし。
>
> でもオンメモリではちょっとつらい量じゃないですか?
>
> 仮に、単一ファイルに目次データを持ったとすると読み込みと内部構造への展開にも結構時間がかかるんじゃないかな。

データの持ち様ですかね。
TOCと本文の全文検索程度なら
ファイルの中にパトリシアとかトライを作りこみます。
これだとOSがファイルキャッシュの形でメモリ管理してくれますから。
かならず前方へのシークのみになるので、メモリに載ってなくても物理的に早いですし。
インデクスなので容量も小さいですしね。

まぁ時代遅れ感は感じます…。
データのストア、検索なんてのは高級言語なら言語レベルでやってくれるべきですよね。
わかってはいますが。

速度を追求すると、余計なものを削って自分で実装することになります。
とくに全文検索など、データ構造で速度が明確に変わることがわかってる場合は。

>>既存のライブラリに比べてまだ遅いですし。
>
> Jet よりも遅いですかね?
> 元が Windows CE 用なんで、速度よりメモリ消費を抑えるのが優先になってるかもしれないですね。

あー。失礼。
私が作ったものや、その辺に転がってるものって意味です。
汎用なんで、その分遅くなるのは当然。「安心」の分遅くなるのも当然です。
Jetと比較したことはないですねー。しばらく使ってない。
あんないつ壊れるのかわからないもの怖くて使えません。

>>一応確認しておくと、
>>これはつまり、今月の前半のうちに、完成するということですよね:D
>
> 開発期間短っw
> 目次だけでなく本文の方もキャッシュして表示したいしー

開発期間が短くて喜んでる!!
しかも「本文もキャッシュして表示する」宣言が出たようですね。
「リンク切れ自動フィードバック」宣言も出てますし。
さすがです。

> # 本文を全部取得したらどれくらいの量になるのかな?

記録して置くべきでした。
またしても失敗です。

私が適当にやって取得したのは182,000ページ位です。
1ページ辺りは、100kByte程度だろうと思います。
ですので、
180k x 100kByte = 18G。
15時間くらいかかってますから、速度はおそらく2.7Mbps程度。

一応検証。
コネクション張りっぱなしのHttpWebRequest20個で非同期取得したので、
アプリ側の時間ロスはほぼ無いでしょう。
取得側の回線はネット過疎地のためプロバイダまではほぼ100Mbps。
ボトルネックはプロバイダより上流。
この条件なら、2.7Mbpsはまぁ妥当なオーダーだと思います。

ですので、ページ辺り100kbyte程度はたぶん妥当。

取得結果をざっと見たんですが、エラーチェックがダメダメでした。
減ることはないですが、まだまだ取得できそうです。
これは完全に勘ですが、多く見て500,000位かな。
すると、たぶん総容量は

500kx100kByte = 50G -> 5 x 10^10 Byte

程度。オーダーはたぶんあってる。

ずいぶんでかいな。生では保存できませんね。
エントリ数は500,000 < 2^19 なんで、まだまだ余裕ですが…。
aspxはzipで潰しても1/10程度。
スクリプトとかタグ削除して、加工しないとだめかも。

文章自体は1/100も無いので、500,000*1kbyte = 500Mbyte程度。
パトリシアでインデクスつけたらインデクスファイルは1/10〜1/100程度。
5M〜50Mのインデクスファイルなら余裕かな。
アップデートに時間がかかるけど。

同様に普通のSQLServerなら500Mのテキストくらい余裕ですが、
CEはどうかな。経験者募集です。

そうすると問題点は、

aspxの加工あたりが、ちょっと厳しいです。
加工しないとローカルに収めるには大きすぎる。
aspxの中身はMS次第でコロコロ変わるかもしれないので、コストが。

更新チェックも莫大に時間がかかるので、
どっかのサーバーで更新情報を取得して配信するか、
アプリどうしでP2Pで情報共有するとか、
あきらめるとか、考えないとだめ。

私には厳しそうですし、
あまりおいしくないプログラムになりそうです。
なんか違う手を考えないと…。

ひどりさんならできるに違いない。
さすがひどりさん。
待ってます。
引用返信 編集キー/
■7470 / inTopicNo.36)  Re[28]: MSDNの目次が欲しい
□投稿者/ 渋木宏明(ひどり) (342回)-(2007/09/06(Thu) 12:28:08)
渋木宏明(ひどり) さんの Web サイト
> TOCと本文の全文検索程度なら
> ファイルの中にパトリシアとかトライを作りこみます。
> これだとOSがファイルキャッシュの形でメモリ管理してくれますから。
> かならず前方へのシークのみになるので、メモリに載ってなくても物理的に早いですし。
> インデクスなので容量も小さいですしね。

とは言え、目次ツリーも項目数が結構あるので、かなりメモリを圧迫するんじゃないかな?
数千〜数万程度なら僕もメモリにもっちゃうんですけどねー

本文は全文検索の対象にしかならないので、DB に入れないと思います。

> まぁ時代遅れ感は感じます…。

データ規模と要件次第ですね。
僕も生粋の DB 屋さんではないので、マスタ系の小規模データはオンメモリで持っておきたい方です。

> 速度を追求すると、余計なものを削って自分で実装することになります。
> とくに全文検索など、データ構造で速度が明確に変わることがわかってる場合は。

検索・ストア等々、プラグインてかアセンブリレベルで交換できるようにしておけば問題なしっすね。

> Jetと比較したことはないですねー。しばらく使ってない。
> あんないつ壊れるのかわからないもの怖くて使えません。

ですよねぇー
同時アクセスなんかしてないのに、コンパクションで文句言う時があったので、イマイチ信用度が。。。

> 開発期間が短くて喜んでる!!

逆 (^^;

> しかも「本文もキャッシュして表示する」宣言が出たようですね。
> 「リンク切れ自動フィードバック」宣言も出てますし。

は、自分でも欲しいなーと。
「目次収集して、コンテンツは Web から表示」でいいなら、前に書いたヤツでも基本は出来ちゃってますからね。

コメント機能は、Windows Live Writer のノリで外部の blog エンジンにでも投げてしまえばいいかなーと。
まぁ、この辺も交換可能にしておけば、初期リリースに不満があってももっといいやつを誰か作るかもしれないし。

> 同様に普通のSQLServerなら500Mのテキストくらい余裕ですが、
> CEはどうかな。経験者募集です。

mdb イヤなんで、一応試してみます。
SQL Server Express もインストールの手間があるのであんまり使いたくないし。

> aspxの加工あたりが、ちょっと厳しいです。
> 加工しないとローカルに収めるには大きすぎる。
> aspxの中身はMS次第でコロコロ変わるかもしれないので、コストが。

量を考えると、やっぱ本文はキャッシュな方向かな。
個人的には英語版の MSDN2 も見たいし。

本文検索はオンラインに投げるしかないかなぁ。

> 更新チェックも莫大に時間がかかるので、
> どっかのサーバーで更新情報を取得して配信するか、
> アプリどうしでP2Pで情報共有するとか、
> あきらめるとか、考えないとだめ。

なんか考えないと駄目ですね。
P2P まで手を出したくは無いけど、出してしまえば本文を分散キャッシュできるかも (^^;

とりあえず巡回してみるやつを作ってみて、どれくらい駄目なのか評価してみます。

> ひどりさんならできるに違いない。
> さすがひどりさん。
> 待ってます。

飽きたり、詰まったり、忙しくなったりしたらソース公開するので、引継ぎよろしくお願いしますw

ちなみに、大分元の質問の趣旨から逸脱(発展?)しすぎたので、このスレッドにつなぐのはそろそろやめにしましょうね。
成果がある程度公開できるレベルになったら別すれ立てますんで (^^;

引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -