OmniAICreator/Qiita-1.07M huggingface dataset:
【自習】AWS Lambda

PMする上で必要になってきたのでおさらい

https://docs.aws.amazon.com/lambda/?icmpid=docs_homepage_featuredsvcs

## **AWS Lambdaとは？**

**サーバーレスのコンピューティングサービス**。何かのイベントがトリガーされるたびにコードを実行できる。従量課金制。

## **Lambdaの活用事例**

#### **1. ファイル処理**
Lambdaは、ファイルを操作するタスクを自動化するのに最適です。

##### **画像のリサイズ**
- **シナリオ**: ユーザーがS3に画像をアップロードすると、自動的にリサイズし、別のフォルダに保存。
- **ユースケース**: プロファイル画像の処理、ECサイトの商品画像の最適化。
- **例**:
  - トリガー: S3に画像がアップロードされる。
  - Lambdaの処理: Pillow（Pythonライブラリ）を使い、画像をリサイズ。

##### **ファイル形式の変換**
- **シナリオ**: PDFをJPEGに変換、動画のフォーマットを変換。
- **ユースケース**: ドキュメントビューアや動画配信サービス。

---

#### **2. APIのバックエンド**
Lambdaは、API Gatewayと連携することでバックエンドのロジックを実装できる。

##### **REST APIの構築**
- **シナリオ**: API Gatewayを通じて、Lambdaでデータを取得・更新する。
- **ユースケース**: ユーザー認証、データ管理、リアルタイム通信。
- **例**:
  - トリガー: API Gateway（HTTPリクエスト）。
  - Lambdaの処理: DynamoDBからデータを取得し、クライアントに返す。

##### **Webhookの受信**
- **シナリオ**: StripeやSlackなどのWebhookを処理。
- **ユースケース**: 支払い通知を処理し、DynamoDBに記録。
- **例**:
  - トリガー: API Gateway。
  - Lambdaの処理: Webhookデータを解析し、保存。

---

#### **3. バッチ処理・定期実行**

##### **データのクリーニング**
- **シナリオ**: DynamoDBの古いデータを定期的に削除。
- **ユースケース**: ログデータの管理、期限切れデータの削除。
- **例**:
  - トリガー: CloudWatchイベント（毎日深夜）。
  - Lambdaの処理: DynamoDBに対して削除処理を実行。

##### **スケジュールされたメール送信**
- **シナリオ**: 特定のスケジュールでメールを自動送信。
- **ユースケース**: リマインダー通知、ニュースレター。
- **例**:
  - トリガー: CloudWatchイベント。
  - Lambdaの処理: AWS SES（Simple Email Service）を利用してメールを送信。

---

#### **4. リアルタイムデータ処理**

##### **IoTデバイスデータの集計**
- **シナリオ**: IoTデバイスから送信されたデータをリアルタイムで処理し、保存。
- **ユースケース**: スマートホームデバイスやセンサーのデータ管理。
- **例**:
  - トリガー: AWS IoT Core。
  - Lambdaの処理: DynamoDBにデータを書き込み。

##### **ログ解析とアラート通知**
- **シナリオ**: CloudWatch Logsでリアルタイムにログを監視し、不正アクセスを検出して通知。
- **ユースケース**: トラフィック監視、不正検知。
- **例**:
  - トリガー: CloudWatch Logs。
  - Lambdaの処理: 条件を満たすログをSNS（Simple Notification Service）で通知。

---

#### **5. サーバーレスチャットボット**
- **シナリオ**: LexとLambdaを組み合わせて、カスタマーサポート用のチャットボットを構築。
- **ユースケース**: 自動問い合わせ対応、カスタマーサポートの効率化。
- **例**:
  - トリガー: Amazon Lex。
  - Lambdaの処理: 質問に応じたレスポンスを生成。

---

#### **6. 動的Webコンテンツの生成**
- **シナリオ**: API Gatewayと組み合わせて、ユーザーごとに動的コンテンツを生成。
- **ユースケース**: カスタマイズされたWebページの提供。
- **例**:
  - トリガー: API Gateway。
  - Lambdaの処理: DynamoDBからデータを取得し、HTMLを生成。

## 感想
こういうの好き。必須じゃなくてもつい導入して使ってみたくなりそう。
macからWindows11にリモートデスクトップ接続したらなぜかUSキーボードで認識された件

# この記事の概要
 - macからWindows11機にリモートデスクトップ接続したら、なぜかUSキーボードとして認識されているっぽかった
 - 原因はWindows11機起動時にキーボードを接続しておらず、その状態だとUSキーボードが接続された設定になるっぽい
 - Windows11機にキーボードを接続して再起動、その後macからWindows11機にリモートデスクトップ接続したら、日本語キーボードとして入力できた



# 内容
先日 M4 mac miniを導入ました。
これまではWindows11のデスクトップ機をつかっていて、写真編集やプログラミングなどに活用していました。

M4 mac mini快適ですね！！
Adobe関連のソフトは快適に、しかもWindows側と同じ操作で動きます。

組み込み関連の開発環境とか、Windows版のofficeにしかない機能を使うような作業以外はmacでできそうでした。

Windowdでしかできない作業は、macからリモートデスクトップ接続でやろうかな...とおもってました。

しかし！！！

なぜか、Windowsにリモートデスクトップ接続するとホスト側(Windows側)でUSキーボードとして認識されていました。なぜ！！Why Windows People!!!

こちらの記事を参考にレジストリを直そうと試みました。

https://qiita.com/hidecha/items/33624f6ae57d41f3cd86

https://bitto.jp/rdp-keyboard/



レジストリの値を弄ってみたのですが、ちゃんと日本語キーボードとしての設定はされているっぽい。


なんでやねーーーんと、一旦落ち着いて。
 **Windows11機側にはキーボードを接続していなかった** ことを思い出しました。

キーボードは、いままでWindows11機で使っていたものをmacに接続しているので、　Windows11機にはマウスもキーボードも接続していませんでした。

Windows11機にマウス・キーボード・ディスプレイを接続しローカルで文字入力してみると、やはりUSキーボードとして認識されていました。どうやら、Windows11起動時にキーボードを何も接続していないと、USキーボードが接続されてとして認識されるっぽいですね。


Windows11機にマウスとキーボードを接続したまま再起動、macからその後リモートデスクトップ接続したら、無事日本語キーボードとして認識してくれました。


めでたしめでたし。
nginxの脆弱な設定ミスとその対策

## これは何?

セキュリティに関連するnginxの設定ミスをまとめました。
[GitHub Repository](https://github.com/RyosukeDTomita/security-assessment-handson/tree/main/vulnerable_server_settings)

---

## 脆弱な設定とその対処方

[GitHub Repository](https://github.com/RyosukeDTomita/security-assessment-handson/tree/main/vulnerable_server_settings)
サンプルリポジトリを作成したのでこれをベースに説明します。

```shell
cd vulnerable_server_settings
docker compose up
```

### ディレクトリリスティング

[http://localhost:8080/list/](http://localhost:8080/list/)にアクセスするとディレクトリリスティングされているのがわかります。これにより，攻撃者はディレクトリ配下にあるファイルすべてのパスがわかってしまうため，万が一ユーザに公開する予定のないファイルが公開されている場合にアクセスされやすくなってしまいます。
(ディレクトリリスティングが無効な場合パスがわからない限りは当該ファイルを閲覧されない)

![directory_listing.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/94515a04-4c4b-e312-a7ec-63b54d7ede2a.png)

#### How to fix

nginx.confの以下の部分を削除します。

```nginx.conf
# FIXME: ディレクトリリスティング
autoindex on;
autoindex_exact_size off; # ファイルサイズを簡易表示
autoindex_localtime on;   # ファイルのタイムスタンプをローカルタイムで表示
```

### エラー画面からnginxのバージョンがわかる

[http://localhost:8080/hoge](http://localhost:8080/hoge)にアクセスするとversion情報が見えます。version情報がわかることで攻撃者はそのバージョンに対応した脆弱性を探しやすくなります。

#### How to fix

nginx.confに設定を追加します。

```nginx.conf
server_tokens off; # エラーページ，レスポンスのServerヘッダにnginxのバージョンを表示しない
```

### レスポンスヘッダからバージョン情報がわかる

ブラウザの開発者機能やcurl等でレスポンスを見ると`Server: openresty/1.21.4.1`が確認できます。

```shell
curl -v http://localhost:8080 2>&1 | grep '< '

< HTTP/1.1 200 OK
< Server: openresty/1.21.4.1
< Date: Sat, 21 Dec 2024 10:22:30 GMT
< Content-Type: text/html
< Content-Length: 601
< Last-Modified: Sat, 21 Dec 2024 10:14:57 GMT
< Connection: keep-alive
< ETag: "67669521-259"
< Accept-Ranges: bytes
```

#### How to fix

nginx.confに設定を追加します。

```nginx.conf
server_tokens off; # FIXME: エラーページ，レスポンスのServerヘッダにnginxのバージョンを表示しない
```

### robots.txtからパス構成がわかる。 (参考)

[http://localhost:8080/robots.txt](http://localhost:8080/robots.txt)にアクセスすることで管理者ページ`admin.html`のパスが存在することがわかります。これにより，攻撃者にヒントを与える可能性があります。

![robots.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/a1ef661d-93f4-29f4-8e9a-80496dd04ffd.png)

#### How to fix

[Google検索セントラル](https://developers.google.com/search/docs/crawling-indexing/block-indexing?hl=ja)

公開したくないファイルパスはrobots.txtの代わりに以下の設定をすることでクローラーからのアクセスを拒否できます。

- 代替策1: htmlにmeta情報を追加する

```html
<meta name="robots" content="noindex"> <!--robots.txtの代わり-->
```

- 代替策2: レスポンスに`X-Robots-Tag: noindex`を追加する

```
location = /admin.html {
    add_header X-Robots-Tag "noindex";
}
```

```shell
# check
curl -v http://localhost:8080/admin.html 2>&1 | grep '< '
< HTTP/1.1 200 OK
< Server: openresty/1.21.4.1
< Date: Sat, 21 Dec 2024 11:02:34 GMT
< Content-Type: text/html
< Content-Length: 93
< Last-Modified: Sat, 21 Dec 2024 10:52:36 GMT
< Connection: keep-alive
< ETag: "67669df4-5d"
< X-Robots-Tag: noindex
< Accept-Ranges: bytes
```
GitHub ActionsでHello Worldを動かしてみよう！初心者向け入門ガイド

# Hello World編（基礎編）

GitHub Actionsを初めて使う方向けの導入編です。
シンプルに動作確認をしたい場合に、是非ご活用ください。

# GitHub ActionsでCIを実現する方法

Java開発環境向けに、GitHub Actionsを用いてCI（継続的インテグレーション）を設定し、Gradleを利用したテストレポートの自動生成を行う手順を解説します。



テストを実行するとGradleレポートが自動作成される

# GitHub Actionsとは
開発している時にやりたいことを、GitHub上で自動化できるサービス。
あらかじめ定義した処理と条件の組み合わせ１（Workflow）を自動化するGitHub公開の機能である。
リポジトリに対するpushなどの処理をトリガーとして、専用のWorkflowに定義しておいた処理を自動で実行できる。

## 事前確認
- ActionsタブのWorkbenchに存在するか
- リポジトリに`.github`があるか

## 初期設定（事前確認の設定をしている場合はスルーしてください）

- Actionsタブの確認
リポジトリのActionタブを開き、Actionsが有効になっていることを確認する。
- .github/workflowsディレクトリの作成
Actionsが存在しない場合、.github/workflowsディレクトリを作成する。
1. codeタブの+を選択
2. Create new fileを選択
3. .github/workflows/hello.ymlとして保存
4. Commit changesを選択

![B79ADB51-F39F-4DC4-89B7-0F85DED95380_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920283/6dcb2e47-2bbd-e520-6ecd-48b0a5ab457d.jpeg)

github/workflowsを作成
![ワークフロー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920283/e91b5221-cd36-af08-94e2-82d20758afd4.jpeg)

そのままCommit changesを選択する

## ワークフロー構文
最初に`Hello World`だけを表示させる構文hello.ymlを実装する。
リポジトリにディレクトリを追加する。
作成後のディレクトリは以下の通り。
```
├── .github
	├── workflows
	　   ├── hello.yml
```


```
name: hello world

# トリガー
on: pull_request

# ジョブごとに実行環境が構築されて、ジョブ内に定義されたステップが実行される
jobs:
  build:
    name: greeting
    runs-on: ubuntu-latest　# 実行環境

    # コマンドやActionsなど実際の処理内容を記述する
    steps:
      - run: echo "Hello World"
```

## ymlファイルのワークフロー構文解説
- name：ワークフロー名（省略可能）
- on：トリガーの種類（例: push, pull_requestをトリガーに指定すると、push,pull_requestを作成した際にワークフローが実行される）
- branches：トリガー対象のブランチ
- jobs：ワークフロー内のジョブを定義
- runs-on：実行環境（例: ubuntu-latest：最新のUbuntu環境）
- steps：ジョブ内の各タスク（シェルコマンドやアクションを指定）


## 動作確認
変更をリポジトリにプッシュ。
ワークフロー構成ファイルをリポジトリにコミットし、GitHubにプッシュする。
GitHubリポジトリのActionsタブを押下する。
- 黄色：実行中
- 緑色：成功
黄色が緑色に変われば完了！

![B83E71C1-C290-4E50-A17B-BD4B43BB0CF6_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920283/fb3acd78-761d-dc41-e739-91bdd09de681.jpeg)


テストレポートを確認
ワークフローの実行が完了したら、アップロードされたテストレポートをActionsタブからダウンロードして確認できる。
1. 実行が成功したジョブをクリック
2. 右サイドバーからアップロードされたアーティファクトをクリックすると、テストレポートをダウンロードできる

次は実践編、[GitHub ActionsでJavaプロジェクトのCI/CDを回す](https://qiita.com/yochan__/items/afb3c9de789687681276)に是非トライしてみてください。
WAI-ARIAとは？＋よく見るaria属性メモ📝

## はじめに
業務で`aria-*`が色々出てきたので、メモしました。
調べるうちにWAI-ARIAってなんだっけ？となったのでそれもメモ:memo:

## そもそもWAI-ARIAとは？
- WAI-ARIA = Web Accessibility Initiative Accessible Rich Internet Applications
- W3Cによって定められた仕様で、HTML属性を定義している
- HTMLだけでは不足しているセマンティクス（意味）を補完できる
- ウェブページの構造や DOM に影響を与えない
- 必要な場合にのみ使う
    - 理想はHTMLだけ

### WAI-ARIAの3つの機能
#### ロール（Role）
- <b>要素が何か、何をするか</b>を定義する
- 主にランドマークロール
    - HTML構造要素の意味づけ
    - ウェブページの重要な場所や目的の場所に移動するのに役立つ
- `<nav>``<aside>`などのような役割として振る舞える
#### プロパティ（Property）
- <b>要素の性質</b>を定義する
    - 要素の追加の意味を示せる
- （例）`aria-required="true"`：値を入力しないとフォーム入力が有効にならない
- アプリでのアクションなどを通して変化しない

#### 状態（State）
- <b>要素の現在の状態</b>を定義する
- 状態はアクションなどによってプログラムから変更される

### WAI-ARIAはいつ使うべき？
#### 道しるべ/ランドマーク
HTML要素で指定できない役割を与えられる（`tab`など）


#### 動的なコンテンツの更新
コンテンツが更新された時にスクリーンリーダーのユーザーに対して伝えられる
エラーが発生した時に伝えられたり！

#### キーボードのアクセシビリティの向上
HTMLタグでtabキーでフォーカスが当てられないものがある場合などに`tabindex`対策できる

#### 意味論的ではないコントロールのアクセシビリティ
不規則なUIとか複雑な構成の時に、ユーザーに機能の手がかりを示す


## よく見るaria属性メモ
- `aria-invalid`属性：入力フォームの値が無効であることを示すために使用する
- `aria-labelledby`属性：適用される**要素のラベル付けを行う**要素（複数可）を識別する
    - `<label for="input">`は複数不可
- `aria-describedby`属性：その属性が設定されている**要素を説明する**要素（複数可）を特定する
    - 例：エラー文とinputの紐付けなど
- `aria-live`属性：要素が更新されることを示す
    - :memo:たくさんつけすぎると良くない
        - [うるさく](
https://shuaruta.github.io/ARIA-Barriers/2023/12/22/aria-live.html)なってしまうことがある
    - 属性値
        - off：変更を通知しない
        - polite：ユーザーの操作を妨げない範囲で変更を通知する
        - assertive：即座に変更を通知する
            - :memo: 突然ページが真っ白になって通知が表示されるようなもの
            - 強すぎて、ユーザーの操作に影響が出るので使わない





## 参考
https://developer.mozilla.org/ja/docs/Learn_web_development/Core/Accessibility/WAI-ARIA_basics

https://developer.mozilla.org/ja/docs/Web/Accessibility/ARIA


https://azukiazusa.dev/blog/form-accessibility/#%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AB%E3%81%AFaria-%E3%83%A9%E3%82%A4%E3%83%96%E3%83%AA%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%9F%E3%81%93%E3%81%A8%E3%82%92%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%81%AB%E9%80%9A%E7%9F%A5%E3%81%99%E3%82%8B

https://shuaruta.github.io/ARIA-Barriers/2023/12/22/aria-live.html

https://developer.mozilla.org/ja/docs/Web/Accessibility/ARIA/Attributes
iOS/iPadOSのファイルアプリでテキストファイルを作成する方法

# はじめに

iPhoneやiPadのアプリ上のテキストデータ、たとえばChatGPTで生成したPythonのコードをiPhoneやiPadでiCloud上のフォルダにテキストファイルとして保存する方法です。

きっかけはiOS/iPadOSで動作するUNIXターミナルのa-shellにChatGPTで生成したPythonのコードを実行させるためにファイルを作成にVimを使う方法もあるがiCoudのフォルダにファイルを作成できないか？と言うことです。

![ファイルアプリアイコン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72921/b5cc1f70-e431-f221-2894-616e39a36cca.jpeg)


# 手順

以下の手順でiCloud上のフォルダにテキストファイルを作成できます。

1. ファイルに保存したテキストを選択し、コピーする。
2. `ファイル`アプリを開く。
3. ファイルを保存したいフォルダを開く。
4. ファイルやフォルダのない場所をタップしたままにし、メニューを表示する。
5. `ペースト`を選択する。
6. `テキスト.txt`という名前のファイルが作成される。
7. ファイル名をタップしたままでメニューを表示する。
8. 適切な名前に変更する。

# ファイルアプリのメニューを開く

![ファイルのメニュー表示.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72921/1a913ebe-977e-83c3-4443-b5c927b03f3b.jpeg)

# ファイル名の変更

![ファイル名の変更.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72921/fddbf843-4a8c-282f-20ed-52b133b98bca.jpeg)

# 参考

## ファイルアプリで各拡張子の表示設定

`ファイル`アプリでファイルの拡張子を表示する方法を示す。

1. `iCloud Drive`で三つの点が丸で囲まれたボタンをタップする。
2. 表示されたメニューの一番下にある`表示オプション`をタップする。
3. `すべてのファイル名拡張子を表示`を`ON`に変更する。

### 表示オプション

![ファイルアプリのオプション.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72921/9a04a0aa-5a2d-67b9-5646-a449f5899366.jpeg)

### 拡張子を表示する

![拡張子を表示.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72921/25ba460e-d8e4-4fa5-cd04-b8b6ccb68256.jpeg)
Keycloak 26.0.5 にて、管理画面で realm を切り替えられない件

## TL;DR

先にほぼ結論ですが、まだ実装で解決されていないため、回避方法を活用するしかなさそうです。

- Keycloak 26.0.5 では、管理画面の realm 一覧の取得機能に不具合があるため、master realm の管理画面へログイン後、**一度 realm を切り替えるとその realm 以外に切り替えることができなくなります**
- master realm から切り替える時には問題がないため、`/admin/master/console/` の path へ戻って操作することで、回避することができます
- issue として上がっているものの、根本解決はまだ完了していないため、しばらくは回避策で凌ぐ運用をすることになりそうです
    - [Admin UI doesn't show realms when using login through identity provider #34356](https://github.com/keycloak/keycloak/issues/34356)

## 発生した事象の概要

Keycloak の管理画面では、realm を選択して特定のユーザープール向けの設定を行います。
realm とは、いわゆるマルチテナント型のサービスにおけるテナントに相当するような、 Keycloak 固有の概念です。

realm の切り替えは管理画面上から行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674141/48896713-2e5f-1fd1-a534-1639d4fa6852.png)

ある時、クライアントアプリケーションの開発担当者が A realm 向けの設定を行なった後、 B realm に切り替えようとした際、結果が返ってこなくなりました。

これが今回起きた問題のざっくりとした概要です。

↓ログイン後、master からは切り替えができる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674141/0aec2118-90b5-7335-e5d1-10b3fa3b8e01.png)


↓切り替え後は別の realm に切り替えられない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674141/32eb0e04-717d-73a5-628c-8f9693003b68.png)


### issue は報告され済み

概要は把握したため、keycloak の issue を調べると、すでに報告されていました :thumbsup: 
細かな背景はこれらのページに譲りますが、どうやら管理画面の UI 実装を変更した際に作り込まれてしまったようです。

- issue: 
    - [Admin UI doesn't show realms when using login through identity provider #34356
](https://github.com/keycloak/keycloak/issues/34356)
    - [Realm selector (dropdown) stuck on loading after upgrade to 26.0.6 #35277
](https://github.com/keycloak/keycloak/issues/35277)
        - 重複のためクローズされています
- PR: 
    - [use master realm to fetch realm names list #35128](https://github.com/keycloak/keycloak/pull/35128)
    - **しかし、これでは根本解決にならなかったようで、この PR 自体は revert されています**

## 回避方法がありそう

master realm でログインした後、一度は realm を切り替えられることがわかっています。

おそらく、master realm の設定画面だけ特殊で、ここで realm 一覧を取得することは可能になっているのだと思われます。

master realm の設定画面は URL path が明確に決まっています。
そのため、困ったらこの path を毎 _回ひ_ らくことで、目的の realm へ切り替えられないことを _回避_ できそうです :thumbsup: 

- path: `/admin/master/console/`
- 例： `https://example.com/admin/master/console/`

これらの事情のため、一旦は運用上の制限として周知して、根本対応は今後のリリースを待つという方向が良さそうです :smirk_cat: 

## 得られた学び（感想）

### バージョンアップ時の挙動確認

新しいバージョンに更新された直後ほどあからさまな不具合は出会いやすいので、気を張っておく必要があります。
アップデート後に稼働していることを確認して、安心してしまって完全に気を抜いていました。

ただ、いろんな機能を試す必要があるとして、こういったいくつかの条件があるケースを消し込むことは困難な気がします。
基本的な動作確認以上の内容についてはどうしても発生ベースで調べるしかない（腹を括るしかない）ということなのかもしれません。

### 不具合調査の優先順位

今回 issue にたどり着く前に、UI のソースを読んだり開発ツールでリクエストを眺めたりしてしまった
（403 が返ってきていることまではわかったものの・・・）

今回みたいな、条件はあるもののいろんなユースケースで再現可能な問題はすでに issue や PR が立っている可能性があります。
もちろん最終的に実装を読むことは確信を持つためには良い方法ですが、それよりも **誰かがすでに困っていないのか？** を探した方がコスパが良かったんだろうな、と思いました。

逆に言えば可能な限り最新バージョンを追っかけている都合、まだ発見されていない issue に出会うこともありそうです。

いざそういったケースでフィードバックをためらってしまうと、逆に同じ問題を踏む人たちにとって issue 報告を強いることになってしまいます。
恐れを減らすため、普段から issue や discussion へのアンテナを張っておくのが良さそうかな、と思いました :smirk_cat:
2年目のJava実務未経験者が黒本だけでJava Goldに合格した話

## あんた誰？
2年目のエンジニアです。
実務ではPHP、ローコードツールなどの経験はありますが、Javaは研修で扱ったきりとなります。

## 何で取ったの？
実は転職するのですが、そこでJavaをしてもらうだろうという話になりました。
Javaの復習に何をしようと考えた結果、Java Silverは未経験時代に取得しており、その時ラムダ式がちんぷんかんぷんでしたので、自分の成長を確認する意味でも、Java Goldに挑戦してみようと思いました。

## 勉強期間
約1ヶ月半です。
受験費用が高く絶対に1発で合格したかったので、黒本は5週しました。(1週間で1周のペース)
因みにアノテーションの章は全く手を付けておりません。(難解であったのと、ほとんど出題されないため。)
また、実機確認も全く行っておりません。
行った方が理解しやすいかと思いますので、時間がある方はされてもいいのかな、とは思います。

## 結論
**黒本のみで合格できます。**
因みに私は88％で合格しました。受験に際して様々な記事を見ましたが、この点数は中々高いのではないでしょうか？(自分で言うな)
私の場合ですが、
* 黒本
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621291/d7ccc800-c2e1-74e3-7b35-9dc81b564cc1.png)
* Java SE 8 Goldのサンプル問題
https://www.oracle.com/jp/education/certification/java-809a-3516143-ja.html
https://www.oracle.com/jp/education/certification/ocjp-gold-se8-3305267-ja.html
* 無料セミナー
https://www.oracle.com/jp/education/news-172121-ja.html

などを対策しましたが、実際の試験で問われたことはほぼほぼ黒本の模擬試験からでした。
まったく同じ問題は出題されなかった記憶がありますが、問われている知識は一緒(文言が多少異なる程度)ですので、黒本さえしっかりと対策していれば合格ラインに達すると思います。
世の中には紫本、白本といった参考書が他にもあるようですが、Java Goldに合格すること"だけ"を考えると、黒本で十分に対策できるかと思います。

## 勉強方法
### 1周目
問題を確認次第、すぐに解答を確認していました。
黒本は解答が参考書かよ！　と思うぐらい内容が充実しているので、
解答を読む→理解する→次の問題へ
という感じで進め、1つの章が終われば全て理解できているか確認するため、次は何も見ずにもう一度その章の問題演習し、間違えた問題だけ解答を確認していました。

また、この時点でEXCELなどにまとめている方を記事で多く拝見しましたが、私は2週目からまとめていました。
何故かといいますと、1周目は理解するのに圧倒的に時間がかかってしまうためです。
私の場合ですが、1周終わらせると、それが自信につながります。
ですのでなるべく早く1周目を終わらせるためにも、ここではまとめるといったことは行いませんでした。
ここは人によるかと思いますので、自身の性格に合った勉強方法で進めていってください。

### 2周目
2周目からは普通の問題集のように、問題を解いてからその解答を確認する、ということを行っておりました。
また、内容を結構忘れておりましたので、ここでEXCELにまとめておりました。似たようなメソッドが色々でてきますので、引数、処理の内容、戻り値などを一覧にまとめた方が記憶に定着しやすいかと思います。

また、どの問題が不正解だったか、というのも2周目からチェックしておりました。
周回を重ねてくると実感するかと思いますが、間違った問題は大体次も間違えます。
自分が理解できていない部分を把握するためにも、正答もEXCELで一緒に管理してしまいましょう。

### 3周目
2周目とまったく一緒です。
3周目終了時点で正答率が9割を超えていたため、ここで試験を予約しました。
ここで1つ失敗したことがあり、受験したかった受験会場が最短で3週間後にしか予約することができなかったということです。(本当は2週間後に受験したかった)
会場にはよりますが、すぐには受験できない、ということは念頭に置いておいた方がいいかと思います。
因みに試験日の前日までなら試験日の変更を5回まで行うことができます。一旦試験日を決定してしまい、もし間に合わなければ変更する、としてもいいかと思います。

### 4~5周目
正答率が100％になってしまい、「早く受験したい」としか思っていませんでした、、
上記の結論にも記載しましたが、Java SE 8 Goldのサンプル問題を解いたり、セミナーに参加する(丁度試験日の前日に開催)など、少し味変をしていました。

## 注意点
* 関数型インターフェースは暗記する
関数型インターフェースは暗記してしまわないと恐らく合格はできないと思います。数も多くはないので、しっかりと暗記しましょう。

* モジュール・システムは捨てない
モジュール・システムもJava未経験者にはとっかかりにくい分野だと思います。
アノテーションと同様、捨ててしまいたくなりますが、こちらは総仕上げ問題でもまあまあ出題されます。捨ててもギリギリ合格はできるかとは思いますが、答えを丸暗記でもよいので学習することをお勧めします。
 
* 黒本の誤記に注意
誤って初版を購入してしまったため、誤記をいくつか確認しました。
正誤表がありますので、誤って初版を購入してしまった方はチェックしましょう。

https://book.impress.co.jp/books/1121101020

* 焦らない
最初の数問はとにかく難解です。
「え、こんな問題が続くの、、」と思えば滅茶苦茶不安に感じるかと思いますが、10問を過ぎたところから、「あ、ここは黒本でやったところだ♪」と進研ゼミ状態に突入します。
時間も3時間と余裕がありますので、何なら最初の10問程度は適当に選択して、分かることろから回答するといった方が精神的にもいいのかなと思います。
因みに私は約1時間で問題を解き終わり、30分で見直ししました。黒本対策をしっかりとしていれば時間に追われることはないので、「最初の数問は難しい」ということを念頭に置いていきましょう。

* 身分証明書の持参
身分証明書が2つ必要です。
私は運転免許証と健康保険証を持参しました。
忘れるとせっかくの受験料をドブに捨てることになりますので、当日までにカバンに入れておきましょう。

https://www.pearsonvue.co.jp/Test-takers/Tutorial/Identification-1S.aspx

## 最後に
ここまで読んでいただいてありがとうございました！
Java Silverの時は捨ててしまったラムダ式でしたが、今回はスッと頭に入ってきて、自分の成長を感じることができました。
次の目標ですが、応用情報技術者試験に合格することです。この試験の前に受けてはいるのですが、午後試験が自己採点の結果、落ちているっぽいですので、次は午後をしっかりと対策をして試験に臨みたいと思います！
poetry self updateしたらぶっこわれた

# 初めに
Qiitaのアドベントカレンダーを書くためにコードを書いていたら突然poetryがどのコマンドも実行できなくなってしまって非常に困ったのですが、いっそこのことを記事にしようと開き直って記事にしてみました。
普通のことをしていたらコマンド実行ができないようになったのではまる人もいるかもしれませんので心当たりがあれば参考にしてください。

# いったい何をしてしまったのか
poetryのセルフアップデートをかけただけです！エラーの内容を見ても何がなにやらなのでもう一度やってみます

* 現時点では正しく動いていることを確認します
```bash
>poetry --version
Poetry (version 1.8.5)
```

* poetry self updateを実行します
```bash
>poetry self update
Updating Poetry version ...

Using version ^1.8.5 for poetry

Updating dependencies
Resolving dependencies... (6.8s)

Package operations: 0 installs, 22 updates, 0 removals

  - Updating certifi (2024.2.2 -> 2024.12.14)
  - Updating charset-normalizer (3.3.2 -> 3.4.0)
  - Updating idna (3.7 -> 3.10)
  - Updating more-itertools (10.2.0 -> 10.5.0)
  - Updating urllib3 (2.2.1 -> 2.2.3)
  - Updating zipp (3.19.1 -> 3.20.2)
  - Updating distlib (0.3.8 -> 0.3.9)
  - Updating filelock (3.14.0 -> 3.16.1)
  - Updating importlib-metadata (7.1.0 -> 8.5.0)
  - Updating importlib-resources (6.4.0 -> 6.4.5)
  - Updating msgpack (1.0.8 -> 1.1.0)
  - Updating packaging (24.0 -> 24.2)
  - Updating platformdirs (4.2.2 -> 4.3.6)
  - Updating pyproject-hooks (1.1.0 -> 1.2.0)
  - Updating pywin32-ctypes (0.2.2 -> 0.2.3)
  - Updating rapidfuzz (3.9.3 -> 3.9.7)
  - Updating tomli (2.0.1 -> 2.2.1)
  - Updating build (1.2.1 -> 1.2.2.post1)
  - Updating cachecontrol (0.14.0 -> 0.14.1)
  - Updating fastjsonschema (2.19.1 -> 2.21.1)
  - Updating tomlkit (0.12.5 -> 0.13.2)
  - Updating trove-classifiers (2024.5.22 -> 2024.10.21.16)

Writing lock file
```

* 壊れます
```
>poetry -version

  CleoRuntimeError

  The option "e" does not exist

  at C:\Python38\lib\site-packages\cleo\io\inputs\argv_input.py:187 in _parse_short_option_set
      183│         length = len(name)
      184│         for i in range(length):
      185│             shortcut = name[i]
      186│             if not self._definition.has_shortcut(shortcut):
    → 187│                 raise CleoRuntimeError(f'The option "{name[i]}" does not exist')
      188│
      189│             option = self._definition.option_for_shortcut(shortcut)
      190│             if option.accepts_value():
      191│                 self._add_long_option(


```
何事が起ったかさっぱり分からないこともさることながら普通にpoetry のコマンドにも存在しているpoetry self updateを打っただけなのにぶっこわれてしまうのでそれが原因であるとは最初は分からず何か別の原因を考えてしまいますが、原因は結局これでした…


# どうすれば直るのか
単刀直入に言うとあきらめて再インストールしましょう

```bash
>pip uninstall poetry
>pip install poetry
>poetry --version
Poetry (version 1.8.5)

```
# 終わりに
当たり前の作業をしたはずなのに壊れてしまうのは本気で何とかしてほしいなと思うもののなんやかんや便利なので使ってるpoetry。
出たばかりの頃のめんどくささから考えればかなり改善されてるので気長に修正されるのを待とうと思います。

# 参考
https://github.com/python-poetry/poetry/issues/553
protopediaでライバルを勝手に探そう

この記事は[ProtoPedia Advent Calendar 2024](https://qiita.com/advent-calendar/2024/protopedia) の 10日目の記事です。

# この記事の目的
ハッカソンによく参加する自分が、

「この人には敵わないなー」
「でも負けたくないなー」

と一方的に思っている人と作品を紹介します。

自分の目線を共有することで、誰かのインプットになれば幸いです。

## 自分の作品の傾向
ハッカソンは勉強会の延長なので、

「スポンサープロダクトはできる限り使う」
「無料講師がいてお得！」

方針で開発が進みます。
使ったことのあるプロダクトの場合は、前回と違う機能を試します。

本業がWebエンジニアのため
アプリケーションによりがちです。

電子工作はLチカまで。
IoTはM5StackでHTTP通信が限界です。

過去作品
「未来ゴミ箱」(決済系を担当)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535537/5489384a-4208-508b-6161-b5b91432aca3.png)
「箱庭DC」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535537/c37cf039-2731-c32a-5bbb-f02337efbcd8.png)
「頑張れエンジニア」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535537/3a24b086-8280-f0a4-530b-6803d6562fa3.png)

## どういう人が気になる？
そんなわけで、

- ハードに強い(特に基板設計してる人)
- いろんなプロダクト組み合わせてる
- 深くハックしてる

を勝手にライバル視しています。

protopediaにはすごい人・プロダクトがいっぱいいますが、ハッカソンでご一緒したことがある人の方が燃えます。

# 意識してる人
## TakSan さん
「そんなことできたらいいねー」
を実際に作っちゃう人

一体どこまで研鑽を積めばその領域に至れるのか。自分からすると魔法です。
プログラミング苦手な方がコードを見て「呪文だ」という感覚がわかりました、

いつか自分も基板設計したい

https://protopedia.net/prototype/3761

## sumihirokagawa　さん
ハード・ソフト両方できて、LINEを駆使すればこんなことまで実現できてしまう......
IoTを勉強しなくては、と思ったきっかけを与えてくれた人です。
プロダクトが実際に使われていて、PoCで終わらないのがすごい。

https://protopedia.net/prototype/1517

## p3ishnm2 さん
「未来ゴミ箱」でセンサ系を担当してくれたメンバー。

ラズパイを使ってそんなことが......!
プロダクトの完成度が高いので、
高専卒として負けてられない！という気分になります。

https://protopedia.net/prototype/3386

## ryotakobayashi さん
X(Twitter)見るといつもモノづくりしてる

設計、実装、展示、機能拡張が進み、
仕上がった作品が年末ヒーローズリーグにドーンと登場します。圧巻。

https://protopedia.net/prototype/692

## ushinohi_project さん
この完成度を？あの時間で？嘘でしょ！？
ハード・ソフト・デザイン・プレゼン、どれをとっても超一級
役割分担でエキスパートがチームを組むとこうなるのか、と毎回唸ります
ハッカソンを体現したチーム

https://protopedia.net/prototype/4714

# 振り返って
やっぱり、ハード・ソフト両方できることに憧れているんだろうなと。

家には買ったもの・頂いたもの含め結構なデバイスがあります。
- Raspberry Pi 3B+
- sakura.io シールド (ハッカソンで受領)
- Arduino
- Amazon IoT Enterprise Button
- obniz 2台 (ハッカソン賞品)
- micro:bit 2台 (ハッカソン賞品)
- MESH (ふるさと納税)
- M5StackCore2
- ATOM S3 * 2 (ハッカソン賞品)
- ATOM Mate for toio (ハッカソン賞品)
- Spresense メイン/拡張/カメラ (ハッカソンで受領)
- BambuLab A1 mini

また、会社の部活備品で色々買っていただきハッカソン使ってます
- Jetson Nano
- Raspberry Pi 4
- M5StackCore2 + モジュール
- toio
- MESH
- mocopi
- iPhone Pro 

モノはあるんですが、広く浅くの功罪ですね
どうしても「使う」側の人間で、「作る」側になれていません

一方で、自分の評価された作品は
「なんとなく説得力のあるテーマを据えて
　プロダクトをいっぱいゴチャらせながらもいい感じにまとめたやつ」
なので、「広く浅く使う」スタイルに振り切った方が良いのかも？

来年もいっぱい遊びたい
IPアドレスやNATについて

# IPアドレスについて

IPアドレスとはネットワーク上で`重複することのない一意の識別子(番号)`。
IPアドレスは、インターネットプロコルバージョン4の[IPv4アドレス](https://ja.wikipedia.org/wiki/IPv4#%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9)とバージョン6の[IPv6アドレス](https://ja.wikipedia.org/wiki/IPv6%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9)がある。
IPv4アドレスは32ビット(4バイト)で構成され、8ビット(1バイト)毎に10進数表記してドットで接続し、「0.0.0.0」～「255.255.255.255」の範囲の`ドット付き十進表記`にする。
以降、IPv4アドレスをIPアドレスとして説明する。

インターネットで使用されているIPアドレスが`パブリックIPアドレス`と呼ばれるのに対し、インターネットで使用されない自由に利用することができる`プライベートIPアドレス`と呼ばれるものもある。

## パブリックIPアドレスとプライベートIPアドレス

パブリックIPアドレスは重複すると通信に影響が出るため一意の識別子である必要がある。
そのためユーザーの好きに設定することはできず、ICANNという非営利法人が一意の識別子を世界規模で調整・管理している。

[ICANN の役割について](https://www.icann.org/resources/pages/what-2012-02-25-ja)はこちら

※日本のIPアドレスを直接的に管理しているのはJPNIC

プライベートIPアドレスは名前の通りプライベートなもののため、申請することなく以下の範囲から用途に応じて自由に設定することができる。

| クラス | プライベートIPアドレス範囲 | CIDR表記 |
| --- |----------------------| --- |
| a | 10.0.0.0～10.255.255.255 | 10.0.0.0/8 |
| b | 172.16.0.0～172.31.255.255 | 172.16.0.0/12 |
| c | 192.168.0.0～192.168.255.255 | 192.168.0.0/16 |

上からオフィスのネットワーク、下にいくにつれ家庭用ネットワーク等の規模として設定する。

ひとつのLAN（サブネット）に接続する機器数（ホスト数）に応じて、IPアドレスを`ネットワーク部`と`ホスト部`に分けて使用する。

ホスト数は自由に選べるが、４、８、１６…といった`２のn乗`にする必要がある。

ホスト数を256にした場合、IPアドレスの範囲は192.168.0.0～192.168.0.255のようになる。

256の場合、一番右の区切りが`ホスト部`といい、先頭から３つまでを`ネットワーク部`という。

### CIDR表記

192.168.0.0～192.168.0.255のような表現に対し、ネットワーク部のビット長(prefix)で示す表記方法がCIDR表記である。

上記の場合、ネットワーク部のビットは24ビットであるため、`192.168.0.0/24`のように表記を行うことが可能。

このような表記を行ったときはその範囲についてCIDRブロックと呼ぶ。

### サブネットマスク表記

192.168.0.0～192.168.0.255のような表現に対し、サブネットマスクは255.255.255.0であるため、`192.168.0.0/255.255.255.0`と表記を行うことが可能。

ただ、現在のネットワーク設計や表記方法ではCIDR表記が推奨されている。

## IPアドレス規格

現在主流のIPv4（32ビット）とその他にIPv6（128ビット）がある。

IPv4でIPアドレス数が約43億通り振り分けることができるが、近年のインターネット普及により枯渇する恐れが出たため、IPv6が登場した。

IPv6はほぼ無限にIPアドレスを振り分けることができる。

## NAT（Network Address Translation）

IPアドレスを別のIPアドレスに変換することのできる技術のこと。
プライベートIPアドレスをNATでネットワークアドレス変換することにより、パブリックIPアドレスになり、インターネットにアクセスすることが可能になる。

種類としてはいくつかあるが、特に使用される機会が多いのは`静的NAT（Static NAT）`と`動的NAT（Dynamic NAT）`である。

### 静的NAT（Static NAT：SNAT）

1対1 でプライベートIPアドレスとパブリックIPアドレスを固定的にマッピング。
プライベートネットワーク内の複数の機器が外部と通信したい場合、同じ数のパブリックIPアドレスが必要。

マッピングされたパブリックIPアドレスは安定した外部アクセスが可能。

### 動的NAT（Dynamic NAT：DNAT）

複数のプライベートIPアドレスを、利用可能なパブリックIPアドレスの範囲から動的に割り当てするため、接続するたびに異なるパブリックIPアドレスが割り当てられる可能性有。
利用可能なパブリックIPアドレスの範囲の数を使い切ると、以降のクライアントは接続できずアドレスが返却されるまで待たないといけない。

パブリックIPアドレスを効率的に利用することが可能。

## 参考

- [【基本から解説】NATの仕組みとは？](https://envader.plus/article/15)

- [NATとは？アドレス変換の仕組みや必要性、NAPTとの違いを解説](https://baremetal.jp/blog/2023/09/08/1298/#:~:text=NAT%E3%81%A8%E3%81%AF%E3%80%81%E3%80%8CNetwork%20Address,%E3%81%9F%E3%82%81%E3%81%AB%E5%88%A9%E7%94%A8%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82)
kotlin 文字列が整数か確認する方法

kotlin 文字列が整数か確認する方法です。


確認コード
```.kt

val sampleString1 = "11a" 
val sampleString2 = "11" 

println("${sampleString1.toIntOrNull()}") 
println("${sampleString2.toIntOrNull()}") 
```

結果
```
null
11
```
`toIntOrNull`という関数があり、Intに変換できるものであれば、変換してその値を返してくれます。
変換できないものはnullが返却されます。
オリジナルの地図デザインを作る！その１（夜景マップ）

:::note info
これは MIERUNE AdventCalendar 2024 の22日目の記事です。
昨日は @bordoray さんによる [QGISでのQDuckDBプラグイン活用ガイド
](https://qiita.com/bordoray/items/2130e5b9ac2300616d82) でした🦆
:::

![スクリーンショット 2024-12-21 1.13.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2705702/ada18573-6030-6f02-776e-6056d99c0271.png)

飛行機に乗る際、空いていたら必ず窓側を選ぶ私ですが、窓からの景色は美しいですよね。
特に夜間は、都市の灯りの織りなす光景に目を奪われ、この光の一点一点に誰かの人生があると思うと不思議な気分になります。
そんな景色を再現できたらと思い、夜の都市の灯りをテーマにしたオリジナル地図デザインを作ってみました。この記事ではその制作過程を紹介します。

▼ 夜景マップは下記から閲覧できます！

https://chizutodesign.github.io/map-styles/#night-view

## Maputnikとは

Maputnikは、オープンソースのスタイルエディタで、MapLibre等の地図デザインをカスタマイズできる便利なツールです。直感的なインターフェースを持ち、リアルタイムでプレビューしながらデザインを進めることができます。

例えば、地図の道路や水域の色を変更したり、ラベルのフォントやサイズを調整したりといった操作が可能です。難しいコーディングをせずに、視覚的な操作だけでスタイルを編集できるため、自分のような非エンジニアでも触りやすいと思います。

▼ 詳しくは、moriさんのこちらの記事等をご覧ください：

https://qiita.com/moritoru/items/e160f14e822ada67461c

## 制作方法
### 参考資料と検討
今回のテーマは「夜の都市の灯り」。このデザインを再現するために、以下の資料を参考にしました。

- 自分で撮影した飛行機内からの夜景の写真
- 国際宇宙ステーション（ISS）から撮影された都市の夜景画像

こうした実際の資料を参考に、地図上のどの要素で夜景を表現するべきかイメージを検討しました。

### Maputnikで地図デザイン作成

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2705702/7316e94f-2ba3-69be-99c7-cc560706c69a.jpeg">

こちらは筆者が飛行機内から撮影した写真です。意外と建物の灯りは目立たず、道路の街灯が線のように光っていることがわかるかと思います。

また、高速道路と住宅地の街路も光の色やパターンが異なって見えます。こういった道路における光り方の違いをMaptunikで再現します。

今回は道路を下記の４分類としました。

**❶高速道路**（motorway）
最も光の線が太く・明るく、オレンジ色が主体となっています。

**❷主要道路**（trunk, primary）
高速道路よりは細く、白色のやや太い実線とします。

**❸住宅地の街路**（secondary, tertiary, minor）
街灯の一つひとつが判別できる点線にします。

**❹歩道等**（footway, path, pedestrian, service, track等）
より小さく暗めの点線とします。

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2705702/ad573f9b-e6a4-e79a-b317-c2c20e282e8b.png">

このように全体の色と線の太さを設計した後、各ズームレベルに応じて見た目を調整し、完成です！
（なお、トンネル部分は非表示としています）

## Webサイトに公開

デザインした地図をWeb上で公開するため、MapLibre GL JSを使用しました。MapLibreは、オープンソースで地図表示ができるJavaScriptライブラリで、Maputnikで作成したスタイルJSONを簡単に読み込むことができます。

### 公開の手順
**1. スタイルJSONをエクスポート**
MaputnikからスタイルJSONをエクスポートし、styleフォルダに保存。

**2. MapLibreで表示**
HTMLファイル内でMapLibreを読み込み、スタイルJSONを指定して地図を表示。

**3. GitHub Pagesで公開**
GitHub Pagesを使ってWebサイトをホスティング。無料で手軽に公開できるのでおすすめです！

▼▼ 完成したデモは、下記からご覧ください！！▼▼

https://chizutodesign.github.io/map-styles/#night-view



## おわりに

今回、Maputnikを使ってオリジナルの地図デザインを作り、Webサイトで公開するまでのプロセスを紹介しました。
Illustrator等で地図をデザインするのももちろん楽しいですが、地図スタイルは一度作れば全世界に同じデザインが適用できるというのが大きな利点です。
ぜひ試してみてください！ ~~時間が溶けます~~

※今回の地図は、オープンデータであるOpenMapTiles, OpenStreetMapを利用しています。MapLibre, Maputnikも含めオープンソースに携わっている方々へ、ありがとうございます🙏
©OpenStreetMap contributors


### 参考文献
- [ISSから撮影された東京の夜景｜JAXA](https://jda.jaxa.jp/result.php?lang=j&id=0776e7de98944c15b7a6b61fe85e0199)
- [MapLibre GL JSのスタイルファイルを読む｜Qiita]( https://qiita.com/moritoru/items/e160f14e822ada67461c)


:::note info
明日は@dadadadatteさんによる記事です！お楽しみに！
:::
【PowerApps】ユーザー名を選択してメールアドレスを取得する【Office365グループコネクタ】

## 動画でも解説しました

<iframe width="560" height="400" src="https://www.youtube.com/embed/VN3y-BMbSWk?si=QEKJRkLhHEKGF7qj" 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>
Office予定表に予定を登録する際に、ユーザーを選択しメールアドレスを取得して、参加者に登録する手順を解説しています。

## Office365グループコネクタを接続
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/5ef85bee-a8d3-41bb-038d-84191cd184de.png)
左側のデータアイコン➤データの接続➤データソースの選択で「Office365グループ」コネクタを接続
Officeで検索すればすぐに見つかります。

## ドロップダウンで所属グループを選択
ドロップダウンを追加してItemsプロパティに
```javascript
Office365グループ.ListGroups().Value
```
と入れます。
項目（Itemsプロパティ）のValueに
```javascript
displayName
```
を選択すると、グループ名が表示されるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/38df5769-493a-bb0e-096c-c1c81c6f1d8c.png)

これでユーザーが所属するグループが選べるようになりました。

## コンボボックスでユーザーを選択

コンボボックスを配置して、Itemsプロパティに以下を設定します。
```javascript
Office365グループ.ListGroupMembers(DropdownGroup.Selected.id).value
```
「DropdownGroup」は先ほど配置したドロップダウンの名前です。
ドロップダウンで選んだグループのグループIDを設定することで、メンバーを取得できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/48d2bdae-7b2c-66e0-2281-e34e182b17e2.png)
これでコンボボックスからユーザーを選択できるようになりました。

## 選択したユーザーのメールアドレスを取得
予定表にユーザーを参加者として登録する場合は
メールアドレスで指定する必要があります。
「メールアドレス1;メールアドレス2;メールアドレス3」
と；区切りの文字列を作らなければならないので、Concat関数を用います。
```
Concat(Combobox.SelectedItems,mail,";")
```
このように記載することで、メールアドレスを取得し、；区切りの文字列にしてくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/3d52d62a-5802-3845-6a22-98d1bd11b4d3.png)
Unity WebGL における Javascript 非同期処理の実装パターン

WebGL ビルドで JavaScript と連携する際、非同期処理はパフォーマンスとユーザー体験の向上に不可欠です。しかし、従来の `UnityInstance.SendMessage` を用いた方法では、コールバック処理が煩雑になり、コードの見通しが悪くなるという問題がありました。このパターンでは、async/await と UniTask を活用することで、非同期処理を同期的に記述でき、コードの可読性と保守性を大幅に向上させています。

# 実装

1\. Javascript関数呼び出しクラス

```MyJsFunc.cs
public class MyJsFunc
{
    [DllImport("__Internal")]
    private static extern void _myJsFunc(string args, string callbackObject, string callbackMethod);

    private GameObject _gameObject;
    private CallbackAwaiter _awaiter;

    public MyJsFunc()
    {
        // unityInstance.SendMessage() で戻り値を受け取る
        // ユニークな名前の空 GameObject を作成する
        _gameObject = new GameObject(Guid.NewGuid().ToString());
        _awaiter = _gameObject.AddComponent<CallbackAwaiter>();
    }

    public async UniTask<string> Invoke(string args)
    {
        try
        {
            _myJsFunc(args, _gameObject.name, "Callback");
            return await _awaiter.Task;
        }
        finally
        {
            // 処理が終わったら GameObject を片付ける
            Destroy(_gameObject);
        }
    }
}
```

2\. コールバック待機コンポーネント

```CallbackAwaiter.cs
public class CallbackAwaiter : MonoBehaviour
{
    private UniTaskCompletionSource<string> _utcs = new();
    public UniTask<string> Task => _utcs.Task;

    void Awake()
    {
        // シーン遷移後もコールバックを受け取れるようにする
        DontDestroyOnLoad(gameObject);
    }

    // Javascript 側から UnityInstance.SendMessage で呼び出されるメソッド
    public void Callback(string str)
    {
        _utcs.TrySetResult(str);
    }
}
```

3\. C# から Javascript 関数を呼び出すためのインターフェース

```js:myfunc.jslib
mergeInto(LibraryManager.library, {
  _myJsFunc: function (args, callbackObject, callbackMethod) {
    args = UTF8ToString(args)
    callbackObject = UTF8ToString(callbackObject)
    callbackMethod = UTF8ToString(callbackMethod)
    // jslib は薄い Wrapper として利用している
    window.unityBridge.doSomething(args, callbackObject, callbackMethod)
  }
})
```

4\. 非同期処理の記述

```myfunc.ts
window.unityBridge = window.unityBridge || {}

window.unityBridge.doSomething = async (args: string, callbackObject: string, callbackMethod: string) => {
  // ...
  // 非同期で行う何らかの処理
  const result = await xxx()

  // 処理結果をコールバック
  window.unityInstance.SendMessage(callbackObject, callbackMethod, result)
}
```

5\.  ユーティリティクラス

```Javascript.cs
public static class Javascript
{
    public static UniTask<string> DoSomething(string args)
    {
        return new MyJsFunc().Invoke(args);
    }
}
```

JavaScript関数の呼び出しを簡略化するためのユーティリティクラス。

# Javascript の処理の呼び出し

```cs
var result = await Javascript.DoSomething(args);
```

Javascript 側の非同期処理を async/await パターンで呼び出せるようになりました。

## 補足
実際にはエラーハンドリングをちゃんと行ったり、`CallbackAwaiter.cs` にキャンセルトークン持たせたり、コールバックが返ってこない場合のタイムアウト処理を持たせたり、引数や戻り値に複雑なデータ型をやり取りするために JSON を使用したり、`MyJsFunc` クラスでは複数の Javascript の関数を呼び出せるように Template Method パターンで実装を分割したりしているが、核心部分はこんな感じ。
【自習】AWS RDS

PMする上で必要になってきたのでおさらい

https://docs.aws.amazon.com/rds/?icmpid=docs_homepage_featuredsvcs

## AWS RDSとは？
**リレーショナルデータベースの管理を簡略化するためのマネージドサービス**。データベースのセットアップ、運用、スケールを簡単に行えるため、アプリケーションの開発に集中できる。

## **RDSの主な特徴**

1. **マネージドサービス**
   - データベースのインフラ管理（バックアップ、パッチ適用、障害対応）をAWSが代行。
   - 管理負担が少ない。

2. **対応するデータベースエンジン**
   - Amazon Aurora（MySQL/PostgreSQL互換）
   - MySQL
   - PostgreSQL
   - MariaDB
   - Oracle
   - Microsoft SQL Server

3. **スケーラビリティ**
   - 必要に応じてストレージやインスタンスの性能をスケールアップ可能。

4. **高可用性**
   - マルチAZ配置で障害時にフェイルオーバーを自動実行。
   - 自動バックアップやリカバリ機能を標準で提供。

5. **セキュリティ**
   - データ暗号化（KMSを使用）。
   - IAMやVPCでアクセス管理が可能。

## **RDSを利用するメリット**
#### **1. 運用の効率化**
- 自動バックアップ、パッチ適用、モニタリング機能で運用コストを削減。
- フェイルオーバーやリードレプリカでダウンタイムを最小化。

#### **2. スケーラビリティ**
- 簡単にリソースをスケールアップ/ダウン。
- 大規模なアプリケーションでも対応可能。

#### **3. セキュリティと信頼性**
- AWSのセキュリティ基準に準拠し、信頼性の高いデータ保護。

#### **4. 時間の節約**
- 短時間でデータベースをセットアップ可能。
- 管理作業に時間を取られることがない。

## **RDSを使わない場合：EC2にMySQLを構築する選択肢**

#### **EC2上でMySQLを運用するメリット**
1. **完全なカスタマイズ**
   - MySQLの設定やバージョンを自由に選択可能。
   - 特殊なプラグインやカスタム構成に対応。

2. **コストの最適化**
   - 小規模なプロジェクトではRDSよりも低コスト。

3. **多用途**
   - EC2内で他のアプリケーションやツールを併用可能。

#### **EC2上でMySQLを運用するデメリット**
1. **運用負担が大きい**
   - 自動バックアップ、セキュリティアップデート、障害対応を手動で行う必要がある。

2. **可用性の低さ**
   - マルチAZ構成やフェイルオーバーを自分で実装しなければならない。

3. **スケーラビリティの限界**
   - 大量のトラフィックやデータ増加への対応が難しい。

## **RDSとEC2上のMySQLの比較**

| **項目**            | **AWS RDS**                         | **EC2にMySQLをインストール**         |
|---------------------|-------------------------------------|-------------------------------------|
| **運用負担**         | 低い（AWSが管理）                   | 高い（バックアップや更新を手動）     |
| **スケーラビリティ**   | 簡単にスケールアップ可能             | 限られる                            |
| **可用性**           | 高い（マルチAZ配置対応）             | 低い（単一インスタンスに依存）       |
| **コスト**           | 高め（自動化機能を含む）             | 低め（小規模プロジェクト向け）       |
| **カスタマイズ性**    | 制限あり（AWS標準に準拠）            | 高い（完全自由）                    |

## **RDSを使うべきケース**
1. **中〜大規模なアプリケーション**
   - 高トラフィックのWebアプリやSaaSサービス。
   - フェイルオーバーや高可用性が必要な環境。

2. **運用負担を軽減したい**
   - 管理リソースを削減して、開発や他のタスクに集中したい場合。

3. **自動化されたバックアップとスケーラビリティが必要**
   - 定期的なバックアップや将来的な拡張を考慮する場合。

## **EC2にMySQLをインストールすべきケース**
1. **カスタマイズが必要**
   - 特殊なMySQL設定やプラグインを使いたい場合。

2. **小規模なアプリケーション**
   - 少量のデータや低トラフィックを扱うシンプルな環境。

3. **コストを抑えたい**
   - 自動化や高可用性が不要で、管理負担を許容できる場合。


## 感想
EC2にDB入れる運用はエンジニア工数を考えたら費用が高くなるらしいが、実際はどうなんだろう。
Windows上のwslでdocker compose upを実行するとThe command 'docker' could not be found in this WSL 2 distroと出る[docker desktopをWSLと統合する方法]

windowsのwsl上で`docker compose up`を実行するとこのような結果になりませんか？
```
windowsusername:~/test$ docker compose up

The command 'docker' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.

For details about using Docker Desktop with WSL 2, visit:

https://docs.docker.com/go/wsl2/
```
これはたいてい2パターンの原因が考えられます．本記事ではwindows上にインストールされたdocker desktopをWSLと統合する方法について紹介します．

# docker compose upが実行できない理由
- Windows側でDocker Desktopが起動していない
- **Docker Desktopの設定でWSL integrationが有効化されていない**
- 以前のDocker EngineやCLIのインストールとの競合の可能性
- WSLのバージョンが1.1.3.0未満の可能性
- Docker Desktopが正しくインストールされていない可能性

と色々原因は考えられるが今回は太字の部分のみ解説します．

> そのほかはDocker Desktopを再起動したり，バージョンアップや再インストールすればいいので...

# Docker Desktopの設定でWSL integrationが有効化されていない
結論GUI操作のみでいけます．数クリックするのみです．
![スクリーンショット 2024-12-20 16.29.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/3c9c7f5d-cef5-45f5-c40b-86b1d122f149.png)
右上の歯車(setting)→Resources→ WSL Integretion →対象のWSLディストリビューションのトグルボタンをOnにする → Docker Desktopを再起動

これでこのように立ち上がります．よかったですね〜
![スクリーンショット 2024-12-21 12.50.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/57e0e115-0f05-ab9d-bb75-74b9f1e949d5.png)


それではQiitaアドカレ.24企画の今日のクリスマスツリーです．

> 詳しくは[こちら](https://qiita.com/JavaLangRuntimeException/items/1f4a6febf957f522ba45)の記事から

![Wondershare Uniconverter 15_000001.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/45903393-5a9b-52f3-f21f-d182780681c0.gif)
N体問題

# 初めに
林檎も月も地球に向けて落ちてきている．

# Methods
空間上に$N$個だけの質点を散撒くと，
```math
\begin{align}
    \frac{d \boldsymbol{v}_i}{dt}
    &= \frac{\boldsymbol{f}_i}{m_i}
    \quad (i = 1, ..., N)
\end{align}
```
質点$i$に作用する力$\boldsymbol{f}_i$は質点$j$から受ける引力
```math
\begin{align}
    \boldsymbol{f}_i
    &= \sum_{j \neq i} G \frac{m_i m_j}{\| \boldsymbol{r}_{ij} \|^2}
        \frac{\boldsymbol{r}_{ij}}{\| \boldsymbol{r}_{ij} \|}
\end{align}
```
であるから，
```math
\begin{align}
    \frac{d \boldsymbol{v}_i}{d t}
    &= \sum_{j \neq i} G \frac{m_j}{\| \boldsymbol{r}_{ij} \|^2}
        \frac{\boldsymbol{r}_{ij}}{\| \boldsymbol{r}_{ij} \|}
\end{align}
```
を適当に時間積分する．

# Results
## 2体問題
地球と月の運動を，以下のパラメータを使って解いた．

* 地球の質量は$5.97 \times 10^{24} \ \[ \text{kg} \]$
* 月の質量は$7.35 \times 10^{22} \ \[ \text{kg} \]$
* 両者の距離は$3.84 \times 10^{8} \ \[ \text{m} \]$
* 地球の初期条件は静止状態
* 月の初期条件には$(0, 1023, 0)^{\top} \ \[ \text{m/s} \]$の速度を与える
* シミュレーション時間は1年間
* 時間増分は1時間

非シンプレクティック，シンプレクティックを比較する（cf. [symplectic integrator](https://qiita.com/ShotaDeguchi/private/dd6d1a9a3f25b3a7eb29)）．

|  | $\text{Trajectory}$ | $\text{Energy}$ | $\text{Conservation}$ |
|:-:|:-:|:-:|:-:|
| $\text{Expl Euler}$ | ![trajectory.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/b36f3257-0889-d932-99fb-d5c88c0bb758.png) | ![energy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/6543828b-521e-e606-29c5-78c3e7ead752.png) | ![energy_change.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/c8417d5e-33f7-9e6e-43e6-ac613c42c012.png) |
| $\text{Symp Euler}$ | ![trajectory.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/677de150-6ff9-a4b3-ae2a-70ddaf9ec326.png) | ![energy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/5e71614b-bd4d-5182-ac37-037477701bf5.png) | ![energy_change.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/c443ea5b-ef6a-aa77-dee7-74f81c88f5e7.png) |

## 3体問題
極めて簡略化し，$G = 1$．質量，初期位置，初期速度を乱数で与えた．

| 1 | 2 | 3 | 4 |
|:-:|:-:|:-:|:-:|
| ![trajectory.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/b62bf942-a4f3-d9ed-ee8c-9174b5e3c5c2.png) | ![trajectory.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/7f7e7441-b0df-f01b-36ea-3144356f7ecf.png) | ![trajectory.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/8873f0d5-9220-abb0-45dd-2eb04c82fc65.png) | ![trajectory.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/08c1a327-5ebc-8c1d-bf70-254536529d2e.png) |

# 終わりに
無次元化とか，各惑星の質量とか，もう少し情報を整理して，太陽系の惑星たちをまるっとシミュレートしてみたい．

ところで，地球が生まれるなぞ，奇跡では？
アフターNoOps、そしてその先へ

# はじめに

2024年12月20日、某社の社内イベントでNoOpsを提唱した一人、<A HREF="https://x.com/yokawasa">川崎 庸市</A>さんに講演していただきました。

<A HREF="https://book.mynavi.jp/ec/products/detail/id=143648">プログラマーのためのVisual Studio Codeの教科書</A>の著者の一人で、当日サイン✍️をいただきました。

https://x.com/Zakkiea/status/1869927689592942988

前回(2021年1月13日)の<A HREF="https://sb-deeptech.connpass.com/event/195540/">イベント</A>ではNoOpsを提唱したもう一人、<A HREF="https://x.com/okahiromasa">岡 大勝</A>さんに講演していただき、NoOpsを実践中の「ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来」の話をしていただきました。

<A HREF="https://gihyo.jp/magazine/SD">Software Design</A>で2024年5月〜12月まで「レガシーシステムの攻略プロセス」というタイトルで、ZOZOTOWNリプレイスの連載が掲載されていました。

毎月開催している<A HREF="https://softwaredesign.connpass.com/">輪読＆座談会</A>でも定番の話題でした。

今回はNoOpsを実践したその先、「走り続けるための技術(仮)」について語っていただきました。

![スクリーンショット 2024-12-21 18.33.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/5b49f16f-d081-872a-3acf-0596bb24c137.png)

# NoOpsとは

NoOpsは「No Uncomfortable Ops」の略称で、システム運用の効率化と自動化を目指す取り組みです。システム運用における「うれしくない」作業や手動の介入を最小限に抑えることを目的としています。

# 現在地とその先の課題

川崎氏自身の過去のNoOps活動とその経験から得た、システム開発・運用における持続可能な方法論について語られました。当初はオペレーションの自動化・最適化による「うれしくない作業の削減」と捉えていたものの、実践を通してビジネス視点やコスト、組織の継続性の重要性に気づき、その考え方を改めた経緯が説明されました。
講演では、技術的なアプローチに加え、ドキュメント作成の重要性、不要な機能開発の抑制、そして80点主義による持続的な改善という3つのキーポイントが強調され、長期的なシステム運用における成功のための新たな視点を提示しています。

# 技術中心から組織・文化へ

NoOps活動を継続する上で、3つのキーワードが示されました。

![スクリーンショット 2024-12-21 18.36.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/7c8a2340-6cd3-9477-4702-5b3a582e0d8f.png)

ドキュメントを最新の状態に維持し続けるのは大変です。
また、システムやプラットフォームを更新する時に、過去の意思決定の記録(ADR = Architechture Decision Record)が残されていることが重要とのことでした。

![スクリーンショット 2024-12-21 18.38.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/ad1ecce1-240f-83ca-9e65-553d7de8db85.png)

また、ついつい良かれと思って不必要なオプションや機能を実装しがちですが、必要になるまで作らないガマン(YAGNI = You ain't gonna need it)の原則について教えていただきました。

![スクリーンショット 2024-12-21 18.42.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/b23130a4-5a84-074c-df89-6533106ac856.png)

そして、80点(≠合格点)を目指す合理性についても示唆に富んでいます。自動化100%を目指す目標(現在地は90%)は改めるべきだと決意しました。(100%に近づくにつれて難易度が高くなったり、実行される機会が滅多に発生しない)

![スクリーンショット 2024-12-21 18.44.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/19aca190-b7f0-688b-d53f-326bd9b86af0.png)


# さいごに

イベント当日は講演後に質疑応答が行われ、ここでは書けない話題も多かったのですが、講演の本編部分については一般公開の許可をいただきましたので、みなさまのNoOps活動のお役に立てば幸いです！

https://youtu.be/meVt4Ql76R0
macos three finger drag

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169726/2de6cceb-3f31-4ecb-288d-e33a239f269a.png)

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169726/3538b3bf-62aa-578e-82e7-342d1a4ba2af.png)

---

https://support.apple.com/en-ca/102341
転職活動の振り返り～これをやっておけば良かった、やって良かった事～

# 1.はじめに

下記の記事で、予想以上の反応を頂けたこともあって再度振り返ってみた。

https://qiita.com/xmorning777/items/0738f2f58f5d40220452

前回の記事では、準備万端で取り組んでみました的な事を書いたけど、今回の結果はかなり運が良かったかもしれないのだ。
前回の記事では、面接で意識した事が中心だったので、書き足りないことを投稿しようと思う。

転職活動での「面接前の準備段階」で取り組んで良かった事と、取り組めば良かった事を参考のために書こうと思う。

__対象者:筆者同様面接が苦手な人。__

# 2.取り組めば良かった事
以下はもっと早く取り組めば良かったと少し後悔をしている事。

## 2-1.早めの転職サイトへの登録

ずいぶんアバウトだが、__早め__ とは登録のタイミングはいつか？
⇒ __`『職場での仕事で違和感を感じたタイミング』`__ だと個人的には思う。
仕事上での違和感は侮れない。
転職したての頃は、「二度と転職活動はしたくない。」、「会社の規模も違うから違和感があるのは当たり前」 と無理やり納得させていた。
`業務内容の難しさや違いは許容範囲だが、仕事に影響してくる違和感は無視してはならない。`

:::note warn
早く動かなくてはならない最大の理由

__それは『書類通過率、面接通過率、スカウトメール頂き率』は年齢と反比例するからです!!!__
(1社目を辞めた後：スカウトメール祭り＆ 書類通過率 50%
今回の転職時：スカウトメール微妙 & 書類通過率 10%)
※今回は、応募案件を絞ったので難易度も高いのもあったかもしれない。それでも年齢は重要だ。
:::


__登録が終わったら転職サイトを漁って、面白そうな案件を見つけて、企業のホームページなどを調べてみましょう。__

:::note info
いい案件に出会えた時

__ワニのように喰いついて(ティラノサウルスのような強気で職務経歴書と志望動機も磨いて)__、離さないように努力しましょう。
:::

:::note warn
ただし、__「コロナなどのパンデミック流行時は、ブラック企業の募集が盛んになる」__ ので、応募には細心の注意を払う事が必要だ。
:::

## 2-2.転職活動用のQiita作成

これは、実業務で関わることがない言語への理解力の証明に使うものと考えている。
しかも１つの言語に対して、1記事あればいいのではないかと考えている。
以下の事を考えるといいかも知れない。

+ 面接官は、現役のエンジニアが参加していることも多く、業務の合間に参加していることが多いため、膨大な資料に目を通す時間がない。
+ 1記事だけの場合は、学んだことを活かすために、基礎的な文法を含んだオリジナルの題材で作成してみる。（時間がかかるので、転職に関わらずやっておくといいかも）
+ いいね数は気にしない。
+ 当然テーマは、ギャンブル以外の真面目系で。


# 3.取り組んで良かった事

応募前に準備していて良かった事について書こうと思う。

## 3-1.在職時に転職活動を行う

言うまでもなく理由は __`『お金の余裕は心の余裕』`__

## 3-2.応募企業の条件を厳選

これには、エージェント経由だと、比較できない以外に以下の理由があった。

+ 何社も面接を受けると、本命の企業の面接で疲れが出て本領発揮出来なかった過去があった。
その結果、行きたくない企業の面接が残って、結局面接辞退した事もある。

+ 面接苦手あるあるかもしれないが、希望していない会社の面接を面接練習として捉えられるほどの __【余裕も度胸も上手い志望動機も見つからない】__ 状態だった。

:::note warn
__「本命に振られたら、君にしとくよ。」(これ、言えます？)__ 

上記内容を上手く企業に伝えられる __スキルイケメン__ や __スキル美人__ でない限り、初めから応募する企業を厳選することを勧めたい。
:::

## 3-3.paizaのスキルチェック

プログラミング言語は、実務から習得することが一般的だ。
職務経歴書でも「〇〇システム開発（使用言語：xx）」などと記載すると思う。

~~今の職場を一刻も早く去りたいから~~、__「慣れ親しんだ言語ではなく、未経験の言語の開発に挑戦したい」__ という事を志望動機の一つに挙げることも多いと思う。
ただ当然 __「〇〇（未経験の）言語でのシステム開発に挑戦したいです。やったことないけど＾v＾」__ では採用はされない。

~~職務経歴書に「架空のプロジェクトに従事（言語：未経験の言語）」と記載すること自体は自由だが、バレるリスクを考えると怖い。~~

実績を作ることは出来ないが、「基礎知識はあるのでできます」と言える状態にはしたい。

### `そんな不安に答えるように現れた神、それはpaiza!!!`
私は決してpaizaの回し者ではない。

:::note
### paizaの利点
+ __足し算や簡単な単語を表示する「Dランク」で、何度か100点を取ると自信がつく所。__
+ 少しずつランクを上げると、スカウト企業の数や応募できる企業も増えてくる。
+ __ランクを上げるために、自然と勉強をする癖がつく。__
:::
転職サイトで、自分の希望の案件が見つからないときなど、このサイトでランクを上げて準備をしていた。
__`希望企業と面接するその日に、少し自信をつけて挑みましょう。`__

※paizaではPHPガー、ニシキヘビがー、紅玉ガーとランク上げを狙っていたが、全くの未経験のC#を激推しする企業に入社する事になった。それでも勉強した事は無駄にならない。


# 4.最後に

この記事が、転職をこれから始める誰かにとって、「クリスマスプレゼント」になりますように。
郵便番号検索APIで大学の住所調べてみた

# はじめに
こんにちは!今回はAPIについて取り上げます!気軽に読んでいただけると嬉しいです!
# 今回使用するツールの説明
・Google chrome
・Talend API Tester - Free Edition
![スクリーンショット 2024-12-21 13.44.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947975/81a36c71-f87f-d9bf-34c4-f94541f4dbab.png)
クロームをダウンロードした後に「Talend API Tester」と検索し、拡張機能をインストールしてください。
![スクリーンショット 2024-12-21 13.51.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947975/69f1a119-d249-3f8c-e305-ef5423db8134.png)
これで準備は完了です!
# 検索してみよう
![スクリーンショット 2024-12-21 14.28.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947975/604901af-b53e-927a-e638-3a19a7bf91cc.png)

「https://」の後に「zipcloud.ibsnet.co.jp/api/search?zipcode=」を入力します!
「=」の後は好きな郵便番号を入力してください!(今回は情報学部キャンパスの郵便番号)
数字を入力した後はSendボタンをクリック!
![スクリーンショット 2024-12-21 14.32.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947975/140ebbae-aa06-77a6-496c-71c56ba250ee.png)
このように住所が表示されます!
# 最後に
APIは思っているよりも簡単で便利なツールです!記事を見てくれた皆さんには苦手意識を持つことなくどんどんAPIについて学んでいってほしいです!
手軽に始めるTailscale VPN: セットアップから活用例まで

# TailscaleのVPNも便利やぞ

VPN（Virtual Private Network）といえば、リモートワークやセキュリティ向上のために利用されることが多いですが、構築や運用の手間がネックになることもあります。そんな中で注目されているのが、**Tailscale** というVPNソリューションです。この記事では、Tailscaleの特徴や導入手順、活用例を紹介します。

---

## Tailscaleとは？

Tailscaleは、**WireGuard** プロトコルを基盤としたVPNソリューションです。以下の特徴があります：

- **簡単セットアップ**：クラウドベースでノード間の接続を自動管理。
- **高いセキュリティ**：WireGuardにより暗号化が高速かつ強力。
- **クロスプラットフォーム対応**：Windows、macOS、Linux、iOS、Androidに対応。
- **フリーから始められる**：個人利用であれば無料プランも利用可能。

---

## Tailscaleのメリット

### 1. 手間いらずの構築
従来のVPNはサーバーの設定やネットワークの調整が必要ですが、Tailscaleではそれが不要です。ユーザーはアプリをインストールしてログインするだけで接続できます。

### 2. 管理がシンプル
Tailscaleでは、各デバイスを1つのネットワーク（"tailnet" と呼ばれます）として管理します。これにより、接続デバイスの可視化やアクセス制御が容易です。

### 3. スケーラビリティ
チームでの利用も簡単で、追加デバイスやユーザーの設定が直感的に行えます。

---

## 導入手順

以下は、Tailscaleを使い始めるための基本的な手順です：

### 1. アカウント作成
公式サイト（[Tailscale](https://tailscale.com/)）にアクセスし、GoogleアカウントやGitHubアカウントでサインアップします。

### 2. クライアントのインストール
使用するデバイスに対応したTailscaleクライアントをインストールします。

- Windows: [公式ダウンロードリンク](https://tailscale.com/download/)
- macOS: Homebrewでもインストール可能。
- Linux: `curl -fsSL https://tailscale.com/install.sh | sh`

### 3. ログイン
インストール後、アプリを起動してログインします。これにより、そのデバイスがtailnetに追加されます。

### 4. 接続確認
他のデバイスも同様に設定し、接続可能な状態であることを確認します。

---

## 活用例

### リモートアクセス

オフィスや自宅にあるNASやサーバーに、安全にリモートアクセスできます。ポート開放や固定IPの設定が不要なので、初心者でも簡単です。

### チームコラボレーション

複数の開発者でリモート環境を共有する場合、Tailscaleを利用すれば安全にネットワークを構築できます。

### IoTデバイス管理

IoTデバイスがインターネットに接続されている場合、Tailscaleを使ってデバイスのセキュリティを強化し、簡単にリモート管理できます。

---

## まとめ

Tailscaleは、VPNの煩雑な設定や運用の手間を大幅に軽減し、安全かつ柔軟に利用できるソリューションです。個人からチームまで幅広く活用できるので、ぜひ試してみてください！

あなたもTailscaleで快適なリモートネットワーク環境を構築してみませんか？

---

### 参考リンク
- [Tailscale公式サイト](https://tailscale.com/)
- [WireGuard公式サイト](https://www.wireguard.com/)