Author Archives: admin

Visual Studio 2017でnew.hやctype.hが見つからない

このエラーに遭遇すた場合は必要なコンポーネントがインストールされていない可能性がありなおかつVisual Studioがそのことを認識してない可能性がある。

これを修正するにはまずVisual Studio Installerを起動する。

起動したときに自動更新が始まったら問題は解決できるかもしれない。更新を実行しそのまま閉じる(コンポーネントは今はインストールしない)。

次に対象のソリューションを開くと、必要なコンポーネントがインストールされていないためプロジェクトが読込できなくなっている場合がある。この場合はプロジェクトを右クリックしてから「必要なコンポーネントがインストールする」を実行すれば直せる。

Windows10でWindows Defenderを無効にする

Windows10のバージョン1803(2018年)の場合

Windows + Rで実行ダイアログを表示し、gpedit.mscと入力して、グループポリシーエディタを開く。

左のツリーから「コンピューターの構成」→「管理用テンプレート」→「Windows コンポーネント」→「Windows Defender ウイルス対策」を開く。

次に右のリストから「Windows Defender ウイルス対策を無効にします」をダブルクリックする。

ダイアログで、「有効」にチェックし、「OK」をクリックする。しばらくするとWindows Defenderは止まる。

Windows Defenderを無効に

タスクトレイのアイコンはレジストリのHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Runの配下のSecurityHealthから起動される。

タスクマネージャから無効にできる。

タスクマネージャでスタートアップを無効に

Autorunsを使っても無効にできる。

やり方その1(英語バージョンのみ?)(古いバージョン)

Windows + Rで実行ダイアログを表示し、gpedit.mscと入力して、グループポリシーエディタを開く

Run Group Policy

Computer Configuration⇒Administrative Templates⇒Windows Components⇒Windows Defendeを開き、Turn off Windows DefenderEnabledにする。

bbbdd57b-59dc-49aa-848e-c9b79014602a

5a7625d3-0ddb-4bcb-98f8-d08e10b3c418

やり方その2(おそらく全バージョン)

以下のレジストリの値(DWORD)を1にして再起動。

clipshot 2015-08-19 02-59-20

bashで2つのコマンドの実行結果のdiffを見る

Process-Substitutionを使う。

これを実行すると2つのechoが実行され、その結果をパイプとしてdiffに渡す。

失敗例

これだと、diff a bを実行したことと同じになってしまう。

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してみると成功した。

C++のdecay

C++のテンプレート関係は難しくて、もともとのC++との整合性もあって複雑になっている。std::decayは配列とポインタの関係を扱ってテンプレートをより汎用的にするためのもの。

前提知識、配列はコピーできない

前提知識、配列は配列で初期化できない

前提知識、ポインタならコピーできる

コピーできると言ってもポインタにアドレスをコピーしているだけ。

前提知識:関数もコピーできない

配列と同様に関数もコピーできないけど、関数へのポインタならコピーできる。

std::decay

こんな事があるので、テンプレートで型を汎用的に扱おうとすると一部の型でできなくなることがある。このできなくなる型の場合にできる型に変換してくれるのがstd::decay

“aaa”というリテラル文字列は型としてchar[4]なのでそのままだと初期化できない。そこでdecayを使ってこれをポインタ型に変えるとコピーできる。

生関数のままの型だとコピーできないのでエラーになるけどdecayを使って関数へのポインタに変換すればコピーできる。