OmniAICreator/Qiita-1.07M huggingface dataset:
Template利用方法の演習その１

【Udemy】「[Python + Django5 Djangoを基礎から応用まで、アプリケーション開発マスターpython付き](https://www.udemy.com/course/python-django-web/?utm_source=adwords&utm_medium=udemyads&utm_campaign=Search_DSA_Alpha_Prof_la.JA_cc.JP&campaigntype=Search&portfolio=Japan&language=JA&product=Course&test=&audience=DSA&topic=Python&priority=Alpha&utm_content=deal4584&utm_term=_._ag_167497668438_._ad_711539479579_._kw__._de_c_._dm__._pl__._ti_dsa-2346969404548_._li_1009401_._pd__._&matchtype=&gad_source=1&gbraid=0AAAAADROdO0rDAmPXWxS4CqbA-TwtajoY&gclid=Cj0KCQjw782_BhDjARIsABTv_JD6--S8kM05bboCvLeohpkFypaTLyc3k3gEhrP7f8jzCqfuGhYcps0aAozDEALw_wcB&couponCode=V2JPLETSLEARN)」の学習記録。

Notionでまとめて、そのままの形でQiitaに投稿できればいいのにな...:pray:

## Django 大学陸上部サイトの作成

### 1. プロジェクト作成：TemplateExam

```bash
cd 04_TemplateExam
django-admin startproject TemplateExam
```

### 2. アプリケーション作成：TemplateApp

```bash
cd TemplateExam
python manage.py startapp TemplateApp
```

#### settings.py にアプリケーションを追加

```python
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'TemplateApp',  # アプリケーション名
]
```

#### アプリケーションの urls.py を作成

```bash
cd TemplateApp
touch urls.py
```

#### プロジェクトの urls.py を編集

```python
from django.contrib import admin
from django.urls import path, include  # includeを追加

urlpatterns = [
    path('admin/', admin.site.urls),
    path('app/', include('TemplateApp.urls')),  # アプリケーションのurlsをインクルード
]
```

#### TemplateApp の urls.py を記述

```python
from django.urls import path
from . import views  # 同階層のviews.pyをインポート

app_name = 'app'  # アプリケーション名

urlpatterns = [
    path('home', views.home, name='home'),  # home.htmlを表示
    path('members', views.members, name='members'),  # members.htmlを表示
    path('member/<int:num>', views.member, name='member'),  # member.htmlを表示
]
```
新卒1年目で大炎上案件に参画した話

## はじめに

### 目的
昨年度の私の経験を振り返ること。

### プロジェクト概要
内容:Webアプリの新規開発(受託）
言語:Java(Spring boot), JavaScript(JQery)
規模:リーダー含め20名ほど

### なぜ炎上？
* 設計の工程から遅延していたため
* 遅延により稼働が上がり、退職者が出て人員の入れ替わりが激しかったため

## 参画当初の状況

### 自分の役割
テスターとして単体テストのフェーズから参画。

### 参画したときのプロジェクトの状態
全体的に遅延していて、新規参画者のフォローをする余裕がないような状態。
質問しても忙しそうな雰囲気を出されたり、リモートワークが多くて、インプットに時間がかかるような状態だった。

### 大変だったこと
いざテストをしてみるとバグだらけで、設計書通りに実装されていなかった。テストができないため、バグの洗い出し、修正から始めた。（Javaは実務経験ゼロで大学の講義で軽く触ったことがある程度、JQeryは全くの未経験だったので、かなりきつかった）

## どんな問題があったか？
### 技術的な問題（プロジェクト全体的に）
* Spring bootの経験者がプロジェクト内に1名しかいなかった
* 設計書通りに実装されておらず、バグが多発。単体テストに着手できるような状況ではなかった
* テスト仕様書の観点が網羅されておらず、テストケースを設計し直す必要があった

### マネジメントの問題
* タスク管理がされておらず、スケジュールの意識が薄かった

### コミュニケーションの問題
* メンバー間でSlack上で、言い合いなどのいざこざが発生
* 報告が少なく、リーダーが進捗を管理し切れないような状態

## どう対応したか
### 自分がとった行動
* わからないことが発生したとき、15分調べてわからなかったら質問する
* 質問するときは、相手が簡単に回答できるような質問にする（yes or noで答えられる質問にする、不具合が発生したデータなどの環境を共有するなど）
* テスト仕様書を作成する際は、テストする人が何をテストしたいのかが一目でわかるようなケースを作成する
* 進捗を可視化する一覧表の作成（バグ、テストケースの件数のうち、何件対応したか）

### うまく行ったこと
* 進捗を可視化する一覧表を作成したこと。マネジメント層が管理しやすいだけでなく、自分自身が今何をしているかや、完了の見積もりが立てやすいなど客観視できるようになった
* メンバーと細かいコミュニケーションをとることで、雑談の中で効率的に進める方法などをインプットできた

## 結果
担当機能は遅延している状態であったものの、何とか担当機能のテストを終え、案件を終えることができた。
### 自分の成長
エンジニア1年目ということでわからないことだらけだったが、
とにかくやるしかない状況だったため、
結果たくさんのことを学べた。
* デバッグ方法（Java, JavaScript）
* テストケースの設計
* 進捗を管理できる一覧表のようなものが大事であること
* 設計書の読み方
* テストデータの投入などDBの操作
* 新規参画者のフォロー
etc.

## 今後に活かすこと
### もしまた炎上案件に入ったらどうするか
まず現状の整理から始める。
やることは何があるのかを洗い出して、
何が終わっていて何が終わっていないかを整理する。
その後で、洗い出したタスク完了の見積もりを立てた後でタスクを進める。

質問をする際は、質問したい人が忙しそうな雰囲気を出していても、
何とか対応してもらえる時間を聞いて質問する。

ほとんどの新規参画者は、プロジェクトを加速させるためにアサインされていると思う。
そんな新規参画者が、わからないことを聞かずにいると参画した目的が達成できないことになる。
そのため、質問したい人が忙しそうな雰囲気を出していても何とか対応してもらえる時間を捻出してもらう。

とはいえ、多くの時間を奪ってはいけないので、ある程度調べたり、聞きたいことを整理した上で質問すること。

## 終わりに
この案件は、長時間の残業が続くなど、本当に厳しい状況だった。
しかし、1年目でこのような経験ができたことは、結果的に良かったと感じている。
「とにかくやるしかない」という環境の中で、テスト設計、新規参画者のフォロー、バグ修正など、多くの業務を短期間で経験することができた。

炎上案件は確かに大変だが、「自分が何のために参画しているのか」「今できることは何か」を意識しながら行動すれば、貴重な学びの場にもなる。
結局のところ、考え方や取り組み方次第で、「ただ辛いだけの記憶」になるか、「今後に活かせる経験」になるかが決まる。
どうせなら、辛かったことも含めて成長につながる経験として捉え、次に活かせる形でプロジェクトを終えたい。

### プロジェクト中で参考になった書籍
* [はじめて学ぶソフトウェアのテスト技法](https://amzn.asia/d/7pMFR1I)
* [JUnit実践入門](https://amzn.asia/d/7un9SFK)
【応用情報】UNIX系OSの基本用語

## シェル
　**シェル**は、ユーザとOS（カーネル）間のインタフェースプログラムである。ユーザが入力したコマンドを解釈し、対応する機能を実行するようにOSに指示し、OSからの結果を待ってそれをユーザに返す（表示する）ことを主な役割としている。なお、シェルはシステムの中に固定して組み込まれているものではない。ログイン時に起動される最初のシェル（ログインシェル）をはじめ、各ユーザは自分の好むシェルを指定することが出来る。

## リダイレクション
　リダイレクションは、コマンドの入力や出力を切り替える機能である。例えば、lsコマンドを実行すると、その結果は標準出力（通常、画面）に出力されるが、「ls > out」とリダイレクションを行うことで、結果をoutという名前のファイルに出力出来る。また、「ls >> out」と行うと、結果をoutファイルに追加出来る。

### ※lsコマンド
　ディレクトリ内のファイルやサブディレクトリの情報を表示するコマンド。オプション「-l」を付けると、ファイルの詳細を表示出来る。

## パイプ
　**パイプ**は、コマンド間でデータを受け渡す仕組みである。複数のコマンドでデータを連続的に処理する場合に使用する。例えば、カレントディレクトリ内に多数のファイルがあるとき、ファイル情報確認のための「ls -l」を発行すると、画面がスクロールしてしまう場合がある。このような場合は、パイプ機能とmoreコマンドを使用して、「ls -l | more」と実行すれば、1画面ずつ表示することが出来る。

### ※moreコマンド
　ファイルを1画面分ずつ分割して表示するコマンド。

## デーモン
　**デーモン**(**Daemon**)は、OSの機能の一部を提供するプロセスで、**デーモンプロセス**とも呼ばれる。OSと同時または必要に応じて起動され、その後はバックグラウンドで常に動作して特定のサービスを実行する。

## ソケット
　ソケットは、アプリケーション間でTCP/IPネットワークを介して通信するための仕組み（プロセス間通信のAPI）である。狭義には、IPアドレスとポート番号を組み合わせたネットワークアドレスのことをいう。

## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
令和02年 【春期】【秋期】 応用情報技術者 合格教本 単行本（ソフトカバー） – 2019/12/25
大滝 みや子 (著), 岡嶋 裕史 (著)
p.272,273
SSH通信時の認証の仕組み

SSH通信時に使う鍵や、鍵の配置場所などが分からなくなるので整理する！

## SSH通信の3要素
１．鍵交換・セッション鍵の確立
SSH接続開始時にはまず鍵交換が行われ、共通鍵が作成される。ユーザー認証以降は、この共通鍵によって全て暗号化される。

２．ホスト認証
接続先サーバーの正当性を確認するために行われる。
:warning: ホスト認証でも公開鍵と秘密鍵のペアを使うため、公開鍵認証の鍵と混乱しないように注意！

３．ユーザー認証
接続要求をしているユーザーの正当性を確認するために行われる。
:warning:ユーザー認証の手法としてパスワード認証や公開鍵認証があり、ここでは公開鍵認証について記載する。


## ホスト認証
ホスト認証（接続先サーバーの認証）について記載する。

### ホスト認証用の鍵ペア
- OSの起動時に自動生成される、サーバー側の鍵ペアを使用する。

- 一般的な配置先は以下の通り。
    -  公開鍵→`/etc/ssh/ssh_host_*_key.pub`
    -  秘密鍵→`/etc/ssh/ssh_host_*_key`

- クライアント側の`~/.ssh/known_hosts`に、サーバー側の公開鍵を登録する。

### ホスト認証の流れ
①クライアントからサーバーにSSH接続を要求する。

②サーバーがホスト認証用の**公開ホスト鍵**をクライアントに送付する。

③クライアントが**公開ホスト鍵**を照合する。
　a) 初回接続時
　・サーバから受け取った公開ホスト鍵のフィンガープリントを確認し、正しければyesと入力する。これにより、クライアント側の`~/.ssh/known_hosts`に公開ホスト鍵が書き込まれる。なお、事前にサーバー側の公開ホスト鍵をクライアント側に登録しておく方法もある。

　b) 2回目以降
　・サーバから受け取った公開ホスト鍵と`~/.ssh/known_hosts`に格納された公開ホスト鍵をクライアントが比較する。一致しなかった場合は警告が表示されるため、偽ホストの可能性が高いことに気づくことができる。

④公開鍵暗号方式または署名の検証によってホスト認証を行う。
　SSH v2の場合
 ・サーバーがホスト認証用の**秘密ホスト鍵**を使い、ランダムなデータに対する署名を作成する。
 ・クライアントが**公開ホスト鍵**を使い、サーバー側が作成した署名を検証する。署名が正しい場合、ユーザー認証へ進む。


## ユーザー認証
ユーザー認証のうち、公開鍵認証について記載する。

### 公開鍵認証用の鍵ペア
- 原則として、ユーザーが手動で作成した鍵ペアを使用する。

- `ssh-keygen`コマンドで鍵ペアを作成した場合、鍵ペアはデフォルトでは`~/.ssh`配下に保存される。

- サーバー側の`~/.ssh/authorized_keys`に、クライアント側の公開鍵を登録する。 

### 公開鍵認証の流れ
※事前準備として、クライアント側の**公開ユーザー鍵**をサーバー側の`~/.ssh/authorized_keys`に記載しておく。

①クライアントからサーバーにSSH接続を要求する。

~~②サーバーがパスワード認証と公開鍵認証のどちらを使うのか判断する。`~/.ssh/authorized_keys`に公開ユーザー鍵の登録があれば、公開鍵認証を試みる。~~
②クライアント～サーバー間で、どの方式で認証を行うか決定する。（2025/4/8修正）

③クライアントが公開鍵認証用の**秘密ユーザー鍵**を使い、ランダムなデータに対する署名を作成する。

④サーバーが`~/.ssh/authorized_keys`に登録済みの**公開ユーザー鍵**を使い、クライアント側が作成した署名を検証する。署名が正しい場合、ユーザーのログインを許可する。


## 参考
https://qiita.com/pyon_kiti_jp/items/f89b8fa9f5b7f8abac23

https://qiita.com/angel_p_57/items/19eda15576b3dceb7608

https://qiita.com/angel_p_57/items/a8ed4e00cb04ebcccb98
【初心者向け】AWS未経験からCLF/SAA/SAPを取得した体験談！使った教材や勉強法をまるっと紹介

こんにちは！今回は、AWS未経験だった私が約半年で「CLF」「SAA」「SAP」を取得したリアルな体験談をまとめました！

これからAWSの資格に挑戦しようとしている初心者の方の参考になれば嬉しいです。

## 自己紹介＆AWS資格を目指した理由

私は普段、インフラ関連の業務を担当していますが、AWSはこれまで触ったことがありませんでした。そんな中でAWS資格に挑戦した理由は主に2つです。

#### ・リモートワークを実現したい
#### ・今後も盛り上がるクラウド業界でキャリアアップしたい

特にクラウドは移行が活発で、これからも需要が増えていく分野だと感じています。将来的にはAWSに強い会社へ転職して、より専門性を高めていきたいと考えています！

##  AWS資格取得までのスケジュール

取得した順番と時期は以下の通りです！

2024/12/6：CLF 合格

2025/2/11：SAA 合格

2025/4/26：SAP 合格

通勤時間（片道40分）を活用しながらコツコツ勉強し、土日は基本的に休むスタイルで取り組みました。無理なく続けられたのが良かったです！

## 使用した教材＆勉強法まとめ

勉強に使ったのは基本的に ####Udemyの過去問 と ####テキスト教材 です。

特にCLFのときはネットで情報収集していたものの、的外れな内容を勉強してしまっていたので、Udemyの過去問に出会ってから理解が一気に深まりました。

## 使用したテキスト（アフィリエイトリンク付き）

・[AWS認定 クラウドプラクティショナー (CLF-C02) 合格教本](https://amzn.to/3R689TG)

・[AWS認定 ソリューションアーキテクト アソシエイト (SAA-C03) 合格教本](https://amzn.to/4lghHcF)

・[AWS認定 ソリューションアーキテクト プロフェッショナル (SAP-C03) 合格教本](https://amzn.to/3R9s0kR)

## 各資格ごとの勉強法＆難易度

### 🟢 CLF（AWS Certified Cloud Practitioner）

#### 学習期間：1ヶ月ほど

最初はネットの無料情報で勉強していたけど、今思えば的外れな部分も多かったです…。

途中で「これはまずい！」と気づいて、Udemyの過去問に切り替えたら一気に理解が深まりました。

一番苦戦したのがこのCLFでしたが、これが基礎になって後々めちゃくちゃ役立ちました！

📖 テキストはこちら → [AWS認定 クラウドプラクティショナー (CLF-C02) 合格教本](https://amzn.to/3R689TG)

### 🟢 SAA（AWS Certified Solutions Architect – Associate）

#### 学習期間：CLF合格後そのまま続けて、約2ヶ月半

Udemyの模擬試験を1回解いて、どんな問題が出るのか傾向を掴む

そのあとテキストを読むと「こういうことか！」と理解が進みました

思っていたより簡単に感じたので、CLFよりスムーズに学習できました！

📖 テキストはこちら → [AWS認定 ソリューションアーキテクト アソシエイト (SAA-C03) 合格教本](https://amzn.to/4lghHcF)

### 🟢 SAP（AWS Certified Solutions Architect – Professional）

#### 学習期間：SAA合格後から約2ヶ月半

とにかく問題文も回答も長い！でも焦らず読めば大丈夫です。

サービス理解が進んでいたおかげで「読むのは大変だけど内容はそこまで難しくない」と感じました。

一番の「総まとめ」感があって、やり切ったときの達成感が最高です！

📖 テキストはこちら → [AWS認定 ソリューションアーキテクト プロフェッショナル (SAP-C03) 合格教本](https://amzn.to/3R9s0kR)

## 今後の目標

現在は引き続き「SOA（SysOps Administrator）」の勉強中です！

最終的には「AWSオールサート」（全冠）を目指していて、AWSに強い企業への転職も視野に入れています。

引き続き勉強を続けながら、実務経験も積んでいきたいと思います！

## まとめ

AWS未経験でも、しっかり勉強すれば半年でSAPまで取得できました！

ポイントは「適切な教材選び」と「スキマ時間の活用」です。

これからAWS資格に挑戦する方の参考になれば嬉しいです。応援しています！🚀

もしこの記事が参考になったら「いいね」や「ストック」してもらえると嬉しいです！質問などあればコメントもお気軽にどうぞ！
[Linux] bashの設定ファイルについて

### この記事について
Linuxの設定ファイルについて混乱したのでまとめる。

### 設定ファイルの役割
シェルを起動するたびに、環境変数/エイリアス/シェル関数を定義するのは手間がかかる。**bashの起動時に読み込まれる設定ファイルにそれらを定義することで、恒久的に設定が反映される。**

* /etcディレクトリの設定ファイル
  全ユーザに反映される
* ホームディレクトリの設定ファイル
  各ユーザごとに反映される
  
| 設定ファイル    | 役割                                                                                                                                                       |     | 
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | 
| /etc/profile    | 全ユーザを対象に、環境変数/エイリアス等を定義する                                                                                                          |     | 
| ~/.bash_profile | 各ログインユーザを対象に、環境変数を定義したり、ログイン時に実行したいコマンドを設定する。<mark>さらに、~/.bashrcを呼び出す役割もある。</mark>                          |     | 
| ~/.bash_login   | 各ログインユーザを対象に、環境変数を定義したり、ログイン時に実行したいコマンドを設定する。<mark>\~/.bash_profile及び~/.profileが存在しない場合のみ実行される。</mark>    |     | 
| ~/.profile      | 各ログインユーザを対象に、環境変数を定義したり、ログイン時に実行したいコマンドを設定する。<mark>\~/.bash_profile及び~/.bash_loginが存在しない場合のみ実行される。</mark> |     | 
| ~/.bashrc       | 各ログインユーザを対象に、<mark>環境変数以外の変数の定義/エイリアス・シェル関数定義等を行う。</mark>                                                                    |     | 
| ~/.bash_logout  | シェルが終了し、ユーザがログアウトする際に実行したいコマンドを定義する。                                                                                   |     | 

### 設定ファイルの実行フロー
```mermaid
stateDiagram-v2

[*] --> /etc/profile: シェルログイン
/etc/profile --> ~/.bash_profile: 存在しない場合
~/.bash_profile --> ~/.bash_login: 存在しない場合
~/.bash_profile --> ~/.bashrc: 呼び出す
~/.bash_login --> ~/.profile  : 存在しない場合
```
AWS SAP合格しました

# はじめに
今回は初めてprofessionalに挑戦し合格しました！
過去3年間で、Cloud Practitioner, SysOps,DVA,SAA,MLS,SCSを取得しました。
SAPの勉強と試験本番は過去1難しかったのでその記録を残したいと思います。

# SAPとは
AWS Certified Solutions Architect - Professionalとは
>認定を受けた個人が、複雑な問題に対する複雑なソリューションの提供、セキュリティ、コスト、パフォーマンスの最適化、および手動プロセスの自動化における高度な知識とスキルを証明するために役立ちます。この認定は、組織がクラウドイニシアティブを実施するための重要なスキルを備えた人材を特定して育成するための手段です。
セキュリティに関しての専門知識が問われます。

受験料は300 USDです。
時間は180 分で、75問出題されます。
テストセンターや、自宅で受験することができます。
私はテストセンターで受験しました。

# 勉強方法
今回もとにかく問題を解きました。
ただ、今ままでより問題文が長く、問題を読むだけでも結構辛かったです（笑）
全部で600問くらい解き、その中の間違った問題をもう1週しました。
今回も[Cloud Licence](https://techstock.jp/)にお世話になりました。

# 問題傾向
オンプレからクラウドへのマイグレーション方法や、Organizationsを使ったアカウントの管理方法、コスト最適化など多岐にわたる分野が出題されました。
その中でも私はマイグレーションの管理ツールなどはあまり業務で触る領域ではなく馴染みがなかったので、その辺は重点的に覚えるようにしました。
その他馴染みのないサービスは概要も含めて覚えるようにしました。

## 当日
試験は75問で今まで受けてきた資格の中で問題数が1番多く、結構辛かったです（笑）
問題文も多かったでの読むだけで疲れるだろうと予想して、前日はしっかり早く寝て朝は栄養ドリンクを飲んでしっかり目を覚まして挑みました（笑）
時間はじっくり解いて40分残りました。
残り時間は見直しに使い、退出したのでやはり今までで1番時間がかかりました。
ホワイトボードにしっかり問題を整理することで少しは解きやすくなったかなと思います。

# 最後に
初めて今回professionalを受けましたが、やはり今までとはレベルが違うなと思いました。
受かるかかなり不安でしたが、なんとか受かってほっとしました。
とにかく問題数も文字数も多いので業務後ではなく、休みの日の朝一に受けたことは正解だったなと思います。
土曜日早く寝て、日曜日の朝一に受けたことも正解だったなと思います（笑）
是非皆さんの合格体験もあれば教えてください！
【Windows】忘備録：アクセス権をコマンドで付与する【icacls】

ファイルサーバなどの構築などで大量のフォルダなどを作成することがあり、
昔少し触ってそのままで錆付いてしまったので改めて調べた情報を忘備録としてまとめました。

# icaclsってなに
ファイル、またはディレクトリのアクセス制御の表示や適用、変更、バックアップ、リストアが行えるコマンド。
caclsコマンドの後継コマンド（らしい）

# ACLの付与と変更

### 構文
```dosbatch:

icacls [File or Directry Path] /grant [Username or Groupname or SID]:<perm>
icacls [File or Directry Path] /grant:r [Username or Groupname or SID]:<perm>

```

::: note info
/grantと/grant:rの違い
どちらもアクセス権の付与であるが、/grantのばあいは既存のアクセス権に追記される

* /grant だとR（読込みのみ）追加後にW（書込みのみ）を行うとM（変更）と同等になる
逆に言うとMの状態からRに変更は不可？（未確認）

* /grant:rだと、以前のアクセス許可が置き換えられる
→読込みのみから変更、変更から読込みのみの両方ができる？（未確認）

:::

例).
```dosbatch:Sample

icacls C:\SampleDirectory /grant User1:(OI)(CI)(M) ※User1に変更権限を付与し、オブジェクトとコンテナーを継承する
icacls C:\SampleDirectory /grant Group1:(OI)(CI)(M)　※Group1に変更権限を付与し、オブジェクトとコンテナーを継承する

```
:::note info
ドメインユーザなどの追記について

DomainUsersなどを追加する場合は、付与したいユーザやグループのところに[Domain/Group or User]を追記することで可能。
また日本語や空白が含まれたユーザやグループは"Domain/Group or User"で括ることで認識可能。
:::


### アクセス権のオプション

* 基本のアクセス許可

| オプション | 内容 |
|:-: |:-:|
| F  |  フルコントロール  |
| RX | 読取りと実行 |
| R  | 読取り  |
| W  | 書き込み  |

下記画像の赤枠の設定に相当。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/425858/819d9fb9-3210-4c05-b7da-4abdb1b1fe6c.png">


* 特定の権限
下記画像の赤枠の設定に相当。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/425858/6c917626-d040-453d-a54d-6d39188fc9f7.png">

* 継承権限

| オプション | 内容                                                  |
|:--------: |:------------------------------------------------------|
| (I)       | 継承。 アクセス制御エントリは親コンテナーから継承される。  |
| (OI)      | オブジェクト継承。 このコンテナー内のオブジェクトは、このアクセス制御エントリを継承します。 ディレクトリにのみ適用されます。 |
| (CI)      | コンテナー継承。 この親コンテナー内のコンテナーは、このアクセス制御エントリを継承します。 ディレクトリにのみ適用される。 |
| (IO)      | 継承のみ。アクセス制御エントリは親コンテナーから継承されますが、オブジェクト自体には適用されず、ディレクトリにのみ適用される。|
| (NP)      | 継承を伝達しません。 アクセス制御エントリは親コンテナーからコンテナーとオブジェクトによって継承されますが、入れ子になったコンテナーには反映されない。 ディレクトリにのみ適用される。 |

下記画像の赤枠の設定に相当。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/425858/bccbbaec-e565-4b1b-a84d-3b6a214a2445.png">

# icaclsのバックアップとリストア

アクセス権はバックアップとリストアをすることが出来るみたいです。

## icaclsのバックアップ
### 構文
```dosbatch:

icacls [File or Directry Path] /save [save path/ACLFile name.bin]

```

## icaclsのリストア
### 構文
```dosbatch:

icacls [File or Directry Path] /restore [save path/ACLFile name.bin]

```


# 参考資料
* [Leam Microsoft -icacls-](https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/icacls)
* [Icacls - DOS/コマンドプロンプト コマンド一覧](https://www.pg-fl.jp/doscmd/icacls.htm)
[窓のくすり箱 -アクセス制御リスト（ACL）の確認と保存、リストアの方法-](http://winkit.blog.fc2.com/blog-entry-60.html)
※HTTPなのでアクセスには注意が必要
[Zenn -Windowsのフォルダアクセス権限をコンソールで変更したい。-](https://zenn.dev/sakaki_web/articles/788cb9a0a40d15)

* [「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 -icacls【コマンド】-](https://wa3.i-3-i.info/word11206.html)
MCreator/ツールの作り方

## この記事で分かること
・MCreatorのダウンロード
・MCreatorでツールを作る方法
## MCreatorでできること
MCreatorでできることはminecraftにオリジナルの武器を追加したり敵を追加したりすることができます。
## MCreatorをダウンロード
MCreatorをダウンロードします。
↓↓
https://mcreator.net/download
![スクリーンショット 2025-04-07 144150.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/91294c77-e161-4719-bc28-253a057dbea5.png)
## ワークスペースを作る
MCreatorがダウンロードできたら、ワークスペースを作成します。![スクリーンショット 2025-04-07 144935.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/06c502e4-77f2-48a9-8843-7641ec6b1445.png)
ワークスペースを作成したら新しくGoogleのタブが開きますが、消してしまっていいです。
10分程度待ちます。
## アイテムの作成
リソースを選択→新規テクスチャ→テクスチャを作成、でテクスチャを作成します。
![スクリーンショット 2025-04-07 145812.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/530648e0-53c1-44eb-888a-882df77c255a.png)
保存します。
![スクリーンショット 2025-04-07 145824.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/f6f9e02f-c644-4629-b0b2-5f378b60cbb7.png)
ワークスペースの＋のボタンを押してツールを選びます。
![スクリーンショット 2025-04-07 145843.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/1916e07d-28ee-4196-832d-60b7e54980a3.png)
テクスチャを選択し、プロパティで名前や攻撃力を設定し右上の保存ボタンで保存します。
![スクリーンショット 2025-04-07 150025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/57e98e3f-2d5c-42fc-946c-416084c1c91f.png)
## 試してみる
右上の再生ボタンを押して、マイクラのワールドを立ち上げます。
ワールドを作成し、作ったツールがあるか確かめます。![スクリーンショット 2025-04-07 150448.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054637/32e28298-886e-410a-8bc9-5e420e840d22.png)
## 終わりに
これでMCreatorでminecraftのツールを作るようになります。
次は飛び道具の作り方を説明しようと思います。
#次の記事：https://qiita.com/yt365/items/614e4e987d3074bcb612
【MATLABで点群処理】Farthest Point Samplingの実装

# この記事では
点群のダウンサンプリングの1手法であるFarthest Point Samplingについて、MATLABコードを記します。

# 環境
MATLAB R2025a Pre-release
※特に新しい関数を使っているわけではないので、もっと古くても動くと思います。

# Farthest Point Sampling
点群のダウンサンプリング法には様々なものが提案されていますが、決めた点数ぴったりに間引きつつ、物体形状はできるだけ損なわないという利点を持つのがFPSです。

手順は次の通りです。

1. まず適当にサンプリング点を1点決める
2. サンプリング点から全点までの距離を計算する。
3. 距離が最大となる点を次のサンプリング点とする。
4. 直前のサンプリング点から全点までの距離を計算する。
5. 全点について、2で計算した距離と4で計算した距離のうち、小さい方を最小距離とする。
6. 5で選択した最小距離が最大となる点を次のサンプリング点とする。
7. 4-6を、規定の点数となるまで繰り返す。

要はそれまでに選択した点の全てから遠い点を順次選んでいく、という力技です。計算効率は良くないですが、均一な点が得られます。

# MATLAB実装
MATLABにはpcdownsampleという点群を間引くための関数はありますが、ランダムサンプリングや、ボクセルグリッドサンプリングは用意されているものの、FPSはないため、実装してみました。

```matlab
function [pt_down,idx] = pcdonwsample_fps(pt, k)
% 入力:
%   P (Nx3 double): 入力点群データ (N: 点数, 3: x,y,zの3次元点群を想定)
%   k (int)       : サンプリングする点数
%
% 出力:
%   pt_down: 間引いた後の点群オブジェクト
%   idx: 間引きに使った入力点群オブジェクトの点のインデックス

% 有効な点だけで処理する
[pt_valid,validIdx] = removeInvalidPoints(pt);

N = pt_valid.Count;
P = pt_valid.Location;
% --- 初期化 ---
first_idx = 1;
sampled_indices = repmat(first_idx,[k 1]); % サンプリングされた点のインデックスを格納

% 各点から、選択済み点群への最短距離を保持する配列 (最初は無限大)
min_distances = inf(N, 1);

% --- メインループ (k-1回繰り返す) ---
for i = 2:k
    % --- 一個前のサンプリング点を選択 ---
    last_selected_point = P(sampled_indices(i-1), :);

    % 前回選択された点(last_selected_point)と *全ての点* との距離を計算
    diff_vectors = P - last_selected_point; % 差分
    dists_to_last = vecnorm(diff_vectors, 2, 2); % 各行のL2ノルム(距離)を計算 (Nx1のベクトル)

    % 各点について、これまでの最短距離と、前回選択点への距離の小さい方を採用
    min_distances = min(min_distances, dists_to_last);

    % 最も遠い点を選択
    [~, current_farthest_idx] = max(min_distances);

    % --- 結果を格納、次回の準備 ---
    sampled_indices(i) = current_farthest_idx;    
end

pt_down = pt_valid.select(sampled_indices);
idx = validIdx(sampled_indices);
end

```

使ってみます。

```matlab
% データ読込み
pt = pcread('teapot.ply')
k = 5000;

% FPS実行
pt_down = pcdonwsample_fps(pt, k)

figure;
pcshow(pt);
title('オリジナル');

figure;
pcshow(pt_down);
title('FPSによる間引き後')
```
実行結果
```matlab
pt = 

  pointCloud のプロパティ:

     Location: [41472×3 single]
        Count: 41472
      XLimits: [-3 3.4340]
      YLimits: [-2 2]
      ZLimits: [0 3.1500]
        Color: []
       Normal: []
    Intensity: []

pt_down = 

  pointCloud のプロパティ:

     Location: [5000×3 single]
        Count: 5000
      XLimits: [-2.9984 3.4281]
      YLimits: [-1.9994 1.9994]
      ZLimits: [0 3.1493]
        Color: []
       Normal: []
    Intensity: []
```

きちんと狙った点数ぴったりになっていることがわかります。

オリジナル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202697/9f2c7f7d-e7d3-4e0a-830a-03fbf02fad02.png)

FPSの結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202697/ed38b88f-b351-44b4-9582-1a86bd45417e.png)

均一に間引かれつつもボクセルグリッドみたいな規則性は見られず、でも元の形をきちんと保持している様子がわかります。しっかり検証したわけではないですが、たぶん動いてると思います。たぶん…。

# まとめ
この記事ではFPSをMATLABで実装してみました。基本的な点群処理の機能ですが、PointNet++や異常検知で使われるPatchCoreなど使いどころは多いです。いろんな手法を使いこなしていきましょう！
【悲報】`JavaScript`のスペルが難しすぎる（根拠あり）

# 【悲報】`JavaScript`のスペルが難しすぎる（根拠あり）

これが根拠だ⸺

:::note

追記：様々な誤字タグを下記の記事に収集し、[名寄せリクエスト](https://github.com/increments/qiita-discussions/discussions/237#discussioncomment-12762985)を行いました。

Qiitaにある主要タグの誤字または表記揺れ
https://qiita.com/nkay/items/6b8cbb3b5faac28f6ffd

:::

## 一文字目（J）をミスしたタグ

`avaScript` https://qiita.com/tags/avascript 記事数: 2

## 二文字目（a）をミスしたタグ

`jsavascript` https://qiita.com/tags/jsavascript 記事数: 4

## 三文字目（v）をミスしたタグ

`JacvaScript` https://qiita.com/tags/jacvascript 記事数: 5
`jasvascript` https://qiita.com/tags/jasvascript 記事数: 1

※ `jacascript`は自動的に`JavaScript`に修正されます。

## 四文字目（a）をミスしたタグ

`javscript` https://qiita.com/tags/javscript 記事数: 9
`JaveScript` https://qiita.com/tags/javescript 記事数: 5 
`JavsScript` https://qiita.com/tags/javsscript 記事数: 2

## 五文字目（S）をミスしたタグ

`javacript` https://qiita.com/tags/javacript 記事数: 4

## 六文字目（c）をミスしたタグ

`javasript` https://qiita.com/tags/javasript 記事数: 3
`JavasScript` https://qiita.com/tags/javasscript 記事数: 1

## 七文字目（r）をミスしたタグ

`JavaScirpt` https://qiita.com/tags/javascirpt 記事数: 60
`JavaScipt` https://qiita.com/tags/javascipt 記事数: 6
`javasctipt` https://qiita.com/tags/javasctipt 記事数: 4
`javasc` https://qiita.com/tags/javasc 記事数: 3
`javascsript` https://qiita.com/tags/javascsript 記事数: 2 
`Javasciprt` https://qiita.com/tags/javasciprt 記事数: 1

## 八文字目（i）をミスしたタグ

`JavaScrpt` https://qiita.com/tags/javascrpt 記事数: 5
`JavaScrpit` https://qiita.com/tags/javascrpit 記事数: 1

## 九文字目（p）をミスしたタグ

`javascri` https://qiita.com/tags/javascri 記事数: 1
`Javascrit` https://qiita.com/tags/javascrit 記事数: 1

## 十文字目（t）をミスしたタグ

`javascrip` https://qiita.com/tags/javascrip 記事数: 5

## 最後に余計な文字をつけたタグ

`JavaScriptt` https://qiita.com/tags/javascriptt 記事数: 1
`javascripts` https://qiita.com/tags/javascripts 記事数: 1
`javascriptn` https://qiita.com/tags/javascriptn 記事数: 1

`JavaScriptpt` https://qiita.com/tags/javascriptpt 記事数: 13
`JavaScriptit` https://qiita.com/tags/javascriptit 記事数: 1

## これじゃあタイポスクリプトだよ

`ypeScript` https://qiita.com/tags/ypescript 記事数: 1
`Tyepescript` https://qiita.com/tags/tyepescript 記事数: 19
`TypeSctrpt` https://qiita.com/tags/typesctrpt 記事数: 1
`TypeScirpt` https://qiita.com/tags/typescirpt 記事数: 10
`typescrit` https://qiita.com/tags/typescrit 記事数: 1
`TypeScrip` https://qiita.com/tags/typescrip 記事数: 1
`typescript.` [https://qiita.com/tags/typescript.](https://qiita.com/tags/typescript.) 記事数: 1
`typescripteScript` https://qiita.com/tags/typescriptescript 記事数: 1
文章作成がスムーズに！文字の使い分けテクニックとプログラミングの命名規則

# ✨ はじめに
文章作成をスムーズに進めたいとき、「どんな文字をどう使い分けるか？」をあらかじめ決めておくと、驚くほど作業効率が上がります。
たとえば、やることリストを整理したり、作業手順をメモしたり、プログラム中のコメントにルールを持たせたり――。
ちょっとした使い分けが、情報の見通しやすさにも直結します。

この記事では、実際に私が使っている文字の使い分け例を紹介します。
プロジェクトの進捗管理やメモ整理にも活用できますし、好みに合わせて自由にカスタマイズしてみてください。

:::note warn
こちらで紹介する使い分けは、あくまで筆者の一例であり、主観が含まれています。
用途やお好みに応じて、必要に応じて調整しながらご活用ください。
:::

---

# 🔶 感覚的な文字の使い分け

## 🪶 言い回し
- なるべく簡単で文字数の少ない言い回しをつかう
- 同じ言い回しが連続してもよい

## ✍️ 漢字
- 前後におなじ漢字がくる場合は片方をひらく
- 漢字をつなぐひらがなを省略しない
- 漢数字をつかう
- 図形や見出しに漢数字を使う

## 🔗 熟語
- 出来るだけ簡単なものをつかう
- 熟語の一部の漢字を省略する
- 同じ熟語が連続してもよい

## 🌐 カタカナや英字
- 漢字や英字をカタカナ変換でひらく
- なるべくカタカナや英字の使用を避ける
- 使うならカタカナや英字の略語をつかう
- 媒体によって使用頻度を調整する

## 🗂️ 整理
- 無駄に文字を使わず可能なら絵文字アイコンのみで情報整理する
- 同様記述をまとめ簡素化する

---

# 🔶 感覚的な文面の使い分け

## 📌 代表例
- 文章がいくつかまとまって存在するときの分類分け
- 読み物かそうでないかを感情の入り組み具合で測るときの程度の差
- 読み物で規則性を持たない文章の項目を空白列改行を避ける

## 🗣️ 言い回し
- 以下を「〜場合」に統一
  - 〜のときがある
  - 〜するときがある
-［思う，感じる，考える］は意志薄弱なため使用を控える

## 🔚 文末の規則
- 時系列については一文の末尾を過去形とする
- 内容が過去進行形の場合は過去形に縛られない
- 基本的には［である調］をつかう
  - 追加または修正分は整形済みの［である調］または［ですます調］を許可する
  - 引用文扱いの場合は整形済みの［ですます調］を使用する

## ⏳ 時制の規則
- 過去形と現在形を同じ段落内に混在させない

---

# 🔶 全角，半角，大文字，小文字

## 🌓 全角と半角
- 全角
  - 文字
- 半角
  - 数字
  - ファイル名
  - プログラミングコード

## 🔲 大文字と小文字
- 大文字
  - 日本語
  - 英語固有名詞
- 小文字
  - Github
    - リポジトリ名
    - ファイル名
  - URLスラッグ

---

# 🔶 記号の使い分け

## ✳️ 記号の規則
- ［【］：この項で書きたい内容を示す
- ［◆］：項目を示す
- ［・］：箇条書きを示す
  - ［・・］：連続記入で箇条書きのさらなる細分化を示す
- ［：］：左側項目の説明を示す
- ［①］：数字記号で時系列や選択肢を示す
- ［↑］：追記情報を示す
- ［※］：注意書きを示す
- ［「］：会話や心の言葉やメール内容を示し直前に発言者を明示可能とする
  - 単文の強調にも使う
- ［［］：単語の強調や複数単語の始端や終端を示し直前に単語の分類を明示可能とする
- ［，］：複数単語の区切りを示す
- ［～］：期間の接続を示す
- ［_］：単語の小区分への接続を示しプログラミングではスクリプト名や変数名の一部分になる
- ［-］：Web系のファイル名やブログ記事のスラッグ
- ［（］：直前直後の単語の補足情報や詳細な説明を示す
- ［…］：直後数字の時間経過や文末の余韻を示す

※記号の優先順位は［◆］＞［①］＞［・］＞［↑］他
※記号の使用は最小限にとどめる
※他者と共同作業の場合には他者の記号の使い方に合わせる
※図形の記号が指定されている場合には指定に従う

## ↩️ 改行の規則
- ［【］題目の終了後
- ［【］段落の終了後
  ※文章量が少ない場合は改行せず横並びにする
- ［◆］段落の終了後
  ※各項目直下に箇条書きや時系列の説明を改行なしで追加できる
- ［◆］を使用しない文章の場合には［・］題目の終了後に改行してもよい
- 読み物において会話文や思考文の前後
- 読み物において箇条書きや選択肢の前後

## 🔵 句読点
- 一文を区切ると読みやすくなるので、その目安として活用する。
- 草案の自作分は基本的には句読点なしで改行によって一文の終了を示す
- 縦書きの文章については句点使用を許可する
- 会話文については読点使用を許可する

# 🔶 編集，校正，情報

## 🧑‍💻 使用するツールの使い分け
- ［方法論，時系列，注意メモ］についてはメモ帳に保存する
- ［読み物，意見］については縦エディターを使って縦書きとした後に画像キャプチャして画像として保存する
- ［個別の情報］についてはエクセルブックに保存する
※なるべく注意メモは使わなくて済むようにする

## 🖋 フォント設定
- ［システム，ファイル，データ，ブラウザ，作成物］に関して見やすい物で統一する
※おすすめRicty Diminished

## ⌨️ ショートカット設定
- p → ◆
- l → ・
- , → ＊
- 8 → ［
- 9 → ］
- 7 → ：

※端末の辞書登録機能で設定しておくのがおすすめ

## ↕️ 書字方向
- [方法論，時系列]については横書きとして箇条書きに対応させる
- [読み物，意見]については縦書きとして目の疲労度を軽減する
  ※基本的に横書きだが娯楽用の文章作成に縦書きを使用する

## 🔍 校正の規則
<details><summary>AIにおかませで大丈夫</summary>

- 作成後はいちど全文に目を通し誤字脱字を見つけて修正する
- 校正の履歴を作り各文章の種類によって何日何回の校正が必要か把握する
  - 精度が増して来れば回数を減らすことが可能
- 作成して日が経った物について誤字脱字に気付いたときは該当箇所を修正する
</details>

## 🔒 個人情報保護の規則
- 文章の中での関連の薄い組織名や個人名の使用を控える
Databricksにおける多要素認証(MFA)のサポート

こちらのアップデートです。

https://docs.databricks.com/aws/ja/release-notes/product/2025/april#databricks-multi-factor-authentication-mfa-is-now-available-public-preview

> **Databricks多要素認証(MFA)が利用可能に(パブリックプレビュー)**
> アカウント管理者はDatabricksで直接多要素認証(MFA)を有効化でき、ユーザーがログインする際にMFAを推奨、必須とすることができます。
> 
> この機能はシングルサインオン(SSO)を使用していないアカウントでのみ利用可能です。アカウントでSSOを使っている場合には、組織のアイデンティティプロバイダーを通じてMFAを設定してください。
> 
> Databricks MFAに関しては、[多要素認証を構成する](https://docs.databricks.com/aws/ja/security/auth/mfa)をご覧ください。

設定してみます。

まず、アカウントコンソールの**プレビュー**から**Multi-factor Authentication**を有効化します。

![Screenshot 2025-04-07 at 14.24.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e18fe5db-7efb-4d6f-9b37-4c89c1f8f77e.png)

すると、**設定 > 認証**に**Databricks経由の多要素認証**が表示されます。ここで、MFAを推奨にするのか必須にするのかを設定することができます。推奨の場合はユーザーはMFAの有効化をする、しないを選択できますが、必須の場合はMFAの有効化が必須となります。

この時点では、ユーザーのMFAは構成されていないので、以下のように表示されます。

![Screenshot 2025-04-07 at 14.26.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/bcf908cb-9929-4ed2-b2f0-8396ffeb8f5a.png)

Databricksにログインしようとすると、多要素認証の設定を促されます。**Configure sign in**で設定します。

![Screenshot 2025-04-07 at 14.32.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4045c8c6-3124-4ac7-9e58-7b8b9f63cebd.png)

Passkeyあるいは認証アプリを選択できます。今回はPasskeyで設定します。

![Screenshot 2025-04-07 at 14.33.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8fbdeac9-ded0-46bf-af30-0cce2ed4c375.png)

指示に従って設定します。

![Screenshot 2025-04-07 at 14.33.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a980fd7b-6b54-429a-9133-e8dbff6f6e26.png)

これで、以降はワンタイムパスワード + Passkeyでのログインが可能となります。

![Screenshot 2025-04-07 at 14.49.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/eea911c6-56c0-411a-bc30-2d1a955705d1.png)

![Screenshot 2025-04-07 at 15.00.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2d01fff2-5ecb-47d0-9efa-f36e1e2d8c51.png)


### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
CursorのテーマをVSCodeと同じテーマにする

# 環境
- OS：Windows

# 手順
## 1. 左上のFile > Proferences > Theme > Color Theme をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689023/39f92b6f-3154-4f88-ab0b-938142f156ea.png)

## 2.  Dark (Visual Studio)を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689023/86784165-5b97-4a9b-9d70-781cdcdfd40e.png)

## 3. VSCodeのテーマに変更完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689023/47fdf2aa-7fd2-434c-b0b5-8a6e0c5c70a8.png)
ハッカソン個人備忘録⑩：create-next-appを実行する前に！Node.jsバージョンのチェックを忘れずに

## はじめに
Next.js プロジェクトを作成しようとして `npx create-next-app@latest next-app` を実行したところ、`Unexpected token '??='` というエラーが表示され、先に進めないというトラブルが発生しました。

この記事では、このエラーの原因とその解決方法を分かりやすく解説します。Node.js のバージョン管理ツール `nvm` を使う方法も紹介します。

## 書こうと思ったきっかけ
フロントエンド開発を始めようと Next.js の初期プロジェクトを作成する際、思いがけず構文エラーが発生しました。

:::note warn
**調べてみると、Node.js のバージョンが古かったことが原因でした。**
:::

同じような状況でつまずく方も多いと思い、解決までの流れをまとめておきたいと思いました。

## 発生したエラーと原因
```bash
npx create-next-app@latest next-app
npx: 1個のパッケージを0.658秒でインストールしました。
Unexpected token '??='
```

### 原因
このエラーは、Node.js のバージョンが古いために `??=`（Nullish Coalescing Assignment）という構文が使えないことが原因です。

この構文は Node.js v16.9.0 以降でサポートされています。Node.js v14 や v12 を使っている場合、このエラーが発生します。

## 解決策：Node.js のバージョンをアップデートする

### 今のバージョンを確認する
```bash
node -v
```

### 方法1：公式サイトからアップデート
Node.js の公式サイトから最新版（LTS推奨）をダウンロードしてインストールできます。
- https://nodejs.org/ja

### 方法2（おすすめ）：nvm を使う
Node.js のバージョンを簡単に切り替えられる「nvm（Node Version Manager）」を使う方法がおすすめです。

#### ステップ1：nvm をインストール
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
```

その後、以下を実行するか、ターミナルを再起動：
```bash
export NVM_DIR="$HOME/.nvm"
source "$NVM_DIR/nvm.sh"
```

#### ステップ2：Node.js v22.7.0 をインストール
```bash
nvm install 22.7.0
```

#### ステップ3：使用するバージョンを指定
```bash
nvm use 22.7.0
```

#### ステップ4：デフォルトに設定
```bash
nvm alias default 22.7.0
```

#### バージョン確認
```bash
node -v
# → v22.7.0 と表示されればOK
```

## 再実行してみる
Node.js のバージョンをアップデートしたあと、再度以下のコマンドを実行してみましょう：
```bash
npx create-next-app@latest next-app
```

問題なく Next.js のプロジェクトが作成できるはずです。

## おわりに
Node.js のバージョンが原因で起こるトラブルは意外と多く、特に新しい構文を使うライブラリでは注意が必要です。***nvm を導入しておくと、今後の開発でも柔軟に対応できるようになるので非常に便利です！***
アリババクラウド クラウドフォン: 大規模な仮想モバイルインフラストラクチャ

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/alibaba-cloud-cloud-phone-virtual-mobile-infrastructure-at-scale_602112?spm=a2c65.11461433.0.0.4ee35355X0dvnz)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# Alibaba Cloud Cloud Phone: 大規模な仮想モバイルインフラストラクチャ
著者: M Muzaffer Azam

## はじめに
モバイルアプリケーションがさまざまな業界でデジタルトランスフォーメーションを推進する中、企業はAndroidアプリのテスト、展開、管理を行うためのコスト効率が高く、スケーラブルで安全なソリューションを必要としています。Alibaba Cloud Cloud Phoneは、クラウド上で完全にホスティングされたAndroidスマートフォンのすべての機能を提供する仮想モバイルデバイスプラットフォームです。この記事では、Cloud Phoneサービス、そのアーキテクチャ、主要コンポーネント、および業界全体での実世界の応用について紹介します。⸻

## Alibaba Cloud Cloud Phoneとは？
Alibaba Cloud Cloud Phoneは、クラウドネイティブなモバイル仮想化ソリューションであり、Alibaba Cloudインフラストラクチャ上でホスティングされる仮想デバイス上でAndroidオペレーティングシステムを実行できるようにします。これらの仮想Androidフォンはリモートでアクセス可能であり、物理的なスマートフォンと同様に動作します。これは、開発者、テスター、ゲーム会社、そしてモバイル運用を拡大したい企業にとって理想的です。このサービスは物理的なモバイルデバイスの必要性を排除し、柔軟性、セキュリティ、高可用性を確保します。⸻

## 主要コンポーネント:
Alibaba Cloud Cloud Phoneは次の主要コンポーネントで構成されています：
- **Cloud Phoneインスタンス**
  アプリを実行し、ビデオをストリーミングし、独立して操作可能な仮想Androidデバイス。
- **Cloud Phoneサーバー**
  ARMアーキテクチャを採用したバックエンドコンピュータサーバーで、Android環境をホスティングします。
- **管理コンソール＆クライアントアクセス**
  デバイスのリモートアクセスと制御のためのWebおよびデスクトップベースのクライアントインターフェース。
- **APIおよびSDK**
  オートメーションパイプライン、テストフレームワーク、またはエンタープライズソフトウェアとの統合を可能にします。
- **ストレージおよびネットワーキング**
  Alibaba Cloudの高性能ストレージおよびセキュアなネットワーキングサービスと統合されています。⸻

## アーキテクチャ概要
### アーキテクチャレイヤー
1. **インフラストラクチャ層**
   Alibaba Cloudデータセンター内にホスティングされているARMベースの物理サーバーで、弾力性と計算能力を提供します。
2. **仮想化層**
   複数の仮想Androidインスタンスをホストごとに分離および管理する最適化されたハイパーバイザー。
3. **Android OS層**
   アプリケーションサンドボックス化およびUIレンダリングを備えたクラウド最適化されたAndroidオペレーティングシステム。
4. **制御＆アクセス層**
   デバイスアクション、アプリインストール、監視の完全な制御を可能にするREST API、SDK、およびコンソールツール。⸻

## 一般的なユースケース
### モバイルアプリ開発＆テスト
Cloud Phoneは、物理デバイスを必要とせずに複数のAndroid環境をシミュレートでき、コストを削減し、開発期間を短縮します。

### ゲームストリーミング＆テスト
ゲーム会社は、仮想デバイス上でAndroidゲームをホスティングし、ユーザーにゲームプレイをストリーミングすることで、ハードウェアの制限なしに即時の配信を可能にします。

### ソーシャルメディア＆マーケティングオートメーション
チームは、TikTok、Instagram、WeChatなどのプラットフォームで複数のアカウントを管理し、投稿をスケジュールし、自動的に相互作用を行えるよう、個別の仮想デバイスを使用できます。

### セキュアなカスタマーサービス運用
Cloud Phoneは、コールセンターがセキュアで隔離されたデバイスを通じてメッセージングアプリで顧客と対話することを可能にし、集中管理を実現します。

### エンタープライズBYODの代替案
従業員が個人デバイスにビジネスアプリをインストールすることを許可する代わりに、企業はセキュアなアクセスを持つ仮想フォンを割り当て、ビジネスデータと個人データを分離できます。⸻

## 利点:

- **スケーラビリティ**  
  数百台のデバイスをチームやワークロードに瞬時にプロビジョニングできます。
- **セキュリティ**  
  データはクラウド内に留まり、盗難や漏洩のリスクを軽減します。
- **コスト効率**  
  ハードウェアの調達および保守コストを排除します。
- **柔軟性**  
  Web、デスクトップ、またはAPIアクセスでどこからでも操作可能です。
- **統合**  
  Alibaba Cloud ECS、OSS、VPCサービスとシームレスに接続します。⸻

## 結論
Alibaba Cloud Cloud Phoneは、組織がモバイル運用を現代化できる革新的なサービスです。大規模な自動テストを実行する開発者であろうと、モバイルプラットフォームでの顧客エンゲージメントを拡大したい企業であろうと、Cloud Phoneはパフォーマンス、スケーラビリティ、セキュリティを一つの仮想ソリューションで提供します。Alibaba Cloud Cloud Phoneを活用し、今日からモバイルワークフローを革新しましょう。
raylib-rs を Windows で動かしたので、まさかそんな人がいた時のためのメモ

# TL;DL.

- rust, raylib-rs の他に依存バイナリ・ライブラリのインストールが必要
- mingw-64, cmake, clang のインストールが必要。
  - clang は特に、ライブラリを利用するため `LIBCLANG_PATH` が通ることを確認する

# この記事の前提

- rust のビルドができること (cargo build)
- raylib に関心を持ったこと
- raylib-rs を使ってみようという関心を持ったこと

rust : 1.85.0
raylib-rs : 5.0
2025年1月時点での情報です。

# 手順

1) w64devkit を使って、MinGW-64 を入れる
2) CMake をインストールする
3) Clang をインストールする
4) raylib-rs を dependencies に追加し、Cargo build

私は raylib-rs をとりあえずビルドした結果、これらを入れないと動かないということが判明したのでここに記す。

この後で特に注意すべきは、いずれもPATH を通してコマンドラインで実行できるようにしないとだめ、ということだろう。方法についてはここでは述べない。各自頑張ってほしい。


## w64devkit を使って、MinGW-64 を入れる
参照：[raylib | Working on Windows](https://github.com/raysan5/raylib/wiki/Working-on-Windows)

w64devkit をインストールし、PATHを通す。上記ページをよくよくよめば、VisualStudioでも同様にコンパイルできることがわかるのだが、環境を持っていないため私は w64devkit を用いた。

PATHを通すのを忘れないように。


## cmake をインストールする

上記のみで動くかと思いきや、まだエラーは続いた。

```powershell
  --- stderr
  thread 'main' panicked at C:\Users\saino\.cargo\registry\src\index.crates.io-6f17d22bba15001f\cmake-0.1.52\src/lib.rs:1115:5:

  failed to execute command: program not found
  is `cmake` not installed?

  build script failed, must exit now
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
ので、黙ってCMakeを入れる。

こちら → [CMake](https://cmake.org/download/)


同じくPATHを通し忘れないように。


## clang をインストールする

まだ出たエラー。

```powershell
Unable to find libclang: "couldn't find any valid shared libraries matching: ['clang.dll', 'libclang.dll'], set the `LIBCLANG_PATH` environment variable to a path where one of these files can be found (invalid: [])"
```

[Clang](https://clang.llvm.org/) をダウンロードし、入れる。

`LIBCLANG_PATH` を設定する必要がある。



# 実行を確認したRust側のコード
ここまでの準備が整えば、次のコードが動くはずである。

```cargo.toml
[dependencies]
raylib = { version = "5.0" }
```

```rust
use raylib::prelude::*;

fn main() {
    let (mut rl, thread) = raylib::init()
        .size(640, 480)
        .title("Hello, World")
        .build();

    while !rl.window_should_close() {
        let mut d = rl.begin_drawing(&thread);

        d.clear_background(Color::WHITE);
        d.draw_text("Hello, world!", 12, 12, 20, Color::BLACK);
    }
}
```

もし、raylib, raylib-rs のバージョンが進み、依存関係が変化した場合は

上記のコードのみを動かしてみるのも一興だろう。そうすれば、何が要求されているのかがエラーメッセージとしてあらわれることと思う。

## 補足

ここまで我ながら偉そうに書いたが、多分他のエラーパターンもある。申し訳ないが個別の質問にはいたしかねます。

# おわりに

raylibはSDLに似ている。

私はSDLが全盛期だったころを知っていて、高校生のときにゲームも作った。そもそもSDLってなに？という質問に対しては「老人の思い出話じゃよ」としか言わない。Unity使えUnreal使え、RustでもEnvyやGodotがあるでよ。当時（今でも）ガチで使っている人にはごめんなさい。raylib-rs はそれと同じ運命をたどるであろう。raylibもおそらくは。今現在ガチで使っている人にはごめんなさい。個人の感想ということで許してください。

SDL, raylibはいずれも、ゲーム開発を、ローレベルまで自分で完全制御できるライブラリ。アセット管理？音声合成？３DCG？OK、ドライバーとネジは用意しとくからさ、自分でやりなよ。そんなノリを感じる。マジの完全制御をしたい人にお勧め。なお、LowSpec, LowLevel環境でのゲーム開発という意味ではない。それはそれで別のライブラリがある。

そこまでやりこみたい人、昨今、いるの？いてほしい。仮にいたとして、この記事を踏み台にして高みへ上っていってほしい。
Microsoft Certified: Fabric Data Engineer Associate(DP-700)合格備忘録

### ■受験の目的
Microsoft Fabricにおけるデータエンジニアリング、管理、CI/CDを理解するため。
Microsoft Certified: Fabric Data Engineer Associate(DP-700)の認定を受けるため。

### ■出題範囲
シラバスはMicrosoft公式から参照します。
https://learn.microsoft.com/ja-jp/credentials/certifications/resources/study-guides/dp-700

### ■受験の前提
中級試験の位置づけですが、特に事前に合格が必要な試験などはありません。
DPシリーズとしては、従来のAzureのPaaSとは異なり、Microsoft Fabricのデータ統合基盤サービス（SaaS）としての内容で、特にデータエンジニアリング、管理、CI/CDが中心になっています。

### ■筆者の経験と補足事項
筆者は、この試験の前に「DP-600」を取得していて、且つ業務でFabricを実際にある程度動かしていた経験がありました。
実は、本試験「DP-700」を、英語だけサポートされていた時に一度受験していたのですが、その時は残念ながら不合格でした。出題数と英語読解で苦戦し、惜しくも6割後半に留まりました。
実際に受けてみるとDP-600と共通で、SQL,KQL,PySparkなどが少なからず出題されています。

### ■受験のメリット
Microsoft Fabricに関するデータエンジニアリングのほかにも、Fabricの管理、CI/CDの手法を学ぶことが可能です。試験の傾向ですと、ArchitectやAdministratorに近い領域をイメージしていただくと良いと思います。

### ■教材
MicrosoftLearningで学習します。このあたり無料で詳しく体系的に学べるのはありがたいです。
PC端末限定ですが、ラボもあります。
https://learn.microsoft.com/ja-jp/training/courses/dp-700t00
※個人のMicrosoftアカウントがあれば、PCやスマホなどで進捗を同期できるので、いつでも続きから学習できます。

最近の試験の傾向では、試験中にMicrosoftのドキュメントを検索させるように構成されている問題もあるため、時間に余裕があれば、目を通しておくと良いでしょう。
理由としては、ドキュメントの構成やワードをある程度把握しておくことで、検索ヒットをさせられるようにするためです。
https://learn.microsoft.com/ja-jp/fabric/

※戦略としては、検索が必要な問題はブックマークして、同セクション2周目でやった方がいいです。

Fabricの内容は、従来のPaaSサービス10個分以上くらいあるので、すべて記憶するのは困難だと思われます。そのため、Fabric項目ごとの目的と概要の整理を行っておくことをお勧めします。Fabricの管理やCI/CD概念については、各管理者権限で実際に動かしていないと理解できない部分もあるので、可能であれば手を動かして覚えましょう。

### ■模擬試験
Udemyで購入しました。前回、DP-600で購入した作成者の方の模擬試験になります。
https://www.udemy.com/course/microsoft-dp-700-fabric-data-engineer-associat-practice-test/

本コンテンツですが、一部回答の誤りがあったため、QAは見ておいた方が良いです。
問題の解釈が、一部読み取りにくいところもあります。

### ■学習期間
筆者の場合、ラーニングと模擬問題を1カ月半ほど学習しております。
前段で添付していたFabricのドキュメントも、シラバスを参照して、
一通り内容に沿ったところは目を通しました。

### ■実際の本試験
日本語に対応した試験が発行されていましたので、そちらで受験しています。
全問の制限時間は100分でした。問題数は毎回変わるのでご注意ください。

以下の内容でした。
全問題：52問
　　L　通常問題：44問
　　L　ケーススタディ：8問
⇒共通題目のYES/NO問題は、今回は通常問題に含まれていました。

注意点として、
一連の通常問題を回答後に、一番下のボタンを押すと、ケーススタディへ遷移します。
ケーススタディ遷移後は、通常問題に戻れません。
見直しが必要だったのに、間違えて押してしまうと致命的なので気を付けてください。
制限時間は全問トータルで100分です。計画的に解くようにしましょう。

模擬問題の内6,7割くらいは出題されていました。
その他は、Learningを検索しないと分からなかったため、
ブックマークし2周目で回答しました。

筆者の場合、ブラッシュアップ後の2回目の受験となりましたため、
ある程度記憶に残っていた問題もあったことと、日本語受験であったため、
前回よりは比較的時間に余裕ができました。

7割以上が合格ラインです。
8割越えのスコアで、2回目のリトライが実った結果でした。
Vue 3でのルーティング、Vue Routerの基本的な使い方まとめ

Vue.js で SPA を作るなら欠かせないのが Vue Router。この記事では、**Vue 3 + Composition API** で Vue Router を使って簡単なページ遷移を実装する方法をまとめました。

---

## 🎯 この記事でわかること

- Vue Router のインストール
- ページコンポーネントの作成
- ルーティング設定
- `<router-link>` と `<router-view>` の使い方
- 動的ルーティング（パラメータ付き）の使い方

---

## 🔧 開発環境

- Vue 3
- Vue Router 4
- Vite を使ったプロジェクト

---

## 1️⃣ インストール

```bash
npm install vue-router
```

Vue Router をプロジェクトに追加するためのコマンドです。

---

## 2️⃣ ページコンポーネントを用意

`views/Home.vue`
```vue
<template>
  <h1>Home Page</h1>
</template>
```

`views/About.vue`
```vue
<template>
  <h1>About Page</h1>
</template>
```

各ページの表示内容をコンポーネントとして定義します。

---

## 3️⃣ ルーティングの設定ファイルを作成

`src/router/index.js` を作成します。

```js
import { createRouter, createWebHistory } from 'vue-router' // Vue Router の関数をインポート
import Home from '../views/Home.vue' // Homeページのコンポーネントをインポート
import About from '../views/About.vue' // Aboutページのコンポーネントをインポート

const routes = [
  { path: '/', component: Home }, // '/' にアクセスしたら Home を表示
  { path: '/about', component: About }, // '/about' にアクセスしたら About を表示
]

const router = createRouter({
  history: createWebHistory(), // HTML5ヒストリーモードを使用（URLにハッシュ「#」を含めず、通常のパスのように見せるルーティング方式）
  routes,
})

export default router // 他のファイルで使えるようにエクスポート
```

---

## 4️⃣ main.js にルーターを登録

```js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router' // 作成した router をインポート

const app = createApp(App)
app.use(router) // アプリに router を適用
app.mount('#app') // #app にマウント
```

---

## 5️⃣ ルーターリンクとルーター表示エリア

```vue
<!-- App.vue -->
<template>
  <div>
    <nav>
      <router-link to="/">Home</router-link><br>
      <router-link to="/about">About</router-link>
    </nav>
    <router-view />
  </div>
</template>
```

- `<router-link>` は `to` 属性で遷移先を指定できるリンクです。
- `<router-view>` は、現在のルートに応じたコンポーネントを表示する場所です。

---

## 6️⃣ 動的ルーティング（オプション）

```js
// ルーティングに追加
{ path: '/user/:id', component: User }
```

`/user/123` のようなパスにマッチします。

```vue
<!-- views/User.vue -->
<script setup>
import { useRoute } from 'vue-router'
const route = useRoute() // 現在のルート情報を取得
const userId = route.params.id // URL のパラメータ（id）を取得
</script>

<template>
  <div>User ID: {{ userId }}</div>
</template>
```

`useRoute()` を使うことで、ルートに含まれる動的なパラメータを取得できます。

---

## ✅ まとめ

| 機能 | 方法 |
|------|------|
| ページ表示 | `<router-view />` |
| リンク作成 | `<router-link to="/about" />` |
| 動的ルート | `/user/:id` |
| ルート取得 | `useRoute().params` |
| ページ遷移（コード） | `useRouter().push('/about')` |

---

## 🧭 実装の手順まとめ

1. `vue-router` をインストール
2. 各ページ用のコンポーネントを `views/` に作成
3. `router/index.js` を作成してルートを定義
4. `main.js` でアプリにルーターを登録
5. `<router-link>` と `<router-view>` を使って画面遷移を設定
6. 必要に応じて動的ルーティングやプログラム的遷移を追加

---

## 📘 Tips

- `router-view` はページを差し込む場所
- `<router-link>` は HTML の `<a>` タグの代わり
- `useRoute()` で現在のルート情報にアクセス
- `useRouter()` でルーター操作（遷移など）可能
備忘録としたいYoutube動画

### 概要

『私が「つよつよエンジニア」になるまでにした７つの習慣』というQiitaの記事において、[その2: Webサービスの内部構造を想像する](https://qiita.com/kerun8080/items/f0ec5031c7bff530d534#%E3%81%9D%E3%81%AE2-web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E5%86%85%E9%83%A8%E6%A7%8B%E9%80%A0%E3%82%92%E6%83%B3%E5%83%8F%E3%81%99%E3%82%8B)という章にインスパイアされて記事を投稿。

最近の日常生活で、印象に残ったYoutube動画を残しておきたい。

### コムドット やまと × 成田悠輔　「もはや政治家」と成田が絶賛！ YouTubeの絶対王者が「セルフプロデュース術」を語る！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978560/1ae95cff-6091-41fe-a4fe-a02c5b3f7caf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978560/029c2ccb-7d2e-4171-8efa-98a9a4fe0ee6.png)

「企画」と「開発」はまったく違うもの（まったく違うスキルを要するもの）だという、忘れがちだが、至極当たり前のことに気づかせてくれた動画。

#### 動画からの引用

+ 03:04 ~ 04:07

コムドットのやまとが、なぜコムドットの動画は長いのかを解説。
Google側（プラットフォームの開発者側）の視点に立った時に、どういった動画が優秀だとみなされるのか（背景には、優秀だとみなされることで、インプレッション数を獲得していきたいという考えがある）を考察した上での動画作りについて、説明している。

筆者は、日頃スマホアプリ開発をしているが、サードパーティのプラットフォームで活動するという点では、スマホアプリ開発もYoutuberも共通項を持っている。

サードパーティのプラットフォームに依存しすぎることは、プラットフォーマーの意向によって、活動する側が動きを変えていかなければならない（即ち、依存度が高い）ことはデメリットだが、個人的には、プラットフォームの特性やプラットフォーマーの思惑を分析するという視点を持てることは、サードパーティのプラットフォームで活動しているからこそ体験できる視点だと思う。

#### プラットフォームという視点について

プラットフォームという視点に立った際に、頭に浮かんだ過去のコンテンツも合わせて残しておきたい。

+ Youtube アナリティクス
+ [短期間でインデックス数を130%改善。明確な根拠とロジックに裏付けられた信頼の置ける提案と伴走でサポート。](https://lany.co.jp/work/docomo/)

前者は、（Youtuberにとっては当然だと思うが）コンテンツ制作者が、コンテンツを作って終わりではなく、より魅力的なコンテンツを作っていくためには、統計・分析結果をもとに、仮説検証のサイクルを回すことがいかに重要であるかを示唆してくれている。

筆者は令和ロマンの [チャンネル分析したら、男の視聴者が多すぎました。【令和ロマン】](https://www.youtube.com/watch?v=E8RcnsSNu4c)という動画で、アナリティクスに対して、親近感が湧いた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978560/cb82bbc9-9fd7-4b82-9f7f-2786ffaddce7.png)

後者は、SEOコンサルティングを手掛ける株式会社LANYという、同じくGoogleというプラットフォーマーが築いたSEOというアルゴリズムを分析して、webページ（＝コンテンツ）をより多くのユーザに届けるためのプロセスを見て取れる。
（筆者がイメージするコンサルティングと正に合致していて、記事として記憶に残っているという側面もある）

### 最後に、KPIについて

最後に、今まであまり価値を感じたことがなかったが、KPIに対する考えを改めるきっかけになった動画も記しておきたい。

#### 【1日密着】仕事は一番楽しい◯◯!?パワフルすぎるワンメディア・COOの1日

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978560/7daaf4c9-7834-49f0-9f80-18ec5d5270c2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978560/753fffdf-f3b5-4fa4-b013-f7113a637039.png)


#### 動画からの引用

+ 7:41

株式会社ワンメディアのCOOを務める余頃沙貴の1日に密着する動画。
その中で、同僚社員が同氏のすごさを説明するカットがあるが、その中で「組織作りとKPIと経営をすごく紐付けている」という言葉が非常に印象に残った。

全社員に、経営という視点で常に物事を考えることを求めるのは、それでは具体的にどういったアクションを取れば良いのかは分からないという面で、非現実的な部分があるが、それを補完するのが、正にKPIという指標なのだと気づいた。（だからこそ、KPIは定量的な側面を持っている必要がある）

よく考えると、システム開発もふわっとした要件・要望をブレイクダウンして、個々人が手を動かせる状態までタスクを分解できるメンバは、チームでも重宝されるが、KPI設定に富んだ人というのは、経営課題に対して、社員1人1人が明日から具体的に何をすればよいのかを示す道標としての役割を設定するのが非常に上手な人だという解釈ができるのではないかと思った。

### 追記

KPIについて学べる書籍と、「思考の整理学」（外山 滋比古著）を次は読みたいと、この記事を書きながら感じている。

+ コムドット やまと × 成田悠輔　「もはや政治家」と成田が絶賛！ YouTubeの絶対王者が「セルフプロデュース術」を語る！：[Youtube](https://www.youtube.com/watch?v=DKWvpH6Y-hg)
+ 【1日密着】仕事は一番楽しい◯◯!?パワフルすぎるワンメディア・COOの1日：[Youtube](https://www.youtube.com/watch?v=Udmdc_6j6pw)
【IBM App Connect Enterprise】 コード・ページ '65001' が無効です への対応

## コード・ページ '65001' が無効です
IBM App Connect Enterprise（以下 ACEと略します）の利用で、Windows環境のMQと接続する際に、次のようなエラーが発生するかもしれません。
特に**Windowsのローカル環境で試験的にインストールする**際に、多く発生する状況と考えます。

<img width="600" alt="qiita-square" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536604/71df8dcc-7000-4a52-93ae-a8b9dd9e43ad.png">

## 原因
このエラーは、MQ側のコードページ（文字コード）として設定されているのが65001で、これをACE側が認識できないという状況を示しています。

ACEでサポートするコードページのリストは以下のページから確認できます。

https://www.ibm.com/docs/ja/app-connect/13.0?topic=flows-supported-code-pages

「65001」はUTF-8であることを示しており、コードページ上でもACEが認識できると記載されています。ただ実際にコードページの識別を行なう際に「ibm-65001」と判断されて対応コードページのリストにないと判断されているようです。

WindowsのMQでは、デフォルトインストールでプラットフォームの文字コードをCCSIDに採用することから65001が選択されます。

MQでどのようなコードページが設定されているかは、次のコマンドで確認することができます。
```
runmqsc キューマネージャー名
DISPLAY QMGR CCSID
```

## 対処
MQのコードページを1208に変更することでエラーは解消します。
```
runmqsc キューマネージャー名
ALTER QMGR CCSID(1208)
```
ここではローカルテストを想定しての解決策として提示していますが、実運用にあたっては正しいコードページに合わせた対処方法を検討ねがいます。

## さらに詳しい情報をお探しの方へ
IBMの最新情報、イベント情報、さらに役立つ資料は、以下のIBM Communityでも発信・格納されています。
最新のトレンドや有益な情報をチェックするために、ぜひご覧ください！
- **WebSphere**: [IBM Community - WebSphere](https://community.ibm.com/community/user/wasdevops/communities/community-home?CommunityKey=d6c93aa2-6e10-48da-96dc-3831da8ee185)
WebSphere関連の最新情報やディスカッション、イベント情報、技術資料を公開中！
- **ELM (Engineering Lifecycle Management)**: [IBM Community - ELM](https://community.ibm.com/community/user/sustainability/communities/community-home?CommunityKey=f8bc69e0-9d61-4688-939b-018f5f74519e)
ELMに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック！
- **Integration**: [IBM Community - Integration](https://community.ibm.com/community/user/integration/communities/globalgrouphome?CommunityKey=fe1b09d3-7042-4a5f-bce0-6bcc19aa0ed9)
Integrationに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック！
【解決】LangChainのChatOpenAI()関数でPydanticのエラーが出るようになった

## 現象
Google ColaboratoryでLangChainを用いたエージェントの開発をしていたところ、先月後半くらいから下記のエラーが出るようになった。

エラーが出る記述：
```
model = ChatOpenAI(model="gpt-4o-mini", temperature=0)
```


エラー内容：
```
pydantic.errors.PydanticUserError: `ChatOpenAI` is not fully defined; you should define `BaseCache`, then call `ChatOpenAI.model_rebuild()`.
```

## 解決方法
Pydantic 2.11のアップデートに起因する不具合を疑い、これを古いバージョンに入れ直したところエラーが出なくなった。
```
!pip uninstall pydantic
!pip install pydantic==2.10.6
```
備忘録としたいWebサービス

### 概要

『私が「つよつよエンジニア」になるまでにした７つの習慣』というQiitaの記事において、[その2: Webサービスの内部構造を想像する](https://qiita.com/kerun8080/items/f0ec5031c7bff530d534#%E3%81%9D%E3%81%AE2-web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E5%86%85%E9%83%A8%E6%A7%8B%E9%80%A0%E3%82%92%E6%83%B3%E5%83%8F%E3%81%99%E3%82%8B)という章にインスパイアされて記事を投稿。

最近の日常生活で、印象に残ったwebサービスを残しておきたい。

### 「CFCL」　SILHOUETTE

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978560/db015317-157f-467b-8209-cf6601f82c03.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978560/440eec1c-93a0-4f4c-a335-0c9775b06f15.png)

デザインも良いし、コンテンツとしても魅力的。
3つの質問も絶妙で、ずっと読みたくなるwebサイト。

* webページ：[SILHOUETTE](https://cfcl.jp/pages/project-silhouette?srsltid=AfmBOoq9z4UZwpebuGQxnyKhfdhfWSuvd-A9ewBREvQ4J0xm04eoC6iZ)

### 「NTTコミュニケーションズ」　Biz安否確認アプリ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978560/29d3f70d-f9e0-4053-bb82-c47729cccbf4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978560/d7ead78f-45c7-44ca-9e87-7896e5c4fdf8.png)

企業向け感満載で、正直、期待値が低かったが、UIが想像以上に洗練されていて、驚いた。
B向けのプロダクトで、ユーザ体験も追い求める姿勢を見習いたい。

### 「LINE」　トークスクショ機能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978560/b9807a00-4a93-4034-961b-f2bb04de18b0.png)

先日、LINEを使っていた際に、不意に見つけた機能。
情報の表示・非表示を切り替えられる機能に感動。細かなユーザビリティも意識できる開発者でありたい。

※ スクショは [Impress Watch](https://www.watch.impress.co.jp/docs/news/1178771.html) より
ROSのRvizでstlファイルを表示する

## 環境
Ubuntu22.04 LTS
ROS Noetic

## 表示したいモデルの作成
Windows版Fusion360で行った。
好きなモデルの作成後、左のパネルのボディ上で右クリックし、エクスポートからSTLにエクスポートした。
何故かはわからないが、プロジェクトからエクスポートした場合、読み込めてもRvizで表示できなかった。そのため必ずボディからエクスポートを行う。

## プログラムの作成
[こちらの記事](https://github.com/garaemon/rviz_collada_marker/blob/master/marker_mesh_sample.py)を参考にした。

```generate_stl_object.py
#!/usr/bin/env python3

import rospy
from visualization_msgs.msg import Marker

rospy.init_node("marker_mesh_sample")

pub1 = rospy.Publisher('marker1', Marker, queue_size=10)
pub2 = rospy.Publisher('marker2', Marker, queue_size=10)

r = rospy.Rate(10)
while not rospy.is_shutdown():
    mesh_marker = Marker()
    mesh_marker.header.frame_id = "world"
    mesh_marker.header.stamp = rospy.Time.now()

    mesh_marker.pose.orientation.w = 1.0

    mesh_marker.scale.x = 1.0
    mesh_marker.scale.y = 1.0
    mesh_marker.scale.z = 1.0

    mesh_marker.type = Marker.MESH_RESOURCE
    mesh_marker.mesh_use_embedded_materials = True


    mesh_marker.mesh_resource = "package://project1/src/meshes/poll.stl"
    mesh_marker.pose.position.x = 0.0
    mesh_marker.pose.position.y = 0.0
    mesh_marker.pose.position.z = 2.0
    mesh_marker.color.r = 1.0
    mesh_marker.color.g = 1.0
    mesh_marker.color.b = 0.1
    mesh_marker.color.a = 1.0
    pub1.publish(mesh_marker)

    mesh_marker.mesh_resource = "package://project1/src/meshes/star.stl"
    mesh_marker.pose.position.x = 0.0
    mesh_marker.pose.position.y = 0.0
    mesh_marker.pose.position.z = 0.0
    mesh_marker.color.r = 1.0
    mesh_marker.color.g = 1.0
    mesh_marker.color.b = 0.1
    mesh_marker.color.a = 1.0

    pub2.publish(mesh_marker)
    r.sleep()
```

あとは実行してRviz上でMakerを表示すれば見れるはず