OmniAICreator/Qiita-1.07M huggingface dataset:
[MySQL][PowerBI] MySQLの情報をPowerBIで出力する

# 環境
- Windows 11 Enterprise

# 目次
- [PowerBIをMySQに接続する](#powerbiをmysqlに接続する)
- [エラー一覧](#エラー一覧)

# PowerBIをMySQLに接続する
1. `MySQLデータベース`を選択し、接続する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/62a8656e-b92d-4613-4b3d-d13112d635d2.png)
1. `Azure Portal`の該当の`KeyVault` or `キー コンテナー`の`Secret`で下記情報を控える
    - `HostName`: hostname
    - `DBName`: dbname
    - `UserName`: username
    - `Password`: password
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/acfefe58-a4ce-a383-d95c-94c69ccaf3f4.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/fe2d3ba5-e6c8-0adf-479a-71aca9daf83f.png)
1. 1.の後に表示される`PowerBI`の下記に`HostName`と`DBName`を入力する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/b40d5e76-832f-61b0-24e7-27da5e869fbb.png)
1. 下記に`UserName`と`Password`を入力する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/2db4e2e0-9584-c330-ed06-b36df5445799.png)
1. 接続を押下する
1. 接続完了
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/37e6f49c-6727-047c-abd7-ce414accfeaa.png)

# エラー一覧
## ` Oracle MySQL Connector/NET`のインストール
1. 下記のエラーが発生する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/93524202-29e7-503c-815c-7b8cc20523b5.png)
1.  `詳細情報`をクリック
1.  下記画面がブラウザで開かれる
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/f4cb2dfe-6124-d48a-7b55-9f9153b86bda.png)
1. `Download`を押下する
1. Installerを開く
1. `Next`を押下し続ける
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/8aaec75d-11b4-1167-82f1-27f5e5932198.png)
1. `PowerShell`を開く
1. 下記コマンドを`PowerShell`で実行する
    ~~~shell:PowerShell
    [System.Data.Common.DbProviderFactories]::GetFactoryClasses()|ogv
    ~~~
1. パッケージが正しくインストールされている場合は、結果のダイアログに`MySQL Data Provider`が表示される
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/d3d339a9-299c-433b-888d-bb028e7c5093.png)
1. `PowerBI`を再起動する
1. `MySQLデータベース`に接続する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/768b6979-532b-8fd4-a122-eb8074bd4253.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/32496497-0fbd-2368-cb0e-e789662001b8.png)

## 参考リンク
[MySQL データベース](https://learn.microsoft.com/ja-jp/power-query/connectors/mysql-database)

##
UEFI_Basic64 

# UEFI Basic

A simple BASIC language intepreter that runs on UEFI. Feel free to submit a pull request.

これは、UEFI BOOTする、64bit整数版 TinyBASICインタープリターです。

オリジナル版は、68000 Tiny BASIC です。


## オリジナル Git Repository からの大きな変更点

・UEFI BOOT と 64bit Linux gcc (CUI) 以外の動作環境の切り捨て

・予約語を普通の文字列型に変更

・整数のビット数を16bitから64bitに変更

・多少の Refactoring を実施

追記： オリジナルのGitHubは2024年時点で消滅しておりました。https：//github.com/LHerrmeyer/UEFI_Basic

gnu-efiを使用して、普通のgccでビルドできるVersionも公開

https://github.com/iruka-git/GNUEFI_Basic64



## 環境構築メモ

(1)・Lubuntu22.04 を用意（普通のUbuntu22.04でも良い） QEMUを動かすので、GUIが必要。

(2)・QEMUを入れる。・・・UEFIブートを試すエミュレータ。

 ```
 # apt install qemu-system-x86
 ```

(3)・OVMFを入れる。・・・UEFIのBIOS（変な言い方だが、そう）というかファームウェアね。 Open Virtual Machine Firmware とかそんな感じの。

 ```
 # apt install ovmf
 ```

(4)・mingw-x64を入れる。・・・元はWindows用のgccなんだけど、UEFIから起動する実行ファイルは PE32+形式なので、それを吐けるコンパイラが必要。

 ```
 # apt install mingw-w64
 ```

たぶんこれだけでいいはず。


## QEMU上で動かす

・make uefi すると、BOOTX64.EFIが出来るので、それをQEMUに食わせる。

 ```
 $ qemu-system-x86_64 -bios OVMF.fd -drive file=fat:rw:fs
 ```

・実行するまえに、BOOTX64.EFIをカレントディレクトリの fs以下に配置する。
 ```
 fs/EFI/BOOT/BOOTX64.EFI
 ```

## Ubuntu 上で動かす( GUI 不要 )

・makeして、出来た ELF ( ./basic ) をコマンドラインから実行する。

 ```
 $ make
 $ ./basic
 ```

・終了は 「bye」

・エラー発生時の行番号は、BASICの行ではなく、 basic.c のエラー発生時の行番号であることに注意

・変数は A-Zしか使用できない。

・文字列変数はない。

・整数は64bit

・配列は実装されない。

・Arduino等にあるような　SD Card File I/O や Port Pin Control など、は実装されない。

## 注意事項

・Linuxコマンドラインでは libcの関数が使用可能だが、UEFIビルドではリンクエラーするので注意。

## 実機で動くのか？

ちなみに、てきとーなUSBメモリーをFAT32フォーマットして、

USBドライブ名: /EFI/BOOT/BOOTX64.EFI

のようにさっきのファイルを配置して、

C:ドライブだったSSDを抜いておいて起動すると、ちゃんとBASICが起動する。


だけど、メーカーロゴが残ったままだし、全画面じゃないし（中央部分にしかコンソールがprintしない）不満が・・・


## 感想：ひとりごと

うーん、なんだろう。PIC32MXでBASIC動かしたときもそうだったんだけど。
まともなBASICインタプリタって、どっかに置いてくれないですかね。
バグバグやん。


こいつ、files とか loadとかsaveがない。なんも出来ん。


# GitHub URL: （ソースコード）
https://github.com/iruka-git/UEFI_Basic64

- にっき
https://iruka-git.github.io/ATMEL_AVR/html/UEFI_Basic.html
TeraTearm RLogin vi 作業中 音を消す まとめ 2024年度版

### 対応するもの
1.TeraTeam での音を止める
2.ログイン先の vim も止める
3.RLogin ※qiita内の参考リンクとして
### TeraTarm5
`C:\Program Files (x86)\teraterm5`
`TERATERM.INI` の 482行目あたり
; Beep by BEL (on/off/visual)
Beep=off

### vim 作業中の音
~./.vimrc の最終行にえちょする
`echo 'set belloff=all' >> ./.vimrc`
### RLogin おまけ
`@kikuchi`氏の qiita
[RLogin ビープ音 消す ベル タブ 警告音](https://qiita.com/kikuchi/items/3fe1c8315c042c8c8e9b)

### ターミナル作業中
echo 'set bell-style none' >> ~/.inputrc

参考URL
`@jz4o`氏の qiita
[【Bash】Beep音を消す方法](https://qiita.com/jz4o/items/87a51068a75b6c4ce691)


### 自分のメモ
やり方をファイルサーバのどっかにテキストで保存しておいてもその保存したファイルの保存したこと、保存した場所をわすれるんだ、これが(;`・д・´) 

###### tag: `teraterm` `vim` `beep` `ppp` `slip` `xmodem` `ipx/spx` `token-ring` `termux` `tilix`
【MantineCharts】Next.js App Router で MantineCharts を利用する

# はじめに
この記事では、React 向けコンポーネントライブラリである Mantine に含まれるチャート（グラフ）機能の  **MantineCharts** を Next.js App Router で利用する方法を記載します。

https://mantine.dev/

https://nextjs.org/docs/app

`@mantine/charts` に大部分は Recharts というReact 向けのチャートライブラリをベースに作成されていますが、`@mantine/charts` でカバーしきれない機能は Recharts も利用する必要があります。

https://recharts.org/en-US/

Recharts に比べ、少ないコード量でチャートを実装できます。Recharts を利用したチャートの実装方法については、以下の記事で記載しています。

https://qiita.com/Yasushi-Mo/items/abccbdbeae4dc9ad50e1

# 開発環境
開発環境は以下の通りです。

- Windows 11
- Next.js 14.2.4
- React 18.3.1
- TypeScript 5.5.2
- @mantine/core 7.13.2
- @mantine/hooks 7.13.2
- @mantine/charts 7.13.2
- Recharts 2.13.0

# 事前準備
Next.js で Mantine を利用できるようにしておきます。
詳しい手順は以下の記事に記載しています。

https://qiita.com/Yasushi-Mo/items/3167fb2392e2e557d24b

# インストール
まず、必要なライブラリをインストールします。

```powershell
npm install @mantine/charts recharts@2
```

インストールが完了したら、アプリケーションのルートでスタイルをインポートしておきます。

```src/app/layout.tsx
import "@mantine/charts/styles.css";
```

# 折れ線グラフコンポーネントの実装
インストールした MantineCharts を利用して、シンプルな折れ線グラフコンポーネントを作成します。

https://mantine.dev/charts/line-chart/

表示するデータは以下の通りです。

```data.ts
const data = [
  { name: "A", value: 400 },
  { name: "B", value: 200 },
  { name: "C", value: 300 },
  { name: "D", value: 350 },
  { name: "E", value: 300 },
```

`LineChart` コンポーネントに必要な `props` を渡すことで実装できます。

- `h`: チャート全体の高さ
- `w`: チャート全体の横幅
- `data`: チャートに表示するデータ
- `dataKey`: X軸に表示すデータオブジェクトのキー
- `series`: `name`（折れ線に表示するデータオブジェクトのキー）と `color`（折れ線の色）の配列

```src/app/page.tsx
import { LineChart } from "@mantine/charts";

const data = [
  { name: "A", value: 400 },
  { name: "B", value: 200 },
  { name: "C", value: 300 },
  { name: "D", value: 350 },
  { name: "E", value: 300 },
];

export default function Home() {
  return (
    <LineChart
      h={400}
      w={600}
      data={data}
      dataKey="name"
      series={[{ name: "value", color: "blue" }]}
    />
  );
}

```

折れ線グラフが表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/c54582df-fec4-3faa-9465-0457ace7526b.png)


チャートにマウスオーバーするとツールチップが表示されます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/f5b7ab09-bb67-c16c-1b1a-c47a10af0734.png)


# 参照
- [Getting started](https://mantine.dev/charts/getting-started/)
- [LineChart](https://mantine.dev/charts/line-chart/)
Go言語(Golang)におけるエラーハンドリングの基本

Go言語におけるエラーハンドリングは、他の多くのプログラミング言語とは異なり、エラーを返す値として扱うのが特徴です。

### 1. 基本的なエラーハンドリング

Goでは、関数がエラーを返す場合、通常は戻り値としてエラーを返します。これを利用して、エラーが発生したかどうかを確認します。

```go
package main

import (
    "fmt"
    "errors"
)

func mightFail() error {
    return errors.New("something went wrong")
}

func main() {
    err := mightFail()
    if err != nil {
        fmt.Println("エラー:", err)
        return
    }
    fmt.Println("成功")
}
```

### 2. 複数の戻り値

Goの関数は複数の戻り値を持つことができ、通常は結果とエラーを同時に返します。

```go
func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("ゼロで割ることはできません")
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("エラー:", err)
        return
    }
    fmt.Println("結果:", result)
}
```

### 3. カスタムエラー型

より詳細なエラーメッセージやエラーの種類を扱いたい場合、カスタムエラー型を作成することができます。

```go
type MyError struct {
    Code    int
    Message string
}

func (e *MyError) Error() string {
    return fmt.Sprintf("コード: %d, メッセージ: %s", e.Code, e.Message)
}

func doSomething() error {
    return &MyError{Code: 404, Message: "リソースが見つかりません"}
}

func main() {
    err := doSomething()
    if err != nil {
        fmt.Println("エラー:", err)
    }
}
```

### 4. エラーチェーン

Go 1.13以降、エラーラッピングを使ってエラーの詳細を保持することができます。`fmt.Errorf`を使うと、元のエラーをラップすることができます。

```go
func doSomething() error {
    return errors.New("元のエラー")
}

func main() {
    err := doSomething()
    if err != nil {
        wrappedErr := fmt.Errorf("エラーが発生しました: %w", err)
        fmt.Println(wrappedErr)
    }
}
```

### 5. パニックとリカバリー

Goには、パニックを利用してエラー処理を行う方法もありますが、通常は避けるべきです。リカバリーを使うと、パニック状態から回復できます。

```go
func riskyFunction() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("リカバリー:", r)
        }
    }()
    panic("パニックが発生しました")
}

func main() {
    riskyFunction()
    fmt.Println("プログラムは続行します")
}
```
SESがなぜ悪なのか、SESはやめとけ

## 概要
SESを卒業し、今後おそらくSES企業に戻ることはないので色々と思うことをざっくり書きます。
自分はSESはなくなるべきというスタンスです。
SES企業に就職しようと考えている方は一度目を通してみてください。
また、ここに記載するのは絶対というわけではなく、そういう傾向があるということを認識いただければと思います。

## SESはなぜ悪なのか
#### 1.手を動かせない人間が生まれる
構造の問題だが、人売りなのでお客さんとの折衝業務が必ず発生する。
またBtoBなので細かく管理する必要があり、ひたすら調整業務ばかりやる実務に全く携わらない人間がうまれる。
なぜかそういう人間にかぎって手を動かすエンジニアを小馬鹿にしているのが残念。
個人的にはPMやPMO、PGはただの役割にすぎないので対等であるべきだと考えている。
この調整業務はお金を生み出さない削減されるべき業務だが、SESは人売り商売でその間にはかならず調整業務が必要になるため、SESは無限にこの生産性のない作業を生み出し続けている。

#### 2.案件にどれだけ人をぶち込めるかが評価基準
プログラマーからプロジェクトの管理者になっていくと
SESでは最終的にどれだけ人を案件にぶち込めるかで評価される。
作業量をかさましたり、どうやったら契約を引き延ばせるかという無駄なことばっかりに注力し始めて、お客さんのために１ミリもなっていない。
そもそもすべてのシステム開発は業務の効率化をするためにおこなっているのでどんどん人手はいらなくなるはず。SESという業態はどんどん縮小されるべきものである。

#### 3.コアな仕事はほとんどできない
製造工程だけのプロジェクトも多い。
たとえ設計工程から入れたとしてもやっぱりコアな部分はプロパーの人間がやるのが基本となり、コアな仕事はほとんどできないため成長機会がすくない。

#### 4.性格の悪い人間ができあがる
人売りなので案件によっては下請けいじめのように圧を異常にかけてくるお客さんがいたり、孫請けの場合だと元請けの管理者が高圧的というのはよくあることです。
そんな中で働いていたら心もすさんでくるのは当たり前です。

## SESのメリット
逆にSESのメリットについても少し記載しておきます。
#### 1.未経験でも入りやすい
大量採用、大量離職がSESの基本なので、現時点での１番のメリットはこれだと思います。ただし業界からSESがなくなれば事業会社の未経験採用というのは増えてくるかと思います。

#### 2.(会社によっては)給料を上げやすい
違うプロジェクトに参画するということは、ある意味転職するのと同義なので給料を上げてくれる会社なら上げやすいです。
実際に自分も３年ほどで100万以上は給料が上がりました。
スキルのある人間にとっては現在勤めている会社に対して「転職」が一番の給与UPの交渉材料ですが、今後もっと転職がしやすい世の中になればSESのこのメリットも次第になくなってくるかと思います。
RestAPIとGraphQLの違いの基本

RESTとGraphQLの違い

### 1. データ取得の方法

- **REST**:
  - 各リソースに対して異なるエンドポイントを持ちます。例えば、ユーザー情報を取得するためには `/users`、特定のユーザー情報を取得するためには `/users/{id}` というように、複数のエンドポイントを利用します。
  - 必要なデータが多すぎたり少なすぎたりすることがあり、これを「オーバーフェッチ」や「アンダーフェッチ」と呼びます。

- **GraphQL**:
  - 単一のエンドポイントでデータを取得します。クライアントは必要なデータをクエリで指定でき、正確に必要な情報だけを取得できます。

### 2. データの構造

- **REST**:
  - サーバーが決めたデータ構造に従います。クライアントはサーバーが提供する形式でデータを受け取るため、変更があるとクライアント側も修正が必要になります。

- **GraphQL**:
  - クライアントが必要なデータの構造を指定できます。スキーマに基づいてクエリを作成し、必要な情報を柔軟に取得できます。

### 3. バージョン管理

- **REST**:
  - APIの変更に伴い、バージョンを管理する必要があります。例えば、`/v1/users` や `/v2/users` といった形で新しいバージョンを作成します。

- **GraphQL**:
  - スキーマの変更を行っても、既存のクエリに影響を与えない限り、バージョン管理が不要です。新しいフィールドを追加しても、古いクエリはそのまま機能します。

### 4. リアルタイムデータ

- **REST**:
  - リアルタイムデータの取得には別の仕組み（例えばWebSocket）を使う必要があります。

- **GraphQL**:
  - サブスクリプション機能を利用することで、リアルタイムでデータの変更を受け取ることができます。
vbsの作法 その95

# 概要
vbsの作法、調べてみた。
vbs見つけたので、やってみた。

# 参考にしたページ

https://qiita.com/sigmaponta/items/832a33452bec8cab89c5

# サンプルコード

```
Option Explicit
Dim sapi
Set sapi = CreateObject("SAPI.SpVoice")
sapi.Speak "契約書だよ。そこに名前を書きな。"
Dim name
name = InputBox("契約書")
If Len(name) = 0 Then
    Wscript.Arguments(-1)
End If
WScript.Sleep 1000
sapi.Speak "フン。" & name & "というのかい。贅沢な名だねぇ。"
Dim newName
Randomize
newName = Mid(name, Int(Len(name) * Rnd + 1), 1)
WScript.Sleep 1000
sapi.Speak "今からお前の名前は" & newName & "だ。"
WScript.Sleep 1000
sapi.Speak "いいかい、" & newName & "だよ。分かったら返事をするんだ、" & newName & "!!"
Set sapi = Nothing



```

以上
Rails の新しいメンテナンスポリシーについて (2024/10/15 (火) 時点)

## この記事は？

- [Ruby on Rails — New Rails maintenance policy and end of maintenance announcements](https://rubyonrails.org/2024/10/15/new-maintenance-policy-and-eol-annouments)

上記の記事の内容を拙訳し、備忘録として残します。

## 最初にまとめ

- 新しいメンテナンスポリシーではリリースのメンテナンス期間が具体的に定められた
- (2024/10/15 (火) 時点で) Rails 7.0.x 以前のバージョンを使用している場合は、なるべく早く Rails 7.1.x 以降のバージョンに更新すること

## 新しいメンテナンスポリシー

### メンテナンスポリシーの概要

Rails のサポートは、現在 3 つのカテゴリーに分かれている。

- 新機能
  - Rails は 6 ヶ月ごとに新機能を含むバージョンをリリースすることを目指している
- バグ修正
  - マイナーリリースはそのシリーズの最初のリリースから 1 年間、バグ修正がリリースされる
  - 例えば、バージョン 1.1.0 が 2023/01/01 にリリースされた場合、2024/01/01 までバグ修正が行われる
- セキュリティ修正
  - マイナーリリースはそのシリーズの最初のリリースから 2 年間、セキュリティ修正を受ける
  - 例えば、バージョン 1.1.0 が 2023/01/01 にリリースされた場合、2025/01/01 までセキュリティ修正が行われる

### 現在サポート中のリリース

現在以下のリリースがサポートされている。

- 7.2.x
  - バグ修正: 2025/08/09 (土) まで
  - セキュリティ修正 2026/08/09 (日) まで
- 7.1.x
  - バグ修正: 2024/10/01 (火) まで
  - セキュリティ修正: 2025/10/01 (水) まで
- 7.0.x
  - バグ修正: なし
  - セキュリティ修正: 2025/04/01 (火) まで
- 6.1.x (メンテナンス終了)
  - バグ修正: なし
  - セキュリティ修正: なし

### メンテナンスポリシーの重要な変更

- Rails 6.1.x メンテナンス終了のお知らせ
  - Rails 6.1.x は 2024/10/01 (火) にメンテナンスが終了した
  - 定期メンテナンスは終了したが、Rails 6.1.x のセキュリティ修正を 1 回追加する
  - この追加のセキュリティ修正以降はこのバージョンのアップデートはリリースされない
  - Rails 6.1.x を使っている場合は、できるだけ早くサポート対象バージョンへのアップグレードを強く薦める
- Rails 7.0.x バグ修正リリース
  - 今月 (2024/10) 末、Rails 7.0.x の最後のバグ修正をリリースする予定
  - このリリース以降、Rails 7.0.x のバグ修正はリリースされない
  - Rails 7.0.x のセキュリティ修正は、これまでと同様 2025/04/01 (火) まで継続する

### つまりどういうこと？

- Rails 6.1.x を使用している場合
  - Rails が最後のセキュリティ修正をリリースする間に、できるだけ早くサポート中のバージョンに更新することが重要
  - この追加リリース以降はアップデートが提供されなくなり、アプリケーションが脆弱になりうるので注意
- Rails 7.0.x を使用している場合
  - 今月 (2024/10) 中に最後のバグ修正がリリースされる
- Rails 7.1.x および 7.2.x を使用している場合
  - バグ修正とセキュリティ修正の両方を引き続き受け取ることができる

## 参考

- [Ruby on Rails — New Rails maintenance policy and end of maintenance announcements](https://rubyonrails.org/2024/10/15/new-maintenance-policy-and-eol-annouments)
- [Rails 7.2: maintenance_policy.mdの訳文を更新 by hachi8833 · Pull Request #1651 · yasslab/railsguides.jp](https://github.com/yasslab/railsguides.jp/pull/1651/files)
M5NanoC6、NeoPixelで遊ぶ。





x 過去ログを見よ!!
x Adafruit_NeoPixel.hをインストール





結果

![o_coq520.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/061a698a-2618-81dd-c488-eb2e584e7360.jpeg)


プログラム

(M5NanoC6専用のライブラリを改造)



```c++



//RGB2LED_M5NanoC6_1


/**
 * @file rgb_led.ino
 * @author SeanKwok (shaoxiang@m5stack.com)
 * @brief
 * @version 0.1
 * @date 2024-03-19
 *
 *
 * @Hardwares: M5NanoC6
 * @Platform Version: Arduino ESP32 Board Manager v3.0.0-alpha3
 * @Dependent Library:
 * M5NanoC6: https://github.com/m5stack/M5NanoC6
 * Adafruit_NeoPixel: https://github.com/adafruit/Adafruit_NeoPixel
 */

#include <Adafruit_NeoPixel.h>

#define NUM_LEDS 2
Adafruit_NeoPixel strip(NUM_LEDS, 1, NEO_GRB + NEO_KHZ800);

void setup() {
    // Enable RGB LED Power
    pinMode(1, OUTPUT);
    digitalWrite(1, HIGH);

    strip.begin();
    strip.show();
}

void loop() {
    strip.setPixelColor(0, strip.Color(64, 0, 0));
    //strip.show();
    //delay(100);

    strip.setPixelColor(1, strip.Color(0, 64, 0));
    strip.show();
    delay(100);


    strip.setPixelColor(0, strip.Color(0, 64, 0));
    //strip.show();
    //delay(100);

    strip.setPixelColor(1, strip.Color(0, 0, 64));
    strip.show();
    delay(100);


    // 蓝色
    strip.setPixelColor(0, strip.Color(0, 0, 64));
    //strip.show();
    //delay(100);

    strip.setPixelColor(1, strip.Color(64, 0, 0));
    strip.show();
    delay(100);
}


```
初心者でもわかる！Ruby言語の5つの特徴と魅力

# はじめに
Rubyは、使いやすさとシンプルさを兼ね備えたプログラミング言語で、特にWebアプリケーション開発で人気があります。Rubyを選ぶ理由は数多くありますが、その中でも最も特徴的なポイントを5つに絞って解説します。これからRubyを学びたい方、他の言語と比較したい方に向けて、Rubyの魅力を紹介していきます。

# 1. 人間が読みやすいコードを書くためにデザインされた言語
Rubyの最も大きな特徴は、「プログラマの幸福」を重視して設計されたことです。Rubyのコードは、まるで自然言語のように読みやすく、書きやすいことを目指しています。以下に、簡単なRubyのコードを示します。

```ruby
# 配列の各要素に1を足す例
numbers = [1, 2, 3, 4, 5]
numbers.each do |number|
  puts number + 1
end
```
このように、複雑な構文がなく、初心者でも直感的に理解できるのがRubyの魅力です。Rubyの文法は非常に柔軟で、余分なカッコやセミコロンが不要なため、読みやすさが向上します。

例えば、同じ操作をJavaで書くと以下のようになります。

```java
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
  System.out.println(number + 1);
}
```
比較すると、Rubyのシンプルさが際立ちます。Rubyのコードは無駄な要素が少なく、書き手と読み手の負担を軽減する設計になっています。

# 2. オブジェクト指向が徹底されている
Rubyは「純粋なオブジェクト指向言語」と呼ばれるほど、すべてがオブジェクトとして扱われます。数値、文字列、配列といった基本的なデータ型もすべてオブジェクトであり、これらに対してメソッドを呼び出すことができます。

```ruby
puts 5.class  # => Integer
puts "Hello".class  # => String
puts [1, 2, 3].class  # => Array
```
これにより、Rubyでは一貫性のある設計が可能になり、コードの可読性と保守性が向上します。また、オブジェクト指向の原則に従い、クラスとメソッドを使って柔軟なコードを書くことができるため、再利用可能なコードを作成しやすいです。

### オブジェクト指向の利点
Rubyではクラスやモジュールを使って、プログラムを小さなパーツに分けて設計できます。これにより、コードの再利用や拡張が容易になり、規模が大きなプロジェクトでも管理しやすくなります。

```ruby
class Animal
  def speak
    "Hello!"
  end
end

class Dog < Animal
  def speak
    "Woof!"
  end
end

dog = Dog.new
puts dog.speak  # => "Woof!"
```
この例では、```Dog```クラスが```Animal```クラスを継承しており、オブジェクト指向の強力さを示しています。

# 3. 豊富な標準ライブラリとGem
Rubyには、日常的な作業を効率よく行うための豊富な標準ライブラリが用意されています。ファイル操作、ネットワーク、JSONパースなど、さまざまな機能が標準で利用可能です。

### 標準ライブラリの使用例
以下は、標準ライブラリを使ってファイルの内容を読み取る簡単な例です。

```ruby
File.open("example.txt", "r") do |file|
  puts file.read
end
```
さらに、Rubyには「Gem」という豊富なライブラリがあり、これを使うことで必要な機能を簡単に追加できます。たとえば、Webアプリケーションフレームワーク「Rails」もGemの一つです。

```bash
gem install rails
```
Gemは公式のリポジトリ「RubyGems.org」からインストールでき、数多くの開発者が便利なツールを提供しているため、プロジェクトに必要なライブラリがすぐに見つかります。

# 4. 動的型付け言語
Rubyは動的型付け言語です。つまり、変数に型を宣言する必要がなく、必要に応じて型が自動的に決定されます。これにより、開発者は型に煩わされることなく、迅速にコーディングを進めることができます。

```ruby
x = 10
x = "Hello"
puts x  # => "Hello"
```
このように、同じ変数に異なる型の値を代入することができます。Rubyは実行時に型を判断し、プログラムを動かします。この柔軟性は、特にプロトタイピングや小規模なプロジェクトでの開発に役立ちます。

### 動的型付けのデメリット
一方で、大規模なプロジェクトでは動的型付けのためにバグが発生しやすくなる可能性があります。しかし、Rubyではその欠点を補うために、テスト駆動開発（TDD）や静的コード解析ツールが多く利用されます。

# 5. 強力なメタプログラミング
Rubyの最大の魅力の一つは「メタプログラミング」です。メタプログラミングとは、プログラムがプログラム自体を操作することです。Rubyでは、コードの柔軟性を高めるために、動的にクラスやメソッドを定義することが可能です。

### メタプログラミングの例
```ruby
class DynamicMethod
  def self.define_method(name, &block)
    define_singleton_method(name, &block)
  end
end

DynamicMethod.define_method(:greet) { "Hello, World!" }
puts DynamicMethod.greet  # => "Hello, World!"
```
この例では、```define_method```を使って、プログラムの実行時に新しいメソッドを定義しています。これにより、繰り返し同じコードを書く必要がなくなり、コードの再利用性が大幅に向上します。

### Railsでのメタプログラミングの活用
Ruby on Railsは、このメタプログラミングの力を最大限に活用しており、開発者が簡単にコードを生成したり、カスタムメソッドを定義したりできます。これにより、開発の効率が大幅に向上します。

# まとめ
Rubyは、その読みやすさ、純粋なオブジェクト指向、豊富なライブラリ、動的型付け、そしてメタプログラミングなど、強力な特徴を持つプログラミング言語です。これらの特性が組み合わさることで、開発者にとって非常に扱いやすい言語となっています。

もし、これからプログラミングを始めようとしているなら、Rubyは非常に良い選択肢です。Webアプリケーション開発をはじめ、多くの分野で活躍しているRubyをぜひ学んでみてください！

# 参考文献
[Ruby A Programmer's Best Friend](https://www.ruby-lang.org/ja/about/)
ReactとgRPCにおける型変換

フロントエンドがReactで、バックエンドがgRPCを使用している場合、型の変換は主に以下の方法で行われます。

1. **Protocol Buffersの利用**: gRPCはProtocol Buffers（protobuf）を使用してデータを定義します。バックエンドで定義したメッセージ型をフロントエンドに適用するために、protobufコンパイラを使ってTypeScriptの型定義を生成することが一般的です。

2. **gRPC-Webの使用**: gRPC-Webを利用することで、gRPCサービスをブラウザから直接呼び出すことができます。この際、TypeScriptの型定義を生成することで、フロントエンドでの型安全性を確保できます。

3. **APIクライアントの生成**: `grpc-web`や`@improbable-eng/grpc-web`などのライブラリを使って、gRPCサービス用のクライアントを生成します。これにより、フロントエンドとバックエンド間の通信がスムーズになります。

4. **手動での変換**: 特殊なケースや複雑なデータ構造の場合は、型変換を手動で行うこともあります。これには、データのマッピングや変換ロジックを実装する必要があります。
M5NanoC6にAdafruit NeoPixelをインストールして遊ぶ。


●　ライブラリに移動
---------------------------------



![o_coq513.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/270113cb-14f4-ff37-39de-293372e93100.jpeg)



●　Adafruit NeoPixelをインストール
---------------------------------


![o_coq519.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/14db072e-954a-9665-5fd9-9759b9e5464a.jpeg)
(Node.js) @mapbox/geojson-areaモジュールを理解する

# はじめに
node.jsのコードの中で@mapbox/geojson-areaモジュールを使用する機会があったので、どのようなモジュールであるのか簡単にまとめたいと思います。

# @mapbox/geojson-areaモジュールとは
GeoJSON データから地理的な領域（面積）を計算するためのモジュールです。このモジュールは、GeoJSON オブジェクトに含まれるポリゴンやマルチポリゴンのジオメトリから面積を計算することができます。

# サンプルコード
```javascript:geojson-area.js
const geojsonArea = require('@mapbox/geojson-area');

const geojson = {
  type: 'Polygon',
  coordinates: [
    [
      [-73.981149, 40.768884],
      [-73.961149, 40.768884],
      [-73.961149, 40.748884],
      [-73.981149, 40.748884],
      [-73.981149, 40.768884],
    ],
  ],
};

const area = geojsonArea.geometry(geojson);
console.log(`Area: ${area} square meters`);
```

上記GeoJsonのポリゴンはニューヨークマンハッタン辺りにあります。
geojsonArea.geometry()
とすることで、平方km単位で面積が表示されます。実行結果は以下のとおりです。

```
Area: 3754605.150156415 square meters
```

# まとめ
node.jsの@mapbox/geojson-areaモジュールの使用方法についてまとめました。

# Reference

https://www.npmjs.com/package/@mapbox/geojson-area
pubsubjsを使ってみる

:::note
## 概要
pubsubjsとは
- JavaScriptで書かれたトピックベースのpub/subパターンのライブラリです
- トピックを使うことでメッセージ配信先をコントロールできます
- 一階層しかないトピック以外にも階層的なトピックによって配信内容を分けることができます
:::

# 背景
業務のコードでpubsubjsを初めて知った為です。

# pubsubjsとは

JavaScriptで書かれたトピックベースのpub/subパターンのライブラリです。

pubsubパターンについては以下の記事で紹介していますのでご覧ください。

https://qiita.com/yamatai12/items/69b60de4509d2ce4ea26

トピックというのは以下のようなtypeのことを言うそうです。
```ts
type Message {
    type: "TYPE";
    data: Data;
}
```

トピックを使うことでメッセージ配信先をコントロールできます。

# pubsubjsを使ってみる

## install

https://www.npmjs.com/package/pubsub-js

```
npm i pubsub-js
```

https://www.npmjs.com/package/@types/pubsub-js

```
npm i @types/pubsub-js
```

## 基本的な例

```index.ts
import PubSub from 'pubsub-js';

const MY_TOPIC = 'hello';
PubSub.subscribe(MY_TOPIC, function (msg, data) {
	console.log(data)
});

PubSub.publish(MY_TOPIC, 'world');
```

```terminal
world
```

:::note
トピックにはtypo対策の為に文字列リテラルではなく「定数」を使用することを推奨されています
:::

## 購読をキャンセル

以下は2回`world`が表示されます。

```ts
import PubSub from "pubsub-js";

const MY_TOPIC = "hello";
PubSub.subscribe(MY_TOPIC, function (msg, data) {
  console.log(data);
});

PubSub.publish(MY_TOPIC, "world");

PubSub.publish(MY_TOPIC, "world");
```

```terminal
world
world
```
以下のように`subscribe`メソッドの返り値の`token`を`PubSub.unsubscribe(token)`に渡すと2回目以降の購読をキャンセルできます。

```ts
import PubSub from "pubsub-js";

const MY_TOPIC = "hello";
const token = PubSub.subscribe(MY_TOPIC, function (msg, data) {
  console.log(data);
  // unsubscribe this subscriber from this topic
  PubSub.unsubscribe(token);
});

PubSub.publish(MY_TOPIC, "world");

PubSub.publish(MY_TOPIC, "world");
```

```terminal
world
```

## 階層的なトピックによって配信内容を分ける

```ts
import PubSub from "pubsub-js";

const TOPIC = {
  PARENT: "parent",
  CHILD: "parent.child",
  ANCESTOR: "parent.child.ancestor",
};

PubSub.subscribe(TOPIC.PARENT, function (msg, data) {
  console.log("subscribe_parent", data);
});

PubSub.subscribe(TOPIC.CHILD, function (msg, data) {
  console.log("subscribe_child:", data);
});

PubSub.subscribe(TOPIC.ANCESTOR, function (msg, data) {
  console.log("subscribe_ancestor:", data);
});

PubSub.publish(TOPIC.ANCESTOR, "ancestor");

```

```terminal
subscribe_ancestor: ancestor
subscribe_child: ancestor
subscribe_parent ancestor
```
`parent`にドットで繋げて記述することで`parent`→`parent.child`→`parent.child.ancestor`が親子孫の関係になります。

subscribeのcallbackは最下層から呼び出されます。

# 最後に
pubsubjsはまだ他にも機能はありますが、概要は掴めました。
イベントリスナーで使われていたので今度は実際にどんな場面で使われているか実装したいと思います。

# 参考

https://zenn.dev/shinkano/articles/84431a42c73794
MailHoge API を利用して、Curlコマンドからメールを取得する方法

WebAPIのテスト一環として、認証確認メール等でメールからの情報取得を行いたい時になどに利用して記事にします。  
既に、コマンドラインからメールを送信するなどの記事が出ているので、ここでは取得について記載します。

[MailHog](https://github.com/ian-kent/MailHog)のDockerコンテナで送信されたメールの内容をコマンドラインから確認するには、MailHogのAPIを使用する方法が一般的のようです。  
MailHogはHTTP APIを提供しており、このAPIを通じてメールの情報を取得することができます。
- [MailHog API v2](https://github.com/mailhog/MailHog/blob/master/docs/APIv2.md)

## `/api/v2/messages` エンドポイント
/api/v2/messagesエンドポイントを使用してメールを取得する基本的なcURLコマンドです。

### 例）保存されているすべてのメールをJSON形式で返却
```sh
curl "http://localhost:8025/api/v2/messages"
```


### パラメータの詳細

|パラメータ|説明|
|---|---|
|start|取得するメールの開始インデックスを指定します（デフォルトは0です）|
|limit|取得するメールの数を指定します（デフォルトは50です）|

### 例）最初の100件のメールを取得したい場合

```sh
curl "http://localhost:8025/api/v2/messages?start=0&limit=100"
```

### レスポンスデータ
各メールオブジェクトは、ID、From、To、およびContent（ヘッダー、ボディ、サイズ、MIMEタイプが含まれる）などの情報を含んでいます。

```json
{
  "total": 200,
  "count": 100,
  "start": 0,
  "items": [
    {
      "ID": "message-id",
      "From": "from@example.com",
      "To": ["to@example.com"],
      "Content": {
        "Headers": {
          "Subject": ["Email Subject"],
          "Date": ["Date"],
          "Other-Headers": ["Header Value"]
        },
        "Body": "Encoded body content",
        "Size": 1234,
        "MIME": "MIME type"
      },
      "Created": "2020-01-01T12:00:00Z"
    }
  ]
}
```

## `/api/v2/search` エンドポイント
MailHogの`/api/v2/search`エンドポイントを使用することで、特定の条件に基づいてメールを検索することができます。このAPIは主にメールの`From`、`To`、`Subject`フィールドに対する検索をサポートしています。

`/api/v2/search`エンドポイントは、クエリパラメータとして`kind`（検索するフィールド）、`query`（検索クエリ）、および任意で`start`と`limit`（ページネーションのためのパラメータ）を受け取ります。

### 例）特定の送信者からのメールを検索  
```sh
curl "http://localhost:8025/api/v2/search?kind=from&query=example@example.com"
```

### 例）特定の受信者に宛てたメールを検索  
```sh
curl "http://localhost:8025/api/v2/search?kind=to&query=recipient@example.com"
```

### 例）メール本文に特定の単語が含まれているメールを検索  
```sh
curl "http://localhost:8025/api/v2/search?kind=containing&query='important'"
```

### パラメータの詳細

|パラメータ|説明|
|---|---|
|kind|検索するメールのフィールドを指定します。`from`、`to`、`containing`のいずれかを指定可能です|
|query|検索クエリとして、実際の検索文字列を指定します|
|start|検索結果の開始インデックスを指定します（デフォルトは0）|
|limit|返されるメールの最大数を指定します（デフォルトは100）|


## WebAPIテストツールなどからの利用
以下に、WebAPIテストツールである [Step/CI](https://stepci.com) の利用例を挙げておきます。

### 指定したメールアドレス宛の直近のメールの取得
```yml
# 送信済みメールを取得する
name: MailHoge API Tests
version: '1.0'
tests:
  user_registration:
    steps:
      # 該当するアカウント宛の送信済みメールを取得する
      - name: Get Registration confirmation email
        http:
          url: http://localhost:8025/api/v2/search
          method: GET
          params:
            kind: to
            query: ${{env.toUserAccount}}
            start: 0
            limit: 1
          captures:
            mail:
              jsonpath: $.items.0
```

以上
Flutterアプリと相性が良いIDaaS6選

Flutterと相性が良いIDaaS（Identity as a Service）は、モバイル開発向けのSDKやAPIが充実しており、Flutterとの統合が容易なサービスです。以下、Flutterとの統合が簡単で、相性が良いIDaaSをいくつか紹介します。

### 1. **Firebase Authentication**

- **概要**: FirebaseはGoogleが提供する開発プラットフォームで、Firebase AuthenticationはFlutterとの統合が非常に容易です。公式のFlutter SDKが用意されており、簡単に認証機能を実装できます。
- **特徴**:
  - Flutter用の公式パッケージ（`firebase_auth`）があり、数行のコードで認証機能を追加可能。
  - ソーシャルログイン（Google、Facebook、Twitterなど）やパスワードベース認証に対応。
  - 無料で利用可能な範囲が広く、特に小規模なプロジェクトに最適。
  - Firebaseの他の機能（クラウドストレージ、データベース）ともシームレスに統合できる。
- **統合コスト**: 10,000回/月の認証リクエストまで無料で利用できるため、低コストでスタート可能。

### 2. **Auth0**

- **概要**: Auth0は、開発者向けに柔軟な認証ソリューションを提供するIDaaSで、Flutterアプリとも簡単に統合できます。幅広い認証オプションがあり、ソーシャルログインやパスワードレス認証など、豊富な機能が利用できます。
- **特徴**:
  - `auth0_flutter`パッケージを利用して、Flutterでの簡単な統合が可能。
  - ソーシャルログイン（Google、Facebook、Apple IDなど）や多要素認証（MFA）に対応。
  - 無料プランは7,000ユーザーまでサポートされており、開発やテストフェーズに最適。
  - カスタマイズ性が高く、OAuth 2.0やOpenID Connectをサポート。
- **統合コスト**: 無料プランがあり、コストを抑えながら導入可能。

### 3. **AWS Amplify (Cognito)**

- **概要**: AWS Amplifyは、Flutterとの統合に力を入れているAWSのフルスタック開発プラットフォームで、Cognitoを通じて認証機能を簡単に追加できます。公式のAmplify Flutter SDKが提供されています。
- **特徴**:
  - `amplify_flutter`パッケージを使って、数行でユーザー認証、MFA、ソーシャルログインを実装可能。
  - AWS Cognitoを利用して、最大50,000ユーザーまで無料で利用可能。
  - 他のAWSサービス（Lambda、S3）ともシームレスに連携でき、バックエンド全体を簡単に構築可能。
  - ソーシャルログインやカスタム認証フローにも対応。
- **統合コスト**: AWSの無料利用枠が広範で、低コストで運用可能。

### 4. **Okta**

- **概要**: Oktaは、エンタープライズ向けのIDaaSプロバイダーで、Flutterアプリとの統合も容易です。開発者向けの無料プラン「Okta Developer Edition」があり、少人数のユーザー向けにはコストを抑えながら利用可能です。
- **特徴**:
  - `okta_flutter`パッケージが提供されており、Flutterとの統合が簡単。
  - 最大1,000ユーザーまで無料プランで利用可能。
  - OAuth 2.0、OpenID Connect、SSO（シングルサインオン）、MFAに対応。
  - Sign in with AppleやGoogleなどのソーシャルログインもサポート。
- **統合コスト**: 無料プランがあるため、開発コストを抑えて導入可能。

### 5. **Supabase**

- **概要**: Supabaseは、オープンソースのFirebase代替として人気の高いBaaS（Backend as a Service）で、Flutterアプリとも簡単に統合できます。公式のFlutter SDKがあり、リアルタイムデータベースや認証機能を手軽に導入できます。
- **特徴**:
  - `supabase_flutter`パッケージを使用して、Flutterアプリにユーザー認証を簡単に追加可能。
  - ソーシャルログイン（Google、GitHubなど）やMagic Link（パスワードレス認証）に対応。
  - 無料プランでAPIリクエスト数に応じた柔軟な料金体系を提供。
  - Supabaseの他の機能（データベース、ストレージ）ともスムーズに統合できる。
- **統合コスト**: 無料プランが充実しており、スタートアップやプロトタイピングに最適。

### 6. **OneLogin**

- **概要**: OneLoginは、シンプルかつセキュアなIDaaSサービスで、シングルサインオン（SSO）や多要素認証（MFA）を提供しています。Flutterとの統合も比較的簡単に行えます。
- **特徴**:
  - `one_login_flutter`などのパッケージを通じて、Flutterアプリに認証機能を簡単に実装可能。
  - OAuth 2.0、OpenID Connectをサポートし、SSOとMFAの機能が強力。
  - ソーシャルログインやカスタム認証フローにも対応可能。
  - 無料プランでも、開発フェーズの小規模なプロジェクトに十分な機能が提供されます。
- **統合コスト**: 無料プランや低価格のプランがあるため、導入コストを抑えやすい。

### まとめ

Flutterアプリとの相性が良いIDaaSとしては、Firebase AuthenticationやAuth0、AWS Amplifyが特に使いやすく、コストも低く抑えられます。これらのサービスは、Flutter用の公式SDKを提供しており、ドキュメントも豊富なので、簡単に統合可能です。また、Supabaseもオープンソースで、リアルタイムデータベースと組み合わせて使えるため、モダンなアプリ開発に適しています。
google colabratoryのファイルをPDF化する方法

こんにちは。takasan1234です。大学の課題で「google colabratory内の`.ipynb`ファイルをPDF化して提出しろ」との指示があり、その手順が若干複雑だったので共有します。

## 本記事で得られる情報
・`.ipynb`ファイルのPDF化の具体的手順

## 各ツールのバージョン
使用したツールのバージョンは以下になります

| ツール | バージョン |
|:-:|:-:|
| VSCode | 1.94.2 |
| Jupyter | 2024.9.1. |

## PDF化で手順
調べた結果いろいろ方法がありそうでしたが、一番わかりやすい方法を取り上げます。

~~・`.ipynb`ファイルをVSCodeで開き、PDFとしてエクスポート~~
~~・`.ipynb`ファイルをVSCodeで開き、HTMLとしてエクスポートし、ブラウザ上でPDF化~~

~~この2通りを紹介します。筆者は、1．ではエラーが起こりましたので、2．の手法をとりました。~~


後日、さらに簡単な方法が見つかった。以下に方法を示す。

**colabratory上でファイルを開いてください。`Ctrl + p`もしくは`Command + p`を押して、送信先を「PDFに保存」にして、保存して下さい。**

## まとめ
これで、PDF化完了です。ダウンロードされたファイルを確認してください。
お疲れ様でした。


## 本記事訂正前の回りくどい方法
#### 1．colabratoryからファイルをダウンロードする
<img width=70% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879369/bc672bce-3908-e77b-0a36-6a5a610d8c22.png" />

#### 2．ダウンロードしたファイルをVSCodeで開く
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879369/64720109-f163-de72-cdee-2cea9b044bfc.png" />

:::note warn
VSCodeで開けない場合は、ファイルを右クリック→プログラムから開く→VSCodeで開いてください。
:::

:::note alert
ファイルを開いた際に、右下にメッセージが表示されるかもしれません。その際は、**すべて強調されている方のボタン**を押してください。特定のファイルを扱うために必要なものを自動でインストールしてくれたりします。
:::


#### 3．ファイルをエクスポート
エクスポート
<img width=100% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879369/bbc454e9-c756-5dcb-bc61-0131ce4b7db3.png" />

VSCode内にあるエクスポート機能を使用します。エクスポートのボタンを押すと、以下の項目が現れます。

1.PDFとして出力
2.HTMLとして出力

1．で出力できるならPDF化完了です。これ以降読まなくて構いません。
ただ、筆者はエクスポート中にエラーが起こったので、その対処法を示します。



エクスポートの失敗
<img width=70% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879369/ef0262a0-2d46-5ae6-40b3-32fd7cf57db0.png" />

##### PDFとしてエクスポートできなかった場合

一旦、HTMLファイルとしてエクスポートしてください。

#### 4．HTMLファイルを開いてPDFを出力
3．でダウンロードしたファイルを開いてください。そうすれば、ブラウザでページが表示されます。ページが確認できれば、`Ctrl + p`もしくは`Command + p`を押して、送信先を「PDFに保存」にして、保存して下さい。

![スクリーンショット 2024-10-18 015814.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879369/7ef83052-c4b0-ff2d-0fff-a2870b021550.png)


## 最後に
少しでも参考になれば嬉しいです。
また、個人的に手書き機能を搭載したアプリを開発したいと考えているのですが、手書き機能の実装経験のある方やおすすめの方法等あれば、教えていただきたいです！！（UIkit, SwiftUI）

最後までお読み頂きありがとうございました！！
iOSアプリの認証におすすめなIDaaS6選

iOSアプリとの統合コストが低いIDaaS（Identity as a Service）を選ぶ際には、開発者向けのSDKが豊富に提供されているか、簡単に統合できるAPIやドキュメントが充実しているか、そして無料または低価格で利用できるかが重要なポイントです。以下、iOSアプリとの統合コストが低いIDaaSサービスをいくつか紹介します。

### 1. **Firebase Authentication**

- **概要**: GoogleのFirebase Authenticationは、モバイルアプリケーション（iOS/Android）との統合が非常に簡単です。Firebase SDKが標準的に提供されており、特にiOSアプリ開発者にとって使いやすい選択肢です。
- **特徴**:
  - iOS向けのFirebase SDKを利用して、数行のコードでユーザー認証が可能。
  - Google、Facebook、Apple IDなどのソーシャルログインや、パスワードベースの認証に対応。
  - 10,000回/月までの認証リクエストが無料で利用可能。
  - Firebaseの他の機能（データベース、クラウドストレージ）ともシームレスに統合。
- **統合コスト**: 非常に低コスト。無料枠が充実しており、小規模アプリに最適。

### 2. **Auth0**

- **概要**: Auth0は、柔軟で強力なIDaaSソリューションを提供しており、iOSアプリとの統合にも適しています。多様な認証オプションをサポートしており、SDKやAPIが充実しているため、開発者が簡単に統合できます。
- **特徴**:
  - iOS用のネイティブSDKを提供しており、ソーシャルログインや多要素認証を簡単に実装可能。
  - 無料プランで7,000ユーザーまでサポート（ログイン機能などの制約あり）。
  - 豊富なドキュメントとサンプルコードがあり、統合が容易。
  - AppleのSign in with AppleやGoogle、Facebookなどの主要ソーシャルログインもサポート。
- **統合コスト**: 無料プランを利用する場合、コストは低い。特に開発段階や小規模なアプリに向いている。

### 3. **Okta Developer Edition**

- **概要**: Oktaはエンタープライズ向けのIDaaSソリューションとして有名ですが、開発者向けに提供されている無料プラン「Okta Developer Edition」は、iOSアプリにも簡単に統合できます。
- **特徴**:
  - iOS向けSDKを提供しており、簡単に認証機能を統合できる。
  - 無料プランでは最大1,000アクティブユーザーをサポート。
  - OAuth 2.0、OpenID Connect、MFAの実装が容易。
  - Appleの「Sign in with Apple」などのサポートも完備。
- **統合コスト**: 1,000ユーザーまで無料で利用できるため、開発コストを抑えやすい。

### 4. **AWS Amplify (Cognito)**

- **概要**: Amazon Web Services (AWS) のAmplifyフレームワークを使用することで、Cognitoを通じてiOSアプリに認証機能を簡単に統合できます。Cognitoはスケーラブルな認証ソリューションで、サーバーレス環境での統合に優れています。
- **特徴**:
  - AWS AmplifyのiOS SDKで、数行のコードで認証を統合。
  - Google、Facebook、Apple IDなどのソーシャルログイン、MFAをサポート。
  - 無料利用枠があり、50,000 MAU（Monthly Active Users）までの認証が無料。
  - 他のAWSサービス（Lambda、S3）ともシームレスに統合可能。
- **統合コスト**: 無料枠が非常に充実しており、スモールスタートのアプリには最適。

### 5. **OneLogin**

- **概要**: OneLoginは、特にセキュリティ重視のエンタープライズ向けに人気がありますが、開発者向けの機能も豊富で、iOSアプリにも比較的簡単に統合できます。シングルサインオンや多要素認証に強みがあります。
- **特徴**:
  - iOS SDKを使って認証を簡単に実装可能。
  - シングルサインオン（SSO）、多要素認証（MFA）を無料プランでサポート。
  - ソーシャルログインも対応しており、柔軟なカスタマイズが可能。
  - 無料プランは特に開発段階や小規模なユーザーベースに向いています。
- **統合コスト**: 無料プランで初期費用を抑えられるが、ユーザーが増えるとコストが発生する。

### 6. **Keycloak**

- **概要**: KeycloakはオープンソースのIDaaSソリューションで、iOSアプリとの統合も可能です。完全無料で使用でき、認証やアクセス管理の機能を豊富に備えています。
- **特徴**:
  - オープンソースのため、完全に無料で利用可能。
  - iOSアプリ向けに、OAuth 2.0やOpenID Connectをサポート。
  - カスタマイズ性が高く、SSOやMFAの実装も柔軟。
  - ドキュメントやコミュニティサポートが充実しており、技術力がある開発チームには最適。
- **統合コスト**: 完全無料。ただし、自身でサーバーの設定や管理が必要な場合があるため、技術的なハードルは少し高い。

### まとめ

iOSアプリとの統合コストが低いIDaaSには、Firebase AuthenticationやAuth0、Okta Developer Editionなどがあります。特にFirebaseやAuth0は、SDKが充実しており、無料で始められるため、小規模アプリやプロトタイピングに最適です。AWS Amplifyも強力な選択肢で、無料枠が大きいため、アプリが成長するまでのコストを抑えやすいです。Keycloakはオープンソースで完全に無料ですが、技術的なスキルが必要となるため、開発リソースによっては慎重に選択する必要があります。
無料で使えるIDaaS6選

無料で利用できるIDaaS（Identity as a Service）サービスは、スタートアップや小規模プロジェクト向けに提供されているものがあり、基本的なユーザー認証やアクセス管理機能を利用できることが特徴です。ただし、無料プランには利用制限や機能の制約がある場合が多いです。以下、無料プランを提供しているIDaaSをいくつか紹介します。

### 1. **Auth0**

- **概要**: Auth0は、開発者向けに柔軟なIDaaSを提供し、カスタマイズ性の高い認証・認可機能を備えています。無料プランでもソーシャルログインやシングルサインオン（SSO）、多要素認証（MFA）など、豊富な機能が利用可能です。
- **無料プランの特徴**:
  - 7,000ユーザーまでの無料プランがあり、小規模プロジェクト向け。
  - ソーシャルログイン（Google、Facebook、GitHubなど）、データベースログイン、パスワードレス認証が利用可能。
  - ログイン機能や認証フローのカスタマイズが可能。
  - 監査ログ、カスタムドメイン、プロフェッショナルサポートは有料プランで提供。

### 2. **Okta Developer Edition**

- **概要**: Oktaはエンタープライズ向けに広く利用されているIDaaSですが、開発者向けに無料プランを提供しています。このプランは、開発段階や小規模なプロジェクトに適しており、SSOやMFAなどの基本機能が利用できます。
- **無料プランの特徴**:
  - 最大1,000アクティブユーザーまで無料で利用可能。
  - SSO、MFA、OAuth 2.0、OpenID Connect、APIアクセス管理をサポート。
  - パスワード管理、ユーザーライフサイクル管理機能も含まれる。
  - Oktaのダッシュボードからの簡単な設定が可能。

### 3. **Firebase Authentication**

- **概要**: Firebase Authenticationは、GoogleのFirebaseプラットフォームに統合されている認証サービスで、主にモバイルやウェブアプリの開発に使用されます。無料で簡単にユーザー認証を実装でき、Googleアカウントをはじめとするソーシャルログインもサポートします。
- **無料プランの特徴**:
  - 無料でユーザー認証、ソーシャルログイン（Google、Facebook、Twitterなど）、パスワードベース認証が利用可能。
  - 無制限の認証プロバイダ統合が可能。
  - Firebaseの他の機能（データベース、ストレージ）とシームレスに連携。
  - 認証リクエストは1ヶ月あたり10,000回まで無料。

### 4. **Keycloak**

- **概要**: Keycloakは、オープンソースのIDaaSプラットフォームで、無料で利用可能です。エンタープライズ向けの機能を備えつつ、カスタマイズ性が高く、OAuth 2.0、OpenID Connect、SAMLといった標準的な認証プロトコルをサポートしています。
- **無料プランの特徴**:
  - 完全無料で使用可能（オープンソース）。
  - SSO、MFA、ユーザーディレクトリ管理、外部IDプロバイダ（Google、GitHubなど）との統合が可能。
  - 高度なカスタマイズができるため、大規模なシステムにも対応可能。
  - 管理者向けのダッシュボードやAPI連携も豊富。

### 5. **JumpCloud Free**

- **概要**: JumpCloudは、クラウドディレクトリサービスとしてユーザー認証、デバイス管理、アクセス制御を統合して提供します。無料プランでもSSOや多要素認証、デバイス管理などが利用可能です。
- **無料プランの特徴**:
  - 最大10ユーザー、10デバイスまでの認証と管理が無料。
  - SSO、MFA、デバイス管理（Windows、Mac、Linux）をサポート。
  - LDAP、RADIUS、SAMLなどの標準プロトコルに対応。
  - クラウドディレクトリ機能で、従業員のアクセス管理が簡単に行える。

### 6. **FusionAuth**

- **概要**: FusionAuthは、無料で利用できるIDaaSソリューションで、開発者が簡単に認証機能を統合できるよう設計されています。完全な認証・認可機能を備え、さまざまなプラットフォームで利用可能です。
- **無料プランの特徴**:
  - 無制限ユーザーとログイン機能を無料で提供。
  - SSO、MFA、ユーザーディレクトリ管理、ソーシャルログインをサポート。
  - カスタマイズ可能なユーザーダッシュボードと柔軟なAPIを提供。
  - 多言語サポート、カスタムワークフローも可能。

### まとめ

無料で利用できるIDaaSサービスは、プロジェクトの規模やニーズに応じて選ぶことが重要です。Auth0やOktaの無料プランは、開発者が小規模プロジェクトやテスト環境での使用に適していますし、Firebase Authenticationは特にモバイルアプリやウェブアプリケーション開発者に向いています。KeycloakやFusionAuthのようなオープンソースソリューションも、柔軟でカスタマイズ性が求められる場合には良い選択肢です。
Ruby Silver（Ruby技術者認定試験）合格体験記

## はじめに
Ruby Silverを取得し、それについて記事としてまとめておきたいなと思っていたのですが、ずっとできていなかったのでこのタイミングで記事化しようと思います。
ちなみに取得したのは2023年8月なので1年くらい前になりますが、受験したのはversion 3（Ruby 3）なので、現在受験できるものと同じになります。

## どんな資格？
正式名称は「[Ruby技術者認定試験](https://www.ruby.or.jp/ja/certification/examination/)」です。
その中で、以下の2つがあります。どちらも対象バージョンは`Ruby 3.1.x`です。
- Ruby Association Certified Ruby Programmer Silver（通称、Ruby Silver）
- Ruby Association Certified Ruby Programmer Gold version（通称、Ruby Gold）

そして、Ruby Silverでは以下の内容を問われます。
> Rubyの文法知識、Rubyのクラスとオブジェクト、標準ライブラリの知識について、基本的な技術レベルを持つことを認定します。
https://www.ruby.or.jp/ja/certification/examination/

CBT形式で、試験時間は90分です。
出題形式は全て選択式で、50問中の75%以上の正答率で合格となります。（なので38問以上の正答ですね）

## なぜ取得しようと思ったのか
主な理由は以下のとおりです。
- 業務でRuby（フレームワークはRuby on Rails）を使用しており、それなりにコードは書ける・読めるようにはなってきているけど、自分のRubyの理解度をはかってみたい
- 資格なら体系的にまとまっているので不足部分も把握しやすそう
- 最終的にはRuby Goldを取得したいので、まずはRuby Silverから挑戦してみよう

## 学習方法
まずは、まっさらな状態でどれくらい問題が解けるのかに挑戦してみるのがよいかと思います。その後、以下の教材を使用して学習しつつ、疑問に感じる部分は自分で実行したりリファレンスマニュアルを読むというのが一番効率が良さそうな気がします。
最終的には全ての模擬試験の問題を自分の言葉で説明できるようになると合格は固いでしょう。

### 活用した教材
#### [最短突破 Ruby技術者認定試験（Silver/Gold対応） 公式テキスト](https://gihyo.jp/book/2024/978-4-297-14216-2)
Ruby技術者認定試験を受験しなくても持っておいて損はないくらいのテキストになります。僕が受験したときはRuby 2対応のものしかなかったのですが、最近Ruby 3対応の改訂版を出してくださったようです。Rubyのことが色々とまとめられており、辞書代わりにも使用することができると思います。1冊でSilverとGoldを網羅していますし、模擬試験もついているので非常に役立ちます。個人的に電子版より紙のほうが使い勝手がよさそうな気がします。

#### [模擬問題集(Silver試験用)](https://github.com/ruby-association/prep-test/blob/version3/silver_ja.md)
Ruby技術者認定試験の公式サイトに掲載されているSilver用の模擬試験です。ファイルの最終更新は2年前ですが、ちゃんとRuby 3に対応した問題となっています。

#### [Rex](https://rex.libertyfish.co.jp/)
Ruby SilverとGoldの模擬試験を受験できるサイトです。GitHubアカウントの連携が必要となります。問題がランダムで出題され、得点の履歴等も残ります。満点が取れるようになるまで繰り返し解きましょう。
現在は解消されているかもしれませんが、問題自体に間違いがあるのでそれを正しいと誤認して学習してしまわないよう注意してください。（当時、勝手ながら運営会社様に間違いをコメントしたメールを送付させていだいたのですが、その後の対応がどうなったのかは不明です…）

#### [Ruby Silver試験前に見直すと幸せになれるメモ](https://tamata78.hatenablog.com/entry/2015/08/07/200454)
こちらは教材ではないですが、僕が受験会場に向かう途中でさらっと確認しておいたら本当に幸せになれたので共有させていただきます（笑）

### 学習時間
僕は結構心配性なので、受験しようと決めてから2~3週間くらいは時間をとりました。振り返るとこれはちょっととりすぎかなという反省点です。やはり長すぎると中弛みしそうになりますね…

## 受験してみての感想
難易度としては、そこまで高くないのかなという所感です。Rubyをメインに使っているエンジニアの方であれば、1週間くらいあれば余裕で合格はできると思います。
ですが、試験という特性上、ある程度の暗記は必要となってきます。特にRuby Silverはメソッド等を問われることが多いので、そういった手間は少々デメリットかもしれません。
また、体系的にRubyの基礎を学習することができるので、（受験するしないは別として）取り組む内容としては初学者の方にもおすすめできると感じました。

## 余談
これは余談になるのですが、電車の遅延により受験できなかったお話しもここで供養させていただきます。
僕が受験しようとしていた会場は電車で1時間くらいかかる場所だったのですが、当日、人身事故による電車の大幅な遅延が発生しておりました。
試験開始時間までには到着できないことがほぼ確定していたので、運営のプロメトリック株式会社のカスタマーサービスに問い合わせたところ、会場にも電話して後ろ倒しにできないかを会場に問い合わせてほしいと言われました。その後、会場に問い合わせたのですが、その日はもう空きがなく、結局、その日は受験することができませんでした…（せっかく準備したのに激萎えでした…）

ですが、公共交通機関の遅延という理由なので、一旦キャンセルをしてもらい、後日に受験し直しという対応はしていただけるので、そこはご安心ください。
※当然ですが、遅延証明書は必ず受け取るようにしてください！

## さいごに
いかがでしたでしょうか？
Ruby Silverに合格するためには覚えなくてはいけないことがいくつかありますが、Rubyの入門としては良き教材ではないかと思います。
ご興味のある方は是非チャレンジしていただければと思います。
この記事がどなたかのお役に立てれば嬉しいです。

P.S. Ruby Goldも取得しているので、そちらの記事も書きたい…
AWS Amplify で Suspence の fallback が機能しない

## 概要
 AWS Amplify では 2024/10/18 現在 Suspence の fallback が機能しない
## 経緯
Next.js を Amplify にデプロイし、意図的にAPIルートのレスポンスを遅延させて ISR, SSR の検証を行っていたところ fallback が機能していないことに気づく
## Issues
https://github.com/aws-amplify/amplify-hosting/issues/3843
## 結論
キャッシュ戦略丁寧にやったり、クライアントでフェッチすればクリティカルではありませんが、解消をお待ちしております
DockerイメージPHP/ PHP-FPMについて振り返り

## はじめに
今までDockerを何気なく使用していたが、Dockerイメージについて一度簡単に振り返ろうと思い、振り返り勉強しました。
その中で何気なく使用していたPHP-FPMについて気になったので記します。

## Dockerイメージとは？
DockerイメージはDockerコンテナを動かすためのテンプレートファイルです。OS、アプリケーションだけでなく、アプリケーション実行に使われるコマンド、メタデータまで含まれています。
Dockerコンテナはテンプレートファイルに基に環境を作るので、Dockerイメージが必須です。

[カゴヤのサーバー研究室](https://www.kagoya.jp/howto/cloud/container/dockerimage/)

## PHP-FPMとは？
PHPにおけるFastCGI実装のことを指します。基本的にはWEBサーバー（NginxやApache）と連携して、PHPスクリプトを実行することが多いです。

[FastCGI Process Manager (FPM)](https://www.php.net/manual/ja/install.fpm.php)


## FastCGIとは？
一度起動したプログラムをしばらく待機させることで、プログラム起動・終了の手間がなくなり、プログラムの高速化やサーバーの負荷を減らすことが出来る仕組みのことを指します。


参考：[「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word12806.html)

## php:latest/ php:fpmの違い

php:latestは、PHPの公式Dockerイメージの中で、最新の安定版リリースが使われるバージョンを指します。CLI版PHPのため、バッチ処理やスクリプトの実行に使われます。

一方、php:fpmは、先ほど記載したように、WEBサーバー（NginxやApache）と連携してPHPスクリプトを実行に使われます。



特徴
PHP（CLI版）
PHP-FPM
実行方法
コマンドラインで直接実行される
FastCGI経由でWebサーバーと連携して実行
主な用途
スクリプト実行、タスクスケジューリング、バッチ処理
Webアプリケーション（NginxやApacheとの連携）
使用する場面
開発環境やCLIでのスクリプト実行
WebサーバーとPHPアプリの連携


## まとめ
結論として、PHPのCLI版は、バッチ処理やスクリプトの実行のみで、NginxやApacheなどのWebサーバーとの直接の連携は不要な場合に選択するイメージ。
PHP-FPMは、NginxやApacheなどのWebサーバーと連携を行い、リクエストの並行処理が必要な場合に選択するイメージだと分かりました。


NginxやApacheについて詳しく知りたい方はこちらの記事を参照するのをお勧めします。
[これだけは知っておきたいApacheとNginx](https://qiita.com/kinopy513/items/89fa79b4f378ca6d0b6d)

## 参考資料：

[カゴヤのサーバー研究室](https://www.kagoya.jp/howto/cloud/container/dockerimage/)
[FastCGI Process Manager (FPM)](https://www.php.net/manual/ja/install.fpm.php)
[「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word12806.html)
[これだけは知っておきたいApacheとNginx](https://qiita.com/kinopy513/items/89fa79b4f378ca6d0b6d)

## 採用拡大中！

アシストエンジニアリングでは一緒に働くフロントエンド、バックエンドのエンジニア仲間を大募集しています！
少しでも興味ある方は、カジュアル面談からでもぜひお気軽にお話ししましょう！
お問い合わせはこちらから↓
[https://official.assisteng.co.jp/contact/](https://official.assisteng.co.jp/contact/)
Dynare を MATLAB で動かす for Windows

# はじめに
こんにちは。@sahukitaです。
本記事ではDynareをインストールしてMATLAB上で動作させられる所まで皆さんをお連れしたいと思います。
尚、MATLABのインストールは既に終えているものとして扱います。ご了承ください。
# 1. Dynareのインストール
[Dynareのダウンロードページ](https://www.dynare.org/download/)に飛んで、インストーラをダウンロードしてください。
![スクリーンショット 2024-10-17 230714.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336729/3ba50a23-490f-4eb4-ad07-cb79e12128c5.png)
上の画像では「Dynare 6.2 (exe) (91 MB)」と書いてある所をクリックすればOKです(下の2つの所をクリックしても恐らくOK)。
ダウンロードが終わったらインストーラを起動し、指示に従ってインストールしましょう。
# 2. パスを通す
MATLABを起動し、ホームタブ中央やや右にある「パスの設定」をクリックしてください。
![スクリーンショット 2024-10-17 231743.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336729/b96dde68-8297-9804-7a66-b3221f78303a.png)
以下のような画面が出てくると思います。
![20241017_232026.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336729/922d7dd3-d135-4a0f-6365-424e16efd1ff.png)
左上の「フォルダーを追加」をクリックしてください。パスを通すフォルダーを選ぶ画面に遷移します。ここで「dynare」フォルダの中に格納されている「matlab」フォルダにパスを通したい訳です。
インストールの際、フォルダーの保存先に変更を加えていなければ
`C:`→`dynare`→`(バージョンを示す数字)`→`matlab`
の順にクリックすれば目当ての「matlab」フォルダに辿り着く筈です。
![20241017_233015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336729/c514062b-bb3b-9974-a4a0-e67d0b09ed41.png)
画面下部「フォルダー:」に「matlab」と表示されたらその下の「フォルダーの選択」をクリック。すると「パスの設定」の画面に戻りますので、画面下部の「保存」をクリックして設定を終わりましょう。
# 3. 使ってみる
本当にパスが通っているか、ファイルを実行して確かめてみましょう。
エクスプローラーを起動した後`C:`→`dynare`→`6.2`→`examples`と辿っていき、`example1.mod`ファイルをコピーしてください。ファイルを選択した状態で`Ctrl`と`C`を同時に押せばコピーできます。
次に、ワーキングディレクトリとする為のフォルダを作成し、そこにコピーした`example1.mod`ファイルを貼り付けてください。フォルダの作成場所はどこでもいいとは思うのですが、私は`ドキュメント`フォルダに「MATLAB」としてフォルダを作成しています。
ここまでの作業が完了しましたら、MATLABを起動して、カレントディレクトリを先ほど作成したフォルダにしてください。
カレントディレクトリを移動させるには2つ方法があると思いますが、今回はコマンドウィンドウにコマンドを打ち込む方法をご紹介します。
```
cd (移動したいフォルダの絶対パス)
```
このようなコマンドをMATLAB備え付けのコマンドウィンドウに打ち込んでエンターを押せばOKです。移動したいフォルダの絶対パスはそのフォルダを選択した状態で`Ctrl`と`Shift`と`C`を同時に押せばコピーできます。
カレントディレクトリを先ほど`example1.mod`ファイルを貼り付けたフォルダにしましたら、コマンドウィンドウに
```
dynare example1
```
と打ち込みエンターを押してください。パスが通せていればファイルに記述されたコードが実行され、計算結果やグラフが出力される筈です。
このように、Dynareのファイル(拡張子が`.mod`のファイル)は
1. カレントディレクトリをそのファイルがあるフォルダにする
2. コマンドウィンドウに`dynare (ファイル名)`と打ち込みエンターを押す

の2つの手順を踏むことで実行できます。
尚、2つ目の手順でファイル名を入力する必要がありますが、`.mod`は付けても付けずともいいです。

以上で説明を終わります。お疲れ様でした。
日本市場限定、人気IDaaS7選

日本市場で人気のあるIDaaS（Identity as a Service）サービスは、国内外の企業がセキュリティとアクセス管理のニーズに対応するために活用されています。特に、日本の企業文化や規制に合ったセキュリティ対策やサービス提供を重視しているプラットフォームが注目されています。以下、日本でよく利用されているIDaaSをいくつか紹介します。

### 1. **HENNGE One**

- **概要**: HENNGE Oneは、日本のIDaaS市場で非常に人気のある国内サービスです。特にMicrosoft 365やGoogle Workspaceなどのクラウドサービスのアクセス管理に強みを持ち、日本の企業文化に合ったセキュリティやサポートを提供しています。
- **特徴**:
  - シングルサインオン（SSO）や多要素認証（MFA）を提供し、主要なクラウドアプリケーションと連携。
  - ログ管理、コンプライアンス対応に強く、日本の法規制に対応したセキュリティ対策が充実。
  - 日本語サポートが充実しており、国内企業へのサポート体制も強固。

### 2. **IIJ IDゲートウェイ**

- **概要**: IIJ（インターネットイニシアティブ）が提供するIDaaSサービスで、日本国内の中堅・大手企業向けに信頼性の高いID管理サービスを提供しています。IIJのネットワークインフラを活用した堅牢なセキュリティが特徴です。
- **特徴**:
  - シングルサインオン（SSO）、多要素認証（MFA）を提供し、クラウドやオンプレミス環境に対応。
  - 日本企業向けのコンプライアンス対応やセキュリティ基準に適合。
  - 高いスケーラビリティと柔軟なカスタマイズが可能。

### 3. **CloudGate UNO**

- **概要**: CloudGate UNOは、エンタープライズ向けの日本製IDaaSサービスで、特にクラウドサービスやVPN、オンプレミスシステムへのセキュアなアクセス管理に強みを持っています。日本の企業がよく利用する業務アプリケーションとスムーズに連携します。
- **特徴**:
  - SSOや多要素認証（MFA）を提供し、クラウドアプリケーションと統合。
  - 日本国内の法規制やセキュリティ基準に対応し、データの安全性を確保。
  - 導入サポートや日本語による手厚いサポート体制を提供。

### 4. **Okta**

- **概要**: OktaはグローバルなIDaaSプロバイダで、日本市場でも広く利用されています。Oktaはエンタープライズ向けに多様なID管理機能を提供し、クラウドアプリケーションやオンプレミスシステムのSSOや認証管理をシームレスに統合します。
- **特徴**:
  - シングルサインオン（SSO）、多要素認証（MFA）、ライフサイクル管理などの包括的な機能を提供。
  - グローバルスタンダードのセキュリティプロトコルに対応し、日本企業においても導入実績が豊富。
  - 日本国内でもサポート拠点を展開し、英語・日本語対応のカスタマーサポートが充実。

### 5. **Azure Active Directory (Azure AD)**

- **概要**: MicrosoftのAzure Active Directoryは、特にMicrosoft 365を利用している日本企業において非常に広く使われているIDaaSです。Microsoft製品とのシームレスな統合により、企業のユーザー管理やセキュリティを強化します。
- **特徴**:
  - SSOやMFAを提供し、Microsoft 365やその他のクラウドサービスとの統合が容易。
  - グローバルなID管理基盤を提供し、日本市場向けの法規制にも柔軟に対応。
  - ハイブリッド環境におけるユーザー管理にも対応し、日本企業のニーズに合わせた柔軟な運用が可能。

### 6. **Google Workspace (旧 G Suite) Identity Platform**

- **概要**: Google Workspaceの一部として提供されるGoogle Identity Platformは、クラウド環境での認証管理を簡素化し、日本市場でも広く利用されています。特にGoogleサービスを中心に業務を行う企業にとっては最適な選択です。
- **特徴**:
  - Google Workspaceへのシングルサインオン（SSO）やMFAを提供。
  - 他のSaaSアプリケーションとの統合もスムーズで、Googleアカウントを使用した認証が可能。
  - セキュリティ強化のための条件付きアクセスやエンタープライズ向けの管理機能が充実。

### 7. **Auth0**

- **概要**: Auth0は、カスタマイズ性の高いIDaaSソリューションとして、日本市場でもエンタープライズやスタートアップ企業に人気があります。開発者向けの柔軟なAPIと幅広い認証プロトコルのサポートが特徴です。
- **特徴**:
  - SSO、MFA、ソーシャルログインなど、認証に関する幅広い機能を提供。
  - API連携による高度なカスタマイズが可能で、各種プラットフォームに対応。
  - 日本市場向けのローカライズやサポート体制も整備されており、迅速な導入が可能。

### まとめ

日本市場で人気のあるIDaaSサービスは、セキュリティやアクセス管理に対する企業ニーズに対応しつつ、国内の法規制や業務環境に適合しているものが多いです。特に国内サービスであるHENNGE OneやIIJ IDゲートウェイなどは、日本の企業文化や業務ニーズに合った機能やサポート体制を提供しているため、広く導入されています。また、OktaやAuth0のようなグローバル企業も、高いカスタマイズ性とセキュリティ基準で多くの日本企業に採用されています。
初心者プログラミングバイト三日目【初めて動いて感動】

It's three days after starting a programming-part-time job.

Today work was very enjoyable and interesting. Yesterday, I asked this site's programmer for advice. One of them told me that I should ask it to my boss.

I got it and decided to ask everything I cannot understand today.

But today, my boss taught me programming so carefully. Thanks to it, I can remodel the toy.

When I can drive the machine for the first time, I was so happy and felt that this is beautiful and interesting work.

Tommorow, I will ask my boss to lend me the devices to study and learn programming at home.

先週までは、うまくいくか心配だったけど、今日でやっと自信がついた！コードもちゃんと読めるようになったというか、コツを掴んだというか、(まあまだまだだろうけど笑)でもなんだかプログラミングが面白いと強く感じた日であった。

なんで英弱のくせに英語で書いたんだって？英語強くなりたいんだよぉ
研究室配属に英語見られる可能性は高いし、それに何より、英語喋れる、読めることってまじ重要というか、ほぼ全世界でコミュニケーションが取れる魔法の言葉みたいなもんじゃん？やっといて損ないよね？
ってことで中学生でも書けるような文章で書いてみたってわけよ。こういう技術は受験で鍛えられたな(元がカスいため偏差値が40から45になった程度)

てことで23:55、明日は一限からで間なく夜の8時までバイトやらあるので寝るぜ。おやすみ俺。そして明日も努力する俺、かっこいいぞ。