OmniAICreator/Qiita-1.07M huggingface dataset:
アンケートデータから回答の特徴を調べる方法の紹介（因子分析）

今回は、アンケートデータから回答の特徴を調べることができる因子分析について簡単に紹介します。


因子分析は質問への回答の傾向をもとに回答者の「嗜好」や回答の裏にある「動機」をつかみたい時に利用できる統計のアルゴリズムです。

例えば、マーケティング担当者としてどういう嗜好でビールを購入するのかを知りたいとしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/71842b8f-5712-6fe7-9ab1-d66af3f4a886.png)

そこで、「ビールを選ぶ時に重要とするものは何ですか？」といったアンケートを実施し、以下の結果を得られたとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/dbac4b7d-36bc-8ce2-7730-30e9f30dbf54.png)


このデータは1行が1人の回答者を表しており、各列は重要度のスコアを表しています。数値が大きくなるほど、その項目の重要度が高くなります。

回答者の中には、「色」、「アロマ」、「味わい」を重視する人がいたとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/a020fd15-9e7b-9d5a-22ce-6d9af69eef2e.png)


もしくは、「値段」、「サイズ」、「アルコール」を重視する人もいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/3e637aa1-5bbb-6b0e-7eea-570087889f97.png)


さらに「評判」を重視する人もいるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/ce159a9b-7ad2-b496-38e0-e776f67b575e.png)


このように、各々のグループは、重要と考える項目が異なるわけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/2c919f71-8d6a-cfd1-a117-b7946e805d4b.png)


見方を変えると「ビールを選ぶ時に重要とするもの」に対して、以下を重要に考える嗜好（因子）があるとも言えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/b4ffa61e-0072-6028-8463-04670a27c453.png)


因子分析では、アンケートの回答の傾向をもとに、背後にあるであろう要因を「因子」として抽出し、各因子と各変数（質問）の相関の強さを「因子負荷量」として、計算します。

因子負荷量は−1から1の間の値をとり、−1または1に近づくほど、各因子がそれぞれの変数に与える影響が強いと言えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/a7db58b2-f982-17c5-18e6-d1237069c857.png)

上記の因子分析での結果をもとに、アンケートの回答者がビールを選ぶ時に重要視する潜在的な要因（因子）は、下記であると考えることができます。

* 因子1: コストを重視していて、安く酔っぱらえるビールがいい
* 因子2: クオリティを重視していて、とにかく美味しいビールがいい
* 因子3: ブランドを重視していて、口コミが高いビールがいい

このように、アンケートの回答の特徴を調べられる因子分析ですが、Exploratoryでは、アナリティクスビューから「因子分析」を簡単に実行することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/fb421004-aa03-5be9-19cf-dda745b2a2a9.png)


様々なチャートを使って各因子の特徴や因子間の関係を直感的に理解していくことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/b13a99e6-7253-a70a-9d79-a05fb1df5f34.png)

# 実務で使えるスキルを身に着けたい！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/b4956034-7410-51d1-4d74-1f461ce36df3.png)


今回紹介したようなアンケートデータの分析に役立つ分析手法、さらにアンケートデータに特有なデータ加工の問題の解決方法などをもっと深く学び、さらに現場で使えるレベルのスキルを身に着けたいという方は、アンケートデータの加工と分析に特化したトレーニングを用意しておりますので、ぜひご検討いただければと思います。

https://exploratory.io/survey-data-training-jp/?utm_campaign=5analytics-survey&utm_medium=blog&utm_source=qiita

# 自分のデータで試してみたい！

記事内の全てのチャートは、データの加工、可視化、分析、レポーティングのためのUIツールの[Exploratory](https://exploratory.io/?utm_campaign=5analytics-survey&utm_medium=blog&utm_source=qiita)を利用して作成しています。

ご自身のデータを使って、これらのチャートを作成したり、データの分析をしたい方は、下記のページより無料トライアルが可能ですので、ぜひ、お試しください！

https://exploratory.io/?utm_campaign=5analytics-survey&utm_medium=blog&utm_source=qiita
Windowsのコマンドプロンプト（bat）でネットワークドライブの割当と切断

# やり方（割当）

```bat:ユーザー名とパスワードを指定
rem 『\\server\d01』を『X』という名前のネットワークドライブに割当
rem 接続は『namae』というユーザー名。
rem ユーザーのパスワードは『pasuwado』
net use X: \\server\d01 /user: namae pasuwado
```

ユーザー名とパスワードを省略した場合はWindowsにログインしている情報で割り当てにいきます。

```bat:ユーザー名とパスワードを省略版
net use X: \\server\d01
```

# やり方（切断）

```bat:ユーザー名とパスワードを省略版
rem 『X』という名前のネットワークドライブを切断
net use X: /delete
```

# 参考サイトさん

https://danqkzs.com/auto-networkdrive-letter-assignment/

https://dreamparadaisu.com/windows_command_bat_03/

# バージョン

Microsoft Windows [Version 10.0.19045.3271]
ChatGPT Plus: Custom Instructions - PHP を使うコツ


## 概要
* この記事は、初めて「Custom Instruction」を使う人、かつ PHP 使い向けです。
* 「Custom Instruction」とは
    * ChatGPT に事前情報として文脈や制約を教えることができる機能
  * ChatGPT Plus のユーザー限定だったが、まもなく無料ユーザにも提供されるとのこと（2023.08.10）
  * 複数定義はできない（2023.08現在）
    - 場合によって設定をオフにしたり、内容を変更する必要がある
* **「いつも決まった内容(言語/フレームワーク/役割)で使うことが多い」場合に、毎回条件を書く必要がないのは便利**

---

### コーディングにおいて、想定される使い方

* コード生成時の言語のバージョン、およびフレームワークを指定する
* 特定のロール(役割、役目)を指定する
* 互換性や非推奨の使い方を避けるよう、指示する

---

## メニュー構成

* Custom Instructions のメニューを開くと、上下に別れたテキストボックスが表示される
  - 上部:
    - ChatGPT から受け取りたい内容を1,500文字以内で書く
      - ロール等
  - 下部:
    - 受け取る内容のフォーマットなどを書く

----

## 使い方

### セットアップ

* 画面左下のユーザ名をクリック
* [Settings & Beta] をクリック
* [Beta features] をクリック
* [Custome instructions] を ON にする

---

## 具体例

### 概要
* 以下は、PHP/Laravel での質問、回答を行う設定です。
  - 実際に使ってみて、意外と配列の宣言に array() を使われることが多い -> おそらく参考ドキュメントが多いから（バージョン7より前の記述が）。今どきの宣言 [] を明示しています。
  - また、2038年問題のある date 関数もよく使われますが、これも回避しています

### プロンプト本文
* 上:

```

あなたは PHP のエキスパートです。

以下のフレームワークを使用します。

* Laravel
 - 日時の計算:
   - datetime クラスを使い、date 関数は使わない

* PHP
  * 7.4 以上を想定してください
  * なるべく汎用的な書き方をしてください
  * 以下の点は必ず守ってください
    - 配列の書き方:
      - array() ではなく、[] を使う
    - コメント:
      - 日本語で書く

```


* 下:

```
* 説明はすべてフォーマルな文章でしてください。
* セキュリティには十分に配慮して、回答して下さい。そのために説明が長くなっても構いません。
```

---

### 結果

* 配列、日時計算で毎回指定する必要がなくなりました
* 回答に「セキュリティに配慮して～」と説明が入るようになったため、安心要素が増えました

---

## 最後に

* 「PHP/Laravel ならこれも追加すべき」等、ご意見ございましたら、是非お寄せ下さい！
Deep supervision(auxiliary head)について

# 目的
kaggleや物体検出の論文を読んでいると"auxiliary head"に出会うことが多かった。
Unet++やYOLO等色々なモデルに使われており、kaggleでもモデル改善の一つの手段になっている。そこでauxiliary headについて原論を確認しようと思い、備忘録作成。

原論:
Chen-Yu Lee et. al., Deeply-Supervised Nets, Artificial Intelligence and Statistics, 562-570, 2015, https://arxiv.org/abs/1409.5185

# 論文を１行で言うと
DSN(Deeply-supervised nets)により画像認識の精度が向上し、学習の収束も早くなった。

# 課題意識
CNN(Convolutional Neural Network)の当時の一般的な課題点３つに取り組んでいる。
1. <b>隠れ層が最終的な分類結果にどう影響するか不透明。</b>
2. <b>序盤の隠れ層がどの程度分類・汎化性能を持っているか(1とほぼ同義)</b>
3. 勾配消失・拡散により学習が収束しない。(当時はスキップ接続がまだ提案されていない)
この３つに取り組むことでCNNの精度を高める方法を検討した。

# 提案された解決策
すべての隠れ層にSVC(Support Vector Classifier)の分類器を導入した(原論中は"companion objective"と書いている)。
それぞれの隠れ層のSVCの結果に対して損失関数を適用し、パラメータを更新させている。
こうすることで、隠れ層の特徴量マップの質を可視化し(課題1,2)、また出力までのパスが短くなるので勾配消失・拡散(課題3)を抑制できる。
このように、<b>隠れ層に分類器をくっつけて学習中に出力させながら学習することがDeep supervisionで、この時の分類器がauxiliary head。</b>

筆者の主張は、<b>より良い特徴量(隠れ層)を基に分類(SVC)した結果はより良くなるはずであるため、この分類結果をパラメータ学習中に監視(supervision)すれば、序盤の隠れ層の質が良くなり、最終的な出力も改善されるということ。</b>
導入されたSVCはモデル訓練の時のみ使用され、推論時には使われない。
筆者の意図としては、この方法は正則化のような役割を持つはずだと主張している。つまり、<b>学習時に序盤の隠れ層の質(=分類器にインプットした時に良い結果が返ってくる)が低下するのを防ぐことを正則化と捉え、これが汎化性能を高めている</b>はずだと推測されている。
実際に原論中の実験では、deep supervisionにより訓練データの正答率は減少し、テストデータの正答率は向上している。


# モデル概要と損失関数
原論の概要図を示します。
左図がモデル概要図ですが、一般的な畳み込み層とプーリング層の組み合わせがm層ある(原論の時代はまだBatch Normalizationが無い)という形です。右矢印でそれぞれの特徴量マップでSVCしている様子が表現されています。右図は縦軸が不明ですが、損失関数を表現したもののはずです。
(原論図)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424989/89ab35b1-0309-d3e3-55e1-c18701b55f12.png)

損失関数はSVC由来の損失関数で書かれますが、SVCだけでなく一般化すると以下のような形になっています。※1

```math
\displaylines{
loss = (最終層の損失) + \alpha(max((隠れ層の損失) - \gamma),0) \\
\alpha : 隠れ層の損失をコントロールするハイパラ \\
\gamma : 隠れ層の損失がいくつ以下まで抑えたいかをコントロールするハイパラ \\
}
```

最終的に精度を高めたいのは最終層の精度なので、ハイパラで隠れ層の出力の影響をコントロールしています。
上記の方法でCIFARのデータセットの学習をした結果と、それと対応するCNNの結果の特徴量マップが下図になります。Deep supervisionした方が、特徴量マップがインプット写真と形状が似ているものが多いです。
(原論図)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424989/f3d5906f-f2b5-b049-a619-b2e26505bd1b.png)


# 指摘された懸念点
隠れ層のパラメータが影響されることで、最終層でのアウトプットの結果に悪影響がでるのでは？
(隠れ層出力の最適パラメータ != 最終層にとっての隠れ層の最適パラメータ)
⇒原論中では確認されなかった。これを応用した例(UNet++等)では、deep supervision導入前(Unet等)と比べてパフォーマンスが向上しないケースがあるので、これが一つの原因？

#　注釈
※1 原論だと$  [数式]_{+} $と書いており、下付きのプラスの意味が分かっていません、、、。なので、意味的に"[]内がプラスの時のみ考慮する"だろうと思い、この表現で書きました。間違えていたらすみません、、
Ubuntu20.04LTSのpython3にOpen3Dをインストール

Ubuntu20.04のPython3にOpen3dをインストール　　
2023/08月現在のUbuntu20.04環境のpython3はVer3.8ですがこの環境にOpen3dをpipでインストールすると

”ERROR: Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.”

要するにPyYAMLがディストリビューション側でインストールされているのでuninstallできないよと言っている。

pip list でPyYAMLのバージョンを調べてみると5.3.1がインストールされておりOpen3dの最新バージョンでは6.0.1が要求される

なのでOpen3dのバージョンでPyYAML5.3.1を使っているバージョンをインストールすればよいので

pip install open3d==0.11.2
でインストールできる。
CSSでスマートフォンの横画面での対応を実現！iPhone Pro Maxでも安心、PCの画面に影響せずにlandscapeを使う方法


現在関わっているプロジェクトでスマートフォンの横画面での対応が必要になりました。今までちゃんと横画面対応ってやったことがなく、少し手こずったので備忘録も兼ねて共有させていただきます。

## 目次
1. [landscapeの基本](#basic-landscape)
2. [なぜPCにも影響するのか](#why-pc-affected)
3. [iPhone Pro Max対応のlandscape設定](#iphone-pro-max-landscape)
4. [実例で見る](#example)
5. [まとめ](#conclusion)


### <a name="basic-landscape"></a>1. landscapeの基本
landscapeの基本的な設定は以下のようになります。

```css
@media (orientation: landscape) {
  /* ここに横向きのデバイスに適用するスタイルを書く */
}
```

### <a name="why-pc-affected"></a>2. なぜPCにも影響するのか
landscapeは、デバイスの表示エリアの幅が高さよりも大きい場合に適用されるオリエンテーションです。多くのPCディスプレイもこの定義に当てはまるため、PCにも影響が及びます。

### <a name="iphone-pro-max-landscape"></a>3. iPhone Pro Max対応のlandscape設定
iPhone Pro Maxの幅が428ピクセルであるため、その対応を考慮して `max-height` を `450px` に設定します。

```css
@media (orientation: landscape) and (max-height: 450px) {
  /* ここに横向きのデバイスに適用するスタイルを書く */
}
```

### <a name="example"></a>4. 実例で見る
以下は、この方法を使用してスマートフォンの横向き表示にだけ適応されるサンプルです。

```css
@media (orientation: landscape) and (max-height: 450px) {
  body {
    background-color: #f0f0f0;
  }

  .landscape-text {
    font-size: 20px;
  }
}
```

### <a name="conclusion"></a>5. まとめ
スマートフォンの横画面での対応が必要な場合に、`max-height: 450px` の設定を忘れずに行うことで、PCの画面に影響を与えずにlandscapeを使うことができます。この方法で、横画面での対応を効果的に実装してみてください！
DockerでReact環境構築【2023】

# はじめに
- 前提として、Dockerとnodeとnpmをインストールしておく必要があります。
- ホットリロードの設定も行っているので、リアルタイムで開発できます。

## 最終フォルダ構成
![フォルダ構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3525798/265e0234-7525-8da8-7a06-ad1564c2a134.png)


# 手順

## reactプロジェクトの作成
- Reactアプリケーションを作成するためのコマンドです。
- react-appというのがプロジェクト名(なんでもいい)で、react-appというディレクトリが作成されます。
- プロジェクト名：react-app

```dockerfile
#typescriptの場合
npx create-react-app react-app --template typescript
#jsvascriptの場合
npx create-react-app react-app
```

## プロジェクト内に移動
- `cd react-app`で先ほど任意の名前で作成したディレクトリに移動します。



## Dockerfileの作成
- `npm install`を行う前に、`package.json`と`package-lock.json`をコピーしています。
- これは、キャッシュを有効に活用するうえで大事です。
- こうすることで、パッケージの追加変更がない場合は、`npm inatall`をスキップしてくれます。

```dockerfile
FROM node:20-alpine
ENV NODE_ENV=development

WORKDIR /usr/src/app

COPY package.json package-lock.json .
RUN npm install

COPY . .
```

## docker-compose.ymlの作成
- バインドマウントなどを設定します。
- 開発用の場合、バインドマウントを設定しないとコンテナとローカルが同期しないので、コードの変更がすぐに反映されません。
- もし過去に、`ports:3000:3000`で作ったことがある人は`ports:3001:3000`にしてみてください。
- `ports:3001:3000`だと、`localhost:3001`でアクセスできるようになります。
- サービス名は、なんでもいいです。プロジェクト名と同じにしました。
- サービス名：react-app


```yaml
version: "3"

services:
  react-app: #サービス名
    build: .
    volumes: #バインドマウント
      - ./:/usr/src/app
    command: npm start
    ports:
      - "3000:3000"

```

- ちなみに、DockerDesktopだと、こんな感じで構成されます。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3525798/ce6e6f81-684c-5c63-ff56-6e62169d5d41.png)



## .dockerignore ファイルの作成
- これは、やらなくても動きます。ビルド時間を高速、イメージサイズの縮小を行いたい場合は、やってください。
- node_modulesを含めずイメージを作成してくれます。

```
node_modules
```

- ちなみに、.dockerignoreを作った場合と、作らなかった場合のイメージサイズの差は以下です。
```
my_image  without_ignore   e81679e750c2   35 seconds ago   887MB ←作らなかった場合
react-app-react-app  latest 3b4226fc0f36  33 minutes ago   601MB ←今回(作った場合)
```

## コンテナの作成と立ち上げ
- `docker compose up --build -d`
- `localhost:3000`にアクセスして、無事reactっぽい画像が出たらOK。
- コンテナ名(NAMES)：プロジェクト名-サービス名-連番で自動作成されていることが確認できます。

```
CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                    NAMES
55db0e4caff9   react-app-react-app         "docker-entrypoint.s…"   38 minutes ago   Up 26 minutes   0.0.0.0:3000->3000/tcp   react-app-react-app-1  
```


## ホットリロードを有効化

- `Package.json`に、以下を追加

```jsx
"scripts": {
	"start": "WATCHPACK_POLLING=true react-scripts start",
```

- 変更が即反映されるようになる

# まとめ
- 今回は、開発用の環境開発を行いました。
- Dockerfileとdocker-compose.ymlは、開発用と本番用に分けたほうがいいらしいです。
- 開発用は、バインドマウントの設定、開発に便利なパッケージなど、本番用では不必要なものも含みます。
- 本番環境では、マルチビルドを用いて、ビルドに必要なものだけを含め最小化することが大事です。

# ちなみに
今回は、プロジェクト名、サービス名、コンテナ名は以下になっています。
- プロジェクト名：react-app
- サービス名：react-app
- コンテナ名：プロジェクト名-サービス名-連番

名前についてもっと知りたい方は以下を参考にしてください



https://qiita.com/satodoc/items/188a387f7439e4ec394f
Quick & Easy Microwave Installation: DIY Tips for Success

Microwave ovens are a staple in most kitchens due to their convenience and time-saving capabilities. Installing a microwave might seem complicated, but with the right approach, it can be a straightforward DIY project.

Safety First: Preparing for Installation
Before you start the installation process, prioritize safety. Turn off the circuit breaker to ensure there's no power flowing to the installation area. Additionally, have a fire extinguisher handy, just in case. Safety goggles and gloves are also recommended.

Gathering Your Tools and Materials
To make the installation smoother, gather all the necessary tools and materials. You'll likely need a measuring tape, pencil, stud finder, screwdriver, screws, mounting brackets, and a level. Refer to the manufacturer's instructions for specific requirements.

Choosing the Perfect Location
Selecting the right spot for your microwave is crucial. It should be easily accessible, preferably near your kitchen work area. Ensure that there's enough clearance space above and around the microwave to allow proper ventilation and prevent overheating.

Measuring and Marking
Using a measuring tape and pencil, mark the exact position where you want to install the microwave. Use a stud finder to locate the wall studs behind the installation area. Wall studs provide the necessary support for the microwave's weight.

Preparing the Mounting Bracket
Most microwaves come with a mounting bracket that needs to be attached to the wall. Follow the manufacturer's instructions to attach the bracket securely to the wall studs. Use a level to ensure it's perfectly horizontal.

Installing the Microwave
With the help of a friend or family member, carefully lift the microwave and slide it onto the mounting bracket. Make sure it's seated properly and securely on the bracket.

Wiring and Power Connection
If your microwave has a built-in exhaust fan or light, you might need to connect the wiring. If you're not comfortable with electrical work, it's best to consult a professional electrician to ensure a safe connection.

Securing and Testing
Double-check all the screws and connections to ensure everything is secure. Once you're confident in the installation, turn the power back on and test the microwave to ensure it's functioning correctly.

Conclusion
Congratulations! You've successfully installed your microwave, adding a new level of convenience to your kitchen. With proper planning, preparation, and a focus on safety, <a href="https://www.ftal.ca/">microwave installation</a> can be a manageable DIY project that enhances your culinary experience.
基本設計において作業順を入れ替えた話

# はじめに

私は自社開発に携わっており、現在基本設計の工程を進めています。
この工程で発生したちょっとした事件についてまとめました。

# 目次

[1.基本設計の内容](#1-基本設計の内容)
[2.順番どうすっぺ](#2-順番どうすっぺ)
[3.設計を進めてみる](#3-設計を進めてみる)
[4.振り返ってみる](#4-振り返ってみる)
[5.結果](#5-結果)
[6.余談](#6-余談)
[7.予告](#7-予告)



# 1. 基本設計の内容

まず基本設計のフェーズで確定させる内容を大まかに決めます。
超が付くほど大雑把ではありますが、カテゴリとして下記の３つに分類しました。

- 画面設計
- 機能設計
- DB設計



# 2. 順番どうすっぺ

どのような順番で進めていこうか、というところでまた一つ頭を悩ませました。
長考した結果下記のようにしました。

1. 画面設計
2. DB設計
3. 機能設計

一番最初に画面設計を置いた理由として画面設計を完了することで機能のイメージをしやすくする意図がありました。
イメージがあることで、その後の機能設計で漏れを少なくすることができると考えました。
その後DB設計を行いどのような情報を格納するか確定したうえで、機能設計を行うという流れにしようと決めました。

この順番が間違っていることに気づくのは数週間後の話。。。

# 3. 設計を進めてみる

それでは早速画面設計を進めます。

## 3.1 画面一覧
最初に画面設計を行います。
最初にすることは画面一覧作成です。

ふんふーん♬（作業中）

お、終わりました。

## 3.2 画面遷移図
次は画面遷移図作成です。

ふんふふーん♬♬（作業中）

お、終わった。

## 3.3 画面イメージ作成
次は画面イメージ（モックアップ）作成です。

ふんふんふふーん♬♬（作業中）

ふん？（あれ？）
ふーーん？？（なんだー？？）

ここで「なんか機能設計してるなあ」と感じました。
画面イメージなので各画面にどの項目を表示させるか、どのようなフォームを配置するのか記載する必要があります。
当然画面設計から始めているので上記のことは何も考えられていません。

このタイミングで順番が違うことに気づきました。

# 4. 振り返ってみる

なぜこの順番にしたのか振り返ってみます。

>一番最初に画面設計を置いた理由として画面設計を完了することで機能のイメージをしやすくする意図がありました。
イメージがあることで、その後の機能設計で漏れを少なくすることができると考えました。

言いたいことは分かりますが、結果的にはミスっていました。


原因を考えると各設計での具体的なイメージができていなかったのだと思います。
今回の場合で見てみると、
画面イメージを作成する際、各画面に対して表示項目の場所、フォームの位置など決めます。
それは表示させる内容が決まっている、というのが前提にあります。
そして私はこの前提を考慮できておらず画面設計を最初に設定してしまいました。

青二才です。

# 5. 結果

順番を下記のように入れ替えて進めることにしました。

1. 機能設計
2. DB設計
3. 画面設計

今回の反省を踏まえ最初に機能設計を持ってきました。
その後DB設計を行い、最後に画面設計を行います。

正直DB設計と画面設計は順不同で構わないと思います。
ただ最初に機能設計を終わらせることが重要です。

# 6. 余談

今まで順番を入れ替えた経緯を書きましたが、順番について考えれば考えるほど沼にはまる気がします。

例えば最初の機能設計の最中に「この機能ではこのデータをDB登録しよう」と決めた際、
「じゃあどのテーブルのどのカラムに入れるのか？」
と考えることができます。

しかしテーブルはDB設計で行うので、機能設計ではここまでしか決めれません。
そうなると「DB設計から始めたほうがいいのでは。。。？？」
とも考えてしまいます。

さらにしかしDB設計でも、最初にどのような情報を格納するのか決まっていないといけません。
そうなると「やっぱり機能設計。。。？？？」

以下無限ループ

堂々巡りではある。と思う。
もしくは筆者の頭が固すぎるか。

ですがどこかの設計タイミングで決めないといけません。
そのタイミングがどこかというとやはり **機能設計** だと思います。
機能設計は基本設計における柱のようなもので、この柱に対して画面,DB設計などの肉付けをするような流れが正しいと感じています。（間違ってたらハズカシイ。。。）

余談が長くなりました。

# 7. 予告

次の記事内容は決まっていませんが、8月25日金曜日に投稿予定です。
今後も隔週金曜日Qiitaに投稿するのでぜひご覧ください！
Error: Cannot find module 'esbuild' の直し方

coc.nvim のエラーを解決しようとしたら、このエラーが起きた。
vimのプラグインマネジャーはdein。
いつもcoc.nvimから yarn install しろと言われるときは、vimで

```
:call coc#util#install()
```
する。
そのときに以下のエラーが起きた。

```
 yarn install v1.22.19
 [1/4] Resolving packages...
 [2/4] Fetching packages...
 [3/4] Linking dependencies...
 warning Workspaces can only be enabled in private projects.
 [4/4] Building fresh packages...
 $ node esbuild.js
 fatal: not a git repository (or any of the parent directories): .git
 Error: Cannot find module 'esbuild'
 Require stack:
 - /home/akaikesan/.cache/dein/repos/github.com/neoclide/coc.nvim/esbuild.js
     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15) ........ 6 lines |
 uild.js:97:1)
      at Module._compile (internal/modules/cjs/loader.js:999:30) ......................... 8 lines |
 }
 Done in 3.59s.

[Process exited 0]
```

ふつうに

```
/home/akaikesan/.cache/dein/repos/github.com/neoclide/coc.nvim/
```
のディレクトリまで移動した後、
```
$ npm install esbuild
```

したらエラーが出なくなった。
Vuetify3の"v-autocomplete"で配列を表示すると[object Object]と表示されてしまう問題

# 概要
Vuetify3の"`v-autocomplete`"を使うと以下のように表示したいものが表示されず困っていました。
![スクリーンショット (95).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3027729/975ff4d7-e6bb-4f22-6a5c-8c1d1abdadf5.png)


# 試したこと
調べて出てきたのが`v-autocomplete`に`return-object`を追加するだったり、`item-value="id" item-text="name"`を追加するとありましたが、どれも解決しませんでした。
```html
<v-autocomplete
     label="Autocomplete"
     item-value="id"
     item-text="name"
     :items="items"
     return-object
></v-autocomplete>
```

# 解決法

どうやらvuetify3では`item-text`ではなく`item-title`を使うようです。
以下のようにやることで解決しました。


```html
<v-autocomplete
     label="Autocomplete"
     :items="items"
     item-value="id"
     item-title="name"
></v-autocomplete>
```
:::note warn
注意
`:items="items"`を`item-value`や`item-title`の後に書いてしまうと上手くいきません。
:::
LazyPredictで一気に分類・回帰モデルの精度を検証する

機械学習をする際に便利なLazyPredictを導入してみました。
SKLearn・LightGBMモデルの精度・評価指標とテストデータの予測値を一挙に検討できるので非常に便利です。自分用に分類予測用・回帰予測用のコードをメモしておきます。

https://lazypredict.readthedocs.io/en/stable/readme.html

# 回帰モデル
```python
# 以下のライブラリを使用
import numpy as np
import pandas as pd
import datetime

# 可視化ライブラリ
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
%matplotlib inline

# 小数第3位までを表示
%precision 3

# 今回は住宅価格の予測=回帰予測を行う
from sklearn.datasets import fetch_california_housing
data = fetch_california_housing()

X = data.data
y = data.target
df_X = pd.DataFrame(X)
df_y = pd.DataFrame(y)

# NOTE axis=1 横方向に連結
df = pd.concat([df_X, df_y], axis=1)

from sklearn.model_selection import train_test_split

X_train, X_val, y_train, y_val = train_test_split(X, y, test_size = 0.2, random_state = 1)
```
## LazyPredictによる回帰モデルの作成
```python
import lazypredict
from lazypredict.Supervised import LazyRegressor

reg = LazyRegressor(ignore_warnings=True, random_state=1121218, verbose=False,predictions=True)
models, predictions = reg.fit(X_train, X_val, y_train, y_val) 

print("モデルの精度・評価指標：")
display(models)
print("テストデータの予測値：")
display(predictions)
```

# 分類モデル
```python
# 以下のライブラリを使用
import numpy as np
import pandas as pd
import datetime

# 可視化ライブラリ
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
%matplotlib inline

# 小数第3位までを表示
%precision 3

# 今回は乳がん患者の疾病予測を分類する
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
data

X = data.data
y = data.target
df_X = pd.DataFrame(X)
df_y = pd.DataFrame(y)

# NOTE axis=1 横方向に連結
df = pd.concat([df_X, df_y], axis=1)

from sklearn.model_selection import train_test_split
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size = 0.2, random_state = 1)
```

## LazyPredictによる分類モデルの作成
```python
import lazypredict
from lazypredict.Supervised import LazyClassifier

reg = LazyClassifier(ignore_warnings=True, random_state=1121, verbose=False,predictions=True)
models, predictions = reg.fit(X_train, X_val, y_train, y_val) 

print("モデルの精度・評価指標：")
display(models)
print("テストデータの予測値：")
display(predictions)
```

![ml03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337578/ed403e86-9c83-faca-bc38-9fb302d069be.png)

![ml04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337578/8ce55f02-aa0e-fe64-8ba7-54617170c05f.png)

LazyPredictを用いればどのモデルが高い精度やROC率を出せるかを一挙に検討できます。これはアンサンブル学習等で比較的正解率の高いモデル同士を合わせたいときに便利です。また、`prediction`を出力すれば度の予測結果を採用するかも簡単に抽出ができます。
Power Platformライセンスに含まれるDataverse容量

(ライセンスガイド更新に伴い更新: 2024/2/1)
(ライセンスガイド更新に伴い更新: 2024/8/26)

今回は、Power Platformライセンスに含まれるDataverse容量についてご説明します。
基本的な考え方や管理方法については以下の記事をご参照ください。

https://qiita.com/skuramoto/items/844bd3e75cba8e0a37d5


# ライセンスに含まれる容量
Power Apps、Power Automate、Power Virtual Agents、Power Pagesのいずれかのライセンスを購入するとDataverseの容量が付与されます。
こちらに含まれるDataverse容量の付与の仕方については2種類あります。

**①既定容量**
ライセンスを1つ以上購入したテナントに、数に関係なく既定の容量が提供されます。
既定容量は**テナントに1回のみ適用**されます。
例えば、Power AppsのPremiumライセンスを１回購入したあと、同じテナントでPower AutomateのPremiumライセンスを購入しても、Power AutomateのPremiumライセンスが加算されることはありません。
**②追加容量**
追加でライセンス数に応じて容量が追加されます。こちらは単純に掛け算で計算していただけます。

::: note warn
Dataverse の容量はテナント内で共有され、特定のユーザーや環境に関連付けられません。
:::

つまり、１次関数における切片と傾きですね！😊
切片：既定容量
傾き：追加容量

Apps・Automate Premiumライセンスのデータべース容量を例にすると、以下のグラフのように増えていくイメージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/99f657f8-5a08-9683-1c2f-5d3e3638c6df.png)



以下に現時点(2024/8)でのライセンスに付与する具体的な容量についてまとめますが、最新でない可能性があります。
最新情報は以下のURLから最新のライセンスガイドをダウンロードの上、「Power Platform のDataverseのキャパシティ」セクションをご確認お願いいたします。
[ライセンスガイドダウンロード](https://go.microsoft.com/fwlink/p/?linkid=2085130)

### Power Appsのライセンスに付与する容量
|容量種類 |①Premiumの規定  |①per appの規定  |②Premiumライセンス数毎に追加|②per appライセンス数毎に追加|
|---|---|---|---|---|
|データベース  |10GB| 5GB |250MB |50MB|
|ファイル  |20GB| 20GB |2GB |400MB|
|ログ  |2GB| 2GB |||

※①は数に関係なく付与、②はライセンス数

### Power Automateのライセンスに付与する容量
|容量種類 |①Premiumの規定  |①per userの規定  |①Processの規定  |①per flowの規定  |②Premium数毎に追加  |②per userライセンス数毎に追加|②Process数毎に追加|②per flowライセンス数毎に追加|②Process Mining付加|
|---|---|---|---|---|---|---|---|---|---|
|データベース  |10GB| 10GB|5GB |5GB |250MB |250MB |50MB|50MB|2GB|
|ファイル  |20GB|20GB| 2GB |2GB |2GB |2GB |200MB|200MB|1TB|
|ログ  |2GB| 2GB|200MB |200MB ||||||

※①は数に関係なく付与、②はライセンス数

### Copilot Studioのライセンスに付与する容量
|容量種類 |①規定|
|---|---|
|データベース  |5GB| 
|ファイル  |20GB|
|ログ  |2GB|

※数に関係なく付与

### Power Pagesのライセンスに付与する容量
|容量種類 |①規定(認証・匿名どちらも同じ)  |②認証済みユーザーライセンスパック数毎に追加|②匿名ユーザーライセンスパック数毎に追加|
|---|---|---|---|
|データベース |5GB|2GB |500MB|
|ファイル  ||16GB |4GB|
|ログ  |2GB|1GB |250MB|

※①は数に関係なく付与、②はライセンス数

# 容量のアドオン（キャパシティアドオン）
上記のライセンス(サブスクリプション)で提供される容量を追加する必要がある場合、サブスクリプションに以下のオプションのアドオン ライセンスを追加することができます。ほかのライセンス同様、月ごとのサブスクリプションです。

|容量種類 |課金単位 |
|---|---|
|データベース  |1GB |
|ファイル  |1GB  |
|ログ  |1GB |

::: note
最近、Dataverseの容量はどの容量も無制限となりました！
（以前はデータベース容量は4TBという制限がありました。）
:::


# Power Platform 従量課金環境のDataverse容量
従量課金プランを有効化した環境では、容量種類ごとに購入できます。

|容量種類 |規定容量 |課金単位 |
|---|---|---|
|データベース  |1GB |1GB |
|ファイル  |1GB  |1GB |
|ログ  |0GB |1GB |

::: note warn
これらの従量課金環境では、テナント全体のDataverse容量は消費されません。
[詳細はこちら](https://learn.microsoft.com/ja-jp/power-platform/admin/pay-as-you-go-overview)
:::


# まとめ
ライセンスに付与される、既定容量、追加容量の考え方は少しわかりづらいところもありますが、こちらの記事をぜひご確認用にお使いください！
AWS OpsWorks ”サービス終了”の対応について

## TL;DR

公式からスクショ貼り付け [(Link)](https://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/opscm-eol-faqs.html)：
![capture 2023-08-09 16.28.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352042/2ef0f7c5-261c-87ef-167b-e22eecdb1c16.png)

代替ソリューションに関して問い合わせる：

__ライセンスや技術サポートについて詳しくは、連絡先： support@chef-sec.com にお問い合わせください。__ 

www.chef-sec.com

## AWS OpsWorks Chefとは？

AWS公式サイトから引用 [(Link)](https://aws.amazon.com/jp/opsworks/chefautomate/features/)

>AWS OpsWorks for Chef Automate では、マネージド型の Chef サーバーを利用できます。これを使用すると、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスおよびオンプレミスサーバーで運用タスクを自動化できます。

つまり、自前で Chef Server を用意しなくても Chef 機能を使えるようにできるサービスです。

### OpsWorks Chefの課金体系

AWS公式サイトから引用 [(Link)](https://aws.amazon.com/jp/opsworks/chefautomate/pricing/)：

>AWS OpsWorks for Chef Automate では、Chef Server に接続されているノードの数とそのノードの実行時間に基づいて課金され、Chef Server を実行している基盤となる Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに対しても課金されます。

Chef Server のメンテナンスにかかる工数から解放はされるもののChefで管理するノードに対しては、通常のインスタンス利用料に加えて Chef　機能の利用量が課金されています。
その追加料金がChefを開発・メンテするProgress社の取り分となるわけですね。

### OpsWorks Chefの今後

 **_2024年5月にサービスが終了します。_**

既に新規の契約を受け付けておらず、既存利用者に対してもサービス終了のための準備をするようにアナウンスがなされています。

https://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/opscm-eol-faqs.html

##### このサービス終了により、既存のユーザーにはどのような影響がありますか?

”コンソールまたは API を使用してサーバーを管理できなくなります。その時点で、バックアップやメンテナンスなど、サーバーの継続的な管理機能の実行を停止します。お客様への影響を最小限に抑えるため、Chef Automate サーバーをバックアップしている EC2 インスタンスを実行したままにします。”

##### どのような代替手段に移行できますか？

”AWSそしてProgress Chefは、フルマネージド型のChef Automateサービスの恩恵を引き続き受けられるように、新しいChef SaaSサービスに移行することを推奨しています。Chef SaaSを使い始めるには、Chefに連絡して、Chef SaaSアカウントの設定方法とデータとノードの移行方法に関するドキュメントを入手してください。”

（*Chef社はProgress社に買収されています）

サービス終了に伴い**Chef機能が完全に停止**してしまう様子です。しかし、全く同等の機能を提供するChefサーバーを自前で用意することで、今まで活用してきたChef機能(Cookbookやレシピなど)は、**完全に受け継ぐことが可能**です。
**自前のChefサーバー**は、OpsWorks経由ではない、EC2インスタンス上にデプロイする方法や、オンプレ環境に用意することもできます。

または、Proress社が提供する **Chef SaaS** を活用することができるようです。

## 代替案

##### ・Chef SaaS

Chefを買収したProress社が提供するChef SaaSで**OpsWorks Chefと全く同じ運用**を行うことができます。

##### ・自前でChef Server構築(クラウドorオンプレ)

自前でChef ServerをデプロイすればChef機能を継続して利用することができます。
既存のCookbookやレシピに改修は必要なく、そのまま使うことができます。

いずれにしても、Progress 社からのChefライセンスが必要になりますが、**国内代理店から取得する**ことができます。

## 問い合わせ先：

__ライセンスや技術サポートについて詳しくは、連絡先： support@chef-sec.com にお問い合わせください。__ 


ChefやInSpecは、2019年に無償の利用ができなくなっている。

https://www.chef-sec.com/chef_%e6%9c%89%e5%84%9f%e5%8c%96/

www.chef-sec.com

https://qiita.com/chef_inspec/items/56a6e8b6ac308d25c1e8
Next.js に newrelic browser-agent(npm) 入れてみた

newrelicのbrowser-agentのnpm packageが出たとのことで
Next.jsに導入してみた。つまずきポイントもいくつかあったので自分のメモも兼ねてまとめてみました。

https://zenn.dev/smpeotn/articles/e760dfaf9b839d
CDK + API Gateway + Lambda Proxy + API Key 構成でCORSを回避するためにOPTIONSだけ認証を外したい

## 課題

以下の構成でAWSリソースを作ろうとしています。

- **AWS CDK (typescript)**
    - AWS のリソースをコードで管理したい
- **Lambda**
    - FastAPI 製の API を提供したい
- **API Gateway**
    - API のエンドポイントとして提供したい
    - Lambda で提供する機能をプロキシしたい
    - API Key を設定して、アクセスを制限したい（Lambda 内でやってもいいが、できれば API Gateway で弾いておきたい…）

上記の構成を取りたい場合、以下の構成を取るのが自然です。

```tsx
const mainApi = new RestApi(this, `Api`, {
	// ...一部設定を省略
  defaultCorsPreflightOptions: {
    allowOrigins: Cors.ALL_ORIGINS,
    allowMethods: Cors.ALL_METHODS,
    allowHeaders: Cors.DEFAULT_HEADERS,
    statusCode: 200,
  },
});
const backendResource = mainApi.root.addResource("main");
const backendResourceProxy = backendResource.addProxy({
  defaultIntegration: mainBackendIntegration, // FastAPI を mangum 経由で提供している Lambda
  anyMethod: true,
  defaultMethodOptions: { apiKeyRequired: true},
});

const apiKey = mainApi.addApiKey("ApiKey", {
  apiKeyName: `example-api-key`,
});
const plan = mainApi.addUsagePlan("UsagePlan", {
  name: `example-api-usageplan`,
});
plan.addApiKey(apiKey);
plan.addApiStage({ stage: mainApi.deploymentStage });
```

しかしながら、 `apiKeyRequired: true` を指定しているため、OPTIONS もAPIキーが必須となってしまっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54003/ae26ff51-888e-0f77-a8d8-3afc5f5a4bc8.png)


OPTIONS メソッドは認証を切っておかないと、CORS 検証時のプリフライトリクエストでコケるという話があります[1]。

実際、筆者も何度か同様の問題でハマってきました。

通常、API Gateway に関数を追加する場合、１つのメソッドに対して Lambda Integration を割り当てるというやり方をしますが、今回は裏側でリクエストを解釈したいため、どうしてもプロキシを通したいのです。

しかし、ドキュメントを見ても OPTIONS のみ `apiKeyRequired` を切るというパラメータはありませんでした。

AWS の UI コンソール上で手動で切るとこの問題は解決するのですが…できれば取りたくない手段です。

## 解決策

`anyMedhod: true`とせずに、一つ一つ必要なメソッドを追加することで解決できます。

```tsx
const backendResourceProxy = backendResource.addProxy({
  defaultIntegration: props.mainBackendIntegration,
  anyMethod: false,
  defaultMethodOptions: { apiKeyRequired: false},
});
backendResourceProxy.addMethod("GET", props.mainBackendIntegration, {apiKeyRequired: true})
backendResourceProxy.addMethod("POST", props.mainBackendIntegration, {apiKeyRequired: true})
```

今回は、API 内に GET と POST しかないので、２つのみを追加しました。

ドキュメントを眺めていたら、`addProxy` メソッドで返される `ProxyResource` に `addMedhod` があることがわかり、これを使うことで GET も POST も FastAPI で設定したパスにリクエストを通すことができるようになりました。

また、OPTIONS の認証設定が外れたので、課題だった CORS のプリフライトリクエストが通らない問題も解決しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54003/fe449efb-3004-48e0-702f-9154a87af7b6.png)

その他のメソッドが必要な場合も同様に追加していくことで対応できそうです。

## 参考文献

[1] https://future-architect.github.io/articles/20200717/
未経験エンジニアが日々思っていること

# はじめに

わたしはエンジニア未経験、そしてド文系からエンジニア配属になりました。今回は、そんな素人エンジニアが日々思っていることを紹介していこうと思います。

まず、未経験でエンジニアに入るとわからないことだらけ、そして成功体験がなかなか積めない、何より「わからないことがわからない」状態になります。このような心が折れそうな状況で私が行っていたことがあります。


## Qiitaの活用
コードの意味が分からない時や、エラー内容がわからない時にはグーグルで検索していましたが、その中でよくQiitaの記事がヒットすることがあります。Qiitaの記事は、学者や専門家が書いているわけではないので初心者にも読みやすく、理解しやすいと思います。
また、エンジニア未経験からエンジニアになり活躍されている方の記事もたくさん見ることができるので、苦しいことを分かり合える気がして、少し気持ちが楽になることもあると思います。


## わからない自分を責めない
役立つ勉強法などを紹介するかと思いきや、メンタルの保ち方のお話をします。
先ほども言ったように、未経験エンジニア、特に文系出身者は右も左もわからない世界に心が病みかけるときがくるかもしれません。わたしは日々の業務の中で心がけていることは、わからない自分を責めないことです。大量のIT知識、よくわからないコマンドやコードの羅列と日々向き合い、早く成長しようとがんばっている自分を褒めてあげることが大切だと思います。当然、始めて数カ月で一人前になれるはずがありません。誰しもみんな、何かを始めるときは初心者です。そのことを忘れずに、日々の業務を行えば、少しはメンタルを保てるのかなと思います。


## 自分のわかるは相手はわからない
エンジニアで働く中で、教える/教え合う場面が多くあると思います。実際、わたしもたくさんの方々に助けてもらいながら業務を行っています。その中で、私が意識する必要があると思ったことは、自分のわかるは相手はわからないということです。「なぜこれがわからないのだろう」「この意味がわからないことがわからない」など、自分が知識があるとそう思ってしまう、思っていなくても無意識に教え方が雑になっていまうことがよくあります。しかし、常に初心を忘れずに、相手への配慮を忘れずに、教える/教え合うことで、より知識や理解は伸びていくと思います。


## 感想
これからもそろそろと頑張っていきましょう～。
PhpSpreadsheetで配色を指定する方法

# はじめに
覚書程度に。配色を指定する方法を探したがなかったので。

# 変更するファイル
phpoffice\phpspreadsheet\src\PhpSpreadsheet\Writer\Xlsx\Theme.php
96行目の$colourSchemeを変更する

# 変更内容
Hexをテーマに合わせて変更する。デフォルトは**Office2007-2010**になっている
```Theme.php
    private static $colourScheme = [
        'dk2' => '1F497D',
        'lt2' => 'EEECE1',
        'accent1' => '4F81BD',
        'accent2' => 'C0504D',
        'accent3' => '9BBB59',
        'accent4' => '8064A2',
        'accent5' => '4BACC6',
        'accent6' => 'F79646',
        'hlink' => '0000FF',
        'folHlink' => '800080',
    ];
```
・Office
|name|hex|
|:-:|:-:|
|dk2|44546A|
|lt2|E7E6E6|
|accent1|4472C4|
|accent2|ED7D31|
|accent3|A5A5A5|
|accent4|FFC000|
|accent5|5B9BD5|
|accent6|70AD47|
|hlink|0563C1|
|folHlink|954F72|

・グレースケール
|name|hex|
|:-:|:-:|
|dk2|000000|
|lt2|F8F8F8|
|accent1|DDDDDD|
|accent2|B2B2B2|
|accent3|969696|
|accent4|808080|
|accent5|5F5F5F|
|accent6|4D4D4D|
|hlink|5F5F5F|
|folHlink|919191|


あとはお調べください:raised_hand:
Laravel  nginx  404 Not Found

###  環境
windows11
Laravel 9.52.10
nginx

http://localhost:7888/practice/public/xxx　　→404 Not Found

nginxの設定ファイルを確認
```ruby:nginx.conf
	server {
		listen               7888 default_server;

		# MAMP DOCUMENT_ROOT !! Don't remove this line !!
		root                 "C:/MAMP/htdocs/";

		access_log  C:/MAMP/logs/nginx_access.log;
		error_log  C:/MAMP/logs/nginx_error.log;

		location / {
			index            index.html index.php;
		}
#～省略～#
location ~ \.php$ {
			try_files        $uri =404;
			fastcgi_pass     127.0.0.1:9100;
			fastcgi_param    SCRIPT_FILENAME $document_root$fastcgi_script_name;
			include          fastcgi_params;
		}
```
```ruby:追加したコード
location /practice/public/ {
        try_files $uri $uri/ /practice/public/index.php?$query_string;
        }
```
上記コードを追加したところ正常に稼働
ac-libraryの導入で躓いたところ

## 1 環境

2023/8/9
windows11 home 
wsl2

g++ (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0

## 2 ディレクトリ構成

syozin/
  ├ bashなどいろいろ
  ├ atcoder
  ├ .vscode
  ├ main.cpp
  ├ main
 
## 3 やりたいこと
[ac-library](https://atcoder.github.io/ac-library/document_ja/)をmain.cppで使えるようにしたい

実行だけならこの状態からmain.cppに\#include \<atcoder/all>などしてから
~~```g++ -o main main.cpp -I .```~~
```g++ -g -o main main.cpp -I .``` (2023/8/9 修正: -gがないとbreakpointで止まってくれない )
とかでできるはず (僕は実行ファイルをmainに固定してます)

###### おまけ
-I はinclude先の範囲を決めれる(?)らしい
. は全部みたいな意味だったような

あと公式ドキュメントでは
>-std=c++14か-std=c++17をつけてコンパイルする必要があります。

といっています
僕はなくてもできました

## 4 問題
f5デバッグができねえ

エラー：fatal error: atcoder/all: No such file or directory

includeがgdbでうまくいってない？

## 5 解決
launch.jsonでなぜかデバッガーの構成とかが入ってなかった
c/c++: (gdb) Launchを入れました
```launch.json
{
    "version": "0.2.0",
    "configurations": [

        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/main",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]
        }

    ]
}
```
僕はコンパイル先はmainファイルで固定なので、上の"program"はこんなかんじにしてます
他も適宜変更してください


## 6 まとめ
しょ、初歩的なことでしたね;;
おまけ欄は適当です
[MR Dev Tips #9] Visual Studio Tools for Unity を使って Unity C# スクリプトに ブレークポイント を設定する方法

# はじめに
HoloLens 2 Dev Tips シリーズを始めて、9回目の記事は「Visual Studio Tools for Unity」を使用して、Unity スクリプトにブレークポイントを設定する方法をご紹介したいと思います。先週、Visual Studio Code 向けの Unity 拡張 (プレビュー) がリリースされ、Unity 2021 以降から使用できるようです。興味がある方は [「Visual Studio Code」にも「Unity」拡張機能、Microsoftがプレビューリリース](https://forest.watch.impress.co.jp/docs/news/1521609.html) の記事も参考になるかと思います。
 
# 前提条件
- Visual Studio 2022 インストール済みであること

# 検証環境
- Visual Studio 2022 (17.1.3)
- Unity 2020.3.48f1

# 手順
まず Visual Studio 2022 に 「Unityによるゲーム開発」のワークロードがインストールされているか確認してください。まだ、インストールされていない場合は、インストールする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/58d973a2-83fd-b570-88f6-7f736bb2bb2c.png)

Unity の Preferences (環境設定) を開いて、Visual Studio を既定のスクリプトエディターに設定します。``Edit > Preferences`` を開きます。``External Tools`` タブを開き、External Script Editor を Visual Studio Community 2022 に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/5435e269-1666-35fa-f847-275ba6dfc58f.png)

Unity の パッケージマネージャーを使って「Visual Studio Editor」の拡張パッケージをインストールします。新しいバージョンが使用可能な場合は、更新をかけておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/4aafb8a0-e7b7-e0b7-ee72-f1246cfa1915.png)

``Assets > Open C# Project`` を選択して、Visual Studio 2022 を起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/40b2e979-752d-486b-09b9-474bb54182c3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/7877b288-12a6-55b3-e3e2-077a986b5146.png)

``表示 > Unity プロジェクトエクスプローラー`` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/f8a2b3e1-14b1-d0a3-ba08-8d89dd36a983.png)

Unity プロジェクトエクスプローラーが開くと、Assets フォルダ配下を確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/5a4c74bf-c73a-f18c-f2a2-031dd03e519e.png)

Assets フォルダ内の適当なスクリプトを開いて、ブレークポイントを設定します。設定方法は、ソースコードの行番号の左端の部分をクリックするだけです。ブレークポイントの設定が終わったら **「Unity にアタッチ」** ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/afccddfe-0401-1689-6b14-d5f811f6abc4.png)

Unity Editor 画面で Play Mode に入ります。今回は、MRTK の Pressable Button を押すと、RecorderSample クラスの recording() が実行されるように設定されており、メソッドの1行目をブレークポイントとして設定しています。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/0d3ec859-183d-67b3-f7cb-7d0d9bfcf37a.png)

再び、Visual Studio に戻ってくると、設定したブレークポイントで処理が停止していることが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/850d0ec1-d9ce-cc7c-81d4-a07a1ed8bf67.png)

処理を続行する場合は、Visual Studio の **[続行]** ボタンをクリックすることで、後続の処理が走ります。Visual Studio では、メンバ変数に格納されているデータの中身も見ることができます。ということで、Visual Studio を使って Unity C# スクリプトにブレークポイントを設定する方法でしたー！





# Refs
- [クイックスタート: Unity を使ったクロスプラットフォーム開発のための Visual Studio の構成](https://learn.microsoft.com/ja-jp/visualstudio/gamedev/unity/get-started/getting-started-with-visual-studio-tools-for-unity?pivots=windows)
【仕事の秘訣】問題検知についての気づき

こんにちは！

改善で問題検知についてチームで議論しているときにハッとした発見があったので記事に書くことにしました。
みなさんの参考になれば幸いです！

## 気付き

### 振り返りにて
「チームが問題を認識するのが遅れて対応も後手に回った。問題を早期検知、早期対応していこう！」

### 次のスプリントで
「このスプリントでも問題の検知が遅れた。なぜ？」
「問題と言っているものがメンバーで微妙に違うみたいだぞ？」


### 発見
よくよく聞いてみると、問題と認識している段階が人によって異なっていることを発見しました。


<br/><br/>

## どういうこと？

図にしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487048/33beaf57-61a0-6c6d-3002-5bdc2e190b84.png)

仕事のコントロールが上手い人ほど早い段階を問題と言う傾向のようです。

<br/><br/>

あなたは、朝会での「スプリントゴール達成できそうですか？ 達成のための障害はありませんか？」に対して、どの段階でどのように答えますか？

- 順調 順調 ♪
- 若干ハマって少し遅れたけど全然大丈夫！
- 少し遅れてきたけど頑張れば取り返せる！
- 遅れてるけど残業して頑張ればリカバリー可能だと思う。
- 最悪 他のメンバーに助けてもらえればリカバリー可能だと思う。
- 明日、スプリント最終日、もうリカバリー不可能。

## まとめ

- 早期検知、早期対応(= シフトレフト ) の話をする前に問題の段階をチームで共通認識化しておこう！
- 共通認識化した上でチームとしてシフトレフトに取り組もう！
- 問題対応に追われず、本来やるべきことに注力しよう！
Ruby でクラスオブジェクト同士を比較するときは case ではなく if を使う

### ハマったこと

Ruby でクラス同士を比較するときに case 文だとうまくいかない

例えば User クラスがあったとして、それを case 文で判定したいとする

```ruby
user = User
case user
when User
  puts "User クラスです"
else
  puts "User クラスではありません"
end
```

奇妙なことに出力されるのは **"User クラスではありません"** という文章になります

### 原因
case では内部で比較演算子 `===` が使われている

これがクラスを比較する場合、演算子の左側にインスタンスが置かれることを要求しているので以下の文は false になります

```ruby
> user = User
> user === User
=> false
```

逆に `==` 演算子であれば true になります

```ruby
> user == User
=> true
```

[公式のドキュメント](https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html)を見たら確かに以下のような記述がありました
> case は一つの式に対する一致判定による分岐を行います。when 節で指定された値と最初の式を評価した結果とを演算子 === を用いて比較して、一致する場合には when 節の本体を評価します。

### 解決方法
:::note info
クラスオブジェクト同士を比較する場合は **case** ではなく **if** を使う
:::

シンプルですがこれで解決です

比較の際には `==` 演算子を使うようにしてください

```ruby
user = User
if user == User
  puts "User クラスです"
else
  puts "User クラスではありません"
end
```

こうすれば正しく "User クラスです" と出力されます

:::note warn
インスタンスとクラスを比較する場合は通常通り `===`を使うか `class` メソッドを使って比較してください
:::

```ruby
user = User.new # この場合 user は User クラスのインスタンス
if user.class == User
  puts "User クラスのインスタンスです"
end
```

インスタンスとクラスを比較したい場合は他にも `is_a?`, `kind_of?`, `instance_of?` などが使えます

### 蛇足
これまで30年生きてきて、ifとcaseは同じものだと思っていましたが、少なくとも ruby では違うようです

if と case の使い分けは単に条件式をきれいに書きたいかどうかだと思ってたのですが、こんな差異もあるんだなぁという学びを得ました
プリザンターのパラメータJSONファイルをCSV化してExcelの設定値一覧を作成する

## 概要
プリザンターのパラメータJSONファイルをCSV化するツールを作成してみました。変更管理などを目的としたExcelでのパラメータ設定値一覧を簡単に作成することができます。

本記事では、以下のようなExcelの設定値一覧を作成する手順を説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/e26cb7f9-94f9-9974-e57a-36f700d3e5fc.png)

Excelの設定値一覧は以下のような利用シーンを想定しています。

・既定値から変更を行ったパラメータの設定値を確認する。
・バージョンアップ前後のパラメータの設定値の差異を確認する。
・複数環境（開発環境と本番環境など）のパラメータの設定値の差異を確認する。

### 作成手順
#### 1. パラメータJSONファイルをCSV化する

以下のリポジトリのREADMEを参考に、パラメータJSONファイルをCSV化します。

https://github.com/implem-noro/PlstParamJsonToCsv

:::note warn
チェック用のスクリプトも上記リポジトリに置いていますので必要に応じてご利用ください。
:::

このリポジトリの「PlstParamJsonToCsv.ps1」を実行すると、以下のようなJSONファイルが

```json:Api.json
{
    "Version": 1.1,
    "Enabled": true,
    "PageSize": 200,
    "LimitPerSite": 0,
    "Compatibility_1_3_12": false
}
```

こんな感じに変換されます。

```text:Output.csv（抜粋）
Api.json,Version,1.1
Api.json,Enabled,true
Api.json,PageSize,200
Api.json,LimitPerSite,0
Api.json,Compatibility_1_3_12,false
```

#### 2. CSVファイルからExcelファイルを作成する

1. 変更前のパラメータJSONファイルをツールでCSV化します。（ファイルA）
1. Excelを起動します。
1. 左上のメニュー -> [データ] -> [テキストまたは CSV から] を選択します。
1. [データの取り込み] 画面でファイルAの「Output.csv」を選択し、[インポート] を押下します。
1. [インポート] の確認画面で [読み込み] を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/7c4c51a7-477d-b69c-e12c-fa7c2c93ec58.png)

1. 変更後のパラメータJSONファイルをツールでCSV化します。（ファイルB）
1. ファイルAと同様の手順でファイルBについてもデータのインポートを行います。
1. 1シートに必要な列をまとめます。
1. 罫線、ヘッダ、セルの色、関数、条件付き書式などを設定します。

**作成イメージ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/e26cb7f9-94f9-9974-e57a-36f700d3e5fc.png)

これで既定値から変更しているパラメータ設定値や2環境で設定が異なるパラメータ設定値をフィルタできるので、変更点に着目して確認することができますね。

**補足**
関数は以下のように設定しています。単純に2つのセルを比較しているだけです。
```text:F3セルに設定するる関数
=IF(EXACT(C3,D3),"なし","あり")
```

変更有が「あり」の色付けは条件付き書式で設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/37dd123f-9684-4831-f885-1bd4f356e4e8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/03d75e7b-81f0-4b62-3bd1-cf61a4ecab68.png)

## おわりに
プリザンターはパラメータで柔軟な設定ができる一方で、パラメータファイルや設定値の数が多いため、手作業でJSONファイルをExcelに変換しようとするととても時間がかかってしまいます。自分だけが確認する場合はWinMergeなどの差分比較ツールで事足りる場面もありますが、上長やお客様など他者のレビューが必要な場合に一覧化した資料を提示しなければいけない場面もあると思います。パラメータ設定値を一覧形式でドキュメント管理しておきたい場合や、複数結果の差分確認をしたい場合に便利なので使ってみてください。

## 参考リンク
[- implem-noro/PlstParamJsonToCsv](https://github.com/implem-noro/PlstParamJsonToCsv)
[- tomnomnom/gron: Make JSON greppable!](https://github.com/tomnomnom/gron)
RailsでActiveRecord::InvalidForeignKeyエラーが発生したときの解決策

## はじめに
Railsを学ぶ中で、データベースの外部キー制約に関連するエラーに出会うことは珍しくありません。この記事では、私が遭遇したActiveRecord::InvalidForeignKeyエラーとその解決方法を共有します。


## 背景
フロントをVue.js/Vuetifyで、サーバーサイドをRailsで、SPAの予定管理アプリを作っていて、その中の通知機能を作成中に生じたエラーです。


## エラーの内容
以下のようなエラーメッセージがターミナルログで出力されました。

~~~
ActiveRecord::InvalidForeignKey (PG::ForeignKeyViolation: ERROR:  update or delete on table "events" violates foreign key constraint "fk_rails_78f4b5a537" on table "notifications" DETAIL:  Key (id)=(334) is still referenced from table "notifications".)
~~~

このエラーメッセージから以下の点が読み取れます。

・eventsテーブルのレコードを削除しようとした際にエラーが発生。
・notificationsテーブルがeventsテーブルに対する外部キー制約を持っている。
・該当のeventsテーブルのレコードを削除しようとすると、notificationsテーブルとの関連性で問題が生じる。

## 解決策
1. カスケード削除
eventsテーブルのレコードを削除する際に関連するnotificationsテーブルのレコードも自動的に削除します。

~~~
class Event < ApplicationRecord
  has_many :notifications, dependent: :destroy
end
~~~

2. 関連するレコードを先に削除
イベントを削除する前に、そのイベントに関連するnotificationsのレコードを手動で削除します。これは、コントローラのdestroyアクション内で実装できます。
~~~
def destroy
  @event = Event.find(params[:id])
  @event.notifications.destroy_all
  @event.destroy
end
~~~

## 注意点
データの不整合や意図しないデータの削除を防ぐため、実際にコードを変更する前にバックアップを取るなどの対策を行ってください。
テスト環境で動作確認をしっかりと行うことが重要です。

## まとめ
外部キー制約に関するエラーは、Rails開発中によく遭遇するエラーの一つです。エラーメッセージをしっかりと読読み解き、適切な対応を行うことで解決の糸口となります。
AZ-104更新完了、これであと1年は安心モード

こんにちは。

今回はMicrosoftの認定資格である「AZ-104」の更新テストを受けてみたことについて投稿します。
まだAZ-104取得した時の嬉しさがまだ心に残っているのに、MSから「おいおい、早く更新しろー」というメールを受けてしまいました、、

メールのタイトルが
「アクションが必要です - Microsoft 認定資格は 180 日後に期限切れになります!」
でした、、めっちゃせっかちですよね（笑）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885338/ef1461f2-3bd6-c767-f2d0-9513947eafcd.png)

### 試験情報
ということで、更新テストに関して簡単にまとめてみました。
* 何回、テストを受けても無料
* １・２回目まではすぐ受験できるが、３回目からはテストが終わってから２４時間以後に受験可能
* 資格の有効期限から６か月以内に合格する必要がある
* ２８問（要確認）、４５分制限（テスト時にはカウントダウンが見当たらない！）
* １００％客観式問題、一つ選択・複数選択あり
* １ページあたり１問
* １回、回答を選択して「次に」ボタンを押すと、元の問題に戻れない
* 正解率４２％以上になると、合格！
* 合格すると、有効期限から＋1年なる

[Microsoft認定資格の更新](https://learn.microsoft.com/ja-jp/certifications/renew-your-microsoft-certification "Microsoft認定資格の更新")

### とりあえず、勉強しよう
更新ページには以下の案内がありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885338/57872511-8e7b-ca1a-87e9-512afab23ed4.png)
テスト問題の範囲だと見られる７つのモジュールがあったので、これを中心に勉強しました。

### 失敗、そして成功
ブラウザはMSにやさしいEdgeにしました。
まあ、１発で合格できなくても何回も受けられるし、無料だから軽く受けてみようとしてテストに入りました。

やってみると、問題は簡単に見えるが、全然わからんっ OTL
1年も経っていないのに頭の中はもう真っ白でした。
結果はやっぱりFailed、、

２回目からはテスト結果のレポートから点数が取れなかったモジュールを中心に勉強しました。
あと、前回に出てた問題が次回のテストで出たりしていたため、当時に知らなかったキーワードでググって内容をまとめました。

最終的に合格を取れました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885338/22f78a73-d1a8-6582-e659-2c38c6382a2e.png)

### 感想
テスト時間４５分もあるので焦らなくても最後まで進められる感じでした。ゆっくり考えながらマイペースでも問題ないぐらいでした。（ただ、残り時間が表示されないので、パソコンの時間をチラ見しながらチェックした方がいいですね）
問題の難易度も気軽く解けるレベルではないのですが、そもそも合格のハードルが４２％以上なので、最悪の場合、試験で出てた問題の中で、知らないキーワードを覚えておいて対策を立てるのもいいと思います。
とりあえず、1回目のテストは軽く受けてみるのをお勧めします。
「地球」に感動した初アプリ公開の思い出

## 用賀じゅんちゃんおじさん（すずきじゅんじ）自己紹介

![スクリーンショット 2023-08-06 9.32.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196881/51ef1fcf-a3cb-32cc-ce0f-b5b98f768427.png)

:::note
私は個人でアプリ開発をしながら毎日 世田谷区で【交通安全 みまもり ゴミ拾い】活動を行っています。
:::


https://junji.jp/pick-up-litter/



## はじめての世界デビュー App Storeでのアプリ初公開

はじめて自分の作ったアプリを Apple の App Storeで公開してから 10年以上が経ちます。

「app store」って、なんて読むのかな？ Apple と app じゃ まぎらわしいなあ。
お金がなくてiPhone実機が買えないから、iPod touch で代用しよう。
そんな時代でした。

私が最初に公開したアプリはiPhone用「筆記体手書き文字認識」のアプリでした。処理速度の関係で Objective-C に加え一部 C言語 でプログラムを書いたりしていました。

App Store への登録もひと苦労でしたがなんとかアプリ申請して、レビュー（アプリ審査）に合格し、あとは世界に100以上ある国別のアプリストア窓口から（当時は iTunes App Store）アプリが配信されるのを待つだけの状態になりました。
当時は、開発者が有名無名に関わらずほとんどの場合、App Store の「カテゴリ」別のトップページに「新着アプリ」のアイコンを載せて紹介してくれました。（日本だけでなく、英国やアメリカでも。とても公平に感じました。ただし同じ日にリリースされた新着アプリが多すぎるとページに入りきらないこともありました。） 



## いまもおぼえている大きな感動

App Store でアプリを世界向けに公開すると、すべての国と地域（2023年現在175の国と地域。当時は約150カ国）で同時に配信がスタートします。そして、開発者としてとても張り合いがあることに、その翌日から毎日それぞれの国で自分のつくったアプリが何本ダウンロードされたかの集計を開発者ページで簡単に確認できる仕組みになっています。

自信と不安。わくわくする気持ちと緊張する気持ち。
さあ、自分のつくったアプリは世界に通用するのか？
世界のどの国のひとが、何本くらい使ってくれるのか？

そして、ついに配信開始から24時間後に最初の集計データが 開発者管理ページ iTunes Connect（App Store Connectの旧名称）に表示されはじめました！


公開初日のダウンロード数 集計
| 国名 | ダウンロード数 |
|:-----------|------------:|
| アメリカ       | 20     |
| イギリス     | 0      |
| カナダ       | 15        |
| フランス       | 0        |
| メキシコ       | 12        |
| ドイツ       | 0        |
| ブラジル      | 7        |

うれしい！　自分のつくったアプリが現実に世界で配信されて、実際にためしてくれた、使ってくれた見ず知らずの外国に住んでいる人たちがこんなにもいるんだ！

ふむふむ。
やっぱりアメリカは iPhoneユーザーが多いし、英語圏だから使ってくれる人が多いのかな。
イギリスは 気むずかしい人や保守的なひとが多そうだから新しいアプリにとびついたりしないのかな。
メキシコは 英語をつかう人も多いからためしてくれたのかな。
フランスは おしゃれな人が多いから デザインがよくないと興味をもたれないのかな。
ブラジルは 新しいアプリがでるとなんでもラテンの血がさわいでためしてくれるのかな。

 **そのとき、はっと、気がついたのです。** 

わたしの頭の中に浮かんだのは、自分がむかし 小学生だったころ国語の教科書に載っていた谷川俊太郎というひとの書いた『朝のリレー』という詩です。

じぶんでも驚くほどはっきりと「記憶のひきだし」がひらいて、その詩をはじめて読んだ時 じぶんのあたまのなかに思い浮かんだイメージ（映像）が、よみがえってきました。

わかりやすく言うと、映画会社のさいしょにながれる映像
　https://www.youtube.com/watch?v=PvKiWRTSAzg

　



**地球は丸かった！！**


これまで飛行機に乗って海外旅行もしたし、日付変更線をこえたことも何度もありましたが、「地球が丸い」ということをリアルに まざまざと意識させられ実感したのは、人生でこれがはじめての体験でした。

地球は丸い。
その丸い地球の表面に、自転する地軸にたいして「縦ならび」に、カナダ、アメリカ、メキシコ、ブラジルという「国」が存在している。
知識としては知っていても、かつて一度もまじめにそのことを意識したり、知覚したことがなかった。
そのことを App Storeは 日本に住む個人開発者の私に教えてくれました。

これが、はじめての世界向けアプリ公開でわたしが一番に学んだことです。

　

## 個人開発、自分でつくることのおもしろさ

自分でなにかを つくること、生み出すこと、の よろこび、たのしみ は多くのひとが話していくれているのでここでは書きません。
つくることで、自分をきたえたり、自分で自分を成長させたり、自分に自信をもたせてくれることもあります。
はじめから完璧なものなどできないし、はじめからなんでも完璧にできるひともいません。
あせらないで、ゆっくり、のんびり、一歩づつ。自分のちからにあわせて正直に。


## 【ＨＳＰプログラムコンテスト2023】開催中

だれでも参加できる **国産プログラム言語 HSP3** のプログラムコンテストです。応募作品は、募集期間途中でもだれでもダウンロードして遊べます。意見感想コメントなども随時書き込めます。 HSPで作った作品なら他コンテストへの重複応募や、むかし作ったプログラムのアップデート再投稿も可能です

https://hsp.tv/contest2023/



## 以上。

用賀じゅんちゃんおじさん（すずきじゅんじ）の 夏休みポエムでした。


:::note warn
本記事さいしょの「ユニット数キャプチャ画像」は本物です。記事本文中の「公開初日のダウンロード数」は、だいたいの記憶で書いたおおよその数字です。
:::
Bunでプライベートレジストリからnpmパッケージをインストールする方法

# 2024-07-04追記

Bum v1.1.18で`.npmrc`がサポートされました :tada: 

https://bun.sh/blog/bun-v1.1.18#npmrc-support

# バージョン
- Bun v0.7.3

# 問題
Bunは`.npmrc`に対応していないので別途設定をしないとプライベートレジストリからnpmパッケージをインストールすることができない。

https://github.com/oven-sh/bun/issues/643

# 対応方法
プロジェクトルートに`bunfig.toml`またはグローバルに適用させたい場合は`$HOME/.bunfig.toml`を作成する。

```toml:bunfig.toml
[install.scopes]
"@my-org-name" = { token = "your_token", url = "https://npm.pkg.github.com" }
```

# 参考
https://bun.sh/docs/install/registries

https://bun.sh/docs/runtime/configuration#private-scopes-and-registries
【Python】構築不可能なお金

# 作るもの
与えられた整数のリスト（コインの額面）を使用して作成できない最小のお金の額を計算する関数。

# 実装
```non-constructible_change.py
def nonConstructibleChange(coins):
    # コインの額面を昇順にソートする
    coins.sort()

    # コインを使って作成できる最小のお金の額を表す変数を初期化
    minimum_change = 0

    # ソートされたコインのリストを順に走査
    for coin in coins:
        # 現在のコインの額面が、最小のお金の額に1を加えたものよりも大きい場合、ループを終了
        if coin > minimum_change + 1:
            break

        # 現在のコインの額面を最小のお金の額に加えることで更新
        minimum_change += coin

    # 最小のお金の額に1を加えた値を返す
    return minimum_change + 1

# テスト
if __name__ == "__main__":
    coins = [6, 4, 5, 1, 1, 8, 9]
    print(nonConstructibleChange(coins))
```

# 参考
https://www.algoexpert.io