OmniAICreator/Qiita-1.07M huggingface dataset:
AIでWebサイトを作成して公開できるSoloのご紹介

# 1.はじめに
ウェブサイトをAIで生成できる「Solo」が昨年リリースされました。このツールは、現在ベータ版で無料で利用可能です。
誰でも簡単にプロフェッショナルなウェブサイトを作成できるのが特徴で、特に個人事業主やフリーランサーにとって強力なツールとなっています。
この記事では、Soloの使い方やその魅力について詳しく解説します。

# 2.Soloとは？
`Solo`は、Mozillaが開発したAI搭載のウェブサイトビルダーです。特別なコーディングの知識がなくても、簡単にウェブサイトを作成できる点が最大の特徴です。
Soloを使えば、ビジネスに関する基本情報を入力するだけで、AIが最適なデザインとコンテンツを自動生成してくれます。特に、自分のビジネスをオンラインで展開したい個人事業主やフリーランサーの方におすすめです。

# 3.Soloの特徴
Soloの魅力は、何といってもその簡単さと高機能です。

以下のような特徴があります
+ AIによるコンテンツ生成
Soloは、あなたが入力した情報を基に、最適なデザインとテキストを自動で生成します。デザインや文章を考える手間が省けるのが嬉しいですね。
+ カスタマイズの柔軟性
生成されたウェブサイトは、フォントやカラーなど、簡単にカスタマイズできます。あなたのビジネスにぴったりなデザインに仕上げることが可能です。
+ 無料カスタムドメイン
他のウェブサイトビルダーと違い、Soloはカスタムドメインの接続を無料で提供しているんです。これで、コストを抑えつつもプロフェッショナルなウェブサイトを作成できます。

# 4.Soloの使い方
Soloを使ってウェブサイトを作るのはとても簡単です。

以下のステップに沿って進めるだけで、あっという間に素敵なサイトが完成します。
+ Soloにアクセス
まず、Soloの[公式ウェブサイト](https://soloist.ai/)にアクセスしましょう。
+ ウェブ作成の開始
「Create Your Website」ボタンをクリックして、作成をスタートします。
![1.Soloにアクセス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/fefda7a2-7cea-e935-bc28-221a6f328ca4.png)
+ 基本情報の入力
サイトの目的や提供するサービスなど、ビジネスに関する基本情報を入力します。これだけで、AIが最適なデザインとコンテンツを作成してくれます。
![2.基本情報の入力.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/6c0df655-bbda-8b81-e951-c8e651c4f46e.png)
+ デザインの選択
フォントや色、スタイルを選んで、あなた好みのビジュアルイメージを確立します。
![3.デザインの選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/ff3f2c94-adb3-127d-190b-170ba779bcd8.png)
![3.デザインの選択 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/869011a3-705e-0b40-8c3b-109ec361db2b.png)
+ カスタマイズ
+ 公開
最後に「Publish」ボタンをクリックすれば、あなたのウェブサイトがインターネット上に公開されます。
とっても簡単ですね！

# 5.Soloのメリットとデメリット
メリット
+ 使いやすさ
コーディング知識がなくても、誰でも簡単に使える直感的な操作が魅力です。
+ 時間とコストの節約
Soloを使えば、ウェブサイトを短時間で作成でき、開発コストも抑えられます。
+ SEO最適化
Soloは、検索エンジンで上位表示されやすい構造でウェブサイトを作成してくれるので、オーガニック検索からの訪問者増加が期待できます。

デメリット
+ 日本語対応の精度
Soloは日本語にも対応していますが、英語に比べてテキストの生成精度がやや劣る場合があります。内容によっては、少し手を加える必要があるかもしれません。
+  カスタマイズの制限
高度なカスタマイズが必要な場合には、Soloでは限界があるかもしれません。特に、複雑なデザインや機能が求められる場合は、他のツールも検討してみると良いでしょう。

# 6.Soloを使うべき人とは？
Soloは特に、以下のような方におすすめです
+ 個人事業主やフリーランサー
技術的なサポートなしで、自分のビジネスをオンラインで展開したい方にぴったりです。
+ 小規模ビジネスオーナー
高額なウェブ開発費用をかけずに、自社のウェブサイトを立ち上げたい方におすすめです。
+ 初心者
ウェブサイト作成が初めてでも、簡単に操作でき、直感的にウェブサイトを構築できます。

# 7.まとめ
Soloは、技術的な知識がなくても、簡単にプロフェッショナルなウェブサイトを作成できる優れたツールです。
特に、個人事業主やフリーランサー、小規模ビジネスオーナーにとって、時間とコストを節約しながらオンラインでのプレゼンスを確立するための理想的な選択肢です。
初心者でも安心して使えるSoloを、一度試してみてはいかがでしょうか。

# 参考
[Solo公式サイト](https://soloist.ai/)

[【note】Solo：Web作製AIツールで実際にWebサイトを作ってみた](https://note.com/housememo/n/n7a12cf859095)

[Mozillaブログ](https://blog.mozilla.org/en/mozilla/ai/mozilla-solo-artifical-intelligence-website-creator-ai/)
【読書メモ】問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本

# はじめに
米田優峻さんの『問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本』を読んだので、自分用のメモ程度に記録していきます。
https://gihyo.jp/book/2022/978-4-297-12521-9

私がこれを読んだ背景としては、paizaのSランクが時間オーバーゆえにどうしても合格できず、計算量に対する考え方・効率的なアルゴリズムを知りたかったためです。

結果として、ど文系かつエンジニア歴の短い私でもpaizaのSランクには合格することができたので、読んで良かったと思いました。
（Sランク1つを合格できただけで、他の問題も簡単に・必ず解けるのかと言われたらそんなことはないと思います、、）

# 1章:アルゴリズムと数学の密接なかかわり
アルゴリズムとは何かということや、アルゴリズムを考える上で使えるざっくりとした思考の道筋が説明されています。
イントロダクション的な感じで10ページほどです。

# 2章：アルゴリズムのための数学の基本知識
式に対する説明、演算子、関数とは　などが優しく説明されています。
また、少し難しくは感じましたが、計算量の考え方やシグマ記号に対する説明もありました。
中学数学から怪しい自分にとっては基礎から説明してくれてありがたく感じました。

# 3章：基本的なアルゴリズム
素数を判定する「素数判定法」や最大公約数などを求める際に使用できる「ユークリッドの互除法」、その他にも場合の数や動的計画法などが紹介されています。
このアルゴリズムを知っていれば解けるが、自分で0から考えるのは難しいなと思ったので、このように紹介されていることは非常に助かります。

また、各節の最後には「節末問題」としてその節で学んだ内容を応用してとく問題が掲載されています（１章からあります）。
この節末問題で知識を確認できるので、ちょっと難しくなってきた３章では非常にありがたく感じました。

# 4章：発展的なアルゴリズム
※ 本の冒頭に「数学が苦手な方は、章を1→2→3→5→4の順で読むと良い」とあったので、私はこの章を最後に読みました。
ベクトル・グラフ・積分など、正直私には難しい話が多くありました。
また、私がこの本を現在読んだ目的が「paizaでSを獲る」だったため、paizaでSを獲るために必要なさそうな難しいところは正直読み飛ばしてしまいました、、理解できないと本を読むモチベが下がってしまうので、、

一方で、この章で紹介されていた「最短ルートを求める際のアルゴリズム」を使うことで、私はpaizaのSランク問題を解くことができました。

# 5章：問題解決のための数学的考察
アルゴリズムを考える上での、数学的な思考法が紹介されています。
この章は他の章と比べると、抽象的な問題解決方法が紹介されている章になりますが、個人的にはこの章がとても学びになりました。
というのも、アルゴリズムを考える際の土台となる考え方を知ることができたと感じているためです。
規則性を見出すこと・集合を考えた際に見えてくること・足された回数を利用すること　など、これだけ読むと何のことかわからないかもですが、問題解決のために必要な思考法を与えてくれたと感じています。

# さいごに
元々数学にとても苦手意識を持っている私なため、「数学がめっちゃ分かった！」「競プロでどんな問題でも解けるぜ！」のような状態にはなっていませんが、それでも当初の目標を果たすことができたので、この本はとても良い本だと感じています。

「競プロをやっているが全然結果が出ない」「アルゴリズム関連の本を読んでみたが全然わからなくて挫折した」などの方にはおすすめの１冊になるかなと思います。
MNISTで実際の手書き文字を認識させる

# 概要
タイトル通り、PCで撮影した手書き文字を認識できるか試しました

# 実装
ライブラリの読み込み
```python
import sys
import struct
import matplotlib.pyplot as plt
import numpy as np
import os
from sklearn.neighbors import KNeighborsClassifier
from skimage import io, color
```

MNIST読み込み
```python
def load_mnist(path, kind='train'):
    labels_path = os.path.join(path,'%s-labels.idx1-ubyte'% kind)
    images_path = os.path.join(path,'%s-images.idx3-ubyte'% kind)
    #images_path = "datasets/t10k-images.idx3-ubyte"
    #labels_path = "datasets/t10k-labels.idx1-ubyte"
    with open(labels_path, 'rb') as lbpath:
        magic, n = struct.unpack('>II',lbpath.read(8))
        labels = np.fromfile(lbpath,dtype=np.uint8)
        
    with open(images_path, 'rb') as imgpath:
        magic, num, rows, cols = struct.unpack(">IIII", imgpath.read(16))
        images = np.fromfile(imgpath,dtype=np.uint8).reshape(len(labels), 784)
        
    return images, labels, rows, cols
```
学習用と検証用に分けます
```python
train_images, train_labels, train_rows, train_cols= load_mnist("datasets",kind="train")
test_images, test_labels, test_rows, train_cols = load_mnist("datasets",kind="t10k")

x_train = train_images
y_train = train_labels
x_test = test_images
y_test = test_labels
```

学習
```python
k = KNeighborsClassifier()
k.fit(x_train, y_train)
```

手書きのファイルを読み込み
```python
img = io.imread('ファイル名')
# 画像を色の値にする
img_color = color.rgb2gray(img)
# 1行にする
img_color = img_color.reshape(1, -1)
```

手書きの文字が読み取れるか検証する
```python
pred = k.predict(img_color)
pred
```

**詳細な実装ファイルは以下です**
https://github.com/haru-cpu/ai_learn/blob/main/load_MNIST.ipynb
【Google Cloud】実践編 Dataformを使ってSQLでELT処理を実装する

## 概要

GCPのサービスの一つであるDataformについて、以下の2部構成でまとめいる記事のうち、本記事は実践編です

初級編：https://qiita.com/Memmbers_DataAdventure/items/c39f06bf029bc8c75722
実践編：★本記事

データ分析に関係する業務の人目線での記事となっておりますが、参考になれば幸いです

この記事では、Google Cloud Platform (GCP) のサービスであるDataformの実践的な使い方について説明します
実践編として、5つの機能を紹介し、データ分析に携わる方々にとって役立つ内容となっています

### 1. 対象を指定して実行する

データ分析において、上流システムの一部不具合により、GCP上に構築したワークフローの中の特定の機能やシナリオを再実行したい場面があります。そんな時に便利な機能が「対象を指定して実行する」機能です

この機能は、SQLXのconfigブロックでtagsを作成し、実行時にそのtagsを指定することで簡単に行えます

以下のようにtagsを含むsqlxを作成
![タグ付与.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3199948/50c91fe4-2fe9-c0e3-b364-cefadce2389b.png)

以下のように「実行開始」から作成したtagsの選択が可能
![タグ実行.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3199948/0c915f96-c9c5-ccc9-2004-4536fbf1754e.png)



### 2. 全件洗い替えと差分更新

全件更新とは、対象のテーブルをゼロから再作成する処理です
一方、差分更新とは、集計元と集計先の差分のみを更新する処理です

Dataform上での実施方法は以下の通りです

- **全件更新**: ワークフロー上で「フル更新で実行」のオプションを選択する
- **差分更新**: incrementalテーブルタイプのテーブルを作成し使用する

ここでは差分更新の際のサンプルを以下に示します

configブロックで、incrememntalタイプを定義し、sqlにて差分の条件を記述することで、この条件に該当する差分を更新することが可能

![部分実行.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3199948/460ebf89-aba1-482a-e6a9-115a1eda97a4.png)


### 3. テストと通知

データ分析で使用するデータにnull値や重複があると、正確な分析が困難になります
Dataformのassertionsオプションを使用することで、事前にこれらの問題を検知することが可能です

例えば、nullでないことをチェックするには以下のようにする
![テスト.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3199948/99895c67-fa63-2c61-93b9-e001beaafb40.png)

実行ログやテスト結果が保存されるテーブルから結果を確認することができます

以下のように確認

![テスト結果の確認3_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3199948/0eb0f0e7-408a-bb15-0005-52d0b665bb03.png)

### 4. その他の便利機能

その他、個人的におすすめな便利機能があるので、簡単に紹介します

#### 4.1. カスタム変数の利用

Dataformではカスタム変数を使用することができます
カスタム変数を使用し、動的に値を変更したい場合に使うことができます

詳細は、以下の各ドキュメントをご覧ください

https://cloud.google.com/dataform/docs/use-dataform-cli?hl=ja#view_compilation_output

https://zenn.dev/snagasawa/articles/custom_compilation_variables_of_dataform

#### 4.2. 他サービスとの連携

また、ワークフローを構築すると、都度ログを確認する作業が必要になります
この作業を効率化するために、エラー検知とその結果をSlackに通知する仕組みを構築することが可能です
これにより、エラーが発生した場合のみ通知を受け取り、その通知でログを確認することができます

詳細な手順は以下の記事を参照してください

https://tech.buysell-technologies.com/entry/2023/07/17/120000#エラー検知と-Slack-通知

### まとめ

Dataformを使用してSQLのワークフローを構築し、管理・運用するための実践的な機能を紹介しました
これらの機能を効果的に利用することで、データ品質の向上や開発生産性の向上に貢献できれば幸いです
CDS View関連ツール

CDS View関連のツールのメモ

Report:RUTDDLSSHOW2 (Transaction SDDLAR)
    SAPGUIから参照が可能

Transaction SE80 -> Edit ObjectsでDDLNAMEを入れると参照やチェックが可能



https://help.sap.com/docs/SUPPORT_CONTENT/bwplaolap/3361386529.html?locale=en-US
awkコマンド

## awkコマンドってなに？
「awk」は空白やカンマなどで区切られたテキストを処理するコマンド

```java: 基本構文
awk 'パターン {アクション}' ファイル名
```
- パターン：そり対象となる行を選択する条件
- アクション：マッチした行に対して実行する処理内容

## オプション
| オプション | 説明 | 
|:---|:---|
| `-F` | フィールド（列）の区切り文字を指定する | 
| `-v` | 変数をコマンドラインから指定する | 
| `-f` | AWKスクリプトをファイルから読み込んで実行する | 
| `-W` | 特定の警告オプションを有効にする | 

## 例

パターン１
```java: sample.txt
apple orange banana
cat dog mouse
one two three
```
```java: awkコマンド
awk '{print $1}' sample.txt
```
各行に対して一番目のフィールド（列）を出力する
```java: 結果
apple
cat
one
```

パターン２
```date.txt
A 20 45
B 15 50
C 30 55
D 10 30
```

```java: awkコマンド
awk '$3 >= 50 { print $1, $3 }' data.txt
```
data.txtの3列目の値が50以上の行の1列目と3列目を表示
```java: 結果
B 50
C 55
```

## おまけ（gawkってなに？）
GNUプロジェクトが開発したAWKの拡張バージョンでawkの全機能に加えて追加の拡張機能のを使用できる
Tips: Linux のログファイルを、圧縮されてたものも、圧縮されていないものも一緒に扱う

# Tips: Linux のログファイルを、圧縮されてたものも、圧縮されていないものも一緒に扱う
### 1. はじめに
Apache2 のログファイルを、みなさんはローテーションしながら大量にためているものと思います。これを処理するときに、grep を使って絞り込むのが簡単です。ところが、圧縮されて、gz の拡張子がついているファイルと、圧縮されていないファイルとが混在するために、同じよーなスクリプトを2回書いたりしていませんか？
ChatGPTに教えてもらって解決しました。
### 2. 解決策
例えば、~~"Keyword" を含むページへのアクセスを検索するには~~次のようにします。
```
cat `ls -r access.log.1?.gz access.log.2?.gz` access.log.1 access.log | \
   zgrep -v 'Applebot' |\
    grep -v 'bingbot' |\
    grep -v 'Googlebot' |\
    grep -v 'GPTBot'
```
ポイントは、ログファイルを全部 cat して、パイプラインの右側で、最初だけ zgrep を使うことです。
お試しください！
XcodeCloudのビルドに失敗する（sentry-cocoa）

## Xcode Cloudの実行環境
日付：2024/09/03
Xcode バージョン： Xcode 15.4（15F31d）
MACOS バージョン： macOS Sonoma 14.2（23C64）

## エラー内容
```
...
Adding spec repo `trunk` with CDN `https://cdn.cocoapods.org/`

Downloading dependencies

Installing AmazonIVSBroadcast (1.20.0)

Installing LicensePlist (3.25.1)

Installing Periphery (2.21.0)

Installing Sentry (8.33.0)

[!] Error installing Sentry

[!] /usr/bin/git clone https://github.com/getsentry/sentry-cocoa.git /Volumes/workspace/tmp/d20240902-6264-iu5rmu --template= --single-branch --depth 1 --branch 8.33.0

Cloning into '/Volumes/workspace/tmp/d20240902-6264-iu5rmu'...

warning: Could not find remote branch 8.33.0 to clone.

fatal: Remote branch 8.33.0 not found in upstream origin

[!] Automatically assigning platform `iOS` with version `15.0` on target `アプリ` 
because no platform was specified. 
Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

エラー
Command exited with non-zero exit-code: 1
```

## 原因
> [!] Automatically assigning platform `iOS` with version `15.0` on target `アプリ` 
because no platform was specified. 

こちらはPodfileでプラットフォームを明示的に宣言していないことによる警告なので問題なさそう。

> Installing Sentry (8.33.0)
[!] Error installing Sentry
[!] /usr/bin/git clone https://github.com/getsentry/sentry-cocoa.git /Volumes/workspace/tmp/d20240902-6264-iu5rmu --template= --single-branch --depth 1 --branch 8.33.0
Cloning into '/Volumes/workspace/tmp/d20240902-6264-iu5rmu'...
warning: Could not find remote branch 8.33.0 to clone.
fatal: Remote branch 8.33.0 not found in upstream origin

上記でSentryのcloneに失敗していたので、[sentry-cocoaのリリースノート](https://github.com/getsentry/sentry-cocoa/releases)を確認すると、バグがあったらしく8.33.0が非推奨になっていた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245300/16f89008-aae8-b596-4ece-2773326f5570.png)

## 解決
Podを更新し、Sentryが8.33.0→8.36.0となっていることを確認。
その後XcodeCloudで再ビルドすると解決した。
serverless frameworkを使って毎日AWSのコストをSlackに飛ばすlambda関数を作ってみる（トリガーの設定）

## 概要

今まで作成してきたserverlessを用いてデプロイしているlambdaのトリガーはEventBridgeを使っているが何かしらのイベントをトリガーにして起動するような設定になっている。
これを日本時間の午前10時に毎日実行されるように設定する。

## 前提

下記の内容が完了していること

https://qiita.com/miriwo/items/747bfff4214c3350656e

## 方法

- 下記を実行してすでにデプロイされている関連AWSリソースを一旦削除

    ```terminal
    serverless remove
    ```

- 下記の様にserverless.ymlのfunctionsの部分を修正

    ```aws-cost-notify/serverless.yml
    functions:
      notify:
        handler: handler.notify
        name: aws-cost-notify
        events:
          - schedule:
              # EBのcronはデフォルトでUTCなのでJSTの10時から9時間引いた1時を設定
              rate: cron(0 1 * * ? *)
    ```

- 下記を実行して変更をAWSに反映

    ```terminal
    serverless deploy
    ```

- EventBridge上で当該のルールを開くとイベントスケジュールで毎日UTCの1時に実行が設定されていれば一旦完了

    ![CleanShot 2024-09-03 at 10.46.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/ee00b0af-ec3d-f4c6-2117-6f647f91aed2.png)
【AtCoder】いもす法（階差と累積和）

## いもす法とは
階差を累積和の性質を利用して、配列のある範囲において同一処理をする際に活用できる手法である。配列に対する処理を階差に対して行い、処理後に階差の累積和を取ることで結果を得ることができる。

## 一次元いもす法
### 例題
[典型90問064 - Uplift（★3）](https://atcoder.jp/contests/typical90/tasks/typical90_bl)

ここでは例題の設定で、全地殻変動後の各区画の標高を求めてみよう。
```C++
#include <bits/stdc++.h>
using namespace std;
using vi = vector<int>;
#define rep(i, n) for (int i = 0; i < (n); ++i)

int main() {
  int N, Q; cin >> N >> Q;
  vi A(N+1), B(N);
  A[0] = 0;
  for (int i = 1; i <= N; i++) cin >> A[i];
  rep(i, N+1) B[i] = A[i+1] - A[i]; // 階差配列を作成
  
  rep(qi, Q) {
    int L, R, V; cin >> L >> R >> V;
    B[L-1] += V; B[R] -= V;
  }
  for (int i = 1; i < N; i++) B[i] += B[i-1]; // 累積和を取る
  
  rep(i, N) cout << B[i] << ' ';
  cout << endl;
}
```

## 二次元いもす法
### 例題
[典型90問028 - Cluttered Paper（★4）](https://atcoder.jp/contests/typical90/tasks/typical90_ab)

```C++
#include <bits/stdc++.h>
using namespace std;
using vi = vector<int>;
#define rep(i, n) for (int i = 0; i < (n); ++i)

int main() {
  int N; cin >> N;
  const int M = 1002;
  vector<vi> A(M, vi(M, 0)); // 階差配列として扱う
  rep(i, N) {
    // 左上の座標(lx. ly)、右下の座標(rx, ry)
    int lx, ly, rx, ry;
    cin >> lx >> ly >> rx >> ry;
    A[lx][ly]++; A[rx][ry]++;
    A[rx][ly]--; A[lx][ry]--;
  }
  
  rep(i, M) rep(j, M-1) A[i][j+1] += A[i][j]; // 行ごとに累積和を取る
  rep(j, M) rep(i, M-1) A[i+1][j] += A[i][j]; // 列ごとに累積和を取る
  
  vi ans(N+1, 0);
  rep(i, M-1) rep(j, M-1) ans[A[i][j]]++;
  for (int i = 1; i <= N; i++) cout << ans[i] << endl;
}
```

一次元いもす法から二次元いもす法の拡張が理解できれば、三次元いもす法も同様である。

間違っている箇所や補足説明などがありましたら、ご指摘いただけますと幸いです。
仮想環境内のWindowsでシリアル接続

# USBのIDを確認

```shell
$ lsusb
...
Bus 001 Device 014: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)
...
```

# IDを指定してqemuを起動
`-usb -device usb-host,vendorid=0x0403,productid=0x6015`

例)
```
qemu-system-x86_64 -M q35,smm=on -smp 2 -m 8G /opt/vdisk/win11.qcow2 -net nic -net user,smb=/opt/share -enable-kvm  -usb -device usb-host,vendorid=0x0403,productid=0x6015
```

# ゲストOSから接続

![Screenshot_2024-09-03_10-35-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786381/57fe8ccf-0f31-73bb-5c89-1d06083bc03a.png)
# .NET 9 でより純粋なメトリクス


Metricsはプログラムの健全な運用をサポートしますが、過剰なメトリクスは問題の調査、ダッシュボード表示、およびログストレージにおいて負担となります。特に、健康チェックのリクエストメトリクスのような、ほとんど意味のない指標には注意が必要です。

.NET 9 では、新しい機能が導入され、一部のエンドポイントやリクエストでHTTPメトリクスの記録を選択的に除外することができます。

以下の方法で特定のエンドポイントのメトリクス記録を除外することができます：

- Web APIコントローラー、SignalRハブ、または gRPC サービスに`[DisableHttpMetrics]`属性を追加します。
- アプリケーションの起動時にエンドポイントをマッピングするときに`DisableHttpMetrics()`を呼び出します。

```csharp
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Http.HttpResults;
using OpenTelemetry.Metrics;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHealthChecks();
builder.Services.AddOpenTelemetry()
    .WithMetrics(builder => 
    {
        builder.AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel");
        builder.AddView("http.server.request.duration",
            new ExplicitBucketHistogramConfiguration
            {
                Boundaries = new double[] { 0, 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 }
            });
    });

var app = builder.Build();

app.MapGet("/test", () => 
{
    return "ok";
});

app.MapHealthChecks("/healthz");
app.Run();
```

プログラムを実行し、次のコマンドを実行します：

```shell
dotnet-counters monitor -n DisableHttpMetricsDemo --counters Microsoft.AspNetCore.Hosting
```

（dotnet-counters がインストールされていない場合は、以下のコマンドでインストールしてください：`dotnet tool install --global dotnet-counters`）

その後、http://localhost:5189/healthz にリクエストを送信すると、次のような結果が得られます：

![画像](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRDOGIZNPAB2p6nsFID8cRsBQvAwKUQpUcAVOIomB766KFywnm7f7K6x3PkDic18RicsOsDPd5c8miaiag/640?wx_fmt=png&from=appmsg)

次に、26行目のコードを以下のように変更します：

```csharp
app.MapHealthChecks("/healthz").DisableHttpMetrics();
```

再度トラッキングコマンドを実行し、/healthz にリクエストを送信すると、/healthz はメトリクスに含まれなくなります。

より複雑なシナリオでは、リクエストが特定のエンドポイントに直接マッピングされない場合や、動的にHTTPリクエストのメトリクス記録を除外したい場合、新しいプロパティ`MetricsDisabled`を含む`IHttpMetricsTagsFeature`インターフェースを使用できます。

HTTPリクエストを処理する際に、`MetricsDisabled`を`true`に設定することで、そのリクエストのメトリクス記録を除外できます。

ミドルウェアを使って条件付きでHTTPリクエストのメトリクス記録を除外する具体例です。

```csharp
app.Use(async (context, next) => 
{
    if (context.Request.Headers.ContainsKey("x-disable-metrics"))
    {
        var feature = context.Features.Get<IHttpMetricsTagsFeature>();
        if (feature != null)
        {
            feature.MetricsDisabled = true;
        }
    }
    await next(context);
});
```

詳細な検証方法は上記の通りです。

(Translated by GPT)


元のリンク：https://mp.weixin.qq.com/s?__biz=MzA3NDM1MzIyMQ==&mid=2247488390&idx=1&sn=085532e83fe46a46f94dab18fcb48a97&chksm=9f004caca877c5ba0bb91723f5881ee25451f7fc5f03102593d465cca25b79b6409e92886dd5&token=1036480445&lang=zh_CN#rd&wt.mc_id=MVP_325642
Slackのフォントがおかしい

気づいたらSlackのフォントが変更されていました
ただ、投稿日時点で何もリリースされていなさそう？？
https://slack.com/intl/ja-jp/help/categories/115000736243-Changelog

前のフォントに戻したい。。。

## 方法
以下をSlackで送信する。
どこのチャンネルでも構いません。
```
/slackfont Lato
```
デフォルトに戻すときは以下を実施するか`cmd＋R`を押下
```
/slackfont
```

## 結論
Slackのデスクトップクライアントでは、 `/slackfont <font name>` でフォントを `<font name>` に変えることができる
AWS IAMポリシーをわかりやすく解説～Part3～

## はじめに

前回まで、AWSのセキュリティの要となるIAMポリシーの基本や条件について解説してきました。今回は、IAMポリシーがどのように評価されるのか、その仕組みである**ポリシー評価チェーン**について解説します。

### ポリシー評価チェーンとは？

ポリシー評価チェーンとは、IAMがアクセスリクエストを評価する際に参照するポリシーの順序のことです。いわば、アクセス許可のチェックポイントが順番に並んでいるイメージです。アクセスリクエストが許可されるためには、このチェーンのすべてのチェックポイントを通過する必要があります。

### ポリシー評価チェーンの順番

ポリシー評価チェーンは、以下の順番で評価されます。

1. **サービスコントロールポリシー (SCP):** AWS組織全体で適用されるポリシーです。組織内のすべてのアカウントに影響を与えます。いわば、組織全体のセキュリティポリシーのようなものです
2. **IDベースのポリシー:** ユーザーやグループに直接アタッチされたポリシーです。個々のユーザーやグループに適用される細かいアクセス制御ルールです
3. **パーミッションバウンダリ:** ユーザーやグループにアタッチされたポリシーで、アクセス可能なリソースを制限します。ユーザーやグループがアクセスできるリソースの範囲を定めます
4. **セッションポリシー:** ロールセッションにアタッチされたポリシーです。ロールを引き受けてアクセスする際に適用される一時的なポリシーです
5. **リソースベースポリシー:** リソースに直接アタッチされたポリシーです。S3バケットやEC2インスタンスなど、特定のリソースへのアクセスを制御します

### リソースベースポリシーと評価チェーン

リソースベースポリシーは、アカウント、ロール、セッションのいずれかに関連付けられます。

* **アカウント:** リソースとアクセス要求者が同じアカウントの場合、リソースベースポリシーは評価チェーンの一部となります
* **ロール:** アクセス要求者がロールを引き受けている場合、リソースベースポリシーは評価チェーンの一部となります
* **セッション:** アクセス要求者が一時的なセッションを持っている場合、リソースベースポリシーは評価チェーンの一部となります

### プリンシパル要素と評価チェーン

リソースベースポリシーの**プリンシパル要素**は、アクセスを許可される対象を指定します。この値によって、評価チェーンを通るパスが変更されます。

例えば、プリンシパル要素の値がアカウントIDの場合、リソースベースポリシーはアカウントレベルで評価されます。

### ワイルドカードと評価チェーン

リソースベースポリシーで**ワイルドカード**を使用する場合、同じアカウント内のすべてのプリンシパルにアクセスできる可能性があるため、注意が必要です。

### まとめ

ポリシー評価チェーンは、IAMポリシーがどのように評価されるのか、その仕組みを理解する上で重要な概念です。ポリシー評価チェーンを理解することで、IAMポリシーをより適切に設計し、AWSリソースへのアクセスを効果的に管理することができます。

### 関係資料
[IAM Policy Evaluation Series: policy evaluation chains](https://youtu.be/71-Gjo6a5Cs?si=tsRvuQ39BVoluIdz)
Reactプロジェクトのフォーマッター面のsetup

# Prettier+ESLintの併用

Prettier: ソースコードの整形を担うツール
ESLint: ソースコードの構文チェック

コードの整形とコードの構文チェックを両方担保するために、双方導入する。

# Prettierの導入
[参考](https://prettier.io/docs/en/install)
- install
```
npm install --save-dev --save-exact prettier
```

- prettierのルールを記述
```
echo {}> .prettierrc.json
touch .prettierignore
```

```
// .prettierrc.json
{
  "trailingComma": "es5",
  "tabWidth": 2,
  "semi": false,
  "singleQuote": true
}
```

format all files
```
npx prettier . --write
```

only checks that files are already formatted
```
npx prettier . --check
```

# ESLintの導入

[参考](https://eslint.org/docs/latest/use/getting-started)
- ルールを記述
下のコマンドを実行して、質問に答える。

```
npm init @eslint/config@latest
```

eslint.config.mjsができる
```
import globals from "globals";
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
import pluginReact from "eslint-plugin-react";
import pluginReactJSXRuntime from "eslint-plugin-react/configs/jsx-runtime.js";

export default [
  {
    ignores: ["build/*"],
  },
  { files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"] },
  { languageOptions: { globals: globals.browser } },
  {
    settings: {
      react: {
        version: "detect",
      },
    },
  },
  pluginJs.configs.recommended,
  ...tseslint.configs.recommended,
  pluginReact.configs.flat.recommended,
  pluginReactJSXRuntime,
];
```

こんな感じのができる。

# linterとprettierの競合解決
ここ全然わかってない、、
[参考](https://prettier.io/docs/en/integrating-with-linters.html)

```
npm install --save-dev eslint-config-prettier
```

eslint.config.mjs
```
import someConfig from "some-other-config-you-use";
import eslintConfigPrettier from "eslint-config-prettier";

export default [
  someConfig,
  eslintConfigPrettier,
];
```

# huskyの導入
[参考](https://typicode.github.io/husky/get-started.html)
```
npm install --save-dev husky lint-staged && npx husky init && echo "npx lint-staged" > .husky/pre-commit
```

モノレポ構成の場合は、precommitは以下。
```
cd client && npx lint-staged
```

package.jsonに以下を追加。
```
  "lint-staged": {
    "src/**/*.{js,jsx,ts,tsx}": [
      "npx eslint  --fix .",
      "npx prettier . --write"
    ]
  }
```
最初うまくいかなくてとりあえず入れ直したらhookが作られたんだけど何でだろ、、

色々初めてなので、間違っているところあったら教えてください！
漢字一覧が欲しい！

ずっと前に漢検クイズを作ったことがあってですね、また作りたいなー（今度は一級漢字とかで）と思って、漢字一覧.csv的なものがどこかの省庁とかから発行されてないかなー...と思ったんですね。

なかったです。いや、あったんですけどPDFしかなかったです。（それも凄く読み取りづらそうな...）

という感じで色々調べていると、`String.fromCodePoint()`なる関数がJavaScriptにあるらしいぞ、と。

あれ？漢字と言えども文字コードには割り当てられてるはずだから、もうそこから一覧取れないのか？常用外はどうか分からんが...

という訳でできたコードがこちらです。
（そこそこ重い！実行は自己責任で...）

```js:main.js
import * as fs from 'fs'

let code = 0
// let file_number = 0

try {
  let strings = []
  let dir_name = "0-1000"
  while (true) {
    if (code % 1000 === 0) {
      if (code > 0) {
        dir_name = `${code - 999}-${code}`
      }
      if (!fs.existsSync(`out/${dir_name}`)) {
        fs.mkdirSync(`out/${dir_name}`)
      }
    }
    const string = String.fromCodePoint(code)
    strings.push(string)
    code++
    if (code % 100 === 0) {
      const outtxt = strings.join('\n')
      fs.writeFileSync(`out/${dir_name}/${code - 99}-${code}.txt`, outtxt)
      strings = []
    }
  }
} catch (e) {
  console.error(e)
} finally {
  console.log('end!')
}

```

実行してみると、こんな有様になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/990851/26c7070c-0bab-2f2f-7f53-cf1bfc9d0d19.png)

えーっと...11134000...
さすが、すごい数の文字が収容されているようです...

地道に漢字が出力されたファイルを探すこと5分...いました！見知った「一」です！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/990851/744fd912-094b-0aaf-b65c-89c54af0927f.png)

<div style="padding:500px;"></div>

---

---

---

---

---

---

---

---

---

---

---

---

---

## 戯言

はい、すべて、戯言です。

[Wiki](https://ja.wikipedia.org/wiki/%E5%B8%B8%E7%94%A8%E6%BC%A2%E5%AD%97%E4%B8%80%E8%A6%A7)からとってくるのが一番早いです。そうしてください。

以下Chatgptベースのスクレイピングコード

```js
import axios from 'axios'
import { load } from 'cheerio'
import { createObjectCsvWriter as createCsvWriter } from 'csv-writer'

// Wikipediaの常用漢字のページURL
const url = "https://ja.wikipedia.org/wiki/常用漢字一覧"

// CSVライターの設定
const csvWriter = createCsvWriter({
  path: 'kanji_reading.csv',
  header: [
    { id: 'kanji', title: 'Kanji' },
    { id: 'reading', title: 'Reading' }
  ],
  encoding: 'utf-8'
})

// Webページを取得して処理
try {
  const response = await axios.get(url)
  const $ = load(response.data)
  const kanjiData = []

  // 各テーブルからデータを抽出
  $('table').each((index, table) => {
    $(table).find('tr').each((i, row) => {
      const cols = $(row).find('td')
      if (cols.length >= 2) {
        const kanji = $(cols[1]).text().trim()
        const reading = $(cols[8]).text().trim()
        kanjiData.push({ kanji, reading })
      }
    })
  })

  // CSVに書き込む
  await csvWriter.writeRecords(kanjiData)
  console.log('常用漢字とその読みがkanji_reading.csvに保存されました。')
} catch (error) {
  console.error('エラーが発生しました:', error)
}

```

おしまい！
【Flutter】Firebase Crashlyticsを導入する

## はじめに
Firebase Crashlyticsをアプリに導入したので、その設定方法について備忘録として記載します。

## 事前設定
事前設定として以下の作業を行ってください。
・Firebaseプロジェクトの作成
・プロジェクトをFirebaseと紐付け

## パッケージのインストール
[firebase_crashlytics](https://pub.dev/packages/firebase_crashlytics)をインストールします。
```
dependencies:
  firebase_crashlytics: ^4.0.4
```


## 実装

Crashlytics用のクラスを作成をします。
```
import 'dart:ui';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/material.dart';

class CrashlyticsHandler {
  static Future<void> setup() async {
    // Flutter フレームワーク内のエラーを全てキャッチ
    FlutterError.onError = (details) {
      FlutterError.presentError(details);
      FirebaseCrashlytics.instance.recordFlutterFatalError(details);
    };
    // フレームワークで捕捉されなかった非同期エラー
    PlatformDispatcher.instance.onError = (error, stack) {
      FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
      return true;
    };
  }

  /// ログを出力
  static log(String message) {
    FirebaseCrashlytics.instance.log(message);
  }

  /// アプリを強制的にクラッシュさせる
  static crash(String message) {
    FirebaseCrashlytics.instance.crash();
  }
}

```

main.dartからCrashlytics用のクラスのsetupを呼び出します。
以上で、Crashlyticsの設定は完了です。

```
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:test_project/cashlytics_handler/crashlytics_handler.dart';

Future<void> main() async {

  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  
  // Crashlyticsの設定
  await CrashlyticsHandler.setup();
  
  runApp(const MyApp());
}
```

## 動作テスト
以下のように、crash()を実行するボタンを設置すると、テストでクラッシュを発生させることができます。

```
// アプリをクラッシュさせるボタン
ElevatedButton(
    onPressed: () {
        CrashlyticsHandler.log('ログ');
        CrashlyticsHandler.crash();
    },
    child: const Text('クラッシュボタン'),
),
```

## 参考
https://firebase.google.com/docs/crashlytics/get-started?platform=flutter&hl=ja#kotlin+ktx

# 告知
最後にお知らせとなりますが、イーディーエーでは一緒に働くエンジニアを
募集しております。詳しくは採用情報ページをご確認ください。

https://eda-inc.jp/recruit/

みなさまからのご応募をお待ちしております。
データモデリングの手順

# 背景
データモデリングの細かいテクニックに関しては書籍やWebの記事に記されていることが多いです。
しかし、実務に耐えるようなデータモデリングの流れについては(少なくとも私が調査した中では)あまり記載されておらず、学習するときにとても困りました(例えば、第一正規化をしたら第二正規化をするだとか、要件を書き出したときの名詞がリソースエンティティでとかの、小手先のテクニックばかりで、実務ではどのようにしていいかがわからない)。

# 本記事の内容
本記事では、私が書籍やWebの記事を読んだり、実務で経験したり、その中で先輩エンジニアに聞いたりしたことをもとにして辿り着いた、データモデリングの流れについて記載しようと思います。

# 結論
私が行っているデータモデリングの流れは以下のとおりです。
1. 企画者の想いを元に、要件定義を"漏れなく"行う
    1. 業務要件を"網羅的に"定義する
    2. システム要件を"網羅的に"定義する
2. 各システム要件を抽象化し、データモデルの形式(エンティティ・関連・属性)に変換する
3. 2.のデータモデルが1.の要件を適切に表現できているかを確認する
4. 3.でうまく表現できていない部分があれば、2.に戻る / すべてうまく表現できていることが確認できれば完成

# 各工程の説明
## 1. 企画者の想いを元に、要件定義を"漏れなく"行う
要件定義に関しては、本記事のスコープから外れるため、細かい要件定義のやり方に関しては記載しませんが、データモデリングを行う上での要件定義の注意点を記載します。

それは要件を網羅的に定義することです。
データモデリングの良し悪しは、具象のユースケースが網羅的に表現できていることと、処理がいい感じに書けそうかがすべてだと思います。
しかしこれらの前提として、そもそもの要件に抜け漏れがないことが必要です(当然ですが)。
リリース後に要件漏れがあることがわかって、モデリングの根本に問題があることがわかると、その変更には大きな手間がかかります。
良いシステムを作るという観点でも、モデリングレベルの手戻りを防ぐという観点でも、要件は網羅的に定義することを特に気をつけるといいと思います。

## 2. 各システム要件を抽象化し、データモデルの形式(エンティティ・関連・属性)に変換する

要件は具象のできごとなので、データモデリングの形式(エンティティ・関連・属性)にするにあたって、まずは抽象化をする必要があります。
そのうえで、モデリングの形式に転写をします。

ここの抽象化と写像の仕方がセンスのでるところであり、難しいポイントだと思います。
この"センス"は何かと言語化すると、①モデリングのパターンやテクニックをどれだけ知っているかと、②いかにそれらを文脈に応じて適切に選択・組み合わせられるか、なのかなと思います。
①の習得に関しては、書籍やWebの記事に色々なパターンやテクニックが記載されているので、それらのインプットを行えばいいのだと思います。
②の習得に関しては、①に関してどれだけ深く理解するか、地頭の良さが必要だと思います。これらのスキルに関しても、様々なビジネス書などがあると思うので、それらを参考にすればいいと思います。

また、この工程の大きな進め方としては、DOA(データ中心アプローチ)で大枠(主にエンティティと関連付け)を表現し、その後POD(プロセス中心アプローチ)で詳細(エンティティの分割・統合、関連付けのブラッシュアップ、属性の付与)を表現するのが適切だと思います。
その理由は以下の書籍の第四章に記載されているので、気になる方はこちらをご参照ください(需要があれば、要点を本記事に追記します)。
[システム開発・刷新のための データモデル大全](https://www.amazon.co.jp/dp/4534057776)

## 3. 2.のデータモデルが1.の要件を適切に表現できているかを確認する

適切に表現できているか確認する方法としては、UIや処理がいい感じにコードで書けそうかを確認すればいいです。
ここでうまく表現できていないものがあれば、2.に戻ります。
すべて要件をうまく表現できていれば、完了です。

# おまけ

"2. 各システム要件を抽象化し、データモデルの形式(エンティティ・関連・属性)に変換する"工程で、私が特に行うことの多いことをメモがてら記載しておきます。
- 正規化
- スーパータイプ・サブタイプの表現
- イミュータブルにする(参考: [WEB+DB PRESS Vol.130](https://www.amazon.co.jp/dp/B0B8MY1BWR))

# 参考
- [楽々ERDレッスン](https://www.amazon.co.jp/dp/4798110663)
- [達人に学ぶDB設計徹底指南書](https://www.amazon.co.jp/dp/4798186627)
- [システム開発・刷新のための データモデル大全](https://www.amazon.co.jp/dp/4534057776)
- [実践的データモデリング入門](https://www.amazon.co.jp/dp/4798103853)
- [事業分析・データ設計のためのモデル作成技術入門](https://www.amazon.co.jp/dp/4297129469)
- [WEB+DB PRESS Vol.130](https://www.amazon.co.jp/dp/B0B8MY1BWR)

# X(Twitter)
私のX(Twitter)のアカウントは[こちら](https://x.com/ken1min86)
Rails マイグレーションで1個のテーブルの特定のカラムの照合順序を変更する

# 例

マイグレーションの正当な構文で実現できる方法が見つからなかったため、SQLを直接実行してしまう

```rb
class ChangeCollation < ActiveRecord::Migration[7.2]
  def up
    execute('ALTER TABLE example_table MODIFY `column_name` VARCHAR(255) COLLATE utf8mb4_bin')
  end
end
```

`ActiveRecord::Base.connection.execute` ではなく `execute` だけで書けるようだ


# schema

マイグレーションを実行すると schema.rb の情報も変わってくれる

```rb
  create_table "example_table", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
    t.string "column_name", collation: "utf8mb4_bin"
```

# 参考

https://guides.rubyonrails.org/active_record_migrations.html


# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura
備忘　インテグレーション（Canvasは埋め込みに加えてDB更新も可）

備忘です。
iflameやWebタブと異なり、埋め込みに加えて画面上で通信を行い、別のカスタムUI（LWC）から、SalesforceDBに対して更新をかけることが可能。


★ポイント★
 ・在庫システムがあり、APIは提供していない。最近構築した画面。改修してJavaScriptを埋め込んだりできる。
 ・在庫システムを更新したときに、Salesforceにも同様の軽微な更新をかけたい
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/24196ec6-5f58-e1b3-51ab-cd52adcdf503.png)
(開発2) yumパッケージインストール

## <u>■概略</u>
オープンソースエンジニア歴30年超の筆者が2023年からIBMiを学びだした学習記録です
IFSをオープンソースエンジニアが慣れ親しんだUNIX環境にするために、yumでパッケージをインストールします

## <u>■yumコマンドのインストール(オフライン)</u>
　筆者がASCからインストールしたところ安定しなかったのでACSなしでオフラインインストールする方法が下記
 
参考URL : https://bitbucket.org/ibmi/opensource/src/3e06f584c88b39f1964d2a58aa094a234a8f77d2/docs/yum/

Offline Install Instructions (without ACS)を実行する 
１. Download bootstrap.sh and bootstrap.tar.Z to your PC
２. IBMiの/tmpに転送
```
PC $ scp bootstrap.sh IBMi:/tmp
PC $ scp bootstrap.tar.Z IBMi:/tmp
```

３. 5250で以下コマンドを実行
```
> QSH CMD('touch -C 819 /tmp/bootstrap.log; /QOpenSys/usr/bin/ksh
     /tmp/bootstrap.sh > /tmp/bootstrap.log 2>&1')
コマンドは終了状況0で正常に終了しました。
```
## <u>■標準パッケージ</u>
### ◯bash
標準のqshではなくbashが使えると、シェルスクリプトでsystemコマンドを使ってIBMiのコマンドを呼び出せるので便利(後述のサービス・プログラムのコンパイルなど)
yumには標準でbashは入っている

### ◯grep
IFSにあるソース・ファイルを横断で検索が可能
RPG3のコードをIFSにCPYTOSTMFでコピーしてgrep検索すると横断的なソースコード分析が可能
更にUNIXシェルのパイプでsed(置換)、awk(テキスト加工)を組み合わせるとより高度な分析ができる

## <u>■yumパッケージのインストール</u>
IBMiにsshログインし以下コマンド実行する
gitはIFS上のソースコードをgit管理するために必須
vim+tmuxはvimで開発している人ならVSCodeがなくてもsshだけで便利に開発できる
```
IBMi $ bash
IBMi $ export PATH=/QOpenSys/pkgs/bin:$PATH:$HOME:
IBMi $ yum update
IBMi $ yum install -y git
IBMi $ yum install -y vim 
IBMi $ yum install -y tmux 
IBMi $ yum install -y lftp 
```

## <u>IFSでbashを標準で使う</u>
IBMiにsshすると標準でbashが起動すると普段遣いのUNIX環境として使用できる

＊Ubuntu等自分の好きな.bashrcをIFSのホームディレクトリにコピーする
　yumやgitは/QOpenSys/pkgs/binにあるのでパスを通しておく
 
~/.bashrc に下記を追加する
```
# for vim
export TERM=xterm
# for packages(git)
export PATH=/QOpenSys/pkgs/bin:$PATH:$HOME:
```

＊IFSのホームディレクトリの.profileに以下bashを起動するよう記載する
```
bash
```
この2点を実行すればIBMiにsshするとbashになっている

[【目次】オープンソースエンジニアがIBMi(AS400)を勉強してみた](https://qiita.com/takami_embomajp/items/f6ddf104aaa84bbc6a15)
(開発1)IBMiのsshd自動起動

## <u>■概略</u>
オープンソースエンジニア歴30年超の筆者が2023年からIBMiを学びだした学習記録です
VSCodeで開発を行うには、IBMiでsshdを起動しssh接続します。IPLの度に手動起動するのは手間なので、sshdの自動起動を設定します

## <u>■IPL時のQSTRUPにsshを起動するCLを追加する手順
### ＊QCLSRCソースファイルを(どこかに)作成する
5250でIBMiにuser1でログインし、USER1LIB/QCLSRCを作成する  
※[入門1](https://qiita.com/takami_embomajp/items/51214086e8dc220114be)にIBMiに階層ディレクトリはないと書きましたが、IBMiではソースファイルが
　フォルダ相当でメンバーファイルがソースファイルの階層になっています

```
CRTSRCPF FILE(USER1LIB/QCLSRC) IGCDTA(*YES)
```
### ＊QCLSRCにSTRSSHCLPメンバーを追加する
```
STRSEU QCLSRC
```
Ctrl-vでペースト
画面でメンバー名などを指定し、F3で保存して終了  
SEU参考URL : https://qiita.com/You_name_is_YU/items/2ebc3eb32827c5e4c5d0  
```
PGM
             MONMSG     MSGID(CPF0000)
             CHGJOB     LOG(4 0 *NOLIST) CCSID(5035)
             QSH CMD('/QOpenSys/usr/sbin/sshd')
             CHGJOB     LOG(4 10 *SECLVL) CCSID(65535)
ENDPGM
```
※LOG(4 0 *NOLIST)を設定する理由
　IFSでシェルスクリプトを実行すると1行につき1ジョブログが出力される
　コンパイルスクリプトだと大量の出力になり、SYSVALのQMAXJOB=163,520に近づくと
 システム全体が激遅になる  
そのため自動起動CLでジョブログの出力抑制をしている

### ＊STRSSHCLPをコンパイルする
```
CRTCLPGM PGM(USER1LIB/STRSSHCLP) SRCFILE(USER1LIB/QCLSRC)  
```
### ＊手動でSSHDを起動する  
```
CALL STRSSHCLP  
```

### ＊sshd_configを修正
sshd起動にsshd_configの値の修正が必要な場合がある

```
edtf "/QOpenSys/QIBM/UserData/SC1/OpenSSH/etc/sshd_config"
----
UsePrivilegeSeparation no
　↓
#UsePrivilegeSeparation no
```

### ＊IPL(起動)スクリプトにSTRSSHCLPを入れてコンパイル
QGPL/QCLSRC/QSTRUPが起動CLソース
```
QSYS/CALL  PGM(USER1LIB/STRSSHCLP)
MONMSG     MSGID(CPF0000)
```

[【目次】オープンソースエンジニアがIBMi(AS400)を勉強してみた](https://qiita.com/takami_embomajp/items/f6ddf104aaa84bbc6a15)
(入門1)IBMi(AS400)とWindows/Mac/Linuxの典型的な違い

# <u>■概略</u>
オープンソースエンジニア歴30年超の筆者が2023年からIBMiを学びだした学習記録です
概念の違う世界を理解するため、IBMiの歴史、特徴と典型的な違いをまとめました

## <u>■IBMiの歴史</u>
※インターネットが爆発的に普及を開始するのが1995年です  
※IBMiはインターネット以前の1988年に発売開始しました  
　同年RDBの雄Oracleはv6になり業務用として必須の行レベルロック機能が実装されました  
※IBMiはSystem360などのホストコンピュータに対してオフコン(オフィスコンピュータ)と
　呼ばれ、主に企業の会計システムに利用されています  
※ハードウェア・OS(OS/400)・データベース(Db2)・開発言語(RPG他)まで垂直統合に
　なっています  
　WindowsはOS・言語だけで、ハードウェアやDBはサードパーティです
　Macはハードウェア・OS・言語の垂直統合と言われます
　MacでDBはあまり使いませんが、サードパーティです
※発売当初はAS/400と呼ばれ、途中iSeiesと名前が変わりました
　そのためAS/400、iSeries、IBMiと呼び方が異なることがあります  

## <u>■IBMiの特徴とWindows/Mac/Linuxとの典型的な違い</u>
### ◯1986年から仮想化を提供し言語にEOLがない
※出荷当初からTIMI(Technology Independent Machine Interface)で仮想化し
　ハードウェアに依存しません  
※同一筐体に複数区画(:~=VM 開発区画と本番区画など)が作成できます  
※IBMiの歴史を見てもCPUが48bitから64bitに変わってもOS・アプリケーションは
　そのまま稼働可能です  
　実際には5～7年毎にハードウェアを更新し、OSのバージョンを最新に更新しています  

**ここまではVMwareも同様のことができます**

※新OSになっても既存のアプリケーションの稼働をIBMが保証しています!  
　弊社では30年前に作成したアプリケーションがそのまま動いています  
　言語やミドルウェアにEOLがないのでオープンソース系のように5～10年毎に  
　アプリケーションの更新が不要です  

### <u>◯単一レベル記憶</u>
※メモリとハードディスクの区別がありません  
　オープンソースではコードでどれぐらいのメモリを消費するかを意識する必要があるが  
　IBMiでは考える必要がありません  
　筆者の感じるところ、すごく高性能のスワップ機能です  
※DBのチューニング、index設定がほぼ不要(IBMiではindexはOSが自動的に作成しています)  
　オープンソースのRDBMSでは正しくindexを作成しないと激遅くなります  

### <u>◯インターフェースは全てCUI</u>
※Windows/Mac、Web以後のGUI全盛時代以前なので開発もアプリも、
　80x25のCUIベースで動きます  
※CUIベースを表示する画面を5250エミューレータ(WindowsではASC(Access Client Solution))
　と言います  
※アルファベットは大文字のみです(漢字コードはEBCDIC)  
※半角カナを表示すると他の文字が文字化けします(切り替え表示可能)  
※FFRPGから5250のCUIでは開発できずVSCodeを使います  
※FFRPG+VSCode開発を5250なしで行う開発手順を後述します  
※5250画面の例  
![firststep02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3875673/4e955940-8abb-1dae-55c1-59607f1bd284.png)

### <u>◯ファイルシステム</u>
※ファイルシステムはIBMiネイティブ(ここでのみの呼び名)とIFSがあります 
![firststep04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3875673/7edac86e-b238-1e1f-cf72-eb786c0f420e.png)

※IBMiネイティブには他のOSと違い階層ディレクトリがなく、  
　IFSはUNIXファイルシステムと大体同じです  
※IBMiネイティブには5250とftpで、IFSにはVSCodeとsshとscpでアクセスします  
※IBMiの漢字コードはEBCDICで、IFSの漢字コードはUTF-8です  
※IFSはストリームファイルとも呼ばれます(IBMiの世界は呼び方が複数あることが多いです)  

#### ◯ライブラリ
※ライブラリは他のOSのディレクトリですがライブラリの中にライブラリは作成できません  
※ログインユーザのカレントライブラリに指定すると優先的にアクセスされます  
※ライブラリのアクセス順はライブラリリストを設定することで決められます
　パスに相当します    
  
#### ◯ファイル
※ライブラリの中にはファイルしかありません  
※ファイルは種類によりデータベース・ソースプログラム・プログラム用があります
　(他にもあり)  
  
　**[データベース]**  
　　PF(Phisical File) : 実際にデータが入るファイル。テーブルに相当します  
　　LF(Logical File)  : 物理ファイルの抽出・ソート条件を指定します。ビューに相当します  
  
　**[ソースプログラム]**  
　　個別のソースファイルはメンバーと呼び、複数のメンバーがソースプログラムに
  　入っています  
　　1段だけです階層になっており、ソースファイルはディレクトリのように見えます  
  
　　・RGP3の入るRPGSRC  
　　・CL(シェルスクリプトやバッチファイルのようなもの)の入るCLSRC  
　　・テーブル定義の入るDDSSRC  
　　・RPG3用のRPGSRC  
　　などがあります  
  
　**[プログラム]**  
　　コンパイルの結果作成されるバイナリプログラム  
　　RPG3コンパイルはソースメンバーにIBMiネイティブしか指定できません  
　　RPGLEとFFRPGコンパイルはソースメンバーにIFS(ストリームファイル)も指定できます  
　　※IBMiネイティブメンバーとIFSの相互コピーができます
　　　ただし漢字コードが変換されます  
　　　そのためRGP3をIFSにコピー+編集+IBMiネイティブにコピーしコンパイルは
　　　できません。漢字を含まないCLなら可能です  

[【目次】オープンソースエンジニアがIBMi(AS400)を勉強してみた](https://qiita.com/takami_embomajp/items/f6ddf104aaa84bbc6a15)
【目次】オープンソースエンジニアがIBMi(AS400)を勉強してみた

◯[(入門1)IBMi(AS400)とWindows/Mac/Linuxの典型的な違い 2024/09/03](https://qiita.com/takami_embomajp/items/51214086e8dc220114be)
◯[(入門2)RGP言語(RGP3,RPGLE,FFRPG)とエディタとgitの関係 2024/09/03](https://qiita.com/takami_embomajp/items/85fa733c18810c19ee12)

◯[(開発1)IBMiのsshd自動起動 2024/09/03](https://qiita.com/takami_embomajp/items/dcce4073de8980288edb)
◯[(開発2)yumパッケージインストール 2024/09/03](https://qiita.com/takami_embomajp/items/5d45b92063e1f237eda8)
◯[(開発3)VSCode+Code for IBMi開発環境のインストール 2024/09/03](https://qiita.com/takami_embomajp/items/3e60be7b031635d85057)
◯[(開発4)複雑なコンパイル手順 2024/09/07](https://qiita.com/takami_embomajp/items/d07dd17829fb70c826d2)
◯[(開発5)デバッグ手順 2024/09/08](https://qiita.com/takami_embomajp/items/a1ba754835e05465a4c5)
◯[(開発6)vim+tmux環境の構成 2024/09/12](https://qiita.com/takami_embomajp/items/21c6329fb7153c3cf799)
◯[(CGI1)IBMiのAPIサーバをFFRPGのCGIで作成する(1) 2024/09/10](https://qiita.com/takami_embomajp/items/86730e2403b9265a39f2)
◯[(CGI2)IBMiのAPIサーバをFFRPGのCGIで作成する(2) 2024/09/10](https://qiita.com/takami_embomajp/items/cfbc9c0936f8bda1ba8a)
◯[(CGI3)IBMiのWeb環境インストール 2024/09/10](https://qiita.com/takami_embomajp/items/ba8c993a8e2fe6cb8888)

◯[(分析1)jupyterでSQL設計とデータ分析 2024/09/11](https://qiita.com/takami_embomajp/items/225a5f45c988a0dcd87d)
◯[(分析2)grep等でRPGソース分析 2024/09/13](https://qiita.com/takami_embomajp/items/62e1c63a6cee1cd32a0d)
◯[<font color=red>(分析3)IBMiのライブラリ毎の種類別オブジェクト数をjupyterで集計 2024/09/27 NEW!</font>](https://qiita.com/takami_embomajp/items/819b1160b9d6546f831c)

◯[(git1)IBMi(AS400)のコード管理をgitlabで](https://qiita.com/takami_embomajp/items/2ec9f9844a69c381b675)
◯[(git2)IBMi(AS400)でのコード管理の流れ 2024/09/15 ](https://qiita.com/takami_embomajp/items/38bb6c0a5db2d1efd67b)
◯[(git3)tig(Gitツール)操作方法 2024/09/16](https://qiita.com/takami_embomajp/items/6ea306479f4ab3b0fe98)
◯[(git4)tig(Gitツール)インストール 2024/09/16](https://qiita.com/takami_embomajp/items/7d6f2bad44eb929b1afe)

◯[(構築1)個人ユーザプロファイル作成 2024/09/08](https://qiita.com/takami_embomajp/items/b717d1e847fa9999aa96)
◯[(構築2)snmpd(SNMPエージェント)の設定 2024/09/11](https://qiita.com/takami_embomajp/items/5b4e63e52c43c85f47b2)
animation-delayプロパティに複数の値を設けることはできない？

とある範囲の背景に、複数の画像が動くアニメーションのUIを実装しようとしました。

## 実装したいUI
背景画像が一個ずつ順番に左から右へスクロールしていき、右端まで到達すると折り返してエンドレスに左右に自動スクロールしていくようなUI
![animation-delay.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1902958/6b35844f-9840-d095-c314-89f16bbb239b.gif)

まずは、複数の背景画像と位置をまとめて設定します。
```html:html
<div class="bgAnimation-area"></div>
```
```css:css
.bgAnimation-area {
  background-image: url("/img1.png"), url("/img2.png"), url("/img3.png");
  background-position: 0 0, 0 200px, 0 400px;
  background-repeat: no-repeat;
  background-size: 160px;
  width: 100vw;
  height: 100vh;
}
```

次に、`background-image`に設定した画像を動かすアニメーションを`@keyframes`で定義します。
```diff_css:css
.bgAnimation-area {
  background-image: url("/img1.png"), url("/img2.png"), url("/img3.png");
  background-position: 0 0, 0 200px, 0 400px;
  background-repeat: no-repeat;
  background-size: 160px;
  width: 100vw;
  height: 100vh;
+  animation-name: scroll-x;
+  animation-direction: alternate; /* アニメーションを毎回反転させる */
+  animation-duration: 5s; /* 1回のアニメーション周期の時間指定 */
+  animation-timing-function: linear; /* 一定の割合で直線的に再生 */
+  animation-iteration-count: infinite; /* アニメーションを無限に繰り返す */
}

+ @keyframes scroll-x {
+  to {
+    transform: translateX(100%);
+  }
+ }
```
アニメーションを開始するタイミングを各画像で1秒ずつずらすために、`animation-delay`プロパティを以下のように記述しました。
```css
.bgAnimation-area {
    /* 他の処理は省略 */
    animation-delay: 0, 1s, 2s;
}
```
しかし、これでは`animation-delay`は発火せずでした。
**`animation-delay`プロパティは1つのアニメーションに対して単一の値しか受け付けません。**

そのため、各背景画像でそれぞれ異なるanimation-delayの値を設定するには、各背景画像それぞれに個別でcssのアニメーションプロパティを指定する必要があります。
```html:html
<div class="bgAnimation-area1"></div>
<div class="bgAnimation-area2"></div>
<div class="bgAnimation-area3"></div>
```
```css:css
.bgAnimation-area1 {
  background-image: url('img1.jpg');
  background-position: 0 0;
  animation-delay: 0;
  /* その他のアニメーションプロパティ */
}

.bgAnimation-area2 {
  background-image: url('img2.jpg');
  background-position: 0 50px;
  animation-delay: 1s;
  /* その他のアニメーションプロパティ */
}

.bgAnimation-area3 {
  background-image: url('img3.jpg');
  background-position: 0 100px;
  animation-delay: 2s;
  /* その他のアニメーションプロパティ */
}
```
## まとめ
同じセレクタ内で、背景画像を複数設け、さらにそれらに別々の動きをさせる、なんてケースは稀なので、なかなかてこずってしまいました。

こういった場合は、背景画像じゃなくて<img>タグにした方がアニメーションで動かしやすいかなぁと思います。
Whatsapp のまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)

--------------
[Whatsapp](https://www.whatsapp.com/)

# 既知の問題

+ [Unable to initiate conversations using Send Message global action for Enhanced WhatsApp Channel after 24 -30 hr window.](https://issues.salesforce.com/issue/a028c00000zK9NCAA0/unable-to-initiate-conversations-using-send-message-global-action-for-enhanced-whatsapp-channel-after-24-30-hr-window)



# Whatsapp Carousel

+ [WhatsApp カルーセルを作成するには API を使用する必要があるのでしょうか、それとも実装に直接使用できる方法があるのでしょうか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007erIGX)

:::note
現在、カルーセル テンプレートは WhatsApp テンプレート API を使用してのみ作成できます。Exotel または Meta テンプレート ダッシュボードではサポートされていません。 

https://support.exotel.com/support/solutions/articles/3000124852-how-to-create-and-send-a-carousel-template-on-whatsapp
:::

# その他

+ [【モジュール】WhatsApp for Service Cloud](https://qiita.com/Keiji_otsubo/items/a300d396374eaeb7b6a0)
+ [Salesforce メッセージング](https://qiita.com/Keiji_otsubo/items/8a692dbc00d5713bb73e)
+ [インポートされたメッセージング ユーザーに WhatsApp 経由で送信メッセージを送信するときにエラーが発生しました](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000JdMVT)
+ [Service Cloud の Whatsapp メッセージング チャネル統合をテストしたいのですが、テスト用の電話番号を取得する方法はありますか? ](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ifljP)

:::note
サポートされているエディションは以下のとおりです。

+ Salesforce と WhatsApp の統合は、Digital Engagement アドオン SKU を備えた Lighting Experience で利用できます。
+ Salesforce と WhatsApp の統合は、Service Cloud または Sales Cloud を備えた Enterprise、Performance、Unlimited、Developer エディションで利用できます。
以下の例を確認してください。

https://www.salesforceben.com/salesforce-announces-new-whatsapp-integrations/

https://www.dhruvsoft.com/blog/salesforce-to-whatsapp-integration/
:::

+ [WhatsApp integration issue](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000Mav620AB)

:::note
Problem Solved. 

Solution in case someone else faces the same issue. 

You will need to add this URL:

https://whatsapp-provisioning.herokuapp.com to the Trusted URL in setup, select all for the CSP context, check all CSP Directives, make it active, and save.
:::
ブルースクリーンとは結局なんなのか？

Windows で急に表示される青いやつを見たことありますか？
それは、ブルースクリーンかもしれません。

一般的にブルースクリーンと呼ばれる事象の正式名称は、Blue Screen of Death (BSoD) になります。これが発生すると、Windows OS は、現在実行中の処理を全て停止し、メモリダンプ関連の設定がされていれば、メモリダンプ作成に必要な処理が完了後に自動再起動します。なお、自動再起動がデフォルト設定なだけで、再起動せずにブルースクリーンの画面で停止させることは可能です。

今回は、みんな聞いたことあるけど、よくわからないブルースクリーンとは、なんなのか書いていこうと思います。

たまに青い背景の画面をすべてブルースクリーンと認識している人がいますが、それは間違いなので注意が必要です。例えば、Windows 回復環境（Windows RE）をブルースクリーンという人いますが、これはブルースクリーンではなく、青い背景の画面です。
![winre.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/b83f09f5-a326-d73e-a0ae-949a6dbf7770.png)

https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-recovery-environment--windows-re--technical-reference

## ブルースクリーンの見た目
![nmi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/382a51f4-dc93-3a69-0d9b-b91cc0f3e1e2.png)

デバイスに問題が発生したという表示がされ、停止コードの表示されるのが、ブルースクリーンになります。

このスクリーンショットでは、停止コードが、NMI HARDWARE FAILURE となっていますが、停止コードには様々な種類があり、停止コードからどのような問題が発生しているか推察が可能です。どのような停止コードがあるのかは、Microsoft の Web サイトで公開されています。停止コードとバグ チェック コードは、同じ意味と考えて大丈夫です。

バグ チェック コード リファレンス - Windows drivers | Microsoft Learn
https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-code-reference2

ちなみにブルースクリーン画面に表示されている QR コードを読み取ると Microsoft の Web サイトへアクセスできますが、その Web サイトには、発生したブルースクリーンの原因についての有益な情報は見つかりません。

## ブルースクリーンっていつ起きるの？
Windows OS 上で、実行されているドライバーが、[KeBugCheckEx 関数](https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-kebugcheckex
) を実行するとブルースクリーンは発生します。

つまり、ブルースクリーンは、勝手に起きているのではなく、いずれかのドライバーにより意図的に起こされているということになります。

KeBugCheckEx 関数 を使用することにより、ドライバー開発者は、システムの停止以外に回復不可能な問題を検知したときにブルースクリーンを発生させ、OS 再起動によって問題を解決することが可能になります。

KeBugCheckEx 関数は、公開されている関数なので、Microsoft 以外が開発した Windows 用のドライバーも KeBugCheckEx 関数を使用してブルースクリーンを発生させられます。

## ブルースクリーンを起こす方法
KeBugCheckEx 関数を実行するドライバーを開発する、または、KeBugCheckEx 関数が実行されるような操作をすれば、ブルースクリーンは簡単に起こすことができます。

キーボード操作等により、ブルースクリーンを発生させる方法は、以下の Web サイトに書いていますので、一読してみてください。

ブルースクリーンの強制実行 | Microsoft Japan Windows Technology Support Blog
https://jpwinsup.github.io/blog/2021/02/15/Performance/Hang_BSOD/ForcingSystemCrash/

また、Microsoft が公式でブルースクリーンを発生させられるツールを公開しているので、このツールからもブルースクリーンを発生させることもできます。

NotMyFault - Sysinternals | Microsoft Learn
https://learn.microsoft.com/en-us/sysinternals/downloads/notmyfault

## ブルースクリーンが起きたら
ブルースクリーンの原因を調査したいのであれば、ブルースクリーン発生時に生成されるメモリダンプ（MEMORY.DMP）を解析する必要があります。

メモリダンプは、OS の初期設定だとブルースクリーンが発生した状況によって出力されない場合があります。メモリダンプを解析したい場合には、完全メモリダンプが出力されるように設定の変更を行っておくといいです。

完全メモリ ダンプの出力設定 | Microsoft Japan Windows Technology Support Blog
https://jpwinsup.github.io/blog/2021/02/15/Performance/Hang_BSOD/MemoryDump/

Microsoft は、WinDbg というメモリダンプを解析できるツールを公開しているので、そちらのツールを使用して、ブルースクリーンの原因調査が可能です。ただ、すべてのブルースクリーンの原因がメモリダンプを解析すれば、特定できるとは限りません。

WinDbg のインストール方法等を知りたい方は、過去に投稿したこちらを確認してみてください。

https://qiita.com/ausamayuni/items/968bb331a333c63481f3

## さいごに
ブルースクリーン = PC が壊れたというわけではないですが、なんらかの異常が発生したことは確かです。ただ、１回起きただけで、頻繁に発生しているわけではなければ、特に気にする必要はないかと私は考えています。
2024/9/3主にITとかセキュリティの記事

Snowflake環境で1億人分の情報が漏えい　「もらい事故で大損害」を防ぐための5つの対策(8/30)
https://kn.itmedia.co.jp/kn/articles/2408/30/news080.html

「Windows 10があればWindows 11は当面不要」な人のための“現行OS延命策”(9/1)
https://techtarget.itmedia.co.jp/tt/news/2409/01/news02.html

【レポート】ゲームプロダクトに寄り添いながら時代に適用し続けるガードレール型AWS/Google Cloudのクラウドセキュリティ(9/1)
https://dev.classmethod.jp/articles/aws-google-cloud-security-cedec2024-classmethod_game/

Windowsをアップデートして身を守ろう！ 6つのセキュリティ欠陥が悪用されている(9/1)
https://news.yahoo.co.jp/articles/11ef1e4648850bcd1904623306a82cdcf51b3950?source=rss

【Next.js】NextAuth.js、tRPC、Prismaを用いた認証システムの構築(8/31)
https://zenn.dev/kiwichan101kg/articles/2f39ff1fb57009

見えない脅威スキミングとは？被害状況と有効な防止策を解説
https://cybersecurity-park.com/2835/

米国 CISA サイバー報告の改善に向けた新しいポータルを開設 (2024.08.29)(9/2)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2024/09/index.html

SSL/TLSの限界を補うハイブリッド暗号化(9/1)
https://zenn.dev/localer/articles/7e441bdf585280

PDF ファイルに直筆サインを追加する方法を調べてみた(8/31)
https://dev.classmethod.jp/articles/how-to-add-handwritten-signature-to-pdf-file/

米国 CISA FBI MS-ISAC HHS RansomHubランサムウェアに対する警告 (2024.08.29)(9/1)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2024/09/post-1dc8ca.html

「ろうきん」装った偽サイトに注意　不審メール削除呼びかけ　沖縄(9/1)
https://nordot.app/1202861223027065751

サイバー攻撃「代行」の衝撃　日曜に書く　論説委員・井口文彦(9/1)
https://www.iza.ne.jp/article/20240901-DF4LHZ2O7BMXDCD7GVCY7TX5R4/

トランプ対ハリスでも深まる懸念、ネットにあふれるフェイク・コンテンツから選挙を守るには……？(9/1)
https://news.yahoo.co.jp/articles/6bd925d0e61f85687fdfb679fca900bdd3ad7faf?source=rss

AIルールづくりの号砲　企業はリスクに備えを(9/2)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600014/082800185/

OSPFによる経路制御を理解する(9/2)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/121800181/081900009/

マイナカードのICチップによる本人確認、「マッチングアプリ」に見る導入の課題(9/2)
https://xtech.nikkei.com/atcl/nxt/column/18/00086/00325/

富士通は資格数最多でNRIは生成AIコンピテンシー日本初、大手SIerのAWS3つの戦略(9/2)
https://xtech.nikkei.com/atcl/nxt/column/18/02923/082200003/

東京海上日動システムズの技術者らが実践、セキュリティーやAWSの図を描くコツ(9/2)
https://xtech.nikkei.com/atcl/nxt/column/18/02922/081900006/

OneDriveを使わないなら、OS標準の「ファイル履歴」機能で自動バックアップ(9/2)
https://xtech.nikkei.com/atcl/nxt/column/18/02891/071600009/

個人情報保護法改正（Amending Act on the Protection of Personal Information）(9/2)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600009/082800176/

DXにはプロセスオフィスが必要　日本企業も欧米流を取り入れよ(9/2)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600007/082600173/

ランサムウエア 身代金を要求するマルウエア(9/2)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/091900172/081900012/