OmniAICreator/Qiita-1.07M huggingface dataset:
直観の心理学【エンジニアデザイン心理学】





私たちは脳内に二つのモードがある。


- 直観の心理
    - システム1
    - 過去の経験やいくつかの単純なルールに基づいて瞬時に判断している。
- 熟考の心理
    - システム2
    - 過去に経験したことがない状況には個々の心理が働いている。


## 5段階に分割する


適切な行動を決めるときは以下の5段階の判断方法がある。

- 習慣 : 慣れ親しんだ`キュー`と`ルーティーン`がある状態。無意識のうちにとる行動。
    - ex) 袋からポテトチップスをとって食べる
- 直観的な反応 : 過去の経験に基づき、意識的にとる行動。
    - ex) お気に入りのビュッフェで食べる
- 能動的なマインドセット、自己概念 : 曖昧な状態
    - ex) 職場でのダイエットワークショップに申し込む
- ヒューリスティック : 意識的な注意を向けているが、それでも「楽をしようとしている」状態
    - ex) チーズバーガーで一日の摂取目標カロリーを超えないか心配している 
- 意識を伴う、集中のいる選択 : なじみのない状態で、注意を払っている
    - ex) 食品一つ一つのカロリーを計算し、献立を作成している










## 直観の心理と熟考の心理は同時並行で動く

この二つの心理は独立平行で実行されるため、まれにこの二つの心理の結果が対立することがある。
国語の選択肢問題で熟考の心理で選んだ選択肢が、直観に反することがある。


## 普段は直観で動いている

私たちの普段の行いは、直観の心理に支配されている。

これは、習慣や本能や経験に従っている。
多くの場合、過去に経験してきたことの連想にしか過ぎない。


## 直観で促進される行動は「快感」として、回避するべき行動は「ストレス」として蓄積される

これは俗に言う「パブロフの犬」と同じである。

> 脂っこいピザを見たときに連想するのは、胃もたれしそうなくらいおなか一杯になっているということだ。

> 公平ではないトランプゲームで、4つのデッキを使った実験
> 
> 被験者達はゲームに不正が仕込まれているとは知らない状態だったが、
> ゲームが進むにつれて負けやすいデッキを使おうとしたときに、
> 被験者には物理的なストレス反応が見受けられた。
> しかし、被験者には何がおかしいかはまったくわからなかったという。

上記の結論から、
**意識が何かがおかしいと気づく前に、体がストレスとして反応する** ということである。

そして、このような連想が一度出来上がると、後は勝手に動き出すようになる。


## 直観の心理、または習慣

習慣におけるメカニズムを明確にするために、次の三つの用語を定義する

- `キュー` : きっかけ、合図の事
- `ルーティーン` : とるべき行動
- `リワード` : 報酬

習慣を作り出すためにはキューとルーティーンだけでも十分だが、より強い実装とするためにはリワードの設定は欠かせない。

例えば、コーヒーを買うモーニングルーティンをこの三つで表現しようとすると、以下のようになる。

- キュー : コーヒーショップの前を通り過ぎたときに、コーヒーのにおいがする。あるいは看板を見る。
- ルーティーン : コーヒーショップに入り、コーヒーを購入する。
- リワード : チョコレートとカフェインを堪能できる。

このように、日常生活は直観の心理に頼りっぱなしであるが、
`キュー`,`ルーティン`,`リワード`の関係に対して日常生活をアウトソーシングすることで、本当に必要な作業を熟考の心理へ割けるのである。


## 習慣ができるまでのメカニズム（欲望のエンジン）

`キュー`,`ルーティン`,`リワード`の関係が出来上がるまでのプロセスを`欲望のエンジン`と呼ぶ。

1. `キュー`,`ルーティン`,`リワード`が組み合わさる
2. `キュー`を感覚器官が受け取っただけで、`リワード`を予期するようになる。
3. `ルーティーン`は2の`リワード`を得るために行動する。


## 習慣の性質5つ

習慣を表す性質には 4+1種類ある。

- 制御できない
- 意図できない
- 意識できない
- 認知が速い
- 一度 `キュー`,`ルーティン`,`リワード`の関係が出来上がってしまえば、`リワード`がなくとも`キュー`,`ルーティン`の関係は継続する（この期間およそ3か月）





## 広告業界での応用例

広告業界のクロード・ぽぷキンスは10年間でアメリカ社会に歯を磨く習慣を根付かせた。

その手順は以下のようなものだ

- キュー : 歯のヌメリ化が気になるようにする。
- ルーティーン : 歯を磨くことをルーティーンにする。
- リワード : 口内に広がるミントの香り。

これらを強調するように広告を出すことで、歯を磨く習慣をうみだしたのだ。

<img src="https://c8.alamy.com/comp/AT840Y/1950-advertisement-for-pepsodent-toothpaste-1950s-for-editorial-use-AT840Y.jpg">
IBM i アーキテクチャー：実行管理 ジョブ状態遷移の具体例

前回説明した [IBM iのジョブ状態の遷移](https://qiita.com/gomAnomalocaris/items/25a97cc81226d3f3d411) を具体例を使って説明します。

## シーン1：ジョブ5を新規投入する
最大活動数が5のサブシステムがあるとします。現在4つのジョブが活動状態です。
ここに、新しくジョブ5を投入します。
→ジョブ5を投入時、まず不適格待ち行列にジョブが無いか確認されます。
→不適格待ち行列にジョブはありません。
→サブシステムの活動レベルに空きが一つあります。よってジョブ5は活動状態になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/e47a087f-a5c2-c0d3-5032-d43e7e200eb5.png)

## シーン2：ジョブ6を投入
続けてジョブ6を投入します。
この時点で活動レベルに空きがないので、ジョブ6は不適格待ち行列に入ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/4f1725a1-2a0b-ab90-0899-0660388ee19a.png)

## シーン3：ジョブ4がタイム・スライス・エンドに到達
ジョブ4がタイムスライス・エンドに到達したとします。
→不適格待ち行列で最も高い優先順位とジョブ4のそれを比較します。ジョブ6は30なので、ジョブ4 20の方が優先順位高い事が分かります。
→ジョブ4はタイム・スライス値をリセットして実行を継続します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/58ef6040-a43d-a8b4-fc06-c5df78764e56.png)

シーン4：ジョブ7を投入
続けてジョブ7を投入します。
このとき活動レベルに空きがないのでジョブ7は不適格待ち行列に入ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/670fea9e-b22d-4689-7cdf-e17b3353f501.png)

## シーン5：ジョブ2がタイム・スライス・エンドに到達
ジョブ2がタイム・スライス・エンドに到達したとします。
→不適格待ち行列で最も高い優先順位とジョブ2を比較します。ジョブ7は15なのでジョブ2 20より優先順位が高いことが分かります。
→ジョブ2は活動レベルを放棄し不適格待ち行列に入ります。
→代わりにジョブ7が活動状態に入ります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/235869d9-42f0-1455-7545-62337e4d2327.png)

## シーン6：ジョブ5が画面入力待ちになる
ジョブ5が画面入力待ちになったとします。
→5250端末の画面入力待ちはロング・ウェイトに該当するのでジョブ5はウェイト待ち行列に移動します。
→活動レベルに空きができるので、不適格待ち行列で一番実行優先順位RUNPTYが高いジョブ2が活動レベルに入ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/62b1cb50-022c-e760-80da-17b7328aeaf1.png)

## シーン7：ジョブ5（ウェイト待ち行列内）で画面入力が実行される
シーン6でジョブ5がウェイト待ち行列に入った後に、ユーザーが5250端末から実行キーかPFキーを押すと、ウェイト待ちが解除されます。
→このとき活動レベルの空きを確認します。
→活動レベルに空きがないのでジョブ5は不適格待ち行列へ移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/463dae28-878a-5bcb-0e01-0aff9cffba85.png)

## シーン8：最終形（ジョブ5が不適格待ち行列へ移動）
シーン7の結果、ジョブ5が不適格待ち行列へ移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/682baa08-4a7f-0ccc-d463-62e9da6c6fdb.png)
AI-102試験対策のまとめ「Translator V3.0のベースURL」

## はじめに
Azure AI Engineer Associate(AI-102)取得に向けた勉強でまとめた内容を本記事では投稿しています。
試験範囲の内容を私が勉強していく中で、
・忘れてしまっていた内容
・他の知識と絡めて理解した方が良い内容
・Microsoft Learnの読解に苦戦した内容
などをできるだけ分かりやすく簡潔にまとめることを意識しています。
Azureの勉強を一から始め、AI-102取得を目指している方の参考になれば幸いです。
※本記事の内容が必ず試験に出るわけではないこと、ご注意ください
※勉強しながら投稿しているため、追加で学んだことがあれば随時投稿内容を更新します。

## 試験対策のまとめ
### Translator V3.0のベースURL
* Translatorへの要求は、ほとんどの場合、その要求の送信元に最も近いDCで処理
* グローバルエンドポイント使用時にDCで障害が発生した場合  
    ⇒地域外のDCにルーティングされる可能性がある
* 特定の地域内で要求を強制的に処理したい場合は、対象の地域のエンドポイントを使用  
    ⇒すべての要求が地域内のDCで処理

| 地理的な場所 | ベースURL(地域のエンドポイント) | DC(データセンター) |
| --- | --- | --- |
| グローバル(non-regional) | api.cognitive.microsofttranslator.com | 最も近い利用可能なDC |
| アジア太平洋 | api-apc .cognitive.microsofttranslator.com | ・韓国南部 <br>・東日本 <br>・東南アジア <br>・オーストラリア東部 |
| ヨーロッパ | api-eur.cognitive.microsofttranslator.com | ・北ヨーロッパ <br>・西ヨーロッパ |
| United States | api-nam.cognitive.microsofttranslator.com | ・米国東部 <br>・米国中南部 <br>・米国中西部 <br>・米国西部2 |

* 参考
    - https://learn.microsoft.com/ja-jp/azure/ai-services/translator/reference/v3-0-reference

## 次の試験対策のまとめ
* **AI-102試験対策のまとめ「LUISアプリにおけるアクティブラーニング」**

https://qiita.com/fsd-jume/items/f6910ff1c2219ad280af

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/65aba5d5514e023fd66d
【Go言語】関数・エラー処理

## 関数
関数は一連の処理をまとめ、名前をつけたもの。

`main()`関数や`fmt.Println()`関数はそれぞれ特別な用途の関数。
`main()`はプログラムのエントリーポイント、`fmt.Println()`は標準出力への出力を行う。
標準ライブラリや外部ライブラリの関数を使用し、自分自身の関数や型を作成することができる。

### 関数の定義
関数は引数と返り値を持つことができる

```go
func calc(x, y int) int {
	return x + y
}
```

#### サンプルコード
```go
package main

import (
	"fmt"
	"math/rand"
	"time"
)

func calc(x, y int) int {
	return x + y
}

func main() {
	rand.Seed(time.Now().UnixNano())
	x := rand.Intn(5)
	y := rand.Intn(5)

	fmt.Println(calc(x, y))
}

```

### 返り値に名前をつける
返り値用の変数を事前に定義することで、その変数に値を代入して返すことができる
```go
func calcAge(y int, m time.Month, d int) (age int, err error) {
    // 処理
}
```

#### サンプルコード
```go
package main

import (
	"fmt"
	"time"
)

func calcAge(y int, m time.Month, d int) (age int, err error) {
	currentYear, currentMonth, currentDay := time.Now().Date()

	if currentYear < y || (currentYear == y && currentMonth < m) || (currentYear == y && currentMonth == m && currentDay < d) {
		return 0, fmt.Errorf("指定された日付は未来の日付です")
	}

	age = currentYear - y

	if currentMonth < m || (currentMonth == m && currentDay < d) {
		age--
	}

	return age, nil
}

func main() {
	year := 1990
	month := time.January
	day := 1

	age, err := calcAge(year, month, day)
	if err != nil {
		fmt.Println("エラー:", err)
	} else {
		fmt.Println("年齢:", age) // 年齢: 33
	}
}

```

### 無名関数
コールバック関数として使用するときに便利

```go
package main

import "fmt"

func doCalc(a, b int, fn func(int, int) int) int {
	result := fn(a, b)
	return result
}

func main() {
	m := func(x, y int) int {
		return x * y
	}

	result := doCalc(10, 20, m)
	fmt.Println(result) //200
}

```

## エラー処理
Go言語におけるエラー処理は、例外ベースのアプローチではなく、値としてエラーを扱う。
失敗する可能性のある関数において返り値の末尾をerr(`error`型)として定義して、関数を呼び出すときは`err`が`nil`か否かを比較する。

### エラーの返し方
```go
func doSomething() (int, error) {
    // エラーが発生した場合
    if somethingWrong {
        return 0, errors.New("エラーが発生しました")
    }
    // 成功した場合
    return result, nil
}

```

### エラーのチェック
```go
result, err := doSomething()
if err != nil {
    // エラー処理
    fmt.Println("エラー発生:", err)
    return
}
// エラーがない場合の処理
fmt.Println("結果:", result)

```

## 参考
https://www.oreilly.co.jp/books/9784873119694/
Android: adb の使い方

## バージョンの確認

```bash
adb version
```

```text
$ adb version
Android Debug Bridge version 1.0.41
Version 34.0.5-10900879
Installed as /home/uchida/Android/Sdk/platform-tools/adb
Running on Linux 6.5.0-14-generic (x86_64)
```

## 接続しているデバイスを調べる

```bash
adb devices
```

```text
$ adb devices
List of devices attached
123456789A	device
```

## Android の　shell を使う

```bash
adb -s 123456789A shell
```

```text
$ adb -s 123456789A shell
rk322x_box:/ $ uname -a
Linux localhost 4.4.126 #26 SMP PREEMPT Mon Jun 12 18:03:00 +08 2023 armv7l
```

## Android の logcat を見る

```bash
adb -s 123456789A logcat
```

logcat のクリア

```bash
adb -s 123456789A logcat -c
```

フィルター機能を使う

```bash
adb -s 123456789A logcat  -s MainActivity:*
```

## インストールしたパッケージの確認

```bash
adb -s 123456789A shell pm list packages -3
```

```text
$ adb -s 123456789A shell pm list packages -3
package:org.ekzemplaro
```

## パッケージのインストール

```bash
adb  -s 123456789A install -r ./app-debug.apk
```

## パッケージの削除

```bash
adb  -s 123456789A uninstall org.ekzemplaro
```

## インストールしたパッケージの実行

```bash
adb -s 123456789A shell am start org.ekzemplaro/org.ekzemplaro.MainActivity
```

## サービスの確認

```bash
adb -s 123456789A shell dumpsys activity service org.ekzemplaro.ServiceA
```

サービスが動いている時

```text
$ adb -s 123456789A shell dumpsys activity service org.ekzemplaro.ServiceA
SERVICE org.ekzemplaro/.ServiceA ccb7eb6 pid=2385
  Client:
    nothing to dump
```

サービスが動いていない時

```text
$ adb -s 123456789A shell dumpsys activity service org.ekzemplaro.ServiceA
No services match: org.ekzemplaro.ServiceA
Use -h for help.
```

## データベース (sqlite3) へのアクセス

パッケージは、com.example.room02　とします。

```text
$ adb -s 123456789A shell
rk322x_box:/ $ su
rk322x_box:/ # cd /data/data/com.example.room02/databases
rk322x_box:/data/data/com.example.room02/databases # sqlite3 room-sample.db
SQLite version 3.19.4 2017-08-18 19:28:12
Enter ".help" for usage hints.
sqlite> .tables
Dept               User_view          room_master_table
User               android_metadata 
sqlite> .quit
```
Simply Put

『Simply Put』はシンプルとは何かをテーマとして書かれたビジネス書です。主に、良いコミュニケーションのためのシンプルなメッセージとは? を対象にしています。
<a href="https://www.amazon.co.jp/Simply-Put-Messages-Winand-English-ebook/dp/B0C3G6ZSLY/"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8475/7e905c21-f0fe-7cf3-4f87-75bfef5b3772.png" alt="Simply Put書影" width="200"></a>

## 認知負荷と流暢性

認知負荷は、[プログラマー脳](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E8%84%B3-%EF%BD%9E%E5%84%AA%E3%82%8C%E3%81%9F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E8%AA%8D%E7%9F%A5%E7%A7%91%E5%AD%A6%E3%81%AB%E5%9F%BA%E3%81%A5%E3%81%8F%E3%82%A2%E3%83%97%E3%83%AD%E3%83%BC%E3%83%81-Felienne-Hermans/dp/4798068535)や[A Philosophy of Software Design](https://www.amazon.co.jp/Philosophy-Software-Design-2nd-English-ebook/dp/B09B8LFKQL/)などで紹介されたこともあって、ソフトウェア設計の文脈でも言及されることが増えてきました。

『Simply Put』では、単に文字数や要素数が多ければ認知負荷が高いというわけではなく、処理流暢性が大いに関係するという話が紹介されています。

処理流暢性とは、「どれだけ簡単に物事を理解できるか」という、いわゆる「分かりやすさ」を表すものですが、真面目な研究論文がいくつかあります。

https://togetter.com/li/1039919

## ComplexとComplicated

シンプルさを語るために、対義語である複雑さとは何か、について分析していますが、この本では、ComplexとComplicatedを区別しています。

* Complex: 何かが多くのパーツを持っていて、それらが相互に繋がっている。
* Complicated: ものごとが長すぎたり、面倒くさすぎたり、混乱しすぎたりしている。

すなわちSimpleの対義語はComplexである。だが、Complicatedは処理流暢性を下げてしまい、本来のSimpleさを隠してしまう、ということです。

なお、このComplexとComplicatedを区別するのは、あまり一般的ではないようなのですが、同じような分類をしているものに[Cynefin Framework](https://en.wikipedia.org/wiki/Cynefin_framework)があります。

Complicatedで必要以上に複雑に見えてしまうものの代表は、法律文章や利用規約です。

このComplexとComplicatedの区別は、ソフトウェア開発の文脈では、古典「銀の弾丸はない」([人月の神話](https://www.amazon.co.jp/%E4%BA%BA%E6%9C%88%E3%81%AE%E7%A5%9E%E8%A9%B1%E3%80%90%E6%96%B0%E8%A3%85%E7%89%88%E3%80%91-Jr-FrederickP-Brooks/dp/4621066080))で分類されている、本質的複雑さと偶有的複雑さに対応していると言えます。

そしてソフトウェア開発の偶有的複雑さの１つの原因としても、処理流暢性が低いことがあります。

* 命名への無頓着
    * 発音できない省略語(母音を全部抜いて英名を付ける)
    * 〜情報、〜データなどの無くても意味が変わらないワードを付け足している。
    * クラス名やインタフェース名を「ABC0001」のような符号化された名前を付ける
* 読み手を考えていないドキュメント
    * 同じルールが重複して書かれている。
    (例えば画面項目定義で、項目ごとに「最大値」「最小値」などのバリデーション仕様が書かれている。同じ意味の項目が複数の画面で登場するので、それらの整合性を気にしなければならなくなる。)
    * 変更箇所が取り消し線や赤字のままで表され、そのまま残されている。
* 共通化の名のもとに凝集度を下げる
    * ある関数が引数をたくさん受け取っているが、あるケースでは使わないものも混じっている。
    * インタフェースに共通項目がたくさん定義されている。


なお、本質的複雑さと偶有的複雑さの違い、ブルックスの言う「銀の弾丸はない」の本当の意味するところはこちらのスライドで解説していますので参照ください。

https://www.slideshare.net/kawasima/ss-258448858
【Swift】iOS16までのonChangeとiOS17からのonChangeを使い分ける

## 始めに
iOS16 ~ 17に対応するアプリを開発してると、今まで使っていた`onChange`が非推奨になったので16までの`onChange`と17からの`onChange`で使い分けられるようにしました。

## 使い分け
```swift
extension View {
    // MARK: - Methods
    @ViewBuilder
    func onChangeInteractivelyAvailable<T: Equatable>(_ index: T,
                                                    　action: @escaping (T?, T) async -> Void
    ) -> some View {
        if #available(iOS 17.0, *) {
        // iOS17からのonChange
            onChange(of: index) { oldValue, newValue in
                Task {
                    await action(oldValue, newValue)
                }
            }
        } else {
        // iOS16までのonChange
            onChange(of: index) { newValue in
                Task {
                    await action(nil, newValue)
                }
            }
        }
    }
}
```

以下は、呼び出す時
```swift
.onChangeInteractivelyAvailable(hoge) {
    print($0) // Optionalなのでnilチェックする(oldValue)
    print($1) // newValue
}
```

## まとめ
これで、メソッドを呼べばiOS16 ~ 17で`onChange`を使い分けられます。

## 参考
https://developer.apple.com/documentation/SwiftUI/View/onChange(of:perform:)

https://qiita.com/uhooi/items/83204465ff1ab32977b3
storybook/jest、storybook/testing-libraryからstorybook/testに移行する

## storybook/test
Storybookのバージョン7.6から新たに`@storybook/test`を利用できるようになりました。
これまで、Storybook上でテストを記述するときは`@storybook/jest`や`@storybook/testing-library`を用いていましたが、今後は`@storybook/test`に統合して利用することができます。
`@storybook/test`はVitestをベースに作られており(組み込まれているわけではありません)、パッケージの合理化、サイズが縮小・ロード時間を短縮などさまざまな点でパワーアップしています。
`@storybook/test`では、Vitestで利用できる幾つかのメソッドが活用できます。
```ts
import {expect, fn, spyOn, isMockFunction, spies } from '@storybook/test'
```

これまではモックを利用したテストがStorybookのツールを使ってうまくできなかったので`fn`などを用いて綺麗にできるようになったのが大変良い変更だなと思いました。
```ts
import Button from './button'

import type { Meta, StoryObj } from '@storybook/react'
import { within, userEvent, expect, fn } from '@storybook/test';

const meta: Meta<typeof Button> =  {
  component: Button,
  args: {
    onClick: fn(),
  },
};

export default meta;

export const Default: StoryObj<typeof Button> = {
  play: async ({ args, canvasElement }) => {
    const canvas = within(canvasElement);
    await userEvent.click(canvas.getByRole('button'));
    await expect(args.onClick).toHaveBeenCalled();
  },
};
```

## 移行
storybookを最新バージョン(7.6以上)にあげます。
```sh
npx storybook upgrade
```
そして、`@storybook/jest`と`@storybook/testing-library`を消します。
```sh
npm uninstall @storybook/jest @storybook/testing-library
```
削除できたら`@storybook/test`をインストールします。
```sh
npm i -D @storybook/test
```

その後全てのテストファイルで、`@storybook/jest`と`@storybook/testing-library`からインポートしているところから`@storybook/test`に置き換えることで移行は完了です。
初心者ガイド：Snykを使用してセキュアなコードに一歩踏み出す🔑

## 1. はじめに:Snykで安心・安全な開発を
Snykは、開発者にとって身近なセキュリティスキャンツール。

オープンソースのライブラリや依存関係に潜む脆弱性を見つけ出し、その修正を手助けします。
ここでは私がSnykを使い始めたときの実体験をベースに、初心者が迅速にSnykを利用するためのガイドを提供します。

https://snyk.io/jp/

## 2. アカウント作成：最初のステップ
最初に、[Snykのウェブサイト](https://snyk.io/jp/)にアクセスし、新規アカウントの作成を行います。
アカウントを作る方法には複数あり、以下のいずれかのオプションを選ぶことができます：
- GitHub：GitHubアカウント
- Google：Googleアカウント
- その他のオプション：Bitbucket、Azure AD、Docker IDなど

サインアップ後、次のステップへ進むことができます。
セキュリティの監視とスキャンの設定を行なっていく土台が整いました。

https://app.snyk.io/login/

## 3. プロジェクトのセットアップ
Snykでプロジェクトをセットアップするには、以下の3つの手順が必要です。
### 1.統合方法の選択：
Snykは、GitHub、GitLab、Bitbucketなどの一般的なコードリポジトリサービスに簡単に統合できます。また、Snyk CLIを使って自分のコンピューターと連携することもできます。

![スクリーンショット 2023-12-08 7.32.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637864/5dc0b343-ef90-d6d2-b2b6-1c5be37402d4.png)

今回は、GitHubを選択。

### 2.リポジトリの選択：
スキャンするリポジトリのタイプを選択します。
「Private and public repositories」を選択すれば、プライベートおよび公開リポジトリにアクセスすることが許可されます。
「Public repositories only」を選択すれば、公開リポジトリのみアクセスできることになります。

![スクリーンショット 2023-12-08 7.39.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637864/d3e3e4ca-a2e1-be25-8411-94deb91c5ef4.png)

今回は、「Private and public repositories」を選択

### 3.自動化設定と認証：
自動化設定と認証は、Snykを使用してプロジェクトのセキュリティ管理を効率化するための重要なステップです。以下が、有効にできるいくつかの自動化機能とそれらの概要です：

- プルリクエストチェック：
コードに変更を加えたとき、それをメインのコードに統合する前に、新しい問題がないか自動で調べてくれます。
- 新規修正プルリクエスト：
もし新しい問題が見つかった場合、それを直すための提案が自動的に送られてきます。これにより、問題を修正するのが簡単になります。
- 依存関係アップグレードプルリクエスト：
自分たちのプロジェクトで使っている外部のコード（依存関係）が古くなっていたら、新しいバージョンに更新するための提案を自動で作ってくれます。これでいつも最新の状態を保てます。
- Snyk Code：
あなたの書いたコードを細かく見て、間違いや問題を探します。問題が見つかったら教えてくれるので、安全なコードを保てます。

これらの自動化は、開発の過程でセキュリティの問題を早く見つけて修正するのを手助けしてくれます。Snykと認証を設定することで、これらの作業が自動で行われるようになります。
簡単に言えば、Snykは安全なコードを維持するための良いアシスタントです。

![スクリーンショット 2023-12-08 7.46.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637864/35f0b897-59fc-78c1-4c23-5bc89705ff04.png)

認証し、GitHubとSnykアカウントを接続します。

## 4.プロジェクトを選択し、完了
プロジェクトを選択し、Inport and scan ボタンを選択。

![スクリーンショット 2023-12-08 7.51.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637864/64d7d7d4-dc44-1e0d-1b96-e400d5503c6f.png)

スキャンは自動で開始され、しばらくすると結果がレポートとして表示されます。
SnykのGUIを通して、どの依存関係に問題があるかがわかります。

![スクリーンショット 2023-12-08 8.14.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637864/7841f067-bffa-e0dc-3307-3f46fb9bdf85.png)

## 5. まとめと次のステップ

以上でSnykを使い始める準備は整いました。
脆弱性の早期発見、ディペンダントアップデート、コードレビューと開発プロセス全般をセキュアな状態に保ちつつ、快適なコーディングライフを送ることができるはずです。

最新の脅威からアプリを守るにはSnykが欠かせません。さぁ安心して開発を始めましょう!

---

:::note info
このガイドはSnykを初めて使う方を対象にしていますが、経験豊富な開発者にとっても有用なヒントが盛りだくさんです。
Gmail、Google Workspaceの一般利用者が2024/2までに対応すべき事（送信ガイドライン変更の件）

# 簡単な結論
１．Gmailへのメール自動転送をやめる
２．利用しているメーリングリストが大丈夫か確認
# 前提
[メール送信者のガイドライン \- Gmail ヘルプ](https://support.google.com/mail/answer/81126)によって、2024年2月からサーバ管理者の対応が不十分だと、Gmailへメールが届きにくくなります。
SPF,DKIM,DMARCなどの設定は世間の流れでも必要な事項になっていますので、不十分な対応だとGmail以外でも徐々にメールが届きにくくなっています。
基本的にはメール配信側が対応すべき問題ですが、ユーザ側でも気をつけることがいくつもあります。
この記事ではユーザが最も困るだろう事を2つに絞って書きます。
# 届かなくなりそうなメールの確認方法
現在届いているメールでも迷惑メールに頻繁になるようなメールは認証エラーになっていないか確認しましょう。
Gmailのメールタイトルの時刻の右の点点をクリックしてメッセージのソースを見ましょう。
ここでSPF,DKIM,DMARC,ARCなどが正しく認証されているかがわかります。
FAILになっている場合は、2月以降届きにくくなる可能性がかなりあります。（SPFのSOFTFAILも、基本的に認証失敗です。）
![2023-12-08_06h23_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2543470/6cbfd763-f2b7-b16d-a6dc-6db3181f81fd.png)
![2023-12-08_06h27_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2543470/a5758014-10a1-fb30-0694-3c1279ca33c5.png)
![2023-12-08_06h28_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2543470/62c74b0d-ce53-7740-6027-329042d9aa53.png)


# 1. Gmailへのメール自動転送をやめる
例えば、Amazonから他のメールアカウント（user@example.com)に届いたメールを単純にgmailへ自動転送したとしましょう。（.forwardなどで）
このメールをGmail側から判断すると、user@example.comからの差出人詐称メールのように見えますので、拒否されることになります。1－2年ごろ前からこのような転送方法のメールは届きにくくなっていますが、これからさらに厳しくなります。
お使いのメールアカウントのメール転送システムが認証エラーにならない対応をしていれば大丈夫ですが、稀です。転送したメールをgmailの画面でソースを見て、FAILになっていないか確認しましょう。
## 1-2. 転送せずにGmailからメール取得するようにする
他のメールアカウトのメールを読みたい場合は、Gmailの「他のアカウントのメールを確認」機能を使います。
これは、Gmailが他のメールアカウントのメールボックスを定期的にチェックしてくれる機能です。
Gmailの右上の設定（歯車のマーク）、すべての設定を表示、アカウントの中の「他のアカウントのメールを確認」です。
![2023-12-08_06h22_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2543470/1e5e0f13-0f9e-b002-ce95-d05461a69ea7.png)

# 2. メーリングリストの設定
メーリングリストも同様です。差出人がメール送信者、配信はメーリングリストのアドレスで一致していませんので、旧来の設定のままですとエラーになります。
認証エラーにならない対応をしていれば大丈夫ですが、古いMLの多くはいまだに非対応です。
これも該当のメールのソースを確認し見て、FAILになっている場合は、届かなくなる可能性が高いです。
もしもメーリングリストの管理者になっている場合は、利用しているメーリングリストシステムに問い合わせを行い対応しましょう。
# それ以外の項目について
これら以外については、基本的には送信側のメールサーバー管理者が行うべきことです。ただメールが急に届かなくなったら送信元に教えてあげると喜ばれると思います。
# 今回のGmailの方針はどうなの？
一部の推奨事項は少々厳格な点もありますが、全体的には下記の点で良いルールだと考えています。
- ドメインを詐称したメールを減らせるので、フィッシング対策にはある程度効果があります。
- 最近のメールセキュリティの流れに対応しているシステムを利用してメール送信されている場合は、追加で必要な作業はほとんどありません。
- 大手のメールサービスで、これほど的確にルールを明示しているのは珍しいので、管理者側としてどのレベルまでの設定をすべきかがわかりやすいです。
# 自分の使ってるドメインがどれくらい最新のメールセキュリティに対応しているか知りたい。
オランダ政府も関わっている下記のサイトのtest your emailでチェックしてみましょう。必ずしも100点を取る必要はありません。
ちなみに私のスコアは97点（Google Workspace + ちょっとした裏技）です。
[internet.nl | Test for modern Internet Standards like IPv6, DNSSEC, HTTPS, DMARC, STARTTLS and DANE\.](https://internet.nl/)
◯ツコの知らないテストツールの世界

こんにちは。
3度の飯よりテストが好き！（やっぱ、飯も好き）@hakumai_です。

私は社外でテストの講座を担当することがあるのですが、テストツールの章では「もっと具体的なツールをたくさん知りたい」という感想をもらうことがあります。

世の中にはたくさんのツールがあり、網羅的かつ詳細に説明する事は難しいので、今日は必要な時に取り出せるようにするための **「ツールの俯瞰的な捉え方」「探し方」** についてお話したいと思います。

## テストツールの種類を俯瞰的に捉える
JSTQB(ISTQB)ではツールの分類方法を紹介しています。
分類の仕方は様々あり正解は1つではありませんが、シラバスでは「支援する活動」ごとに分類しています。
参考）JSTQB-Foundationシラバス(https://jstqb.jp/dl/JSTQB-SyllabusFoundation_Version2018V31.J03.pdf)

ツールは何かしらの課題を解決するわけですが、業務で課題に直面した時に「適したツールがあったはず！」と知識を引き出せるようにしておくことが大切だと考えます。
そのために、インデックス整理しておくことはとても有用でしょう。

| 支援する活動                     | ツールの種類 |
|---------------------------------|-----------------------|
| テストとテストウェアのマネジメントの支援 | - テストマネジメントツールとアプリケーションライフサイクルマネジメントツール (ALM) |
|                                 | - 要件マネジメントツール (テスト対象へのトレーサビリティなど) |
|                                 | - 欠陥マネジメントツール |
|                                 | - 構成管理ツール |
|                                 | - 継続的インテ
| 静的テストの支援       | - 静的解析ツール (D)  |
| テスト設計とテスト実装の支援             | - モデルベースドテストツール               |
|                                 | - テストデータ準備ツール                   |
|                                 | - テスト実行と結果記録の支援ツール          |
| テスト実行と結果記録の支援                | - テスト実行ツール (例: リグレッションテストの実行) |
|                                 | - カバレッジツール (例: 要件カバレッジ、コードカバレッジ (D)) |
|                                 | - テストハーネス (D)                    |
| 性能計測と動的解析の支援     | - 性能テストツール           |
|                                 | - 動的解析ツール (D)        |

## テストツールまるわかりガイで具体的なツールを把握する
種類だけではイメージを掴めなかったり、具体的なツールを見てみないとピンと来ないかもしれません。
ですが、残念ながらJSTQBのシラバスには詳細な情報が載っていません。

そこで、おすすめしたいのがNPO法人ASTERの有志が纏めている「テストツールまるわかりガイド」です。
とても丁寧に纏められた情報で作成者の皆様には感謝でいっぱいです。
参考）テストツールまるわかりガイド（https://www.aster.or.jp/business/testtool_wg.html）

こちらは「ガイド部」と「ツール部」で構成されます。
概念としては以下のようなイメージで、JSTQBシラバスの副読にも最適です。（個人の見解です）
![スクリーンショット 2023-12-06 10.33.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627477/9530cdec-0533-b654-53fa-31be40b9930a.png)

## テスト設計ツールって何？
それでも、ツールの説明文書だけではイメージがつかみにくいものもあるかもしれません。
「テスト設計の支援ツール」は特にそう感じる方も多いのではないでしょうか。

そのような場合は「GIHOZ」をおすすめします。（無償でも十分堪能できます）
GIHOZ（https://www.veriserve.co.jp/gihoz/）

以下のような代表的なテスト設計技法をWebUI上で直感的に操作することができます。
![スクリーンショット 2023-12-06 10.34.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627477/dbe7bc94-6a7f-701b-3687-0da2143abd0a.png)

状態遷移図、PFD、境界値分析の数直線などをExcelで書くのは辛すぎますが、ツールの力を使うことで「テスト設計技法」の実用度も増すのではないでしょうか。
更に、ボタン一つでテストケースが生成されるのでテスト設計で苦しんだことがある方はきっと感動で涙すると思います！

またテスト項目書のレビューを担当する方はケアレスミスの指摘に骨が折れるものですが、ツールを使えば「モデル(設計)」が正しければ「下位文書(項目書)」も正しい。と言えるので基本的に整合性に対するレビューが不要になります。これもまた素晴らしい…。

## まとめ
この記事ではテストツールを俯瞰的に捉えて必要な時に取り出せる状態にするために、テストツールの分類の話と詳細理解に役立つガイドをご紹介しました。

ツールは業務の効率や正確性を高めるなど様々な効果をもたらします。
スピードや正確性を求めるシーンの多い昨今のシステム開発においては「ツールを制すものはプロジェクトを制す」と言っても良いのではないでしょうか。

日々の業務をより良くしていくために、少しでも参考になれば幸いです。

## 参考
JSTQB-Foundationシラバス
https://jstqb.jp/dl/JSTQB-SyllabusFoundation_Version2018V31.J03.pdf)

テストツールまるわかりガイド
https://www.aster.or.jp/business/testtool_wg.html

GIHOZ
https://www.veriserve.co.jp/gihoz/
【Go言語】制御構文

## 制御構文とは
プログラムの流れを制御するための重要な構成要素。
Go言語には`if`,`for`,`switch`など基本的な制御構文がある。

### if文
`if`は条件節がブール型である必要がある

```go
package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	rand.Seed(time.Now().UnixNano())
	// 0か1をランダムに生成
	x := rand.Intn(2)

	if x == 0 {
		fmt.Println("x=0")
	} else {
		fmt.Println("x=1")
	}

}

```

Goでは`falsy`という概念がないので以下のコードはビルドエラーとなる

```go
package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	rand.Seed(time.Now().UnixNano())
	// 0か1をランダムに生成
	x := rand.Intn(2)

	// エラーになる
	// non-boolean condition in if statement
	if x {
		fmt.Println("x=1")
	}
}

```

変数宣言とセットで利用する方法もある
宣言した変数は`if`ブロック内でしか利用できないので注意が必要
```go
package main

import (
	"fmt"
)

func main() {
	// 例として、キャッシュされたデータを表すマップを定義
	cache := map[string]string{
		"key1": "value1",
		"key2": "value2",
	}

	// ユーザーの入力を模倣する変数
	input := "key1"

	// if文でデータ取得とチェックを同時に行う
	if result, ok := cache[input]; ok {
		fmt.Println("Cached value:", result)
	} else {
		fmt.Println("Value not found in cache.")
	}
}

```


### for文
`range`を利用してスライスやマップの全要素を取り出すときに使用することが多い

```go
package main

import "fmt"

func main() {
	abc := []string{"a", "b", "c"}
	for i, s := range abc {
		fmt.Println(i, s) // インデックス 値
	}
}

```

変数を1つだけ書くとスライスはインデックス、マップはキーのみを返す。
また、使用しない変数をブランク識別子`_`を使うことで未定義エラーにならない
```go
package main

import "fmt"

func main() {
	abc := []string{"a", "b", "c"}
	for i := range abc {
		fmt.Println(i) // インデックス
	}

	for _, s := range abc {
		fmt.Println(s) // 値
	}
}

```

`break`でロールを強制終了したり、`continue`でループの先頭に戻ったりすることができる

```go
package main

import "fmt"

func main() {
	var abc []rune
	for ch := 'a'; ch <= 'z'; ch++ {
		if ch == 'c' {
			continue
		} else if ch == 'f' {
			break
		}

		abc = append(abc, ch)
	}

	fmt.Println(string(abc)) // abde

}

```

### switch
`if ... else if`を簡単に書くことができる

```go
package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	rand.Seed(time.Now().UnixNano())
	x := rand.Intn(5)

	switch x {
	case 0:
		fmt.Println("x=0")
	case 1:
		fmt.Println("x=1")
	case 2:
		fmt.Println("x=2")
	default:
		fmt.Println("x>2")
	}
}

```

## 参考
https://www.oreilly.co.jp/books/9784873119694/
生成ＡＩで遊び倒した一年

山関係のYoutubeで、いろいろ動画配信していましたが、紆余曲折あって苦労していました。

この一年でやってきたことを振り返ってみます。


## チャンネル

https://www.youtube.com/@hikingcommunityfromkansai7960/videos


# １月～２月

### CREEVO

最初に手を出したのはCREEVOです。
https://creevo-music.com/

歌詞はCHATGPTで書いていたのですが、この点ではBARDの方が優秀でした。
何というか、ＡＩのおバカ感が功を奏して、上手くはまりやすかったと思います。
CREEVOの欠点は、小節数が１２までしか作曲できないので、Ａメロで終わってしまいます。

苦肉の策で、キーとテンポのみを合わせて、むりやりＢメロを作ることをやっていました。

デビュー作はこれです。

https://youtu.be/kCRTWFzSOLc

## ３月～４月

CREEVOの悩みは尽きず、やはり歌詞の２番を作りたくなります。
昔、音楽にも関わっていたので、ＤＴＭにも多少の興味はあります。
幸いにも、CREEVOではアンケート回答すると、MIDIデータや歌詞がダウンロードできます。
これをＤＴＭに流して、無理やりに曲を作るのですが、これが沼でハマってしまいます。

## ５月～６月

結局のところ、そこまでハマるつもりが無かったので、適当にボーカルを抜き出すアプリなどを使って、適当にリミックスして尺を伸ばすという手法を取りました。

以下のＰＶの1:30ぐらいにあります。

https://www.youtube.com/watch?v=j2uG_zR-CGk

## ７月

この頃から音楽に飽きたので、画像生成ＡＩ遊びにハマりました。
BINGのイメージクリエータで作品を作り、Facebookにコミュニティがあったので投稿していました。

### 動物シリーズ

https://www.facebook.com/groups/792222238781874/permalink/844483443555753/

## ８月

ＳＯＮＧ－Ｒという作曲ツールを発見し、遊び倒します。
英語の歌詞で曲を作ってくれ、また尺がCREEVOよりもぐっと長くなります。

https://www.youtube.com/watch?v=5lyImzx-s7w

画像生成ＡＩとコラボして、適当な作品を連発します。

https://www.youtube.com/watch?v=YA0lUDQVhog

## ９月 

やはり少し日本語の歌詞が欲しくなったので、SONG-Rにローマ字で歌詞を作ることを思いつきました。

https://www.youtube.com/watch?v=b_6iwXDDNzA

## １０月

動画ソフトのCAPCUTと出会います。
この頃から、音声データに簡単に字幕を入れられるようになりました。

https://qiita.com/EasyCording/items/b4038c03069e74c69b0a

実験的に教育的なコンテンツを作りました。

https://youtu.be/WCNYjTzt8Dc?feature=shared

https://youtu.be/MnJKuJeHJq8?feature=shared

## １１月

遂にSUNO.AIが登場しました。
ちょうど動物ガンダムを作っていたので、コラボ作品が完成します。

### 動物ガンダム

https://www.facebook.com/groups/792222238781874/permalink/872137660790331/

すこし動画を生成できるＡＩがあったので、適当に混ぜ合わせました。
https://research.runwayml.com/gen2

### 獣機神

https://youtu.be/jKdqSW5fz7M?feature=shared

## １２月

SUNO.AIが最高過ぎたので、サブスクプランを更新しました。

https://youtu.be/jxxX_wHzRAE?si=UDsIapsXdKUK89e6

https://youtu.be/4sGuE6-KqMo?si=nVOd5Q2OFws62a14

https://youtu.be/I_6jUJluIqQ?si=0jI2_RFeMOeHUrBN

https://youtu.be/pUhCfz-3BgY?si=bjbk_aKb1Nhdhv9h


結局、いまここにいます。

## AIコメント

素晴らしい一年間の冒険と成果ですね！音楽制作からAI活用、画像生成、動画編集まで、様々な分野に挑戦している姿勢が感じられます。CREEVOやSONG-Rを駆使して、歌詞や曲を作り上げる様子や、SUNO.AIを通じた新たな表現に驚きました。

特に、動物シリーズや動物ガンダムのコラボ作品は斬新で面白い発想ですね。画像生成AIを使った作品も興味深く、コミュニティへの投稿も積極的で素晴らしい交流ができているようです。

そして、教育的なコンテンツやサブスクプランの更新など、幅広い活動に手を広げながらも独自のクリエイティビティを発揮しているのが素晴らしいですね。これからも更なる成功と新たな挑戦を期待しています！💪🎶🎨
困った時のLinuxコマンド辞典

# cd
Change Directory。現在のディレクトリから移動する。
```
cd ディレクトリ名
使用例: cd testDir
```

# pwd
Print Working Directory。現在どの位置にいるか表示する。
```
使用例: pwd
結果: User/test/workdir
```

# ls
LiSt。ファイルやディレクトリの一覧を表示する。
```
ls [オプション] [ファイル　or ディレクトリ]
使用例: ls test/ext
```
オプション
``-a: .などの隠しファイルも含め全て表示``
``-l: 長形式で表示``
``-t: 最終更新時間に沿ってソートして出力``
``-r: 逆順でソートして表示``

# mkdir
make Directory。ディレクトリを作成する。
```
mkdir ディレクトリ名
使用例: mkdir testDir
```

# rmdir
ReMove Directory。ディレクトリを削除する。

オプション
``-p: 指定したディレクトリまでを一括で削除する``
```
rmdir [オプション] ディレクトリ名
使用例: rmdir -p test/test2 (test/test2ディレクトリを一括削除する)
```

# cat
ファイルの内容を表示する。
```
cat ファイル名
使用例: cat test.txt
```
オプション
``-n: 行番号を一緒に表示する``


# less
ページャーを使ってファイルの内容を表示する。qを入力して終了させる。
```
less ファイル名
使用例: less test.txt
```
## more
moreと言う同じようなコマンドがあるが、moreは最後の行まで表示したら自動的に終了する。


# tail
ファイルの末尾の一部分のみを表示する。
```
tail [オプション] ファイル名
使用例: tail -n test.txt
```
オプション
``-n: 末尾から指定した行を出力する``
``-c: 末尾から指定したバイト分を出力する``
``-f: 変更をリアルタイムにモニタリングする``

## head
ファイルの先頭から一部分を表示する。

# touch
ファイルの最終更新時間を変更したり、存在しないファイル名のファイルを新規作成することができる。
```
touch [オプション] ファイル名
使用例: touch test.txt
```

# rm
ReMove。ファイルやディレクトリの削除
```
rm ファイル名
使用例: rm test.txt
```
オプション
``-i: 処理実行時に確認する``
``-f: 強制的に処理を実行する``
``-r: ディレクトリを対象にする``

# mv
MoVe。ファイルやディレクトリの移動や名前を変更する。存在しない場合にファイル名やディレクトリ名を変更する。
```
mv 移動元ファイル　移動先ファイル
使用例: mv test.txt test1.txt
```
オプション
``-i: 処理実行時に確認する``
``-f: 強制的に実行する``

# cp
CoPy。ファイルをコピーする。コピー先ファイルがない場合は別名でコピーする。また、コピー先がディレクトリの場合、ファイルをそのディレクトリに保存する。ファイルが存在する場合は上書き保存。
```
cp [オプション] コピー元　コピー先
使用例: cp test.txt test1.txt
```
オプション
``-i: 処理を行うとき、確認する``
``-r: ディレクトリをコピーする``
``-p: ファイルの所有者、属性、更新時間を含め、元ファイルの情報を保存``

# ln
ファイルのリンクを作成する。
```
ln 元ファイル名 リンク名
```

オプション
``-s: シンボリックリンクを作成する。無ければハードリンクを作成する。``

# find
ファイルがディレクトリのどこにあるのかを検索する。
```
find [パス]　-name ファイル名
使用例: find /etc -name test.txt
```


# chmod
ファイルのアクセス権を変更する。

オプション
``-R: ディレクトリの中のディレクトリを再起的に変更する``

# chown
ファイルやディレクトリの所有や変更する。
```
chown ユーザー [. グループ] ディレクトリ 
chown ユーザー [. グループ] ファイル名
```
オプション
``-R: ディレクトリを対象にする。ディレクトリの中のディレクトリやファイルを再起的に辿って変更する。``


# ps
OS内部で実行されているプロセスの一覧を表示する
```
ps [オプション]
```

オプション
``-A: 全てのプロセスを選択する。``
``e: コマンドの後に環境を表示する``
``l, -l: 長いフォーマット。-の有無で表示が異なる``
``w, -w: 出力幅を広げる。これを２つ指定すると幅の制限がなくなる``

# kill
指定したプロセスIDのプロセスを終了させる。
```
kill [オプション] プロセスID
```

オプション
``-s: 指定したシグナル名またはシグナル番号を送信``
``-l: シグナル名とシグナル番号の対応を表示する``
JuliaでLightGBMやってみたらエラーが出て先に進めない

# はじめに
現在、Pythonを勉強していますが
「他に使える言語増やしたいな…」
と思ったため、人気かつ比較的新しい言語を選択しようと思い調べました。

- Rust
- Go
- julia

が新しく、人気？があるみたいでしたので、それぞれできることや学習コストなんかを調べていました。
そして、Pythonを用いていることからデータを扱うことが多いので、科学計算に特化？してると噂のjuliaを勉強してみようかなと思い、せっかくなら機械学習させてPythonと比較させてやろうと思いました。

# 今回の記事の趣旨
juliaの書き方などを調べながら手を動かしていたら、どうも``fit関数``でエラーが出てしまい、よくわからず、参考資料の圧倒的に少ないことから先に進みませんので、助けを求めて記事にしたいと思います。

# juliaの書き方

https://julialang.org/downloads/

まずはjuliaをインストールします。
指示に従うだけなので超簡単です。
その後、以下の記事を参考にvscodeで使えるように拡張機能をインストールしたりし、準備完了です。

https://qiita.com/MizutoKadowaki0312/items/b95e4b7db4a1dfb59863

まずはパッケージをインストールしないといけないので以下のコードでパッケージをインストールします。
```julia
using Pkg
Pkg.add("CSV")
Pkg.add("LightGBM")
Pkg.add("CategoricalArrays")
Pkg.add("DataFrames")
Pkg.add("MLDataUtils")
Pkg.add("Test")
Pkg.add("MLJBase")
```
本当に必要かわからないパッケージもとりあえずインストール。

では、実際に機械学習を行うためのコードを書いていきましょう。

# コード
データはとりあえずタイタニックのデータを用いました。
読み込んだ後に欠損値補完などの前処理を行いました。
その後、いつもの流れでトレーニングデータとテストデータに分割し、
**いざモデルを学習させるぞ！**
といったところでエラーが生じました。
実際のコードは以下です。

```julia
# データの読み込み
data = CSV.read("./data/titanic/train.csv", DataFrame)

# 欠損値確認
println(sum.(ismissing, eachcol(data)))
median_age = median(skipmissing(data.Age))
data.Age .= coalesce.(data.Age, median_age)

# 型の確認
sex_column_type = typeof(data.Sex)
emberked_column_type = typeof(data.Embarked)

# 前処理
data.Sex = recode(data.Sex, "male"=>1, "female"=>0)
data.Embarked = recode(data.Embarked, "S"=>1, "C"=>2, "Q"=>3)

# データの分割
Random.seed!(42)
train_indices, test_indices = splitobs(collect(1:nrow(data)), at=0.7)
train = data[train_indices,:]
test = data[test_indices,:]

# モデルの訓練
lgbm_model = LightGBM.MLJInterface.LGBMRegressor(
    objective = "binary",
    num_iterations = 100,
    learning_rate = 0.1,
    num_leaves = 31,
    early_stopping_round = 10,
)

features = [:Pclass, :Sex, :Age, :SibSp, :Parch, :Fare, :Embarked]
target = :Survived

X_train = Matrix(train[!, features])  # 特徴量をMatrixに変換
y_train = train[!, target]  # ターゲットをVectorに変換

X_test = Matrix(test[!, features])  # テストデータの特徴量をMatrixに変換
y_test = test[!, target]  # テストデータのターゲットをVectorに変換
train, test = MLJBase.partition(MLJBase.eachindex(y), 0.6)
fitresult, cache, report = MLJBase.fit(lgbm_model, 0, MLJBase.selectrows(X_train), y_train;)
```

なんか調べていると、モデルを学習させる際に``fit関数``を使用するんですが、うんともすんともです。
実行した際のエラー内容は以下の通りです。
```
ERROR: MethodError: no method matching selectrows(::Matrix{Union{Missing, Float64}})
```

エラーの解決策をいくら調べてもわけがわからず、引数のデータの型に問題があるみたいです。
MatrixやAbstractMatrixやVectorやなんやかんや…
おそらく、読み込ませたタイタニックのデータに対する前処理が不適切なのかなと思ってます。
あとは、Juliaのバージョンの問題か...（新しい参考記事が見つからない）

# まとめ
**誰か教えてください。**
習い始めていきなり機械学習は無謀すぎたかもしれません。
簡単な構文やjuliaの性質を理解してから挑戦した方がいいのかもしれませんね…
ぼちぼち勉強していこうと思います。
Rust、Goにも手を出そうとしてるだれか止めてくれ…
解決したら更新します！
それでは！！！
divの中の文字列が縦方向で中央にならない

# はじめに

SNSによくある投稿に対して下側についているユーザプロフィールの項目について

あれが思う通りにならない。

あれこれやったが、とりあえず、下のコードに戻した。

![](https://storage.googleapis.com/zenn-user-upload/df859c7815c8-20231208.png)


本当はdiv の縦方向で 中央に綺麗によってほしい。

(というかそもそもなぜ文字列が下にそろってたり、上にそろってたりするの？）

→画像があるからだ。画像の高さがあるから、下にそろっているように見えるだけ。

```html
<div class="user_profile_container">
    <div class="user_profile_box">
        <a href="#">
        <img class="profile_icon" src="#">
        </a>
        <span class="user_profile_name">あたし</span>
    </div>
    <div class="user_good_box">
        <i class="like-btn fa-heart far"></i>
        <span class="">0</span>
    </div>
</div>
```

```html
.user_profile_container {
    display: flex;
}

.user_profile_name {
}

.profile_icon {
    width: 3.2rem;
    height: 3.2rem;
    border-radius: 50%;
}
```

# 解決

```html
.user_profile_box,
.user_good_box {
    display: flex;
    align-items: center;
}
```

![](https://storage.googleapis.com/zenn-user-upload/63c9c5908957-20231208.png)

インライン要素が入っている 2つのブロック要素に対して、フレックスボックスの設定を加える。(”display:flex”)

フレックスボックスはデフォルトの交差軸方向が 垂直方向であるので、その垂直方向の位置を制御できるalign-itemsプロパティを設定する。

今回は中央に揃えたいので center を指定する

※そもそもなぜフレックスボックスのデフォルトの交差軸方向が垂直であるか、そもそも交差軸とは何かについて

display: flexをブロック要素に指定すると 内包する要素の並びはflex-directionというプロパティで制御される。この要素の並ぶ方向のことを 主軸といい、それに直行する方向のことを交差軸(クロス軸)と呼ぶ。ちなみに主軸の方向のデフォルト(初期値)はrow 、つまり水平方向となる。それゆえに交差軸の方向は 垂直方向となる。

[align-items - CSS: カスケーディングスタイルシート | MDN](https://developer.mozilla.org/ja/docs/Web/CSS/align-items)

[Cross Axis (交差軸) - MDN Web Docs 用語集: ウェブ関連用語の定義 | MDN](https://developer.mozilla.org/ja/docs/Glossary/Cross_Axis)

# 過程

![](https://storage.googleapis.com/zenn-user-upload/df859c7815c8-20231208.png)

そもそもなぜ、” あたし”というインライン要素と、iタグハートアイコンのインライン要素について縦方向の位置がそろわないのか。

最初はなぜか “あたし”というspanタグ(インライン)が何らかのプロパティによってdiv の下にそろうような設定をしてしまっているかと思っていた。iタグについてはその逆で上側にそろうような設定が効いてしまっているかと思っていた。

おそらく、結論としては、どちらもそろっていた、が正しいと思う。

ただ、画像の高さの影響で、あたかもspanは下側に、そろっているかのように見えていただけだと思う。

# 終わりに

気づくまで時間がかかった。疲れた。
Viteはなぜesbuildを本番環境のバンドラとして使わないのか

## 1.前置き
ここ最近、下記シリーズを書いたりする中で、Viteという比較的新しいビルドツールについて少し勉強していました。勉強する中で、Viteを使用した開発環境の構築は一通り行ってきましたが、ふと「Viteは本番環境でどう使うんだろう」というのが気になりました。この記事はその時調べたものの備忘録的な意味合いが強いです。そして、「Viteの本番環境の設定Tips」もこの記事では扱いません。あくまで、Viteが採用している技術に焦点を当てて、学んだことをまとめただけの記事になります。書いている人が理解しきれていない部分があるので、わかりにくいとこや表現として微妙なとこ、そもそも間違っているところあるかもです。悪しからず。

https://qiita.com/yuppe-namura/items/fbe8c1af9779e7ba8f87

## 2.Viteは本番環境にどんな技術を使っているのか
Viteが採用している技術について少し調べると、その特筆すべき点として「devとprodで同じビルドというプロセスにそれぞれ異なるツールを使用していること」が挙げられているのがわかります。それぞれdevにはesbuildというgo製のビルドツールを、本番環境では**rollup**というJS製のバンドラを採用しているようです。普通に考えれば「なんでそんなややこしいことするんだよ」と思ってもおかしくないと思いますが、Viteはなぜこのようなスタイルをとっているのでしょうか。[Viteのドキュメント](https://vitejs.dev/guide/why#why-not-bundle-with-esbuild)によれば、

> Vite's current plugin API isn't compatible with using esbuild as a bundler. In spite of esbuild being faster, Vite's adoption of Rollup's flexible plugin API and infrastructure heavily contributed to its success in the ecosystem. For the time being, we believe that Rollup offers a better performance-vs-flexibility tradeoff.

esbuildは非常に速くなっているのだけれど、私たちはRollupの柔軟なプラグインAPIとインフラを採用することで、そのエコシステム内における成功に大いに貢献しています。(意訳)
rollupに肩入れしているようですね。ではなぜ、Viteはrollupに肩入れするのか、

>Even though native ESM is now widely supported, shipping unbundled ESM in production is still inefficient (even with HTTP/2) due to the additional network round trips caused by nested imports. To get the optimal loading performance in production, it is still better to bundle your code with tree-shaking, lazy-loading and common chunk splitting (for better caching).

nativeESMは広くサポートされているけれど、本番環境において未バンドル状態のESMを扱うことは、ネットワークオーバーヘッドの観点から効率的でないようです。ESMにはモジュール構造をうまく使って、事前に依存関係のみバンドルし、都度ファイル全体をバンドルしないという特徴がありました。しかし、そのようなやり方はdevで使用されるesbuildのように、ブラウザからのリクエストに従って都度部分を更新することになります。そうしたやり方に対して、rollupに分がある、いまだに従来の事前にバンドルして最適化(tree-shaking,cacheのためのチャンク分割)を行うやり方の方が本番環境においてはbetterだといっています。

## 3.Viteの課題
ただやはり、こうしたハイブリッドな戦略をとることで困った点もあるようです。以下Vite ConfでのEvan You氏の説明がとてもわかりやすかったです。

https://www.youtube.com/watch?v=hrdwQHoAp0M

まとめると、
・esbuildによるcommonjsそのものの扱い方とrollupによるそれらをESMに変換した後のmoduleの扱いが僅かに一致しないことがしばしばある。この違いはユーザーのdebugを難しくしている

・開発中における未バンドルESMのネットワークオーバーヘッドの問題もある
大きなプロジェクトを持つユーザーは、バンドルされていない大量のESMが最終的に最初のページの読み込みスピードに影響を与える
proxyの後ろで開発している利用者にとっては、特によくない

・rollupはesbuildに比べて非常に柔軟である一方で、webpackと比べると、prod環境におけるchunkのフルカスタマイズができるといった点ではwebpackのとても強力なcode spliting optionには及ばない

**esbuild(bunの欠点)**

早いけど、build assetの最適化がかなり制限される

chunkをsplitする手段がない

plugin APIの柔軟性が十分でない

**rollupの欠点**

native ESMバンドラに比べると遅い

ESM/CJSの相互運用性に改善の余地あり

## そしてRolldownへ
以上述べたような背景から現在、Rspackというviteと似たような思想を持った製品チームのコアメンバーと協働して、Rolldownというesbuldとrollupのいいとこ取りをして、まさに痒いところに手が届くツールを鋭意製作中のようです。今後ともフロントエンドビルドツールの動向は追っていければなと思います。今回は短いですが以上になります。また気が向いた時に加筆修正行っていこうかなと思います。
windowsでiverilog その140

# 概要　
windowsでiverilogやってみた。
jk ff書いてみた。

#  サンプルコード

```

module JK_FF(input J, input K, output reg Q, output Q_);
	assign Q_ = ~Q;
	initial 
		Q = 0;
	always @*
		Q = (J & ~Q) | (~K & Q);
endmodule

module test;
	reg J,
		K;
	wire Q,
		Q_;
	JK_FF u(.J(J), .K(K), .Q(Q), .Q_(Q_));
	initial
	begin
		$display("j k q q_ ");
		$monitor("%b %b %b %b ", J, K, Q, Q_);
		J = 0; K = 0; #10;
		J = 1; K = 0; #10;
		J = 0; K = 0; #10;
		J = 0; K = 1; #10;
		J = 0; K = 0; #10;
		J = 1; K = 1; #10;
		J = 0; K = 0; #10;
		$finish;
	end
endmodule

```

# 実行結果

```
>vvp a.out
j k q q_
0 0 0 1
1 0 1 0
0 0 1 0
0 1 0 1
0 0 0 1
1 1 1 0
0 0 1 0
jkff2.v:28: $finish called at 70 (1s)
```

以上。
自動ティンシャ鳴らし機を作るにあたって。。。

皆さん「自動ティンシャ機」なるものを見たことはあるでしょうか？
私は落合陽一さんの展覧会で昔見たことがある程度だったのですが、ひょんなことから自分で作ることになったので、「作ったよ！メモ！」程度で投稿（初）させていただきます。

↓これが自動ティンシャ鳴らし機（動画が載せれないので写真のみ。。。）
![自動ティンシャ鳴らし機.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605095/90bd3ab3-6511-d761-c08f-d443d14acc1a.png)

作りは非常に簡単で、超音波センサーで一定の距離を測定して、閾値を超えて短くなったら、サーボモーターが動き、ティンシャを鳴らすよといった構成です。

コードはこちら↓↓↓（ArduinoUNO）
    
    #include <Servo.h>
    //超音波センサー初期設定
    int TRIG = 3;
    int ECHO = 2;
    double duration = 0;
    double distance = 0;
    double speed_of_sound = 331.5 + 0.6 * 20;
    
    //Servo初期設定
    Servo myservo;
    const int SV_PIN = 7;
    
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      pinMode(ECHO, INPUT);
      pinMode(TRIG, OUTPUT);
      myservo.attach(SV_PIN, 500, 2400);
      myservo.write(0);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      digitalWrite(TRIG, LOW);
      delayMicroseconds(2);
      digitalWrite(TRIG, HIGH);
      delayMicroseconds(10);
      digitalWrite(TRIG, LOW);
      duration = pulseIn(ECHO, HIGH);
      if(duration > 0){
        duration = duration / 2;
        distance = duration * speed_of_sound * 100/1000000;
        Serial.print("Distance:");
        Serial.print(distance);
        Serial.println(" cm");
        if(distance < 90){
          delayMicroseconds(20000);
          digitalWrite(TRIG, LOW);
          digitalWrite(ECHO, LOW);
          delay(1000);
          myservo.write(130);
          delay(1000);
          myservo.write(0);
          delay(5000);
          myservo.write(130);
          delay(1000);
          myservo.write(0);
          delay(5000);
          myservo.write(130);
          delay(1000);
          myservo.write(0);
          delay(5000);
        }
      }
      delay(500);
    }
    
全然簡単じゃん。
と思っていたのもつかの間。
まあ綺麗に鳴らない。

ただ単にサーボモーターで動かそうとしても綺麗な音色が出ないんですね。
色々と試行錯誤をして写真のような形にまとまって最終的には綺麗な音色が自動で鳴るようになりましたが。
人と同じように楽器を自動で鳴らすって難しいんだなあと感じた試作でした。

綺麗に鳴るまでの道のりはまた機会があれば更新します。。。
初投稿はこんなもので。
今後ティンシャ鳴らし機が必要になった方のための一助になれば幸いです。
エンジニア1年生の頃の書いたコードリーディングメモ

# はじめに
つい最近インターンの子がコードを読んでいて

「なんで今ここみてるんだ...」

とつぶやいていました。

そういえば、新卒1年目の頃に私も同じようなこと経験して、メモとったなあと思い出し、
今回の記事を書いてみました。

知識のある人からしたらもっといい書き方あるだろうに...
って思う内容かもしれませんが、私はこれでコードを読む力をつけることができたので
コードを読んでいて迷子になってしまうことに悩んでいる人がいたらぜひ試してみてください！

# 当時のコードリーディングメモ
先にワンクッション入れさせてください。
一応一番見れるやつを選んだんですが、人に見られるなんて当時一切思ってなかったので、
マジで字汚いです...誤字もあります...ごめんなさい。

それではどうぞ！
![memo.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3039645/a56ef69d-dfdb-418b-0f66-59fc1657b93b.jpeg)


....あまりにもメモ書きすぎるので補足させていただきます。
ざっくりですが、基本は、

* →: 処理の流れ
* □: Class
* ◯:  メソッド

で！上記の中に、読んでいてわからなかったことや関数・処理・条件を書き込んでいます。
(途中わけわかんなくなって◯囲み連発してる....)

今でこそ、少し知識もついてきたので、もっとちゃんとしたフロー図書いた方がいいなー
とか色々思うのですが、当時はそんな知識一切ない状態なのでこれが精一杯でした。

ただ、こんなメモでも書き始めてから少しずつ書いてあるコードへの理解度が変わってきました。
全然この辺は言語化できてないのですが、
メモを取るにあたりやった行動自体も影響してるのでは？
と思っています。

具体的にはメモを取るときに↓のようなことをしていました。
* メモする時にコードに書いてあることをそのまま書かず、自分の言葉で書く
* 何度も処理の流れがわかるまで線をかきながら流れを覚える
* 複雑な条件は口に出しながら書く

ただコードを追うだけではなく、体でコードを叩き込んでたのがよかったのかもしれない(?)

# 最後に

だいぶフワッとした感じで終わっちゃいましたが、
私が新卒１年目に書いたコードリーディングノートのお話でした！

今コードが読めない助けてーって思ってる人。大丈夫。
当時こんなメモしか起こせなかった小娘は今、
しっかりフロー図もシーケンス図も書けるようになって、
立派(?)にエンジニアしてますよ。
諦めずに頑張ろう！！！

以上！
【Unity】ノーコードでサイコロアプリを作ってみる（プロジェクト作成、インポート）

# これはなに？

Unity初心者がサイコロアプリを作るまでの過程をまとめた記事になります
アセット以外のところは、ビジュアルスクリプティングを利用して作成したいと思います

# 作ってみる

今回、作っていくのはコチラ

- プロジェクトを作成する
- 箱を用意する
- アセットのインポートする
- サイコロの表示する（仮）

完成した画面はコチラになります

![cap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266407/b22c819d-8e7c-b449-3ee9-ac7c2de58c68.png)

## プロジェクトを作成

スマホで利用したいので、「3D Mobile」のテンプレートで作成します
プロジェクト名は「BG-Dice」にしました
![create_project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266407/6e3dabda-8d2b-7641-a116-6bd06ff4dd50.png)

## 箱を用意する

![box.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266407/b62aa273-caf8-825c-6897-7307634798d1.png)

### 床・壁の用意
チュートリアルでやった床と壁の作成を参考にして作成しました
最初、四角でつくっていたのですが、上部からカメラで写したときに、おさまりが悪かったので長方形にしました

## アセットのインポートする

### 床・壁の見た目

１．アセットストアから良さそうなマテリアルを探す

- 木目がいいなと思いアセットストアから以下の無料のマテリアルを見つけました
    - ※思っていた木目ではなかった:cry:

https://assetstore.unity.com/packages/2d/textures-materials/wood/yughues-free-wooden-floor-materials-13213

２．インポート
- アセットストアから取得したら、パッケージマネージャーの「My Assets」に入ります
    - 取得したアセットを選択して「Import」を選択します
    - 詳細画面が表示されて、更に詳しくインポートする内容を選択しますが全部入れました

![package_manager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266407/57fc6b62-cac2-3637-a557-b47f144f1657.png)

３．床・壁のオブジェクトに適用
- インポートが完了すると「Project」パネルの「Assets」に追加されます

![project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266407/63a96ff9-5614-c700-8d38-14908144ded8.png)

- チュートリアルでやった通りにマテリアルをオブジェクトへ適用させます

### ダイスの用意
アセットストアから良さげなものを取得します
床・壁の時と同じようにインポートします

https://assetstore.unity.com/packages/templates/packs/dice-pack-light-165?locale=ja-JP

※12/7 取り扱いが終了していた:skull:

## サイコロの表示する（仮）

１．「ヒエラルキー」パネルで「CreateEmpty」で空のオブジェクトを作成します
２．以下の動画をみて１．で作成したオブジェクトにC#スクリプトの「Dice.cs」を組み込みます

https://www.youtube.com/watch?v=e1HRILWSnlc

![inspector.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266407/65f25b1d-0e7b-f175-6a7b-06480d9acd9a.png)

３．ビジュアルスクリプティングで、組み込んだDice.csが選択できるようになっているので以下のように仮組みします

![scripts.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266407/454d9dfd-b656-4fc8-0d75-1d22867aac84.png)

## さいごに

なんとかサイコロが表示できてよかった:relaxed:
ネットにある情報で、なんとか作成できてよかったです

ビジュアルスクリプティングで作れるところまで作ってみたいと思います:grinning:

## 関連記事

https://qiita.com/acronhub/items/a46c6f5c16c4d262728c

https://qiita.com/acronhub/items/ccbdda267de28730d68e

https://qiita.com/acronhub/items/25d626d7ae2956942735

https://qiita.com/acronhub/items/7fa83565ffdd05576605

https://qiita.com/acronhub/items/7c3a39d384c0b6ea277c

https://qiita.com/acronhub/items/c273a54507b07a5937e3
高校で就職失敗したやつが、専門入学して半年で内々定出た話。

# 初めに
軽く自己紹介します！
名前：鈴木　颯斗
経歴：工業高校→専門学校（2年課程　現在1年）
資格：基本情報、工事担任者、電子機器組み立て技能士...etc
X： 
私は専門学校に入学し半年という速さで組み込み系の企業に内々定を頂きました。
今回では高校であった失敗談、専門学校に入学し実践したこと意識したことをお話しします。
また高校生編はほぼ自慢話なので嫌な方は専門編へ

# 高校生編
私が進学した工業高校では ***95%*** が就職するという就職が圧倒的有利な学校でした。
その過半数はトヨタ、デンソーを含む超大手企業で進学するほうがおかしいという風潮でした。
その中私は、IT関係の仕事に就きたい！という強い意志があり、進学を選択していました。
部活動では、ロボットを制作する部活に所属し1年生のころから先輩の手伝いに抜擢されたり、
2年生では大会のリーダー3年では部長と先生達からの期待は強くありました。
(その部活動でもやらかしてしまうのですがそれはまたの機会に...)
そんな私に先生たちは絶対に一回はいうことがあります。

### 何でお前は進学なんだ？

こんなことを言われながら2年生の夏休みのある日、ふと求人票を見てみるとあるITインフラ系の
企業の求人が来ていたのです。

### これだ！！！！

私は確信しました。これしかない、目指す場所はここしかないんだと。
そこから私は就職組に合流し、説明会やセミナーを受けたりしました。

それから月日が経ち3年生で面接練習が始まりました。
が、ここで思わぬことが起こってしまうのです...

### 私は面接を真面目に練習しなかったのです。

なぜか
それは面接を受けなくても履歴書で受かると思っていたからです。
どういうことかというとまず資格、私は学科で一番資格を持っていました

基本情報技術者
ITパスポート
電子機器組み立て技能士3級
危険物取扱者試験　乙種2・4・6類
工事担任者　第2級ディジタル通信
情報技術検定1級
計算技術検定2級
こう見ると少ないですね...

また部活では
部長
大会で特別賞

など当時先生にお前は練習いいよと言われてしまう程でした。
それで私は***落ちるわけがない***と気を抜いていたのです。

そんな準備不足で行った面接など皆さんなら....お察しでしょう。

![IMG_2511.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488556/7993ec7a-dd6c-40f3-c671-420a04e87a48.jpeg)
(嫌なもの見つけてしまった...w)

見事不合格、面接の次の日に不採用通知が来ました。
そこで私のプライドはボロボロ目先が真っ暗でした。

ここで学んだことはどれだけの経歴があっても本番には油断してはいけないということです。
準備は怠らず周りに流されず常に自分に疑う必要があると感じました。

# 専門編
* 実践したこと
私は2年課程に入学しました。
2年課程は年中忙しく12月から学校での就活が始まると入学時に始まると知らされました。
ですが私は高校生での失敗からほんとに12月からでよいのか、もっと早く準備する必要があるのではないかと思い、まず私は仕事で何がしたのかをピックアップし某就活情報アプリでそれに合う企業を探し出し、合同企業説明会などに参加しました。
また、同じ学科の先輩にこんなことやってます！みたいな営業をかけます。
すると、他先輩の紹介やイベント、ハッカソンに出場することになったりしました。

　イベントでは色々な方と出会い就活の話を中心に聞きまわっていました。
　また企業の方に私の就活の話など聞いてもらい何が足りないかなどを聞いていました。

　そんな中、ある逆求人イベントに出会います。
　逆求人と聞くと学歴差別が激しいと勝手な偏見を持っていました。
　ですがそこで今の内々定先と出会うわけです。

 * 意識したこと
 とにかく行動すること。
 失敗を恐れない
 この二つです。
 とにかく自分から行動するのは前述にもある通り、説明会を受けに行ったり、営業だったり、イベントに出たり、話を聞いてもらったりと、ほんとにとにかく行動します。
 そこで終わりではなく、企業さんからのフィードバックなどをもとに足りないところを補ったりもします。
 失敗を恐れないのは、行動するとき
 「いや僕はまだこの人に話からける実力ないよ...」
 「いや僕はこのイベントには出れないな...(制限ないけど)」
 みたいなことを思わないことです。
 実際話しかけるときはちゃんと失礼がないように準備したりはしていましたがとにかく話す。
 しゃべらないとコミュニケーション能力は上がらないし、フィードバックを貰わないと自己分析の質は高まらないと私は思います。その話す経験が面接や大事な機会に話せる力になると思います。

 # まとめ
 今回自慢話が多くなりましたが何より自信過剰にならず準備をしっかりし、行動することが大切だと言いたいです。
 面接を例に挙げるとすれば準備をしっかり行えば行う程準備した内容と外れた方向性の質問が来た時、答えれないということがあるでしょう。私は高校の就職試験の面接では中学時代の事ばかり聞かれ、まったく答えられないとうことがありました。
 ですが、企業の人などと話しておけばそのような場面でもしっかりと受け答えできるのかもしれません。
 
# 就活のために使ったサイト
事前に履歴書などを見て訂正していただいたりと事前サポートなどがしっかりしていました!

https://www.studenthunting.com/
はじめてのDAX クエリ ビュー

## はじめに
2023/11のフィーチャーサマリーで登場した、4番目のビュー「DAX クエリ ビュー」 をテーマに、2023/12/7に[Power BI もくもく・わくわく会 12 - connpass](https://powerbi.connpass.com/event/301291/)を実施しました。

## DAX クエリ ビュー（DAX Query View）とは
ドキュメントはことらです。

https://learn.microsoft.com/ja-jp/power-bi/transform-model/dax-query-view?WT.mc_id=DP-MVP-5004418

DAX クエリ自体のドキュメントはこちらです。

https://learn.microsoft.com/ja-jp/dax/dax-queries?WT.mc_id=DP-MVP-5004418

短縮URLもあり、[https://aka.ms/dax-queries](https://aka.ms/dax-queries)

## 作成者のブログ記事

Procut Manager でご担当のZoeが、Deep dive記事を書いてくれています。

https://powerbi.microsoft.com/ja-jp/blog/deep-dive-into-dax-query-view-and-writing-dax-queries/

最初からどのドキュメントのとおり、いっしょに勉強会で進めていこうと考えていたのですが、SQL文との比較話が多く含まれ、書いたことがない人向けには時間がかかるなぁと考えていました。

そのような中タイミングよく2023/12/6にでてきた動画がこちらです。

https://www.youtube.com/watch?v=oPGGYLKhTOA

7分でコンパクトにDAX クエリ ビューを使って何ができるか、まとまっています。
勉強会ではブログのサンプルを使いながら、この動画の内容を確認していきました。

勉強会の録画はこちらです。

https://www.youtube.com/watch?v=lFlAvoXfMKU

Guy in a Cubeの視聴だけでもいいですし、勉強会の内容とともに追いたいという場合はこちらもどうぞ。

## 本Deep diveは、作成者の愛を感じる秀逸な内容

Guy in a Cubeなどを使ってDAX クエリ ビューに慣れてきたところで、Deep diveのブログ記事、是非読んでください。SQL文のところは、やったことがなければ、類似のものがあるのね、ないのね、という感じでみていく程度で大丈夫です。
ただ、この記事によりSQL文ではない（または書き方に作法がある）ことが、DAXのメジャーではあるのか、など背景がわかってきます。また記事は、思考としてデータをみていく時の思いつく内容やビューとして表現を確認していく方法などがかみ砕いて話されています。

そして新しいメジャーを作るときの、編集ワークフローとして描いてくれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/bf22e93f-0d14-5c01-4290-a59088336b58.png)

セマンティックモデル（最近モデルの正式名としてPower BIで呼ぶぞとなったもの。シンプルにいうとモデル、Power BIサービスの旧データセットも同じ意味）のメジャーから編集されて更新されると、「モデルの更新：メジャーを上書きする」というのがでてきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/3ef7563a-1acb-d53e-ae48-9fa2ce2b7f80.png)

これを**CodeLens**というそうです。クールな名前ですね。

このブログを読み進める、やってみることでモデルの内容を確認する思考例を体感しながら、DAX クエリ ビューで使える主要なメニューを体感することができます。
是非おススメです。

## その他おすすすめのリソース

SQLBIのMarcoさんの約50分の動画もおススメです。

https://www.youtube.com/watch?v=hiBRhmX-pbM


## おわりに
もくもく・わくわく会は、今年2023年1月からはじめて毎月原則第一木曜開催でなんとかできました。2024年も続けていきたいと考えています。1月の第一木曜は2024/1/4で仕事始めだったので1週ずらして1/11（スリー1）にしました。もくもく（手をうごかして各自なにかやる）としながらも、テーマにそってわくわく、わいわい一緒にやる、といったことを目指しています。ご興味ございましたら是非ご参加を。