OmniAICreator/Qiita-1.07M huggingface dataset:
メンタルと付き合いながらプログラマをする道

# 自己紹介

rotelstift（卜部一恵）と言います。
現在精神障害者手帳2級を持ちながら、Web系のバックエンドプログラマとしてアルバイトをしています。
この記事は、[『 ITと障害者 』を考える 〜 障害と向き合うITの力と工夫 〜 Advent Calendar 2024](https://qiita.com/advent-calendar/2024/unleashmeet)の21日目の記事です。
私が精神障害を持ちながらプログラマになった経緯や、プログラマになってからメンタルとどのように付き合いながら仕事をしてきたのかといった話をしたいと思います。

# プログラマになったきっかけ

元々はプログラマになることを希望しながら、大学の情報系学部に進学しました。
そこでプログラミングの基礎を学び、順調にいけば学部卒でプログラマとして新卒就職していたと思います。しかし、大学に入ってから次第にメンタルの調子を悪くしていき、学業も振るわなくなり、精神科に行ったところ統合失調症との診断が下りました。
それからは薬を飲みながら大学に通いましたが、授業に出ても幻聴のためほとんど内容が理解できなかったりするなどして結果2年の留年をしました。それでもなんとか卒業にだけはこぎつけましたが、卒業後は実家に帰って療養生活をすることになります。

2年ほどの療養ののち、実家の近くで仕事を探して社会復帰を試みますが、なかなかうまくいかず1年前後での離職を繰り返します。その過程でもう健常者として働くのは無理だと悟り障害者手帳を取りましたが、障害者枠でも長期間勤務はできませんでした。
何度目かの離職の後、就労移行支援センターに通うことを決心しました。そこでまだ働けるほどの回復をしていないことを悟り、2年ほどかけて週5日半日ほどの外出ができるところまで体調を回復させました。

それから、友人の紹介でスクリプトを書ける人に依頼したいという仕事を受け、ここで人生初のプログラムを書く仕事を体験します。
そしてその仕事がきっかけで、あるWEB系のベンチャー企業でアルバイトができることになりました。
そこでは、障害者手帳を持っていることや勤務は医師と相談の上1日6時間の時短で週4勤務にさせてほしいことなどを伝えましたが快く容れていただき、プログラマとしての仕事を始めることができました。
それから一度の転職を経て、今もアルバイトのプログラマとして1日6時間週4.5日の仕事をしています。

# プログラマになってからの困難

プログラマとして働き始めてからの1番の困難は、決められた日に確実に出勤することでした。就労移行センターに週5で通うことができていても、やはり仕事とは違う面があります。月に2、3日は体調を崩して休んでしまうことが度々ありました。

また、病気とは直接関係はしないのですが、私には人の顔と名前を覚えるのが苦手という傾向があるのですが、これは Slack ベースのテキストコミュニケーションが主だったため、大変助かっている面があります。

# 仕事をする上でのメンタルとの付き合い方

まず大事なのは、メンタルが悪いときのサインを見過ごさないことです。
私の場合、頭に自分を攻撃する考え（幻聴）が聞こえるときは、あまり無理をしないようにしています。また、風邪などで体力が落ちているときはメンタルもつられて悪くなるので、そういうときも無理はしないように気をつけています。

また、本当に基礎の基礎ですが、処方されているお薬はちゃんと飲みましょう。
薬の効き具合に関して医師に相談して自分に合う薬を探すフェーズだと飲めないこともあるかもしれませんが、飲む薬が落ち着いたフェーズに入ったなら、ちゃんと毎日薬は飲んだほうがいいです。

また、自分について把握するのも大事です。
特に自分が体調を崩してしまう状況について把握をするのが大事です。そうした状況が分かったら、上司にちゃんと伝えておきましょう。上司としてもこちらのパフォーマンスが落ちないようにしたいはずなので、そうした情報があるとそれなりに打つ手ができるはずだからです。

# 統合失調症の自分がプログラミングを仕事として選んで良かったこと

仕事の相棒であるコンピュータは怒らないし機嫌を損ねないことです。もちろんエラーは出してくるし、よく分からない理由でうまく動かなくなり再起動をかけることでなぜか直ることもあるのですが、それがコンピュータに感情があってそれを損ねたのが原因であることは決してないからです。
よく、メンタルが安定している人を頼るといいと言われることがありますが、そういう意味で言うとコンピュータは最強にメンタルが安定している存在と言えます。
そして相棒のコンピュータには気を遣わなくて済むので、そこで節約した対人スキルを一緒に仕事をしているチームの仲間に全振りすることができます。

また、テキストベースのコミュニケーションが主なのもありがたいです。
自分は普通に喋っていると、結構噛んでしまったり誤解を招く失礼な言い方をしてしまうということがそれなりにあるのですが、テキストベースのコミュニケーションだと実際に考えたことをキーボードで打ち出しそれを投稿するまでにワンステップあるので、もっといい言い方はないかと考える時間があります。それにとても助けられています。

# 最後に
一度職場を変わっていますが、プログラミングの仕事は始めてから5年が経とうとしています。
昔と比べると体調が良くなっているという要因もあるとは思いますが、それでもひとつの仕事をこんなに長く続けられることができているのは、本当に嬉しいことです。
これからも、この仕事を続けられるといいと思っています。
JDLA公認E資格合格！振り返り記事

## この記事について
2024年8月に開催されたJDLA主催のE資格認定試験（以下本試験）において、無事合格することができました。この記事では対策として行なったこと、試験の準備、そして当日の感触について振り返っていこうと思います。

## 前提
AI開発経験のない若手エンジニアです。G検定を取得済みであるほか、理系の大学院を出ているため、統計や行列計算の基礎はある程度身についています。

## 準備1:JDLA認定プログラムの受講
本試験では、事前に認定プログラムを受講して修了証を得ることが申込要件になります。私はDeepSquareさんのE資格講座を選択して受講しました。
https://ai-edu.deepsquare.jp/
安さに注目して選びました。
コース内容はビデオ講座と確認問題、最後に修了課題として本番に近いマークテストと、AI開発演習があります。
ビデオ講座に3週間、修了課題に2週間くらい使ったかなと記憶しています。が、修了認定の申請を試験直前まで失念してしまい、E資格受験が半年遅れることになりました。（本当は2024年2月に受験するつもりだった）
絶対に余裕をもって受講し、課題終了後は速やかに修了証を申請しましょう。

修了課題のAI開発演習では、初歩的な分類問題を解かせたり画像読み取りタスクを学習したりといった問題が出題されました。真面目に取り組むことで、座学以上に大きく理解を得られました。特に機械学習ライブラリは触って慣れるのが手っ取り早そうです。
生成AIを使ってコード補完することで大幅に難易度が下がりますが、試験本番に貢献し得る課題なので自力推奨です。

## 準備2:黒本
定番の対策問題集、通称黒本です。
[徹底攻略ディープラーニングE資格エンジニア問題集 第2版](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0E%E8%B3%87%E6%A0%BC%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%95%8F%E9%A1%8C%E9%9B%86-%E7%AC%AC2%E7%89%88-%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E3%82%B9%E3%82%AD%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97AI%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE-%E5%B0%8F%E7%B8%A3/dp/4295011584)
本番前に4周ほどして、隙なく答えられる状態にしました。
問題量がかなりあるので、時間をかけて正確に理解するのがおすすめです。

## 試験本番
家から最寄りの会場で、焦らず眠気もないちょうどいい午後の時間に受験しました。
とにかく時間が足りなくなる出題量なので、悩んでも答えが出ない問題はなるべくスルーして、最後に計算が必要な問題をまとめて電卓で処理しました。見直しをする余裕はなかったです。

## 結果
無事合格できました。得点は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/437ddf3f-0076-ba16-474f-ab36e45b49ae.png)
機械学習、深層学習ともにけっこう力を入れたつもりでしたが、結果を見れば座学と黒本に対策が偏りすぎていたかもしれません。
そのほか感想として、
・DeepSquare修了課題のマークテストが、難易度や範囲の面で黒本の模擬試験より本番の出題に近かった印象
・出題範囲の変更に伴い行列計算の対策価値が下がった
・対策困難だが時事問題も出るので、ニュースを確認しておくべき
という所感です。

## まとめ
なんとか合格といった感じです。とにかく修了証は早めにもらいましょう。
Clojure: DuctでRSSリーダーを作る - HoneySQL

![advent_calendar_2024.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985550/f4cd8ce0-6352-a1d8-4cae-f39dd44f4def.png)

[*Advent Calendar 2024 Day 23*](https://qiita.com/advent-calendar/2024/clojure)

昨日は環境変数を扱いました。
今日はよりDBからのデータ取得周りを改善してみます

`HoneySQL`というSQLクエリをClojureのデータ構造（マップやベクター）として構築できるライブラリを使ってみます

https://github.com/seancorfield/honeysql

## HoneySQL

まずはプロジェクトにライブラリを追加します

```clojure:project.clj
  :dependencies [[org.clojure/clojure "1.10.3"]
                 ...
                 [com.github.seancorfield/next.jdbc "1.3.981"]
                 [com.github.seancorfield/honeysql "2.6.1243"] ; 追加]
```

次にREPLで実際に使ってみます

```clojure:REPL
(require '[honey.sql :as sql])
; nil

(def select-all (sql/format {:select [:*] :from [:feed]}))
; #'clojure-rss-reader.handler.feeds/select-all

select-all
; ["SELECT * FROM feed"]
```

このようにSQLを直接書かずに、マップで表現することができました。


これをハンドラーに組み込んで実装してみます

```clojure:handler/feeds.clj
(ns clojure-rss-reader.handler.feeds
  (:require [ataraxy.response :as response]
            [integrant.core :as ig]
            [next.jdbc :as jdbc]
            [next.jdbc.result-set :as rs]
            [honey.sql :as sql]))

(def select-all (sql/format {:select [:*] :from [:feed]}))

(defn get-feeds [db]
  (let [result (jdbc/execute! db select-all {:builder-fn rs/as-unqualified-lower-maps})]
    {:feeds result}))

(defmethod ig/init-key ::get [_ {{:keys [spec]} :db}]
  (fn [_]
    [::response/ok (get-feeds spec)]))
```

今まで `jdbc/execute! db ["SELECT * FROM feed"] {:builder-fn ...}`のように直接SQLを書いていたところを置き換えることができました

HoneySQLを活用することで可読性や保守性高く実装することができそうです
{作成}ローカルLLMを用いた権限昇格の実験

# 導入
MBSDさんのブログより、LLMをペンテストに使用している例を見てローカルLLMで試してみました。
https://www.mbsd.jp/research/20241210/ai/

# 内容
今回の対象マシンはVulnHubのToppo:1で、実行環境はKalilinuxです。
有名なツールであるLinpeasを対象マシンで実行し、その結果をローカルLLM（ollama,qwen2.5:3b）が分析し、ツール名を抜き出し、GTFOBinsにて検索を行い、コマンドを出力します。Webサイトのリクエストは一度きりで二回目以降は保存されたものが使われます。
### プロンプト
```
Instructions: The following is the result of running the elevation of authority investigation script. Please output
the name of the tool or command that may be promoted.
Input:
Output://Only the command or tool is output, no explanations, explanatory notes, or other aids are needed.
```
Temperature=0
# 結果
![スクリーンショット (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579096/4bef88e2-5317-10a5-a022-b404a217adb7.png)


このようになり、権限昇格用のコマンドを出力させることができました。コーディングはGPTなので素人でも数十分で作成できました。このような脆弱性自体存在する場合が少ないと思いますので娯楽ツールですね。
【若手】見積もりの重要性

# はじめに
こんにちは、リンクアンドモチベーションでプロダクトマネージャーをしている社会人2年目の丸井です。

今回、
- 開発プロジェクトのプロジェクトマネージャーを行っている方
- プロジェクト進捗について、感覚で「オンスケです」と言っちゃってる方

に向けて、**プロジェクトの意思決定に論理性を持たせるために適切な見積もりをしよう**
ということを、僕のプロジェクトマネジメントの経験を交えてお伝えしていこうと思います。

# 起こった問題について
あるプロダクトのアップデートを行うプロジェクトマネージャーとして、プロジェクトを推進したのですが、
**プロジェクトは前に進んでいるが、終盤まで不確実性がほぼ減らなかった**
ということが起こりました。

なぜ起こったのかを自分が行った内容を元にお伝えします。

#### ①感覚だけの見積もり
プロジェクト開始時にエンジニア経験がないにも関わらず、
完全に感覚で1.5ヶ月くらいで開発が完了すると予測しました。

#### ②信頼度0のマイルストーン作成
その後、信頼性がない予測を元にマイルストーンを敷いて進めていきます。
最初は材料のない中でマイルストーンを立てますが、
その後だんだんプロジェクトの実績を通した修正を行うべきです。
しかし、プロジェクトの着地点を把握していないので、その修正を行っていませんでいた。

#### ③遅すぎる見積もり依頼
そして、要件が固まり切ってからようやく見積もりの依頼を行いました。
この要件が固まり切ったタイミングはプロジェクトの最終月の頭です。
↑ここでようやく不確実性が減りました(下図を参照)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1531201/d9b6a0cf-2f6e-ac17-07ad-fa79abec3ca1.png)


つまり、プロジェクトの大半を感覚でしかマネジメントしいなかったのです。
これだけが原因とは言えませんが、プロジェクトは期間内に終わりませんでした。
期間内に終わらないかどうかの報告も遅くなってしまいました。


# 問題を解消する方法
行うべきだったのは、
精度が高くなくても良いから、定期的なタイミングで開発にどのくらいかかるのか？
という見積もりを行い、スケジュールをマネジメントすることでした。

ただ、ずっと見積もりをし続けていても、かえって効率を悪くしてしまいます。
そこで、先輩エンジニアからどのタイミングでどの粒度の見積もりをするべきかを
教えていただいたので、その方法を共有します。

- **超概算見積もり**
    - タイミング
        - プロジェクト初期
    - 粒度
        - ポイント計算などなく、◯ヶ月くらいの粒度で出す
            - 経験のあるリードエンジニアが1時間くらいかけて見積もる
- **全量見積もり**
    - タイミング
        - 要求〜要件を決め始めたくらい
    - 粒度
        - 要件が詰まっていないところ関係なく、一旦全部ポイントを振る
- **詳細見積もり**
    - タイミング
        - 要件が固まって、数回スプリント回したくらい
    - 粒度
        - 具体的な着地点がだせるレベル

↓不確実性が減少していくイメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1531201/0ca358f6-e3a4-ac8d-19e4-c5e28d3eef50.png)


これを行うことで、予測に論理が伴います。
早いタイミングでプロジェクトの着地の予測が立ち、
間に合わなそうであれば、早期に対応することができます。

# 大事なポイント
### 見積もりをするタイミングを決めてしまうこと
×：情報が集まったら見積もる（積み上げ）
⚪︎：あるタイミングまでの情報を集めて見積もる（逆算）

そのタイミングまでにどれだけの情報を持って来るかが
プロジェクトマネージャーの腕の見せ所です。
エンジニアがどのような情報が欲しいのかを聞く / 想像して収集していきましょう。

### 精度が低くても一旦出してもらうマインドを持つ
見積もりはあくまで予測です。なので外れます。
ある程度は外れることをプロジェクトマネージャーが理解しておくことが大事です。
何もせずに感覚で予測するより、
何かしらの論理の通った予測を持つ方が何百倍も信頼度が高くなります。


# まとめ
この記事が、見積もりを適切に行えず、感覚的な意思決定をしてしまっている方の
参考になれば幸いです。

今回紹介した見積もりの方法は、さまざまな見積もり方法の内の一例なので、
参考程度に捉えていただければと思います！
【Goで学ぶコンピューターサイエンス】SSH(セキュアシェル)

## **SSH(セキュアシェル)**

セキュアシェル（SSH）は、リモートサーバーに安全にアクセスするためのプロトコルです。SSHは、暗号化を利用して通信を保護し、リモートのサーバーやデバイスにログインしたり、コマンドを実行したりするために広く使用されています。また、ファイル転送やポート転送といったさまざまな機能も提供します。

## **SSHの特徴**

### **セキュアな通信**
- SSHは通信内容を暗号化するため、パスワードや送受信されるデータが盗聴されるリスクを低減します
   
### **認証**
- ユーザー認証には、パスワード認証や公開鍵認証が利用されます
- 公開鍵認証を使用することで、より強力なセキュリティを実現できます

### **多機能**
- リモートシェルアクセス（ターミナル接続）
- セキュアなファイル転送（SCPやSFTP）
- トンネリング（ポート転送）

## **SSHの仕組み**

### クライアントとサーバー
- SSHはクライアントとサーバー間で動作します
- クライアント：リモートに接続するユーザーの端末
- サーバー：SSHサービスを提供するリモートデバイス

### 暗号化
- SSHは公開鍵暗号（RSA、ECDSAなど）を用いて認証を行い、その後に共通鍵暗号（AESなど）を使用してデータを暗号化します

### 認証
- **パスワード認証**
  - ユーザー名とパスワードで認証を行います
- **公開鍵認証**
  - クライアント側に秘密鍵を保存し、サーバー側に公開鍵を配置する方式。パスワードを使用せず、より安全

## **SSHの利用方法**

### **SSH接続の基本コマンド**
```bash
ssh username@remote_server
```
- `username`：リモートサーバーのユーザー名
- `remote_server`：リモートサーバーのIPアドレスやホスト名

### **公開鍵認証の設定**

#### 1. **秘密鍵と公開鍵の生成**
ローカルマシンでSSH鍵ペアを作成します。
これにより、秘密鍵と公開鍵が生成されます。
```bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
```

#### 2. **公開鍵をサーバーにコピー**
公開鍵をサーバーに転送します。

```bash
ssh-copy-id username@remote_server
```

#### 3. **公開鍵認証で接続**
鍵ペアを使ってリモートサーバーにログインできます。

```bash
ssh username@remote_server
```

### **SSHの応用**

- **ローカルポート転送**  
  ローカルマシンのポートをリモートに転送
  例: 踏み台サーバーから内部ネットワークにアクセスする際などに使用

  ```bash
  ssh -L 8080:localhost:80 username@remote_server
  ```

## お知らせ
今回はGoサンプルコードはありません。
アクセシビリティに興味がある、何から取り組めばいいか分からない人へ

# はじめに
この記事は、株式会社スピードリンクジャパン Advent Calendar 2024 の23日目の記事です。

https://qiita.com/advent-calendar/2024/slj

今回は、アクセシビリティに関心がある、必要なのは分かるけど、何から取り組めばいいか分からないといった方に向けてアクセシビリティに関する本を紹介していきたいと思います。

# アクセシビリティという言葉は聞いたことあるけど具体的にどういうものか知らない方へ
### アクセシビリティを考えはじめるための本
コードが出て来ない本で、アクセシビリティの基礎的なことが書かれた本です。
アクセシビリティを最初に勉強する人にとっては手に取りやすく、アクセシビリティがどういうものなのかを知ることができます。。

[アクセシビリティを考えはじめるための本](https://techbookfest.org/product/2KX3LTZs66Y6v8cZZ62mDW?productVariantID=8PkSFLD4Af6j6qYLaqkzNt)


### 見えにくい、読みにくい「困った！」を解決するデザイン
色、文字、ことば、図解、UIという5つの切り口から情報伝達に関する困ったを解決するために、デザインで解決できることをまとめた本です。
誰がどんなことに困っているのかを知れるので、これからアクセシビリティを勉強したい方におすすめです。
また、デザインの話が出てくるので、デザイナーの方にもぜひ読んでほしい一冊です。

[見えにくい、読みにくい「困った！」を解決するデザイン](https://www.amazon.co.jp/dp/4839987505?ref=cm_sw_r_cso_cp_apin_dp_JD4A21PGNQEMTFW8KWKM_1&ref_=cm_sw_r_cso_cp_apin_dp_JD4A21PGNQEMTFW8KWKM_1&social_share=cm_sw_r_cso_cp_apin_dp_JD4A21PGNQEMTFW8KWKM_1&skipTwisterOG=1)

# 実際に何から取り組んだら良いか分からない方へ
### webアプリケーションアクセシビリティ
本格的な内容を含む専門的な本です。
HTML、WAI-ARIA、フォーム、色、テストなど、実装方法を含めてより実践的な内容について解説されているので、ウェブアプリケーションの開発に関わっている方におすすめです。

[webアプリケーションアクセシビリティ](https://www.amazon.co.jp/dp/4297133660?ref=cm_sw_r_cso_cp_apin_dp_9VW5481P1R491Z2ZSZ6K_1&ref_=cm_sw_r_cso_cp_apin_dp_9VW5481P1R491Z2ZSZ6K_1&social_share=cm_sw_r_cso_cp_apin_dp_9VW5481P1R491Z2ZSZ6K_1&skipTwisterOG=1)

### モバイルアプリアクセシビリティ入門
モバイルアプリケーションにおけるアクセシビリティの入門書です。
iOSとAndroidの両方の説明があるので、モバイルアプリケーションの開発をしている方はこちらがおすすめです。

[モバイルアプリアクセシビリティ](https://www.amazon.co.jp/%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B7%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E5%85%A5%E9%96%80%E2%94%80%E2%94%80-iOS%EF%BC%8BAndroid%E3%81%AE%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%81%A8%E5%AE%9F%E8%A3%85-%E9%98%BF%E9%83%A8-%E8%AB%92/dp/4297146029/ref=pd_aw_sim_hxwPO1_sspa_mw_detail_m_sccl_1/355-1226727-4075858?pd_rd_w=CHTJ0&content-id=amzn1.sym.79bc41f3-2833-44ed-a262-049be8aa1b2d&pf_rd_p=79bc41f3-2833-44ed-a262-049be8aa1b2d&pf_rd_r=RDVBJD9DAY2FQZNK1VAY&pd_rd_wg=uJkSf&pd_rd_r=1e830dc6-4845-40ee-ab43-8419dd289b3b&pd_rd_i=4297146029&psc=1)

# 最後に
今回、紹介したもの以外にも多くの本が出版されています。
デザイン関係の本が比較的多い印象です。
それぞれの開発分野に合わせた本をぜひ探してみてください。
ここまで読んでいただきありがとうございました。
マイクロUSBのコネクタ

USBの電子工作をする時にUSBコネクタを使う時があります。

![20241220081606697 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/f09abbb7-a604-5d56-2847-c1380499d536.jpeg)

普通こうやって使いますが、コネクタがもげる事があります。

ふと思いついたのですが、

![20241220081524778 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/d433a53c-efe5-8ee2-0d0f-25a695240446.jpeg)

こうして基板と挟んで使うともげにくいかもしれません。

マイクロUSBのコネクタも変換基板を使うとB端子と同じくらいスペースを使います。だったらがっちり固定できるB端子でいいんじゃないって、言う人もいそうですが、

今度なにか作る時に試してみようと思います。

こうなりました。

![写真（2025-04-11 10.34）.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/46d59252-2a55-4f6c-859f-de58768ca6ea.jpeg)
-python- 初心者がよく間違えるcsv結合



<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/e9bca0b4-aa0d-9536-8279-4de19ffb9747.jpeg" width=80%>

コード書いて確認した時によく修正する箇所を書きました
あ、これしたことあると思っている方は多いと思います


## すべてヘッターありで結合している
### わーってやったわって思うランキング１位


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/df2d9f74-4e30-5e6a-84ba-ef530ae855d0.png" width=30%>


毎日コード見ている方でも、初歩的なミスしてしまうものです
データ数多い時に限ってやってしまいます

## 解決方法


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/87762c31-fa0d-6806-f014-4a5da9d88897.png" width=60%>

① pythonでは、0から数えるので一番初めのCSVをif文でとりだす
② ```header=``` A列＝0番目　ヘッターにする
2番目以降は、 ```None`` でなしにする


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/684d6f0e-47f3-2a6d-4612-6086b51f73f1.png" width=30%>


# 全体コード

<details><summary>全体コードはこちら</summary>

```python:python
import pandas as pd
import glob

# CSVファイルが保存されているディレクトリのパス
csv_directory = './csv_files/'  # 必要に応じて変更

# 指定ディレクトリ内のすべてのCSVファイルを取得
csv_files = glob.glob(csv_directory + '*.csv')

# 結合用のリストを作成
dataframes = []

# ファイルを順番に処理
for i, file in enumerate(csv_files):
    if i == 0:
        # 最初のファイルはヘッダー付きで読み込む
        df = pd.read_csv(file, header=0)
    else:
        # 2個目以降はヘッダーを無視して読み込む
        df = pd.read_csv(file, header=None)
    dataframes.append(df)

# すべてのデータフレームを縦方向に結合
merged_df = pd.concat(dataframes, ignore_index=True)

# 結合結果を確認
print("結合されたデータ:")
print(merged_df)

# 結合結果を新しいCSVファイルに保存
merged_df.to_csv('merged_data.csv', index=False)
print("結合したCSVを 'merged_data.csv' として保存しました。")

 ```
 </details>
(*^^*)おじさん構文に使われる顔文字生成(*^^*)


## はじめに
(⌒▽⌒)、٩( 'ω' )وこのような絵文字、いまでは🤗、😤があるので見かけなくなりました
「おじさん構文」の意味は、ガラケーで使われており、スマホに切り替わったタイミングでもこの絵文字を使い続けている人のことみたいです。
私は、自分の携帯を持つのが遅く、ちょうど自分の携帯＝スマホからのスタートだったので、絵文字＝🤗、😤でした。

今回は、この絵文字は組み合わせなのでpythonでオリジナル作れるのでは？と思い作ってやってみました


## おじさん構文絵文字生成


```python:python
import random

# 顔のパーツ
eyes = ["@", "O", "^", "-", "T", "o", "*", "X"]
mouths = ["_", "-", "~", "o", "ω", "Д", "∇", "з"]
cheeks = ["(", ")", "[", "]", "{", "}", "╹", "╻"]

# ランダム顔文字を生成する関数
def generate_face():
    left_cheek = random.choice(cheeks)
    right_cheek = random.choice(cheeks)
    eye_left = random.choice(eyes)
    eye_right = random.choice(eyes)
    mouth = random.choice(mouths)
    face = f"{left_cheek}{eye_left}{mouth}{eye_right}{right_cheek}"
    return face

# 複数の顔文字を生成
def generate_faces(number=10):
    print("ランダム顔絵文字ジェネレーター！\n")
    for _ in range(number):
        print(generate_face())

# 実行
generate_faces(10)

```



<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/89986f49-00f7-6e04-8196-3ac954c5e568.png" width=20%>



## 最後に
んっん、わからない
逆に、この絵文字の意味をAIに解読させた方が需要あったのかもと思いつつ、ここら辺にしておきます

「定時で帰りたい」をコンセプトに業務効率について投稿しています！
他の記事も見て見てください！
声でつながるAIとの対談: 挿入曲 #9 - Hip hop, Jazz, Piano【Suno AIでつくった楽曲】 v4 & Custom Mode: On 【動画 1分33秒】【YouTubeチャンネルからの転記です】

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

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

こちらが動画内容です👇

***

![01 YouTubeサムネイル & 再生中の画像 Suno AI _ 声でつながるAIとの対談_ 挿入曲 #9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386308/3da2a860-0886-fbf0-8405-bbbc98790171.png)




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

<br>

* # 動画タイトル
    * 声でつながるAIとの対談: 挿入曲 #9 - Hip hop, Jazz, Piano【Suno AIでつくった楽曲】 v4 & Custom Mode: On 【動画 1分33秒】

<br>

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

📅撮影日 = 2024-12-12(木)

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

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

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

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


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

“声でつながるAIとの対談”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghOpTHU0rmfXSgjqV1_j6Eao
👆の挿入曲としてつかう予定です。

ぜひ聴いてみてください。
そして、ぜひみなさんも、ご自身の対談、番組、コンテンツのために楽曲をつくってみてください！

作曲日:
2024-12-02(月)

Suno AI 契約の種類:
Pro Plan

Suno AI Version:
v4

楽曲の正式名称:
声でつながるAIとの対談: 挿入曲 #9 - AI Voice Talks: Minimal Melody

Suno AI Library URL:
https://bit.ly/AI-Voice-Talks-Minimal-Melody-09

Custom Mode: On

Audio Inputs: Not Used

Instrumental:


---


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


🇬🇧English

[Scat][Hiphop][Jazz][Piano][220 Seconds][Break][Outro]


🇯🇵日本語訳

[スキャット][ヒップホップ][ジャズ][ピアノ][220秒][ブレイク][アウトロ]


---


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


---


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


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


　・“声でつながるAIとの対談”シリーズ
　https://www.youtube.com/playlist?list=PLpQhBHT4oghOpTHU0rmfXSgjqV1_j6Eao


✓ 🎥Shortened URL for this video | この動画の短縮URL ↙
　https://bit.ly/3VApyXj
Network Status

[Previous << Get Collection](https://qiita.com/flowcadence/items/d8a09cefcb361a99826e)
[Next >> Generate a Signature](https://qiita.com/flowcadence/items/85bdee18d6cc9b28cc2f)

https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#flow-cli-と-fcl

Flow CLIは、指定したFlow Access Nodeのネットワークのステータスを取得するコマンドを提供しています。

```ruby
flow status
```
<h1>Example Usage</h1>

```ruby
> flow status --network testnet

Status:		 🟢 ONLINE
Network:	 testnet
Access Node:	 access.devnet.nodes.onflow.org:9000
```

<h1>Flags</h1>


<h3>Network</h3>

* Flag: `--network`
* Short Flag: `-n`
* Valid inputs: the name of a network defined in the configuration (`flow.json`)

どのネットワークに対してコマンドを実行するのかを指定します。

<h3>Host</h3>

* Flag: `--host`
* Valid inputs: an IP address or hostname.
* Default: `127.0.0.1:3569` (Flow Emulator)

コマンドの実行に使用する Access API のホスト名を指定します。このフラグは、`--network` フラグで定義されたホストをすべて上書きします。

<h3>Network Key</h3>

* Flag: `--network-key`
* Valid inputs: ホストの有効なネットワーク公開鍵の 16 進数文字列

コマンドを実行する際に、セキュアなGRPCクライアントを作成するために使用するAccess APIのネットワーク公開鍵を指定します。

<h3>Filter</h3>

* Flag: `--filter`
* Short Flag: `-x`
* Valid inputs: a case-sensitive name of the result property.

結果から、唯一の値として取得したいプロパティの名前を指定します。

<h3>Output</h3>

* Flag: `--output`
* Short Flag: `-o`
* Valid inputs: `json`, `inline`

コマンド結果のフォーマットを指定します。

<h3>Save</h3>

* Flag: `--save`
* Short Flag: `-s`
* Valid inputs: a path in the current filesystem.

結果を保存したいファイル名を指定してください。

<h3>Log</h3>

* Flag: `--log`
* Short Flag: `-l`
* Valid inputs: `none`, `error`, `debug`
* Default: `info`

ログレベルを指定します。コマンド実行中に表示する出力を制御します。

<h3>Configuration</h3>

* Flag: `--config-path`
* Short Flag: `-f`
* Valid inputs: a path in the current filesystem.
* Default: `flow.json`

`flow.json` コンフィギュレーションファイルへのパスを指定します。`-f` フラグを複数回使用して複数のコンフィグレーションファイルをマージすることもできます。

<h3>Version Check</h3>

* Flag: `--skip-version-check`
* Default: `false`

低速な接続を避けて処理を高速化するために、起動時のバージョンチェックをスキップします。

*Last updated on **Dec 9, 2024** by **Alex***

翻訳元

https://developers.flow.com/tools/flow-cli/get-flow-data/get-status

***
<b>[Previous << Get Collection](https://qiita.com/flowcadence/items/d8a09cefcb361a99826e)
</b>

[Flow blockchain / Cadence version1.0ドキュメント](https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a) (Network Status)

<b>[Next >> Generate a Signature](https://qiita.com/flowcadence/items/85bdee18d6cc9b28cc2f)</b>
キャリアブレイク中のお金② 失業保険

# 失業保険
キャリアブレイク中のお金ですが、今回あてにしたのは失業保険です。雇用保険を給料から天引きされているので、働き続けていれば自己都合で辞めてももらえるお金です。どれぐらいの時期でどれぐらいの金額もらえるのかもあんまり分かっていなかったですが、キャリアブレイクを決めた時はこれをもらえる期間ぐらいは休もうと思っていました。

# 失業保険はいくらもらえるか
失業保険は、年齢と雇用保険を払った年数でもらえる日にちが決まります。自分は25年働いて自己都合で辞めたので150日、5ヶ月はもらえます。もらえる金額は多くても月20万ぐらいと聞きました。そこに税金がかかるなどはまだ分かってないので、今後調べます。つまり自己都合の場合は、最も多い人でも100万円です。

# 離職票
失業保険は自己都合の場合は、申請してから2ケ月はもらえません。以前は3ケ月でした。2025年4月からは1ヶ月になる動きもあるようです。申請してからなので、理想は辞めた次の日に申請したい所です。そのためには離職票が必要です。これは小さい会社だと会社側と事前に調整していないと、退職日の次の日にはもらえない可能性が高いと思います。僕はちゃんとネゴっておきました。

# 副業
自分は2週に1回の副業だけは続けています。失業保険中の副業に関してのルールも調べました。まず申請してから7日間は完全仕事禁止です。やると次の申請が伸びます。そこからは副業OKです。但し、1週間に20時間未満である必要がありそれ以上働くと失業状態として認められず対象から外れてしまいます。副業した日は、失業保険の給付対象から外れるのでその分は差し引かれます。

# 職業訓練
失業中は、職業訓練という制度があり、学校の費用が無料になるだけでなく、これをすると2ケ月の支給停止期間が減ったり、交通費が出ることもあるようで検討してみました。詳しく調べて結果辞めました。理由は単純に失業中の時間をほぼ取られるからです。普通に学校に行くのと変わらず週5で行く必要があり、そうなると自分の考えていた勉強が出来ないと思ったので辞めました。

# 職業訓練が必要な人
正直この職業訓練はかなり使いづらいと思います。職業訓練で訓練した内容は採用時の実務経験にはならないので、募集要項の実務経験を最初から叶えている人しか受けられないそうです。つまり自分にないスキルを養うためには職業訓練は使えず、それだけのスキルがあればそもそも職業訓練を受けるメリットがあまりありません。その上で、失業中の時間の多くを取られるので、この条件に当てはまる人って本当に極々一部だと思います。せめて実務経験と同等とするか、時間を減らしたコースを用意するか。もっとやり方あるんじゃないかなと強く思いました。

# 給付の条件
失業保険の給付条件で、就活をしてないと失業保険はもらえないことが分かりました。それも、例えば企業に話を聞きに行く程度では駄目で、履歴書を提出して面接している状態が最低条件のようで、これを月2回クリアしていないと支給はされません。ちょっとこれは誤算でした。話を聞きに行くというスタンスを取ろうとしていたので、予定を変える必要があるかもしれません。詳しい話は後日聞きに行こうと思います。

# まとめ
なんだかんだルールはありますが、働いていない期間にお金がもらえるかことは本当に有難いことです。この制度がなかったらキャリアブレイクしようとは考えなかったと思います（んー、でも、もしかしたら考えたかも）。一旦は支給されない2ケ月＋支給される5ヶ月で7ヶ月収入は減りますが、これが完全ゼロだと思うとうすら寒くなります。
Collections

[Previous << Blocks](https://qiita.com/flowcadence/items/5242f5342667771f4d30)
[Next >> Accounts](https://qiita.com/flowcadence/items/83d778f84f462cb43318)

https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#flow-developers

コレクションはブロックとトランザクションを結びつけます。コレクションノード(Collection node)のクラスタは、これらのコレクションを、（HotStuffコンセンサスアルゴリズムを使用して）[署名済みトランザクション](https://qiita.com/flowcadence/items/6393a2af33f82475a7ca)の1つ以上のハッシュの、順序付きリストから構成します。データを最適化するために、ブロックにはトランザクションは含まれません（Ethereumでは含まれます）。これの利点は、トランザクションデータがネットワークのコンセンサスノードに転送されることがなく転送速度が最適化され、このアーキテクチャではコレクションクラスタを追加することによって、取り込み速度を拡張できることです(allows scaling of ingestion speed by adding collection clusters)。コンセンサスノードは、実行するトランザクションの順序についてのみ合意する必要があり、トランザクションのペイロードを知る必要がないため、ブロックとコレクションを軽量にすることができます。コレクションノードは、それらをリクエストする者（実行ノードなど）のためにトランザクションのペイロードを保持します。(補足: scriptなどトランザクション結果をリクエストする関数はアクセスノードから実行ノードに向かいます)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912821/386bc281-373c-5d81-4327-261c2eec4152.png)

<h1>Collection Retrieval</h1>

Flow CLI を使用して、以下のコマンドを実行することで、コレクションデータを取得できます。

```ruby
flow collections get caff1a7f4a85534e69badcda59b73428a6824ef8103f09cb9eaeaa216c7d7d3f -n mainnet
```

[コマンドの詳細については、CLI ドキュメント](https://qiita.com/flowcadence/items/d8a09cefcb361a99826e)で確認してください。

コレクションはアクセスノード API から取得できます。現在、gRPC と REST API の 2 種類があります。それらに関する詳細な情報は、こちらでご確認ください：

[**gRPC Collection API**](https://developers.flow.com/networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api#collections)

[**REST Collection API**](https://developers.flow.com/http-api#tag/Collections)

上記APIを実装した複数のSDKが、さまざまな言語向けに提供されています。

[**Javascript SDK**](https://qiita.com/flowcadence/items/4174cc0ae785b1ddb1d6)

[**Go SDK**](https://qiita.com/flowcadence/items/3616deed7fbb2d69f91e)

Find a list of all SDKs [here](https://qiita.com/flowcadence/items/4d0e75b7f49d02f75445)

*Last updated on **Dec 9, 2024** by **Alex***

翻訳元

https://developers.flow.com/build/basics/collections

***

<b>[Previous << Blocks](https://qiita.com/flowcadence/items/5242f5342667771f4d30)
</b>

[Flow blockchain / Cadence version1.0ドキュメント](https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a) (Collections)

<b>[Next >> Accounts](https://qiita.com/flowcadence/items/83d778f84f462cb43318)</b>
エクセルファイルの各シートの選択位置と表示倍率を一括返還する

```python
import os
import openpyxl
from openpyxl.worksheet.views import SheetView

def set_cell_selection_and_zoom(file_path):
    workbook = openpyxl.load_workbook(file_path, keep_vba=True)
    for sheet in workbook.worksheets:
        sheet.sheet_view.selection[0].sqref = 'A1'
        sheet.sheet_view.zoomScale = 100
    workbook.save(file_path)
    print(f"Processed {file_path}")

def process_folder(folder_path):
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.endswith('.xlsx') or file.endswith('.xlsm'):
                file_path = os.path.join(root, file)
                set_cell_selection_and_zoom(file_path)

# 特定のフォルダパスを指定します
folder_path = 'XXXXX'
process_folder(folder_path)
```
[AWS #34] AWS Pricing Calculator

<!--
 <font color="c00000"></font> 赤
-->
## はじめに
皆さまお疲れ様です。
今回は<font color="c00000"> **「AWS Pricing Calculator」**</font>について見ていきたいと思います。
:upside_down: 「Calculator」は直訳すると<font color="c00000">**「計算器」、「電卓」**</font>です。簡単にまとめると **「AWSでどのくらいコストがかかるのかを事前に知るためのサービス」** です。

## AWS Pricing Calculator
**「AWS Pricing Calculator」** はAWSが提供するオンライツールです。
ユーザーは様々なAWSサービス（EC2、S3、RDSなどなど）を選択し、具体的な構成や使用料に基づいて<font color="c00000">**コストを詳細に見積もることができます。**</font>

:::note info
「クイック見積り」で簡易的に計算できるサービスもあります
:::

各サービスの特徴に応じてワークロード、データ転送コスト、ストレージオプションや使用ライフサイクルに基づいて見積り計算を行うことができます。

### メリット
クラウドサービスのコストは**使用量に応じて変動します。**
つまり<font color="c00000"> **「予算の管理が難しい」**</font>場合があります。今回のAWS Pricing Calculatorを使用すると、**事前に詳細なコスト見積りを行い、「予算」を適切に計画することが可能です。**

また、**使用するリソースの量や種類を適切に見積ることで、いらないリソースの使用を避けられます。** これによって、<font color="c00000">**無駄なコストを削減し、資源を最適に配分することが可能です。**</font>

### 気を付けるポイント
AWSの料金やサービスには<font color="c00000">**頻繁に更新**</font>されるため、**最新の情報を反映させることが重要**です。古い情報に基づいた見積もりは実際のコストと異なる可能性があります。「データの転送費用」「バックアップ」などの料金は、計算対象外となる小さいコストです。実際運用を開始すると、料金が発生するため、コストの見落としに注意です。

## おわりに
今回のちょっとしたまとめになります。

:::note info
AWS Pricing Calculatorは、**AWSのコストを詳細に見積もり、** <font color="c00000">**最適化する**</font>ためのオンライツールです
:::

:::note info
**正確なコスト予測、見積もりが可能**です。<font color="c00000">**予算管理が容易になる**</font>メリットもあります。
:::

:::note warn
**常に新しい情報を確認し、** 全ての関連コストを含めることが重要です
:::

最後までお読みいただきありがとうございました！
>>**日頃より活用している参考書です。**
>> **「参考書」**
[**AWS認定クラウドプラクティショナー改定第3版（AAWS Pricing Calculatorは382ページ）**](https://x.gd/19i6N)
>
> **「AWS公式サイト」**
[**AWS Pricing Calculator**](https://calculator.aws/#/)
WSONについて

WSONはVery-Very thin SONの略で、SONのなかでも特にパッケージ高さが低いものを表しています。
WSONの説明の前にまずはSONについて説明します。

# SON
SONはSmall Outline Non-leaded packageの略です。ICのパッケージの仕様で、リードの代わりに電極パッドが接続用の端子として使われているパッケージです。
SONの電極パッドはパッケージの2つの側面からでており、4側面から出ているものはSONではなくQFN(Quad Flat Non-leaded package)と呼ばれています。

リードがないためリードありと比較してパッケージサイズがコンパクトになる特徴があります。
また、SONの前に文字が付くことでパッケージ高さを表します。

# WSON
WSONはパッケージ取り付け高さが、0.65mmから0.80mmのSONです。
東芝が公開しているWSON10の仕様書を見るとパッケージの高さが0.75mmであるため、このパッケージはSONのなかでもWSONに該当することが分かります。

https://toshiba.semicon-storage.com/jp/semiconductor/design-development/package/detail.WSON10.html
FiveM運営を半年ぶりに手伝った振り返り

# FiveM運営を半年ぶりに手伝った記録

## はじめに
FiveMの運営を半年ぶりに手伝いました。  
まず言っておきますが、**FiveMの運営はマジで大変です**。  
「ちょっとやってみようかな」という軽い気持ちでは、なかなか続きません。

この記事では、私が体験したFiveM運営の現場と、そこでの学びを記録します。  
同じように運営に携わる方々の参考になれば幸いです。

---

## FiveM運営でやったこと

### 1. サーバー環境のメンテナンス
FiveMのサーバーは以下のような構成で動いていました：

- **OS**: Ubuntu 20.04
- **データベース**: MySQL (phpMyAdminを使用)
- **使用フレームワーク**: QBCore

# FiveM運営を半年ぶりに手伝った記録


### はじめに
FiveMの運営を半年ぶりに手伝いました。
正直、FiveMの運営は大変です。
設定やスクリプトの競合、そしてプレイヤーからの期待に応える責任があります。
今回は3日間の間に発生した問題、そしてその解決方法について記録します。

この記事を読んでいる方々に少しでも役立つ情報となれば幸いです。

# サーバー環境のメンテナンス

sudo apt update && sudo apt upgrade

# FiveMの最新バージョンをダウンロードして適用
wget https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/xxxx-xx-xx/fx.tar.xz
tar -xvf fx.tar.xz -C /path/to/server

サーバー自体は既にベースが構築済みだったため、この作業はスキップしました。
しかし、問題は次々に発生しました。

### qb-inventoryでの問題発生
ストレージスタッシュが使えない状態になっており、調査の結果以下の原因が判明。
カスタムフレーム版qb-inventoryが使用されていたことによる、以下の違い:
1. トリガーの命名規則が異なり、標準スクリプトが動作しない。
2. SQL構造の違いによるデータの呼び出し失敗。

解決策として、ox_inventoryを導入。しかし、次の問題が発生。
___

#  ox_inventory導入後に発生した問題
 ストアが開けない原因を調査したところ、競合するスクリプトの存在が判明。
 解決方法:
1.不要な古いスクリプトを無効化し、ox_inventoryを動作させる。
2. ox_inventoryの設定を以下のように調整:

# 更なる問題：無線やアイテムが使えない
qb-inventoryで動作していたアイテムが全て無効化。
```lua
-- 修正方法
['radio'] = {
    label = 'Radio',
    weight = 1000,
    stack = false,
    allowArmed = true,
    client = {
        event = 'qb-radio:use'
    }
},

['handcuffs'] = {
    label = 'Handcuffs',
    weight = 500,
    stack = false,
    allowArmed = true,
    close = true,
    client = {
        event = 'police:client:CuffPlayer'
    }
},

-- wasabiEMSアイテム修正
['medikit'] = {
    label = 'Medikit',
    weight = 165,
    stack = true,
    close = true,
    client = {
        event = 'wasabi_ambulance:revivePlayer'
    }
},
['defib'] = {
    label = 'Defibrillator',
    weight = 225,
    stack = false,
    close = true,
    client = {
        event = 'wasabi_ambulance:useDefib'
    }
}
-- これらを修正し、無線や救急アイテムの動作を回復させました。
```
#  jim-mechanicなどが動作しない問題
qb-coreのサポート終了とバージョン非対応が原因。
解決策
過去に運営していた身内サーバーからqb-coreを移植。
対応バージョンに合わせてスクリプトを修正することで解決。

:::note warn
注意
qb-coreやox_inventoryの対応バージョンはしっかり調べましょう(´・ω・`)
僕みたいに地獄を見ます
:::
#  3日間の間に起きたこと
### ・初日はサーバーの動作確認と環境の復旧作業。
### ・2日目はox_inventoryの導入と問題解決に奔走。
### ・3日目は残ったアイテムやスクリプトの修正を実施。
 プレイヤーからの感謝や協力の声に支えられました。
 また、多くの問題を乗り越えられたのは、運営チームの協力があったからです。

#  まとめ
### FiveMの運営は難しいですが、大変な作業を乗り越えた後の達成感は格別です。
### これから運営を始める方に、この記録が少しでも役立てば幸いです。
カート決済機能のイベントストーミングを実施してみた

# イベントストーミングとは
イベントストーミングは、システム内で発生する重要な出来事（イベント）を中心に、業務フローやシステムの動作を視覚的にモデル化する手法です。特にドメイン駆動設計（DDD）の文脈で活用されることが多いですが、単なる理論にとどまらず、関係者全員が集まり議論し、共通認識を深めるワークショップ形式で行うことが重要です

ワークショップでは、ドメインエキスパートや開発者など、さまざまな視点を持つ参加者が意見を出し合い、業務の全体像を俯瞰します。このプロセスを通じて、システム設計の方向性を共有し、実装に向けた具体的なインプットを得ることができます。

参考文献: EventStorming Book
https://www.eventstorming.com/book/

# イベントストーミングを実施した背景/目的
- 背景:
  - カート決済部では、モノリスからマイクロサービスへの移行を進めています。しかし、DDDの理解が十分でないメンバーもいることに加え、プロジェクト特有のドメイン知識を十分に共有できていない課題がありました。このため、全員でDDDとドメイン知識の双方を深める取り組みが必要でした。
- 目的:
  - 業務の全体像を把握し、チーム間で認識を統一する。
  - 新規参入メンバーがドメイン知識をスムーズに吸収できる環境を作る。

# 参加者
- 新規プロジェクト参入メンバー:5名
- ドメインエキスパート:4名

# 進め方

今回は「成瀬式」をさらに簡略化した方式でイベントストーミングを実施しました。
対面形式ではなく、オンラインツール「miro」を使用して実施しました。具体的な流れについては以下の動画で説明されています。

https://www.youtube.com/watch?v=jC9lE4YqgyY

## 1.ブレスト
- 思いつく限りのドメインイベントをオレンジの付箋に書いていく
- 重複しても問題なく、まずは記載

![スクリーンショット 2024-12-20 4.59.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323192/035742c3-cdd4-d3fc-d98f-a2b281aeed85.png)

## 2.イベントをタイムラインに並べる
- タイムラインに並べる
- 同じイベントを重ねる(miroで実施の場合は重複削除でも可)
- 不足しているイベントがあれば付箋を追加する

![スクリーンショット 2024-12-20 5.03.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323192/e3c77e5e-e3c3-8595-2271-d74c58ed764e.png)

## 3.カラーパズルをする
```
黄:アクター
青:コマンド
オレンジ:イベント
ピンク:外部システム
```
タイムラインに並べた付箋にコマンドなどをつけていく
![スクリーンショット 2024-12-20 5.57.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323192/8c281924-68a7-a319-0f5b-8404f4f681a0.png)

実際の成果物は以下の通りです。システム規模が大きいため、かなりのボリュームとなりました。

![スクリーンショット 2024-12-20 5.05.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323192/29662fd8-0628-bdd1-7215-6e35a272b4ee.png)

## 4.コンテキストで分ける
- 組織やアーキテクトによってコンテキストを分ける

![スクリーンショット 2024-12-20 6.07.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323192/9656ac56-8bcd-aa9d-10b0-ced4fbad3aef.png)

# イベントストーミングを実施してみて
Aさん
> DDD:基本的なことは理解している
>
> イベントストーミングを実施するにあたり、グループ分けの時点で考慮されていて、ドメインエキスパートを中心にそれぞれのメンバーが議論をしながら進めることができました。
> 業務知識の浅いメンバーでも理解できるように情報を整理したことで、全員が議論に参加できたと思います。
> システムの規模が大きいため、細部まで整理することはできませんでしたが、参加者全員の認識を合わせる粒度で実施できたことが良かったと思います。
>

Bさん
> DDD:入門レベル
>
> イベントストーミングに参加する前はドメイン知識が不足しており、業務フローやシステム設計に関する理解が十分ではありませんでした。
> しかし、ワークショップを通じて、実際の業務イベントを可視化しながら議論するプロセスにより、ドメイン知識を深めることができました。
> また、チーム全体の知識の共有にも効果的だと感じました。

# まとめ
- よかった点
  - ワークショップ形式でドメイン知識を学べる
  - 自然とユビキタス言語を策定できる
- 改善点
  - オンライン開催の難しさ: 発言頻度に偏りが出やすく、意見のバランスを保つ工夫が必要。
  - システム規模の影響: 全ステップを詳細に行うには時間が不足する。
説明責任を果たすことと喧嘩しても良いということとは違うねという話

今年を振り返る「なんかかく」アドベントカレンダー 20 日目です。もう 20 日だ！

就職して以来、1 社めでは会社の「文化」が大事だと言われてきました。私の経験は 1 社目 20 年弱 → 2 社目 2 年 2 か月という非常に偏ったサンプルですが、いずれも 文化 というか、皆の共通認識みたいな価値観に助けられていて、仕事へのスタンスや自身の居心地に大きく影響していると思ったので、その辺りを書いてみますというポエムです。

## 結論

その伝え方って結局目的を達成できると思う？

と考えると自然とトゲついた言葉は非合理的なので、あまり使わなくなると思う。まず自分のご機嫌をちゃんと取って、相手を尊敬しつつ、良い文化に貢献したい。


## 「説明責任」とか「誠実に」とか

説明責任とか誠実にふるまう、とかいうこと。1 社目の会社では、開発は「ステークホルダーへの説明責任を果たそう」と言われてきました。しかしそれは「正論をぶつけてステークホルダーと喧嘩しよう」じゃないな、と思っています。同じように「何故」を追求することも大事だと言われましたが、それも、「疑ってかかる」ためにするものじゃないなとおもっています。

不機嫌 ってコストですよね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/6a88c9d2-8b7a-eed4-feb0-de4718db98e6.png)


## 考え方の背景にある「文化」

「文化を変えようと思うのであれば、文化がどのように共有されているかを理解すること」というフレーズが [「システム運用アンチパターン」](https://qiita.com/e99h2121/items/5327cda822b8ea588169) で登場しました (これも最近読み直した)。

前職での文化は社長や上司が何度も何度も同じことを言いまくって伝承してきたもののような気がします。そして私も文化を共有してきた一人として、その文化は「天邪鬼がわいわいやるタコ部屋」みたいなもので、タコ部屋の中で受け継がれてきたものだった気がします。

文化とは、いま何ができるか、知っているかではなく、「自分がめっちゃ疲れてバスで座ってて目の前にお年寄りが来たら」どう行動するか、みたいな価値観が揃ってるのが大事、みたいな話です。

「なんとなく譲ったほうが良いと思うけどそれを上司が強制するとかだと違う」という意見が出たり、「それってお年寄りがムキムキマッチョだったらどうする？」とか、「自分も子連れだったら？」とか実際の状況ではもっと複雑にパラメータが変わります。

とくに「上司に言われたくない」というのも結構「ある」気がします。「んなことわかってたわ！席譲ろうとしてたわ！『上司』のせいでやる気なくなったわ！」とか、私は割と思ってました。

「バスで座ってて目の前にお年寄りが来たら」はただの比喩なのですが、実際の仕事の現場だったら例えば「金曜日の夕方 5 時にステークホルダーから『今日中にどうにかして』と言われたときにどうするか」とか「後輩に仕事を任せたがこういうミスをしてしまったときに仕事を任せた自分はどうするか」とかそういう具体的なシチュエーションでどう行動するか、ってのが概して合っていると職場に居やすいです。


## 「説明責任」と「ステークホルダーへのリスペクト」は「自分のご機嫌」で両立できる

説明責任に話を戻すと、説明責任は果たすにせよ、そのために他へのリスペクトをなくしては目的の達成に至らないなと最近では思っています。さらにまず自分のご機嫌を自分で取ることがだいじだなと感じています。自分の機嫌を取れると、相手へのリスペクトも忘れずにいられるくらい心に余裕が生まれます。

で、コツは「話し方」にもある気がしています。「真摯に話す」「戦場カメラマンのように話す」「お医者さんのように話す」

- お医者さんの話し方: https://jamitac.or.jp/pdf/230530_gairai.pdf
- [あわてない技術 #SRE - Qiita](https://qiita.com/e99h2121/items/21ae78f196f4cc66abd9)
- [期待値をコントロールする技術 #マネジメント - Qiita](https://qiita.com/e99h2121/items/57ad24245b8f3d1a83a2)
-  [IT エンジニアが対人関係でしくじらないために #ポエム - Qiita](https://qiita.com/e99h2121/items/99333306e66c77fcd3bb)

ただの些細な言い回しがどのように人に響くかとか、考える機会をもらえるようになった気がしています。で「説明責任」に関して考えると、ユーザーとは (喧嘩するのではなく) どう協業して現状の取れうる答えを見つけるかという面白い作業なわけです。

- 謝るときに謝りすぎない。気軽に謝ってると謝られたほうは本当に謝られるに値する迷惑を受けた気になってしまう
- 二重否定を使わない
- 無効にすることができない みたいな脳に負担のかかる言い回しをしない

などなど。

伝え方について気持ちが及ぶようになると、自然と、トゲついた言葉は結局相手を動かすという目的には不十分、非合理なので、選択肢から外れるようになります。そしてそこまで冷静に考えが及ぶようになるためにはまず、自分のご機嫌をちゃんと取らねばとなるわけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/ada69897-b012-7baa-82b0-52be34d6af88.png)


## まとめ

- 1 年め ... 仕事を覚える
- 2 年め ... 仕事をして、人の役に立てるようになることを覚える
- 3 年目 ... 仕事をして、人の役に立てるようになることを覚える + 質と量を伸ばしていく 

説明責任を果たすことと喧嘩しても良いということとは違う。なんだか結果的に技術とは技術以外の領域でどれだけ相手を尊敬してふるまえるかということが [最強のスタッフ エンジニア](https://qiita.com/e99h2121/items/0651c457ebd277b05e5f) だなあなどと感じつつ、お仕事を面白がっております。
VSONについて

VSONはVery Simple Object Notationの略で、JSONのいくつかの問題を解決したフォーマットです。
JSONの問題と、それをVSONがどのように解決したのかを紹介します。

# コメント
VSONではコメントさサポートされています。 `/*` から `*/` の範囲をコメントとして扱うブロックコメントと `//` から行末までをコメントとして扱う行コメントの2種類があります。

# 日付型
JSONでは日付を扱うための統一された手段がなく、各自が様々なフォーマットで日付を扱っていました。VSONではISO 8601形式で日付を扱う型がサポートされています。
年月日をハイフンで区切って日付を表します。その後ろにTを配置した後に時刻を追加もできます。またタイムゾーンの表記を追加することもできます。

# Unicodeエスケープ
ES6の文字列リテラルの表記法でUnicodeを記述できます。JSONでサポートされていた `\u0000` という形式に加えて、`\u{000000}` という形式で4桁以上の桁数を持ったUnicodeコードポイントを指定できます。

# データポータビリティ
JSONは文字列中に以下の行終端文字を含むことができるが、これはJavaScriptの文字列では許されていません。そのため問題が生じることもあります。VSONではこれらの文字はエスケープされなければならないとされています。

- U+0085 (next line)
- U+2028 (line separator)
- U+2029 (paragraph separator)


出展: 

https://vson.org/
Emacs Lisp 超初心者がコマンドを作ってみる 〜 そもそも動かない-括弧対応ミスUnbalanced parentheses 〜

# はじめに

まずは、そもそもシンタックスエラーで動かない時には

End of file during parsing

と素っ気ないメッセージが出て

で、これの詳細を見ようと C-M-x eval-defun すると
一番よく拝むハメになるのが

Scan error: "Unbalanced parentheses", 1027, 2603

という、「括弧の対応が合ってない」というエラーなのだけど、
これの数字の意味を知らなかった。 桁位置,行位置って訳でも無いしな？

# Scan error: "Unbalanced parentheses" の数字の意味

ポイントだそう。

指定のポイントに移動するには

M-g c goto-char を使う。

今回は 1027 は (defun の先頭の括弧で、 2603 はバッファ末尾だった。

約に立たねぇ！ だいたいおおまかにそこらへんの範囲でズレてるだろって事だそうである。

# 括弧対応間違いの探し方

探し方は、公式には
こちらさんを参考にしてください。
19.3 無効なLisp構文のデバッグ
https://ayatakesi.github.io/lispref/29.4/elisp-ja.html#Syntax-Errors

個人的には Emacs など Elisp-mode を備えたエディタで括弧の対応を見つつ、 特にクローズ側はまとめて書いてしまわずにそれぞれ1行ずつとって閉じるように書く

ありがちな書き方。とにかく閉じ括弧を纏めてしまう。
````elisp
(defun po-ediff-previous-msgid ()
  "Ediff previous msgid (marked #| ) and msgid."
  (interactive)
  (require 'po-mode)
  (po-find-span-of-entry)
  (let ((oldbuf (current-buffer))
	(msgid (po-get-msgid))
	(untranslated-regions (po-previous-untranslated-regions)))
    ;; source buffer for buffer-A
    (save-current-buffer
      (set-buffer (get-buffer-create
		   po-ediff-previous-msgid-buffer-a-name))
      (dolist (region untranslated-regions)
	(insert (po-extract-previous-msgid oldbuf (car region) (cdr region))))
      (restore-buffer-modified-p nil))
    ;; source buffer for buffer-B
    (save-current-buffer
      (set-buffer (get-buffer-create
		   po-ediff-previous-msgid-buffer-b-name))
      (insert msgid)
      (restore-buffer-modified-p nil)))
  )
````

個人的にやってる書き方。行数増えちゃいますけど、括弧の対応を重視
````elisp
(defun po-ediff-previous-msgid ()
  "Ediff previous msgid (marked #| ) and msgid."
  (interactive)
  (require 'po-mode)
  (po-find-span-of-entry)
  (let (
	(oldbuf (current-buffer))
	(msgid (po-get-msgid))
	(untranslated-regions (po-previous-untranslated-regions))
        (beg-A)
	(end-A)
	(beg-B)
	(end-B)
	)
    ;; source buffer for buffer-A
    (save-current-buffer
      (set-buffer (get-buffer-create
		   po-ediff-previous-msgid-buffer-a-name))
      (setq buffer-read-only nil)
      (erase-buffer)
      (dolist (region untranslated-regions)
	(insert (po-extract-previous-msgid oldbuf (car region) (cdr region)))
	)
      (setq beg-A (point-min))
      (setq end-A (point-max))
      (goto-char (point-min))
      (push-mark (point-max) t t)
      (setq buffer-read-only t)
      (restore-buffer-modified-p nil))
    ;; source buffer for buffer-B
    (save-current-buffer
      (set-buffer (get-buffer-create
		   po-ediff-previous-msgid-buffer-b-name))
      (setq buffer-read-only nil)
      (erase-buffer)
      (insert msgid)
      (setq beg-B (point-min))
      (setq end-B (point-max))
      (goto-char (point-min))
      (push-mark (point-max) t t)
      (setq buffer-read-only t)
      (restore-buffer-modified-p nil))
    ;; run ediff
    (ediff-regions-internal
     (get-buffer po-ediff-previous-msgid-buffer-a-name)
     beg-A end-A
     (get-buffer po-ediff-previous-msgid-buffer-b-name)
     beg-B end-B
     nil 'ediff-regions-wordwise 'word-mode nil)
    )  ; end of let
  )
````
外部キー制約の役割と活用

## はじめに
RDBにおいて、データの整合性を保つための重要な仕組みである外部キー制約についてまとめてみました

## 外部キー制約とは？
外部キー制約（Foreign Key Constraint）は、テーブル間のリレーション（関連性）を保証するための仕組みです。具体的には、「親テーブルに存在しないデータを子テーブルが持つことが無いようにするための制約」です。
参照されるのが親テーブル、参照するのが子テーブルと呼ばれます
例えば、部署テーブル(親)と社員テーブル(子)があり、社員テーブルに部署IDのカラムがあった場合、存在しない部署IDで社員テーブルにデータを登録できないようになります。

## 外部キー制約のメリット

#### データの一貫性を強化
前述の通り子テーブルのデータが必ず親テーブルの有効なデータを参照するよう強制される

#### アプリケーションコードの簡略化
データベースが参照整合性を管理するため、アプリケーションでの検証コードが不要

#### データの削除や更新の安全性向上
親データの削除や更新時の動作を明確に設定できる

## 外部キー制約の動作
外部キー制約にはいくつか種類があります

- ON DELETE CASCADE
親テーブルのデータ削除時に、子テーブルの関連データも自動的に削除。

- ON DELETE SET NULL
親データ削除時に、子テーブルの該当カラムをNULLに設定。

- RESTRICT
親データ削除時にエラーを発生させ、削除を禁止。

- NO ACTION
親データ削除時に特定の動作を行わない（デフォルト動作）。

外部キー制約(ON DELETE CASCADE)サンプルコード
```sql:sql
CREATE TABLE parent (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

CREATE TABLE child (
  id INT PRIMARY KEY,
  parent_id INT,
  FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE
); /* 外部キー制約(ON DELETE CASCADE)
```


## 外部キー制約を使用する際の注意点
以下の懸念から、あえて外部キー制約を設定しないという選択肢も生まれてきます。
#### パフォーマンスの低下
外部キー制約があると新しいレコードを入れたり既存のレコードを更新・削除する時に参照が正しいかどうかチェックするため、パフォーマンスが低下します。１レコードだけであれば大した低下は招かないと思いますが、大量データの挿入・更新だとかなり遅くなる可能性があります。

#### NULLの扱い
子テーブルの外部キーがNULLを許容する場合、参照整合性が崩れるリスクがあるため、基本的にはNULLを許容しない前提の設計がオススメです。ただドメインの特性上NULLを許容せざるを得ない場合もありますので、その場合は許容して良いかと思います。（NULLは悪ではない）

#### 循環参照のリスク
親と子が互いに参照し合う状態が起きると、外部キー制約で何もできなくなります。（あまりないと思いますが
テーブル設計時に、循環参照が発生しないよう注意が必要。

## まとめ
外部キー制約は、RDBでデータの整合性を保証するための仕組みです。適切に活用することで、信頼性の高いデータベース設計が可能になります。一方で、パフォーマンスやドメインの複雑さが原因で外部キー制約を使用しないという選択肢もあるので、これらを踏まえた上で適切に設計できると良さそうです。
読んでいただきありがとうございました！

## 参考記事
https://products.sint.co.jp/siob/blog/what-is-foreign-key

https://qiita.com/SLEAZOIDS/items/d6fb9c2d131c3fdd1387
[備忘録]　詳解確率ロボティックスの勉強をYoutubeで行った ～1章

# はじめに
　こんにちは，Umamusume22です。最近、自動運転のビジネスに興味があるため詳解確率ロボティックスの本を使って勉強しています。といっても本は実家に置いてきました、、、そこで、今回は詳解確率ロボティックスの1章の勉強をYoutubeで行いました。

 
 # 備忘録
 - 確率ロボティックス：分からないことをロボットで扱うための分野
     - 工場や家庭でロボットを扱うのは不確かなことが多数
     - ロボットは不確かな状況で稼働することが要求される
     - 不確かな状況で稼働するために数学が必要
     - 人間は分からないことがあっても動くことは可能 
(例：目的地までの距離が不明でも目的地まで移動することが出来る)  

- 航海術＝ナビゲーション技術
    - 大航海時代では上陸したらまず測量を実行していた
- アプロ計画でカルマンフィルタを利用
    - 宇宙船の姿勢を推定し、その姿勢を光学観測の情報で修正することを逐次的に繰り返す
    - 宇宙船の姿勢が誤差の見積もりつきで推定される
- 自己位置推定：移動ロボットも自身の位置を把握する必要がある
 

# 最後に
　勉強した内容を備忘録にしました

 

ここまで記事を読んでいただきありがとうございました！

※ウマ娘の声をフーリエ変換した記事や水栓の開閉判定をLineに通知する記事も書いています．suzuが私です．興味がある方はぜひご覧ください！
https://vigne-cla.com/31-1/#toc5

※noteもやっています．
https://note.com/madoka235/n/nbba2153326e1

ぜひフォローよろしくお願いします!
[TypeScript]Objectのvalueの受け取り方で驚いた事例（備忘録）

## 何が起きた

下記のように関数を書いていたのをChatGPTと一緒にリファクタリングしていたら、出てきた案が「そんなのあるの？！」という感じだったので共有します。

```typescript:いつもの書き方
// （前略）

type CreateAudioMetaProps = {
  title: string;
  filePath: string;
};

export const createAudioMeta = (
  realm: Realm,
  { title: titleA, filePath: filePathB }: CreateAudioMetaProps // ←よく見る書き方で安心する
) => {
  realm.write(() => {
    realm.create(AudioMeta, {
      _id: new Realm.BSON.ObjectId(),
      title: titleA,
      filePath: filePathB,
    });
  });
};
```


## 結論

Objectのkeyとvalueの文字列を一致させることで、Objectのvalueの記述を省略できるらしいです。

```typescript:驚きの書き方
// （前略）

type CreateAudioMetaProps = {
  title: string;
  filePath: string;
};

export const createAudioMeta = (
  realm: Realm,
  { title, filePath }: CreateAudioMetaProps  // ← こんな書き方ができるらしいです
) => {
  realm.write(() => {
    realm.create(AudioMeta, {
      _id: new Realm.BSON.ObjectId(),
      title,                                 // ← こんな書き方ができるらしいです
      filePath,                              // ← こんな書き方ができるらしいです
    });
  });
};
```

<br>

これが筆者の驚いた書き方で、備忘録がてらの共有でした。
皆さんのソースコードリーディング力の底上げのお力になれれば幸いです。
Pythonの基本用語

最近、AWS Lambdaを使い始めたのでPythonの基礎的な知識を備忘録として残します。

## モジュール
モジュールは関連する関数や変数をまとめた一つのファイルです。

### たとえ
文房具のセット
ペンや消しゴム定規などが一つのセットまとめられているセット
必要なときに取り出して使用するというイメージ。

### 例
```py
import math

# mathモジュールから平方根を計算するsqrt関数を使用
print(math.sqrt(16))  
# 出力: 4.0
```

## クラス
クラスは、オブジェクトの設計図のようなもの。
クラスには、オブジェクトが持つべきデータ（属性）や機能（メソッド）を定義します。

### たとえ
設計図に例えられます。
車の設計図がどんな車を作るかを決めるように、クラスはどんなオブジェクトを作るかを決定します。
設計図があれば何台でも同じ車を作れるのと同様、クラスを使っていくつでもオブジェクトを作成できます。

### 例
```py
class Car:
    def __init__(self, brand, color):
        self.brand = brand
        self.color = color

def drive(self):
print(f"{self.color} {self.brand} is driving!")

my_car = Car("Toyota", "Red")
my_car.drive() 
# 出力: Red Toyota is driving!
```
###  クラスの定義
class: Pythonでクラスを定義するためのキーワード。
Car: クラスの名前。慣習として、クラス名は先頭を大文字にします。
役割: Carクラスは、車をモデル化する設計図で、属性（データ）とメソッド（機能）を持ちます。

### \_\_init\_\_:
 クラスのインスタンスが作成されたときに自動的に呼び出される「コンストラクタ」と呼ばれる初期化メソッド。
オブジェクトの初期化を行う。
引数:
### self:
 作成されたインスタンス自身を指します。メソッド内でインスタンスの属性にアクセスするために使用します。
 インスタンスが作成されるたびにPythonが自動で渡します。
### brand, color:
 インスタンスを作成する際に指定するデータ（引数）。
### self.brand = brand:
 インスタンスの属性brandに、引数brandの値を代入します。
 self.colorも同様に設定します。


## オブジェクト
オブジェクトとは、データ（値）と、そのデータを操作する機能（メソッド）をまとめたもの。
すべてのデータ（例えば数値や文字列）はオブジェクトとして表現される。
### たとえ
「クラス」が「設計図」なら、「オブジェクト」はその設計図から作られた「実際の製品」です。
設計図から作られた車1台1台が「オブジェクト」に相当します。

```py
text = "Hello, Python"
# 文字列オブジェクト
print(text.upper())  
# オブジェクトのメソッドを呼び出し、大文字に変換
# 出力: HELLO, PYTHON
```


## メソッド
オブジェクトに関連付けられた関数のことです。
オブジェクトはデータとそのデータを操作するための関数
### たとえ
メソッドはリモコンのボタンと同じ
電源を入れたり消したりボタン、音量を上げ下げするボタン。
チャンネルを変えたりするボタンである。
### 例
```py
my_list = [1,2,3]
my_list.append(4)  # リストに4を追加する
print(my_list)
# 出力 [1,2,3,4]
```


## 関数
一連の処理をまとめたものです。
特定の入力を受け取り、何らかの出力を返します。

### たとえ
関数を料理のレシピと同じ。
レシピには使用する材料や調味料、その材料をつかって料理を作る手順が書かれている。完成した料理が出力となります。

### 例

「こんにちは！●●さん！」という型を作る場合
```py
def greet(name):
 return f"こんにちは！（name）さん！"
print(greet("太郎"))
# 出力 こんにちは！太郎さん！
```



## 引数
引数は関数やメソッドを渡す入力例のことをさします。

関数は引数を使って処理を行います。

レシピの中の材料のことをさします。
さきほどgreet関数のnameになります。

### 例
```py
def add(a, b):
    return a + b
# 引数を受け取る関数

print(add(3, 5))  
# 引数に 3 と 5 を渡す
# 出力: 8
```
AWS AutoScalingグループで手動でスケールアウトをしてみた

## はじめに
この記事は [アイスタイル Advent Calendar 2024](https://qiita.com/advent-calendar/2024/istyle) 23日目の記事です。

はじめまして。今年9月にアイスタイルへ入社しました、watanabeykです。
決済の開発・運用に携わっています。

入社してから初めて運用業務でAuto Scalingグループでのスケールアウトを実施したので
手順をまとめました。

## Auto Scallingとは
>Amazon EC2 Auto Scaling は、アプリケーションの負荷を処理するために適切な数の Amazon EC2 インスタンスを利用できるようにします。Auto Scaling グループと呼ばれる EC2 インスタンスの集合を作成します。各 Auto Scaling グループ内のインスタンスの最小数を指定することができ、Amazon EC2 Auto Scaling グループはこのサイズよりも小さくなることはありません。各 Auto Scaling グループ内のインスタンスの最大数を指定することができ、Amazon EC2 Auto Scaling グループはこのサイズよりも大きくなることはありません。

公式ドキュメントから引用（[Amazon EC2 Auto Scaling とは](https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html)）

アプリケーションの負荷に応じ、Auto Scalingグループ内の指定した最小数・最大数の範囲の中でインスタンスを起動・終了して効率的にリソース管理ができます。


## 手順

今回は手動スケーリングの手順を記載します。

- 前提：起動テンプレートやAuto Scalingグループを作成済であること
    設定方法：公式ドキュメント[Amazon EC2 Auto Scaling の使用を開始する](https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/get-started-with-ec2-auto-scaling.html)


#### 1. EC2 左メニュー内 Auto Scaling グループ画面を開き、グループを選択する
#### 2. 詳細タブ 右上 [編集] を押下する
![スクリーンショット 2024-12-20 3.27.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929937/797abf59-62e1-da1b-5f5b-224755f6662e.png)

#### 3. 表示されたモーダル内で希望するキャパシティ、最小の希望する容量、最大の希望する容量を設定し、 [更新] を押下
![スクリーンショット 2024-12-20 3.15.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929937/50598995-7d81-ceea-e079-d850245f1442.png)
それぞれ以下を指定します。
- 希望するキャパシティ：設定したい容量
- 最小の希望する容量： 設定したい容量と同じ、もしくはそれ以下
- 最大の希望する容量： 設定したい容量と同じ、もしくはそれ以上

#### 4. インスタンス管理タブ [インスタンス] を開き、インスタンスが立ち上がっているかを確認する
![スクリーンショット 2024-12-20 4.17.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929937/c2509a89-073a-7dc1-d463-c8cec924a991.png)

[ライフサイクル] 列のステータスが`InService`となれば完了です。

#### 5. アプリケーションの動作やアクセスログが問題ないことを確認する

## 最後に

スケールアウトを実施する前は初めてなこともありハードルが高く感じていましたが、
思いの外簡単に実施できたので驚きました。
まだまだわからないことが多いので今後も学んでいきたいです。

最後までお読みいただきありがとうございました！
「おっぱい曲面」をpythonで描画。

おっぱい曲面を３Dで描画してみました。
@akmiyoshiさんの「『おっぱい曲面を３Dでグラフで描く（１）」を元にしています。

https://qiita.com/akmiyoshi/items/33d1e4087e0990f97d2c

元記事はJuliaで座標計算をし、python2でプロットしていますが、連携できるPythonとJuliaのバージョンが限られているため、all python3で書き直しました。Juliaに比べてPythonは数値計算の精度が劣るようなイメージがありますが、実用上そんなことはありません。python3とPyqtが動く環境ならどこでも動くと思います。面倒くさいディレクトリ調整などいりません。

実行は、`python oppai.py`で動かしてください。

```oppai.py
from PyQt5.QtWidgets import QApplication,QWidget
import pyqtgraph.opengl as gl
from mpmath import *

def bust(x,y):
    return 1/8* (6*exp(-((2/3*fabs(x) - 1)**2 + (2/3 *y)**2) - 1/3*(2/3*y + 1/2)**3)+ 2/3 *exp(-2.818**11*((fabs(2/3*x) - 1)**2+ (2/3 *y)**2)**2) + 2/3*y - (2/3*x)**4)

def draw_oppai(x, y, distance,pxl=2):

    app = QApplication([])
    w = gl.GLViewWidget()
    w.resize(600,400)
    w.opts['distance'] = distance
    w.show()
    w.setWindowTitle('Oppai')

    p=[ [ xp,yp,bust(xp,yp)] for xp in x for yp in y]
    plt=gl.GLScatterPlotItem(pos=p,color=(1,1,1,1),size=pxl)
    w.addItem(plt)

    app.exec_()

def linspace(a,b,n):
    return [ a+i*((b-a)/n) for i in range(n+1)]

def main():
    nx=100
    ny=50
    x=linspace(-3.0,3.0,nx)
    y=linspace(-3.0,3.0,ny)
    draw_oppai(x,y,10,pxl=2)

if __name__=='__main__':
    main()
```

#### 実行結果

![スクリーンショット_2024-12-17_18-10-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315399/485337ee-0048-4145-8321-bd259880a757.png)