OmniAICreator/Qiita-1.07M huggingface dataset:
モノラル音声をステレオ音声(2チャネル)に変換し，各チャネルに話者ごとの音声を割り当てる．

## J-CHATを機械学習で扱いやすいデータに整形

2話者が対話しているモノラルな音声を，話者分離をしたのちに書き起こしを作成する手順をメモしておきます．この記事では話者分離をしてステレオ音声として保存するところまで書きます．
pyannoteでも分離可能なんですが，精度がいまいちだったのでAsteroidを使いました．(Colabで実行しています．)

### 扱う音声データ
以下のように，チャネル1，サンプリング周波数が22050(Hz)，1分41秒の対話音声データを扱います．
https://drive.google.com/file/d/1D3N_wTC5d4fX08jbsbyEw5CdK_cZNF5F/view?usp=sharing
```
$ soxi 15f97caafef4a4b352e54781236cf2b4.wav 

Input File     : '15f97caafef4a4b352e54781236cf2b4.wav'
Channels       : 1
Sample Rate    : 22050
Precision      : 16-bit
Duration       : 00:01:41.54 = 2238891 samples ~ 7615.28 CDDA sectors
File Size      : 4.48M
Bit Rate       : 353k
Sample Encoding: 16-bit Signed Integer PCM
```
もろもろインポートします．
```
import librosa
import numpy as np
import matplotlib.pyplot as plt
```
librosaで波形を見てみます．
```
file_name = "/content/15f97caafef4a4b352e54781236cf2b4.wav"

y, sr = librosa.load(file_name)
time = np.arange(0, len(y)) / sr

plt.plot(time,y)
plt.xlabel("Time(s)")
plt.ylabel("Sound Amptitude")

plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4096980/adcdec69-a046-4b66-930c-6a0b3db1227b.png)


### 話者分離（ステレオ音声ファイルを出力）
Asteroidを使って2話者に分離します．  

:::note info 
```!pip install asteroid``` でAsteroidをインストールしておいてください．
::: 

```
from asteroid.models import ConvTasNet
import torch
import torchaudio

# モデルのロード（最大2話者対応のモデル）
model = ConvTasNet.from_pretrained("JorisCos/ConvTasNet_Libri2Mix_sepclean_16k")

# 音声データの整形
waveform_torch = torch.tensor(y).unsqueeze(0)  # (1, 1, T)
resampler = torchaudio.transforms.Resample(orig_freq=22050, new_freq=16000)
waveform_torch = resampler(waveform_torch)

# モデルで話者分離（出力：話者数 x サンプル数）
separated_sources = model.separate(waveform_torch)
separated_sources_np = separated_sources.cpu().numpy()
```
それぞれの音声を出力したかったら，以下のプログラムを動かします．
```
import IPython.display as ipd
ipd.display(ipd.Audio(separated_sources_np[0, 0], rate=16000))
ipd.display(ipd.Audio(separated_sources_np[0, 1], rate=16000))
```
それぞれの音声を波形で見てみます．
```
time = np.arange(0, len(separated_sources_np[0, 0])) / sr

plt.plot(time,separated_sources_np[0, 0])
plt.xlabel("Time(s)")
plt.ylabel("Sound Amptitude")

plt.show()

time = np.arange(0, len(separated_sources_np[0, 1])) / sr

plt.plot(time,separated_sources_np[0, 1])
plt.xlabel("Time(s)")
plt.ylabel("Sound Amptitude")

plt.show()
```
左が話者A，右が話者Bの波形です．（分離されていることがわかります．）
<div style="display: flex; gap: 10px;">
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4096980/5fcb41f4-c8d4-4bf4-8a34-4de409a86b82.png" width="45%" />
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4096980/54c2a9ad-b67b-4aa6-b825-9c6bc48a6b6c.png" width="45%" />
</div>

### ステレオ音声として保存
```
import soundfile as sf

# separated_sources_np: shape = (1, 2, T) → (2, T)
stereo_data = separated_sources_np[0]  # shape: (2, T)

# 転置して shape を (T, 2) にする → ステレオ形式
stereo_data = stereo_data.T  # shape: (T, 2)

# 保存
sf.write("separated_stereo.wav", stereo_data, samplerate=16000)
```
https://drive.google.com/file/d/1XgdG1HTBhj31OkeFtxwVBLdPeFWaL-y-/view?usp=sharing

このようにチャネルごとに話者が割り振られた2チャネル音声になりました．
自分だけの【特別】を作れる世界

メタバース空間に動いて喋る自分だけのカスタム可能なAIが居てくれたら最高じゃないですか？という企画です、
詳細はこちらのnoteにてご覧下さい。
https://note.com/planetchan/n/n0c28d76e8d8a
様々な技術者を募集しています、まだまだ発足段階ですが、お気軽にご連絡いただければ幸いです。
ワイヤレスLANの規格と種類

ワイヤレスLANは技術の発展に伴いIEEE802.11によって様々な規格が定められてきた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/1ce9cc82-8a90-4c5d-a7b5-88dfc744eb08.png)
【sharepoint×python】HTTPリクエストで取得したファイルをsharepointにアップロード

httpリクエストで取得したファイルをsharepointにアップロードする方法。

#### フロー
1\. 今日の日付のフォルダをsharepoint上に作成
2\.file_list内のファイルを順に httpリクエストで取得してアップロード

#### コード例
```
import requests
from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.user_credential import UserCredential
from io import BytesIO
import datetime

# ダウンロードしたいファイルのリスト
file_list = [
"53/iris.zip",
"45/heart+disease.zip",
]

# ダウンロード元のURL
base_url = "https://archive.ics.uci.edu/static/public/"

# 現在の日付を取得してファイル名に追加（YYYY.MM.DD形式）
save_date = datetime.datetime.today().date().strftime('%Y.%m.%d')


# SharePointの認証情報
user = 'ユーザー名'
password = 'パスワード'
site_url = "https://サイトURL"
ctx = ClientContext(site_url).with_credentials(UserCredential(user, password))

# SharePointのフォルダへの相対パス
fldrs_path = '/sites/***/Shared Documents/***(チャネル名)/***(フォルダ名)'
# フォルダの作成
target_folder = ctx.web.folders.add(fldrs_path + "/" + save_date)
ctx.execute_query()

folder = ctx.web.get_folder_by_server_relative_url(fldrs_path + "/" + save_date)

# ファイルを順にダウンロードしてアップロード
for file_name in file_list:
    # 完全なURLを作成
    file_url = base_url + file_name
    try:
        # HTTPリクエストでファイルをダウンロード
        response = requests.get(file_url, headers=headers, allow_redirects=True)

        # ステータスコードが200か確認
        if response.status_code == 200:
            # ファイルコンテンツをメモリ上に保持
            file_content = BytesIO(response.content)

            # SharePoint フォルダにファイルをアップロード
            file = folder.files.upload(file_content, file_name).execute_query()

            print(f"{file_name} をダウンロードし、SharePoint にアップロードしました。")
        else:
            print(f"ファイル {file_name} のダウンロードに失敗しました。ステータスコード: {response.status_code}")

    except requests.exceptions.RequestException as e:
        print(f"エラーが発生しました: {e}")
```
UML入門

索引にある単語で、よく知らない言葉を抜き出す。


# par
索引にある。検索しても出てこない。

# UCDD
 Urban Center for the Developmentally Disabled (UCDD)
 United Car and Diesel Distributors (UCDD)

 # 浅い履歴擬似状態
 ステートマシンの仕組みのおさらい その2
https://wiz-code.digick.jp/blog/javascript-ajax/post-2090

# アセンブリコネクタ

https://www.sparxsystems.jp/help/17.0/assembly.html

Assembly Connectors vs Delegation Connectors
https://www.ancitconsulting.com/connectors.html

# ロリポップ  lolipop
​a hard round or flat sweet made of boiled sugar on a small stick
https://www.oxfordlearnersdictionaries.com/definition/english/lollipop?q=lollipop

棒付き飴の通称

# バウンダリ
https://www.sparxsystems.jp/help/17.0/boundary.html
![スクリーンショット 2025-06-11 153545.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/ab130028-3f5e-4266-93a2-b07286b2c961.png)

バウンダリの入った図を探す。


https://stackoverflow.com/questions/683825/in-uml-class-diagrams-what-are-boundary-classes-control-classes-and-entity-cl
Boundaries (view/service collaborator)
Objects that interface with system actors (e.g. a user or external service). Windows, screens and menus are examples of boundaries that interface with users.
システムアクタ（ユーザや外部サービスなど）の境界のオブジェクト。ウィンドウ、画面、メニューなどは、ユーザとインタフェース例です。

https://buildersbox.corp-sansan.com/entry/2022/02/28/110000
![スクリーンショット 2025-06-11 154535.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/773beeef-d4d0-43cc-a40a-38eaa839634e.png)

# マニフェステーション
an event, action or thing that is a sign that something exists or is happening; the act of appearing as a sign that something exists or is happening
https://www.oxfordlearnersdictionaries.com/definition/english/manifestation?q=manifestation

>何かが存在する、または起こっていることを示す出来事、行動、または物。現れる行為

マニフェスト関係
https://www.ibm.com/docs/ja/rsas/7.5.0?topic=diagrams-manifestation-relationships

https://www.uml-diagrams.org/deployment-diagrams.html
>EJB component UserService and skeleton of web services are manifested (implemented) by EJB module user-service.jar artifact

--> stack overflowで聞く。

# スリーアミーゴ
UML創設者の３人
Ivar Yacobson、Grady Booch、James Rumbaugh。

Unifiedしてるか？

Tres Amigos
Three Brothers

UMLは信仰するものではなく、調べるためのもの。

# DAOパターン

Data Access Object

DataとDatabaseの間にあるもの。

https://www.oracle.com/java/technologies/data-access-object.html

Code that depends on specific features of data resources ties together business logic with data access logic. This makes it difficult to replace or modify an application's data resources.

The Data Access Object (or DAO) pattern:

>separates a data resource's client interface from its data access mechanisms
adapts a specific data resource's access API to a generic client interface
The DAO pattern allows data access mechanisms to change independently of the code that uses the data.

データリソースの特定の機能に依存するコードは、ビジネスロジックとデータアクセスロジックを結び付けます。そのため、アプリケーションのデータリソースの置き換えや変更が困難になります。
データアクセスオブジェクト（DAO）パターンは、以下のことを実現します。
データリソースのクライアントインタフェースをデータアクセスメカニズムから分離します。
特定のデータリソースのアクセスAPIを汎用クライアントインタフェースに適合させます。
DAOパターンにより、データアクセスメカニズムは、データを使用するコードとは独立して変更できます。

数値として、よくなる結果を示していない。

https://arxiv.org/pdf/2404.18419

https://arxiv.org/pdf/1503.01707
Azure Function に長い名前を付けるときは気を付けろ

# はじめに
タイトルに書いたことが言いたいことの8割くらいです。あとは理由と対策を書いておきます。

## TL;DR
- Azure Function に31文字以上の名前をつけて、かつスロットを使うとTimerトリガが発火しなくなることがある
- 対策はいくつかある: 名前を短くする、カスタムhost idを設定するなど(後述)

## 条件と問題
### 条件
1. Azure Function に長い名前、特に**31文字以上の長さの名前**を付ける
1. スロットを１つ以上作る (例: staging)

### 起きる問題
**どこかのスロットの、TimerTrigger定義されたfunctionが一切起動しなくなる**。ログを見ても何もない。

これはかなり怖いです。問題なく動いているコードを、スロットを作ってデプロイしたらそっちはなぜか動かない、という状態になります。アプリ自体は正常に起動しているようにしか見えず、でもtrigger historyに何も表示されません。他のトリガー(QueueTriggerなど)は問題なく動いており、Timerだけが止まった状態です。

### 何が問題か
Functionホストはストレージアカウント上のblobリースを使ってシングルトン管理をしており、各Functionごとにユニークである必要があります。このホストIDはデフォルトで以下の文字列になります。

- FunctionName/ListenerName (Productionスロットの場合)
- FunctionName-SlotName/ListenerName (Productionスロット以外の場合、半角ハイフンのあとにスロット名)

FunctionNameにはAzure Function名、ListenerNameはFunctionHost (WebJobsかHost.Functions) とメソッド名から作成されます。ただし、**半角スラッシュより手前は最大で32文字まで**しか認められていないため、頭の32文字よりあとは切り捨てられます。しかもスラッシュ手前最後の文字はハイフン以外の英数字のみです。この制約により、Function名が31文字以上の場合、ホストIDがProductionスロットと競合します。**Functionホストはリースを獲得できない場合はTimerトリガを一切起動しない**ので、いつまで経っても発火しないのです。

### 対策
30文字以下のFunction名に抑えることで上記の問題が起きる可能性は著しく下がりますが、問題に気が付いたときってもうFunction名変えられる状態ではないことが多いんじゃないかなと推測します(経験談)。組織ごとに命名規則があったりしますしね。なので、そういうときには**環境変数 AzureFunctionsWebHost__hostid にスロット毎にユニークな文字列を設定する**ことで問題を回避できます。要するに自動で作成されるホストIDを上書きするわけですね。わかれば簡単です。

### 参考資料
だらだらと書きましたが、上記はすべて公式ドキュメントに書いてあります。書いてあるんですが、知らないとたどり着けないんですよねぇ...

- https://learn.microsoft.com/azure/azure-functions/storage-considerations?tabs=azure-cli#host-id-considerations
- https://learn.microsoft.com/azure/azure-functions/functions-app-settings#azurefunctionswebhost__hostid
- https://learn.microsoft.com/azure/azure-functions/functions-app-settings

### おまけ
個人的にこの問題にハマったので、Functions用のDiagnose & Solveがこの問題を検出できるように改善しておきました。ポータルメニューの Diagnose & Solve > Functions that are not triggering を選択すると、この問題が起きていたら見つけてくれるはずです。
マンガで分かる Java入門講座を読んで

:::note info
強制的にエラーを発生
:::

```
throw new Exception();
```
new Exception()で新しく例外を発生させて
throwsに送っている

:::note info
 throwsによる例外の丸投げ
:::
```
void method() throws ExceptionA, ExceptionB {
    処理1
    throw new ExceptionA();
    処理2
    throw new ExceptionB();
}
```
メソッドの引数の後ろに「throws」を書き、
処理で例外クラスを呼び出すことで、
例外をメソッド内で処理せず、
呼び出し元に丸投げすることができる。

:::note info
エラーの詳細やどのメソッドの何行目で
エラーが起きたのかを出力
:::
```
package sample;

public class Sample {
    public static void main(String[] args) {
        try {
            MethodA(); //例外がthrowされる可能性のある処理
        } catch (Exception e) { //eは変数
            e.printStackTrace(); //例外が起きた時の処理
        }　　　　　　　　　　　　　//（ここでは例外情報を出力）
    }

    public static void MethodA() throws Exception {
        throw new Exception();
    }
}
```

:::note info
例外が起きても起きなくても必須な処理
:::
```
try {
    例外がthrowされる可能性のある処理
} catch (受け取るException系クラス 変数) {
    例外が起きた時の処理
} finaly {
    例外が起きた場合も起きなかった場合も
    最終的にここを通る
}
```



:::note info
複数の例外をcatch
:::
```
try {
    method();    // throws ExceptionA, ExceptionB
} catch (ExceptionA eA) {
    例外Aが起きた時の処理
} catch (ExceptionB eB) {
    例外Bが起きた時の処理
}
```
【Prisma】該当する文字を含むアイテムを取得する

```tsx
export const searchPosts = async (search: string) => {
  const searchWords = search.trim().toLowerCase().split(/\s+/);

  return await prisma.post.findMany({
    where: {
      AND: searchWords.map(word => ({
        OR: [
          {
            title: {
              contains: word,
            },
          },
          {
            content: {
              contains: word,
            },
          },
        ],
      })),
    },
  });
};
```
この場合の`AND`と`OR`は、仮に2単語(`searchWords`は長さ2の配列)だとして、`title`か`content`のどちらか(`OR`)で、`map()`でループされる単語1つ1つを(`AND`)含んでいなければならないという条件を表してます。


つまり、「**毎ループ時、`title`か`content`どちらかでその文字を含んでね**。」というニュアンスでしょう。

では以下の場合はどうなるのか。
```tsx
export const searchPosts = async (search: string) => {
  const searchWords = search.trim().toLowerCase().split(/\s+/);

  return await prisma.post.findMany({
    where: {
      OR: searchWords.map(word => ({
        OR: [
          {
            title: {
              contains: word,
            },
          },
          {
            content: {
              contains: word,
            },
          },
        ],
      })),
    },
  });
};
```
これは毎ループ時という条件がなくなり、少なくとも1回、`title`か`content`で文字を含んでればいいよといった少し緩い条件になります。

## 具体例で見てみよう
例えば「React, 初心者」が検索ワードだとします。配列にすると、```["React", "初心者"]```。

また、仮データも用意します。
```tsx
// データ例
const posts = [
  { id: 1, title: "React入門", content: "初心者向けTypeScript解説" },
  { id: 2, title: "Vue.js入門", content: "Reactより簡単でおすすめ" },
  { id: 3, title: "TypeScript基礎", content: "型安全なJavaScript" },
  { id: 4, title: "React初心者ガイド", content: "基本的な使い方を解説" },
];

// 検索ワードの配列
const searchWords = ["React", "初心者"];
```

### パターン1: AND検索の場合
一番最初に述べたパターンの場合です。
```tsx
prisma.post.findMany({
    where: {
      AND: searchWords.map(word => ({
        OR: [
          {
            title: {
              contains: word,
            },
          },
          {
            content: {
              contains: word,
            },
          },
        ],
      })),
    },
});
```
この場合where句で該当するものは、
「毎ループ時、`title`か`content`どちらかでその文字を含んでね」という条件より、

- `"React"`を、`title`または`content`に含む 
- `"初心者"`を、`title`または`content`に含む
この**両方を満たしているもの**ということになります。

仮データの中でこの条件を満たしているのは以下になります。
```tsx
  { id: 1, title: "React入門", content: "初心者向けTypeScript解説" }, 
  { id: 4, title: "React初心者ガイド", content: "基本的な使い方を解説" }
```

### パターン2: OR検索の場合
2番目に述べたパターンの場合です。
```tsx
prisma.post.findMany({
    where: {
      OR: searchWords.map(word => ({
        OR: [
          {
            title: {
              contains: word,
            },
          },
          {
            content: {
              contains: word,
            },
          },
        ],
      })),
    },
});
```
この場合where句で該当するものは、
「少なくとも1回、`title`か`content`どちらかでその文字を含んでね」という条件より、

- `"React"`を、`title`または`content`に含む 
- `"初心者"`を、`title`または`content`に含む
これらのどちらかを満たしているものになります。

仮データの中でこの条件を満たしているものは、以下になります。
```tsx
  { id: 1, title: "React入門", content: "初心者向けTypeScript解説" },
  { id: 2, title: "Vue.js入門", content: "Reactより簡単でおすすめ" },
  { id: 4, title: "React初心者ガイド", content: "基本的な使い方を解説" }
```
【入社2ヶ月・未経験から挑戦】Uptime Kumaで監視環境を構築してみた話「第1章」

### 自己紹介
初めまして、tacosと申します。
2025年4月にインフラエンジニアとしてキャリアをスタートした、業界完全未経験の新人です！ 
さらっと自己紹介を！ もともとはIT系の営業企画をしていましたが、技術職には初挑戦。 
1999年生まれ、26歳、フットサル、サッカーが大好きです！⚽️
**実は現役のプロフットサル選手です😂**  
弊社の社長とは企業主催のフットサルイベントで出会って、  
そのまま入社という、ちょっと変わったきっかけで今に至ります（笑）

## この記事でできること
:::note info
- Docker環境で自己署名SSL付きのUptime Kuma監視システムを構築できるようになる
- Amazon Lightsail や Amazon Linux 2023の概要理解が進む
- 初心者でもOSSに触れられるということが分かる
:::
自分と同じような未経験エンジニアの方にとって、参考になったら嬉しいです！

 
## なぜUptime Kumaを使おうと思ったのか！？ 
それは、右も左も全く分からず何とかzabbixでWordPressサーバーの監視を完成して、達成感に浸っていた数時間後の事でした
突然Slackに、こんなメッセージが届いたのです‥。

「個人的にね素敵なツール見つけんですよね。
https://github.com/louislam/uptime-kuma
日本語の熊から名前つけているらしいです。何で熊なのか？はありますが。
技術好きな人が会話の中で、新人から『Zabbixが好きなんですけど、uptime-kumaが面白そうで触ってるんです」というフレーズを聞いたら結構インパクトあると思いましてね。
ちょっと試してみて、良さげなら熊さん使いますかね？』 と、こんな連絡が来ました😅 
いやいや、Zabbix終わったばっかりなんだけど！？という気持ちでしたが（笑）、  
新人なので断れませんよね…。（笑） こうして、僕とUptime Kumaの出会いが始まりました。

## Uptime Kumaってなに？
 Uptime Kumaは、シンプルで軽量なオープンソースの監視ツールです。  
「死活監視（アップ・ダウン）」に特化していて、設定がとても簡単なのが特徴。
### 特徴まとめ
- ✅ 初心者でもDockerで簡単に構築可能
- ✅ UIが直感的で、しかも日本語対応
- ✅ Webサービスやサーバーの死活監視に最適
- ✅ 軽量＆無料で個人利用にピッタリ
### 逆に、こんな人には不向きかも？
- ❌CPU使用率やメモリ状況、ログ監視もしたい 
→ UKの範囲外のため、Zabbixなどをお使いください。

とにかく手軽に始められるので、僕のような未経験エンジニアにもピッタリでした！ 
ここからはKumaのすこ〜し詳しい説明です。

:::note info
①OSSであり無償で利用可能！
②デプロイが容易！
③サーバーやサービスの軽量な死活監視に特化しておりリソース消費が少ない！（アップ・ダウン監視）
④CPU使用率、メモリ使用量、ログ監視などは出来ない
:::

まず①の無償！
実践練習に無料という言葉は喉から手が出るほどいい響きじゃないですか！？
OSSの偉大さをただただ感じます😂
大事なのが③、④この2つ！
まずは、③の説明から！
Kumaは死活監視など簡単な監視に特化しまくりです！ということはハマれば強い！
逆に④の様なCPUだ〜メモリだ〜ログだ〜ってなるとzabbixとかで監視の方がいいと思います！
でも、これはこれで棲み分けが出来て良いと思います。
ここまで読んでくださってありがとうございます！

次からは、実際に構築していく手順をご紹介します。
未経験でも問題なくできたので、安心して読み進めてください！

:::note
🐻第2章では、Lightsail での実際の構築手順を、コマンド＆スクショ付きでわかりやすくまとめています！
[【入社2ヶ月・未経験から挑戦】Uptime Kumaで監視環境を構築してみた話「第2章」](https://qiita.com/tacos_02/private/eff7c3326b08a23fabdf)
「実際にやってみたい！」という方はぜひ第2章もチェックしてみてください😊
:::

**até logo!👋**
[Linux] グラフィカルデスクトップ_ディスプレイマネージャ、ウィンドウマネージャ、統合デスクトップ環境

# ディスプレイマネージャ
- ログイン管理ツール
- GUIでユーザー認証を行うログイン画面を提供する
- ログイン後のデスクトップ環境を提供する
- initやsystemdにより起動される


# ウィンドウマネージャ
ウィンドウの概観、アイコンやカーソル、メニューなどを提供するXクライアントのアプリケーション


# 統合デスクトップ環境
ウィンドウマネージャを含み、ファイル管理・設定ツール・アプリケーションをまとめて提供する統合型のGUI環境

# 相関図
| コンポーネント         | X.Org        | GNOME  | KDE         | Xfce        |
| --------------- | ------------ | ------ | ----------- | ----------- |
| **ディスプレイマネージャ** | XDM          | GDM    | KDM<br>SDDM | LightDM |
| **ウィンドウマネージャ**  | 任意（例: twm 等） | Mutter | KWin        | Xfwm        |



# Ping-t
- [4635_XDM](https://mondai.ping-t.com/question_subjects/32/question_sessions/33603258/progressing_questions/514610083)
- [4825_ディスプレイマネージャ](https://mondai.ping-t.com/question_subjects/32/question_sessions/33603258/progressing_questions/514610091)
- [4866_KDM](https://mondai.ping-t.com/question_subjects/32/question_sessions/33603258/progressing_questions/514610093)
- [4867_ウィンドウマネージャ](https://mondai.ping-t.com/question_subjects/32/question_sessions/33603258/progressing_questions/514610081)
- [5077_Xfce](https://mondai.ping-t.com/question_subjects/32/question_sessions/33693535/progressing_questions/515931298?result=true)
タイマーで一分はかる Timing Diagram, PlantUML

PlantUML
一目でわかるPlantUML
https://plantuml.com/ja/

PlantUML を使った UML の描き方
https://plantuml.com/ja/guide

シーケンス図
https://plantuml.com/ja/sequence-diagram

タイミング図
https://plantuml.com/ja/timing-diagram
```
@startuml
title タイマーで一分はかる

robust "タイマー" as tim

@0
tim is 初期状態

@10
tim is 処理中 : 開始ボタン押下

@70
tim is 停止 : 停止ボタン押下

@80
tim is 初期状態 : リセットボタン押下

@enduml
```
![SoWkIImgAStDuIh9BCb9LNZSjFznqvB7pVCUD-zvtBZyoOw6fnrjZnlNFsxiVjpKpSLLb9zKMboYe8IiJaaXiLYX93ENYyl106XCha9ciSBJZhdFvin_thNjMIjGbuCXGg9zsVC9RKzsh5MmKdWvhVlfykx7pND0fZLlVjQrvyaEa6fpXEh6ES_MBW8gXJ0mbLfWjH6euN7pgiTDknytD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/c65c2906-03e5-4bc9-bbdc-ae8b842c06ff.png)
プロデル、調査 その36

# 概要
プロデルが、CLRらしいので、調べて見た。
練習問題やってみた。

# 練習問題
COM型を使って、コマンドプロンプトを実行せよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/342cc589-6224-411b-be3c-38a413feb829.png)


# サンプルコード

```
ShellApplicationというCOM型(「Shell.Application」）を作る
ShellApplicationからインスタンスを作ってshellAppとする

shellApp:ShellExecute(「cmd.exe」,　「/k dir /d c:\」,　「」, 「runas」)

```

以上。
とっさの判断

絶対に上書き保存しないでっていう書式に間違えて保存をおして閉じようとしてしまった。
保存データー量が多かったので、とっさの判断で「ESC」を押した。

すると保存が中断されて、危うく２万行近く保存してしまうのを免れた。

:relaxed: ほっとした
超AI（AGI）の社会インパクト：AGIがエンジニアよりコードを書く時代：ソフト業界の未来は？

# **AGIがエンジニアよりコードを書く時代：ソフトウェア業界の未来は？**  

## **1. はじめに：AGIの衝撃とエンジニアの役割の変化**  

近年、AI技術の進化は目覚ましく、特に**汎用人工知能（AGI: Artificial General Intelligence）**の台頭により、ソフトウェア開発の未来が大きく変わろうとしています。AGIは、特定のタスクに特化したAI（Narrow AI）とは異なり、人間と同じように汎用的な問題解決能力を持ち、自律的にコードを生成・最適化できる可能性があります。  

「**AIがエンジニアの代わりにコードを書く時代が来るのか？**」  
「**エンジニアはどう進化すべきか？**」  

この記事では、AGIがソフトウェア業界に与える影響を考察し、エンジニアとしてどう向き合うべきかを、**技術的観点**と**実践的なアドバイス**を交えて解説します。  

---

## **2. AGIとは？ 従来のAIとの違い**  

### **AGIの定義**  
AGI（汎用人工知能）は、**人間レベルの知能**を持ち、さまざまなタスクを自律的に学習・実行できるAIです。現在のAI（例：ChatGPT、画像認識モデル）は「Narrow AI（特化型AI）」であり、特定の領域に限定されています。  

### **AGIができること（コード生成の例）**  
- **自動コード生成**（GitHub Copilotの進化版）  
- **バグ修正・リファクタリングの提案**  
- **システム設計の最適化**  
- **テストケースの自動生成**  

> **🔍 例：AGIがReactコンポーネントを自動生成**  
> 「ユーザー登録フォームを作成し、バリデーションを実装せよ」と指示するだけで、AGIが適切なUIとバックエンド連携コードを生成する未来が来るかもしれません。  

---

## **3. AGI時代のコーディング：実例で見る未来**  

### **ケーススタディ：AGIを使ったWebアプリ開発**  
仮に、AGIが次のような開発フローを支援すると考えられます。  

#### **① 要件定義からコード生成**  
```python
# AGIへの指示例（自然言語でOK）  
"FlaskでREST APIを作成し、ユーザー登録機能を実装して。DBはPostgreSQLを使用。"  

# AGIが生成するコード（予想）  
from flask import Flask, request, jsonify  
import psycopg2  

app = Flask(__name__)  

@app.route('/register', methods=['POST'])  
def register():  
    data = request.get_json()  
    # AGIが自動でDB接続・バリデーションを実装  
    return jsonify({"status": "success"})  

if __name__ == '__main__':  
    app.run(debug=True)  
```  

#### **② 生成コードのカスタマイズ**  
AGIが生成したコードを、エンジニアが**ビジネスロジック**や**セキュリティ要件**に合わせて調整します。  

```python
# エンジニアが追加する処理（例：パスワードハッシュ化）  
from werkzeug.security import generate_password_hash  

def register():  
    data = request.get_json()  
    hashed_password = generate_password_hash(data['password'])  
    # ...  
```  

#### **③ デプロイ・監視の自動化**  
AGIが**CI/CDパイプライン**や**クラウドデプロイ（AWS/GCP）**を設定することも可能に。  

---

## **4. エンジニアが知るべきAGI時代の生存戦略**  

### **✅ 押さえるべきスキル**  
1. **AIと協働する能力**  
   - プロンプトエンジニアリング（適切な指示の出し方）  
   - 生成コードの品質評価・修正スキル  

2. **ドメイン知識の深化**  
   - AGIが苦手な**複雑なビジネス要件**や**倫理的判断**を補えるように  

3. **クラウド＆DevOps**  
   - AGI生成コードの**デプロイ・スケーリング**を管理  

### **⚠️ よくある落とし穴**  
- **生成コードの盲信** → セキュリティホールが混入するリスク  
- **過度な依存** → 自分で考える力を失わないように  

---

## **5. さらに先へ：AGIと人間の協業の未来**  

- **「人間は設計に集中し、実装はAGIが担当」**という分業が進む  
- **エンジニアの役割**は、**「要件定義」「倫理的判断」「創造的解決」**にシフト  

> **🚀 未来の開発フロー**  
> 1. 人間が**仕様を定義**  
> 2. AGIが**プロトタイプを生成**  
> 3. 人間が**調整・最適化**  

---

## **6. 結論：AGIはエンジニアを脅かすか？**  

### **👍 メリット**  
- 定型作業の自動化で**生産性向上**  
- より**創造的な仕事**に集中可能  

### **👎 デメリット**  
- **コーディングスキルの陳腐化**リスク  
- **倫理的な課題**（AGIの判断を誰が責任を持つか？）  

### **🔮 未来への準備**  
AGIは**ツール**であり、**敵ではありません**。重要なのは、  
- **AIを活用するスキル**  
- **人間にしかできない価値を提供する姿勢**  

**「AGI時代のエンジニア」**として、進化し続けましょう！  


---

この記事が役立ったら「いいね」やシェアをお願いします！ ご意見・質問はコメントへどうぞ 🚀
超AI（AGI）の社会インパクト：AGI開発から離れる研究者たち：幻想か現実か？

# **AGI開発から離れる研究者たち：幻想か現実か？AI超強力の社会的影響を考察する**

## **1. はじめに：AGIの台頭と研究者の離反**  
近年、人工知能（AI）の進化は目覚ましく、特に**汎用人工知能（AGI: Artificial General Intelligence）**の可能性が議論されています。AGIは、人間と同等かそれ以上の知能を持ち、あらゆるタスクを自律的に実行できるAIを指します。しかし、その開発には技術的な課題だけでなく、**倫理的・社会的リスク**も伴います。  

興味深いことに、一部のAI研究者がAGI開発から距離を置き始めています。彼らは「AGIは幻想なのか、それとも現実になり得るのか？」という疑問を抱えています。本記事では、**AGIが社会に与える影響**を考察し、実際の技術的アプローチや懸念点を解説します。  

---

## **2. AGIとは何か？従来のAIとの違い**  
AGIは、**特定のタスクに特化したAI（Narrow AI）**とは異なり、以下の特徴を持ちます：  

- **汎用性**: 複数の領域で自律的に学習・適応可能  
- **自己改善能力**: 自らのアルゴリズムを最適化  
- **常識推論**: 人間のような文脈理解が可能  

例：  
- **Narrow AI**: ChatGPT（自然言語処理）、AlphaGo（ゲームAI）  
- **AGI**: 人間のように「考える」AI（未だ実現せず）  

### **AGI開発の現状**  
現在、AGIを目指す研究は以下のアプローチで進められています：  
1. **強化学習の進化**（例：DeepMindのAlpha系列）  
2. **大規模言語モデル（LLM）の拡張**（GPT-4→将来のGPT-n）  
3. **ニューロモーフィックコンピューティング**（脳型AI）  

しかし、**「意識」や「真の理解」**を持つかどうかは未解決問題です。  

---

## **3. AGIの実装例：シミュレーション環境での学習**  
AGI開発の一例として、**OpenAI Gym**を使った強化学習モデルを紹介します。  

### **サンプルコード：強化学習エージェントの訓練**  
```python
import gym
import numpy as np
from stable_baselines3 import PPO

# 環境の作成（CartPole: 棒倒しゲーム）
env = gym.make("CartPole-v1")

# PPO（Proximal Policy Optimization）アルゴリズムで学習
model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=10000)

# 学習済みモデルで推論
obs = env.reset()
for _ in range(1000):
    action, _states = model.predict(obs)
    obs, rewards, done, info = env.step(action)
    if done:
        break
env.close()
```
この例では、AIが試行錯誤を繰り返し「棒を倒さないようにする」ことを学習します。AGIでは、**このような学習を複数タスクで汎用的に行える**ことが求められます。  

---

## **4. 実践的な課題とよくある失敗**  
### **（1）データバイアスと倫理問題**  
- **問題**: 学習データに偏りがあると、差別的判断をすることがある（例：採用AIでの性別偏り）  
- **対策**: 公平性評価指標（Fairness Metrics）の導入  

### **（2）計算リソースの莫大な要求**  
- GPT-3の学習には**355 GPU年**が必要と言われる。AGIではさらに膨大なリソースが想定される。  
- **対策**: 量子コンピューティングや省エネアルゴリズム（例：TinyML）の活用  

### **（3）制御不能リスク（AI Alignment問題）**  
- **問題**: AIが人間の意図を無視して暴走する可能性（「ペーパークリップ最大化問題」）  
- **対策**: Inverse Reinforcement Learning（IRL）で人間の価値観を学習  

---

## **5. 将来の展望：AGIは社会をどう変えるか？**  
### **可能性のあるシナリオ**  
- **ポジティブな影響**:  
  - 医療研究の加速（新薬開発、疾患予測）  
  - 気候変動対策の最適化  
- **ネガティブな影響**:  
  - 雇用喪失（ホワイトカラー職の自動化）  
  - AI兵器の自律運用リスク  

### **規制の動き**  
- 欧州AI法（EU AI Act）では、**「高リスクAI」**に厳格な規制を適用  
- OpenAIやDeepMindは、**AI安全性研究**に投資を拡大  

---

## **6. 結論：AGIは幻想か、現実か？**  
**✅ AGIのメリット**  
- 人類の生産性を飛躍的に向上  
- 複雑な社会問題の解決支援  

**❌ AGIのリスク**  
- 倫理的・安全保障上の懸念  
- 技術的ハードルの高さ  

現時点では、AGIは**「可能性はあるが未だ遠い」**技術です。しかし、その社会的影響を予測し、**倫理的な開発フレームワーク**を構築することが急務です。  

**「AGIを恐れるのではなく、正しく導く技術を目指す」**—それが我々エンジニアの役割ではないでしょうか？  

---

🔍 **さらに深く知りたい方へ**  
- 書籍: [「Superintelligence」Nick Bostrom](https://example.com)  
- 論文: [「Concrete Problems in AI Safety」OpenAI](https://example.com)  

**皆さんはAGIについてどう考えますか？** コメントで議論しましょう！ 🚀
ドア、センサ、ユーザ、Timing Diagram, plantUML



PlantUML
一目でわかるPlantUML
https://plantuml.com/ja/

PlantUML を使った UML の描き方
https://plantuml.com/ja/guide

シーケンス図
https://plantuml.com/ja/sequence-diagram

タイミング図
https://plantuml.com/ja/timing-diagram
```
@startuml
robust "ドア" as DOOR
robust "センサ" as SENSOR
concise "ユーザ" as WU

@0
WU is アイドル
SENSOR is アイドル
DOOR is アイドル

@+100
WU -> SENSOR : センサー圏内に侵入
WU is 待機
SENSOR is 処理中

@+100
SENSOR is 待機
SENSOR -> DOOR@+50 : 処理結果をもとに開く

@+100
DOOR is 処理中

@+100
DOOR is 待機

@+50
DOOR -> SENSOR@+50 : 確認処理 

@+50
SENSOR is 処理中

@+100
SENSOR is 待機
SENSOR -> DOOR@+50 : 処理結果をもとに閉める

@+100
DOOR is 処理中

@+100
DOOR is アイドル

@+50
SENSOR is 処理中

@+100
SENSOR is アイドル
SENSOR -> WU : 終了
WU is アイドル
@enduml
```

![SoWkIImgAStDuIhAJoejBb5GUjpS-RXfaP92Oh62Yxz_44AyQVVZvisFcxQ2fO9T_OA1aidvUScPnQaWNSiUD-zvtBGDB1iUoiNbOC0L7ggGMQm0DErnqnAGiSshkI3wC8H1Dc48SZbe6ng0JT6rWrgeOAK0TmVGlgTp-f-sjJvkNFratzQdhKkX5ZxTr_fivNmagvwsBti-eUt9ZhKm8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/ad1cf758-11c9-404a-b220-098e6ddafde4.png)
JavaScriptのforEach内でbreakができない理由【備忘録】

## 背景

社内でJavaScriptの反復処理について話が上がった際に、「`forEach` は `break` を使って抜けることができない」と聞きました。

なんとなくの理解しか持ち合わせていなかったため、この機会に `forEach` の仕様を見ながらどのような動作をするのか確認してみました。

## forEachについて

`forEach` は配列の各要素に対して、処理を実行するためのメソッドです。  
以下のように使うことができます

```js
const favoriteInstruments = ["ドラム", "ギター", "スティールパン"]

favoriteInstruments.forEach((instrument) => {
  console.log(`好きな楽器: ${instrument}`)
})
// 出力例: 
//   好きな楽器: ドラム
//   好きな楽器: ギター
//   好きな楽器: スティールパン
```

### 仕様について

for文は構文として定義されていますが、`forEach` はメソッドです。
[ECMA-262](https://ecma-international.org/publications-and-standards/standards/ecma-262/)の `forEach` の仕様を見てみるとこのようになっています。

```
1. Let O be ? ToObject(this value).
2. Let len be ? LengthOfArrayLike(O).
3. If IsCallable(callback) is false, throw a TypeError exception.
4. Let k be 0.
5. Repeat, while k < len,
    a. Let Pk be ! ToString(𝔽(k)).
    b. Let kPresent be ? HasProperty(O, Pk).
    c. If kPresent is true, then
        i. Let kValue be ? Get(O, Pk).
        ii. Perform ? Call(callback, thisArg, « kValue, 𝔽(k), O »).
    d. Set k to k + 1.
6. Return undefined.
```

これを見ると、対象の配列をループさせて `forEach` 内に書いた関数を**コールバック関数**として呼び出していることがわかります。

## コールバック関数

コールバック関数は別の関数に引数として渡され、その関数の中で後から呼び出される関数です。
「処理の一部を呼び出し元に委ねたい」という時に用いられます。

```js
function greet(name) {
  console.log("こんにちは、" + name + "さん！")
}

// greet をコールバックとして使う関数
function processUserInput(callback) {
  const name = "太郎"
  callback(name) // ここで greet("太郎") が実行される
}

processUserInput(greet)
// 出力: こんにちは、太郎さん！
```

## forEachでbreakが使えない理由

`forEach((item) => { ... })`の書き方は、書き心地がfor文に似ているため、一見するとループの中に処理を書いているように思えます。

しかし実際には `forEach` は関数であり、`(item) => { ... }`の部分は **関数を引数として渡している（＝コールバック関数）** という形になります。

つまり、以下のように書いているのと本質的には同じです。

```js
function callback(num) {
  console.log(num)
}

const array = [1, 2, 3]
array.forEach(callback) // callback を引数として渡している
```

このように、`forEach` の中に書いた処理は「関数の中身」なので、そこで `break` を使おうとすると、 ループではなく「普通の関数の中で `break` を使った」 ことになってしまいます。

JavaScriptでは、`break` はfor文などのループの中でしか使えないため、以下のようなコードはエラーになります。

```js
function callback(item) {
  if (item === 2) {
    break // エラー
  }
  console.log(item)
}

const array = [1, 2, 3]
array.forEach(callback)
```

また、無名関数を直接 `forEach` に渡した場合も同じで、関数の中に `break` を書いていることになるため、やはりエラーになります。

```js
const array = [1, 2, 3]
array.forEach((item) => {
  if (item === 2) {
    break // エラー
  }
  console.log(item)
})
```

## 終わりに

今回は[ECMA-262](https://ecma-international.org/publications-and-standards/standards/ecma-262/)の仕様から `forEach` を理解するアプローチをとってみました。
特に、`forEach` に無名関数を渡す場合は、構文が for 文に似ているため、for 文と同じように書けると誤解しやすいと感じました。

`forEach` に限らない話ではありますが、仕様を知っていないと思わぬ動作を引き起こす可能性があるため、普段何気なく使っているメソッドや構文についても、「どうしてこのような動作になるのか」という視点で掘り下げることが大切だと思いました。
文章作成用に古い端末でも使用できる絵文字を並べてみた 

皆さんは、文章作成に絵文字を使うことはありますか？

ちょっとした装飾や感情表現に便利な絵文字ですが、いざ使ってみると、**古い端末ではうまく表示されない**という問題が起こることがあります。

せっかくの絵文字が「□」のような表示になってしまっては、伝えたいニュアンスも損なわれてしまいます。

そこで今回は、**比較的古い端末でも表示される可能性が高い「Unicode 6.0」の絵文字**を、ただひたすら並べてみました。

文章作成の際に安心して使える絵文字を探している方に、ぜひご活用いただければ幸いです。

※このサイトは、動作の軽さを最優先に設計されています。そのため、ヘッダーやテーブルといった装飾要素は省かれ、文字列のみをシンプルに並べた構成となっています。GitHub Pages 側に問題がない限り、この手のサイトとしては、ほぼ最軽量の部類に入るはずです。

🔗 サイトはこちら：

[Unicode6.0 バージョン(基本はこちらからお選び下さい)](https://uni928.github.io/Unicode6AllString/)

[Emoji1.0 バージョン(文字数が多いため開くのが重いです)](https://uni928.github.io/Unicode6AllString/index2.html)

---

## ✅ 使い方

1. 上記のURLを開きます
2. 気になる絵文字があれば、**1文字だけコピーして使うだけ！**

 古いOSや端末環境でも表示されやすい絵文字なので、ビジネス文書やブログ記事など、幅広いシーンでの使用に向いています。

---
## 📝 参考にしたサイト 
https://qiita.com/9hnder/items/e4738b6058c60e87b7f4

---

以上、文字コード（絵文字）をただ並べただけのシンプルなサイトのご紹介でした。 

古い環境を考慮した文章作成の一助になれば幸いです。 最後までご覧いただき、ありがとうございました！

---

## 追記

この文章は ChatGPT で添削しています。
生成 AI の添削が嫌いな方は申し訳ありません。
かえるのうた　UML timing diagram

PlantUML
一目でわかるPlantUML
https://plantuml.com/ja/

PlantUML を使った UML の描き方
https://plantuml.com/ja/guide

シーケンス図
https://plantuml.com/ja/sequence-diagram

タイミング図
https://plantuml.com/ja/timing-diagram


```uml:kaerunouta
@startuml
title かえるのうた

robust "ド" as DO
robust "レ" as RE
robust "ミ" as MI
robust "ファ" as FA
robust "ソ" as SO
robust "ラ" as LA



DO is 離す
RE is 離す
MI is 離す
FA is 離す
SO is 離す
LA is 離す



@0
DO is 弾く
@20
DO is 離す
RE is 弾く
@40
RE is 離す
MI is 弾く
@60
MI is 離す
FA is 弾く
@80
FA is 離す
MI is 弾く
@100
MI is 離す
RE is 弾く
@120
RE is 離す
DO is 弾く
@140
DO is 離す



@160
MI is 弾く
@180
MI is 離す
FA is 弾く
@200
FA is 離す
SO is 弾く
@220
SO is 離す
LA is 弾く
@240
LA is 離す
SO is 弾く
@260
SO is 離す
FA is 弾く
@280
FA is 離す
MI is 弾く
@300
MI is 離す



@320
DO is 弾く
@340
DO is 離す

@360
DO is 弾く
@380
DO is 離す

@400
DO is 弾く
@420
DO is 離す

@440
DO is 弾く
@460
DO is 離す



@480
DO is 弾く
@520
DO is 離す
RE is 弾く
@560
RE is 離す
MI is 弾く
@600
MI is 離す
FA is 弾く
@640
FA is 離す
MI is 弾く
@680
MI is 離す
RE is 弾く
@720
RE is 離す
DO is 弾く
@760
DO is 離す

@enduml
```
![スクリーンショット 2025-06-11 141422.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/6c2cf5a7-503c-471d-bf20-a83aa934a844.png)
Applying UML and Patterns: 



Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, Third Edition
https://www.oreilly.com/library/view/applying-uml-and/0131489062/

>Content
Foreword
Preface
>1. Introduction
>2. Inception
>3. Elaboration Iteration 1—Basics
>4. Elaboration Iteration 2—More Patterns
>5. Elaboration Iteration 3—Intermediate Topics
>6. Special Topics
Bibliography
Glossary
Inside Front Cover
Praise for Applying UML and Patterns
Inside Back Cover
メモ

dynamodbの変換でglueを使う

```
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.dynamicframe import DynamicFrame
from pyspark.sql.functions import col, lit

# ジョブ初期化
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# 入力元の S3 パス
input_path = "s3://your-bucket/input/"
dyf = glueContext.create_dynamic_frame.from_options(
    connection_type="s3",
    format="json",
    connection_options={"paths": [input_path]}
)

# DataFrame に変換
df = dyf.toDF()

# すべての ymd.S を "20250611" に上書き
df_updated = df.withColumn(
    "Item",
    col("Item").withField(
        "ymd",
        col("Item.ymd").withField(
            "S",
            lit("20250611")  # ← どんな値でも固定値にする
        )
    )
)

# DynamicFrame に戻す
dyf_updated = DynamicFrame.fromDF(df_updated, glueContext, "dyf_updated")

# 出力先の S3 パス
output_path = "s3://your-bucket/output/"
glueContext.write_dynamic_frame.from_options(
    frame=dyf_updated,
    connection_type="s3",
    format="json",
    connection_options={"path": output_path}
)

job.commit()
```
テーブルに編集 ・削除ボタン追加/  削除・編集ボタン色設定追加

### 考え方

```php:
  スタイルに、編集 / 削除 ボタンの色を設定
  テーブル表示の関数に、編集・削除ボタン追加
  編集・削除ボタンを表示する設定 追加
  編集・削除ボタンが押された時の処理 追加
  編集・削除処理作成


  //code化すると
   //スタイルに、編集 / 削除 ボタンの色を設定
  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  <style>
    /* 削除・編集ボタンのスタイル 
    .delete-button {
        background-color: #dc3545; /* 赤色 */
    }

    .edit-button {
        background-color: #ffc107; /* 黄色 */
        color: black; /* 黄色には黒文字が見やすい */
    }
  </style>

             ↓
   //テーブル表示の関数に、ボタン追加
      <td>
        <button class="action-button edit-button">編集</button>
        <button class="action-button delete-button">削除</button>
      </td>
      `;
    tableBody.appendChild(row);
    
              ↓
  //編集・削除ボタンを表示する設定 追加
    const editButton = row.querySelector('.edit-button');
    const deleteButton = row.querySelector('.delete-button');
          ↓

  //編集ボタンが押された時の処理　追加
    editButton.addEventListener('click', () => {
      alert(`編集ボタンがクリックされました: ${data.name}`);
    });
        ↓

  //削除ボタンが押された時の処理 作成
  deleteButton.addEventListener('click', () => {
      alert(`削除ボタンがクリックされました: ${data.name}`);
      // 例: サーバーに削除リクエストを送り、成功したら行をDOMから削除
      // row.remove();
    });
```
timing diagram, UML, plantUML

PlantUML
一目でわかるPlantUML
https://plantuml.com/ja/

PlantUML を使った UML の描き方
https://plantuml.com/ja/guide

シーケンス図
https://plantuml.com/ja/sequence-diagram

タイミング図
https://plantuml.com/ja/timing-diagram

```
@startuml
<style>
timingDiagram {
  .sw {
    LineColor green
  }
  .pl {
    LineColor blue
  }
  .pl4 {
    LineColor red
    LineThickness 2
  }
}
</style>

clock clk with period 1

binary "SW3" as SW3 <<sw>>
binary "PL1" as PL1 <<pl>>
binary "PL2" as PL2 <<pl>>
binary "PL3" as PL3 <<pl>>
binary "PL4" as PL4 <<pl4>>

@0
SW3 is low
PL1 is low
PL2 is low
PL3 is low
PL4 is low

@0.5
SW3 is high
PL1 is high

@1
SW3 is low
PL1 is low
PL2 is high

@1.5
PL2 is low
PL3 is high

@2
PL3 is low
PL4 is high

@2.5
PL1 is high
PL4 is low

@3
PL1 is low
PL2 is high

@3.5
PL2 is low
PL3 is high

@4
PL3 is low
PL4 is high

@4.5
PL1 is high
PL4 is low

@5
PL1 is low
PL2 is high

@5.5
PL2 is low
PL3 is high

@6
PL3 is low
PL4 is high

@6.5
PL1 is high
PL4 is low

@7
PL1 is low
PL2 is high

@7.5
PL2 is low
PL3 is high

@8
PL3 is low
PL4 is high

@8.5
PL1 is high
PL4 is low

@9
PL1 is low
PL2 is high

@9.5
PL2 is low
PL3 is high

@10
PL3 is low

@enduml
```

![スクリーンショット 2025-06-11 135545.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/9d0496b3-9cec-4853-bdfb-20944a9bb8d9.png)
Railsのcreateアクションではmodel.newよりcurrent_user.models.buildを使うべき理由



Railsでオブジェクトを作成する際、次の2つの書き方がよく見られます：

```ruby
# A: 一般的な生成方法
@post = Post.new(post_params)
@post.user_id = current_user.id

# B: 関連付けを活用した生成方法
@post = current_user.posts.build(post_params)
```

結論から言えば、Userが所有するモデル（記事・投稿・コメントなど）を作成する場合はBの`current_user.posts.build`を使った方がいいです。これは記事(Post)に限らず、Userに属する任意のモデルに対して言えます。

---

## なぜ `.new` より `.build` を使うのか？

### それぞれの挙動の違い

| 方法                                      | user\_id の設定        | 特徴                  |
| --------------------------------------- | ------------------- | ------------------- |
| `Post.new(post_params)`                 | 自動設定されない（手動で設定が必要）  | 単体でオブジェクトを生成する      |
| `current_user.posts.build(post_params)` | `user_id` が自動で設定される | 親モデル(User)との関連付けを活用 |

---

## `.build` のメリット

### 1. user\_id を明示的に書かなくてよい

```ruby
# わざわざこう書かなくて済む
@post = Post.new(post_params)
@post.user_id = current_user.id
```

→ `.build` を使えば次の1行で済みます：

```ruby
@post = current_user.posts.build(post_params)
```

### 2. ActiveRecord の関連を活かせる

Rails では、モデル間の関連（has\_many / belongs\_to）を記述しておけば、以下のように親モデル経由で子モデルを自然に生成できます。

```ruby
class User < ApplicationRecord
  has_many :posts
end

class Post < ApplicationRecord
  belongs_to :user
end
```

この設計思想に沿って書くと、コードが **意図の見える、Railsらしい記述** になります。

### 3. セキュリティと責任の明確化

formから `user_id` を送信させるのではなく、**controller側でログイン中のユーザーに関連づける**ことで、意図しないデータの紐付けを防げます。




## セキュリティ観点：formから `user_id` を渡す危険性

フォームに `user_id` を含めると、悪意のあるユーザーが別の `user_id` を指定して送信することも可能になります。これは権限昇格（Privilege Escalation）の典型例です。

```erb
<!-- 悪意ある改ざんが可能なform例 -->
<input type="hidden" name="post[user_id]" value="999">
```

これにより、別のユーザーに属する投稿が作られるリスクがあります。

一方、コントローラーで `.build` を使えば、`current_user` に紐づけられるため、このようなリスクを**構造的に排除**できます。



## Railsらしさ：一貫性ある設計思想

Railsの設計思想は**明示的よりも宣言的**、**繰り返しよりもDRY**、**意図の明確化**といった原則に基づいています。

`current_user.posts.build` という書き方は、

* 誰が投稿を作っているのか
* その投稿がどのユーザーに属しているのか

といった情報をコードの見た目で自然に伝えられます。これは読みやすさ・保守性・バグの少なさに直結します。



## アンチパターンとの比較

### NG例：`.new` + `user_id` 手動設定

```ruby
@post = Post.new(post_params)
@post.user_id = current_user.id
```

**デメリット：**

* `user_id` の設定漏れのリスク
* テストやリファクタ時に誤って外れる可能性
* セキュリティ的に甘くなる（formに `user_id` を入れたくなる）

**構造的に脆い**コードになります。



## 使用例：Controller の create アクション

```ruby
class PostsController < ApplicationController
  def create
    @post = current_user.posts.build(post_params)

    if @post.save
      redirect_to @post, notice: "投稿が作成されました。"
    else
      render :new, status: :unprocessable_entity
    end
  end

  private

  def post_params
    params.require(:post).permit(:title, :body)
  end
end
```

---

## まとめ

* `.new` は `user_id` を自動設定しない → 手動で補完が必要
* `.build` は関連を活かして自動的に `user_id` を設定
* formで `user_id` を受け取らないためセキュリティ的にも堅牢
* Railsの思想に沿っており、読みやすくメンテナンス性が高い
timing diagram, PlantUML

PlantUML
一目でわかるPlantUML
https://plantuml.com/ja/

PlantUML を使った UML の描き方
https://plantuml.com/ja/guide

シーケンス図
https://plantuml.com/ja/sequence-diagram

タイミング図
https://plantuml.com/ja/timing-diagram

![スクリーンショット 2025-06-11 134027.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/c9f37ab1-1976-43fd-8486-9ddf7c8b3179.png)
https://www.analog.com/jp/resources/technical-articles/i2c-timing-definition-and-specification-guide-part-2.html

https://editor.plantuml.com/uml/

```plant:uml
@startuml
robust "SCL" as SCL
robust "SDA" as SDA

@0
SCL is High
SDA is idle

@+100
SCL is idle

@+100
SCL is High

@+100
SCL is idle
@+50
SDA is High

@+50
SCL is High

@+100
SCL is idle
@+50
SCL is idle

@+50
SDA is idle

@+50
SCL is High
@+50
SDA is High

@+50
SCL is High

@+150
SDA is idle
@enduml
```
![スクリーンショット 2025-06-11 134303.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/8e64ef1b-e7b4-44b1-84ec-907fabe7b348.png)
超AI（AGI）の社会インパクト：サム・アルトマン：救世主か、世界の脅威か？

# **AGIの衝撃：救世主か、世界の脅威か？ 技術者視点で考える人工汎用知能の未来**

## **1. はじめに：AGIがもたらす社会的インパクト**

近年、AI技術の進化は目覚ましく、特に**人工汎用知能（AGI: Artificial General Intelligence）**の可能性が注目されています。AGIとは、人間と同じように自律的に思考し、あらゆるタスクをこなせるAIを指します。OpenAIのサム・アルトマン氏のようなリーダーは、AGIを「人類の救世主」として位置づける一方で、そのリスクを懸念する声も強まっています。

本記事では、**技術者の視点からAGIの本質を解説**し、以下のポイントを掘り下げます。  
- AGIの技術的基盤（機械学習、大規模言語モデル、強化学習）  
- 実装例（PyTorchを使った簡単なAGIコンセプトモデル）  
- 開発時に直面する課題とベストプラクティス  
- AGIが社会・産業に与える影響  

---

## **2. AGIとは何か？ 技術的概要**

### **2.1 AGIとNarrow AIの違い**
- **Narrow AI（特化型AI）**：画像認識、翻訳など特定タスクに特化（例：GPT-4、AlphaGo）  
- **AGI（人工汎用知能）**：複数領域で自律的に学習・適応可能（例：人間レベルの汎用性）  

### **2.2 AGIを支える技術要素**
- **大規模言語モデル（LLM）**：GPT-4、Claude 3  
- **メタ学習（Meta-Learning）**：少ないデータで新しいタスクに適応  
- **強化学習（RL）**：環境との相互作用で最適化（例：DeepMindのAlphaStar）  

---

## **3. 実装例：PyTorchでAGIのコンセプトモデルを構築**

AGIの核心は「**複数タスクの統合学習**」です。ここでは、マルチタスク学習と強化学習を組み合わせた簡単なモデルを実装します。

### **3.1 マルチタスク学習モデル**
```python
import torch
import torch.nn as nn

class AGICore(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dims):
        super(AGICore, self).__init__()
        self.shared_encoder = nn.Sequential(
            nn.Linear(input_dim, hidden_dim),
            nn.ReLU()
        )
        # タスクごとのヘッド
        self.task_heads = nn.ModuleList([
            nn.Linear(hidden_dim, odim) for odim in output_dims
        ])
    
    def forward(self, x, task_id):
        shared_features = self.shared_encoder(x)
        return self.task_heads[task_id](shared_features)

# 例：画像分類（タスク0）と数値予測（タスク1）を同時に学習
model = AGICore(input_dim=100, hidden_dim=64, output_dims=[10, 1])
```

### **3.2 強化学習との統合（OpenAI Gym利用）**
```python
import gym
from stable_baselines3 import PPO

env = gym.make("CartPole-v1")
model_rl = PPO("MlpPolicy", env, verbose=1)
model_rl.learn(total_timesteps=10000)
```

---

## **4. 実践的な課題と回避策**

### **4.1 よくある課題**
- **Catastrophic Forgetting（破滅的忘却）**：新しいタスクを学ぶと以前の知識を失う  
  → **対策**：EWC（Elastic Weight Consolidation）やメモリ再生を導入  
- **倫理的リスク**：自律判断による意図しない行動  
  → **対策**：AIアライメント研究（報酬関数の慎重設計）  

### **4.2 ベストプラクティス**
- **シミュレーション環境でのテスト**（例：Unity ML-Agents）  
- **人間の監視ループ**を組み込む  

---

## **5. 応用：AGIが変える未来の産業**

### **5.1 ポジティブな影響**
- **医療**：個別化治療の最適化  
- **製造**：完全自律的な工場  
- **研究**：科学論文の自動生成と仮説検証  

### **5.2 ネガティブシナリオ**
- **雇用喪失**：ホワイトカラー業務の自動化  
- **セキュリティリスク**：自律型サイバー攻撃  

---

## **6. 結論：AGIはどうあるべきか？**

**✅ メリット**  
- 生産性の飛躍的向上  
- 複雑な社会問題の解決  

**❌ デメリット**  
- 制御不能リスク  
- 倫理的ジレンマ  

**今後必要な取り組み**  
- **技術者コミュニティのガイドライン策定**  
- **政府・企業間での規制フレームワーク**  

AGIは「**ツール**」であり、その影響は開発者次第です。技術者として、責任ある開発を目指しましょう！  

---

**🔗 さらに学ぶためのリソース**  
- [OpenAI Blog](https://openai.com/blog)  
- [DeepMind Research](https://deepmind.com/research)  


この記事が、AGIの可能性と課題を考えるきっかけになれば幸いです。皆さんの意見もコメントでお聞かせください！ 🚀
Amazon Q developer CLIでマウスで円を描くゲームを作ってみた 

## はじめに
* こちらのキャンペーンをきっかけにして、**Amazon Q Developer CLI**をインストールして、ゲームを作ってみた
    
https://aws.amazon.com/jp/blogs/news/build-games-with-amazon-q-cli-and-score-a-t-shirt/


## やること
* ゲームを作る
* 作成したものについてブログを書くか、ビデオを作成する
* ハッシュタグ #AmazonQCLI を付けて SNS で公開投稿する
* 応募フォームに書く
* **新しいことを学び、プロセスを楽しむ**



## 実際に作っていく
### 指示した事
```
Pygameで、プレイヤーが画面上で色のついた円を描き、描いた軌跡に沿って色の波紋が広がっていくゲーム。美しいパターンを描くとボーナスポイントが入る。時間制限内にどれだけ美しい「滑らかな円」を作れるかを競うといったゲームを作成して
```
* その後何度も何度も改修を加え、出来たゲームが以下


### スタート画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045441/19f74315-6eb5-4db5-b25c-80e00bc38ea7.png)


### ルール
1.マウスで円を描く - より完璧な円ほど高得点！
2.数字キー1-7を押して色を変更
3.複数の色を使ってボーナスポイントを獲得
4.時間内にできるだけ多くの美しい円を作成
5.スコアを最大化するため、滑らかで丸い形を目指す

### 作成したゲーム動画
![Color_Symphony.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045441/486191f9-cb32-4c47-a3e8-1e03af23307b.gif)



## さいごに
* 神経衰弱のゲームから入り、神経衰弱のカードをAWSサービスにして、さらにそのサービスの問題に流れていくカードゲームを作るところからスタート
* 新しいゲームを作り出すための創造性と想像力と言われたがこれがまた難しいい
* 難しく考えすぎたのか、アイデア出しって重要だと感じる
* 何度も修正を自然言語で加え、その都度いい感じで修正をしてくれることに感動
* その変更点を視覚的に見ることが出来ることに感動
* なにより **「新しいことを学び、プロセスを楽しむ」** という事を感じることができた
マンガで分かる Java入門講座を読んで

:::note info
環境変数
:::
・各種アプリケーションが参照できる「環境変数」と呼ばれる情報
・PATH登録したフォルダにある実行ファイル（EXEファイル）は
　コマンド プロンプトにファイル名を入力するだけで実行できる

 :::note info
pathが通っているか確認
:::
　［Win］+［R］で、「ファイル名を指定して実行」ダイアログを表示させる。
　［名前］に「cmd」と入力して［Enter］キーを押す。
　「コマンドプロンプト」が表示される。
　「javac -help」と入力して「Enter」キーを押す。
　パスが通っていれば、ヘルプの内容が表示される。
　表示されない場合はパスが通っていない。

:::note info
path
:::
 「コントロールパネル」を表示させる。
 ［表示方法］を「小さいアイコン」に変更する。
 ［システム］を選択する。
 「システムの詳細設定」をクリックする。
 「システムのプロパティ」ダイアログが表示される。
 ［詳細設定］タブの［環境変数］ボタンを押す。
 「環境変数」ダイアログが表示される。
 「システムの環境変数」の［Path］を選択して［編集］ボタンを押す
  （もしない場合は［新規］ボタンを押して［Path］という変数を作る）。
 「システム変数の編集」ダイアログが表示される。
 ［変数値］の入力欄の『末尾』に、インストールしたJDKのパスを追加する。
  その際「;C:\Program Files\Java\jdk1.7.0_XX\bin」のように
  冒頭にセミコロンを入れる。
  このセミコロンでパスが区切られている。セミコロンを入れないと、
  システムに問題を引き起こす。
 ［OK］ボタンを押す。

:::note info
Eclipse文字化けしないように設定
:::
　「Eclise」の［パッケージ・エクスプローラー］で、対象となるソース
　（Cui.java　など）を右クリック。
　メニューが表示されるので［プロパティ］を選択する。
　「～.javaのプロパティ」ダイアログが表示される。
　左側のメニューから［リソース］を選ぶ。
　［テキスト・ファイル・エンコード］の設定で［その他］にチェックを入れる。
　［その他］のリストの中から「MS932」を選択する。
　［OK］ボタンを押す。
【Rails初学者】Rails初学者が「before_actionで変数セットはつらいよ」を読んだ

# Rails初学者が「before_actionで変数セットはつらいよ」を読んで気づいたこと
最近、このスライドをご紹介いただき、読んでみました。

[before_actionで変数セットはつらいよ](https://speakerdeck.com/shinkufencer/how-to-using-before-action-with-happy-in-rails)

タイトルを見て、ちょっと衝撃的でした。

> **「before_actionで変数セットはつらいよ」**

最初は不思議に思ったのですが、  読んでいくうちに「これはたしかにつらいかも」と思ったので、初学者の学びをまとめてみます。

---

## before_actionって、こういうやつ

```ruby
before_action :set_post, only: [:show, :edit]

def set_post
  @post = Post.find(params[:id])
end
```
よく見かける書き方で、「事前に`@post`をセットしておいて、アクションの中ではそれを使おう」というもの。
これを見て「共通処理は`before_action`で書くものである」と思いました。

## 変数が増えるとごちゃごちゃしてしまうようです
例えば、こんな感じでどんどん増えていく
```ruby
before_action :set_post
before_action :set_new_arrival_posts
before_action :set_relation_posts
before_action :set_pickup_post
before_action :set_recommend_posts
```
見た目がゴチャゴチャしてきてしまうようです。
変数同士が依存してると順番にも気をつけないといけないことを知りました。

## スライドに書いてあった答えは

:::note warn
before_action でやらない
:::


つまり、アクションの中で必要な変数を直接書けばいいってことのようです。

## 実際に書いてみる
```ruby
def show
  @post = Post.find(params[:id])
  @new_arrival_posts = Post.new_arrival_posts(@post)
  @relation_posts = Post.relation_posts(@post)
  pickup_post = Post.pickup_post(current_post: @post, new_arrival_posts: @new_arrival_posts)
  @recommend_posts = Post.new_arrival_posts(pickup_post)
end
```
- `pickup_post`はインスタンス変数にしなくてもよい
- アクションの中で全部見えるから、読みやすい
- コードを探さなくても、ここだけで何してるか分かる

初学者の私にはすごくわかりやすい書き方でした。

## まとめ
- `before_action`は便利だけど、使いすぎると逆に大変
- 変数の依存関係や順番を意識する必要がある
- 必要な変数はアクションの中で書いた方がシンプルでわかりやすいこともある

## 参考
[before_actionで変数セットはつらいよ – Speaker Deck](https://speakerdeck.com/shinkufencer/how-to-using-before-action-with-happy-in-rails)

------
初学者のため、記事の内容が間違えている場合もあります。
💻 Qiita版：プログラミング初心者がGitHubで学習ログを残すべき5つの理由



📎 本記事の詳細・体験を含むロングバージョンは usagipy.comのブログ に掲載しています。
https://usagipy.com/github-motivation-log

## 1. 学習の可視化：「草」がモチベーションになる

GitHubの草（Contribution Graph）は、コミットや活動を記録し、**視覚的に「続けた証拠」**を残せます。
 
成果が見えることでやる気が出る

タイムラインでは流れてしまう学習記録も保持できる

特に初心者は「見える達成感」が大きな支えになります。

## 2. Google Driveと違い、バージョン管理ができる

Driveでは過去のファイルを手動で保存・整理する必要がありました。

GitHubを使えば：

ファイルの変更履歴が自動で記録される

差分を確認できる

いつでも過去に戻せる（タイムマシン的）

## 3. コミットメッセージが未来の自分へのメモになる

些細な修正も「何を、なぜ」したかをメモしておくことで、数ヶ月後に自分の思考を再確認できます。

例：

fix: ログイン時のバリデーション不具合修正
add: READMEにインストール手順追記

## 4. GitHubは完璧じゃなくても使える

READMEだけでもOK

Privateで非公開もOK

ブランチを使いこなせなくても大丈夫

初心者こそGitHubを**「練習場」「思考の記録場所」として活用**すべきです。

5. 比較ではなく、自分の目的を忘れない

GitHubを「他人に見せるため」に使うと疲れます。

モチベーション維持には：

草の数より、**「なぜ記録するのか」**を意識

自分用の記録・日記感覚でOK

## まとめ

GitHubは学習記録・成長の可視化・思考の保存にとって最適なツールです。

初心者でも安心して使える機能が揃っており、「進んだ証拠」を静かに残せる場所になります。

📎 詳細な体験と補足はこちら：https://usagipy.com/github-motivation-log
macOS移行アシスタントでChromiumが消えたときの復旧ログ

## 概要

M1 Pro搭載のMacBook Pro（2021）からM4 Pro搭載モデル（2024）への移行に際し、macOS標準の移行アシスタントを使用して環境を引き継いだ。Chromiumが移行後の環境から消失していた。原因と対処法を整理し、Gatekeeper回避を含む一連の再構築手順を記録する。

## 背景と目的

Chromiumは、環境移行後も即利用したかったアプリの一つである。移行アシスタントでその他の設定やアプリが問題なく移行されたにもかかわらず、Chromium.app だけが見当たらず起動不可となっていた。この事象に対して、原因の切り分けと復旧作業を行った。

:::note
まさかの落とし穴 🕳️
:::

## 対処方針と手順

### 1. Homebrewの確認

```bash
brew list --cask
````

* `chromium` の記載なし → インストールされていないと判断。

### 2. Chromiumの再インストール

```bash
brew install --cask chromium
```

### 3. Gatekeeperによる起動拒否

* 初回起動時に以下の警告が表示された：

  > "Chromium.app" は壊れているため開けません。ゴミ箱に入れる必要があります。

### 4. Gatekeeperフラグの削除

```bash
xattr -d com.apple.quarantine /Applications/Chromium.app
```

### 5. 再起動と設定の引き継ぎ

* 再起動後、正常に起動。
* ユーザープロファイル（履歴、拡張、ブックマークなど）も `~/Library/Application Support/Chromium/` から自動で復元された。

## 結果

* Chromiumは正常に再インストール・起動できた。
* 個人設定はすべて保持されており、以前の環境そのままで使用可能。
* Gatekeeperの警告は `xattr` で一度処理すれば、以後出ない。

## 所見と教訓

* 移行アシスタントは、**Homebrew経由で導入された署名のないアプリケーション**をスキップすることがある。
* ChromiumはGoogle Chromeと異なり、オープンソース版で署名されていないため、Gatekeeperに引っかかりやすい。
* `xattr` による検疫解除は、Homebrew由来のGUIアプリで再発する可能性があるため、覚えておくと役に立つ。
* 一方でユーザーデータは正しく移行されていたため、**アプリさえ復元できれば元通りになる**。

## 使用環境と構成

* **旧端末**：MacBook Pro 14-inch (2021) / M1 Pro / macOS 15.4.1（Sonoma）
* **新端末**：MacBook Pro 14-inch (2024) / M4 Pro / macOS 15.5（Sonoma）
* **移行方式**：Thunderbolt直結による移行アシスタント使用（ユーザーアカウント全体）
* **Chromium取得方法**：Homebrew Cask

```bash
brew install --cask chromium
```

* **Gatekeeper解除方法**：

```bash
xattr -d com.apple.quarantine /Applications/Chromium.app
```

* **設定保存ディレクトリ**：`~/Library/Application Support/Chromium/`

参考（移行前準備）：[データと向き合い、Mac移行の最適解を探す旅：あるMacユーザの試行錯誤](https://qiita.com/hann-solo/items/42d4a3ab945bc8b5a3f8)