OmniAICreator/Qiita-1.07M huggingface dataset:
初心者がつまずきやすいエラーとその解決法まとめ

# はじめに

プログラミングを始めたばかりの頃は、エラーが出るたびに「なんで！？」と悩みがちです。でも大丈夫！誰もが通る道です。この記事では、**初心者がよく遭遇するエラー**と、その**解決法**をわかりやすくまとめました。エラーと仲良くなれば、成長も加速します！



# 1. 文法エラー（SyntaxError）

### 例
```python
print("Hello, World!"
```
**エラー内容:**  
`SyntaxError: unexpected EOF while parsing`

### 原因と解決法
- **カッコやクォートの閉じ忘れ**が原因です
- **解決法:**  
  コードのカッコやクォートが正しく閉じているか確認しましょう



# 2. インデントエラー（IndentationError）

### 例
```python
if True:
print("Hello")
```
**エラー内容:**  
`IndentationError: expected an indented block`

### 原因と解決法
- **インデント（字下げ）が正しくない**場合に発生します
- **解決法:**  
  Pythonではインデントが重要です。スペースやタブが混ざっていないかも確認しましょう


## 3. 名前エラー（NameError）

### 例
```python
print(msg)
```
**エラー内容:**  
`NameError: name 'msg' is not defined`

### 原因と解決法
- **変数や関数の名前が間違っている**、または**定義前に使っている**場合に発生します
- **解決法:**  
  変数や関数が正しく定義されているか、スペルミスがないか確認しましょう


# 4. 型エラー（TypeError）

### 例
```python
num = 5 + "10"
```
**エラー内容:**  
`TypeError: unsupported operand type(s) for +: 'int' and 'str'`

### 原因と解決法
- **異なる型同士で演算や操作をしようとした**場合に発生します
- **解決法:**  
  型変換（キャスト）を使いましょう。  
  例: `num = 5 + int("10")`


# 5. インデックスエラー（IndexError）

### 例
```python
lst = [1, 2, 3]
print(lst[3])
```
**エラー内容:**  
`IndexError: list index out of range`

### 原因と解決法
- **リストや配列の範囲外のインデックスを指定**した場合に発生します
- **解決法:**  
  インデックスが0から始まること、リストの長さ未満であることを確認しましょう


# 6. ゼロ除算エラー（ZeroDivisionError）

### 例
```python
a = 10 / 0
```
**エラー内容:**  
`ZeroDivisionError: division by zero`

### 原因と解決法
- **0で割り算をしようとした**場合に発生します
- **解決法:**  
  割る数が0でないか、事前にチェックしましょう



# 7. ファイルエラー（FileNotFoundError）

### 例
```python
open("not_exist.txt", "r")
```
**エラー内容:**  
`FileNotFoundError: [Errno 2] No such file or directory: 'not_exist.txt'`

### 原因と解決法
- **ファイル名やパスが間違っている**場合に発生します
- **解決法:**  
  ファイルが存在するか、パスが正しいか確認しましょう


# 8. モジュールエラー（ModuleNotFoundError / ImportError）

### 例
```python
import nonexistmodule
```
**エラー内容:**  
`ModuleNotFoundError: No module named 'nonexistmodule'`

### 原因と解決法
- **インストールされていないモジュールをimportした**場合に発生します
- **解決法:**  
  `pip install モジュール名` でインストールしましょう。  
  また、スペルミスにも注意！



# 9. AttributeError（属性エラー）

### 例
```python
num = 123
num.append(4)
```
**エラー内容:**  
`AttributeError: 'int' object has no attribute 'append'`

### 原因と解決法
- **その型に存在しないメソッドや属性を使おうとした**場合に発生します
- **解決法:**  
  オブジェクトの型と使えるメソッドを確認しましょう
  `dir(変数名)` で確認できます



# 10. よくある日本語・文字コードエラー

### 例
```python
with open("file.txt", encoding="utf-8") as f:
    text = f.read()
```
**エラー内容:**  
`UnicodeDecodeError: 'utf-8' codec can't decode byte ...`

### 原因と解決法
- **ファイルの文字コードが合っていない**場合に発生します
- **解決法:**  
  ファイルのエンコーディングを調べて、`encoding`を正しく指定しましょう



# エラー解決のコツ

- **エラーメッセージをよく読む**  
  どこで何が起きたか、具体的に書かれています
- **ググる力を鍛える**  
  エラーメッセージをコピペして検索すれば、先人の知恵がたくさん出てきます
- **小さく実験する**  
  問題の部分だけ切り出して試してみると、原因が特定しやすいです
- **公式ドキュメントやQiita記事も活用**  
  「エラー名 + Python」などで検索すると解決策が見つかりやすいです



# まとめ

エラーは「失敗」じゃなくて「成長のチャンス」！  
最初はたくさんつまずいてOK。この記事を参考に、エラーと仲良くなって、どんどんレベルアップしていきましょう！
【ChatGPT】を使うことで、人間の能力を伸ばす具体的な使い方プランを作ってもらいました。


　どうも、カーブミラーです。

　今回は、ChatGPTを使うことで、人間の能力を伸ばす具体的な使い方プランを作ってもらいました。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。
画像はありません。あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　こちらも載せますね。
　　[ChatGPTが使えない？ログインできない・反応しない原因やエラー時の対処法を解説](https://aismiley.co.jp/ai_news/chatgpt-error-resolution-explanation/)
***
　著作権法については
　　こちらを参照するのが
　　　良いのではないかと。

　文化庁レポートをもとにした
　　著作権法についての動画（約20分）
　　　[かいちのAI大学　【警告】ChatGPTの画像生成は危険です...【4o Image Generation】](https://youtu.be/8VLUnG-iyo0?si=rAfjMboqmNqppDGq)
***
　では、【本題】です。

　今回は、
　　ChatGPTを使うことで、
　　　人間の能力を伸ばす
　　　　具体的な使い方プランを
　　　　　作ってもらいました。

　『ChatGPTが
　　学生の学習成果、
　　　学習に対する認識、
　　　　そして高次思考に与える影響』
　　　　　という論文を参考にしました｡

　[Nature：The effect of ChatGPT on students’ learning performance, learning perception, and higher-order thinking: insights from a meta-analysis](https://www.nature.com/articles/s41599-025-04787-y)

　この論文は、
　　2022年11月から2025年2月までに
　　　発表された51件の研究を対象に、
　　　　ChatGPTが学生の学習成果、
　　　　　学習認識、
　　　　　　および高次思考能力に
　　　　　　　与える影響を
　　　　　　　　メタ分析したものです｡

　簡単にまとめると

　・学習成果
　　　スキルや能力開発を目的とした
　　　　コースで特に効果的。

　　　問題解決型学習
　　　（Problem-Based Learning）で
　　　　　顕著な効果。

　　　8週間以上の継続使用で
　　　　効果が安定。 

　・学習認識
　　　長期間の使用により、
　　　　学習への前向きな態度が
　　　　　強化される。 

　・高次思考能力
　　　STEM関連のコースで特に効果的。

　　　インテリジェント・チューターと
　　　　してのChatGPT活用が
　　　　　最も効果的。
***
　この論文には、
　　教育的示唆も
　　　含まれていました。

　それをもとにして
　　ChatGPTさんに
　　　人間の能力を伸ばす
　　　　具体的な使い方プランを
　　　　　作成してもらいました。


***（ChatGPT）***
## **1. 学習全般：毎日の学びの伴走者として使う**

### **目的**：理解力・思考力アップ

#### **使い方例**

* 勉強した内容をChatGPTに説明 →「それを小学生にもわかるように言い直して」と頼む。
* 疑問点をそのまま入力 →「なぜ？」と問い返される形で深掘り。
* 間違いの原因を分析してもらう →「なぜこの答えではダメなのか教えて」


## **2. 課題・レポート：文章力・構成力を高める**

### **目的**：考える力・書く力を強化

#### **使い方例**

* 自分の書いた文章を貼り付けて、「ロジックに弱点ある？」「他に視点ある？」とフィードバックをもらう。
* トピックだけを入力 → 構成の案を出してもらい、自分で肉付けしていく。


## **3. アイデア創出：創造的思考を鍛える**

### **目的**：柔軟な発想力を育てる

#### **使い方例**

* 「このテーマで新しい視点ある？」と尋ねてブレストする。
* 「このアイデアの利点と欠点を出して」「改善案ある？」などとやり取りを繰り返す。


## **4. 理系学習（STEM）：理解と応用力を深める**

### **目的**：論理的・分析的思考力の向上

#### **使い方例**

* 数式や物理法則を使った問題を解いたあと、「この解法以外ある？」「なぜその法則が使える？」とChatGPTに確認。
* コードや数式の説明をしてもらう→あいまいな理解をクリアに。


## **5. 言語学習（英語など）：表現力と文法理解の向上**

### **目的**：アウトプット力の強化

#### **使い方例**

* 自分の英文を入力 → 「自然？」「もっと良い言い方ある？」と添削してもらう。
* 英作文をしたら、「別の文脈で使える？」と応用例を求める。


## **続けるコツ**

* **毎日10〜15分**でもOK。習慣化が最も大事。
* 週に1回は「振り返りの時間」を設けて、何がうまくいったかをAIに聞いてみる。
* 「依存」ではなく「対話」する姿勢で使うと効果が大きい。


こうした使い方をすれば、生成AIは“能力を奪う道具”ではなく、“能力を引き出す相棒”になります。
***

　**“継続は力なり”**　です。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
# OSI参照モデル (Open Systems Interconnection Reference Model)

## OSI参照モデルとは

OSI参照モデルは、異なるコンピュータ間でどのようにデータがやり取りされるかの**仕組みを7つの階層に分けて説明した、ネットワークの設計図**のようなものです。これは、ネットワークの標準化を進めるために考えられました。

各階層は、それぞれ異なる役割を持っており、上の階層は下の階層が提供するサービスを利用します。

## OSI参照モデルの7つの階層

下から順に説明します。

1.  **物理層 (Physical Layer)**
    * データを電気信号や光信号などの物理的な信号に変換し、伝送媒体（LANケーブル、無線など）を通して送受信する役割を持ちます。
    * 例: ケーブルの種類、コネクタの形状、電圧レベル、無線LANの規格など。
    * **イメージ:** データを運ぶための道路そのもの。

2.  **データリンク層 (Data Link Layer)**
    * 物理層を通して送受信されるデータに誤りがないかチェックしたり、複数の機器が同じ伝送媒体を共有するためのルールを定めたりします。MACアドレス（物理アドレス）を扱います。
    * 例: Ethernet、Wi-Fiの規格、MACアドレス、フレーム構造など。
    * **イメージ:** 道路上の交通整理をする係員や、データの梱包方法。

3.  **ネットワーク層 (Network Layer)**
    * 異なるネットワーク間でデータを中継する役割を持ちます。IPアドレス（論理アドレス）に基づいて、最適な経路を選択し、データを目的地まで届けます（ルーティング）。
    * 例: IP (IPv4, IPv6)、ルーティングプロトコルなど。
    * **イメージ:** 住所に基づいて荷物を目的地まで運ぶ宅配業者。

4.  **トランスポート層 (Transport Layer)**
    * アプリケーション間のデータの流れを管理します。信頼性の高い通信（TCP）や高速な通信（UDP）など、アプリケーションの要求に応じて適切な方法でデータ転送を行います。ポート番号を扱います。
    * 例: TCP、UDP。
    * **イメージ:** 荷物の配送方法（確実な手渡し vs. ポスト投函）、配送状況の管理。

5.  **セッション層 (Session Layer)**
    * アプリケーション間の論理的な接続（セッション）を確立、維持、終了させる役割を持ちます。通信の開始と終了、認証、再接続などを管理します。
    * 例: 認証プロトコル、セッション管理プロトコルなど（具体的なプロトコルは少ない）。
    * **イメージ:** 通信を行う相手との会話の開始から終了までの段取り。

6.  **プレゼンテーション層 (Presentation Layer)**
    * アプリケーションが理解できる形式にデータを変換する役割を持ちます。データの暗号化・復号、圧縮・解凍、文字コードの変換などを行います。
    * 例: JPEG、GIFなどの画像形式、暗号化方式 (SSL/TLS)、文字コード (UTF-8) など。
    * **イメージ:** 言葉の翻訳、データの形式を整える通訳。

7.  **アプリケーション層 (Application Layer)**
    * ユーザーが直接利用するアプリケーションとネットワークを結びつける役割を持ちます。具体的なアプリケーションごとのプロトコルが動作します。
    * 例: HTTP (Webブラウザ)、SMTP (メール送信)、FTP (ファイル転送)、DNS (名前解決) など。
    * **イメージ:** 実際に荷物を受け取る人や、Webサイトを見るブラウザなど、ユーザーが直接触れる部分。

## 各層の役割の覚え方 (語呂合わせ)
* **上から:** ア（アプリケーション層）→ プ（プレゼンテーション層）→ セ（セッション層）→ ト（トランスポート層）→ ネ（ネットワーク層）→ デ（データリンク層）→ ぶ（物理層）

## まとめ

OSI参照モデルは、ネットワークの複雑な仕組みを階層ごとに整理することで、理解しやすくするための重要な概念です。実際のネットワーク技術やプロトコルは、必ずしもこの7つの層に厳密に対応しているわけではありませんが、ネットワークの学習やトラブルシューティングの際に役立ちます。
【2週間・50時間】AWS SAA（ソリューションアーキテクト アソシエイト）に合格した勉強法


こんにちは！今回は私が **AWS 認定ソリューションアーキテクト – アソシエイト（SAA）** に  
**2週間・50時間の学習で771点で合格**した体験を紹介します。

---

##  試験概要

- 試験形式：選択式（多肢選択＆複数選択）
- 合格ライン：720点（満点は1000点）
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4059572/4d727652-9153-4843-80e1-ae85fd19f5d3.png)

- 試験時間：130分
- 対象者：AWSの基礎を理解し、設計に関わるレベル
- 65問中実際に採点されるのは50問（配点は問題ごとに重みが決められている）

---

##  結果

| 項目 | 内容 |
|------|------|
| 学習期間 | 約2週間 |
| 総学習時間 | 約50時間 |
| スコア | 771点 |
| 使用教材 | ・Ping-t<br>・AWS資格対策講座（YouTube）<br>・ChatGPT |

---

##  使用教材レビュー

###  Ping-t
- 模擬問題が豊富で解説も親切
- **模試の正答率85%以上をキープするまで繰り返し**
- 解説を読み込んで、「**なぜその選択肢が正解か**」を自分の言葉で説明できるまで反復
- **教材としてこれだけでも十分だと思う**:punch_tone2:

###  AWS資格対策講座（YouTube）
- Udemyより手軽に見られる無料講義
- **深く考えず、流し見して知識の抜け確認用**に活用
- 疲れた時や復習にちょうどいい

###  ChatGPT
- Ping-tの解説で理解が曖昧なところを補強
- 「なぜこの選択肢はダメ？」という視点で**対話的に学習**
- 模擬試験の得点が低い際にいいサンドバックになってくれる

---

##  学習スケジュール

| 期間 | 内容 |
|------|------|
| 1〜3日目 | Ping-tの基本問題を解きながら全体像をつかむ |
| 4〜7日目 | 模擬試験を中心に回し、正答率を安定化 |
| 8〜10日目 | ChatGPTを併用して「根拠の説明力」を強化 |
| 11〜13日目 | 間違えた問題だけを再演習、知識を確実にする |
| 試験前日 | YouTube講座を軽く復習して不安解消 |

---

##  ポイントと意識したこと

- 「正解できた」より「説明できたか」を基準に理解度を確認
- 模擬試験で間違えた問題は 「なぜダメか・なぜ正解か」をセットで記録
- ChatGPTに質問を投げて、**わからない箇所は深掘り**

---

##  試験当日の感想

- Ping-tと似た問題が多く、「見たことある」がかなり出た
- 長文の問題など多いと思っていたから肩透かしだった
- あるあるだが受験直後は落ちたと思った
- 複数選択問題も落ち着いて読めば対応可能
- 「これは捨てる」と判断する勇気も重要（焦らない）

---

##  最後に：SAAは短期集中＆根拠理解で勝てる

- 暗記より「設計の理由」を押さえることが合格の近道
- Ping-tとChatGPTがあれば独学でも問題なし
- 基本情報技術者試験とは違い、**実務を意識した理解が重要**

---

## 🙌 次は、、、

- **GCP ACE（Associate Cloud Engineer）**
   自己開発用にAWSとの使用感や料金の違いを学いたい


---

## 📩 質問などあればぜひコメント欄へ！

「これからSAAを受けようと思っている」など  
なんでもお気軽にどうぞ！ストック・いいねも励みになります😊
Linucレベル１勉強メモ　＃３０

＃ 第三章　GNUとUnixのコマンド

練習問題3.5
テキストファイルsample.oldの中に重複する行があれば１行にまとめて出力し、sample.newとして保存しようとしています。下線部に当てはまるコマンドを記述してください。

＄ sort sample.old | _______ > sample.new

（解答）uniq

（解説）重複する行を１行にまとめたい場合はuniqコマンドを使います。ただし、あらかじめソートしておく必要があるので、sortコマンドと組み合わせるのが一般的です。

uniqコマンド
入力されてテキストストリームの中で長封している行を調べて、重複している行は１行にまとめて出力します。入力するテキストストリームはソートしておく必要があるので、多くの場合、sortコマンドとパイプで組み合わせて使います。

書式 uniq [オプション] [入力ファイル[出力ファイル]]

uniqコマンドの主なオプション
1. -d, --repeated<br>重複している行のみ出力する
1. -u, --unique<br>重複していない行のみ出力する
[作業ログ] KVM+QEMUでLinux Kernel Buildにチャレンジ

# TL;DR
- ubuntuで，KVM, QEMUを使って壊れてもいい仮想マシンを構築する
- 特になにもカスタマイズせずにただLinux kernelのビルド&インストールする

## system
- AL14-72-5GU1 
 - Corei5-12450H
 - 16GB RAM
 - Ubuntu 24.04 LTS


# vmの準備
まず，kvmが使える環境であることを確認する．
以下が0じゃなければcpuが仮想化機能を持ってるらしい．
```
$ egrep -c '(vmx|svm)' /proc/cpuinfo
```

以下のコマンドで必要なパッケージをインストール
```
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
```

```
sudo kvm-ok
```
```KVM acceleration can be used```が表示されればokらしい

# 仮想マシンを構築する
まず，仮想ディスクイメージを作る．
以下のコマンドでゲストOSのディスクイメージを作成する．
今回は適当に```ubuntu-disk.qcow2```というイメージを作成する．
一回20Gくらいで作成したところ，ビルドの途中でディスクが埋まったのででかめにとる．
```
qemu-img create -f qcow2 ~/qemu/ubuntu-disk.qcow2 128G
```
wgetとかで好きなubuntuのisoイメージをダウンロードしてください．
```
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso
```


```
qemu-system-x86_64 \
    -enable-kvm \
    -m 12G \
    -smp 8 \
    -drive file=ubuntu-disk.qcow2,format=qcow2 \
    -cdrom ubuntu-22.04.3-live-server-amd64.iso \
    -boot d \
    -vga virtio \
    -display sdl \
    -netdev user,id=net0 -device e1000,netdev=net0

```
ubuntuのインストールが終わったら，カーネルビルドが始まります．

# vm内の作業

```
git clone --depth=1 https://github.com/torvalds/linux.git
cd linux
```

```
cp /boot/config-$(uname -r) .config
make menuconfig
```

### option:カーネルのバージョン文字列を変更
MakefileのEXTRAVERSIONの文字列をわかりやすい文字列に変更しておくと，インストールしたあとにカーネルが更新されたことがわかりやすくなります．

### ビルド

使えるcpuコアを使ってビルド
```
make -j$(nproc)
```

### インストール
カーネルモジュール＆本体をインストール
```
sudo make modules_install
sudo make install
```

GRUB更新＆再起動
```
sudo update-grub
sudo reboot
```
再起動後，バージョンが変わっているかチェック
```
uname -r
```

現場からは以上です．
お疲れ様でした．
基本情報技術者試験に2ヶ月・80時間で合格した勉強法（605点×2）



こんにちは、今回は私が**基本情報技術者試験**に挑戦し、  
**約2ヶ月・合計80時間の学習で、科目A・Bともに605点で合格**した勉強法をまとめました。

これから受験を考えている方の参考になれば幸いです。

---

##  試験結果まとめ

| 項目 | 結果 |
|------|------|
| 学習期間 | 約2ヶ月（平日中心） |
| 総学習時間 | 約80時間 |
| 科目Aスコア | 605点 |
| 科目Bスコア | 605点 |
| 使用教材 | ・過去問道場<br>・すーさん（YouTube）<br>・出るとこだけ！基本情報技術者（科目B） |

---

##  使用教材レビュー

### １． 過去問道場
- 王道中の王道
- 15年分の過去問を平均80%程度まで仕上げ
- 科目A・Bの両方に対応していて便利

### ２． すーさんのYouTube講義
- 科目A/Bの基本とポイントを解説
- 3周視聴して内容を定着
- 「通勤中に聴く→帰宅後に復習」が特におすすめ

### ３． 情報処理教科書 出るとこだけ！基本情報技術者（科目B）
- 擬似言語やアルゴリズムを重点的に学べる
- 解答に至る「思考の過程」が丁寧
- 全問解いて、解説も読み込んだ

---

##  ざっくりスケジュール

| 期間 | 内容 |
|------|------|
| 1週目〜2週目 | すーさん動画1周目＋過去問道場の基礎分野確認 |
| 3週目〜4週目 | 過去問道場（科目A中心）で得点力強化 |
| 5週目 | 科目B用テキスト＋動画2周目で擬似言語に慣れる |
| 6週目 | 科目Bの演習と徹底理解（解き方の思考を意識） |
| 7週目 | 動画3周目＋苦手ジャンルの総復習 |
| 最終週 | 両科目の仕上げ＋過去問の間違いノートで最終確認 |

---

##  ポイントと意識したこと

###  科目A
- 「用語の丸暗記」は避け、「概要と使いどころ」を意識
- 過去問ベースで8割正解を目標に繰り返す
- 苦手分野はすーさん動画で補強

###  科目B
- 擬似言語に慣れることが最重要
- 解答の選択肢よりも「なぜそれになるか」を重視
- テキストのコードを紙や口で再現して理解を深めた

---

##  試験当日の感想

- 想定通りの問題は半数ほど、後は学習内容から消去法で選択
- 時間は両教科ともギリギリ（見直しの途中で終了となった）
- 初めは緊張するが、理性を取り戻して集中できた

---

##  最後に：合格の鍵は「反復」と「思考プロセスの理解」

- 初学者でも80時間あれば十分に合格圏内（時間≒理解だと思うが）
- パターンを押さえ、理解することで自信につながる
- 「答えがわかる」→「説明できる」まで落とし込むのがポイント

---

## 🙌 この記事が役に立ったら

いいね・ストック・コメントお待ちしています！  
「これから受けるけど不安…」という方はお気軽にご相談ください。
5月に書いた記事

5月に書いた記事の一覧作成中。

スクリプトで自動実行の書き方を検索中。

|date|title|tag|views|goods|stocks|
|:--|:--|:--|--:|--:|--:|
|2025年05月01日|toppers/ssp/include https://qiita.com/kaizen_nagoya/items/9ec284d962a192141ab9|SSP TOPPERS include Cの精神 DoCAP|67|0|1|
|2025年05月01日|toppers/ssp/kernel https://qiita.com/kaizen_nagoya/items/bbf271e3d3f96830194d|kernel SSP TOPPERS Cの精神 DoCAP|94|0|1|
|2025年05月01日|toppers/ssp upload https://qiita.com/kaizen_nagoya/items/cffa0aaf2c029cef7334|GitHub upload SSP TOPPERS DoCAP|195|0|1|
|2025年05月01日|記事投稿のヒントの見直し案 https://qiita.com/kaizen_nagoya/items/0bf3791c5227a87313ad|Qiita 再利用性 汎用性 再現性|113|0|1|
|2025年05月01日|公序良俗との関係が説明できない計画・規則は有効かhttps://qiita.com/kaizen_nagoya/items/7356189bf1644c4b6313 |小川メソッド DoCAP 公序良俗|118|0|1|
|2025年05月01日|OSEK/VDX OS, COM and NM https://qiita.com/kaizen_nagoya/items/6ed05b0dce49fc006e46|COM　ISO　OS　nm　改訂|64|0|1|
英語嫌いのおじさんがArchitecture Excellence (ArchX)を取得しました

# Architecture Excellence (ArchX)とは？
[mucho243さんの紹介記事](https://qiita.com/mucho243/items/5158d81ce42df4c89372)にもあるように「エキスパートプログラム認定」（通称、上位資格）に該当する認定資格の中で最も初歩的な位置づけの資格です。
現在は取得に際しては[Certified System Administrator資格が必須](https://learning.servicenow.com/lxp/ja/expert-programs/architecture-excellence-archx-faq-s?id=kb_article_view&sysparm_article=KB0012512)になっています。

取得に際しては、4週間にわたる**英語**での全10テーマの学習と、そのテーマごとに1～2回の課題の提出が必要です。
テーマは1週間ごとに2～3テーマが出されることになり、課題は最大で約100人のコホートメンバーと掲示板や音声録音機能を使用して意見を交わしていきます。
また、最終週は最終試験があり、この試験に合格する必要があります。
リアルタイムでの講義はないので、自分のペースに合わせて受講ができます。

資格取得後は他の上位資格（Certified Technical Architect（CTA）、Certified Master Architect（CMA））と異なり、年1回の更新もなく、最終試験も監督されないため、どちらかと言えばMicro-Certificationに近い位置づけかもしれません。（と言うか、今見たら「Accreditation」資格の位置づけでした）
2026年からはCTA取得に必須となるいことが[発表](https://learning.servicenow.com/lxp/ja/expert-programs/certified-technical-architect-cta-enrollment-process?id=kb_article_view&sysparm_article=KB0012264)されたので、今後、日本でも取得者が増えていくものと思われます。

# 受講の仕方
[こちらのリンク先](https://learning.servicenow.com/lxp/ja/expert-programs/architecture-excellence-archx-program-dates-enrolment?id=kb_article_view&sysparm_article=KB0012509)にまとめられているプログラムの開始日を確認し、自分の都合がつく日程の開催期間のものを選びます。
そのプログラムの募集期間にNow Learningから申し込めば、受講が可能です。
当然ながら、受講料は必要ですが。

# 受講内容について
Now Createの使い方など、ServiceNow Japanが認定Partner向けに実施している[Project Readiness Program The Part One](https://jp.linkedin.com/posts/aoranow_servicenow%E7%A4%BE%E4%B8%BB%E5%82%AC%E3%81%AE%E3%83%91%E3%83%BC%E3%83%88%E3%83%8A%E3%83%BC%E5%90%91%E3%81%91project-readiness-activity-7163080870034149376-SHvx)と一部重複する内容がありますので、そちらを受講可能な方でしたら、予習のためにあらかじめ受講されることをお勧めいたします。
対面、かつ日本語で行われる講義のため、理解度が違います。

また技術的な話や課題のみではないので、エンジニアやプリセールスの方だけでなく、純粋なセールスの方にも受講いただきたいです。
前提条件のCSAが難しいかもしれませんが、この学習内容を基にセールスして、デリバリを行えば、ServiceNowの失敗プロジェクトの大半はなくなると思えるくらい、非常に有益なものでした。


# 英語について
皆さんが気になる点だと思います。
私のTOEICスコアは約500点（それも10年以上前に受けたもの）なので、かなり低いですが、テクノロジーの進歩でどうにかなりました。

ブラウザ翻訳は、翻訳されないコンテンツや、最終試験を含めたテストが採点されない（バグ？）ため、お勧めできません。
面倒でもコンテンツ文章をコピー＆ペーストでDeeplなどで翻訳し、日本語にしたものをノートにまとめていきました。
画像のコンテンツは生成AIに認識してもらい、文字起こしし、それを翻訳してもらいました。
ムービーについては、音声文字起こしAIを使用し、内容を文書化したものを同じく翻訳です。
これで、学習内容については、どうにかなりました。

課題については、日本語で文面を考え、Deeplなどで翻訳。
翻訳結果に難しい表現や単語がある場合は、生成AIに別の言い回しを聞いて、自分が理解可能な英語にしてもらい提出していました。

しかし、鬼門の課題で英語音声を録音し、提出するものです。
また他人の提出された英語音声を聞き取り、内容を理解し、それについてコメントを書かなければなりません。

これについても、自分が話す文書は生成AIに「この文面をネイティブに近い発音を行うためにカタカナで出力して」と頼んでクリア。
と言っても「お前の発音は『なまり』がひどくて聞き取れない」と酷いコメントされたりしましたが、ArchXは出せばOKなので、気にせず終わらせました。

他人の音声はムービーと同様に音声文字起こしAIを使用し、対応しました。
ファイル出力も可能なので、ファイルを生成AIに取り込んで、文字起こしと翻訳、要約を頼んでもいいかもしれません。

# まとめ
と言うことで、英語が苦手なアラフィフのおじさんが4週間のプログラムを何とか完走し、ArchXの称号を得ました。
ここ数年の生成AIの進歩に感謝するとともに、最近公開された[CTA体験記](https://www.servicenow.com/community/japan-blog/cta%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AB%E6%8C%91%E6%88%A6%E3%81%97%E3%81%A6%E5%BE%97%E3%81%9F%E3%82%82%E3%81%AE-%E3%81%9D%E3%81%AE%E4%BE%A1%E5%80%A4%E3%81%A8%E6%AC%A1%E3%81%B8%E3%81%AE%E4%B8%80%E6%AD%A9/ba-p/3258893)にもあった **「迷うくらいなら、ぜひ挑戦してみてください！」** との言葉を添えて、CSA取得済みの皆さん（特に営業職の方）にはチャレンジして頂きたいと思います。
Linucレベル１勉強メモ　＃２９

＃ 第三章　GNUとUnixのコマンド

練習問題3.4
/var/log/messagesファイルの末尾20行を表示したい場合、下線部に当てはまるコマンドを記述してください。

＿＿＿＿ -n 20 /var/log/messages

（解答）tail

（解説）ファイルの末尾を表示するにはtailコマンドを使います。-nオプションで表示する行すうを指定しますが、「-20」のように指定しても構いません。行すうを指定しないと、末尾10行が表示されます。
「-f」オプションを使うと、ファイルの末尾を表示し続け、ファイルの末尾に行が追加されるとリアルタイムで表示します。ログファイルをリアルタイムで監視する時などに便利です。

書式　tail [オプション] [ファイル名]
tailコマンドの主なオプション
1. -n　行数<br>末尾から指定された行数分だけ表示する
1. -行数<br>末尾から指定された行数分だけ表示する（推奨されていない）
1. -c バイト数<br>末尾から指定されたバイト数だけ表示する
1. -f --follow<br>ファイルの末尾に追加された行を表示し続けr
OneNote入門

OneNoteは、誰が、何のために作ったツールかよくわかっていない。
2003年頃からでエイルらしい。その頃、Microsoft Developerを辞めたような気がする。

直接Microsoftから何も聞いていない。

現状。
１　MarkDownとのコピペを円滑にしたい。
２ Github/Gitlab/Bitbucketとの連携を自動化したい。
３　プログラムでの自動化ができると嬉しい。
4 PowerPointのOutlineとのコピペをしたい。

順次、関連記事を読んで記録予定。

Microsoft OneNoteが最高らしい
https://qiita.com/aibausound/items/7aa6448d251c60622ee4

社内メンバー間での情報共有が円滑になる方法を模索してみた
https://qiita.com/8suma3/items/74b21e66f6a7eb5b7238

おすすめショートカットキー OneNote 編
https://qiita.com/KentoNaka/items/67dcd9c152f804a56979

【効率化】Onenoteでよく利用するショートカット集
https://qiita.com/kaburagi_/items/8627ef46df15aaf08dff

Microsoft Graph を使ってみよう : ノートリソース (OneNote)
https://qiita.com/kenakamu/items/bec18034e78b369d2f6f

Microsoft Graph を使って OneNote の文書の内容を取得する
https://qiita.com/kkato233/items/ff1538cd33002ec85ded

【ツール】「OneNoteに送る」のキャプチャ機能が意外と便利
https://qiita.com/t_hori_20030/items/aba793a922bab8006028

Markdownで書いたいい感じの書式のままOneNoteに貼り付け（荒業）
https://qiita.com/pm00/items/176ca89ee655e1f20a3c

MarkdownのプレビューをOneNoteにコピペしたときのメモ
https://qiita.com/kiwsdiv/items/f890cce8f6f411587185

Onenoteをmarkdown形式でエクスポートする
https://qiita.com/wsldenli/items/07cf74356c6292b7187d

Onenoteスタイル
https://qiita.com/busitd/items/ca980db2cbf015e7e97d

OneNote (UWP版) でグリッドに合わせずに図形を配置する方法
https://qiita.com/AsAkura_BioTech/items/e00aaccaa8208ac637d7

OneNote (iPad版)で作成したノートがmacOS版で同期されない（Error code: 0xE00009C8 bb0ur）ときの解決法
https://qiita.com/thepeace75/items/0d94d055868a70ecd44e

OneNoteのフォントを一括で変更する
https://qiita.com/wsldenli/items/8cbb636842af7f2b98b9

VBA で OneNote のセクション内のページのフォントを変更する
https://qiita.com/nukie_53/items/48ac87f18e0a781d6348

OneNote2016（デスクトップ版）でフォントが勝手に游ゴシックになる問題の回避策
https://qiita.com/pkpkpk/items/df513e58fc321068edb3

OneNoteをユースケースを交えて紹介
https://qiita.com/Killinneko/items/8c8aef72cc0af39f0ac5

Microsoft Teams for Education | Education 特有の機能の紹介
https://qiita.com/hisaho/items/7268e3382e5d8803b048

OneNoteにCOMアドインを追加する
https://qiita.com/ryotuxtuki/items/12dcd8df9a4297a5b68d

モデル駆動型アプリのOffice365連携
https://qiita.com/skuramoto/items/8c743dbfb492c70c2599

OnenoteのデータをEvernoteに移してDevonthinkに移行する
https://qiita.com/Nadias-jp/items/ec3eb81f022a181c310f

OneNote for Mac ローカルでのファイル保存場所
https://qiita.com/meerkat/items/937188f389b3e8e4f9c0

OneNoteからObsidianへ移行した話
https://qiita.com/nashi-nashi/items/00681e8eb05160655a19

OneNoteで同期エラー（このノートブックを同期するには、OneNoteにサインインしてください）
https://qiita.com/blue-skies_contrail/items/a08de607e880b68ec413

OneNoteの見出しジャンプが不便なときは、サブベージを使うと便利
https://qiita.com/lilacs/items/dee41ed56ca08db1bdfc

OneDriveの中にあるOneNoteファイルのバックアップ
https://qiita.com/Takakiri/items/04252f819e1101e82e83

勉強でOneNoteなどを活用してみた
https://qiita.com/y20512/items/3eca00a3290878607b44

OneNoteでメモを賢く取ろう！
https://qiita.com/ms523/items/b6878bfe0ac5b89c882e

OneNoteが重いときの Tips
https://qiita.com/Gunner/items/c926bfc8f531f4164db3


Evernote や OneNote の代わりに DEVONthink
https://qiita.com/shigeya/items/e77b3cfeb9bb7ce9d446

Windows10でOneNote2010のスクリーンショットショートカット(Windows+S)を有効にする方法
https://qiita.com/sakumenx/items/a8c49d98b1f47232c4a5

Microsoft OneNote にソースコードを貼り付ける
https://qiita.com/Tachy_Pochy/items/d6052a7de8f0753e1e4e

ノートアプリざっくり比較 Evernote Onenote Agenda
https://qiita.com/fukino/items/f7cdba8373a2c5e3d436
Pythonのloggingでログファイルにヘッダを出力したい

# やりたいこと
Python標準のloggingを使用してログファイルの先頭にヘッダ行を出力します。

https://stackoverflow.com/questions/33468174/write-header-to-a-python-log-file-but-only-if-a-record-gets-written

この記事を参考に、よりシンプルな実装を目指します。
また、空のログファイルがすでに存在する場合もヘッダ行を出力するようにします。

# 実装
### FileHandlerから継承する場合
[logging.FileHandler](https://docs.python.org/3/library/logging.handlers.html#logging.FileHandler)を使用する場合の実装です。
```python:サンプルコード(FileHandler)
import os
import time
from logging import FileHandler, getLogger


class FileHandlerWithHeader(FileHandler):
    def __init__(
        self,
        filename,
        fileheader,  # 引数にfileheaderを追加
        mode="a",
        encoding=None,
        delay=False,
        errors=None,
    ):
        self.fileheader = fileheader
        # ファイルが空かどうか確認するために読み書きできるようにする
        # (mode="a"or"w"で開くとファイルの読み込みができない)
        if 0 > mode.find("+"):
            mode = mode + "+"
        super().__init__(filename, mode, encoding, delay, errors)

    def _open(self):
        stream = super()._open()
        # ファイルの先頭がEOFだった場合にヘッダ行を書き込む
        stream.seek(0)
        if "" == stream.read():
            stream.write(self.fileheader + self.terminator)
        return stream


# ログを出力してみる
logger = getLogger("logger")
logger.addHandler(FileHandlerWithHeader("LOG_FILE_NAME", "LOG_FILE_HEADER"))
for i in range(20):
    logger.error(f"ERROR MESSAGE{i}")
    time.sleep(0.2)
```

### TimedRotatingFileHandlerから継承する場合
[logging.handlers.TimedRotatingFileHandler](https://docs.python.org/3/library/logging.handlers.html#logging.handlers.TimedRotatingFileHandler)を使用する場合の実装です。
__init()__の引数でmodeを指定できない(mode="a"で固定となる)ので、modeを変更する処理を_open()の中へ移動しています。
```python:サンプルコード(TimedRotatingFileHandler)
import os
import time
from logging import getLogger
from logging.handlers import TimedRotatingFileHandler


class TimedRoatingFileHandlerWithHeader(TimedRotatingFileHandler):
    def __init__(
        self,
        filename,
        fileheader,  # 引数にfileheaderを追加
        when="h",
        interval=1,
        backupCount=0,
        encoding=None,
        delay=False,
        utc=False,
        atTime=None,
        errors=None,
    ):
        self.fileheader = fileheader
        super().__init__(
            filename,
            when,
            interval,
            backupCount,
            encoding,
            delay,
            utc,
            atTime,
            errors,
        )

    def _open(self):
        # ファイルが空かどうか確認するために読み書きできるようにする
        # (mode="a"or"w"で開くとファイルの読み込みができない)
        if 0 > self.mode.find("+"):
            self.mode = self.mode + "+"
        stream = super()._open()
        # ファイルの先頭がEOFだった場合にヘッダ行を書き込む
        stream.seek(0)
        if "" == stream.read():
            stream.write(self.fileheader + self.terminator)
        return stream


# ログを出力してみる
logger = getLogger("logger")
logger.addHandler(
    TimedRoatingFileHandlerWithHeader(
        "LOG_FILE_NAME",
        "LOG_FILE_HEADER",
        "S",  # 動作確認のためにwhen="S"とする
    )
)
for i in range(20):
    logger.error(f"ERROR MESSAGE{i}")
    time.sleep(0.2)
```
macでChromeDriverの更新方法

# はじめに

railsでe2eテストをしていると、定期的にChromeDriverの更新が必要になるはず

```
❯ bin/rails test test/system/posts_test.rb        
2025-05-11 12:45:15 INFO Selenium [:logger_info] Details on how to use and modify Selenium logger:
  https://selenium.dev/documentation/webdriver/troubleshooting/logging

2025-05-11 12:45:15 WARN Selenium [:selenium_manager] The chromedriver version (101.0.4951.15) detected in PATH at /usr/local/bin/chromedriver might not be compatible with the detected chrome version (136.0.7103.93); currently, chromedriver 136.0.7103.92 is recommended for chrome 136.*, so it is advised to delete the driver in PATH and retry 
Running 4 tests in a single process (parallelization threshold is 50)
Run options: --seed 46376
```

# 参考
こちらを参考にやれば良いが、まとめる
https://qiita.com/kurokoya/items/d0f9783d4f6ac70ef581

# やり方

こちらのページから、ChromeDriverをインストールして下さい。
https://developer.chrome.com/docs/chromedriver/downloads?hl=ja

インストールしたら、解凍して下さい

その後、既存のchromedriverは削除してokです
`rm -rf /usr/local/bin/chromedriver`

そして、インストールしたものに差し替えたらokです
chromedriverを`/usr/local/bin`の下に移動させると、新しいものに切り替わって、最新のchromeに対して利用できるようになります
```
mv ~/Downloads/chrome-mac-arm64/* /usr/local/bin

❯ which chromedriver-path
/usr/local/bin/chromedriver-path
```

実行に成功
```
❯ bin/rails test test/system/posts_test.rb        
Running 4 tests in a single process (parallelization threshold is 50)
Run options: --seed 59733

# Running:

Capybara starting Puma...
* Version 6.6.0, codename: Return to Forever
* Min threads: 0, max threads: 4
* Listening on http://127.0.0.1:59374
....

Finished in 3.435979s, 1.1642 runs/s, 1.1642 assertions/s.
4 runs, 4 assertions, 0 failures, 0 errors, 0 skips
```
配列内のオブジェクトを新しいプロパティ名のオブジェクトに変換する方法

# 概要
Javascriptのコーディング練習中に、配列内部のオブジェクトのプロパティ名を変えて新規オブジェクトを作る方法につまづいたので、備忘録も兼ねて記事にまとめます。

# 問題
ユーザーの情報が管理されている配列UserDataを、nameプロパティをキーに、valueプロパティを値に持つオブジェクトへ変換する関数を作成しましょう。

```js
// 元の配列
const userData = [
  { name: "username", value: "Yamada" },
  { name: "email", value: "Yamada@test.com" },
  { name: "age", value: 25}
]; 


// 変換後のオブジェクト
{ username: "Yamada", email: "Yamada@test.com", age: 25 }
```

# reduce関数を使った実装
今回はreduce()関数を使って、配列内のオブジェクトのデータを用いて新しくオブジェクトを生成するように記述しました。

[reduce()関数](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)は配列の各要素に対して、定義した「コールバック関数」を順番に適用します。

```js: 例
reduce(callbackFn, initialValue)
```

なお、callbackFnの戻り値は以下の4つです。

- accumulator
前回のコールバック関数の呼び出し結果の値です。初回の呼び出しでは`initialValue`が指定されていた場合はその値、そうでない場合はarray[0]の値が返ります。

- currentValue
現在の要素の値です。初回の呼び出しでは`initialValue`が指定された場合はarray[0]の値が返り、そうでない場合はarray[1]の値が返却されます。

- currentIndex
現在の`currentValue`のインデックスです。初回の呼び出しでは、`initialValue`が指定された場合は0、そうでない場合は1になります。

- array
reduce()が呼び出された配列です。

## 完成コード
上記を踏まえ、以下のプログラムを作成しました。
完成系のコードは以下です。

```js
const userData = [
  { name: "username", value: "Yamada" },
  { name: "email", value: "Yamada@test.com" },
  { name: "age", value: 25}
];

const transformFormData = (data) => 
  data.reduce((acc, cur) => {
    acc[cur.name] = cur.value 
    return acc;
  }, {});

console.log(transformFormData(userData));
```

`initialValue`には初期値として空のオブジェクトを渡しました。

初回のコールバック関数で、この空のオブジェクトに対して、配列userDataの1つ目のオブジェクト`{ name: "username", value: "Yamada" }`のnameプロパティを指定し、value値を格納しています。

これをuserData内の要素分だけ繰り返すことで、別名のプロパティ名で新規オブジェクトの作成ができるようになりました。

### 別解
色々調べていくと、スプレッド構文を使ってオブジェクト生成するとより記述もすっきりした記述ができそうです。

```js:
const userData = [
  { name: "username", value: "Yamada" },
  { name: "email", value: "Yamada@test.com" },
  { name: "age", value: 25}
];

const transformFormData = (data) => 
  data.reduce((acc, cur) => ({...acc, [cur.name]: cur.value}), {});

console.log(transformFormData(userData));
```
この記載をする際は、プロパティ名が変数の値によって変わる動的プロパティとなるのでプロパティ名を`[]`で囲まないと`Syntax error`が生じるので注意です。
Linucレベル１勉強メモ　＃２８

＃ 第三章　GNUとUnixのコマンド

練習問題3.3
ファイルsample.txt内の英小文字をすべて英大文字に変更して画面上に出力するコマンドをすべて選択してください。

A. tr 'a-z' 'A-Z' sample.txt

B. cat sample.txt | tr 'a-z' 'A-Z'

C. tr -f 'a-z' -t 'A-Z' < sample.txt

D. tr [:lower:] [:upper:] <sample.txt

E. tr '[:lower:]' '[:upper:]' < sample.txt

（解答）B, D, E

（解説）
trコマンドで文字を変換して画面上に出力することができます。trコマンドはファイルを引数に指定できないので注意してください。catコマンドなどを使って出力したものをパイプでtrコマンドに送るか、入力リダイレクトを使って指定します。なお、引用符（’）で囲まなくても構いません。選択肢Cは書式が誤っているので不正解です。

※注意　trコマンドはファイルを引数として指定できない！！！

trコマンド
標準入力から読み込まれた文字列を変換したり、削除したりします。
trコマンドの主なオプション
1. -d, --delete<br>「文字列１」とマッチした文字列を削除する。
1. -s, --squeeze-repeats<br>連続するパターン文字列を１文字として処理する

クラス
1. [:alpha:]<br>英字
1. [:lower:]<br>英小文字
1. [:upper:]<br>英大文字
1. [:digit:]<br>数字
1. [:alnum:]<br>英数字
1. [:space:]<br>スペース

（わからない単語解説）
* パイプ<br>コマンドやプログラムの出力結果を、別のコマンドやプログラムの入力にわたせると、単純な動作のコマンドを組み合わせて複雑な処理をすることができます。この時に使われるのがパイプ（パイプライン）です。記号では「｜」で表します。
* ＜（リダイレクト）<br>標準入力のリダイレクトであり、これを行うと＜後のファイルの記載内容を１行ずつ読み込んで実行するという処理を行うことができます。
* catコマンド<br>LinuxやUNIX系OSでファイルの内容を表示したり、ファイルを凍結したありするのに使われる基本的なコマンドです。
SwiftUIで進捗用ProgressBarを実装する

# はじめに
今回は、SwiftUIで進捗を表すProgressBarを実装してみます
### コード
```swift
var progressBarView: some View {
        ZStack {
            GeometryReader { geometry in
                Capsule()
                    .fill(Color.White)
                    .overlay {
                        HStack {
                            Spacer()
                            Text("progress_template".localized(planValue))
                                .font(.bold12)
                                .foregroundStyle(Color.Black)
                                .padding(.trailing, 8)
                        }
                    }

                Capsule()
                    .fill(Color.Blue)
                    // 100を超えた時に突き抜けないようにminで制御
                    .frame(width: geometry.size.width * min(progress, 1.0))
                    .overlay {
                        HStack {
                            Spacer()
                            Text("progress_template".localized(value))
                                .font(.bold12)
                                .foregroundStyle(Color.White)
                                .padding(.trailing, 8)
                        }
                    }
            }
            .frame(height: 20)
        }
        .frame(maxWidth: .infinity)
    }
```
### さいごに
今回はSwiftUIで進捗用ProgressBarを実装しました
Androidではデフォルトであるのですが、IOSでは自前で実装しないとなく、100を超えたときに表示が崩れるので多少面倒でした
請負・SES文脈で未経験で任されるPMとは ~現場に飛び込む前のリアル業界図解~

この記事では
- **『プロジェクトマネージメントを解説している書籍や情報』**
- **『請負・SES文脈で未経験で任されるPM』**
では天地の差があるレベルで実態が異なるので、何がどう異なるのか言語化していきたいと思う。

# 対象読者
- IT業界未経験でPM、PMOへのジョブチェンジを検討している方
- IT 3年目未満の方
- 情シス、自社開発経験のみで請負・SES業界に興味のある方

# 未経験PMのよくあるポジション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646082/4218fd10-ed37-4e42-9dc0-f92904791c22.png)

請負・SES企業でPMをすると大抵の場合は赤い『現実を作る人』の長として活躍することになる。

普通に考えるとお客さんの会社と自身の所属する会社の2社しか登場しないと思いがちであるが、IT業界ではそっちの方が普通ではない。
1つのプロジェクトに何社も関わるのが通常である。

この図は日本の請負業界の縮図だと私は思っているのだが、こんな構造では『現実を作る人』以外はシステムを把握できていないと容易に想像できるが、実際そうなのである。

未経験でPMをすると大抵は赤い『現実を作る人』グループに所属するパターンになると思う。

さらに、『現実を作る人』グループの会社は未経験でもパフォーマンス出せそうな人であれば積極的に任せたいという会社はとても多いのである。(当然であるが『現実を作る人』は一番システムを知っている必要がある)

少し考えると一番コアなところをそんな簡単に取っ替え引っ替えして、未経験の馬の骨みたいな奴をマネージャーに据えたりして、その会社は大丈夫なのか？？
と不安になりそうなものだが、日本のIT業界の実態はそんなものである。

また、未経験でも『現実を作る人』であれば経験者よりもパフォーマンス出せる可能性が高いのも事実であるし、私も実際に経験者よりもパフォーマンスを出して評価されたので未経験でもできるのは事実である。

しかし、なぜ『現実を作る人』グループのPMは未経験でもやらせてくれる会社が多いのかという問いについて次の章で解説したいと思う。

# なぜ『現実を作る人』グループのPMは未経験でもやらせてくれる会社が多いのか
## 業界サイクル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646082/72ac8106-0d8e-4c05-9fb6-f8322e00f1c8.png)


- 4社も関係値築けるPMであれば転職すれば年収が大幅アップする
- 優秀なマネージャーに取引先がつくケースがとても多く優秀なマネージャーは独立していく

## 優秀なPMがいなくなった会社

当然マネージャーが不足するので人員補強をする。
ここでよくあるのがエンジニアをマネージャーにし、エンジニアリングマネージャーとして掛け持ちさせる策であるが失敗するケースがあとを立たない。しかし、失敗を繰り返すにも関わらずマネージャー向きの人材が社内にいないので、その人を登用し続ける会社は実態かなり多いと感じている。

経験者を採用しようにもPM実績が強い転職者とは年収が合わず、年収維持や下げても良いから転職活動している層はハズレ率が高いことは容易に想像がつく。

つまり、IT経験はなくとも才能を感じる人をPMに登用すれば予算的に折り合いがつき、基本的に失敗する今よりも維持されるか、それ以上のパフォーマンスを出せると判断する経営者も多く需要が出ていると私は考えている。

## 優秀なPMが起業したケース

優秀なマネージャーが経営者として風呂敷を広げ始めると当然1人では回らなくなるので人を採用し始める。

低予算のPJを多数抱えている場合は人員コストを抑える必要があるが、当然、経験者を採用しようにもPM実績が強い転職者とは年収が合わず、年収維持や下げても良いから転職活動している層はハズレ率が高いことは容易に想像がつくため

IT経験はなくとも才能を感じる人をPMに登用すれば予算的に折り合いがつき、半端な経験者以上のパフォーマンスを出せると判断する経営者も多いため需要が生じていると私は考えている。

# 最後に

プロジェクトマネジメントに関する書籍を見ると大きい権限を持って華々しく活躍でき、かつ年収もたくさん貰えると思いがちであるが、未経験で経験を積む場合は大抵の場合この記事で解説したような環境下で積むことになる。

経験としては、とてもいい経験も積めるしキャリアも築けるとは思うが、相当量の覚悟がないと途中で挫折してしまうことは容易に考えれるし、私も何度も心が折れそうになったのも事実である。

特に未経験でのジョブチェンジを検討されている方に相当量の覚悟を持たないといけないことがわかって頂けたら幸いである。
GASの始め方（自分用）

GAS



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3558518/6fc4f77d-7d71-45cc-b1f9-7ca3363c8f7c.png)

## コンテナバインド型
### 基本概念
- Google ドキュメント、スプレッドシート、スライド、フォームなどの特定のGoogleファイル（コンテナ）に紐づいたスクリプト
- 紐づいたファイルのコンテキスト内で動作する
### 作成方法
1. Google ドキュメント/スプレッドシート/フォーム/スライドを開く
2. メニューから「拡張機能」→「Apps Script」を選択
3. スクリプトエディタが開き、自動的にそのファイルに紐づいたスクリプトとして作成される
### 特徴詳細
- IDの必要性: 基本的にIDを明示的に指定する必要がない（紐づいたファイルを自動的にthisとして参照可能）
- 共有: 紐づいたGoogleファイルを共有すると、スクリプトも一緒に共有される
- 削除: 紐づいたファイルを削除すると、スクリプトも一緒に削除される
- アクセス権限: スクリプトは紐づいたファイルの編集権限を自動的に持つ
- 用途: 特定のスプレッドシートやドキュメントに対する操作を自動化する場合に最適

### コード例
```javascript
function updateSheet() {
  // 紐づいたスプレッドシートを直接操作できる
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange("A1").setValue("更新されました");
}
```

## スタンドアロン型
### 基本概念
- どのGoogleファイルにも紐づかない独立したスクリプト
- 複数のGoogleサービスにまたがる処理や、独立したウェブアプリケーションの作成に適している
### 作成方法
1. script.google.com に直接アクセス
2. 「新しいプロジェクト」をクリック
3. スクリプトエディタが開き、独立したプロジェクトとして作成される
### 特徴詳細
- IDの必要性: 操作したいGoogleファイル（スプレッドシートなど）のIDを明示的に指定する必要がある
    ファイルのidはファイルを開いたときのURLに記載
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3558518/29ae0f61-75f0-41b9-a9da-7aaae5fc4a03.png)


- 共有: スクリプト自体を共有する必要がある（ファイルとは別）
- 削除: 独立して存在するため、関連するファイルを削除してもスクリプトは残る
- アクセス権限: 操作したいファイルへのアクセス権を明示的に取得する必要がある
- 用途: 複数のファイルを操作する処理や、ウェブアプリ、API連携など幅広い用途に適している
### コード例
```javascript 
function updateSpecificSheet() {
  // スプレッドシートのIDを明示的に指定する必要がある
  var spreadsheetId = "1ABC...xyz"; // スプレッドシートのID
  var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName("Sheet1");
  sheet.getRange("A1").setValue("更新されました");
}
```
### 選択のポイント
- コンテナバインド型が適している場合
- 単一のGoogleファイルに対する操作が主な目的
- ファイルと一緒にスクリプトも共有・管理したい
- シンプルな自動化やカスタムメニュー、サイドバーなどを実装したい
### スタンドアロン型が適している場合
- 複数のGoogleファイルを操作する必要がある
- ウェブアプリケーションとして公開したい
- 外部APIと連携する処理を作成したい
- スクリプトを独立して管理したい
[8086実機実験] CFカードから起動するブートセクタを自作する(備忘録)

## やりたいこと
CompactFlash（CF）カードのブートセクタに自作のプログラムを書き込み、
それをPocket8086（実際のIntel 8086を搭載した復刻PC）上で起動させる。

## ブートセクタへ書き込むプログラム
以下は、画面に "Hello, Pocket8086!" と表示するだけの簡単なブートローダーです。
```boot.asm
[bits 16]
[org 0x7C00]

mov si, msg
call print_string
jmp $

print_string:
  lodsb
  or al, al
  jz .done
  mov ah, 0x0E
  int 0x10
  jmp print_string
.done:
  ret

msg db "Hello, Pocket8086!", 0

times 510-($-$$) db 0
dw 0xAA55
```
## Ubuntsu上で作業
Windowsでrufus等を試したがうまく書き込めなかった。
以下のコマンドを実行して、コンパイル後CFへ書き込む
```bash
nasm boot.asm -f bin -o boot.bin       # コンパイル
lsblk                                   # CFカードの名前確認
sudo umount /media/ubuntu/cf1 #lsblkの結果に合わせて
sudo dd if=boot.bin of=/dev/sdc bs=512 count=1 conv=notrunc
sync
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054974/3db42021-f5a8-4ed2-829c-e2f3a25897c3.png)

## 結果
無事に起動し、Pocket8086の画面に設定した文言が表示された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054974/792c451a-b9f2-410e-81b9-e495e232b697.png)

## 環境
Ubuntsu 22.04.5
個人的備忘録：ECSタスク定義でUnexpectedParameterエラーが出た時の対処メモ

## はじめに

AWS ECS のタスク定義を `register-task-definition` コマンドなどで登録する際に、不要なキーが含まれているとエラーが発生することがあります。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

この記事ではその代表的なエラーと、解決方法について記録しています。

## 書こうと思ったきっかけ

受講しているITスクールのハッカソンの開発の一環で、ECSのタスク定義を登録しようとした際にエラーが出て少し詰まったため、忘れないようにメモとして残しておきます。

**実際のエラー画面**

![Screenshot 2025-05-11 at 12.27.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/3f7bdc3d-bc80-4ec8-bcf8-fca86d7cf8d7.png)

このエラーが起きた原因としては、前回作ったTerraformのコードを使って先にデプロイして生成されたタスク定義をもとに逆算して考えようと思った結果、不要な値が含まれているというエラーが起きました。

## 内容

### エラー内容

`register-task-definition` 実行時に以下のようなエラーが発生しました：

```
UnexpectedParameter: Unexpected key 'taskDefinitionArn' found in params
UnexpectedParameter: Unexpected key 'revision' found in params
UnexpectedParameter: Unexpected key 'status' found in params
```

これらは、AWSが自動的に生成・管理するフィールドであるため、手動で指定してはいけない項目です。

### 解決方法

該当のタスク定義JSONファイル（例：`updated_task_definition.json`）から、以下のキーを削除すれば正常に登録できます：

```json
"taskDefinitionArn": "arn:aws:ecs:ap-northeast-1:xxx:task-definition/Datadog:57",
"revision": 57,
"status": "ACTIVE"
```

登録可能な正しい形式の一例は以下の通りです：

```json
{
  "family": "Datadog",
  "containerDefinitions": [...],
  "volumes": [...],
  "cpu": "256",
  "memory": "512",
  "networkMode": "awsvpc",
  "requiresCompatibilities": ["FARGATE"],
  "executionRoleArn": "...",
  "taskRoleArn": "..."
}
```

## まとめ

ECSタスク定義のJSONをそのままエクスポートして再利用しようとすると、AWSが自動生成するフィールドが含まれてしまいがちです。

:::note warn
**今回のように `UnexpectedParameter` エラーが出た場合は、不要なキーを削除することで解決できます。**
:::

特に `taskDefinitionArn` や `revision` などは登録時には不要であることを覚えておくと、今後スムーズに作業が進められるかと思います...！
ORiN3入門：環境構築ガイド＋GUIツールで動かしてみる①

# ORiN3入門：環境構築ガイド＋GUIツールで動かしてみる

## 1. はじめに

### ORiN3とは？

**ORiN3（Open Robot/Resource interface for the Network Version 3）** は、主にFA（Factory Automation）分野で使われるさまざまな機器を、メーカーや機種を意識せずに統一的に接続・制御できるようにするための標準仕様・ミドルウェアです。

もともとORiNという仕様は「ORiN協議会」が策定していて、ソフトウェアの実装はデンソーウェーブが提供しています。

### ORiN2からの変更点

ORiN2 SDKはWindows専用でしたが、ORiN3からは新たにマルチプラットフォーム対応となり、WindowsだけでなくLinuxやRaspberry Piなどでも動作するようになっています。

またORiN3ではインターフェイスにgRPCを採用していますが、これはマイクロサービスとして構成を意識したものです。

これらの変化点により、柔軟でスケーラブルなシステムに組み込みやすくなったんじゃないかと思います。

## 2. 前提条件

ORiN3はマルチプラットフォームに対応していますが、この記事で最初にセットアップするGUIツール（ORiN3 Configurator）は **Windows環境専用** となっています。

サポート環境は以下の通り。

- **Windows 10以降**

### ORiN3 Configuratorの入手

「ORiN3 Configurator」は以下のリンクから入手できます。
※ **ORiN3 Configurator** はWindows版ORiN3 Runtimeに含まれています

- [Microsoft Store - ORiN3 Runtime](https://apps.microsoft.com/detail/xpdmcgrx6kwj25?hl=ja-JP&gl=JP)

Microsoft Storeから入手するのが簡単かと思いますが環境によってはアクセスが制限されていることもりますので、その場合は以下のリンクから最新版を取得できます。

https://packages.iot.fa.denso-wave.com/index.html

## 3. ORiN3 Runtimeのインストール

Microsoft Store、もしくはダウンロードリンクから入手したインストーラを起動して使用許諾に合意すればインストールできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263117/6abedd59-6150-4a18-b0dd-5141ca5aef08.png)

## 4. 動かしてみる
では早速動かしてみましょう。

### GUIツールの起動方法

「スタートメニュー」→「ORiN3」フォルダ →「ORiN3 Configurator」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263117/62f3b74e-0854-494a-8262-5cff144ee0c6.png)

#### 接続先設定
オブジェクトエクスプローラーに表示されている『接続先を設定する』をクリックして接続先の **ORiN3 Remote Engine**を指定します。

ORiN3 Runtimeには **ORiN3 Configurator** と **ORiN3 Remote Engine** が含まれているため、インストーラを実行した環境にはすでに **ORiN3 Remote Engine** がセットアップされています。
まずは接続先として127.0.0.1を指定して繋いでみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263117/5a749d95-0c2f-4cab-8ae6-66caf985b128.png)

以下のような表示になったら正しく接続ができています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263117/875ef5de-9e0d-4f54-8d74-259b06eb15a2.png)

ORiN3はプロバイダーを組み合わせることで様々なデバイスと接続します。次はプロバイダーのセットアップですが... ちょっと長くなってしまったので次に続きます。

[ORiN3入門：環境構築ガイド＋GUIツールで動かしてみる②](https://qiita.com/kkikzk/items/3bea0665cdfee363e5ec)

---

**関連情報（公式）**

- [ORiN協議会 GitHubリポジトリ](https://github.com/ORiN-Consortium/ORiN3)
- [デンソーウェーブ ORiN3公式ページ](https://www.denso-wave.com/ja/system/iot/product/orin3-runtime.html)
- [Microsoft Store ORiN3 Runtime](https://apps.microsoft.com/detail/xpdmcgrx6kwj25?hl=ja-JP&gl=JP)

---
F-789SGをレビュー！　CanonのCASIOライクな関数電卓これ如何に？

## はじめに
F-789SGを購入、やっと関数電卓のおすすめを自信を持って語れる境地まで辿り着きました。

どうにも、「CASIOのパクリ」みたいに感じてしまって、買うのを躊躇していたのですがこの際購入に踏み切りました。

これで各社フラッグシップをそろえたことになります(厳密にはまだですが…)。
- CASIO
  * [fx-CG50](https://qiita.com/bockring/items/0b0cb24771019c6ec232)
  * [fx-JP900CW](https://qiita.com/bockring/items/7b3772bebe540f58364e)
- SHARP
  * [EL-5160T(EL-509Tからの改造品)]()
- Canon
  * **NEW!!** F-789SG
- HP
  * [HP Prime G2](https://qiita.com/bockring/items/53b4b887d8885be4da50)
- TI
  * [TI-36X Pro](https://qiita.com/bockring/items/6248c06e303117c0b6b5)

これでTI-nSPIRE系以外は出揃いました。

## CASIOとCanonの差
まず、私が「パクリ…？」のように感じてしまった理由の画面を比較していきます。**左がCanon**、そして**右がCASIO**です(CASIO機はfx-375ES Aだと思ってください)。

![IMG_0089.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/2fd11958-e4b0-4c28-aa02-df09ba885aee.jpeg)
↑メニュー。数字の表示形式とフォントサイズが異なる。

![IMG_0090.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/e1757af9-b560-408e-a629-b7e9d063df65.jpeg)
↑科学定数呼び出し画面。Canonの方が使いやすい。

![IMG_0091.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/138dd445-0d38-407a-a19a-c32e2d56565a.jpeg)
↑単位変換画面。こちらもCanonの方が使いやすいです。

![IMG_0087.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/41ecf134-c7d5-49d6-8cee-07541e0c37e4.jpeg)
![IMG_0088.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/74c6157d-02ba-473c-8395-b6a9c69daa5c.jpeg)
↑赤枠部分のフォントが違います(上下ともに)

ちょくちょく差があるので、**「CASIOのOEM製品」ではなく**、**「CASIOに似せた製品」** のようにも感じられますが、この表示の感じ、**一昔前のCASIO機のOEMという可能性**はありますよねぇ… ほら、fx-91xESあたりのやつですよ。

あと電池がCR2032はやめて欲しいですね。普通に電池代が跳ね上がります。

機能面でも差があることもわかりました。CASIO機では3元1次方程式・3次方程式まで対応(ともにEQNモードから)なのに対し、Canon機は**4元1次方程式**・**4次方程式**までの対応になっています。

それにCanon機は行列・ベクトルをそれぞれ4つまで使用できます。また行列は4x4まで可能です。これはCASIO機の3x3まで・3個までという性質よりも優れています。

しかし、**CASIOと違ってソーラーのみの駆動はできません**。困ったなぁこれ。

## 操作感
正直、ほぼCASIOと一緒です。わざわざこちらで書き直すのも面倒ですから以下の記事をご覧ください。

https://qiita.com/bockring/items/30721c5f88cab3bbc931

では本機のみの特徴について述べていきます。

Appsキーは便利です。これだけで確かに初心者に勧める理由になるかもしれません。でも、それだけです。CASIO機でいうOPTN(オプション)キーに当たります。CASIOのOPTNキーはその状態で使用できるほぼ全てのことがそのOPTNメニューに集約されているから便利なのであって、それが若干でも中途半端なCanon機では大きな利点と成し得ないのです。

基本的にはハードウェアキーから直接アクセスできる方が便利なはずです。特に総和($\sum_{}^{} {}$)をメニュー内に入れたのは大失態と言ってもいいでしょう。

やはり、この状態では僕がF-789SGを勧める立場には回れないです。**これだったら、fx-375ES Aを買ってもらって基本的なところをレクチャーしたい**と考えます。(速度も同じですから。)

数値変数は19個あります。ABCDEFXYMと0〜9です。こんなに多くても煩雑になるだけのように思えますが…

## おわりに
ボリューム皆無ですね。最近の電卓関連記事はどうしてもプログラムに触れる関係で200行(Qiita内表示)くらいは余裕で行くんですが。たったの70行未満です。

そもそも関数電卓というのは(他の製品もそうだが)取扱説明書を読み込んで徐々に理解していくものなのです。それを無理に分かりやすくしても、それが必ず成功するとはいえないのです。

本機種も若干その傾向を感じていますが、最たる例がClassWiz CWシリーズでしょう。関数電卓という**本来難しいはずのもの**を**無理に分かりやすくする弊害**の象徴と言って過言ではないように思います。

それではまた〜
【React】React router とは


# はじめに

こんにちは。アメリカ在住で、独学でエンジニアを目指している Taira です。
現在、Udemy の講座「React に入門した人のためのもっと React が楽しくなるステップアップコース完全版」で React の学習を進めています。

この講座の内容は非常にわかりやすいのですが、紹介されている React および React Router のバージョンがやや古く、現在主流となっている react-router-dom バージョン 7 とは操作方法が大きく異なります。

そこで本記事では、講座内で紹介されている内容をもとに、2025 年 5 月 10 日時点での react-router-dom の最新バージョン（7.5.3）に対応した書き方や操作方法について解説します。

【開発環境】
React 19.1.0

Vite 6.3.5

react-router-dom 7.5.3

## 始める前に

まずは react-router-dom をインストールしてください

```npm
npm install react-router-dom
```

package.json の dependencies に react-router-dom バージョン 7.5.3(2025 年 5 月時点)が入っていることを確認してください

## React router の使い方

以下はバージョン 7 の react-router-dom の書き方です。

```jsx:App.jsx
import {BrowserRouter, Route, Routes } from 'react-router-dom'
import { Home } from '../Home';
import { Page2 } from '../Page2';
import { Page1 } from '../Page1';
import { Page1DetailA } from '../Page1DetailA';
import { Page1DetailB } from '../Page1DetailB';
import { UrlParameter } from '../UrlParameter';
import { Page404 } from '../Page404';

export const App = ()=>{
  return(
    <>
      <BrowserRouter>
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/page1" element={<Page1 />}>
            <Route path="detailA" element={<Page1DetailA />} />
            <Route path="detailB" element={<Page1DetailB />} />
          </Route>

          <Route path="/page2" element={<Page2 />}>
            <Route path=":id" element={<UrlParameter />} />
          </Route>

          <Route path="*" element={<Page404 />} />
        </Routes>
      </BrowserRouter>
    </>
  )
}
```

このように、v7 では Routes コンポーネントの中に Route をネストし、それぞれに element プロパティでコンポーネントを割り当てるというシンプルな記述になっています。

以下に、旧バージョン（v5）と比較して、v6 以降でどのように変わったかを表にまとめました。

| 項目               | v5 以前 | v6 以降（現行）           | 変化のポイント                                 |
| ------------------ | ------- | ------------------------- | ---------------------------------------------- |
| Switch             | ✅ 使用 | ❌ 廃止 → Routes          | 自動で最初にマッチしたルートだけ表示（明確化） |
| exact              | ✅ 必須 | ❌ 不要                   | パスの完全一致がデフォルトに                   |
| component / render | ✅ 使用 | ❌ 廃止 → element={<...>} | JSX の一貫性向上、直感的に                     |
|                    |         |                           |                                                |

私は講座内で紹介されていた v5 の書き方を見ましたが、v7 以降の書き方のほうがシンプルで可読性が高く、初心者にも理解しやすいと感じました。

## まとめ

本記事では、React Router v7 における基本的なルーティングの書き方と、旧バージョンとの主な違いについてまとめました。
今後はさらに詳細な使い方についても記事にしていく予定です。

# 参考文献

https://www.udemy.com/share/104d6k3@42e714cVu4rgVDHDJf-ktUgk7fTCTCZNgNYDjNAfj2ycTQZlC2z-9pgXx7KV8hvxwQ==/
Text Search APIをPythonから利用する

# はじめに
前回の記事（[Google Maps Text Search APIの使い方解説](https://qiita.com/00b012deb7c8/items/1a1d2b4e376c0eca471c)）では、
APIの基本的な使い方やリクエスト例、パラメータについて書きました。
今回はそれを踏まえ、PythonでのAPI活用例を紹介します

# コード
```python
import requests

API_KEY = 'YOUR_API_KEY'

url = 'https://places.googleapis.com/v1/places:searchText'
headers = {
    'Content-Type': 'application/json',
    'X-Goog-Api-Key': API_KEY,
    'X-Goog-FieldMask': 'places.id,places.displayName,places.formattedAddress,places.location,places.websiteUri'
}
data = {
    'textQuery': '東京駅 ラーメン',
    'languageCode': 'ja',
    'pageSize': 20
}

response = requests.post(url, headers=headers, json=data)
results = response.json().get('places', [])
print(results)
```
# 結果

![1f96d137d49ae703ab9a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4001795/deffded6-87cf-40d1-b615-69ac13650963.png)

# 件数が多い場合（ページング

Text Search APIのレスポンスに nextPageToken が含まれている場合、
それを使って追加の検索結果を取得します

```python
import requests
import time

API_KEY = 'YOUR_API_KEY'

url = 'https://places.googleapis.com/v1/places:searchText'
headers = {
    'Content-Type': 'application/json',
    'X-Goog-Api-Key': API_KEY,
    'X-Goog-FieldMask': 'places.id,places.displayName,places.formattedAddress,nextPageToken'
}
data = {
    'textQuery': '東京駅 ラーメン',
    'languageCode': 'ja',
    'pageSize': 5
}


all_places = []
while True:
    response = requests.post(url, headers=headers, json=data)
    result = response.json()
    all_places.extend(result.get('places', []))
    token = result.get('nextPageToken')
    if not token:
        break
    data['pageToken'] = token
    time.sleep(2)  # トークンが有効になるまで待つ
```

- **フィールドマスクの必須設定**
nextPageToken を取得するには、X-Goog-FieldMask ヘッダーに明示的な指定が必要です

## 注意点
- nextPageToken がレスポンスに含まれていない場合、それ以上のデータはありません
- 最大取得件数は 合計60件 まで
- nextPageToken を使う際、トークン発行から有効化まで短い遅延がある場合がある
**1～2秒待ってから再リクエストすると回避できます**
Linucレベル１勉強メモ　＃２７

＃ 第三章　GNUとUnixのコマンド

練習問題3.2
自分専用のコマンドを収めた\$HOME/binディレクトリを環境変数PATHに追加したいと思います。bashシェルではどのようにすれば良いですか？

A. PATH=PATH+'\$HOME/bin'

B. PATH=＄HOME/bin

C. PATH=＄PATH:\$HOME/bin

D. ＄PATH=\$HOME/bin

E. PATH='＄PATH:＄HOME/bin'

（解答）C

（解説）
環境変数PATHにパスを追加する場合、「PATH＝＄PATH:」に続けて追加するディレクトリを指定します。従って、正解は選択肢Cです。選択肢Bのやり方では、PATH変数の内容は新しく設定したディレクトリだけになってしまいます。変数を定義する場合、変数名の先頭に「＄」は不要です。選択肢Eのように単一引用符で囲んでしますと。PATH変数の内容は「＄PATH:＄HOME/bin」となってしまいます。なお、＄HOMEにはホームディレクトリのパスが格納されています。
『達人に学ぶDB設計 徹底指南書 第2版』を読んでの感想



## 良かったところ

- なるべく初心者にわかりやすい言葉で説明されており、理解しにくい部分が図解で示されていたのでイメージを掴みやすかった。
- 最初にその章で学ぶことの要約が書いてあり、全体像を把握できた。
- 重要な部分をわかりやすく短い言葉でまとめたポイント項目のような感じでまとめてくれており、復習しやすく頭に残りやすかった。

## 悪かったところ

- 概念的な説明が多いので、基礎的なSQL文やDBの前提知識が必要になってくる。
- 物理設計の章では、ストレージやCPUなどのパソコン知識も必要になるので、少しイメージしにくかった。
- アンチパターンの項目に関しては、実際にハンズオンで練習していかないと理解が乏しいなと感じた。

## 学んだこと

- 良質なDB設計を行うための知識、特に設計部分の概念設計、物理設計の知識を深く学ぶことができた。

## 難しかったこと

- 初心者にわかりやすい言葉といえど限界があり、多々知らない単語を理解するために調べながらの学習だったので、理解するのに時間がかかった。
- 概念的な学習が多いので、ポイントポイントで理解を具体化し、イメージを頭に残しておくことが難しかった。
softetherの機能ロック解除

# こちらを参考にしました。

https://qiita.com/rimksky/items/ea62876bc154b9bfca76

https://ja.softether.org/5-download/src/2.unix

https://blog.cles.jp/item/9524


# まずは現在稼働中のバージョンの確認

    cd ../../usr/local/vpnserver/
    sudo ./vpncmd /help | grep Version
    Version 4.42 Build 9798   (English)


# 現在のバージョンに対応したソースコードをダンロード
もちろん、これを機にバージョンアップしてもいいのかもしれません。

    wget https://jp.softether-download.com/files/softether/v4.42-9798-rtm-2023.06.30-tree/Source_Code/softether-src-v4.42-9798-rtm.tar.gz
    tar zxvf softether-src-v4.42-9798-rtm.tar.gz
    cd v4.42-9798/


# 作業環境構築
    sudo apt install build-essential
    sudo apt install libreadline-dev libssl-dev libncurses-dev libz-dev

# DDWinでSDカード全体のバックアップをとる。

# リージョンロックを解除する。

    nano src/Cedar/Server.c

SiIsEnterpriseFunctionsRestrictedOn内の
ret = true;
を
ret = false;
に書き換える。

# ビルドする
    cd v4.42-9798/
    ./configure
    make

# ファイルを置き換える。
バックアップは、SDカード自体でとってあるので、そのまま置き換えます。

    sudo su -
    systemctl stop vpnserver
    cp -rp bin/vpnserver/vpnserver /usr/local/vpnserver/
    cp -rp bin/vpncmd/vpncmd /usr/local/vpnserver/
    cp -rp bin/vpncmd/hamcore.se2 /usr/local/vpnserver/
    systemctl start vpnserver


# これで接続元IP制限リストが使えるようになりました。
![スクリーンショット 2025-05-11 115148.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3675614/5b3507ed-418e-48b3-a1b8-4aeded99ed83.png)
Linucレベル１勉強メモ　＃２６

＃ 第三章　GNUとUnixのコマンド

練習問題3.1
bashを使って作業をしている時、次のコマンドRタインを実行しました。結果として適切な説明を選択してください。

＄ TEST=date;echo `＄TEST`

A. 現在の時間が表示される

B. 「＄TEST」と表示される。

C. 「＄date」と表示される

D. 「date」と表示される

E. 誤りがあるのでエラーになる。

（解答）A

（解説）
細かく分類してみる、まず、シェル変数TESTに「date」という値が入ります。セミコロン（；）はコマンドを順に実行します。従って、設問のコマンドは「TEST=date」と「echo `＄TEST`」を２行に分けて入力した場合と同じ結果になります。
バッククォーテーション（`）内の変数はコマンドとして置き換えられ、実行した結果が展開されます。このため、dateコマンドの実行結果である、現在の日時が表示されます。従って、正解は選択肢Aです。
単一引用符（'）の場合は変数が展開されません。もし「echo '＄TEST'」なら、「＄TEST」と表示されます。二重引用符（"）の場合は変数が展開されます。もし、「echo "＄TEST"」なら、「date」と表示されます。

（わからない単語解説）
* シェル<br>OSとユーザーの間のインターフェースとして、ユーザーが入力したコマンドを解釈し、OSのカーネルに伝えて処理を実行させ、その結果をユーザーに表示するプログラムのこと