技術 のすべての投稿

RISC-Vとは?

RISC-V(リスク・ファイブ)とは、カリフォルニア大学バークレー校で開発されたオープンで拡張可能な命令セットアーキテクチャ(ISA)です。
ISAはプロセッサ間で共通化された、インターフェースとしての論理的な命令セットは命令セットアーキテクチャ(英: instruction set architecture, ISA)と呼ばれる。
RISC-Vは特にシンプルでモジュラー設計が特徴です。

以下に、RISC-Vの主な特徴を挙げます。

オープンでロイヤリティフリー
RISC-VはオープンなISAで、誰でも無料で使用することができ、ライセンス料がかかりません。そのため、商用や非商用を問わず、誰でもこのISAを利用して独自のプロセッサやソリューションを開発できます。

モジュラー設計
RISC-Vは基本命令セット(RV32IやRV64Iなど)と、それに追加可能なオプションの拡張(例えば、浮動小数点演算やベクトル処理など)から成り立っています。このモジュラー設計により、用途や必要に応じて柔軟にプロセッサをカスタマイズできます。

拡張性と柔軟性
RISC-Vの設計は、開発者が独自の拡張機能を追加できるように意図されています。これにより、特定のアプリケーションやニーズに合わせたカスタムプロセッサを容易に設計できます。

広範なコミュニティサポート
RISC-Vは世界中の企業、研究機関、開発者からの支持を受けており、オープンソースコミュニティによって積極的に開発と改善が進められています。

非営利組織による管理
RISC-Vの仕様は、RISC-V Internationalという非営利組織によって管理されており、この組織は特定の製品やサービスに商業的な利害関係を持たず、中立的な立場で活動しています。

RISC-Vは、従来のプロプライエタリなISAに代わるオープンな選択肢として注目されており、特に組み込みシステム、IoTデバイス、学術研究、さらには高性能コンピューティングの分野においても利用が広がっています。

飛んでモンテカルロのAI

世界的に有名なカジノや高級リゾートがある観光地です。モナコ・グランプリが開催される場所!
金持ちのイメージですが、AIでのモンテカルロは違います。
AIが絵描いたモンテカルロのイメージ
モンテカルロのイメージ
モンテカルロで円をAI業界の方が言うと思いますので、説明です。

モンテカルロ法(英: Monte Carlo method、MC)とは

モンテカルロ法とは、シミュレーションや数値計算を乱数を用いて行う手法の総称です。元々は、中性子が物質中を動き回る様子を探るために、スタニスワフ・ウラムが考案し、ジョン・フォン・ノイマンにより命名されました。この手法の名称は、カジノで有名なモナコ公国の4つの地区(カルティ)の1つであるモンテカルロから取られています。モンテカルロ法は「ランダム法」とも呼ばれ、様々な分野で広く利用されています。

モンテカルロ法の主な特徴と応用

  1. ランダム性の利用: モンテカルロ法は、ランダムなサンプル(数値やデータポイント)を生成し、それらを使って問題の解を推定します。このアプローチは、解析的な解が難しい問題に対して非常に有効です。
  2. 高次元問題への適用: モンテカルロ法は、高次元の積分や最適化問題など、解析的に解くのが難しい問題に対しても適用できます。
  3. 金融工学: モンテカルロ法はオプションの価格付け、リスク評価、ポートフォリオの最適化など、金融の分野で広く使われています。将来の資産価格のシナリオを多数生成し、それに基づいて意思決定を行います。
  4. 物理学・統計学: 物理学では、分子の挙動をシミュレーションするために、統計学では確率分布の評価などに使用されます。
  5. ゲーム開発やAI: モンテカルロ木探索(MCTS)は、チェスや囲碁のような複雑なゲームで次の一手を決定するためのアルゴリズムとして使われています。AIが最適な戦略を見つけるために多くのシミュレーションを行います。

モンテカルロ法の基本的な流れ

  1. 問題の定義(例えば、積分や最適化問題)。
  2. ランダムなサンプルを生成。
  3. サンプルに基づいて計算を行い、結果を得る。
  4. 多数のサンプルから結果を統計的に解析し、最終的な近似解を得る。

たとえば、円の面積をモンテカルロ法で求める場合、以下のようにします。

  1. 単位正方形の中に無作為に点を打つ。
  2. 円の内部に入った点の数を数える。
  3. 円の面積は、正方形の面積に対する円内の点の割合から推定されます。

モンテカルロ法は、多くのサンプルを用いることで、より正確な近似が可能となりますが、計算資源を多く消費することもあります。そのため、効率的にサンプルを生成する手法やアルゴリズムが研究されています。

Pythonで表すと

有名なやつを書きます。

モンテカルロ法で円周率を求める方法

この方法では、以下のステップを行います:

  1. 単位正方形(辺の長さが1の正方形)の中にランダムに点を打つ。
  2. 単位円(半径1の円、中心が正方形の中心)に入った点の数を数える。
  3. 円の面積と正方形の面積の比率から、πを推定します。

単位円の面積は πr2 ですが、今回は半径が1なので面積は π です。単位正方形の面積は 1×1=1 です。したがって、円内に入った点の割合を4倍すると π が近似できます。

import random

def monte_carlo_pi(num_samples):
    inside_circle = 0

    for _ in range(num_samples):
        x = random.uniform(0, 1)
        y = random.uniform(0, 1)
        
        if x**2 + y**2 <= 1:
            inside_circle += 1

    return (inside_circle / num_samples) * 4

# サンプル数を設定して実行
num_samples = 1000000
estimated_pi = monte_carlo_pi(num_samples)
print(f"Estimated π value: {estimated_pi}")

コードの解説

  1. ランダムなサンプル生成:
    random.uniform(0, 1) を使って、[0, 1] の範囲でランダムな x, y 座標を生成します。
  2. 円内に入った点のカウント:
    x**2 + y**2 <= 1 という条件を使って、点が単位円の内部にあるかを確認します。
  3. πの推定:
    円内に入った点の数を総サンプル数で割り、4を掛けて π の近似値を求めます。

結果

Estimated π value: 3.140968
サンプル数を増やすことで、より正確なπの値が得られます。上記のコードでは、100万サンプルを使用していますが、計算リソースや精度のトレードオフに応じて調整が可能です。

この基本的なモンテカルロ法の例を元に、より複雑な問題にも適用できるように拡張していくこと

オマケ

モンテカルロ法でどんどんサンプル数を入れたら、どうなのか?グラフにしてみました。
10から10億回処理してみる、こんなグラフになります。どんどん、理想の数値に収束していきます。

Zabbix のサーバ設定エラー

Zabbix のサーバ設定エラー

Zabbix server is not running: the information displayed may not be current. というエラーが出た時の
対応。
DBがZabbixが動いているサーバである場合の設定。

2つのファイル変更

# vi /etc/zabbix/web/zabbix.conf.php
$DB[‘SERVER’] = ‘127.0.0.1’;

# vi /etc/zabbix/zabbix_server.conf
DBHost=127.0.0.1

zabbixのサーバ再起動

systemctl restart zabbix-server

ベイズ推定

ベイズ推定(ベイズすいてい、英: Bayesian inference)は統計学における推定手法の一つで、観測データと事前の知識(事前分布)を組み合わせて、未知のパラメータについての確率分布(事後分布)を推定する方法です。この手法は、18世紀のイギリスの牧師で数学者のトーマス・ベイズにちなんで名付けられました。

P(A∣B) は、事象 B が起こったときに 事象 Aが起こる 条件付き確率 です(事後確率)。
P(B∣A)P(B∣A) は、事象 AAが起こったときに 事象 Bが起こる確率です(尤度)。
P(A)P(A) は、事象 A が起こる 事前確率 です。
P(B)P(B) は、事象 B が起こる確率(周辺確率)であり、次のように求められます。

Pythonでかけるの?

Pythonでベイズ推定を実装することは可能です。一般的には、numpy や scipy などのライブラリを用いてベイズ推定を行うことができますが、より簡単にベイズ推定を実行するために専用のライブラリを使うこともあります。代表的なライブラリには PyMC3 や Stan をPythonから使用するための pystan があります。

ベイズ推定をPythonで実装する基本的な例を示します。この例では、シンプルなベイズ推定を行うために scipy を使用し、パラメータの事前分布と尤度関数を定義して、事後分布を計算します。

尤度関数(ゆうどかんすう、英: likelihood function)とは統計学において、ある前提条件に従って結果が出現する場合に、逆に観察結果からみて前提条件が「何々であった」と推測する尤もらしさ(もっともらしさ)を表す数値を、「何々」を変数とする関数として捉えたものである。また単に尤度ともいう。

基本的なベイズ推定の例

ここでは、コインが表が出る確率 θを推定するシンプルな例を示します。仮定として、コイン投げの結果が成功(表)か失敗(裏)であるとします。

Python のプログラム:

import numpy as np
from scipy.stats import beta
import matplotlib.pyplot as plt

# 事前分布: Beta(α, β) 分布
alpha_prior = 1
beta_prior = 1

# コイン投げの結果
heads = 8 # 表が出た回数
tails = 4 # 裏が出た回数

# 事前分布を定義
prior = beta(alpha_prior, beta_prior)

# 尤度関数: Bernoulli分布
# 事後分布: Beta(α + heads, β + tails)
alpha_posterior = alpha_prior + heads
beta_posterior = beta_prior + tails

# 事後分布を定義
posterior = beta(alpha_posterior, beta_posterior)

# 事前分布と事後分布のプロット
x = np.linspace(0, 1, 100)
plt.plot(x, prior.pdf(x), 'r-', label='Prior Beta(1, 1)')
plt.plot(x, posterior.pdf(x), 'b-', label='Posterior Beta(9, 5)')
plt.xlabel('θ (probability of heads)')
plt.ylabel('Density')
plt.title('Prior and Posterior Distributions')
plt.legend()
plt.show()

このコードの説明

事前分布:
Beta分布(beta)を事前分布として設定しています。ここでは、ベータ分布のパラメータ α と β を 1 に設定して、事前分布が均等に分布している状態から始めています。

コイン投げの結果:
表が 8 回、裏が 4 回の結果を設定します。

事後分布の計算:
尤度関数に基づいて、事後分布のパラメータを更新します。ここでは、Beta分布のパラメータを更新することで、事後分布を得ています。

プロット:
事前分布と事後分布をプロットし、どのように事前の信念がデータによって更新されたかを可視化しています。

ベイズ推定の応用例

金融:
リスク評価、ポートフォリオ最適化
医療:
生存時間分析、臨床試験

次世代スマートメーター とは?

電力各社が供給している電気のメーターに対して、使用量をリアルタイムで収集してきている中で、その仕様が電力会社がバラバラなので、統一化します。

統一化されたデータは、エネルギー管理システムの改善に役立ちます。消費者は自宅やビジネスのエネルギー使用量をリアルタイムでモニタリングし、無駄な消費を削減するための措置を講じることができます。これにより、エネルギーコストの削減に繋がるだけでなく、ピーク時の電力需要を減らすことによって、電力網への負担を軽減することもできます。

地域全体でのエネルギー使用の最適化は、再生可能エネルギーの統合を促進し、電力網の安定性を高める助けとなります。統一化されたスマートメーターのデータを活用して、太陽光や風力などの変動するエネルギー源をより効率的に電力網に統合することが可能になります。これにより、化石燃料に依存する必要が減少し、地域の炭素足跡を削減することができます。

最終的に、このような取り組みは、電力供給の信頼性の向上、エネルギーコストの削減、環境への影響の軽減という、地域社会にとっての複数の利益に繋がります。次世代スマートメーターと統一化されたデータ分析ツールの導入により、地域全体のエネルギー効率と持続可能性が向上します。

高度な通信能力
次世代スマートメーターは複数の通信プロトコルをサポートし、電力使用データを電力会社や消費者にリアルタイムで送信できます。これにより、電力使用状況をより正確に、迅速に把握することが可能になります。

エネルギー管理と最適化
これらのメーターは消費者のエネルギー使用パターンを分析し、省エネルギーのヒントや効率的なエネルギー使用戦略を提供します。これにより、エネルギーの使用効率が向上し、コスト削減が実現されます。

リモート制御と診断
電力会社は遠隔からメーターを制御し、診断を行うことができます。これにより、物理的なメーターチェックの必要性が減少し、効率的なメンテナンスが可能になります。

拡張性
スマートメーターに人感センサーや温度センサーなどの環境センサーを搭載することにより、より高度なエネルギー管理と最適化が実現されます。これらのセンサーは、家庭やオフィスの室内環境をリアルタイムで監視し、エネルギー使用量に直接影響を与える要因を把握するのに役立ちます。

統合性
次世代スマートメーターは、スマートホームシステムや再生可能エネルギー源など、他の家庭内やオフィス、工場等のシステムと統合できます。これにより、家庭内のエネルギー管理が一元化され、より効果的な制御と最適化が実現されます。

検討されている技術資料
TR-1052 – EMS・アグリゲーションコントローラー-スマートメーター(Bルート)通信インタフェース実装詳細ガイドライン
スマートメーターとエネルギー管理システム(EMS)の開発に関しては、その実装ガイドラインと技術資料が非常に重要です。これらの資料は、電力各社、開発者、およびシステムインテグレータに対して、次世代スマートメーターシステムの設計、開発、および実装のための共通の枠組みと基準
https://www.ttc.or.jp/document_db/information/view_express_entity/1055

メールのパスワードの設定プログラム

メールのパスワード設定一覧を作るときに半角英数で、メールアドレスが有効で、メールアドレスとは別にアカウントがあります。

いろんなチェックをして、生成して、配らないといけません。結構面倒ですし、エラーも多いので、こちらでプログラムを書いてみました。

追加仕様:(2名様のニーズを反映)
1.必ず英字大文字小文字数字記号の組み合わせを入れる。
2.10桁から12桁までランダム

サンプルプログラムは下記になります。CSV形式等は自分で行なってください。

https://abundcore.net/program-library/email-password/

 

<?php

function generateRandomPassword() {
    // パスワードの長さを10から12桁の間でランダムに決定
    $length = rand(10, 12);
    // 各カテゴリの文字
    $lowercaseLetters = 'abcdefghijklmnopqrstuvwxyz';
    $uppercaseLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $numbers = '0123456789';
    $symbols = '#%=-+:?_<>[]{}()^!,.';

    // 各カテゴリから最低1文字を確実に含める
    $password = $lowercaseLetters[rand(0, strlen($lowercaseLetters) - 1)];
    $password .= $uppercaseLetters[rand(0, strlen($uppercaseLetters) - 1)];
    $password .= $numbers[rand(0, strlen($numbers) - 1)];
    $password .= $symbols[rand(0, strlen($symbols) - 1)];

    // 全ての文字を結合して残りの部分をランダムに選択
    $allCharacters = $lowercaseLetters . $uppercaseLetters . $numbers . $symbols;
    for ($i = strlen($password); $i < $length; $i++) {
        $password .= $allCharacters[rand(0, strlen($allCharacters) - 1)];
    }

    // パスワードをシャッフルして各カテゴリの文字が最初に来ないようにする
    $password = str_shuffle($password);

    return $password;
}

function isValidUsername($username) {
    // ユーザーネームが半角英数とピリオド、ハイフンのみを含むかチェック
    return $username !== '' && preg_match('/^[a-zA-Z0-9\.\-]+$/', $username);
}

function isValidEmail($email) {
    return $email !== '' && filter_var($email, FILTER_VALIDATE_EMAIL);
}

$userData = [];
$errors = [];

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    for ($i = 1; $i <= 5; $i++) {
        $username = $_POST["username$i"] ?? '';
        $email = $_POST["email$i"] ?? '';
        if ($username !== '' || $email !== '') {
            if (!isValidUsername($username)) {
                $errors[] = "ユーザーアカウント {$i} は無効です。半角英数とピリオド、ハイフンのみ使用可能です。";
                continue;
            }
            if (!isValidEmail($email)) {
                $errors[] = "メールアドレス {$i} は無効です。";
                continue;
            }
            $password = generateRandomPassword();
            $userData[] = [
                'username' => $username,
                'email' => $email,
                'password' => $password
            ];
        }
    }
}
?>

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>パスワードフォーム</title>
</head>
<body>
    <h1>パスワードフォーム</h1>
    <form method="post">
        <?php for ($i = 1; $i <= 5; $i++): ?>
            <div>
                <label for="username<?= $i ?>">ユーザーアカウント <?= $i ?>:</label>
                <input type="text" id="username<?= $i ?>" name="username<?= $i ?>">
                <label for="email<?= $i ?>">メールアドレス:</label>
                <input type="email" id="email<?= $i ?>" name="email<?= $i ?>">
            </div>
        <?php endfor; ?>
        <button type="submit">送信</button>
    </form>
    
    <?php if (!empty($errors)): ?>
        <div style="color: red;">
            <?php foreach ($errors as $error): ?>
                <p><?= $error ?></p>
            <?php endforeach; ?>
        </div>
    <?php endif; ?>

    <?php if (!empty($userData)): ?>
        <h2>生成されたパスワード一覧</h2>
        <table border="1">
            <tr>
                <th>ユーザーアカウント</th>
                <th>メールアドレス</th>
                <th>新しいパスワード</th>
            </tr>
            <?php foreach ($userData as $user): ?>
                <tr>
                    <td><?= htmlspecialchars($user['username'], ENT_QUOTES) ?></td>
                    <td><?= htmlspecialchars($user['email'], ENT_QUOTES) ?></td>
                    <td><?= $user['password'] ?></td>
                </tr>
            <?php endforeach; ?>
        </table>
    <?php endif; ?>
</body>
</html>

ns_binding_aborted とは

サイトスピードの調整をしている時に「ns_binding_aborted」という表示がブラウザの解析に出ました。
ns_binding_aborted とは

NS_BINDING_ABORTED は、ウェブブラウザにおけるエラーコードの一つで、通常、ユーザーがページの読み込みをキャンセルした場合に発生します。これは、ユーザーがページの読み込みを途中で止めるか、別のページに移動することによって引き起こされる可能性があります。このエラーは、特にページの読み込みが遅い場合や、ユーザーが素早く複数のリンクをクリックした場合によく見られます。

このエラーコードは、主にブラウザの内部で使用され、開発者がブラウザやウェブページの動作を分析する際に表示されるもので、一般のユーザーはこのエラーを見ることはほぼありません。

NS_BINDING_ABORTED は、ウェブページが正常に機能していないことを示すエラーではなく、ユーザーの行動によって発生する自然なプロセスの一部です。したがって、このエラーが発生しても特に心配する必要はありません。

気になる方はブラウザをリロードして、同じエラーができるか?を確認してください。

androidでFlutterで録音するには?

androidでFlutterで録音するには?

Flutterの開発環境が整っていることです。
詳細を知りたい方は別途ご連絡ください。

https://pub.dev/packages/record

permissionの設定

プロジェクト作成した後に、下記のファイルを探して、
/android/app/src/main/AndroidManifest.xml
に下記を1行追加。

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 録音許可を追加 -->

パッケージ追加

プロジェクト作成した後に、下記のファイルを探して、
/pubspec.yaml
flutter:の行を追加

dependencies:
  flutter:
    sdk: flutter
  record: ^5.0.1

ターミナルで下記のコマンド実行

flutter pub get

プログラム

パッケージ設定

import 'package:record/record.dart';

// AudioRecorderのインスタンスを作成
final record = AudioRecorder();

// 録音のための許可をチェックし、必要に応じてリクエスト
if (await record.hasPermission()) {
  // ファイルへの録音を開始 ここのパスを間違えると録音ができないです。ログ等を細かく確認してください。
  await record.start(const RecordConfig(), path: 'aFullPath/sample.m4a');
  // ... またはストリームへの録音を開始
  final stream = await record.startStream(const RecordConfig(AudioEncoder.pcm16bits));
}

// 録音を停止し、ファイルパスを取得
final path = await record.stop();
// ... または録音をキャンセル(これによりファイル/ブロブが暗黙的に削除される)
await record.cancel();

// リソースを解放
record.dispose(); // これを忘れないでください。

 
 

mysqlのzabbixのDBパスワード変更

mysqlのzabbixのDBパスワード変更

MySQLのパスワード

MySQLにログインします
mysql -u root

パスワードをリセットします(例: 新しいパスワードRootPassword)
ALTER USER ‘zabbix’@’localhost’ IDENTIFIED BY ‘NewPassword’;

zabbix設定

2ファイルを変更
/etc/zabbix/zabbix_server.confの下記の部分を変更
DBPassword=NewPassword

/etc/zabbix/web/zabbix.conf.php の下記の部分を変更
$DB [‘PASSWORD ‘]= ‘NewPassword’;

zabbix再起動

sudo systemctl restart zabbix-server

エラー

下記のエラーが出た場合は設定が不足している可能性があります。
Database error
Access denied for user ‘zabbix’@’localhost’ (using password: YES)