OmniAICreator/Qiita-1.07M huggingface dataset:
平凡な人間でもフロー状態になるための集中力の高め方

## はじめに
AWS認定資格やAzureのエキスパート資格など全て保有しているのですが、最近、資格の更新処理が立て続けとなっており、集中力維持が困難になってきたので、改めて、集中力を維持するためには、何をしなくてはならないのかを振り返ってみました。**集中力の維持に戸惑っている人向けの記事**となります。ご参考になりましたら、幸いです。

## 集中力維持の難しさ
集中力の差が、ここぞというときに結果を出せる人と出せない人を分ける。
ゾーンとは「超集中状態」のことで、いかにして入れるのかが重要である。
私を含め、仕事や勉強に集中できないと嘆く人は多いと思います。

## 室伏さんの場合
年齢的な課題に直面した室伏さんは、量より質を重視したトレーニングに切り替え、「新聞紙を片手で丸める」エクササイズなど、集中力を必要とするトレーニングを考案しました。

**本に記載されていたトピック**

・人間が本来持っている感覚を呼び覚ますことで、身体を整え強くすることができる。
・感覚と客観的評価のバランスが重要。
・全身の力を集中させる訓練を通じて、限界を超えた力を生み出すことができる。

#### 集中力の高め方

**室伏さんの場合、ハンマーを磨く事で、常時、注意がそこにフォーカスするようにして、メダルを取った時も、常日頃と変わらないような極限の集中力を獲得した。**

余計なものに意識を取られないように整理する。**虚室生白** 心を空にして無の状態にする。
集中すべきものに集中し続ける為に、フォーカスすべきものに感覚を使う。
先入観を消し去り、無の状態で物事に取り組むことで、潜在能力を最大限に引き出す。



**虚室生白**は、心を空にして無の状態にすることで、真実や本質が見えてくるという教え。この考え方は、集中力の向上、創造性の発揮、ストレスの軽減など、現代の生活や仕事においても非常に有用。

**虚室（きょしつ）** 空っぽの部屋、何もない状態を指します。
**生白（せいはく）** 白い光が生まれる、明るくなることを指します。

この言葉は、心を無にして先入観や偏見を取り除くことで、真実や本質が自然と見えてくるという教えを表す。心を空にすることで、外部からの影響を受けずに純粋な状態で物事を観察し、理解することができるという考え方。

詳しくは、下記の記事や本を読んでみて下さい。

https://shinsho.shueisha.co.jp/kikan/0905-c/

https://bunshun.jp/articles/-/4945

### 平凡な我々がやれること

**試しに、散らかったデスクを整理してみてください。それだけでも、効果があると思います。**

## 集中力が続いている状態とは？　
フローの考え方は、心理学者ミハイ・チクセントミハイ（Mihaly Csikszentmihalyi）によって提唱された概念で、完全に活動に没頭し、時間や自我を忘れるほどの集中状態を指します。この状態は、個人が自分のスキルと挑戦する活動の難易度が完全に一致するときに生じるとされています。簡単過ぎても、難しすぎても、フローは維持出来ないようです。なので、常に工夫を怠らないようにしないとならないようです。

**フローの特徴**
フロー状態にあるとき、人は次のような特徴を経験するとされています

1. **完全な集中** 活動に対する集中が高まり、周囲の環境や**雑念**からの気晴らしがなくなります。
2. **明確な目標** 行動の**目的が明確**であり、何をすべきかがはっきりしています。
3. **即時のフィードバック** 行動の**結果に対する直接的なフィードバックが得られ**、自分のパフォーマンスを即座に調整できます。
4. **活動と自己の境界の消失** 自己と活動が一体化し、自我意識が薄れることがあります。
5. **時間の歪み** 時間の感覚が変化し、時間が経つのを忘れることがあります。
6. **努力の感覚の消失** 活動が自然で無理なく行えるように感じられます。
7. **自己表現の自由** 自分の能力を最大限に発揮できると感じ、自己実現の感覚を得られます。


**フロー状態を達成するための条件**

:::note info
1. **スキルと挑戦のバランス** 個人のスキルレベルと**活動の難易度が適切に一致**していること。
2. **自己効力感** 自分が活動を**コントロール**できるという信念があること。
3. **自主性** 活動が自分の意志によって選択され、**外部からの強制ではない**こと。

**コツは、やりたいと思い続けられること**
:::

**フローの応用**
フローの概念は、教育、スポーツ、仕事、芸術など、さまざまな分野で応用されています。例えば、教育では学習者がフロー状態に達するような教材やカリキュラムの設計が行われ、スポーツでは選手が最高のパフォーマンスを発揮するためにフロー状態を目指します。また、職場では従業員が仕事に没頭し、高い生産性を達成するためにフローを促進する環境が整備されています。

#### フローの考え方は、個人が自己実現を達成し、充実感を感じるための重要な要素とされており、人々がより幸福で満足のいく生活を送るための鍵となっています。
X(Twitter)の文字数制限とURLの処理

# はじめに

投稿系のポートフォリオを作るにあたり、文字数制限を決める基準に悩みました。

私が一番使用しているX(Twitter)は**140文字制限**ですが、これはなぜでしょうか。

# 140文字の理由

https://developer.x.com/en/docs/counting-characters

:::note
SMSが理由

X(Twitter)はもともと、SMSベースのサービスとして始まったようです。

SMSは160文字の制限があります。
そのうち20文字をユーザー名とコマンド用に予約したため、140文字が投稿本文として使えるようになりました。
:::

:::note
現在は「全角140文字」「半角280文字」

2017年 文字数に変更があり「半角は280文字」になりました。
日本語等、全角の入力はもともと140文字で、変わらず140文字のままです。
:::

:::note warn
余談ですが、SMSの文字数制限は「半角160文字（全角70文字）」です。
SMSベースだったということは、昔のX(Twitter)は全角70文字未満だったのでしょうか。
それとも、SMSベースからの脱却が日本語投稿より先だったのでしょうか。
どちらにしろ聞いたことがない話で、気になります。
:::

:::note alert
140文字に対する不満

今でこそ140文字が当たり前ですが、140文字は少ないという不満が多かったようです。

[この記事](https://www.fastcompany.com/3060165/a-brief-history-of-twitters-140-character-limit)では、その歴史が示されています。
:::

# リンク短縮：`t.co`リンク
:::note
140文字を超えるURL
`https://x.com` + 140文字 のURLですが、カウントにはまだまだ余裕があります。
![スクリーンショット 2024-07-08 11.04.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/f2dcedd8-092a-a0c4-607d-cbfbf273c42b.png)
:::
:::note
X(Twitter)では、URLリンクは23文字としてカウントされます。
これは、内部的に23文字のリンク（`t.co`リンク）に変換されるためです。
`t.co`はX(Twitter)固有の短縮リンクです。
:::
:::note
t.coリンクのメリット
- URLリンクを固定長に圧縮できる
- リンククリックなどの解析ができる
- セキュリティが向上する
:::
:::note
`t.co`リンクを確認する方法
「リンクのアドレスをコピー」で確認できます
（`https://t.co/Jo2fQdPDkz` / 23文字）
![スクリーンショット 2024-07-08 11.01.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/459df3c3-b4a6-1447-2c09-4e2e254e2a27.png)
:::
:::note warn
2014年の情報ですが、`t.co`にもデメリットがあり、これを回避する方法もあるようです。
> リダイレクトが発生したり、サイトが移転した場合にリンク先を追従できないことがあったりというデメリットもあり。

[Twitter公式の強制短縮URL「t.co」を踏まずに本当のリンク先を直接クリックできる「t.coバイパス」をChrome・Firefoxに設定する方法](https://gigazine.net/news/20140723-twitter-t-co-bypass/)
:::
:::note alert
Google検索すると「22文字」という情報が出てきますが、「23文字」が正しいです。
![スクリーンショット 2024-07-07 18.02.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/3a311ae4-749f-b369-93a7-30352c81ff51.png)
[X(Twitter)公式](https://help.x.com/ja/using-x/how-to-post-a-link)でも23文字と説明されています。

> リンクの長さが23文字未満であっても、あらゆる長さのリンクが23文字に変換されます。この23文字はツイートの文字数にカウントされます。
:::


# 余談：`t.co`と`bit.ly`

`t.co`はX(Twitter)固有の機能ですが、`bitly`というサードパーティの短縮URLサービスもあります。


> ・そのまま貼り付けてしまうとURLが長すぎて文字数制限に引っかかってしまう。
・どのSNSから該当のページにアクセスされたのか知りたい。
・商品をいろんな人に宣伝してもらった時、誰からのアクセスが多いか知りたい。

https://qiita.com/mame3/items/a0fab1e43d0e82d254fd
API Gateway で転送したサーバでリクエスト元のIPアドレスを取得

さくらインターネットのレンタルサーバでPHPを使って小規模なAPIサーバを作成しています。
このAPIサーバに対して、AWSのAPI GatewayのHTTP統合を利用してリクエストを転送しています。
わけあって、APIサーバでリクエスト元のIPアドレスを制限する必要が生じましたが、`$_SERVER["REMOTE_ADDR"]`ではAPI GatewayのIPアドレスが取得されてしまいます。そこで、簡易的に実際のクライアントのIPアドレスを取得する方法を記録しておきます。

`$_SERVER`変数を確認すると、`$_SERVER["HTTP_FORWARDED"]`にリクエスト元のIPアドレスが含まれていたため、これを利用することにしました。


```
 ["HTTP_FORWARDED"]=> string(92) "by=3.235.35.99;for=11.22.33.44;host=hogehoge.execute-api.us-east-1.amazonaws.com;proto=https"

```

`for=11.22.33.44` がクライアントの実際のIPアドレスです。
ここから以下のようにしてIPアドレスを取得するようにしました。

```php
if (preg_match('/for=([0-9.]+)/', $_SERVER["HTTP_FORWARDED"], $matches)) {
    $ip = $matches[1];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}
```
Stop using MVVM for SwiftUI - MVVM のテンプレートを作ってみよう

以下、コードの構成について考えることができるスレになってませんかね。

https://developer.apple.com/forums/thread/699003

https://qiita.com/karamage/items/8a9c76caff187d3eb838

私は、

「Swift なら ViewModel を捨てることができる。」

そう思いながら Swift に入門しました。

https://android.benigumo.com/20240106/swiftdata-query/

# 🧑🏻‍💻 MVVM をやってみるきっかけ

なんとなく、SwiftData の雰囲気を見てると微妙な感じがしています。

いまいち ```@Query``` が、意図通りに、自在にならない。

```ModelContext.fetch()``` など使ってみるといろんなことができるので、

```@Observable``` クラスを使うといいかな、

と思いながら試していると、

Swift6 など将来的な話でそれはメインスレッド強制方向へ。

https://android.benigumo.com/20240707/good-bye-view-model/

なので少し MVVM で考えてみよう、

MVC、MVP と WEB、スマホOSを経験してきた私がまとめてみたい。

# 🧑🏻‍💻 MVVM の考え方

概要は以下。

https://ja.wikipedia.org/wiki/Model_View_ViewModel

View 側からそれを構成するデータの変更を監視する、いわゆる```Observer Pattern``` が中心にある。

https://ja.wikipedia.org/wiki/Observer_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

めんどくさいので図で書く。

![sc 2024-07-08 at 21.29.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/cb33c1d9-11eb-12ff-80d3-9d3c4e32321b.png)

ユーザーの操作を受け付ける ```View``` から ```ViewModel``` に通知することで、

各 ```Repository``` のデータを変更する。

```View``` 側ではそれを検知して勝手に更新する。

こまごま違いはあるがそれが大筋。

https://android.benigumo.com/20190727/presentation-model-vs-mvvm/

https://github.com/android/architecture-samples

https://android.benigumo.com/20190731/service-locator-vs-di/

https://android.benigumo.com/20211209/mvvm-hilt/

```Repository``` というのは、MVVM でいうところの ```M(Model)``` と思ってよい。

# 🧑🏻‍💻 どうなのでしょうか

少しあれこれ公開されてる SwiftUI ベースのコードを見ながら思いました。

https://x.com/maochanz/status/1818220278469767218

**(更新中... ストックしておくと更新通知がきます)**


# 🧑🏻‍💻 参考

https://x.com/maochanz/status/1810677730763210801
【備忘録】ESXiとL3SW間でチーミング（LAG）がうまくいかなかった件

# 【環境】
##### 仮想基盤：ESXi 8系（Standard版）
ESXi環境のネットワークの設定箇所：
・ポートグループ
・仮想スイッチ
・VMkernel NIC

##### L3SW：Catalyst 9200L
物理Switch側の設定箇所：
・対象の2ポートを静的ポートチャネル(mode on)
・Trunkモード
・ポート/チャネル No Shutdown

# 【問題】
ESXiとL3SW間でチーミング設定を行った。その後、障害テストとして冗長化された2本のLANケーブルの抜き差しを実施。1本のみ接続しているときは通信に問題はないが、2本接続すると通信が不安定になる。

# 【調査】
・L3SW側
　- チャネル設定確認
　-  リンク状態
　-  ESXiとの疎通確認

・ESXi側
　- ポートグループ設定
　- 仮想スイッチ設定
　- VMkernel NIC設定

# 【原因】
チーミング状態で通信が不安定だった原因は、仮想スイッチとポートグループのNICチーミングにおけるロードバランシング設定の差異によるものだった。

【vSwitch設定内容】
![vSwitch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/de8a754a-32b5-5105-759f-986c703fb033.png)

【ポートグループ設定内容】
![ポートグループ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/6abc6127-a4ac-f4d9-0125-0e5d8a9dfb29.png)

# 【対応】
ポートグループのNICチーミングにおけるロードバランシング設定を「vSwitchから継承」に変更した。



# 【チーミング設定で参考にしたサイト】
・ [**【朝から昼寝】ESXiサーバのLAG設定**](https://happynap.net/2022-05-08-213058/)
・ [**【VMware Docs】構成 4：静的 LACP – IP ハッシュに基づいたルート**](https://docs.vmware.com/jp/VMware-vSphere/7.0/vsan-network-design-guide/GUID-4A9C5F54-3DB1-41ED-84CA-E10B0C89B1BB.html)
・ [**基礎から学ぶ！vSphere 8.0  第4回 ネットワークの設定（標準仮想スイッチ）**](https://licensecounter.jp/engineer-voice/blog/articles/20231024_kiso_vsphere8_4_vss.html)


# 【その他】
・ [**【VMWare ESXi】図解 NICチーミングの種類と動作概要**](https://hirotanoblog.com/vmware-esxi-nic-teaming/6477/)
・ [**【VMWare ESXi】図解 仮想ネットワーク・仮想スイッチの概要**](https://hirotanoblog.com/vmware-virtual-network/6455/)
・ [**【VMware ESXi】仮想スイッチのポートセキュリティポリシーとは？**](https://qiita.com/empty948/items/4df89397d7b9dff7e330)
SlackのWebhook URLを取得する方法

# はじめに

SlackのWebhook取得方法の参考にしていただければ嬉しいです！
3つのステップで可能です。

# 取得方法

## 1. Slack app directoryにアクセス

以下のサイトにアクセスしてください。

https://slack.com/intl/ja-jp/apps

## 2. Incoming Webhookを選択

以下のような画面が表示されるので、検索欄に「web」と入れると「Incoming Webhook」が表示されるので選択します。

![スクリーンショット 2024-07-08 18.24.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/7156400e-fc25-b848-89f9-5356b73fd554.png)

![スクリーンショット 2024-07-08 18.26.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/db935e36-1c71-c21d-df67-8e07e8c39b4a.png)

## 3. 送信するチャンネルを選択

対象のチャンネルを決める必要があります。選択したら、インテグレーションを追加して完了です！

![スクリーンショット 2024-07-08 18.28.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/f325cf8a-3e32-9cb6-49bc-fc5c6f65ed65.png)

## 結果

無事にWebhookを取得することができました。

![スクリーンショット 2024-07-08 18.29.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/86a025a3-c9d0-de8c-e54a-143db6bc2fd9.png)
Azure DevOpsのWikiで目次を作成する

## はじめに
https://learn.microsoft.com/ja-jp/azure/devops/project/wiki/markdown-guidance?view=azure-devops#add-a-subpages-table

Azure DevOps - Overview - Wikiはページを階層化できる。
子ページの一覧を目次化して表示する方法を記載する。

## 作成方法
```
[[_TOSP_]]
```
上記を入力すると子ページの目次が自動で生成される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1589041/d343e292-96fd-09ca-7928-ef77775e37cf.png)
VScodeにAtCoder環境を作ろうとしたときの備忘録

# 前提
基本的にはこちらの記事に従いました。個人的に詰まったところのメモです。
[【VScode + WSL / Windows】C++ 用の AtCoder 向け環境構築をしてみた。](https://yuulis.hatenablog.com/entry/atcoder-cpp-env-build)

# WSLからUbuntuがインストールできない
コントロールパネルの、『Windowsの機能の有効化または無効化』から、
    ・Linux用Windowsサブシステム
    ・仮想マシン プラットフォーム
にチェックでいけた。
BIOSの設定いじっていけた人もいるっぽい？

# Ubuntuインストール中の謎エラー
```
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel
```
みたいなエラーが出た。
[こちら](https://qiita.com/hali/items/bf04a1e4012025a38d6b)を参照して、新しいkernel componentをインストールで解決。

# pip3がインストールできない

```
$ sudo apt update
~
$ sudo apt upgrade
~
```
からの、
```
sudo apt install python3-pip
```
で行けました。([参照](https://www.bioerrorlog.work/entry/install-pip-pip3-ubuntu))

# pip3でonline-judge-toolsをインストールできない

pipxでインストールしました。
```
$ sudo apt install pipx
~
$ pipx install online-judge-tools
```

# $ oj -hすると ModuleNotFoundError: No module named 'distutils'

マジで困った。python3.12からdistutilsは廃止されたらしい。
なんで動くかはガチでわかってないが、エラーを吐いているupdate_checking.pyのdistutilsをpackagingに置換（3箇所）して、
StrictVersionをparseに置換（2箇所）して、
"home\username\.local\share\pipx\shared\lib\python3.12\site-packages\pip\_vendor\"からpackagingフォルダを
"home\username\.local\share\pipx\venvs\online-judge-tools\lib\python3.12\site-packages\"にコピーしたらいけた。

こうなる前にpython3.11以前でインストールするべきだったかも・・・

**当方初心者でなんもわからずとりあえず解決しただけなので、詳しい方いたらベターな解決法教えてください！**

# $ acc loginで謎の表示
```
(node:17501) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
```
なんか無視してもいけました。

# Shift+Ctrl+B でtasks.jsonが生成されない

Terminal（ターミナル）→Configure Tasks（タスクの構成）→Otherでできます。
([参照](https://qiita.com/ShortArrow/items/0bacd3a4bcbcbac50e60))

# Ctrl+Alt+tで[Error]No cases foundになるとき

acc + ojの場合、command runnerのsetting.jsonは以下のようにしないといけません。
```
    "command-runner.commands": {
            "oj test": "oj test -c ${workspaceFolder}/a.out -d ${fileDirname}/tests",
            "acc submit": "cd ${fileDirname} && acc submit ${file} || cd ../../",
    },
```
# 終わりに
Gitはまあいいかなと思ったので設定してません。
どこかで詰まった方の助けになれば幸いです。
サービスクラスとは?

## サービスクラスとは？
Ruby on Railsのアーキテクチャ内で特定のビジネスロジックや操作をカプセル化するためのクラスです。
コーディングをしている時にアプリケーションのコントローラーやモデルが肥大化してしまうということがあると思います。

サービスクラスを使用することで、これらのロジックを適切に分離し、各クラスの責任を明確に保つことができます。
使用する時には、特定のビジネスルールや操作を一元管理する時に使用します。

## 導入メリット
Ruby on Railsでアプリケーションを開発する際、モデルやコントローラーにビジネスロジックが集中すると、コードが複雑になり保守性や拡張性が低下してきます。

サービスクラスを導入することで、ビジネスロジックを分離するとこで、コードの整理、テストのしやすさ、バグの早期発見、新機能の追加やリファクタリングの効率が上がります。

## モジュールだはダメなの？
このような機能で似たものとして、モジュールがあります。しかしなぜモジュールはダメなのかというと、インスタンス変数が持てないということが理由です。

サービスオブジェクトは、通常、複数のメソッドやステップを経て処理を実行します。
この際、インスタンス変数を用いて状態を管理することが多いため、モジュールではカバーができないのです。

## 作成方法
### 1.サービスクラスを格納するためのディレクトリを作成
ディレクトリは標準では実装されていないため、app/servicesを作成します。
その中に処理の内容がわかるようなクラス名を定義したファイルを作成します。

## サービスクラスの中身
サービスクラスは特定のビジネスロジックやタスクをカプセル化するクラスで、単一の公開メソッド（例: call や perform）を持ち、その中で必要な操作を行います。

```
class UserService
  def initialize(user_params)
    @user_params = user_params
  end

  def call
    # ユーザー登録のロジック
  end
end
```

## サービスクラスを使ってみる
作成したサービスクラスは、コントローラー、モデル、他のサービスクラスなどで呼び出すことができます。
呼び出し方としてはクラスメソッドのため、インスタンス化を行い、そこから「.call」で実際の処理を行うよう設定することで処理を実装できます。
```
class UsersController < ApplicationController
  def create
    UserService.new(user_params).call
    # その他の処理
  end
end
```



参考サイト：
https://chatgpt-list.xyz/engineer/rails/rails%E3%81%A7%E5%88%9D%E3%82%81%E3%81%A6%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/
【Unity】Mixamoを使ってアニメーションを見つけよう

# Mixamoとは？

Mixamoとは、Adobeが提供するオンラインの3Dキャラクターアニメーションツールです。
ライブラリから様々な3Dキャラクターやアニメーションを選ぶことで、
簡単にキャラクターにアニメーションを適用することができます。

# Mixamoをオススメする理由

- **ブラウザで完結**

-> ブラウザベースで動作するため、他のソフトウェアが必要ない。

- **自動リギング**

-> アップロードしたカスタムキャラクターに対して、
簡単にボーン構造を追加してアニメーション可能な状態にしてくれます。
   
- **豊富なアニメーション**

-> 数百種類のアニメーションが用意されており、キャラクターに簡単に適用できます。

# Mixamoの使い方

最初に、[Mixamoのサイト](https://www.mixamo.com)にアクセスしましょう。

<img width="650" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470968/e63c6f20-140c-c239-19ff-780050eb188e.png">

アカウントを作成していない人は「Sign Up For Free」から作成しましょう。
既にある人は「log In」をクリックしてログインしましょう。

---

次に、キャラクターを用意します。
画面上部の「Characters」を開きましょう。

<img width="650" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470968/ad2fa2ba-5427-f4e8-7f05-647bed41c25e.png">

気に入ったキャラクターを見つけたら、右側の「DOWNLOAD」からダウンロードします。

---

最後に、アニメーションを用意します。
画面上部の「Animations」を開きましょう。

<img width="650" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470968/0796ec87-4e2f-0a6d-cb1d-47a33e73d883.png">

アニメーションを再生するキャラクターが必要となるため、
右側の「UPLOAD CHARACTER」から先ほどのキャラクターをアップロードしましょう。
あとは、お目当てのアニメーションを「DOWNLOAD」からダウンロードするだけです。

---

これで、Mixamoを用いたアニメーションの検索は以上です。
ダウンロードしたアニメーションをUnityにインポートすれば、すぐに使えます。
最後までご覧いただきありがとうございました :laughing:
主要なWeb開発フレームワークの徹底解説

序章
現代のウェブ開発において、フレームワークは欠かせないツールとなっています。フレームワークを使用することで、開発者は効率的に高品質なアプリケーションを構築でき、保守や拡張も容易になります。本記事では、Pythonバックエンドフレームワーク、Webアプリフレームワークのベスト、Java Webフレームワーク、およびフロントエンドフレームワークについて詳しく解説します。
[Pythonバックエンドフレームワーク](https://newwave-solutions.co.jp/python-backend-framework/)
Django
Djangoは、「迅速な開発」と「洗練された設計」を目標としたフルスタックフレームワークです。認証、URLルーティング、テンプレートエンジン、ORMなど、Webアプリケーションに必要なすべての機能を備えています。また、セキュリティ対策がしっかりしており、大規模なプロジェクトにも対応可能です。
Flask
Flaskは、シンプルさと柔軟性を重視した軽量フレームワークです。必要最低限の機能のみを提供し、開発者が自由に追加モジュールを選択できます。URLルーティングがシンプルで、豊富なドキュメントも魅力です。
[Webアプリフレームワークのベスト](https://newwave-solutions.co.jp/best-web-app-framework/)
Ruby on Rails
Ruby on Railsは、迅速な開発とコーディングの一貫性を提供するフルスタックフレームワークです。自動生成ツールや豊富なライブラリにより、生産性が高く、活発なコミュニティが多くのプラグインを提供しています。
Spring Framework
Spring Frameworkは、Javaプラットフォーム用の強力なフレームワークで、エンタープライズアプリケーション開発に最適です。包括的なエコシステム、依存性注入、セキュリティ機能などが特徴です。
[Java Webフレームワーク](https://newwave-solutions.co.jp/java-web-frameworks/)
Spring MVC
Spring MVCは、Model-View-Controllerアーキテクチャを採用し、高度なカスタマイズとモジュール性を提供します。Springプロジェクトとシームレスに統合でき、単体テストや統合テストのサポートも優れています。
JSF（JavaServer Faces）
JSFは、コンポーネントベースのWebフレームワークで、再利用可能なUIコンポーネントとJava EE技術の統合が特徴です。ビジュアル開発が容易で、エンタープライズアプリケーションに適しています。
[フロントエンドフレームワーク](https://newwave-solutions.co.jp/front-end-framework/)
React
Reactは、コンポーネントベースのJavaScriptライブラリで、仮想DOMにより高速なレンダリングが可能です。広範なコミュニティとエコシステムがあり、シングルページアプリケーションに最適です。
Angular
Angularは、Googleが開発したフロントエンドフレームワークで、多くのビルトイン機能を持ち、双方向データバインディングとモジュール性を提供します。大規模アプリケーションに適しています。
Vue.js
Vue.jsは、軽量で柔軟なフロントエンドフレームワークで、学習が容易です。リアクティブデータバインディングと豊富なエコシステムを特徴とし、初心者からプロフェッショナルまで幅広く支持されています。
結論
ウェブ開発におけるフレームワークの選択は、プロジェクトの成功に大きな影響を与えます。Pythonバックエンドフレームワーク、Java Webフレームワーク、フロントエンドフレームワークのそれぞれに強力なツールが存在し、プロジェクトの要件に応じて最適なものを選択することが重要です。適切なフレームワークを使用することで、開発プロセスがスムーズに進み、ユーザーにとって魅力的なアプリケーションを提供することができます。
Guardが反応しないときの対処法

# 環境
* DevContainer
* guard-rspec インストール済み
    * [guard-rspec](https://github.com/guard/guard-rspec)

# 事象
guardは問題なくインストールして起動できたが、rails・Rspec関連ファイルを保存しても反応なし。Guardfileを保存すると反応がある。

# 解決方法
Guardをポーリングモードで起動
```
$ bundle exec guard -p
```

#### ポーリングモードとは
分かりやすい記事があったので、貼っておきます：
[システムを安定稼働させるために必要な「ポーリング」とは？](https://blogs.manageengine.jp/itom_what_is_polling/)

#### Guardコマンドについて
公式：[Command-line-options-for-Guard](https://github.com/guard/guard/wiki/Command-line-options-for-Guard)

# 所感
ポーリングについて知ることができたが、DevContainer内でどんな不具合があってポーリングモードじゃないと動かないのかまでは分からなかった（もし分かる方がいたら教えてください）。
弊環境だと、controllerのテストディレクトリが`spec/requests`になっている。それも相まって、動かない原因を突き止めるのに時間がかかった。どの環境でも同じパスそうで、自動生成されるGuardfileにwatchされてる`app/config/routes.rb`ファイルで`ctrl + s`するのがおすすめ。
Giới thiệu về đội bóng Bồ Đào Nha

Đội tuyển bóng đá quốc gia Bồ Đào Nha, thường được gọi là "Seleção," là một trong những đội bóng hàng đầu châu Âu và thế giới. Họ nổi tiếng với lối chơi kỹ thuật, sáng tạo và có nhiều cầu thủ tài năng. Dưới đây là một số thông tin chi tiết về đội bóng Bồ Đào Nha:
Tên đầy đủ: Seleção Portuguesa de Futebol
Biệt danh: Seleção (Đội tuyển), Seleção das Quinas
Thành lập: 1921
Hiệp hội: Liên đoàn bóng đá Bồ Đào Nha (Federação Portuguesa de Futebol - FPF)
Đội tuyển Bồ Đào Nha không chỉ là biểu tượng của bóng đá nước nhà mà còn có ảnh hưởng lớn đến bóng đá thế giới. Sự thành công của họ trong các giải đấu lớn đã truyền cảm hứng cho nhiều thế hệ cầu thủ và người hâm mộ bóng đá trên toàn thế giới.
Đội tuyển bóng đá quốc gia Bồ Đào Nha là một trong những đội bóng hàng đầu châu Âu và thế giới, với lịch sử và danh hiệu ấn tượng. Lối chơi kỹ thuật, sáng tạo và các cầu thủ xuất sắc đã giúp Bồ Đào Nha khẳng định vị thế của mình trên đấu trường quốc tế và trở thành niềm tự hào của người hâm mộ bóng đá trên khắp thế giới.
MPI版SWANでラディエーションストレス計算

# １．概要
　デルフト工科大学で開発された波浪推算モデルSWANですが、MPI版で計算するとラディエーションストレスが正しく計算されません。この記事ではMPI版でシリアル版と同じ結果のラディエーションストレスを出力させる方法をご紹介します。
# ２．問題点と対策
　MPI版ではプロセスごとに部分領域を計算しますが、隣接する部分領域間の境界部分相互通信量がラディエーションストレスの計算に足りないため、部分領域境界で欠測となっています。この境界部分相互通信量を増やすようにオリジナルソースを修正します。
# ３．修正箇所
　修正は、swanparll.ftn に対してのみ行います。以下修正を行ってmakeするとシリアル版と同じラディエーションストレスが出力されます。
## Ａ）MAX(MXC,MYC) を MAX(MXC,MYC)*2 へ置換
　通信量を増やすため通信用のバッファを大きくします。swan4145のswanparll.ftnでは
　2440行目
　2441行目
　2787行目
　2931行目
　3150行目
が修正対象です
## Ｂ）通信幅の変更
swan4145のswanparll.ftnでは 2498行目を変更します
【修正前】
      JOFFS = RESHAPE((/0,1,0,-1,1,0,-1,0/), (/2,4/))
【修正後】
      JOFFS = RESHAPE((/0,2,0,-2,2,0,-2,0/), (/2,4/))
# ４．結果比較時の注意点
　動作確認で Intel Fortran を使う場合、浮動小数点オプションを source などとして下さい。デフォルトの浮動小数点オプションの Fast は再現性が悪いようです。 [Intel Fortran 浮動小数点オプションの解説](https://jp.xlsoft.com/documents/intel/compiler/18/for_18_win_lin/GUID-63514789-6BE7-4FA8-9389-F3B618A2EE1A.html "Intel Fortran 浮動小数点オプションの解説")
　また、最適化オプションを共通にして下さい。
【例】
FLAGS_OPT = /O2 /QaxCORE-AVX2
FLAGS_MSC = /assume:byterecl /traceback /nowarn /nologo /Qdiag-disable:8291,4217,6843,10448,6536 /fp:source
# ５．最後に
　手持ちのサンプルではMPI版とシリアル版で全く同じラディエーションストレスとなりましたが、十分な検証を行ったとは言えません。運用にあたっては自己責任でお願いします。この記事の修正によって発生するいかなる損害に関しも当方は責任を負いません。
ChatGPTを使ったプログラミング学習ワークショップ開催します！！

テックジムでは「ゼロから始めるPython入門講座」を定期開催しており、
おかげさまで2万人が参加されました。

そして、この度、チャットGPTを活用したプログラミングを体験できる内容にフルリニューアルしました。
さらに多くの方々にとってプログラミングの敷居を低く感じてもらえればと思っております。


■イベント概要

日時：毎週土曜日 15:00〜17:00
場所：千代田区平河町2-7-2 VORT永田町6F
参加費：無料（要事前登録）
対象：プログラミング初心者
ウェブサイト：https://techgym.jp/tokyo_python/


■イベントのハイライト

・ソースコードの解読をChatGPTで
・仕様変更のコーディングをChatGPTで
・エラーが出たときのデバッグをChatGPTで

チャットGPTでのコーディングを体験した後は、
GPTを活かした効率的なプログラミング学習法と、
学習上の注意点をレクチャーします。

■テックジムとは？

国内初の授業のしないプログラミングスクールです。
効率学習におけるアドバイス、コーチングが主体の自習型スクールです。
「Python基礎コース」を全履修した方の8割がエンジニア就職に成功しています。
OpenSSH脆弱性[CVE-2024-6387]のRHEL9対応版が出ました

2024年7月1日に発表された[CVE-2024-6387](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-6387)のRedHat9対応版が2024年7月3日にでました。
openssh-8.7p1-38以前のバージョンを使用している場合、早急にアップデートが必要です。

[2294604 – (CVE-2024-6387, regreSSHion) CVE-2024-6387 openssh: Possible remote code execution due to a race condition in signal handling](https://bugzilla.redhat.com/show_bug.cgi?id=2294604)


## 確認手順
```bash
$ sudo dnf check-update openssh
Last metadata expiration check: 0:00:00 ago on Mon 08 Jul 2024 00:00:00 AM UTC.

openssh.x86_64                                                    8.7p1-38.el9_4.1                                                     rhel-9-baseos-rhui-rpms
```

## アップデート手順
```bash
$ sudo dnf update openssh
Last metadata expiration check: 0:00:00 ago on Mon 08 Jul 2024 00:00:00 AM UTC.
Dependencies resolved.
==============================================================================================================================================================
 Package                              Architecture                Version                                  Repository                                    Size
==============================================================================================================================================================
Upgrading:
 openssh                              x86_64                      8.7p1-38.el9_4.1                         rhel-9-baseos-rhui-rpms                      466 k
 openssh-clients                      x86_64                      8.7p1-38.el9_4.1                         rhel-9-baseos-rhui-rpms                      723 k
 openssh-server                       x86_64                      8.7p1-38.el9_4.1                         rhel-9-baseos-rhui-rpms                      465 k

Transaction Summary
==============================================================================================================================================================
Upgrade  3 Packages

Total download size: 1.6 M
Is this ok [y/N]: y
```
【ローカル環境】Audacity + Whisperで文字起こし【無料】

音声解析ソフトAudacityにWhisperがOpenVINO(TM)のプラグインとして実装されていました。これによる文字起こしが非常に便利なのでレポートします。

### ポイント
- かなり正確な日本語での文字起こし（実務の下書きとしては十分なレベル）
- すべてローカル環境で動く（機内モードで実行できました）
- すべて無料（少なくとも当記事執筆時点では）

### 実行環境
CPU: Intel(R) Core(TM) i9-13900H
RAM: 32GB
OS: Windows 11

### 準備
詳細は各項目の▼をクリックして展開してご覧ください。

<details>
<summary>1) Audacityをインストールする</summary>

https://www.audacityteam.org/

↑よりインストーラーをダウンロードしてください。
インストーラーを実行し、説明に従って操作すればOKです。

</details>

<details>
<summary>2) OpenVINOのプラグインをインストールする</summary>

https://plugins.audacityteam.org/ai-plugins/ai-plugins

↑がポータルページですが、そこから↓のGitHubのリリースページに飛べます。

https://github.com/intel/openvino-plugins-ai-audacity/releases

Githubのリリースページをスクロールすると、最新リリースの中に Assets という項目があり、そこに「audacity-win-v3.5.1-R2.2-64bit-OpenVINO-AI-Plugins.exe」といったインストーラーがあります。

ダウンロード後、インストーラーを実行してください。手順の途中にモデルの選択が出てきます。僕は「base」と「large-v3」を選びました。
</details>

### 実行
Audacityを立ち上げ、文字起こしをするファイルを開きます。ドラッグ＆ドロップ可能です。
動画を文字起こしする場合は ffmpeg等のプラグインが必要となる場合があります。ffmpegのプラグインの導入方法はこちら（https://support.audacityteam.org/basics/installing-ffmpeg) です。

#### 文字起こしを実行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264339/c965eee9-1866-e279-b604-dd96232a45c6.png)
図のように、メニューバーの「解析」⇒「OpenVINO Whisper Transcription」（図中(1)）をクリックするとダイアログボックスが開きます。Whisperのモデル（図中(2)）と言語（図中(3)）を選択してください。モードは「transcribe」のままで大丈夫です。

適用をクリックすると文字起こしが実行されます。モデルにもよりますが、音声データの時間の1.2倍から1.5倍の時間がかかるような気がします。

#### 起こした文字データを保存する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264339/2837a20f-f28c-960e-57e7-a82779915f9e.png)
図のようにTransctiptionというトラックが追加されます。ここにラベルデータとして文字起こしデータが入っています。Transcriptionトラックの「選択」（図中(4)）をクリックし、選択状態にします。メニューバーの「ファイル」⇒「ほかをエクスポート」⇒「ラベルをエクスポート」（図中(5)）をクリックすると保存場所を指定するダイアログボックスが立ち上がります。あとは通常手順です。


### 実行結果例
試しにVOICEVOXで会話させたファイルを作成し、baseモデルとlarge-v3モデルでそれぞれ文字起こしをさせてみました。

![voiceboxによる会話の文字起こし例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264339/a9817949-bf08-e3ad-36ba-302546765cb3.png)

文字起こしデータには開始秒、終了秒、内容が入っています。baseモデルには若干の誤読がありますが、どちらもちゃんと文字起こしできています。

実務にて、会議の録画データに対して使ったときはbaseモデルはひどいものでしたが、large-v3モデルは許容できるレベルでした。複数の人が同時に話さない・ノイズが少ない・どの人の音量もある程度同じなどbaseモデルでも活躍できる条件はなにかあるのかもしれません。まずは実行が速いbaseモデルで文字起こしをしてみて、その出来をみてlarge-v3モデルを使ってみるなど、手探りしながら使ってみてください。
度数分布表から比例配分的に中央値を求める（修正版）

https://qiita.com/hige_megane/items/19ee9ebd7d54ee570b8f

この記事について、$\frac{N+1}{2}$を使用するのは誤りではないかとのご指摘がありましたので、再度掲載いたします。基本的な考え方は前記事をお読みください。

岩原信九郎：『教育と心理のための推計学，日本文化科学社』，2001.（新訂版第32刷）P.41 にこのような記事があるそうです。

>分布表から中央値を求めるときは、同点のある場合と同じ方法を用いる。分布表は級間（単位）を大きくしてその間の値をすべて同点にしたものだからである。しかしこのときは次の式を用いることが出来る。
>
```math
Mdn = l + h\left(\dfrac{\frac{N}{2} - F}{fm} \right) 
```
>$l \cdots$中央値のある級間の下限点
>$F \cdots l$以下の総度数
>$fm \cdots$ 中央値のある級間の度数
>$h \cdots$ 級間の幅
>$N \cdots$ 総度数。奇数でも偶数でもよい

とのことです。そこで、比例配分を求める部分だけ修正を行ったコードを下記に示します。

```propotional_median.r
library(conflicted)
library(tidyverse)

## 日本の年齢別人口(2020年国勢調査)データ
df_med <- dplyr::tibble(
  value = seq(from = 0, to = 100),
  n = c(831824, 866525, 910005, 934063, 973665, 998664, 996576, 1020657, 1024325,
        1048871, 1057736, 1063185, 1083113, 1077379, 1069104, 1070370, 1113159,
        1123237, 1151389, 1159285, 1177049, 1174456, 1193935, 1193983, 1191883,
        1210380, 1212167, 1192761, 1209983, 1206673, 1234225, 1258775, 1299569,
        1335672, 1356353, 1407719, 1456774, 1476522, 1478920, 1491632, 1558309,
        1596338, 1656969, 1699648, 1779813, 1852394, 1956602, 1991137, 1954205,
        1895955, 1837431, 1807894, 1764215, 1758955, 1371356, 1689290, 1582910,
        1542017, 1491947, 1461318, 1469672, 1494495, 1450282, 1407740, 1475001,
        1516441, 1512118, 1598839, 1679855, 1768015, 1886160, 2052521, 2014143,
        1893386, 1165585, 1234832, 1488292, 1416571, 1430462, 1360771, 1206058,
        1017635, 1048747, 1035057, 989231, 893754, 794162, 739149, 662252, 580506,
        493824, 425042, 358386, 277613, 224151, 169988, 123057, 90075, 64897,
        44707, 79523)) %>%
  dplyr::mutate(cumsum = cumsum(n))

# Nの数
N <- tail(df_med$cumsum, 1)
# 中央値に位置する累計値half_nを求める。
half_n <- (N + 1) / 2
# half_nが小数を含む場合(N+1が奇数の場合)の切り捨てと切り上げ
lower_n <- floor(half_n)
upper_n <- ceiling(half_n)
# half_nの位置（何行目に位置するか）の確認
lower_row <- min(which(lower_n <= df_med$cumsum))
upper_row <- min(which(upper_n <= df_med$cumsum))

# 中央値が含まれる階級の下限値Lを求める
# (中央値が含まれる階級が48歳の場合は48-49の階級と考えられるため、
# 下限値Lは48となる。)
lower_class <- slice(.data = df_med, lower_row)
L <- lower_class$value
# 階級の上限値(=次の階級の値）U(48歳の場合は48-49なのでU=49)を求める。
# もし、中央値が最大の階級にある場合は、比例配分できないため
# U <- L + 1として、h = 1になるようにする。
U <- if_else(lower_row == nrow(df_med),
             true = L + 1,
             false = slice(.data = df_med, lower_row + 1)$value)
# 階級幅hを求める。今回の場合は1歳刻みなのでU=1。
h <- U - L
# Lの階級の度数fを求める。
f <- lower_class$n
# その階級の直前までの累計CFを求める。中央値が最初の階級に含まれる場合は、
# CF=0にする。
CF <- if_else(lower_row == 1,
              true = 0,
              false = slice(.data = df_med, lower_row - 1)$cumsum)
# 中央値medの計算
# lower_row == upper_rowの時は比例配分で中央値を求める。
# lower_row < upper_rowの時は([lower_row] + [upper_row]) / 2で求める。
med <- if_else(lower_row == upper_row,
               true = if_else(f == 1,
                              true = L,
                              false =  L + ((N / 2 - CF) / f) * h),
               false = (L + df_med$value[upper_row]) / 2)
print(med)
```

```result
[1] 48.60554
```
BedrockのConverseAPIは構造化PDFをどう読めているのか？

BedrockのConverseAPIがいつの間にか各種ファイル（ドキュメント等）をバイナリで受け取る事が出来るようになったので、（表を含む）構造化PDFがどう読めているのか？というのを確認したいと思います。

# 先駆者の方々

https://qiita.com/moritalous/items/ff2763bcd9408a1b395a

https://qiita.com/hayao_k/items/7fe90871ab6838cdf745

# 検証対象ファイル

以下のような悪意に満ちたPDFファイルを使用します。Excelで作成したものをPDF化しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/190dba37-9298-9566-cb3d-3bf804f9a715.png)

# 検証プログラム

```Python:
import boto3
import streamlit as st

use_model = st.selectbox("使用するモデルを選択してください",("Sonnet","Haiku"))
pdf_file = st.file_uploader("PDFファイルアップロード", type='pdf')
user_prompt = st.text_area("ユーザープロンプト")
send_button = st.button("送信")

# 送信ボタンを押下
if send_button and pdf_file and user_prompt:

    if use_model == "Sonnet":
        modelId = "anthropic.claude-3-sonnet-20240229-v1:0"
    elif use_model == "Haiku":
        modelId = "anthropic.claude-3-haiku-20240307-v1:0"

    bedrock = boto3.client('bedrock-runtime')

    # テスト用にPDF決め打ちでパラメータ作成
    document = {"document": {"format": "pdf", "name": "string", "source": {"bytes": pdf_file.read()}}}
    messages = [{"role": "user", "content": [{"text": user_prompt},document]}]
    inferenceConfig = {"maxTokens": 4000}

    # Bedrockの呼び出し
    response = bedrock.converse(modelId=modelId, messages=messages, inferenceConfig=inferenceConfig)
    
    # Bedrock呼出し結果の抽出
    answer = response["output"]["message"]["content"][0]["text"]

    # 結果の出力
    st.write(answer)
```
# 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/70a3196c-89a2-3b7f-5869-3a31fd9df524.png)

ああなるほど。。。
構造情報は保持して無さそうだなと思いつつ、細かく聞いてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/c50e3f7e-514a-ee0a-5d4e-279f708ae106.png)

まあそうなりますよね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/e73e52b2-2c76-8ec0-83ac-a1e4186fe342.png)

ですよね。

# ちなみにAnthropic謹製Claudeアプリの場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/a5e7d6c0-3e66-e7a0-d26a-435729ab8e02.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/1c2f07ba-3652-8779-b51b-cd1e557c7e89.png)

Claudeアプリの方が優秀という事は無さそうです。

# 所感

PDFの構造化情報を維持したい場合はPDFで直接読ませるのではなく事前処理でちょっと小細工した方が良さそうです。
プレーンな文章を読み込むのみであれば簡単に使えますね。
Pytoch(.pt)をCoreMLに変換する

# Pytoch(.pt)をCoreMLに変換する
CoreMLでは事前に学習させていたモデルをCoreMLモデルに簡単に変換できます
 
 #### １.同じ階層に.ptファイルを用意する
 #### 2.以下のコードを実行するだけ

```pyton:coreml.py
from ultralytics import YOLO#インポート

model = YOLO('./best.pt') 
model.export(format='coreml', nms=True)
```
この変換方法はUltralytics YOLOの方法を用いています。

他にも、CoreMLToolsを使用する方法

```
import coremltools as ct
import torch
import torchvision

# PyTorchモデルの定義とロード
model = torchvision.models.resnet18(pretrained=True)
model.eval()

# サンプル入力の作成
example_input = torch.rand(1, 3, 224, 224)

# トレースモデルの作成
traced_model = torch.jit.trace(model, example_input)

# CoreMLモデルに変換
coreml_model = ct.convert(traced_model, inputs=[ct.TensorType(name="input", shape=example_input.shape)])

# CoreMLモデルの保存
coreml_model.save("ResNet18.mlmodel")
```

など変換方法は様々です。

###### どちらの方法を選ぶかは、使用しているモデルやプロジェクトの要件に依存します。YOLOモデルの場合はUltralyticsの方法が簡便で便利ですし、他のフレームワークからの変換や細かいカスタマイズが必要な場合はCoreMLToolsを使用することが一般的です。
「Composeの基本レイアウト」のメモ#1

[Composeの基本レイアウト](https://developer.android.com/codelabs/jetpack-compose-layouts?hl=ja#0)でUIのデザインを勉強したので、その時のメモ

### はじめに
+ ComposeはUIツールキットのこと

### [3. プランを立ててから開始する](https://developer.android.com/codelabs/jetpack-compose-layouts?hl=ja#2)
+ あるデザインの実装を求められたら、最初にその構造を明確に理解することから始める
+ 直ちにコーディングを開始するのではなく、デザインそのものを分析する
+  UI を再利用可能な複数の部分に分割するには、どうすればよいかを考える

まず2つに分ける
+ 画面のコンテンツ
+ ボトム ナビゲーション

さらに画面のコンテンツを3つに分ける
+ 検索バー
+ 「ALIGN YOUR BODY」というセクション
+ 「FAVORITE COLLECTIONS」というセクション

### [4. 検索バー - 修飾子](https://developer.android.com/codelabs/jetpack-compose-layouts?hl=ja#3)
+ コンポーザブルに変換する最初の要素は、検索バー
+ スクリーンショットを見ただけでは、このデザインをピクセル単位で正確に実装することは非常に困難
+ 検索バーを実装するには、テキスト フィールドと呼ばれるマテリアル コンポーネントを使用
+ leadingIcon は TextField の内部で、テキスト入力領域の左側に配置される
+ テキスト フィールドの背景色を調整するには、colors プロパティを設定する

### [5. Align your body - 位置揃え](https://developer.android.com/codelabs/jetpack-compose-layouts?hl=ja#4)
+ テキストのベースラインとは、文字が「乗っている」ラインのこと
+ テキスト要素の配置を、要素の上端や下端ではなくベースラインに基づいて行うことは、デザイナーのベスト プラクティスとされている
+ `size` 修飾子および `clip` 修飾子と `contentScale` パラメータを使用して、Image コンポーザブルを調整
+ `size` 修飾子
    + 特定のサイズに合うようにコンポーザブルを調整する
+ `clip` 修飾子
    + コンポーザブルの外観を調整します。任意の Shape に設定すると、コンポーザブルのコンテンツがその形状にクリップされる
Laravel11におけるイベントの手作業登録とは…？

# 疑問(Event, Listener)
```:環境
Laravel 11
```
また教材とのバージョンの違いで疑問が生まれた。
Laravel11以降は`EventServiceProvider.php`もなくなり、[リリースノート](https://readouble.com/laravel/11.x/ja/events.html#manually-registering-events)では`AppServiceProvider.php`にEventメソッドを追加していたため俺も見様見真似で追加。

しかし、よく調べると
「わざわざ`AppServiceProvider.php`へメソッド追加する必要もなく、`php artisan make:event`と`php artisan make:listen`コマンドを実行し、そのファイルの中にイベントを書き込めば良い。」
ということを知る。
試してみると確かにちゃんと動いている。
ここで疑問なのだが、[リリースノート](https://readouble.com/laravel/11.x/ja/events.html#manually-registering-events)の手作業登録とは一体…？

どういう時に手作業登録が必要になるんだろう？というのが今回の疑問。
いつもみたいに解決しないと進めないような問題というほどでもないが知りたい。

***
ちょっとLogのありがたさに気がつき始めている。
Laravelのページで指摘されるエラーよりエラー内容が把握しやすいような気がするし、コードの途中にLogを挟んで動作しているかの確認などに柔軟なところが良い。
Cuda Runtime (invalid resource handle) のエラー

cudaデバイスを使っているモジュールA、もう一つのモジュールBがあるとき、
両方のモジュールを使おうとしたきに動かなかった。
この記事は、そのような場合の解決事例の１つである。

## 動作環境
- NVIDIA Jetson AGX Orin
- JetPack 5.1
- python 3.8

## 問題の再現方法
1. モジュールAを動作させるpython スクリプトが問題なく動作することを確認
2. モジュールB(TensortRTを利用)を動作させるpython スクリプトが問題なく動作することを確認
3. モジュールAとモジュールBをimport とした状態でモジュールBの関数を実行して動作を確認した。
4. モジュールAとモジュールBをimport とした状態でモジュールAの関数を実行したあとで、モジュールBの関数を実行して、問題が発覚した。


## error 内容
TensorRTを利用しているモジュールBの関数を実行時に以下の内容のエラーを生じた。
```
[07/03/2024-02:17:47] [TRT] [E] 1: [resizeRunner.cpp::execute::89] Error Code 1: Cuda Runtime (invalid resource handle)
```

Cuda Runtime が上記のエラーを表示しても、
推論結果にはダミーの値が入っていて、
スクリプト自体は実行を継続していた。


## 分かること
TRT の実行時にエラーを生じていること。

- GPUを利用する複数のライブラリの呼び出し
stackoverflow [Adding multiple inference on TensorRT (Invalid Resource Handle Error)](https://stackoverflow.com/questions/58369731/adding-multiple-inference-on-tensorrt-invalid-resource-handle-error/73996477#73996477)の以下の記述が参考になった。

実際、私の問題の生じた部分は、TRT(TensorRT)のコードの実行部分だった。

----
I had a similar error and that is what helped me in this case:

Remove `import pycuda.autoinit` and do
```
import pycuda.driver as cuda
...
cuda.init()
device = cuda.Device(0)
cuda_driver_context = device.make_context()　
```
Wrap the piece of code that does inference with TensorRT like this:

```
cuda_driver_context.push()
# copy data to device memory, run inference, copy data from device memory
cuda_driver_context.pop()
```
## 私の場合
cuda_driver_context　関わるコードに対応する変更を加えることで、
２つのモジュールを呼び出しても、推論が行われて、上記のエラーを生じなくなった。
MudBlazorをBlazorWebAssemblyで使う準備

MudBlazorをBlazorWebAssemblyで使うにも、事前に準備がいるので、それをまとめておきます。

前提
- VisualStudio2022
- BlazorWebAssembly
- .net8
- MudBlazor Ver6.21 (7.0ではうまくいかない…涙)


# _Imports.razorに追記
```C#:_imports.razor
@using MudBlazor // 追加
```

# wwwrootにある「index.html」に追記
```html:index.html
<head>
    <link href="_content/MudBlazor/MudBlazor.min.css" rel="stylesheet" /> <!--追加-->
</head>
<body>
    <script src="_content/MudBlazor/MudBlazor.min.js"></script> <!--追加-->
</body>
```

# Program.csに追記
```C#:Program.cs
using MudBlazor.Services; // 追加

builder.Services.AddMudServices(); // しかるべき行の後に追加
```



# MainLayout.razorに追記
```xml:MainLayout.razor
@Body
   <MudThemeProvider/> @*追加*@
   <MudDialogProvider/> @*追加*@
   <MudSnackbarProvider/> @*追加*@
```
【HTMLメール】GmailでHTMLメール用のソースコードを扱う方法

Gmailでソースコードを利用してHTMLメールを送信する方法って無いの？
そんなニーズに応えるための具体的な手順とツールを紹介します。

## はじめに
メールマガジンで配信しているHTMLメールを修正したいけど、メール本体かソースコードくらいしか手元にない。そんな中で修正を求められるコーダーの方はいませんでしょうか。

HTMLメールのソースコードは、様々なメールクライアントへの対応（主にOutlookアプリ）で複雑怪奇となっていることで有名ですが、そのためには、”ソースコードをHTMLメールとして送信したい”機会が検証のためにも必ず訪れます。

ただ、「HTMLメール Gmail」と検索しても、”リッチテキストエディタでHTMLメールが作れます”といった非コーダー向けのコンテンツが検索エンジンの上部にズラッと並んでしまい、目的の記事がなかなか見つからないといったことがあるかと思います。

そこで、HTMLメール用のソースコードをGmailで扱う方法を調べたのでまとめておきます。

## 方法
結局のところ、メール本文にエスケープされない形でソースコードを挿入出来れば良いので下記の方法でやりやすい手段を選べばどれも問題ありません。

### 方法１．DevToolsでメール作成画面のメッセージ本文に挿入する

1. Gmailで画面左上部「:pen_fountain: 作成」ボタンを押下してメール作成画面（ポップアップ）を開く

2. メール作成画面で[F12]キーを押してDevToolsを立ち上げる

3. DevToolsのElementsパネルのセレクトモードで画像のようにメッセージ本文を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829416/d66335ed-b4cf-a963-91f4-ad884c4d4de5.png)

4. 下記のように`aria-label="メッセージ本文"`が付与されている要素の直下を変更する
※ `<textarea>`要素ではなく、該当する`<div>`要素の中身を変更してください。
    ```diff_html:DevTools
    <div id=":1jw" ... aria-label="メッセージ本文" ... />
    -  <br clear="all">
    -  <div>...</div>
    +  (確認したいソースコードを挿入する)
    </div>
    ```

5. DevTools上で編集を完了するとメッセージ本文がHTMLとして表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829416/99818929-e7bf-e35e-1ed6-da06ec4d0dc6.png)

6. 表示を確認して問題なければそのまま送信することでHTMLメールを送ることができます
各メールクライアントで閲覧可能なアドレスを宛先に指定して検証を行いましょう。

:::note warn
Gmailのアップデートによって、アップデート以前の方法が利用出来なくなってしまうことがあるため、記述時点での最新の手段として捉えていただければ幸いです。
:::


### 方法２．Google拡張機能でHTMLエディタをメール作成画面に追加する
Google拡張機能でアドオンとしてメール作成画面のGUI上に表示させるので 方法１ と比べて取っ付きやすいと思います。
ただ、オフィスワークで使用する場合は、各拡張機能のプライバシーポリシーがchromeウェブストア上に開示されているので確認した上で利用するようにしましょう。

#### ■ cloudHQ提供拡張機能

https://chromewebstore.google.com/detail/html-editor-for-gmail-by/ioinaaeeacahcmbgfmeaaofhfkijpdeb

メール作成画面の送信ボタン右のツールチップに「Edit HTML」と表示されるアイコンが追加され、メッセージ本文がHTML編集画面とライブプレビュー画面が2分割で表示されるようになります。
利用時には会員登録が求められるため、会員登録を行いたくない方は次の拡張機能を利用しましょう。

:::note warn
プライバシーにおいて、「個人を特定できる情報」を収集及び使用することを開示されているため、プライバシーポリシーをご確認した上で利用してください。
:::

https://chromewebstore.google.com/detail/llccdnmbipddnkhmldacpcjjcnljpoij

上記「HTML Editer for Gmain by cloudHQ」に対して、自作したテンプレートを保存したり、デザイン済みのメールテンプレートを挿入できる機能が追加された拡張機能です。
「HTML Editer for Gmain by cloudHQ」と異なり、会員登録が求められないので多機能でも手早く利用することができると思います。

:::note warn
プライバシーにおいて、「個人を特定できる情報」を収集及び使用することを開示されているため、プライバシーポリシーをご確認した上で利用してください。
:::

#### ■ その他拡張機能

https://chromewebstore.google.com/detail/gmail-html-editor/ikolpoonlhkhbkkmhcpnmhpdgagjjhmp

メール作成画面の右上部にアイコン（`</>`）が追加され、メッセージ本文がHTMLコードで表示されるようになります。アイコンの押下でHTML編集とプレビューの切り替えをすることができます。

:::note info
プライバシーにおいて、利用者のデータを収集または使用しないことを表明しています。
:::

## 最後に
GmailでHTMLメール用のソースコードを扱う方法をご紹介しました。


この記事が、HTMLメールの修正や検証を効率的に行うための一助となれば幸いです。
技術の進化により新たな方法が登場する可能性もあるため、常に最新情報を確認しながら作業を進めていきましょう。

皆さんのHTMLメール制作がスムーズに進むことを願っています。
Pythonで、三平方の定理（ピタゴラスの定理）を用いて、直角三角形かどうかを判定してみた

### 前置き
今日は、Pythonを使ってユーザーが三角形の３辺を入力したら、直角三角形になるかならないかを判定するプログラムコードの作成に着手しました。

### 三平方の定理（ピタゴラスの定理）とは
![Screenshot 2024-07-08 at 15.40.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/c4d4a216-2a42-dd75-274b-0017981dc349.png)
引用元：https://lab-brains.as-1.co.jp/enjoy-learn/2023/03/44327/

### 直角三角形かどうかを判定するプログラムコード
``` python
import math

def is_right_triangle(a, b, c):
    # 3辺の長さを昇順にソートして、最長の辺をcにする
    sides = sorted([a, b, c])
    a, b, c = sides[0], sides[1], sides[2]

    # ピタゴラスの定理を使って直角三角形かどうかを判定
    return math.isclose(a**2 + b**2, c**2)

def main():
    print("三角形の3辺の長さを入力してください。")
    a = float(input("aの長さ: "))
    b = float(input("bの長さ: "))
    c = float(input("cの長さ: "))

    if is_right_triangle(a, b, c):
        print("この三角形は直角三角形です。")
    else:
        print("この三角形は直角三角形ではありません。")

if __name__ == "__main__":
    main()
```
### プログラムコードの説明
1. is_right_triangle関数:
3つの辺の長さ、a, b, c を使って最長の辺をcとしています。
ピタゴラスの定理、a^2+b^2 = c^2に沿って、その三角形が直角三角形かどうかを判定しています。
math.isclose 関数を使って、浮動小数点の誤差を考慮した近似比較を行います。

2. main関数:
ユーザーに三角形の3つの辺の長さを入力させます。
is_right_triangle関数を使って、入力された長さから直角三角形かどうかを判定し、
判定した結果を表示します。

このプログラムを使えば、その三角形が直角三角形かどうかが簡単に判定できます。

### 出力結果
``` python
三角形の3辺の長さを入力してください。
aの長さ: 3
bの長さ: 4
cの長さ: 5
この三角形は直角三角形です。
三角形の3辺の長さを入力してください。
aの長さ: 5
bの長さ: 12
cの長さ: 13
この三角形は直角三角形です。
三角形の3辺の長さを入力してください。
aの長さ: 8
bの長さ: 15
cの長さ: 17
この三角形は直角三角形です。
三角形の3辺の長さを入力してください。
aの長さ: 7
bの長さ: 24
cの長さ: 25
この三角形は直角三角形です。
三角形の3辺の長さを入力してください。
aの長さ: 10
bの長さ: 12
cの長さ: 13
この三角形は直角三角形ではありません。
三角形の3辺の長さを入力してください。
aの長さ: 13
bの長さ: 17
cの長さ: 19
この三角形は直角三角形ではありません。
三角形の3辺の長さを入力してください。
aの長さ: 17
bの長さ: 9
cの長さ: 23
この三角形は直角三角形ではありません。
```
### 出力結果の検証
**1**. a = 3, b = 4, c = 5
3^2 + 4^2 = 5^2
9 + 16 = 25
この場合、a^2+b^2 = c^2になるので、直角三角形です。

**2**. a = 5, b = 12, c = 13
5^2 + 12^2 = 13^2
25 + 144 = 169
この場合、a^2+b^2 = c^2になるので、直角三角形です。

**3**. a = 8, b = 15, c = 17
8^2 + 15^2 = 17^2
64 + 225 = 289
この場合、a^2+b^2 = c^2になるので、直角三角形です。

**4**. a = 7, b = 24, c = 25
7^2 + 24^2 = 25^2
49 + 576 = 625
この場合、a^2+b^2 = c^2になるので、直角三角形です。

**5**. a = 10, b = 12, c = 13
10^2 + 12^2 = 13^2
100 + 144 = 244
a^2とb^2の和である244とc^2の和である169は等しい値でないので、
a^2+b^2 =c^2 が成立しません。
よって、この場合においては、直角三角形になりません

**6**. a = 13, b = 17, c = 19
13^2 + 17^2 = 19^2
169 + 289 = 458
a^2とb^2の和である458とc^2の和である361は等しい値でないので、
a^2+b^2 =c^2 が成立しません。
よって、この場合においては、直角三角形になりません

**7**. a = 17, b = 9, c = 23
17^2 + 9^2 = 23^2
289 + 81 = 370
a^2とb^2の和である370とc^2の和である529は等しい値でないので、
a^2+b^2 =c^2 が成立しません。
よって、この場合においては、直角三角形になりません

このように、ちゃんと出力結果と三平方の定理に照らし合わせた場合、計算結果が一致します。

### 主なピタゴラス数と、覚え方について
![Screenshot 2024-07-08 at 16.01.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/522fc69a-04dc-786e-798b-dd25496d900f.png)
![Screenshot 2024-07-08 at 16.04.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/19cec58e-12d0-1d6f-7eb6-4bef5d60f150.png)
引用元：https://www.shuei-yobiko.co.jp/labo/jh-math-byousatsu05/

皆さんも時間がある時に、このプログラムコードを参考にして、ご自身が入力した三角形の３辺が、直角三角形になるか、ならないのかを判定してみてはいかがでしょうか。
laravelでAPPを作り直したときの、マイグレーションを実行するための手順

ちょっとメモするところがなかったので、Qiitaに書く。

昔Laravelで作ったモノをLaravel11で作り直したけど、マイグレーション忘れてたので備忘録的に書いてみる。

環境：Laravel11 を Docker Installation Using Sail で構築している。
参考：https://laravel.com/docs/11.x#docker-installation-using-sail
phpenvやら色々やろうとしたけど、これが最速で環境壊さないし楽。dockerもAppleシリコン対応したし。

本記事ではローカルにデータを落として、マイグレーションを実行しているが、
そも database を２つ持てるなら `config/database.php` に定義してマイグレーション書くでよい。mysqldump やらリストアやらは不要。

## 事前準備

### 現状の mysqldump を取得する
それぞれの環境次第だけど、こんな感じ。ホストはおまけ。

```
mysqldump -h localhost -u root ra  > mysqldump_ra_20240702.sql
```

## で、マイグレーションするためのいろいろ

### 1. 現状の dump を docker の mysql の別 database に入れる

docker ps で mysql の名前を取得し、そこに dump を送る

```
docker cp mysqldump_ra_20240702.sql ra8-mysql-1:/tmp
```

### 2. docker の mysql に入って データベース作って リストアする
入り方は色々あると思うので省略

```
mysql -u root -p
mysql> create database laravel2;
mysql> GRANT ALL ON `laravel2`.* TO 'sail'@'%';
mysql> exit
mysql -u root -p laravel2 < /tmp/mysqldump_ra_20240702.sql
```

### 3. config/database.php に２つ目のmysql定義を作る

１つめからコピーしてきて、定義名とdatabase名のみ変更する

```
'mysql_old' => [
    'driver' => 'mysql',
    'url' => env('DB_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE2', 'laravel2'),
```

### 4. ２つめからデータを取得して１つ目にデータを入れるコマンドを作成する
参考: https://laravel.com/docs/11.x/artisan#generating-commands

```
php artisan make:command MigrateData
```

### 5. コマンドを作成する
DB:connection で過去のやつを引っ張ってきて新しいModelに入れてく感じ

```
public function handle()
{
    $users = DB::connection('mysql_old')->table('users')->get();
    foreach ($users as $old_user) {
        $user = new User();
        $user->name = $old_user->name;
        $user->email = $old_user->email;
        $user->password = $old_user->password;
        $user->save();
```

### 6. DBを初期化して実行する
DBはfreshしたほうが色々楽。テストデータ消したくない場合は気をつけてね。

```
php artisan migrate:fresh
php artisan app:migrate-data
```

### 7. マイグレーションが終わったら dump 取得する

```
mysqldump -u root -p laravel > /tmp/mysqldump_ra_20240708.sql
```

### 8. docker からデータ持ってくる

```
docker cp ra8-mysql-1:/tmp/mysqldump_ra_20240708.sql ./
```

このファイルを本番で使う感じ。

## tips

### 過去の APP_KEY が base64 じゃないので base64化する
base64 じゃない場合だけ。

```
$ php artisan tinker (動かない場合は composer require laravel/tinker 実行する)
$code = "Laravel6時代のapikey";
base64_encode($code);
```

コレを .env にセットして config:clear する

```
php artisan config:clear
```

## その他
どこで何を実行しているのかは読める人を想定。
`./vender/bin/sail` が面倒になったので docker 内から直接 `php artisan` 実行しているとか、書かないでもわかるよね。とか。
「パートナーファースト」を追求する！未経験PMが失敗から学んだプロジェクトマネジメントのコツ

# 概要
- ごあいさつ
- 企画物について
- 登竜門-プロダクト企画MTG-
- プロダクト企画MTGでのFB
- 振り返り

## ごあいさつ
皆さん初めまして。CBcloudでPMをしているMitsuと申します。
過去は居酒屋店長や営業職をしていましたが、縁あって昨年10月から未経験ながらPMとしてジョインしました。
現在は配送プラットフォーム「ピックゴー」の企画を担当しています。
今回は私が担当したものの紆余曲折あり、クローズとなった企画についてお話したいと思います。


## 弊社について
ものを移動したい荷主様からの配送依頼とその依頼をこなしてくれるパートナー(弊社では配送ドライバーさんのことをパートナーと呼びます)をつなぐ配送プラットフォームであるピックゴーを運営しています。

![スクリーンショット 2025-06-06 9.50.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3833215/fabc04e4-20db-46c1-9e98-56fc6054225d.png)



CBcloudのビジョンは「届けてくれる」にもっと価値を。を掲げていることあり、**パートナーファースト**というキーワードをよく使っています。プロダクト作りにおいても**パートナーの体験を損なっていないか**、**パートナーのためになっているか**を最上段に置いており、どの開発においても最も議論されています。

## 企画物について
今回私が企画したものはパートナー成約後キャンセル(仮名)と社内で呼ばれていたものです。
弊社では荷主様が案件を発注した後、運行するパートナーが決定すると荷主様の画面から案件がキャンセル出来ない仕様となっております。
キャンセルしたい場合は、荷主様から弊社のカスタマーセンター(パートナーサクセス)へお電話いただきキャンセル処理を進めるのですが、毎回電話が必要になるので、これを自動化しよう＝荷主様の画面でキャンセル処理できるようにしよう！と思った次第です。
この施策により、受電数も減らせればパートナーサクセス(PS)の業務負担を減らせると思った次第です。

## リリースに向けて
この依頼を挙げてくださったPSにヒアリングを行いながら、理想とする開発の要件を決め仕様を開発陣に落としていました。
リリースまでの期間は1か月半ほどで納期が迫っているなか、皆さんに本当に尽力いただきました。

## 登竜門-プロダクト企画MTG-
リリースに向けて残すのは、プロダクト企画MTGです。
これは、弊社からリリースする全施策について、
施策に問題はないか、パートナーのためになっているか、
CBcloudのプロダクトとしてリリースして良いものか等の議論を行う最終決定会議です。
~~(初めての時はとても緊張して声がうわずったのを覚えています)~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3833215/627b41c1-1b82-fcc8-e52f-b58960abfb4d.png)
※画像はイメージです。

ここまでの段階で開発QAともに完了し、残すは承認をもらうのみとなっていました。
**が、結果は不承認**
ここで自分の進め方、企画の考え方に足りていない部分があったことに気が付きました。

## プロダクト企画MTGでのFB
**パートナーファーストの考えを反映したプロダクトこそが弊社の強みである**

今回の企画は大前提「荷主様の体験向上」をスコープとしていたため、パートナーにかかる負担を考慮しきれていませんでした。
そうです。結果的に我々が最も大切にするべき「パートナーの体験」を蔑ろしていました。

案件が成約した後にキャンセルが発生するとは、パートナーからすると仕事がなくなること。
つまり、その収入をもとにやりたかったこと(各種支払いが出来たかもしれない、仕事を数日休めたかもしれない)それが一瞬で消えてしまうのです。

キャンセルが容易に出来るからこそ、そういった事例が増えてしまうかもしれない部分を考慮していませんでした。

受電数を減らす＝自動化ではなく、
**受電数を減らす＝そもそもキャンセルを発生させないよう案件を立ててもらう**
が本質的にやるべきことだと気が付けたことも今回の学びでした。。

結果、その後1か月にわたりパートナーの体験を考えながら、仕様の微調整を行い企画を通そうとしましたが、クローズとなりました。

##  振り返り
今回の企画で学んだことをつらつら書きたいと思います。
### 仕様を固める前に企画のコンセプトを壁打ちしよう。

いただいたFBをもとに要件の追加や見直しがあるなど、企画を進めるうえで必要な要素を考慮出来ていなかったと感じています。

**根本部分である企画のコンセプトについて早めに壁打ちを行いFBをもらう。**
そして素早く企画を進めることが大切であると思いました。
(全体的に受け身だったなと自分でも感じてます...)

### 自社のプロダクトの強みやミッション・ビジョン・バリュー(MVV)を今一度考える
他部署から来た依頼をそのまま形にするだけでは、PMの仕事とは言えないと思っています。
PMの仕事とは、もらった依頼を最大限尊重しつつもMVVとすり合わせること。
**そのうえで、依頼者側の希望も叶えつつMVVを達成するよう試行錯誤することが仕事だと思いました。**

良いプロダクトをスピード感をもって提供できるよう、今回の経験を活かし次回以降の企画を進めていきたいと思います！！

## 最後に
記事を通して感じてくださった方もいらっしゃるかと思いますが、
弊社CBcloudは「パートナーファースト」を徹底しており、内部で仕事をしていると全員が同じ目線目標をもって日々業務にあたっているため、非常に熱量がありやりがいを感じています。

最後の最後ですが弊社CBcloudではエンジニアを募集しています！！
この記事を読んで弊社に興味を持ってもらえた方、また物流業界にjoinしたいと考えている方はご応募いただけるとエンジニア一同大変うれしく思います:bow:
https://recruit.cb-cloud.com/entry
機械学習に必要な高校〜大学教養レベルの数学まとめ

弊社(https://yeskentei.com/company/ )、( https://deams.jp/  )のオウンドメディア:スマナビング！( https://linky-juku.com/ )にて、機械学習の理解に最低限必要な中学〜高校・大学1.2年レベルまでの数学(更新中)のまとめを公開しています。
今後少しずつこのqiitaにも役立つ記事を公開していきますので、宜しくお願いします。
![IMG_3996.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821890/030a5875-7d3a-d7dd-a0b8-70dc4f0bbdb1.png)
ロードマップ(簡易版)↑
現在のコンテンツ
https://linky-juku.com/math-for-machinelearning-matome/
・ベクトル→線形代数
https://linky-juku.com/linear-algebra-matome/
・微分積分→解析
・場合の数と確率→ベイズ統計
・データの分析→記述統計→頻度論
・周辺知識(三角関係・指数対数関数etc,,,)
Git入門：スタッシュとチェリーピック

Gitのスタッシュとチェリーピックは、コードの管理や特定のコミットを柔軟に扱うための便利な機能です。この記事では、スタッシュとチェリーピックの基本について記述します。

### 目次

1. スタッシュの基本
2. スタッシュの使用方法
3. チェリーピックの基本
4. チェリーピックの使用方法

### 1. スタッシュの基本

スタッシュは、現在の作業内容を一時的に保存し、クリーンな作業ディレクトリに戻す機能です。これにより、未完了の作業を保存して別の作業を行うことができます。

### 2. スタッシュの使用方法

### スタッシュの作成

現在の作業内容をスタッシュに保存するには、以下のコマンドを使用します。

```bash
git stash
```

### スタッシュの一覧表示

保存されたスタッシュの一覧を表示するには、以下のコマンドを使用します。

```bash
git stash list
```

### スタッシュの適用

最後に保存したスタッシュを適用するには、以下のコマンドを使用します。

```bash
git stash apply
```

特定のスタッシュを適用するには、スタッシュIDを指定します。

```bash
git stash apply stash@{0}
```

### スタッシュの削除

適用後にスタッシュを削除するには、以下のコマンドを使用します。

```bash
git stash drop
```

### 3. チェリーピックの基本

チェリーピックは、特定のコミットを現在のブランチに適用する機能です。これにより、必要な変更だけを取り込むことができます。

### 4. チェリーピックの使用方法

### チェリーピックの実行

特定のコミットをチェリーピックするには、以下のコマンドを使用します。

```bash
git cherry-pick <コミットID>
```

例：

```bash
git cherry-pick abc1234
```

### まとめ

この記事では、Gitのスタッシュとチェリーピックの基本について記述しました。スタッシュを使用することで未完了の作業を一時的に保存し、他の作業に集中することができます。チェリーピックを使用することで、特定のコミットを柔軟に適用でき、必要な変更だけを取り込むことができます。
Git入門：リベースとコンフリクトの解消

Gitのリベースは、ブランチの履歴をきれいに保つための強力なツールです。また、コンフリクトの解消も、複数の開発者が同時に作業する際に避けられない重要なスキルです。この記事では、リベースとコンフリクトの解消について記述します。

### 目次

1. リベースの基本
2. リベースの実行
3. コンフリクトの解消
4. コンフリクト解消後の作業

### 1. リベースの基本

リベースは、ブランチのベースを他のブランチに移動する操作です。これにより、コミット履歴をきれいに保つことができます。

### 2. リベースの実行

リベースを実行するには、以下のコマンドを使用します。まず、リベースしたいブランチに切り替えます。

```bash
git checkout feature-xyz
```

次に、リベースを実行します。

```bash
git rebase main
```

### 3. コンフリクトの解消

リベース中にコンフリクトが発生した場合、Gitはコンフリクトを報告します。コンフリクトが発生したファイルを手動で修正します。

コンフリクトのあるファイルを確認するには、`git status`を使用します。

```bash
git status
```

コンフリクトを修正したら、修正したファイルをステージングします。

```bash
git add <ファイル名>
```

### 4. コンフリクト解消後の作業

コンフリクトを解消してファイルをステージングしたら、リベースを続行します。

```bash
git rebase --continue
```

リベースを中止する場合は、以下のコマンドを使用します。

```bash
git rebase --abort
```

### まとめ

この記事では、Gitのリベースとコンフリクトの解消について記述しました。リベースを使用することで、ブランチの履歴をきれいに保つことができ、コンフリクトの解消を通じて複数の開発者が同時に作業する際の問題を効果的に処理できます。