OmniAICreator/Qiita-1.07M huggingface dataset:
生成AIの国内論文調査してみた

## はじめに

昨今生成AIを用いた研究やシステムが話題に上がることが多くなっており、トレンドとなっています。
その中で、生成AIのユースケースとはどのようなものがあるのか確認するのと合わせて、生成AIの活用をテーマに国内でどのような研究がされているのか論文を調査してみました。

調査した論文のなかでピックアップしたものの概要と所見を記載するので、興味があれば読んでみてください。

## 論文紹介

今回紹介させていただく論文になります。
|No|タイトル|著者|出版|
|----|----|----|----|
|1|}公務員試験対策のための対話型生成AI の活用|古矢一翔、林浩一|「情報教育シンポジウム」 2023年8月|
|2|StableDiffusionなどの画像生成AIを用いたドローン河川巡視用AIのデータ増強|高橋 悠太、藤井 純一郎、天方 匡純|人工知能学会全国大会論文集 JSAI2023 (0), p.1O3GS703-1O3GS703, 2023|
|3|損害保険会社における生成AIを活用した紹介応答支援システムの開発事例|筒井 正二郎、狩野 充弘、黒木 賢一、福本 彩、浜野 佑介、傍田 健治、齋藤 天眞、河本 竜法、小田島 拓、加藤 豪、本橋 洋介|人工知能学会全国大会論文集 JSAI2024 (0), 2A6GS1004-2A6GS1004, 2024|

## 論文：公務員試験対策のための対話型生成AI の活用

### 概要
対話型生成AIを利用して、作問とキーワード解説を行うことで、試験対策の効果的な学習方法として生成AIの活用プロセスを検討・提案する

### 所見
論文問題など、LLM特性から得られる情報は学習教材として有効な場面は多くみられると思いました。
AIを利用した学習のサイクルに注目していて、意識的に、または無意識的にでもAIを利用して情報を得る際には似たようなことをしている方も多いのではないでしょうか。
AIの設定などプロンプトをうまく利用すれば、より効率的な学習が期待できそうだということと、提案したプロセスが有効であるか展開を見たいと思います。

## 論文：StableDiffusionなどの画像生成AIを用いたドローン河川巡視用AIのデータ増強

### 概要
一般ごみなどの不法投棄をAIで検知する既存モデルを、画像生成AIにより生成された画像で学習改善されるか検証する

### 所見
既存モデルの学習材料にAIの生成画像を利用して、学習改善がされるかの検証論文でした。
実際に想定できるシーンがあっても、画像などの学習材料として用意できない場合などが想定されるのかなと思いました。
ただ、学習材料としてAIコンテンツを利用すると偏りなどが発生し、モデルが崩壊する可能性もあります。
今後、データ増強にAIコンテンツを利用して検証していく際に、そのような観点も検討材料に入っていくのか気になりました。

## 論文：損害保険会社における生成AIを活用した紹介応答支援システムの開発事例

### 概要
自然言語を理解する能力が高く、自然な回答を得られやすいLLMの特徴から生成AIを活用して照会応答支援を行う
照会応答の精度向上のため、プロンプトDBやRAGアーキテクチャをシステム構成要素として取り入れた開発・運用事例となっている

### 所見
類義語変換や用語集など、AIを利用する上で業務的な前処理にどう対応するか、
性能向上のために、チャンク分割やトークン数の組み合わせなども検証に取り組んでおり、生成AIを活用したシステム事例として参考になる論文でした。
マルチモーダルが今後の展望として触れていましたが、AIの性能向上に直結する部分だと思うので、今後のブラッシュアップなどが非常に興味深いと思います。

## まとめ

生成AIのユースケースとして、国内でどのようなテーマで生成AIの研究が取り組まれているか認識できた時間だったと思います。
自身の勉強時間としてもそうですが、社内勉強会のネタ作りも含めた久しぶりの論文調査は有意義なものでした。

時間を見つけて海外の論文についても調査し、またこのような形でまとめたいと思います。
Developers Summit KANSAI 2024に参加してみて

# 全体の感想
今回、初めてデブサミに参加しました。
エンジニアだらけの世界で、圧巻されましたがとても良い刺激になりました。

後、コーヒーやらお菓子やら全ての講演含めて「無料」ってすごい！！
エンジニアのGIVEの精神が凄いなと感じました。

# ブース
一人で参加したので、はじめブースの人に声をかけるのに少し戸惑いもありましが
色々聞きたかったので、話をしにいきました。
GitLabや、Postmanなど正直まだエンジニアの仕事に携わっていないので、あまり話が理解できませんでした。
相手は分かっている前提（自分をエンジニアだと思っている）で話されるので、「すみません、分かりません」と答える事が多かったです笑
### (無知の知)
しかし、この技術が当たり前なんだ、俺はこんな事も知らないんだ、と気づきが沢山生まれました。


後、シンプルにサービスの説明をしているブースの人達がとてもイキイキしていました。

# 【講演】　私のエンジニア人生とさらなる悪あがき
榊原 彰[パナソニック コネクト]

この人の結論は、「エンジニアって素晴らしい。
大変な事もあるけど、新しい技術を学び続けられる。こんな良い仕事ありますか？」
って事でした。
とてもロマンに溢れる講演でした。


# 【講演】　シリコンバレー流ソフトウェア開発術
石原 直樹[Greek Alphabet Software Academy]

この人の講演は、非エンジニアの僕にもわかりやすくエンジニアについて語ってくださいました。

・シリコンバレーでは新しいサービスが沢山生まれ、沢山死ぬ(終了)。まさに多産多死。だから生き残ったサービスが強い。

・生き残った強いサービスや、技術、歴史に乗っかる事が大事。

・エンジニアは、枝葉の技術じゃなくて、本質・根本の技術、力が大事。
じゃないといつか倒れてしまう。


他にも受けましたが特にこの2つの講演が印象的でした。

# 呆気にとられたエピソード
講演者が、「エンジニアあるある」について話している時、僕は正直ちんぷんかんぷんでした。
しかし、ある人は「うんうん！」と首を縦に振って共感していました。
「え、わかるんや！！」と衝撃を受けました。
WindowsPCでAndroid端末のレイアウトを確認

# はじめに
Android端末が手元にない状態でAndroid端末でWebアプリケーションのレイアウトの確認を行わなければならない場合のメモがてらにこちらの記事を書かせていただきました。

# 手順

## 1. Androidエミュレータをダウンロード

<details><summary>エミュレータとは?</summary>
PC上に仮想のAndroidデバイス環境を作成するソフト
</details>

私は[BulueStacks](https://www.bluestacks.com/ja/index.html)を使用いたしました。
こちらからダウンロードを行えます。

https://www.bluestacks.com/ja/index.html

## 2. Chromeをインストール
検索バーを用いて"Goole Play"より"Chrome"をインストール
[![Image from Gyazo](https://i.gyazo.com/988b63fed0b4205b7e89a5b1de5d89a0.png)](https://gyazo.com/988b63fed0b4205b7e89a5b1de5d89a0)

## 3. デバイスをスマホに設定
1. 起動した"BlueStacks App Player"のウィンドウの右下の歯車アイコンを押下し設定画面を開く
2. 左サイドバーから"ディスプレイ"を押下
3. "画面解像度"の欄を下記の画像のように設定し、"変更を保存"を押下(及びBlueStacks App Playerを再起動)
[![Image from Gyazo](https://i.gyazo.com/df2e4a482d659ebcd1ff22eac7c85b64.png)](https://gyazo.com/df2e4a482d659ebcd1ff22eac7c85b64)

## 4. 完了
スマホのレイアウトを確認できます！
[![Image from Gyazo](https://i.gyazo.com/da44f9cfc7673f1d4946fd3332b8530a.png)](https://gyazo.com/da44f9cfc7673f1d4946fd3332b8530a)

# 参考
こちらのサイトを参考にさせていただきました！
https://letsview.com/jp/android-emulators-for-pc.html

# 余談
- 他のエミュレータやMacPCでも作業ができないか確認できたら良いなと感じました
- 私はデフォルトの端末情報(Samsung Calaxy S20+)のまま使用いたしましたが、ドロップダウンメニュー内には他にも選択可能でした
[![Image from Gyazo](https://i.gyazo.com/254bff78108afb88cbdbe91256b2feeb.png)](https://gyazo.com/254bff78108afb88cbdbe91256b2feeb)
treeコマンドをファイル単位で出力

# はじめに
はじめに、windowsで`tree`コマンドを使用すると、フォルダ単位でしか表示されないです。そのため、ファイル単位での表示方法を紹介します。

# 手順
以下コマンドを実行してください。
```
tree /f
```
以上。
Viewの操作方法

Androidで画面（レイアウト）を操作する方法を3つメモする。
基本はView Bindingを使用して、LiveDataなど何かしらの機能を使いたい時はDataBindingを使用する。

### findViewById

初期からある実装方法。コードが冗長。nullableのためnullを考慮する必要があり、クラッシュの可能性がある。現在は非推奨なので新しい実装では使用しない。

```kotlin
val editTextView = findViewById<EditText>(R.id.editText)
editTextView.setText("Hello world!")
```

### DataBinding

定義が簡潔。型安全で型を指定する必要がない。戻り値がNonnullで別レイアウトのIDを指定することがなく、それが原因のクラッシュを防げる。ビルド時間が長い。

```kotlin
val binding = FragmentFirstBinding.inflate(layoutInflater)
binding.button.setOnClickListener {
    // 処理記述
}
```

### ViewBinding

DataBindingと同じ定義で、型安全、Nonnnullにである。ルートタグをlayoutタグにする必要がなく、ConstraintLayoutタグやLinearLayoutタグなどでもBindできる。ビルド時間は普通。

```kotlin
binding = FragmentSecondBinding.inflate(layoutInflater)
binding.text.text = "Hello world!"

```


#### 参考
https://qiita.com/atr/items/cc5d2a1eff9a0ba44990

https://engineer.retty.me/entry/2019/12/04/120000
OAuthってなんぞやって話を初心者にもわかりやすく書いてみた


先日LTさせていただいた時に、聞き手の頭をはてなまみれにしたOAuthについて一般の人向けにも解説してみます。

:::note warn
免責事項
この内容は学校法人角川ドワンゴ学園および、学園の公式としての文章ではありません。
なお、この記事は学内LTの内容を非エンジニア向けにふわっと概要を掴んでいただくために書いてあるものですので、厳密には違う表現が含まれています。
そういった点に関しては後日訂正したりしなかったりするのでご了承ください。
:::

なお、現在、デジタルサークルUniProjectでは、**UniQUE**という、OAuth2.0(OpenConnectID)統合認証基盤を開発中です。
よければ、Discordサーバーに入って、メンバー登録をして、一緒に開発を進めてくれれば幸いです。

https://discord.gg/nmjdqaZYVg

OAuthとは、一言で言うと、ズバリ、サードパーティ製のアプリに対してIDやPWを直接渡すことなく認証を通す方法の規格のことです。
これだけ言われると「は？」だと思うので、噛み砕いていきましょう。

## サードパーティ製のアプリとは

サードパーティ製のアプリとは、なんぞやって言う話だと思うのですが、例えば、こういうものがあります。

- TwitterCircle
- QiitaのGitHubでログイン
- SpotifyのAppleでログインや、Facebookでログイン、Googleでログイン

などなど...

これらの

- TwitterCircle
- Qiita
- Spotify

がサードパーティ製のアプリケーションです。

つまりどういうことかというと、**別のシステムやサービスから情報を取得したり、操作したりするアプリケーションのこと**を指します。
Spotifyであれば、Googleでログインすると、Googleからメールアドレスなどの情報を取得してきているわけです。つまり、Spotify以外の**別のシステムやサービスから情報を取得している**わけです。
他にも、Twitterのサードパーティ製のアプリだと、フォロワーの一括削除ツール、ツイートの一括削除ツールなどもありますよね？それは、**別のシステムやサービスを操作している**ことになりますよね？
そういうことです。

## IDとPW渡したらあかんのか

そんなことをしたらあかん理由は2つあります。

### 乗っ取られる

操作してもらうんだから、認証情報渡さないとだよね、IDとPW渡そうね、というのは間違いです。
そんなことしたら、**アプリの開発者もIDとPWはログから見れるので乗っ取られます**。

### 権限を制限できない

IDとPW渡したらフルコントロールを許可することになります。
なので、OAuthには**スコープ**という概念があり、どのデータを参照できるか、どの操作ができるかを制限しています。

### 権限を剥奪できない

IDとPWを渡したら、権限を途中で変更したり削除することができませんよね。
PWを変更するにしても、Aというアプリの権限のみ削除したいのにBというアプリも権限がなくなるので、再ログインが必要になったり、めんどくさいです。

なので、IDとPWを直接渡さない、権限を制限したPWのようなものを渡します。
そうすれば、トークンに対してのIDで識別し、権限変更や削除、無効化などが容易になります。
その権限を制限したPWのようなものを、**トークン(TOKEN)**、それを安全にサードパーティ製アプリに渡す仕組みを**OAuth**といいます。

## OAuthの通信の順序

OAuthの通信順序ですね。
規格で決まっているのは1-4の流れですが、必然的にその後も決まってきます。

1. サードパーティ製アプリがOAuthの認可サーバーに対して要求
2. ユーザーに「このアプリに権限を与えますか？」みたいな画面が出る
3. ユーザーが許可する
4. トークンを生成し、サードパーティ製アプリケーションに送信する
  (この場合、tokenが露見することを防ぐために、有効期限が短期間なcodeが使われることが多いがここでは割愛)
5. アプリケーションがトークンを使ってアプリケーションに対してリクエストを投げる
6. 電子署名なりで認証サーバーが認証し、リソースサーバーへ通信を通す
7. リソースサーバーはデータを返す
8. (トークンが期限付きで、リフレッシュトークンがあれば)期限が切れたトークンを破棄し、リフレッシュトークンというトークン再発行にのみ使えるトークンを用いて新しいトークンをもらう

こんな感じですね。
登場人物として、

- リソースサーバー - データを保存していて、DBと通信したりすることもある
- 認可サーバー - ユーザーが許可すれば、トークンを発行する
- 認証サーバー - トークンの有効性を検証し、リソースサーバーへ通信を通すかを判断する

というのがありますが、これらは統合されて開発されることもあります。
現にUniQUEもそうですね。

## まとめ

OAuth考えた人天才！！

では、また...

## 最後に...

冒頭でも書きましたが...

### UniQUE開発者募集中

現在、UniQUEという、OAuth認証基盤を製作中です！
他にも、デジタルサークルUniProjectでは、プログラマーだけでなく、

- 音楽制作
- プログラミング
- 映像制作
- デザイン
- 3Dモデリング
- ゲーム制作

などなど、デジタル創作活動に興味がある人をゆるーく募集しています！！

お金は一切かかりません！活動義務もありません！！
どうぞお気軽に...！！

HP:

https://www.uniproject-tech.net

GitHub:

https://github.com/UniPro-tech

Discord:

https://discord.gg/nmjdqaZYVg
(Flutter) FCMのonBackgroundMessageがiOSでは機能しない

#### はじめに
- 私が開発に携わっているFlutter製のアプリで、FCMから送られてくるサイレントプッシュを受け取り、それをきっかけにアプリ上でバックグラウンド処理をかけたく、可能かどうかの調査を行った。
- この記事は、2024年9月27日段階で、調査し分かったことをまとめたものになります。

#### onBackgroundMessageについて
- Flutterでバックグラウンドメッセージ処理するには、FCMから提供されている`onBackgroundMessage`を使う必要がある。
- `onBackgroundMessage`を使用する時には、トップ関数にしないといけない、ハンドラに`@pragma('vm:entry-point')`アノテーションを付ける必要がある、など注意点が何個かある。
- また、バックグラウンドでは、アプリの状態を更新したり、UIに影響するようなロジックは実行できなく、ローカルストレージの更新などは可能とドキュメントに書かれていたため、今回は`SharedPreferences`にデータが保存されるかどうかをAndroid・iOSで検証した。

詳細: https://firebase.google.com/docs/cloud-messaging/flutter/receive?hl=ja#background_messages


#### 結論
- **FCMの`onBackgroundMessage`は、androidでは機能する、iOSではOSの問題で機能しない。**
- そしてそれを解決する方法は現状明らかにされていない。

#### 原因
- iOSで`onBackgroundMessage`が機能しない問題は、iOSのバックグラウンド処理の制限にある。
- iOSは、バッテリー寿命を延ばすために、バックグラウンドでのアプリの動作を厳しく制限しているらしく、特にバックグラウンドでネットワーク通信やCPUの使用は厳しく制限されている。
- これにより、FCMからサイレント通知を送っていたとしても、iOSのバックグラウンドで受け取ることが困難になっている。

参考: https://perfectflutter.com/339/flutter%E3%81%A8ios%EF%BC%9Aonbackgroundmessage%E3%81%8C%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%AA%E3%81%84%E5%95%8F%E9%A1%8C%E3%81%AE%E8%A7%A3%E6%B1%BA%E7%AD%96/

#### 試したこと
- GitHub上では、開発者が様々な議論を繰り広げており、`'content-available'=> 1`や`'apns-push-type' => 'background'`、`'apns-priority' => '5'`等をペイロードに含めると機能するようになるという話が挙がっており、何パターンか試してみたがダメだった。
https://github.com/firebase/flutterfire/issues/6290
https://github.com/firebase/flutterfire/issues/9381 など
- また、シミュレータと実機、どちらで試してみても変わらなかった。

ドキュメントにできると書かれているのに、できないとなるとがっかりしますね...。
しかし今後、解決手法が見つかる可能性もありますので、最新の情報をチェックしていく必要があります。
以上、2024年9月27日現段階で調査し分かったことのまとめになります。

ご覧いただきありがとうございました。
Golandでファイルとそのtestファイルをまとめる設定[Go,InteliJ]

インターン先のメンターさんに、Golandで下の画像のようにgoのファイルとそのテストファイルをまとめる方法を教えていただいたので、そちらを共有したいと思います。

![スクリーンショット 2024-09-27 14.58.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/f2977635-999d-ae91-3152-0f8d0ed0641e.png)

# Golandでの設定

左の方にある下の画像に写っている3点リーダを探します。
![スクリーンショット 2024-09-27 14.59.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/1e77b9bb-3d8e-a1f3-046a-963cd304a6d5.png)

そうすると下のような欄が出てくるので、`File Nesting`を選択します。
![スクリーンショット 2024-09-27 15.00.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/3e5f65c4-aa93-afa4-0f74-f8defc4c6235.png)

下の画像のようにファイルの拡張子とその派生名のようなものが写った画面になると思います。
![スクリーンショット 2024-09-27 15.01.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/85013818-b2bd-158f-7b3d-5ac3dd866c3c.png)

左の`Parent File Suffix`が`.go`になっているところの、`Child File Suffix`に`_test.go`を追加してください。

```
_test.go
```

もし前にファイル名が既に記載されている場合は

```
;_test.go
```

を追記してください。
【メモ】整理して分かった厳選VSCode拡張機能

# はじめに

私も最初色んな方のQiitaを読んで色んな拡張機能を入れました．
そうする中でごちゃごちゃになってきたので，一度いらない拡張機能を削除．
日頃すごく助かっているもののみを残しました．

自分のメモついでに，記事にします．
他におすすめなツールがありましたら，コメントで教えてください！

# VSCodeの有能な拡張機能集

一般
- zenkaku
- Japanese Language Pack for Visual Studio Code
- Material Icon Theme
- indent-rainbow
- Rainbow CSV
- vscode-pdf

Gitを利用した開発を行う
- GitLens
- GitGraph

SSHした環境で開発を行う（ラズパイにSSHして直接開発もできる神ツール）
- Remote - SSH
言語化が苦手？成長につながるスキルを身につけよう！

# 言語化について

皆さんは**言語化**得意ですか？
仕事をするうえで人と会話することは必ずありますよね。
その中で自分の思っていることを**言語化する能力は必要なスキル**になると思います。私自身も言語化が苦手なので自分のためにも記事を書こうと思います。

:::note
まず初めに言語化の<font color="blue">**メリット**</font>を以下にまとめましたので1つずつ解説していきます。
:::

## １．自己客観視
![自己客観視 (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3875902/e56919c3-bda9-f166-2d2a-824720c82e05.png)





自分の感情や行動を整理し、<font color="red">**自己改善の促進するきっかけ**</font>になります。例えば、**自分の意見を言語化する際にその意見の根拠や背景を考える**ことによって、**より深い理解が得られます**。このプロセスを通じて**自分の強みや弱みを客観的に把握**できるようになり、今後の**行動や判断に役立てる**ことができます。

## ２．思考の整理
![自己客観視 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3875902/7ebe67f0-1971-82c6-44e2-4f65cbd22819.png)



言語化することによって<font color="red">**自分が何を伝えたいのか、何を考えているのかの整理の機会**</font>にもなります。例えば**目標設定をするときの行動目的を細分化**することで**具体的な行動計画**を立てやすくなります。

## ３.学習効果の向上
![自己客観視 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3875902/d8c4728e-9579-1662-03c4-ff1d58e80311.png)


何か勉強するにあたって<font color="red">**自分でどれだけ理解できるかが重要**</font>になります。言語化ができることで、学んだ内容を自分のわかりやすい言葉で説明できるようになり**アウトプットがしやすくなります**。
これによって**自分に何が足りないのか修正しやすくなります**。
***
:::note
このように**言語化できると自分自身の成長につながる**ことがわかりました。
では、<font color="red">**実際に言語化能力を上げるためには**</font>どうしたらいいのか？
**今すぐに実践できるもの**をピックアップしてみました。
:::

## １．いつも相手の立場で考える
![自己客観視 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3875902/324e0358-9aaa-bca6-14f3-ec356e01255f.png)


言語化が<font color="red">**上手な方は相手に合わせて話し方を変える**</font>ことができます。
**目上の方と小学生に同じ話をするとき、どちらにも同じ話し方はしない**ですよね。相手にわかりやすく、**簡潔に答えること伝えることが大切**です。
相手は何を知りたいのかを**察する能力も必要**になってきますね。

## ２．少しでも関心のある言葉はすぐに検索する
![自己客観視 (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3875902/03073819-6ab5-2383-a1ff-188898085fd4.png)

<font color="red">**人の記憶力は一日で６６％消えるといわれています。
また、覚えたことは１時間後に５０％程度忘れてしまうようです**。</font>
その為、**すぐ検索せず後回しにしてしまうと忘れてしまうことが多いです**。言語化能力を上げるためには<font color="red">**語彙力を上げることも同時に必要になります。**</font>
何度も**復習、アウトプットの実行**を行うことで自信につながり効果的です。

## ３．話し方の形を作る
![自己客観視 (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3875902/f97eb79d-6a54-7b96-4f34-4dd8c70f7998.png)

自分の中で話す内容が決まっていてもいざ話してみると言葉が詰まってしまうなど経験はありませんか？**この状況を避けるためにあらかじめ話し方の形を作っておくことが大事です。
具体的には、<font color="red">伝えたいポイントを分け、話す順序を考えます。**</font>
実際に言葉に出してみることでどのように言ったら相手に伝わりやすいかを実感し、改善することが可能です。
***
:::note
言語化が**得意な方は様々な知識を持っています。**
その中で自分がよいと思ったことを**取り入れていくのが優れているとも言えます**。その為には**本を読む、ニュースを見る、だれかと会話すること**で知識を得られます。
小さい目標から決め、徐々に向上していけるようにしましょう。
:::

## さいごに
今回は、言語力についてまとめました。
苦手な理由として知識不足な部分もかなりあるので、まずは知識をつけるところから頑張りたいと思います。
また、こうしてアウトプットの継続もしていきたいです。
個人用雑多備忘録

# はじめに
個人的に覚えておきたいけど忘れるかもしれないことに関してまた調べなおさなくていいように残しておくための備忘録です。
自分用に書くから公開する必要はないけど、誰かの助けになる可能性もあるので、読みやすさとかまったく気にしないけどここに書き残しておくので自由に見ていってください。
気が向いたらそれぞれを独立記事に清書するかもしれないけど気が向かないかもしれない
でも全く記録を残さないよりはマシと考えてここに書いておきます。
たぶん時が経つにつれ長くなっていくから目次から飛んでね

# Power Toysのマウスの検索機能の設定について[作成2024/09/27_最終更新2024/09/27]
マウスをシェイクすると強調表示で教えてくれる機能の設定項目がいまいちわかりづらかったので自分の推測をメモしておく
![{EA5D9CFE-24DE-44A6-9B5C-5131168AF6A8}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850759/50e5277a-295e-65c0-8b49-3f9132d87ccc.png)
- シェイクの最短距離
    - 後述のシェイク ファクターを基準に起動するが、この設定よりも移動距離が短ければ起動しないということかと思われる
- シェイク間隔 (ミリ秒)
    - 過去何ミリ秒間のマウスの動きをシェイク検出のために記録するかという設定だと思われる
- シェイク ファクター (パーセント)
    - 説明の"移動領域"とは多分、
「過去、[シェイク間隔]ミリ秒間の間にカーソルが存在した場所全てを含む最小の矩形領域」という意味だと思う。
その`矩形領域の対角線 * [シェイク ファクター]%`を超える移動量が 過去、[シェイク間隔]ミリ秒間に検出されたら起動という意味と推測

以上から動作基準は多分こんな感じ
```:疑似コード
矩形A = 過去[シェイク間隔]ミリ秒間のカーソルの存在位置を全て含む最小矩形領域
距離B = 過去[シェイク間隔]ミリ秒間のカーソルの総移動距離
if 距離B >= [シェイクの最短距離]{
    if 距離B > [矩形A].対角線.長さ * ([シェイク ファクター] / 100){
        カーソルを強調表示する
    }
}
```
つまり、シェイクの最短距離が0、シェイク ファクターが200ならば1pxずつ右、左、右に移動すれば起動する
とりあえず、上から100,1000,350に設定してみたので様子見(2024/09/27)

# ショートカット一つで音声入出力先を変更する[作成2024/10/01_最終更新2024/10/09]
以下を参照
[GitHub Gist](https://gist.github.com/kiritannplum/10d3580bb19f53cd700ff9859113d0e0)

# Snipping Toolでスクショしても画像が開かれない問題の解決法[作成2024/10/01_最終更新2024/10/01]
`Windows + Shift + S`でSnipping Toolを起動し、範囲選択してスクショをしてもその後開かれるはずの画像のプレビュー・編集画面が開かない時は、
`Windowsの設定`→`アプリ`→`既定のアプリ`
を選択し、`snipping tool`で検索して選択、一番下から2番目の`MS-SCREENCLIP`を、`画面の領域の切り取り`に設定することで解決します。

# デスクトップやエクスプローラーにLinuxの項目が表示されて削除できなかったり、WSL Settingsがアンインストールできない問題が解決した方法[作成2024/10/08_最終更新2024/10/08]
よくわからないけど、`wsl.exe --uninstall`をしたら解決した

# ChromeでPDFがダウンロードされて閲覧ができない現象の修正[作成2024/10/16_最終更新2024/10/16]
アドレス欄に`chrome://settings/content/pdfDocuments`と入力する
`Chrome で PDF を開く`を選択

# Ubuntuの画面にノイズがかかるときの直し方[作成2024/10/20_最終更新2024/10/20]
2種類ある。後者がおすすめ
- ログイン画面で歯車マークを押し、`Ubuntu`か`Ubuntu on Xorg`を切り替える
- `Alt+Ctrl+F3`でCUIモードにして、`Alt+F2`でGUIモードに戻る

参考

https://blog.goo.ne.jp/goosyun/e/f10c34f0f793f35ac8132dd18a04a100

# Equalizer APOでエフェクトやノイズキャンセリングをかけてるのにDiscordでは効果が無い時の直し方[作成2025/03/28_最終更新2025/03/28]
設定→音声・ビデオ→オーディオのサブシステム
をスタンダートかレガシーにするだけ

参考

https://www.reddit.com/r/EqualizerAPO/comments/1h99m0g/comment/m4ckuxk/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button

# Equalizer APOで"No device matched"と出て、効果が無くなる問題への対処法[作成2025/03/28_最終更新2025/03/28]
デバイスの識別に使用するUUIDが再起動や再接続で変更されてしまうのが原因
Configuration Editorで開いているはずのconfig.txt（通常なら `C:\Program Files\EqualizerAPO\config\config.txt` にあるはず）を開いて、`Device:`で始まる行のUUIDを削除するとUUIDに縛られずにデバイスを選択されるようになる
```
＜例＞
修正前
Device: マイク HyperX SoloCast {38b87981-5426-4b5c-8f42-77f1c76fb527}

修正後
Device: マイク HyperX SoloCast
```
OPENAI API の使い方

# OPENAI APIの使い方

# 手順
## OPENAI API KEYを発行する。

 - まずは、以下の手順でOPENAI API KEYを発行する。
 1. 以下リンクにアクセスして、ログインする。
     - https://platform.openai.com
 2. 右上の「Dashboard」をクリック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3324271/73611883-177c-9ad3-6775-8adb050297b4.png)
 3. 左の「API KEY」をクリック
     ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3324271/e61b47a0-b32e-1c9b-fbe0-73c680397767.png)
 4. 右の「Create New Key」をクリック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3324271/84eaa6e0-5890-47ae-c0a9-fa40918f9e3d.png)
5. Nameに適当な名前を書いて、Permissionsは適当に設定して、「Create Secret Key」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3324271/85001ccf-cf82-06f5-c3a2-a5d9b32f8e2a.png)
6. 出てきたAPI KEYをどこかにメモしておく

※出てきたAPI　KEYは絶対に公開せず、秘密にする！

## Chatにアクセスする
 - ここでは,Pythonからのアクセス方法を記載する。
 - 以下のコードは安全な環境で実行してください。
 1. 必要なパッケージをインストールする。
    ```bash
    pip install openai
    ```

 2. 以下のコードを実行し、OPENAI_API_KEYを入力する。
    ```python
    import getpass
    import os
    
    # コードにベタ打ちしないように、getpassで取得する。
    # このコードを実行すると、入力画面になるので、そこで入力する。
    os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API key: ") 
    ```

 3. openai apiにアクセスする。
    ```python
    from openai import OpenAI
    client = OpenAI() 
    
    def get_openai_response(system, user):
        response = client.chat.completions.create(
            model="gpt-4o", # 好きなモデル名を入れる
            messages=[
                {"role": "system", "content": system}, # システムプロンプト
                {"role": "user", "content": user} # ユーザープロンプト
            ]
            seed=0, # シード: 再現性を高める
            temperature=0, # 温度: LLMの乱雑さをなくす
        )
        return response.choices[0].message.content
    ```
 4. 好きなプロンプトを入力する。
    ```python
    system_prompt = 'あなたは今からリンゴしか答えられません。'
    user_prompt = 'しりとりの最初の単語といえば？'
    get_openai_response(system_prompt, user_prompt)
    ```
 # 参考
 - モデル名は以下のサイトに書いてあります。
     - https://platform.openai.com/docs/models/gpt-4o
 - 赤枠で囲った文字をモデル名として入力することで、使えます。
     - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3324271/788cf810-6f4c-356a-1615-5dd6663f4917.png)

 # おまけ: RAG Assistantの作り方
 （追記予定）
Excel上のPythonで使えるMatPlotLibで日本語文字化けを解消する方法

## ExcelからPythonが直接使えるようになりました

私は業務でMicrosoft365のExcelばかり使っているんですが、いつの間にか数式タブからPythonが使えるようになっていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280363/89ac5905-e245-1acc-12a7-d6d57f993905.png)

ショートカットキーも使えます。セルで「CTRL」+「SHIFT」+「ALT」+「P」を同時押しするとPythonを起動することができます。このようにセルが変わってPythonのコマンドが入力できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280363/56a53c2e-73a4-1e14-f7ae-ed31d9ffcb18.png)


ExcelのPythonはPIPなどを使って、ネットからライブラリをインストールすることはたぶんできません。

ExcelのPythonで使用することができるライブラリについては、初期化というところで、どういったライブラリがインポートされているのかを確認することができます。

いまのところ以下のライブラリが使えるようです。

``` python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels as sm
import seaborn as sns
import excel
import warnings
```

今回は`matplotlib`について文字化けを解消する方法を説明します。

## MatPlotLibはチャートを表示するためのライブラリ

MatplotLibはPythonのデータをグラフ化するときによく使われるライブラリです。

しかしながら、Excelで使用するとラベルが豆腐になってしまい使い物になりません。

豆腐とはこんな感じになります。全くラベルがわからない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280363/efa48ad1-6d09-deea-1e39-e07bc7508c06.png)

## MatplotLibの文字化けを治す方法

MatPlotLibで設定されているフォントを確認しましょう。`sans-serif`となっているかもしれません。これが文字化けの原因です。

```python
import matplotlib
print(matplotlib.rcParams['font.family'])
```

MatPlotLibで使えるフォントは以下で確認することができます。

```python
import matplotlib.font_manager
print([f.name for f in matplotlib.font_manager.fontManager.ttflist])
```

そうすると`Meiryo`とかが使えるということがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280363/b6ba2293-1b46-3a4b-b6b4-0eafd29d5fc3.png)


以下のようにフォントを再設定することができます。

```python
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Meiryo'
```


この設定でチャートを作成すると日本語が文字化けされずに表示されます。
「マージ先間違えちゃった！」の対処法？

## 起きた問題
新しくPRを作成しようと思ったのですが、PRを作成したタイミングではまだ親branch(以下、Abranch)をmainに取り込んでいなかったので、親branchをベースbranchとして作成しました。
※ こんな感じです↓

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3819517/99e52480-ca1a-c841-de35-609079bb3129.png)
しかし、上司にレビューをしていただいた後にPRをmainにマージしようとしたつもりが、mainではなくAbranchにマージしてしまうという事がありました。
多分ほとんどの方に経験があると思います。あるはず、いや、絶対あります！
## 解決方法
シンプルにmainをベースbranchとしたPRを作り直しました。
## 対策
上記の解決方法で一応なんとかなるのはなりますが、再作成したPRに不備があったりだとか、mainに取り込めていないことに気がつけないような事も全然あり得ますよね？
なので、何か対策できないかなと上司に相談したところ、マージしたbranchを自動で削除する方法がいいのではとアドバイスいただきました。
mainから派生した子branchをマージすれば、自然と孫branchのベースbranchも親branchに切り替わるので、確かに良いアイディアですね！
早速取り入れました。

※こちらの一番下の項目(Automatically delete head branches)になります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3819517/b29ceceb-c67b-4a87-ef4b-63e440847459.png)

## 最後に
元々うっかりが多い人間なので、github上で操作する時は気を引き締めないと思いました。
JSONからパターンマッチで欲しい情報をサクッと取り出す

Webhookのレスポンス（JSON形式）から特定の値だけを取り出したいときにパターンマッチをつかうと便利だったので紹介します。

:::note info
以下を `irb` で直接打ち込みながら動作確認できます
:::


:::note warn
正常系・異常系を書く場合、case-inを使うほうが適切な場面もあります。
決まったレスポンスを扱うときや、取得できなかった場合の適切なエラーハンドリングをおこなう前提で使うようにすること。
:::



# シンプルなkey/value
```rb
json = {
  "id": 1,
  "name": "John Doe",
  "email": "johndoe@example.com",
  "registered_at": "2024-01-15T10:30:00Z"
}
```

## nameとemailだけほしい

```rb
json => { name:, email: }

name
=> "John Doe"

email
=> "johndoe@example.com"
```

# 配列の先頭の住所を取得する
```rb
json = {
  "user": {
    "name": "Alice Johnson",
    "age": 29,
    "addresses": [
      {
        "postal_code": "1234567",
        "address": "123 Main St, Springfield"
      },
      {
        "postal_code": "7654321",
        "address": "456 Elm St, Shelbyville"
      }
    ]
  }
}
```

```rb:=>の例
json => { user: { name:, age:, addresses: [{ postal_code:, address: }, *] } }

name
=> "Alice Johnson"

postal_code
=> 1234567
```


:::note info
irbに上記のJSONを与えるとkey名がシンボルに変換されるのですが、実務ではJSON.parseなどをつかってレスポンスを変換するとおもいます。そのときは `symbolize_names: true` を忘れずに。

```rb:keyをシンボルとしてパースする例
json = JSON.parse(request.body.read, symbolize_names: true)
```
:::
RailsとPostgreSQL：テーブルのプライマリキーにUUIDを使用する方法

## 読んで欲しい人
- 新しく生成するテーブルのプライマリキーをUUIDにしたい人
- 過去の自分

## やり方
1. モデルを生成するコマンドを打ち込む `rails g model User`
2. 生成されたマイグレーションファイルに下記を記述する
```202409243365_create_user.rb
class CreateUsers < ActiveRecord::Migration[7.1]
  def change
    # pgcryptoを有効化する
    enable_extension 'pgcrypto' unless extension_enabled?('pgcrypto')
    # idオプションにuuidを指定する
    create_table :users, id: :uuid do |t|
      t.timestamps
    end
  end
end

```
`db:migrate`をしておしまい

生成したモデルのプライマリキーにはUUIDがディフォルトで指定されている

## 解説

### これは何？
```ruby
enable_extension 'pgcrypto' unless extension_enabled?('pgcrypto')
```

`pgcrypt`を有効化している

`enable_extension 'pgcrypto'`でpgcryptを有効化している
`unless extension_enabled?('pgcrypto')`が`true`だったら何もしない

### pgcryptとは何？

PostgreSQLが提供している拡張機能。
データの暗号化、ハッシュ化、ランダム値生成などを行ってくれる

※暗号化やハッシュかについては取り上げません

### なぜUUIDにするのか？

セキュリティの向上のため

Railsがディフォルトで用意しているidだとURLを予想しやすい
悪い人は「このURLの値を変えれば他の人の情報にアクセスできるのでは？」と考える

```
https://example.com/users/1
```

UUIDを使用するとURLから個人情報にアクセスしにくい

```
https://example.com/users/A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11
```

## 補足

公式より

> You need to enable the pgcrypto (only PostgreSQL >= 9.4) or uuid-ossp extension to use uuid.

`uuid-ossp`の拡張をオンにする設定でもUUIDは設定が可能です

## 感想

- 一度設定方法をミスってエラーが出たので、公式ドキュメントはちゃんと読まなければ
- ないよりも、あった方が良いUUID

## 参考
https://guides.rubyonrails.org/v5.0/active_record_postgresql.html#uuid
【WSL2】/etc/resolv.confが変更できない

<!-- 
【WSL2】/etc/resolv.confが変更できない
-->

## TL;DR
- 名前解決ができない → `/etc/resolv.conf`を変更し再起動。or `/etc/wsl.conf`で`generateResolvConf = true`を設定し再起動。
- `/etc/resolv.conf`などが変更できない → `sudo vim` で編集する。
- ファイルが`imutable`になっている場合 → `sudo chattr -i /etc/resolv.conf`で解除できる

## はじめに
家から出て図書館で、`git clone`しようとすると、失敗。
もしかして、と思って`sudo apt update`してみると、`IGN`がたくさん出て進行度は0%のまま。
名前解決ができていないのでは？と思い、`/etc/resolv.conf`を見てみると、`nameserver 8.8.8.8`でうまくいっていそう。

[ここ](https://qiita.com/XPT60/items/89da1034d206348d4109#%E3%82%84%E3%81%AF%E3%82%8A%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84%E3%82%89%E3%81%97%E3%81%842023411%E8%BF%BD%E8%A8%98)を見ると、

> power shell で
> ```shell
> $ ipconfig /all
> ```
> として、ホストのwindows がネットワークに接続している接続のDNSサーバのIPアドレスを調べます。それを、resolv.conf に追加しました。

とあるので、`/etc/resolv.conf`にホストのDNSサーバのIPアドレスを追加してみることにした。

## ここで詰まる
`/etc/resolv.conf`を編集しようとすると、`Permission denied`が出る。

`sudo vim`での編集を試みたり、`sudo echo "nameserver ***.***.***.***" >> /etc/resolv.conf`を試みたりするも、`Permission denied`が出てしまう。

[ここ](https://askubuntu.com/questions/947574/no-write-permissions-on-a-file-even-with-sudo)を参考に、`sudo chmod 744 /etc/resolv.conf`を試みるも、そもそも`chmod`実行時点で`Permission denied`してしまう。

## Permission の勉強をする

[ここ](https://qiita.com/takuyanin/items/18590600d077df707923)を読んだ。

`ls -l /etc/resolv.conf` でパーミッションを確認すると、`-rw-r--r--`となっていて、変更できそうである。

## `/etc/resolv.conf`に`imutable`がついていた

[ここ](https://unix.stackexchange.com/questions/496183/i-cant-write-to-a-etc-resolvconf-conf-as-root-anymore)に倣い、`lsattr /etc/resolvconf.conf`を実行すると、`i`がついていた。

`/etc/resolv.conf`が変更できないモードになっているらしい。

## 解決

`sudo chattr -i /etc/resolv.conf`で`i`を外す。

## 結局

`/etc/wsl.conf`に`generateResolvConf = true`を追加して、再起動すると、`/etc/resolv.conf`が自動的に生成されて、`nameserver`も正しいものが指定された。

## まとめ

以前、名前解決エラーで悩んでよくわからずに`generateResolvConf = false`を設定してしまっていたことが敗因。
パーミッションの勉強、`chattr`の勉強ができてよかった。
Reactの基本

# Reactの基本
## jsxの記法
### jsxとは
- JavaScriptの構文拡張
- 基本的には、JavaScriptの中にHTMLタグを直接書くことができるようになるもの。
- HTMLに似た見た目をしているが、背後ではJavaScriptが動作している。

### 実際の使われ方
- アロー関数によるReactコンポーネントの定義
``` js
const App = () => {
  return (
    <div>
      <h1>Hello, world!</h1>
    </div>
  );
}
```
- 上記コンポーネントの使い方
App コンポーネントを ReactDOM.render() の中でレンダリングする
``` js
ReactDOM.render(<App />, document.getElementById('root'));
```
## exportについて
### 名前付きエクスポート
- エクスポート元
``` js
// 名前付きエクスポート
export const name = 'John';
export function sayHello() {
   return `Hello, ${name}`;
}
```
- 使用先
``` js
import myFunction, { name, sayHello } from './module.js';
```

### デフォルトエクスポート
- エクスポート元
``` js
// デフォルトエクスポート
export default function sayHello() {
   return 'Hello, World';
}
```

- 使用先
``` js
import myFunction, { name, sayHello } from './module.js';
```

## イベントについて
### onClickの指定について
- onClick={}の{}の中には実行される関数を指定する。
- 使い方の例
``` js
const handleClick = (message) => {
  alert(message);
};

<Button onClick={() => handleClick('Button was clicked!')}>Click me</Button>
```
- ※下記のように指定しないこと
``` js
<Button onClick={handleClick('Button was clicked!')}>Click me</Button>
```

## React Hooksについて
### React Hooksとは
- stateなどのReactの機能をクラスを使わずに使えるようになる機能

### useState
- stateを管理するためのHooks
- 使い方は下記
``` js
// const [状態変数, 状態を変更するための関数] = useState(状態の初期値)

const [count, setCount] = useState(0);
```
-　再レンダリング後もstateは保持し続ける
- reactは一度に複数のstate更新リクエストを受け取った際、一括でバッチ処理をして1度のレンダリングにまとめてしまう
  - そのため関数内で複数回同様のsetStateを行うと、最後に記述したsetStateのみ実行される
  - 上記を防ぐためには、setStateに状態更新用の関数を渡せば良い
`setCount((prevCount)=> prevCount+1)`

### useEffect
- 関数をレンダリング後に実行させることができるHooks
- 第二引数に指定した変数に変化があった際のみ、第一引数の関数を実行させることができる
- 第二引数が空[]の場合、初回レンダリング時のみ関数が実行される
``` js
useEffect(() => {
  /* 第1引数には実行させたい副作用関数を記述*/
  console.log('副作用関数が実行されました！')
},[依存する変数の配列]) // 第2引数には副作用関数の実行タイミングを制御する依存データを記述
```

### useContext
- コンポーネント間で共通のデータを使用したい時に使うHooks
- propsのバケツリレーを防ぐことができる
再レンダリングの最適化について

# 再レンダリングの最適化について
## レンダリングとは
簡単に説明すると、下記の流れをまとめてレンダリングという
1. コンポーネントの呼び出し
1. 修正前後の差分の検出
1. 差分があった場合にDOMの更新

## レンダリングの種類
### 初期レンダリング
- web画面が初めて表示される時のレンダリング
- ブラウザ更新した際にはこっちが行われる
- 全てのDOMを使用して描画される

### 再レンダリング
- 2回目以降のレンダリング
- データが更新された時などに行われる
- 差分のみ更新される

## 再レンダリングされる条件
### stateの変更
- コンポーネントの状態が`useState`フックなどを通じて変更された時、再レンダリングされる
### propsの変更
- 親コンポーネントから渡されるプロップスが変更された時、それを受け取る受け取る子コンポーネントは再レンダリングされる
### 親コンポーネントのレンダリング
- 親コンポーネントが再レンダリングされた場合、その子コンポーネントもデフォルトでは再レンダリングされる
### Contextの変更
- Contextを使用している場合、そのContextが更新されると、それを使用している全てのコンポーネントが再レンダリングされる

## 最適化方法
- 何も考えずに実装をしていると、何かステータスが変わると見境無く再レンダリングされてしまう
- 下記に後述するメモ化を利用することで、**必要な時に必要なだけ**再レンダリングを行えるように設定する

### コンポーネントのメモ化
- 方法： メモ化したいコンポーネントをReact.memoで囲う
- 親コンポーネントがレンダリングされた時に、子コンポーネントが見境無く再レンダリングされるのを防ぐことができる
- コンポーネントをメモ化すると親要素に変更があっても再レンダリングされない
- propsの変更がある場合は再レンダリングされる
- ※ memo化も多少の負荷があるため、何も考えずにつけていい訳では無いが、基本的にはつけた方が良い

### 関数のメモ化
- 方法: メモ化したい関数をuseCallbackで囲う
- 関数を子コンポーネントに渡すと、関数に変化が無くても子コンポーネントは再レンダリングされてしまう。
　→これを防ぐことができる
- 関数に依存する値が変更されるまで初回の関数を保持し続ける
- ※ useCallbackにも負荷があるため、長い計算を必要とする関数や、初回以降不変の関数などにつけると良い

### 変数のメモ化
- 方法： メモ化したい変数をuseMemoで囲う
- 変数の無駄な再計算を防ぐことができる
- 計算に依存する値が変更されるまで初回の計算結果を保持し続ける
- ※ useMemo自体にも負荷があるため、複雑な計算をしている変数のみ使うと良い

# ルーティングについて
マネジメントについて


# 管理職
## 管理職の役割
- あらゆるリソースのパフォーマンスを最大化し、担当組織における目標達成や問題解決を推進する
- ステークホルダーそれぞれにやりたいこと、できること、やらなければいけないことがあるため、それらを的確に理解することが重要
- 下記のように適切な関わり方を意識する
  - チームメンバーを支援する。
  - 上司や経営陣を補佐する
  - 他部門と連携する
- 問題は起きるものであり、それをやりくりして何とかするという役割もある

## 基本業務
- マネジメントすべき対象は「人と組織」・「提携業務・プロジェクト」の2つ
- 職位によってもマネジメント対象は変わる

### 管理職の人・組織向けの業務
- チーム・個人のマネジメント
- 人材のモチベーションやポテンシャルを引き出し、チームパフォーマンスを最大化する
- 目標設定・フィードバック・動機づけ・ヘルスケア等
- 係長・課長向け

### 管理職の人・プロジェクト向けの業務
- プロジェクトのマネジメント
- 業務全般のQCD工場
- 部長向け

### 上級管理職の人・組織向けの業務
- 次世代リーダーの育成
- 未来を担う人材の発掘・登用・育成
- Mission・Vision・Valueを明確にし、体現する
- 執行役員・部長・取締役向け

### 上級管理職の人・プロジェクト向けの業務
- 戦略のマネジメント
- 担当領域の目標達成のための戦略を明確にし、戦略実行をリードする
- Mission・Vision・Valueを明確にし、体現する
- 執行役員・部長・取締役向け

## まずやるべきこと
- 達成すべき目的・目標の確認と現状分析
- 次に問題発見と課題設定
- 実行・検証・改善策の検討を回していく

# 現状分析・問題発見・課題設定
- 目的・目標に向かって、管理職の役割・業務の遂行を通して達成を推進する
- ただ、目的達成までの中で問題は発生するもの
- 現状分析をして問題発見と課題設定が重要

## 現状分析
### 適切な自己理解
- 自分の理解は他者の理解につながる
- 自分自身を内省して、やりたいこと、できること、やらなければいけないことを明確にする
- 自分の性格・価値観についても理解する
  - 他者の意見を自分の解釈で捉えてしまうのを防ぐため
  - 自分の価値観を知っておけば修正できる
- 自分のモチベーションの源泉を理解することで、自分の効果的な動かし方が分かる
  - 達成欲求・探求欲求・承認欲求等
  - 自分がどのような欲求をどのように満たせば動き出せそうかを理解する
  - 自分が安定すると他者への支援もうまくいく

### メンバー・チームの理解
- 「1 on 1」でメンバーとチームに対して的確に理解する
- メンバーやチームの性格・価値観も理解する

## 問題発見・課題設定
- メンバー・チームの的確な理解の後に行う
- 様々な目標と現状のギャップを洗い出していく
- 問題発見と同時に解決策に当たりをつける事ができれば課題設定の精度が高まる

# 個人・チームのマネジメント
## 個人のマネジメント
- 目標設定・動機づけ・フィードバックなど短中期で成果につながる施策で実現

### アサインメント
- メンバーに役割・業務を割り当てること
- 固定的なものではなく、流動的に考える
- 自分・メンバー・チームの理解が根底にある
- パフォーマンスが最大化される役割・業務を割り当てる

### アサインメント後の関わり方
- 管理職的にできると思っているが、メンバーはできないと思っている場合は励ます
- 管理職的にできると思っているし、メンバーもできると思っている場合は権限を譲渡する
- 管理職的にできないと思っているし、メンバーもできないと思っている場合は教える
- 管理職的にできないと思っているが、メンバーはできないと思っている場合は認識を正してあげる
- コミュニケーションを行う際、明確な理由と丁寧な説明を心がけること

### 目標設定と評価
- 適切な目標設定は達成や成長を促進する
- 重荷だと感じている場合は、目標の設定が間違っている
- 対話をして双方向で決めていく
- 明確性・計測性・達成可能性・連動性・起源のある目標が良い
- 公正な評価というよりは、納得感のある評価

### 相談時の判断
- 相談を受けた場合、即レスをする
- 気持ちは受け止めること
- 業務は止めない事
- すぐに回答できない場合はMTG等設定する

### フィードバック
- 相手の行動・言動に対して改善を促す教育的助言
- 人格・価値観の評価は絶対にしない
- タイミングはフィードバック対象の行動が発生した直後が理想
- 場所としてマイナスなことを話す場合はクローズドな環境で行う
- 改善行動を定着させるためのフィードバックも効果的

### 動機づけ
- 金銭的な賞罰や不安感・危機感を煽る事はマネジメントは簡単だが、メンバーの行動は一過性になる
- 義務感・責任感との接続や、価値観・欲求との接続は、メンバーの行動が継続的だが、マネジメントは難しい
- なるべく、価値観・欲求を用いての動機づけをすると良い
- 持っている欲求によって有効な報酬は異なる
  - 達成欲求のある人に対しては、経験・機会を与える
  - 承認欲求のある人に対しては、表彰を行う
  - 権力欲求のある人に対しては地位・権限を与える

###  ヘルスケア
- メンバーを日頃からよく観察して、変化のサインに気づく事が重要
  - 外見(顔色が悪い・元気がない等)
  - 振る舞い(ため息が増えた・人付き合いが悪くなる等)
  - 仕事ぶり(会議での発言が減る・ミスやトラブルが増える等)
  - 勤怠(有休消化ペースが早まる・欠勤が増える等)
- 変化の要因を想像して対処法を考える

### スキルアップ・キャリアアップ支援
- スキルアップ・キャリアアップは長期戦
- どのような知見・能力をいつまでに習得したいのかを確認する
- まずはメンバーが習得すべきスキルを明示してあげる
- 新しいスキル実践が必要になる役割や業務のアサインメントをしてあげる

### 信頼関係
- メンバーに時間を使って効果的な支援・問題解決を行なってはじめて信頼関係を作る事ができる
- 信頼関係があって初めてメンバーが本音を伝えてくれる
- 観察して、気にかけて、傾聴し、効果的に支援・問題解決を繰り返す
- 信頼関係が強固になってはじめて、やりたい事や人間関係・不安・不満等を話してくれる


## チームのマネジメント
- スキルアップ支援やチームマネジメントなど中長期で成果につながる施策で実現
- チーム力を高めていけば、より高い目標・より難しい課題に挑戦できるようになる
- メンバー間で相乗効果を生み出させる
- 成果を出し、成長し続けるチームは関係性の質が高い

### 相乗効果の設計
- チームメンバー全員の相互理解度合いを深めることが重要
- 管理者・メンバー間だけでなく、メンバー同士の関係も良くする

### 相互理解・相互支援を促進するために
- 社員のプロフィールサイトの利用
- 仕事の関係図を作成する
- メンバーそれぞれの人柄や、誰が何を知っているのかを明確にすることで、自然と相互支援の状態が育まれる
- 毎週のチーム会で一週間の振り返りを簡単にシェアするのも

### ステークホルダーとの関わり方
- 上司や他部門への気配り・心配りも忘れずにすること
nginxのリバースプロキシ設定記法

トレイリングスラッシュ周りで悩まなくても良いように結論を書く。

## テンプレ
  ```conf
  server {
    location /api/v1/ {
        proxy_pass http://0.0.0.0:8080/;
    }
  }
  ```

以下説明補足

## location の末尾スラッシュ
  ```
  例：
    location /api/v1
    location /api/v1/
  ```

  - 場面を問わずスラッシュを付けておくのが妥当
  - 付いていない場合は前方一致でパス判定されるので意図しないパスにプロキシしてしまう事故が起こり得る
    - 事故が無くても攻撃耐性は確実に下がる

## proxy_pass の末尾スラッシュ
  ```
  例：
    proxy_pass http://0.0.0.0:8080;
    proxy_pass http://0.0.0.0:8080/;
  ```

  - location の末尾にスラッシュを含む前提の下ではこちらもスラッシュ必須
  - 付けない場合は `/api/v1/foo` が `//foo` にプロキシされてしまう
【Publisher】Spreadsheet with Prompt

# Introduction #
I am trying to show how we can pass prompt valeus to the spreadsheet.
It can be done by using Name Range in Excel and the name of filter in the query.
Let's have a look it.

# Name Range on the Excel worksheet #
Give the name **Date** to cell D10 and,
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/4951a98a-7978-1fbc-07e4-393449a37baa.png)
Give the name **Date2** to cell E10.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/522bf2b2-a404-c17e-68db-4eb75b5c39dd.png)


# Spreadsheet (Published Report) #
Import it to a published report and use it as a Spreadsheet.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/e4ae1494-ba44-d31b-b5d4-e3f9d7526dcc.png)
Then define a filter in the query for the published report. 
A published report must have a query in it.

I add a Date filter and give a name to it as **Date** which has to be the same as the name range I gave to the cells.
Because the name of `FROM` filter is refer as **Date**, and `TO` filter is refer as **Date2**. 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/5800e2ec-8fd8-f9c8-42b4-9b266585835d.png)

# Verification #
Save the published report, and view it with the browser.
The Date filter defined is displayed as prompt like this.
Select `From` and `To` date, then click `Submit` button.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/a334950b-d6c0-1272-3d84-476a3df1ea35.png)

The filter values entered are transferred to the name range which has the same name as the filter.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/241755b9-631f-7faa-0671-7ea662238ea7.png)


# Conclusion #
This time I just show how the filter value is passed to the contents of the spreadsheet so what I did doesn't have any meaning but you can find the useful way to the use for your business from this idea.
M5NanoC6のPWMその2


目的
サブマイコンにPWM信号を送ってラジコンサーボーを
制御したい。
PWM 5%から95%の90%で0度,1度から180度までを制御したい(予定)
とりあえずLED

結果

![o_coq461.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/3f93716c-49ab-9dd5-3752-b45dfaa2715e.jpeg)


プログラム


```c++


//PWM_5_95_C6_1


//初期化
void setup() {

  //出力ピンの初期化
  pinMode(1, OUTPUT);
  analogWrite(1, 50); //PWM出力 50%

} //setup


//メインループ
void loop() {

    analogWrite(1,  13); //PWM出力  5% 256*0.05=12.8
    delay(2000); //2秒待つ

    analogWrite(1, 243); //PWM出力 95% 256*0.95=243.2
    delay(2000); //2秒待つ

} //loop


```
ESP32-S3 WROOM CAMで画像識別ST7789でバウンディングボックス

https://qiita.com/hassy131/items/45f3e266983a01c2cfc1

前回記事↑の続編です。

![ESP32S3_WROOM_edgeimpulse_ST7789_sikibetu.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806156/553a1b7a-61bd-e170-3e3b-6e15a1c3048e.png)

前回、前々回とESP32-S3 WROOM CAMでデジカメを作成してそのカメラで画像データを撮りSDをカードに収めました。その画像を元にEdgeImpulseにてアノテーションを行い画像モデルを作成します。今回は試験的に数十件だけグー、チョキ、パーの画像を撮ります。作成した画像モデルを元にESP32-S3 WROOM CAMにて画像識別を行うテストです。テスト中は撮影画像をリアルタイムでLCD ST7789に映し画像識別に反応したらバウンディングボックスを黄色で表示させます。以前にESP32 WROVER CAMで同じことをテストしましたがESP32-S3でどれくらい反応が速いのか確認するテストです。


ESP32-S3_WROOM CAM３部作になります。
1. [ESP32-S3 WROOM CAMでデジカメを作る](https://qiita.com/drafts/dc229fbff1b81f0478ce/edit)
GPIO0ボタン押下で静止画撮影、SDカードに保存。EdgeImpulseでのトレーニングデータ収集の為。
2. [SDカード画像をブラウザで確認](https://qiita.com/drafts/45f3e266983a01c2cfc1/edit)
SDカードの取り外しが面倒なため
3. [画像識別ST7789でバウンディングボックス](https://qiita.com/drafts/980fa177a6bca2e39fdc/edit)
EdgeImpulseでの学習モデルを元に画像識別

# ３．画像識別ST7789でバウンディングボックス
ソースコードピックアップ

## #include
* ST7789を使用するためにTFT_eSPI.hを使う
* グーチョキパーのモデル　esp32_pachokigu_inferencing.h
```c++
#include <Arduino.h> 
#include <TFT_eSPI.h> 
#include <SPI.h> 
#include <esp32_pachokigu_inferencing.h>  // Edge Impulse推論用にパーチョキグーのモデル
#include "edge-impulse-sdk/dsp/image/image.hpp"
#include "esp_camera.h"
```
# バウンディングボックス
void loop()の中で、
```c++
....
  bool bb_found = result.bounding_boxes[0].value > 0; // 最初のバウンディングボックスが見つかったかをチェック

  for (size_t ix = 0; ix < result.bounding_boxes_count; ix++) { // バウンディングボックスの数だけループ
    auto bb = result.bounding_boxes[ix]; // バウンディングボックスを取得
    if (bb.value == 0) { // 値が0ならスキップ
      continue; // 次のループに進む
    }

    /* Create Coordinates and Size for Bounding Boxes */
    x = bb.x; // X座標を設定
    y = bb.y; // Y座標を設定
    w = bb.width * 6; // 幅を6倍にスケーリング
    h = bb.height * 5; // 高さを5倍にスケーリング

    /* Checking Sizes */
    ei_printf("BB Coord [ x: %u, y: %u, width: %u, height: %u ]\n",  bb.x, bb.y, bb.width, bb.height); // バウンディングボックスのサイズをシリアル出力

    /* Draw Bounding Boxes in Display */
    tft.drawRect(x, y, w, h, TFT_GREEN); // バウンディングボックスを緑で描画
    tft.setCursor(x, y); // カーソル位置をバウンディングボックスの位置に設定
    tft.setTextColor(TFT_GREEN); // テキスト色を緑に設定
    tft.setTextFont(4); // テキストフォントを4に設定
    tft.println(bb.label); // ラベルを表示
  }
....
```
# 結果
guと出て黄色のバウンディングボックスが出ています。学習データが少ないのでもっと多くする必要があります。しかしながらWROVERの時↓よりも反応がよくなっています。

https://qiita.com/hassy131/items/983c6fe583309b1c7454

![20240927_164850.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806156/d3016f57-6f8a-249a-71e6-8aee3a1f8312.gif)
「あなたのスタートアップを数ヶ月ではなく数日で立ち上げよう」

はじめに
LaunchNow を使って、最初のオンライン収益を素早く稼ぎ、SaaSスタートアップをスピーディに立ち上げましょう。無限に続く開発サイクルを忘れてください。LaunchNowのSaaSボイラープレートは、あなたのアイデアをすぐにテストし、市場を検証し、無駄な時間を費やさずに収益を生み出すことができます。
https://launchnow.com.co

成功への戦略
プロジェクトに何ヶ月も費やした結果、市場がないことに気づいて燃え尽きることはよくあります。LaunchNow を使えば、最小限の実用製品 (MVP) を素早く立ち上げることができます。うまくいかなければ次に進み、うまくいけば、スケールし、成長し、収益化することが可能です。

LaunchNowがオンラインでお金を稼ぐのにどう役立つか
LaunchNowは、スタートアップを素早く立ち上げ、より早くオンラインでお金を稼ぐために必要なすべてのツールを提供します。スピードを重視することで、従来の開発方法よりも早く投資利益率 (ROI) を得ることができます。SaaSボイラープレートは、開発時間を大幅に短縮し、できるだけ早く受動的な収入を得られるようにサポートします。

スピードが重要な理由
スタートアップを立ち上げる際、スピードはすべてです。LaunchNow を使えば、市場をテストし、製品を改善し、従来の開発方法よりも早く収益を得ることができます。立ち上げを遅らせれば、その分収益のチャンスを逃してしまいます。

LaunchNow でSaaSを迅速に立ち上げ、経済的独立への道を築き始めましょう。

https://launchnow.com.co
PL/SQL　#3　例外処理

Java同様に例外処理を設けることが可能です。
（私的にはCASE文などで考慮してしまう方が処理としては好き）

例外処理を実行する場合
・EXCEPTIONで処理を区切る
・例外にするエラー内容を明確にする
ことが重要。

（https://docs.oracle.com/cd/F10533_01/TTPLS/exceptions.htm ）
オラクルの明示的エラーを参照して作成していく

例えば、複数行が返された場合
ORA-01422が出力される
これにはORA-01422 は too_many_rows というエラー名であることがわかるため
```SQL
BEGIN
    SELECT empno INTO e_emp FROM emp;
EXCEPTION
      WHEN too_many_rows THEN 処理;
END;
```

といった具合に例外的な処理を記載することができる。

SELECT INTO で複数行が帰ってくる場合や
逆に1行も戻されない場合にエラーが発生するため
特に後者の方は例外として実装されている場合が多い
（NO_DATA_FOUND)

もちろん何でもかんでもエラーを除外すればいいわけではないので、
基本的にはエラーを考慮しないPL/SQLづくりが望ましいと
私は思います・・・

また、補足として例外処理を行わない場合
特にPL/SQLで作成したデータより大容量の出力ファイルを吐き出す場合などは

```SQL
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE(CSVデータ）
    END;
```
といった具合に例外処理をもちいたデバッグも可能なので
補足までに
※上記のようなデバッグの場合は正常に処理が完了したデータまでを出力し
例外データは次のデータだったといううっかりパターンもあるので
編集処理を見ながらつくること
個人メモ（vue）

- [vue.js](https://qiita.com/imokenpi/private/374da94124f1faa8b47d)
- [vue.js02](https://qiita.com/imokenpi/private/44c718fa8e9da8b018ee)
- [vue入門01](https://qiita.com/imokenpi/private/a649b251e23fce9af8eb)
- [vue入門02（タスク管理アプリ）](https://qiita.com/imokenpi/private/e7446e57aaeb84b6ceef)
- [vue入門03（テンプレート構文）](https://qiita.com/imokenpi/private/404ced3147cd242be000)
- [vue入門04（算出プロパティ・監視プロパティ）](https://qiita.com/imokenpi/private/a39fb3b86e0ce6838363)
- [vue入門05（APIを用いたリアルタイムサーチ・監視プロパティへの理解を深める）](https://qiita.com/imokenpi/private/b8a7fc3501909df56b20)
- [vue入門06（クラスとスタイルのバインディングを使う）](https://qiita.com/imokenpi/private/1e4e9a201f268e761b19)
- [vue入門07（条件付きレンダリングを使う）](https://qiita.com/imokenpi/private/065754c0bcf10ba82d06)
個人メモ（スタイル）

- [flexレイアウト](https://qiita.com/imokenpi/private/3d32efb13a58e7d4dc7b)
- [calcの使い方](https://qiita.com/imokenpi/private/95d1ccb9435cddab28a4)
- [emとremについて](https://qiita.com/imokenpi/private/308619ee39c597768c28)
- [css変数](https://qiita.com/imokenpi/private/849e795607ed5e3d00e4)
- [transformプロパティ](https://qiita.com/imokenpi/private/11628b3ba795f9c795d9)
- [animationプロパティ](https://qiita.com/imokenpi/private/33b9fa6ba4cf821f82bc)
TypeScriptでパスエイリアス"@types"を定義してはいけない理由

# 問題："＠types"を定義するとインポートエラーが発生する

型定義ファイルをまとめて格納するための、typesディレクトリがあったとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840466/b6b64af5-6f40-cb17-b8ed-9c6f38fe01b3.png)

呼び出すたびにパスを直接指定するのは、保守の観点から望ましくないため、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840466/01d17e7a-2ba0-1e8d-79a9-42b85433be4a.png)

tsconfig.jsonへパスエイリアスを追加したとします。


```tsx
import { Article } from '@types/article';
```

インポートを行うと

```
型宣言ファイルをインポートできません。'@types/article' の代わりに 'article' をインポートすることを検討してください。
```

パスが正しい場合でもエラーが発生します。

<br>

なぜこのようなエラーが発生するのでしょうか？

# 原因：node_modulesのパスエイリアスと名前衝突するため

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840466/4bdc80f5-98ac-3cfe-7a07-d12ce50509b5.png)

TypeScriptはデフォルトで "node_modules/＠types" 内の型定義ファイルを読み込みます​。

このエイリアスが、自分で作成した＠typesと競合するためエラーになります。
エラーテキストは**パスが間違っているかも**と推測しかねない文章なので、注意が必要です。



# 解決策：競合しない別名を使用する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840466/bc5af2b4-b69b-48fd-6f70-a6188d0290f4.png)

解決策はシンプルで、競合しない名前で作成すればよいです。
custom-types や my-types など競合しない名前をディレクトリ名として使用します。



# 参考

＠typesの自動読み込み

https://www.typescriptlang.org/tsconfig/#types

<br>

競合を回避するにはnode_modulesの/@ファイル名を確認

https://stackoverflow.com/questions/41004192/import-from-types-file-that-starts-with-declare-namespace
ForexデータAPI Pythonを使ったForexマーケットモニターの作成

こんにちは！もしあなたがForex市場を追跡したいなら、ここは正しい場所です。Forexマーケットモニターを構築することは、特に開発者や金融業界で働いている場合、非常に役立ちます。今日は、Insight EaseのForexデータAPI Pythonを使ってForexマーケットモニターを作る方法について話します。
ForexデータAPI Pythonの紹介
Forex取引は少し難しいですが、正しいツールを持っていれば、もっと簡単になります。ForexデータAPI Pythonを使うことで、通貨レートのリアルタイム情報を取得できます。このAPIは、Forexレート、株式市場の情報、さらには暗号通貨データを更新してくれるモニターを構築するのに役立ちます。さあ、どうやってこれを実現するか見てみましょう！
なぜForexデータAPI Pythonを使うのか？
情報への迅速なアクセス
取引を行うとき、迅速かつ信頼性のあるデータを取得することが非常に重要です。ForexデータAPIを使用すると、必要なときに最新のレートを取得できます。これにより、より迅速かつ自信を持って意思決定できます。
より良い分析
ForexデータAPI Pythonを使うことで、後で分析できるデータを取得できます。これにより、市場のトレンドをよりよく理解し、より賢い取引の選択が可能になります。これは、あなたの取引ツールキットにおける秘密兵器のようなものです！
使いやすさ
APIは、データをアプリに簡単に統合できるため、非常に便利です。ウェブサイト、モバイルアプリ、または取引プラットフォームを作成している場合でも、Insight Easeからデータを簡単に取得できます。
開発環境の設定
コーディングを始める前に、環境を設定する必要があります。心配しないで！これは非常に簡単です。次の手順を行ってください：
Pythonを取得: まだ持っていない場合は、python.orgに行き、ダウンロードしてください。
パッケージをインストール: ターミナルまたはコマンドプロンプトを開き、必要なパッケージをインストールします。
APIキーを取得: Insight Easeに行き、APIキーを取得するためにサインアップします。これは、ForexレートAPIにアクセスするために重要です。
これで、コーディングを始める準備が整いました！
Forexデータの取得
次に、Forexレートを取得するための簡単なスクリプトを作成する必要があります。これには、requestsライブラリを使用します。このライブラリは、HTTPリクエストを簡単に作成するのに役立ちます。APIキーを取得したら、データを取得するための関数を書くことができます。
コードの説明
最初に、APIキーを受け取り、Insight Ease APIにGETリクエストを送信する関数を作成します。成功すれば、ForexデータがJSON形式で返されます。エラーが発生した場合は、何が問題かを知らせてくれます。
Forexマーケットモニターの構築
データを取得できるようになったので、Forexマーケットモニターを構築しましょう！定期的にデータを取得し、シンプルに表示するループを作成します。
仕組み
モニターは常に動作し、定められた時間にForexデータを取得します。そして、取得した通貨の現在のレートを表示します。
データ視覚化によるモニターの強化
モニターをもっと面白くするために、データ視覚化を追加できます。matplotlibやpandasのようなライブラリを使用すると、データを美しく表示できます。
ライブラリのインストール
視覚化のために必要なライブラリをインストールできます。これらのツールを使用すると、データをより理解しやすいグラフやチャートに作成できます。
視覚化コードのサンプル
Forexレートの視覚的なチャートを作成して、ユーザーがトレンドや変化を確認できるようにします。これは、視覚的に魅力的で、データの分析を簡単にします。
結論
ForexデータAPI Pythonを使用してForexマーケットモニターを作成することは、可能なだけでなく、とても楽しいことです！Insight Easeの助けを借りれば、開発者やトレーダーはForex市場で何が起こっているかを把握できます。
自分自身のために構築する場合でも、金融会社のために構築する場合でも、リアルタイムデータへのアクセスは取引に大きな違いをもたらすことができます。さあ、今すぐ自分のForexモニターを作り始めましょう！
よくある質問
1. ForexデータAPI Pythonとは？
ForexデータAPIは、リアルタイムおよび履歴のForexレートやその他の金融データにアクセスするためのコードです。
2. Insight EaseからForexデータAPIにアクセスするにはどうすればいいですか？
Insight Easeのウェブサイトにサインアップし、APIキーを取得することでアクセスできます。
3. どのプログラミング言語がForexデータAPIに対応していますか？
HTTPリクエストを作成できる任意の言語（Python、Java、PHPなど）を使用できます。
4. ForexデータAPI Pythonを使用するのに費用はかかりますか？
はい、Insight Easeには月額10ドルから始まるさまざまな料金プランがあります。制限付きの無料版もあります。
5. Insight Ease APIからどのようなデータにアクセスできますか？
彼らのAPIを使用して、Forexレート、株式市場データ、暗号通貨レートを取得できます。
6. アプリにForexデータを視覚的に表示できますか？
もちろん！Pythonでmatplotlibやpandasのようなライブラリを使用して、データの視覚的な表示を作成できます。


![対応していない形式のファイルです。]()
Django Rest Frameworkでセッション認証失敗時に401エラーを出すには

## 概要
Django Rest Frameworkでセッション認証失敗時に403ではなく、401エラーを出す方法について解説します

## 実装
Django Rest Frameworkではセッション認証時はデフォルトで401ではなく、403を返してしまいます
401を返すにはWWW-Authenticateヘッダに有効な値をセットする必要があります
今回はauthenticate_headerメソッドの戻り値に'Session'を指定します

```common.authenticate.py
from rest_framework import authentication


class SessionAuthentication(authentication.SessionAuthentication):
    """
    This class is needed, because REST Framework's default SessionAuthentication does never return 401's,
    because they cannot fill the WWW-Authenticate header with a valid value in the 401 response. As a
    result, we cannot distinguish calls that are not unauthorized (401 unauthorized) and calls for which
    the user does not have permission (403 forbidden). See https://github.com/encode/django-rest-framework/issues/5968
    We do set authenticate_header function in SessionAuthentication, so that a value for the WWW-Authenticate
    header can be retrieved and the response code is automatically set to 401 in case of unauthenticated requests.
    """
    def authenticate_header(self, request):
        return 'Session'
```

以下がDjango RestFrameworkのSessionAuthenticationクラスが継承しているBaseAuthenticationクラスです

```python
class BaseAuthentication:
    """
    All authentication classes should extend BaseAuthentication.
    """

    def authenticate(self, request):
        """
        Authenticate the request and return a two-tuple of (user, token).
        """
        raise NotImplementedError(".authenticate() must be overridden.")

    def authenticate_header(self, request):
        """
        Return a string to be used as the value of the `WWW-Authenticate`
        header in a `401 Unauthenticated` response, or `None` if the
        authentication scheme should return `403 Permission Denied` responses.
        """
        pass
```

## 実際に検証してみよう！
以下のようにAPI実行時に401を返していたら成功です

![スクリーンショット 2024-09-27 16.21.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625980/358911d5-aad8-e2d0-d05f-ccf7702cc41e.png)

## 参考
https://github.com/encode/django-rest-framework/issues/5968#issuecomment-399352828

https://github.com/encode/django-rest-framework/blob/master/rest_framework/authentication.py#L33
【Android】.aabファイルから.apksファイルを書き出す


.aab（Android App Bundle）形式のAndroidアプリを端末にインストールするため.apksファイルに書き出す方法について備忘のため記載しておきます。

## .aab（Android App Bundle）とは

Android App Bundleについては以下を参照してください。

https://developer.android.com/guide/app-bundle

## 環境

- macOS Ventura
- OpenJDK 17 (OpenJDK Runtime Environment Corretto-17.0.10.7.1 (build 17.0.10+7-LTS))

## 必要なツールのインストール

.aabから.apkファイルを書き出すために`bundletool`を使用します。
公式のインストール手順については以下に記載があります。

https://developer.android.com/tools/bundletool

macOSの場合は、Homebrewを使用してインストールする方法が楽です。

```sh
$ brew install bundletool
```

https://formulae.brew.sh/formula/bundletool

## 手順

ターミナルから以下のようにコマンドを実行します。
※オプションについては適時書き換えてください

   ```sh
   $ bundletool build-apks \
     --mode=universal \
     --bundle=app-file.aab \
     --output=app-file.apks \
     --ks=release.keystore \
     --ks-pass='pass:password' \
     --ks-key-alias=aliasname \
     --key-pass='pass:password'
   ```

書き出したapksを端末にインストールするには、以下を実行します。

```sh
$ bundletool install-apks --apks=./app-file.apks
```

オプションの説明や他の使い方については以下を参照してください。

https://developer.android.com/tools/bundletool?hl=ja
仮想通貨海外取引所情報のポータルサイト｜ファイナンスポート

仮想通貨海外取引所についての情報を配信するファイナンスポートのおすすめの記事を紹介します。

・ファイナンスポート公式サイト
https://finance-port.jp/

・海外仮想通貨取引所ランキング28選｜おすすめ・特徴を徹底解説
https://finance-port.jp/overseas-cryptocurrency-exchange/

・使いやすさで選ぶ海外仮想通貨取引所ランキング｜各社の特徴や選び方のポイントを解説
https://finance-port.jp/exchange-overseas-useful/

・Bybit(バイビット)の評判・口コミ｜メリット・デメリットや使い方を専門家が解説
https://finance-port.jp/bybit-review/

・Bybit(バイビット)追証あり？証拠金の計算方法から入金まで徹底解説
https://finance-port.jp/bybit-oisho/

・Bybit(バイビット)は日本人利用禁止？金融庁からの警告内容や口コミを紹介！
https://finance-port.jp/bybit-japanese/

・Bybit(バイビット)の使い方を初心者向けに図解｜登録・取引・入金・送金・アプリ操作方法まで解説
https://finance-port.jp/crypto-bybit-how-to-use/

・MEXC（MXC）の登録・口座開設方法を徹底解説！トラブルの対処法まで完全ガイド
https://finance-port.jp/crypto-mxc-registration/

・仮想通貨取引所MEXC（MXC）は日本人も使える？メリットやおすすめポイント、注意点、口座開設まで徹底解説
https://finance-port.jp/crypto-mxc-japanese/