nprogram’s blog

気ままに、プログラミングのトピックについて書いていきます

SQL基礎学習

はじめに

データベースを扱うには、SQLを学ぶ必要があります。本記事では、学習のために、役立つリンクを記載します

内容

(1) Oracel Acpplication Express (APEX)を使用して、SQLを学習することについて記載された記事です。

インターネットで、Oracel Acpplication Expressの環境を用意することができます。

連載 「Webブラウザで気軽に学ぶ実践SQL講座」 − @IT

Visual Studio 2017で、クラス図を自動生成しましょう

はじめに

プロジェクトが大きくなればなるほど、コードを読んで、クラス図を作成する作業は大変になります。 Visual Studio 2017を使用すれば、プロジェクトからクラス図を自動生成することが可能です。

環境

  • Visual Studio Community 2017 (Version 15.7.4)
  • Windows 10 (Version 1803)

クラス図自動生成手順

(1) クラスデザイナーのコンポーネントが必要です。ない場合は、メニューのツール⇒ツールと機能の取得からインストールしてください。 f:id:nprogram:20180626012223p:plain

(2) ソリューション エクスプローラーのプロジェクトを右クリックして、ビュー⇒クラスダイアグラムで表示を選択 f:id:nprogram:20180626012746p:plain

(3) クラス図が表示されます。クラスの下矢印をドロップダウンすると、メンバ変数やメンバメソッドを見ることができます。 f:id:nprogram:20180626012632p:plain

まとめ

Visual Studio 2017を使用すれば、プロジェクトからクラス図を自動生成することが可能です。

世の中には、Doxygenというツールでも、クラス図を自動生成することもできます。また、Doxygenはコードからドキュメントを生成可能です。

本方法は、クラス図の自動生成が開発環境(Visual Studio)で完結することが長所だと思います。

Visual Studio 2017でコード分析を有効化しましょう

はじめに

Visual Studio 2017のコード分析のデフォルトを有効にすることで、適切にコードをチェックすることが可能です。

環境

  • Visual Studio Community 2017 (Version 15.7.4)
  • Windows 10 (Version 1803)

コード分析有効化と実施手順

(1) まず、プロジェクトを右クリックして、プロパティを開きます。

f:id:nprogram:20180626001049p:plain

(2) 次に、コード分析を選択して、ビルドに対するコード分析の有効化にチェックを入れます。

f:id:nprogram:20180626001605p:plain

(3) プロジェクトをビルドすることにより、自動でコード分析が実行され、結果を出力してくれます。

f:id:nprogram:20180626002540p:plain

実施例

以下のように、Disposeを2回呼び出している場合や、よりよいコーディング方法(パラメータ化SQLクエリ)を教えてくれます。 f:id:nprogram:20180626003005p:plain

AngleSharpを用いて、Webスクレイピングをしましょう[AngleSharp]

はじめに

Webスクレイピングとは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。 ウェブ・クローラーあるいはウェブ・スパイダーとも呼ばれる。(wikipedia参照)

Webスクレイピングに、Html Agility Packではなく、今回は、AngleSharpを使用してみようと思います。 AngleSharpHTMLだけでなく、SVG、MathML、CSSもパース可能なようです。 (詳細は、C#でモダンにスクレイピングするならAngleSharp)

コード

以下のように簡単にインターネットのホームページのクエリーセレクタを指定して情報を取得可能です。

                // 株価を取得したいサイトのURL
                var code = "7984.T";
                var urlstring = $"http://stocks.finance.yahoo.co.jp/stocks/detail/?code={code}";

                // 指定したサイトのHTMLをストリームで取得する
                var doc = default(IHtmlDocument);
                using (var client = new HttpClient())
                using (var stream = await client.GetStreamAsync(new Uri(urlstring)))
                {
                    // AngleSharp.Parser.Html.HtmlParserオブジェクトにHTMLをパースさせる
                    var parser = new HtmlParser();
                    doc = await parser.ParseAsync(stream);
                }

                // クエリーセレクタを指定し株価部分を取得する
                var priceElement = doc.QuerySelector("#main td[class=stoksPrice]");

                string priceString = priceElement.TextContent.Replace(",", string.Empty);
                // 取得した株価がstring型なのでint型にパースする
                int.TryParse(priceString, out var price);

                Debug.WriteLine("コクヨ(7984.T)の株価: {0}円", price);

使い方

IDEがVisual Studioであれば、NuGetから取得可能です。

あとがき

この後は、非同期で、Webスクレイピングを行っていきたいと思います。

非同期で引っ掛かりやすいポイントをあらかじめ調べておこうと思います。

非同期に、データを追加するのであれば、以下の記事の方法で実現可能です。 WPF:DataGridやListViewなどに表示しているデータを別スレッドから変更するには?[C#、VB]:.NET TIPS - @IT

非同期処理のあるプログラムにおいて、どのスレッドで処理されているか、手順が記載されている記事です。 [C#5.0~] async/awaitとTask.Runメソッドを用いた非同期処理のメモ |

非同期は実現できても、非同期にデータベースにデータ追加していくと、データ不整合が発生とかなりそう・・・。 (現在、その状況になったので、試行錯誤中)

neue cc - asyncの落とし穴Part3, async voidを避けるべき100億の理由

非同期:awaitを含むコードをロックするには?(SemaphoreSlim編)[C#、VB]:.NET TIPS - @IT

第3回 マルチスレッドでデータの不整合を防ぐための排他制御 ― マルチスレッド・プログラミングにおける排他制御と同期制御(前編) ― (1/3):連載.NETマルチスレッド・プログラミング入門 - @IT

リンク

anglesharp.github.io