OmniAICreator/Qiita-1.07M huggingface dataset:
【OpenSSL】 OpenSSLで暗号化したファイルを、バージョンの異なるOpenSSLで復号すると、エラーになる

たとえば、

```
openssl aes-256-cbc -e -pass pass:xxxxx -in test.txt -out test.txt.aes256
```

とした場合、復号するときは

```
openssl aes-256-cbc -d -pass pass:xxxxx -in test.txt.aes256 -out test.txt
```

とするわけですが、

```
bad decrypt
139859917407904:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:539:
```

とか

```
bad decrypt
80CB49729C7F0000:error:1C800064:Provider routines:ossl_cipher_unpadblock:bad decrypt:providers/implementations/ciphers/ciphercommon_block.c:124:
```

とかいうエラーが出ることがあります。

これは、おそらく、暗号化で使用した OpenSSL と、復号で使用した OpenSSL のバージョンが違うからで、上のエラーは新しめの OpenSSL で暗号化して古めの OpenSSL で復号したとき、下のエラーは古めの OpenSSL で暗号化して新しめの OpenSSL で復号したときに出ます。

問題の原因は、`-md` というオプションのデフォルト値が新旧で違うからで、新しいのは `sha-256` 、古いのは `md5` がデフォルト値のようです。

ちなみに、古い OpenSSL には `-md sha-256` というオプションはないかもしれないですが、

```
openssl aes-256-cbc -d -md sha256 -pass pass:xxxxx -in test.txt.aes256 -out test.txt
```

のように `-md sha256` とすれば、新しい OpenSSL で暗号化したファイルも復号できるかもしれないです。

逆に新しい OpenSSL で古い OpenSSL で暗号化したファイルが復号できないときはやはり

```
openssl aes-256-cbc -d -md md5 -pass pass:xxxxx -in test.txt.aes256 -out test.txt
```

のように `-md md5` とすれば復号できるかもしれません。

あと、`-md md5` は脆弱性があるとされてるので、ほんとはあまり使わない方が良いようです。

それで、古い OpenSSL でも、暗号化するときに

```
openssl aes-256-cbc -e -md sha256 -pass pass:xxxxx -in test.txt -out test.txt.aes256
```

と `-md sha256` をつけておくのがいいかもしれません。

以上
Excel VBAからDoxygenを用いてドキュメントを出力する (2025 年版)

# この時代にまだ Excel VBA なんて使ってるの？

というのはさておき。VBE の貧弱さに辟易して、VSCode で開発できないかと試行錯誤したが、結局、以下のような形で落ち着いた (というか諦めた)。

- 開発は VBE で諦める…。
- モジュールをエクスポートし、プレーンテキストとして管理 (git/Doxygen)

いい方法をご存じの方、ぜひ情報をいただきたいです…。

# 試行錯誤の成果

以下のリポジトリに公開しています。

https://github.com/tkmr-akhs/DoxyVB6

# Excel 内モジュールのエクスポート (ExcelModuleManager)

モジュールはプレーン テキスト (CP932(≒ ShiftJIS)) でエクスポートされるので Git などによる変更管理も可能になります。

この PowerShell モジュールを動作させるには、Excel トラスト センターの設定を変更する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1026594/44a818cb-ce5d-8bd5-8180-99caa27a4783.png)

肝となる部分は以下。

```powershell:PowerShell
# Excel の COM オブジェクトを得る
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $False

# ワークブックを開く
$workbook = $excel.Workbooks.Open($EXCEL_FILE_PATH)
foreach ($component in $workbook.VBProject.VBComponents) {
    if ($component.Type -eq 1) { $fileext = ".bas" }
    elseif ($component.Type -eq 2) { $fileext = ".cls" }
    elseif ($component.Type -eq 3) { $fileext = ".frm" }
    #elseif ($component.Type -eq 100) { $fileext = ".cls" }
    else { continue }
    $filename = Join-Path $OUTPUT_DIR_FULL_PATH ($component.Name + $fileext)

    # エクスポートする
    $component.Export($filename)
}

# 閉じる
$workbook.Close($False)
$excel.Quit()

# COM オブジェクトを開放する
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) > $null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
```

# ドキュメント生成 (DoxyVB6)

以下の記事を参考にしながら、ドキュメント生成の環境を整えた。

https://qiita.com/mima_ita/items/635d57cc277254900c6a

が、いかんせん 2015 年の情報であり、紹介されているスクリプトが Python 2 であったり、精度があまり良くなかったりしたため、自作する流れとなった…。

自作したインプット フィルター DoxyVB6.exe は、[ここ](https://github.com/tkmr-akhs/DoxyVB6/releases)から入手可能です。

インプット フィルターでは、VB6 のコードを解析して、C# に変換し、標準出力に出力する、という処理をしています。なお、関数やサブ プロシージャ、プロパティの内部処理は変換していないので、コール グラフなどは作成できません。

## Doxygen 設定ファイルの準備

Doxygen の設定ファイル (Doxyfile) は、以下のコマンドで生成できます。

```bat:設定ファイルのテンプレート生成
doxygen -g
```

Doxyfile の文字コードは BOM なし UTF-8。デフォルト設定からの変更点は以下の通り。

```config:Doxyfile (変更が必須)
OUTPUT_DIRECTORY       = （出力フォルダーのパス。パスに日本語は NG）

INPUT_FILTER           = （DoxyVB6.exe のフルパス。パスに日本語は NG）

INPUT                  = （入力フォルダーのパス。パスに日本語は NG）

EXTENSION_MAPPING      = frm=Csharp \
                         cls=Csharp \
                         bas=Csharp

FILE_PATTERNS          = *.bas \
                         *.cls \
                         *.frm

INPUT_ENCODING         = CP932
```


```config:Doxyfile (変更は任意)
OUTPUT_LANGUAGE        = Japanese

FULL_PATH_NAMES        = NO

SORT_MEMBER_DOCS       = NO
```
## Doxygen 実行

以下コマンドで生成できます。(パスに日本語は NG）

```bat:ドキュメント生成
doxygen ./Path/To/Doxyfile
```
うまくいけば、こんな感じのドキュメントが生成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1026594/795e35da-80c5-e570-1d81-5fadf27b7277.png)
Laravel Jetstreamを使ってみる

Laravel Jetstreamは、モダンなアプリケーションのための高度な認証とユーザー管理を提供する強力なツールです。本記事では、Jetstreamを使ったプロジェクトのセットアップから、基本的な機能の活用方法までを解説します。

---

## Jetstreamとは？

Laravel Jetstreamは以下の機能を提供します：

- ユーザー登録とログイン
- メール認証
- パスワードリセット
- プロフィール管理
- APIトークン（Sanctumによる）
- チーム管理機能（オプション）

Jetstreamは、LivewireまたはInertia.jsのいずれかを選択してインストールできます。

---

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

まず、新しいLaravelプロジェクトを作成します。

```bash
composer create-project --prefer-dist laravel/laravel JetstreamDemo
cd JetstreamDemo
```

---

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

Jetstreamパッケージをインストールします。

```bash
composer require laravel/jetstream
```

次に、LivewireまたはInertia.jsを選択してJetstreamをインストールします。

### 2.1 Livewireを使用する場合

```bash
php artisan jetstream:install livewire
```

### 2.2 Inertia.jsを使用する場合

```bash
php artisan jetstream:install inertia
npm install
npm run dev
```

---

## 3. マイグレーションの実行

Jetstreamで提供されるテーブルをデータベースに作成します。

```bash
php artisan migrate
```

---

## 4. 開発サーバーの起動

以下のコマンドで開発サーバーを起動します：

```bash
php artisan serve
```

ブラウザで `http://localhost:8000` にアクセスして、Jetstreamの認証システムが動作することを確認します。

---

## 5. Jetstreamの基本機能

### 5.1 ユーザー登録とログイン

- `http://localhost:8000/register` でユーザー登録。
- 登録後、ダッシュボードにリダイレクトされます。

### 5.2 プロフィール管理

- ダッシュボードからプロフィール情報を更新できます。
- パスワードの変更やメール認証も対応。

### 5.3 チーム管理（オプション）

チーム機能を有効にしている場合、以下の操作が可能です：

- チームの作成
- メンバーの招待と管理

---

## 6. Jetstreamのカスタマイズ

Jetstreamのビューや機能をカスタマイズするには、以下の手順を実行します。

### 6.1 ビューの公開

Jetstreamのビューを変更するには、次のコマンドでビューを公開します：

```bash
php artisan vendor:publish --tag=jetstream-views
```

`resources/views/vendor/jetstream` ディレクトリにカスタマイズ可能なファイルが作成されます。

### 6.2 ルートやコントローラの変更

必要に応じてルートやコントローラを編集します。

---

## まとめ

Laravel Jetstreamは、モダンなWebアプリケーションに必要な認証やユーザー管理機能を迅速に実装するための強力なツールです。LivewireやInertia.jsと組み合わせることで、柔軟かつ効率的に開発を進めることができます。

ぜひJetstreamを活用して、Laravelプロジェクトをさらに強化してみてください！
Laravelでロールベースのユーザ管理、ログイン機能、認証機能を追加してみる


Laravelは、柔軟で強力な認証機能を提供するPHPフレームワークです。本記事では、Laravelでロールベースのユーザー管理や認証機能を実装する方法を紹介します。

## 前提条件

- Laravelの基本的なセットアップが完了していること。
- Composerがインストールされていること。
- MySQLまたは他のサポートされているデータベースがセットアップされていること。

以下では、Laravelプロジェクトの作成から始めて、認証機能を構築していきます。

---

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

まず、新しいLaravelプロジェクトを作成します。

```bash
composer create-project --prefer-dist laravel/laravel RoleBasedApp
cd RoleBasedApp
```

---

## 2. 認証機能の追加

Laravel Breezeを使用して認証機能を簡単に追加できます。

1. Breezeをインストールします。

   ```bash
   composer require laravel/breeze --dev
   php artisan breeze:install
   npm install && npm run dev
   php artisan migrate
   ```

2. ブラウザで `http://localhost:8000/register` にアクセスして、登録ページを確認します。

---

## 3. Spatie Laravel Permissionの導入

ロールベースのアクセス制御を簡単に構築するために、Spatie Laravel Permissionパッケージを使用します。

1. パッケージをインストールします。

   ```bash
   composer require spatie/laravel-permission
   ```

2. 設定ファイルを公開します。

   ```bash
   php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
   php artisan migrate
   ```

3. `config/permission.php` ファイルが生成されていることを確認します。

---

## 4. モデルの設定

ユーザーモデルにロールと権限を紐付けるため、`HasRoles` トレイトを追加します。

`app/Models/User.php` を編集します。

```php
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
}
```

---

## 5. ロールと権限の設定

ロールや権限を設定し、それをユーザーに割り当てます。

1. **Tinkerを使用してロールと権限を作成**

   ```bash
   php artisan tinker
   >>> use Spatie\Permission\Models\Role;
   >>> use Spatie\Permission\Models\Permission;
   >>> $role = Role::create(['name' => 'admin']);
   >>> $permission = Permission::create(['name' => 'edit articles']);
   >>> $role->givePermissionTo($permission);
   >>> $user = User::find(1); // 管理者ユーザーを取得
   >>> $user->assignRole('admin');
   ```

2. **Gateを利用したアクセス制御**

   `AuthServiceProvider.php` にGateを定義します。

   ```php
   use Illuminate\Support\Facades\Gate;

   public function boot()
   {
       Gate::define('edit-articles', function ($user) {
           return $user->hasPermissionTo('edit articles');
       });
   }
   ```

3. **Bladeでの利用**

   ```blade
   @can('edit-articles')
       <a href="/articles/edit">Edit Article</a>
   @endcan
   ```

---

## 6. ミドルウェアでのロール制御

ルートで特定のロールのみアクセスを許可するには、ミドルウェアを使用します。

1. **ミドルウェアの登録**

   `app/Http/Kernel.php` にミドルウェアを追加します。

   ```php
   'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
   ```

2. **ルートの設定**

   ```php
   Route::group(['middleware' => ['role:admin']], function () {
       Route::get('/admin', [AdminController::class, 'index']);
   });
   ```

---

## まとめ

以上の手順で、Laravelにロールベースのユーザー管理と認証機能を追加できます。Spatie Laravel Permissionを使用することで、柔軟なロールと権限の管理が可能になります。

ぜひ試してみてください！
Go言語のサービス層設計 - DBコネクションの効率的な管理方法

# Goにおけるサービス層とデータベース接続の最適な設計パターン

こんにちは！フリーランスエンジニアのこたろうです。

サービス層の設計とデータベース操作について、実践で得た知見を共有します。

## サービス層の責務
- ユーザーリクエストのデータベース操作への変換
- ビジネスロジックの実装
- データベースから取得したデータのハンドラ層用整形

## 非推奨パターンと推奨パターン

### 非推奨：頻繁なDB接続
```go
// 非推奨パターン
func (s *Service) GetPost(id int) (*Post, error) {
    db, err := sql.Open("postgres", "connection-string")
    if err != nil {
        return nil, err
    }
    defer db.Close()
    // ...
}
```

### 推奨：構造体でのDB保持
```go
package services

import "database/sql"

// サービス構造体の定義
type MyAppService struct {
    db *sql.DB
}

// コンストラクタ
func NewMyAppService(db *sql.DB) *MyAppService {
    return &MyAppService{db: db}
}

// サービスメソッド
func (s *MyAppService) PostArticleService(article models.Article) (models.Article, error) {
    newArticle, err := repositories.InsertArticle(s.db, article)
    if err != nil {
        return models.Article{}, err
    }
    return newArticle, nil
}
```

## 設計のポイント
1. sql.DBの接続は初期化時に1回のみ実行
2. DBコネクションをサービス構造体で保持・再利用
3. サービス層はデータ整形とビジネスロジックに集中
4. コネクション管理の一元化

この設計により、保守性の高い効率的なアプリケーション構造を実現できます。

## 参考文献
-『Goで作るはじめてのWebアプリケーション改訂版』技術書典
- https://techbookfest.org/product/jXDAEU1dR53kbZkgtDm9zx
CLIだけでSuperColliderを起動してTidalCyclesで音を鳴らす

# はじめに
TidalCyclesを使って音を鳴らすにあたり、SuperColliderのGUIアプリケーションを操作したり、AtomやVSCodeといったエディタでTidalCyclesのコードを記述する必要があります。
しかし、一応CLIのみで音を鳴らせるので、その方法を記述します。
※ macosとLinuxについてはこちらの方法で実現できることは確認していますが、Windowsについては確認していません。

# 方法
## sclangを実行しSCサーバーを立ち上げてSuperDirtを起動する
```
$ sclang
$ SuperDirt.start
```
`sclang`の実行についてパスが通っていない場合、macosについては `/Applications/SuperCollider.app/Contents/MacOS/sclang`で起動できます。

## ghciを起動してTidalCyclesで音を鳴らす
[BootTidal.hs](https://github.com/tidalcycles/pulsar-tidalcycles/blob/master/lib/BootTidal.hs)を利用します。

```
$ ghci
ghci> (BootTidal.hsのソースをコピー&ペーストして実行)
tidal> d1 $ "bd bd bd bd"
```
Python package install using pip

今回はPythonのパッケージ管理システムである`pip`を用いて、Pythonのパッケージ (ライブラリやモジュールとも呼びます) をインストールしていきます。
まだ、`Python`自体をインストールしていない方は、[こちらの記事](https://qiita.com/h4ru/items/86b13f698f2a4047fbcb)を参考にインストールしてください。

## Python package install

`pip`は`Python`のインストールとともに自動でインストールされます。
コマンドプロンプトやターミナルを立ち上げて、`pip`がインストールされているか確認しましょう。

```bash
$ pip --version
```

以下のように表示されていればOKです。

```bash
pip 24.3.1 from \path\to\pip (python 3.13)
```

もしインストールされていなければ、`Python`を再インストールするか、`pip`の公式インストーラををダウンロードして実行しましょう。

```bash
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py
```

それではパッケージをインストールしていきましょう。
インストールコマンドは以下の通りです。

```bash
$ pip install <package>
```

パッケージのバージョンを指定する場合は以下の通りです。

```bash
$ pip install <package>==<version>
```

## Python package management

### インストール済みパッケージの一覧表示

環境にインストールされている`Python`パッケージの一覧を表示するには、以下のコマンドを使用します。

```bash
$ pip list
Package    Version
---------- -------
numpy      1.21.0
pandas     1.3.0
pip        21.1.3
```

### パッケージのアップデート方法

パッケージの最新バージョンにアップデートするには、以下のコマンドを使用します。

```bash
$ pip install --upgrade <package>
```

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

不要になったパッケージをアンインストールするには、以下のコマンドを使用します。

```bash
$ pip uninstall <package>
```

## おすすめのパッケージ

### データ分析


* [numpy](https://numpy.org/ja/) : 科学技術計算の基礎パッケージ
* [scipy](https://scipy.org/) : 科学計算のための基本アルゴリズム
* [pandas](https://pandas.pydata.org/) : データフレームライブラリ
* [polars](https://pola.rs/) : データフレームライブラリ
* [matplotlib](https://matplotlib.org/) : グラフ描画ライブラリ

### 機械学習

* [sklearn](https://scikit-learn.org/stable/) : 機械学習ライブラリ
* [PyTorch](https://pytorch.org/) : 深層学習ライブラリ
* [TensorFlow](https://www.tensorflow.org/?hl=ja) : 深層学習ライブラリ

### Webアプリ

* [Django](https://www.djangoproject.com/)
* [Flask](https://flask.palletsprojects.com/en/stable/)
* [FastAPI](https://fastapi.tiangolo.com/ja/)

### デスクトップアプリ

* [Tkinter](https://docs.python.org/ja/3.13/library/tkinter.html) : 標準ライブラリ
* [PySumpleGUI](https://www.pysimplegui.com/)
* [PyQt](https://doc.qt.io/qtforpython-6/)

### その他

* [OpenCV](https://pypi.org/project/opencv-python/) : 画像・動画処理ライブラリ
* [Pillow](https://pypi.org/project/pillow/) : 画像処理ライブラリ
* [sqlarchemy](https://www.sqlalchemy.org/) : SQL操作用ライブラリ

## 終わりに
今回は`Python`のパッケージのインストール・管理とおすすめのパッケージについて紹介しました。今後、パッケージの解説記事についても投稿していこうと思いますので、参考にしていただければと思います。

## 関連記事
1. [Python Install](https://qiita.com/h4ru/items/86b13f698f2a4047fbcb)
【継続命】IaCもGitHubも未経験だった私が、フリーランスとして現場に参画できた話

https://x.com/satan_engineer/status/1881326055447015876

恥ずかしい話ですが、クラウドエンジニア（Azure）のくせにフリーランスになるまで、IaCやGitHubを実務で使った経験がまったくありませんでした。

クラウドエンジニアとして働くうえで、この2つを使えないのはさすがにまずい……そう感じながらも、何から始めればいいのが分からず毎日モヤモヤしていました。

ここでは、そんな私がIaC、GitHubをどうやって身につけたのか、そして今の自分に不足しているスキルをどうやって補えばいいのかをお話しします。

## 1. 足りていなかったスキル

私に不足していたのは、前述したとおり**IaC**と**GitHub**の2つの経験です。クラウドエンジニアなら今でこそTerraformなどを使いこなすのが当たり前かもしれませんが、当時の私は触れたことすらありませんでした。

また、ソースコード管理ツールとして誰しもが使っているGitHubも未経験に近い状態でした。「さすがにITエンジニアでgit pullしか知らないのはマズイよな…。」と焦っていたことを今でも鮮明に覚えています。

## 2. どうやってできるようになったか

結論からいうと、以下の手順で習得しました。

- **TerraformのソースコードをQiitaからコピペ**  
  手始めに、完成しているコードをQiitaで探して写経しました。ゼロから書くより、動くことが保証されたソースを読み解くほうが理解も進みやすかったです。

- **コピペをアレンジ、カスタマイズ**  
  次に、取得したコードをアレンジして自分の環境に合わせてみました。変数の値やモジュールを変えてみることで、Terraformの基本的な仕組みが頭に入りました。

- **PJTで構築したインフラを実現してみる**  
  過去のプロジェクトの構成を再現する形でコードを書き、実際に動かすことで「どのようにモジュール化すれば使いまわせるか」「リソースの依存関係はどうなっているか」などをイメージしやすくなりました。

- **量産したソースコードをGitHubにアップ**  
  学習用に書いたコードをどんどんリポジトリにコミットしました。その過程で、プルリクエストやブランチ運用を試し、GitHubの基本操作を体得しました。

- **GitHub Actionsでデプロイまで自動化**  
 コードをマージした段階でインフラが更新されるように設定しました。また、この作業に合わせてtfstateファイルをAzureのBlob Strageで管理するように設定したので、Terraformで最も厄介な

- **dev、prod、stgでパラメータを使い分けられるように手直し**  
  GithubのEnvironmentを利用して、環境ごとにGitHub Actionsで利用する変数を切り替えられるよう見直してみました。複数環境を扱っても同じクオリティで運用できるようになったので、実務への応用力がかなり上がりました。

このプロセスを**毎日1時間ほど、半年間**コツコツ続けた結果、現場に入ったときにも抵抗なくIaCとGitHubを使いこなせるようになっていました。

## 3. 今の自分に足りないスキルを補うには？

- **足りないスキルがあっても不安になる必要はない**  
  どんなに優秀なエンジニアでも、すべてを網羅できるわけではありません。足りない部分があるのは自然なことなので、焦りすぎる必要はありません。「今の自分はコレができない」という事実をまずは素直に認めましょう。

- **足りないスキルは「毎日少しずつ」勉強する**  
  いきなり大きな目標を立てると挫折しやすくなります。1日10分でも構いません。決めた時間を確保して着実に学習を積み重ねることが大切です。

- **継続がスキルアップへの最短の近道**  
  TerraformやGitHubを身につけたときも、結局は半年間の継続が成功のカギでした。学習内容が少しずつ蓄積していくことで、ある瞬間に「ん？なぜか分からないができるぞ…！！」という瞬間が訪れます。

フリーランスとして自分のスキルアップに投資できる時間は自由にコントロールできます。足りないスキルを見つけたら、毎日少しずつでも手を動かし、情報収集を続ける。そうすれば、いつの間にか次のステージへ進んでいるはずです。

ここまで読んでいただきありがとうございます。

Xではエンジニアに有益な発信をしていますので、ぜひフォローよろしくお願いします！！

https://twitter.com/satan_engineer
【Next.js14 AppRouter】ページの組み立て方をAppleの商品ページを使ってイメージしてみた。

こんにちは。Naotoです。

Next.jsにおけるページの組み立て方について、AppleのMacBookの商品ページを使って、イメージを整理してみました。

また、文中にキャッシュについての記載がありますが、キャッシュに関する説明は省略しています。
以前にまとめた記事がありますので、こちらをご覧ください。

https://qiita.com/Naoto_eng_7010/items/efa174517fddd84f9ce3

## Server Componentsと Client Componentsの分け方

![00ADB162-A9A5-4869-AB73-F6D5A92877D7_1_201_a.jpeg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817219/eaba6328-17d0-6615-908b-422297b55ed4.png)


### Server Component（インタラクションが少ない）→ ピンクの部分

- ルート（ページ）単位でStatic Rendering（SSG or ISR） or Dynamic Rendering（SSR）かが決まる。
    - 可能な限り、Static Renderingになるようにする。
    - 上記画像の場合は、製品ページのため、Static Renderingがベスト。（更新が少ないため）

**Dynamic Rendering（SSR）** 

- 以下のいずれかの条件を満たすページは、Dynamic Renderingになる。
    1. データフェッチ時にData Cacheを使っていない。（no-store もしくは、revalidateが0。）
    2. PrismaなどでDBアクセスしているかつ、unstable_cacheを使用していない。
    3. `cookies()`や`headers()`などのDynamic APIを使用している。
    4. `pages.tsx`か`layout.tsx`の中に、`dynamic = "force-dynamic";` もしくは、`revalidate = 0;`を書いている。
    <br>
- １と２に当てはまる場合、Streamingを使用すると、データフェッチ完了前に、静的部分＋`loading.js`や`Suspence`のfallbackUIを先に表示しておき、データフェッチ部分は後から表示できる。（Router Cacheに静的部分＋`loading.js`や`Suspence`のfallbackUIのキャッシュがある場合はより高速に表示できる。）
    - Streaming未使用時
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817219/cbcb70f0-6549-b054-b062-a98cfd3b04ec.png)
        
    - Streaming使用時
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817219/55d9aac8-095e-8213-8ca6-ce82c58d4e55.png)

**Static Rendering（SSG or ISR）** 

- データフェッチがないページはStatic Renderingとなり、Full Route Cacheが使用される。（Data Cacheは使われない。）
- データフェッチ時にData Cacheを使用している場合は、Static Renderingとなり、Data CacheとFull Route Cacheが使用される。
- キャッシュがない（切れている）場合は、初回アクセス時にオリジンサーバにアクセスが行われ、その結果を元にキャッシュが生成され、Data CacheおよびFull Route CacheにSETされる。

**PPRの場合（Next.js v15）**

- Static RenderingとDynamic Renderingの併用ができる。
- 静的部分＋`loading.js`や`Suspense`のfallbackUIをStatic RenderingとしてFull Route Cacheを使用して瞬時に表示し、動的（データフェッチ部分）のみDynamic Rendering(SSR)で後から表示できる。

### Client Component（インタラクションが多い部分）→ 青の部分

- Client Componentによって形成されている。
- ピンク部分の画面を表示するためのHTML + RSC Payloadと一緒に送られてくるJavaScriptバンドルによってクライアント側で画面が作成される。
- CSRではあるが、初期アクセス時においては、静的部分はあらかじめサーバー側でレンダリングされ、クライアント側ではハイドレーションのみ行われる。
- 初回アクセス時以降の操作時は、クライアント上で再レンダリングされる。（SPAのイメージ）

## まとめ
AppleのMacBook商品ページの場合、上記のようなイメージになるのかなと思います。
また、PPRについては、Next.js v15以降の新機能になります。
今までページごとにStatic/Dynamic Renderingを決める必要がありましたが、PPRが登場すれば、コンポーネント単位で、上記を決めることになると思います。

今回の記事は以上です。

最後までお読みいただきありがとうございました！
フリーランスに向いているシステムエンジニアの特徴

システムエンジニアは他の仕事と比べてフリーランスになりやすいです。

ですが、フリーランスが一概に良いとはオススメしていません。

フリーランスに向いている人もいれば、会社員のほうが向いている人もいます。

今回の記事では、フリーランスに向いているエンジニアの特徴を紹介します。

## エンジニアとしてビジョンがしっかりあること
どういうエンジニアとして働いていきたいか。
目標やゴールが決まっている人のほうが、向いています。

フリーランスは、会社員と異なり昇進や役職、異動などがありません。
そのため、自分でキャリアの目標を設定する必要があります。

「次にどんなスキルを伸ばすのか」
「どのような案件に挑戦するのか」

キャリアビジョンを決め、計画的なブランディングとスキルアップが、収入アップやその後の案件獲得に繋がります。
継続的に新しい技術のキャッチアップやトレンドを学習するため、目標をしっかりと立てていきましょう。

https://qiita.com/ono-ayumu/items/a8b0a457baaf9c581207

## 向上心があること
上述でも書いていますが、継続的に新しい技術のキャッチアップやトレンドを学習する必要があります。
スキルだけでなく、強みとして伸ばしていく分野・業界知識、新しいスキルへの挑戦。

おすすめは、セミナーやイベントへの参加です。
モチベーションと新しいことを知ること、視座の高いエンジニアとの出会いは、大切です。

https://qiita.com/ono-ayumu/items/a1128c3a5e370c96c6dc

## 自己管理できること
スケジュール管理、タスク管理はできて当たり前です。
他にも返信のスピード、確定申告のため収支の管理もする必要があります。

また、健康管理も大切です。
健康が仕事の質と量に影響してきます。
体調不良で休むと、そのまま収入が減るのがフリーランスです。

https://qiita.com/ono-ayumu/items/2b7354b1b191de93e999

## 当たり前のことができる
社会人として当たり前のことをやりましょう。

- 時間を守る
- 進捗や問題点をホウレンソウする
- 引き受けた仕事は最後までやり遂げる
- 礼儀とマナーを守る
- 個人情報や機密情報を漏らさない

https://qiita.com/ono-ayumu/items/474f87605d744a2a5d78
windows11 chrome 遅い Realtek Gaming 2.5GbE Family Controller が原因

# ネットワークが不安定

# 症状
有線LAN接続が不安定、遅い
すべてのブラウザで遅い
ただ、早い時もあるが原則遅い

# やったこと
ブラウザの設定を確認
chrome.firefox、edgeでテスト
ルーター、モデム、LANケーブルの総取り換え
別のノートパソコンから無線でテストしたところ問題無い

# お願い
パソコンの中身が原因かどうかも不明だが、
中身の故障については
対応することができないので来てもらって見て欲しい
見積もりも欲しい


上記のエラーが出た。
で、ドライバでググると

Realtek Gaming 2.5GbE Family Controller が原因らしい

ということで設定を変更したところ、
今のところ問題なく使えてる。

https://tomokatsu.hatenablog.com/entry/2021/11/05/201044
https://eng-notebook.com/20240104/1704378503#google_vignette

というか、不良品だろこんなの。
最初から設定しておけよ。

ほとんどの人わからないでしょ。。。
2Dのキャラクターをインポートしてボーンを作成



# 2Dのキャラクターをインポートしてボーンを作成する


### 目次

- 素材の準備
- キャラクターにボーンをつける

## はじめに
2Dキャラクターをインポートからボーン作成、アニメーション作成まで一通りの流れを体験したので記録としてここに残します。

## 素材の準備
- まずは外部のアプリケーションで生成したキャラクターの素材を**psb形式**でunityにインポートします。
:::note info
psb形式とは？
Adobe Photoshopで保存できる形式
:::

:::note warn
「Adobe Photoshopでpsd形式で保存した後に外部サイトを使用してpsb形式に直すといいよ！」的な記事を見て**外部ツールを用いて実践したがpsdからpsb形式に変換したときにレイヤー情報が失われてうまくいかなかった**。
**最初からpsb形式で保存しておくのが無難**。
:::

- unity側の準備としてとりあえず下記のPackageがあれば大丈夫。今どきのLTSのunity editorのバージョンのやつには大体入ってるみたい
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/b72d1159-5647-3604-105a-b43fd1485eac.png" width=100%>

- importしたキャラクターの名前の後に（PSD Importer）という表記があればインポートが成功している

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/6d1420f2-5e0e-52c7-f2d8-7d4a95e625e6.png" width=100%>

## キャラクターにボーンをつける
### ボーンの編集画面を開く
- importしたキャラクターのInspectorにある**Open Sprite Editor**をクリックする
![スクリーンショット 2025-01-22 194418.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/3eba8086-e9a7-1f6c-e946-4e28b9c2ff1f.png)

- 下記の写真のような画面が開くはずです。左上の**Sprite Editor**という項目を**Skinning Editor**に変更します。
![スクリーンショット 2025-01-22 195348.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/9834438e-8293-f690-3534-7e957d84720d.png)


- Skinning Editorを選択すると下記の画像のようにレイヤーの情報を保持したままレイヤーを自動的に並び替えてくれます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/f418fa4c-4e58-f860-1e2c-df9f3562a45b.png)
<br></br>

- 左側のオプションの**Create Bones**でボーンを作成していきます。⇩
:::note info
右上の**Visibility**を押すとBoneとレイヤーの階層構造についてわかるのでこの機能は常時つけておきたい
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/3aa51434-0c64-029f-f15e-69a4a0379d65.png)

<br></br>
- なんやかんやで完成したのがこれ⇩
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/bd885027-0da2-a6ab-acf4-0295ba327c53.png)
ポイントとしては**動きそうな部分には全部boneをつける**のと**細かいboneをまとめる大きなboneを作成すること**。

これができたら**Auto Geometry**を実行してboneがレイヤーに与える影響度を設定します。
実際に実行してみると下記の写真のようになります。このままではとんでもないことになるので**Bone Influence**や**Weight Slider**を使用してboneがレイヤーに与える影響を調節していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/72882acf-1698-ecb8-f3a8-1fe2148587cc.png)

例えば上記の画像でいえばキャラクターの体（body）の部分に対して複数のboneが影響しているのでそれを取り除きます。ここではBone Influenceを使用します。
![スクリーンショット 2025-01-22 214702.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/06e0992e-413f-17cf-8326-02b3ad62a02a.png)

使い方は簡単で上記の画像の「ーボタン」を押して[body bone]以外を取り除いていけばいいです。
<br></br>
上手く整理できると下記の写真のようになります⇩
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/cc417117-3c0f-efed-1074-69771466444f.png)

:::note info
腕の関節の部分のboneの影響力は上記の画像のようにグラデーションにすると自然な腕の曲げ方に見えます
:::

## まとめ
- 次はこのボーンを作成したキャラクターを使用してアニメーションを作成します。
[→アニメーション作成の記事へのリンク](https://qiita.com/kenshin_8799/items/61fdad523e6f3777c067)
【AWS】Lambda用セキュリティグループ削除時に「ネットワークインターフェイスをデタッチできません」が出る場合

# 概要
AWSリソースで不要になったものを削除していたところ、
AWS Lambdaのセキュリティグループの削除でエラーになり少し詰まったので、紹介します。

# エラー内容
Lambda用のセキュリティグループを削除しようとしたら以下のエラー。

> 一部のセキュリティグループは削除できません
以下のセキュリティグループは削除できません。デフォルトのセキュリティグループであるか、他のセキュリティグループによって参照されているか、インスタンスまたはネットワークインターフェイスに関連付けられています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/a4a3fb75-a6c1-e963-9e0c-2029bc33bb24.png)

ENIにまだ紐づいているためかな？ENIの方を削除すればいいのか？と思い、
デタッチしようとしましたが、こちらもエラー（強制デタッチも不可）。

> AWS Lambda VPC ENI  ネットワークインターフェイスをデタッチできません

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/82e1ce98-b119-02dc-61f0-27549c4a7cd8.png)

いったいどうやって削除すればいいんだ！？

# 解決方法
AWS Lambdaのセキュリティグループ、という点が一つポイントでした。

というのも、Lambdaの場合はLambdaバージョンで指定したセキュリティグループを削除しようとすると、上記のエラーになるためです。

私の場合、検証のために過去に作成したバージョンの中で、今回の削除対象であるセキュリティグループを指定していました。これが原因ですね...以前作ったものだったので頭の中から抜けていました。

ということで、過去に使ったバージョンは全部不要なので、全削除しました。

その後も、しばらくは削除できません（最大20分待つらしい）が、しばらく経つと、勝手に消えました。
これでセキュリティグループの削除もできるようになりました。
よかった〜。

以下の記事にありますが、Cloudformationから削除する場合でも同様に20分くらい待たされるみたいです。

これを知らずに20分待っていたら焦りそうですw
LambdaのENI削除時には注意が必要ですね。

https://dev.classmethod.jp/articles/lambda-delete-cloudformation-stack/

## 参考記事

https://qiita.com/uetaket/items/24a704a73df7dc70f5a1
bunのメリット！nodejsはもういらない！

Bunというパッケージマネージャー兼NodeJS互換JavaScriptランタイムが便利すぎます。メリットを紹介します。
## 速い
何をするにしても速いです。
Bunのサーバー・WebSocketサーバー・bun.sqlite等に、JavaScriptの実行自体も速く、パッケージマネージャとしてもインストールにグローバルキャッシュ等があってとても速いです。
## 打ちやすい
bunのキーボードの位置がとてもいいです。位置的にはnpmを左にずらした感じです。真ん中によってると打ちやすいですよね！
パッケージマネージャは大量にコマンドを打つでしょうからこれは大きいメリットではないでしょうか。
## 直接TypeScriptが動く
`bun script.ts`とかですぐTypeScriptコードを実行できます。しかも型エラーも出るらしい。
JSXも対応らしいです。
## bunのnpmパッケージがある
bunのバイナリがnpmパッケージにあるので、インストールしておけばbunを使ってない環境からでも互換性を保って実行できます。
## もちろんpackage.jsonやnodejsのAPIの互換性有
まあ当たり前というか他も同じようです。
~~しかしbun.lockbというバージョン固定ファイルはバイナリで密度が高いです！
なのでハードディスクの節約ですね！(gitで追跡しずらい)~~
bun.lockというJSON形式になってgitで追跡しやすくなりました！
## esモジュールとCommonJSどちらも使用可能
ごっちゃになって発狂することあるのでたすかります！
## API充実
ざっとこんなものが。
- ホットリロード
- バンドラ(esbuild互換？)
- Web標準基準のAPI(Request等)
- HTTPサーバー
- テストツール(Jest互換)
- PostgresSQL・Sqliteドライバ
- WebSocket(HTTPサーバーと併用)
- 実行ファイルにコンパイル

bunのバンドラはiifeのグローバル出力がまだできてないので`(n-m-;)`ですが
もうそういうテンプレ全部bunのAPIで済むじゃん！！
## デメリット
ちゃんと紹介します。
- バンドラでIIFE用にビルドするときグローバルへの代入をするのにラッパー(?)が必要
- pnpmみたいな依存関係の依存関係の問題が解決されてないっぽい
- enterキーでpublishの認証画面が出てこなかったりする
- replが上手く動かない
- nodejsがインストールされてない場合、npm-run-allが上手く動作しない
- 発展途上でクラッシュしやすい(ソース:[自分が投稿したissue](https://github.com/oven-sh/bun/issues?q=is%3Aissue%20author%3ATNTSuperMan%20))、ならバグを見つけて質を上げよう！
現在は体感ではHTMLのホットリロードが不安定です(いやその機能が新しすぎてそうだろ！ってなるぐらい)
## 結論
npm要らない！bun入れよう！

:::note alert
あくまで個人の意見です。
:::
コミュニケーションはテキスト？画像？動画？

## はじめに
日々の業務お疲れ様です。
この記事に巡り合わせたということは、チームで仕事をされている方ではないでしょうか？

日々メンバーと会話をしながら業務を行うにあたって、どうやったら伝えたいことを伝えられるのだろう？と考えているのではないでしょうか？

タイトルの通り、コミュニケーションの手段は大きく分けて
1. テキストベース
1. 画像ベース
1. 動画ベース
1. 面着

の4種が考えられるのでしょうか？
この記事では、1 ~ 3 のテキスト、画像、動画にフォーカスし、どの様に情報を伝達するのがいいのか？を考えてみたいと思います。

## 情報量の関係
単位時間あたりの情報伝達量は、
`テキスト < 画像 << 動画` の関係になります。

テキストベースの情報伝達能力を1とすると、
画像は7倍、動画は5000倍の情報伝達能力があると言われています。

という事は、画像や動画で説明すると相手に伝えられる情報量は圧倒的に増加するということになります。

メールやチャットよりも図で説明する

図で説明するよりも動画コンテンツで情報を伝える

そりゃそうでしょ！ってここまで読んだ人はふと思うのです。
この記事も文字だけじゃないか。と。

## 画像のインパクト
先ほど、この記事内で、
> テキストベースの情報伝達能力を1とすると、
画像は7倍、動画は5000倍の情報伝達能力があると言われています。

と記述しました。

![情報伝達能力](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750623/9ebd23a6-df4a-c148-1c50-e7bd839054b1.png)

絵の見せ方にスキルが必要かもしれませんが、
10分程度で簡単に描いた絵の方が強いインパクトで伝わるのではないでしょうか？

## なぜ情報が伝わるのか？
有名な数値になりますが、
人はコミュニケーションの際に、視覚情報55％、聴覚情報38％、言語情報7％の割合で影響を受けていると言われて
います（メラビアンの法則）

ということは、ほとんどの情報を視覚・聴覚で受け取っていることになります。

絵にしますね？
![メラビアンの法則](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750623/93466e86-3967-a137-5da0-ff53c10d8044.png)

ほとんど、言語情報からは影響を受けていないのです。
何せ、たった7%なのですから。

過半数を占める視覚情報に訴える、画像の効果を感じるのではないでしょうか？
ここに、聴覚情報を付加する動画コンテンツはトータル93%のパワーを秘めているわけですから、
動画の情報伝達能力が高いのは頷けるのではないでしょうか？

## じゃあ、全部動画で良いじゃない！
→よくないです。
が結論なんですが、テキストベースの情報は、変更に強いです。
短時間ですぐ修正することができます。
日頃パワーポイントなどでプレゼンテーションの資料を作成する機会の多い方はイメージつきやすいと思いますが、絵に起こすのも、修正するのも時間がかかります。
動画は、撮影・編集・書き出し・アップロードなどの工程を考えると、非常に時間がかかるものですので、ちょっとした編集ミスを差し替えるのにも一苦労です。

伝えたい情報量や質と、情報を作る時間、変更の頻度を天秤にかけながらどの手法を選ぶのが最適か？を考える必要があると思います。

メールやチャット一辺倒のコミュニケーションだけではなく、他の手段も横目に見ながら、どの手段をミックスするのが最適かを日々考えながらコミュニケーションを図っていきたいものです。

## 最後に
あくまでも個人的なまとめになりますが、
テキストベースのコミュニケーションの比率を下げて、画像を主体とするようなコミュニケーションの比率を増やして効率よくコミュニケーションをとっていきたいなと思います。

こんな感じでね↓
![スクリーンショット 2025-01-22 21.33.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750623/1c8b9c12-220c-ab4e-9876-53bd4db03208.png)

(なんか、ユニットテストから統合テストを増やしていくような絵になったなぁ。。笑)
ファイルパスの開き方

ファイルパスの開き方を3つ紹介します。

【1．Windowsキー＋Ｒ を使う方法】
　①対象のファイルパスをコピーします。
　②「Windowsキー＋Ｒ」を押して「ファイル名を指定して実行」ウィンドウを開きます。
　　　 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115057/ea0084ea-2200-c7cc-ffd4-8fd6b9303e11.png)

　③「名前(O):」の横の枠に①でコピーしたパスを貼り付けます。
　　　 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115057/175cbdf3-3d8b-44d6-e3c1-bf7c8ffb8f1c.png)
　④「Enter」を押します。

【2．エクスプローラーのアドレスバーを使う方法】
　①対象のファイルパスをコピーします。
　②「Windowsキー＋Ｅ」を押すかお好きなフォルダーを開きます。
　③以下画像の赤枠のアドレスバーに①でコピーしたパスを貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115057/641330ad-a09c-2cb9-4286-3e08fa88427e.png)
　④「Enter」を押します。

【3．スタートメニューを使う方法】
　①対象のファイルパスをコピーします。
　②スタートメニューの検索ボックスに①でコピーしたパスを貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115057/3369bc12-fb24-8e2b-79bf-a501f783d3ae.png)


　③「Enter」を押します。

以上3つのファイルパスの開き方の紹介でした。
携帯アプリのトラブル（？）

# 携帯アプリのトラブル（？）

しばらく海外にいて、この度、日本に戻ってきました。
お店や銀行など、ありとあらゆる場所で、「携帯アプリを登録してください」、「携帯アプリで申請してください」と言われて QR コードのついた説明書をもらうので、家に帰っていろいろな携帯アプリを使ってみると、いろいろなトラブルらしきものに出くわします。
私だけでしょうか...。それとも携帯アプリのセキュリティ考慮の仕様なのでしょうか？
今後、私も IoT の仕事に関わりますので、肝に銘じようと思います。
今後、他のトラブルらしきものに出くわしたら、随時、更新していきます。って、今後もトラブルらしきものに出くわすのでしょうか...。

## トラブル？

* 利用規約画面において、タイムアウトが発生してどうしようも無くなる。他の携帯アプリの利用規約画面では、[再読込み] ボタンが用意されているのだが。
* セキュリティに関わるような携帯アプリでないのに（単なる公共情報を表示するだけの機能のみなのに）、携帯アプリから一時的に離れて、また携帯アプリに戻るとホーム画面に戻ってしまう。
* 電話番号で新メールアドレスを発行してもらおうとしたところ、新メールアドレスが発行できず、過去の電話番号の持ち主のメールアドレスが表示されてしまう。別のアプリ（かんたん設定）を使用したら、あっさり新メールアドレスを発行できた。
* [パスワードを表示する] チェックボックスがあるのに、チェックボックスが押せない。
* [戻る] ボタンがあるのに、前画面に戻らない。
* [戻る] ボタンでホーム画面に戻っても、[戻る] ボタンがある。その [戻る] ボタンを押しても何の反応もない。だったら、その [戻る] ボタンは、消すか押せなくするべきでは？。
* [戻る] ボタンがあるので、[戻る] ボタンを押下したら、“URL が複数回押されました” のエラーとなり、その後の画面も変なエラーになってしまう。
* 何画面かの遷移をする画面において、[戻る] ボタンがあるので、値を入力した状態で [戻る] ボタンを押下し、戻った画面から [次へ] ボタンを押すと、入力したはずの値が消えている。
* [現在の前の住所] ラジオボタンで “海外” を選択することができない。
* 各テキストボックスに入力項目エラーメッセージを表示するが、誤った位置にエラーエラーメッセージを表示する。
* 会員登録でメール連絡を希望しないを選択したのに、会員サイトで設定を見るとメール連絡希望になっていた。

## トラブル（結局、電話で対応してもらうもの）

* 認証設定において、ショートメッセージに認証コードが送られてくる。あきらかに正しい認証コードを入力したものの “コード不一致” のエラーになる。コールセンターに電話したところ、特定の会員番号の登録失敗のバグであることが判明したため、先方が手入力で対応するとのこと...。
* 銀行経由で会社から送付された説明書からは携帯アプリの初回起動で口座開設画面が表示されるように読み取れるが、口座開設画面が表示されることはなく、ホーム画面から口座開設画面を探し出しても見つからず。コールセンターに電話してもなかなかつながらず（2時間かかってつながった）。結果、携帯アプリでは特定の支店の口座開設ができなくなったとのこと...。で、その支店に電話したら、振込み詐欺が多発したため、携帯アプリによる登録ではなく Web による登録になったとのこと...。だったら、会社にその旨を共有しておいてくれよ...。

## 仕様が微妙なもの

* パスワードに指定できる文字は、英小文字と数字のみ。今時、大文字の混在が可能（または混在を強要）するのが普通と思うが...。
* 1～2日待たないと買い物ポイント点数が反映されない。その旨の説明がない。
* 複数の [確認] ボタンと [同意して次へ] ボタンがあり、初期状態では [同意して次へ] のボタンが押下できなくなっている。パッと見、どこで同意するのかが不明である。複数の [確認ボタン] 押す行為が “同意” に当たることが分かりにくい。[確認] ボタンでなく [同意] ボタンであれば、すぐに分かったのだが。
* ランダムに表示された文字列（ぐにゃぐにゃの文字列の画像）をテキストボックスへの入力において、2 回間違っただけで認証エラーになってしまう。手が滑っただけなのだが...。普通は 3回くらい許されるのでは？
* 住所や電話番号を変更する前にはトークンの取得が必要で、過去の住所でハードトークン生成器を受け取る、または過去の電話での存在確認の操作してからソフトトークンを取得するとのこと。過去の住所を引き払っていたり過去の電話を処分したりしている人は、結局、窓口に行くしかないのか...？。
* 冊子から 1ページのみを切り取った PDF の説明が付いていて、その説明の中に “詳細は、nページを参照してください” とあるが、そのページを見ることができない。
* 性別が “男” か “女” しか選べない。現行の法律からいって、そういうものか...。

## セキュリティ上、どういう仕様がよいのか...、というもの

* クレジットカード登録において、パスコードを 1回間違えただけで、認証エラーになってしまう。手が滑っただけなのだが...。お金に関わることだから、厳格なほうがよいのか？
* ショートメッセージにセキュリティコードを送ってくると、携帯の画面の上にショートメッセージがポップアップ表示される（トーストメッセージと呼ぶ）。このとき、2種類のトーストメッセージがある。便利さをとるかセキュリティを取るか...。
    * メッセージの初めにセキュリティコードを記述しているため、トーストメッセージにセキュリティコードが見える。
    * メッセージの後ろのほうにセキュリティコードを記述しているため、トーストメッセージにセキュリティコードが見えないようになっている。
BedrockのClaude v2、Claude v2.1、Claude Instant、Claude 3 Sonnet（特定のリージョン）がレガシー扱いになりました

以下のモデルがレガシーになったようです。合わせて、EOLの日もアナウンスされています。

| Model version | Legacy date | EOL date |
| --- | --- | --- |
| Claude v2, Claude v2.1 | January 21, 2025 (all regions) | July 21, 2025 (all regions) |
|Claude Instant | January 21, 2025 (all regions) | July 21, 2025 (all regions) |
Claude 3 Sonnet | January 21, 2025 (us-east-1, us-west-2, eu-central-1, eu-west-3, eu-west-1 regions) | July 21, 2025 (us-east-1, us-west-2, eu-central-1, eu-west-3, eu-west-1 regions) |

https://docs.aws.amazon.com/bedrock/latest/userguide/model-lifecycle.html

:::note
東京を含むアジアパシフィックのClaude 3 Sonnetは対象外のようです。
:::

## 基盤モデルのライフサイクル

以下のYouTubeでわかりやすく解説されています。（頭出ししてますので、いきなり基盤モデルのライフサイクルについて確認できます）

<iframe width="560" height="315" src="https://www.youtube.com/embed/fDuvLF32i-M?si=5iW5zqBNV1UF--_m&amp;start=1200" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

Bedrockで提供されているモデルは、基盤モデルのライフサイクルが定義されています。

- **アクティブ**：モデルプロバイダーが積極的に開発に取り組んでおり、バグ修正や軽微な改善などの更新が継続される
- **レガシー**：より優れた最新バージョンが存在する場合にレガシーとなる。レガシーが指定される際にEOLの日が設定される
- **EOL**：モデルは利用できなくなり、すべてのリクエストが失敗する

ドキュメント上では以下も明記されています。

- ベースモデルは、リージョンで提供されてから最低12ヶ月間はサポートする
- モデルをEOLにする6か月前までにお客様に通知する

「Claude 3.5 Sonnetが登場したので、古いモデルはEOLする日を設定したよ。期日までに移行してね」ということですね。

## ちなみに

Anthropicのページでは「Deprecated」という表現になっています。

https://docs.anthropic.com/en/docs/resources/model-deprecations

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/9633822b-ee45-f9cc-a458-1b102f3ebd05.png)
福岡出身システムエンジニア誕生記(フリーランスになるまで)

# はじめに

初めまして、自己紹介させていただきます。

1995年生まれ福岡出身フリーランスエンジニアです。
先日福岡に帰省して、いろいろ自分のこと振り返るの大切だなとおもい、
今回記事を書くことを決断しました。

普通の人間がフリーランスになって生活しているという一例をシェアできたらとおもいます。
誰かの参考になれば幸いです！

今回は社会人3年目後半について書いてみようと思います。

# 目次
##### ・学生~就活編⇒https://qiita.com/Yutajino/items/bf074102e254457af934
##### ・1年目前半編⇒https://qiita.com/Yutajino/items/37d0ab0cd64d063870b7
##### ・1年目後半編⇒https://qiita.com/Yutajino/items/a4f3ac0e4f6821a3b264
##### ・2年目前半編⇒https://qiita.com/Yutajino/items/fccb4ce3c38186d0eb3b
##### ・2年目後半編⇒https://qiita.com/Yutajino/items/ec6f2895e59343f255b0
##### ・3年目前半編⇒https://qiita.com/Yutajino/items/4961a0983fde122adece
##### ・3年目後半編⇒本記事
##### ・フリーランス~失敗編⇒完成次第リンク貼ります
##### ・失敗~現在編⇒完成次第リンク貼ります

# 自分の将来像
ありがたいことに3年目で
複数プロジェクトに参画して仕事をさせてもらっていて
会社に期待してもらっていることをひしひしと感じてました。

嬉しい反面、不満はないですが、給料面と自分の将来像をイメージした時に、
諸先輩方のようになるのはどうなんだろうと思っていました。

先輩方、部長、社長、全員
仕事もバリバリできて、会社内でも多方面で活躍されている方ばかりでした。

ただ、一緒に飲み行ったときや、会社の行き帰りに会話すると
金銭面で実は我慢してたり、家族との時間がうまく取れていなかったり、
何より思い切り楽しんで仕事をしている方が少なかった印象を持ってました。

会社を決めた時はノリと勢いだけだったので
改めて、このタイミングで自分の将来像を見直すべきだと思いました。
仕事に自分が何を求めているのかを整理すると
大きく二点出てきました。

##### ①自分の人生経験値、知識を大きく増やす
世間ではDX化が進み始めていた時期でした。
SEという職業はニーズが増えてくるので、
自分が気になる業界や知らない業態と関わるチャンスが多いと考えていました。

自分が当初SEになった理由の一つとして
システム開発する上で、
新しい業種業態の会社と仕事をしていけば、
システム開発の技術云々に関わらず、
自分の人生の知見や経験値を積み上げていくことができるからでした。

しかし、会社にいて、基本上からおりてくる仕事をやっているような状態で、
希望のプロジェクトへ参画することがあまり望めないなと感じていました。

もちろん、30、40くらいになると役職が上がり、
仕事を選べる状態にはなりそうでしたが、
20代の早いうちに色々な会社やお客様と仕事をしてみたいとなった時に
今の状態を変えていく必要があるなと思っていました。

##### ②給与面
入社した当初はお金の面は気にしていませんでしたが、
やはり生活をする上で必要だし、
給与は、自分の価値を測る一つの指標だと感じるようになり、増えて欲しいなと思っていました。

3年目になったタイミングで明細を改めて見ると
みなし残業代はついてましたが、税金、保険料など諸々引かれて
手元に残る金額が1年目にイメージしたものとだいぶ差があると感じてました。

将来的にお金を何に使っていくかをイメージして
母親への仕送りや自分に使いたい金額を考えた時に
今の金額では満足はできないなと気づきました。

会社の給与制度も改善途中でしたが、
劇的に改善されるわけでもなさそうでした。
近くの先輩は、
上司に頻繁に給料をあげてくれと話をしていたのですが、
それでもそこまで上がっていない様子で、
あまり上がらないことは目に見えていました。

2点のことを考えて、キャリアを変えていく必要があるなと再認識して
改めて動こうと決意しました。

# 勉強会にてフリーランスのことを知る
情報収集のために、継続して、
細々と外部の勉強会(もくもく会)やセミナー等に顔を出していました。

とあるタイミングの自習勉強会で
出会ったフリーランスのエンジニアの人と仲良くなって、
色々フリーランスのことを初めて聞くことができました。

※当時は全然ピンと来ていなかったのですが、
バックからフロントまで全て1人でサービス開発できるような方で、
後から技術力の高さや経験歴を聞いて驚きました。

その方は、会社員時代、収入を上げるために、
「ブラック企業上等」ということで働きまくったらしいのですが、
社長から直々に、将来的に今の頑張りと見合った給料をもらうことができないと知り
フリーランスになろうと動いた方でした。

収入面、生活面、案件の獲得方法などなど
実際に現役でフリーランスエンジニアとして動いている方の話を聞いて
転職するという選択肢以外でフリーランスという道も
自分にもやってできるのではないかと思いました。

話を聞いていて特に思ったのが
・会社員とやっている仕事内容は変わらない
・自分でやらなければならない事務作業が少し増える(確定申告)
で自分にとってのメリットが大きいなと感じたのです。
※個人差あると思います

あと、フリーランスになった後、
自分の性格、生活リズム等合わなければ、
会社勤めに戻ることもできるということもしり、
SEとしての経験は3年程度でしたが、
せっかくだからフリーランスにチャレンジしてみようとおもいました。

# 会社を辞める
PLやPMを任されていた自分が急に辞めることを伝えると、
会社にしっかり引き止められるだろうなとおもっていたので、
伝え方を考える必要がありました。

考えた結果、
会社に身内の問題の関係で福岡に帰る必要があり
自分のキャリアを見つめ直して
考えるので一旦辞めたい話をしました。
(そのタイミングで母親の体調が悪くなったというのもあります)

当時のマネージャー、そして本部長と面談しましたが、
やはり辞めないでくれと言われましたし、
福岡に大きく進出する予定もあるから、
福岡支社の人間として動くことも検討してほしいとも言われました。
ただ、周りのアドバイスを聞きながら
強い気持ちで、断って、辞めることを貫き通しました。

ちなみに、退職届を正式に提出したタイミングでは
フリーランスの案件探しは何も決まっていない状態でした。
辞めることが決まってから案件探しを開始しました。

# あとがき
・当時の会社にはとても感謝しているのでどうにかして恩返ししたいと改めて思いました。
・今振り返っても、案件決まっていない状態でよく辞められたなとおもいます。
・逆に発破をかけられて、必死にフリーランスになろうとしたので結果的によかったとも思っています。決意って大事ですね
・福岡へ一旦帰ると会社には伝えたものの、辞めて1ヶ月後に東京で会社の人と鉢合わせた時は少し気まずかったです(泣)
Salesforceの私のドメインの変更について


## 私のドメインとは？

SalesforceのURLです

例えばこちらのPlaygroundの環境はURLは
playful-raccoon-6a4btn-dev-ed.trailblaze.my.salesforce.com 

です


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/f7a3edb9-692d-afe2-5908-14bf70df6d22.png)


こちらのURLの
playful-raccoon-6a4btn-dev-edの部分が私のドメインの名前です

例として、会社でSalesforceを使う場合は自社の会社名などを私のドメインに設定します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/d5140ddc-faf6-32fe-14c8-d9da30e0d447.png)


設定変更すれば私のドメインが変更されます


なお、「私のドメイン」は2022年ごろまでは無効化がデフォルトであり、自分で有効にしたり無効化ができたはずですが、今（2023年10月15日以降）の環境は強制的に私のドメインは有効であり無効にすることはできません

詳細はこちらの記事が参考になります

https://sf.forum.circlace.com/articles/925083415840034816
PATHを通す意味

# はじめに
記事を書くに至ったのはhomebrewやVScodeのインストールでPATHを求められたからです。インストールには難しい作業はないとタカを括っていましたが、インストール後にPATH(パス)を求められたときには意味がわからなかったです。ということでアウトプットしていきます。
## PATHとは
PATHとはフォルダやファイルがある場所を示す*地図*のようなものです。つまりPATHを通すということはコンピュータに地図を渡してあげるということです。プログラムの起動にはフルパスと呼ばれる長いコードをいちいち読み込まないといけません。例えばターミナルにVScodeの場所が書かれた地図を渡して紐付けしてもらうと、フルパスで起動しなくても起動ファイルに直接アクセスすることができるということになります。
# 終わりに
PATHは無駄を省き簡単にプログラムを起動できるシステムです。そしてこれができないとhomebrewも動かないので
Qiitaのサイトの使用技術を分析してみた。


使用ツールはWappalyzer　Google chromeの拡張機能でサイトの使用技術を抽出してくれるツールです。

# 今回はQiitaのサイトで使われている技術を分析してみましょう。


CMS = コンテンツマネジメントシステム　Wordpressが有名

| CMS      | 概要                  |
| -------- | ------------------- |
| microCMS | APIベースの日本製のヘッドレスCMS |

アナリティクス = サイト解析ツール

| アナリティクス                        | 概要            |
| ------------------------------ | ------------- |
| Google Ads Conversion Tracking |               |
| Facebook Pixel                 |               |
| Google Analytics               | 王道のアナリティクスツール |

| JavaScriptライブラリ | 概要                               |
| --------------- | -------------------------------- |
| React           | Facebook製のOSSのUIライブラリJavaScript製 |
| Redux           | 状態管理のためのライブラリ JavaScript製        |
| Emotion         | CSS in JSライブラリ　JavaScript製       |
| React Router    | ルーティングライブラリ React用の JavaScript製  |
| MathJax         | ウェブページにきれいな数式を表示できるようにするためのライブラリ |
| Apollo          | GraphQL クライアント                   |



| フォント            | 概要  |
| --------------- | --- |
| Google Font API |     |
| Font Awesome    |     |

| webフレームワーク    | 概要                            |
| ------------- | ----------------------------- |
| Ruby on Rails | 日本製のプログラミング言語Ruby用のwebフレームワーク |


| その他        | 概要                                |
| ---------- | --------------------------------- |
| PWA        | プログレッシブウェブアプリ                     |
| Open Graph | OGP URLをシェアするときに画像や説明文が同時に表示される技術 |
| webpack    | JavaScript 向けのモジュールバンドラー          |

| クエリ言語   | 概要       |
| ------- | -------- |
| GraphQL | APIクエリ言語 |

| プログラミング言語  | 概要                            |
| ---------- | ----------------------------- |
| TypeScript | マイクロソフト社が開発したJavaScriptを拡張した言語 |
| Ruby       | 日本人が開発したプログラミング言語             |

CDN = コンテンツデリバリーネットワーク

| CDN        | 概要        |
| ---------- | --------- |
| Cloudflare | アメリカ社製CDN |
| Imgix      |           |
| cdnjs      |           |

| データベース   | 概要                               |
| -------- | -------------------------------- |
| Firebase | Google社製のモバイルおよびウェブアプリ開発プラットフォーム |

| アドネットワーク                         | 概要  |
| -------------------------------- | --- |
| Google Ads                       |     |
| Google Publisher Tag             |     |
| DoubleClick for Publishers (DFP) |     |

| タグマネージャー           | 概要               |
| ------------------ | ---------------- |
| Google Tag Manager | Google社製のタグ管理ツール |

| アフィリエイト           | 概要                   |
| ----------------- | -------------------- |
| Amazon Associates | amazon社のアフィリエイトプログラム |

ここからは推測ですが、フロントエンドはTypeScriptを利用したReactベースでスタイリングはCSS in JS の Emotion
バックエンドはRuby on Railsを利用したRubyでの開発が行われていると思います。
モダンとされている技術がてんこもりで見ていて楽しいサイトでした。

## PageSpeed Insights
Webサイトの表示速度を測定・評価する分析ツールです。
今回はqiitaトップページのモバイルでのスコアとなります。
![qiita.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3990962/021d9f68-a087-016a-8df6-7ca8959e5f26.png)
1対1のビデオチャットアプリの構築

iPhoneでOmegleのような1対1のビデオ通話を構築し、同じアプリをインストールした他の人とプライベートなビデオや音声通話をしたい場合、[**このチュートリアル**](https://trtc.io/document/60416?platform=ios&product=call)では、わずか3行のコードでこの効果を実現する方法を示しています。このアププリには、マイクのオン/オフ、カメラのオン/オフ、音声への切り替え、キャンセル/通話終了、前面/背面カメラの切り替え、スピーカーのオン/オフ機能を備えた完全なUIがあります。

# **環境準備**

Xcode 13以降。

iOS 13.0以降のデバイス2台。

# **ステップ1：デモのダウンロード**

1. GitHubから[TUICallKit Demo](https://github.com/Tencent-RTC/TUICallKit/tree/main)のソースコードをダウンロードするか、コマンドラインで以下のコマンドを直接実行します：

```jsx
git clone <https://github.com/Tencent-RTC/TUICallKit.git>
```

1. コマンドラインでiOSプロジェクトディレクトリに入ります：

```jsx
cd TUICallKit/iOS/Example
```

1. 依存ライブラリをロードします：

```jsx
pod install
```

**注意：**

CocoaPodsをインストールしていない場合は、[こちら](https://guides.cocoapods.org/using/getting-started.html)を参照してインストール方法を確認してください。

# **ステップ2：デモの設定**

1. [音声・ビデオサービスを有効化](https://trtc.io/document/59832)し、**SDKAppID**と**SDKSecretKey**を取得します。

图

1. `/iOS/Example/Debug/GenerateTestUserSig.swift`ファイルを開き、[サービスを有効化](https://trtc.io/document/59832)した際に取得したSDKAppIDとSDKSecretKeyを入力します：

图

# **ステップ3：デモの実行**

1. XCodeで、以下のようにデモを実行したいデバイスを選択します：

图

1. 選択後、実行をクリックしてTUICallKit iOS Demoをターゲットデバイスにデプロイします。

# **最初の通話を行う**

**注意：**

完全な音声・ビデオ通話プロセスを体験するには、2台のデバイスで2人の異なるユーザーとしてデモにログインし、1人が発信者、もう1人が受信者として行動してください。

**1. ログイン＆サインアップ**

`User ID`にIDを入力してください。現在のUser IDが以前に使用されていない場合は、**サインアップ**画面に移動し、自分のアバターとニックネームを設定できます。

图

**注意：**

"1"、"123"、"111"のような単純な文字列をUser IDに設定することは避けてください。TRTCは同じUser IDが複数のデバイスからログインすることをサポートしていません。"1"、"123"、"111"のようなUser IDは、共同開発中に同僚に簡単に占有される可能性があり、ログイン失敗につながります。したがって、デバッグ中は識別しやすいUser IDを設定することをお勧めします。

**2. 電話をかける**

2.1 発信者はインターフェースの**1V1 Call**をクリックし、ポップアップインターフェースで受信者のUser IDを入力し、希望する通話タイプを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3981333/5d882dd5-693b-0ca7-0b57-4f6abf86956b.png)
2.2 **通話開始**をクリックします。

# **結論**

結論として、1対1のビデオチャットはオンラインコミュニケーションに新たな可能性を開く強力なツールです。安全性とプライバシーに焦点を当てることで、このプラットフォームはユーザーの信頼を構築します。その仕組みと利点を理解することで、ウェブ、iOS、Androidの従来のコミュニケーションの境界を押し広げ、効果的に使用することができます。今日からデジタルインタラクションを向上させましょう！
React.js & Tencent RTCを使用してWebのUIKitで5分でビデオ通話を作成

# **React.js & Tencent RTCを使用してWebのUIKitで5分でビデオ通話を作成**

このチュートリアルでは、React.jsを使用して、5分以内にWeb上で[音声およびビデオ通話](https://trtc.io/products/call)のデモを素早く実装し、最終的に1対1の通話とグループ通話のビデオ通話機能を実装する方法を示します。また、ミュート、カメラのオン/オフ、画面の拡大/縮小など、完全なUIも含まれています。

デモの実際の動作を見たい場合は、[このYouTube動画](https://www.youtube.com/watch?v=HFdKPcZy_X8)でステップバイステップのチュートリアルとともにコードの実行デモをご覧ください。

# **前提条件**

- Node.js、Node.js環境がない場合は、[ここをクリックしてダウンロード](https://nodejs.org/en)してください。
- 最新のブラウザ、WebRTC APIをサポート。
- コードエディタ - 私は[VSCode](https://code.visualstudio.com/)を使うのが好きです。
- [Trtc.io](https://console.trtc.io/)の開発者アカウント。

# **ステップ1. デモのダウンロード**

1. ターミナルを開き、リポジトリをクローンするコマンドを入力します。

`git clone https://github.com/Tencent-RTC/TUICallKit.git
awk`

!https://trtc.io/media/290d515a-5579-49e3-b474-6496bd223bc1.png

1. 依存関係のインストール

`cd ./TUICallKit/Web/basic-react
awk`

`npm install
cmake`

!https://trtc.io/media/64f9ac3f-3edd-4cfb-9461-2f1ebf2214f2.png

# **ステップ2. デモの設定**

1. Tencent-RTCアプリケーションを有効にするには、[Tencent RTCコンソール](https://trtc.io/login?s_url=https://console.trtc.io/)にログインし、アプリケーションの作成をクリックします。
2. 作成ポップアップで、通話を選択し、アプリケーション名を入力して、データ保存地域を選択し、作成をクリックします。
3. 有効になったら、アプリケーションの概要をクリックして、SDKAppIDとSDKSecretKeyを取得します。
4. **Web/basic-react/public/debug/GenerateTestUserSig-es.js**で、SDKAPPIDとSDKSecretKeyを入力します。

!https://trtc.io/media/12980ca6-b2ef-48a4-980a-89624b139c3e.png

# **ステップ3. デモの実行**

1. ターミナルでコマンドを入力してデモを実行します。

`# TUICallKit/Web/basic-react
npm run dev
jsx`

!https://trtc.io/media/382754d0-c189-4357-87ea-5648122f1f01.png

*注意:*

*ローカル環境の場合は、localhostプロトコルでアクセスしてください。詳細については、[ネットワークアクセスプロトコルの説明](https://web.sdk.qcloud.com/trtc/webrtc/doc/en/tutorial-05-info-browser.html#h2-3)を参照してください。*

!https://trtc.io/media/825a55e7-ee29-4efd-a0c6-15ecbc0f5fd0.png

1. 2つのブラウザページを開き、同じURLを入力して、2つの異なるuserIDでログインします。 (これはreactデモの効果です)
2. 両方のuserIDが正常にログインした後、もう一方のページのuserIDを入力し、通話リストに追加ボタンをクリックします。

# **最初の通話を行う**

通話ボタンをクリックして、最初の通話を体験してください。

# **グループ通話を行う**

次に、3番目のWebページを開き、任意のUserIDを入力します。 「ログイン」をクリックします。両方に電話をかけてグループ通話を行うことができます。

!https://trtc.io/media/12008674-d903-4f65-b635-fbae350f6be8.png
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3981333/da0ecdfc-a3da-c0ec-9ba1-c12d5698b108.png)


# **最後に**

これでおしまいです！

このプロジェクトの完全なソースコードは、[GitHub](https://github.com/Tencent-RTC/TUICallKit)で入手できます。

# **その他のリソース**

- [Tencent RTCドキュメント](https://trtc.io/document)を深く掘り下げて、Tencent RTC SDKが提供する機能と能力についてより深く理解してください。APIリファレンス、サンプルコード、ベストプラクティスを探索してください。
- 公式アカウント[X(Twitter)](https://x.com/TencentRTC)または[LinkedIn](https://www.linkedin.com/company/tencentrtc/)をフォローして、最新の開発情報を入手してください。
- サポートが必要ですか？ [Telegram](https://t.me/+EPk6TMZEZMM5OGY1)または[Discord](https://discord.com/invite/hq7jW7zChW)で実装に関するアドバイスを求めてください。
#0022（2024/01/22）SSHのポートフォワーディング (トンネリング) 機能

# モチベーション

``` shell
ssh user@ip -L 8089:192.168.11.211:80
```

というコマンドを教えてもらった。これが何なのか？

# SSHのポートフォワーディング (トンネリング) 機能

上記のコマンドは **SSHのポートフォワーディング (トンネリング) 機能** を利用して、ローカル（手元のPC）のポートとリモート(SSH先)のネットワーク上にあるホスト・ポートを中継するものです。

- `ssh user@ip`  
  - SSHで`ip`というサーバに`user`としてログインする。

- `-L 8089:192.168.11.211:80`  
  - **ローカルポート（8089）** と **リモートホスト（192.168.11.211）のポート80** をトンネリングする設定。  
  - 自分のPC (ローカル) でポート 8089 にアクセスすると、SSHトンネルを経由して 192.168.11.211 のポート 80 にアクセスできる。

## 実際の利用シーン
1. **手元のブラウザで http://localhost:8089/ にアクセス**  
   - これが SSH経由で 192.168.11.211:80 に渡され、Webページが見られる。  
2. **遠隔地のプライベートネットワークにあるサービスへ安全に接続**  
   - 例えば、VPNなしで社内サーバのWebサービス(ポート80)を利用したいときなどに使う。

## まとめ
- **SSHトンネルを張って、ローカルのポート 8089 とリモート側の 192.168.11.211:80 をつなぐ**  
- 自分のPCの localhost:8089 へのアクセスが、SSHサーバ経由でリモートの HTTP (80) ポートにつながるようになる。  
- セキュアな通信路を作りつつ、リモートのプライベートネットワーク上のサービスに透過的にアクセスできるようにするためのコマンドです。
GIACのCyberLive問題の配点を考える

# はじめに
GIACはセキュリティの様々なジャンルの資格試験の総称です。GIACには実技試験であるCyberLive問題が含まれている試験があります。CyberLive問題はGCFA、GPEN、GCIA、GSECなど多くの試験で全体の概ね1割程度の問題数で出題されます。
そしてこのCyberLive問題の配点は通常の選択式問題より高いことは公式サイトでも説明されています。

https://www.giac.org/cyberlive/?msc=main-nav

>Do the CyberLive questions count the same as multiple choice questions?
CyberLive questions are typically weighted more than the multiple-choice items. Consequently, more time has been allocated towards these items.

抄訳
Cyber​​Live問題は、複数選択の質問と同じようにカウントされますか?
Cyber​​Live問題は、通常、複数選択問題よりも重視されます。そのため、これらの問題にはより多くの時間が割り当てられています。

しかしCyberLive問題の配点については公式に言及されていません。そこで模擬試験や本番の試験から推定してみようという試みです。

# 配点の推定方法
本番の試験では、選択式問題とCyberLive問題の正解数や正解率はわかりません。☆の数でおおよその正答数がわかるだけです。模擬試験の場合は各問題について正解かどうかを表示することが可能です。そのため模擬試験の結果を参考にすることにしました。なお、この方法ではCyberLive問題を全問正解している場合は推定不可能です。そして私の場合は大半の模擬試験で全問正解しているため、以下はCyberLive問題を全問正解していない数少ないサンプルを用いています。なお、**模擬試験の正解数のカウントは正確ではない可能性が高く、以下の考察にはいくらかの誤りが含まれている可能性が高い**です。

## GCFAの配点

以下はGCFAを受験した人の記事です。
(私が受験した2019年時点ではまだCyberLiveが開始されていませんでした)

https://www.linkedin.com/pulse/how-hack-your-gcfa-saurabh-chaudhary-emtbc

ここに模擬試験の結果について以下の記述があります。
>First Practice Test: Scored 61/75 on MCQs and 1/7 on labs, resulting in a score of 49.
Second Practice Test: Scored 64/75 on MCQs and 6/7 on labs, resulting in a score of 86.

この方によれば、2回の模擬試験で選択式問題の正解数はほぼ同じだったのに、最終スコアは37ポイントも違いがあります。この差がCyberLive問題の正解数にあることは自明です。
そこで選択式問題とCyberLive問題の配点割合を推定してみます。実際には問題ごとに配点が異なる可能性はありますが、ここでは選択式問題、CyberLive問題はすべて同じ配点であると仮定します。
これは簡単な連立方程式を解くだけです。
61x+y=49
64x+6y=86
を解くと、x=0.689, y=6.986ほどになります。つまりCyberLive問題は選択式問題の10倍の配点があることになります。
ちなみにGCFAの場合はCyberLive問題は7問ですので、CyberLive問題をすべて正答できれば49点程度獲得でき、合格スコアの71%までわずか22ポイントに迫れます。選択式問題は0.7点なので、75問中32問正解できれば合格点を上回れます。なんと選択式問題は半分取れなくても合格できてしまいそうですね。

# GSECの配点
以前に私が受けたGSECの模擬試験で何問正解していたかメモしていましたので、これも参考にしてみます。
GSECは全部で115問あり、うち95問が選択式問題、11問がCyberLive問題です。
私が受けた模擬試験は、
1回目：選択式問題で73問正解、CyberLive問題は全問正解しており、スコアは81%
2回目：選択式問題で70問正解、CyberLive問題で1問ミスし、スコアは77%
という結果でした。
この結果をChatGPTを使って色々と計算した結果、おそらくCyberLive問題は選択式問題の3倍程度の配点だろうという予想になりました。仮にCyberLive問題を全問正解できたなら、選択式問題は61問正解（およそ6割程度の正解率）で良い計算になります。

## GXPNの配点
GXPNは60問あり、うち54問が選択式、6問がCyberLive問題でした。合格スコアは67%です。
私の模擬試験の結果は以下の通りです。
1回目：60% 選択式問題33問正解、CyberLive問題は5問正解（正確にカウントできていないため誤りがある可能性あり）
2回目：75% 選択式問題42問正解、CyberLive問題は全問正解

この結果を元に配点を推定すると、CyberLive問題の配点は選択式問題のおよそ3倍のようです。
CyberLive問題をすべて正解できる場合は、36問（67%）の正解が必要になるようです。GCFAやGSECと比べるとやはり難易度高めという感じでしょうか

# まとめ
以上のように試験によって配点割合は大きく変わるようですが、いずれにせよ比較的解きやすいCyberLive問題を対策することが合格への近道になることは間違いありません。
属人化解消とその領域への理解度

# 属人化解消とその領域への理解度
仕事、プロジェクトが属人化してしまい、それを解消したいと思うことがあるかと思います。
その人の負担を減らすためや、いなくなった際のリスク分散のためにも属人化を気にされるかと思います。

**以下メンバーが一般以下の場合になります。出来る人の場合は話が成り立たないため**
## チームの各個人「全員」に対しての担当プロジェクト分散による属人化解消の落とし穴

属人化を解消するために1人の人がひとつのプロジェクトに対して割く時間を減らしより多くのプロジェクトに携わらせるということをチーム全体に行った場合、メンバーによってはプロジェクトの品質の低下および失敗に繋がる可能性があります。

各プロジェクトのみ担当する人を設定せず、全員が様々なプロジェクトに薄く携わらせた場合、誰も各プロジェクトを深く理解する人がいなくなる可能性があります。

## みんなでやりましょうとなると、誰かがやってくれると思ってしまう
「◯◯さんはこの担当ね」と名指しで担当を1人だけ設定すると、大抵の人は、責任を感じ失敗しないように努めるが、
そうでなく複数担当している人がいる場合は、その中の責任を感じやすい人や、仕事が出来るため自然とそのプロジェクトに詳しくなってしまう人が、プロジェクトで重要な役割を担ってしまう。
属人化解消のため分散したつもりが結局属人化した上に、メインで携わっていないメンバーの理解度低下に繋がってしまう。
一般の人が複数に渡ってプロジェクトの担当を行うと、どのプロジェクトに対しても浅い理解しかしておらず、属人化してしまっている人員の急な代替になり得ない。

また、理解していること、あらゆる質問にすぐに答えられるほど覚えていることは別であり、1人1人のキャパシティにあった割り振りを行う事が大切かと思います。

各人にしっかりと担当を割り振ることで特に経験の浅い人などの成長に繋がると思います。(その分当人に負荷がかかるため、ケアなり最悪フォローできる力は必要ですが、、)

ちなみに分散して属人化すること自体は大事だと思いますが、「全員」で行う必要はないですし、属人化やらなにやら以前に仕事が回ってない場合は、そもそも余計なことをしないほうが良いため、落ち着いてから先々の課題を解決するべきだと思います。