OmniAICreator/Qiita-1.07M huggingface dataset:
やる気という不安定なものに頼らないテクニック

## 無気力人間

私は昔からどちらかというと無気力な人間でした。
努力や我慢は嫌いで「若い頃の苦労は買ってでもしたほうがいい」と言われると「苦労を知らず死んでいきたいのです」と返答していました。

その気持ちは今も大して変わっていません。
それでも社会人として生活を成り立たせるためにやってきた考え方やテクニックを共有します。

## 仕事の自分は仕事の自分として割り切る

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/2f4ad98b-6ab0-7b4d-8981-c0e4f0191052.png)

やりたい事とやるべき事が一致しない場合や、自分の預かり知らないところで起きたことの後処理などはプライベートの時間でなくて、この時間にお金を貰っているからと割り切ると少し楽になります。
「まぁ趣味の時間じゃないしなぁ」と。

逆にこの考え方をしないと、「なんでこんな事をやらないといけないんだ」とか「やりたくない」とかに気持ちが振られると少ししんどい状態になります。

業務時間をプライベートの自由時間の気持ちの土台で迎えると本来は負う必要のないストレスを負うことになります。

お金をもらい、業務として取り組む限りは自由時間とは違うという気持ちの切り替えが大切です。

## プライベートでも自己研磨が求められるじゃないのよ

だらだらと過ごしたい。寝ていたい。
とは思いながら、世間では日々の生活の中で何らかの成長が求められることが多いです。
特にソフトウェアエンジニアにおいては当たり前のように要求されます。

なので、プライベートの時間を使ってある程度は本を読んだりプログラムを書いたり調べ物をしたりします。

これは、下記のような動機づけから行動します。

* 現実を受け入れる（危機感）
* 人のために（社会性）
* 面白いと考える（興味関心）

### 現実を受け入れる（危機感）

実際問題、生きていくのはなかなか大変なことです。
普通に生きるというのは、ハードルが高いように思います。

何も変わらず、昨日と同じ自分、先月と同じ自分、去年と同じ自分だったとき社会は受け入れてくれるだろうか。
今の仕事がなくなった場合、違う仕事を選ぶことを余儀なくされた場合、どのような仕事ができるだろうか。

周りを見渡す中で、自分にこの仕事ができるだろうか、とよく想像します。
気が弱く、貧弱で記憶力も衰えている自分にとっては他業種のすべての人がパワフルで、到底自分にはできないのではないかと考えてしまいます。

危機感を持ち、少しでも自分の価値を強化しなければ、すぐ先には強烈な苦痛や苦労がまっているのではないか。
それを回避するために今少しくらいは動こう、そう考えることができます。

> 「苦痛」を液体にしたモノ
> 味はまずい 最高にまずい
> 一気に飲むと死亡する可能性もあるので少量に分けて飲むことをオススメする
> 「幸せ」を液体にしたモノ
> これはうまい これは最高にうまい
> 一気に飲むのも良し 少しずつ味わうのも良し
> この二本を各自が毎月必ず飲み干さなければならない
> もちろん その量は人によって異なる
> 
> **古谷実「サルチネス（３）」より**

強烈な苦痛を避けるため、日頃から少量の苦水を摂取しようと考えています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/ee5a8948-2bf1-e68a-350d-2bfebe50d933.png)

### 人のために（社会性）

何かを行う動機が、会社のため、仲間のため、顧客のためというのが疲れた場合、自分の利益や未来のためにとか考えると良いと思います。

しかし、意外と人は自分のためだけには頑張れないような気がするので、そういうときは、社会のため、周りの人たちのために動機づけすれば良いと思います。

人生は人のためと自分のためをいったりきたりしながら生きていくものかもしれません。

### 面白いと考える（興味関心）

新しい取り組みや知識は、これまでの景色を少し変化させたり、より深い洞察に繋がります。ゲームやエンターテイメントのコンテンツと同様にそれを楽しいことと捉えることもできるでしょう。

学習曲線は正比例にはなりません。
基本的には退屈で苦痛の連続で、ダニングクルーガー効果の絶望の谷に嵌ることもあるでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/d8f2ccde-4e7e-9254-4606-4d22e450c17d.png)

しかし、振り返ると日々重ねてきたことが価値や面白さに繋がっていたことはよくあることです。

興味、関心を刺激し面白さを見出すことにより生まれるエネルギーがあります。

## 結局のところ

結局のところ、面倒なこと、気が乗らないやるべきことをやっていくのは割り切りと考え方を少し補正するしか方法はないと思います。
具体的な補正方法は人それぞれですが、私の場合の具体例でした。

> …人類最大にして最強の敵
> “めんどくさい” に打ち勝ち…
> 立派な大人になりたいなぁ〜
> 
> **古谷実「グリーンヒル（３）」より**
C_TS422_2021 SAP Certified Application Associate SAP S/4HANA Production Planning and Manufacturing対策（2/100）

【2日目】
トピック1：SAPS/4HANAサプライチェーン計画の概要（2/6）

≪問題2≫
サプライチェーン計画において予測に利用できるSAPアプリケーションは次のうちどれでしょうか。
（２つ選んでください）
▢資材所要量計画（MRP）
▢サプライチェーンマネジメント（SCM）
▢能力所要量計画（CRP）
▢Integrated Business Planning（IBP）

≪解答≫
▢資材所要量計画（MRP）
█サプライチェーンマネジメント（SCM）
▢能力所要量計画（CRP）
█Integrated Business Planning（IBP）

≪解説≫
◆サプライチェーン計画における需要予測は、以下のツールで実行できます。
（1）SAP Supply Chain Management（SCM）
（2）SAP Integrated Business Planning（IBP） 
◆さらに、需要予測の結果は、計画独立所要量としてS/4HANAに転送可能です。
AWK で Welcome to AtCoder を解いてみた

[Qiita Engineer Festa 2024（キータ・エンジニア・フェスタ 2024） - Qiita](https://qiita.com/official-campaigns/engineer-festa/2024)
において、約1ヶ月で38記事という大量の記事の投稿を要求されることがわかった。
そこで、あまりコストをかけずに記事数を稼ぐ方法を考えた結果、「Welcome to AtCoder を様々な言語で解く」ことを思いついた。
単に解くだけでなく、使用する言語仕様の解説を入れれば、記事として一応成立するだろう。

# Welcome to AtCoder

[PracticeA - Welcome to AtCoder](https://atcoder.jp/contests/abs/tasks/practice_1)

Welcome to AtCoder では、以下の形式で整数 $a$, $b$, $c$ および文字列 $s$ が入力として与えられる。

```text
a
b c
s
```

この入力をもとに、与えられた整数の和 $sum = a + b + c$ および文字列 $s$ を、以下の形式で出力することが求められる。

```text
sum s
```

# 今回用いる AWK の仕様

[awkの使いかた #Linux - Qiita](https://qiita.com/hnishi/items/4ee60ed515470e796f41)
[とほほのAWK入門 - とほほのWWW入門](https://www.tohoho-web.com/ex/awk.html)

入力に対し、1行ごとに処理を行う。

```
処理を行う条件 {
  処理内容
}
```

の形式で、処理を行う条件と処理内容を記述する。
処理を行う条件を指定した場合は、この条件に合う行についてこの処理を行う。
処理を行う条件を空にした場合は、すべての行についてこの処理を行う。

組み込み変数 `NR` を用いると、対象の行の行番号を取得できる。
最初の行の行番号は `1` である。

処理内容では、`$0` で処理対象の行全体を、`$n` (`$1`、`$2` など) でその行の n 番目のフィールド (空白文字で区切られた部分) を参照できる。

処理では変数を用いることができる。
変数の宣言は不要で、いきなり用いてよい。
変数への代入は `=` を用いて行うことができる。

`print` を用いると、データを出力できる。
複数のデータを並べて書くと、すべて結合して出力できる。

# 提出コード

1行目・2行目に対して、それぞれ与えられる数値を読み込み、和を求める。
3行目に対して、求めた和・空白・3行目の内容を続けて出力する。

```awk
NR == 1 {
  sum = $1
}

NR == 2 {
  sum = sum + $1 + $2
}

NR == 3 {
  print sum " " $0
}
```

[提出 #54439508 - AtCoder Beginners Selection](https://atcoder.jp/contests/abs/submissions/54439508)
colcon build をどこからでも実行する方法

## 背景
ROS2でcolcon buildをするときにworkspace内のホームディレクトリにいないで実行してしまった時、ディレクトリ内には不必要な install, log, build　ディレクトリが生成されてしまう。あせっていると手が滑り、さらに別のディレクトリでまたビルドしてしまい、パニック。

## 環境
ubuntu 22.04
ROS2 humble

## やりかた

要は、今いるROS2ワークスペース内の一番ルート側に自動で行ってからビルドすればいい。ただし、ホームディレクトリ直下にワークスペースがあるものとする。

```~/.bashrc
move_to_ros_ws() {
    current_dir=$(pwd)
    home_dir=$HOME

    while [ "$current_dir" != "$home_dir" ] && [ "$current_dir" != "/" ]; do
    # move to parent directory
        cd ..
        current_dir=$(pwd)
    done
    cd -
}
alias "col"="move_to_ros_ws && colcon build"

```
一個ずつ、ホームディレクトリに向かっていってホームディレクトリに到達したら、直前いたディレクトリに戻ることで作業中のROS2ワークスペースのホームに移動できる。

今回は col と打つとディレクトリ移動とcolcon buildをやってくれるようにした。
~/.bashrcを編集したら、
```
. ~/bashrc
```
も忘れずに〜
【初心者向け】パソコン操作が楽しくなる厳選ショートカットキー

いままでショートカットキーやコマンドなど何も知らなかった自分ですが、この2週間で覚えたwindowsの「これだけは覚えとけ、ショートカットキー」をまとめました

最後まで見て、知らなかった方は使ってみていただきたいし、知っている方は「他にもこれは使える！」というのがあればぜひコメントにいただきたいと思います！

## :point_up:ウィンドウの選択は「alt + tab」で
例えばchromeを開きながら、同時にExcelや連絡ツールアプリを開くなんてことは何度もあると思いますが、特に同じアプリを2つのウィンドウで使用していたりすると、一度アイコンを押してからどっちの画面をしようするかまた選択する必要があると思います
こういった手間もこのショートカットキー1つでかなりの手間とタイムロスを削減できます

実際使用するには、「alt + tab」で「alt」キーは離さず、「tab」キーを1度2度押すと、ウィンドウの選択を行います

特に直前に使っていたウィンドウに戻るには「Alt+tab」を一度押すだけで済むので、ぜひ活用してみてください


## :point_up:複数場所にコピー元が存在するときは「windows + v」でクリップボードを活用

「cntl + c」でコピーができて「cntl + v」でペーストすることかなり使うことが多いと思うのですが、一度に複数項目をコピーしたときに、その履歴をクリップボード「windows + v」で閲覧も使用もできてしまいます！

例えば2つのウィンドウを画面半分にして開いている時、都度コピーだとマウスを使って今度はコマンドを打って、と右手が大忙しになってしまうと思いますが、このクリップボードを活用すれば複数コピーするタイミング、まとめてペーストを行うタイミング、と作業が一貫するのでかなり手間の削減になると思いました


## :point_up:画面を半分にして表示するには「windows + ←(→)」

タブ上部をもって左端に持っていくとそのタブは半分で表示することができますが、これもこの「windows + ←(→)」のショートカットキー1つで活用できてしまいます

ちなみに「windows + ↑(↓)」も全画面表示に戻したり、最小化できたり、と動きがあるので実際に使ってみてください


## :point_up:画面のズーム変更したいというときは「cntl + マウスホイール」

マウスホイールで指を奥に倒すとズームイン、手前に持ってくるとズームアウトが簡単にできます


## :point_up:補足：Excelで今日の日にちをだすなら「cntl + "+"」

自分は今まで律儀に"2024/04..."というように数字1つずつ打っていたのですが、「cntl + "+"」で一発です

------
>### 最後に
>いかがでしたでしょうか
>自分は少なくともこの5つを知っただけでもかなり効率的にパソコン操作が進んだので、知らなかったものがあった方はぜひどんどん使って自分たちのものにしていきましょう
>最後まで読んでいただいてありがとうございます！
【Swift】文字コードの変換 の流れをまとめたい


ちょっと何が何なのかよく分からなかったので、

図にしてみました。

![sc 2024-06-11 at 1.34.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/16906a0a-c11d-4f45-628a-fc3649082cd4.png)

こんなかんじですよね。

# 🤔 引用

https://android.benigumo.com/20240611/encoding/
localstrageとJWTとXSS－保存場所と脆弱性についてまとめ

## 目的
JWTの保存場所について情報が錯綜しているため、どのようにして保存場所を選択すべきであるかを考えたい。

## JWTはlocalStorageに保存してはならない??

「JWTトークンは秘密情報を含むため、JavaScriptからアクセスできない場所に保存すべきである」といった主張があるがそれは、正しいのだろうか

また実際に社内において、XSS対策でHttpOnlyでSecureなCookieに格納してくれと言われたこともあった。

秘密情報をJavaScriptでアクセスできる場所に置くことに関して不安を覚えてしまうことは理解できるのですが、**XSS**を理由とすると話は違ってくる。

## XSSに対するHttpOnlyの効果は限定的で、ほとんど無力である

もしXSS攻撃に対して脆弱性が存在している場合に攻撃を受けたことを考えてみる

以下にサンプルの脆弱性を載せたnextアプリが存在するため、適当に動かすと実感がわきやすいかもしれない

https://github.com/koinunopochi/jwt_best

要は、JavaScriptでアクセスできないはずのCookieにある情報が、取得できてしまっていることが分かれば問題がない。
今回の手法は、ブラウザのほうにCookieを含めて外部のサーバーにPOSTしろとJavaScriptで設定しているだけである。XSSを仕掛ける場合にHttpOnlyによるJavaScriptのアクセス制限はこの程度しか効果がないのである。

**XSS**を理由にしてlocalstrageに保存してはいけないというのはあまりにも短慮である。
つまり、耐XSS性は理由とならない。

## ほか参考サイト

https://www.ipa.go.jp/security/vuln/websecurity/cross-site-scripting.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125890/3d104400-d63e-9aca-c7af-10d98eca5d9a.png)

あくまでもXSS対策において保険的対策に記述されていることに注意したい

https://bontamoffu.hateblo.jp/entry/2022/08/11/125536

>localStorage や in-memory グローバル の方式は広範囲を狙う攻撃に弱い

>in-memory ワーカー や Cookie の方式は広範囲を狙う攻撃に強い

うまくXSSに対するリスクを言語化してあります。このようなリスクもあることはある程度許容する必要があります。

https://www.slideshare.net/slideshow/phpconf2021spasecurity/250357376

:::note info
必読です。
:::

@ockeghem 先生のSPAのセキュリティに関する説明があります。
特にAPI認証等に関しても詳しい説明があるのでSPAを作成する場合は必ず読むべきスライドになります。

## 結局どこに保存すべきか

https://ryozi.hatenadiary.jp/entry/2022/02/12/073014

ここの考えと一致しているのですが、基本的に状況に合わせて考えるのが良いと考えています。

ここで注意が必要な点としては、cookieにJWTを設定する場合はCSRF攻撃の可能性が生まれることです。また、cookie容量の圧迫が起きるなどいろいろと問題もあります。

いろいろと考える必要はありますが、ステートフルにする必要がないのであればlocalstrageでよいのかなと個人的には考えています。

:::note warn
何かこの利用法ではcookie/localstrageのほうが良いということがある場合は、ご連絡ください！！
:::

## まとめ
JWTを考える中で、XSSやCORSについて改めて学ぶことができた。
また徳丸先生のスライドを見つけることができたのは僥倖である。
2024年にDockerを用意する（Windows）

## 【自己紹介】
初めまして、「よっしー」と申します！
インフラがメインの企業で開発部門に所属しています。経験としてはフロントエンドが長いです。
今回、Qiita Enginner Festa2024が開始されたとのことで、これを機に投稿活動をはじめてみました！
長年エンジニアしている割には知識が浅い部分を垣間見え、さすがに行動に移る必要があったため参加することになりました。
決してQiitaのぬいぐるみが欲しいとか、社内で自慢したいなどといった動機ではありません。

主に得意な技術：React、Typescript、NodeJS、Python
OS：Windows

## 【Docker】
今回は、今後の記事で活躍するであろうDockerをWindows環境で整えていきます。
Dockerについての説明は省きます、もしくは別の記事にて行おうと思います。

## 【2024年のDocker環境構築】
私もそこまで詳しくないため、行ったことを記載していきます

1. ユーザー登録
Docker公式ページにてユーザー登録を行います
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813019/7d3011c3-ba96-bd6e-aaab-406348d4ba9f.png)
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813019/ff664173-1176-2aff-166b-b859e09b8806.png)

2. 確認のメールが送信されるのでそちらを確認
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813019/ba176abe-a6fa-cc62-84eb-b729d40d4650.png)

3. DockerをUIで操作するため、Docker Desktopなるものを用意します：
- Docker Desktopを検索
- 公式ページにてWindows用をダウンロード
- インストールします
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813019/ae871130-95a0-41b2-2408-df326ffcfd45.png)

>【注意】インストールが完了すると、PCの再起動が必要になります。
※記事作成しながらだったけどVSCodeで書いてたから失わずに済んだ（VSCode最高）

4.Windows環境の場合、WSLをインストールする必要があるため、以下のコマンドをターミナルで実行する：
`wsl --install`
>【注意】インストールが完了すると、PCの再起動が必要になります。

5.DockerDesktopを起動すると正常に動作することを確認
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813019/051f30e8-a04e-33c0-e923-264930145f15.png)

## 【Dockerを動かしてみる】
1.最初にDockerの動かし方を体験するため、Docker公式が用意してくれている検証用アプリをGitリポジトリから取得
```
git clone https://github.com/docker/getting-started-app.git`
cd getting-started-app`
```

2.取得したディレクトリ内へ移動し、「Dockerfile」ファイルを作成:
```
cd getting-started-app
touch Dockerfile
```
3.ファイルの内容を以下の通りに記載：
<pre># syntax=docker/dockerfile:1

FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
</pre>

4.イメージと呼ばれる、実際に動く環境（コンテナ）の設計図を作成します
```
docker build -t getting-started .
```
Docker DesktopのImagesを確認すると、イメージが作成されていることが確認できる

![new01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813019/5f966233-fd16-3cf2-66b8-e49a3f07278c.png)

5.コンテナを立ち上げる
```
docker run -dp 127.0.0.1:3000:3000 getting-started
```
Docker DesktopのContainersを確認すると、コンテナが作成されていることが確認できる
![new02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813019/69c135f2-449d-f0d6-0410-22d34cb339c2.png)
正常に立ち上がっているか、ブラウザで「localhost:3000」とURLを入力し、
画面上で入力欄とボタンが表示されたら検証完了
![new03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813019/706bdb0b-0a4d-f9a7-4e67-acfc242e92e7.png)

以上、ありがとうございました！
ラズパイでスマートロック作ってみたV2

# はじめに
カバンから鍵出すのって面倒ですよね。そして急いでいると閉め忘れることもありますよね。そんなあなた（私）のためのスマートロックを作ってみました。V1と機能面では大した代わりはありませんが、ろくにSlack使っていないのにSlack依存している状態から脱却したかったのと勉強を兼ねて作りました。
V1はこちら
https://qiita.com/akimax74/items/6856e936946fdf2da853

# 使ったもの
### ハードウェア
- Raspberry Pi Zero
- サーボモーター SG92R
- タミヤ　ユニバーサルアームセット
### ソフトウェア
- Python 
- Flask
- ngrok
- SQLAlchemy
# コード
https://github.com/akimax74/SmartLock_v2
# 説明
まずユーザー登録は/add_userに自分が設定しているパスワードと適当なユーザー名を叩くとUUIDを発行します。/lockまたは/unlockにUUIDを載せて叩くと鍵の操作が行えるという簡単な設計です。ngrokは一つだけ無料で固定のURLを発行してくれるので、それを使ってトンネルさせ、外部ネットワークからの操作を受け付けています。これらをデーモンで起動するようにしています。
フロントエンドはどの端末でも操作できるようhtmlで開閉ボタンを実装したのと、V1同様iOS ShortcutからAPI叩くことで実行できます。またユーザー追加・削除は頻繁に誰かを泊めるわけじゃないのでcurl叩いてやるようになっていますが、近いうちに勉強を兼ねってFlutterで適当なアプリを作ってみたいと思ってます。

# アピールポイント
そもそも大学の課題制作から始まったもので、当初から掲げていたのは
- どこからでも鍵の操作ができること
- スマホ1台の操作で済むこと
- 家族友人に鍵をその時だけシェアできること

の３つでした。
うち上２つはクリアしていたのですが、鍵のシェアという点でiOS Shortcutを共有するとずっと操作できてしまうようになっていました（信頼してる人しか泊めないので問題ないけど）。そこで今回はユーザーの追加・削除を簡易的ですが搭載しました。各ユーザーにUUIDを振り、GETリクエストにUUIDを添えることで開閉ができます。ユーザー登録はPOSTリクエストにPWと適当なユーザー名を入力すれば行えます。ngrokを経由することでサーバーを公開することなく外部のネットワークからできるようにしています。

# 改善点
- SQLAlchemyでsession.getを使うとなぜかテーブルが見つからないと言われ渋々query.getを使っている
- ユーザー認証の設計が甘い
- DoS/DDoS食らうと終わる
etc...

セキュリティについてしっかり勉強しましょうという課題が残った。

# 終わりに
まだまだ勉強中で間違ってる内容であったり、もっといいやり方があると思います。お気づきの点がありましたら遠慮なくコメントお願いします。
MarkdownAIをはじめて使ってみたので画像付きで使いごごちをレビューしてみる

## はじめに
Qiita Engineer Festa2024ということで、お題のテーマにあったマークダウンAIを使ってみたので、感想を書いてみようと思います。

## 結論
- シンプルで使いやすい
- AI機能が追加実装されるのが楽しみ
- 無料でサイト公開できるのが嬉しいし、公開までのステップがめちゃ楽だった

## マークダウンAIとは？
「世界で最も簡単なウェブサイト作成プラットフォーム」と書いてありました。
[MarkdownAIの説明ページ](https://mdown.ai/content?id=335b81b2-bcb0-4dbb-83d0-531aa132181f)

確かに実際に使ってみて、記述から公開まですごく楽でした。
ほんの数行とかなら、サービスの登録からWebサイト公開まで数分でできてしまうと思います。

## 実際に使ってみた
### マークダウンでの入力画面
デザインはシンプルで、左側のプラスボタンを押すと新しいファイルが作られました。
右側の四角の中がエディタになっており、マークダウン記法にて記述ができました。
Saveボタンを押すと内容が保存されました。

![入力画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647998/6f9c6f51-3456-8b3c-873e-822b80103b7a.png)

### プレビュー画面
先ほどの画像のViewのボタンを押すと、プレビュー画面に切り替わります。
ワンクリックで手軽にプレビューすることができました。

![プレビュー画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647998/e7c89322-32fd-f4b0-9311-030d63647e7d.png)

### URLの発行
URLというボタンを押すと、キャプチャのようなモーダルが表示されます。
URLが生成されており、CopyLinkでURLをコピーできます。
実際に生成されたURLを叩いて見ると、先ほど作成した画面がブラウザで表示されました！
わーい！

![URLの発行](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647998/ba4cc94b-307c-57e8-e31d-21e99fcefb49.png)

### コードの生成
モーダルのCodeというボタンを押すと、マークダウンで記述した画面のHTMLソースを表示してくれました。
HTMLを勉強している初学者の人とかには、ちょっと嬉しい機能かなと思いました！

![スクリーンショット 2024-06-11 0.42.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647998/94843ee4-efd3-0815-d583-7b32e9d34079.png)

## まとめ
MarkdownAIは、誰でも簡単かつ無料でサイトを作って公開できるサービスでした！

登録もGoogleアカウントがあれば一瞬でした。

サイトを公開したり、ウェブに触れることへのハードルを下げてくれるサービスだなと感じましたし、子供やこれからサイトを公開してみたいという方の、はじめの一歩としておすすめできるなぁと感じました！

今後、便利な機能が色々と追加されるらしいので、楽しみです。

https://mdown.ai/
コマンドは知ってるがどのパッケージに入ってるかワカラン！

almalinuxを最小構成でインストールすると、(当たり前ですが)実行したいコマンドが入っていない事があります。

例えばAlmaLinux9.xをインストールすると、arpやbzgrep,tarなどは入っていません。

ではそのコマンドはどのパッケージをインストールしたら入ってくれるのかを知りたいわけですが、`dnf provides コマンド名`を実行すると教えてくれます。

arpコマンドがどのパッケージに入っているか探してみましょう。

### arpを探す

```bash
dnf provides arp
```

### 実行例
```bash
[root@AL ~]# dnf provides arp
メタデータの期限切れの最終確認: 0:26:21 前の 2024年06月07日 23時13分39秒 に実施しました。
net-tools-2.0-0.62.20160912git.el9.x86_64 : Basic networking tools
Repo        : baseos
一致:
ファイル名    : /usr/sbin/arp
```

net-toolsパッケージに入っている事がわかりました。あとは`dnf install net-tools`でインストールすればいいだけです。
nestjsのvalidation-nullは許容したいけどundefinedは通したくない場合の書き方

```
@FunctionalValidator(v => isString(v) || isNull(v), {
    message: '$property の値が文字列ではありません',
})
```
FunctionalValidatorで毎回チェックしているコードが冗長で気に入らないため調査。

validationでどう書けばいいか迷って結論出たのでメモ。


```
@ValidateIf((o) => o.value !== null) // nullの時はバリデーションをスキップする
@isdefined({ message: '$property が定義されていません' })
```


こうすることで、未定義はブロックしてnullは許容できる

同じような人いたら参考になれば。
【入門者・非専門家向け】AIプロジェクトに関わるにあたって抑えておきたい基礎知識・専門用語集

## プロジェクトの大別
AIプロジェクトは「予算」・「開発にあたって必要なスキル」・「リスクマネジメント」などの視点から、下記の3つに大別することができます。
```
・生成AIツールの活用(ChatGPTなど)
・DeepLearningを用いた開発
・ルールベースAIやDeepLearning以外の機械学習
```

以下、3つそれぞれの特徴や大まかなプロジェクトの大まかな進め方・注意点についてまとめます。


### 生成AIツールの活用(ChatGPTなど)
ChatGPTやGemini、Stable Diffusionなど、昨今は様々の会社から多くのAPIが提供されています。このようなAPIの活用によって、AI導入を行う事例が近年増えています。

#### 特徴
基本的にはWeb画面やAPIを使う、LoRAやプロンプトエンジニアリングによって出力を制御する。

#### プロジェクトの進め方
1. 実際にAPIを試す
2. 試した中から目的に合ったAPIを選定する(利用規約には注意)
3. 業務に導入する(業務内容に合わせて画面だけ作成する場合も含む)

#### 注意点
APIの開発元の都合で使用料金や仕様が大きく変わる場合がある
商用の場合は利用規約を詳しく確認する必要がある


### DeepLearningを用いた開発
近年、DeepLearning周辺の研究が大きな発展を遂げ、様々な場面で活用されるようになりました。主に画像はCNN、言語はTransformerを用いることで汎用的な取り扱いが概ね可能です。

#### 特徴
基本的には学習済みのモデルを元にFinetuningを行うことが多い。規模が大きくなければ一般的なPCでもDeepLearningの学習・活用が可能。

#### プロジェクトの進め方
1. プロジェクトの目的に近いDeepLearningの研究を探す
2. 学習済みモデルが活用できるかを確認し学習を行う(Finetuningの場合が多い)
3. UIの開発、業務フローへの導入

#### 注意点
規模の大きい学習を行う場合は専用のGPUマシンもしくはクラウドの契約が必要。高額になる場合があるので、予算がそれほど大きくない場合は要検討。
一般的なPCで学習が難しい場合、ミニマムの開発費だけで200万以上は用意する必要あり。


### ルールベースAIやDeepLearning以外の機械学習
ルールベースAIはプログラムにおける条件分岐を用いて実現するAIのことを指します。DeepLearning以外の機械学習は表型のデータに適用されることが多いです。

#### 特徴
開発の予算がそれほどかからず、50万程度でもそれなりのものが作成できる。

#### プロジェクトの進め方
1. 目的の設定
2. 手法の選定・学習
3. UIの開発、業務フローへの導入

#### 注意点
手法やツールありきではなく、目的をどのように設定するかなどの上流工程が難しい。



## 専門用語集
### 共通用語
| 用語 | 意味 |
|:-----------|:------------|
| LLM | Large Language Modelの略。ChatGPTもLLMの1つに含まれると理解しておくと良い。 |
| モデル | 入力データと出力の対応を学習させたもの、モデルに新たな入力データを入力すると予測を行うことができる。 |
| LoRA | Low-Rank Adaptationの略。DeepLearningのFinetuning結果の軽量化や、アプリケーション開発時のカスタマイズの軽量化を実現できる技術。 |


### 生成AIツール
| 用語 | 意味 |
|:-----------|:------------|
| ハルシネーション | 生成AIがユーザーの質問に対して現実とは異なる回答を行うこと。 |
| RAG | RAG Retrieval Augmented Generationの略。データベースの検索に基づいてLLMに回答を行わさせること。 |


### DeepLearning
| 用語 | 意味 |
|:-----------|:------------|
| CNN | 畳み込みニューラルネットワーク、画像を取り扱う際は基本的にCNNを用いる。 |
| Transformer | ChatGPTなど、言語を取り扱う際はTransformerが基本的に用いられる。 |
| Finetuning | 学習済みモデルの再学習、学習にかかる計算コストを大きく減らせる。 |
| DeepLearning | 規模の大きなニューラルネットワーク、近年では規模の大きなニューラルネットワークがほとんどなのでDeepLearning＝ニューラルネットワークと見なしてもそれほど問題はない。 |
| GPU | 規模の大きなDeepLearningの学習にあたって用いられる、DeepLearningのプロジェクトの予算が大きくなる場合の要因。マシンを用意する場合・クラウドを活用する場合のどちらもそれなりにお金がかかる。 |
| フレームワーク | DeepLearningのプログラムは一から作ると非常に難解になるので、TensorFlowやPyTorchなどのフレームワークを用いる。ライブラリではなくフレームワークと呼ばれることが多い。 |


### ルールベースAIやDeepLearning以外の機械学習
| 用語 | 意味 |
|:-----------|:------------|
| 決定木  | 機械学習の手法の1つ、tree-basedと表される場合もある。 |
| ベイズ  | 事前知識をデータから得られる結果に反映させる仕組み。 |
| if文 | プログラム言語における条件分岐はif文で表される場合が多い。ルールベースAIは基本的にif文やデータベースの検索によって実現される。 |


### UI開発
| 用語 | 意味 |
|:-----------|:------------|
| サーバ | Webアプリの実行元。Safariなどのブラウザはサーバと通信を行うことで、操作を行うことができる。 |
| API | プログラムを介してアプリケーションを利用する際に使用するインターフェース。 |
| UI | 人間と機械の境目。何かしらの機能を使う際に実行するボタンなどを指す。 |
| Python | プログラム言語の一つ。AI開発ではPythonが用いられることが多い。 |
| HTML/CSS/JavaScript | WebサイトはHTML・CSS・JavaScriptを元に記述される。画面の開発を行う際はこれらのスキルが必要。|
| ブラウザ | Safari・Chromeなどをブラウザという。 |
LaravelとEnum

# はじめに
PHPでEnumが使えるようになって久しいですが、LaravelはEnumをどこまでサポートしているのか気になったので調べてみました。
※調べたLaravelのバージョンは11です
※この記事ではEnumについては解説していません

# Routing
ルート定義のルートセグメントの値にEnumの値が含まれていた場合のみルートを呼び出すことができます。

```php
use App\Enums\Fruits;
use Illuminate\Support\Facades\Route;

Route::get('/fruits/{fruits}', function (Fruits $fruits) {
    return $fruits->value;
});
```
ルートセグメント「{fruits}」が、Enumの値に含まれていないものだった場合は404のHTTPレスポンスを返します。


# Validation
ValidationのルールのEnumは対象フィールドの値にEnumの値が含まれるかを検証します。

```php
use App\Enums\Fruits;
use Illuminate\Validation\Rule;

$request->validate([
    'fruits' => [Rule::enum(Fruits::class)],
]);
```

メソッド「only」または「except」でケースを制限することができます。
```php
Rule::enum(Fruits::class)
    ->only([Fruits::Apple, Fruits::Banana]);

Rule::enum(Fruits::class)
    ->except([Fruits::Lemon, Fruits::Orange]);
```

メソッド「when」で条件によってケースを切り替えることができます。
```php
Rule::enum(Fruits::class)
    ->when(
        now()->isSunday(),
        fn ($rule) => $rule->only([Fruits::Apple, Fruits::Banana]),
        fn ($rule) => $rule->only([Fruits::Lemon, Fruits::Orange]),
    );
```

# Request
Requestから取得する値をEnumとして取得することができます。

```php
use App\Enums\Fruits;

$fruits = $request->enum('fruits', Fruits::class);
```
Enumの値ではなかった場合は「null」が返ります。

# Cast
モデルのメソッド「casts」で属性とEnumを指定することで、任意の属性をキャストできるようになります。
```php
use App\Enums\Fruits;

/**
 * キャストする属性の取得
 *
 * @return array<string, string>
 */
protected function casts(): array
{
    return [
        'fruits' => Fruits::class,
    ];
}
```

# さいごに
LaravelでEnumをサポートしている箇所が思っていたよりもあったので、今後使う機会があれば使っていこうと思いました。
repo init 、repo syncを使ってみる

# やりたいこと
* repo init 、repo syncを使用して、Git Hubに載せている複数のリポジトリを一括取得したい。（今回は2つのリポジトリを取得）

# 準備
とりあえずリポジトリを3つ作ってみる。

#### 取得するリポジトリ①
* test_repo_1  
![スクリーンショット 2024-06-10 021707.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802889/96abc429-90e8-312d-700e-b09ae4666bcb.png)

#### 取得するリポジトリ②
* test_repo_2  
![スクリーンショット 2024-06-10 021946.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802889/783bcab0-a687-288f-2c63-e9cca87c8b71.png)

#### リポジトリ③（マニフェストファイルを格納）
manifestというリポジトリを作成し、マニフェストファイル（manifest.xml）を格納。
```xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch="https://github.com/" name="github"/>
  <project path="test_repo/test_repo_1" name="my_account/test_repo_1"  remote="github" revision="main"/>
  <project path="test_repo/test_repo_2" name="my_account/test_repo_2"  remote="github" revision="main"/>
</manifest>
```
"remote"でgithubを指定、
"project"で取得するリポジトリを指定しています。

# リポジトリ取得
repo init / sync のオプションは公式ドキュメントを参考にしました。

https://source.android.com/docs/setup/create/repo?hl=ja

### repo init
```
repo init -b main -u https://github.com/my_account/manifest.git -m manifest.xml
```
repoの初期化コマンド。実行した階層に.repoディレクトリを作成する。

### repo sync
```
repo sync -c -q
```
.repoが作成されたディレクトリで実行する。
manifest.xml内で指定したリポジトリを一括取得する。

### 実行結果

```
----------------------------------------------------
$ ls -la
total 16
drwxr-xr-x 4 user user 4096 Jun 10 02:02 .
drwxr-xr-x 6 user user 4096 Jun 10 01:59 ..
drwxr-xr-x 7 user user 4096 Jun 10 02:01 .repo
drwxr-xr-x 4 user user 4096 Jun 10 02:02 test_repo
----------------------------------------------------
$ tree
.
└── test_repo
    ├── test_repo_1
    │   ├── bar.txt
    │   └── foo.txt
    └── test_repo_2
        ├── hoge.txt
        └── test.txt

3 directories, 4 files
----------------------------------------------------
```

"test_repo"ディレクトリが作成され、"test_repo_1","test_repo_2"リポジトリが一括で取得できた。
DockerでGo言語の開発環境構築

# はじめに
現在python、djangoでのwebアプリ開発をしているのですが
ちょっとした気分転換に前から興味があったdocker、goについて
環境構築をしていこうと思います。

# １．Windows＋WSL2上でDockerを使えるようにする手順
## WSLとは
WSLとは「Windows Subsystem for Linux」の略で、言葉の通りwindowsのサブシステムとしてlinuxを使用できるようにするためのシステムです。
WSLをインストールすることでWindows上でLinuxを利用できるようになります。

## Dockerとは
1つのサーバで複数のアプリケーションを仮想化できるプラットフォームです。
簡単に言えばコンテナごとに環境がつくれて、その環境を他の人と共有することができるサービスです。
コンテナとは部屋のようなもので、部屋ごとにjavaやらpythonやらの環境をつくりその部屋をルームシェアできるよということです。一人ずつ環境をつくるとうまく動かない場合があるので、環境を共有できると便利だよねって感じ。

## 構築手順
構築手順は以下の記事を参考

https://www.kagoya.jp/howto/cloud/container/wsl2_docker/

これでDockerが使えるようになりました。

# ２．Go言語のインストール
Go言語のインストールは下記記事を参考

https://qiita.com/ryome/items/8bc5d7c8cd51a351d016

# ３．DockerでGo言語の開発環境構築
以下記事参考

https://qiita.com/tkms13/items/74a9ea4b41302323c4b1

これでDockerでGo言語の開発環境構築は完了。
一人で使ってもありがたみがわからないので実務で使ってみたいですね。

# その他
Githubにソースコードを公開しております。

https://github.com/syakesoba/go_docker_app

また気が向いたらGo言語での開発も進めていきたいと思います。
Windows10サポート終了後の対策１

# Linuxをインストールしよう
対策の最も有力な方法としては、Linuxをインストールする。
やはりディストリビューションはUbuntuが使いやすさやドライバの豊富さから見て良い。

# Linuxで何ができる？
まずは、ブラウザをGoogleChromeやEdgeを乗せると・・・
１．当然、インターネットの閲覧ができる。
２．マイクロソフトIDがあれば、Office Onlineが使える
（Office OnlineではWordやExcelをオンラインで使ってOneDriveに保存ができる)

これだけ使えれば、一般的なPCとして使えますね！！
最近では、Edgeからはコパイロット（ChatGPT）が使え、ChromeからはGeminiという自然言語型のAIも使えます。

# SambaでNASを作る
Sambaというプログラムを入れて設定すると、NASとして使うことができる。

# 開発環境として使う
Linuxは開発環境としては完璧でgccでC/C++やFortranによる開発や、Linux版のC#も入手可能です。

更にGUIを開発するためのQt、Tcl/tk、Gambase等の様々なGUI開発ツールも揃っています。
もちろんHTTPサーバーとしてApacheやNginX＋PHPで開発することもできるし、サーバーレス環境としては、PythonやNodeJSも使えます。

AsteriskというソフトウエアではIP-PBX(電話交換機）として使うことも可能です。

# 仮想環境を構築する
また、VirtualBoxを使えば、色んなOSの仮想環境をくることもできます。

このように、スキルアップにはもってこいの環境です。
Nuxt.js初心者が条件付きレンダリングを解説してみた


## はじめに
Nuxt.jsは、シンプルで使いやすいフロントエンドフレームワークです。Nuxt.jsを使うと、動的なWebアプリケーションを簡単に構築できます。この記事では、Nuxt.jsでの条件付きレンダリングについて、サンプルコードを使いながら初心者にも分かりやすく解説します。

## 条件付きレンダリングとは？
条件付きレンダリングとは、特定の条件に基づいてDOM要素を表示したり非表示にしたりすることです。v-if、v-else-if、v-else、およびv-showディレクティブを使用して、条件付きレンダリングを簡単に実現できます。

## Nuxt.js の条件付きレンダリング
Nuxt.jsは、Vue.jsのフレームワークで、サーバーサイドレンダリングや静的サイト生成を簡単に行うためのツールです。Nuxt.jsでも、条件付きレンダリングは基本的に同じ方法で行います。

### サンプルコード
Nuxt.jsプロジェクトでの条件付きレンダリングの例を見てみましょう。以下は、Nuxt.jsのページコンポーネントで条件付きレンダリングを行う例です
```bash:
npx create-nuxt-app my-nuxt-app
cd my-nuxt-app
npm run dev
```

```vue:pages/index.vue
<template>
  <div>
    <p v-if="isLoggedIn">Welcome, User!</p>
    <p v-else>Please log in.</p>
    <button @click="toggleLogin">Toggle Login State</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isLoggedIn: false
    }
  },
  methods: {
    toggleLogin() {
      this.isLoggedIn = !this.isLoggedIn;
    }
  }
}
</script>

<style scoped>
button {
  margin-top: 10px;
}
</style>

```

### 解説
- v-ifとv-elseディレクティブを使ってメッセージの表示を制御しています。
- toggleLoginメソッドは、ボタンをクリックすることでisLoggedInの値を切り替えます。

## まとめ
Nuxt.jsでの条件付きレンダリングは、v-if、v-else-if、v-else、およびv-showディレクティブを使うことで簡単に実装できます。これらのディレクティブを使用することで、ユーザーの状態やアプリケーションの状態に応じて動的にコンテンツを表示することが可能です。ぜひ、これらの方法を試して、動的なWebアプリケーションを構築してみてください。

## 参考
- [Nuxt.js Official Documentation](https://nuxt.com/docs/getting-started/introduction)

- [MDN Web Docs: Vue.js](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_getting_started)
AWS SES入門：簡潔に理解するクラウドコンピューティングの基礎

# Amazon SESとは　:beginner:
Amazon SES（Amazon Simple Email Service）は、開発者が任意のアプリケーションからメールを送受信できる、コスト効率が高く、柔軟でスケーラブルなメールサービスです。SESは、大量メール送信やトランザクションメッセージング向けに設計されており、インフラ管理からメール配信までのすべてを処理します。

<img width="25%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3690843/9524fed5-b867-d1b5-d622-afd1f406d177.jpeg">

## 【Amazon SESの特徴】
柔軟な送信オプション: SMTPインターフェースまたはAWS SDKを介してメールを送信できます。
スケーラブルなインフラストラクチャ: 大量のメールトラフィックを処理するために自動的にスケールします。
レピュテーション管理: メール配信を監視し、良好な送信者レピュテーションを維持するためのツールを提供します。
コンプライアンス: バウンスや苦情を自動的に処理することで、CAN-SPAMやGDPRなどの規制に準拠するのを助けます。
## 【利点と制約】
メリット: コスト効率が高く、統合が容易で、高いスケーラビリティを持ち、詳細な分析および配信レポートを提供します。
デメリット: 配信の設定と適切な構成が必要で、メール送信規制への準拠が求められます。
## 【開発者へのメリット】
Amazon SESを使用することで、開発者はメール配信インフラの複雑さを気にせず、アプリケーションの構築に集中できます。SESはメールリストの管理、バウンスの処理、メールパフォーマンスの追跡などの機能を提供し、良好な送信者レピュテーションを維持するのを容易にします。

## 【メールの送信方法】
AWSマネジメントコンソール、AWS CLI、またはAWS SDKを使用してメールを送信できます。以下は基本的な手順です：

メールアドレスまたはドメインの確認: メールを送信する前に、所有するメールアドレスまたはドメインを確認します。
メールテンプレートの作成: オプションで、メールコンテンツを標準化するためのテンプレートを作成します。
メールの送信: AWSマネジメントコンソール、AWS CLI、またはAWS SDKを使用してメールを送信します。
## 【レピュテーション管理とモニタリング】
レピュテーションダッシュボード: バウンス率や苦情率を含む送信実践に関する洞察を提供します。
構成セット: メールを追跡し、送信に関連するメトリクスを提供します。
専用IPアドレス: 専用の送信に利用でき、送信者レピュテーションの管理がしやすくなります。
## 【セキュリティとコンプライアンス】
DKIMおよびSPF: SESは、ドメインキー識別メール（DKIM）および送信者ポリシーフレームワーク（SPF）をサポートしており、なりすましを防止します。
TLS暗号化: メールが安全に送信されるようにTLS暗号化をサポートします。
## 【料金】
従量課金制: 送信および受信したメールの数に基づいて料金が請求され、前払い費用や最低料金はありません。
## 【まとめ】
Amazon SESは、アプリケーション内でメールを送受信するプロセスを簡素化する多用途で強力なメールサービスです。そのスケーラビリティ、コスト効率、包括的なレピュテーション管理ツールにより、トランザクションおよび大量メールキャンペーンの両方に理想的な選択肢となります。

最後に
何か間違いがございましたらご指摘お願いいたします。閲覧いただきありがとうございました。

# 【参考】
https://aws.amazon.com/jp/ses/
Diver OSINT CTF Writup 解いたやつだけ

DiverOSINT CTFに参加しました。
結果は26th placeでした。
解いた問題のwriteupを簡単においておきます![2024-06-10 11.22.55 ctfd.diverctf.org 9f0a5e705aaf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636992/b3b5cd30-0e3d-239f-677c-e15459c6d21c.png)


# misc
## number
車の映った写真が渡される
ナンバープレートを拡大すると`外`と書いてあるように見える
これは外交官ナンバーと呼ばれ、治外法権が認められる外交官や大使館の職員が使用する車に付く
[外交官車両ナンバー 一覧表つくってみたよ。外ナンバー、青ナンバー(ブルーナンバー)](https://warmheart0159.hatenablog.com/entry/2017/06/06/162406)
以上のブログによれば`49`はクウェートのナンバーであるとされる
クウェート大使館の電話番号がフラグになっていた

## label
破られた配送標の画像が渡される
![label.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636992/f344056c-c8b7-9a31-f8f1-66fb328297a4.png)

写真下部の横長のコードを読み取ると配送先が読み取れた。
住所から郵便番号を割り出したものがフラグ
Baba-cho 14-1, Tsuruoka City, Yamagata, Japan postal code

## wumpus
終了後に解けたけど一応載せておく
discordの画面が映った写真が渡される
映っているurlをもとに`channel`の部分を`server`に帰るとサーバーに参加できる
置いてあるQRコードからフラグを得ることができる

## timestamp
幕僚のツイートが渡される。
チームメイトが、ツイートの写真が載っている報告書の原本をpdfで発見
発見されたpdfから画像を抽出すると、"航空自衛隊撮影"というラベルの下に撮影日時が書いてあった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636992/85ba40d9-08d2-8300-2281-fa45b8e7a0f5.png)


# geo
## imagetrack
exif情報に書いてある画像から特定 

## chiban
写真から以下の順番で場所を特定 

サンディ　7号店
サンディ双葉店
大阪府茨木市双葉町１６−５

最終的には以下のサイトで地番を特定 
[地番検索くん](https://chiban-kensaku.com/)
筆界未定地-6
## power
写真が渡される。
![power.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636992/f740e887-df57-774b-cef6-9cafa1729ae4.jpeg)

左奥に映っている電車を特定する。
サンダーバードというらしい
路線を特定
https://10map.net
このサイトを使って、指定路線のそばに鉄塔が立っているかつ市街地なところを探す

発見
[Street View](https://www.google.co.jp/maps/@34.9626473,135.7100332,3a,75y,176.77h,99.88t/data=!3m7!1e1!3m5!1sMPJ931WikB3r2dy3erdbLA!2e0!6shttps:%2F%2Fstreetviewpixels-pa.googleapis.com%2Fv1%2Fthumbnail%3Fpanoid%3DMPJ931WikB3r2dy3erdbLA%26cb_client%3Dmaps_sv.share%26w%3D900%26h%3D600%26yaw%3D176.77461675425204%26pitch%3D-9.875312452851773%26thumbfov%3D90!7i16384!8i8192?hl=ja&coh=205410&entry=ttu)

鉄塔の運用許容値を調べる
https://www.renewable-ei.org/statistics/offshoremap/?page=jp
![2024-06-09 04.51.29 www.renewable-ei.org 16529cf4fcd2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636992/50f98654-c2a1-c766-8dff-79fc6b062778.png)

答えは84
# transportation
## youtuber
https://www.sanspo.com/article/20231114-W5ZGMN6BBBMJLIXJR7IBB5S2WI/
以上の報道から駅を特定

削除済された動画のコピーから新幹線を特定
572A

# Military
## Osprey1
https://aviation-safety.net/wikibase/348462
以上のサイトからコールサインと登録番号を特定

# おわりに
以上です。楽しいCTFでした。ありがとうございました。
LeetCode挑戦日記：Day4

# はじめに

最近、業務で実装する時間よりも資料作成やレビューをする時間が多くなってきました。
このままでは自身のコーディング能力が落ちそうで怖いので、LeetCodeを始めてみました。

自身の学習の記録 & LeetCodeに興味のある人が挑戦しやすいように、記事に残していきます。
このような競技プログラミングをした経験がないので、ひよってEasyからやっていきます...

# [Easy] 345. Reverse Vowels of a String

インプット：文字列
アウトプット：文字列

インプットの文字列の内、母音を逆順にした文字列をアウトプットとして返す。

## 素直に解いてみる

### 考え方

0. インプットの文字列から母音の位置と文字を取得する
0. インプットの文字列の母音を逆順に取得した文字で上書きする

### コーディング

```typescript
function reverseVowels(s: string): string {
    const chars = s.split("");
    const vowels = [];
    const vowelIndexes = [];
    chars.forEach((c, index) => {
        if (
            (c === 'a') || (c === 'e') || (c === 'i') || (c === 'o') || (c === 'u') ||
            (c === 'A') || (c === 'E') || (c === 'I') || (c === 'O') || (c === 'U')
        ) {
            vowels.push(c);
            vowelIndexes.unshift(index);
        }
    });

    vowelIndexes.forEach((vowelIndex, index) => {
        chars[vowelIndex] = vowels[index];
    });

    return chars.join("");
};
```

### 結果

Runtime：155ms
Beats 12.25% of users with TypeScript

Memory：55.26MB
Beats 93.16% of users with TypeScript

## 改善してみる1

### 考え方

`vowelIndexes.forEach(...);`のループ回数を削減してみる。

### コーディング

```typescript
function reverseVowels(s: string): string {
    const chars = s.split("");
    const vowelIndexes = [];
    chars.forEach((c, index) => {
        if (
            (c === 'a') || (c === 'e') || (c === 'i') || (c === 'o') || (c === 'u') ||
            (c === 'A') || (c === 'E') || (c === 'I') || (c === 'O') || (c === 'U')
        ) {
            vowelIndexes.unshift(index);
        }
    });

    const vowelNumber = vowelIndexes.length;
    for (let i = 0; i < (vowelNumber / 2); i++) {
        const tmp = chars[vowelIndexes[i]];
        chars[vowelIndexes[i]] = chars[vowelIndexes[vowelNumber - 1 - i]];
        chars[vowelIndexes[vowelNumber - 1 - i]] = tmp;
    }

    return chars.join("");
};
```

### 結果

Runtime：125ms
Beats 16.89% of users with TypeScript

Memory：56.12MB
Beats 62.16% of users with TypeScript
なぜかモチベーションが上がらない方へ 学習性無力感

失敗が続いた時にオススメな考え方

https://mitsucari.com/blog/c_learned_helplessness_overcome/

https://s-counseling.com/learned-helplessness/

コントロールできること、できないことを見誤ってはならぬ。

コントロール不可能なものへの挑戦であれば、行動そのものに価値あり。自らを讃え、新たなる挑戦に目を向けよ。

コントロール可能なものへの挑戦であれば、タスクを分解し、スモールステップでゴールを再設定せよ。
AWS RDS for MySQL入門：簡潔に理解するクラウドコンピューティングの基礎

# Amazon RDS for MySQLとは　:beginner:
Amazon RDS for MySQLは、AWSが提供するリレーショナルデータベースサービスの一部で、MySQLデータベースを管理するための機能を提供します。これにより、物理的なデータベースのセットアップやメンテナンスの手間を大幅に軽減し、スケーラブルで高可用性なMySQLデータベース環境を迅速に利用開始できます。

<img width="25%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3690843/c10eba0b-ca3d-47a1-2390-e778708a1ae7.png">

#  【Amazon RDS for MySQLの特徴】
簡単なセットアップ: AWSマネジメントコンソール、AWS CLI、またはAWS SDKを使用して数分でデプロイ可能。
高可用性と耐障害性: マルチAZ配置により、データベースの可用性と耐障害性を確保。障害時には自動的にフェイルオーバーが実行されます。
スケーラビリティ: CPU、メモリ、ストレージを容易にスケールアップ・スケールダウン可能。
自動バックアップ: 自動バックアップ、手動スナップショット、およびポイントインタイムリストア機能を提供。
セキュリティ: VPC、IAM、KMSなどのAWSサービスを使用して、データを保護。
## 【利点と制約】
メリット: データベースの迅速なデプロイメント、高可用性、スケーラビリティ、セキュリティが強化されており、運用管理の負担を軽減します。
デメリット: 特定のカスタマイズや設定には制約があり、オンプレミスのデータベース環境と比較して一部の機能に制限がある場合があります。
## 【開発者へのメリット】
Amazon RDS for MySQLを使用することで、開発者はデータベースのインフラ管理をAWSに委託し、アプリケーション開発に専念できます。また、自動バックアップやリストア機能により、データの保護と復旧が容易になります。
## 【インスタンスの起動方法】
Amazon RDS for MySQLインスタンスは、AWSマネジメントコンソール、AWS CLI、またはAWS SDKを使用して起動できます。起動時にはMySQLバージョン、インスタンスタイプ、ストレージオプションを選択し、セキュリティグループを設定します。
## 【データベースエンジンとインスタンスタイプ】
データベースエンジン: MySQLの複数バージョン（5.6、5.7、8.0など）に対応。
インスタンスタイプ: アプリケーションの要件に応じて選択。汎用、コンピューティング最適化、メモリ最適化などがあります。
##【ストレージとバックアップ】
ストレージオプション: 汎用SSD、プロビジョンドIOPS SSD、マグネティックストレージの選択が可能。
バックアップ: 自動バックアップ、手動スナップショット、ポイントインタイムリストア機能を提供。
# 【まとめ】
Amazon RDS for MySQLは、その簡便さ、高可用性、スケーラビリティにより、クラウドベースのMySQLデータベース管理において重要な役割を果たしています。開発者はRDS for MySQLを活用することで、データベース管理の負担を減らし、アプリケーション開発により多くの時間を割くことができます。

最後に
何か間違いがございましたらご指摘お願いいたします。閲覧いただきありがとうございました。

# 【参考】
https://aws.amazon.com/jp/rds/mysql/
CSSの'pre-line'と'pre-wrap'の違いを解説

## はじめに
CSSには、テキストの改行方法を制御するための white-space プロパティがあります。このプロパティの値にはいくつかのオプションがあり、その中でも pre-line と pre-wrap は混同しやすいなぁと個人的に感じたため、この記事では、これらの違いをサンプルコードを使って分かりやすく解説したいと思います。

## white-space プロパティの基本
まず、white-space プロパティは、要素内のテキストの改行や空白の扱いを指定します。以下に、代表的な値とその動作を示します：

- normal: 空白や改行文字を無視し、テキストは通常通りに折り返されます。
- pre: テキストは折り返されず、空白や改行文字がそのまま表示されます。
- nowrap: テキストは折り返されません。
- pre-wrap: 空白や改行文字を保持しつつ、テキストが必要に応じて折り返されます。
- pre-line: 連続する空白文字を一つにまとめ、改行文字は保持しますが、必要に応じてテキストが折り返されます。

## pre-line の説明とサンプルコード
### 説明
pre-line は、テキスト内の改行文字（\n）を保持しますが、連続する空白文字（スペース）は一つにまとめます。また、必要に応じてテキストが折り返されます。

### サンプルコード
```html:pre-line.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>pre-lineサンプル</title>
    <style>
        .pre-line {
            white-space: pre-line;
            border: 1px solid #000;
            padding: 10px;
            width: 200px;
        }
    </style>
</head>
<body>
    <div class="pre-line">
        This is a    sample text.
        It includes     multiple spaces
        and some line breaks.
    </div>
</body>
</html>
```

### 結果
上記のコードをブラウザで表示すると、次のようになりました。

![pre-line.htmlをブラウザで表示.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647998/492a5b0d-38ca-8e46-598b-d42c7b73b489.png)


pre-line を使用すると、テキスト内の改行はそのまま表示されますが、連続する空白は一つにまとめられます。

## pre-wrap の説明とサンプルコード
### 説明
pre-wrap は、空白文字や改行文字をそのまま保持します。また、必要に応じてテキストが折り返されます。

### サンプルコード
```html:pre-wrap.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>pre-wrapサンプル</title>
    <style>
        .pre-wrap {
            white-space: pre-wrap;
            border: 1px solid #000;
            padding: 10px;
            width: 200px;
        }
    </style>
</head>
<body>
    <div class="pre-wrap">
        This is a    sample text.
        It includes     multiple spaces
        and some line breaks.
    </div>
</body>
</html>
```

### 結果
上記のコードをブラウザで表示すると、次のようになりました。

![pre-wrap.htmlをブラウザで表示.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647998/02153486-f905-6482-3c83-04c9eda08be3.png)


pre-wrap を使用すると、テキスト内の空白と改行がそのまま保持されます。

## まとめ
簡単にまとめると、pre-line と pre-wrap の違いは以下の通りです。

- pre-line: 改行文字は保持するが、連続する空白は一つにまとめる。必要に応じて折り返される。
- pre-wrap: 空白文字も改行文字もそのまま保持する。必要に応じて折り返される。

これらの違いを理解することで、テキストの表示方法をより細かく制御することができます。

## 参考
- [MDN Web Docs: white-space](https://developer.mozilla.org/ja/docs/Web/CSS/white-space)
- [W3C: CSS Text Module Level 3](https://www.w3.org/TR/css-text-3/#white-space-property)
はじめての投稿　～拝啓　年末の君へ～

エンジニアに異業種転職して1年が経ちました。
転職直後、「Qiitaに技術記事を投稿して技術力を上げていくぞ！」と
意気込んでいたにも関わらず、あれよあれよという間に2年目に突入していました。

Qiita Engineer Festa 2024に参加して、
これから投稿頑張ってみます。

年末には、成長していますように！
PDFからExcelへ： ビジネスにおけるデータ分析の簡素化

![unnamed.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813031/eaa33218-2de8-4d2a-adee-6b5d40709615.jpeg)


PDFにあるデータを一発でExcelへ落とし込む方法はあります。PDFは幅広いシーンで使える形式ですが、データの管理にはエクセルが優れています。

以下では実際にPDFをエクセルに変換する方法を3つ紹介しています。

PDFをエクセルに変換する3つの方法：
付属アプリ
オンライン変換ツール
変換用ソフトウェア

付属アプリ
付属アプリは機器を購入したときから無料でついているアプリのことです。

WindowsではPDFをエクセルに変換する付属アプリはありませんが、Apple社のパソコン、Macにはあります。

Macでは以下の方法でPDFをエクセルに変換できます。

付属アプリを使う方法：
PreviewアプリでPDFを開く
データをNumbersアプリにコピー＆ペーストする
Numbersアプリで少し修正し、Excel形式でエクスポートする

メリットは、パソコン内にあるアプリだけで変換できる点です。

そのためツールを探す手間が省けますし、変換している最中にデータが抜き取られる心配もありません。

デメリットは、2つのアプリを開く必要があるので、少し手間がある点です。またNumbersにコピペした後、修正が必要です。

そのため急いでいるときにMacの付属アプリを使うと、ケアレスミスが起こりえます。

パソコンの調子が悪く、いずれかのアプリがうまく作動しないこともあり得るでしょう。使えなかったときの対策を考えておくことが必須です。

またWindowsは、機器内のアプリで変換できません。そのため以下の2つのいずれかで変換することが必要になります。

メリット：
機器ひとつで変換できる
データが抜き取られる心配がない
変換するツールを探す手間が省ける

デメリット：
手間がかかる
パソコンが壊れるとアプリが使えなくなる
Windowsにはない

オンライン変換ツール
オンライン変換ツールは、オンライン上で使えるPDFをエクセルに変換するツールです - https://pdfguru.com/ja/pdf-to-excel 

ネット接続と変換したいPDFファイルさえあれば、誰でも感覚的に使えます。

利用方法は以下のとおりです。

オンライン変換ツールを使う方法：
オンラインツールのページを開く
PDFファイルをドラッグ＆ドロップ、または選択して読み込む
数秒待つと変換

メリットは、ダウンロードが必要ないので機器の容量を取らない点です。変換されたファイルはツール上に保存され、いつでも簡単にファイルをダウンロードできます。

またファイルを取り入れるだけ変換できるため簡単です。どんな機器でも使えるので、使い勝手がいいのも魅力になります。

デメリットは、Wi-FIがないとツールを使えない点です。ネット接続が不安定な建物の地下や地方では、わずらわしく感じるかもしれません。

また信頼できるツールを一から探すのに時間がかかります。ネット上には多くのオンライン変換ツールがあるからです。

レビューや口コミなどを元に自分にあったツールを選んでください。

メリット：
容量を取らない
簡単に保存したファイルをダウンロードできる
簡単

デメリット：
ネット接続が悪いと使えない
信頼できるツールを探す手間がある

変換用ソフトウェア
変換用ソフトウェアは、パソコン等で購入してダウンロードすると、いつでもPDFをエクセルに変換することができるソフトウェアです。

MacやWindowsでも使えるので、違うブランドの機器を持っていても使えます。

使いかたは以下のとおりです：
変換用ソフトウェアを開く
PDFファイルを選択して読み込む
数秒待つと変換

メリットは普段からたくさん変換する人にとって、簡単なうえ、Wi-Fiがなくても使えます。

パソコンが壊れても、アプリストアやウェブサイトのアカウントがあれば、履歴をたどって再ダウンロードすることが可能です。

デメリットのひとつは機器の容量を取る点です。保存するファイルは増えるほど、容量は増えていきます。

また価格も高額であることが多く、使う回数が少ない人はコストが高いと感じるでしょう。

また一度にインストールできる機器の個数が制限されている場合もあり、使えない機器も出てきます。

メリット：
Wi-Fiがなくても使える
簡単に変換できる

デメリット：
容量を取る
高額なことが多い
インストールできる機器の個数が制限されている可能性がある

PDFからエクセルへ変換して効率化しよう
PDFからエクセルへ変換する方法はいろいろとあります。Macを使っており、Wi-Fiがない状態であれば付属アプリがオススメです。

普段から多くのファイルをPDFから変換してエクセルにするのであれば、変換用ソフトウェアを推奨します。

ただしいずれの方法でもなく、Wi-Fiがあればオンライン変換ツールを使うのがオススメです。

ツール・ソフトウェアを活用して、普段の作業を効率よく進めましょう。
LINE  URLスキームによる位置情報送信

LINEで位置情報を送信する際はAPIなどは使わずURLスキームにて送信することができます。
https://line.me/R/nv/location/
上記のアドレスをLINEのリッチメニューやメッセージに入れ、
LINEアプリ内でアドレスをタップするだけで、位置情報が送信できる地図が立ち上がります。

https://developers.line.biz/ja/docs/line-login/using-line-url-scheme/#sending-the-location-screen


受信側ではどのように受信したらよいのか、、、
ということで、GASで作成してみました。

```javascript:GAS
function doPost(request) {
  var SS = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SS.getSheetByName("map");
  var receiveJSON = JSON.parse(request.postData.contents);
  var event = receiveJSON.events[0];

  var latitude = event.message.latitude;
  var longitude = event.message.longitude;
  var address = event.message.address;
  var mapplot = "https://www.google.com/maps?q=" + latitude + "," + longitude;
  
  sheet.appendRow([latitude, longitude,address,mapplot]);

}
```

mapplotはGoogleMAPのリンクを記載してくれるようにしております。

これでLINEから位置情報を送信し
webhookを受信すると

```json:json
{
  "mode": "active",
  "timestamp": 1.718031718436E12,
  "webhookEventId": "01J01AQ6GMER4VXTD0YM*******",
  "source": {
    "type": "user",
    "userId": "U531f676aa92b456bde7de*******"
  },
  "type": "message",
  "deliveryContext": {
    "isRedelivery": false
  },
  "replyToken": "ca5c1ccbcafb4e2386bbb543*******",
  "message": {
    "type": "location",
    "id": 512041327501246963,
    "longitude": 135.496570430696,
    "address": "日本、〒530-0001 大阪府大阪市北区梅田３丁目１−１ 大阪ターミナルビル(サウスゲートビルディング)",
    "latitude": 34.7020546166979
  }
}


```
のように、緯度経度だけでなく、住所も送信してくれています。

地図を使ったWEBアプリなど作成の際にご利用ください！
iframeの反乱

# はじめに
私の参画している現場の使用でiframeを通して、別ドメインのwebアプリを開きlocalstrageからとあるデータを取得する必要があり、実装を黙々と進めていました。
その時に私がiframeからお叱りを受けたので、そちらを備忘用として記しておきます。

# TL;DR
iframeから別ドメインのlocalstorageにはアクセスできない

# 概要
Aシステム、Bシステムという2つのシステムがあり、とある機能を実装するためAからBの画面をiframeで呼び出す必要がありました。iframeからBのlocalstorageにアクセスし、必要な情報を取得してAに渡すという魂胆です。
![スクリーンショット 2024-06-10 13.07.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1693783/b0415e93-8d9b-7172-9af5-b271d1460f81.png)

```js
function sendDataToParent() {
  // Bシステムから取得
  const data = localStorage.getItem('info');
  if (data) {
    // 親コンポーネントにlocalstorageから取得したデータを送信
    window.parent.postMessage(data, '*');
  } else {
    console.error('No data found in localStorage');
  }
}
```

仕様作成者と私は、iframeからBのlocalstorageにアクセスして情報を取得できることに何の疑いはありませんでした。実装は着々と進み、ローカル環境でのテストは無事終了。

開発環境で結合テストを行おうとした時、反乱は起きました。

"iframeから指定した情報が取得できていない"

私は iframeで開くURLを間違っていないか、B側で必要な情報をlocalstorageに保存できていなかなど様々な検証を行いましたが、何をやってもダメでした。

泣く泣くググったころ、2023年7月ごろにリリースされたChromeの仕様により、iframeから別ドメインのlocalstorageにアクセスすることはできないということが分かりました。

Storage Access APIなどパーティショニングされていない状態で別ドメインのlocalstorageを扱える代替策もありましたが、トライアル期間ということで取り入れることはやめました。

# 代替策
結局はiframeからは呼び出せないため、ページ遷移をして取得することにしました。
Chromeのみなら別の方法もありましたが、SafariやFirefoxなどの対応も必要と考えたところ、遷移させるのがベストではないかという結論に至りました。

更に方法がないかを模索していきます。


# 参考
https://developers.google.com/privacy-sandbox/3pcd/storage-partitioning
https://developers.google.com/privacy-sandbox/blog/saa-non-cookie-storage?hl=ja
【VSCode】一つのキーバインドに複数のコマンドを設定する方法（拡張機能なし）

`runCommands`を使用すると1つのキーバインドに複数のコマンドを設定できます。

`keybindings.json` に以下のように記述した場合、 `cmd + e` を押下するとエディターにフォーカスして、プライマリサイドバーおよびパネルが閉じます。

```json:keybindings.json
{

  {
    "key": "cmd+e",
    "command": "runCommands",
    "args": {
      "commands": [
        "workbench.action.focusActiveEditorGroup",
        "workbench.action.closeSidebar",
        "workbench.action.closePanel"
      ]
    }
  }
  
}
```


## 公式ドキュメント

https://code.visualstudio.com/docs/getstarted/keybindings#_running-multiple-commands
Datadogコスト削減その一：Indexからログを排除

## TL;DL
[Index](https://app.datadoghq.com/logs/pipelines/indexes)から不要なログを排除してコスト削減する。

## 油断すると倒産になるかもしれない
従量課金って一見ファアーだが、想定外のコストも発生しやすい。クラウド時代になってから、とんでもない金額のインボイスがくるという惨事がよく耳にするではないか。DataDogもそう。

## Indexed Logから不要なログを洗い出す

どんなログが不要か場合によってそれぞれだけど、参考として

- Health Checkログ
- DataDog自身のインフォログ
- DNS解析など
- アプリに転送したNGINXの200成功ログ

などなどが考えられる。

## Index Filterで除外する

Filterを追加し、Indexから除外できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73297/9164447b-0fd7-f37a-8b14-98a9ed83be70.png)
QEMUによるAArch64エミュレート #1

QEMU User Emulator(qemu-user-static)を使うことで簡単にエミュレート環境を作成できる。
ここでは、x86_64のUbuntuでaarch64のエミュレート環境の構築を試した。

### 環境
CPU: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
OS: Ubuntu 22.04

### ホストの設定

QEMUの設定のため、```qemu-user-static```をインストール。

```bash
$ sudo apt install qemu-user-static
```

```qemu-aarch64```がenableとなっている。

```bash
$ cat /proc/sys/fs/binfmt_misc/qemu-aarch64
enabled
interpreter /usr/bin/qemu-aarch64-static
flags: F
offset 0
magic 7f454c460201010000000000000000000200b700
mask ffffffffffffff00fffffffffffffffffeffffff
```

### コンテナの起動

aarch64対応のコンテナを起動することができる。

```bash
$ docker run --rm -it arm64v8/ubuntu:22.04 /bin/bash
```

このコンテナではarmv8向けのバイナリが動作する。

```c
# a.c
#include <stdio.h>
int main(void) {
  printf("Hello Arm!\n");
  return 0;
}
```

```bash
$ gcc -march=armv8.3-a a.c
$ ./a.out
Hello Arm!

$ objdump -d a.out 
a.out:     file format elf64-littleaarch64
:
```
AWS Cost Explorer で ”EC2 - Other”(EC2 その他) の内訳を確認する方法 2024年版

ジャーニーマン( @beajourneyman )です。

普段は Amazon Connect を基盤としたシステムの開発・保守のPMをしています。

今回は調べものをしていて気になった点があり、調べて触ったメモを残しおく主旨のエントリーです。過去にも、いくつか調べて対応した内容をまとめています。

https://qiita.com/beajourneyman/items/d385bf9e139048630038

# 今回のテーマは AWS Cost Explorer

https://aws.amazon.com/jp/aws-cost-management/aws-cost-explorer/

> AWS Cost Explorer は使いやすいインターフェイスを備えており、AWS のコストと使用状況を長期にわたって視覚化、理解、管理できます。すぐに使用を開始し、カスタムレポートを作成してコストと使用量のデータを分析できます。大まかにデータを分析したり (例: すべてのアカウントの合計コストと使用量)、コストと使用量のデータを詳細に分析して傾向、コスト要因、異常を特定したりできます。

# ”EC2 - Other”(EC2 その他) の内訳を確認する方法

結論である ”EC2 - Other”(EC2 その他) の内訳を確認する方法をご紹介します。残しておきたい個人的なメモは巻末に書きます。

ログインしたら最初に出てくる「コンソールのホーム」右下に表示される「コストの使用状況」のウィジット内の＄表示のコストをクリックします。「請求とコスト管理」にアクセスできるアカウントでお試しください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/33f99d3f-8efe-ebbd-4b79-422bbe1e307b.png)

いくつも遷移のパターンはあるので、お好みの方法で AWS Cost Explorer を表示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/9f3cf7aa-d51b-d0aa-8bd4-9770c8d4a779.png)

右下に小さく緑色の凡例で”EC2 その他”があるのが分かります。内訳の絞り込みを行います。右ペインの「レポートパラメータ」の2つ目の▼「グループの条件」の「ディメンション(グループ化する軸)」を”使用タイプ”にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/43d73b77-318a-5efe-8d5e-999db45f69a9.png)

グラフと下部の凡例が動的に変化します。続いて3つ目の▼「フィルタ」の「サービス」から今回調べたい”EC2 - Other”をチェックして「適用」ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/e7f783e6-7cbf-6f1a-10fb-2b398345c276.png)

該当のアカウントでは”APN1-EBS:SnapshotUsage”の利用料であるコトが分かります。以上です。普段、サービスは意識していますが、使用タイプを意識するケースはなかったので、新たな学びでした。


# ”EC2 - Other”(EC2 その他) の内訳サンプルと補足

いくつかのアカウントの内訳サンプルをご紹介します。

ひとつ目は当月を含む3ヶ月にしてみました。”APN1-EBS:VolumeUsage.gp3”と”APN1-EBS:VolumeUsage.gp2”であるコトが分かります。上記では割愛しましたが、グラフに続いて一覧でも内訳が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/66d96f9d-9a48-e01c-38a2-c3b644273b02.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/b9994875-9e6e-cd70-3bee-d742a6caa5a2.png)


2つ目は、6ヶ月にしてみました。”APN1-NatGateway-Hours”が殆どで、僅かに”APN1-NatGateway-Bytes”があるのが分かります。凡例には表示されず”その他”になっている項目も一覧表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/98ecf2d5-b40e-d55e-7cfb-c4e9d76e004e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/5450f360-3e94-8118-6bcd-4bf1848c7bc9.png)

今回は”EC2 - Other”(EC2 その他)の内訳について書きましたが、「サービス」を”EC2 - Other”(EC2 その他)に絞らず「ディメンジョン」に”使用タイプ”を設定して確認もできます(以下2つ目のサンプルで表示したグラフと一覧です)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/6688ece2-8974-a4f4-ccbd-5af4ffbf5eb0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/cc23fc2d-66a5-1635-c617-2488398079d4.png)

もしかしたら、コスト削減のヒントがあるかもしれません。簡単に確認できますので、良かったらご覧になってみてください。

# 調べた背景

普段の維持保守業務では大手請求代行を利用しサービスごとの利用料レポートの内容や月毎の遷移を追って、異常や想定外がないか確認しています。マネージドコンソールに入って実際に AWS Cost Explorer で確認もしくは分析するコトはありません。

ただ、いわゆるリスト形式(一覧)で視覚的な表現はされていないので、分析や調査をするにはやや不向きです。そこで AWS Cost Explorer を覗いてみたところ、”EC2 - Other”(EC2 その他)の存在に気が付きました。

冒頭で書いた通り、自分自身のメモパートです。きっかけを書いておくと、後で読み返した時に有用ではないかと思い入れてみました。

以上です。
【新入社員向け】オリジナルショートカットキーで任意のアプリを一発呼び出ししよう！

# 概要
IT業界で働いてもう十何年になりますが、毎年6月ごろになると現場に新入社員さんの姿がチラホラ見られます。
という事で、新人研修では教えてくれない、便利なWindowsPCの裏技を紹介していきたいと思います。


# なぜWindowsPCなのか？
日本で初めて爆発的に売れたOSがWindwos95という事もあり、私が所属するIT業界をはじめ、大体の業務PCは未だにWindowsPCであることが多い。
私が知る限り、デザイン関連やマスコミ関連の仕事をしていない限り、WindowOSを使っているのではないでしょうか？


# As Is（現状・・・）
皆さんは任意のアプリを呼び出す時、どのように呼び出していますか？

➀、Windowsロゴマークから、任意のアプリを探す。
➁、検索ボックスでアプリ名を入力し、任意のアプリを検索する。
➂、「 Windows ロゴ 」キー　＋　 「R」キーで、『ファイル名を指定して実行』から呼び出す。

とかでしょうか？？


# To Be（これから・・・）
もっと簡単に任意のアプリを呼び出す方法があります！！
それが、オリジナルショートカットキーを設定する！！です。
例えば、IT業界でよく使う「サクラエディタ」を例にとってみましょう。
※「サクラエディタ」は事前にインストールしておいてくださいね。

『As Is』で記載したやり方を振り返ると、
➀、➁は以下の図のように検索するかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/ce0317e1-2ae1-c0e9-dd69-ed836c12034b.png)

また、➂については、アプリのインストールをしていないので、起動すら出来ませんでした。

という風に、意外と任意のアプリを立ち上げるためには、ちょっとした時間がかかります。
ですが、この技を使えば一瞬です！！

# 裏技紹介
ということで、裏技を紹介していきましょう。
### 事前準備
この技を使うためには準備が必要です。
#### １．デスクトップに任意のアプリのショートカットアイコンを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/7429090b-9b78-d705-f526-aa7b671dbae5.png)
こんな感じですね。。。

#### ２．ショートカットアイコンのプロパティを開く
アイコンを選択し、「Alt ＋ Enter」キーで『プロパティ』を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/b8aedc1d-6857-0065-2c61-12c0fe37e84b.png)


#### ３．ショートカットキーを設定します
ショートカットキーのテキストボックスが最初「なし」と表示されておりますが、テキストボックスを選択し、「CTRL + Shift + （任意のキー）」「CTRL + Alt + （任意のキー）」を押して、
任意のショートカットを設定します。
サクラエディタはあくまでエディタ、ノートパッドなので「CTRL + Shift + N」を設定しております。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/bfe66a1a-25d9-ab73-1aed-53c437747f20.png)

#### ４．「OK」ボタンを押して決定します。
ということで、「OK」を押して、設定したショートカットキーを押してみましょう！！
設定したアプリが表示されたと思います！！

このようによく使うアプリにはショートカットキーを設定しておきましょう！！
これをやるだけで、業務スピードは上がりますよー！！

# 最後に
最後になりますが、この記事が皆さんの成長の少しでも手助けになることを祈って、この記事をまとめたいと思います。
最後までお読みいただきありがとうございました。