ネコの耳に念仏

ネコの耳に念仏

ガンバらない技術ブログを目指します

インラインフィールドを利用して本文中にデータを定義する方法【Obsidian】

Obsidian の「インラインフィールド」という機能を利用して、本文にキーとバリューからなるデータを定義する方法について、メモしておく。

インラインフィールドを利用して本文中にデータを定義する方法

たとえば、コミュニティプラグイン「Tracker」を用いれば、フロントマターに任意で追加したプロパティを、キーとバリューからなるデータとして参照することができる。

これと同じように、キーとバリューからなるデータを本文中で記述したいときに利用するのが、「インラインフィールド」である。

インラインフィールドは、下記のように記述し、キーとバリューからなるデータを本文に記述することができる。

[[{key}:: {value}]]

以上

【C#】OpenTelemetryで収集したアプリのメトリックをAzureMonitorへ送信する方法【.NET】

OpenTelemetry を利用して収集した C# アプリのメトリックを Azure Monitor へ送信してみたので、その送信方法を説明する。

OpenTelemetry で収集したアプリのメトリックを Azure Monitor へ送信する方法

メトリックの送信方式

OpenTelemetry を利用して収集したメトリックの送信方法は、主に下記の2方式がある。

  • アプリから Azure Monitor へ直接送信する方式
  • アプリから OpenTelemetry コレクターへ送信し、コレクターから Azure Monitor へ送信する方式

今回は、前者の「アプリから直接送信する方式」を説明する。

前提条件

まず前提条件として、下記を満たしていること。

  • Application Insights リソースが存在すること
  • .NET Core または .NET Framework (4.6.2 以上) を使用するアプリケーションであること

Application Insights の接続文字列を取得

Azure ポータルから Application Insights リソースの管理画面を開き、「概要」ペインに表示される接続文字列をコピーしておく。

アプリケーションの実装

メトリック送信を行うアプリケーションのプロジェクトに、「Azure.Monitor.Opentelemetry.Exporter」 NuGet パッケージをインストールする。

実装サンプルは下記のような感じ。

public class Program{
    static void main(string[] args)
    {
        // 初期化
        MetricsRecorder.Init();

        // Histgram のメトリックの記録
        MetricsRecorder.RecordProcessingTime();

        // Counter のメトリックの記録
        MetricsRecorder.RecordRequestCount();
    }
}
internal class MetricsRecorder
{
    /// <summary>
    /// MeterProviderを作成
    /// </summary>
    private static MeterProvider? meterProvider;

    /// <summary>
    /// Meterを作成
    /// </summary>
    private static readonly Meter meter = new Meter("MyMeter");

    /// <summary>
    /// Instrument(Histgram)を作成
    /// 同時に複数作成することができる
    /// </summary>
    private static readonly Histogram<long> processingTime = meter.CreateHistogram<long>(
        name: "ProcessingTime",
        unit: "ms",
        description: "This is processing time.");

    /// <summary>
    /// Instrument(Counter)を作成
    /// 同時に複数作成することができる
    /// </summary>
    private static readonly Counter<long> requestCount = meter.CreateCounter<long>(
        name: "RequestCount",
        unit: "times",
        description: "This is request count.");

    /// <summary>
    /// 初期化処理
    /// </summary>
    public static void Init()
    {
        // MeterProviderを作成
        // Meterを追加、Azure Monitor 向けエクスポーターを追加
        meterProvider = Sdk.CreateMeterProviderBuilder()
            .AddMeter("MyMeter")
            .AddAzureMonitorMetricExporter(options =>
            {
                options.ConnectionString = "{Application Insights の接続文字列}";
            })
            .Build();
    }

    /// <summary>
    /// Histgramのメトリック「ProcessingTime」の記録
    /// </summary>
    public static void RecordProcessingTime()
    {
        // メトリックに記録する値をランダムに作成(1~100)
        var rand = new Random();
        long value = rand.Next(1, 101);

        // ディメンションを作成(最大個数は不明だが適当に10個作成)
        KeyValuePair<string, object?>[] dimensions = new KeyValuePair<string, object?>[]
        {
            new KeyValuePair<string, object?>("DimensionName0", "DimensionValue0"),
            new KeyValuePair<string, object?>("DimensionName1", "DimensionValue1"),
            new KeyValuePair<string, object?>("DimensionName2", "DimensionValue2"),
            new KeyValuePair<string, object?>("DimensionName3", "DimensionValue3"),
            new KeyValuePair<string, object?>("DimensionName4", "DimensionValue4"),
            new KeyValuePair<string, object?>("DimensionName5", "DimensionValue5"),
            new KeyValuePair<string, object?>("DimensionName6", "DimensionValue6"),
            new KeyValuePair<string, object?>("DimensionName7", "DimensionValue7"),
            new KeyValuePair<string, object?>("DimensionName8", "DimensionValue8"),
            new KeyValuePair<string, object?>("DimensionName9", "DimensionValue9"),
        };
        
        // メトリックを記録
        processingTime.Record(value, dimensions);
    }

    /// <summary>
    /// Counterのメトリック「RequestCount」の記録
    /// </summary>
    public static void RecordRequestCount()
    {
        // メトリックに記録する値をランダムに作成(1~3)
        var rand = new Random();
        long value = rand.Next(1, 4);

        // ディメンションを作成(最大個数は不明だが適当に10個作成)
        KeyValuePair<string, object?>[] dimensions = new KeyValuePair<string, object?>[]
        {
            new KeyValuePair<string, object?>("DimensionName0", "DimensionValue0"),
            new KeyValuePair<string, object?>("DimensionName1", "DimensionValue1"),
            new KeyValuePair<string, object?>("DimensionName2", "DimensionValue2"),
            new KeyValuePair<string, object?>("DimensionName3", "DimensionValue3"),
            new KeyValuePair<string, object?>("DimensionName4", "DimensionValue4"),
            new KeyValuePair<string, object?>("DimensionName5", "DimensionValue5"),
            new KeyValuePair<string, object?>("DimensionName6", "DimensionValue6"),
            new KeyValuePair<string, object?>("DimensionName7", "DimensionValue7"),
            new KeyValuePair<string, object?>("DimensionName8", "DimensionValue8"),
            new KeyValuePair<string, object?>("DimensionName9", "DimensionValue9"),
        };

        // メトリックを記録
        requestCount.Add(value, dimensions);
    }
}

アプリケーションの実行

アプリを実行してメトリック送信してみましょう。

あっ、メトリックの送信処理が実行されるまでは待機とか入れてアプリが終了されないようにしてくださいね。 メトリックの送信間隔はデフォルトで60秒です。

メトリックの送信確認

Azure Monitor へ送信したメトリックを確認してみましょう。

Azure ポータルへログインして、送信先に設定した Application Insights の管理画面を開いてください。

左ペインメニューの「メトリック」を開きます。

「メトリックの追加」設定欄で下記のように選択し、メトリックがグラフに表示されれば成功です。

  • スコープ : {メトリック送信先に設定した Application Insights のリソース名}
  • メトリック名前空間 : ログベースのメトリック
  • メトリック : {アプリで設定したメトリック名}

また、ディメンションで分割したい場合は、「分割を適用する」をクリックして、設定欄の「値」で任意のディメンションを選択します。

以上

AWS CLI を Windows へインストールする方法

AWS CLIWindows へインストールする方法を解説します。

AWS CLIWindows へインストールする方法

最新バージョンの AWS CLI をインストールする

最新バージョンの AWS CLI をインストールするには、管理者権限で立ち上げた PowerShell で下記コマンドを実行する。

msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi

特定バージョンの AWS CLI をインストールする

バージョンを指定して AWS CLI をインストールするには、msi ファイル名を「AWSCLIV2-{version.number}.msi」のように指定してインストールする。 たとえば、バージョン「2.11.27」を指定する場合、管理者権限で立ち上げた PowerShell で下記コマンドを実行する。

msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2-2.11.27.msi

インストール確認またはバージョン確認をする

インストール確認またはバージョン確認をする場合は、PowerShell で下記コマンドを実行する。

aws --version

コマンド実行結果は、下記のようになる。

PS C:\> aws --version
aws-cli/2.11.27 Python/3.11.3 Windows/10 exe/AMD64 prompt/off

参考

参考にしたのは、下記の Web ページ。

以上

【Azure】リソースグループ内の全VMの電源状態を一括確認する方法【PowerShell】

Azure の複数のリソースグループに分散した複数の VM をまとめて管理している場合、どのインスタンスが起動してるの?停止してるの?を確認するだけでも大変ですよね。

そこで今回、リソースグループ名を指定するだけで、指定したリソースグループに含まれる全ての VM の電源状態を自動的に一括取得して確認することができる PowerShell スクリプトをご紹介します。

VM ではなく、VMSS の電源を一括確認したいよって人は、別の記事で方法を説明しているのでそちらをご覧ください。

別記事:【Azure】リソースグループ内の全VMSSの全インスタンスの電源状態を一括確認する方法【PowerShell】

前提条件

Azure PowerShell Az モジュールのコマンドレットを利用しますので、あらかじめ Azure PowerShell Az モジュールをインストールしてください。

インストール方法は、別の記事で手順を説明しているのでそちらをご覧ください。

別記事:Azure PowerShell (Az モジュール) のインストール方法

PowerShellで指定したリソースグループに含まれる全てのVMインスタンスの電源状態を確認する方法

PowerShellで、指定したリソースグループに含まれる全てのVMインスタンスの電源状態を確認するためのスクリプトは、下記のとおりです。

# 確認対象のリソースグループ名
$resourceGroupName = "MyResourceGroupName"

# Azureに接続
Connect-AzAccount

# リソースグループに含まれる全てのVM名を取得
$VmProperty = Get-AzVm -ResourceGroupName $ResourceGroupName
$VmNameArray = $VmProperty.Name

# VMごとに処理
foreach ($VmName in $VmNameArray){
    # インスタンスビューから電源状態のステータスコードを取得
    $VmInstanceView = Get-AzVm -ResourceGroupName $ResourceGroupName -Name $VmName -Status
    $VMDisplayStatus = $VmInstanceView.Statuses[1].DisplayStatus
    
    # VMの電源状態を判別
    if ($VMDisplayStatus -eq "VM starting")
    {
        "$VmName 開始処理中"
    }
    elseif ($VMDisplayStatus -eq "VM running")
    {
        "$VmName 実行中"
    }
    elseif ($VMDisplayStatus -eq "VM stopping")
    {
        "$VmName リソースを保持したまま停止処理中"
    }
    elseif ($VMDisplayStatus -eq "VM stopped")
    {
        "$VmName リソースを保持したまま停止中"
    }
    elseif ($VMDisplayStatus -eq "VM deallocating")
    {
        "$VmName 割り当て解除処理中"
    }
    elseif ($VMDisplayStatus -eq "VM deallocated")
    {
        "$VmName 割り当て解除済み"
    }
    else
    {
        "$VmName 電源状態不明"
    }
}

以上、ご参考ください。

【Azure】リソースグループ内の全VMSSの全インスタンスの電源状態を一括確認する方法【PowerShell】

Azure の複数のリソースグループに分散した複数の VMSS をまとめて管理している場合、どのインスタンスが起動してるの?停止してるの?を確認するだけでも大変ですよね。

そこで今回、リソースグループ名を指定するだけで、指定したリソースグループに含まれる全ての VMSS の全てのインスタンスの電源状態を自動的に一括取得して確認することができる PowerShell スクリプトをご紹介します。

VMSS ではなく、VM の電源を一括確認したいよって人は、別の記事で方法を説明しているのでそちらをご覧ください。

別記事:【Azure】リソースグループ内の全VMの電源状態を一括確認する方法【PowerShell】

前提条件

Azure PowerShell Az モジュールのコマンドレットを利用しますので、あらかじめ Azure PowerShell Az モジュールをインストールしてください。

インストール方法は、別の記事で手順を説明しているのでそちらをご覧ください。

別記事:Azure PowerShell (Az モジュール) のインストール方法

指定したリソースグループに含まれる全ての VMSS の全てのインスタンスの電源状態を一括確認する方法

PowerShell で、指定したリソースグループに含まれる全ての VMSS の全てのインスタンスの電源状態を一括取得して確認するためのスクリプトは、下記のとおりです。

# 確認対象のリソースグループ名
$resourceGroupName = "MyResourceGroupName"

# Azureに接続
Connect-AzAccount

# リソースグループに含まれる全てのVMSS名を取得
$VmssProperty = Get-AzVmss -ResourceGroupName $ResourceGroupName
$VmssNameArray = $VmssProperty.Name

# VMSSごとに処理
foreach ($VmssName in $VmssNameArray){
    # VMSSのインスタンスビューからVMSSにある全てのインスタンスのインスタンスIDを取得
    $VmssInstanceView = Get-AzVmssVM -InstanceView -ResourceGroupName $ResourceGroupName -VMScaleSetName $VmssName
    $InstanceIdArray = $VmssInstanceView.InstanceId

    # インスタンスごとに処理
    foreach ($InstanceId in $InstanceIdArray)
    {
        # インスタンスビューから電源状態のステータスコードを取得
        $VmInstanceView = Get-AzVmssVM -InstanceView -ResourceGroupName $ResourceGroupName -VMScaleSetName $VmssName -InstanceId $InstanceId
        $VMDisplayStatus = $VmInstanceView.Statuses[1].DisplayStatus
        
        # インスタンスの電源状態を判別
        if ($VMDisplayStatus -eq "VM starting")
        {
            "$VmssName $InstanceId 開始処理中"
        }
        elseif ($VMDisplayStatus -eq "VM running")
        {
            "$VmssName $InstanceId 実行中"
        }
        elseif ($VMDisplayStatus -eq "VM stopping")
        {
            "$VmssName $InstanceId リソースを保持したまま停止処理中"
        }
        elseif ($VMDisplayStatus -eq "VM stopped")
        {
            "$VmssName  $InstanceId リソースを保持したまま停止中"
        }
        elseif ($VMDisplayStatus -eq "VM deallocating")
        {
            "$VmssName  $InstanceId 割り当て解除処理中"
        }
        elseif ($VMDisplayStatus -eq "VM deallocated")
        {
            "$VmssName $InstanceId 割り当て解除済み"
        }
        else
        {
            "$VmssName $InstanceId 電源状態不明"
        }
    }
}

以上、ご参考ください。

【2023年】ハイチオール製品ラインナップの違いを比較してみた【エスエス製薬】

こんにちは。

筆者はサプリメント大好き人間で、1度に飲む錠剤が増えれば増えるほど喜びを覚えてしまう残念な生きものです。

近ごろ、エスエス製薬のハイチオールが良いと耳にしたので常飲サプリメントにハイチオールを加えてみようと思ったんですけど、調べてみるとハイチオールシリーズの製品ラインナップがいくつかあるようですね。

ハイチオールシリーズの各製品の違いがよく分からなかったので、今回はハイチオール製品ラインナップの比較・整理をしてみました。

ハイチオール製品ラインナップ

現在、ハイチオールには下記の製品ラインナップがある。

  • ハイチオール ホワイティア プレミアム
  • ハイチオールCプラス2
  • ハイチオールCホワイティア
  • ハイチオールBクリア
  • ハイチオール コラーゲンブライト(ドリンク製品)

参考にした公式の製品ラインナップサイトはこちら >> 公式サイト

個人的には、私が求めてる効能と少しミスマッチがある気がするので「ハイチオールBクリア」は今回は除外します。 また、ドリンク剤である「ハイチオール コラーゲンブライト」も今回は除外します。

つまり、今回は「ハイチオール ホワイティア プレミアム」「ハイチオールCプラス2」「ハイチオールCホワイティア」の3つを比較してみようと思います。

ハイチオール製品ラインナップの違いを比較

いろんな観点から、各製品の違いを比較してみる。

ターゲットユーザーで比較

各製品を、公式サイトで挙げているターゲットユーザー(こんな人におすすめ)の内容で比較してみる。

「ハイチオール ホワイティア プレミアム」のターゲットは、下記のような人らしい。

  • 今のシミ対策に満足していない方
  • 今あるシミも、やがて濃くなる隠れジミも、両方なんとかしたい方
  • なくならない定着ジミを何とかしたい方
  • 内側からシミ対策したい方

ハイチオールCプラス2」のターゲットは、下記のような人らしい。

  • シミだけでなく、疲れ改善したい方
  • 錠剤の飲みやすさを重視する方
  • 便利な大容量サイズを求める方

ハイチオールCホワイティア」のターゲットは、下記のような人らしい。

  • 一点のシミも許したくない方
  • 体の内側からシミを治したい方
  • 朝晩のむタイプの薬をお探しの方

……う~ん、ちょっとよく分からないですね。

主な成分で比較

各製品を、1日量の主要成分で比較してみる。

製品 L-システイン アスコルビン酸(ビタミンC) ピリドキシン塩酸塩(ビタミンB6) パントテン酸カルシウム
ハイチオール ホワイティア プレミアム 240mg 500mg 50mg 記載なし
ハイチオールCプラス2 240mg 500mg 記載なし 24mg
ハイチオールCホワイティア 240mg 500mg 記載なし 30mg

推し成分であろう「L-システイン」と「アスコルビン酸(ビタミンC)」の含有量は、どれも同じだった。 付加効用を重視しないのであれば、どれを選んでも問題なさそうである。

1日あたりの単価で比較

各製品を、1日あたりの単価で比較してみる。

価格については、今回は参考値として2023年9月10日時点のAmazonでの販売価格とする。 また、各製品の最大容量のものの価格を使用して単価計算する。

製品 1個あたりの価格 1日あたりの単価
ハイチオール ホワイティア プレミアム (240錠) ※1 約3899円 約64円
ハイチオールCプラス2 (270錠) ※2 約2848円 約63円
ハイチオールCホワイティア (120錠) ※3 2368円 約78円
  • ※1 : 一番安かった5個セット19496円の価格を採用
  • ※2 : 最大で9個セットまで存在したが、ホワイティア プレミアムに合わせて5個セット14239円の価格を採用
  • ※3 : セット売りが存在しなかったため、1個2368円の価格を採用

1日あたりで計算すると、わずかな差ではあるものの「ハイチオールCプラス2」が最安だと判明した。

服用回数で比較

各製品を、1回量と1日の服用回数で比較してみる。

製品 1回量 1日の服用回数
ハイチオール ホワイティア プレミアム 2錠 2回
ハイチオールCプラス2 2錠 3回
ハイチオールCホワイティア 2錠 2回

これは完全に好みによる。

容量で比較

各製品を、容量で比較してみる。

製品 10日分(40錠/60錠) 30日分(120錠/180錠) 45日分(180錠/270錠) 60日分(240錠/360錠)
ハイチオール ホワイティア プレミアム -
ハイチオールCプラス2 -
ハイチオールCホワイティア - -

※製品によって1日の服用量が異なるため、日分で並べて、錠数はカッコ書きで「1日2回服用の場合の錠数」「1日3回服用の場合の錠数」の順に記載

ひとビンで一番長持ちするのは、「ハイチオール ホワイティア プレミアム」ということになる。

(個人的な)結論

個人的には、最安値かつ3回に分けて飲める「ハイチオールCプラス2」で良さそうと感じました。

ハイチオールCプラス2」を買ってみようと思います。

参考サイト

以上

【Windows】本来は濁点が付かない文字を含む任意の文字に濁点を付ける方法【PC】

本来は濁点が付かない文字であっても、任意の文字に濁点を付ける方法を説明します。

任意の文字に濁点を付ける方法は、大まかに下記3つのような方法があります。

  • 任意の文字のあとに全角濁点を付ける方法
  • 任意の文字に半角濁点を付ける方法
  • 任意の文字に結合文字の濁点を付ける方法

順番に説明します。

任意の文字のあとに全角濁点「゛」を付ける方法

いちばん簡単な濁点の付け方です。

  • 任意の文字を入力して確定する
  • 「だくてん」と入力して「゛」へ変換する
例:
あ゛い゛う゛え゛お゛

任意の文字に半角濁点「゙」を付ける方法

次に、半角濁点を付ける方法を説明します。

半角の濁点は Unicode を利用して入力します。 半角濁点の Unicode のコードポイントは「U+FF9E」ですので、後半の16進数部分「FF9E」を利用します。

ここでは、Windows の標準 IMEMicrosoft IME」の Unicode を利用した入力機能を使う方法を説明しますので、もし他の IME を利用している場合は Microsoft IME に切り替えてください。

  • 任意の文字を入力して確定する
  • 「FF9E」と入力して、入力中の状態のまま「F5」キーを押して「゙」に変換する
例:
あ゙い゙ゔえ゙お゙

任意の文字に結合文字の濁点「゙」を付ける方法

最後に、結合文字の濁点を付ける方法を説明します。
※この方法では、入力・表示するアプリケーションによって表示が異なったり上手く表示できない可能性があります

やり方としては、前述した半角の濁点を入力する場合と同じです。

結合文字の濁点の Unicode のコードポイントは「U+3099」ですので、後半の16進数部分「3099」を利用します。

  • 任意の文字を入力して確定する
  • 「3099」と入力して、入力中の状態のまま「F5」キーを押して「゙」に変換する
例:
あ゙い゙ゔえ゙お゙

以上