2023年8月15日火曜日

[NLog]ログファイルにログ出力する際に、追記ではなく、ログ出力内容を置き換える方法

 Output OptionsでreplaceFileContentsOnEachWrite をtrueに設定する

参考サイト

https://github.com/nlog/NLog/wiki/File-target

2023年4月25日火曜日

[windows,コマンド,仕事]コマンドプロンプトによるファイル一覧

 コマンドプロンプトによるファイル一覧のコマンドを備忘する。


[ファイルとフォルダを列挙する]

dir /b


[ファイルのみ列挙する]

dir /a


[フォルダのみ列挙する]

dir /ad


[フォルダツリーも含めて検索・列挙する]

dir /s /b


[カレントフォルダ配下のファイル一覧を出力する(ファイルパスも含めて)]

dir /s/b/a-d


2023年3月30日木曜日

[仕事,見積もり]外部見積(客向け)の単位は0.5人日する。

 見積もりの備忘録を以下に示す。

・外部向けの見積もり単位は0.5人日にする。

・例えば、作業Aの見積もりが0.2人日になる場合、外部見積もり(客向け)には0.5人日にする。

理由は他の作業の工数(作業B:0.2人日、作業C:0.2人日)を合算した場合、作業A+作業B+作業C=0.6人日になり、見積もりがきれいにならないため。

0.5人日単位だと、作業A(0.5人日)+作業B(0.5人日)+作業C(0.5人日)=1.5人日ときれいになる。





2023年3月29日水曜日

[仕事,見積もり]1日の生産性は200ステップが妥当である。

 見積もりの備忘録を以下に示す。

1日の生産性は200ステップが妥当である。

・1人月は20人日で1000ステップになる。

・工程としては、設計 > 実装 > 単体テスト > 結合テストになる。

・割合としては、以下になる

工程工数割合人日
設計5
実装5
単体テスト5
結合テスト5

・1000ステップを5で割ると1日200ステップが目標になるので、結論としては、1日の生産性は200ステップが妥当である。




2023年3月12日日曜日

[NUnit,xaml,Visual Studio]Nunit用のプロジェクトを追加する

1.Visual Studio 2019を起動する

2.テストプロジェクトを新規作成する。

 テンプレートプロジェクトは、クラスライブラリ(.Net Framework)を選択する

3.テストプロジェクトの参照に「nunit.framework」を追加する

  <src>\packages\NUnit\bin\nunit.framework.dll

4.テストプロジェクトの参照にテスト対象のプロジェクトを追加する

5.テストコードを実装する

6.Visual Studio 2019の拡張機能メニューから以下のツールをインストールする

  NUnit 2 Test Adapter

2023年2月12日日曜日

[react native,Expo CLI]expo startによるビルドサーバーのページがでない

 expo-cli@6.0.0以降のバージョンでは、Expo CLIのWebUIが廃止されたようです。

 https://blog.expo.dev/sunsetting-the-web-ui-for-expo-cli-ab12936d2206

[typescript, react native]React Navigation画面遷移サンプルアプリのひな形作成手順

 備忘録として、

React Navigation画面遷移ライブラリの環境構築の方法を記載する。

■前提条件

・nodejsがインストールされていること

・Expo-CLI が事前にインストールされていること

>npm install -g expo-cli


1./サンプルプロジェクトを作成する

> npx expo init react-navigation-sample


2.「react-navigation-sample」フォルダに移動する

> cd react-navigation-sample


3.React Navigationのコアライブラリをインストールする

> npm install @react-navigation/native


4-1.stackを使う場合、statckをインストールする

> npm install @react-navigation/stack


4-2.bottom-tabsを使う場合、bottom-tabsをインストールする

> npm install @react-navigation/bottom-tabs


4-3.drawerを使う場合、drawerをインストールする

> npm install @react-navigation/drawer


5.react-native-paperをインストールする

npm install react-native-paper


6.React Navigationの依存ライブラリをインストールする

> npx expo install react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context @react-native-community/masked-view


2022年10月16日日曜日

[C#,サンプルコード]Windowsをシャットダウンするのサンプルコード

参考サイト https://johobase.com/wmi-os-shutdown-csharp/ https://www.fenet.jp/dotnet/column/language/4629/
private void ShutdownWindows()
{
    try
    {
        ManagementClass managementClass = new ManagementClass("Win32_OperatingSystem");
        managementClass.Get();
        // 権限を有効化する
        managementClass.Scope.Options.EnablePrivileges = true;

        ManagementObjectCollection managementObjectCollection = managementClass.GetInstances();
        foreach (ManagementObject managementObject in managementObjectCollection)
        {
            // InvokeMethodでWMIのメソッドを実行する
            managementObject.InvokeMethod(
                "Win32Shutdown",
                // 強制シャットダウン指定
                new object[] { 5, 0 }
                );
            managementObject.Dispose();
        }
        managementObjectCollection.Dispose();
        managementClass.Dispose();
    }
    catch (Exception ex)
    {
        //なんかエラーログを出力する
    }
}

[C#,サンプルコード]HogeHogeをkillするのサンプルコード

private void TerminateHogeHoge()
{
    //ローカルコンピュータ上で実行されている"HogeHoge"という名前のすべてのプロセスを取得
    Process[] processes = Process.GetProcessesByName("HogeHoge");
    foreach (Process process in processes)
    {
        // メイン ウィンドウにクローズ メッセージを送信する
        bool isCloseMainWindow = process.CloseMainWindow();
        if (! isCloseMainWindow)
        {
            // 終了しなかった場合は強制終了する
            process.Kill();
        }

        // プロセスが終了するまで60秒間に待機する
        // TODO:何秒待機するのが適正化?暫定的に60秒。
        bool isExit = process.WaitForExit(60000);
        if (isExit)
        {
            return;
        }
        throw new HogeHogeException("一定時間内にHogeHogeが終了しませんでした。");
    }
}

2022年10月12日水曜日

[typescript,WebAPI,サンプルコード]DeepLのWebAPIを呼び出すTypeScriptのサンプルコード

import fetch from "node-fetch";

// DeepL WebAPI URL
const URL_API = "https://api-free.deepl.com/v2/translate?auth_key=";

//DeepLのAPIキーを設定 ※各自のAPIキーで書き換え
const apiKey = "xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx:fx";

// 翻訳対象言語
enum TARGET_LANG {
  Ja = "JA", // 日本語に翻訳
  En = "EN", // 英語に翻訳
}

// DeepLのWepAPIにRESTで翻訳依頼する
const executeTranslation = async (
  targetText: string,
  targetLang: TARGET_LANG
) => {
  //APIリクエストのGET時に必要なパラメータを設定
  const requestUrl =
    URL_API + apiKey + "&text=" + targetText + "&target_lang=" + targetLang;
  const response = await fetch(requestUrl);
  console.log("response", response);
  const json = await response.json();
  console.log("json", json);
  return json;
};

// WebAPIの返り値(JSON)をこっち側のクラスに変換する変換するためのType
type Translation = {
  detected_source_language: string;
  text: string;
};
type TranslationResult = {
  translations: Translation[];
};

const main = async () => {
  const result: TranslationResult = await executeTranslation(
    "This is translation test.",
    TARGET_LANG.Ja
  );
  console.log("英語から日本語への翻訳:result", result);
  console.log(
    "英語から日本語への翻訳:detected_source_language",
    result.translations[0].detected_source_language
  );
  console.log("英語から日本語への翻訳:text", result.translations[0].text);

  const result2: TranslationResult = await executeTranslation(
    "これは翻訳テストです。",
    TARGET_LANG.En
  );
  console.log("日本語から英語への翻訳:result", result2);
  console.log(
    "日本語から英語への翻訳:detected_source_language",
    result2.translations[0].detected_source_language
  );
  console.log("日本語から英語への翻訳:text", result2.translations[0].text);
};

main();


2022年10月11日火曜日

[npm, typescript]TypeScriptのインストールから実行まで

 ■前提条件

VSCodeをインストールする


■手順

1.npm init

2.npm install typescript

3.npx tsc --init

4.npx tsc



2022年10月7日金曜日

Windowsでプロセスのメモリ使用量を記録する方法

参考サイト

https://www.clear-code.com/blog/2022/3/1/windows-performance-log.html

■PDF化

 https://drive.google.com/file/d/1XT0BuMsxcEBuJL2WWnWcB4MByPblSXU-/view?usp=sharing

2022年8月1日月曜日

[react-native,react-navigation/drawer]createDrawerNavigator()を使用した時のエラー:Error: Reanimated 2 failed to create a worklet, maybe you forgot to add Reanimated's babel plugin"

 react-navigation/drawerのcreateDrawerNavigator()を使用した時のエラー対応を備忘する

■エラーメッセージ

"Error: Reanimated 2 failed to create a worklet, maybe you forgot to add Reanimated's babel plugin"


■対応手順

1.babel.config.jsに【plugins: ["react-native-reanimated/plugin"]】を追記する。

[babel.config.js]

-----

module.exports = function (api) {

  api.cache(true);

  return {

    presets: ["babel-preset-expo"],

    plugins: ["react-native-reanimated/plugin"],

  };

};

-----

2.[expo start -c]コマンドを実行する


■参考サイト

https://www.youtube.com/watch?v=Ad0LUwCytu4&ab_channel=LahoreGraphicsAcademy

2022年7月24日日曜日

[typescript, react native]React Native Expo でapkファイルを作成する

 備忘録になる


■前提条件

React Native Expoアカウントを作成する

https://expo.dev/


■手順

1.Expo プロジェクトを作成する

>expo init build-sample


2. プログラミング言語を選択する

 .blank (TypeScript)


3.「expo build:android」を実行する

> npx expo build:android


4.Androidパッケージ名を決める

> What would you like your Android package name to be?

> com.example.myapp


5.ビルドタイプを決める

> Choose the build type you would like: 

> apk


6.KeyStoreを指定する

>? Would you like to upload a Keystore or have us generate one for you?

>If you don't know what this means, let us generate it! :) »

>Generate new keystore


7.expo-updatesのインストール

>In order to publish an update, expo-updates needs to be installed. Do you want to install it now? 

>Y


8.ビルドが成功したことを確認する

>Successfully built standalone app


9.apkダウンロードのURLが通知される。


2022年6月23日木曜日

オブジェクト指向エクササイズ

 オブジェクト指向エクササイズは、書籍「ThoughtWorksアンソロジー」に記載されている。

ソースコードを書くときに以下のルールを適用する。


  1. 1つのメソッドにつきインデントは1段階までにすること
  2. else句を使用しないこと
  3. すべてのプリミティブ型と文字列型をラップすること
  4. 1行につきドットは1つまでにすること
  5. 名前を省略しないこと
  6. すべてのエンティティを小さくすること
  7. 1つのクラスにつきインスタンス変数は2つまでにすること
  8. ファーストクラスコレクションを使用すること
  9. Getter、Setter、プロパティを使用しないこと

参考
https://youtu.be/Ucd-lMmDuFQ

2022年2月17日木曜日

[TypeScript,JavaScript]Study項目

以下のTypeScript/JavaScriptについて、空き時間に学習する。


・ Symbol.for()

https://nextribe.co.jp/katayan/basic-of-symbol-js


・typeof X[keyof typeof X]

https://nishinatoshiharu.com/keyof-typeof/


2022年1月4日火曜日

[Node.js]Visual Studio CodeにNode.jsのテスト環境を構築

 以下の拡張機能プラグインをインストールする



■拡張機能プラグイン

・Jest Runner

・Jest Snippets

・Jest Test Explorer

・Test Adapter Converter

・Test Explorer UI


2022年1月3日月曜日

[npm]プロジェクトの管理

 npmのプロジェクト管理の備忘を記載する。

以下の3つだけ覚えておく。


1.npm init

2.npm install

3.npm run


■参考

https://www.webdesignleaves.com/pr/jquery/npm_basic.html

[npm] コマンド

npmコマンドを備忘する

■ローカルインストール(プロジェクトのディレクトリで実行)

npm install パッケージ名


■グローバルインストール

npm install -g パッケージ名


■参考

https://www.webdesignleaves.com/pr/jquery/npm_basic.html

2021年6月23日水曜日

[InstallShield]InstallShieldのログ(MSIログ)出力方法

InstallShieldのログ(MSIログ)出力方法を備忘する。

説明として、コマンドを例として手順を示す。 

setup.exe  /v"/Liwrmo!v+ucae c:\temp\MSIlog.log"


参考サイト

https://tec-world.networld.co.jp/faq/show/214

2021年5月28日金曜日

[Visual Studio]VC6.0++のSPバージョンの確認方法

VC6.0++のSPバージョンは、レジストリの以下の値で確認できる。

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\6.0\ServicePacks

2020年11月15日日曜日

[InstallShield 2020 Pro] 標準ダイアログ(Welcome画面など)のイベントハンドラの修正

 標準ダイアログ(Welcome画面など)のイベントハンドラの修正方法を備忘する。

説明として、SdWelcome関数(Welcome画面)を例として手順を示す。


1.InstallShield 2020 Pro版を起動する。

2.[InstallScript] ビューを表示する

3.setup.rulを選択する

4.[InstallScript] ビューのドロップダウンリストの[Dialog Source] 選択する

5.SdWelcome関数のイベントハンドラのコードがsetup.rulに追記される




参考サイト:
https://community.flexera.com/t5/InstallShield-Forum/is-there-a-way-to-modify-dialog-functionality/td-p/22031



2020年10月12日月曜日

LifeGame

備忘です。

LifeGameのサンプルを以下に格納する。

 https://emg-my.sharepoint.com/personal/s-tsuruda_eandm_co_jp/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fs%2Dtsuruda%5Feandm%5Fco%5Fjp%2FDocuments%2FLifeGame

2020年9月16日水曜日

Excel Workbook_Openのデバッグ方法

 VBA Workbook_Openのデバッグ方法を備忘する。


[memo]

・Excelを開いた際、VBA AUTO_OPEN・Workbook_Openは呼び出される。

  Excel起動時に実行したい処理を実装するプロシージャになる。

・VBAがパスワードでロックされていると、Stopステートメントが動かない。

  そのため、パスワードのロックを解除して、Excelを開くこと


[Workbook_Openイベントプロシージャのデバッグ方法]

Workbook_OpenイベントプロシージャにStopステートメントを実装する。


Private Sub Workbook_Open()

  Stop

  ' 何らかの処理

End Sub


Workbook_Openを実装しているブック(Excel)を開いた際に、

ブレークポイントと同様に、デバッグできるようになる。


2020年9月7日月曜日

生産性指標(うちの会社の)

 1.0KL規模の開発における期間が1ヶ月なので、

詳細設計~単体テストまでを含む。

よって、詳細設計に1Week、単体テストに1Weekを要するなら、

1日のステップ数は100ステップになる。


2020年8月17日月曜日

VisualStudioのリリース構成 [Release MinDependency] [Release MinSize ]について

VisualStudioのリリース構成 [Release MinDependency] [Release MinSize ]についての備忘。

[情報ソース先]
https://docs.microsoft.com/ja-jp/cpp/windows/redistributing-an-atl-application?view=vs-2019

[Release MinDependency]
MinDependency 構成は、[全般] プロパティ ページの [ATL の使用] プロパティを [ATL に静的にリンク] に設定し、[コード生成] プロパティ ページ ([C/C++] フォルダー) の [ランタイム タイブラリ] プロパティを [マルチスレッド (/MT)] に設定した場合です。

[Release MinSize]
MinSize 構成は、[全般] プロパティ ページの [ATL の使用] プロパティを [ATL に動的にリンク] に設定し、[コード生成] プロパティ ページ ([C/C++] フォルダー) の [ランタイム タイブラリ] プロパティを [マルチスレッド DLL (/MD)] に設定した場合です。
MinSize を使用すると、出力ファイルは可能な範囲で最小になりますが、ターゲット コンピューターに ATL100.dll と Msvcr100.dll ([マルチスレッド DLL (/MD)] オプションを選択した場合) が必要になります。 すべての ATL 機能を使用できるようにするために、ATL100.dll をターゲット コンピューターに登録する必要があります。 ATL100.dll には ANSI および Unicode エクスポートが含まれています。
ATL または OLE DB テンプレート プロジェクトを MinDependency ターゲット用にビルドした場合、ターゲット コンピューターへの ATL100.dll のインストールと登録は不要ですが、プログラム イメージが大きくなります。

2020年7月10日金曜日

Hyper-V vhdxファイルの圧縮コマンド

Hyper-Vのvhdxファイルの圧縮方法を備忘する。

[事前準備は不要]
デフラグ・sdeleteの事前準備は不要みたい。
デフラグ・sdeleteの事前作業を実施してからVHD/VHDXを最適化したとしても、縮小後のファイルサイズに大きな違いはないらしい。
参考サイト:
https://www.atmarkit.co.jp/ait/articles/1609/26/news016.html

1.PowerShellを管理者権限で起動する。
2.以下のコマンドを実行する。
Mount-VHD "vhdxファイルパス" -NoDriveLetter -Readonly
Optimize-VHD "vhdxファイルパス" -Mode QuickまたはFull
Optimize-VHD "vhdxファイルパス" -Mode QuickまたはFull*1
Dismount-VHD "vhdxファイルパス"

例:
Mount-VHD "C:\Temp\WinSer2016Stdx64.vhdx" -NoDriveLetter -Readonly
Optimize-VHD "C:\Temp\WinSer2016Stdx64.vhdx" -Mode Quick
Optimize-VHD "C:\Temp\WinSer2016Stdx64.vhdx" -Mode Quick*1
Dismount-VHD "C:\Temp\WinSer2016Stdx64.vhdx"

[
*1:Optimize-VHD コマンドを2回実行する]
vhdxファイルのサイズが圧縮しない場合、Optimize-VHDコマンドを2回連続で実行すると圧縮するらしい。原因は謎。

参考サイト:
https://page.ak2ie.net/2019/05/28/optimize-vhd/
https://yamanxworld.blogspot.com/2017/09/vhdx.html

2020年7月5日日曜日

Excel ショートカット

■Excel ショートカット
Excelショートカットの備忘録を記載する

・ctrl+Shift+5
表示形式をパーセントにする

・F4
参照方式(相対参照、絶対参照)を切り替える

・ctrl+Shift+@
数式の確認

・ctrl+Shift+*
アクティブセルが含まれるデータベースの一括選択
(空白行と空白列に囲まれた範囲(1つのデータベース))

・ctrl+Shift+v
形式を選択して貼り付ける

・ctrl+G
ジャンプ機能で空白セルを一括選択

・ctrl+H
特定の文字列を置換する

・ctrl+alt+v
形式を選択して貼り付ける

・ctrl+Shift+->
データがある末尾まで選択する

・Shift+->
複数のセル範囲を選択する



2020年4月17日金曜日

C++のコメントの書き方

C++のコメントの書き方を備忘する。

■関数コメント
// 関数:関数名を書く。例:IsHoge(Hoge hoge)
// 引数:引数の意味を書く。例:Hoge hoge:Hoge管理用オブジェクト
// 戻値:戻り値の意味を書く。例:true:hogeが有る、false:hogeが無い
// 詳細:関数の詳細を書く。例:hogeの有無を検証する

参考サイト
https://qiita.com/inabe49/items/23e615649e8539d857a8

2020年3月21日土曜日

OpenSSL1.1.1c(TLS.1.3対応版)のビルド(VisualStudio 2017版)

【ビルド環境】
Visual Studio Pro 2017

【準備】
1)「Visual Studio 2017 Professional」をインストールする。
1-1)
VisualStudioインストーラを起動(vs_professional__515800772.1574310941.exe)
1-2)
インストールコンソールから、「C++によるデスクトップ開発」を選択
1-3)
「全部ダウンロードしてから、インストールする」を選択
1-4)
インストールパッケージを30分程度でダウンロードする
1-5)
ダウンロード後、60分程度でインストールを実行する

2)Perlインストール
2-1) Perlをインストールする。選択肢はデフォルトで実施。
link:https://www.activestate.com/activeperl/downloads

5.26より新しいのActiivePerlは、VC-WIN32をサポートしていない。
そのため、ActivePerlを使う場合は、5.26以前のActivePerlを使う必要がある。

2-2)コマンドプロンプト上でバージョン確認。
perl --version

3)NASMインストール
3-1)NASMをインストールする。
link:http://www.nasm.us/
3-2)nasmのzipをダウンロードし、解凍する。
※openSSLビルド環境構築先が、Win10x64なので、nasm-2.14.02-win64.zipをダウンロード。
3-3)NASMのインストール先フォルダを、環境変数の「Path」に追加する。
3-4)コマンドプロンプト上でバージョン確認。
nasm --version

4)OpenSSL
3-1)OpenSSLのソースコードをダウンロードする。
link:https://www.openssl.org/source

3-2) OpenSSLのソースコードを解凍する。
解凍先例:C:\build_openssl\openssl-1.1.1c

3-3)OpenSSLコンパイル生成先フォルダを作成する。
例:C:\build_openssl\output\openssl_v1.1.1c\win\x86

【ビルド手順】
1) スタートメニューから「VS 2017 用 x64_x86 Cross Tools コマンド プロンプト」を起動する。
2) cdコマンドでOpenSSLのソースコードのフォルダへ移動する。
コマンド例)cd C:\build_openssl\openssl-1.1.1c

3) perlのコマンドを実行する。
コマンド例)perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 --openssldir="C:/build_openssl/output/openssl_v1.1.1c/win/x86/SSL"
→Configure VC-WIN32:Windwos32ビット版OpenSSLがビルドする。今回はWindwos32ビット版のOpenSSLが必要だったので、こっちを指定する。
→--prefix:OpenSSLビルド生成物の格納先を指定する。
→--openssldir:後述のエラーメッセージ2対応方法参照。

蛇足だが、Visual C++ランタイムを静的リンクする際は、以下のコマンドでできるみたい。
コマンド例)perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 --openssldir="C:/build_openssl/output/openssl_v1.1.1c/win/x86/SSL" "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"

"CFLAGS=/MT"の指定は、C:\build_openssl\openssl-1.1.1c\makefileのCFLAGSの設定になるみたい。

以下のエラーメッセージが出た場合。
>It looks like you don't have either nmake.exe or dmake.exe on your PATH,
>so you will not be able to execute the commands from a Makefile.  You can
>install dmake.exe with the Perl Package Manager by running:
>    ppm install dmake

ppm install dmakeを実行する。

4) nmake installを実行する。

■エラーメッセージ1
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64_x86'

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional>cd C:\build_openssl\openssl-1.1.1c
C:\build_openssl\openssl-1.1.1c>perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"
Configuring OpenSSL version 1.1.1c (0x1010103fL) for VC-WIN32
Using os-specific seed configuration
Can't locate Win32/Console.pm in @INC (you may need to install the Win32::Console module) (@INC contains: C:/build_openssl/openssl-1.1.1c/util/perl C:/Perl64/site/lib C:/Perl64/lib) at C:/Perl64/lib/ActivePerl/Config.pm line 400.
Compilation failed in require at C:/Perl64/site/lib/ExtUtils/MakeMaker.pm line 9.
BEGIN failed--compilation aborted at C:/Perl64/site/lib/ExtUtils/MakeMaker.pm line 9.
Compilation failed in require at C:/Perl64/site/lib/IPC/Cmd.pm line 235.

■エラーメッセージ1対応方法
https://qiita.com/takehiakihiro@github/items/97b1b1b9f28a563cc920

[対応方法1]
5.26より新しいのActiivePerlは、VC-WIN32をサポートしていない。
そのため、ActivePerlを使う場合は、5.26以前のActivePerlを使う必要がある。

[対応方法2]
ActivePerlを使えない場合、Strawberry Perlに切り替え

■エラーメッセージ2
*** Installing runtime programs
Copying: apps//openssl.exe to C:/build_openssl/output/openssl_v1.1.1c/win/x86/bin/openssl.exe
Copying: apps//openssl.pdb to C:/build_openssl/output/openssl_v1.1.1c/win/x86/bin/openssl.pdb
Copying: ./tools/c_rehash.pl to C:/build_openssl/output/openssl_v1.1.1c/win/x86/bin/c_rehash.pl
Cannot create directory C:/Program Files (x86)/Common Files/SSL: No such file or directory
NMAKE : fatal error U1077: 'C:\Perl64\bin\perl.exe' : リターン コード '0x2'
Stop.

■エラーメッセージ2対応方法
https://github.com/openssl/openssl/issues/6072
回避策は--openssldir="D:\target\dir\SSL"、perl.exeコマンドを呼び出すときにパラメーターを追加することです。
perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"
↓(修正後)
perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 --openssldir="C:/build_openssl/output/openssl_v1.1.1c/win/x86/SSL" "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"

【参考サイト】
ビルド時のコマンド
https://www.sumirelab.com/docs/tech/windows-%E3%81%A7-openssl-%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%83%A1%E3%83%A2/

生成物について
http://lfsbookja.osdn.jp/svn-sysdja/chapter06/openssl.html

Visual C++ランタイムの静的リンク
https://www.picolix.jp/blog/2018/12/openssl-111a-tls-13-smail-tls-13.html

【その他】
OpenSSLに使ったビルドツール
https://drive.google.com/drive/folders/1FMBJtZEL_90vF4XXDgXYxaUjxVDJdYLx

2020年3月9日月曜日

<仕事・備忘録>委託プロジェクト実績報告書の発見欠陥数

仕事で2度忘れていた。備忘録する。

発見欠陥数はαを計上すること

■指摘事項分類
α 欠陥(障害ARになるもの)であり、修正が必要なもの
β (障害ARになる)欠陥ではないが修正が必要なもの
γ 修正不要、または修正は作成者の判断に委ねるもの

2020年3月7日土曜日

実績のつけ方

.実績の算出
→設計書:ページ数
 →Word文書:変更があるページ数
  →例えば、あるページの1行を変更した場合、1ページと換算する
 →Excel文書:変更があるシート数
  →例えば、あるシートの1行を変更した場合、シートを1ページと換算する
→ソースコード:ステップ数
  →新規ステップ数+変更ステップ数+削除ステップ
  →かぞえちぇおで修正前と修正後の差分(新規・変更・削除)のステップ数がでる
         →かぞえちゃお
            新規:新規ステップ数
            変更:修正ステップ数
            削除:削除ステップ数

参考
https://qiita.com/bremen/items/ba5b671cb33fe6029cf5




2020年3月5日木曜日

VisualStudio2008でboostv1.72.0をビルドしてみた(途中)

VisualStudio2008によるboostV1.72.0の ビルド手順を記載する。

■前提

・Windwos10 Pro
・VisualStudio2009 Pro版SP無し
・boostv1.72.0をダウンロードする
   https://www.boost.org/users/download/


■手順
1.bootstrap.batの実行
以下手順で、コマンドプロンプトを起動する
スタート > Microsoft Visual Studio 2008 > Visual Studio 2008 コマンド プロンプト

2.> cd <解凍したディレクトリ>


3.以下のコマンドを実行する

bootstrap.bat

以下のエラーメッセージが表示される
-----------------------------------------------------------------------------
Building Boost.Build engine
ファイルが見つかりません

Failed to build Boost.Build engine.


Please consult bootstrap.log for further diagnostics.
------------------------------------------------------------------------------

4.bootstrap.batの同階層フォロダにbootstrap.logが生成される。

  bootstrap.logに以下、error1,error2,error3が出力される。

error1

------------------------------------------------------------------------------
c:\build_trial\boost_1_72_0\tools\build\src\engine\sysinfo.h(41) : error C2864: 'b2::system_info::cpu_core_count_' : static const int データ メンバ以外をクラス内で初期化することはできません
------------------------------------------------------------------------------

error2

------------------------------------------------------------------------------
c:\build_trial\boost_1_72_0\tools\build\src\engine\sysinfo.h(42) : error C2864: 'b2::system_info::cpu_thread_count_' : static const int データ メンバ以外をクラス内で初期化することはできません
------------------------------------------------------------------------------

error3

------------------------------------------------------------------------------
sysinfo.cpp(10) : fatal error C1083: include ファイルを開けません。'thread': No such file or directory

------------------------------------------------------------------------------ 


error1・error2の直し方

boost_1_72_0\tools\build\src\engine\sysinfo.h
sysinfo.h
[before]
------------------------------------------------------------------------------

        unsigned int cpu_core_count_ = 0;

        unsigned int cpu_thread_count_ = 0;


------------------------------------------------------------------------------

[after]

------------------------------------------------------------------------------

        unsigned int cpu_core_count_;

        unsigned int cpu_thread_count_;


------------------------------------------------------------------------------


boost_1_72_0\tools\build\src\engine\sysinfo.cpp
sysinfo.cpp
[before]
------------------------------------------------------------------------------

b2::system_info::system_info()
{
}




------------------------------------------------------------------------------

[after]

------------------------------------------------------------------------------

b2::system_info::system_info()

{

    cpu_core_count_ = 0;

    cpu_thread_count_ = 0;

}

------------------------------------------------------------------------------

error3の直し方
[before]
------------------------------------------------------------------------------

#include
...(省略)
    unsigned int std_thread_hardware_concurrency()
    {
        return std::thread::hardware_concurrency();
    }
------------------------------------------------------------------------------


[after]
------------------------------------------------------------------------------

// #include 
...(省略)
    unsigned int std_thread_hardware_concurrency()
    {
        //return std::thread::hardware_concurrency();
        return 0;//この値は処理系のスレット上限になるみたい
    }
------------------------------------------------------------------------------


■補足
Visual Studo2008にてBoost1.72.0のコンパイルに失敗するケースがある。
要因はboostのバグ。

修正差分コード

2020年3月1日日曜日

ff14 侍

■Level25の戦い方
刃風→陣風→結果:与ダーメジUpバッフ
刃風→士風→結果:攻撃間隔短Upバッフ

遠距離攻撃:燕飛

■Level25の戦い方
刃風→陣風→月光→結果:「月」の閃が付与

前提:「月」の閃
「抜刀術」→「彼岸花」

範囲攻撃:風雅
※敵が3体以上の時連続して使う

■Level45の戦い方
刃風→陣風→花車→結果:「花」の閃が付与

前提:「月」「花」の閃
「抜刀術」→「天下五剣」

敵が3体以上の時使う。
風雅→満月→結果:「月」の閃が付与
風雅→桜花→結果:「花」の閃が付与

■Level50の戦い方
雪風→結果:「雪」の閃が付与

明鏡止水
→コンボ状態に関係なく、月光、花車、雪風の発動時に閃を付与。

乱れ雪月花
→「月」「花」「雪」の閃が溜まった状態で発動可能。

■Level50のスキル回し
刃風→士風→花車
刃風→陣風→月光
明鏡止水→雪風→乱れ雪月花
月光→彼岸花→月光
刃風→士風→花車
刃風→雪風→乱れ雪月花
刃風→陣風→月光
刃風→雪風
刃風→士風→花車
乱れ雪月花
刃風→陣風→月光
刃風→雪風
刃風→士風→花車
乱れ雪月花
明鏡止水→雪風
彼岸花
月光→花車
刃風→雪風→乱れ雪月花

2020年2月24日月曜日

Visual Studio C++ でDLL作成

[前提条件]
・Windows 10
・Visual Studio 2019 インストール済み

具体的な手順は以下のサイトを参照する。
チュートリアル: 独自のダイナミックリンクライブラリを作成してC++使用する ()
https://docs.microsoft.com/ja-jp/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=vs-2019

Backup
https://drive.google.com/drive/folders/1PwTSJMICm0EA1gbfARqJrhYmuv66Ni60

OpenSSLの証明書検証

OpenSSLの証明書検証について記載する。

【証明書検証の無効化】
SSL_VERIFY_NONEをパラメータで指定し、OpenSSLのSSL_CTX_set_verify()を呼び出す。
SSL_VERIFY_NONEを指定した場合、OpenSSLの証明書検証結果を無視し、TLS/SSLハンドシェイクを継続する。

【証明書検証の有効化】
証明書検証を実行するための修正点を記載する。

1.証明書検証機能の有効化
SSL_CTX_set_verify()に指定するSSL_VERIFY_NONEをSSL_VERIFY_PEERに変更し、証明書検証機能を有効化する。

2.OpenSSLへの信頼された証明書の読み込み
SSL_CTX_load_verify_locations()を使用して、OpenSSLに信頼された証明書を読み込ませる。信頼された証明書の指定は、第2引数にPEMファイルのファイルパスを指定する。

3.証明書検証エラーのエラーマッピング
TLS通信エラーが発生した場合、証明書検証のエラーメッセージとERR_error_string()で取得した文字列比較をし、一致した場合、証明書検証のエラーとして、マッピングする。

■証明書検証のエラーメッセージ
「error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed」
TLS通信エラーが発生した場合、OpenSSLのエラーメッセージをERR_error_string()で取得することができる。

【参考】
IBMの開発者サイト:独自の信頼できる証明書の提供
https://www.ibm.com/developerworks/jp/linux/library/l-openssl2/index.html

OpenSSL公式サイト
https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_load_verify_locations.html

Windows上で、証明書や秘密鍵をPEM形式に変換してエクスポートする
https://www.atmarkit.co.jp/ait/articles/1602/05/news039.html

boost ビルド

以下にboost ビルド手順を記載する。
バージョンは、V1.72.0になる。

[前準備]
1.VC++ 2019をインストールする

2.最新のboost ソースコードをダウンロードする。
https://www.boost.org/users/download/#live

[ビルド手順]
1.ダウンロードしたソースコードを解凍する

2.解凍したディレクトリに移動する
> cd (解凍したディレクトリ)

3.bootstrap.batを実行する
> bootstrap.sh

4.b2.exe,bjam.exeが生成されているか確認する

5.boostのビルドを実行する。
以下は、ビルド時のオプションパラメータのサンプル。

 // MD ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=shared release stage

// MDd ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=shared debug stage

// MT ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=static release stage

// MTd ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=static debug stage

// MD ランタイム用の特定ライブラリ(例system)をビルド
b2.exe --toolset=msvc-14.2 link=static runtime-link=static --with-system

[オプションパラメータの知識]
・show
コンパイル対象のboostライブラリの一覧を表示する。後述のwithにて指定するboostライブラリの名前の検索に使う。

// コンパイル対象のboostライブラリの一覧を表示
b2 --show-libraries

・toolset
boostビルド時に指定するVC++のコンパイルバージョンを指定ができる。
--toolset=msvc-14.2 : VS2019用,VS2005の場合はmsvc-8.0,VS2008の場合はmsvc-9.0

例:Visual Studio2019の指定。
b2.exe --toolset=msvc-xx.x link=static runtime-link=static

↓[xx.x]を14.2に置き換える。14.2は、Visual Studio2019のバージョン指す。

b2.exe --toolset=msvc-14.2 link=static runtime-link=static

・link
static or shared。
生成物の種類の指定。動的リンク(DLLファイル)。それとも静的リンク(libファイル)

 // 動的リンク(DLLファイル)
>b2.exe --toolset=msvc-14.2 link=static runtime-link=static release stage

// 静的リンク(libファイル)
>b2.exe --toolset=msvc-14.2 link=shared runtime-link=static debug stage

・runtime-link
static or shared。
VC++ の標準ライブラリを動的リンク(DLLファイル)。それとも静的リンク(libファイル)するかどうかを指定。
VC++ プロジェクトで /MT を指定する場合には runtime-link=static,
VC++ プロジェクトで /MD を指定する場合には runtime-link=shared にしないとライブラリのリンクで問題が発生するぽっい。
→MT, MTdそれとも、MD, MDd。

・with
ビルドするboostライブラリの指定ができる

// MD ランタイム用の特定ライブラリ(例system)をビルド
b2.exe --toolset=msvc-14.2 link=static runtime-link=static --with-system

[参考サイト]
以下、boostビルドに参考にさせていただいたサイト。感謝。

Boostライブラリのビルド方法
https://boostjp.github.io/howtobuild.html

--toolset=msvc-10.0 : VS2010用,VS2005の場合はmsvc-8.0,VS2008の場合はmsvc-9.0
http://www.slis.tsukuba.ac.jp/~fujisawa.makoto.fu/cgi-bin/wiki/index.php?build_boost

Boostのヘッダオンリー or ビルドが必要なライブラリ
https://boostjp.github.io/tips/build_link.html

b2.exe のオプションについて
http://krustf.hateblo.jp/entry/20100804/1280873428
http://umezawa.dyndns.info/wordpress/?p=5823
http://www.kmonos.net/pub/BoostBook/1st/vctk.html

boost::asioでhttps-post
http://eiki.hatenablog.jp/entry/20130617/1371436691

Visutal Studio で Boost C++ Libraries をビルドする
https://clown.cube-soft.jp/entry/20110323/1300886446

boostを真面目にVisualC++2010でコンパイルしてみた
http://krustf.hateblo.jp/entry/20100804/1280873428







2019年11月27日水曜日

備忘録:Windwosの共有メモリの詳細なサイト

備忘録として、Windwosの共有メモリの詳細なサイトのURLを残す。

共有メモリの解説として
http://chokuto.ifdef.jp/advanced/sharedmem.html

サンプルコードとして
https://www.wabiapp.com/WabiSampleSource/windows/shared_memory.html

2019年10月17日木曜日

VisualStudoでコンパイル時にVisual C++ランタイムを静的リンクする方法

■前提条件
・Visual Studio C++環境

■手順
※Visual Studioのバージョンが異なっても同じはず。自分はVisual Studio Pro 2008 C++で確認した。

1.VisualStudoを起動する
2.[メニュー」→「プロジェクト」→「xxxx のプロパティ」
  →xxxx のプロパティページ ダイアログが表示する
.[構成プロパティ]→「C/C++」→[コード生成]→[ランタイムライブラリ]
  →「マルチスレッド DLL (/MD)」に変更する。

■静的リンク
「マルチスレッド (/MT)」
「マルチスレッド デバッグ (/MTd)」

■動的リンク
「マルチスレッド DLL (/MD)」
「マルチスレッド デバッグ DLL (/MDd)」

Release版
「マルチスレッド (/MT)」
「マルチスレッド DLL (/MD)」

Debug版
「マルチスレッド デバッグ (/MTd)」
「マルチスレッド デバッグ DLL (/MDd)」


参考サイト
動的リンクと静的リンクについて
https://ohwhsmm7.blog.fc2.com/blog-entry-78.html

2019年10月16日水曜日

OpenSSL1.1.1c(TLS.1.3対応版)のビルド(VisualStudio 2019版)

【ビルド環境】
Visual Studio Pro 2019

【準備】
1)Perlインストール
1-1) Perlをインストールする。選択肢はデフォルトで実施。
link:https://www.activestate.com/activeperl/downloads

1-2)コマンドプロンプト上でバージョン確認。
perl --version

2)NASMインストール
2-1)NASMをインストールする。
link:http://www.nasm.us/

2-2)nasmのzipをダウンロードし、解凍する。
※openSSLビルド環境構築先が、Win10x64なので、nasm-2.14.02-win64.zipをダウンロード。

2-3)NASMのインストール先フォルダを、環境変数の「Path」に追加する。

2-4)コマンドプロンプト上でバージョン確認。
nasm --version

3)OpenSSL
3-1)OpenSSLのソースコードをダウンロードする。
link:https://www.openssl.org/source

3-2) OpenSSLのソースコードを解凍する。
解凍先例:C:\build_openssl\openssl-1.1.1c

3-3)OpenSSLコンパイル生成先フォルダを作成する。
例:C:\build_openssl\output\openssl_v1.1.1c\win\x86

【ビルド手順】
1) スタートメニューから「x64_x86 Cross Tools Command Prompt for VS 2019」を起動する。
2) cdコマンドでOpenSSLのソースコードのフォルダへ移動する。
コマンド例)cd C:\build_openssl\openssl-1.1.1c

3) perlのコマンドを実行する。
コマンド例)perl Configure VC-WIN32 --prefix=C:/openssl/win/x86
→Windwos32ビット版OpenSSLがビルドする。今回はWindwos32ビット版のOpenSSLが必要だったので、こっちを指定する。

蛇足だが、Visual C++ランタイムを静的リンクする際は、以下のコマンドでできるみたい。
コマンド例)perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"

"CFLAGS=/MT"の指定は、C:\build_openssl\openssl-1.1.1c\makefileのCFLAGSの設定になるみたい。

4) nmake installを実行する。

参考サイト
ビルド時のコマンド
https://www.sumirelab.com/docs/tech/windows-%E3%81%A7-openssl-%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%83%A1%E3%83%A2/

生成物について
http://lfsbookja.osdn.jp/svn-sysdja/chapter06/openssl.html

Visual C++ランタイムの静的リンク
https://www.picolix.jp/blog/2018/12/openssl-111a-tls-13-smail-tls-13.html

2019年9月20日金曜日

python メモ

pythonの備忘録を記載する

--------------------------------------------------------------------------------------------
メモ
--------------------------------------------------------------------------------------------
■比較演算子
A in B AがB(リストやタプル)に含まれている時にTrueを返す

■python while文 for文の使い分け
[for文]
ループする回数が判明してるに使う。
例えば、リストの総要素回数

[while文]
ループする回数が判明していない時に、条件式を規定して、ループする。

■pyhon アンパック1
hoge = (0, 1, 2)

a, b, c = hoge

print(a)
print(b)
print(c)
>> 0
>> 1
>> 2

hoge = [0, 1, 2]

a, b, c = hoge

print(a)
print(b)
print(c)
>> 0
>> 1
>> 2

■pyhon アンパック2
タプルは丸括弧を省略可。以下のように複数の変数に複数の値を1行で代入できる。

a, b = 0, 1

print(a)
print(b)
>> 0
>> 1

■pycharn ショートカット
・コードの整形( Ctrl + Alt + L )
・コメントアウト( Ctrl + / )
・関数や変数の名前変更( Shift + F6 )
・関数などの定義を確認する( Ctrl + Shift + I )
・ファイルの新規作成( Alt + Insert )
・クリッップボード履歴(Ctrl + Shift + V )
・タブ移動( Ctrl + Tab )
・コードの改善提案の表示( Alt + Enter )

2019年9月19日木曜日

Visual Studio

Visual Studioの備忘録を記載する

--------------------------------------------------------------------------------------------
ショートカット
--------------------------------------------------------------------------------------------
■指定行への移動
ctrl+g

--------------------------------------------------------------------------------------------
つまづいた問題
--------------------------------------------------------------------------------------------
■デバッガでブレイクポイントに止まらない症状の対策
メニューバーから「ツール > オプション > デバッグ 」に行って、以下チェックボックスをOFFにする
  ・元のバージョンと完全に一致するソースファイルを必要とする




2019年7月19日金曜日

boost C++ std::vector ループ中に要素を削除する

基本的には以下の方針でループ中に条件に一致する要素を削除できる

auto itr = numbers.begin();
while (itr != numbers.end())
{
    if(((*itr) == a) || ((*itr) == b))// 削除条件の判定
    {
        // erase関数の返り値で次要素のポインタが返る
        itr = numbers.erase(itr);
    }
    else
    {
        itr++;
    }

}

2019年5月1日水曜日

ApacheServerにTLSv1.3を適用する手順

■ApacheServerにTLSv1.3を適用する。

[ApacheServerのインストール]
注意
  ・Apacheをインストールする際は、Apache 2.4.37以降を使うこと。
    Apache 2.4.37からOpenSSL1.1.1とTLSv1.3をサポートしているため。

手順
1.Apacheをダウンロードする。

ダウンロード先
OpenSSLを同梱したApacheをダウンロードする。

・Apache Haus
https://www.apachehaus.com/cgi-bin/download.plx
・個人(win32ビット対応のApacheServer)
https://emg-my.sharepoint.com/:u:/r/personal/s-tsuruda_eandm_co_jp/Documents/tools/ApacheServer/httpd-2.4.39-o111b-x86-vc15.zip?csf=1&e=mJgi2i

.ダウンロードした「httpd-2.4.39-o111b-x86-vc15.zip」ファイルを解凍します。
  例:c:\Apache\

2.Apache設定ファイル(httpd.conf)の編集
  httpd.confの格納先
  例:C:\Apache\Apache24\conf

[ServerRoot]
--------------------------------------------------------------------------------
修正前
Define SRVROOT "/Apache24"
ServerRoot "${SRVROOT}"

修正後
Define SRVROOT "C:/Apache/Apache24"
ServerRoot "${SRVROOT}"
--------------------------------------------------------------------------------

[Listen]
--------------------------------------------------------------------------------
修正前
Listen 80

修正後
Listen 172.27.67.146:80
--------------------------------------------------------------------------------

[ServerName]
--------------------------------------------------------------------------------
修正前
ServerName localhost:80

修正後
ServerName 172.27.67.146:80
--------------------------------------------------------------------------------

[DocumentRoot]
--------------------------------------------------------------------------------
修正前
DocumentRoot "${SRVROOT}/htdocs"


修正後
DocumentRoot "C:/Apache/Apache24/htdocs"

--------------------------------------------------------------------------------

3.秘密鍵(server.key)の生成
Apacheインストールディレクトリのbinに移動して、以下のコマンドを実行します。

C:\Apache\Apache24\bin>openssl.exe genrsa -out ..\conf\server.key 1024
Loading 'screen' into random state - done
Generating RSA private key, 1024 bit long modulus
...............................++++++
.............................................++++++
e is 65537 (0x10001)

4.公開鍵(server.csr)の生成
2項と同じディレクトリで以下のコマンドを実行します。

C:\Apache\Apache24\bin>openssl.exe req -new -key ..\conf\server.key -out ..\conf\server.csr -config ..\conf\openssl.cnf
.csr -config ..\conf\openssl.cnf
Loading 'screen' into random state - done
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company
Organizational Unit Name (eg, section) []:Section
Common Name (e.g. server FQDN or YOUR name) []:127.0.0.1
Email Address []:foo@bar.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

5.証明書(server.crt)の生成
2項と同じディレクトリで以下のコマンドを実行します。

C:\Apache\Apache24\bin>openssl.exe x509 -in ..\conf\server.csr -out ..\conf\server.crt -req -signkey ..\conf\server.key -days 365
-req -signkey ..\conf\server.key -days 365
Loading 'screen' into random state - done
Signature ok
subject=/C=JP/ST=Tokyo/L=City/O=Company/OU=Section/CN=127.0.0.1/emailAddress=foo@bar.com
Getting Private key

5.Apacheインストール
2項と同じディレクトリで以下のコマンドを実行します。
C:\Apache\Apache24\bin>httpd -k install

6.Apacheの起動方法
2項と同じディレクトリで以下のコマンドを実行します。
C:\Apache\Apache24\bin>httpd -k start

何も表示されずに、入力欄が表示されたら、ブラウザを起動してください。

ブラウザのURL入力欄に、「http://localhost/」と入力し「Enter」を押してこのような画面が表示されたら、Apacheが正常に起動していることになります。

■エラー
「症状」
コンピューターに VCRUNTIME140.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。

「対策」
このエラーは、Visual Studio C++ 2015という開発環境で作成されたソフトウェアの実行時に発生するようです。

上環境で作成されたソフトは実行にランタイムというプログラムが必要ですがインストールされていないので、その旨のエラーが表示されています。

よって、Visual Studio C++ 2015のランタイムをインストールすれば解決します。
ランタイムのインストール方法

マイクロソフト公式ダウンロードセンターにアクセスし、ダウンロード をクリッ
https://www.microsoft.com/ja-jp/download/details.aspx?id=48145
   
■参考URL
http://www.koikikukan.com/archives/2013/12/03-012345.php
https://qiita.com/naganao/items/fe119b2818479b730c74
https://techacademy.jp/magazine/1846
http://proengineer.internous.co.jp/content/columnfeature/5456
https://http2.try-and-test.net/tls13_apache_conf.html
https://www.unknownengineer.net/entry/2018/11/15/145720

2019年4月25日木曜日


■目的

TLS1.3を最優先とし、以下優先度でサーバに対して、TLS通信を試みる。

優先1. TLS1.3
優先2. TLS1.2
優先3. TLS1.1
優先4. TLS1.0

TLS通信のコネクションが確立したTLSバージョンで、サーバと通信を行なう。
■調査結果

[調査1]
SSL_CTX_newにセットする関数は?

[結果]
TLS_client_method()をセットする。
前述の関数は、SSLv3、TLSv1、TLSv1.1、TLSv1.2、TLSv1.3を使えるようになる。

 参考サイト
https://www.openssl.org/docs/man1.1.1/man3/SSLv23_client_method.html

[調査2]
特定のTLSバージョンのみでTLS通信を試みるには?

[結果]
TLS_client_method()をそのまま使うと、SSLv3、TLSv1、TLSv1.1、TLSv1.2、TLSv1.3でTLS通信を試みる。そのため、特定のTLSバージョンのみでTLS通信を試みる場合、以下の手順で使用可能なプロトコルを制限する。

例えば、TLSv1.3のみを利用したい場合、

// TLSv1.3
long flags=SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2;
SSL_CTX *m_sslContext = SSL_CTX_new(TLS_client_method());
SSL_CTX_set_options(m_sslContext, flags);

// TLSv1.2
// long flags=SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1;

// TLSv1.1
// long flags=SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_2;

// TLSv1.0
// long flags=SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2;

参考サイト
https://www.openssl.org/docs/manmaster/man3/SSLv23_client_method.html

以下のOpenSSLの関数を用いて、SSL/TLS通信処理時にサポートするTLSのバージョンの最小バージョン、最大バージョンを指定できる。

SSL_CTX_set_min_proto_version()
SSL_CTX_set_max_proto_version()
https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html

[調査3]
調査1,2以外でTLS1.3を使うために何か特別な処理は実装する必要があるか?

[結果]
SSL/TLS通信処理に用いるOpenSSLの関数について、TLS1.3に関する記載がないかOpenSSLのmanualを調べた。

・SSL_CTX_new
TLS1.3の記載有り。TLS_method(), TLS_server_method(), TLS_client_method()を使えって書いてる。
https://www.openssl.org/docs/manmaster/man3/SSL_CTX_new.html

・SSL_CTX_set_verify
TLS1.3の記載無し。
https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_verify.html

・SSL_CTX_set_options
TLS1.3の記載有り。
https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_options.html

・SSL_new
TLS1.3の記載なし。
https://www.openssl.org/docs/manmaster/man3/SSL_new.html

・SSL_set_connect_state
TLS1.3の記載なし。
https://www.openssl.org/docs/manmaster/man3/SSL_set_connect_state.html

・SSL_set_fd
TLS1.3の記載なし。
https://www.openssl.org/docs/manmaster/man3/SSL_set_fd.html

・SSL_connect
TLS1.3の記載有り
https://www.openssl.org/docs/manmaster/man3/SSL_connect.html

■TCPとSSL/TLSの関係
[階層]
OSI階層というもので、TCPとSSL/TLSのレイヤーが違うみたい。
HTTPSの通信はTCP/IPプロトコルスイートとして、
TCPの上層にSSL/TLSがあり、
アプリケーションプロトコルのHTTPプロトコルが載って通信する。

コネクションとセッションは通信の概念として別になり、
TCPでクライアントからWebサーバに対してコネクション(経路)が確立され、
その上でセッション(ブラウザでログイン~ログアウト)があります
イメージ的には以下の感じ。

↑(高階層)

│HTTPプロトコル
│SSLハンドシェイクプロトコル
│TLSレコードプロトコル
│TCP/IP

↓(低階層)

[処理順]
1.3ウェイ・ハンドシェイクでコネクション(論理的な通信路)を確立。(TCP)
2.TLSハンドシェイクプロトコルのネゴシエーションを行なう。(SSL/TLS)
3.クライアントとサーバ間で実際のhttps通信を行なう。
https://qiita.com/Brutus/items/1015cc01d2e1eb82a526

■セッションとコネクションの違い
https://www.infraexpert.com/study/networking4.html
説明
セッション
 セッションは、通信の開始から終了までを管理する1つの単位のことです。
 例えば端末の間でセッションが確立すると、通信で使用するアプリケーションが
 データ転送可能な状態になります。OSI 7階層の第5層「セッション層」の機能です。

コネクション
 コネクションは、セッションでデータ転送を行うための論理的な回線のことです。
 一般的に、OSI 7階層の第4層「トランスポート層」のTCPコネクションを指します。


■参考サイト
・SSL/TLSについてまとめ2018
https://qiita.com/Brutus/items/1015cc01d2e1eb82a526

・【図解】TLSv1.3の仕組みとシーケンス ~QUICに向けた0-RTT, key_shareやHelloRetryRequest, NewSessionTicketとPSKの関係, コネクションとセッションの違い~
https://milestone-of-se.nesuke.com/nw-basic/tls/tls-version-1-3/

OpenSSLライブラリに詳しい
https://techblog.yahoo.co.jp/infrastructure/ssl-session-resumption/

細かすぎて伝わらないSSL/TLS
https://techblog.yahoo.co.jp/infrastructure/ssl-session-resumption/

[C言語] HTTPSクライアントを作ってみる
https://qiita.com/edo_m18/items/41770cba5c166f276a83

OpenSSLライブラリを使ってプログラミング(1)
https://lemniscus.hatenablog.com/entry/20090730/1248970407

sakura editor

sakura editorの備忘録を記載する。

--------------------------------------------------------------------------------------------
ショートカット
--------------------------------------------------------------------------------------------
■日付の挿入
Alt+;

■時刻の挿入
Alt+:

--------------------------------------------------------------------------------------------
小ネタ
--------------------------------------------------------------------------------------------
■grep実行時、初期状態からリアルタイムで表示する設定

メニューバー > 共通設定 > 検索 > Grep
「リアルタイムで表示する」チェックボックスをOnにする。

■複数のソースファイルから一斉置換する
[手順]
1.sakura editorを起動する
2.上部のメニュー>検索>grep置換を押下する
3.Grep置換Popupで諸条件を設定する
4.バックアップ作成のチェックボックスをチェックする
5.置換ボタンを押下する


2019年3月17日日曜日

変更したソースファイルの差分のstep数を算出する方法

[前提条件]
・かぞえチャオを使う

[手順]
1.変更前ソースファイルの実ステップ数を算出する。(結果をCSVに保存)
2.変更後ソースファイルの実ステップ数を算出する。(結果をCSVに保存)
3.算出方法。差分ステップ数 = 手順.2の実ステップ数 - 手順.1の実ステップ数

[かぞえチャオ]
・ダウンロード先[Vector]
https://www.vector.co.jp/soft/winnt/prog/se251853.html

・念のため
https://emg-my.sharepoint.com/:f:/r/personal/s-tsuruda_eandm_co_jp/Documents/share/tools/counter?csf=1&e=Si6nO0

2019年1月2日水曜日

pycharn インストール手順

pycharn ショートカット

・コードの整形( Ctrl + Alt + L )
・コメントアウト( Ctrl + / )
・関数や変数の名前変更( Shift + F6 )
・関数などの定義を確認する( Ctrl + Shift + I )
・ファイルの新規作成( Alt + Insert )
・クリッップボード履歴(Ctrl + Shift + V )
・タブ移動( Ctrl + Tab )
・コードの改善提案の表示( Alt + Enter )

2018年12月25日火曜日

OpenSSL1.1.1(TLS.1.3対応版)のビルド

【ビルド環境】
Visual Studio 2008 SP1

【準備】
1) Perlをインストールする。
ダウンロードリンク例:https://www.activestate.com/activeperl/downloads
2) NASMをインストールする。
ダウンロードリンク例:http://www.nasm.us/
3) NASMのインストール先フォルダを、環境変数の「Path」に追加する。
4) OpenSSLのソースコードをダウンロードする。
ダウンロードリンク例:https://www.openssl.org/source
5) OpenSSLのソースコードを解凍する。
解凍先例:C:\openssl-1.1.1a
6)OpenSSLコンパイル先フォルダを作成する。
コンパイル先例:C:\openssl\win\x86

【ビルド手順】
1) スタートメニューから「Visual Studio 2008のコマンドプロンプト」を起動する。
2) cdコマンドでOpenSSLのソースコードのフォルダへ移動する。
コマンド例)cd c:\openssl-1.1.1a
3) perlのコマンドを実行する。
コマンド例)perl Configure VC-WIN32 --prefix=C:/openssl/win/x86
4) nmake installを実行する。

参考サイト
ビルド時のコマンド
https://www.sumirelab.com/docs/tech/windows-%E3%81%A7-openssl-%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%83%A1%E3%83%A2/

生成物について
http://lfsbookja.osdn.jp/svn-sysdja/chapter06/openssl.html

OpenSSLのTLS1.3の調査のまとめ

■OpenSSLがTLSv1.3のサポートを開始したバージョンは?
OpneSSLv1.1.1からTLSv1.3のサポートを開始しています。
OpneSSLv1.1.1のリリース日は、2018/9/11

OpenSSLの公式ブログ
https://www.openssl.org/blog/blog/2018/09/11/release111/

■OpneSSLv1.1.1のバイナリファイルの入手方法?
OpenSSLの公式サイトは、バイナリファイルは、公開されていません。
バイナリファイルを入手するには方法は主に2通りあります。

・1個目の入手方法
OpenSSLの公式サイトから対象バージョンのソースコードをダウンロードし、自前でOpenSSLをビルドする。

・2個目の入手方法
サードパーティがインターネット上で公開しているバイナリファイルをダウンロードする。
サードパーティのOpenSSL関連バイナリファイルダウンロード先
https://wiki.openssl.org/index.php/Binaries

■1個目の方法(自前でOpenSSLをビルド)のフィジビリテ確認
OpenSSLv1.1.1のソースコードをダウンロードして、ビルドを行ないました。
ビルドは成功しました。
OpenSSLv1.1.1のビルド手順をまとめたものを以下に格納しました。
https://promise-redmoon.blogspot.com/2018/12/openssltls13study.html


2008年9月24日水曜日

C# Dictionaryの使い方

//
Dictionary openWith = new Dictionary();

// Dictionaryに要素を追加する。
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("rtf", "wordpad.exe");

// もしも新しいキーがDictionaryに存在していたら、Addメソッドは例外を投げる
try
{
    openWith.Add("txt", "winword.exe");

}catch (ArgumentException)
{
    Console.WriteLine("An element with Key = \"txt\" already exists.");
}

// キーが存在していても、上書きが出来る。
openWith["rtf"] = "winword.exe";

// 存在していないキーを指定したら、例外が発生する。
try
{

openWith["tif"];

}catch(KeyNotFoundException)
{
}

C# list型の使い方

//
List dinosaurs = new List();


// listに要素を追加する
dinosaurs.Add("Tyrannosaurus");
dinosaurs.Add("Amargasaurus");


// listの現在の容量
dinosaurs.Capacity;


// listの現在の要素数
dinosaurs.Count;

// 要素の中に"Deinonychus"が含まれていないのでFalseが返ってくる
dinosaurs.Contains("Deinonychus"));


// 2番目の要素に挿入
dinosaurs.Insert(2, "Compsognathus);

// 要素の"Compsognathus"を削除する
dinosaurs.Remove("Compsognathus");

// 要素は全て削除。容量はそのまま残る
dinosaurs.Clear();

2008年9月23日火曜日

C# stack型の使い方

Stack numbers = new Stack();

// 要素追加
numbers.Push("one");
numbers.Push("two");

// 要素の取り出し
numbers.Pop()

// スタックのコピー
Stack stack2 = new Stack(numbers.ToArray());

// numbers.Countはstackの要素数を数える。
string[] array2 = new string[numbers.Count * 2];

// array2 にコピーします。
numbers.CopyTo(array2, numbers.Count);

// コンストラクタでarray2をarray3にコピー
Stack stack3 = new Stack(array2);

// "four"の要素がないからFalseを返す
stack2.Contains("four"));