OmniAICreator/Qiita-1.07M huggingface dataset:
DVA参考リンク（AWS Certified Developer - Associate）

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file-validate.html
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-retries.html
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/WorkingWithItems.html#WorkingWithItems.ConditionalUpdate
https://aws.amazon.com/jp/premiumsupport/knowledge-center/cognito-user-pools-identity-pools/
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html
https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html#sqs-long-polling
https://docs.aws.amazon.com/ja_jp/general/latest/gr/api-retries.html
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/best-practices.html#function-code
https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html#changing-message-visibility-timeout
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html
https://www.google.com/search?q=codebuild+%E3%83%93%E3%83%AB%E3%83%89%E5%B1%A5%E6%AD%B4&rlz=1C1AGAK_jaJP968JP969&oq=codebuild+%E3%83%93%E3%83%AB%E3%83%89%E5%B1%A5%E6%AD%B4&aqs=chrome..69i57.15871j0j7&sourceid=chrome&ie=UTF-8
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html
https://www.google.com/search?q=%E3%83%9A%E3%82%B7%E3%83%9F%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF+%E3%82%AA%E3%83%97%E3%83%86%E3%82%A3%E3%83%9F%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&rlz=1C1AGAK_jaJP968JP969&oq=%E3%81%BA%E3%81%99%E3%81%A6%E3%81%83%E3%81%BF%EF%BD%8B&aqs=chrome.1.69i57j0i546l3.3834j0j7&sourceid=chrome&ie=UTF-8
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution
https://aws.amazon.com/jp/builders-library/caching-challenges-and-strategies/
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-expired-token/
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_variables.html
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html
https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-name-storage
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/applications-sourcebundle.html
https://aws.amazon.com/jp/premiumsupport/knowledge-center/lambda-import-module-error-python/
https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/input-output-resultpath.html#input-output-resultpath-catch
https://aws.amazon.com/jp/about-aws/whats-new/2016/12/aws-lambda-supports-dead-letter-queues/
https://aws.amazon.com/jp/premiumsupport/knowledge-center/dynamodb-gsi-throttling-table/
https://docs.aws.amazon.com/ja_jp/kinesis/latest/APIReference/API_GetShardIterator.html
https://qiita.com/is_ryo/items/009220083e179272cbda
https://nvr.bz/topics/knowledge/what-encode.php
https://dev.classmethod.jp/articles/behavior-when-s3-cannot-be-decrypted/
413 Request Entity Too Large がしつこかった

Amazon Linux2　＋ nginx上でアプリを作っています。
クライアントに画像をアップロードさせる際、エラー
`413 Request Entity Too Large`
が返されました。
調べるとnginxではデフォルトで1Mバイトの大きさのファイルしかアップロードできず、nginx.confを変更してやることで解決できるとありました。

↓これを追記する
```
client_max_body_size 500M;　      #500Mは好きな数字に。0 で無制限
```
ただ、言われた通り設定して再起動しても通らないので、おかしいなと思ったところ、記入する場所が複数ありました。

まず設定ファイルの場所を確認します。
`sudo nginx -t`
おそらく
`/etc/nginx/nginx.conf`が出てくるでしょう。この中で、
http, server, location
の3箇所に、client_max_body_sizeを設定でき、
少なくともこのうち http と server で記入しなければいけないようです。

https://stackoverflow.com/questions/2056124/nginx-client-max-body-size-has-no-effect
Google ColabでFUSEを使ってGCSにアクセスする

## はじめに
本記事ではGoogle Colab上でGCS FUSEを利用してGCSを仮想マシンのフォルダにマウントする方法を解説します。モチベーションとしては、Google Colabで実験した内容をVertex AIに移植することが多いためGoogleDriveではなくGCS環境にデータを一元管理したいためです。

## 実装

以下のコードを先頭のセルにコピペしてい実行すればディレクトリが正しくマウントされます。今回はVertex AIと同じように利用したいというモチベーションなので、`/gcs/{BUCKET_NAME}`以下にマウントします。

必要なものはGCSのバケットとそのバケットへのアクセス権限を持ったGoogleアカウントです。以下のコードを実行するとGoogleアカウントのログイン画面が現れますのでログインします。

```python
from google.colab import auth
auth.authenticate_user()

# Install GCS FUSE
!echo "deb http://packages.cloud.google.com/apt gcsfuse-bionic main" > /etc/apt/sources.list.d/gcsfuse.list
!curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
!apt -qq update
!apt -qq install gcsfuse 

# Mount bucket
BUCKET_NAME="YOUR_BUCKET_NAME"
!mkdir -p /gcs/{BUCKET_NAME}
!gcsfuse --implicit-dirs {BUCKET_NAME} /gcs/{BUCKET_NAME}
```
以下のコマンドででマウントされているか確認できます。

```bash
ls /gcs/{BUCKET_NAME}
```
TestFlightで毎回表示される「輸出コンプライアンスがありません」の設定を省略する方法


# 目次
[1.やりたいこと](#1-やりたいこと)
[2.解決策](#2-解決策)
[3.まとめ](#3-まとめ)

# 1. やりたいこと
AppStoreでTestFlightをアップロード後、毎回「輸出コンプライアンスがありません」が表示され、
下記のような質問事項に毎回答える必要があるため、これを省略したい。

<img width="500" alt="スクリーンショット 2022-06-22 14 34 18" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552472/c278dab7-011d-e825-4bce-06298185bd78.png">
<img width="300" alt="スクリーンショット 2022-06-22 14 34 18" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552472/d7082046-d0c7-ff9a-008b-db94b8430b64.png">
<img width="300" alt="スクリーンショット 2022-06-22 14 34 18" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552472/46535daa-0994-4862-56a0-d49e24481940.png">


# 2. 解決策
下記のAppleのドキュメントより

>_If your app is not using encryption, add the App Uses Non-Exempt Encryption (ITSAppUsesNonExemptEncryption) key and set the value to NO._
>
>_If your app uses encryption, add the App Uses Non-Exempt Encryption (ITSAppUsesNonExemptEncryption) key and set the value to YES._
>
>_If your app requires export compliance, add the App Encryption Export Compliance Code (ITSEncryptionExportComplianceCode) key and enter the value for this key provided by App Store Connect._
https://help.apple.com/xcode/mac/current/#/dev0dc15d044



iosのプロジェクト内info.plistのファイルに下記を追加するか、
```
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
```
infoのプラスボタンを押下して、下記の記述を追加することで
![スクリーンショット 2022-06-22 20.05.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552472/7ea92f0d-c5e3-778e-c659-b889dedebe69.png)


輸出コンプライアンスの質問に答えずともTestFlightの配信が自動できるようになります。

# 3. まとめ
AppStoreの使用頻度が少なかったのであまり気になりませんでしたが、
最近利用回数が増え、
毎回この設定するの「めんどくさいな〜」と思ったのと
xcodeやfastlaneでipaアップロードした後にApple側で処理中の表示が
「輸出コンプライアンスがありません」に切り替わるまでにも数十分間待ちが発生して
「終わったかな〜」と何回も確認していることがあったので
この時間がなくなるのも意外とストレスフリーになります！
ぜひ一度試してみてください！

では！


[gamba!公式サイトはこちらへ！ 《無料で15日間gamba!お試しできます》](https://www.getgamba.com/)

[株式会社gamba! カスタマーサクセスチーム note](https://note.com/gamba_sec/)

[gamba! 公式 facebookページ](https://www.facebook.com/getgamba)

[gamba! 公式Twitter](https://twitter.com/getgamba)
clang を使った VSCode のビルドタスクで起こったエラーを解決した（Mac, C++）

# 環境

- OS
    - macOS Monterey バージョン 12.4
- CPU, GPU
    - M1
- コンパイラ
    - Apple clang version 13.1.6 (clang-1316.0.21.2.5)

# トラブル

"Hello" を標準出力するだけの main.cpp を、既定のビルドタスク設定（コンパイラは `clang` ）でビルドしたところ、下記のエラーが発生しました。

```
Undefined symbols for architecture arm64:
/* 中略 */
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 {use -v to see invocation}
```

<details><summary>main.cpp</summary>

```cpp:main.cpp
#include <iostream>
using namespace std;

int main() {
    cout << "Hello" << endl;
}
```

</details>

<details><summary>tasks.json</summary>

```json:tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "process",
            "label": "C/C++: clang アクティブなファイルのビルド",
            "command": "/usr/bin/clang",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "コンパイラ: usr/bin/clang"
        }
    ]
}
```
</details>

# 解決法

コンパイラ（コマンド）を `clang` ではなく `clang++` にします。
tasks.json の変更点は以下のようになります。（既定の設定）

```diff_json:tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "process",
-           "label": "C/C++: clang アクティブなファイルのビルド",
+           "label": "C/C++: clang++ アクティブなファイルのビルド",
-           "command": "/usr/bin/clang",
+           "command": "/usr/bin/clang++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
-           "detail": "コンパイラ: usr/bin/clang"
+           "detail": "コンパイラ: usr/bin/clang++"
        }
    ]
}
```

# 余談

## `clang` コマンドを使った理由
`clang` は C のコンパイルコマンドだから C++ のコンパイルに使うのは不適切では？（最初から `clang++` 使っとけよ）
という声が聞こえてきそうですが、

- `clang` と `clang++` の実行ファイルの inode 番号が同じだったので、どっち使っても同じやろ！　と考えた
- `clang` の方が `clang++` よりも美しい（主観）名前で好き

という2点から `clang` を採用しました。
`clang` にしたことが原因で沼るとは思いもよらなかった……

## エラーについて
エラーメッセージにもあるように、リンカー（`ld`）がはたらく段階でしくじっています。
つまり、（狭義の）コンパイルは成功していますが、その後のリンクで失敗しています。
詳しい説明は省きますが、`clang` は C++ の標準ライブラリのオブジェクトファイルを自動的にリンクしてくれないらしいです。
それゆえ `clang++` では出ないエラーが `clang` では出てしまうということでした。

コンパイルエラーに関してはインターネット上に情報がたくさんありますが、リンクエラーに関してはあまりなく、解決に苦労しました……

# 参考資料

解決法はこちらで知りました。「おまけ」の項にあります。
コンパイルとリンクについての説明もこちらに。

https://qiita.com/kazatsuyu/items/5c8d9f539cd925fda007
Jetpack Compose で dp / px / sp の相互変換はどうやるのか


```kotlin
val pxValue = with(LocalDensity.current) { 16.dp.toPx() }

// or

val pxValue = LocalDensity.current.run { 16.dp.toPx() }
```
[How to convert Dp to pixels in Android Jetpack Compose? - Stack Overflow](https://stackoverflow.com/questions/65921799/how-to-convert-dp-to-pixels-in-android-jetpack-compose/65921800#65921800)

Kotlin スコープ系の関数で取得できる、というのだが気持ちが悪いです。

これは、以下でも同じ。

```kotlin
val pxValue = 16.dp.value * LocalDensity.current.density
```

さらに、その他、それぞれの変換もみてみます。

[👉【Jetpack Compose】dp / px / sp の相互変換](https://android.benigumo.com/20220622/convert-dp-px-sp/)
PowerShellで入力したIPアドレスの到達性を確認する


### IPv4アドレスをチェックし、PingでIP到達性を確認する

このコードでは、入力されたIPアドレスが、IPv4のフォーマットに従っているか正規表現を使って確認し、正しい入力値であればPingコマンドで実際にIP到達性を確認します。

#### ユースケースのポイント
+ ターミナルでの入力受付
+ 正規表現を使ったIPv4アドレスのフォーマット確認
+ IF文での条件分岐


以下、環境です。
**Windows 10 Enterprise**
**PowerShell 5.1**

``` input.ps1

chcp 65001 | Out-Null

$inputIp = Read-Host "Please input your target IP address(IPv4 only)"

IF ($inputIp -match '^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$') {
    Write-Host "Your target IP address is" $inputIp
} else {
    Write-Host "Input IP address was NOT appropriate."
    exit
}

$result = Test-Connection $inputIp -Count 1 -Quiet

IF ($result -eq "True") {
    Write-Host "Target IP address is reachable."
} else {
    Write-Host "No reachability on your input IP address"
    exit
}

```

### コード解説

``` line1.ps1
$inputIp = Read-Host "Please input your target IP address(IPv4 only)"
```

+ **Read-Host** : このコマンドレットでIPアドレスの入力を促し、その値を変数 **$inputIp** に代入


``` line2.ps1
$inputIp -match '^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'
```

+ -match を使って、変数 **$inputIp** の値がIPv4のフォーマットになっているか確認

``` line3.ps1
$result = Test-Connection $inputIp -Count 1 -Quiet

IF ($result -eq "True") {
    Write-Host "Target IP address is reachable."
```

+ 変数 **$inputIP** に正しいIPアドレスが入力されていることを確認できたので、そのアドレスに**Test-Connection**を使ってIP到達性を確認
+ **Test-Connection**に**Quiet**を付けることで、Boolen値を返してくれるので結果を Trueであるかを確認している。
※**PowerShell 5.1**の環境では**Ping**と**＄LastExitCode**の組み合わせで、**Ping**が失敗しても0を返すため判別できなかったので、**Test-Connection**に修正した。
JenkinsからGitHubのApiを操作するJenkins Shared Library書いてみた

# JenkinsからGitHubのApiを操作するJenkins Shared Library

これ↓
https://github.com/Marimoiro/jenkins-github-api-wrapper.git

# なにこれ

JenkinsからGitHub Apiを叩いて、いくつかの操作をできるようにしたライブラリです。

JenkinsからPullRequest作るときなどにcurlやらhttprequestやらに頼っていて毎回毎回コードが変わるのがいいかがんやめたくなったので作りました。

どれくらい需要がある変わらないのですが、需要あったらLGTMしてくれるとうれしいです。
使う場合はリポジトリにStarくれると僕のテンション的に嬉しいなー

## できること

 * リポジトリ
    * リポジトリの作成 / 削除
    * ラベルの作成 / 削除
    * コミット間の差分を取得
 * PullRequest
    * 作成
    * マージ
    * コメント 

特にPullRequestの能動的な操作とリポジトリの作成がいい感じに出来なかったのでそこを解決するために作っています。

特に **PullRequestを作成する** や **リポジトリのラベル作る** あたりが出来ないなぁと思ったので作っています。
なので、PR周りの処理の網羅率は高いですが、その他はあまり力を入れていないです。 

機能セット的には自分がJenkinsでよく使うなーとかたまに使うなーとかあったら便利かなーを搭載しています。
（ほしいのあったらissueにでも書くかPR出してね）

## [pipeline-github-plugin](https://github.com/jenkinsci/pipeline-github-plugin) との違い
PRでトリガーするタイプのジョブならgithub-pluginを使うべきです。
Jenkinsが能動的にGitHubのApiを使うようなシナリオを考えています。

## 実装について

[GitHub API for Java
](https://github-api.kohsuke.org/)のラッパーです。
元々Jenkinsのgit pluginのバックエンドなので引っ張り出してきた形です。

なので各オブジェクトは`raw`というオブジェクトを持っているのでそれで生データにアクセスできます。

# 使い方

こんな感じで、リポジトリのオブジェクトにアクセスできます。

```
repo = marimoiro.github.Repository.find(https://github.com/Marimoiro/jenkins-github-api-wrapper.git)
```

そこからこんな感じでPullRequest作ったりできます。

```
pr = repo.createPullRequest(タイトル, head, base, body)
pr = repo.createPullRequest('テスト', 'pull-request-test', 'main', 'テスト中\nテスト中')
```

他に必要であればJenkinsのグローバル設定に依存する形で大本のインスタンスの取得もできます。
```
def github = GitHubClient.find(host, 設定名)
def github = GitHubClient.find(); // デフォルトだとapi.github.comの最初の設定を持ってきます

```

APIDocumentは簡単ですがこちらにおいています。
[jenkins-github-api-wrapper](https://marimoiro.github.io/jenkins-github-api-wrapper/)

サンプル一覧が、こちらです。
[samples](https://github.com/Marimoiro/jenkins-github-api-wrapper/tree/main/samples)


# 注意事項

githubに対して正当なアクセス権があると普通に何でもできるので、気をつけてください。
基本的にはLoad implicitlyにチェックはせずに必要なジョブでだけ読み込む形がいいと思います。


# 感想

## GitHub APIの仕組みに詳しくなれた

結構知らなかったGitHub APIの機能がへーこんなこともできるんだ！と勉強になりました。

## Jenkinsの仕組みに詳しくなれた

Jenkinsのオブジェクトは基本Serializableである必要があるのですが、それについてのちゃんとした理由や、実装うまくいかないとどうなるの？がわかって面白かったです。

このライブラリのオブジェクトは基本的にSerializableを実装しています。
あと [Kohsuke Kawaguchi](https://twitter.com/kohsukekawa) さんすごいなってなってました。
基本情報（CPUの性能指標パート2）

https://qiita.com/jupippii/items/e120e0f7f56b8cb2df4f

の続きです。

## MIPS(Million Instructions Per Seconde)
１秒間に実行できる命令の数を表したものです。

```
Million Instructions Per Seconde
百万     命令          /   秒
```
数字が大きくなりがちのため、命令の数は百万単位であらわします。

```
20MIPS(1秒間に2000万個の命令を実行)　
                               　　　　　　　　遅い
                                    | 
　　　　　　                                 |
                                    |
                                    |                               
　　　　　　                                 |
                                    |
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　早い
100MIPS(1秒間に10000万個の命令を実行)
```
数が大きい方が命令を処理できて高速です。

何度も書きますが、**１秒間に実行できる百万単位**の命令数がMIPSです。

例えば2分間に6億個の命令を実行できるコンピュータの処理は、何MIPSですか？という問題が出たとします。

2分 = 120秒
600,000,000 / 120

ですが、MIPSは100万単位で考える必要があります。

100万は指数で表すと10⁶です。

```
6億個 / 120秒
= 600 * 10⁶ / 60
= 5 * 10⁶
= 5MIPS
```
上記が答えとなります。

5MIPSは１秒間に5 * 10⁶の命令を実行できます。
1秒の10億分の1（10⁻⁹秒）がナノ秒です。
```
1秒 / (5 * 10⁶)
= 1 / 5,000,000
= 0.0000002
= 200 * 10⁻⁹(200ナノ秒)
```

計算方法は色々あると思いますが、上記で考えてみました。

## 命令ミックス
CPUの基本的な命令実行手順は「命令の取り出し→命令の解読→対象データ読み出し→命令実行」の流れとなります。

しかし「対象データ読み出し」を必要としない命令だと、上記の手順は必要となりません。
命令は、その種類によって実行が必要なクロックサイクル数が異なっていたりするようです。

命令ミックスというのが出てきます。命令ミックスは、よく使われている命令を
一つのセットにしたものです。

標準的な命令ミックスは、科学技術計算で使われるギブソンミックス
事務計算で使われるコマーシャルミックスの２つがあります。

1GHzのCPUが下記の命令セットで出来ていた場合、処理能力は何MIPSになるか計算してみます。

| 命令種別   |   実行時間（クロック）  |  出現頻度（％）
| :---: | :---:| :---: |
|   命令1  |  10 |  60  |
|   命令5  |  5  |  40  |

1GHzは毎秒10億回を意味します。
```
1秒 / 1GHz = 10⁻⁹ = 1ナノ秒

命令1 = 10クロック * １ナノ秒
命令5 = 5クロック  * １ナノ秒

(10ナノ秒 * 0.60)
(5ナノ秒  * 0.40)
----------------
          8ナノ秒

1秒 / 8ナノ秒 = 1 / 8 * 10⁻⁹秒
            = 0.125 * 10⁹秒
            = 125000000
            = 125MIPS
```
となります。

## まとめ
ひたすら要計算。
ホエーリング攻撃 とは

## 勉強前イメージ

ホエー？セキュリティのこととはわかるけどわからん...

## 調査

### ホエーリング攻撃 とは

CEOなどの企業の幹部をターゲットにしたフィッシング詐欺になります。
基本的なフィッシング詐欺は大量にいろんなところにメールを送り付けて行いますが、
ホエーリング攻撃はターゲットを絞って行います。
SNS等でインターネット上に個人情報が溢れており、そこからターゲットを絞り込んで実行します。

### そもそもフィッシング詐欺とは？

信頼できる金融機関やショッピングサイトになりすましてメールを送り、
偽サイトに誘導して個人情報を引き出してお金を引き出すなどの詐欺になります。

ホエーリング攻撃もフィッシング詐欺の一種になります。

フィッシング詐欺の種類は大きく分けて6種類あり、それぞれ以下になります。

- メールフィッシング

本物になりすましたリンクをメールで送りつけ、個人情報を記載するように誘導します。

- マルウェアフィッシング

本物になりすましたメールでマルウェアを仕込んだ添付ファイルを送信し、添付ファイルを開くとシステムが停止するような仕組みがあります。

- スピアフィッシング

個人を特定して情報を集めた上でフィッシング攻撃を行います。
基本的なフィッシング詐欺は大量に送りつけますが、スピアフィッシングは特定の個人なのでその個人用にカスタマイズされています。

- ホエーリング

個人を特定する中でも、大物を標的とする攻撃をホエーリングといいます。
スピアフィッシングの一種でもあります。

- スミッシング

SMSからの造語でスミッシングと言われ、SMSを使った手口です。
オンラインサービスの認証としてSMSが使われてることが多く、日常違和感なく引っかかってしまう可能性が高いことから増加傾向にあります。

- ビッシング

voiceとPhishingの造語でコールセンターからの電話と偽って相手を騙して機密情報を提供させるものです。

## 勉強後イメージ

SNSに露出が増えた反面、それを使って詐欺をしようというのもあるのか・・・・

## 参考

- [フィッシング詐欺はどんな種類がある？](https://www.skyarch.net/column/phishing3/)
- [フィッシング攻撃の種類](https://www.trendmicro.com/ja_jp/what-is/phishing/types-of-phishing.html)
Laravelをec2にデプロイする際にインスタンス内で叩いたコマンド

## この記事では自作のlaravelアプリを以下の記事を参考にしながら、デプロイする際にインスタンスでたたいたコマンドを記録している。
## 前提
* 以下の記事で2.「ネットワークの構築」から3.1の3.「インスタンスの詳細設定」の高度な詳細ユーザーデータを編集を行ず、3.2の11.（RDSを使用したDBのサーバー構築が完了した）まで完了している
* https://zenn.dev/tornlch/articles/9e263859030c0c
## ユーザーデータの編集を行わない代わりに直接コマンド叩く
### step1 インスタンスに接続
* サービスでEC2を選択、作成したインスタンスにチェックをつけ、インスタンスの状態から開始を押す
* インスタンスが実行中になったら接続をクリック
* 今回はEC2 Instance Connect で接続→コンソールが開く
* ※注意　ここからコマンドを叩いていくのだが、参考にした記事のユーザーデータ編集の内容をそのまま使用している箇所もあります。
```
$ sudo yum install -y httpd git
$ sudo amazon-linux-extras install php8.0
$ sudo yum install -y php-devel php-mbstring php-mcrypt php-xml php-gd php-opcache php-pecl-zip
```
* 必要なライブラリーのインストール。ご自身のlaravel アプリケーションに合わせてください。私の場合はphp8.0で動きました。
```
$ sudo chmod 777 /var/www/html
$ sudo git clone https://github.com/your application url /var/www/html/laravel-sample
$ sudo chmod -R 777 /var/www/html/laravel-sample/bootstrap/cache
$ sudo chmod -R 777 /var/www/html/laravel-sample/storage
```
* ご自身のアプリケーションをcloneして、権限の付与。(chmodに関してはまだ学習不足です。)
```
$ export HOME="/root"
$ sudo curl -sS https://getcomposer.org/installer | sudo php
$ sudo mv composer.phar /usr/local/bin/composer
$ cd /var/www/html/laravel-sample
```
* composerのインストーラーをダウンロードし、mvで移動
### ここから少し詰まったので詳しく書いていく。
* やりたいことはcomposerのインストール
```
$ composer install
# 結果 composer updateをしてくださいとエラーがでる
```
* 次に
```
$ composer update
# 結果 Cannot create cache directoryとエラーがでる
```
* やってみたこと　権限の付与
```
$ sudo chown -R ec2-user $HOME
```
* ここから少し特殊だが、そのままcomposer updateをするとそのままエラーのままだが、一度インスタンスの接続を切って、再度EC2 Instance Connectで接続して以下のコマンドを叩くとエラーの内容が変わった！！
```
$ cd /var/www/html/laravel-sample
$ composer update
# 結果 composer.lockがありませんというようなエラーがでる
```
* composer.lockファイルを作成し、権限を与え、再度composer update
```
$ sudo touch composer.lock
$ sudo chown -R ec2-user ./composer.lock
$ composer update
```
* ここでupdate成功 以下は参考記事をもとに叩いた!

```
$ composer install
$ sudo sed -i -e '119s/html/html\/laravel-sample\/public/g' /etc/httpd/conf/httpd.conf
$ sudo sed -i -e '151s/None/All/g' /etc/httpd/conf/httpd.conf
$ sudo chkconfig httpd on
$ sudo service httpd start
```
* クローンしたとき.envファイルはないのでコピーする
```
$ sudo cp .env.example .env
$ sudo nano .env
```
.envファイルの編集
![.env参考.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665780/caf1ff2e-9e96-c99f-b600-07bb6a4e05e4.png)

最後に以下のコマンド打つ
```
$ sudo php artisan key:generate
$ sudo php artisan migrate
```
## 確認
* 「http:// your public ip」にアクセスしてページが表示されれば成功だ

## 最後に
Laravel学習期間1か月でアプリを作り、デプロイまでするといった目標をもとに試行錯誤し、実践したものであり、叩いたコマンドの意味をすべて把握しているわけではありません。そのため、それぞれの環境によっては不必要なコマンド、足りないコマンドもあるかと思います。私の環境ではこの記事に載せたコマンドでデプロイできたので、部分的にも参考にしていただければなと思います。閲覧ありがとうございました。
## 参考文献

この記事は以下の情報を参考にして執筆しました。

- [[勉強会資料] LaravelサンプルアプリをEC2にデプロイする](https://zenn.dev/tornlch/articles/9e263859030c0c)
Ubuntu22.04でcopyqなどで設定しているホットキーが効かない現象


## 原因
詳しいことは全くわかりませんが、「Wayland」という機能によるものみたい

## 解決方法
Keyboard - KeyboardShrotcut - View and Customized Shortcut - Customized Shortcut

キーボード・ショートカットから、コマンドラインを直接呼ぶようにすると直る

```
copyq -e "toggle()"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293481/3543799e-b111-1bec-bee6-09eef91a0c4e.png)



参考
https://note.com/decoponia/n/n4cfd17874782
読み方を忘れやすい記号一覧メモ

|記号  |読み方  |
|---|---|
|_  |アンダースコア  |
|^  |キャレット/ハット  |
|:  |コロン  |
|;  |セミコロン |
|~  |チルダ  |
|`  |バッククォート  |
|\  |バックスラッシュ  |
vscodeから公開鍵認証でSSH接続を行う

## 背景
今までパスワード認証でvscodeでのSSH接続を行なっていたが、毎回パスワードを打つのも面倒で、スリープモードにしてしまうとまたパスワードを使って認証する必要がある。
そこで公開鍵認証を用いてvscodeからssh接続を行うことにした。

## 前提
パスワード認証など、別の方法でサーバーにSSH接続できていること。

## 手順
### 1.拡張機能のインストール
左のツールバーから拡張機能のアイコンを選択して、検索欄にremoteと入力して、出てきた`Remote - SSH`をインストールする。

![スクリーンショット 2022-06-22 18.19.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2268072/c73daa35-53b3-c389-d93e-6ac4ef679281.png)

### 2.SSH　Keyの作成
`ssh-keygen -f ~/.ssh/<key_name>`(例では\<key_name\>はid_rsa_test)を実行して、公開鍵と秘密鍵を作成する。
この時二つのファイルが`~/.ssh`下に作成され、`<key_name>.pub`が公開鍵、何も拡張子がついていない`<key_name>`が秘密鍵。

```
$ ssh-keygen -f ~/.ssh/id_rsa_test
Enter passphrase (empty for no passphrase):  # Enter
Enter same passphrase again:                 # Enter
Your identification has been saved in /Users/<user_name>/.ssh/id_rsa_test
Your public key has been saved in /Users/<user_name>/.ssh/id_rsa_test.pub
The key fingerprint is:
SHA256:S0gipjugwxk3hawkyLRxWXMJgF9a6b9i9dAq1snR0A <user_name>@hogehoge.local
The key's randomart image is:
+---[RSA 3072]----+
|       E+o=o     |
|      o .+.=     |
|  o ...+  + .    |
| o ..oo.o .+     |
|o. + o.+S==      |
|+.+ + o.=o..     |
|=o   + +.+  o .  |
| o    = + .. o   |
|     .     ..    |
+----[SHA256]-----+
$ cd ~/.ssh
$ ls
id_rsa_test.pub id_rsa_test
```
今回はSSH Keyの暗号方式が主題ではないため、簡易的な鍵を作成しているが、実際に作成する際には`ssh-keygen`にオプションを加えた方が良い。

### 3.SSH Configの設定
`/Users/<user_name>/.ssh/config`に以下の内容を追加する。
```vim
Host　hoge
	HostName <server_ip>　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　# 接続先のIPアドレス
	User <user_name>　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　# 接続先で使用するUserの名前
	StrictHostKeyChecking no
	PasswordAuthentication no
	PreferredAuthentications publickey
	IdentityFile /Users/<user_name>/.ssh/<key_name> # 先ほど作成した秘密鍵の絶対パス
	IdentitiesOnly yes
```

Remote - SSHのアイコンを押してリモートエクスプローラーを開き、右上にある歯車からも開ける。
![スクリーンショット 2022-06-22 16.19.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2268072/efcc78c6-0392-ecac-77e1-68d4eb251045.png)

### 4.接続先のサーバーに公開鍵をコピーする。
手順2で作成した`<key_name>.pub`を接続先の`/home/<user_name>/.ssh/authorized_keys`にコピーする。

`<key_name>.pub`をコピーして、vim等でファイルを作成してペーストしても良いのだが、コピーミスや権限問題などが起きる可能性があるため、なるべく`sftp`等を利用してファイルをそのまま転送するのが良い。

この時、公開鍵のパーミッションが適切でないと公開鍵認証を行えないため、適切にパーミッションを設定する。
```
$ cd ~/.ssh
$ ls -l # パーミッションの確認
total 4
-rw-rw-r-- 1 <user_name> <user_name> 591 Jun 22 14:46 authorized_keys
$ chmod 600 authorized_keys # 権限修正
$ ls -l # パーミッションが変更されていることの確認
total 4
-rw------- 1 <user_name> <user_name> 591 Jun 22 14:46 authorized_keys
```

### 5.vscodeからSSH接続を行う
左下の緑の`><`をクリックして、`ホストに接続する`(Connect to Host)を選択し、先ほど作成したホスト名(例はHoge)を選択する。
成功していれば、左下の緑の部分にホスト名が表示されている。

接続に失敗した場合は、パスワード認証でログインし、`sudo cat /var/log/auth.log`を実行して、エラー原因を探る。
例えば私は、パーミッションの設定がおかしかったため、接続が失敗していた。
```
$ sudo cat /var/log/auth.log
...
Jun 22 13:57:19 dl-machine sshd[1000]: Authentication refused: bad ownership or modes for file /home/hoge/.ssh/authorized_keys
...
```

## 参考資料
https://qiita.com/nlog2n2/items/1d1358f6913249f3e186

https://ccieojisan.net/post-2235/
TECH CAMP17日目 ~herokuへのコミット、プッシュ~

# Herokuへのコミットとプッシュの方法
- コミット
```
% git add .
% git commit -m "コミット名"
```
- プッシュ
```
% git push heroku master
```

#### ファイルの変更履歴はないが環境変数だけ本番環境に反映させたい場合
- コミット
```
% git commit --allow-empty -m "コミット名"
```
RecyclerViewのセルをKotlin Android ExtensionsからviewBindingに変更したい！！

# 初めに
今回は、`RecyclerView`のセルを`Kotlin Android Extensions`から`ViewBinding`に置換するためのコードを残しておきたいと思います

### 本文
やること自体は至極単純です。
今まで`view`を渡してたところで`binding`を渡してあげるようにすればいいだけです

```kotlin:Viewholder.kt
class SomethingViewHolder(val binding: SomthingBinding) : RecyclerView.ViewHolder(binding.root) {

    fun bind(data: DataClass) {
    // ここでviewに対してデータの反映を行います
        binding.textView.text = data.content
    }
}
```

```kotlin:Adapter.kt
class SomthingAdapter : ArrayRecyclerAdapter<DataClass, SomethingViewHolder>() {

    override fun onCreateViewHolder(
        parent: ViewGroup,
        viewType: Int
    ): RelatedProductViewHolder {
        return SomethingViewHolder(SomthingBinding.inflate(LayoutInflater.from(parent.context), parent, false))
    }

    override fun onBindViewHolder(
        holder: SomethingViewHolder,
        position: Int
    ) {
        val item = getItem(position)
        holder.bind(
            data = getItem(
                position = position
            )
        )
    }
}
```

### 最後に
最近ではそうそう必要のない修正であって欲しいですが、地味に多いので備忘録程度にどうだったかなぁって書いておきました
やってること自体は単純だけど、書き直してって言われたら面倒なのでコピペできるように残しておこうと思います
Laravel6+MySQL+ローカル環境でHerokuへのデプロイ手順

## まずはHerokuのアカウントを作成しクレジットカードの登録をしましょう
https://id.heroku.com/login


**Heroku CLIを入れる**
```
$ brew tap heroku/brew && brew install heroku
```

**Herokuがインストールできていることを確認**
```
$ heroku -v
heroku/7.56.1 darwin-x64 node-v12.21.0
```

**Herokuでアプリケーションを作成**
```
$ heroku create
```

**HerokuでMySQLを使用する際はcleardbに変更するため下記のコマンド**
```
$ heroku addons:create cleardb:ignite
```

## Herokuアプリの環境変数設定
まずは設定を確認
```
$ heroku config
=== <アプリの名前> Config Vars
CLEARDB_DATABASE_URL: mysql://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
```

上記コマンドで表示されたそれぞれの値を変数に設定（''と<>は外して入力してください）

```
$ heroku config:add DB_NAME='<データベース名>'
$ heroku config:add DB_USERNAME='<ユーザー名>'
$ heroku config:add DB_PASSWORD='<パスワード>'
$ heroku config:add DB_HOSTNAME='<ホスト名>'
$ heroku config:add DB_PORT='3306'
$ heroku config:add DATABASE_URL='mysql2://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true'
$ heroku config:add CLEARDB_DATABASE_URL='mysql2://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true'
```

.envファイルの3行目あたりに記載のAPP_KEYを設定（''と<>は外して入力してください）
```
$ heroku config:set APP_KEY='<ご自身のAPP_KEY>'
```

もう一度設定を確認しましょう。下記のように表示されていたらOK
```
$ heroku config
=== <アプリの名前> Config Vars
CLEARDB_DATABASE_URL: mysql2://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
DATABASE_URL:         mysql2://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
DB_HOSTNAME:          <ホスト名>
DB_NAME:              <データベース名>
DB_PASSWORD:          <パスワード>
DB_PORT:              3306
DB_USERNAME:          <ユーザー名>
APP_KEY:              <ご自身のAPP_KEY>
```

**Procfileを作成**
ProcfileというHerokuの設定ファイルを作成します。
アプリフォルダの直下にProcfileファイルを作成（拡張子なし）して、以下の内容を記述します。
```
web: vendor/bin/heroku-php-apache2 public/
```

※ 記述後各自pushしてください

**HerokuにPush**
```
$ git push heroku main
```

**Herokuでmigrate**
```
$ heroku run php artisan migrate
```

**Webサイトを開く**
```
$ heroku open
```

**ご自身のアプリが表示されれば完了！**
GitHub公式チュートリアルの「GitHub Skills」を触ってみた

2022年6月7日、GitHub社からGitHubを操作しながらGitHubの使い方を学べる無料の教材[「GitHub Skills」](https://skills.github.com/)がリリースされました。

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Expand all you know about the GitHub platform. We&#39;re introducing GitHub Skills, a new learning experience integrated into the GitHub UI, backed by GitHub Actions. Try it out today! <a href="https://t.co/XnqCYdVqBL">https://t.co/XnqCYdVqBL</a></p>&mdash; GitHub (@github) <a href="https://twitter.com/github/status/1533855491125919744?ref_src=twsrc%5Etfw">June 6, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


せっかくなので触ってみようと思い、かる〜く触ってみたのでかる〜くご紹介します。

### はじめに
Github Skillsは**全て英語**で書かれています。
...
アーニャにピーナッツ、エンジニアに[DeepL](https://www.deepl.com/translator)。気合で翻訳しましょう。

### Github Skillsとは
Githubを学べる5コースと、GitHub Actionsを学べる3コースの、計8コース用意されています。

全コース共通して、コースをクリックするとそのコースのリポジトリに飛ぶので、そこから自分用のリポジトリを作成して学習する、といった流れになります。
自分用のリポジトリを作成したら、README.mdに書いてある指示通りにGitHubを学習していきます。

今回は、Githubを学べる5コースに絞って紹介します。

トップページはこんな感じ。
「初心者から上級者まで、インタラクティブなコースでGitHubの使い方を学べるで。」とのことです。
![スクリーンショット 2022-06-20 16.12.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713304/c8750d94-59ef-b43f-27d4-d3d48e03af2a.png)

### Introduction to GitHub
https://github.com/skills/introduction-to-github
>Get started using GitHub in less than an hour.
1時間以内にGithubを始めることができます。

このコースでは、主に
- ブランチの切り方
- コミットの仕方
- プルリクエストとマージのやり方

など、GitHubの"きほんのき"を学ぶことができます。
一度でもGitHubの利用経験がある方飛ばしても問題なさそうです。

### Communicate using Markdown
https://github.com/skills/communicate-using-markdown
>Organize ideas and collaborate using Markdown, a lightweight language for text formatting.
テキストフォーマット用の軽量言語であるMarkdownを使用して、アイデアを整理し、共同作業を行うことができます。

Markdown記法の
- ヘッダー
- 画像
- コードブロック
- タスクリスト

を学びます。
実際にプルリクエストを作成する際に頻繁に使いそうな記法に絞っているようですね。

### GitHub Pages
https://github.com/skills/github-pages
>Create a site or blog from your GitHub repositories with GitHub Pages.
GitHub Pagesで、GitHubのリポジトリからサイトやブログを作成しましょう。

[GitHub Pages](https://docs.github.com/ja/pages/getting-started-with-github-pages/about-github-pages)の使い方を学びます。
GitHubにデータをアップロードしておけば、レンタルサーバーを契約しなくても簡単に静的サイトを公開できるよってやつです。
僕自身初めて使ったのですが、ポートフォリオサイトを公開するときだったりに便利そうですね〜

コースを終えるとこんな感じのサイトが作れます。
![スクリーンショット 2022-06-21 23.08.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713304/a8d1a345-ef6a-cd9a-6454-57ba7dcdcebf.png)


### Review pull requests
https://github.com/skills/review-pull-requests
>Collaborate and work together on GitHub.
GitHub上でコラボレーションし、一緒に作業を行う。

プルリクエストにレビューする方法を学びます。
- いつ、どのようにレビューを依頼するか
- 他の人のプルリクエストにレビューをする方法
- 
レビュアーとしての心得みたいなのも盛り込まれているので
新人エンジニアの方はもちろん、普段からレビューをしているベテランエンジニアの方もタメになりそうな内容になっていると思います。


### Resolve merge conflicts
https://github.com/skills/resolve-merge-conflicts
>Learn why conflicts happen and how to resolve them.
なぜコンフリクトが起こるのか、どうすればコンフリクトを解決できるのかを学ぶ。

コンフリクトの解消方法を学びます。
GitHub上でブランチを切って、ファイルに変更を加えて意図的にコンフリクトを発生させて、マージするときに解消する、といった内容です。

チーム開発をしているとコンフリクトはまれに起こるので、事前に対処法を学んでおくとよさそうですね。

### おわり
5つのコース通して、1時間もあれば終わる内容となっています。
なによりGitHub公式が出しているチュートリアルっていうのがいいですね。初めてGitHubを触る人にもおすすめしやすそう。
時間があればGitHub Avtionsのコースも進めたいです。
【Heroku】Git Credential Managerのユーザー名とパスワードについて

## 環境
+ Microsoft Windows 10.0.22000.739
+ Git 2.36.0.windows.1

## はじめに
Git Bash で `git push heroku main` を実行したときに Git Credential Manager からユーザー名とパスワードの入力を求められる。しかし、Heroku のユーザー名とパスワードを入力しても通らない。
![Git Credential Manager](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946472/18b8407a-f8d3-b9a5-7df2-cbecff1b75fa.png)

## 解決策
### ユーザー名
一応 Heroku に登録しているメールアドレスを入力したが、ユーザー名は無視されるため何も入力しなくても通るようだ。（[Herokuにアプリをpushしたときにエラーが出る場合の対処法 | ぱーくん plus idea](https://web.plus-idea.net/2017/04/heroku-app-pushauth-error/) より）

### パスワード
Authorization token を入力

#### Authorization token の調べ方
Heroku の [Account settings > Applications](https://dashboard.heroku.com/account/applications) で Authorizations の右側のアイコンをクリックすると Authorization token が見つかる。
![Authorizations](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946472/8144cb2e-b388-a2c9-72f4-76a570dd2b24.png)
![Authorization token](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946472/39916f23-b3d8-bb09-46eb-89706c1171b9.png)

## 参考
https://web.plus-idea.net/2017/04/heroku-app-pushauth-error/
【基本情報技術者】回線に関する計算

基本情報技術者試験の分野「回線に関する計算」についてご紹介いたします。
基本情報技術者試験では、「伝送(転送)時間」や「回線利用率」に関する計算問題が出題されます。

## 伝送速度の単位について
伝送速度を表現する単位は「bps」で「1秒間に送信できるビット数」を意味する。
これは「送信できる**ビット数**」です。問題文に出てくる送信するデータは「**バイト**」で表現されます。つまり、単位があっていないため、単位をどちらかにあわせなければなりません。
<font color="red">**1バイトは8ビット**</font>である。
したがって、バイトをビットに直す場合は、バイトに8を掛けます。一方、ビットをバイトに直す場合は、ビットを8で割ります。

## 実効速度と最大伝送速度
**伝送速度には「最大伝送速度」と「実効速度」の2種類がある。**
**最大伝送速度**とは、ネットワークの環境が**混雑していない**理想的な環境が利用できる時の理論上の伝送速度。

**実効速度**とは、ネットワークの**混雑などによりロスが発生している時**の実際の伝送速度となります。問題によってどちらの速度を使えば良いのか判断しなければなりません。問題中に**伝送効率**という用語が記述されている場合は、**実効速度**を使う。

例　回線の伝送効率を60%とし、1Mをバイト=10⁶バイトとする。

## 伝送時間の求め方
**伝送時間を求める計算式**
※伝送データは、単位を揃えてから計算する必要がある。伝送速度は最大伝送速度のこと。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/4489dbd8-8c0b-e37b-1d20-4b6999015856.png)
### 伝送効率を考慮した場合
問題中に**伝送効率**が記述されている場合は、実効速度と使って計算する。

**実行速度を求める計算式**
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/a5ee34a9-1a83-bbb8-20a9-e711ff3ffb4a.png)
**伝送効率を考慮した場合の伝送時間を求める計算式**
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/453f44e0-784f-e024-8767-bc539fbf09c3.png)

## 回線利用率の求め方
**回線利用率を求める計算式**
※伝送データは、単位を揃えてから計算する必要がある。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/463e1a9c-6234-6685-861a-f55ba886d9fd.png)

## 例題①
基本情報技術者　平成27年と30年（同一問題）午前31問　伝送時間
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/12b4c9a9-198f-1a8c-c997-9774a2ad6017.png)
この問題で与えられている情報を整理する。

**・伝送するデータ：10Mバイト**
**・伝送速度(最大伝送速度)：100,000ビット/秒(bps)**
**・伝送効率：50%(0.5)**

①最初に伝送速度の単位がバイトとビットの単位を揃える。伝送するデータをバイトからビットに変更します。「1M=1,000,000」（Mは10⁶）のため伝送するデータは「10M=10,000,000」
1バイトは8ビットのためビットに単位を揃えるため8ビットをかける。
**伝送するデータ：80,000,000ビット　(10,000,000バイト×8ビット)**

②伝送効率が記述されているので、実効速度を求める必要があります。この問題では伝送効率が50%となっているので、混雑しているので実際の速度はその50%（半分）しか出すことができない。
**実効速度：50,000ビット/秒(bps)　(100,000ビット×0.5)**

③以上のことから、公式から伝送時間を求める。
**伝送時間(秒)＝伝送するデータ(80,000,000)÷実効速度(50,000)＝1600(秒)**

したがって、答えは**エ 1,600**となります。

## 例題②
基本情報技術者　令和元年秋期　午前30問　回線利用率
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/47af1be0-7933-c39f-607f-5b8dd7adac43.png)
最初に送信するデータ量を求める。
平均1Mバイトのファイルと問題にある。更に転送量20%が制御情報として付加されるとあるので**1Mバイト+20%のデータ(0.2)でデータ量1.2Mバイト**となる。

ファイルの転送は10秒ごとに行われるので、1秒当たりの平均転送量は、
**1.2Mバイト÷10＝0.12Mバイト**

また、データの単位がバイトとなっているので、1バイトは8ビットのためビットに単位を揃えるため8ビットをかける。

これにより**伝送するデータ：0.96Mビット(0.12Mバイト×8ビット)**
また問題から**伝送速度：10Mビット/秒(bps)**

回線利用率を求める計算式にそれぞれの値を当てはめます。
**回線利用率(%)＝伝送するデータ(0.96Mビット)÷伝送速度(10Mbps)×100=9.6(%)**

したがって、答えは**エ 9.6**となります。
[Java] インターフェースとdefaultメソッド

### はじめに
Java学習を始めたばかりです
Java8

### インターフェース
定数と抽象メソッドをもつクラスを他のクラスに**実装**して使う
継承関係にないクラスでもimplementsすれば使うことが出来る
→違うパッケージ内だとimportが必要？
implementsしたら絶対にinterface内の抽象メソッドの実装（オーバーライドしての使用）がそのクラスに必要
継承は一つのクラスしか出来ないがインターフェースは複数指定できるのも特徴

インターフェースはクラスに色を塗るイメージ
（「継承」は枝分かれさせるイメージ）

例）
留学生が来たからStudentクラスとClubクラス（Studentクラスを継承していないと仮定）の名前の表記を英語にしたいな〜ってとき
両方のクラスに英語表記のメソッドを書いていくのはしんどい
（仮にStudentクラスとClubクラスが継承関係であればスーパークラスにメソッドを書けばオッケー？）
→英語表記が出来るメソッドを使ってクラスに同じインターフェース色を塗るイメージ

### 使い方

インターフェース側
```
public interface インターフェース名 {・・・}
```

違うパッケージ内のインターフェースを使いたい側
```
import パッケージ名.インターフェース名;

public class クラス名 implements インターフェース名, 別のインターフェース名 {・・・}

```

### デフォルトメソッドとは
Java8から使用可能になった
インターフェース内で処理がかける
抽象メソッド（処理は書かないメソッド）は必ずオーバーライドが必要だが、デフォルトメソッドでは処理そのものがかけるためオーバーライドしなくてもそのまま呼び出せる（オーバーライドも可能）

同じメソッド名を複数のインターフェースで定義ができるが、使用する場合は
`インターフェース名.super.デフォルトメソッド名();`
で使うインターフェースを指定できる

### 最後に
特にデフォルトメソッドについて思ったより解説記事がなく、合っているのか怪しいところです。
もし間違っていたと気がついたら修正しますが、なにかお気づきの方いらっしゃいましたら教えていただけると幸いです！

最後まで閲覧いただきありがとうございました！
Glue Jobを実行すると `LAUNCH ERROR | No FileSystem for scheme "S3"Please refer logs for details.`というエラーが発生する。

# TL;DR
Glue　JobのAdvanced properties内のScript pathの指定で`s3://`が大文字になっていないか確認する。大文字になっている場合は小文字にする。

# 事象
CDKで作成したGlue Jobを実行したところ`LAUNCH ERROR | No FileSystem for scheme "S3"Please refer logs for details.`というエラーが発生してジョブの実行ができなかった。
マネジメントコンソール（AWS　Glue　Studio）上では正しくスクリプトが表示されるが実行するとエラーになる。

# 原因
Script Pathの指定で`S3://`と大文字で記述していた。

# 解決方法
Script Pathの指定で`s3://`は小文字で記述する。
というか`s3://`の指定はいつでも小文字。
tailwind導入後にlocalhost3000が表示されなかった。

https://qiita.com/koh97222/items/c46d1ef2a63b92bb6c15

ターミナル
tailwind-app@0.1.0 start
craco start

sh: craco: command not found

と表示されlocalhost3000立ち上がらず。

解決方法
https://qiita.com/koh97222/items/c46d1ef2a63b92bb6c15
https://bobbyhadz.com/blog/not-recognized-as-internal-or-external-command-craco

の記事を参照し、
npm install　--save --legacy-peer-deps @craco/craco@latest
とターミナルで打ったら解決した。
[Swift]UIImageのサイズを変更する（Extensionは使わない）

## はじめに
UIImageのsizeを変更しようとすると、`Cannot assign to property: 'size' is a get-only property`とエラーが発生します。対処法を調べてみると、UIImageを拡張することで対応しているコードが多いと思います。

ただ、Extensionは使わずにUIImageのsizeを変更したいと思う人もいるはずなので、今回はそんな人向けにコードを紹介します。

## コード
```ContentView.swift
func hogehoge() {
    let image = UIImage(named: "画像名")
    let scaledImageSize = CGSize(width: 100, height: 30)
    let renderer = UIGraphicsImageRenderer(size: scaledImageSize)
    let scaleImage = renderer.image { _ in
        image.draw(in: CGRect(origin: .zero, size: scaledImageSize)
    }
    
    let imageView = UIImageView()
    imageView.image = scaleImage
}
```

以上！
Import and Export with Data Management Tools >Use Dataloader.io to Export Data & Use Dataloader.io to Update Data 


+ [Import and Export with Data Management Tools > Use Dataloader.io to Update Data](https://qiita.com/Keiji_otsubo/items/d7d74485b7faf578ec14)


意味がよく分からんかったけど、どうもFLSの設定ができてなさそうです。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/5902dde2-883b-3891-9592-977fee5c5dad.png)


+ [Field 'Account Site' is missing from Dataloader.io](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000EC4Am)
+ [Field 'Account Site' is missing from Datloader](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000A8gHjSAJ)


+ [Error in SOQL Query in the "Use Dataloader.io to Export Data"](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007JBdmj)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/c7960e08-1816-ab0f-3800-939d14cc0573.png)

:::note
I found the solution to the problem mentioned above. The 'Account type' field was not available, even though it was not mentioned in the steps. It wasn't related to a security issue; I had already checked that. I searched for many videos on YouTube, and I even tried to solve it by creating a different User Id, but I kept encountering the same error. Finally, my cousin suggested me to do in Incognito window. I completed the challenge in the Incognito window with the same User ID, and the 'Type' field was available. After selecting the 'Type' field, there was no error, and I was finally happy.

上記の問題の解決策を見つけました。手順には記載されていませんが、「アカウントの種類」フィールドは使用できませんでした。それはセキュリティ問題とは関係ありませんでした。私はすでにそれを確認していました。 YouTube で多くのビデオを検索し、別のユーザー ID を作成して解決しようとしましたが、同じエラーが繰り返し発生しました。最後に、いとこがシークレット ウィンドウで行うことを提案してくれました。同じユーザー ID を使用してシークレット ウィンドウでチャレンジを完了すると、「タイプ」フィールドが使用可能になりました。 「タイプ」フィールドを選択した後、エラーは発生せず、最終的に満足しました。
:::
Blender で USD export で usdSkel(Skinning) 対応したいメモ 2024/04/01 時点 4.1 でいける!

2024/04/01 追記: 

https://www.blender.org/download/releases/4-1/

4.1 でオフィシャルに usdSkel の export 対応しました!

以下はログです.

2022/06 時点では, Official の Blender 3.2 では usdSkel(skinning)には対応していません.

## Omniverse 版? Blender

https://docs.omniverse.nvidia.com/con_connect/con_connect/blender.html#usd-100-2-1
https://forums.developer.nvidia.com/t/blender-usd-linux/217410

Omniverse 版?のビルドですと usdSkel export が experimental ですがあります!

これはいずれ Blender 本家にマージされるのかしらん?

### 制約

* usdSkel の import はまだ対応していません :cry:
* Blendshape(Blender では Shape keys)の export も対応はまだです.
 
自前でスクリプトを書くのが早いか, Omniverse 版で対応されるのを待つか...
AccessDB(*.accdb)のテーブル一覧をkotlin, javaで取得

# UCanAccessを使いましょ
```build.gradle.kts
implementation("net.sf.ucanaccess:ucanaccess:5.0.1")
```

# テーブル一覧を取得
コツっていうんですかね、接続URLに```;sysSchema=true```が必要です。
そんだけです。kotlinとJavaと両方のコードを載せておきます。

```acc.kt
import java.sql.DriverManager

fun main() {
    val accdb = "c:/hoge.accdb"
    DriverManager.getConnection("jdbc:ucanaccess://$accdb;sysSchema=true").use { conn ->
        conn.createStatement().use { st ->
            st.executeQuery("SELECT * FROM sys.MSysObjects").use { rs ->
                while (rs.next()) {
                    println(rs.getString("Name"))
                }
            }
        }
    }
}
```

```acc.java
import java.sql.*;

public class AccDbJ {
    public static void main(String...args) {
        String accdb = "c:/hoge.accdb";
        try(Connection conn = DriverManager.getConnection("jdbc:ucanaccess://" + accdb + ";sysSchema=true");
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM sys.MSysObjects")) {
            while (rs.next()) {
                System.out.println(rs.getString("Name"));
            }
        }
        catch(SQLException e) {
            e.printStackTrace();
        }
    }
}
```

# 以上でござる
もしかしたら以下のキーワードで飛んでくる人もいるかも知れないんで書いておきましょ。

```UCAExc:::5.0.1 user lacks privilege or object not found: MSYSOBJECTS```

要するに```;sysSchema=true```で権限（privilegeだから特権？）を与えりゃいいって話ですね。
そんな感じです。

いや最近accdbとかいう拡張子初めて見たんで自分の世界に寄せました、というお話。
【Swift Playgrounds】iPadでリリースしたアプリをMacで管理したい

# 状況
iPad版SwiftPlaygroundsでアプリをリリースしたが、慣れているMac(Xcode)でメンテをしたい。

# 条件
- Xcodeで編集したい
- SwiftPlaygroundsにも残しておきたい
- Xcodeでの編集をSwiftPlaygroundsに反映させたい

# 方法
## iPadのiCloud Driveを有効にする
![IMG_2499.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/931da063-c9b7-c9e5-bc34-2775e7718db7.png)

## MacのiCloud Driveを有効にする
![スクリーンショット 2022-06-22 16.35.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/29c9e79a-ddaf-a8ce-1342-86e6e0648253.png)

## Finderからswiftpmを開く
`アプリ名.swiftpm`をダブルタップします
![スクリーンショット 2022-06-22 16.33.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/f0e9cef7-2f89-5963-a3db-bf50a52dead7.png)

「Trust and Open」を選択
![スクリーンショット 2022-06-22 16.38.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/18a45632-737e-2408-93a0-69ae8652770f.png)

このような感じになっています。

![スクリーンショット 2022-06-22 16.41.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/a4d366c7-dc84-9753-3528-c6c49a4e717b.png)

# おわり
iPad、Mac共にiCloud Driveが有効であれば変更がすぐに反映され結構便利です。

1つ驚いたのがプレビュー用のstructがなくてもプレビューが表示されています笑
Nuxtインストール・セットアップ方法

DRF+Nuxt+MySQLな環境を作るための備忘録
作業ログ的な感じなので説明省いてますので質問がある方はコメントください。

## インストール
yarnをイントール

```bash
$ npm install -g yarn
```

プロジェクト作成
※ 使うUIやネットワークは各々

```bash
$ yarn create nuxt-app nuxt
```

## セットアップ

nuxt/nuxt.config.js
追加対応、ホスト・ポート

```bash
export default {
...
	server: {
	    host: '0.0.0.0',
	    port: 80
	},
...
```

言語対応

```bash
  head: {
    htmlAttrs: {
      lang: 'ja'
    },
```

Ajax対応
※ 通信はAxiosを使う、ホスト・ポートはAPI用Dockerで設定したものを使う `web:8000`

```bash
axios: {
    proxy: true,
    baseURL: "http://web:8000",
  },
  proxy: {
    '/api/': {
      target: "http://web:8000"
    }
  },
```

起動

```bash
## Dev
$ yarn dev

## ビルド
$ yarn build

## 実行
$ yarn start
```
３Dプリンタを始める

M5StackCore2の途中ですが、3Dプリンタが手に入ったのでお試しをさせてもらっています
忘れないようにやったことをメモしています

## 使用機材・ソフト
機材　creality-ender5　S-1
スライサーソフト　Ultimaker Cura（今回はテストデータのため使用していません）

## テストプリントにとりかかるまで
組み立てまでは、同封の日本語が怪しいマニュアルを参考にしながらできました
設定系がわからなくなりそうなのでメモ

1. 電源ON
1. 自動レベリングを実行
1. Z軸調整
1. データ準備
1. フィラメントセット
1. 印刷実行


### Z軸調整
1. レベリングを実行すると、自動で調整して原点に戻る
1. A4用紙１枚が通る程度に隙間を開ける必要があるのでZ軸補正を行う
1. 準備＞Z軸補正を選択
1. ダイアルを回すとZ軸が移動するので紙が通るよう調整する、ダイヤルを回して確定

### データ準備
今回はテストデータなのでメモリーカードにはいっていたものを使いました
実際は、以下の手順になります
PCで3Dデータ作成
→STL化
→スライサーソフトでスライスしてGcode作成
→SDカードへ保存してプリンタへ接続

### フィラメント
1. 機材上部のアダプタにわっかを引っ掛ける
1. フィラメントの先を45度に切り落とす
1. フィラメントセンサーに通す
1. 本体の準備＞軸移動＞Z軸＞50くらいに手動で上げる
1. 準備＞PLでノズルキットを温める
1. ノズルキットのレバーを引きながらフィラメントの先を押し込む
1. ノズルの先から、溶けたフィラメントが出てきたらOK

### テストプリント実行
1. SDカードを差し込み、プリントを選択
1. 終わるまで待つ
1. プリント終了後、フィラメントを少し押し出してから素早く引いて取り出す
 

縦10センチくらいの造形で50分かかりました

音は静かで、においも特にしなかったのでPCの横でやってても気になりません
強いて言えばファンの音くらいでしょうか:thinking:
markdown 縦線（|）を記述する方法

縦線（|）の変わりに&#124;を記述する。結果は以下の通りです。
１. ＜記述方法＞
```
| 記号 | 意味 |
|:-:|:-:|
| &#124;  |  OR |
```
２. ＜表示結果＞
| 記号 | 意味 |
|:-:|:-:|
| &#124;  |  OR |
DRF（Django REST framework）インストール・セットアップ方法

DRF+Nuxt+MySQLな環境を作るための備忘録
作業ログ的な感じなので説明省いてますので質問がある方はコメントください。

## インストール

requirements.txt

```bash
djangorestframework==3.13.1
Markdown==3.3.7
django-filter==21.1
```

DRFをインストール

```bash
$ pip install -r requirements.txt
```

## プロジェクト・アプリ作成

startprojectはconfigなど別ディレクトリに作成

```bash
django-admin startproject config .
```

```bash
python manage.py startapp apiv1
```

ユーザー追加

```bash
python manage.py createsuperuser --email xxx@toyscreation.jp --username xxx
> XXX
```

## 初回セットアップ

### アプリ共通

django/config/settings.py

※ ドメインでアクセスを制限、ワイルドカードにするとセキュリティが甘いのでドメインが確定後に修正が必要

```bash
ALLOWED_HOSTS = ['*']
```

INSTALLED_APPSにDRFの`rest_framework`とアプリの`apiv1.apps.Apiv1Config`を追加

```bash
INSTALLED_APPS = [
...
    'rest_framework',
    'apiv1.apps.Apiv1Config',
]
```

日本に変更

```bash
LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'
```

CORSの設定

```bash
CORS_ORIGIN_WHITELIST = [
    'http://localhost:3000',
]

CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
```

URLsの設定

django/config/urls.py

```
urlpatterns = [
...
    path('api/v1/', include('apiv1.urls'))
]
```

## DB設定

django/config/settings.py

```bash
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'recrowdfunding',
        'USER': 'morita_toyscreation',
        'PASSWORD': 'Toys#2022',
        'HOST': 'db',
        'PORT': '3306',
    }
}
```

マイグレーションファイルを作成し、マイグレーション

```bash
docker-compose run web ./manage.py makemigrations
docker-compose run web ./manage.py migrate
```

## 開発・本番環境対応

config/settingsディレクトリを作成し各環境ファイルを作成、DBやログを各環境に合わせて変更

```bash
$ mkdir config/settings
$ cp ../settings.py local.py
$ cp ../settings.py development.py
$ cp ../settings.py production.py
```

manage.py、asgi.py、wsgi.pyのDJANGO_SETTINGS_MODULEを修正、デフォルトはローカルを読み込む。

```bash
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.setting')
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.local')
```
## 起動

```bash
python manage.py runserver 0.0.0.0:8000
```


本番実行は`--settings=config.settings.production`を指定することで本番設定ファイルを読み込む。

```bash
python manage.py runserver --settings=config.settings.production 0.0.0.0:8000
```
mayaのUltraShapeのパラメータと式の関係について


# はじめに
mayaのsupershapeオブジェクトには「スーパー楕円」「球面調和」「ウルトラ」を表現することが可能で、各パラメータと数式との関係についてのメモです。オートデスクの日本語のサイトには式との関係について記載がなく、不便だったので使いながらの確認結果です。そのため、正しくないかもしれません。

# スーパー楕円
式の確認
https://en.wikipedia.org/wiki/Superellipse
より、下式で定義される。
![SuperEllipse](https://wikimedia.org/api/rest_v1/media/math/render/svg/2b21da32fe407ff5714620b26c50343d21afed15)
ここで、a,b,nがパラメータで、a=1,b=1として省略して、nについて、5 3 2 1.5 1 0.7 0.5 0.3としたときの図が下図となる。
![sample](https://upload.wikimedia.org/wikipedia/commons/c/ce/Superellipse.svg)
mayaでV指数は正の値で、増加すると十字形に近づく。
2のときに、n=1と一致し、
1のときに、n=2と一致することから、
2*(1/V指数)=nと推定

見た目的には合ってると思う。
※負の値でも、フリーズせず、何かを出力するのは驚き。

# 球面調和
確認中

# ウルトラ
式の確認
https://en.wikipedia.org/wiki/Superformula
より、半径rは角度φの下式で定義される。
![SuperFormula](https://wikimedia.org/api/rest_v1/media/math/render/svg/9c039b59736018b4070d538af1af9a929ff97693)
ここで、a,b,m,n1,n2,n3がパラメータで、a=1,b=1として省略して、m,n1,n2,n3について、例えば、3 4.5 10 10としたときの図が、左上の角の丸い三角形に対応する。
![sample](https://upload.wikimedia.org/wikipedia/commons/a/a0/Sf2d.png)

これがmayaのどのパラメータに対応しているか。![スクリーンショット 2022-06-22 15.12.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510257/4c95e0ca-3249-7dd3-9384-9cee4339339f.png)
①シェイプを「ウルトラ」に変更する。
②ウルトラの水平について、乗数１と指数１と指数２を無視するため、ミキサーを1.0にする。
③乗数２を3（mに対応）にする
④指数３を10にする(n2に対応)
⑤指数４を10にする(n3に対応)
⑥指数５を0.222にする(n1の逆数に対応,指数５=1/n1)