OmniAICreator/Qiita-1.07M huggingface dataset:
AWS Certified Developer - Associate (DVA-C02) 合格体験記

# 2024年8月9日にAWS Certified Developer - Associate (DVA-C02) 合格しました！

### 勉強期間

2024年7月20日〜8月9日

### AWSの経験
•AWS専門のクラウドスクールにて勉強中
•実務経験なし

試験は、実際の開発を想定した問題で開発に必要な組み合わせを覚えることが重要だと感じました。
実務経験なしとは書いておりますがフロントエンドのデプロイの際にALB、EC2を構築した経験はあったため流れを掴みやすかったと感じています

#### 試験対策に使ったリソース：
•	AWS公式トレーニング
•	クラウドテック
•	クラウドライセンス

前回と同様クラウドテックを１巡しその後AWS公式トレーニング動画を見て理解度を深め、クラウドライセンスで全問解いた後、ひたすらテストを繰り返しました。

SAAに比べると比較的文章しっかり読むことで解ける内容が多いと感じました。

次も頑張ります！
AWS Certified Solutions Architect - Associate (SAA)試験合格体験記

# 2024年7月6日にAWS Certified Solutions Architect - Associate (SAA) 合格しました！
勉強期間
2024年6月15日〜7月6日

AWSの経験
•AWS専門のクラウドスクールにて勉強中
•実務経験なし

試験は、AWSのサービスに関する幅広い知識が問われるものでした。なので覚えることも多く繰り返し演習問題をときました。

試験対策に使ったリソース：
•	AWS公式トレーニング
•	クラウドテック
•	クラウドライセンス

クラウドテックを１巡しその後AWS公式トレーニング動画を見て理解度を深め、クラウドライセンスで全問解いた後、ひたすらテストを繰り返しました。

短期間の受験だったのでまだ完全に理解できていないところも多々あります。

これからもさらに深く学び、次の認定試験に向けて頑張ります！
Python仮想環境の基本コマンドガイド(macOSとLinux向け)

# はじめに

Python開発において、プロジェクトごとに独立した環境を作成することは非常に重要です。
macOSとLinuxユーザーのために、Python仮想環境を管理するための基本的なコマンドをまとめました。（毎回調べ直す手間を省くためにまとめました。）


# まとめ

macOSとLinux用のPython仮想環境の基本的なコマンドは以下の通りです：

1.仮想環境の作成:

```sh
$ python -m venv venv
```

2.仮想環境の有効化:

```sh
$ source venv/bin/activate
```

3.仮想環境の無効化:

```sh
$ deactivate
```

4. 仮想環境の削除:

```sh
$ rm -rf venv
```

これらのコマンドを使用することで、macOSとLinux上でPythonの仮想環境を簡単に作成、有効化、無効化、そして削除することができます。
仮想環境を使用することで、プロジェクトごとに独立したPython環境を維持し、依存関係の衝突を防ぐことができます。

# 参考
* Python公式ドキュメント - venv
    * https://docs.python.org/3/library/venv.html
* Real Python - Python Virtual Environments: A Primer
    * https://realpython.com/python-virtual-environments-a-primer/
* The Hitchhiker's Guide to Python - Virtualenvs
    * https://docs.python-guide.org/dev/virtualenvs/

---
### 会社紹介

**株式会社 Mosaica**  
最先端テクノロジーで社会課題を解決し、持続可能な未来を創造する IT カンパニー。
AI ソリューション、クラウド統合、DX 推進、経営コンサルティングなど包括的なサービスでビジネス変革を支援しています。  

詳しくは [公式サイト](https://mosaica.co.jp/) までお気軽にご相談ください。
公式サイト： https://mosaica.co.jp/
Pandasのいろいろな機能を深堀りする

#### はじめに
pandasは、Pythonでのデータ解析において不可欠なライブラリであり、特に大規模データの処理や操作においてその強力さを発揮します。pandasは継続的に更新されており、最新バージョンではより効率的で直感的なデータ操作を可能にする新機能が追加されています。本記事では、これらの新機能について詳しく解説し、どのように活用できるかを具体的な例とともに紹介します。

#### 1. `DataFrame.attrs`でのメタデータ管理

`DataFrame.attrs`は、pandas DataFrameにメタデータを格納するための新しい機能です。これまで、DataFrameにはデータそのものしか保持できませんでしたが、`attrs`を利用することで、データセットの説明や作成者情報など、カスタムのメタデータを簡単に追加できるようになりました。例えば、データフレームの由来や処理過程の情報を含めることで、データの追跡や再利用が容易になります。

```python
import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3]})
df.attrs['description'] = 'This is a sample DataFrame'
df.attrs['author'] = 'takurot'

print(df.attrs)
```

このコードでは、データフレームに対して説明と作成者のメタデータを追加しています。`attrs`に保存された情報は、データフレームと一緒に保存されるため、データを再利用する際に役立ちます。また、将来的にこのメタデータを利用してデータのバージョニングや履歴管理を行うことも考えられます。

#### 2. `convert_dtypes`メソッドでのデータ型の自動変換

`convert_dtypes`は、データフレーム内のデータ型を最適化されたものに自動変換する新しいメソッドです。この機能は、特に混合型のデータを扱う際に便利です。例えば、整数と欠損値が混在する列は、従来`float64`型にキャストされていましたが、`convert_dtypes`を使うことで、より適切なデータ型に変換できます。

```python
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4.5, 5.5, 6.5],
    'C': ['a', 'b', 'c']
})

df = df.convert_dtypes()
print(df.dtypes)
```

このコードでは、`convert_dtypes`メソッドを使用してデータ型を最適化しています。結果として、文字列は`string`型に、整数は`Int64`型に変換され、欠損値処理も統一された形で行われます。このメソッドは特に大規模なデータセットにおいて、メモリ効率の向上と計算速度の改善に寄与します。

#### 3. `StringDtype`と`Int64Dtype`での柔軟なデータ型処理

pandasの最新バージョンでは、`object`型に代わる新しいデータ型として`StringDtype`と`Int64Dtype`が導入されました。従来、文字列データは`object`型で扱われていましたが、これは実際には文字列以外のデータも含む可能性があるため、処理が複雑でした。`StringDtype`を使用することで、文字列データのみを明確に扱えるようになり、データ処理の一貫性が向上します。

また、`Int64Dtype`は、整数型のデータを扱う際に便利です。従来、欠損値が含まれる場合、`float64`型にキャストされていましたが、`Int64Dtype`を使うことで、欠損値を含む整数データを効率的に処理できます。

```python
df = pd.DataFrame({
    'A': pd.Series([1, 2, None], dtype="Int64"),
    'B': pd.Series(['a', 'b', None], dtype="string")
})

print(df.dtypes)
```

このコードでは、`Int64Dtype`と`StringDtype`を使用して、欠損値を含むデータを一貫性のある型で処理しています。これにより、欠損値処理がより直感的になり、データフレームの一貫性を保つことが容易になります。

#### 4. `styler`でのデータフレームの視覚的強調

pandasの`Styler`オブジェクトは、データフレームを視覚的に強調表示するための強力なツールです。データフレームの値に応じて、特定のセルに色を付けたり、カスタムスタイルを適用したりすることで、データの可視化を向上させることができます。特に、データを視覚的に強調することで、重要な傾向や異常値を簡単に見つけることが可能になります。

```python
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

styled_df = df.style.highlight_max(axis=0)
styled_df.to_html('styled.html')
```

このコードでは、各列の最大値をハイライトしています。`Styler`オブジェクトは、HTMLやExcel出力に対応しているため、レポートやプレゼンテーション資料にそのまま使用できます。また、カスタムフォーマットや条件付きスタイルも柔軟に設定できるため、視覚的な訴求力を持たせたデータ出力が可能です。

#### 5. `pd.NA`での欠損値の統一管理

pandasの新しい欠損値表現`pd.NA`は、異なるデータ型間での欠損値処理を統一的に行えるようにするために導入されました。従来、欠損値は`None`や`NaN`として扱われ、データ型によって異なる処理が必要でしたが、`pd.NA`を使用することで、欠損値処理が一貫性を持って行えるようになりました。

```python
df = pd.DataFrame({
    'A': [1, 2, pd.NA],
    'B': ['a', 'b', pd.NA],
    'C': [True, False, pd.NA]
})

print(df)
```

このコードでは、異なるデータ型の列に対して、同じ`pd.NA`が欠損値として扱われています。これにより、データの前処理や解析において、欠損値に対する処理が簡素化され、コードの一貫性が保たれます。`pd.NA`の導入により、データクリーニングプロセスが簡略化され、解析の精度が向上します。

#### まとめ
pandasの新機能は、データ解析をより効率的で柔軟にするために設計されています。`DataFrame.attrs`を使用したメタデータ管理、`convert_dtypes`による自動データ型変換、`StringDtype`と`Int64Dtype`の新しいデータ型、`styler`による視覚的強調、そして`pd.NA`による欠損値の統一管理といった機能を活用することで、データ処理の効率と精度を大幅に向上させることができます。これらの新機能を日々のデータ解析に取り入れて、さらに高度なデータ解析を実現してください。
バッチのバックアップのコマンドをxcopyからrobocopyに変えたら処理時間が半減した

# 作業環境
* windows11 23H2
* Synology DS118
* アイオーデータ製NAS HDL2-AAX2

# xcopyを使った場合
バックアップ容量：**360GB**
バックアップ処理時間：**8時間**
コマンド：
``XCOPY /C /S /I データ元 バックアップ先 >> log.log``

# robocopyを使った場合
バックアップ容量：**360GB**
バックアップ処理時間：**5時間40分**
コマンド：
``robocopy データ元 バックアップ先 /MIR /R:10 /W:30 /LOG+:log.log /NP /NDL /TEE /XJD /XJF /XD "c:\hoge"``

# 所感
半減は言い過ぎましたね。。。
ですが熱い時期にPCの負荷が減るのはいいことかも。
ご参考まで。
magit v4のel-getでエラー

# magit v4のel-getでエラー

https://magit.vc/

magitのel-getは以下のように設定している.

```emacs-lisp:~/.emacs.d/init.el
(el-get-bundle magit)
```

しかしmagitのv4系から, 以下のようなエラーが出るようになった.

```console
Generating magit.html
Generating magit-section.html
Generating magit/*.html
Generating magit-section/*.html
Generating magit.pdf
You don't have a working TeX binary (tex) installed anywhere in
your PATH, and texi2dvi cannot proceed without one.  If you want to use
this script, you'll need to install TeX (if you don't have it) or change
your PATH or TEX environment variable (if you do).  See the --help
output for more details.

For information about obtaining TeX, please see http://tug.org/texlive,
or do a web search for TeX and your operating system or distro.
make[1]: *** [magit.pdf] Error 1
make: *** [docs] Error 2
```

PDFの生成時にTeXがなくてエラーとなったようである.

# 対処方法

そもそもPDFの生成が不要.

そのため`make`の[デフォルトターゲット](https://github.com/magit/magit/blob/v4.0.0/Makefile#L13
)から[`docs`](https://github.com/magit/magit/blob/v4.0.0/docs/Makefile#L8)を除外して, ターゲットは[`lisp`](https://github.com/magit/magit/blob/v4.0.0/Makefile#L76)や[`texi`](https://github.com/magit/magit/blob/v4.0.0/docs/Makefile#L10), [`info`](https://github.com/magit/magit/blob/v4.0.0/docs/Makefile#L11)あたりまでを指定するように`:build`オプションで上書きする.

```emacs-lisp:~/.emacs.d/init.el
(el-get-bundle magit
  :build '(("make" "clean" "lisp" "texi" "info"))
  )
```
Operationalize AWS WAF Web ACL logs with Amazon Security Lake のまとめ

**はじめに**
こんにちは！企業のセキュリティ対策において、Webアプリケーションの保護は重要な課題です。AWS WAFは、Webアプリケーションを攻撃から守るための強力なツールですが、そのログを効率的に管理・分析することが重要になります。
![(2) Operationalize AWS WAF Web ACL logs with Amazon Security Lake _ Amazon Web Services (1).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102361/7d285e88-5f9d-1392-396b-4c1cd0666eee.jpeg)

**Amazon Security Lake：AWS WAFログ管理の進化**
従来、AWS WAFのログを管理するには、AWS Firewall Managerを使ってAmazon S3に集約し、Amazon Athenaで分析する必要がありました。
しかし、Amazon Security Lakeが登場したことで、このプロセスが大幅に簡素化されました。
![(2) Operationalize AWS WAF Web ACL logs with Amazon Security Lake _ Amazon Web Services (5).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102361/c19f178c-e253-b6d0-5ecd-8e3da72b15c6.jpeg)

**Amazon Security Lakeのメリット**
* **ログの一元管理：**  AWS WAFログを含む様々なセキュリティログを、Amazon Security Lakeに一元的に集約可能
* **自動化されたログ変換：**  ログはOpen Cybersecurity Schema Framework（OSCF）という標準化された形式に変換され、分析を容易にできる
* **効率的なデータ保存：**  Apache Parquet形式でデータを保存することで、ストレージコストを削減
* **分析ツールの連携：**  Amazon AthenaやAmazon QuickSightなどの分析ツールと連携し、ログ分析を強化
![(2) Operationalize AWS WAF Web ACL logs with Amazon Security Lake _ Amazon Web Services (2).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102361/01596570-c7db-9ac4-3697-def053f4ae9e.jpeg)
![(2) Operationalize AWS WAF Web ACL logs with Amazon Security Lake _ Amazon Web Services (8).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102361/e212d704-1e4c-c731-c03f-39bdf36c45c3.jpeg)

**Amazon Security Lakeを活用したセキュリティ強化**
Amazon Security Lakeを活用することで、セキュリティ担当者は、ログ分析に費やす時間を大幅に削減し、より効果的なセキュリティ対策に集中できます。
経営層にとっても、セキュリティログを一元管理することで、自社のセキュリティ状況をより深く理解し、適切なセキュリティ投資を行うための判断材料となります。

**まとめ**
Amazon Security Lakeは、AWS WAFログの管理を簡素化し、セキュリティ分析を強化するための有効な手段です。
そして、Amazon Security Lakeは15日間の無料試用オプションが利用可能
![(2) Operationalize AWS WAF Web ACL logs with Amazon Security Lake _ Amazon Web Services (14).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102361/98801ffd-44bf-00f3-823b-04c22bd34c3a.jpeg)

## 関連資料
[Operationalize AWS WAF Web ACL logs with Amazon Security Lake | Amazon Web Services](https://youtu.be/qPYOsMsHDEM?si=9Cm7bAF8cW0rHrOU)
[Amazon Security Lake](https://aws.amazon.com/jp/security-lake/)
StableDiffusion系のnsfwチェカーをましにするには？

はじめに、StableDiffusionにはNSFWチェックというものがある。
これは、不健全な画像をユーザーに見せたいためのものだが、すこし過剰に反応すぎる。
オフにするのは簡単だが、一般サービスとして使う場合そうはいかない。

## 画像判定モデル
Falconsai/nsfw_image_detection

商用可能なApache2.0ライセンス
https://huggingface.co/Falconsai/nsfw_image_detection
画像がNSFWか、判定してくれます。

沢山あるデモの一つ（停止している場合、https://huggingface.co/spaces からnsfwで検索)
https://huggingface.co/spaces/5m4ck3r/nsfw_image_detection

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54688/8bce0fda-ac9a-3cff-b737-72a44a905264.png)

## これを組み込んだコード

stablediffusion側では、nsfwを向うにして、ユーザーに返す直前に以下を呼び出せば
```
return classificate_safe_check(image)
```
すれば、完全にアウトな時だけ、黒塗りを返す。実用性の高いサービスになります。

以下コード
```
from PIL import Image
from transformers import pipeline
import torch

device = 0 if torch.cuda.is_available() else -1
#device = -1
def is_nsfw(img):
    classifier = pipeline("image-classification", model="Falconsai/nsfw_image_detection",device=device)
    result = classifier(img)
    #print(result[0])
    return result[0]["label"] == "nsfw"
def classificate_safe_check(img):
    nsfw = is_nsfw(img)
    if nsfw:
        black_image = Image.new("RGB", img.size, "black")
        return black_image
    else:
        return img

img = Image.open("test.png")
out = classificate_safe_check(img)
out.save("out.jpg")
```

## その他
MichalMlodawski/nsfw-image-detection-large
より精度はいいが、ライセンスが、CC-BY-NC-SA-4.0 で商用不可
https://huggingface.co/MichalMlodawski/nsfw-image-detection-large
nextjs14のserver actions実行後にページが再描画される問題

# 問題

nextjs14のserver actionsを実行後、ページが再描画(/リロード)されてしまう。（クライアントコンポーネントから利用）

# 原因

server actionsの応答ヘッダーのX-Action-Revalidatedの値が、再描画を指示する指令になっているため。

# 詳細

server actionでは、アクション完了後の動作をクライアント側に指示するために、応答ヘッダーに`X-Action-Revalidated`という項目を付与して利用しているようです。

```js:server actionからの応答ヘッダーの中身

// 再描画が発生しないケース
X-Action-Revalidated: [[], 0, 0]

// 再描画が発生するケース(server actionsで明示的に指示した場合)
X-Action-Revalidated: [["/path"], 0, 0]

// 再描画が発生するケース(revalidateTagが変化した場合)
X-Action-Revalidated: [[], 1, 0]

// 再描画が発生するケース(cookieが変化した場合)
X-Action-Revalidated: [[], 0, 1]

```

自分の利用している環境下では、<b>server actionsの中で認証情報を更新して利用しているために、cookieの中身が自動的に切り替わってしまい、勝手な再レンダリングが発生してしまった</b>ようです。

こちらにも書いてありました。

https://nextjs.org/docs/app/building-your-application/caching#invalidation-1

# 解決策

現状まだ良い回避策は見つけられていません。
無理やり上げるとすると、

- リロード前提のページ構成にする。
- キャッシュを利用してリロードが走っても、画面が変化しないようにする。

などがあるでしょうか。
paiza Sランク問題「文字列収集」を Elixir で解いてみた

## はじめに

paiza S ランク問題を Elixir で解いてみます

## 文字列収集

指定された文字列で始まる文字列を買い占めます

https://paiza.jp/works/mondai/real_event/word_collection

```elixir
defmodule Paiza do
  def main do
    [n | _m] =
      :stdio
      |> IO.read(:line)
      |> String.trim()
      |> String.split(" ")
      |> Enum.map(&String.to_integer(&1))

    {sp, q} =
      :stdio
      |> IO.read(:all)
      |> String.trim()
      |> String.split("\n")
      |> Enum.split(n)

    sp =
      sp
      |> Enum.map(fn line ->
        line
        |> String.split(" ")
        |> then(fn [s, p] ->
          {s, String.to_integer(p)}
        end)
      end)

    q
    |> Enum.map(fn q_i ->
      sp
      |> Enum.filter(fn {s, _p} ->
        String.starts_with?(s, q_i)
      end)
      |> Enum.map(fn {_s, p} ->
        p
      end)
      |> Enum.sum()
      |> IO.puts()
    end)
  end
end

Paiza.main()
```

## 解説

特に解説するほどの内容はないです

もっと入力行数が大きければ工夫が必要になってくると思いますが

## まとめ

S ランク相当とは思えない問題でした
RUST_BACKTRACE=1 の 1 ってなあに？

# 結論

**1には意味はなく0以外ならバックトレースをキャプチャする**

# 雑記

Rust の the book（日本語版）を読んでいて、エラー処理の部分に

> その次の注釈行は、RUST_BACKTRACE環境変数をセットして、まさしく何が起き、 エラーが発生したのかのバックトレースを得られることを教えてくれています。

> RUST_BACKTRACE環境変数を0以外の値にセットして、 バックトレースを出力してみましょう。リスト9-2のような出力が得られるでしょう。

との記載があり、この環境変数はなんなんだろう、他に値を取りうるのだろうか、と気になりました。

おそらく[ここ](https://doc.rust-lang.org/std/backtrace/index.html#environment-variables)が正式なドキュメントになるかと思うのですが

`Backtrace::capture` というモジュール(?)はデフォルトはデフォルトで `disabled` になっていて、
環境変数 `RUST_LIB_BACKTRACE` か `RUST_LIB_BACKTRACE` に `0` 以外の値が設定されている際に `enabled` になる様子。
ただ、なぜ2つの環境変数があるかは不明。

また、`Backtrace::force_capture` を使うと上記の設定を無視してキャプチャができるとのこと。
負荷監視ツール k6 の環境構築

## 解決策
```bash
sudo apt-get update
sudo apt-get install -y gnupg software-properties-common ca-certificates curl apt-transport-https
curl -fsSL https://dl.k6.io/key.gpg | sudo apt-key add -
echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6
```

全てのコマンドを実行後、以下のコマンドを実行
```bash
k6 version
```
バージョン情報が表示されれば正常にセットアップされたことが分かります。
ジグソーパズルピースのCSS表現方法

ジグソーパズルのピースをCSSで表現する方法について解説します。

クリッピングパスやカスタムシェイプを使うのがポイントです。clip-pathを使うと、複雑な形状を簡単に切り抜くことができます。しかし、ジグソーパズルのピースは半円形の凸凹が特徴的なので、polygon()を使うのは難しいです。

代わりに、こちらの[回答](https://stackoverflow.com/a/77183262)で紹介されているように、SVGのpathを使う方法がおすすめです。pathのコマンドは直感的に理解しにくいことがありますが、[svg-path-editor](https://yqnn.github.io/svg-path-editor/)のようなSVGエディタを使えば簡単に編集できます。

以下のコード例では、SVGを使ってジグソーパズルの描画できます。

![piece.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84185/7dc78ce9-0583-2979-771c-bf461d63d62c.jpeg)

```html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>ジグソーパズルのピース</title>
  <style>
    .svg {
      position: absolute;
      width: 0;
      height: 0;
    }
    .clipped {
      width: 100px;
      height: 100px;
      background: red;
      clip-path: url(#my-clip-path);
      margin-right: -48px;
      margin-top: -8px;
    }
  </style>
</head>
<body>

  <div class="clipped"></div>

  <svg class="svg">
    <defs>
      <clipPath id="my-clip-path" clipPathUnits="objectBoundingBox">
        <path d="M0.759 0.525V0.343c0-0.027-0.021-0.048-0.045-0.048h-0.196c-0.009 0-0.017-0.005-0.021-0.013c-0.004-0.008-0.005-0.018 0-0.026c0.011-0.021 0.017-0.045 0.017-0.07c0-0.08-0.06-0.145-0.134-0.145c-0.074 0-0.134 0.065-0.134 0.145c0 0.025 0.006 0.049 0.017 0.07c0.004 0.008 0.004 0.018 0 0.026c-0.004 0.008-0.012 0.013-0.021 0.013H0.045c-0.025 0-0.045 0.021-0.045 0.048v0.169c0 0.009 0.005 0.018 0.012 0.023c0.007 0.005 0.017 0.005 0.024 0.001c0.019-0.011 0.041-0.017 0.064-0.017c0.074 0 0.134 0.065 0.134 0.145c0 0.08-0.06 0.145-0.134 0.145c-0.023 0-0.045-0.006-0.064-0.017c-0.008-0.004-0.017-0.004-0.024 0.001C0.005 0.796 0 0.805 0 0.814v0.179c0 0.027 0.02 0.048 0.045 0.048h0.669c0.025 0 0.045-0.022 0.045-0.048v-0.183z"/>
      </clipPath>
    </defs>
  </svg>

</body>
</html>
```

CSSとSVGを組み合わせてジグソーパズルのピースを表現しています。具体的には、clip-pathを使用して、赤い四角形を特定の形状に切り抜いています。

まず、`<style>`内で、.svgクラスは非表示のSVG要素のスタイルを設定しています。一方、.clippedクラスは、100x100ピクセルの赤い背景を持つ要素を定義し、その要素をclip-pathプロパティで指定された形状にクリップします。

clip-path: url(#my-clip-path);によって、SVG内に定義された`<clipPath>`が参照されます。この`<clipPath>`は、id="my-clip-path"で識別され、その中に含まれる<path>要素によってジグソーパズルピースの形状が定義されています。

`<path>`要素のd属性は、パスのコマンドを記述しており、パズルピースの特定の形状を描きます。MやVなどのコマンドで、パスの移動や線、曲線を描画し、その形状がクリップの輪郭として使用されます。

最終的に、HTMLの`<div>`要素に.clippedクラスが適用され、指定されたパス形状に従って赤いジグソーパズルピースの形状が表示されます。

# まとめ

このように、CSSとSVGを組み合わせることで、ウェブ上で複雑な形状を表現することが可能です。特に、ジグソーパズルのピースのように、標準的なCSSのボックスモデルでは表現しにくい形状も、clip-pathやpathコマンドを使えば、簡単に実装できます。

また、この手法は例えば、Flutterでの実装にも応用できます。Flutterでは、CustomPaintやClipPathを使って同様の形状を描画することが可能ですが、Pathクラスを利用すれば、細かいコントロールが可能で、ジグソーパズルのピースのような複雑な形状も描画できます。svgというリソースを転用できるので、モバイルアプリでもデザインの一貫性を保つことができます。
Axiosでオレオレ証明書エラー回避

### 承前
悲しい時ー！悲しい時ー！今の現場で使ってるローカル開発環境でオレオレ証明使ってて
```
Got error: UNABLE_TO_VERIFY_LEAF_SIGNATURE
```
とか出て死ぬ時ー！

### そもそも何がやりたいの
ローカル開発環境を作りたい（今まで無かったらしい。マジですか？）。DockerでNode使って建てているサーバから別のDockerコンテナのAPIサーバにリクエスト送って認証通す機能があったのですが、そのAPIサーバがオレオレ証明で上記のエラーが出てました。

### 環境
node: 10.23.0-alpine　古いです。変えたいです。
API側: nginx + PHP

Nodeのコードはこんな感じです。
```JavaScript
// この"baseUrl"が"https://"付いてる
axios.post(baseUrl + "/api/something/authentication", {
    token: token,
    httpsAgent: new https.Agent({ rejectUnauthorized: false, keepAlive: true }),
}).then((response) => {
    // このloggerはconstで事前に宣言してあると思って下さい
    logger.error(response.data);
    if (response.data.result === "OK") {
        logger.info('authentication. END');
        // 認証OKなら接続を許可
        next();
    } else {
        logger.error('authorization END');
        // 認証NGなら接続を拒否
        next(new Error("not authorized."));
    }
}).catch((error) => {
    logger.error("authorization Error.");
    logger.error(error);
    // 認証リクエスト異常
    next(new Error("not authorized."));
});
```
うーん、通りそうに見えるけど・・・https.AgentのrejectUnauthorizedもfalseにしてるし・・・バージョンいくつだっけ？10.23.0か・・・そうか・・・・・・・・・10.23.0！！？！！？！？！！？？？？！？ふっる！！！！今2024年ですが！？

### node 10だとhttpsAgentのrejectUnauthorizedが機能しない？
ソース読んだんですけどよく分かりませんでした。optionsにそれらしき値はあったんですけどね。つよい人教えて。

https://github.com/nodejs/node/blob/v10.23.0/lib/https.js

```JavaScript
//この辺
Agent.prototype.getName = function getName(options) {
  var name = HttpAgent.prototype.getName.call(this, options);

  name += ':';
  if (options.ca)
    name += options.ca;

  // ------ 中略 ------

  name += ':';
  if (options.rejectUnauthorized !== undefined)
    name += options.rejectUnauthorized;

  // ------ 中略 ------

  name += ':';
  if (options.sessionIdContext)
    name += options.sessionIdContext;

  return name;
};

```
### どーすればいいのー！？
```JavaScript
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
```
で、通りました。めでたし。当然これだと証明書チェックを行わないので環境変数などの値を見て切り換える対応が必要。
最新のPythonのスマートなコードの書き方を知る

Pythonは、シンプルで直感的な構文と豊富なライブラリで知られていますが、バージョンが進むごとに新しい機能や改善が追加され、ますます便利になっています。本記事では、最新のPythonに追加された効率的なコード記述方法や賢い機能について調べてみました。

---

## 1. マッチステートメント（Match Statement）
Python 3.10で導入されたマッチステートメントは、従来の`if-elif-else`構文に代わるものとして登場しました。これは特に、複雑な条件分岐やデータ構造のパターンマッチングが必要な場合に役立ちます。

### パターンマッチングの基本構文

```python
def http_status(status):
    match status:
        case 200:
            return "OK"
        case 404:
            return "Not Found"
        case 500:
            return "Internal Server Error"
        case _:
            return "Unknown status"
```

このコードでは、`status`変数の値に応じて異なる文字列を返すようにしています。従来の`if-elif-else`構文よりもコードが読みやすく、メンテナンスがしやすくなります。また、特定のデータ構造（例えばタプルや辞書）に対しても、同様にパターンマッチングを行うことが可能です。

### タプルのパターンマッチングの例

```python
def process_coordinate(coord):
    match coord:
        case (0, 0):
            return "Origin"
        case (0, y):
            return f"Y-axis at {y}"
        case (x, 0):
            return f"X-axis at {x}"
        case (x, y):
            return f"Point at ({x}, {y})"
        case _:
            return "Somewhere else"
```

このように、マッチステートメントを用いることで、条件に応じた処理を簡潔に記述できます。

---

## 2. 型ヒントの改善
Pythonでは型ヒント（type hint）が強化され続けていますが、Python 3.9以降では、ジェネリック型の記述がより直感的に行えるようになりました。これにより、コードの可読性が向上し、型チェックツールとの連携も容易になります。

### 旧バージョンの型ヒントの記述

```python
from typing import List

def process_items(items: List[int]) -> None:
    pass
```

### 新バージョンの型ヒントの記述

```python
def process_items(items: list[int]) -> None:
    pass
```

この新しい書き方では、`list[int]`のように、直接リストや辞書などの型を指定できるため、コードがすっきりと見やすくなります。特に、大規模なプロジェクトやチーム開発では、この改善が役立ちます。

---

## 3. タイムゾーン対応の日時操作
Pythonのdatetimeモジュールでは、タイムゾーンを考慮した日時操作が可能です。Python 3.2以降では、timezoneオブジェクトを使って、タイムゾーン付きの日時を扱うことができます。これにより、グローバルなアプリケーション開発においても、タイムゾーンの管理が容易になります。

### タイムゾーン付き日時の生成と変換

```python
from datetime import datetime, timezone, timedelta

# UTCタイムゾーンの現在時刻を取得
dt = datetime.now(timezone.utc)

# 日本標準時（JST）へ変換
tokyo_tz = timezone(timedelta(hours=9))
dt_tokyo = dt.astimezone(tokyo_tz)

print(dt_tokyo)
```

このコードでは、`datetime`オブジェクトを使用してUTCの現在時刻を取得し、それを日本標準時（JST）に変換しています。グローバルなタイムゾーンに対応するシステムを開発する際に非常に便利です。

---

## 4. `except*`による複数例外の同時処理
Python 3.11で追加された`except*`構文は、複数の例外を一度に処理するための新しい方法です。特に、非同期プログラミングで有効であり、複数のタスクが同時に発生する例外を一括して処理できます。

### 非同期例外処理の例

```python
import asyncio

async def process_data():
    try:
        # いくつかの非同期操作を実行
        pass
    except* (ValueError, KeyError) as e:
        print(f"Handled exceptions: {e}")
```

この例では、`ValueError`と`KeyError`が同時に発生した場合、それらをまとめて処理しています。これにより、非同期タスクでの例外処理が簡潔かつ強力になります。

---

## 5. 性能向上
Python 3.11では、内部の最適化により、関数呼び出しや例外処理などの速度が向上しています。これにより、特に大規模なアプリケーションやパフォーマンスが重要なシステムで、より高速にコードを実行できるようになりました。

### 最適化の例

内部最適化の効果を実感するためには、コードを新しいバージョンのPythonで実行してみると良いでしょう。例えば、以下のような単純な関数呼び出しのパフォーマンスが改善されています。

```python
def simple_function(x, y):
    return x + y

result = simple_function(10, 20)
```

このような単純なコードでも、Python 3.11の最適化により、以前のバージョンよりも速く実行されます。

---

## まとめ
最新のPythonには、効率的なコード記述やパフォーマンス向上のための新機能が多く追加されています。マッチステートメントや`except*`構文など、従来よりも簡潔かつ直感的にコードを記述できるようになっていて、特に大規模なシステム開発やチーム開発での利用において、これらの機能が大きな役割を果たすかもしれません。Pythonの最新バージョンを活用して、より生産的な開発を行ってみてください。
解いてみた。「Bランク：長テーブルのうなぎ屋」

# 問題
[「Bランク：長テーブルのうなぎ屋」](https://paiza.jp/works/mondai/b_rank_skillcheck_sample/long-table)

# コード
Javaで解いてみました。

``` Java
import java.util.*;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int nN = sc.nextInt();
        int nM = sc.nextInt();
        
        // 初期化
        boolean[] bSeat = new boolean[nN+1];    // 座席が埋まっているか？
        int nCustomer = 0;                      // 座っているお客の人数
        
        // 来店
        for (int i = 0; i < nM; i++) {
            int nA = sc.nextInt();   // 来店人数
            int nB = sc.nextInt();   // 座席の開始位置
           
            // 座席nB から nA人分の座席が空いているかを調べる
            boolean bSuccess = true;
            int nSeat = nB; 
            for (int j = 0; j < nA; j++) {
                if (bSeat[nSeat]) { // すでに座席が埋まっていた場合
                   bSuccess = false;
                   break;
                }
               
                // 次の座席番号にする
                nSeat++;
                if (nSeat > nN) { nSeat = 1; }
            }

            // 座ることに成功した場合
            if (bSuccess) {
                nCustomer += nA;     // 座れた人数を追加

                // 座席nB から nA人分座席を埋める
                nSeat = nB;
                for (int j = 0; j < nA; j++) {
                    bSeat[nSeat] = true;    // 座席を埋める
                    
                    // 次の座席番号にする
                    nSeat++;
                    if (nSeat > nN) { nSeat = 1; }
                }
            }
        }
        
        // 結果出力
        System.out.println(nCustomer);
    }
}

```

# 解説
## 標準入力からの数値の読み取り
Scanner インスタンスを作り、nextInt()メソッドで数値を取得しています。

## 初期化処理
+ 座席が埋まっているかを表す boolean 配列を作成
+ 座っている人の人数を0に設定

## お客様の来店
標準入力から、来店人数 nA と、座席の最初の番号 nB を取得する。
### 座席が空いているか？
座席 nB から nA 人分の boolean 配列を調べ、全て false（空き）である場合、以下の処理を行う。
+ boolean 配列の調べた部分を true（着席済）に変える
+ 座っている人の人数を nA 人増やす
### 座席が1つでも埋まっていた場合
何もしません。（江戸っ子なので怒って帰りました（笑）。）
## 結果の出力
座っている人の人数を表示します。
(QA) Power10 ～ Power7サーバーの性能指標値 CPW, rPerf のリストはありますか？

首記ご質問を時々頂きまして

## IBM Power Performance Report に記載があります

**ダウンロード先：**　https://www.ibm.com/downloads/cas/K90RQOW8

・執筆時点で2024/5/7UPDATE版です
・今年発表した新型 Power S1012も記載があります。
・Power7以降の歴代モデルのCPW, rPerfが記載されています。

CPU世代が上がるごとに、結構（いや相当）性能が上がっていることに驚かされます。世代毎にコア当り30-40%増し（大雑把に）な感じでしょうか。。


## そういえば、CPW値が、S1012 > S1014 なんですが・・・？

「うちのS1014は失敗した？笑」　というご質問も時々あり…

リンク資料のこちらのデータですね。

上記資料P.21
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/6204e538-ae51-653a-e29d-4a017db2f5b2.png)


  　

上記の逆転はS1012測定時点の方が、より新しいソフトウェア（ファームウェア等）に更新されているため、とのことでした。H/W性能的にS1012 > S1014 ということではない、とのこと。

　
※全部のモデルを都度都度あたらしいファームその他に更新してデータ取りも現実的ではないでしょうから・・・
　

いずれにしましても、**S0104もS1012も（それ以外のモデルも）速くて安定したいい機械です♪

## 個別ハードウェアごとの詳細スペックはこちらのRedbookで

たとえば、Power E1080の詳細スペックを調べたい場合は、
**IBM Power E1080 Technical Overview and Introduction**
https://www.redbooks.ibm.com/abstracts/redp5649.html

POWER E870はこちら
**IBM Power Systems E870 and E880 Technical Overview and Introduction**
https://www.redbooks.ibm.com/redpapers/pdfs/redp5137.pdf

たとえばメモリバンド幅の情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/34e4e0c8-5af0-beff-8b96-47f6743a4436.png)

![uploading...0]()


他のモデルもいろいろ出ていますので上記参考に検索ください。。
初心者事務員が作成した自己紹介アプリ(Googleスプレッドシート＋Glide＋CANVA)

　<INS>この記事の内容</INS>

・はじめに
・なぜ自己紹介アプリを作成したのか
・自己紹介アプリを使用し問題解決
・仕組み
・施設側や家族側の評価
・おわりに
<DIV ALIGN=CENTER><HR COLOR=BLUE WIDTH=50%></DIV>
<INS>はじめに</INS>

初めまして、元介護施設施設長で現在はクリニックで事務長をしています。この制作物は介護施設で勤務していた際に、お年寄りから介護施設側の誰でも簡単に作れて使用できたらいいなと思い作成した自己紹介アプリです。

<DIV ALIGN=CENTER><HR COLOR=BLUE WIDTH=50%></DIV>
<INS>なぜ自己紹介アプリを作成したのか</INS>

私が介護施設に勤務していた際に感じた違和感がありその違和感を解消するためにアプリを作成しました。
違和感とは、介護施設に入居してくる際にケアマネや病院等から情報(アセスメントシートや看護サマリー、フェイスシート等)が沢山来ます。その情報をもとに施設側も受け入れ準備を行います。
※受け入れ準備とは、福祉用具を提案したり紐解きシートの作成疾患等に介護的目線でどうやってアプローチできるか等
 入居当日家族が利用者様を連れて来られた際に、「え？情報と全然違うんだけど」「ADLも全く違う」などがおきます。
 この現象がなぜ起きるのかと言うと、担当のケアマネさんや主治医、その方にとっての「お客さん」に見せる顔は家族に見せる顔と違うということです。
 施設側としては今までもらった情報は参考程度にし、改めて家族から本来の性格や好き嫌い何が好きで、何が嫌いなのか等情報収集を行わないといけません。
 その方本来の性格を知ろうと思えば最低でも1ヵ月はかかります。その1ヵ月で家族やその入居者様とのズレが生じます。そのズレをいかに小さく無くすことができるかが家族様や入居者様施設のニーズとサービスの早期の合致に繋がると考えています。
 <DIV ALIGN=CENTER><HR COLOR=BLUE WIDTH=50%></DIV>

 <INS>仕組み</INS>

  ![スクリーンショット 2024-08-03 111854.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859965/1921c1b9-d53d-49f2-5c20-436d3138fb35.png)
 Googleスプレッドシートに各施設で家族に対して質問事項を作成する。
 
 ![スクリーンショット 2024-07-31 125024.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859965/05a467c4-b1bc-b53c-d247-f197b6d5cd25.png)
フォームはGlideを使用し情報収集、集めた情報はGoogleスプレッドシートに反映される。
![スクリーンショット 2024-08-03 111714.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859965/8bd3b89d-15e6-0934-9882-0e6e1c95c2a7.png)
![スクリーンショット 2024-08-06 122650.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859965/a10c24d8-223c-4e86-a776-81d58794872a.png)

スプレッドシートの情報をCANVAに一括データ送信すれば自己紹介シート作成完了。CANVAで使用するフォーマットは各事業所で作成しても問題なし、そのフォーマットにデータを一括データ送信をすれば情報は勝手に記載されます。
 <DIV ALIGN=CENTER><HR COLOR=BLUE WIDTH=50%></DIV>

 <INS>施設側や家族側の評価</INS>

 住宅型有料老人ホームで施設側として使用して頂いた評価、家族様に使用して頂いた評価があるため記載いたします。
 施設側の意見として→情報のすり合わせが簡単にできたのでそこが良い、家族のニーズがわかっていればトラブルを避けられる。信頼関係が良くなる。ただデメリットとしてCANVAやGlideを知らない人に説明する際ある程度どちらも知識がないと説明が難しい。との意見があります。
 家族側→担当者会議とかで、知識が無いので質問すらわからないためアプリを使用し自分の言葉で施設側に要望が出せるので便利。施設見学の際に言い忘れた事があったりするので思い出したときに作成できるのが一番良い。ただキーパーソンが老老介護の場合スマホを持っていない事もあり得るのでその場合はどうするの？などいい面もあれば、悪い面も若干あるため意見を参考に改善していきたいと思っています。
  <DIV ALIGN=CENTER><HR COLOR=BLUE WIDTH=50%></DIV>
  <INS>終わりに</INS>

 今までは問題点や自分がやりたい事に対してのアプローチの仕方が少なかったが今回様々なツールを勉強させていただき色々な角度からの目線が持てるようになり世界が広がりました。問題点を自分のツールで解決する事ができるこの強みを生かし、今後も介護・医療の分野でDX化、ICTがもっと活用され私自身も協力できるように今後も物作りを行っていきたいと思っています。

最後まで記事を読んでいただきありがとうございました。
Elixir then

## はじめに
当記事ではBrightのElixir入門のクラス3のスキルの１つであるthenについて解説します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330568/8c68ba7e-f946-9a4d-c00e-cd3f543736e4.png)

## 本文
thenの書き方使い方について
thenはパイプを使うことで前の値を取得することができる

``1 |> then(fn x -> x * 2 end)``
> 2

thenを使わない場合
``1 |> (fn x -> x * 2 end).()``
> 2

## 補足
一見例を見るとthenをわざわざ使うメリットがわかりづらい
メリットについてGeminiで聞いてみたところ以下のメリットを挙げた
> パイプラインの流れを明確に: thenを使うことで、パイプラインの各ステップが関数呼び出しであることが視覚的に分かりやすくなります。
引数の省略: thenのブロック内では、前のパイプラインの結果が自動的に最初の引数として渡されるため、明示的に書く必要がありません。
とのこと
thenがあることによって可読性の向上が期待できる

## 最後に
私の記事ではBrightにおけるスキルに該当する記事を書いています
スキルの達成に詰まった時の補助として利用してください
Brightのスキルについては以下に載せています
Brightについて知りたい方はぜひ実際にアクセスして利用してみてください

https://app.bright-fun.org/share/B8FC21BAD637CA9037C8A9C8AF88F9098FBCDFFAA86BBA8D77FC29D9301D414C76DB03BA30EA7A5267FD69C6B9863048CB73070AE187B8B1CA40CDFB595C99A45B5BF54CFD70C80C63E8A8F2556F62E588182ED2D680AC2F4D61B7C93789B8BD/graphs
ELB(ALB)のアクセスログをTerraformで有効化する

ログ用のS3バケットを作成して、ALBのアクセスログを有効化しようとしたところ、S3の権限不十分でエラーが発生しました。

```plaintext
│ Error: modifying ELBv2 Load Balancer (arn:aws:elasticloadbalancing:ap-northeast-1:************:loadbalancer/app/alb-prod/fbbd3f2304ff9285) attributes: InvalidConfigurationRequest: Access Denied for bucket: logs-prod. Please check S3bucket permission
```
公式ドキュメントをみたら、普通にバケットポリシーの設定が漏れていました。

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/enable-access-logging.html

以下のTerraformコードでエラーを解消したので、参考になれば幸いです。

## S3
バケット名`logs-prod`とプレフィックス`alb/alb-prod`を使用します。`582318560864`は東京リージョンのELBのAWSアカウントIDです。`<account-id>`を自身のAWSアカウントIDに置き換えて使用してください。

```hcl
resource "aws_s3_bucket" "logs_prod" {
  bucket = "logs-prod"

  tags = {
    Environment = "prod"
  }
}

resource "aws_s3_bucket_policy" "logs_prod_policy" {
  bucket = aws_s3_bucket.logs_prod.id

  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::582318560864:root"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::logs-prod/alb/alb-prod/AWSLogs/<account-id>/*"
    }
  ]
}
POLICY
}

```
## ALB
`access_logs`ブロックを追加して、有効化可否(`enabled`)、バケット名(`bucket`)、プレフィックス(`prefix`)を設定します。

```hcl
resource "aws_lb" "alb_prod" {
  name                       = "alb-prod"
  internal                   = false
  load_balancer_type         = "application"
  security_groups            = [var.security_group_elb_sg_id]
  subnets                    = [var.subnet_public_1a_id, var.subnet_public_1c_id]
  enable_deletion_protection = true
  preserve_host_header       = true

  access_logs {
    enabled  = true
    bucket  = "logs-prod"
    prefix  = "alb/alb-prod"
  }

  tags = {
    Environment = "prod"
  }
}
```

この設定を適用することで、ALBからS3バケットへのログの書き込みが正しく行われるようになりました。
Salesforceの「取引先階層を表示」アイコンを非表示にする方法

本橋孝昭です

今回は意外と知らない？
Salesforceの「取引先階層を表示」アイコンを非表示にする方法
について解説します

「取引先階層を表示」アイコンとは取引先のページの

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/aafb30f9-e821-efaf-e0a0-0f64d59e6a13.png)


この右側にあるボタンです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/bb049599-7a22-af8c-52b5-39aec392fce4.png)



こちらの非表示の方法は
設定から「取引先設定」から「取引先ページに [階層の表示] リンクを表示」のチェックを外すことです


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/0b701511-f720-6736-0c4e-c02ba7a288aa.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/56409208-61e1-664d-87a9-0e538917259e.png)

そうすれば「取引先階層を表示」アイコンを非表示にすることが可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/0fa758d4-d4f3-1328-24dd-b9d40e8fc2e9.png)



なお「取引先階層を表示」ボタンを非表示にする方法は取引先のページレイアウトを編集し「Salesforce モバイルおよび Lightning Experience のアクション」にあるボタンをページレイアウトから外しましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/27c31ecd-b914-8296-bcf2-feb82fd9902b.png)
React学習記

チャットアプリを作りたいと思い、Reactを学習します。
以下にReact学習の記録を記載します。

Reactを学習したいと考えた同志たちの、学習計画立案の一助になれば幸いです。

## 使用した教材

①[ReactでLINEクローンの作り方 - React×Firebaseチュートリアル](https://youtu.be/Js9BsBsczE8?si=Nn4So8qLpfdLeyuv)
・コンポーネントとはなんぞやと思っていたが、なんとなく概念がわかりそうになる
・実際に動くものを作れるので楽しい
・JavaScriptをやったことがある方は、Reactを「なんかすごい」と思えるかも

②[Progetel（React）](https://prog-8.com/)
・とてもお手軽に基本を学べる
・JavaScriptの理解が浅くても、Reactの書き方をある程度理解できるようになる
・Reactをもっと勉強したくなる

③[mosya React](https://mosya.dev/react/)
・ProgateよりもふかくReactを学べる
・問題を解く際にヒントを見てもわからなければ、答えを見てどんどん進めた方が良い
　→（一部ではあるが）関数名が答えと完全一致していないと正解判定にならない問題があったため
　→文法は何度も書いていくうちに覚えていくようにした方が効率良い
　→文法以外の概念や背景事情は理解しながら進める方が良い
 　Ex.高階関数とは何か、{}や()の使い分けの根拠、コンポーネントとは何か
・TailWindCSSを学べる
　→classを指定しCSSを適用できるため、CSSを書かなくて良い
　→classを指定してCSSを適用できるため、どの要素にCSSが適用されているかがわかりやすい
　→gropu,peerで他要素との関連がわかりやすい
・CSS Moduleを学べる
　→classを指定してCSSを適用できるため、どの要素にCSSが適用されているかがわかりやすい
　→TailWindCSSと異なり、自分でCSSを記載できるため自由度が高いか？
外付けUSBドライブが突然readonlyになってしまうことと、古いハードウェアについて。


外付けUSBドライブが突然readonlyになって書き込みができなくなるのは、どうも、ハードウェアが古いせいみたいです。
ext4で発生しました。
僕の持っているUSBドライブはUSB3です。
解決方法として、ext4などをダウングレードして、ext2にしたら解決するかもと思い、
ジャーナリング機能のないext2にしてチェックして動作して1週間経ったので、原因不明ですが、
これで実験打ち切り。動作したとします。

仕組みの分からないブラックボックスの実験チェックは無限時間動作させなければ解決とは言えません。正しい情報を拾ってきて、システムの動作を理解したら解決しますが、それ以外は、時間を決めて実験→動作→打ち切り→動作したとする、しか方法はないです。
アフェリエイターへの道（４）Amazon編

https://amzn.to/4cp4ybl

AmazonのAPIを使う前に、いろんな注意事項がありハードルが高い
* とりあえず、自分で何か３つ買い物をしないといけない
* 忘れそうなので冒頭にリンクを張っている

# Amazonアソシエイト・プログラムに関して言及されている「3つ」とは

### アカウント作成から180日以内に必要な「3つの適格販売」のことです。

具体的には：

アソシエイトパートナーがアカウントを維持するために必要な条件です。
アカウント作成から180日以内に達成する必要があります。
3つの適格販売が発生すると、Amazonのチームがアカウントに紐づいているWebサイトやSNSを審査します。
この審査では、アソシエイト・プログラム参加要件への準拠を確認します。

この「3つの適格販売」は、新規アソシエイトパートナーにとって重要な最初のマイルストーンとなります。これを達成することで、アカウントの継続利用が可能になり、さらにAmazonによる正式な審査プロセスが開始されるという重要な意味を持っています。

> 3つの適格販売　とは　3個の販売実績ですか？

はい、その理解で正確です。「3つの適格販売」とは、実際に3個の販売実績を指します。
具体的には：

### アソシエイトリンクを通じて顧客がAmazonサイトに訪れ、商品を購入し、その購入が「適格」と認められる

という過程が```3回```発生することを意味します。
ここでいう「適格」とは、Amazonのアソシエイト・プログラム運営規約に基づいて定義されています。通常、以下のような条件を満たす販売が「適格」とされます：

* 返品されていない商品の販売
* アソシエイトリンクを通じて24時間以内に行われた購入
* Amazonが定める特定の除外品目でない商品の販売

つまり、単に3回の販売があればよいというわけではなく、Amazonの基準に合致した3回の販売実績が必要となります。この3つの適格販売を達成することが、新規アソシエイトパートナーにとっての最初の重要な目標となります。
【Suno AIでつくった楽曲】しろぶりゅーの歌 ver.11 (3拍子、口笛、スキャット、アコースティックギター)【動画 1分30秒】【YouTubeチャンネルからの転記です】

この記事は、わたしの[YouTubeチャンネル](https://bit.ly/Yamanaka-YouTube "Living without things. 持たない生き方 手放す生き方")にある公開動画を転記しております。
( どこかのタイミングで、プログラミング-Google Apps Script or iPaaS-Zapier をつかって自動転記させる予定です )

転記のための時間コストを少なくしたいので、文字装飾( Markdown記法 )を極力つかわずに書いております。

こちらが動画内容です👇

***

![01 YouTube再生中の画像 Suno AI _ しろぶりゅーの歌 ver.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386308/db61fd87-e0f9-b3d9-a7aa-2fd2114168bc.png)



* # 動画URL
    * https://youtu.be/p9OHcYUFmug

<br>

* # 動画タイトル
    * 【Suno AIでつくった楽曲】しろぶりゅーの歌 ver.11 (3拍子、口笛、スキャット、アコースティックギター)【動画 1分30秒】

<br>

* # 動画の説明欄(一部を抜粋)

📅撮影日 = 2024-08-06(火)

Suno AIとは、文章から音楽を生成することができるAI( Text-to-Music-AI )です。
わたしは、2024-04-02(火)に初めてSuno AIで有償プランを契約してから、時々楽曲をつくって遊んでいます。

🎦【Suno AI】文章から音楽を生成するAI( Text-to-Music-AI )で、3分間で2曲、6分間で4曲作りました【試聴可能】1)伴侶の曲 2)税理士の曲【動画 16分11秒】
https://youtu.be/QKfhk4HgQ_g

🎦“Suno AIでつくった楽曲”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghMLdiSVqwvSs_Z5y0H4VGOe

🎦“効果的にSuno AIを活用するヒント”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghPuaNOVZn-N53wVvsBkeHdI


今回は、Suno AIでつくった曲を WAV で出力してから、動画編集いたしました。

スロージョギングの途中に、早朝の中目黒で偶然出会った「しろぶりゅー」-ShiroBrew-のテーマソング( イメージソングは和製英語です )を、1人のファンとして自主的につくりました。
つまり「しろぶりゅー」のファンメイドテーマソングです。

ぜひ聴いてみてください。
そして、ぜひみなさんも、あなたが大好きなお店やブランドや企業のために楽曲をつくってみてください！

作曲日:
2024-07-20(土)

Suno AI 契約の種類:
Pro Plan

楽曲の正式名称:
しろぶりゅーの歌 #11

Suno AI Library URL:
https://bit.ly/ShiroBrew-11

Custom Mode: On

Audio Inputs: Not Used

With Vocals:


---


Lyrics(without Meta tags):

真っ白な心

そよ風感じる

コーヒーの香りと
真っ白な心


---


Lyrics & Meta tags:

[Break]

[Intro]

[Whistling]

[Verse]
真っ白な心

[Verse 2]
そよ風感じる

[Chorus]
コーヒーの香りと
真っ白な心

[Whistling]

[Chuckles]

[Outro]


---


Suno AIへの指示文章( プロンプト/Prompt ): Custom Modeの場合は”Style of Music”を指定します。


🇬🇧English

[Waltz][Lo-fi][Female voice][Ballad]


🇯🇵日本語訳

[ワルツ][ローファイ][女性ボイス][バラード]


---


Suno AI 公式URL
https://accounts.suno.ai


SHIROノMONO 公式URL - Instagram
https://www.instagram.com/shiro_nomono


---


✓ 🎥この動画と関連が強いわたしの動画 ↙
　・“Suno AIでつくった楽曲”シリーズ
　https://www.youtube.com/playlist?list=PLpQhBHT4oghMLdiSVqwvSs_Z5y0H4VGOe


　・“効果的にSuno AIを活用するヒント”シリーズ
　https://www.youtube.com/playlist?list=PLpQhBHT4oghPuaNOVZn-N53wVvsBkeHdI


　・“Suno AIで3拍子”シリーズ
　https://www.youtube.com/playlist?list=PLpQhBHT4oghNy-xIeeMZV6D2YAnax9Nzw


　・“しろぶりゅー ファンメイドソング”シリーズ
　https://www.youtube.com/playlist?list=PLpQhBHT4oghPk5-_YwWl499DNAOVKlcvZ


✓ 🎥Shortened URL for this video | この動画の短縮URL ↙
　https://bit.ly/3LTCW3n
新生児の一回分の哺乳量を計算するJavaScriptPGM

<h3>新生児の一回分の哺乳量を計算するJavaScriptPGM</h3

新生児の一回分の哺乳量を計算するPGMを作成しました
一日分の哺乳量の計算は体重×180で計算するようになっています

<hr>
サンプルサイト: <a href="https://nanjomiyako2.github.io/CalcMilk/" >https://nanjomiyako2.github.io/CalcMilk/</a>

githubURL:https://github.com/NanjoMiyako2/CalcMilk
paizaラーニングレベルアップ問題集の「N倍の文字列」を色々な言語でやってみた

paiza×Qiita記事投稿キャンペーンということで、paizaラーニングレベルアップ問題集の[N倍の文字列](https://paiza.jp/works/mondai/d_rank_skillcheck_archive/square)を色々な言語でやってみました。対象は[コードモンスター大図鑑](https://paiza.jp/code_monster)で対応している9言語です。

2024/08/24追記
Perl, Scala, Go, Swiftの4言語を追加いたしました。

2024/08/25更新
Javascriptのコードを修正いたしました。
コメントいただき有難うございます。
- - -
###### 方針
- 整数$N$を受け取る
- $N$個の`*`を繋げた文字列を生成する
- 文字列を出力する
- - -
###### PHP
```php
<?php
	$n = fgets(STDIN);
	$s = str_repeat("*", $n);
	echo $s."\n";
?>
```
- - -
###### Ruby
```rb
n = gets.to_i
s = "*" * n
puts s
```
- - -
###### Java	
```java
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.close();
		String s = "*".repeat(n);		
		System.out.println(s);
	}
}
```
- - -
###### Python
```py
n = int(input())
s = "*" * n
print(s)
```
- - -
###### C言語
$N$回文字`*`を出力する
```c
#include <stdio.h>

int main(void){
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		putchar('*');
	}
	puts("");
	return 0;
}
```
$N$個の`*`を繋げた文字列を生成する
```c
#include <stdio.h>
#include <string.h>

int main(void){
	int n;
	scanf("%d", &n);
	char s[n + 1];
	memset(s, '*', n);
	s[n] = '\0';
	puts(s);
	return 0;
}
```
- - -
###### C#
```cs
using System;

class Program
{
	static void Main()
	{
		int n = int.Parse(Console.ReadLine());
		string s = new string('*', n);
		Console.WriteLine(s);
	}
}
```
- - -
###### Javascript
```js
const lines = require("fs").readFileSync("/dev/stdin", "utf8").split("\n");
// 2024-08-25 parseIntからNumberに修正
// const n = parseInt(lines[0], 10);
const n = Number(lines[0]);
const s = "*".repeat(n);
console.log(s);
```
- - -
###### C++
```cpp
#include <iostream>
using namespace std;

int main(void){
	int n;
	cin >> n;
	string s(n, '*');
	cout << s << endl;
	return 0;
}
```
- - -
###### Kotlin
```kotlin
import java.util.*

fun main() {
	val sc = Scanner(System.`in`)
	val n = sc.nextInt()
	sc.close()
	val s = "*".repeat(n)
	println(s)
}
```
- - -
###### Perl
```pl
$n = <STDIN>;
print '*' x $n, "\n";
```
- - -
###### Scala
```scala
import scala.io.StdIn._

object Main extends App {
	val n = readLine().toInt
	println("*" * n)
}
```
- - -
###### Go
```go
package main
import (
    "fmt"
    "strings"
)
func main() {
	var n int
	fmt.Scan(&n)
	fmt.Println(strings.Repeat("*", n))
}
```
- - -
###### Swift
```swift
import Foundation

let n = Int(readLine()!)!
print(String(repeating:"*", count:n))
```
機械学習等で使われる、統計の標準化の例

# 統計における標準化の概要
標準化は、データセット内の値を比較可能な形に変換するための統計的手法です。具体的には、元のデータのスケール（範囲）を変更し、平均を0、標準偏差を1に変換する操作を指します。これにより、異なるスケールや単位を持つデータを同じ基準で比較できるようになります。

# なぜ標準化が重要か？


### 比較しやすくなる:
異なるスケールを持つ変数間での比較を容易にします。例えば、収入（ドル単位）と年齢（年単位）のように、異なるスケールのデータを比較する際に、標準化を行うことで同じ基準で分析が可能になります。

### 機械学習における重要性:

多くの機械学習アルゴリズム（例: k近傍法、サポートベクターマシン、ニューラルネットワークなど）は、変数間の距離に基づいて動作します。標準化を行わないと、スケールの大きい変数が過度に影響を与えてしまうため、標準化は非常に重要です。
データの分布を揃える:

標準化により、異なる分布を持つ変数のデータを揃えることができます。これにより、統計モデルや機械学習モデルの学習が安定しやすくなります。

# Pythonのコード全文

```
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

# データの生成
np.random.seed(42)
data1 = np.random.normal(50, 10, 1000)  # 平均50、標準偏差10の正規分布
data2 = np.random.normal(30, 5, 1000)   # 平均30、標準偏差5の正規分布

# 標準化の実行
scaler = StandardScaler()
data1_standardized = scaler.fit_transform(data1.reshape(-1, 1)).flatten()
data2_standardized = scaler.fit_transform(data2.reshape(-1, 1)).flatten()

# 元のデータのヒストグラム
plt.figure(figsize=(14, 6))

plt.subplot(1, 2, 1)
plt.hist(data1, bins=30, alpha=0.6, color='blue', label='Original Data 1')
plt.hist(data2, bins=30, alpha=0.6, color='green', label='Original Data 2')
plt.title('Original Data')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.legend()

# 標準化後のデータのヒストグラム
plt.subplot(1, 2, 2)
plt.hist(data1_standardized, bins=30, alpha=0.6, color='blue', label='Standardized Data 1')
plt.hist(data2_standardized, bins=30, alpha=0.6, color='green', label='Standardized Data 2')
plt.title('Standardized Data')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.legend()

plt.tight_layout()
plt.show()
```

# コード実行の結果
![データ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36629/a8a4e0e6-d1ae-efe2-e548-426031dda90d.jpeg)

# ステップ・バイ・ステップでのコードの説明

### 1. ライブラリのインポート
numpy と matplotlib.pyplot は、データの生成と可視化に使用される主要なライブラリです。
sklearn.preprocessing.StandardScaler は、データの標準化（平均を0、標準偏差を1に変換）を行うために使用されます。

### 2. データの生成
乱数生成のシードを設定することで、再現性を確保します。
2つの正規分布（平均50、標準偏差10および平均30、標準偏差5）に基づいて、それぞれ1000個のデータポイントを生成します。

### 3. データの標準化
StandardScaler を使ってデータを標準化します。これにより、データの平均が0、標準偏差が1になります。
標準化のため、データを1列の2次元配列に変換し、標準化後に再び1次元に戻します。

### 4. ヒストグラムの描画
グラフのサイズを設定し、2つのサブプロットを作成します。
左側のサブプロット: 元のデータをヒストグラムで表示します。
右側のサブプロット: 標準化後のデータをヒストグラムで表示します。
透明度、色、ラベルなどを設定して、ヒストグラムをわかりやすく表示します。

### 5. グラフのレイアウト調整と表示
tight_layout 関数で、グラフが重ならないようにレイアウトを自動調整します。
最後に、グラフを表示して結果を確認します。

### まとめ
このコードでは、2つの異なる正規分布から生成されたデータを標準化し、元のデータと標準化後のデータをヒストグラムで視覚的に比較します。標準化によって、データの中心が0になり、スケールが統一されることを確認できます。
ArchLinuxとManjaroを使い始めたのでメモを残しておく

:::note warn
この記事だいぶ端折ってるのでところどこ抜けてるかも。
:::


## ArchLinux
ローリングリリースモデルのLinuxディストリビューションでありUbuntuやWindowsのような大型アップデートが存在しません。(多分)
そしてシンプルで軽量です。(主観)
今回インストールしていく環境です。
- Ryzen5 5600G
- DDR4-3200 64GB
- RTX 4060 Ti
## インストール
容赦なくarchinstallを使っていきます。ですが私の環境では一筋縄では行かんかった。
```bash:command
pacman -Sy
pacman -S archlinux-keyring
```
を実行してLive環境のパッケージとか認証鍵をアップデートしてからじゃないとだめでした。
あとntpで躓くとか言われているのでarchinstall実行時に`--skip-ntp`をつけました。
あとは指示に従うだけなんじゃ。
## Nvidiaドライバとかのインストール
グラボを使うのに必要なドライバのインストールはUbuntuよりも簡単でした
```
sudo pacman -S nvidia-dkms nvidia-settings nvidia-prime
```
これでドライバと設定とprimeがインストールされました。
## ここで発生した問題
ここで問題が発生しました。それはグラボから映像出力するとティアリングが発生する問題です。
ティアリングはグラボ側とディスプレイ側のフレームレートの不一致が原因で起こるもので、
例えばウィンドウを動かしたときやゲームで視点を振ったときに途中で切れて見えます。
内蔵グラフィックから映像出力すればティアリングは無くなりましたが、今度はゲーム性能が落ちてしまいました。
## ここでprime
上の問題を解決するのが先程インストールした**prime**です。
primeは内蔵グラフィックスと専用グラフィックスの切り替えを行ってくれるもので特定のソフトウェアを専用グラフィックスで起動できます。
Minecraftしか遊ばないので
```bash:command
prime-run minecraft-launcher
```
を毎回打ってます。別に面倒じゃない。
## cudaのインストール
生成AIを動かすのに何かと必要なcudaをインストールしておきます。今回は12.1
まずgcc12をインストールします。paruでインストール。
```bash:command
paru -S gcc12
```
なおインストールには5時間かかりました(長い)
あとは
```bash:command
git clone https://gitlab.archlinux.org/archlinux/packaging/packages/cuda.git
cd cuda
git tag --list
git switch --detach 12.1.1-4
makepkg
```
を実行しパッケージを作成。あとはできたzstファイルをpacmanでインストールするだけです。
## 最後に
この記事はだいぶ端折ってますので細かいところは抜けてるかもしれません。
なにか不明点ありましたらコメントくださると助かります。
mikanOS 5章

# 5.1 文字を書いてみる

- 参照とポインタ
nullptrの作りやすさが違う。ポインタの場合は、ptr = 0かptr = nullptrで作れる。
参照の場合はnull参照を作れない。つまり絶対にnullにならない時に参照を使うと良き。

## 5.2 分割コンパイル

- 複数のcppに分割する
  - graphics.cpp
  - font.cpp
  - main.cpp

```
#pragma once

#include "frame_buffer_config.hpp"

// #@@range_begin(pixel_color_def)
struct PixelColor
{
  uint8_t r, g, b;
};
// #@@range_end(pixel_color_def)

// #@@range_begin(pixel_writer)
class PixelWriter
{
public:
  PixelWriter(const FrameBufferConfig &config) : config_{config}
  {
  }
  virtual ~PixelWriter() = default;
  virtual void Write(int x, int y, const PixelColor &c) = 0;

protected:
  uint8_t *PixelAt(int x, int y)
  {
    return config_.frame_buffer + 4 * (config_.pixels_per_scan_line * y + x);
  }

private:
  const FrameBufferConfig &config_;
};
// #@@range_end(pixel_writer)

// #@@range_begin(derived_pixel_writer)
class RGBResv8BitPerColorPixelWriter : public PixelWriter
{
public:
  using PixelWriter::PixelWriter;

  virtual void Write(int x, int y, const PixelColor &c) override;
};

class BGRResv8BitPerColorPixelWriter : public PixelWriter
{
public:
  using PixelWriter::PixelWriter;

  virtual void Write(int x, int y, const PixelColor &c) override;
};
// #@@range_end(derived_pixel_writer)
```

メンバ関数の本体は、ヘッダファイルに書いておらずプロトタイプ宣言のみ。分割コンパイルの利点を最大に活かすためには、関数本体はなるべく.cppに書くべき。ヘッダファイルに書いてしまうと、関数本体を修正するたびにそのヘッダファイルをインクルードしている全ての.cppをコンパイルし直す必要があるから。

## 5.3 フォントを増やそう
```
objcopy -I binary -O elf64-x86-64 -B i386:x86-64 hankaku.bin hankaku.o
```
の意味
→
`objcopy`:バイナリファイルを他のフォーマットに変換するためのツール
`-I binary`: 入力ファイル (hankaku.bin) のフォーマットを指定しています。この場合、入力ファイルは「バイナリフォーマット」であることを示しています。

`-O elf64-x86-64`: 出力ファイル (hankaku.o) のフォーマットを指定しています。この場合、出力フォーマットは「ELF 64ビット (x86-64アーキテクチャ用)」であることを示しています。

`-B i386:x86-64`: 対象のアーキテクチャを指定しています。この場合、ターゲットアーキテクチャが「i386
」であることを指定しています。これは、i386（32ビット x86アーキテクチャ）向けに作られたバイナリをx86-64アーキテクチャ（64ビット）用に変換することを意味します。

`hankaku.bin`: 変換元のバイナリファイルです。

`hankaku.o`: 変換後のELF形式のオブジェクトファイルです。

## 5.4 文字列描画とsprintf()
2024/8/14主にITとかセキュリティの記事

能動的サイバー防御、インフラ１５業種に重点へ政府調整…事前同意を得て通信分析(8/12)
https://www.yomiuri.co.jp/politics/20240811-OYT1T50207/

サイバー攻撃多発、高まる脅威　セキュリティー体制「成熟度」　日本2％と世界平均下回る(8/12)
https://news.yahoo.co.jp/articles/2b6af3689cf587f9c6bd41720ca64613585c2a99

サイバー防御、自治体に死角 委託先に丸投げ、責任者に専門家起用0.6%(8/12)
https://www.nikkei.com/article/DGKKZO82724860R10C24A8TL5000/

Google ChromeやSafariに脆弱性、Webサーバからローカルサービスに不正接続(8/12)
https://news.mynavi.jp/techplus/article/20240812-3002641/

AWSの6つのサービスでS3バケットの自動作成の仕組みを通してアカウントが乗っ取られる脆弱性が発見される(8/12)
https://gigazine.net/news/20240812-aws-critical-vulnerabilities-disclosed/

AI脆弱性発見、AWSのクラウドに影響(8/12)
https://weel.co.jp/media/news/4502/

当社グループ会社におけるセキュリティインシデントの発生について(8/12)
https://www.nidec.com/jp/corporate/news/2024/news0812-01/

オランダ データ保護局が注意喚起：AIチャットボットの使用はデータ漏洩につながる可能性がある(8/12)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2024/08/post-fdeb94.html

トランプ陣営のウェブサイトがハッキング被害　内部文書流出(8/12)
https://news.yahoo.co.jp/articles/ad37fe533d785343c79908bf3e36ec3d7beb6b41

トランプ陣営がハッキング被害に　共和党の副大統領候補バンス氏の調査資料など内部のやりとりが流出(8/11)
https://nordot.app/1195179483126874411?c=1179248089549373591

トランプ陣営、文書流出 「ハッキング発覚」　イランの関与を示唆(8/12)
https://www.nikkei.com/article/DGKKZO82728850R10C24A8PE8000/

【社説】相次ぐ韓国軍情報戦力の紀綱弛緩、総体的な刷新を(8/12)
https://s.japanese.joins.com/JArticle/322319?sectcode=110&servcode=100

韓米、来週UFS演習実施へ···「北朝鮮、大量破壊兵器対応に重点」(8/12)
https://japan.ajunews.com/view/20240812142015672

8月19日から大規模な米韓合同演習を実施　米韓軍が発表、北朝鮮の核・ミサイルを想定(8/12)
https://nordot.app/1195611505761289186

米韓軍、１９日から演習　北朝鮮の脅威に対応(8/12)
https://www.jiji.com/jc/article?k=2024081200328&g=int

米国と韓国が１９日から軍事演習を実施へ　北朝鮮の大量破壊兵器の対応強化(8/12)
https://www.sankei.com/article/20240812-A52PACOZNNIOXC5B2VELEN7MMY/

韓国軍とアメリカ軍が大規模合同軍事演習を実施へ　北朝鮮がミサイル発射などの対抗措置に出る可能性も(8/12)
https://www.fnn.jp/articles/-/742498

AIによるキャラクター生成と二次創作の境界線を考える！
https://cybersecurity-park.com/2530/

ニコニコ動画が帰ってきたので、今後はクリエイターとかエンジニアをもっと褒めるべき(8/12)
https://news.mynavi.jp/article/jiryu_hyoryu-312/

紛争に温暖化、LGBT論争…世界を映したパリ五輪　それでも示した「人間の力」の希望(8/12)
https://www.sankei.com/article/20240812-OXV5KYBYYVE53CYKWZRR54CEQ4/?outputType=theme_paris2024

日本のイノベーション転換に向けたキックオフ「経営者イノベーション・ラウンドテーブル」を開催(8/11)
https://www.jiji.com/jc/article?k=000000023.000042561&g=prt

QRコードやオンラインで弔いも――「墓参りのデジタル化」で追悼のあり方は変わるか #老いる社会(8/12)
https://news.yahoo.co.jp/articles/b207b421004ad2371aca03ef07cf9e9e1c35ad77
MacへJavaをインストール

書いておかないと何やったか忘れると言うのと、見返すのも面倒と言うことで記事として残すことにしました。

MacへJavaをインストールするところまで、本記事では説明させていただきます。

# JDK 開発キット 17.0.12 をダウンロードします。
※ JDKとはJava Platform, Standard Edition Development Kitのことです。

## Oracleのホームページへアクセスします。
https://www.oracle.com/jp/java/technologies/downloads/#jdk17-mac

### x64 DMGインストーラーをインストール
ARMとか選ぶと、IOTとかモバイル向けのになっちゃうので、選ばないように。

![スクリーンショット 2024-08-14 1.20.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95052/1478b2dc-8363-8fb8-c525-4c0647e743c1.png)

順に進んでいく

![スクリーンショット 2024-08-14 1.29.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95052/b1c6e15b-6579-7183-1336-8ffa3ec36124.png)

![スクリーンショット 2024-08-14 1.30.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95052/5bfb1b14-a910-15c3-91dc-997c8a25990f.png)

正常にインストールできたらJDKが入っていることの確認をします。

```
java --version
```

![スクリーンショット 2024-08-14 1.33.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95052/f32bffb1-977e-9398-1025-c2844548989c.png)

こんな感じになっていればOK

# 入れたJavaをアンインストールする
```
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-17.jdk
```

![スクリーンショット 2024-08-14 1.40.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95052/55110ee7-e3db-b371-565f-26cb0b99624a.png)

これでJavaが入っていないことが確認できました。
それでは！