OmniAICreator/Qiita-1.07M huggingface dataset:
【Gitクライアント】forkを使用したプロジェクトのSSH/URLの変更方法

## 経緯

事業所の移動により、社内サーバ(GitLabサーバ)の置き換えが発生、クローンしたプロジェクトURLが変更したことにより、プロジェクトのCommitoやPush、以前のプロジェクトURLでのクローンなどができなくなりました。

社内では非エンジニアの方がGitクライアント「Fork」を利用していた為、手順説明、周知などに手間取ってしまったので、今回備忘録として記事にします。

## 前提条件

Gitクライアント「Fork」を利用している。

今回URLを変えるプロジェクト内容は同一である。
URLの変更のみ(GIｔ配置場所)が変わった状態。

例：移動前プロジェクトA　＝　移動後プロジェクトA

## 環境情報

・Windows11
・Git
・Fork

## 手順

①Forkを起動し、プロジェクトURLを変更したいプロジェクトを表示します。
※個人情報に関する部分はグレーアウトしております。
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/ed1750c5-8f25-70bd-7526-cf301607700c.png)


②「origin」を右クリックする。
![Untitled (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/6b1912ec-3da6-4d4b-418a-6949c814a43c.png)


③小ウィンドウが展開され、ウィンドウ内「Edit‘origin’」を右クリックする。
![Untitled (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/1df99bb3-b293-db63-5322-7343c315a891.png)

④Edit Remote画面表示がされ、現在のURL入力を確認
![Untitled (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/0c01d268-c7e7-69f2-ba88-08001b62e889.png)


⑤対象のGitプロジェクトからプロジェクトURLを取得
※今回はGitHubの画面を参考にしています。
![Untitled (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/7cd0ef3f-0b58-a889-fe50-2a8dfb5458df.png)


⑥Edit Remote画面、URLをコピーしたURLに変更し保存。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/e28ff7a5-11a6-d011-951b-9de500cfed7e.png)

⑦変更後の疎通確認、対象のプロジェクトの右上「Fetch」をクリック
　小画面が表示されるので、originを選択し、「Fetch」をクリック
![Untitled (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/84ed4195-2695-0d9e-d84f-626d823df776.png)


⑧Fetchが問題なく完了すれば疎通確認完了となり、プロジェクトURL変更ができました。
![Untitled (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/ed2bc7cd-75dc-5218-1bad-10c0f4aa752c.png)

## まとめ
自分は普段コマンドラインでのGitと「Fork」を併用しているのでイメージがわきましたが、普段Gitや使用しているツールに慣れていない方に説明する際のわかりやすさや、説明の粒度が参考になりました。

「各々ツールのドキュメント見て変更すればよい！」など厳しい意見もありましたが、仕事をする上で得手不得手があると思います、今回の手順説明で少しでも仕事が円滑に回れば幸いです。

以上！！備忘録でした。
pip3のパッケージを同一ネットワーク上のPCに送信する

localのネットワークがインターネットにつながっておらず、pip3 installが使用できない状況.手元のPCにはパッケージが入っている.

やり方を記載していきます.

step1. パッケージの場所を特定

`pip3 show ~~~ `コマンドを実行しパッケージの詳細を表示します.出力されたもののうち`Location`という項目が、保存されているフォルダの位置を意味します. 

```
pip3 show setproctitle
Name: setproctitle
Version: 1.3.2
Summary: A Python module to customize the process title
Home-page: https://github.com/dvarrazzo/py-setproctitle
Author: Daniele Varrazzo
Author-email: daniele.varrazzo@gmail.com
License: BSD
Location: /home/dev/.local/lib/python3.8/site-packages
Requires: 
Required-by: 
```
目的のパッケージのフォルダ名を確認します
```
ls /home/dev/.local/lib/python3.8/site-packages/setproctitle*
```


step2. コピーする

コピー先のpcにssh等で入り,pythonパッケージの保存場所を確認します.

```
 ls /home/dev/.local/lib/python3.8/site-packages/
```

パッケージの保存先が特定できたら,step1で判明したパッケージの場所から`scp`コマンドでコピーします.

```
scp -r setproctitle* dev@192.168.0.233:.local/lib/python3.8/site-packages/
```

以上で完了です.

※ 以下のようにして全パッケージをコピーすることもできます.

```
scp -r * dev@192.168.0.233:.local/lib/python3.8/site-packages/
```

※ `/usr/local/lib`にもパッケージはインストールされているので次のようにするとほぼほぼすべてのパッケージがコピーできる

```
scp -r /usr/local/lib/python3.8/dist-packages/* dev@192.168.0.233:.local/lib/python3.8/site-packages
```
せんせー、リアルタイム翻訳技術ってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、リアルタイム翻訳技術ってなに？

# リアルタイム翻訳技術とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## リアルタイム翻訳技術とは何でしょうか？

リアルタイム翻訳技術とは、話された言葉や書かれたテキストをほぼ同時に別の言語に翻訳する技術のことです。これにより、異なる言語を話す人々がスムーズにコミュニケーションを取ることができます。

## どのように機能しますか？

この技術は、音声認識技術と自然言語処理技術を利用して、話された言葉やテキストを瞬時に解析し、それを別の言語に翻訳します。そして、その翻訳された内容をテキストや音声として出力します。

## どんな利点がありますか？

リアルタイム翻訳技術の利点は多く、言語のバリアを取り除き、異なる言語を話す人々がスムーズにコミュニケーションを取ることができます。また、ビジネスや教育の場でも非常に有用であり、多言語の会議や授業でも通訳者なしで進行できるようになります。

## どのようなデバイスやアプリケーションで使用されていますか？

リアルタイム翻訳技術は、スマートフォンやタブレット、コンピュータのアプリケーションやサービスに組み込まれて使用されます。一部のビデオ会議ツールでもこの技術が利用されており、リアルタイムでの字幕表示や音声翻訳を提供しています。

# まとめ

リアルタイム翻訳技術は、コミュニケーションの助けとなる重要な技術です。異なる言語を話す人々が瞬時に理解しあえるようにするこの技術は、ビジネス、教育、旅行など、さまざまな分野でのコミュニケーションを支援しています。
Slack App作成中に戸惑ったこと３選

# Slack App作成中に戸惑ったこと３選

毎日定時にタスクリストをSlackの指定したチャンネルへ通知してくれるSlack Appを作成しようとしたところ、いくつか壁にぶつかったので事象と解決方法を備忘録として残します。

１．Slack Appがチャンネルに追加できないと表示される
２．Appのアイコンを変更したい
３．chat.postMessageでメッセージが送信できない

## Slack Appがチャンネルに追加できないと表示される
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/965cb254-5d3d-8eda-25f7-b9b1121806ef.png)

Appを作成、その後スコープでAppにメッセージを送信するための権限の付与まで完了してます。ワークスペースにAppをインストールをしようとしたところ、上記エラーが表示されました。

### 原因
Botに名前がついていないから。

Appの種類によっては発生しない事象とのことですが、今回は追加したAppがBot（ユーザー）としてメッセージを送信する仕様のため、Botの名前＝ユーザーの名前が指定されていないことが原因のようでした。

### 解決策
Botに名前を付けてあげます。

App Homeを開き、App Display Nameから編集します。
![キャプチャ２.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/7290c42e-6de0-eb8f-09a5-dfe68a9ca3d3.png)
![キャプチャ３.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/15a62b05-14c2-0c67-acd7-f66991d736b7.png)


Display Name…表示されるBotの名前です。日本語でも入力可能です。
Default username…メンションなどを付ける際にSlackが参照するための名前になります。こちらは日本語不可となります。

名前を設定した上で、再びOAuth&PermissionsからAppをワークスペースにインストールします。

![キャプチャ４.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/15e7f5e2-bcfc-4adf-9a55-b2c551e083b0.png)

無事にAppが追加出来ました！


## Appのアイコンを変更したい
アイコンを未設定でも問題なくAppは動きますが、折角なので通知が来た時に私のテンションが上がるようなアイコンへとカスタマイズしていきます。
![キャプチャ５.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/773f2455-ef72-7a58-fc65-0880cae27983.png)

Basic Informationを開き、下部までスクロールします。
Display Informationからアイコンの変更が可能です。
![キャプチャ６.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/63afe3a3-24a5-96b5-73fd-2e87a808a554.png)

アイコンは512px × 512pxから2,000px × 2,000pxまでの大きさの正方形の画像のみ設定可能です。それ以外の大きさ、もしくは長方形の場合、エラーメッセージが出て設定が出来ません。
また、Short descriptionの入力も必須となっています。簡単なAppの説明を入力します。こちらは日本語入力でOKです。 
![キャプチャ７.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028933/7d9cc171-a9e9-63cd-0df4-452fca06cffc.png)


無事にアイコンを変更できました！

背景色については明るい色へ変更すると「見にくいですよ」とエラーメッセージが表示されるため、変更しない方が無難かと思います。

## chat.postMessageでメッセージが送信できない
スプレッドシートからタスクを取得し、markdown形式でメッセージを送信したかったのでデータを成形します。（その他コードなどの詳細は今回省略します）

送信したいメッセージ内容例
タスク番号：1
＜ステータス対応中＞
カワウソに餌をあげる（タスク内容）
締切：2023/09/14

失敗したコード
``` 
// 送信内容の設定
  let payload = {
    "token" : "Slack Appで生成されたOAuth Token",
    "channel" : "メッセージの投稿先チャンネル",
    'text' : JSON.stringify(メッセージ内容が格納された変数)
  };
``` 

実際に送信されたメッセージ
[{"type":"section","text":{"type":"mrkdwn","text":"タスク番号：1\n*＜ステータス対応中＞*\nカワウソに餌をあげる（タスク内容）\n納期予定：2023/09/14]"}},

配列に格納されたメッセージがそのまま出力されてしまいました。

### 原因
` text `形式で送信設定をしていたこと。
JSONの文字列がそのまま送信されてしまうようでした。

### 解決策
成功したコード
``` 
// 送信内容の設定
  let payload = {
    "token" : "Slack Appで生成されたOAuth Token",
    "channel" : "メッセージの投稿先チャンネル",
    ”block”: JSON.stringify(メッセージ内容が格納された変数)
  };
``` 


送信されたメッセージ内容例
タスク番号：1
**＜ステータス対応中＞**
カワウソに餌をあげる（タスク内容）
締切：2023/09/14

送信設定を`text`から`block`に変更をしてあげると、想定していた通りのmarkdown形式で無事に送信されることが確認できました！
textで設定するとJSONがそのままの形式で出力されるようでした。

Slack Appではいろんなことが出来るようになっているので、これからもいろんなアプリの制作に着手していきたいと思います。
その上で壁にぶつかった事象があればまた書き溜めて公開していきたい所存です。
SpringFrameworkのスケジューリング機能と排他制御

# はじめに
SpringFrameworkには、起動しているアプリケーションから非同期の処理を実行できる機能が提供されており、非同期処理を実行する方法がいくつかあります。その中の１つである スケジューラー `@Scheduled` を使った定期実行の方法と、そのスケジューラーの多重起動の防止を行うShedLockを紹介します。

## スケジューラー機能の使い方
SpringBootを使った設定は以下の通りです
* アプリケーション起動クラスないしは設定クラスに`@EnableScheduling`を付与する
* 一定間隔で非同期実行をするメソッドに`@Scheduled`を付与する（Springのコンテキストに登録してあるクラスのみ対象。）

具体的なコード例は次の通りです。

https://gist.github.com/A-pZ/54ad4c9824a9522b4b5c81681db4aa23

アプリケーション起動クラス、ないしは設定クラスにて`@EnableScheduling`を付与しておけば、あとはスケジュール実行したいメソッドに `@Scheduled` を付与するだけです。

`@Scheduled` に指定できる属性にはcrontabと同じ形式を設定するcronか、アプリケーション起動完了後からの実行間隔を指定する方法が選べます。この例では、10秒間隔で registerNormal() メソッドが非同期で実行されます。

cronの指定では時刻のタイムゾーンも別途指定できます。省略時はアプリケーションが起動しているサーバのタイムゾーン[^1]が使われます。

### 懸念点
常に非同期で実行するということは、先程の例では、10秒間隔でメソッドが動作します。

このアプリケーションが単一のアプリケーションで動作していて、かつこのメソッドで実行される処理が常に10秒以内で完了すれば特に問題ないところですが、作成するアプリケーションの大きさによっては、複数のサーバインスタンスに同一のアプリケーションが配備されて運用するケースがあります。
そうなると、時間指定をした `@Scheduled` は、複数のアプリケーションから同時に同じ処理実行されることになるでしょう。検索処理や状態監視なら良いのですが、何らかのデータ登録や更新がある場合は、アプリケーション内で排他処理を実施しなければ重複することになるでしょう。

## 解決方法の1つ ：ShedLockの導入
複数実行している同一アプリケーションで排他処理をかんたんに実装できるライブラリに、https://github.com/lukas-krecan/ShedLock があります。

これは複数実行されている `@Scheduled` に対して排他処理を追加するものです。使い方もSpringBootのアノテーションのようにするだけです。

### ShedLockの導入に必要なもの
導入に必要なものは以下です。

* ShedLock本体（maven centralないしは前述したgithubのリポジトリから入手）
* ShedLock用のデータベース（JDBCから接続できるRDBや、Redis、DynamoDBなど多数から選択可。SpringBootアプリケーションにて定義済みのデータソースを利用しています）
* ShedLockが扱うデータベースのテーブルを1つ作成

これらを準備して、次は設定するだけです。

### ShedLockの設定
Springの `@Scheduled` 同様に、アプリケーション設定用アノテーションと、排他を実施したいスケジューラーで起動しているメソッドにアノテーションを付与します。
`@EnableSchedulerLock` で、ShedLockの利用を宣言します。このアノテーションの属性で、`@Scheduled`で実行するスケジューリングしたメソッドの排他時間のデフォルト値を設定します。

https://gist.github.com/A-pZ/cb66e876265482500c24b20196caf05c

ShedLockを適用したサンプルコードスケジュール起動するメソッドのうち、排他を実施したいものに `@SchedulerLock` を付与します。
name属性はアプリケーション内で唯一となるものをつけます。ShedLockはこのname属性に指定した名前で排他する処理であるかを認識し、メソッドの開始をしたと同時に排他を開始します。
排他の終了はShedLockの設定で定義した排他時間を超過しているかで判断します。

#### 排他時間の設定方法
以下の2つを設定できます。

|属性名|解説|
|---|---|
|lockAtLeastFor（またはlockAtLestForString）|排他開始から最低でも排他を続ける時間。メソッドが終了してもこの時間までは排他がかかり続ける。排他中はスケジューラからの起動はされずに破棄される|
|lockAtMostFor（またはlockAtMostForString）|排他開始から最大で排他を続ける時間。メソッドが終了していなくてもこの時間が到達した場合は排他が解除される|

この2つの値は `@EnableSchedulerLock` にて設定したdefault設定を、個別のスケジューラにて上書きできます。

## まとめ
アプリケーションレベルでかんたんにスケジューラと排他を実施できることがわかりました。大掛かりなスケジューリング機能やサービスを使わずとも実現できますので、まずは手軽に処理単位が小さいものに適用してみるのも良いかと思います。

## サンプルソース
以下に公開しております。

https://github.com/A-pZ/scheduler-sample

サンプルではデータベースにMySQLを選んでいます。

[^1]: タイムゾーンが影響する設定、具体的には 1時間単位で指定して実行する処理を `@Scheduled` で設定した内容だけでアプリケーションの機能が充足するのかどうかはアプリケーションの設計で判断すること
せんせー、ニューロフィードバックってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、ニューロフィードバックってなに？

# ニューロフィードバックとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## ニューロフィードバックとは何でしょうか？

「ニューロフィードバック」とは、脳波や心拍数などの身体の信号を測定し、それを利用者にフィードバックする方法です。これにより、利用者は自身の身体信号を意識し、それをコントロールする技術を学ぶことができます。

## どうやって行われるのでしょうか？

通常、センサーが利用者の頭部や体に取り付けられ、特定の生理的信号をモニターします。そのデータはコンピュータに送信され、リアルタイムでフィードバックが提供されます。利用者は、ビジュアルやオーディオのフィードバックを通じて、自身の身体の反応を調整する方法を学びます。

## どんな利点があるのでしょうか？

ニューロフィードバックは、ストレスや不安の緩和、集中力の向上、睡眠の質の改善など、様々な心理的・身体的な問題の管理に役立つことが報告されています。また、特定の脳の状態を訓練することで、パフォーマンスの向上や自身の心地よさを高めることも可能です。

## どのような場で使われているのでしょうか？

ニューロフィードバックは、クリニックや病院での治療、学校での学習支援、スポーツトレーニングでのパフォーマンス向上など、さまざまな場面で利用されています。企業でも、従業員の健康とウェルビーイングを支援するツールとして利用されることがあります。

# まとめ

ニューロフィードバックは、身体の信号を利用者にフィードバックすることで、自身の心理的・身体的な状態を改善する助けとなる方法です。これは様々な場面で利用されており、多くの利点が報告されています。
GoogleDriveにbotが人のふりをしてファイルをアップロードする(Google Workspace限定)

## Googleのサービスアカウントでドメイン全体の権限委譲をする
毎日Google DriveにファイルをアップロードするBotを書いていて、
ある、ファイル容量でもうあげれないよ？って警告がでて動かなくなってきた。
そこで、[ドメイン全体の権限委譲](https://support.google.com/a/answer/162106?hl=ja#zippy=%2C%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E5%85%A8%E4%BD%93%E3%81%AE%E5%A7%94%E4%BB%BB%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B)が必要となって解決した話。


権限委譲をすることによって、委譲した人となってGoogle Driveにアクセスできるようになる。
つまり、ファイル容量の制限がサービスアカウントではなく、workspaceのユーザーのものになる。

<!--more-->
## ドメイン全体の権限委譲が必要
もろもろ調べていると、サービスアカウントはgoogleから見るとDummyアカウントとしてみなされていて

- 特定のドメインに追加することもダメ
- owner権限をbotからユーザーにすることもダメ
  
な模様。Google Workspaceから設定が必要なので、まずはWorkspaceの特権権限をもらい、
[ドメイン全体の権限委譲](https://support.google.com/a/answer/162106?hl=ja#zippy=%2C%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E5%85%A8%E4%BD%93%E3%81%AE%E5%A7%94%E4%BB%BB%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B) の手順に従って設定をします。

## ドメイン移譲をコードに反映する
通常のサービスアカウントの認証部分にdelegateを。追加します。
create_delegateをしておくことによって、このbotにメールアドレスの人の権限が委譲され、Driveの履歴もメールアドレスの人のものになる。


```python
from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

scope =['https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('creds.json', scope)

#この行を追加
delegated_credentials = creds.create_delegated('your-email@gmail.com')

service = build('drive', 'v3', credentials=delegated_credentials)
```


## まとめ

多分同様の問題に当たる人がそんなに多くないのか、結構調べるのに時間がかかってしまった。
これでファイル容量を気にせずdriveにアップロードできるようになった。よかったよかった


[参考リンク:stackoverflow](https://stackoverflow.com/questions/49374112/google-service-account-cant-impersonate-gsuite-user)
参考になったセキュリティに関するWEB記事

# 概要

読んだあと「なるほど勉強になるわー…」って思った記事達をまとめています。
そういった記事に出会うたびに随時追加していきます。

# 最も悪用された脆弱性まとめ

どんな脆弱性が ***存在するか*** も大事ですが、どんな脆弱性が ***悪用されたか** を知るのも大事だと思いました。
『どの脆弱性から先に対応しなければいけないのか』という優先順の参考になるためです。

https://qiita.com/rana_kualu/items/d2150950ffa043ff5b49

# プロンプトインジェクション

『新しい技術が出てくると、それを追うように新しい攻撃手段も出てくる』というのが新たな気づきでした。

https://www.itmedia.co.jp/news/articles/2308/10/news101.html

# ブラインドSQLインジェクション

『SQLインジェクション』は分かるけど『 **ブラインド** SQLインジェクション』ってどういう原理なんだっけ？ってなってよく記事を見返します。

https://atmarkit.itmedia.co.jp/ait/articles/1402/04/news002_2.html

# C/C++セキュアコーディング入門

JAVAなどの言語を使っていると『メモリに対するセキュリティ意識』が低くなりがちかなあって思います。
C/C++などの『メモリに対する影響が大きい処理が記述可能な言語』に関する知識に触れるのはよいことだと考えてます。

https://codezine.jp/article/corner/339

# ディレクトリリスティング

『ディレクトリ **トラバーサル** 』はなじみありますが、『ディレクトリ **リスティング** 』はなじみが無かったです。
「そういえばこんなことあったね」という内容は考慮漏れしやすいので、この記事に記録。

https://qiita.com/miyuki_samitani/items/62e6f59f6e5445efbee6

# ファイルレスマルウェア

マルウェアを **メモリ上だけ** に展開して **ファイルを作成しない** というのが、よく考えられてるなあと思いました。

https://www.ntt.com/bizon/sec/cybersec07.html

# DPoPの処理フローの解説

DPoP自体の知識もそうですが、1ステップずつ丁寧に解説してくれているところが良いです。

https://qiita.com/TakahikoKawasaki/items/34c82fb5c0595b6fc289

# どんな時にHTTPSの安全性が崩れるか

深い内容まで踏み込んで書いてあるのが良いなあと思いました。
**Clientが全ての証明書を信じてしまう場合** というのは確かに考慮漏れしやすいなあと思いました。

https://qiita.com/uturned0/items/1b1fd8f35d266a810344

# Javaコーディングスタンダード

『脆弱性のあるコード』『問題の無いコード』と例があるのでイメージしやすいです。
記事の量も多くて「こんなことも気を付けないといけないのかぁ…」と思いました。

https://www.jpcert.or.jp/java-rules/
NextAuthでX(Twitter)Api Oauth2.0が使いたい！

### NextAuth.jsとは
NextAuth.jsとはNext.js向けに作成されたJavascriptライブラリになります。
これを導入することでGoogleでログインやX(Twitter)でログインなどの認証処理が簡単なコードを書くだけで実現できます。

### X(Twitter)でログインを設定する

X(Twitter)でログインをする場合、OAuth認証※を利用します。

※認可プロトコルの一種で限定的なアクセス権限を別のサービスに移譲できます。


2通りの設定があります。

1. OAuth1.0aを利用
2. OAuth2.0を利用  

### OAuth1.0a(OAuth1.0)とOAuth2.0の違い

主な違いとしては以下になります。
* 処理の複雑さ(OAuth2.0の方がシンプル)
* アクセストークンの期限(OAuth2.0の方が短い)

### NextAuth.jsの設定
以下を参考

https://next-auth.js.org/providers/twitter

Twitter OAuth1.0aを使う場合
```typescript:src/pages/api/auth/[...nextauth].ts
export const authOptions: NextAuthOptions = {
  providers: [
    // Twitter oauth1.0aを使う場合
    TwitterProvider({
      clientId: serverRuntimeConfig.twitterClientId,
      clientSecret: serverRuntimeConfig.twitterClientScret,
    }),
  ],
```

Twitter OAuth2.0を使う場合
```typescript:src/pages/api/auth/[...nextauth].ts
const TWITTER_AUTHORIZATION = {
  url: 'https://twitter.com/i/oauth2/authorize',
  params: {
    // 以下のScopesに書かれいるもの設定
    // https://developer.twitter.com/en/docs/authentication/oauth-2-0/authorization-code
    scope: 'users.read tweet.read offline.access',
  },
}
export const authOptions: NextAuthOptions = {
  providers: [
    TwitterProvider({
       clientId: serverRuntimeConfig.twitterClientId,
       clientSecret: serverRuntimeConfig.twitterClientScret,
       version: '2.0',
       authorization: TWITTER_AUTHORIZATION,
    }),
  ],
```

### 問題点
OAuth2.0を使った場合、認可URLが
https://twitter.com/i/oauth2/authorize?...
となっているためスマホなどでネイティブアプリが起動してしまい、
アプリブラウザで認可同意画面が開いてしまう現象が発生します。

今現在は解決策が見つからないためサービスによってはOAuth1.0aを利用せざるを得ない場合があります。
せんせー、クリプトカレンシーマイニング技術ってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、クリプトカレンシーマイニング技術ってなに？

# クリプトカレンシーマイニング技術とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## クリプトカレンシーマイニング技術とは何でしょうか？

「クリプトカレンシー」とは、デジタルや仮想の通貨のことを指します。そして、「マイニング」は、これらの通貨の取引を検証し、セキュリティを保持するプロセスです。マイニング技術は、クリプトカレンシーのネットワークを支え、取引を可能にする重要な要素となっています。

## どうやってマイニングは行われるのですか？

マイニングは、高速なコンピューターを使用して複雑な数学的な問題を解くことによって行われます。このプロセスを通じて、新たな取引ブロックが作成され、既存のブロックチェーンに追加されます。これにより、取引が確認され、セキュリティが保持されます。

## どのような装置が使われますか？

初期の段階では、通常のパーソナルコンピュータでもマイニングが可能でした。しかし今日では、特殊なマイニングハードウェア、例えばASIC（Application-Specific Integrated Circuit）などの高性能な装置が必要となっています。

## それはどのような影響を持つのですか？

クリプトカレンシーマイニングは、取引のセキュリティと整合性を保持するために非常に重要です。ただし、高いエネルギー消費と環境への影響が問題となっており、持続可能なマイニング技術の開発が求められています。

# まとめ

クリプトカレンシーマイニング技術は、仮想通貨の取引を検証し、セキュリティを保持する重要なプロセスです。しかし、それはエネルギー消費が非常に高い活動でもあり、この問題の解決が今後の挑戦となっています。
せんせー、高温超伝導体ってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、高温超伝導体ってなに？

# 高温超伝導体とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## 高温超伝導とは何でしょうか？

高温超伝導とは、通常よりも高い温度で物質が電気抵抗を持たなくなる現象を指します。伝統的な超伝導体は非常に低い温度でしか超伝導状態を実現できませんでしたが、高温超伝導体は比較的高い温度でもその特性を持つことができます。

## どのような特性がありますか？

高温超伝導体は電気抵抗がゼロであり、電流が無限に流れることができるという特性を持っています。また、外部磁場を排除するメイスナー効果という特性も有しています。これらの特性は新しい技術やアプリケーションの開発を可能にします。

## どのような利点と課題がありますか？

利点としては、エネルギーの無駄を大幅に減らすことができる点や、強力な磁場を生成できる点があります。しかし課題としては、現在でも高温とは言え非常に低温な環境でしか実現できない点や、材料の作製が非常に困難である点が挙げられます。

## どのような用途がありますか？

高温超伝導体は、医療分野でのMRI装置や、エネルギー輸送の効率化、新しい交通システムの開発など、多くの分野で利用されています。特に、エネルギー効率の高いトランスポートシステムや、高性能な電子デバイスの製造に革新をもたらす可能性があります。

# まとめ

高温超伝導は特定の条件下で物質が電気抵抗を持たなくなる現象を指し、これにより多くの技術的進歩と革新がもたらされています。しかしながら、現在でも実用化には多くの課題があり、これからの研究と開発が期待されています。
せんせー、トラップ光ってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、トラップ光ってなに？

# トラップ光とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## トラップ光とは何でしょうか？

「トラップ光」という言葉は、光を特定の場所に「捉え」る技術を指すことがあります。これは主に、光学的なトラップや光学ピンセットという技術を使用して行われます。

## どのように機能するのですか？

この技術は、レーザー光を高い焦点に集めることによって、微小な物体を捕らえる力を生み出します。集められた光は特定の点に焦点を当て、そこに物体を「トラップ」します。これにより、科学者は非常に小さな物体を動かしたり、その位置を固定したりすることができます。

## どのような用途がありますか？

トラップ光の技術は、生物学や物理学の研究で多く用いられます。特に、細胞や微小な粒子を操る研究で非常に重要なツールとなっています。また、微生物の動きをコントロールしたり、細胞内のプロセスを研究するのにも使われます。

## どのような利点と課題がありますか？

トラップ光の技術は、微小なオブジェクトを精密に操作する能力を提供する一方で、高度な技術と専門知識を要求します。また、装置は複雑で高価なことがあります。

# まとめ

トラップ光は、レーザー光を利用して微小な物体を「捉え」て操る技術です。この技術は主に科学研究で使用され、物理学や生物学の分野で非常に価値のあるツールとなっています。しかし、この技術は高度な専門知識と高価な装置を必要とするため、一定の課題があります。
DockerでSpring boot起動するまでの手順

DockerでSpring boot起動するまでの手順として、`docker compose up -d`でコンテナを起動してから以下のコマンドでspring bootのコンテナに入ります。


```
docker compose exec [service名] /bin/bash
```
コンテナに入ってからルートディレクトリで、以下のコマンドでspring bootを起動することができます。
ちなみに、今回のspring bootプロジェクトのビルドツールはMavenを採用しています。Java関連で調べているとGradleを使った記事がやや多いように感じました。

```
./mvnw spring-boot:run
```
mrubyの実行

FreeBSDのmrubyの実行方法です。

# スクリプトを実行

```ruby:test.rb
print "MORIMORI\n"
```

% mruby test.rb

# 標準入力を実行

% cat test.rb | mruby

# shellから実行

```sh:test.sh
#!/usr/local/bin/mruby

print "MORIMORI\n"
```

% ./test.sh

# バイトコードにして実行

% mrbc test.rb
% mruby test.mrb

パフォーマンス的にはこれが一番だと思います。小さいスクリプトだとバイトコードのほうがファイルサイズは大きくなるようです。昔は-bオプションを指定していましたが、現在は自動判別します。
せんせー、スマートレンズってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、スマートレンズってなに？

# スマートレンズとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## スマートレンズとは何でしょうか？

スマートレンズは、通常のコンタクトレンズとは異なり、様々な高度な技術を組み込んでデザインされた特別なコンタクトレンズです。これにより、視力補正だけでなく、さまざまな追加機能を提供することが可能になります。

## どのような特技を持っているのでしょうか？

スマートレンズは、視力補正の他にも、スマートフォンや他のデバイスと連携できる機能や、瞳孔の動きを追跡して情報を収集できるセンサーを内蔵することがあります。また、血糖値のモニタリングなど、特定の健康状態を監視する機能も持っているものもあります。

## スマートレンズが使われる場面はどのようなものがありますか？

スマートレンズは、日常生活での視力補正や、健康状態のモニタリングに使用されるほか、仕事や学習の効率を向上させるためにも利用されます。また、運転中や運動中に有用な情報を提供して安全を高める役割も果たします。

## どのようなメリットとデメリットがありますか？

スマートレンズのメリットは、視力補正と多くの追加機能を一つのデバイスで提供できる点です。しかし、デメリットとしては、高価であることや、技術的な問題が発生しやすいことが挙げられます。また、プライバシーの侵害やセキュリティリスクも懸念されます。

# まとめ

スマートレンズは、高度な技術を利用して様々な機能を提供する特殊なコンタクトレンズです。視力補正の他にも、健康モニタリングやデバイスとの連携など、多くの追加機能を利用することができます。しかし、高価であり、技術的な問題やプライバシーの懸念があります。
せんせー、アクセラレータドリフトイメージングってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、アクセラレータドリフトイメージングってなに？

# アクセラレータドリフトイメージングとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## アクセラレータドリフトイメージングとは何でしょうか？

アクセラレータドリフトイメージングは、非常に高速なカメラ技術を利用した画像化方法です。この技術は特に、物質や構造を微小なスケールで観察するために使用されることがあります。

## どのように機能しますか？

この技術は、粒子を非常に高い速度で移動させることによって物質の内部構造を視覚化することが可能です。高速カメラは粒子の動きをキャプチャし、それから詳細な画像を再構築します。これにより、非常に短い時間枠で動的なプロセスを視覚化することができます。

## どのような用途がありますか？

アクセラレータドリフトイメージングは、素材科学、生物学、化学などのさまざまな研究分野で利用されます。たとえば、新しい材料の開発や、生物学的なプロセスの理解を深めるために使用されることがあります。

## どのような利点と課題がありますか？

この技術の利点は、非常に高い時間分解能を持つことであり、それにより高速のプロセスを捉えることが可能です。しかし、非常に高速なカメラ技術と高度な解析が必要であり、専門知識と高価な装置が求められるのが課題です。

# まとめ

アクセラレータドリフトイメージングは、高速カメラ技術を利用して物質の内部構造を詳細に視覚化する方法です。これは科学研究の多くの分野で非常に有用なツールであり、素材の特性や動的プロセスの理解を深めることが可能です。しかし、この技術は高度な装置と専門知識を要するため、利用にはいくつかの課題があります。
命名規則について勉強

# 1. 命名規則について

プログラミングにおいて、命名規則は非常に重要な要素です。

- **明確な名前をつける**  
    変数、関数、クラスなどの名前は、その目的や機能が一目でわかるように明確にすることが推奨されます。

- **短すぎず長すぎない名前**  
    名前はできるだけ短く、しかし十分な情報が含まれるようにするのが一般的です。

- **一貫性**  
    同じ概念には同じ名前を使用します。異なる名前を使うと混乱を招く可能性があります。

- **独自の省略形や略語は避ける**  
    知らない人が見ても理解できる名前を使います。独自の省略形や略語は他人が理解するのに時間がかかる可能性があります。

- **ドメイン用語を活用する**  
    ビジネスロジックやアプリケーションのドメインに関連する専門用語を使うことで、他の開発者とのコミュニケーションがスムーズになります。

- **動詞と名詞**  
    関数名には動詞を、変数名やクラス名には名詞または名詞句を使います。例えば、`CalculateAverage()`、`firstName`など。

- **単数形と複数形に注意**  
    配列やリストには複数形の名前（`items`、`users`）を、単一のインスタンスには単数形の名前（`item`、`user`）を使用します。

- **汎用的な名前に注意**  
汎用的な名前（例：data、info、temp など）は一見便利に見えますが、これらの名前はその変数や関数が何を意味するのか、どのように使用されるのかについてほとんど情報を提供しません。

# 2. rubyメソッドの命名でよく使うやつ

## Bool値を返すメソッドの命名

- `is○○`
- `is_admin?`: ユーザーが管理者であるかどうかを判断するメソッド
- `is_active?`: 何かがアクティブであるかどうかを示すメソッド。
- `can○○`
    - `can_write?`: ファイルやディレクトリに書き込みができるかどうかを判定します。
    - `can_execute?`: コマンドやクエリが実行可能かどうかを判定します。
- `should○○`
    - `should_update?`: データやUIが更新されるべきかどうかを判定します。
- `has○○`
    - `has_children?`: ノードや要素に子供がいるかどうかを判定します。
    - `has_error?`: エラーが発生したかどうかを判定します。
    - `has_permission?`: 何らかの権限が与えられているかどうかを判定します。
- `exists`
    - `file_exists?`: 指定されたパスのファイルが存在するかどうかを判定します。
    - `user_exists?`: 指定されたIDや名前のユーザーが存在するかどうかを判定します。

## 取得する系のメソッド

- `get`: データを単純に取得する場合に使われます。
- `fetch`: データベースやネットワークリソースから何らかのデータを取得する場合に使われることが多い。
- `retrieve`: 特定の検索条件に基づいてデータを取得する場合に使われます。
- `find`: 特定の条件に合致する要素を探して返す場合に使われる。

## 計算する系のメソッド名

- `calculate`: 基本的な計算を行う場合によく使われます。
- `recalculate`: 既に計算された何らかの値があるが、何らかの理由で再計算が必要な場面で使われます。

## 入出力のメソッド

ファイル入出力

read_file - ファイルからデータを読み込む操作。
write_file - ファイルにデータを書き込む操作。
load_csv - CSVファイルからデータを読み込む操作。
export_csv - データをCSVファイルにエクスポートする操作。

データベース操作

fetch_records - データベースからレコードを取得する操作。
save_record - レコードをデータベースに保存する操作。
update_record - データベース内の既存のレコードを更新する操作。
delete_record - データベースからレコードを削除する操作。

API呼び出し

fetch_from_api - APIからデータを取得する操作。
post_to_api - APIにデータを送信する操作。
update_via_api - APIを使用してデータを更新する操作。
delete_via_api - APIを介してデータを削除する操作。

ユーザー入出力

get_user_input - ユーザーからの入力を受け取る操作。
display_output - ユーザーに情報を表示する操作。

キュー、メッセージング

enqueue_message - メッセージをキューに追加する操作。
dequeue_message - キューからメッセージを取り出す操作。
publish_event - イベントを発行する操作。
subscribe_event - イベントを購読し、通知を受け取る操作。

キャッシュ

cache_data - データをキャッシュに保存する操作。
fetch_from_cache - キャッシュからデータを取得する操作。
invalidate_cache - キャッシュ内のデータを無効にする操作。
Google Chrome のタブ分割機能、皆さん知ってますか？

## はじめに

### 説明
タイトル通りですが、Google Chrome のタブ分割機能、皆さんご存知でしょうか？
画像の様にグループ化して分ける事が出来ます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/53cb5c62-c679-f9d3-9cb1-8ee473b2096a.png)
私はこの機能を非常に使っています。
これをする事によって、どういうメリットがあるか以下にまとめました。

- タブをグループ化できる事によって整理整頓が出来る
- 探したい情報がすぐに見つかる
- タブに踊らされない
- 整理整頓されているだけで何かイメージは良い。

こんな感じでしょうか。

画面共有された際に、タブを開きすぎて「あれ、どれだっけな、、」みたいな光景をよく見ます。
目的のタブを探している時間ほどもったいないものはないです。（お相手の時間も奪ってしまいますからね…）
私は性格上、綺麗に整理したいのでこういったタブ分割機能を使い、何のタブなのか、何の為に開いてるのかなど目的毎に分けてます。
そうすることによって、一発で目的のタブを見つけられるからです。

又、Chrome の標準機能なので拡張ツールを入れるなどの手間も一切必要ないです。
簡単にグループ化の手順を書いたので、宜しければ参考にして下さい。
本当に簡単なので一瞬で終わります。タブの乱れは心の乱れです。

## 操作方法

目的のタブを右クリックして、「タブをグループに追加」→「新しいグループ」を押下します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/a043497b-108c-714f-6c4d-537755801aca.png)
グループの名前を決めたら Enter です。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/2ad5b0a9-21f0-8a38-4890-ce3742464520.png)
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/a74f3320-15e8-7532-4ecd-8efc45626856.png)
出来ました。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/5a4e6b08-419f-9748-93e0-13871b0af66a.png)
グループに追加されていないタブを既存のグループに追加したい場合は、既存のグループへドラッグアンドドロップするだけでOKです。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/81e9c7e9-b07e-6528-17d3-ca5c1306f849.png)
追加出来ました。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/57033b9c-feab-f92e-faa9-cf791f27898d.png)
一時的にタブグループを非表示にする事も出来ます。その場合は、該当のタブグループをクリックするだけです。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/24e8075c-1e51-70ff-9784-e91faaf803b8.png)
非表示に出来ました。
こうする事で、更に見やすくもなると思います。必要な時に必要なタブグループを開きましょう。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/2a07157c-7540-675b-d0dc-8606fc4157e0.png)
タブグループを削除する場合は、

- グループを解除
- グループを閉じる

の2つがあります。
その場合は、該当のタブグループを右クリックします。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/645d6e76-4a23-9675-89aa-a5a418a91fcb.png)
「グループを解除」の場合 → タブグループがなくなりその中に入っているタブが放出されます。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/f0296640-e779-af7b-0413-69bea4edd46f.png)
「グループを閉じる」の場合 → タブグループの中に入っているタブも全て消えます。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/5ad608bb-c2fc-815f-257e-aca7101502d4.png)
後は、rename だったり背景色を変えたりなども出来ますので、気になる方は是非やってみて下さい。

ちなみに chrome の拡張機能でも、「Acid Tabs」という機能もありまして、同じようにタブをグループ化出来ます。
これの良いところは、ドメインから自動でグループを生成してくれることです。
その他の機能はあまり変わりませんので、どちらでも問題ないと思います。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3282990/d5169c50-aa56-5c3e-ecbe-06c45360545d.png)

以上です。

タブは綺麗にしましょう！
汚いより綺麗な方が絶対に良いです。
作業効率上がります。
2023/9/12主にITとかセキュリティの記事

会員制への監視を強めるコストコの新たなビジネスモデルとは?(9/10)
https://forbesjapan.com/articles/detail/65810

“顔画像”が流出 まさか残っているなんて…(9/10)
https://www3.nhk.or.jp/news/html/20230910/k10014179331000.html

QNAP製品に重要な脆弱性、アップデートを(9/10)
https://news.mynavi.jp/techplus/article/20230910-2768589/

iPhone、iOS 16にBluetoothオフでも機能する新たなハッキング(9/10)
https://forbesjapan.com/articles/detail/65868

なぜ注目？ 投票用紙の署名照合を怠った州務長官の敗訴(9/10)
https://agora-web.jp/archives/230909061153.html

ふるさと納税特設サイトで情報漏洩　2年前の不正アクセスが明らかに 鹿児島県志布志市(9/11)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600011/090600139/

AIの推論はクラウドからエッジへ、インテル幹部に戦略を聞く(9/11)
https://xtech.nikkei.com/atcl/nxt/column/18/00001/08348/

「SEに求められる最も大事な能力、やっぱりあれですか」(9/11)
https://xtech.nikkei.com/atcl/nxt/column/18/02518/00038/

AVIF（AV1 Image File Format）(9/11)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600009/090400150/

ベンダーロックインの真相とは　公共機関や企業の「丸投げの罪」(9/11)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600007/090600147/

訪日客向けネット旅行会社　コロナ乗り越え事業を拡大(9/11)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600002/090500075/
Openstack Yogaを1から構築してみる ~Horizon編~

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

最近、Openstack環境を組んでいます。現在Keystone、Glance、Nova/Placement、Neutronまで導入し、それとなくコマンドが動くことまでを確認しています。

https://qiita.com/ohtsuka-shota/items/de7d3b10c24091a1e29e

https://qiita.com/ohtsuka-shota/items/152e88e55d733e5a939e

https://qiita.com/ohtsuka-shota/items/4fc6106dd3a6497dd0f5

https://qiita.com/ohtsuka-shota/items/0dc46e7db749ce177a66

今回はこの続き、Horizonを導入していきたいと思います。

# HW構成

|HW  |値  |
|---|---|
|CPU  |4sockets 4cores |
|Memory  |40GB  |
|Disk  |100G  |
|NIC1(ens18)  |192.168.2.10  |
|NIC2(ens19)  |192.168.2.11　|

# 用語
## Horizonとは？

引用しておりますが、ざっくり書くとOpenstackにWebUI環境を提供するコンポーネントになります。
PythonのWebフレームワークであるDjangoをベースとしているようです。

>Horizo​​nはOpenStackダッシュボードの実行であり、Nova や Keystone などの OpenStack サービスに Web ベースのユーザー インターフェイスを提供します。

https://openmetal.io/docs/glossary/what-is-openstack-horizon/

# 参考サイト

https://docs.openstack.org/horizon/yoga/install/install-ubuntu.html

https://www.server-world.info/query?os=Ubuntu_20.04&p=openstack_yoga&f=15

# Config等

追ってGitLab上にまとめていきます。

# 構築
## 必要なモジュールなどのインストール
```
root@openstack:~# apt install openstack-dashboard -y
```


## Horizonのconfigをいじる
Horizonは特にMariaDBに登録するということはありません。役割的に当たり前といえばそうかもしれませんが、、、
configは、/etc/openstack-dashboard配下にあるpythonファイルです。
```
root@openstack:~# cp -p /etc/openstack-dashboard/local_settings.py /etc/openstack-dashboard/local_settings.py.org
root@openstack:~# vi /etc/openstack-dashboard/local_settings.py
root@openstack:~# diff /etc/openstack-dashboard/local_settings.py /etc/openstack-dashboard/local_settings.py.org
99c99
<         'LOCATION': '192.168.2.10:11211',
---
>         'LOCATION': '127.0.0.1:11211',
113c113
< SESSION_ENGINE = "django.contrib.sessions.backends.cache"
---
>
126,128c126,127
< OPENSTACK_HOST = "192.168.2.10"
< #OPENSTACK_KEYSTONE_URL = "http://%s/identity/v3" % OPENSTACK_HOST
< OPENSTACK_KEYSTONE_URL = "http://192.168.2.10:5000/v3"
---
> OPENSTACK_HOST = "127.0.0.1"
> OPENSTACK_KEYSTONE_URL = "http://%s/identity/v3" % OPENSTACK_HOST
132c131
< TIME_ZONE = "Asia/Tokyo"
---
> TIME_ZONE = "UTC"
404,405d402
< OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
< OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
```

apacheを再起動します。
```
root@openstack:~# systemctl reload apache2.service
```

## WebUI経由でOpenstackにアクセスする
http://(ホストのIP)/horizonに対し任意のWebブラウザでアクセスを行います。
以下のような画面が表示されるかと思います。
![image (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/7cd4a230-d58b-7082-71ce-5b8d70be9a63.png)

ユーザ：admin
パスワード：password
ドメイン：default
と入力しログインを試みます。このあたりの設定値はkeystone時に作成したkeystonercに書いているものに合わせればいいと思います。openstackコマンドでOpenstack環境をいじるか、WebUIでいじるかの違いだけですので。
![image (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/c1cca71a-e746-d074-c530-fa2d45e96993.png)

こんな感じの画面が表示されればOKです。
![image (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/867d49ae-d4a5-36f5-cee0-a62f3c775983.png)

短いですが、以上です。
次回は、今まで作成してきた環境の動作確認をしつつ適宜トラブル対応をしていきたいと思います。
初投稿の練習

おはよう～　
絶賛python勉強中です。
ネットで調べた色々を記録しておく場所がほしくて、探していたところ、Qiitaでいいじゃんってなりました。

そんなわけで、まずは投稿の練習をしよう。
いや。。。勉強しろよ！
```
moji='abcdefg'
lst=[char for char in moji]
print(lst)
```
8051いじり

フォトフレームで使われている8051ベースのSOCの攻略方法を考えて見ました。

オリジナルの8051は1980年くらいにIntelが出したワンチップマイコンの先駆けなのですが、この頃の8bit cpuはほとんどなくなりましたが、8051はいまもいろいろなところで使われています。

これは命令の実行クロック数を減らしたり、クロック自体を48MHzなどと当初の10倍以上の高速でも動くようにした事で現在でも通用するパフォーマンスを出しています。

おそらく設計時はアセンブラで使うことを想定していたと思いますが、cが上手く動いたのもよかったのかもしれません。

小さいフォトフレームで使われているAX203ですが、同社のチップがdpf-axというプロジェクトでファームの書き換えをしていて、その際にリバースエンジニアリングした方法のノートがあります。

dpf-axはAX206を対象にしたプロジェクトなのですがいろいろ検索していたらAX208のデーターシートが見つかりました。

まだ細かく確認していませんが、おそらくAX203もそんなに違いはないと思います。

オリジナルの8051にはCPUとTIMERとUARTとGPIOが入っていました。

8051のIOのレジスタは0x80から0xffまであります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/8752c944-09e6-18bf-4d03-1fb21448cb8f.png)

sdccでは以下のように定義されています。

```c:8051.h
/*  BYTE Register  */
__sfr __at (0x80) P0   ;
__sfr __at (0x81) SP   ;
__sfr __at (0x82) DPL  ;
__sfr __at (0x83) DPH  ;
__sfr __at (0x87) PCON ;
__sfr __at (0x88) TCON ;
__sfr __at (0x89) TMOD ;
__sfr __at (0x8A) TL0  ;
__sfr __at (0x8B) TL1  ;
__sfr __at (0x8C) TH0  ;
__sfr __at (0x8D) TH1  ;
__sfr __at (0x90) P1   ;
__sfr __at (0x98) SCON ;
__sfr __at (0x99) SBUF ;
__sfr __at (0xA0) P2   ;
__sfr __at (0xA8) IE   ;
__sfr __at (0xB0) P3   ;
__sfr __at (0xB8) IP   ;
__sfr __at (0xD0) PSW  ;
__sfr __at (0xE0) ACC  ;
__sfr __at (0xF0) B    ;
```

AX208ではすべて変えてしまっているようです。

現在秋月で販売されているCH55xではオリジナルを残して機能追加しているようです。

AX203ではSPI Flashにコードが含まれていて、それをおらくSOC内部のROMが1KByte程度RAMに読み取って実行を移し、そのコードでプログラム本体をRAMに移して実行しているようです。

吸い出したバイナリの逆アセンブルはサイトがなくなっていますが、d52が良いようです。

シリアルのプログラムはここが参考になります。

https://web.archive.org/web/20200712152325/https://what-when-how.com/8051-microcontroller/8051-serial-port-programming-in-assembly/

逆アセンブラにmov sbuf,aが無ければオリジナルのuartは変更されているものと思われます。
【ちょっと便利な小技_part10】開発スピード上昇拡張機能

今回はVSCodeのfltter拡張機能を紹介します。
自分はまだ使いこなせていないのですが、慣れれば開発スピードが上がると思います。
是非、使ってみてください。

## 拡張機能
いくつかあるflutterの拡張機能のうち、今回は**Flutter Tree**という拡張機能を紹介します。

https://marketplace.visualstudio.com/items?itemName=marcelovelasquez.flutter-tree

この拡張機能は、flutter開発に慣れてきた人や頭の中で実装イメージができている人などにおすすめです。
使い方はとても簡単なので軽く説明します。

## 使い方
下記の画像のように入力を行いエンターを押せば完了です。
※「＞」はchild、「[]」はchildrenとなっています。
![スクリーンショット 2023-09-12 4.23.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524075/beb0ad2b-44e1-f2e6-6f07-6fb9c103edde.png)

## 結果
![スクリーンショット 2023-09-12 4.23.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524075/94f41516-097f-af62-e0ab-66563f5d3548.png)

## 最後に
これはまだ自分は使い慣れていなくて、ぎこちないのですが慣れて使いこなすことができれば
今までより開発のスピードは上がると思います。
Tableau PrepからPythonスクリプトを使用できるようにセットしてみた(Windows)

## 前提
以下の手順を記載しております。
①Tabpyのセットアップ
## 参考ドキュメント
https://help.tableau.com/current/prep/ja-jp/prep_scripts_TabPy.htm

## 手順
### 1.Tabpyのセットアップ
①AnacondaからPythonをダウンロードし、インストールする（今回はWindows）

https://www.anaconda.com/download

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/6e6aa96f-a431-30d2-ee69-11681175d448.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/b83f23fc-7b8d-ca17-09fb-50efcb08d016.png)
②Anaconda Powershell Promptを管理者権限で起動し、以下のコマンドによってAnacondaの仮想環境を生成
```
$ conda create -n Tableau-Python-Server python=3.7 anaconda
```
③以下のコマンドを実行し、仮想環境を有効化
```
$ activate Tableau-Python-Server
$ conda info -e
```
④「TabPy」パッケージをインストール
```
$ conda install tabpy-server
$ conda install tabpy-client
```
⑤Pandasをインストール
```
$ pip3 install pandas
```
⑥mojimojiをインストール（任意）
```
$ pip install mojimoji
```
⑦tabpyを起動
```
tabpy
```
### 2.Tableau Prep BuilderからPythonスクリプを使用
①Tableau Prep Builderを起動し、「ヘルプ」→「設定およびパフォーマンス」→「分析の拡張機能の接続」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/2c7dc798-0d09-1315-d984-adc1c8a157e9.png)
②分析拡張機能の選択：Tableau Python(TabPy)Server
サーバー：localhost
ポート：9004
サインインをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/b717b434-164e-8877-1004-21798e8c08e4.png)
③以下のブログを参考にスクリプトを実施

http://tableaujpn.blogspot.com/2020/03/tableau-preppython.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/1dc66648-f540-710a-00ca-abee55eb385c.png)

無事変換されました！
以上
10 Signs of Insecurity in Relationships: How to Overcome?

“Insecurity ruins relationships and causes most fights” — Olivia Wilde.

Insecurity in relationships can show up in different ways. It might be unwarranted jealousy, constantly seeking assurance, or obsessing over perceived partner failures. You might find yourself doubting your partner’s feelings or making negative comparisons to others. This can lead to possessive behavior or overanalyzing every interaction for signs of rejection. These insecurities can create a harmful cycle of self-weaving and fear and strain the relationship. 

In this blog, we’ll dive into the roots of insecurity in relationships, its impact on relationships, and some strategies for tackling this challenging feeling. So, stay tuned as we dig deep into the complexities of and root causes of insecurity and explore ways to navigate it for healthier, more fulfilling relationships. Exciting stuff, right?![Untitled (1200 × 630px)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3556290/19b19f77-fec9-ad22-95e1-6c603e10ec4a.png)
Insecurity in relationships can manifest in various ways, affecting both partners. Here are some common signs and behaviours associated with your insecurities:

Need for constant reassurance: Insecure people often seek constant validation from their partners to feel valued and loved.
Fear of Rejection They may constantly fear rejection and actively look for signs of it, even when there’s no evidence.
Avoiding Emotional Intimacy Insecure individuals may have difficulty getting emotionally close to their partners and may keep their guard up.
Immediate Defensiveness: They might become easily offended or hurt by something their partner asks, leading to immediate defensiveness.
Jealousy Insecurity in relationships can cause envy, causing partners to feel threatened by others in their partner’s life.
Lack of Personal Space Insecure partners may struggle to give each other personal space, fearing that time apart could harm the relationship.
Difficulty Handling Criticism Insecure individuals may have difficulty handling criticism and react defensively to any feedback.
Unwarranted Distrust They may struggle with their partners ‘ suspicions or doubts about their partner’s faithfulness.
Negative Self-Image This insecurity stems from a negative self-image, where individuals believe they are not good enough for their partner.
Communication Issues
 Insecure individuals may have trouble communicating openly and honestly with their partners, leading to misunderstandings and conflicts.
READ more: https://innermasteryhub.com/10-signs-of-insecurity-in-relationships/
ゆめみの2weekサマーインターンに参加してきました

選考フローは「エントリー」→「コーディングテスト」→「オンライン面接」という流れでした。

1. エントリー
基本的な経歴とかを入力する感じです。

2. コーディングテスト
エントリーをすると入力したメールアドレスに自動でコーディングテストのURLが送られてきました。
コーディングテストはWeb APIの叩き方を理解していれば、実装はできるかなという感じの難易度で実装難易度だけで言えば簡単だったと思います。
ただコードの綺麗さが見られるので、ただ実装できれば良いという感じではなかったです。

そしてコーディングテストを受けて、２日程度でコーディングテストに対するフィードバックが送られてきました。

ゆめみにはGood/Nextというフィードバック文化があるようで、良かったところをGood（褒める）、今後のステップアップ・改善点としてのNext（機会点）というフィードバックのフォーマットが定義されていて、コーディングテストのフィードバックもこのフォーマットに則ったものでした。
落ちるかも…自分の技術力じゃ…という方も受けるとコードに対してフィードバックがもらえて、次の成長につながるのでとりあえず受けてみるのをおすすめします！

私はこのフィードバックとともにコーディングテストの合格を伝えられ、面接に進むことができました！

3. オンライン面接
面接の前にメールで履歴書を送るのと、Googleフォームで志望理由やアピールポイントを事前に聞かれました。
面接では自分が送ったアピールポイントを元に話をしていくといっ BO <a title="Anjirtoto" href="https://anjirtotomaxwin.jimdofree.com/"><b>Anjirtoto</b></a> game togel た感じでした。
自分がメインで話をして、面接官の方が気になることがあったら質問されるという流れでした。
また面接の最中にもフィードバックがたくさんありました。ここでもGood/Nextが意識されていて、面接の最中なのに、成長ができるとは思ってなかったです。

また合格通知が送られてきたときにも、Good/Nextで面接に対するフィードバックがあってとても良かったです！
Tableau PrepからPythonスクリプトを使用できるようにセットしてみた(Mac)

## 前提
以下の手順を記載しております。
①Tabpyのセットアップ
②Tableau Prep BuilderからPythonスクリプを使用
## 参考ドキュメント
https://help.tableau.com/current/prep/ja-jp/prep_scripts_TabPy.htm

https://data-viz-lab.com/tabpy

http://www.dmod-blg.com/dataanalysis/tableau-desktop/tabpy

https://datadesigner.jp/tabpy-setup

## 手順
### 1.Tabpyのセットアップ
①AnacondaからPythonをダウンロードし、インストールする（今回はMac Intel）

https://www.anaconda.com/download

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/7d9c540d-91fc-48ce-9642-aa47947fd56b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/cd16b8d0-fbf4-f304-0be5-760273bade8c.png)


②GithubからTabpy Serverをダウンロード

https://github.com/tableau/TabPy

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/aa7b9ed7-7052-5403-c23d-12a691ccc336.png)

③ターミナルからAnacondaの仮想環境を作成
```
$ conda create -n tabpyenv python=3.7
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/5b840b41-7b81-f625-50ac-227ebf059410.png)
④仮想環境に切り替える（ターミナル）
```
$ conda activate tabpyenv
$ conda info -e
```
⑤Tabpyのインストール（ターミナル）
```
$ conda install tabpy-server
$ conda install tabpy-client
```
⑥Pandasをインストール
```
$ pip3 install pandas
```
⑦mojimojiをインストール（任意）
```
$ pip install mojimoji
```
⑧Tabpyサーバがインストールされたディレクトリに移動してシェルスクリプトを実行
（ディレクトリは④実施後のbaseを確認）
```
$ cd /Users/username/anaconda3/pkgs/tabpy-server-0.2-py37_1/lib/python3.7/site-packages/tabpy_server/
$ ./startup.sh
```
トラブルシューティング
エラーメッセージ：
```
AttributeError: module 'tornado.web' has no attribute 'asynchronous'
```
対策方法：
```
$ pip uninstall Tornado
$ pip install Tornado==5.1.1
```
ポート番号9004でサービスが開始されたことを確認できればok
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/065cbc0d-6bc0-c82c-66c1-bf80de8175cc.png)

### 2.Tableau Prep BuilderからPythonスクリプを使用
①Tableau Prep Builderを起動し、「ヘルプ」→「設定およびパフォーマンス」→「分析の拡張機能の接続」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/2c7dc798-0d09-1315-d984-adc1c8a157e9.png)
②分析拡張機能の選択：Tableau Python(TabPy)Server
サーバー：localhost
ポート：9004
サインインをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/b717b434-164e-8877-1004-21798e8c08e4.png)
③以下のブログを参考にスクリプトを実施

http://tableaujpn.blogspot.com/2020/03/tableau-preppython.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/1dc66648-f540-710a-00ca-abee55eb385c.png)

無事変換されました！
以上
【Pandas】read_csvのusecolsオプションが効かない時の対処法

usecolsオプションで利用するカラムを指定してread_csvを試みましたが、指定したカラムの情報を取得できず空のDataFrameが返却されてしまいました。

調査した結果、read_csv実行時にindex_colパラメータでインデックスのカラムを指定していると発生するようでした。

解消法は以下の2つのうちのいずれかに対応することです。

- usecolsで指定する値にindex_colで指定した値も入れる
- index_colを指定しない

コード例を以下に示します。

```python
# 空のDataFrameが返却される
pd.read_csv(FILE_NAME, index_col=[0], usecols=[1])

# csvの2列目だけ取得したDataFrameが返却される
pd.read_csv(FILE_NAME, index_col=[0], usecols=[1])

# csvの2列目だけ取得したDataFrameが返却される
pd.read_csv(FILE_NAME, usecols=[1])
```

read_csvメソッドのusecolsオプションを使う時にはお気をつけください。

参考ページ：[pandasでcsv/tsvファイル読み込み（read_csv, read_table） | note.nkmk.me](https://note.nkmk.me/python-pandas-read-csv-tsv/)
【JavaScript】リンクが新しいタブで開かれているか確認する方法

以下のようにすることでリンクが新しいタブで開かれたか確認することができます。

```javascript
if (document.referrer) {
    if (history.length == 1) {
        console.log('リンクから新しいタブで開いた。')
    } else {
        console.log('リンクから同じウィンドウで開いた。');
    }
} else {
    console.log('アドレスバーにURLを入力して開いた。');
}
```
【豆知識】2進数に関するよくある謎3選と解説

IT関係の業種に就く方は基本情報技術者試験の勉強などを通して２進数の勉強をします。

その際によく疑問としてあげられる３つについて解説しました。深いところまで調査した上で説明していますので、目次の中で知っている項目があったとしても飛ばさず読んでいただくことで新しい知見が得られるでしょう。

## 謎1：そもそもなぜ2進数を使うのか

コンピュータにおいて重要な部品はたくさんありますが、根本の根本はピンという部品です。コンピュータはピンに電気が流れているのか流れていないのかを読み取り、1つの情報として認識します。

ピンに電気が流れているか流れていないかの2パターン、これを表すためにぴったりなのが2進数だからコンピュータの世界では2進数が使われるのです。ピン１つで2進数1桁、2つで2桁表せることになります。

## 謎2：補数の作り方

マイナス記号を使わずにマイナスの値を表すために存在する補数。その補数の作り方は「２進数で表された各桁の数値を反転させた値に1を足す」です。

例として「0011」の補数を作る流れを載せておきます。
①反転「1100」②1を足す「1101」（完成）
0011の補数、つまりマイナスバージョンは1101だと分かりました。

ではなぜこの手順を踏むことで補数が作れるのでしょうか？

その答えは「元のプラスの値と足し合わせて桁あふれをさせたて0を作ることができる数」を導き出せるからです。

先ほど例で出した「0011」の場合で考えてみましょう。

「0011」に補数「1101」を足してみます。すると「10000」になりますが、コンピュータは溢れた桁は無視します。つまり5桁目の1は無視されて「0000」になります。足し合わせた結果、値は0になりました。

キーワードは桁あふれ&0です。覚えておきましょう。

## 謎3：論理和や論理積の「論理」って何？

論理の意味を分かりやすくするために、反対を考えてみましょう。論理和や論理積の反対は単純な和と積です。

和と積の場合は算術演算と呼ばれます。算術演算の場合は全ての桁全体を見て演算を行います。その結果桁上がりが発生します。

それに対して論理和や論理積は各桁ごとに判断します。そのため桁上がりしません。

まとめると、論理とは「桁上がりをする算術演算と区別し、各桁ごとに演算をすることを指している」ということになります。

参考ページ：[【5分で覚えるIT基礎の基礎】あなたは論理演算がわかりますか？](https://xtech.nikkei.com/it/members/ITPro/ITBASIC/20020731/1/)

## まとめ

2進数を知ってどんな意味があるのか？そう思う方は多いかもしれません。しかし簡単な計算処理の中でも２進数を知っていたからこそ解決できた問題がいくつかありました。2進数について深く知っておきましょう。あなたにも思わぬところで役に立つ日が来るはずです。
AWS Amplifyファミリーの違いがよく分からん！！

# 今回の記事のモチベーション
私はSI系のどっしりしたシステム開発に携わることが多かったので、開発者がサクッとアプリをホスティングできる！がウリのAmplifyに触れる機会がこれまで少なく、ちゃんと入門したいなと思ったのがきっかけです。

https://twitter.com/minorun365/status/1701225563036213410?s=20

### よく抱いていた疑問
*「Amplify Consoleってたまに聞くけど、ドキュメントやマネコン見ても結局どの機能のことを指すのかよく分からないのだが…？？」*


# Amplifyの超概要
一言でいうと「アプリケーション開発者がAWSインフラをお手軽に利用できちゃうフレームワーク＆マネージドサービス」です。

### Amplify
一番最初に出来た機能。iOSなどの「モバイルアプリ」用バックエンドを構築できるフレームワーク。

### Amplify Hosting
フロントエンドを含め、Webアプリをお手軽にホスティングできる。

### Amplify Studio
フロントエンド＋バックエンド開発用のビジュアルエディター。Figmaと連携できる。


# Amplifyファミリーで使える便利ツール

私がモヤっていた「Amplify Console」はここに位置します。
これらツール群は、上記のAmplify主要３機能のうち特定のどれかにのみ属すワケではない、というのがややこしいポイントです。

- Amplify CLI
- Amplify Console
- Amplify Libraries
- Amplify UI Components
- などなど…


# 実は歴史を紐解くと理解しやすい

私は2020年頃からAWSを触り始めた（比較的）ニワカ勢なのですが、もともと2017年に登場直後のAmplifyは**JavaScriptライブラリ**として提供されており、そもそもマネジメントコンソールからアクセス可能なWeb画面が無かったそうです。

https://dev.classmethod.jp/articles/aws-amplify-getting-started/

そんな中、翌年201年にマネコンからホスティングやCI/CD機能が追加されたのが「Amplify Console」だそうです。なるほど！

https://dev.classmethod.jp/articles/amplify-console/


# なぜAmplifyは分かりづらいのか？

今回調べて改めて分かった大きな点は

- 毎年進化を続けてきた歴史的経緯があり、Amplifyブランドとしての体系的な見せ方が難しい
- フレームワークから出発しており、アプリケーション開発に不慣れなインフラエンジニアには特にイメージしづらい

以下も影響していることと思います。

- 進化が早いので既存資料がすぐ古くなる
- 各機能の正式名称とマネコン表記、日本語訳が揺らぐ
- 抽象度が高い裏側隠蔽系サービスなので具体的に説明されづらい

※特に公式のサービス紹介ページが分かりづらい。説明が抽象的なことに加えて、「Amplify Web Hosting」といったツール名の揺らぎ？もありかなり混乱しました。

https://aws.amazon.com/jp/amplify/

さらにAmplifyは開発者ツールの色が強いので、AWSドキュメント（ユーザーガイド）と別に開発者向けドキュメント（Amplify Dev Center）があるんですよね。

https://docs.amplify.aws/



# 参考資料

👇 Amplify黎明期の歴史背景が分かりやすいです。

https://dev.classmethod.jp/articles/regrowth-amplify/

👇 比較的最近までのAmplifyのエッセンスが綺麗に整理されている神ブログ

https://tech.nri-net.com/entry/aws_serverless_static_website_hosting_using_amplify_overview


# 最後に

私もまだまだAmplifyを勉強し始めたばかりなので、お気づきの点があれば是非コメントいただけると有り難いです！