OmniAICreator/Qiita-1.07M huggingface dataset:
SymfonyでDesktop Notificationsを作る


[Symfony Component Advent Calendar 2024](https://qiita.com/advent-calendar/2024/symfony)の23日目の記事です。

SymfonyBlogでDesktop Notificationsが紹介されていたので作ってみます。
[https://symfony.com/blog/new-in-symfony-7-2-desktop-notifications](https://symfony.com/blog/new-in-symfony-7-2-desktop-notifications)

## 完成図
右側の通知がDesktop Notificationsです。
![スクリーンショット 2024-12-23 16.00.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83896/3f2135be-a896-4a35-695a-f9020b1ca281.png)

## 手順

```
symfony new test-console --version="7.2.x-dev"
cd test-console/
```

追加でrequireするのはこれだけ！
```
composer require symfony/joli-notif-notifier
```

```php
// src/Command/TestCommand.php

<?php

namespace App\Command;

use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\Notifier\Message\DesktopMessage;
use Symfony\Component\Notifier\TexterInterface;

#[AsCommand(name: 'punpun:stop')]
class TestCommand extends Command
{
    public function __construct(private TexterInterface $texter)
    {
        parent::__construct();
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $io->text('リラックス、リラックス😌');
        $io->text('6秒間、深呼吸をしましょう。');
        $io->progressStart(6);
        $i = 0;
        while ($i++ < 6) {
            sleep(1);
            $io->progressAdvance();
        }
        $io->progressFinish();


        // Desktop Notificationsの部分 ここから ↓
        $message = new DesktopMessage(
            'Done!! いつもお疲れ様',
            'たまには自分にご褒美を🍺🍰🍦🍙🍣',
        );
        $this->texter->send($message);
        // Desktop Notificationsの部分 ここまで ↑

        return Command::SUCCESS;
    }
}
```

## 最後に
バックグラウンドで何か長めの処理をしている時に、
Desktop Notificationsで通知できるのは便利なので
機会があれば使ってみてください🥂
初心に戻って、ラズパイ勉強。次のテーマ決まる。

図書館で予約していた本が届いたということで、取りに行きました。ラズパイ、初心に戻って勉強するぞ。
![IMG_0048.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433305/c5138780-3c53-d591-22dd-6a8ccee3baf4.jpeg)
読み終えました。5Hくらいかな。
これで　次のテーマ決まりました。人感センサーもあることだし、自作監視カメラを作成します。
大須のボントンさんにはラズパイ公式　Piカメラ 公式 V3 可視光 [SC0872]　が無いということなので、
ＫＳＹさんでネット購入しました。　送料込み 550円込で　5170円　少し痛いが、届くの楽しみ。
Advent Calendar 2024をやってみて振り返り

# アドベントカレンダーを書いて思った事
Qiitaは技術記事中心って言われましたが、今まで気になってたAIをテーマに好奇心のままに調べる機会が出来て良かったです。

25日を１人で書き切るのは大変！！！
途中で病みそうになって[＠rdlabo](https://qiita.com/rdlabo)さんにSOSしちゃいました。
次回行う際はもっと早めに取り掛かるか、作業記事をたくさん書いて残しとくに限ると思いました。

# 来年の参考
Advent Calendar 2024を書くにあたって悩んでいたら、アドバイスをもらったので忘却防止に残しときます。

- 書く内容だけ25日分先に決めると「もうネタには困らなくてよくなる！」
→ 24日まで書いた時点でプレゼント企画に気づきました！
→ 来年のお題はここからも決めることに決まりですね:relaxed:

https://qiita.com/advent-calendar/2024/present-calendar#present_calendar

- 何かサンプルアプリを作るとかデカめの目標を1つ立てて、その途中でやった作業を全部記事にしていく作業メモ方式(やったことの振り返り、仮に忘れても「どうせ過去の自分ならメモしてるだろう」という安心感)
→ わかりみ


# 今後したいこと
- 作業記事ネタ作る（サンプルアプリを作る）
- 初音ミクについて調べる
- mixi2でコミュニティ入ったので、積極的に活動を増やす
- 皆さんのAdvent Calendar 2024を見る

# 最後に
昨年はAdvent Calendarに参加することを目標に記事１つ投稿し、
今年はAdvent Calendarを作成し、25日の枠を埋めることを目標にしました。
来年はもう少し細かい目標を設定し、達成できたら良いなぁ:dizzy:

それではみなさまメリークリスマス:santa:
PLATEAUの３D建物と点群データの重ね合わせ【ArcGISPro】

●趣旨
　PLATEAUアカデミーで３D建物へのテクスチャの貼り付け作業を体験しました。１つ１つの建物に対してテクスチャを貼り付ける作業は膨大な時間を要するため、点群データを建物のテクスチャとして代用できないかと考え、ArcGISProにより試行してみました。
●使用データ
 3D都市モデル（Project PLATEAU）金沢市　https://www.geospatial.jp/ckan/dataset/plateau-17201-kanazawa-shi-2020
●作業手順
①金沢駅前のLOD2の建物を抽出
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3949922/70d37789-1d8c-8ab9-1335-e13809ab2e3f.png)


②点群データ（Las）を読み込み、RGBカラーを設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3949922/4442a3fd-d188-8b97-ad5f-4ce624ff3ed0.png)

③　①と②のデータを重ね合わせ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3949922/3fb8de8e-4594-c9e6-0a04-9b1643002b39.png)
●検証結果
　点群データが建物の裏に隠れてしまう箇所が多く存在しました。
　点群データは詳細なデータを取らないと、テクスチャとしてリアリティに欠けると感じました。

●課題
　点群データを画像化して建物のテクスチャとして活用できること、自動でテクスチャとして貼り付けるこことができるソフトウェア等を調べる必要があると考えます。引き続き取り組んでいきます。
Laravel Sailを使ったローカル開発環境構築

### はじめに

Laravel Sailは、公式が提供するDockerを活用した開発環境構築ツールです。Railsを学んでいる方がLaravelに挑戦する際、Sailを使うことでスムーズにローカル環境をセットアップできます。本記事では、Laravel Sailを用いたローカル開発環境の構築手順を解説します。

### 前提条件

Dockerがインストールされていること

Composerがインストールされていること

### Laravelプロジェクトの作成

#### 1. Laravelインストーラーを使ったプロジェクト作成

Laravel Sailを使用するには、まずLaravelプロジェクトを作成します。以下のコマンドを実行してください。

```
composer create-project laravel/laravel my-laravel-app
cd my-laravel-app
```

ここで、my-laravel-appはプロジェクト名です。お好みに応じて変更してください。

#### 2. Sailのインストール

次に、Sailをプロジェクトにインストールします。

```
composer require laravel/sail --dev
```

その後、Sailの実行コマンドを作成します。

```
php artisan sail:install
````

インストール時に、使用するサービスを選択するプロンプトが表示されます。デフォルトでは、MySQLやRedisなどが選択されます。必要に応じて選択を変更してください。

### Dockerコンテナの起動

Sailを使ってDockerコンテナを起動します。以下のコマンドを実行してください。

```
./vendor/bin/sail up
```

初回起動時は、Dockerイメージのビルドに時間がかかることがあります。すべてのサービスが起動したら、Laravelのデフォルトページをブラウザで確認できます。

```
http://localhost
```

### 開発環境の利用

#### Artisanコマンドの実行

Sail経由でArtisanコマンドを実行するには、以下のようにコマンドを入力します。

```
./vendor/bin/sail artisan migrate
```

#### 他のサービスとの連携

RedisやMailhogなど、Sailに含まれるサービスを活用できます。たとえば、RedisのCLIを使用する場合は以下のようにします。

```
./vendor/bin/sail redis-cli
```

### 開発環境の停止

開発を終了する際は、以下のコマンドでコンテナを停止します。

```
./vendor/bin/sail down
```

### まとめ

Laravel Sailを使用することで、Dockerを活用した簡単かつ再現性のあるローカル開発環境を構築できます。本記事の手順を実行すれば、初学者でも問題なく環境をセットアップできるはずです。

[Laravel Sail公式ドキュメント](https://laravel.com/docs/11.x/sail)

Railsでの経験がある方は、LaravelのアプローチとRailsの違いを楽しみながら学習を進めてください！
決定木系機械学習モデルの特徴と選び方

機械学習における「決定木系モデル」は、分類や回帰といったタスクに幅広く使われるアルゴリズムの一種です。この記事では、代表的な決定木系モデルの種類、それらの強みと弱み、さらに決定木全般の特徴について解説します。
※この記事は、ChatGPTの出力を基に作成しています。

---

### **決定木系モデルの代表例**

1. **決定木（Decision Tree）**  
   - **特徴**: 単体で動作する基本的な決定木アルゴリズム。シンプルな構造で直感的に理解可能。  
   - **用途**: データの解釈や簡易な分類・回帰タスク。

2. **ランダムフォレスト（Random Forest）**  
   - **特徴**: 多数の決定木を組み合わせて結果をアンサンブル（多数決や平均化）する手法。  
   - **用途**: ノイズが多いデータや高い安定性が求められる場面。

3. **勾配ブースティング（Gradient Boosting）**  
   - **代表ライブラリ**: XGBoost、LightGBM、CatBoostなど。  
   - **特徴**: 弱いモデル（浅い決定木）を連続的に改良し、精度を高める手法。  
   - **用途**: 高精度が必要な競技的機械学習やビジネス分析。

---

### **決定木全般の強み**

1. **解釈性が高い**  
   決定木の構造は直感的で、各分岐が具体的な条件を表します。これにより、結果を視覚化し、非専門家でも理解しやすいという利点があります。

2. **データ前処理が不要**  
   特徴量のスケーリングや標準化が不要で、カテゴリデータも直接扱えます。

3. **非線形関係の表現**  
   線形モデルでは捉えられない複雑なデータパターンを効果的に学習できます。

4. **ロバスト性**  
   欠損値や外れ値への耐性があり、シンプルな決定木は計算負荷も低いです。

5. **高速なトレーニング**  
   単体の決定木ではトレーニング時間が短く、迅速に結果を得られます。

---

### **決定木全般の弱み**

1. **過学習のリスク**  
   深い木はトレーニングデータに過度に適合し、汎化性能（新しいデータへの適用能力）が低下します。

2. **汎化性能の限界**  
   単体の決定木では複雑な関係を十分に捉えられない場合があります。

3. **不安定性**  
   データのわずかな変更でモデル全体の構造が大きく変化することがあります。

4. **大規模データへの対応力不足**  
   高次元データや大量の特徴量を持つデータセットでは性能が低下しやすいです。

5. **分岐条件の固定化**  
   境界条件が固定されるため、結果が特定の条件に依存しすぎることがあります。

---

### **決定木系モデルの強みと弱み**

#### 決定木単体
- **強み**: 解釈性とシンプルさが魅力。データの探索や初期分析に最適。  
- **弱み**: 過学習しやすく、大規模データには向かない。

#### ランダムフォレスト
- **強み**: 汎化性能が高く、ノイズに強い。重要な特徴量を自動選択。  
- **弱み**: モデルの解釈性が単体の決定木に比べて低い。

#### 勾配ブースティング
- **強み**: 高精度な予測が可能で、調整次第で非常に柔軟。  
- **弱み**: 計算負荷が高く、ハイパーパラメータの調整が複雑。

---

### **決定木モデルを選ぶポイント**

- **解釈性が重要**: 単純な決定木を選択。
- **高い汎化性能が必要**: ランダムフォレストを使用。
- **精度重視**: 勾配ブースティング（LightGBM、XGBoostなど）が適しています。

---

### **まとめ**

決定木系モデルは、そのシンプルさと柔軟性から、さまざまなタスクに対応可能です。一方で、過学習や性能の限界といった課題もあるため、用途に応じて適切なモデルを選択することが重要です。また、最近では勾配ブースティング系のモデルが多くの場面で高精度を発揮しており、実務や競技的機械学習でも重宝されています。

決定木系モデルの基本を押さえ、問題に応じた選択を行うことで、より効果的なデータ分析を実現しましょう！
is_a?

# インスタンスが引数のクラスのサブクラスか引数のモジュールにインクルードされてるかを確認する

>is_a?(mod) -> bool[permalink][rdoc][edit]
kind_of?(mod) -> bool
オブジェクトが指定されたクラス mod かそのサブクラスのインスタンスであるとき真を返します。

>また、オブジェクトがモジュール mod をインクルードしたクラスかそのサブクラスのインスタンスである場合にも真を返します。 Module#includeだけではなく、Object#extendやModule#prependによってサブクラスのインスタンスになる場合も含みます。上記のいずれでもない場合に false を返します。

https://docs.ruby-lang.org/ja/latest/method/Object/i/is_a=3f.html#:~:text=is_a%3F(mod)%20%2D%3E%20bool,false%20%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

### 試してみた
```rb
irb(main):001* class A
irb(main):002> end
=> nil
irb(main):003* class B < A
irb(main):004> end
=> nil
irb(main):005> B.superclass
=> A
irb(main):006> b = B.new
=> #<B:0x000000010f5dc8d8>
irb(main):007> b.is_a?(A)
=> true
irb(main):008> a = A.new
=> #<A:0x000000010f3a7630>
irb(main):009> a.is_a?(B)
=> false
irb(main):010* module C
irb(main):011> end
=> nil
irb(main):012* class B
irb(main):013*   include C
irb(main):014> end
=> B
irb(main):015> b.is_a?(C)
=> true
```
契約形態の種類まとめ

# 概要
IT企業における契約の種類やその周辺のワードについてまとめました。

# 目次
- [請負契約](#請負契約)
- [準委任契約](#準委任契約)
- [委任契約](#委任契約)
- [SES契約](#ses契約)
- [SIer](#sier)
- [受託案件 (受託開発)](#受託案件-受託開発)
- [人月単価](#人月単価)

## 請負契約
期日までに仕事を完成させて成果物を納品することを約束する契約形態です。
広告やホームページの作成など、ものを制作する業務と相性が良い契約です。システム開発では[受託開発](#受託案件-受託開発)とほぼ同じ意味で使用されます。
何をもって完成とするかをあらかじめしっかり決めておかないと、後々に認識に齟齬が生まれトラブル発生の要因になってしまいます。

## 準委任契約
「仕事をしっかり行うこと」を約束する契約形態です。
保守運用やアプリの動作テストなど、成果物ができないような仕事でこの契約が結ばれることが多いです。成果物ではなく労働時間に対して報酬が支払われるため、納期がある業務に関してはこの形態は不向きです。

:::note
きちんと成果物を納品してほしい場合は請負契約、労働力を確保したい場合は準委任契約といったように依頼したい業務内容によって契約形態を分ける必要があります。
:::

## 委任契約
法律に関わる業務を依頼する際に結ばれる契約です。[法律行為](https://ja.wikipedia.org/wiki/%E6%B3%95%E5%BE%8B%E8%A1%8C%E7%82%BA)を行うことを委託するイメージです。IT業界では用いられることはないかなと思います。準委任は事務処理等の事実行為を委託する際に結ばれるので、基本的に委任契約よりも準委任契約のほうが広く用いられています。

## SES契約
IT業界だけで使用される言葉です。契約を結んだ外部のエンジニアを社内に常駐してもらう契約形態です。契約義務や報酬は準委任契約と同じなので、IT業界のみで使用される準委任契約みたいなイメージです。
SESは (System Engineering Service) の略です。

:::note
求人に「未経験歓迎」と記載がある場合、SES企業の可能性も大きいです。
SESは派遣ができれば売り上げが成り立つため、ビジネス面でのリスクが低く、未経験でも積極的に採用しやすいためです。
:::

## SIer
システム開発を請け負う企業のことです。IT企業が別の企業のシステム開発を担当するみたいなイメージで、SIerは基本的に企業間取引である[BtoB](https://sales.fromation.co.jp/archives/10000063605)が多いです。SIは System Integrationの略で、システム構築のことを指します。SIerはSystem Integratorの略で、SIを行う企業を指しています。
SIerの契約形態は一般的に[請負契約](#請負契約)になることが多いです。[SES](#SES契約)と比べて高い給与がもらえることが多いですが、責任も大きくなります。

:::note
発注元の企業から一番近い元請けや二次受けはSIer契約となることが多く、その下の三次受けからはSES契約となるパターンが多いです。
元請けとなる案件が多いSIer企業と、下請けとなる案件が多いSES企業では、年収や待遇にも差が出てきます。
:::

## 受託案件 (受託開発)
「受託」とは、個人や他の企業からの依頼を引き受けることを言います。企業の中では、ソフトウェアやアプリの開発を行いたいが社内にエンジニアがいなかったり、開発のノウハウがない、という企業も沢山あります。そういった企業が外部の企業に開発を依頼する場合に受託開発を利用して開発を行うことができます。社内でいちからエンジニアを育てたり、ノウハウを蓄積したりといった時間も削減できるため、そこもメリットです。
基本的に期日が決められており、納品された成果物に対して報酬を支払う形になります。

## 人月単価
エンジニア1人が1か月間稼働した際の費用のことです。
一般的に、
- スキル
- 経験
- 企業規模

が単価に影響します。「企業規模」とありますが、一般的に大手企業のエンジニアの方が、中小企業のエンジニアよりも高い単価になることが多いです。また、もちろん国や地域によっても変わってきます。

## 参考サイト様
- [「受託」とはどんな契約形態？委託や請負とは何が違う？](https://hnavi.co.jp/knowledge/blog/contract-agreement-difference/)
- [エンジニアの人月単価の相場は？ 単価が決まる要素を解説](https://emeao.jp/guide/system/system-knowlege/post-41002/)
【TryHackMe】Traffic Analysis Essentials：Walkthrough

# 概要

TryHackMe「Traffic Analysis Essentials」のWalkthroughです。

https://tryhackme.com/r/room/trafficanalysisessentials

# Task2

## **Q1**.*Which Security Control Level covers contain creating security policies?*

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/894018c7-fab9-f950-f9d9-1ec259846e7f.png)

**A**.**Administrative**

## **Q2**.*Which Access Control element works with data metrics to manage data flow?*

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/b94c9f99-4451-3f5f-46e4-24c2c3a6d782.png)

**A**.**Load Balancing**

## **Q3**.*Which technology helps correlate different tool outputs and data sources?*

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f29829f8-ce9e-f0bb-d2d5-19a7e63de93e.png)

**A**.**SOAR**

# Task3

## **Q1**.*What is the flag?*

**Hint**.*Red dots represent malicious packets!*

ログを収集し、検出結果が表示されました。
赤色のパケットが飛んできた`10.10.99.99`,`10.10.99.62`が`Multiple Login Attempts`,`Bad Traffic`,`Metasploit Traffic`などで`IDS/IPS`で検出できています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/5575c44b-7aac-c7a0-3e4e-78b7e6f8433d.png)

二つのアドレスをフィルタリングに追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/25543744-6fab-2151-3263-99de608c1cb1.png)

悪意のあるパケットをブロックでき、フラグを入手できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/5e7a80d9-3b23-7245-11cf-95824ddda47f.png)

**A**.**THM{PACKET_MASTER}**

## **Q2**.*What is the flag?*

**Hint**.*Are they any suspicious ports? A quick search can help if you don't recognise the used ports. Any recurring numbers in ports?*

Q1で通信しているIPアドレスのポートにプラスして`10.10.99.74`が`suspicious arp behavior`として検出されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/44e03d08-a6c1-d91a-b536-5c757f20caa5.png)

それぞれの不審なアドレスが通信しているポートをフィルタリングに追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/fb8c0a34-d9c9-d02d-06f1-7377166375f1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/77faa4e5-ab48-3df2-0e74-8174390de6b1.png)

悪意のあるパケットをブロックでき、フラグを入手できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/7240bf62-9e2a-e86f-d33e-b03e67aa9ed6.png)

**A**.**THM{DETECTION_MASTER}**
circuitikzの雑多メモ

## はじめに
circuitikzについて、基本的なものを含めた、個人的な雑多メモです。
環境
* LuaHBTeX, Version 1.18.0 (TeX Live 2024/Arch Linux)

* circuitikz 1.6.7

## 節点
回路が接続されていることを示す節点（黒丸）は、アスタリスクを用いて表現する。
### ソース
```
\draw
  (0, 0) -- ++(2, 0)
  (1, 1) to[short, -*] ++(0, -1);
```
### 出力結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735823/d7e7ab45-0b5e-6566-ca9c-78b55487cde0.png)


## 入出力ポート（白丸のもの）
先ほどのノードで使ったアスタリスクを、oに変える。
### ソース
```
\draw
  (0, 0) node[op amp](opamp1){\small NJM4580}
  (opamp1.-) to[short, -o] ++(-2, 0)
  (opamp1.+) to[R=$R_1$, -o] ++(-2, 0)
  (opamp1.out) to[C=$C_1$, -o] ++(2, 0);
```
### 出力結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735823/78ef1849-9e71-7e5b-5482-ef5f3647eeea.png)

## ラベル位置の変更
### ソース
```
\draw
  (0, 0) to[R=$R_1$] ++(2, 0);
```
### 出力結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735823/80f5f5e0-07d2-4177-c0de-380bdfe8a86d.png)
これの上下を反転させる。

### ソース
```
\draw
  (0, 0) to[R, l_=$R_1$] ++(2, 0);
```
### 出力結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735823/0f980df9-c9cc-8d06-56dd-ac5b4b73c69a.png)

## 2つの点の間を水平、垂直な線で結ぶ
2通りある。
### ソース
```
\draw
  (0, 0) node[left]{A} coordinate(Q)
  (4, 3) node[right]{B} coordinate(R)
  (Q) -- (Q -| R) -- (R);
```
### 出力結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735823/cd62c47e-fb9e-049e-f11f-999a52faa3de.png)

### ソース
```
\draw
  (0, 0) node[left]{A} coordinate(Q)
  (4, 3) node[right]{B} coordinate(R)
  (Q) -- (Q |- R) -- (R);
```
### 出力結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735823/3616f693-1888-f078-6ad5-86356219b553.png)

## 参考にしたページ

https://atatat.hatenablog.com/entry/cloud_latex31_circuitikz

https://tex.stackexchange.com/questions/674481/draw-lines-and-circle-in-a-neat-clean-way-with-circuitikz
iOSアプリ開発初心者が地味にハマるUIScrollViewの設定方法

iOSアプリ開発の初心者が地味にハマるUIScrollViewの設定方法。

## 基本の手順

### 1. 右上の「＋」ボタンからUIScrollViewを引っ張ってきて、スクロール表示したい範囲に設置

![quiita_UIScrollView1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786809/19cf3446-b0aa-ef0e-be9c-95cb6b489bce.png)

例えとして、画面の中心部のみスクロールさせたい場合は、表示範囲にUIView(←わかりやすくするためにbackgroundColor赤くしてます)を設置して位置や大きさを指定。そのviewの上にUIScrollViewをのせて、viewと大きさ合わせる。

![quiita_UIScrollView2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786809/b6b7d8bd-6df5-9a89-5a51-4e998c42af39.png)

この時点で出るエラーは、UIScrollViewの中に要素がないために出るエラーなので気にせず続けます。

### 2. スクロール範囲に表示させたい要素たちの一番外枠の要素を入れる。

ここではUIViewを入れて、その上に表示させてたいコンテンツを表示するとします。わかりやすくbackgroundColorをミントカラーにしてます

![quiita_UIScrollView3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786809/90968dfd-b04c-ec01-cfe3-a91ea31bfee5.png)

### 3. UIScrollViewと要素のConstraintsを設定

(要素=ここではUIView(ミントカラー))

①まず、Content Layout Guideと要素の幅を合わせます。

Content Layout Guideが全ての要素を含む部分になります。

具体的な方法：

Content Layout Guideと要素を両方を同時選択した状態（commandキー押しながらクリック）で、edgesを合わせるConstraintsを追加。

![quiita_UIScrollView4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786809/6e630da8-2655-3e1b-830d-c2f0f43b3c57.png)

②Frame Layout Guideと要素の幅を合わせます。

Frame Layout Guideが実際に画面上で要素が表示される範囲になります。

具体的な方法：

Frame Layout Guideと要素を両方を同時選択した状態（commandキー押しながらクリック）で、幅をの長さを合わせるConstraintsを追加。

ここでは、縦にスクロールの例としてEqual Widthで横幅を揃えています。

もし横スクロールさせたい場合は、Equal Heightsで縦幅を揃えてください。

![quiita_UIScrollView5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786809/b21ffd6b-c1a6-2fc0-ab29-c926f34cc191.png)

ちなみに、ここでもエラーが表示されていると思いますが、これは要素の大きさが決まっていないために表示されています。試しに要素の高さを設定すると、エラーが消えます。

![quiita_UIScrollView6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786809/aeedfb90-ce32-7fae-c1e6-9f5a97c8bc6a.png)

### 4. デモ

デモとして、UIStackViewを大枠の要素として、異なるbackgroundColorが設定された4つのUIViewを表示してみました。

![quiita_UIScrollView7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786809/d2e0fd8c-8101-c784-0aa0-0a7a3a9dd6a7.png)

こんな感じの挙動になります。

![quiita_UIScrollView_demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786809/bd951439-b6b7-c152-a829-faf96b5dee7f.gif)
メール関連のマルウェアEmotet（エモテット）を調べてみた / I looked into the email related malware Emotet (日本語 / 英語)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812041/73a118fc-93c0-82df-e55f-60f2db2fbc71.png)
# 日本語
こんばんわ！
Advent Calendar 2024に参加してまして、24日目の記事を書いていこうと思います。
題材は「エンジニアが知っておくべき メール送信・運用ノウハウ、メールの認証技術やセキュリティについて投稿しよう！ by blastengine Advent Calendar 2024」ということで、メール関連のマルウェアEmotet（エモテット）について書いていこうと思います。

### Emotet（エモテット）とは
Emotetは、2014年に初めて発見されたトロイの木馬型マルウェアです。当初は銀行情報を狙った攻撃が主でしたが、現在ではスパムメールの送信や他のマルウェアのダウンロードなど、多岐にわたる悪意のある活動を行っています。

### Emotet（エモテット）の拡散方法
Emotetは主にフィッシングメールを通じて拡散されます。これらのメールは、信頼できる送信者を装い、受信者に添付ファイルを開かせたり、リンクをクリックさせたりすることで感染を広げます。感染すると、被害者のコンピュータはボットネットの一部となり、さらなる攻撃の踏み台として利用されます。

### 対策法

###### フィルタリング技術の導入

スパムフィルタやウイルス対策ソフトを使用して、疑わしいメールを自動的にブロックします。

###### 社員教育

フィッシングメールの見分け方や、安全なメールの取り扱い方法について社員に教育を行います。

###### 定期的なバックアップ

重要なデータを定期的にバックアップし、万が一の感染時にも迅速に復旧できるようにします。


以上です。
個人的に教育が一番の対策かなと思います。が、最近のメールも精巧になっていると聞くので、万が一のためにバックアップを取っておくことや、脅威を軽減させるためにフィルタリングたブロックのあるツールを導入するのがいいですね！

ここまで読んでいただきありがとうございます。
# ENGLISH
Good evening!
I'm participating in Advent Calendar 2024 and I'm going to write an article for the 24th day.
The subject is “Let's post about email sending and operation know-how, email authentication techniques and security that engineers should know! by blastengine Advent Calendar 2024”, I will write about Emotet, an email-related malware.

### What is Emotet?
Emotet is a Trojan horse type malware first discovered in 2014. Initially, attacks were mainly aimed at banking information, but it now engages in a wide range of malicious activities, such as sending spam emails and downloading other malware.

### How Emotet spreads
Emotet is spread primarily through phishing emails. These emails spread by posing as a trusted sender and inducing recipients to open attachments or click on links. Once infected, the victim's computer becomes part of the botnet and is used as a springboard for further attacks.

### Countermeasures

###### Deploy filtering technology

Use spam filters and antivirus software to automatically block suspicious e-mails.

###### Employee education

Educate employees on how to recognize phishing e-mails and how to handle e-mails safely.

###### Regular Backups

Back up important data on a regular basis so that it can be recovered quickly in the event of an infection.


That's all.
Personally, I think education is the best countermeasure. But I hear that recent e-mails are also becoming more sophisticated, so it is a good idea to keep backups just in case, and to install tools with filtering or blocking to mitigate threats!

Thank you for reading this far.
オススメyoutube動画チャンネル

オススメのYoutubeチャンネル

技術系　Elixir

https://www.youtube.com/@ElixirConf

技術系　セキュリティ

https://www.youtube.com/@ipajp

技術系　Blender

https://www.youtube.com/@CGbox_Blender

https://www.youtube.com/@BlenderVitals

技術系　その他

https://www.youtube.com/@keisankikagaku


公式系

https://www.youtube.com/@unity

https://www.youtube.com/@UnrealEngine

https://www.youtube.com/@ResoniteApp

https://www.youtube.com/@GodotEngineOfficial

トレンド系

https://www.youtube.com/@rondankogai

https://www.youtube.com/@CES

学術系
東北大学

東京大学

その他
技術とはかけ離れていますが公的機関のチャンネルもなかなか面白いです。

https://www.youtube.com/@MHLWchannel

https://www.youtube.com/@NMWATokyo

https://www.youtube.com/@museum_kahaku

https://www.youtube.com/@rikenchannel
シンガポールで開催されたGitLab Partner Leadership Summit 2024に参加してきました！

2024年11月11日から13日にシンガポールで開催されたGitLab Partner Leadership Summitに参加してきましたので、その時の様子をお届けしたいと思います！

## GitLab Partner Leadership Summitとは？
GitLab Partner Leadership Summitは、AMER（アメリカ地域）、EMEA（ヨーロッパ・中東・アフリカ地域）、APJ（アジア太平洋日本地域）の3地域に分かれて開催された、GitLabパートナー企業向けの招待制イベントです。
APJ地域でのSummit開催は今年が初であり、シンガポールで開催され、2024年7月から[セレクトパートナー](https://experts.zyyx.jp/gitlab/news/2024-07-elevated-to-gitlab-select-partner)としての認定をいただいた弊社も今回ご招待いただきました。

## Welcome Reception

イベント初日の夜は、高層階のバーラウンジでWelcome Receptionが開催されました。会場からはマリーナベイ・サンズやシンガポールの夜景が一望でき、APJ地域から集まったGitLabパートナー企業の方々との顔合わせの場となりました。

![qiita-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1714473/75bbde5a-7240-d06e-00de-99d7997cbb2f.jpeg)
![qiita-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1714473/226a73d4-c75f-04b9-f087-210e4cadc3e7.jpeg)

## Partner Leadership Summit

朝から夕方まで充実したセッションが行われ、GitLabのAPJパートナー一覧が紹介される中で、名だたる企業とともに当社ZYYXの名前も掲載されており、身の引き締まる思いでした。

![qiita-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1714473/60313c5b-d3c2-168b-15ef-a791b72b8759.png)

セッションでは、地域の営業状況やパートナー戦略の共有、市場動向のアップデートが行われました。また、AWSやGoogle Cloudとのパネルディスカッションも開催され、ハイパースケーラーとの連携強化に向けた今後の展望について理解を深めることができました。

![qiita-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1714473/1b6d8825-30ce-5e39-f06e-661412ec1c85.jpeg)
![qiita-5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1714473/7c2d4dc8-5b26-249c-d0ac-a6d5f6b55025.jpeg)

夕方からは参加者全員でのディナー。普段はオンラインでしかお会いできないGitLabの社員の方々と直接お話しできる貴重な機会となりました。美味しい料理を楽しみながら、和やかな雰囲気で交流を深めることができました。

## Japan SessionとDevSecOps World Tour

翌日の午前中は、日本のパートナー企業向けに特別にJapan Sessionを企画していただき、日本市場特有の課題や機会について、より詳細な議論を交わすことができました。

午後からは一般のお客様も参加するDevSecOps World Tourがスタート。多くの参加者で会場は活気に満ち、最新のDevSecOpsトレンドやAIの活用事例などについて、実践的な内容が共有されました。

![qiita-6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1714473/b10ce401-3163-66b3-18ad-37bad18e0cac.jpeg)

## 参加してみて感じたこと

GitLabは世界最大のオールリモート企業としても有名で、普段はオンラインでの交流が中心となる中、GitLabの社員の方々や日本のパートナー企業の方々と実際にお会いして直接お話できたことは、大変刺激的で貴重な経験となりました。特にGitLabの方々との対話を通じて、セレクトパートナーとしての今後の取り組みについて、より具体的なイメージを持つことができました。

また、今回のイベントを通じて、グローバルビジネスにおける英語でのコミュニケーションの重要性を強く実感しました。より深い議論や円滑な関係構築のために、今後も英語力の向上に努めていきたいと思います！

## おわりに

今回このような機会に参加させていただき、大変貴重な経験となりました。
GitLabの皆様には改めてお礼申し上げます。

弊社はGitLabのセレクトパートナーとして、GitLabソリューションを通じてお客様のDevSecOps推進を[支援するサービス](https://experts.zyyx.jp/gitlab#service)を提供しています。今回のイベントで得られた知見を活かし、より一層お客様のビジネス価値向上に貢献できるよう、取り組んでまいります。
移行アシスタントで移行した新旧Macにて、Tailscale (App Store版)のNode keyが重複するのを解消する

## 背景

自宅のコンピューターにTailscaleを入れてコンピューター間で通信ができるようにしている。

https://tailscale.com/

先日新しいMacBook Proを購入したので、旧Macから移行アシスタントを使って新Macにデータをまるごと移行したところ、新MacでTailscaleの認証を行うと旧MacのTailscaleの認証が解除されてしまった。

どうやらTailscaleのNode keyが新旧Macで重複していて、これが原因っぽい。

そのため、新Macの方のNode keyを変更したい。

## Tailscale Node key変更手順

一旦以下の手順でTailscaleのアンインストールを試してみた。

https://tailscale.com/kb/1069/uninstall?tab=macos+%28standalone%29

```sh
brew uninstall --cask --zap --force tailscale
```

ただ、これだけだとNode keyは変わらず。

いろいろ調べてみたところ、App StoreからTailscaleをインストールした場合と、スタンドアローン版Tailscaleをインストールした場合で、アンインストールの手順が異なる模様。

https://tailscale.com/kb/1069/uninstall?tab=macos+%28app+store%29

今回はApp Store版のTailscaleをインストールしていたため、キーチェーンアクセスのデータも削除する必要があった。

対象となるキーは以下。

```sh
tailscale-machinekey
tailscale-logdata
tailscale-preferences
```

![スクリーンショット 2024-12-24 1.22.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24450/9b2531f3-bf53-7e75-a33d-2ae9f537d614.png)

**キーチェーンが「iCloud」になっている項目を削除した後、Tailscaleを起動して認証すると無事Node keyが変わった。**

## 参考

* [Uninstalling Tailscale (Standalone)](https://tailscale.com/kb/1069/uninstall?tab=macos+%28standalone%29)
* [Uninstalling Tailscale (App Store)](https://tailscale.com/kb/1069/uninstall?tab=macos+%28app+store%29)
サブネットマスク、IPアドレスのまとめ

## デフォルトサブネットマスクの詳細
- サブネットマスクの役割
  - ネットワーク内のIPアドレスを効率的に管理し、ネットワークの分割やセキュリティの向上に役立つ
  - デフォルトサブネットマスクは、IPアドレスのクラスに基づいて自動的に割り当てられるが、必要に応じてカスタムサブネットマスクを設定することも可能
- クラスごとのサブネットマスク
  |クラス|ネットワーク部分とホスト部分|
  |--|--|
  |クラスA| 最初の8ビットがネットワーク部分、残りの24ビットがホスト部分を示す|
  |クラスB| 最初の16ビットがネットワーク部分、残りの16ビットがホスト部分を示す|
  |クラスC| 最初の24ビットがネットワーク部分、残りの8ビットがホスト部分を示す|
- サブネットマスクにおける、ネットワーク部分とホスト部分の違い
  - ネットワーク部分: ネットワーク全体を識別。サブネットマスクのビットが1の部分
  - ホスト部分: ネットワーク内の個々のデバイスを識別。サブネットマスクのビットが0の部分
  - ネットワーク内のデバイスがどのネットワークに属しているかを識別し、同じネットワーク内で一意のホストアドレスを持つことができる

## IPアドレス

| クラス  |          用途          |             範囲             | デフォルトサブネットマスク |       プライベートIP範囲       |
| ------- | ---------------------- | ---------------------------- | -------------------------- | ------------------------------ |
| クラスA | 大規模ネットワーク向け | 0.0.0.0 ～ 127.255.255.255   | 255.0.0.0                  | 10.0.0.0 ～ 10.255.255.255     |
| クラスB | 中規模ネットワーク向け | 128.0.0.0 ～ 191.255.255.255 | 255.255.0.0                | 172.16.0.0 ～ 172.31.255.255   |
| クラスC | 小規模ネットワーク向け | 192.0.0.0 ～ 223.255.255.255 | 255.255.255.0              | 192.168.0.0 ～ 192.168.255.255 |
| クラスD | マルチキャスト用       | 224.0.0.0 ～ 239.255.255.255 |                            |                                |
| クラスE | 研究用                 | 240.0.0.0 ～ 255.255.255.255 |                            |                                |

### 特殊なIPアドレス
|           種類           |              範囲              |                                                         用途                                                         |
| ------------------------ | ------------------------------ | -------------------------------------------------------------------------------------------------------------------- |
| ループバックアドレス     | 127.0.0.0 ～ 127.255.255.255   | 自分自身を指すために使用。最も一般的なのは127.0.0.1で、ローカルホストとも呼ばれる。システムのテストにも使用される。  |
| リンクローカルアドレス   | 169.254.0.0 ～ 169.254.255.255 | DHCPサーバが利用できない場合に自動的に割り当てられるIPアドレス。APIPA（Automatic Private IP Addressing）とも呼ばれる |
| マルチキャストアドレス   | 224.0.0.0 ～ 239.255.255.255   | 特定のグループにデータを一斉に送信するために使用。ストリーミングやビデオ会議などで利用される。                       |
| ブロードキャストアドレス | 255.255.255.255                | ネットワーク内のすべてのホストにデータを送信するために使用される
RPGリスキリングカレッジ（シュッとIBM i の開発を勉強する！）

# 前置き:raised_hand:
- 技術研鑽用のセミナーのお知らせです。
- 技術記事ではありません。ご承知おきください。

# お知らせ 「RPGリスキリングカレッジ」
- 「RPGリスキリングカレッジ」という連続セミナーが開催中です！
- 最新のRPGやその周辺技術についてのスキル習得を目的としたIBM i DX/モダナイゼーションスキルアップのためのセミナー・シリーズです。
- 第1弾のテーマは「RPG開発者のためのVS Code入門」です。
- 当セミナーは全て参加いただかなくても問題ございません、ご興味のある回にご参加いただけます。

# 詳しくは？
- [RPGリスキリングカレッジ開催のご案内](https://community.ibm.com/community/user/power/blogs/saori-koinuma/2024/11/13/rpg)をご参照ください。
- 過去回の録画や資料を確認したい方はぜひ問い合わせ窓口にご連絡ください。
ほんとうは面白い資格の世界(&My勉強法)

## 概要:
突然ですが、皆さんは資格をとったことがありますでしょうか？私は資格を取ることが趣味で、これまでいくつかの資格を取ってきました。
この記事では、IT資格に限らず、取るだけでとっても面白い資格の世界をご紹介します！

## 1. これまでに取ってきた資格
ここでは私が取得した資格について紹介します。

- **世界遺産検定 2級**  
  合格日: 2020年10月  
  世界遺産について詳しく学べる、観光好きな方にはぴったりの資格です。2級では300件の世界遺産について学ぶことができます。  
  
- **3級ファイナンシャル・プランニング技能士試験**  
  合格日: 2021年6月  
  ファイナンスの基本知識を学べます。家計管理や投資に興味のある方におすすめ。  

- **乙種第4類危険物取扱者**  
  取得日: 2021年7月  
  ガソリン系の危険物取り扱いについて学ぶ資格です。これを持っているとガソリンスタンドで働く時に少しいい給料がもらえるらしい(?)  

- **秘書技能検定 2級**  
  合格日: 2021年8月  
  秘書業務に必要なスキルを習得。時候の挨拶など、実生活でも役立つ内容が豊富です。  
  *「秘書の極意は、自分の意見を出さないこと」これだけは覚えています(笑)。*  

- **基本情報技術者試験**  
  合格日: 2021年12月  
  IT業界に入る第一歩。基礎的な知識が身につきます。  

- **メンタルヘルス・マネジメント検定試験Ⅱ種**  
  合格日: 2022年3月  
  メンバーのメンタルヘルスをサポートするための資格です。Ⅱ種は管理職向けの内容になっています。  

- **乙種第3類危険物取扱者**  
  取得日: 2022年4月  
  自然発火性や禁水性を持つ物質について、その取り扱いを学びます。先ほど出た乙種第4類よりは知名度が低いかもしれません。  

- **応用情報技術者試験**  
  合格日: 2022年12月  
  IT技術者としての知識をさらに深める資格です。応用情報からは記述問題もあったりして難易度がグッと上がってきます。  

- **AWS Certified Solutions Architect – Associate**  
  取得日: 2024年5月  
  AWSの設計や運用に関する知識を証明する資格です。今年に入ってからAWSなどクラウド技術に興味を持って勉強していました。  

## 2. 資格勉強法の工夫

一般的には、以下のようにまずテキストを完璧に読み込んで、それから問題集→過去問と進んでいくのが普通かなと思います。

![私が資格を取る理由 あるいは、本当はおもしろい資格の世界.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671694/7e7c1bb6-0217-28fa-f8d8-d9d67bc42bb6.png)

しかしながら、この方法だと以下のようなデメリットがあると思います。

- テキスト読んでいるうちに飽きる。  
  - コツコツ読むのは面倒なわりに定着しにくいんですよね。結局問題解いた方が、定着が早いと思っています。  
- 過去問解く頃には試験直前になっていて、遅すぎる。  
  - 結局十分な演習ができずに本番を迎えてしまうことも…  

対して私の勉強法は以下のような感じです。一つずつ解説していきます。

![私が資格を取る理由 あるいは、本当はおもしろい資格の世界 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671694/f3ab151d-a0c9-8160-7544-ca0a71868c21.png)

### 2.1 テキストを「適当に読む」

テキストを最初から最後まで完璧に読み込む必要はありません。完璧に読み込むのは時間がかかり、終わる頃には最初の内容を忘れてしまっているからです。  
私は、以下のポイントに重点を置いて「適当に」読んでいます。

- **見出しや太字だけ読む**  
  試験に出やすい箇所は、テキストでも重要部分として強調されています。まずはそこだけをざっと見て全体像をつかむことが重要です。  

- **細かいところにこだわらない**  
  全てを理解しようとせず、ざっくりと「何を学ぶか」をつかむことを目標にします。理解は後回しでもOKです。  

- **スピード重視**  
  最初の段階で時間をかけすぎると飽きちゃいます。あくまで「ざっくり理解」するためのものとして、軽く流していきましょう。  

### 2.2 過去問を徹底的に解く

テキストを1周読んだら、すぐに過去問に取りかかりましょう！問題演習を中心にした方が、定着が圧倒的に早いです。

- **最初は間違えて当たり前**  
  初めて解く時に正解率が低いのは自然なこと。そこで落ち込むのではなく、「何を間違えたか」に注目します。自分が理解していない部分を知ることが、合格への近道です。  

- **解説を徹底的に読み込む**  
  特に間違えた問題の解説をしっかり読むことが大切です。解説を理解し、テキストに戻って該当箇所を確認する作業が、知識の定着に繋がります。  

- **テキストに印をつけておく**  
  テキストで理解が曖昧な部分にはあらかじめ印をつけておくことで、問題集で補完する際に素早く対応できます。線が多い箇所ほど集中的に練習が必要だと分かります。  

- **間違えた問題はノートにまとめる**  
  解説を読んだ後、ノートに自分の言葉で整理して書き残します。こうすることで、自分の苦手分野が明確になり、復習が効率的に進みます。  

間違いをまとめたノート・印をつけたテキストは、通学/通勤時間などに読んで復習しましょう！

### 2.3 苦手なところは問題集で補完

過去問を解いていく中で、自分の苦手な分野が浮き彫りになってきます。それを補完するために問題集を使います。気をつけるポイントは基本的には2.2の内容と同じです。

## 3. 今後受けたい資格

最後に、私が今後挑戦したい資格についてご紹介します。

1. **AWS認定資格**  
   Sysopsやデベロッパーの資格に挑戦したいと思っています！学生のうちに3冠はとってみたいです。  
  
2. **漢字検定 準1級**  
   以前挑戦して落ちてしまったのですが、今度はしっかり猛勉強してとりたいです。    
  
3. **ファイナンシャルプランナー 2級**  
   家計や投資に関する知識をさらにアップデートしたいと考えています。こちらも以前挑戦して不合格になっているので真面目にコツコツ勉強します。  

## まとめ

資格取得は就活や転職のための手段として捉えられがちだと思います。ですが、試験勉強を通じて自分の知識を広げていくという意味では、かなりいい趣味だなと思っています！今後も気になった資格や勉強してみたい分野の資格にどんどん挑戦して自分の知識の幅を広げていきたいです。  
ここまで読んでいただいてありがとうございました！皆さんもぜひ気になった資格は挑戦してみてください！
[tips][Java] atcoderでよく使用する処理まとめ

cppとjavaを比較しながら、よくある処理をまとめます。

# 文字列操作系

文字列操作に便利なtips。

文字列操作するときに、Stringクラスのメソッドを使用するか、Stringをchar[]型に変換して操作するかをパッと見極めて処理書くためのtips。

## 文字列`String`の読み取り

```java
Scanner sc = new Scanner(System.in);
String str = sc.next();
```

## 文字`char`の読み取り

```java
Scanner sc = new Scanner(System.in);
char c = sc.next().charAt(0);
```

## 文字操作

特定の条件で文字を置き換えたりする場合。
インデックス指定での置き換えは`char[]`に変換するのが便利。

### 文字列`String`を文字配列`char[]`に変換

```java
String S = sc.next();
char[] charArray = S.toCharArray();
```

### 文字配列`char[]`を文字`String`に変換

```java
String str = String.valueOf(charArray);
```

### 置き換え

インデックスi番目を特定文字で置き換え
```java
charArray[i] = c
```

## 例題

https://atcoder.jp/contests/abc384/tasks/abc384_a

## アルファベットテーブル

```java
for(char c = 'A';c <= 'Z';c++){
    System.out.print(c);
}
```

output
```java
ABCDEFGHIJKLMNOPQRSTUVWXYZ
```

https://qiita.com/kynea0b/items/9febfc116bf2fd13ef1e

### 例題

アルファベットテーブルで変換表を作る系。
https://atcoder.jp/contests/abc342/tasks/abc342_c

# 可変長配列系

## 基本操作系: `ArrayList<E>`

cppだと`vector<>`、javaは`ArrayList`。`vector<>`でも良い。


- 参照 
このリスト内の指定された位置にある要素を返します。
```java
E get(int index)
```


- 変更
このリストの指定された位置にある要素を、指定された要素で置き換えます。
```java
E set(int index, E element)
```

- 包含
指定の要素がこのリストに含まれている場合にtrueを返します。

```java
boolean contains(Object o)
```

- 削除
このリストの指定された位置にある要素を削除します
```java
boolean remove(int index)
```

- 削除
指定された要素がこのリストにあれば、その最初のものをリストから削除します。
```java
remove(Object o)
```

## 末尾の参照と変更: `LinkedList<E>`

LinkedListはi番目の参照が遅い。が、stack的な操作ができたり割と便利な面はある。

- 末尾参照
このリスト内の最後の要素を返します。
```java
E getLast()
```

- 末尾に追加
このリストの最後に、指定された要素を追加します。
```java
void addLast(E e)
```

- 値の代入
このリストの指定された位置にある要素を、指定された要素で置き換えます
```java 
E set(int index, E element)
```

- stack:pop
このリストが表すスタックから要素をポップします。
```java
E pop()
```
- stack:push
このリストが表すスタック上に要素をプッシュします。
```java
void push(E e)
```

### cppとjavaの比較


cppの場合、配列のサイズ３。初期値１００の配列は次で書ける。
```cpp
vector<int> a = vector<int>(3, 100);
a[2] = 777;
for(int val:a){
  cout << val << endl;
}
```

```cpp
100
100
777
```

javaの場合、cppのようにサイズで初期化して、指定した値で初期化ができない。初期化すると要素は０が割り当てられる。
（調べ中）

```cpp
ArrayList<integer> a = new ArrayList<integer>;
// a[2] = 777; // error 
// Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 0
// a.set( 2, 777); 
a.add(100);
a.add(100);
a.add(100);
a.set(2, 777)
for (Integer val: a) {
    System.out.println(val);
}
```

```java
100
100
777
```

int型配列を使用。
```java
int num = 3
int[] num = new int[num];
num[2] = 5;

for (int i : num) {
    System.out.println(i);
}
```

```java
0
0
5
```


## 備考

[Python、C++、Javaで考えるデータ構造と計算量の話](https://qiita.com/drken/items/18b3b3db5735241465ef#3-%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%81%AE%E8%A9%B1)

https://docs.oracle.com/javase/jp/8/docs/api/java/util/ArrayList.html
私とAmplifyの1年間ふりかえり

この記事は、「[AWS AmplifyとAWS×フロントエンド #AWSAmplifyJP Advent Calendar 2024](https://qiita.com/advent-calendar/2024/amplify)」の24日目の記事です。

こんにちは。

2024年も残すところわずかとなりました。私は今年、Amplifyに関するアウトプットをたくさん行いました。1年間のふりかえりとして、どこでどんなアウトプットをしたかを整理します。

# 登壇
計5本でした。JAWSのイベントがほとんどですね。

| イベント | 資料 |
|:-|:-|
|JAWS-UG 初心者支部|[個人開発はAmplifyでホスティングしよう](https://speakerdeck.com/tttol/ge-ren-kai-fa-haamplifytehosuteinkusiyou)|
|JAWS-UG 朝会|[AmplifyにCDKがやってきた_プレビュー版のAmplify_Gen2を触ってみた.pdf](https://speakerdeck.com/tttol/amplifynicdkkayatutekita-hurehiyuban-noamplify-gen2wohong-tutemita)|
|Amplify Boost Up #05|[Amplifyで開発・運用している 個人開発アプリ紹介](https://speakerdeck.com/tttol/amplifytekai-fa-yun-yong-siteiru-ge-ren-kai-fa-ahurishao-jie)|
|JAW-UG 大阪|[私がAWS Amplifyを使う理由](https://speakerdeck.com/tttol/si-gaaws-amplifywoshi-uli-you)|
|Amplify Boost Up #07|[Amplify製アプリケーションにパスキー認証を導入する](https://speakerdeck.com/tttol/amplifyzhi-ahurikesiyonnihasukiren-zheng-wodao-ru-suru)|


一番ウケが良かったと言うか、手応えを感じたものは[Amplifyで開発・運用している 個人開発アプリ紹介](https://speakerdeck.com/tttol/amplifytekai-fa-yun-yong-siteiru-ge-ren-kai-fa-ahurishao-jie)ですね。発表後の質疑応答が活発で、Xのつぶやきも好評でした。




# ブログ
こちらも計5本でした。

https://qiita.com/tttol777/items/4fb0d8ca290fb1de992a

https://qiita.com/tttol777/items/d79b5e67de4c33e27858

https://qiita.com/tttol777/items/524c2011bfe70a3426a7

https://qiita.com/tttol777/items/ac4f6562eee4fbe49655

https://qiita.com/tttol777/items/54dd72384acca7135c4d

執筆時点で一番いいねが多いのは[AWS Amplifyで私用の家計管理アプリを開発して運用している話](https://qiita.com/tttol777/items/d79b5e67de4c33e27858)ですね。登壇のパートと同じテーマです。個人開発の事例共有は結構ウケやすいのかも？

# GitHub
### ZENIGAME
https://github.com/tttol/zenigame-gen2

家計管理アプリです。立替精算の計算を楽にしてくれます。
家族専用に閉じたアプリなので、わりと好き勝手な実装をしています。

### amplify-passwordless-auth
https://github.com/tttol/amplify-passwordless-auth

Amplifyで作成したアプリケーションにパスワードレス認証を適用したサンプルです。

### nibble-amplify
https://github.com/tttol/nibble-amplify

Amplifyで気になった機能やアプデ等を検証するためのリポジトリです。

# さいごに
もっとすごい数のアウトプットをしている方はたくさんいらっしゃると思うので、自分はまだまだだなあと思います。しかし、マイペースながらも毎月継続的に何かしらのアウトプットを出せたことはよかったなと思います。

2025年も引き続き、アウトプットに精を出していきます！
HCP TerraformでGoogle Cloudのクレデンシャルを設定する方法

# はじめに

どうも、@to-fmakです。最近のプロジェクトでは、HCP Terraformを使ってGoogle Cloud上にインフラリソースを構築する機会がありましたので、今回はHCP TerraformでのGoogle Cloudのクレデンシャル設定方法について簡単に共有したいと思います。

# サービスアカウントの作成

まずTerraform用のサービスアカウントを作成します。「IAM」->「サービスアカウント」のコンソールを開き、「サービスアカウントを作成」をクリックします。

![Screenshot 2024-12-24 at 11.49.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/ee22ac99-da55-64e6-863c-7f7ab48ac3fa.png)

サービスアカウント名を入力し、必要なロールを割り当てます。

# クレデンシャルの発行

作成したサービスアカウントを開き、「鍵」タグから「キーを追加」をクリックします。

「キーのタイプ」で「JSON」を選択し、「作成」をクリックします。

![Screenshot 2024-12-24 at 12.09.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/753727b2-c5b5-0a05-9fce-210057990350.png)

作成後、JSON形式のクレデンシャルファイルが自動ダウンロードされます。（このファイルは安全に保管してください）

# HCP Terraform変数の作成

HCP Terraform では、クレデンシャル情報をWorkspace VariablesまたはVariable Setsに設定できます。今回はシンプルな例として、Workspace Variablesを使用する手順を紹介します。

HCP Terraformで対象Workspaceの「Variables」を開き、「Workspace variables」の「Add variable」をクリックします。

以下の内容で変数を設定します。

- Key: GOOGLE_CREDENTIALS（TerraformのGoogle Providerが参照する変数名）
- Value: 前ステップで発行したJSONクレデンシャルファイルの内容をそのまま貼り付ける
- Sensitive: チェックを入れる（値が非表示になり、後から読み取ることはできなくなる）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/88d33938-54db-52ec-3368-08bb2505212c.png)

Terraformコード内でこの変数を利用するよう設定します。

```hcl: main.tf
provider "google" {
  credentials = var.GOOGLE_CREDENTIALS
  project     = var.project_id
  region      = var.region
}

```

# 注意点

- クレデンシャル情報を管理する際は、セキュリティに十分注意してください
- 必要に応じてサービスアカウントの権限を最小限に設定してください

# 参考URL

https://cloud.google.com/iam/docs/creating-managing-service-account-keys?hl=ja

https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference

https://developer.hashicorp.com/terraform/cloud-docs/workspaces/variables

# エンジニア募集

Gakken LEAP では教育をアップデートしていきたいエンジニアを絶賛大募集しています！！
ぜひお気軽にカジュアル面談へお越しください！！

https://gakken-leap.co.jp/recruit/
ゼロからのOS自作入門 メモ #1

# 前置き
本記事は「ゼロからのOS自作入門」のメモになります。
仕事上OSの知識があってもいいなと思って、取り組むことにしました。
各章に対し、1記事をOutputする予定です。

# メモ本編
## 目標
Hello WorldをUEFIで表示させる。

## やったことメモ
まず、前提として開発環境の用意が必要。
### ほかの環境でも使っていたもの
WindowsならWSL2を使うと新しいPCを用意しなくてもよくて楽。
BZEditorを導入。BOOTをBinaryで書くため。

### 本環境に必要なもの
#### QEMU
X Serverのインストールがまず必要。以下でダウンロードできる。
https://sourceforge.net/projects/vcxsrv/
ダウンロードしたインストーラを起動し、そのままインストール。
いったん起動し、以下の通りにする。
- GUIの選択では、Multiple Windowsを選択
- GUIアプリを起動するか問われるので、`Start No cliaent`を選択
- Extra Settingの`Disable Access Control`にCheckを入れる
- 起動するよと言われるので、そのまま完了
- Windowsのセキュリティ画面が出てくるので、「パブリックネットワークでの接続のところにCheckを入れ、アクセス許可をする <-実際やったときは、見逃していた

quemをインストール。ここは特に何も情報がなかった。
```
sudo apt install qemu-utils
sudo apt install quem-system-x86
```


#### Build環境などの用意
GithubのMikanOSのところにあるレポジトリを、指示に従ってダウンロードする
https://github.com/uchan-nos/mikanos-build
行うのは以下の通り
```
sudo apt update
sudo apt install git (gitをインストールしていればやらなくてよい)
cd #HOME
git clone https://github.com/uchan-nos/mikanos-build.git osbook
```
開発ツールをインストールする。
```
sudo apt install ansible
cd $HOME/osbook/devenv
ansible-playbook -K -i ansible_inventory ansible_provision.yml
```
`isal`というコマンドがインストールされ、`HOME/edk2`というディレクトリが生成される。
`HOME/.profile`に`DISPLAY`環境変数が追加される(こともある)ため、反映させる。
```
source $HOME/.profile
```
これ以降は実行はしたが、今は必要なさそうだった。

### 実際に行ったこと
Boot Loaderをバイナリで記述する。
今回は本の通りにBZ Editorを使った。
400-420の部分がHello, World!という文字列に対応している。
```
00:0000 4D 5A 00 00 00 00 00 00-00 00 00 00 00 00 00 00
*
00:0030 00 00 00 00 00 00 00 00-00 00 00 00 80 00 00 00
*
00:0080 50 45 00 00 64 86 02 00-00 00 00 00 00 00 00 00
00:0090 00 00 00 00 F0 00 22 02-0B 02 00 00 00 02 00 00
00:00A0 00 02 00 00 00 00 00 00-00 10 00 00 00 10 00 00
00:00B0 00 00 00 40 01 00 00 00-00 10 00 00 00 02 00 00
00:00C0 00 00 00 00 00 00 00 00-06 00 00 00 00 00 00 00
00:00D0 00 30 00 00 00 02 00 00-00 00 00 00 0A 00 60 81
00:00E0 00 00 10 00 00 00 00 00-00 10 00 00 00 00 00 00
00:00F0 00 00 10 00 00 00 00 00-00 10 00 00 00 00 00 00
00:0100 00 00 00 00 10 00 00 00-00 00 00 00 00 00 00 00
*
00:0180 00 00 00 00 00 00 00 00-2E 74 65 78 74 00 00 00
00:0190 14 00 00 00 00 10 00 00-00 02 00 00 00 02 00 00
00:01A0 00 00 00 00 00 00 00 00-00 00 00 00 20 00 50 60
00:01B0 2E 72 64 61 74 61 00 00-1C 00 00 00 00 20 00 00
00:01C0 00 02 00 00 00 04 00 00-00 00 00 00 00 00 00 00
00:01D0 00 00 00 00 40 00 50 40-00 00 00 00 00 00 00 00
*
00:0200 48 83 EC 28 48 8B 4A 40-48 8D 15 F1 0F 00 00 FF
00:0210 51 08 EB FE 00 00 00 00-00 00 00 00 00 00 00 00
*
00:0400 48 00 65 00 6C 00 6C 00-6F 00 2C 00 20 00 77 00
00:0410 6F 00 72 00 6C 00 64 00-21 00 00 00 00 00 00 00
*
00:0600
```

確認のために、Check sumを使う
```
sum BOOTX64.EFI
```
これで12430が出てこればOK.
なお、WSLで行う場合は、BOOTLOADERをUSBに移す必要はない。(後々出てくるのかもしれないが)
一般的に、WSLはWindowsを`/mnt/c`でマウントしているので、そこから`BOOTX64.EFI`を引っ張ってくる。
作業ディレクトリ直下においておく。
その後、書籍の通りにコマンドを実行する。
`qemu-system-x86-64`を実行するShellを用意してくれるので、それを実行するだけでよくなる。

後半は、Ｃ言語でハローワールドする。
先ほどのバイナリのデータ自体はEfiMain()で実装されたものだとネタ晴らし。
`clang`と`lld-link`を使って作れるという実践を行う。
ボーイスカウト・ルールをエンジニアの日常に

この記事は [株式会社カオナビ Advent Calendar 2024](https://qiita.com/advent-calendar/2024/kaonavi)の8日目の記事です。

# はじめに
皆さんはボーイスカウト・ルールをご存じだろうか。
有名なものとしては、この本に原則として紹介されているものだ。

https://www.shuwasystem.co.jp/book/9784798046143.html

この記事では、日々のエンジニアとしての日常の中で積極的に取りんだ結果生まれた成果の話をしたいと思う。

## ボーイスカウト・ルールとは

そもそもボーイスカウト・ルールとはなんだろうか？

それは実にシンプルである。

**来た時よりも美しく**

以上だ。

この心を持った状態で日々を過ごすことがとても大切なのである。


## 取り組みを始めた背景

まずなぜこの取り組みを始めたのか。

それは筆者自身が、レガシーコードと向き合う時の心構えができてなかったこと。それが課題だった。

今までの筆者のエンジニアキャリアは、0→1開発を中心とした新しく文化や秩序を生み出す瞬間に立ち会うことが多く、すでに形成された秩序や文化の中でよりよく改善を行う姿勢に疎い部分があった。（1→10, 10→100開発だ。）

その際にすでに存在する1,10のコードに対して、敬意を払いながら改善を進める方法をあまり理解していなかった。

### 理解していないことで起きたこと

既存のルールに則り、そのまま思考停止し、当時の記述がどれだけ辛いものだったとしても、受け入れてしまったり。

より良い形を目指すことをせず、修正後のインパクトを恐れ大胆にメスを入れることができなかったり。

どうしても胸を張って改善活動をしていると語ることのできないジレンマがそこにはあった。

そんな時に「ボーイスカウト・ルール」を思い出し、取り組んでみることにしたのだ。


## きた時よりも美しく

結論から述べる。
この原則は、筆者に誇りを取り戻させた。

どのような観点でエンジニアとしての誇りをとりもどさせたのかというと、大きく3つの観点がある。

* 自分がコードを書く時
* 自分がレビューする時
* 自分が動作確認する時


### 自分がコードを書く時

手始めに自分が加筆修正をする際に、ただ愚直に既存のルールや文化に縛られることをやめることにした。

確かにリスペクトは必要だが、必要以上にそれを盾に恐れることをやめた。

実際に修正をする時には、他の場所でも取り入れられている美しいとされる形をできる限り取り入れることを意識することにした。

その結果、手を入れるたびに修正範囲は大きく広がってしまうものの、以降修正をする人にとって、柔軟性が前よりもある、前回よりは少しだけ綺麗なコードを残すことができるようになった。

ステップ数としては、本当に瑣末なものである。
しかし、この積み重ねが文化を作っていくものなのだと体感するに至った。


### 自分がレビューをする時
レビュー依頼がきた時、今までは修正された差分のみを対象にチェックすることが多かった。

しかし、「きた時よりも美しく」という視線を持ってレビューをすることで、今回の修正文ではない部分にもコメントをすることが増えた。

レビュイーからすると、「しらねぇよ！」と感じてしまうポイントかもしれないが、苦しさを内包しているコードを少しづつでも改善に導く役目がレビュアーにあるとしたら、きっと誇り高い行動であると信じている。


### 自分が動作確認する時
実際にコードをかいていくと、当然動作確認をするタイミングがやってくる。
その時に、共通部品だったり、デザインシステムだったりと自分が修正していないが、ただ利用しているだけの部品も登場するだろう。

自分が手を入れた部分では全くない部分にパフォーマンス課題があり、動かした時にもっさりとした動作だったり、辛さを感じた時、今までは報告を上げて撤退することが多かった。

でも、「きた時よりも美しく」という鉄の掟を心にすり込んだ今であれば、少し行動が変わる。
共通部品だったり、デザインシステムに対してもその思想を適応し、チェックしにいくことができるようになった。

その結果、共通部品・デザインシステムを利用している他のチームの誰かが、今までよりも美しいものを使うことができるようになった。

そして、今までに触れない文脈の活動を行うことになったことで、エンジニアとしての力量も向上したと考えている。


## まとめ

ボーイスカウト・ルール「きた時よりも美しく」を心に宿した結果、
小さな改善の積み重ねが文化を作ることを体感することができた。
そして、より広い範囲のコードに関与することで、エンジニアとしての力量の向上が見られた。
自身と他のチームメンバーにとって、より良いコードベースを作ることができるようになった結果、より安全な改善活動に繋げることができるようになった。

この経験を通じて、より積極的に改善に取り組むことが増えた。そして、筆者はエンジニアとしての誇りを取り戻すことができた。

このシンプルなルール一つでエンジニアとしてのあり方を見直すことができるようになった。
ぜひ、読者の皆様も心にボーイスカウトルールを宿してみるといかがだろうか。
はじめてQuarityFowardを使ってみた感想

# 1.導入
これまでエクセルでテストケースを作成して管理、報告していましたが
 ・「Quarity Forward」ってツールは業務に使えるの？
 ・Excelとどう違うの？
 ・使ってみて感じたメリット、デメリットは？
 という観点から使ってみた感想を書いてみます。

# 2.まずはテストケースのインポート
テストケースをエクセルで作成するところまではそのままの形をとり、エクセルをインポートしてからQFを使うようにしました。

2-1.インポート
 いきなりですがエクセルで作ったエクセルをインポートしてみました。
 インポート自体は割と簡単そう。

   2-1-1 　ログイン＞QFにログインする
　　・ベリサーブIDを作成してログインするとすぐに使えるようになる（今回はフリープラン）

   2-1-2 　階層を見る
   ・ログインすると「コンテナ」が表示されサンプルのプロジェクトが見える。
   「コンテナ」→「プロジェクト」→「テストフェーズ」→「テストスイート」といった階層になっていて、テストケースは「テストスイート」にインポートできそう。
   
       ＜感想＞このあたり名称が直感的に理解しずらかったが、アジャイル開発をしていると大丈夫なのかな？

   2-2-2　テストケースをインポートしてみる
   ・テストスイート一覧のタイトルの右側に「Excelインポート」ボタンがあるので押してみる
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831507/2cd53e20-af37-b102-eb75-f34f2a27e626.png)
   ・インポートのステップが表示される
   `＜感想＞ステップ多いけどガイド順に進めたら大丈夫。取り込める列数が25までなので（フリープランだから？）前もってエクセルを加工しといたほうがスムーズ`
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831507/78d51060-2a45-798b-1856-f8281ca1f533.png)

   2-2-3　テストフェーズの追加
   ・テストスイートを紐づける
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831507/4535f3c2-9b2a-7c3a-2165-948f67186c07.png)

   2-2-3　追加したテストケースを見てみる
   ・左パネルのテストフェーズ→右側のスイート一覧→サイクル一覧→開く、で見えました。
   
       ＜感想＞開くまでの階層が深い。。知らないだけかもですけどもっと手短にたどり着きたい

     
# 3.触って試してみる
3-1.入力
　テスト結果、環境、バグIDなどテスト結果は入力できるが、それ以外は入力できなくなっている。またテスト結果を選択するとテスト実施日とテスト実施者が自動で入力される。
 
     ＜感想＞この機能が使いたかったやつです！
         エクセルだと誤入力とか改ざんとかリスクがあったので信頼性を担保するのに最低限この機能だけでも
        価値があると思った

3-2.エクスポート
　テストサイクルの右上の操作から結果のエクスポートをしてみたら予想と違うものだった。（シートがそのままエクセルの形でエクスポートされると予想していたが、あくまでも「テスト結果」の部分だけだった）
 　→テストサイクル一覧からダウンロードすると欲しかったテストケース＋テスト結果がエクセル形式でダウンロードできた
  
    ＜感想＞「テスト結果のダウンロード」はよく読めばその名の通りなのだが、どういう目的で使用するのだろう？
    「テスト結果のインポート」機能もあるので、エキスポートして一括で変更してインポートする？
    ちょっと使うイメージが湧かなかった

3-3.ダッシュボード
　その日の予定理論値と実績値が表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831507/51c12955-5e06-1ffb-f285-99d3a44fb194.png)
   　`＜感想＞カスタムできない。。。後述のレポート機能から選択できるようになっていたらうれしい`

    
3-4 レポート
　収束曲線グラフ、カバレッジパネルがあり、収束曲線グラフは何もせずにわかりやすく表示される

       ＜感想＞収束曲線グラフは日々の報告や完了報告にそのまま利用できそうなので非常にありがたい！


 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3831507/0b5b57f1-b763-5770-b51b-e130da3adf78.png)
 

 # 4.ここまでの感想まとめ
 　まだまだ使っていない機能があり、総合的なレビューには程遠いが、
  　１．エクセルとの違い
   　テストケースの修正ができない、再テストの機能などはエクセルでは難しいのでQuarity Fowardを使う一番のメリットかもしれないです
    2.　使うメリット、デメリット
    メリットは１．と重複するがエクセルではちょっと難しいデータの正確性の担保だと思います。
    デメリットはまだまだ使いやすさという点で改良の余地がところどころあるように思います。
    3.　業務に使えるの？
    十分使えます！使っていって問題があればフィードバックしていきましょう。

 # 5.総評
 　テストケースを作成し、データの正確性を担保しながらレポートが作れるという基本機能においては問題なく利用できると思いました。
  これがまさしくほしかった機能なので、今後はエクセルではなくQuarityForwardを私たちのチームでは標準で使用していこうと思います。
【Visual Studio】NUnitのテストを実行してもすぐに中断されてしまう場合の対応

# 概要
テストエクスプローラからテストを実行するとNUnitを使用しているテストのみすぐに終了してしまう現象が発生していました。デバッグ実行でもすぐに終了し、また他のMSTestの方は実行できていました。加えてNunitに関してはテストを実行した後の結果表示も変わらない (初期の未実行アイコンのまま) という状況でした。
上記の件について、対応方法を備忘録として残します。
※Visual Studio 2019で確認しました。

# 原因
テスト実行後すぐに中断してしまう原因は複数あるようですが、調べたところ下記のパターンが多いようです。
1. Visual Studio上部の「テスト」 → 「Any CPUプロジェクトのプロセッサ アーキテクチャ」が、「x86」になっている
1. 「NUnit3TestAdapter」のバージョンが古い

私は (2) のパターンでした。「NUnit3TestAdapter」は「拡張機能」と「NuGet」どちらともあり、「NuGet」側の「NUnit3TestAdapter」のバージョンが古い状態でした。

- [拡張機能の「NUnit3TestAdapter」のページ](https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnit3TestAdapter)
- [NuGetの「NUnit3TestAdapter」のページ](https://www.nuget.org/packages/NUnit3TestAdapter/)

「拡張機能」はVisual Studioの機能自体を拡張し、「NuGet」はプロジェクト内の機能を拡張できるため、「NUnit3TestAdapter」という名称は同じですが、もちろん用途はそれぞれ違うはずです。

# 補足
Visual Studio上部の「デバッグ」 → 「ウィンドウ」 → 「出力」の出力ウィンドウで「出力元」を「テスト」にすると、テスト時のログが表示されます。
私の場合はここに赤文字で「InnerException: System.ArgumentException: Unknown framework version 8.0」と表示されていました。

# 終わりに
本現象はテストエクスプローラのログからはエラーは確認できませんでした。(未実行と同じ状態)
また、[補足](#補足)に記載した出力ウィンドウでログを確認する方法を知らなかったため、テストの実装自体にどこか誤った箇所があると思い調査していました。
蓋を開けてみれば初歩的な解消法かもしれませんが、人によっては私のようにハマる可能性もあるかと思いました。

# 参考ページ、サイト様
- [VS2022 17.4.0 にアップグレードした後、NUnit テストを実行できない](https://stackoverflow.com/questions/74443610/unable-to-run-nunit-tests-after-upgrading-to-vs2022-17-4-0)
- [System.ArgumentException:不明なフレームワークバージョン8.0](https://github.com/nunit/nunit3-vs-adapter/issues/1142)
- [NUnitテストが起動しない→AnyCPU=x64で解決](https://asakatana.hatenadiary.org/entry/2019/12/16/152948)
2024年のまとめ

NTTデータ先端技術株式会社の原田です。

アドベントカレンダーの締めも兼ねて 2024 年の個人的なまとめをしたいと思います。

## 2024年 Top 3 トピックス
1. コミュニティ本格参戦
    コミュニティに本格参戦を始めまして、ライトニングトークとか登壇の機会が増えました。
    技術の出口と言う観点でもコミュニティの存在はとてもありがたいです。<br><br>
    
2. Microsoft 認定試験 PL・DP・AI シリーズ全制覇
    PL は大変だった…<br><br>
    
3. 野球サークル松山遠征
    試合結果を除けばサイコーのひと言でした。<br><br>

以降個別トピックスです。

## 生成AI (Generative AI)
2023 年に続き 2024 年も生成 AI に始まり生成 AI に終わった年でした。
ChatGPT のような超ド級のインパクトとはいかないものの、マルチモーダルを始めとして正統な進化を続けた（続けている）1年だったのではないでしょうか。あと OpenAI 一強だった LLM 競争も他社が大分追っかけてきましたね。
ユースケースに関しては画期的な進化とまでは至らなかった印象ですが、IT 業界内部においては「プログラミング支援 AI による開発生産性の向上」はトピックスとして上げられると思います。

2025年はどうなりますかね？
個人的には欧州 AI 規制法の影響があるのかないのかは気になってます。


## 3大パブリッククラウド
引用元 : Synergy Research Group 

https://www.srgresearch.com/articles/cloud-market-growth-stays-strong-in-q2-while-amazon-google-and-oracle-nudge-higher

AWS が横ばいから微減 (あくまでシェアです) で Azure・GCP が伸びている形となってます、Azure の伸びが顕著ですね。(の割にはビジネスの話はあまり聞こえてこない…)
各社の色としては、

* AWS
Amazon Nova でいよいよ LLM に打って出る、が傾倒することはなく Compute・Storage・Database の 3 つの軸は変わらず堅持。
re:Invent で発表された Amazon Aurora DSQL はいよいよ来たかって感じですね、マルチリージョン & アクティブ/アクティブ構成の現実的な解になり得るのでしょうか。<br><br>

* Azure
Azure OpenAI Service & Copilot で生成 AI 0.8 本勝負、GPT モデルの優位性がいつまで保てるか？
2023年よりは生成 AI 以外の話題も上がっていて Fabric は頑張りたい感じが出てますね。
Azure Local (旧 Azure Stack HCI) はどうか…<br><br>

* Google Cloud
Gemini が思ったよりも良くなって俄然生成 AI へのモチベーションが上がっている印象です。
Google Cloud と言えば BigQuery・Spanner ですがうかうかしてると喰われかねないぞ。

と言う感じで捉えてます。

## Broadcom の件
Broadcom の件とは VMWare 社の買収に伴うライセンス体系の変更のことを指します、専門家ではないので詳しい言及は控えますがそれはまあ騒ぎになりました。
まあ大体予想付くと思いますが、私自身にはにわかに Hyper-V の話が増えると言う形で影響がありまして、それらを受けて Hyper-V の PoC もいくつかやらせていただきました。
感触としては「機能カットでは Hyper-V は VMWare の置き換えにはならず、QCD の C だけで判断できるのであれば良いんじゃないでしょうか」と言う感じで、やっぱ製品としての VMWare は良くできてます。
個別システムの 3Tier & 2Node のクラスターあたりは Hyper-V が適合すると思います、このレンジに Nutanix はオーバースペックでしょうし。

## 2024年にまずやりたいこと (とやんなきゃいけないこと)
1. AI エージェント開発
ライトニングトークとかで使っている「さよなら？ Azureクラシック」と言う小ネタがありまして、これを題材に AI エージェント開発をかじってみようかと。<br><br>

2. Microsoft 認定資格 SC・MS/MD シリーズ全制覇
↑ 制覇したら Microsoft 認定資格は卒業、MB (Dynamics) シリーズはさすがに無理だと思います。<br><br>

3. Google Cloud パートナーオンボーディング
認定資格の受験バウチャーゲットのため、2025年は Google Cloud 頑張ってみようかと思ってます。

## まとめ
Broadcom の件を除けば静かな年でした。