IPv6を有効にしないとEdgeがネットに接続できない

Windows10のバージョン1809になってからEdgeがIPv4だと接続できないようだ。うちの環境ではLAN内に内側だけのDNSサーバを置いていてIPv6対応になっていないので、IPv6は無効にしていたのでEdgeで接続できなくなった。

DNSサーバをIPv6対抗してもいいのだがプロバイダも対応していないので無理にやってもしょうがない気がする。

射影IPv6

そこで登場するのが射影IPv6。これはIPv6でIPv4のアドレスを使うようなもの。DNSサーバをIPv6対応しなくてもWindowsのIPv6のDNSサーバの設定をこの射影IPv6にすれば上記の問題を解決できる。射影Ipv6の形式は以下。

192.168.10.10はIpv4。ここの部分を自分の環境のIpv4アドレスに変えてDNSサーバの欄に入力すれば。IPv6を有効にしてもちゃんと動くので。Edgeを使えるようになる。

Angularでアプリをつくって展開するまでの作業

Angular6でアプリのスケルトンをつくり、サーバで動かすまでの記録。開発作業は行わない準備とテストの話。Windowsで実験

Angularとは

Angularはウェブアプリのフレームワーク。高速で動くアプリをつくれる。アプリはJavaScriptで動き、基本的にはサーバとは最初しか通信しない。リンクをクリックしてURLが変わってもサーバと通信しないので速い。

Angularは現在の最新バージョンは6だが2までと3からで大きく違う。3からはTypeScriptで記述するようになった。それまでの2までAngularはAngularJSなどという。

AngularではPHPのテンプレートのようにJavaScript内に特殊な書き方で変数を書いて、ビューとロジックを分離できる。この変数のバインディングが読み込み書き込みの双方向などにすることもできる。

Angularはコンポーネントのまとまりで構築される。ビュー上(html上)では1つのカスタムタグで表され。このタグの位置に書く。

Angularはnode.jsを使って管理されるのでクロスプラットフォームで動く。

node.js

開発と準備にはnode.jsを使うのでインストールしておく。インストール時にPATH設定をしないとモジュールのパスとかがユーザディレクトリの中になっていたりして分かりづらい。以下の2つのパスがPATHにセットされている必要がある。インストールした直後はPATHが反映されない可能性があるので注意。

確認

ng

Angularのコマンドラインツールngをインストールする。

-gはグローバルにインストールする。@はスコープを表してangularというグループの下のcliをインストールするという意味。

確認

c:\work\myangproj>ng -v

_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ Γû│ \ | ‘_ \ / _ | | | | |/ _ | ‘__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/

Angular CLI: 6.2.4
Node: 10.11.0
OS: win32 ia32
Angular:

Package Version
——————————————————
@angular-devkit/architect 0.8.4
@angular-devkit/core 0.8.4
@angular-devkit/schematics 0.8.4
@schematics/angular 0.8.4
@schematics/update 0.8.4
rxjs 6.2.2
typescript 2.9.2

これで準備ができた。

スケルトンアプリをつくる

インストールしたngコマンドをつかってスケルトンアプリをつくる。いろいろダウンロードするので結構時間がかかる。

gitがないとか怒られているが特に問題はないはず。

成功するとangappというサブフォルダが作成され、この中にアプリのスケルトンができる。ここから開発が始まるがここではスキップ。Visual Studio Codeをインストールしてあれば、ここからコマンドラインで起動するとパスも通って楽。

Visual Studio Codeにはターミナル機能もあるのでここからコマンド入力することもできる。

開発用サーバで動かしてみる

ngにはサーバ機能があり、これでアプリを動かすことができる。プロジェクトのファイルを変更しても変更も即座にブラウザがリロードされて反映される。

–openをつけるとデフォルトのブラウザが起動してアプリが表示される。

展開

今回は開発はしないので、ここでできたアプリを展開(デプロイ)してサーバにアップロードしてみる。

展開のコマンドはbuild

–base-hrefをつけないと、デフォルトでルート(/)になってしまうのでこうするか、あるいはできたindex.htmlのヘッダからbase hrefを削除する。

これでdistというフォルダができて、その中にアプリがあるのでこれをサーバに置けばいい。basehrefがちゃんとしてればローカルから開いても動く。

できたのがこれ

うまく動かない場合はブラウザの開発コンソールにエラーが出力されるのでそれを確認する。

wchar_tとchar16_t

char

C言語の最初のキャラクタータイプ。1バイト。ASCIIやISO-8859に使う。UTF8やShiftJISなどでも使う。Windowsの場合は通常マルチバイト文字と呼ばれるシステムの言語設定を反映した各国で異なる文字列になる。日本語のWindowsではShiftJISが入る。しかし今ではWindowsでは通常wchar_tを使いcharは使わない。Linuxでは通常UTF8を使うのでcharにはUTF8が入る。

wchar_t

次にできたキャラクタータイプ。サイズは実装依存。Windowsでは2バイト、Linuxでは4バイトになるので注意。何が入っているかも実装依存。WindowsではUTF16-LE。Linuxでは通常使用しないが、多分UTF32-LEが入っている。エンディアンはCPU依存と思われる。

char16_t, char32_t

2バイトと4バイトのキャラクタータイプ。何が入るかは実装依存。

リテラル

リテラルを表すには文字列の前に1~2文字の記号をつける。

標準ライブラリの文字列型

基本的にはbasic_stringなので、これに文字型を渡して
typedefしている。

標準入出力

string用のcoutとwstring用のwcout以外は定義されていないようだ。

Windowsのchar16_t

Windowsではwchar_tchar16_tはともに2バイトなのでキャストできるのだろう。

参考:実装ごとのサイズ

wchar_tのサイズがWindowsとLinuxで違う。

windbgで.NETのメモリリーク診断

WinDbgが必要。

OSのメニューのWindows Kitsの中にあるWinDbgを起動。対象のプロセスに合わせてx86かx64を選ぶ。C#アプリでAnyCPUの場合はOSに合わせる。

対象プロセスを起動してから、F6を押してプロセスにアタッチする。

WinDbgでシンボルを読み込むために以下を実行

対象プロセスの.NETバージョンとCPUに合わせて以下のどれかを実行。SOSはWinDbgの拡張で、.NETアプリ用の追加のコマンドが利用できるようになる。参照

調べたいオブジェクト型の名前で以下を実行。

リークを検出したいときは、オブジェクトがなくなる動作をしてからGCをして上の動作を行う。

git pull したときのconflict解消記録

pushで失敗

pullし忘れたり、pullしてpushする間に他の人がpushしたらなるのだと思われる。

pullで失敗

pushで失敗した場合、pullしてからpushすれば普通は大丈夫だったが、pullでコンフリクトが出てしまう。

このコンフリクトを直す。

status

まずはstatusを確認

これを見るとsrc/.gitignoreがコンフリクトしているみたいなのでこれを編集する。実際このファイルを開くと以下のようになっている。

<<<<<<< HEADから=======と=======から>>>>>>> a14ef8e3cac779dc3dc3d5e8882beb566351f423までを手動マージして直せばいいはず。以下のように直した。

これでgit addすれば直ったことになるはず。

あとはコミットしてpushしてみると成功した。