OmniAICreator/Qiita-1.07M huggingface dataset:
Pascal, Go,Rustによるfactor


PascalによるPrimeFactorizationです。AI Code Converterで変換しました。
Pascalは可変長配列(vector)が使えないので、Cで書いたソースをAI Code Converterに掛けました。

PASCAL Compilerのインストール to Archlinux: `sudo pacman -S fpc`
compile: `fpc factor.pas`
使い方：`factor <n>`


```factor.pas
program PrimeFactorization;

uses sysutils;

function PrimeFactorization(num: Integer; var arr: array of Integer): Integer;
var
  i, j: Integer;
begin
  i := 2;
  j := 0;

  if num = 0 then
    exit(0)
  else if num = 1 then
    exit(0);

  while num <> 1 do
  begin
    if num mod i = 0 then
    begin
      arr[j] := i;
      num := num div i;
      j := j + 1;
    end
    else
      i := i + 1;
  end;

  PrimeFactorization := j;
end;

var
  arr: array[0..9999] of Integer;
  n, nop, i: Integer;

begin
  n := StrToInt(ParamStr(1));
  nop := PrimeFactorization(n, arr);

  Write(n, ' : ');
  for i := 0 to nop - 1 do
    Write(arr[i], ' ');
  Writeln;
end.

```

### go

こちらはgoによる、factorです。goではsliceが使えるので、pythonで書いたコードをAI Code Converterに掛けました。

```factor.go
package main

import (
    "fmt"
    "os"
    "strconv"
)

func PrimeFactorization(n int) []int {
    i := 2
    j := 0
    var f []int

    if n == 0 {
        return []int{}
    } else if n == 1 {
        return []int{1}
    }

    for n != 1 {
        if n%i == 0 {
            f = append(f, i)
            n = n / i
            j = j + 1
        } else {
            i = i + 1
        }
    }

    return f
}

func main() {
    args := os.Args[1:]
    if len(args) < 1 {
        fmt.Println("Please provide an integer argument")
        os.Exit(1)
    }

    n, err := strconv.Atoi(args[0])
    if err != nil {
        fmt.Println("Invalid input. Please provide a valid integer")
        os.Exit(1)
    }

    f := PrimeFactorization(n)
    fmt.Println(n, ":", f)
}

```

golang install to arch linux: `sudo pacman -S go`
compile: `go build factor.go`
execution: `./factor N`

#### Rust

こちらはRustによるPrimeFactorizationです。可変長配列にvectorを使ってます。

```factor.ru
fn prime_factorization(n: i32) -> Vec<i32> {
    let mut i = 2;
    let mut f: Vec<i32> = Vec::new();

    if n == 0 {
        return Vec::new();
    } else if n == 1 {
        return vec![1];
    }

    let mut num = n;
    while num != 1 {
        if num % i == 0 {
            f.push(i);
            num /= i;
        } else {
            i += 1;
        }
    }

    f
}

fn main() {
    let args: Vec<String> = std::env::args().collect();
    if args.len() < 2 {
        println!("Please provide an integer argument");
        std::process::exit(1);
    }

    let n: i32 = match args[1].parse() {
        Ok(num) => num,
        Err(_) => {
            println!("Invalid input. Please provide a valid integer");
            std::process::exit(1);
        }
    };

    let f = prime_factorization(n);
    println!("{}: {:?}", n, f);
}
```

compile: `rustc factor.ru`
execution: `./factor N`
CKAD（Certified Kubernetes Application Developer）受験談＆学習方法

## 概要
2024年11月17日にCertified Kubernetes Application Developerの試験を受けて合格しましたので、学習したこと等を情報共有として書いていきます。
合格基準66点のところ、1回目が52点でした不合格、2回目は82点で合格でした〜
実は1回目と2回目の間に受験して、試験問題のエラーのため試験を中止させたんですよね～対応は疲れました。
以前からKubernetesをいじっていましたが、業務で携わったことがなかったので、誰にでも分かる指標が欲しくて受験したのが目的ですかね〜とりあえず、いつでも案件に参画できる準備という側面もありますかね。

## 前提の知識と経験
Kubernetesは業務で使ったことはないです。
一応、書籍や動画を購入して手元の端末で動かしたりと自主的に学習を続けてはいました。
いつから勉強していたか調べるとエンジニアになる前の2019年くらいからでしたね～
コンテナオーケストレーションという意味では、AWSのECSを業務で設計・構築していたので、その辺りはなんとなく把握しているところでした。

## 学習期間
今回も大体2ヶ月くらいで、平日は1日2〜3時間、休日は5〜6時間くらいです。これまでの試験と変わらず。

## 学習教材
### 1. Kubernetes Certified Application Developer (CKAD) with Tests
Udemyの動画教材で、合格記事を読むとほとんどの人が、これを見ていましたね～あとkodekloudというサービスで模擬試験を受けることができるので嬉しいです。

https://www.udemy.com/course/certified-kubernetes-application-developer

### 2. Kubernetes完全ガイド 第2版
Kubernetesの機能が網羅された本になります。全般的に学べる本でガイド的に使えるけど、CKADの範囲としては、第4章〜第10章あたりを把握できればOKかなと。

https://www.amazon.co.jp/Kubernetes%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC2%E7%89%88-Top-Gear-%E9%9D%92%E5%B1%B1/dp/4295009792

### 3. Killer Shell
CKAD試験を購入すると2回分付いてくる模擬試験で、本番と似ている環境で操作できます。
本番に比べて、少し難しいくらいかなと。
PSIのセキュアブラウザの操作を少しでも慣れるために試験の直前にすることをオススメします。

## 本番試験
### 1回目（不合格）
試験中にKubernetesのドキュメントを読めるので、読みながら解けば良いという甘い考えで挑みましたが、それが間違いでした。
全部で16問あり、2時間以内で解かなければなりませんが、ドキュメントを読みながらYAMLファイルに定義を書きつつ進めていたら、7問目の時点で1時間30分経っていました。
時間配分、本当に大事です。
その後、急いで進めてみましが、時間切れ。
想定通り、不合格。

### 2回目（中止）
前回の失敗を振り返り、できる限りコマンドで対応して、ドキュメントを読まなくても良いように記憶して挑みました。ドキュメントは本当に分からない時に読む程度。
ただ、テスト側のエラーにより開始30分くらいで中止になりました。
1問目からsshで問題用のホストにアクセスできず、試験管にヘルプを要求。
2〜6問目を続けて解いていましたが、7問目も同様にsshでアクセスできなかったので、試験中断を要求。
システムのエラーが判明し、再試験に。
ここまでの対応が全部英語だったので、骨が折れましたね〜

### 3回目（合格）
3回目となるとテスト前の緊張もなく、16問の問題を30分くらい時間を残して解き終えました。
大体できたかなぁと思っていたので、どこが間違っていたか教えて欲しい。

## 最後に
AWS SAPとDOPを取得した後は、なんとなくCKADかCKAを取ろうと考えていましたので、とりあえず良かったです。
試験を通して体系的にKubernetesを学習できたので、仕様の認識の解像度がちょっと上がったかなと感じています。あと手を動かす試験というのが楽しかったですし、基礎的なスキルも必要でしたので、AWSの試験よりスキルアップ感はありましたね。
でも、所詮テストですので、業務としてKubernetesに携わっているメンバーに比べたらまだまだ足りないなぁ。
とりあえず、次かな。
初の個人開発

## はじめに

今回は初めて個人でWEBサービス[プロ野球投手VS野手対戦成績検索サービス](https://baseball-pitcher-vs-batter.com/)をリリースしました。まだまだ改善点はあるものの、ひとまず形にはなったので、開発した経験について紹介します。少しでも参考になれば幸いです。

## 自己紹介
- 27歳
- 大卒(化学系)
- 公務員：1年半
- エンジニア：3年(現在)

## サービスの内容
プロ野球の特定の投手と野手の対戦成績を検索できるWEBアプリです。
年度やチームを絞り込んで検索可能です(通算検索などいくつかの検索ができます)。
![スクリーンショット 2024-12-08 20.17.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3933685/594d5c75-e3fe-c9e9-26ef-09e9213dea9a.png)
打率やOPSなどの検索結果をチームと打席数順に表示します。
選手のリンク押下で、NPBの選手紹介ページに遷移します。
![スクリーンショット 2024-12-08 20.18.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3933685/f6f5b063-f83e-a93f-cebb-7a1366a8e53b.png)


## なぜ作ったか

日々の仕事では設計、実装、テスト、リリースの工程をアジャイル開発で繰り返してきましたが、全体の開発プロセスを経験したことがありませんでした。そのため、個人開発を通じて、開発プロセス全体を経験し、知識を深めることを目標にしていました。

自分が興味を持って取り組める題材にしたく、好きな野球をテーマにすることにしました。中継中に紹介される「投手と野手の対戦成績」を自分でも簡単に調べられたら野球をもっと楽しめるのではと考え、このシステムを作ることにしました。また、同様のサービスがほとんどなかったため、開発をスタートしました。

## 使用技術

このサービスでは以下の技術を使用しました

- **バックエンド**：Java、Spring Boot
- **フロントエンド**：Vue.js、JavaScript、Bootstrap、HTML、CSS
- **データベース**：MySQL
- **インフラ**：Heroku(basic)、RDS、CloudFlare

## 簡単な設計の紹介

- **フロントエンド**：Vueのcomputedやwatchを利用し、選手のプルダウンは選択した年度とチームに応じて動的に変化させました。multiselectをカスタムし、漢字やひらがなでプルダウンの選択肢を絞り込み可能にし、空白の有無も許容しました。
- **バックエンド**：ストリームやラムダ式の活用、ロジックの分離をして保守性を高めました。セキュリティの向上も意識し、 cros設定などでエンドポイントの設計に注力しました。入力値のバリデーションチェックやPreparedStatementを使用してセキュリティの向上に努めました。また、データベースのインデックスを適切に付与し、初期表示と検索の処理速度を向上させました。
- **データ更新**：SpringのScheduledアノテーションを用いてNPB公式の試合結果を日次でスクレイピングし、常に最新の情報を提供しています。
- **ER図**：今後の改修に合わせて修正予定
![スクリーンショット 2024-11-16 14.02.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3933685/a124e10b-9c08-de14-5727-c772e5008cfc.png)

## 課題

個人開発を通じて、以下の課題が見えてきました

- **インフラの知識不足**：Heroku、RDS、CloudFlareを用いて簡易的にインフラ構築を行いました。インフラに関する知識があれば、よりパフォーマンス、セキュリティ、コスト面を考えられたインフラ設計ができたと感じています。
- **データ依存**：NPB公式サイトの構造に依存しているため、サイトの変更があった場合には改修が必要です。ただし、2005年以降大きな変更は1度のみなので、頻繁な対応は必要ないと見込んでいます。

## 改修

今後、以下の改修を行いたいと考えています

- **インフラ改善**：AWSなどのインフラ周りの知識を深め、パフォーマンス向上を図りたい。
- **機能追加**：一球ごとのデータを取り込み、投手と野手の得意・苦手ゾーンを可視化するなどの機能を実装したい。

## 今後（おわりに）

今回の個人開発を通じて、「自分が作りたいサービスを作る」という楽しさを再認識しました。
事前の調査不足(スクレイピングするサイトの構成理解やインフラ周りでの使用技術選定)により手戻り作業が発生したため、開発前の下調べや要件定義の重要性を改めて実感しました。また、開発中に新機能のアイデアが次々と浮かんだ結果、仕様が二転三転してしまったので、最初にプロジェクト範囲を明確にすることも大切だと感じています。

さらに、今回の経験を通して、野球データを扱う中で統計や分析手法への関心が一段と高まりました。単純な成績表示から一歩踏み込んで、統計学的知見や機械学習的アプローチを取り入れることで、データから得られる情報は格段に増えると感じています。今後はインフラ周り等の上流工程のスキルに加え、統計・分析技術を磨き、幅広い知識を提供できるエンジニアを目指したいと思います。

以上、初めての個人開発を通じての学びと経験です。最後までお読みいただきありがとうございました！!

---

Qiitaでの初投稿、温かいコメントやフィードバックをお待ちしています！
【Python・Pysparkで学ぶ】データ分析【概要】

# 【データ分析】
　データのインプットからアウトプットまでのエンジニアリングをする人をデータサイエンティストといいます。
 その人材の能力は3つ。(一般社団法人データサイエンティスト協会 [■ ](https://www.datascientist.or.jp/common/docs/skillcheck_ver3.00.pdf))
 1. データエンジニアリング力
 2. ビジネス力
 2. データサイエンス力

　データサイエンティストに必要な能力に、データサイエンス力が挙がるって分類間違ってる気がしますが。。。恐らく、データサイエンス力が主力で、データエンジニアリング力とビジネス力が助力という解釈で良いと思います。
# ■ 結論
　今後ほとんどの分析はBIツールで十分になる。したがって、データエンジニアリング力『だけ』を磨いた人材は経営上の負担になる。
　一方で、データサイエンス力、ビジネス力を磨いた人材は、『検証力』という側面でBIツールの上位互換の位置付けになり、経営上の資産になる。

# ■ AsIs(環境)
　近年のデータサイエンスは以下の2つの手順のうちどちらかを採用しているケースが多い。

### 『ケース１SaaS利用』
➀分析対象とするデータを用意しBIツールに取り込む
➁AIに処理方法を聞く
➂BIツールで処理＆可視化
メリット：BIツールとAIといったSaaSを活用し、低コスト且つ俗人性が低い。
デメリット：チーム内にデータエンジニアリングのナレッジが貯まらず、IT人材が育ちにくい。

### 『ケース２分析官採用』
➀分析対象とするデータを用意しクラウドに取り込む
➁アウトプットイメージを作成
➂スクリプト作成
➃スクリプトアウトプットを可視化
メリット：チーム内にデータベース・データエンジニアリングのナレッジが貯まる。
デメリット：専門性の高いIT人材が必要となり、マネージャーを含む人件費が相当高い。

# ■ AsIs(当事者)

### 経営視点
　「人件費」と「ソフトウェア(10万円以上/年)」の比較を行います。
・人件費は費用です。
・ソフトウェアは(無形固定)資産です。
　ソフトウェアは貸借対照表に資産として掲載できるため、ステークホルダーの受けが良いです。
　ソフトウェアはスケールしたい場合、ライセンスランクアップやソフトウェアの買い替えで対応できるため、可能な限り、人を雇わずソフトウェアを採用したい。

### データサイエンティスト視点
　「自分」と「ソフトウェア(10万円以上/年)」の比較を行います。
・データエンジニアリング力はBIツールの方が強い。
・データサイエンス力はAI系SaaSの方が強い。
　したがって、データ分析官の既存のバリューは今後相対的に低下していきます。AIの方が自分よりロジカルですしね。
　一方で、今後もAI系SaaSのアウトプットに不安は消えません。なぜなら、人とAIはインプットが異なるからです。人はマネージャーの下で業務経験をインプットし、AIはビッグデータをインプットします。
　ビジネスは公共の一般性と局所的な特殊性のグラデーションがあります。

# ■ ToBe
###　ビジネスは公共の一般性と局所的な特殊性のグラデーション
 このグラデーションに関する解像度が高い役割に、特殊性を持つデータを加工し一般性を持たせてほしいというニーズがあります。
 データサイエンティストは自身の専門性に新しい能力を磨くことでこのニーズに応えることができます。
 それが次の「検証力」です。

#### 新しいバリュー
　BIツール・AIを検証する能力「検証力」
　今後データサイエンティストとしてキャリア歩むためには、検証力を磨く必要があります。

# ■ Purpose
　本稿の目的は、データサイエンティストとしてバリューを出すための基礎能力をお伝えします。
Outlook VBAで何ができるか

OutlookVBAについて学習しようとしても、日本語の書籍は数冊程度しかありません。私自身が実際に読んだ書籍でいうと下記のものがあり、どちらの内容も良かったです。
※どちらもAmazonへのリンクですが、アフィリエイトは利用していません。

+ [Excel VBAユーザーのためのOutlook VBA入門 (技術の泉シリーズ）](https://www.amazon.co.jp/Excel-VBA%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEOutlook-VBA%E5%85%A5%E9%96%80-%E6%8A%80%E8%A1%93%E3%81%AE%E6%B3%89%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%EF%BC%88NextPublishing%EF%BC%89-%E4%B8%80%E6%88%B8-ebook/dp/B09GVQPWR3)
+ [Outlookビジネスメール効率化＆自動化の教科書](https://www.amazon.co.jp/Outlook%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%83%A1%E3%83%BC%E3%83%AB%E5%8A%B9%E7%8E%87%E5%8C%96-%E8%87%AA%E5%8B%95%E5%8C%96%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E4%BC%8A%E8%B3%80%E4%B8%8A-%E7%9C%9F%E5%B7%A6%E5%BD%A6/dp/4297130122)

『Outlookビジネスメール効率化&自動化の教科書』の方は、VBAに限らず効率化のテクニックが記載されているので、会社のメーラーがOutlookの方は、一度読んでみるのをおすすめします。

:::note warn
なお、OutlookVBAは、WEB版のOutlookでは利用できませんので、その点ご留意ください。
また、Outlook2024ではVBAは利用できず、VBAが利用できるOutlook2021も、サポート期限が決まっています。
あなたの職場でも、いつOutlookVBAが利用できなくなるか分からないため、これからOutlookVBAで業務改善をしていくぞ！というのはお勧めしません。（開発に投下した時間が回収できない可能性が高くなります。）
:::

しかし、OutlookVBAはExcelVBAと比較するとマイナーなので、実際にどんなことができるかイメージがつかない方も多いと思います。書籍等を購入して勉強してみる前に、例えばどんなことができるかを紹介します。

# １．送信時に宛先や添付ファイル等をチェックする
メール作成途中に、メールの送信ボタンを押下したり送信のショートカットキーを誤って押してしまい、作成途中のメールが送信されてしまったことはありませんか？
そういった事例を防止するために、送信時のイベントマクロで、宛先や添付ファイルの有無等をメッセージボックスに表示して、本当に送信してよいかポップアップボタンを表示することができます。
（ただし、これはOutlook VBAを利用しなくとも、「仕訳ルールと通知の管理」で送信する時間を指定時間（例えば１分）遅延させて、指定時間過ぎるまでは送信取り消しすることができるような設定で防止することも可能です。）

また、メール送信時に自動実行するマクロでいうと、下記のようなこともできます。
・宛先のメールアドレスに重複がないか（同一アドレスが２以上含まれていないか）チェックする
・メール本文に指定した禁止語句（例：合併して社名変更した取引先の旧社名）が含まれていないかチェックする

上記マクロを、送信時に自動実行するように設定しておけば、過去メールをコピーしてメールを送信しようとしたときに、メール本文や宛先で手動で変更が必要な箇所を実際に送信する前に発見することができます。

１．に関する具体的なコードは、noteの有料記事にはなりますが、[こちらの記事：【note】OutlookVBAの誤送信防止マクロ](https://note.com/keiri_info/n/n30ad61f5ed95)で紹介しています。（途中までは無料で読めます。）

# ２．予定表の登録
Outlookの予定表を開いた状態で、特定の日付を選択した状態で、クイックアクセスツールバーに登録したマクロを実行し、選択していた日に予定を登録します。
例えば、有給休暇の予定など何回も繰り返し登録するようなものをボタン一つで登録できるようにすると便利です。（手作業でもそこまで時間はかかりませんが、件名や終日の予定や分類項目等を設定するのは面倒なのでボタン一つで作業できるようにしています。）
具体的なコードは[こちらの記事：【Qiita】Outlook予定表にVBAで有給休暇等の予定を登録するマクロ](https://qiita.com/nanashi0424/items/18f745537802694567a5)で紹介しています。

# ３．下書きメールの本文を変換する
下書き中のメールに、別のファイル等からコピーペーストしたままだと、コピペした部分以外のフォントやフォントサイズとその部分だけ違ってしまうことがあると思います。
そんなときは、マクロで、自分がいつも使用しているフォントとフォントサイズに統一すること等ができます。
その他に、メール本文に対するものですと、半角カタカナを全角カタカナに変換するといったことも可能です。


以上、いかがでしたでしょうか。
よろしければ、コメントで感想をいただけると励みになります。
文系会社員がC#を一から学習する備忘録

-----2024/11/16-----

Try.Parse()メソッドの使い方



```cs
int.TryParse(textBox.Text, out value);
```
どのデータ型に変換したいのかを記述（int)
第1引数には変換したい引数(textbox.Text)
第2引数には変換した値を格納する変数を記載(value)←変換可能なら自動的に格納される
（outを記載することで、メソッドから返される値がvalueに格納されるようになる）
Tips #021 Patch関数を使ってキャンバスアプリのフォームからリストに新規アイテムを追加したいゾ

https://qiita.com/Novskiiiiiiiiii/items/fe6d5ca4128b99ca2b12

「キャンバスアプリを使ってリストにアイテムを追加したい！」

思春期の高校生ならだれもが一度は思うこの憧れ。とてもよくわかります。
僕も当時は親にも言えず、ひとり悶々としていたのを思い出します。

今回はそんな若者の悩みを解消すべく、アラフォーのおじさんが立ち上がりました。
というしょーもない前置きはさておき、Patch関数に苦戦しました、という話。

関数の説明はいたってシンプル。

        Patch(データソース, Defaults(データソース), {列1: 値1, 列2: 値2, ...})

これだけ。

なんだけど、第３引数が非常に曲者でして、キャンバスアプリ上の値の型と
リストのアイテム上の値の型を意識しないと上手くいかないので
そのあたりを整理しておこうと思います。

とりあえず基本はこんな感じ。

        Patch(
            data_source,
            Defaults(data_source),
            {
                列名:値
            })

ここの　列名：値　のパターンをいくつかあげていきます。

１．アイテム（テキスト型） ← フォーム（テキスト入力）
-

        列名:txt_torihiki_naiyou.Text

２．アイテム（日付と時刻） ← フォーム（日付の選択）
-

        列名:DatePicker1.SelectedDate

３．アイテム（選択肢） ← フォーム（ラジオボタン）
-

        列名:Radio1_2.Selected
アイテム側がRecord型なのでValueの指定は不要。（へー、って感じ）

４．アイテム（テキスト型） ← フォーム（ラジオボタン）
-

        列名:Radio1_2.Selected.Value
アイテム側がText型なのでValueの指定が必要。

５．アイテム（選択肢） ← フォーム（ドロップダウン）
-

        列名:Dropdown1.Selected
アイテム側がRecord型なのでValueの指定は不要。（理屈はわからん）

６．アイテム（テキスト型） ← フォーム（ドロップダウン）
-

        列名:Dropdown1.Selected.Value
アイテム側がText型なのでValueの指定が必要。

７．アイテム（数値） ← フォーム（テキスト入力）
-

        列名:Value(TextInput1_5.Text)
アイテム側が数値型なのでValue関数で数値化が必要。

８．アイテム（参照） ← フォーム（参照）
-

        列名:{
            Id:1,
            Value:TextInput1_3.Text
        }

IdとValueの両方を指定する必要があるが、Idに紐づく情報が優先されるため、Valueに何を指定しても意味がない。
アイテムの参照項目に値を入れたい場合は、フォーム上でも参照項目であれば割と容易な感じだが、そうでない場合も需要としてはある程度はありそう。

マスタの参照は使う頻度も高いので、もう少し詳しく挙動を理解しておきたいところ。
別のTipsでまた言及するかもしれません。

特にいまやっている業務的にここはかなり重要なポイントだったりする。
部門マスタ、勘定科目マスタ、取引先マスタと連動させる必要があるので。

弊社は取引先マスタが数万Recあるので果たしてリストで運用上耐えうるのかは非常に不安。
リストの5,000件問題もあるし…。Dataverseの使用も視野に入れないとな、って感じ。
データベースとして長く使うのにリストはやはりやや弱い印象。
世の中の活用事例を色々と見てみたいところ。

とはいえまずは足元の紙運用から脱却すべくスモールスタートでやるのには申し分ないと思うのでスピード感を持って推進していきたい。

９．アイテム（添付ファイル） ← フォーム（添付ファイル）
-
        to be continued...

現在進行形で試行錯誤中なのでまた更新します。

また、次回はフォーム上での入力制御について整理したいと思っています。

以上

https://qiita.com/Novskiiiiiiiiii/items/b06ab0f33667f0e7e1f9
カスタムオブジェクトで作成できる最大の主従関係が2個を検証

本橋孝昭です

今回は
カスタムオブジェクトで作成できる最大の主従関係が2個を検証をします

参考ヘルプ
オブジェクトリレーションの概要
https://help.salesforce.com/s/articleView?id=sf.overview_of_custom_object_relationships.htm&type=5
>各カスタムオブジェクトは最大 2 個の主従関係、合計で 40 個のリレーションを持つことができます。


AAオブジェクトに主従関係を2個作成しました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/7700d61e-18e8-be65-c4cb-de1a8caf1a6c.png)



ここで項目の「新規」をさ作成します

そうすると主従関係が灰色になり選択できない=作成できないです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/471062bf-ce49-d07e-60cd-f800b9a1614a.png)

以下のコメントがあります

>このオブジェクトはすでに 2 つの主従関係を持っているため、このデータ型の項目を作成できません。

以上から
カスタムオブジェクトで作成できる最大の主従関係が2個であることが分かります
Homebrewのインストール方法

PCを新調した際にHomebrewをインストールしたので、その手順をまとめます。

## インストールされているかの確認
まず以下のコマンドを入力します。

```
brew -v
```
Homebrewがインストールされていれば現在のバージョンが表示されますが、
以下が表示された場合はインストールされていません。
```
command not found: brew
```

## Homebrewのインストール

以下を入力します。
```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

パスワードを求められたらPCのログイン時のパスワードを入力します。
RETURNかENTERを押すよう求められるので、Enterを押すとインストールが進みます。

インストール中↓
```
==> Downloading and installing Homebrew...
```

完了すると以下が表示されます↓
```
==> Installation successful!
```

## Homebrewを設定する

```Next steps:```に記載されているコマンドを順番に実行します。
```
% echo >> /Users/あなたのユーザー名/.zprofile
% echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/あなたのユーザー名/.zprofile
```
```あなたのユーザー名```は自身のPCで設定しているユーザー名に置き換えてください。

```/Users/あなたのユーザー名/.zprofile```に移動して```.zprofileファイル```をダブルクリックで開きます。
ファイルの中に```eval "$(/opt/homebrew/bin/brew shellenv)"```が記載されていればOKです。

.zprofileファイルは隠しファイルのため、表示されていない場合はファイルの階層で```shift + command + .```のショートカットを押すと、表示を切り替えることができます。

最後に以下のコマンドを入力して、Homebrewを反映させれば完了です。
```
eval "$(/opt/homebrew/bin/brew shellenv)"
```


## Homebrewが反映されているか確認

 Homebrewが無事にインストールされたかどうかを確認します。
 以下のコマンドを入力します。
 ```
 brew -v
 ```
以下のようにバージョンが表示されればOKです。
 ```
Homebrew 4.4.6
 ```
【オーバーライド】ライブラリのCSSが変更出来ない時の対処法

## 初めに
今回は、フロントエンドのライブラリを使っていて、そのライブラリのCSSがどうしても変更できない場合に有効な方法として「CSSのオーバーライド」について解説します。自分も初めて知った方法なので、備忘録としてここに残しておきます。

## 現状
今回はLeafletを使って実装していたときに、地図のボタンのUIが変更できないという問題が発生しました。Leafletのデフォルトボタンは以下のようなデザインです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2749225/11727b9c-05ef-4d95-e449-5f50607ff675.png)

このボタンの位置を固定（position: fixed）にしたかったのですが、調べても解決策が見つからなかったため、CSSのオーバーライドを使って対応しました。ただし、Tailwind CSSで統一して開発している場合、この方法は通常のCSSを記述する必要があり、Tailwind CSSの統一性が損なわれるので注意が必要です。

以下に、具体的な手順を示します。

## 手順
まず、ブラウザを開き、開発者ツールを表示します（command + option + J で開けます）。
次に、変更したいボタンをクリックします。すると、以下の画像のように、Elementsタブでそのボタンに適用されているCSSクラスが確認できます。今回は leaflet-control-zoom クラスが該当しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2749225/e49fe41f-ef03-8b8e-6250-d2f127091ba7.png)


global.css ファイルを開きます（今回はNext.jsを使用しているため、このファイルに追記しています）。以下のように、該当のクラスに対して!importantをつけてスタイルを記述することで、CSSの上書きが可能です。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2749225/74bb6ed6-9cc2-e450-0099-896024f6c34b.png)


これでCSSのオーバーライドによって、Leafletのボタンのスタイルを上書きすることができました。

## 終わりに
CSSのオーバーライドは、あまり推奨される方法ではありませんが、
やむを得ない場合の最終手段として覚えておくと便利です。ここまで読んでいただき、ありがとうございました。
Pythonの同じディレクトリにあるcsvをすべて読み込む

## 早速こーど！!

Pandasははいっている前提でかいてます～


```
import pandas as pd
import os

# CSVファイルが格納されているディレクトリのパス
directory = 'path/to/csv/directory'

# ディレクトリ内のすべてのCSVファイルを読み込む
for filename in os.listdir(directory):
    if filename.endswith('.csv'):
        file_path = os.path.join(directory, filename)
        df = pd.read_csv(file_path)
        print(f"読み込んだファイル: {filename}")
        print(df.head())  # 各ファイルの先頭5行を表示
        print("\n")
```
初心者向け：AWS CLF試験勉強で役立つAWS Artifactの使い方とレポート活用のベストプラクティス

## はじめに

AWS Artifactは、AWSが提供するセキュリティやコンプライアンス関連のドキュメントにアクセスできるポータルです。

:::note 
**AWS Certified Cloud Practitioner（AWS CLF）試験勉強中に名前を目にしたことはありましたが、どのような資料が含まれているのか詳しく知る機会はありませんでした。笑**
:::

今回は、AWSがどのように信頼性や透明性を確保しているか、実際に資料をダウンロードして読んでみます！

この記事では、AWS Artifactの概要と利用方法、さらに実際にダウンロードしてみた感想を共有します。

## AWS Artifactとは？
AWS Artifactは、AWSが提供するコンプライアンスとセキュリティ関連のドキュメントにアクセスできるポータルです。

https://aws.amazon.com/jp/artifact/

特に以下の2つの機能があり、AWSを利用する上でのコンプライアンス対応を支援しています。

https://qiita.com/shihandai/items/1109f9d5717a76e11bf4

https://www.sunnycloud.jp/column/20230213-01-2/

上記の記事でも詳細に紹介されていますので、詳しく知りたい方は参考にしてみてください。

### 1. AWS Artifact Reports
AWSが取得している認証や第三者監査のレポートをダウンロードできる機能です。たとえば、以下のような資料が含まれます。

:::note warn
- **SOCレポート：**
サービス組織のコントロールに関するレポート。

- **ISO認証：**
ISO 27001（情報セキュリティ）、ISO 27017（クラウドセキュリティ）、ISO 27018（クラウド上の個人データ保護）など。

- **PCI DSS準拠レポート：**
クレジットカード情報を扱う場合に必要となる基準への適合証明。
:::

これらのレポートは、自社のセキュリティ体制を評価する際や、監査対応に必要な証拠として役立ちます。


### 2. AWS Artifact Agreements
AWSとの契約に関する書類を確認・管理できる機能です。


:::note warn
- **Business Associate Addendum (BAA)：**
医療データを扱うために必要なHIPAA準拠の契約。

- **Non-Disclosure Agreement (NDA)：**
秘密保持契約書。
:::

これにより、AWS利用が自社の規定や法的要件に準拠しているかを確認できます。

## 実際にダウンロードして読んでみた

AWS Artifactを使って、実際に「``FedRAMP レポート``」をダウンロードしてみました。このレポートは、アメリカ連邦政府向けにAWSがクラウドサービスプロバイダーとして認証されていることを示すものです。

:::note info
**AWS Artifactは、AWSアカウントを持っていれば無料で利用できます！**
:::

まず、AWS Management Consoleにログインし、「Artifact」を検索して、ダッシュボードを開きます。

![スクリーンショット 2024-11-18 20.49.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/d4f9474c-1294-1f2c-4081-48265b89e613.png)

次に、Artifactダッシュボードで「レポート」タブを選択し、検索バーに「``FedRAMP``」と入力してフィルタリングします。

![スクリーンショット 2024-11-18 20.55.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/899375fd-9f59-a706-abf0-0aadf3989691.png)

該当する「``FedRAMP Customer Package``」をクリックしてダウンロードします。

![スクリーンショット 2024-11-18 20.57.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/3135815b-929a-cf25-7729-0f04ea04c42c.png)

ラジオボタンを選択し、画面右上の「レポートをダウンロード」をクリックすると、ダウンロードが完了しました。

![スクリーンショット 2024-11-18 20.59.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/af40d518-484a-4b67-aea7-101c344160a9.png)

レポートの中身について気になる方は、ぜひ自身でダウンロードし、日本語翻訳などを使って読んでみてください！

:::note alert
**AWS Artifactのレポートに含まれる内容は、多くの場合、機密情報や非公開情報を含むため、そのままブログ記事や公開資料に掲載することはできません。ここまでにさせていただきます。**
:::

## まとめ
AWS Artifactは、AWSのセキュリティやコンプライアンス対応を確認し、関連資料を入手するための便利なツールです。

:::note warn
**特に、規制が厳しい業界（金融、医療など）の企業にとっては、安心してAWSを利用するための重要なサポートを提供します。**
:::

正直、レポートの内容についてはほとんど理解できなかったのですが、今後AWSのサービスを利用する際には、これらの資料を正しく活用し、サービスを適切に利用していきたいと思いました。

## 参考記事

https://dev.classmethod.jp/articles/aws-artiface-compliance-report-download-and-share/

https://qiita.com/shihandai/items/1109f9d5717a76e11bf4
.AppImageアプリをChromebookのランチャーにGear Leverを使って登録する

1. .AppImageファイルをダウンロードする<br><br>
1. .AppImageファイルをLinuxフォルダに移動（またはコピー）する<br><br>
1. Linuxターミナルを起動する<br><br>
1. 必要なら
   ```bash
   sudo apt update && sudo apt upgrade -y
   ```
   <br>
1. Fuseをインストールする（.AppImageアプリの実行に必要）
   ```bash
   sudo apt install fuse
   ```
   :::note info
   Chromebook以外のLinuxでも、[ここ](https://github.com/appimage/appimagekit/wiki/fuse)を参考にFuseをインストールしておけば、以下の手順で.AppImageをデスクトップ統合してメニューから実行できる。
   :::
   <br>
1. [Flatpak](https://flatpak.org/)をインストールする（Gear Leverのインストールに必要）
   ```bash
   sudo apt install flatpak
   ```
   <br>
1. 公式のリポジトリ[Flathub](https://flathub.org/ja)を追加する
   ```bash
   flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
   ```
   <br>
1. Linuxサブシステムをシャットダウンして再起動する
   1. シェルフのターミナルのアイコンを右クリック（２本指でタップ）
   1. 「Linuxをシャットダウン」をクリック
   1. 「penguin」をクリック
   <br>
1. Gear LeverをFlatpackでインストールする
   ```bash
   flatpak install flathub it.mijorus.gearlever
   ```
   <br>
1. ランチャーからGear Leverを起動する（先にChromebookの再起動が必要かもしれない）<br><br>
1. .AppImageを追加する
   1. Gear Leverのウィンドウ左上にある「+ Open」ボタンをクリック
   1. 追加したい.AppImageを選択
   1. ウィンドウ右上の「Open」をクリック
   1. ウィンドウ右上の「Unlock」をクリック
   1. 「Move to the app menu」をクリック
   1. ウィンドウ左上の「<」をクリック
   1. Gear Leverを閉じる<br><br>
1. ランチャーを開くと.AppImageアプリのアイコンが登録されているのが確認できる<br><br>
1. そのアイコンをクリックしてアプリを起動する（先に再起動が必要かもしれない）

:::note warn
`libfuse2`は使っていないから、`sudo apt autoremove`で削除できるよと言われても、削除しないように。.AppImageアプリが起動しなくなります。
:::
Nefflix を CHromiumで観る

<h1>Firefox、RAM喰い過ぎなんじゃあ</h1>
<p>UPDATEは自分でやるから、軽いChromiumを使いたい
<br/>だがしかし、chromiunmをinstallしただけじゃ見られない⇣
</p>

![画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3937994/da9f1a56-a2a1-9598-7ab3-08f930d8d6f9.png)


参考にしたサイト⇣
<a href="https://github.com/proprietary/chromium-widevine">https://github.com/proprietary/chromium-widevine</a>
<hr/>

<p>chromiumを入れた後⇣を実行する。
<pre>
git clone https://github.com/proprietary/chromium-widevine.git && 	cd chromium-widevine && 	./use-from-google-chrome.sh
</pre>
を実行した。
だが私は<B>chromeを入れてない</b>ので、上のuse-google-chrome.shの時点で「見つからん」と言われる。<br/>
ウン、入れてないもん。なので
<pre>
sh use-standalone-widevine.sh
</pre>
を実行したら動いた⇣<br/>
使用RAMにも注目
</p>

![画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3937994/1a8eb77d-1428-698f-6151-eed56e9321c5.png)
【Docker】起動済のコンテナに.envファイルの変更を反映したい

### 前提
`.envファイル`を変更する前に既にDockerコンテナを起動済みであること。

### そもそもの話
実は`.env`を変更して保存するだけでは、起動済みのコンテナに変更内容が反映されません。
また、単純に以下のようにコンテナを再起動しても反映されない可能性が高いです。
```bash
# コンテナを再起動する
docker-compose restart
```
### 変更を反映するための手順
`.env`の変更を確実に反映させるためには、以下の手順を踏む必要があります。
1. `.env`を変更して保存する。
2. プロジェクトのルートディレクトリでコンテナの削除コマンドを実行する。
```bash
# ボリュームごとコンテナを削除する
docker-compose down -v
```
:::note
この時、`vオプション`をつけてコンテナのボリュームごと削除するのがポイントです。
ボリュームには、初期の`.env`の内容をもとに設定された情報が永続的に保存されてしまいます。そのため、再起動しても初期の設定で作られたボリュームの情報をもとにコンテナが起動されて`.env`の変更が反映されないことがあるからです。
ですので、ボリュームごとコンテナを吹っ飛ばしてやる必要があります。
:::
3. コンテナを起動
（バックグラウンドで起動したければ`dオプション`をつける）

```bash
# バックグラウンドでコンテナを起動
docker-compose up -d
```

### おわり
この手順を踏めば`.env`の変更が反映されるはずです。
最後まで読んでくださりありがとうございました。
検索エンジン上でPDFファイルがインデックス表示される際の文字化け

# ■はじめに

私は「ｱｶﾋﾟｯﾋﾟﾐｼﾐｼｶﾞﾒ」「ﾁｬﾗﾁｬﾗのﾊﾟｰﾊﾝ!」のような、どうかしてしまった日本語が大好きである。その系統とはズレるが、その手の心のアンテナにひっかかるものを見つけた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661209/ab694141-9660-523d-3009-69f335ad5a3c.png)


[CHOP療法の手引き - 国立がん研究センター](https://www.ncc.go.jp/jp/ncch/division/pharmacy/010/pamph/DLBCL/010/DLBCL_010.pdf)

「チョップ」という文字列が、「チチ ョョ ッッ ププ」という発音が難しそうな文字列として表出されていた。誤字をするにしても「チョッポ」「チョッピ」等ならありがちなタイプミスであろうと推測できるが、「チチ ョョ ッッ ププ」は発生要因が不可解である。

ということで、「チョップ」が「チチ ョョ ッッ ププ」になってしまうような事象が発生するのは何故か？どのような仕組みか？を調べてみる。

※CHOP (チョップ) 療法は悪性リンパ腫の代表的な化学療法である。

# ■生成AIに聞いてみよう

>検索エンジンがPDFファイルの内容をインデックスする際に、テキスト抽出のプロセスで文字化けや誤認識が発生することがあります。これは、PDFファイル内のテキストが画像として埋め込まれている場合や、フォントのエンコーディングの問題、テキスト抽出アルゴリズムの不完全さなどによって起こり得ます。
>
>PDFファイルは、テキスト、画像、ベクターグラフィックスなどを含む複雑なフォーマットであり、その内容を正確にテキストとして抽出するのは技術的に難しい場合があります。特に、スキャンされた文書や特殊なフォントを使用した文書では、文字の認識が正確に行われないことがあります。
>
>検索エンジンはOCR（光学文字認識）技術を使用して画像からテキストを読み取ることがありますが、このプロセスは完璧ではなく、誤認識や文字化けを引き起こす可能性があります。その結果、検索結果に表示される文書のタイトルやスニペットに奇妙な文字列が含まれることがあります。
>
>このような場合、検索エンジンが表示しているタイトルやスニペットは、実際の文書の内容を正確に反映していない可能性があるため、実際の文書を開いて内容を確認することが重要です。

生成AIは平気でそれっぽい嘘をつくので、次は該当PDFを確認する。

# ■該当PDFを見てみよう

## ①問題の部分

![スクリーンショット 2024-11-18 201016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661209/3730dc0d-54c6-8a69-defd-95a1513b1fd5.png)

この部分を適当に選択＆コピーペーストするとこうなる。

![スクリーンショット 2024-11-18 200954.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661209/da739c0d-351a-b02f-b45e-067e0e4f0707.png)

```
ＣＨＯＰ
チチ ョョ ッッ ププ
療法の手引き 
```

「チチ ョョ ッッ ププ」だ！！

フォントサイズが大きくかつ影が曖昧な「療法の手引き」部分は見たままの通りにテキスト化できている。一方で、フォントサイズが小さく影がより明瞭である「チョップ」は二文字ずつになってしまった。
ということで、フォントサイズあるいは影の明瞭さが問題なのではないか？という仮説。

## ②フォントサイズに差がある部分を見てみよう

![スクリーンショット 2024-11-18 210700.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661209/6bb2bf5a-0558-0799-9335-a787cf548727.png)

```
とつである微小管
びしょうかん
に作用します。
```
位置関係には大いに違和感があるが、フォントサイズが小さいが「びびししょょううかかんん」とはならなかった。
ということで、フォントサイズが原因である仮説は棄却できた。

## ③フォントに影エフェクトが付いてない部分を見てみよう


![スクリーンショット 2024-11-18 203544.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661209/3d7feea0-64df-f475-9fc2-1a2c7533e89a.png)

```
国立がん研究センター中央病院
血液腫瘍 科 ・ 薬 剤 部 ・ 看 護 部
```

テキスト間のスペースの入り方は気になるが、表出される文字の構成要素自体には何ら問題はない。

## ...ということは

あくまで推測であるが…
おそらく、**明瞭な影エフェクトが付いていると、本体と影両方を文字だと認識され、文字がダブルで表出されてしまう**ようである。


# ■感想

文字の影エフェクトは、乱視のような見え方な気がして苦手であるためほとんど使用しないのだが、このような問題を生じさせる可能性もあるのだなと思った。

また、「平気でそれっぽいストーリーを作って嘘をつく」は生成AIだけではないので、アホなりに可能な限り一次ソースを確認して考えて判断して、それが間違えていたらちゃんと学習・謝罪・反省・修正をしていきたいものである。とは思うものの、自分で現場現物を見て考えて手を動かして人と話すことが好きだからこそ、「こんな思考ができる自分は、現実においても隠蔽された真実を情報収集と推理によって暴くことができる」とか思っちゃったりするのだと思う。こわ〜い。

おそらくこの世に需要はほぼほぼ無いであろうお題でしたが、最後までお読みいただき、ありがとうございました🙇
【イベントレポート】IT×ガンダム！ライトニングトーク大会 vol.5～RPALTスピンオフLT会～

いつも記事を読んでいただきありがとうございます！
モブエンジニア（[@mob-engineer](https://qiita.com/mob_engineer))です！

今回は11/18（月）に参加した、「IT×ガンダム！ライトニングトーク大会 vol.5～RPALTスピンオフLT会～」のイベントレポートを記事として執筆したいと思います。

極力平易な表現で執筆いたしますので、お気軽に読んでいただければ幸いです。

:::note info
あくまで1参加者としての参加した感想をまとめております。そのため、イベント資料の共有に関しては行わないためご留意いただけますと幸いです。
:::

https://rpacommunity.connpass.com/event/336236/

○コミュニティ紹介サイト

https://sites.google.com/comucal.com/rpacommunity/home

○Youtubeチャンネル

https://www.youtube.com/channel/UCm8GV22BVkw6RmeriT7VJUA


# 目次
- イベント概要
- LT
    - IT戦士ガンダム～DXで変革せよ！　～ニュータイプとオールドタイプの戦場で
    - ランバ・ラルに相談してみよう
    - ガンダムとAI Builder
    - IsGundam関数
    - シャアの目指した人類革新とRPAにみる改革の可能性
    - ITエンジニアが「コウ」ならないために…
- まとめ

## イベント概要
>ITを活用した業務の自動化・効率化の推進に取り組む仲間同士で情報や悩みを共有しながら楽しく学び、各々が目指す業務改善・働き方改革の実現に繋げる事を目的にしているのがRPACommunityです。
すでに取り組んでいる方、これから学ぼうとしている方、ちょっと興味がある方、どんな方でも大歓迎です。
ITネタ・自動化ネタ・RPAネタ、悩みや、言いたい事を、狭くはRPAですが広くは自動化、業務改善、働き方改革に繋がるテーマでセミナーやライトニングトーク（LT※）を楽しむコミュニティです！
※ LTとは「Lightning Talk(s)」の頭文字を取ったもので5分間程度の短い時間で行われる発表を連続して続けていく形式のプレゼンテーション。


## LT

### IT戦士ガンダム～DXで変革せよ！　～ニュータイプとオールドタイプの戦場で
- ガンダムの戦場に見るDXとは
    - ニュータイプ：新しいシステムによる業務自動化推進
    - オールドタイプ：昔ながらの手法を使う
    - ニュータイプとオールドタイプは分かり合えないわけではない
    - DXは新しい未来を創るための手段（人類の変革）
- まとめ
    - DXは手段ではなく目的としてとらえてみる

### ランバ・ラルに相談してみよう
- ランバラルが1位だったため選んでみた
    - Geminiにランバラルになりきって回答してもらった
    - 意外といい回答をしてくれる
    - 類似ワードだと、意外となりきってくれない
- まとめ
    - 簡単にできるので、壁打ち相手として遊んでみると良き

### ガンダムとAI Builder
- AI Builderとは
    - Microsoft Power Platform内にある機能
    - 業務に特化してモデリングしたAI
    - 業務に応じて自動的な処理（名刺からの情報取得など）を行ってくれる
- 今回遊んでみたこと
    - ガンダム画像を画像認識機能で読み込んでみる
    - プレビュー機能なため、英語のみ
    - 精度としてはそこまで高くない（学習量の少なさ...）

### IsGundam関数
- 質問に応じてガンダム度合いを数値化させる
- GitHubに上がっているのでチェックしてみよう

### シャアの目指した人類革新とRPAにみる改革の可能性
- 目指した人類革新
    - 共感的で調和のとれた社会を築くこと
        - RPA的に考えると**煩雑な作業を自動化でき、リソース最適化ができる**
    - 地球への依存をやめ、宇宙を新たな生活圏とする
        - RPA的に考えると**環境負荷への対策につながる**
    - 公平で持続可能な新体制を構築する
        - RPA的に考えると、**自動化による透明性が担保された業務フロー**
- まとめ
    - 労働人口の減少に応じて、RPA含めたシステム対応は必要だよね

### ITエンジニアが「コウ」ならないために…
- コウ＝納期に追われながら仕事を行っているエンジニア
    - 上記エンジニアにならないようには2点がある
- ポイント１：外を知る
    - 技術同人誌を執筆するためのインプット・アウトプットを行う
    - 技術同人誌を通じて、特定技術への依存度が少なくなる
- ポイント２：分かり合う
    - コミュニケーションについて学んでみましょう！

## まとめ
本LTを聞いて**PRAを通じた将来像**について考えるきっかけになりました。そのうえで、自身の**LTやりたい欲**が高まったので、何かしらのテーマでアウトプットしていきたいと思いました！

そのうえで、最後のセッション**ITエンジニアが「コウ」ならないために…**に関してはエンジニアとして分かりみが深い内容だと思いました！
ChromebookにMinicondaをインストールする

Condaの公式サイトからインストーラーをダウンロードします。
```
$ curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
```

MiniCondaをインストールする
```
$ bash ~/Miniconda3-latest-Linux-x86_64.sh
```

インストール結果を確認する
```
$ conda -V
```

以上です。
C_TS452_2021 - SAP Certified Application Associate - SAP S/4HANA Sourcing and Procurement対策（18/100）

【18日目】
トピック2：供給元（7/8）

≪問題18≫
分納契約（リリース伝票あり）の登録を制御する項目はどれですか。
▢契約タイプ
▢JIT納入日程区分
▢登録プロファイル
▢明細カテゴリ

≪解答≫
█契約タイプ
▢JIT納入日程区分
▢登録プロファイル
▢明細カテゴリ

≪解説≫
◆標準システムには、分納契約（リリース伝票あり）で使用するための伝票タイプLPAが登録されており、この伝票タイプには、"分納契約のリリース伝票区分"が設定されています。
SymPyで三角関数を操る

## はじめに

SymPyでは、三角関数を扱える。何も考えなくとも、`.expand(trig=True)`あるいは`simplify()`を使えばよしなにしてくれる。一方で、「この変換をしたいんだけど」という、痒い所に手を届かせようと思ったときには使い方を工夫しなければならない。

## 使い方
### 倍角の公式
公式に用意されている方法で$\sin(2x), \cos(2x)$などは、`.expand(trig=True)`で展開できる(一般に$x$の整数倍で可能である)。なお、`trig`はデフォルトでは`False`なので`True`を指定しないと展開してくれない。

```python
>>> sin(2*x).expand(trig=True)
2*sin(x)*cos(x)
>>> cos(2*x).expand(trig=True)
2*cos(x)**2 - 1
```

ここからは、パブリックな方法ではなく、`simplify`用の内部関数を直接見にいく。

$\cos(2x)=2\cos^2(x)-1$より、$\cos^2(x) = (\cos(2x)+1)/2$が得られる。

```python
>>> from sympy.simplify.fu import TR7
>>> TR7(cos(x)**2)
cos(2*x)/2 + 1/2
```

### sin(x)^2 + cos(x)^2 = 1
$\sin^2(x) + \cos^2(x) = 1$という関係式を使って、$\sin^n(x)$あるいは$\cos^n(x)$を変形する。

```python
>>> from sympy.simplify.fu import TR5, TR6
>>> TR5(sin(x)**2)
1 - cos(x)**2
>>> TR6(cos(x)**2)
1 - sin(x)**2
```

なお、`TR5`, `TR6`にはそれぞれ`max`と`pow`というオプションがある。

### 積和の公式

```python
>>> from sympy.simplify.fu import TR8
>>> TR8(sin(x)*cos(y))
sin(x - y)/2 + sin(x + y)/2
>>> TR8(sin(x)*sin(y))
cos(x - y)/2 - cos(x + y)/2
>>> TR8(cos(x)*cos(y))
cos(x - y)/2 + cos(x + y)/2
```

### 和積の公式

```python
>>> from sympy.simplify.fu import TR9
>>> TR9(sin(x) + sin(y))
2*sin(x/2 + y/2)*cos(x/2 - y/2)
>>> TR9(cos(x) + cos(y))
2*cos(x/2 - y/2)*cos(x/2 + y/2)
```

### 加法定理

```python
>>> from sympy.simplify.fu import TR10
>>> TR10(sin(x + y))
sin(x)*cos(y) + sin(y)*cos(x)
>>> TR10(cos(x + y))
-sin(x)*sin(y) + cos(x)*cos(y)
```

`tan`は`TR12`を使う

```python
>>> from sympy.simplify.fu import TR12
>>> TR12(tan(x + y))
(tan(x) + tan(y))/(-tan(x)*tan(y) + 1)
```

逆変換はそれぞれ`TR10i`, `TR12i`

```python
>>> from sympy.simplify.fu import TR10i
>>> TR10i(sin(x)*cos(y) + sin(y)*cos(x))
sin(x + y)
>>> TR10i(-sin(x)*sin(y) + cos(x)*cos(y))
cos(x + y)
```

```python
>>> from sympy.simplify.fu import TR12i
>>> TR12i((tan(x) + tan(y))/(-tan(x)*tan(y) + 1))
tan(x + y)
```

### モリーの法則

```python
>>> from sympy.simplify.fu import TRmorrie
>>> TRmorrie(cos(pi/9)*cos(2*pi/9)*cos(3*pi/9)*cos(4*pi/9))
1/16
```
C_TS452_2021 - SAP Certified Application Associate - SAP S/4HANA Sourcing and Procurement対策（17/100）

【17日目】
トピック2：供給元（6/8）

分納契約の機能は次のどれですか。
（３つ選択）
▢分納契約明細は常にプラント固有である。
▢明細カテゴリM（品目未選定）は分納契約で使用できる。
▢分納契約は受託品/預託品管理に使用できる。
▢納入日程行（分納契約）はマニュアルでのみ登録できる。
▢品目マスタレコードは分納契約明細ではオプションである。

≪解答≫
█分納契約明細は常にプラント固有である。
▢明細カテゴリM（品目未選定）は分納契約で使用できる。
█分納契約は受託品/預託品管理に使用できる。
▢納入日程行（分納契約）はマニュアルでのみ登録できる。
█品目マスタレコードは分納契約明細ではオプションである。

≪解説≫  
◆分納契約とは、あらかじめ定めた条件に基づき、品目供給について仕入先と締結する長期契約を指します。これらの条件は、一定の期間内で、定められた合計購買数量に適用されます。  
◆分納契約の主な特徴は以下の通りです。  
（1）分納契約は、常にプラント固有のものとして扱われます。  
（2）明細カテゴリには、標準、受託品、外注、仕入先直送、テキストが使用可能ですが、M（品目未選定）およびW（品目グループ）は使用できません。明細カテゴリとして外注を選択する場合、納入日付ごとに提供される構成品目を個別に入力することが可能です。  
（3）品目マスタレコードが登録されていない品目でも、分納契約明細を作成することができます。ただし、基本契約とは異なり、分納契約では勘定設定カテゴリU（勘定未設定）は利用できません。  
（4）計画日に必要な品目を納入するよう、仕入先に通知する分納契約リリースを発行することが可能です。分納契約は、「リリース伝票あり」または「リリース伝票なし」の形式で運用できます。  
（5）集中契約を参照して分納契約を登録することが可能で、これにより、集中契約で合意された価格を利用できます。  
（6）分納契約の納入日程行は、MRP実行により自動的に生成することができます。この場合、調達提案を手動で変換する必要はありません。
AIX で バックグラウンド実行で dd コマンドを実行した場合の完了確認

### はじめに

dd コマンドをバックグラウンド実行した際に、完了をどのように確認するかを試した備忘録です。


* ユースケース：dd コマンドでディスクに大容量ファイル書き込みをする際に完了時刻を確認したい場合など


https://www.ibm.com/docs/ja/aix/7.3?topic=d-dd-command
>dd コマンドは、 InFile パラメーターまたは標準入力を読み取って指定された変換を行い、 変換したデータを OutFile パラメーターまたは標準出力にコピーします。

----

### 環境

環境 AIX 7.3 TL2 SP2 

```
# oslevel -s
7300-02-02-2420
```

---

### 実行方法

・nohup コマンドを用いてdd実行をバックグラウンド実行
・出力指定ファイル　-> ./dd.log

 
(実行例)


 ```
#  nohup dd if=/dev/zero of=/dev/null bs=1M count=10 > ./dd.log 2>&1 &
[1]     9306568
#
[1] +  Done                     nohup dd if=/dev/zero of=/dev/null bs=1M count=10 > ./dd.log 2>&1 &
```

実行後に dd.log に以下のような内容が書き込まれています。

```
# cat dd.log
10+0 records in
10+0 records out
#
```

dd 処理実行中は dd.log は 0バイトの状態でした。
そのため、<font color="Teal">"0バイトは書き込み中"、"書き込みがあれば完了"</font>と判断していました。


```
# ls -ltr
total 8
-rw-r--r--    1 root     system           33 Nov 18 04:57 dd.log
```


---

### nohup.out は？


ファイルへのリダイレクト指定なしで nohup コマンドを使用すると、同じディレクトリで nohup.out ファイルが作成されて標準出力が書き込まれます。

わざわざ dd.log というファイルを指定せずに nohup.out で良いのではとも考えられますが、複数回実行があった場合、同じログが書き込まれ続けるので、対象の実行が終わったのかどうかが不明になります。

<br>

nohup コマンドを複数回実行した場合の nohup.out の例：

```
# cat nohup.out
10+0 records in
10+0 records out
10+0 records in
10+0 records out
10+0 records in
10+0 records out
```

そのため今回の確認方法で dd.log でのリダイレクトを指定して、1回の出力毎に dd.log が書き変わる方法で記載していました。


参考:
・nohupコマンド

https://www.ibm.com/docs/ja/aix/7.3?topic=n-nohup-command


<br>

 以上です。
Tornado 便利なioloop

# はじめに
MH ソフトウェア & サービスが開発・公開している、Webアプリケーションサーバ AiRの便利かな?と思われるコードの紹介です。
Webアプリケーションサーバ AiRはPython、Tornado(Webフレームワーク、Webサーバ)、JavaScript、その他のモジュールで構成されています。
***
Tornadoのioloopは便利です。

Tornadoを起動するPythonスクリプトでバックアップ処理の時刻を定期的に監視したい場合、下記のスクリプトを埋め込みます。
```
    # NOTE: Oh! It's best!!! I got loop!!
    _check_backup()
    tornado.ioloop.IOLoop.instance().start()
```

```
def _check_backup():
    """Check backup timing.

    :sig: () -> Nne
    """
    # なにかのバックアップ処理

    next_start: float = time.time() + 10.0
    ioloop = tornado.ioloop.IOLoop.current()
    ioloop.add_timeout(deadline=next_start, callback=_check_backup)
```
これで10秒ごとに_check_backup()が実行されます。
***
[Webアプリケーションサーバ AiR](https://qiita.com/MH-SS/items/7a99e799e4988fdad2cc)
***
[弊社webページ: AiR](https://mhss.server-on.net/?f401c=Index&ae504=air)
インテル・エボはノートパソコンのパフォーマンスの未来か？

<p>ノートパソコンは、仕事、エンターテイメント、そしてその間のあらゆることに欠かせない存在となっていますが、完璧な1台を見つけるのは圧倒されることもあります。インテル・エボのノートパソコンについて耳にしたことがあるでしょうが、何がそれらを際立たせているのでしょうか？それらは本当にノートパソコンのパフォーマンスの未来なのか、それともただのマーケティング用ラベルに過ぎないのでしょうか？インテルは、Core Ultra 200V Lunar Lake SoC を搭載したエボノートパソコンの新しい基準を発表しました。</p>
<p>インテルのノートパソコンが本当に何を意味するのか、そしてそれが次に選ぶべき最高のノートパソコン投資になる理由を探ってみましょう。</p>
<h2><strong>インテル・エボとは何ですか？</strong></h2>
<p><a href="https://www.lenovo.com/jp/ja/faqs/intel/intel-evo-platform/"><strong>Intel Evo</strong></a> は単なる華やかな用語ではなく、認証です。このバッジが付いたノートパソコンは、速度、効率、そして全体的なユーザー体験において高い基準を満たすように設計されています。インテルはノートパソコンメーカーと密接に連携し、現代のユーザーが最も重視する機能に焦点を当てたプラットフォームを作り上げました。</p>

<p>Intel のノートパソコンを選択すると、超高速の起動時間 (1 秒未満)長持ちするバッテリー寿命、マルチタスクのシームレスなパフォーマンスが保証されます。さらに、最新の Core i5 や i7 などのプレミアム Intel プロセッサーを搭載しているため、ビデオ編集から通常のブラウジングまで、あらゆる作業に安定したパワーが保証されます。</p>
<p>しかし、それだけではありません。Evo 認定のノートパソコンは、洗練されたデザイン、軽量な構造、鮮やかなディスプレイも特徴としています。リモートで作業する場合でも、コンテンツを作成する場合でも、お気に入りの番組を一気見する場合でも、これらのデバイスはすべてに対応できるように設計されています。</p>
<p>では、これが究極のノートパソコン体験なのでしょうか? さらに詳しく見ていきましょう。</p>

<h3><strong>あなたに追いつくパフォーマンス</strong></h3>
<p>ノートパソコンでマルチタスクを実行しようとして、遅延、クラッシュ、またはホイールの回転という恐ろしい問題に遭遇したことはありませんか? Evo ノートパソコンなら、そのような苦労は過去のものになります。これらのデバイスは、実際のパフォーマンスに合わせて最適化されており、毎日の要求に問題なく対応できるようにテストされています。</p>
<p>Evo プラットフォームには、ゲーマーやクリエイターに素晴らしいビジュアルを提供する統合型 Intel Iris Xe グラフィックスも含まれています。ハードコア ゲーム用の専用 GPU に代わるものではないかもしれませんが、人気のタイトルを実行したり、グラフィックを多用するタスクを処理したりするのに十分な能力を備えています。これを、多くの Evo ノート PC が提供する高解像度ディスプレイと組み合わせると、写真を編集したり、4K でストリーミングしたりする場合でも、驚くほど鮮明な映像を体験できます。</p>
<p>接続性も忘れてはいけません。Thunderbolt 4 ポートと Wi-Fi 6 テクノロジーにより、ファイル転送、ビデオ通話、オンライン ゲームがより高速かつ安定します。Intel Evo はパワーだけではなく、あらゆる面でシームレスな体験を生み出すことに重点を置いていることは明らかです。</p>
<h3><strong>妥協のないポータビリティ</strong></h3>
<p>携帯性はノートパソコンにとって常に大きなセールスポイントですが、パフォーマンスやバッテリー寿命が犠牲になることも少なくありません。Intel Evo 認定デバイスは状況を一変させます。パワーを犠牲にすることなく軽量かつコンパクトに設計されており、プロフェッショナル、学生、デジタル ノマドに最適です。</p>

<p>想像してみてください。急いで家を出ようとしたら、ノートパソコンのバッテリー残量が 30% しかないことに気が付きました。通常、慌てて充電器を探さなければなりません。しかし、Evo ノートパソコンなら、30 分の急速充電で最大 4 時間使用できます。高度なバッテリー最適化テクノロジーにより、どこにいても生産性を維持できます。</p>
<p>これらのノートパソコンは、常に外出している人にとって最適な相棒です。通勤、旅行、または単に部屋から部屋へ移動する場合でも、その耐久性と効率性により、信頼できる選択肢となります。</p>
<h3><strong>将来を見据えた設計</strong></h3>
<p>さらに、Evo は認定ラップトップが将来も使い続けられることを保証します。AI ベースのノイズ キャンセル、タッチスクリーン、顔認識などの機能により、生産性と利便性が向上します。また、ソフトウェアが進化し続けても、これらのラップトップは適応して機能するように構築されています。</p>
<h3><strong>Intel Evo </strong><strong>はラップトップの未来か?</strong></h3>
<p>パワー、携帯性、バッテリー寿命、スタイルなど、すべての条件を満たすノートパソコンをお探しなら、Intel こそがノートパソコンの未来です。これらのノートパソコンは、技術愛好家だけのものではありません。現代の生活に追いつく信頼性の高いデバイスを探しているすべての方のニーズに応えます。</p>
<p>Intel ラップトップを選択すると、仕事のプレゼンテーションを終えたり、最新の vlog を編集したり、バッファリングやバッテリーの問題なしに映画鑑賞を楽しんだりするなど、ストレスが減り、重要なことに集中できるようになります。</p>
<h3><strong>結論：</strong></h3>
<p>Intel Evo ノート PC は、ポータブル デバイスに期待される未来を体現しています。最高のパフォーマンス、イノベーション、ユーザー エクスペリエンスを 1 つの洗練されたパッケージにまとめています。テクノロジーが猛スピードで進化する中、それに遅れずに対応し、優れた性能を発揮するノート PC を持つことは非常に重要です。Intel Evo はまさにそれを実現します。</p>
<p>新しいノート PC の購入を検討している場合は、Intel Evo バッジに注目してください。これは単なるラベルではありません。ニーズに合わせた品質とパフォーマンスを約束するものです。飛び込む準備はできていますか? 将来を見据えたノート PC があなたを待っています。</p>
<p><strong>&nbsp;</strong></p>
C_TS452_2021 - SAP Certified Application Associate - SAP S/4HANA Sourcing and Procurement対策（16/100）

【16日目】
トピック2：供給元（5/8）

≪問題16≫
品目マスタレコードを使用しないで消費品目の購買情報を登録する場合、どのように処理しますか。
▢品目グループと仕入先との関係を指定する。
▢最初に品目マスタレコードを登録する必要がある。
▢特別な情報カテゴリを指定する。
▢品目タイプと仕入先との関係を指定する。

≪解答≫
█品目グループと仕入先との関係を指定する。
▢最初に品目マスタレコードを登録する必要がある。
▢特別な情報カテゴリを指定する。
▢品目タイプと仕入先との関係を指定する。

≪解説≫  
◆購買情報には、以下の種類があります。  
（1）品目マスタレコードを使用する購買情報（在庫品目など）：品目マスタと仕入先との関係を指定します。  
（2）品目マスタレコードを使用しない購買情報（消費品目など）：品目グループと仕入先との関係を指定します。  
◆品目マスタレコードを使用せずに購買依頼明細を手動で登録する際には、品目グループを供給元として購買情報が提案されます。ただし、購買発注を登録する際に品目グループの購買情報が自動的に考慮されることはありません。しかしながら、関連項目の検索ヘルプ「品目グループごとの購買情報」を利用することで、明細概要から購買情報を選択して割り当てることが可能です。
Covering Numbersをさわってみたよ

# はじめに

Covering Numbers（被覆数）は、ある空間を指定した半径$\varepsilon$の球体で覆うときに必要な最小の球の個数$N(\varepsilon)$を表す概念です。Covering Numbersは特に、空間の複雑さやサイズを測定する際に非常に役立ち、機械学習において、汎化誤差の解析や関数空間の複雑性を定量化する際に重要です。

## 空間と距離

Covering Numberは、空間内の点同士の距離を定義する距離関数に依存します。この距離が空間の幾何学的な性質を決定します。

## 球体の定義

距離空間における球体とは、ある中心点を基準にして、半径$\varepsilon$以内に含まれる点の集合を指します。空間を覆う指定した半径$\varepsilon$の球体を用いて空間全体を覆おうとします。このとき、空間を完全に覆うのに必要な最小限の球体の数が Covering Numbers $N(\varepsilon)$です。

## 半径と球の数の関係

半径 $\varepsilon$ を小さくすると、空間全体を覆うために必要な球の数は増加します。この関係を解析することで、空間の複雑さや次元性を把握することができます。

# Covering Numbersの証明

https://github.com/Hideki105/mathematical-engineering/blob/main/%E6%95%B0%E7%90%86%E5%B7%A5%E5%AD%A6/hdk/Covering_Numver/Covering_Numbers.pdf
C_TS452_2021 - SAP Certified Application Associate - SAP S/4HANA Sourcing and Procurement対策（15/100）

【15日目】
トピック2：供給元（4/8）

≪問題15≫
数量契約の目標数量を超えた場合に、どのようにリリース発注の登録を防ぐことができますか。
▢システムによってリリース発注で目標数量を超えるのを回避する。追加のアクションは不要である。
▢購買発注量が目標数量を超えた場合に、ダイアログポックスが開く。ユーザが過剰な数量を発注できるかどうかを管理する特殊な権限を使用できる。
▢契約リリース受注で目標数量をチェックし、目標数量を超えた場合にリリースされないようにするBAdiを実装する必要がある。
▢購買発注量が目標数量を超えた場合に、警告メッセージが表示される。リリースされないようにカスタマイジングでこれをエラーメッセージとして設定できる。

≪解答≫
▢システムによってリリース発注で目標数量を超えるのを回避する。追加のアクションは不要である。
▢購買発注量が目標数量を超えた場合に、ダイアログポックスが開く。ユーザが過剰な数量を発注できるかどうかを管理する特殊な権限を使用できる。
▢契約リリース受注で目標数量をチェックし、目標数量を超えた場合にリリースされないようにするBAdiを実装する必要がある。
█購買発注量が目標数量を超えた場合に、警告メッセージが表示される。リリースされないようにカスタマイジングでこれをエラーメッセージとして設定できる。

≪解説≫
◆金額契約で目標金額を超えた場合や、数量契約で目標数量を超えた場合には、警告メッセージが表示されます。これらのメッセージをエラーメッセージとして設定することで、リリースを防ぐことが可能です。
◆システムメッセージの設定は、在庫および購買管理のカスタマイズ設定で行います。
【Git】git rebase git pull --rebaseについてまとめた

## rebaseの仕組み
`rebase`は、親ブランチの最新状態を基準にして、現在のローカルブランチのコミットを新しいコミットIDで再適用し、履歴を直線的に整理する操作。
つまり、最新のリモートのコミットIDの後ろにローカルで行ったコミットを乗せて、履歴を一直線にする。
よって、マージコミットは発生しない。

https://qiita.com/C_HERO/items/06669621a1eb12d8799e#%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E5%9B%B3

## `git rebase`
### 主な用途の例
一つのタスクに対してコミットが複数になって見にくくなった場合、コミットを一つ(もしくはわかりやすい単位)にまとめて履歴をきれいにする。

## `git pull --rebase`
### 主な用途の例
1. マージコミットがなくなるため、コミットの履歴がきれいになる
2. リモートの最新状態を反映した状態でローカルの作業を行うことができる

### rebaseとmergeの違い
- **merge**:
  - 2つのブランチの変更を統合するが、マージコミットが発生し、履歴が分岐してしまう
  - **結果の履歴例**:
    ```
    A - B - C (main)
         \ 
          D - E - F (feature)
               \
                G (merge commit)
    ```

- **rebase**:
  - ブランチの変更を直線的に整理し、マージコミットが発生しない
  - **結果の履歴例**:
    ```
    A - B - C - D' - E' - F' (feature)
    ```
  - 履歴がきれいになるため、コードレビューやデバッグがしやすい

### rebaseの注意点
1. **履歴が書き換えられる**
   - `rebase` によって、元のコミットIDが変更されるため、リモートにプッシュ済みのブランチでリベースを行うと履歴が不整合になる。
   - **対策**: チームで作業中のブランチでは、リモートにプッシュする前にリベースを行う。

2. **コンフリクトが発生しやすい**
   - 特に複数の開発者が同じ部分を変更している場合、リベース中にコンフリクトが発生する場合がある
   - **対策**: コンフリクト解消後、`git rebase --continue` を忘れずに実行する

3. **チーム運用に合った使い方を検討する**
   - チームでリベースを使う場合、ルールを決めておくと混乱を防げる（例: プッシュ前にリベースを徹底する）

### 実践例
#### リベースで履歴を整理する
1. **現在のブランチで過去3つのコミットを整理**:
    ```bash
    git rebase -i HEAD~3
    ```
    ```
    pick a1b2c3 修正1
    squash d4e5f6 修正2
    squash g7h8i9 修正3
    ```
    ```
    A - B - C - 修正まとめ (feature)
    ```

※ちなみに、pickとsquashの違い↓
キーワード | 動作 | 結果
|-----|-----|-----|
pick | コミットをそのまま残す | 履歴がそのまま維持される
squash | コミットを1つ前のコミットに統合する | 履歴が圧縮され、不要なコミットが消える

#### リモート変更を取り込むリベース
```
git pull --rebase origin main
```
【PHP8.4】exitが言語構造ではなくなった

PHPの[exit()](http://php.net/manual/ja/function.exit.php)は[関数ではなく言語構造です](https://trios.pro/php-die-exit/)。

という話は有名なのですが、PHP8.4でこれが変わります。

以下は該当のRFC、[Transform exit() from a language construct into a standard function](https://wiki.php.net/rfc/exit-as-function)の紹介です。

# PHP RFC: Transform exit() from a language construct into a standard function

## Introduction

言語構造`exit`およびエイリアス`die`は、[括弧なしの単体で使用](https://3v4l.org/sL9Q5)して、PHPスクリプトをステータスコード0で終了します。
もしくは引数`$status`を受け入れる関数のように記述することもできます。
その場合、PHPは引数が整数であればそれをステータスコードとして終了し、文字列であれば文字をSTDOUTに出力しつつステータスコードは0で終了します。

しかし、`exit()`は実際は関数ではないので名前付き引数を使うことはできず、callableに渡すこともできず、strict_typesに従うこともありません。

さらに紛らわしいことに、本来の型引数のセマンティクスにも従いません。
すなわち、整数以外の引数は全てstringにキャストされます。
配列やリソースを渡してもエラーにならず、文字列`Array`や`Resource id #%d`が出力されます。
StringableでないオブジェクトであればようやくTypeErrorになります。

またbool型はintではなくstringにキャストされるので、trueが1、falseが0にキャストされるだろうという常識に反しています。

PHP8.0以降`exit()`はcatchできずfinallyも実行しない特殊な例外をスローすることがあります。

最後に、`exit()`はわざわざ専用のオペコードを使っていますが、必要なさそうです。


## Proposal

`exit()`を、以下のシグネチャを持つ通常の関数に変更します。

```php
function exit(string|int $status = 0): never {}
```

コンパイル時は、オペコードZEND_EXITになるのではなく、関数呼び出しにコンパイルされます。

名前空間で`exit`という名前の関数を定義したり、INI設定`disable_functions`で無効化できないのは現状の動作のままです。

## Backward Incompatible Changes

後方互換性のない変更。

このRFCの影響は小さいと考えられます。

`ext()`の引数の型による動作変更は以下の通り。

| 引数の型 | 現在 | 変更後 | 結果 |
|:---|:---|:---|:---|
| int | int | int | 変更なし。終了コード。 |
| string | string | string | 変更なし。終了メッセージ。 |
| bool | string | int | 終了コードに変更。 |
| float | string | int | 終了コードに変更。暗黙の変換は推奨されないE_DEPTECATEDが発生する可能性がある。 |
| null | string | int | 終了コードに変更。string|int型の引数にnullは非推奨のE_DEPTECATEDが発生する。 |
| stringableなobject | string | string | 変更なし。終了メッセージ。 |
| stringableでないobject | TypeError | TypeError | 変更なし。 |
| array | string | TypeError | エラーに変更。 |
| resource | string | TypeError | エラーに変更。 |


## Future scope

将来の展望であり、このRFCには含まれません。

・`()`なしの呼び出しを非推奨にする。
・finallyブロックを実行する。
・disable_functionsで無効化可能にする。

## Version

PHP8.4。

## Vote

賛成24反対12のちょうど2/3で受理されました。


# 感想

PHPの関数は括弧が必須なのですが、いきなり`exit;`を禁止するとなると影響があまりに大きすぎるので、本RFCではかっこつけない`exit;`も許可します。
もしかしたら今後どこかで削除されるかもしれませんが、いまのところその予定はないようです。

[メーリングリスト](https://externals.io/message/122483)や[プルリクエスト](https://github.com/php/php-src/pull/13483)を読んでも、どうしてそこまでしてこれを導入したかったのかは正直よくわかりませんでした。
利点はいろいろ書かれていますがほとんどは単なる仕様の話であり、関数にしたからなおるってわけでもない気がします。
オペコード`ZEND_EXIT`をなくすだけのためにこれを？

ということでPHP8.4以降、`'exit'();`とか`$f='exit';$f();`とか書けるようになります。
いやまあ、そんな書き方をすることが目的では絶対ないと思いますけどね。
Mac Sequoiaでの外部ボリューム(USBなど)に関するバグ

### MacOS最新のSequoiaについて、一つバグを発見したので共有します。

先日MacOSを最新にアップデートしたところ、USBやSDカード等の外部ボリュームが接続してもFinderではその名前が正しく表示されるものの、システム上では「NO NAME」として認識されてしまう、という問題が発生しました。

これにより、Mac内のアプリでUSB内のファイルを参照した状態で一度USBを取り出し、再度接続すると参照が切れてしまい、一度USBの名称を書き直さないと再び参照できなくなっています。

この問題について、色々と検証をしたところ、外部ボリュームのフォーマットが「MS-DOS(FAT)」の場合のみこの問題が発生し、それ以外(ExFATなど)では問題なく使えることがわかりました。

よって、Macにて外部ボリュームを利用する場合は、一度外部ボリューム内のデータのバックアップを取っておいてから、MacAppの「ディスクユーティリティ」にて上部バーから「消去」→「フォーマット:MS-DOS以外」に設定してフォーマットしてから、利用することをお勧めします。

![スクリーンショット 2024-11-18 19.29.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931974/7303b3da-7693-2a4e-b980-0b11f753abca.png)

なお、この問題に関してはAppleサポートサービスの方へ相談をし、対応するとの回答をいただきましたのでいずれ解消されるかと思います。
基本情報技術者試験勉強してみた

# はじめに
　どうも、初めまして
修士１年のシオンです。
最近qiitaを見ていて、記事が書きたくなったので、最近受けた基本情報に関する記事を書いてみます。

# 基本情報技術者とは
　まず、そもそも基本情報について知らないよという人もいると思うので軽くおさらいをします。
 
　基本情報技術者試験とは（情報処理推進機構）が試験を実施している情報処理技術者試験の一試験区分であり、「情報処理の促進に関する法律」に基づく国家試験です。

　対象者は「高度 IT 人材となるために必要な基本的知識・技能をもち，実践的な活用能力を身に付けた者」と書いてあります。
 
 　ざっくりITエンジニアになりたいよーって人だったり、ITについて学びたいという人が受けるものだと認識していただいたらいいのかなと思います。

# 基本情報試験概要
　基本情報は2023年4月からCBT方式に変更しました。
　CBT方式とは、全国に設置された専用のコンピュータで試験を受ける形式のことです。これによって好きな時間に試験を受けられるようになりました。

　試験内容に関しては、A問題60問90分、B問題20問100分に分かれ、それぞれ選択支の中から選ぶといった形式になっています。
 
　A問題は「テクノロジ系」「マネジメント系」「ストラテジ系」に分けられ、それぞれ技術的な内容、管理的内容、業務的な内容に分けられています。

　B問題は主に「アルゴリズム」「セキュリティ」の二つに分けられ、アルゴリズム16問、セキュリティ４問で出題されています。

 　A問題、B問題両方とも1000点満点中600点とることができれば合格となります。大体６割程度解けていれば合格することができます。

　また、基本情報では、IRT方式というものが用いられており、一般の試験のように問題ごとに一定の点数が決まっているということはありません。これまでのデータから受験者の正答率が高いような問題は点数を低く、正答率が低いような問題は点数を高くするという方式が用いられています。そのため、内容によっては解けている問題は６割を超えているのに、点数が出てみると600点を下回っていたということが起こりうるので注意してください。

# 勉強前の自身のレベル
　基本情報についての知識はほとんどなかった。
　しかし、学部時代に二進数の計算だったり、論理積、アルゴリズムに関しては行っていた。
  アルゴリズムに関してはそこまで習熟しておらず、atcoderでB問題を解けることができたら調子いいみたいな感じでした。

# 勉強したこと
　勉強期間は１ヶ月で最初に「キタミ式基本情報技術者」の本を読み耽りました。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647510/fb5a7962-b422-a03e-ef9c-d97f0363563f.png)
 2,3週間程で一周し終わり、過去問演習に取り組みました。
 過去問演習は過去問ドットコムが非常に使いやすいです
 [過去問ドットコム](https://www.fe-siken.com/feis.html)

 残りの時間で過去問演習を行い、１０回ほど模擬試験を行いました。
 一回の試験が終わる度にわからなかった用語をまとめていました。
 最初はかなり時間がかかったものの、最後の方では、1時間半で模擬試験を行い、復習までできるようになりました。

 B問題に関しては、サンプル問題を１度解いただけです。

# 試験本番
　試験本番では、体感過去問と難易度が変わらず、 CBTになってもそこまで問題に変化はないように感じた。A問題665点,B問題655点で合格しました。

# 最後に
　A問題に関して、意外と推測で解けるような問題もあったりするので諦めずに頑張ってください
 初めての記事で拙いところがあるとは思いますが、最後まで見ていただけてありがとうございます。
 今後試験を受ける全ての皆様を陰ながら応援しています。