SVGの要素はXPathで直接指定できないらしい

qiita.com

そうなのかー。 name()で指定するなら問題ないらしい。

以下サンプルコード

<button id="button1" >/html/body/div/p</button>
<button id="button2" >/html/body/svg/text</button>
<button id="button3" >/html/body/*[name()='svg']/*[name()='text']</button>

<div>
<p>hello world1</p>
</div>
<svg xmlns="http://www.w3.org/2000/svg">
      <text x="0" y="20">
         hello world2
      </text>
      <text x="0" y="60">
         hello world3
      </text>
</svg>
document.getElementById("button1").onclick=button1Func; 
document.getElementById("button2").onclick=button2Func; 
document.getElementById("button3").onclick=button3Func; 
  
function alertTextContent(xpath){
  var result = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
  if(result.singleNodeValue == null){
    alert("xpath failed!")
  }else{
    const text = result.singleNodeValue.textContent;
    alert(text)  
  }
}
function button1Func(){
    alertTextContent("/html/body/div/p");
}
function button2Func(){
    alertTextContent("/html/body/svg/text");
}
function button3Func(){
    alertTextContent("/html/body/*[name()='svg']/*[name()='text']");
}

実行結果も貼っておきます。 jsfiddle.net

PostgreSQL

PostgreSQLWindows Serverにインストールした。

https://www.enterprisedb.com/downloads/postgres-postgresql-downloads#windows

特に問題はなかった。データベースの作り方も適当にググったら何とかなった。
ただいい感じの入門サイトがないのがちょっと使いにくいかなと。
あと、ポート開放するだけで外からも接続できるのかなと思ったらそうではなく、pg_hba.confをいじる必要がある。

qiita.com

それと百万件INSERTとかしようとしたら遅くで、そういうときはcsvからCOPY FROMで直接取り込んだほうが速いらしい。
csvエンコーディングUTF-8だとうまく取り込めなかったのでSJISにした。

symfoware.blog.fc2.com

ついでにpowershellPostgreSQLを扱ったのでそのときのコードを貼っておく。
Npgsqlはインストール必要あり。

[void][reflection.assembly]::LoadFrom("C:***\The Npgsql Development Team\Npgsql\Npgsql-2.2.3.0-net45\Npgsql.dll")
$ConnectionString = "Server=localhost;Port=****;User Id=****;Password=****;Database=****;"
$conn = New-Object NpgSql.NpgsqlConnection($ConnectionString)

#接続する
$conn.Open()

$sql = "INSERT INTO test_table  VALUES (***)"
$command = New-Object NpgSql.NpgSqlCommand($sql, $conn)
$result = $command.ExecuteNonQuery()

$conn.Close()

ついでにASP.NETから扱ったときのコードも。
NugetでNpgsqlをインストール必要あり。

using Npgsql;

            NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;Port=****;User Id=****;Password=****;Database=****;");
            NpgsqlCommand command = new NpgsqlCommand($"select * from test_table", conn);
            try
            {
                conn.Open();
                NpgsqlDataReader dr = command.ExecuteReader();
                while (dr.Read())
                {
                    //ここに処理
                }
            }
            finally
            {
                conn.Close();
            }

まあどっちもそのへんで拾ったやつですが。

ASP.NET WebAPI

qiita.com

ASP.NET WebAPIを試した。
上の記事に従ったら問題なく出来た。
プロジェクトのテンプレートはWebAPIもあるんだけど、そっちはテンプレートの中身が複雑なのでEmptyテンプレートにWebAPIのチェック入れて作るのが良いと思う。
以下気になった点

(1)Getメソッドの戻り値の型
コントローラーにGetメソッドを記述すると該当URLのGetが使えるとかそんな感じ。
Getメソッドの戻り値の型はstringでも何でも良いらしく、ASP.NETの方で勝手にJSONシリアライズしてくれる?
ただ、普通のシリアライズと同じようにクラスに[DataContract]属性をつける必要がある。

(2)URLのクエリパラメータとGetメソッドの引数の関係
Get(int id, string message)と書いたらクエリパラメータをどう書けば引数に放り込んでくれるのか。
WebAPIConfigのrouteTemplateに/{id}/と書いてあるとそれを読み取って自動的にidに放り込んでくれる感じだろうか?
クエリパラメータにmessage=helloを入れとくとやっぱり自動的にmessageのところに放り込まれていた。
そういうもんか。

(3)クロスドメイン問題
IISでWebAPIを立ち上げて、FirefoxChromeからローカルでXMLHttpRequestを使ってAPIを実行させるとドメインが違うといわれてエラーになる。
これだとデバッグがしにくいのでドメインが違っても実行できるようにしたい。
下の記事見てコントローラーにEnableCors属性をつけたら実行できるようになった。
ローカルのoriginがわからなかったので何でも受け入れてくれる"*"で妥協。

miso-soup3.hateblo.jp

ASP.NETを発行した

f:id:uuuaaa:20180407225610p:plain

hssamurai.blog62.fc2.com

だいたいここに従ったら出来た。ググると発行の手順は結構出てくる。
IISユーザーでやると発行が繋がらないことがあったのでWindowsユーザーでやったほうがたぶん楽。
ASP.NET 4.5やWebdeploy?をちゃんとインストールしてなかったりすると手順通りにすることすら出来ないので
まずはローカルでちゃんと動くことを試してから発行を行うと良いかも知れない。

IISにASP.NET MVCをデプロイ

f:id:uuuaaa:20180406234705p:plain

Windows ServerのIISASP.NET MVCをデプロイしました。

Visual StudioMVCのプロジェクトを作って発行→Webデプロイパッケージでzipを作る。
zipをWindows Serverに移動してIISマネージャー→アプリケーションのインポートでzipをインポート。
ブラウザで該当URLを開くと上の画像が出て確認終了。

これだけなのだけど、途中いろいろと苦労した。
(1)アプリケーションのインポートの項目が出てこなかった。
これはWeb deployをインストールすることで表示されるのですが、私はamd版のやつを間違えてインストールしてたので表示されていませんでした。
(2)該当URLを開くと403エラー。
MVCが起動していなかった?サーバーマネージャーから機能の追加でASP.NET 4.5をインストールしたら動きました。当然だ。

IISでHello world?

と言うほどでもないけど。 http://IPアドレスでブラウザ開いたら初期ページ見れたから最初から見れるように設定されてたのかなあ? フォルダにhtmlファイルおけば外からでも開けるんですね。 f:id:uuuaaa:20180406101711p:plain

f:id:uuuaaa:20180406101722p:plain

f:id:uuuaaa:20180406101731p:plain