OmniAICreator/Qiita-1.07M huggingface dataset:
関数化しIAM認証をかけたLambda関数をPostmanから呼び出してみる

# やりたい事
IAM認証をかけたLambdaに対してPostmanからPOSTリクエストを出してレスポンスが返ってくることを確認する。

# 環境
- python:3.12

# Lambdaの作成
bodyの中身を返しているだけの簡単なLambdaを作成。

```python:lambda_function.py
import json

def lambda_handler(event, context):
    body = event.get('body')
    if body:
        data = json.loads(body)
    else:
        data = {}

    response = {
        'statusCode': 200,
        'headers': {
            'Content-Type': 'application/json'
        },
        'body': json.dumps({
            'message': 'Hello from Lambda!',
            'input': data
        })
    }

    return response
```

# IAMポリシーの作成

Lambda関数を呼び出す用のポリシーを作成します。
Resourceの部分は呼び出す対象のLambdaのarnを設定。

```json
{
	"Version": "2012-10-17",
	"Statement": [
            {
                "Effect": "Allow",
                "Action": "lambda:InvokeFunctionUrl",
                "Resource": "arn:~~hogehoge~~"
            }
	]
}
```

# IAMユーザの作成
IAM > ユーザー > ユーザーの作成 からユーザを作成します。
許可を設定から`ポリシーを直接アタッチする`を選択し、上記で作成したIAMポリシーをアタッチしたIAMユーザを作成します。

:::note warn
アクセスキーと、シークレットアクセスキーはPostmanから呼び出すときに使用するので忘れないように保管しておいてください。
:::

# 関数URL化
Lambdaのコンソール画面 > 設定 > 関数URL > 関数 URL を設定 を選択。
![](https://storage.googleapis.com/zenn-user-upload/d3c9926af366-20240705.png)

IAM認証の方を選択。
![](https://storage.googleapis.com/zenn-user-upload/5050f150d0c8-20240705.png)

Lambda関数のコンソールから認証タイプが `AWS_IAM` になっていることを確認。
![](https://storage.googleapis.com/zenn-user-upload/e62bb9a8b2cc-20240705.png)

# Postmanでリクエストを送信する際の設定
メソッドをPOSTに設定しLambdaの関数URLをコピペし、
Authorization タブから `AWS Signature` を選択し、IAMユーザーの`アクセスキーID`と`シークレットアクセスキ`ーを入力。

![](https://storage.googleapis.com/zenn-user-upload/77005b1ecfd9-20240705.png)

`Body` タブの `raw` を選択から `JSON` 選択し、任意のJSONデータを入力。
今回は下記のようなJSONをbodyに設定します。

```json
{
    "key1": "value1",
    "key2": "value2"
}
```

# 実行結果

ここまでできたら、画面右上の`send`ボタンをクリックしPOSTリクエストを送ってみます。
下記のようにLambdaから想定通りのresponseが返ってきている事を確認できました。

```:response
{
    "message": "Hello from Lambda!",
    "input": {
        "key1": "value1",
        "key2": "value2"
    }
}
```

![](https://storage.googleapis.com/zenn-user-upload/c9f29415d717-20240705.png)
定期的に処理を実行する拡張機能_Edge

ブラウザ拡張機能をつくっていて、定期的に処理を実行したい時の方法に苦労したのでまとめておきます。
content_scriptsだけではなくて、background/service_workerも必要なので、この通信のやり取りをするのに悩みました。

# 拡張機能
## マニフェスト
ブラウザはEdgeを使用。
マニフェストはv3。
検索するとv2の情報が多いけど、現在はv3じゃないとダメ。
permissionsに、今回使うAPIのalarmsとtabsを追加。

v3への移行について
https://developer.chrome.com/docs/extensions/develop/migrate?hl=ja

```manifest.json
{
    "name": "ExtentionEdge",
    "description": "定期実行する拡張機能",
    "version": "1.0",
    "manifest_version": 3,
    "permissions": [
        "alarms",
        "tabs"
    ],
    "background": {
        "service_worker": "background.js"
    },
    "content_scripts": [
        {
            "js": [
                "content_scripts.js"
            ]
        }
    ]
}
```

## バックグランド
ブラウザを起動したらずっと動いているので、ここで定期的に処理するきっかけをつくる。
```background.js
// 拡張機能をインストールした時にアラームを設定
chrome.runtime.onInstalled.addListener(function () {
  chrome.alarms.clear("Reminder");
  // 5分周期
  chrome.alarms.create("Reminder", { periodInMinutes: 5 });
});

// 設定した周期でアラームが呼ばれる
chrome.alarms.onAlarm.addListener(function (alarm) {
  // 指定タイトルがある時にcontent_scriptsを呼ぶ
  // 対象にするタブを開いていなかったら何もしない
  chrome.tabs.query({ title: "対象タブの名前" }, function (tabs) {
    if (tabs[0] !== undefined) {
      chrome.tabs.sendMessage(tabs[0].id, "").catch((error) => {
      });
    }
  });
});
```

## コンテンツ
実行したい事はここに書く。
```content_scripts.js
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
  // ここでそのタブに対しての処理
  // console.log("よびだしました！" + new Date());
});
```

# つまずきポイント
- アラームの設定
  なぜかエラーがでるなと思ったら、色んなアラームを設定してしまっていた。
  下記で解決できた。

  ```全てのアラームを消す.js
  chrome.alarms.clearAll()
  ```
  
  ```設定されているアラームを確認する.js
  chrome.alarms.getAll((alarms) => {
  for (var alarm of alarms) {
    console.log(alarm.name);
  }
  });
  ```

- Mozillaのサイトの方が説明豊富
  ChromeのAPIリファレンスとか見ていたのですが、Mozillaの方がそれぞれのメソッドに対しての具体例が多かったのでMozillaのサイトが参考になりました！
  alarmsのAPIはほとんど同じようになっているはずです。
  **chrome**.alarmsと**browser**.alarmsという所は違う

  

# 参考
- https://qiita.com/doran/items/2620b2c8f2ac2c5548b6
- https://developer.chrome.com/docs/extensions/reference/api/alarms?hl=ja
- https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/WebExtensions/API/alarms
- https://developer.chrome.com/docs/extensions/develop/migrate?hl=ja
Go 環境構築〜初歩的な部分に関するメモ

本記事は、自分用と他人用が半々の気持ちで書いています。
うp主はあまり賢く無いので、認識のおかしいところがあるかもしれません。
ここは違うのでは？と言う部分があればご指摘いただければと思います。

# 環境構築について
#### 公式サイトからファイルを落としてきてインストール(https://go.dev/dl/)
/usr/local/goに入る
> `brew install go`でもインストールできるが、勝手に更新される可能性があるらしいので公式サイトを選択した。
バージョン管理はツールを追加しなくても公式でできるっぽい？
https://go.dev/doc/manage-install

↓

#### PATHを通す
ターミナルを開いて`cd ~`して`ls -a`で.zshrcがあることを確認
`vi .zshrc`でファイルを開きパスに関する記載を探して/usr/local/go/binを追記
> pathに追記するのと`export PATH=〜`の違いをいまいち理解していないため追記の形をとっている

> viの操作は最低限以下を覚えていれば問題ないと思う
i → 編集できる状態になる(編集をやめるときはescキーを押す)
u → 一つもどる(ctrl+Z的なやつ)
:q → 終了
:q! → 保存せず終了(Enterを押す必要あり)
ZZ → 保存して終了

↓

#### インストールの確認
ターミナルで`go version`を実行してバージョンが出てきたらOK

# go.modファイルについて
モジュールを使用して開発する時に必要なファイルの認識。
モジュール名と依存するモジュールの情報が記録されており、`go mod init [モジュール名]`で作成される。

検索して出てくる記事などには、[モジュール名]に以下の3パターンが設定されていて？？？となった。
> `example.com/~`
`github.com/[ユーザー名]/〜`
`hello`だけなど

githubにあげるなら`github.com/[ユーザー名]/[プロジェクト名]`
あげないのであればなんでも良いと解釈した。

このファイルが無いと`go get`でエラーを吐く(吐いていたので吐くと思っている)

`go mod tidy`を実行すると、ソースコードのimport内に記載されているパッケージの依存関係がgo.modに追加される。

# モジュール？パッケージ？
大雑把な認識としては、パッケージはソースファイルの集合体(.goが格納されているディレクトリ)で、モジュールはパッケージの集合体。
go.modファイルのあるディレクトリがモジュールとなる。

> 以下の記事が分かりやすかった
https://qiita.com/WisteriaWave/items/60a1052981131f95fbf6



# 勉強に使ったあれこれ
#### [A Tour of Go](https://go-tour-jp.appspot.com/list)
チュートリアル的なサイト

#### 実用Go言語
オライリー本ってやつ
正直あまり頭に入ってこない

#### Youtube
ドキュメントを読むのが苦手なので、テキストベースで分からないことがあった時は調べると意外と出てくる
[Gopher道場](https://www.youtube.com/@gopherdojo)は動画版チュートリアル的な感じでおすすめ

# よく確認しそうなサイトのリンク
#### コマンド関連
https://pkg.go.dev/github.com/shogo82148/std/cmd/go
varとletの違い

## varは何回でも宣言できる
varは何回でも宣言できる
letは一回のみ宣言できる

## varはブロック文の外側からアクセスできる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527006/ef7f115f-70e1-0423-face-3bfd630447af.png)
※ただし関数の場合は外側からアクセスできない

## 全てのvarで宣言された変数は”巻き上げ”される
ただし初期値の値は入らない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527006/c145fc84-9f18-7f58-5db9-7e3c108afd5b.png)
React入門：Windows環境で始めるReactアプリケーション開発

## はじめに

この記事は、Windows環境でReactアプリケーション開発を始める方法を包括的に解説する個人的な備忘録です。ReactはFacebookが開発したJavaScriptライブラリで、ユーザーインターフェースを構築するための強力なツールです。

ここでは、以下の3つのアプローチを紹介します：
1. 従来の方法：環境構築から始める
2. 新しいアプローチ：Claude 3.5 Sonnetを活用する

それぞれの方法の利点や使い分けについても触れていきます。

## 前提条件

- Windows 10以降のOS
- 基本的なJavaScriptの知識

## 1. 従来の方法：環境構築から始める

### 1.1 Node.jsのインストール

1. [Node.jsの公式サイト](https://nodejs.org/)にアクセス
2. LTS（Long Term Support）版をダウンロード
3. ダウンロードしたインストーラーを実行し、指示に従ってインストール

### 1.2 開発環境の確認

コマンドプロンプトを開き、以下のコマンドを実行してNode.jsとnpmのバージョンを確認します。

```
node --version
npm --version
```

### 1.3 Create React Appを使用してプロジェクトを作成

1. コマンドプロンプトで、プロジェクトを作成したいディレクトリに移動
2. 以下のコマンドを実行してReactプロジェクトを作成

```
npx create-react-app my-react-app
```

3. プロジェクトディレクトリに移動

```
cd my-react-app
```

### 1.4 アプリケーションの起動

以下のコマンドでアプリケーションを起動します。

```
npm start
```

ブラウザが自動的に開き、`http://localhost:3000` でReactアプリケーションが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/22d1cad5-e198-dad2-d44b-287c96b99679.png)


### 1.5 コードの編集

`src/App.js` ファイルを編集して、アプリケーションの内容を変更できます。ファイルを保存すると、ブラウザが自動的に更新されます。

## 2. 新しいアプローチ：Claude 3.5 Sonnetを活用する

最近、AI支援ツールであるClaude 3.5 Sonnetを使用してReactアプリの開発を試みる中で、その便利さに気づきました。特に、Artifacts機能を使用すると、Reactアプリの基本的な構造をすぐに生成できます。

### 2.1 Claude 3.5 Sonnetを使用したReactアプリ開発の手順

1. Claude 3.5 Sonnetにアクセスする
2. Reactアプリの雛形を生成するようリクエストする
3. 生成されたコードをローカル環境にコピーする
4. 必要に応じてコードを編集・カスタマイズする

### 2.2 実践：シンプルなReactアプリの作成

以下は、Claude 3.5 Sonnetを使って作成したシンプルなカウンターアプリの例です：

```jsx
import React, { useState } from 'react';

function App() {
  const [count, setCount] = useState(0);

  return (
    <div className="App">
      <h1>シンプルカウンター</h1>
      <p>カウント: {count}</p>
      <button onClick={() => setCount(count + 1)}>
        増やす
      </button>
      <button onClick={() => setCount(count - 1)}>
        減らす
      </button>
    </div>
  );
}

export default App;
```

このコードを `src/App.js` に保存し、`npm start` でアプリを起動できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/566260c8-f018-08d3-7998-565b78c8765f.png)

## アプローチの比較

### 従来の方法
- 完全な開発環境を構築できる
- Reactの基本的な仕組みを理解できる
- 初心者には少し複雑かもしれない

### Claude 3.5 Sonnetを使用する方法
- 環境構築の手間を省ける
- すぐにコーディングを始められる
- アイデアの迅速な検証やプロトタイピングに適している
- 本格的な開発には従来の方法の理解も必要

課題: 外部ライブラリを参照しているコードについては、この投稿では確かめてない・・・

## 結論

Windows環境でReactアプリケーション開発を始める方法として、従来の環境構築から始める方法、Claude 3.5 Sonnetを活用する新しいアプローチ、そして高度なカウンターアプリの実装例を紹介しました。

初心者の方は、まず従来の方法でReactの基本を学び、その後Claude 3.5 Sonnetを活用してアイデアを素早く形にする、という流れがおすすめです。そして、スキルが向上したら、より複雑なアプリケーションの開発に挑戦してみてください。

この記事が、Reactでの開発を始めようとしている方々の参考になれば幸いです。常に公式ドキュメントを参照しながら、実践を重ねていくことが上達への近道です。

## 参考リンク

- [React公式ドキュメント](https://reactjs.org/docs/getting-started.html)
- [Create React App公式ドキュメント](https://create-react-app.dev/)
- [Tailwind CSS公式ドキュメント](https://tailwindcss.com/docs)
- [shadcn/ui公式ドキュメント](https://ui.shadcn.com/)
AtCoder 勉強記録[C++] その11

AtCoderで入茶を目指して勉強しています。
勉強を継続するために投稿を始めました。
もともとアカウントを作成していましたが、今年の4月から本格的に勉強を始めました。
一応自分用に解法を書いていますが雑です、自分で読み返して困ったら修正します。
[私のアカウント](https://atcoder.jp/users/nanami_brother)
[解いた問題](https://kenkoooo.com/atcoder/#/table/nanami_brother)
# 本日解いた問題
本日は尺取り法の勉強のために[こちら](https://qiita.com/drken/items/ecd1a472d3a0e7db8dce)の記事を参考に問題を解いた。
## C - 列
[C - 列](https://atcoder.jp/contests/abc032/tasks/abc032_c)
解答
```c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  ll n, k;
  cin >> n >> k;
  vec s(n);
  rep(i, n) {
    cin >> s[i];
    if(s[i] == 0){
      cout << n << endl;
      exit(0);
    }
  }
  ll right = 0, res = 0, mul = 1;
  for(int left = 0; left < n; left++){
    while(right < n && mul * s[right] <= k){
      mul *= s[right];
      right++;
    }
    res = max(res, right - left);
    if(left == right) right++;
    else mul /= s[left];
  }
  cout << res << endl;
}
```
### 解法
尺取り法を用いて解いていく。数列に`0`が含まれていた場合、最も長い部分列は与えられた数列と同じになる。
## C - 単調増加
[C - 単調増加](https://atcoder.jp/contests/abc038/tasks/abc038_c)
解答
```c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  ll n;
  cin >> n;
  vec a(n);
  rep(i, n) cin >> a[i];
  ll right = 1;
  ll res = 0;
  for(int left = 0; left < n; left++){
    while(right < n && (a[right-1] < a[right] || right <= left)){
      right++;
    }
    res += right - left;
    if(right == left) right++;
  }
  cout << res << endl;
}
```
### 解法
こちらも尺取り法を用いて解いていく。
## B - Takahashi's Failure
[B - Takahashi's Failure](https://atcoder.jp/contests/abc252/tasks/abc252_b)
解答
```c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  ll n, k, tmp;
  cin >> n >> k;
  vec a(n);
  vec b(k);
  rep(i, n) cin >> a[i];
  rep(i, k) cin >> b[i];
  vec c = a;
  sort(c.rbegin(), c.rend());
  string res = "No";
  rep(i, n){
    if(c[0] == a[i]) tmp = i + 1;
    rep(j, k) {
      if(b[j] == tmp) res = "Yes";
    }
  }
  cout << res << endl;
}
```
### 解法
おいしさの最大値を求めておき、最大値の食品が`Bi`と一致するかを判定する。一致したら`Yes`、一致しなかったら`No`を出力する。
## B - Distance Between Tokens
[B - Distance Between Tokens](https://atcoder.jp/contests/abc253/tasks/abc253_b)
解答
```c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  ll h, w;
  cin >> h >> w;
  vector<string> s(h);
  rep(i, h) cin >> s[i];
  vector<pair<ll, ll>> coo(2);
  ll cnt = 0;
  rep(i, h){
    rep(j, w){
      if(s[i][j] == 'o'){
        coo[cnt].first = i;
        coo[cnt].second = j;
        cnt++;
      }
    }
  }
  ll res = abs(coo[1].first - coo[0].first);
  res += abs(coo[1].second - coo[0].second);
  cout << res << endl;
}
```
### 解法
二つの`o`の座標を確保しておき、横方向縦方向両方の差を求めることで移動回数が求まる。
### 参考文献
[しゃくとり法 (尺取り法) の解説と、それを用いる問題のまとめ](https://qiita.com/drken/items/ecd1a472d3a0e7db8dce)
↑控えめに言って神です
AWS ソリューションアーキテクトアソシエイト(SAA-C03)合格しました(2024/01/30)

こんにちは、井口です。

データセンターの事務処理を1年程度、AWSのサーバの再起動や指定されたジョブを動かしてリカバリする程度の仕事を2年程度やってきました。
重い腰を上げて資格を取ったので、これから試験を受ける人に少しでも参考になれば幸いです。
## 準備期間と勉強方法
大体1ヵ月半ぐらいで合格しました。
<dl>
  <dt>1ヵ月半前~3週間前</dt>
  <dd>参考書を購入、9割がた読み切り</dd>
  <dt>3週間前~試験まで</dt>
  <dd>Udemyの問題集を解く</dd>
</dl>

[AWSの基本・仕組み・重要用語が全部わかる教科書 \(見るだけ図解\)](https://www.amazon.co.jp/AWS%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%83%BB%E4%BB%95%E7%B5%84%E3%81%BF%E3%83%BB%E9%87%8D%E8%A6%81%E7%94%A8%E8%AA%9E%E3%81%8C%E5%85%A8%E9%83%A8%E3%82%8F%E3%81%8B%E3%82%8B%E6%95%99%E7%A7%91%E6%9B%B8-%E8%A6%8B%E3%82%8B%E3%81%A0%E3%81%91%E5%9B%B3%E8%A7%A3-%E5%B7%9D%E7%95%91%E5%85%89%E5%B9%B3/dp/4815607850)
[【SAA-C03版】AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集（6回分390問）](https://www.udemy.com/course/aws-knan/)

## 学習スケジュール
①業務のスキマ時間に1時間程度、参考書を読む
②模擬試験を夜勤明けの日と休みの日に実施して、業務スキマ時間で模擬試験の答え合わせと解説読み

## 当時の勉強振り返り
参考書はAWSのシステム構造を掴むぐらいの気持ちで読みました。
詳しい表とかは覚えれるわけないやろの精神ですっ飛ばして、重要な用語を自分の言葉で説明できるようにイメージしてました。
問題集は正答率が悪い項目の参考書を読み返したり、試験前に再確認できるようにメモを取ってました。
全体の正答率が50%~60%ぐらいでしたが、レビューの内容的に本番より難しいとの評価が多かったので、合格する可能性はあるんじゃないかなと思って受験しました。(本番は7割正解で合格)
最終的には、741/1000点で合格でした。

## 本番試験と模擬試験の比較
模擬試験の内容を理解していれば、本番試験の内容はほぼイメージできます。
迷いつつ答えた問題も時々ありましたが、自信をもって回答することが多かったです。
数問模擬試験とほぼ同じ問題もでていて、そこはありがたや～と思いつつ答えました。
試験時間が120分と長く集中持たないので、模擬試験で練習出来てよかったです。
(模擬試験でも終盤は正答率落ちてたので顕著にわかります...)

## 今後の計画
インフラ構築系か開発系の仕事に転職したいので、どちらにも役に立つ基本情報技術者試験でも受けようかなと思います。

初記事で読みにくい中ご愛読ありがとうございました。
チームの新メンバーに言われてハッとしたこと

# はじめに
こんにちは、H×Hのセンリツ大好きエンジニアです。（同担OKです😉）
自分は現在スクラムで開発をしているのですが、新メンバーで入ってきて頂いた方がレトロスペクティブ（スクラムの振り返りイベント）でズバッと言ってくれたので、その内容を共有します🫣

個人的にも、反省する内容でした。。。

# 言われたこと
#### 話す量の割に、決めること少なくないですか？

#### おふざけ多すぎません？もっと仕事寄りで行きましょうよ

。。。自分のライフは０になりました😇
思い当たる節しかなく、まだチームに入って間も無い方から見るとそう見えるんだなあと実感しました。
（勿論、こういう意見は大歓迎なので全く責めるつもりはないです🙇）

以下に、それぞれの言われた背景を説明します。

## 話す量の割に、決めること少なくないですか？

スクラムのイベントでは、これから取り組むことや現在課題に上がっている点を洗い出すといったことを行なっていました。
Planningで次のSprintに取り組むことを決める時は、内容は大体頭の中にあるので比較的スムーズに行くのですが、**課題に対するアプローチがなかなかズバッと言いづらく**。。。🥲

というのも、最近は不確定要素が多かったり、単純にチームの内情的にすぐ思ったことを言い出しづらい雰囲気になっていることが多かったのです。。。
（チーム内の期待値のすり合わせが足りなかったのもある？🤔）

そのため、議論をする中で**現在問題となっているものはスッと挙がるのですが、それに対する解決案を決めようと思うと時間が掛かっていました。**

。。。本当に即断即決できれば会議時間も減るので、なんとかしたいですね、

## おふざけ多すぎません？もっと仕事寄りで行きましょうよ

これは大半自分のせいです🥶
会議中は真面目にやってるつもりですが、休憩時間や雑談でやってたノリが会議中にも出ちゃってることがあるそうでした。。。

自分としては、仕事はどうせなら楽しくやりたいという考えだったので笑いもありつつ会議するということを理想としていましたが、**当然万人に受けるものでは無い**と思います🥹

むしろ、会議は波を立たせず遂行していきたい方もいらっしゃるので、その方に対する配慮が欠けていました。。。

こちらに関しては自分の思い込みが生み出した悪い部分だったのかなと思います。
まあ、そもそも仕事ですもんね😵
**チーム内で合意を取れた上で初めてそのようなラフな会議が出来る**と思うので、まずはきちんと許可を取ることが必要でした。。。

# おわりに
非常に心に刺さる言葉をいただきましたが、このような意見をいただけることはシンプルにありがたいことですので、まずは感謝を述べたいと思います。🙇

後はどう改善していくかについてですが、前者が難しいですね。。。
その解決方法はなるべく即決で言えるようなチームにしていくことが必要だと感じました😇
もちろん自分が率先して動く必要があるので、意識的に動けるようにしていきます。

最後までご覧いただきありがとうございました！
以上、センリツでした。🤓
(#1)超・最低限必要なMarkdown記法メモ【# 見出し、`コード、>引用】by Qiita初心者

# 前提条件
本記事の内容は、Qiitaの記事作成画面で用いるMarkdown記法についての説明を前提とする。
# 対象読者
- Qiita記事投稿の初心者
- Markdown記法について知りたい方
# はじめに：最低限やりたいこと
1. 見出し →見出し1：\# タイトル、見出し2：\#\# タイトル
2. ソースコード書くやつ→（\`はPCのshift+@で打てるバッククォート。スマホのSimejiでは「常用」の後半にある。）
　\`\`\`css:style.css
 　/*ここにコード書く*/
　\`\`\`
 
3. 引用→ \>引用されるやつ　\>\>さらに引用

# ☆さっそくやってみよう
#見出し1だよ
```
#見出し1だよ
```
##見出し2だよ
```
##見出し2だよ
```
（あれ？見出しになっていないぞ？）
※\#の後に半角スペース入れてないためです。
# 見出し1だよ
```markdown
# 見出し1だよ
```

## 見出し2だよ
```markdown
## 見出し2だよ
```
結論：\# の後に半角スペースを入れるのをお忘れなく。

# ②ソースコード入れるやつ
```javascript:script.js
//ここにコードを書くよ
console.log('テストだよ');
```

```markdown
```javaScript:script.js
//ここにコードを書くよ
console.log('テストだよ');
```（バッククォート3つで閉じる）
```

# ③引用するやつ
>引用だよ
>>さらに引用するやつ
1行空けずに書いたよ

1行空けたよ

```markdown
>引用だよ
>>さらに引用するやつ
1行空けずに書いたよ

1行空けたよ
```

※引用するやつは、地の文に戻す際は1行空けて書き出す必要がある。

# 感想
Qiitaのエディタ上で「見出し1は\#\#、見出し2は\#\#」と書くと、
>一文に二回以上利用されている助詞 "は" がみつかりました。
>次の助詞が連続しているため、文を読みにくくしています。
>- "は"

と注意される。
また、「！！！！」と語尾に書こうとすると、
> "！" が連続して2回使われています。

と、またもやQiita様からお叱りを受けた。
初見時は「そんなことまで注意されるのか…」と少し驚いてしまった。
# 参考文献
@kamorits様「Qiita マークダウン記法 一覧表・チートシート」
https://qiita.com/kamorits/items/6f342da395ad57468ae3

# 書ききれなかったメモ
- 太字とか
\*\*太字\*\*、\*斜体\*、\`インライン\`、水平線\-\-\-
- ページ内目次の作り方：別途記事を読んで練習する必要がある。
参考記事：@tsunasandot様「Qiitaの投稿記事内でページ内リンクや目次リンクを行う方法」
https://qiita.com/tsunasandot/items/d0972fb3bfc0d4156b34
- 注釈の作り方：謎の用語\[\^1\]、\[\^1\]\:注釈だよ
- 〇とか‪‪‪‬‪‪‪‪‪‪‪‪✕‬とかで囲うアレ
- ソースコードに行番号つけるやつ

その他の記法は都度調べて用いようと思う。
新しい分野でも判断できるようになる方法

エンジニアをしていると、新しい分野に飛び込んでいくことが必要になることが多い。
そんなときに、どうしたらいいのかを、今の時点で思うことを述べる。

1. 習得し切り開いていく分野を見定める。
1. その分野のキーワードを見つける。
1. キーワードを元に、キーパーソンを見つける。
1. キーパーソンがX(twitter）をしていたら、フォローする。
1. キーパーソンと知り合いになる。
1. その分野の学会などを調べる。
1. 学会のスライドや講習会の情報を得る。
1. そのキーワードでの関係している企業などを探す。
1. [connpas](https://connpass.com/) のイベントに現地参加する。

## 追記
### 類似性のある分野にアプローチする
- 例：C++の最新の言語仕様だけに基づいての開発をしている人の場合
 Rust 言語にアプローチする。
 実行速度が高く、かつ信頼性の高いコーディングを目指す。
 
 
 ### 今までの経験が次のステップの土台となる分野
 - 例：計測から制御へ
 - 制御ができるためには、計測がわかっていることです。
 - 計測がわかっている人は、そうでない人よりも制御に入りやすい。
Goでファイルの読み書きをする

## はじめに
Goでファイルの読み書きをしてみようと思い、書いてみました。
os.Create()でファイルを作り、その戻り値のfile.Write()でデータを書き込み、そのファイルを最後に読み込んでいます。

## コード
```go
package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	// 書き込み用のデータ
	data := []byte("Hello, World!\nThis is a sample text.")

	// ファイルを作成
	file, err := os.Create("example.txt")
	if err != nil {
		fmt.Println("ファイルの作成中にエラーが発生しました:", err)
		return
	}

	// ファイルにデータを書き込む
	_, err = file.Write(data)
	if err != nil {
		fmt.Println("ファイルの書き込み中にエラーが発生しました:", err)
		return
	}
    file.Close()
	fmt.Println("ファイルにデータが書き込まれました")

	// ファイルを読み込む
	file, err = os.Open("example.txt")
	if err != nil {
		fmt.Println("ファイルの読み込み中にエラーが発生しました:", err)
		return
	}
	defer file.Close()

	readData, err := io.ReadAll(file)
	if err != nil {
		fmt.Println("ファイルの読み込み中にエラーが発生しました:", err)
		return
	}

	fmt.Println("example.txtの内容:")
	fmt.Println(string(readData))
}
```

## 動かしてみる
```zsh
go run main.go

ファイルにデータが書き込まれました
example.txtの内容:
Hello, World!
This is a sample text.
```
Dpcker環境での環境変数 DATABASE_URL

Docker環境で開発しているとき、DBへの接続URLがよくわからない...ということがあった。

compose.yamlで db という名前がついているから、
`DATABASE_URL="postgresql://user:password@db:5432/mydatabase"`
にしていたら、突然接続できなくなってサーバーエラーが起きたり...

正攻法かは不明だが、以下の方法でうまく行ったので記録。

### 前提
- バックエンドはExpress、ORMにPrisma採用、RDBはPOstgreSQL
- Docker環境
    ```yaml: compose.yaml
    version: "3"
    services:
      next:
        build:
          context: ./next-app
          dockerfile: Dockerfile
        ports:
          - "3000:3000"
        environment:
          - PORT=3000
        volumes:
          - ./next-app:/usr/src/app
          - /usr/src/app/node_modules
        command: npm run dev
    
      app:
        build: ./api
        ports:
          - "4000:4000"
          - "9229:9229"
        volumes:
          - ./api:/usr/src/app
        depends_on:
          - db
        environment:
          - DATABASE_URL=${DATABASE_URL_DOCKER}
    
      db:
        image: postgres:latest
        ports:
          - "5432:5432"
        environment:
          POSTGRES_USER: user 
          POSTGRES_PASSWORD: password
          POSTGRES_DB: mydatabase
        volumes:
          - pgdata:/var/lib/postgresql/data
    
      playwright:
        image: mcr.microsoft.com/playwright:focal
        working_dir: /tests
        volumes:
          - ./next-app:/tests
          - ./tests:/tests
        command: ["npx", "playwright", "test"]
        depends_on:
          - next
    
    volumes:
      pgdata:
    ```

### 対応したこと
```tex: .env
# For local development (when running Prisma commands locally)
DATABASE_URL=postgresql://postgres:password@localhost:5432/mydatabase

# For Docker (when running the app inside a Docker container)
DATABASE_URL_DOCKER=postgresql://postgres:password@db:5432/mydatabase
```

```typescript: /prismaInitialize.ts
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient({
    datasources: {
        db: {
            // 環境変数のURLどちらも良しとしつつ、基本はローカルからコマンド等を実行するので localhost:5432を優先
            url: process.env.DATABASE_URL || process.env.DATABASE_URL_DOCKER,
        },
    },
});

export default prisma;

// Prismaクエリを使用する各ファイルでimportする
```
物理のマセマ　Pythonコード


```
import sympy as sp
import matplotlib.pyplot as plt
import numpy as np

# Define time as a symbol
t = sp.symbols('t')

# Define the components of the position vector as specific functions
x = t**2
y = sp.sin(t)
z = sp.cos(t)

# Position vector
r = sp.Matrix([x, y, z])

# Velocity vector
v = r.diff(t)

# Speed (magnitude of the velocity)
speed = v.norm()

# Acceleration vector
a = v.diff(t)

# Curvature
curvature = v.cross(a).norm() / v.norm()**3

# Radius of curvature
radius_of_curvature = 1 / curvature

# Display results
print("位置ベクトル r(t):")
sp.pprint(r)

print("\n速度ベクトル v(t):")
sp.pprint(v)

print("\n速さの大きさ |v(t)|:")
sp.pprint(speed)

print("\n加速度ベクトル a(t):")
sp.pprint(a)

print("\n曲率 κ(t):")
sp.pprint(curvature)

print("\n曲率半径 ρ(t):")
sp.pprint(radius_of_curvature)

# Convert to numerical functions for plotting
speed_func = sp.lambdify(t, speed, 'numpy')
curvature_func = sp.lambdify(t, curvature, 'numpy')
radius_of_curvature_func = sp.lambdify(t, radius_of_curvature, 'numpy')

# Create a time array
time_vals = np.linspace(0, 10, 400)

# Calculate speed, curvature, and radius of curvature values
speed_vals = speed_func(time_vals)
curvature_vals = curvature_func(time_vals)
radius_of_curvature_vals = radius_of_curvature_func(time_vals)

# Plot speed
plt.figure(figsize=(12, 6))

plt.subplot(1, 3, 1)
plt.plot(time_vals, speed_vals, label='|v(t)|', color='b')
plt.xlabel('t')
plt.ylabel('Speed')
plt.title('Speed |v(t)|')
plt.legend()
plt.grid(True)

# Plot curvature
plt.subplot(1, 3, 2)
plt.plot(time_vals, curvature_vals, label='κ(t)', color='r')
plt.xlabel('t')
plt.ylabel('Curvature')
plt.title('Curvature κ(t)')
plt.legend()
plt.grid(True)

# Plot radius of curvature
plt.subplot(1, 3, 3)
plt.plot(time_vals, radius_of_curvature_vals, label='ρ(t)', color='g')
plt.xlabel('t')
plt.ylabel('Radius of Curvature')
plt.title('Radius of Curvature ρ(t)')
plt.legend()
plt.grid(True)

plt.tight_layout()
plt.show()
```






```
def point_mass_inertia(mass, radius):
    return mass * radius**2

def disk_inertia(mass, radius):
    return (1/2) * mass * radius**2

def rod_end_inertia(mass, length):
    return (1/3) * mass * length**2

def rod_center_inertia(mass, length):
    return (1/12) * mass * length**2

# Example calculations

# Point mass example: Calculate inertia for a point mass with mass 5 kg and radius 0.3 m
mass_point = 5  # kg
radius_point = 0.3  # m
inertia_point = point_mass_inertia(mass_point, radius_point)
print(f"Inertia of point mass: {inertia_point} kg*m^2")

# Disk example: Calculate inertia for a disk with mass 2 kg and radius 0.5 m
mass_disk = 2  # kg
radius_disk = 0.5  # m
inertia_disk = disk_inertia(mass_disk, radius_disk)
print(f"Inertia of disk: {inertia_disk} kg*m^2")

# Rod examples: Calculate inertia for a rod with mass 3 kg and length 2 m
mass_rod = 3  # kg
length_rod = 2  # m

inertia_rod_end = rod_end_inertia(mass_rod, length_rod)
print(f"Inertia of rod about its end: {inertia_rod_end} kg*m^2")

inertia_rod_center = rod_center_inertia(mass_rod, length_rod)
print(f"Inertia of rod about its center: {inertia_rod_center} kg*m^2")
```
JavaScript: ほのかに気持ち悪いもの

過剰な空白さん
```js
a=function () {}
a[ b ]=c
a= ( ) => {}
```
波括弧の位置に違和感
```js
if(a)
	{
	if(b)
		{
		c()
		}
	}
```
空白4個で字下げするならtabで良くない? 空白何個かずれてるのをたまに見掛ける。気付きにくい。
```js
if(a){
    if(b){
        c()
         d()
    }
}
```
空行に空白類を無駄打ち(範囲選択すると正体が浮き彫り)。これは編集program側の字下げ補完機能の弊害か?
```js
if(a){
	let b
	
	if(c){
		let d
		
		e()
	}
}
```
適度に空白改行挿入をさぼる奴。変数名1文字。code golf愛が憎らしいほど伝わってくるゴミ。
```js
function a(){
	for(var a=0,b=0;a<Math.random()*1e4>>>0;)b+=a++;return++b
}
```
## 閲覧上の注意
執筆者がgolf中毒であるが故……
**JavaScript仮装魔神が必要**。

邪悪な文書であるが故……
鵜呑みにすると回復は困難(正常な思考回路は夢の中へ…)。
お読みになる前に**頭のbackup copy**を用意しておくこと。

まあここまで読んでしまってからでは手遅れでしょうけどね。ウヒヒヒ…
数１０万人の画像認識のエンジニアがいる時代に

CVPR 2024で採択された論文の数が
論文数：２７１６件
著者数：１５，２８８名
という状況だ。
[CVPR2024の採択率は23.6%（11532件の応募から2719件採択）と、難関国際会議として知られています。](https://group.ntt/jp/topics/2024/05/28/cvprntt.html#:~:text=CVPR2024%E3%81%AE%E6%8E%A1%E6%8A%9E%E7%8E%87%E3%81%AF,CS%E7%A0%94%E3%81%A8%E7%95%A5%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%EF%BC%89)

採択されたほぼ4倍の著者がいるとすると、6万人の研究者・エンジニアが応募したことになります。（実際には、複数の論文で共通の著者がいるので、減るはずです。しかし、ここでは、だいたいの数を議論したい。）

CVPRに論文を投稿しなかった画像エンジニアは、10倍どころじゃなく、圧倒的に多いはず。
仮に１０倍だったとしても60万人になる。
実際には、それ以上の多くの人が画像認識・機械学習・AIの分野に関わっていることになる。


## この状況では、自分たちが意味のあることを成し遂げるためには、戦い方を変えなくちゃならない。

### 状況の認識を協力して作ろう
- https://xpaperchallenge.org/cv/
- https://x.com/CVpaperChalleng
- [CVPR 2024 速報](https://hirokatsukataoka.net/temp/presen/240621CVPR2024Report_finalized.pdf)

まず、勝利条件の設定だ。


### 企業の場合
#### 製品・サービス開発の一部としての画像認識エンジニアの場合
- 自分たちのサービスが意味があるものにすること
- 自力で開発しない内容の選定
- 自分たちがadvantageを持とうとする領域の設定
- 第三者にとって、自分たちの取り組みは何がうれしいのかを考える。
- 誰にとってもうれしくないようなものは、計画として間違っている。
- 自分たちの責任を負う範囲と手離れする条件
- いったん市場に出してしまうと、それをサポートする義務を生じる。
- そうすると、その後の事業展開を大きく束縛する。
- 作るのはいいが、試作品だけで止めておいた方がよかったということも生じうる。 

### 企業の事業の立案者の場合
- 自分たちの事業がどういう状況にあるのか
    - いま進んでいる変化が自分たちを事業をどう変えてしまうのか
    - それらを本気で考え抜くこと
    - その変化を自分たちが有利になるように変えていくにはどうしたらいいのか
- エンジニアに収益構造も教えて一緒に考え抜くことだ。
    - 「専門バカ」とエンジニアを軽視している人は、エンジニアに「大切なことを伝えられていない人」
    - 優れたエンジニアの場合には、必要な技術をそのつど習得していく。
    - 優れたエンジニアの場合には、変化し続けることができる。
- 画像認識の機械学習のエンジニアは、大規模言語モデルを新しい分野で用途を切り開いていくこともできる。
- そういったことを考慮して、事業の進め方を考え抜いてほしい。

### 大学の研究者（特に大学院生を想定）の場合
ベンチマークを気にしすぎるな。
ほんとうに、そのベンチマークが適切とは限らないよ。
もっと広い範囲で、問題設定から考えてみよう。
大きく技術が変わるときは、問題設定からして見直さなくちゃならないことが多い。
問題の定式化とそれに関連したデータセットを作る構想力とを大事にしよう。
一人で問題を解く時代じゃなくなった。
どうチームを組織して、有益な結果を引き出すのかという時代になった。

大規模言語モデルの影響は、既存の枠組みを大きく変えてしまった。
自然言語処理・コンピュータビジョン・ロボット
これらの垣根が壊された。
その状況の中で、解くべき問題を設定し直さなくちゃならないだろう。

## 絶対避けたい状況
- 機械学習・AI・ロボティクスの分野で、特定の会社が圧倒的な力をもって産業を支配する。
- 代替可能な技術が提供されない。
- 有益なサービスが日本では利用できない。
- 他社と交渉する際の交渉材料となる技術が日本に存在しない。
- 

## 解くべき問題はなくなっていない
- ある種の問題は、解決の見通しがついた。
- そのため、今まではずっと先送りするしかなかった問題に手を付けられる状況がやってきた。
- 僕たちは、こうあってほしいという未来を妄想する。
- こうあってほしい状況を実現するには、どういう技術が必要なのかを考える。
- 大規模言語モデルがさらによい結果を返すようになっても、**解くべき問題はなくなっていない
ABC360Dを解いた

筆者はレート600前後の茶色コーダ

この前開催されたABC360で解けなかったD問題を解説ACしたので備忘録

問題ページ

https://atcoder.jp/contests/abc360/tasks/abc360_d

# 実装コード

S[i] が 1, 0の集団に分け、それぞれをソート
それぞれの解の上限、下限をしゃくとり法で計算して足せばOK

```python
import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)

def main():
    N, T = rLI()
    S = rS()
    X = rLI()
        
    bn = []
    len_bn = 0
    bp = []
    for i in range(N):
        if S[i] == '0':
            bn.append(X[i])
            len_bn += 1
        else:
            bp.append(X[i])
    bn.sort()
    bp.sort()
    ans = 0
    l = 0
    r = 0
    for p in bp:
        while l < len_bn and p > bn[l]: 
            l += 1
        while r < len_bn and p + 2 * T >= bn[r] :
            r += 1
        ans += r - l
    print(ans)
if __name__ == '__main__':
    main()


```

# まとめ

ABC360Dを解いた、解法にはしゃくとり法を使用した

# 感想

今回の問題はしゃくとり法を使う所までは検討が着いたが、
解の上限、下限を計算する方法が思いつかなかった、
この部分は数学よりな話だと思うので、そこら辺の地力も必要だと感じた。
React19で新たに追加された「use」APIの概要とその使い方について

## はじめに
React19では、新しいAPIである`use`が導入されました
このAPIは、[プロミス](https://qiita.com/Saayaman/items/7ba82c8f1b2a181d5653)や[コンテキスト](https://qiita.com/hinako_n/items/0f1e9e9b56a888d86641)などのリソースから値を読み取るためのものです
この記事`use`の基本的な概要、具体的な使用例。以前のバージョンとの違いについて説明していきたいと思います

## 基本的な概要
`use`APIは、非同期または同期リソースからのデータ取得を簡素化するためのものです
従来の方法では、プロミスからデータを取得するために多くのコードが必要ですが、`use`を使用することでこれが大幅に簡略化されます
具体的な機能は下記の通りです
- プロミス（Promise）から値を読み取ります
- コンテキスト（Context）から値を取得します
- 他の非同期リソースからデータを取得します
- useに渡されたプロミスが未解決の場合、コンポーネントはサスペンドされます
- プロミスが解決されると、コンポーネントは再レンダリングされます


## 使用例
```jsx
import { use } from 'react';

function fetchData() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve("Fetched data");
    }, 1000);
  });
}

function MyComponent() {
  const data = use(fetchData());

  return <div>{data}</div>;
}
```

上記では`fetchData`関数がプロミスを返し、`use`を使ってその結果を取得しています
従来の方法では、コンポーネント内で状態を管理し、`useEffect`フックを使用してデータを取得する必要がありましたが、`use`APIによりこれが簡潔に書けます

## 以前のReactバージョンとの違い
以前のバージョンのReactでは、非同期データの取得には以下のように`useEffect`フックを状態管理を使用する必要がありました

```jsx
import React, { useState, useEffecct } from 'react';

function fetchData() {
  return new Promise((resolve) => {
    settimeout(() => {
      resolve("Fetched data");
    }, 1000);

function MyComponent() {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetchData().then(result => setData(result));
  }, []);

  if (data === null) {
    return <div>Loading...</div>
  }

  return <div>{data}</div>
}
```
このアプローチでは、初回レンダリング時に一時的な「Loading...」メッセージが表示され、その後データが取得されると再レンダリングが行われます
React19のuseを使用すると、初回レンダリングを一時停止できるため、よりシンプルなコードで非同期データを扱うことが可能です。これにより分岐も少なくなりますね
こう見ると`use`を使用する場合と比べて状態管理を使用することで複雑に見えると思います

## まとめ
`use`APIの導入でプロミスやコンテキスト周りの処理が楽に書けるようになりました
非同期処理だけでなく同期処理の状態管理をできるようになり、失敗したらサスペンドされるようになります
`use`APIを使用することで運用、メンテナンス性も向上すると思うので今後の開発に活かせれば大きな効果が期待できると感じました

## 参考リンク

https://ja.react.dev/blog/2024/04/25/react-19

https://ja.react.dev/reference/react/use

https://zenn.dev/uhyo/books/react-19-new/viewer/use
Distill Web Monitorのアラートをメールで受け取ってみる

# 概要
筆者は以下の過去記事でWebサイトの更新を見逃さない様に監視するツールとしてDistill Web Monitorを導入しました。導入時にメールで更新のアラートが届く様に設定していた所、数日後にアラートが届いたのでその内容を詳しくみてみようと思います。

https://qiita.com/y-vectorfield/items/30e94b594195d1eee287

# 実際に届いたアラート
以下が実際に届いたアラートメールです。差分がカラーリングされており、更新された内容が分かりやすくまとまっています。

![alert.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/e6176052-3964-53f9-50f6-55768d2ae33a.png)

本文上部の`ChangeHistory`をクリックすると以下のログが表示されます。左右に並べて表示したり、インライン表示にしたりしてDiffを見ることが出来ます。

![changelog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/98a356b1-2ab8-0da6-f85d-32cf94485241.png)
PCの歴史と操作の変容５

# IBM PC/AT互換機
日本のPCはPC-9801互換機が席巻していた頃がありました。
この頃のPC/AT互換機が浸透しなかったのは、日本語に対応していなかったためでしたがPC/AT互換機が多言語対応可能になったことでPC/AT互換機が主流になってきました。

# MS-DOS Shell
MS-DOSでもタイル型のWindowが使えるようになり、Windows1.0やMacもWindow Systemが採用されはじめました。
ワークステーションでは結構早い段階から、独自WindowSystemが採用されていましたが、この頃からX-Windowに移行され始めました。
これが1980年代の後半〜90年の初期に当たります。

このように16Bit CPUから32Bit CPUへの移行期はコマンド操作からマウス操作に移行し始めた頃でもあります。

# PC上のC言語とUNIX開発環境
BASICでの開発は、すべての変数が何処からでも参照可能であったため複数人数で開発を行うと変数の衝突が起きるという問題がありました。
MS-DOSが浸透してくるとPC用のC言語での開発が中心となってきました。
C言語ではスコープと呼ばれる変数の参照範囲に明確なルールがあったり、分割コンパイルと呼ばれるファイルを複数に分けてコンパイルし１つのプログラムを作る方法等が導入されていあため、複数人数での開発が容易にできるようになりました。

ワークステーションで使用されるC言語環境は、OSがUNIXベースでした。
C言語の起こりは、UNIXの開発大きく関わっているため本当のC言語開発環境はUNIX環境であるとも言えます。
[備忘録]　IT用語について分かったことをまとめた ~ver.2

# はじめに
こんにちは，Umamusume22です．引き続きIT用語について分かったことをアウトプットしていきます．

# 備忘録[1,2,3,4]
#### アクセスポイント[1]
- 無線LANアクセスポイントの省略表現
- パソコンから飛んできた無線LANの電波を受け取る機械のこと
    - もしくはアクセスする場所

#### 無線LAN[2]
- インターネットっぽい通信をする際のやり方の一つ
- 線の代わりに電波を使って通信するやり方
- LANケーブルの中を通る代わりに，電波がデータを搬送
- データが空気中を通る
    - セキュリティの被害に遭いやすい

#### アドホックモード[3]
- 1対1で無線通信をするときに使う無線LANのモード
- 無線LANアクセスポイントを介さないで通信する
    - 相手の無線機器と直接通信を行う

#### GPU[4]
- 画像に関する処理を担当するパソコンの部品 (半導体チップ)
- GPUは画面を映す部品
- グラフフィックボードを追加するとGPUの処理精度が向上する
    - 追加しないとオンラインゲームがカクカクする
- グラフィックボードにくっついている部品がGPU
    - グラフィックボードは見た目が板のようなもの

# 最後に
記事の内容が短くて申し訳ありません．知っていて当然なIT用語シリーズでしたが意外に説明を求められたら答えられない用語です．(あくまで私の話ですが)
引き続きIT用語について分かったことをアウトプットしていきます
それにしてもIT用語って沢山ありますね笑．カタカナ用語難しい
読んでいただきありがとございました!

※ウマ娘の声をフーリエ変換した記事や水栓の開閉判定をLineに通知する記事も書いています．suzuが私です．興味がある方はぜひご覧ください！
https://vigne-cla.com/31-1/#toc5

※noteも始めました．
https://note.com/madoka235/n/nbba2153326e1

ぜひフォローよろしくお願いします!


# 参考文献
[1] "「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典"
https://wa3.i-3-i.info/word14405.html

[2] "「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典"
https://wa3.i-3-i.info/word181.html

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

[4] "「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
https://wa3.i-3-i.info/word12613.html
プレイヤーもマネージャーも両方やりたかった私に希望をくれた「エンジニアリングマネージャー」という役職

この記事では、私が興味を持つ「EM(エンジニアリングマネージャー)」という仕事とその理由を紹介します。

## プレイングマネージャー

私は好奇心が強いタイプで、なんでもやりたくなる性格です。

データサイエンティストをやりながら、アプリケーション開発をやっています。
チームを率いるリーダー・マネジメントもやります。

大企業で育つ「なんでも屋」と言われると否定できません。

エンジニアとしてのキャリアをスタートしてから、
①自分でコードを書く
②マネジメントもする
を両立したいと考えていました。

つまり、プレイングマネージャーとして働くことを希望しています。

しかし、キャリアについて話す場では「テクニカルか、マネジメントか」と「どちらかを選ぶ」という前提で問われることがあります。
テクニカルとマネジメントを両立したプレイングマネージャーとして働くことは諦めつつありました。

## エンジニアリングマネージャー

そこで知ったのが「エンジニアリングマネージャー」という役職です。

名前は知っていましたが、詳細は理解していませんでした。

次の記事で、エンジニアリングマネージャーに対する解像度がグッと上がりました。

https://note.com/dora_e_m/n/n396c0317e405

> EMは、マネジメント対象とするエンジニアチームの価値を最大化する。
そのためにやるべきことは組織の状況により異なるが、自分自身のエンジニア経験に根ざしたエンジニアリングへの理解、ナレッジ、スキルがマネジメントスキルを支える土台となる。
価値を最大化するというミッションを遂行するための手段は問わない。よってコードを書くべきならそうすればいいし、ピープルマネジメントに専念するのがよいならそうすればよい。ただしチームは変わる。チームにあわせて変幻自在に変化し、価値の最大化にコミットし続ける。それがEMである。

「EMとは何か」の答えに救われました。

「チームにあわせて変幻自在に変化し、価値の最大化にコミットし続ける。」というのが腑に落ちました。

私がやりたかったこと、続けられそうなことに出会えました。

エンジニアリングマネージャーという仕事に興味が湧きました。

## おわりに

この記事では、私が興味を持っているエンジニアリングマネージャーについて紹介しました。

記事を書きながらさらに興味が湧いたので、これからさらに調べていきます。
【Glide Wiki】Columns解説_Image Column, Date & Time Column, URL Column 

# はじめに
本記事ではNoCodeアプリ開発ツール「Glide」のData Editorのうち、Image Column, Date & Time Column, URL Column についてまとめています。

Glide Wikiの記事一覧はこちらです。

https://qiita.com/riina_hoiz_nocode/items/dfafaa6c9656f423241c

:::note warn
本記事は2024年7月時点での情報です。Glideのアップデート状況により説明内容が一部異なる場合があります。
:::

# 概要

## Columns
Columnsとは、データテーブルの列のことを意味します。
Columnには文字列や数値のほか、イメージ型など複数のデータ型を設定することができます。
Columnsは、Data Editor画面から編集できます。

### Image Column, Date & Time Column, URL Column 
Columnでは、それぞれ適切なデータ型を指定することができます。
- 画像データ：Image Column
- 日付/時刻データ：Date & Time Column
- URLデータ：URL Column

# 設定方法

## Image Column
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/a991299a-59f7-a479-7641-a1f39442947f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/da60c831-dc95-60a6-6049-a419d54ede1d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/0d30655f-ae1e-09e0-ba1d-95ee52b31919.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/8c3da2e9-a9ef-0d42-bcc3-9c68bbfe9aac.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/33cb2d64-6852-c3bb-db39-e8b260b20432.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/31491ad5-2ebd-ea0b-5c5a-b827a0d54abf.png)

## Date & Time Column
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/daf62ec0-8236-c434-0c83-045f8a43aa0d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/7ddb649c-bda7-5b14-afe1-e033337e37fe.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/71f5dd44-5117-5263-d968-46ea351899f6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/721260c9-d597-2d9c-c1f7-468544271253.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/1dc47343-086f-76b2-0aed-ac99e3fe5cec.png)

## URL Column 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/ab725268-d93d-386c-61a7-dc6a194e676d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/885f7d3c-c5d3-584d-4f76-c9c3c27c9812.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828853/7ee3a97e-1bd1-147a-6e2c-26f2cef978a1.png)

# ユースケース
- Image Column
    - プロフィール画像をはじめ、画面表示したいアイテム・項目一覧のサムネイル画像、ページヘッダー画像、イベントでの風景写真など、あらゆる場面での画像表示に役立つカラムです。
- Date & Time Column
    - アンケート回答時刻や出退勤日時、入社日、誕生日、データ更新日時など、時刻データの管理・活用を伴う場面で利用できます。また、画面表示では日付のみの表示であっても、秒単位で時刻データを取得できるので、あとから細かい時刻データ（何時何分何秒）が必要になっても安心です。
- URL Column
    - 外部ウェブページやポートフォリオ、SNSページ、参照資料リンクなどを、文字列データとしてではなくリンク情報付きのデータ（URL）として扱いたいときに役立ちます。

# 参考
- Glide公式ページ：https://www.glideapps.com/
- Glide Docs：https://www.glideapps.com/docs
    - Glide Docs > User-specific columns： https://www.glideapps.com/docs/user-specific-columns
GitBashでRecceを使う

# Recceについて

`Recce`については、拙著の以下の記事を参照していただきたい。

https://qiita.com/niiiiishiii/items/8f0118a2b3aad603c8d1

# GitBashで起きるエラー

Windows環境にてWSL2を使っている場合は問題ないが、GitBash上で以下のように`Recce`をインストールしようとするとエラーが発生し、失敗する。
```console
$ pip install recce

(略)

Building wheels for collected packages: pyminizip
  Building wheel for pyminizip (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for pyminizip (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [5 lines of output]
      running bdist_wheel
      running build
      running build_ext
      building 'pyminizip' extension
      error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pyminizip
Failed to build pyminizip
ERROR: Could not build wheels for pyminizip, which is required to install pyproject.toml-based projects
```

`Recce`自体に問題があるわけではなく、`Recce`の依存ライブラリの`pyminizip`のインストールに失敗している。

# エラーへの対処

エラーメッセージに記載された以下リンクからBuild Toolsをダウンロードする

https://visualstudio.microsoft.com/visual-cpp-build-tools/

Build Toolsをインストールすると、Visual Studio Build Tools 2022が自動で起動する。
Windows開発用のコンポーネントがインストールできるが、「個別のコンポーネント」タブから以下にチェックを入れてインストールをクリックする。

- MSVC v143 - VS 2022 C++ x64/x86 ビルドツール(最新)
- Windows 11 SDK (xx.x.xxxxx.x)

![visual_studio_build_tools_2022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2226432/8f3f870a-5270-28b4-d414-7bc38ff42ecf.png)

インストールが完了した後に、`Recce`を再度インストールすると、今度はインストールが成功するはずである（再起動は必要ない）。

```console
$ pip install recce

(略)

Successfully built pyminizip
Installing collected packages: ..., pyminizip, ..., recce 
```

Windows 11で問題ないこと確認しているが、Windows 10を使用している場合は、Windows 10のSDKをインストールすれば良いと思われる。

# 考えられる原因

エラーの原因となった`pyminizip`だが、これはパスワード付きzipファイルをWindowsで扱うことができるライブラリのようである。

https://pypi.org/project/pyminizip

`pyminizip`のインストール時にWindows SDKをリンクしてビルドしている（Windows SDKを通じてzipファイルを扱っている）っぽい。そのため、開発者向けのWindows SDKを予めインストールしていないと、ビルドに失敗すると思われる。

# 参考

https://stackoverflow.com/questions/40018405/cannot-open-include-file-io-h-no-such-file-or-directory
[Mac] ハードディスクのアイコンがFinderに表示されない

# 環境
MacBook Pro (2.3 GHz 8コアIntel Core i9)
macOS 14.0（23A344）

# HDのアイコンが表示されていない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/4855c83e-066a-2b53-b17c-78df1d63d3e8.png)

# 表示させる方法
Finder > 設定 > サイドバー > ハードディスクに**チェック**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/0f185444-43a3-a43d-3601-ca6fdb56af96.png)


# 完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/83ed8dc0-e76f-d947-3abe-46942bf0ceb5.png)

# 参考リンク
- [Mac｜HD・ハードディスクのアイコンが表示されないときの表示方法](https://togai.jp/2021/04/14/643)
【AWS Lambda】Responseの返し方一覧


※Node.jsのSyntax、Naming Conventionで記載します。

1. Return（シンプルで読みやすく、分かりやすいので推奨）

    シンプルに`return`で呼び元に値を返します。

    処理をキャンセルする場合は、`throw new Error()`を使います。

    非同期処理の場合も、`async/await`を使い、`return`や`throw new Error()`で処理を続行、キャンセルする方法が[推奨](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html#nodejs-handler-async)されています。

    ```javascript:index.mjs
    export const handler = async (event, context, callback) => {
      if(event.request.something === 'error value') throw new Error('Error')
      return event;
    };
    ```
    <br/>

1. callback

    `callback(null, 'Success')`で呼び元に値を返すことができます。

    キャンセルの場合は、`callback('Error')`となります。

    処理を続行する`callback(null, 'Suucess')`は、即座に実行されるわけではなく、Event loopの中身が空になったら実行されるため、Lambda内で非同期処理を扱う場合に効果を発揮します。ただし、[推奨ではありません。](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html#nodejs-handler-callback)
    

    ```javascript:index.mjs
    export const handler = (event, context, callback) => {
      if(event.request.something === 'error value') callback('Error')
      callback(null, event);
    };
    ```

    <br/>
1. context

    以下に記載のように、Responseを返すことができます。

    ただし、古いやり方（2015年くらい）で、最新のドキュメントには記載されていないので、あえて選択する必要はないです。

    `context`の詳細を知りたい方は、この[記事](https://qiita.com/kinzal/items/ca3b8a104847c684a249)が詳しいです。

    ```javascript:index.mjs
    export const handler = async (event, context, callback) => {
      if(event.request.something === 'error value') context.fail('Error')
      context.succeed(event);
    };
    ```


## 最後に

LambdaはAWS Serviceのイベントトリガーに設定されたり、Rest Apiとして使われたり多様な役割を果たします。ドキュメントも豊富でサンプルが様々な書き方で記載されており、混乱したので一度整理してみました。
最小努力と最短時間でSC-900合格記

前回(MS-900)に引き続きSC-900も無事一回で合格しました。
管理者でもないし、セキュリティまわりのお仕事もしてませんがMS-900で得た知識でなんとなく行けそうだなーと思ったので受験。
毎度の如くほぼ当日詰め込みショートカット勉強法なので、きちんと正攻法で勉強することをお勧めします。

過去の体験記はこちら

https://qiita.com/ponponmikankan/items/fd363bb0323569d3676f

https://qiita.com/ponponmikankan/items/77202be0de32cda5893d


## 前提

あくまでも一般ユーザーとして、社会人生活始まってからOffice製品を利用中。
情シスや管理者経験などはしたことないです。
セキュリティや監査のお仕事もしていません…。

## 参考にした勉強法

今回はなにも参考にせず（…え）、SC-900の対策赤本頼みで乗り切りました。

## 実際の勉強でやったこと

### ①まずは模擬試験を受けてみる(20分程度)

https://learn.microsoft.com/ja-jp/credentials/certifications/security-compliance-and-identity-fundamentals/practice/assessment?assessment-type=practice&assessmentId=11&practice-assessment-type=certification

資格のページから公式の模擬試験が受けられます。
ノー勉でトライし4割程度。試験時間本番は45分ですが20分程度で終了。
全て回答し終わると何分かかったかと、正誤が出てきます。カテゴリごとの得点も出てくるのでどこが弱いかすぐにわかります。

もちろんわからない単語もあるのですが、やはりMS-900と試験範囲がかぶっているためラッキー問題もあり。とりあえず間違えたものはNotionにため込んでおきました。

### ②「MCP教科書 Microsoft Security, Compliance, and Identity Fundamentals（試験番号:SC-900）」を購入し読む(3時間程度)

https://www.shoeisha.co.jp/book/detail/9784798182476

マイナーそうな試験なのにありがたいことに出版されています（翔泳社さんありがとう）。

MS-900よりも試験範囲が狭いため、若干書籍も薄め。バタバタしておりLearn一切読まない暴挙で、前日の夜と当日の朝急ぎで勉強しましたが、MS-900と重複が多いためわりとさくさくとこなせました。

### 試験の感想

PL-900、MS-900同様、試験時間45分ですが、20分で終了。
なんと赤本から一字一句そのまんまのラッキー問題が5問くらいでておりました。とりあえず受かるのが最優先！な受験される方は赤本の問題を暗記するとよいかもです。

…というわけで、今回も超最低限勉強法で無事合格！
もはや自分が何を目指しているのか謎ですが、次はAZ-900にチャレンジしたいと思います🙄（試験日程を申し込むことで追い込むスタイル）
AWS ElastiCache入門：簡潔に理解するクラウドコンピューティングの基礎

# Amazon ElastiCache とは :beginner:
Amazon ElastiCacheは、Amazon Web Services（AWS）が提供するインメモリーデータストアおよびキャッシュサービスです。ElastiCacheを利用することで、高速かつスケーラブルなデータキャッシングを実現し、アプリケーションのパフォーマンスを向上させることができます。ElastiCacheは、MemcachedとRedisの2つの人気のあるオープンソースのインメモリーデータストアをサポートしています。


<img width="25%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3690843/1bdca233-814f-80ef-e48b-a9fcca39528b.png">

## Amazon ElastiCacheの特徴
高速なデータアクセス
ElastiCacheは、メモリ内にデータをキャッシュすることで、ディスクI/Oに依存せず、高速なデータアクセスを提供します。

スケーラビリティ
ElastiCacheは、必要に応じてキャッシュクラスターを自動的にスケールアウトまたはスケールインできるため、トラフィックの増減に柔軟に対応できます。

完全マネージドサービス
ElastiCacheは、AWSがインフラの管理やメンテナンスを行うため、ユーザーはキャッシュの運用に集中できます。

高可用性とフォールトトレランス
ElastiCacheは、リードレプリカやマルチAZ配置をサポートしており、高可用性とフォールトトレランスを実現します。

## MemcachedとRedis
### Memcached
Memcachedは、シンプルで高パフォーマンスな分散型キャッシュシステムです。

特徴
シンプルなデータモデル: キーと値のシンプルなデータストア。
高パフォーマンス: 軽量で高速なキャッシングを提供。
スケーラビリティ: 水平方向にスケール可能で、大規模なデータキャッシュが可能。

### Redis
Redisは、リッチなデータ構造をサポートするインメモリーデータストアです。

特徴
多様なデータ構造: リスト、セット、ソート済みセット、ハッシュ、ビットマップなどをサポート。
永続化機能: データの永続化が可能。
高可用性: 自動フェイルオーバー機能を持つリードレプリカをサポート。
スクリプティング: Luaスクリプトを使用した複雑な操作が可能。

## 利点と制約
### メリット
パフォーマンス向上: データアクセスが高速化され、アプリケーションの応答時間が短縮されます。
スケーラビリティ: トラフィックの変動に応じて自動的にスケールアウトやスケールインが可能です。
運用負担の軽減: インフラ管理がAWSによって行われるため、運用負担が軽減されます。
多様な選択肢: MemcachedとRedisのどちらかを選択できるため、ニーズに合わせたキャッシングが可能です。
### デメリット
コスト: 使用量に応じてコストが発生するため、大規模な利用の場合にはコスト管理が必要です。
キャッシュの一貫性: キャッシュデータとデータベースのデータの一貫性を保つためには、適切なキャッシュ戦略が必要です。
#### ユースケース
ウェブアプリケーションのパフォーマンス向上
動的なウェブコンテンツのキャッシュを行うことで、ページロード時間を短縮し、ユーザー体験を向上させます。
#### セッション管理
ユーザーセッションデータをキャッシュすることで、セッション管理のパフォーマンスを向上させます。
リアルタイムデータ処理
ゲームや金融取引などのリアルタイムデータ処理において、低レイテンシのデータアクセスを実現します。
# まとめ
Amazon ElastiCacheは、高速でスケーラブルなインメモリーデータストアおよびキャッシュサービスを提供します。MemcachedとRedisのサポートにより、ユーザーはニーズに応じたキャッシングソリューションを選択できます。ウェブアプリケーションのパフォーマンス向上やリアルタイムデータ処理に最適であり、AWSの完全マネージドサービスとして運用負担を軽減します。ElastiCacheを効果的に活用することで、アプリケーションのスケーラビリティとパフォーマンスを大幅に向上させることができます。
# 【参考】
https://aws.amazon.com/jp/elasticache/
[シェル] パターン置換 "${parameter/pattern}" を用いたパターン削除

パラメータ展開 `"${parameter/pattern/string}"` を用いてパターン置換を行えますが、`string` または `/string` をなくすとパターン削除を行えます。

パターンに関しては別記事にしました。

参考「[シェルのパターンマッチング - Qiita](https://qiita.com/kerupani129/items/2d3f8cfa17856e25a5fc)」

※パラメータ展開の詳細は `man bash` 等を参照。
※パターンマッチングの詳細は `man bash` 等を参照。

参考「[3.5.3 Shell Parameter Expansion - Bash Reference Manual](https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion)」
参考「[3.5.8.1 Pattern Matching - Bash Reference Manual](https://www.gnu.org/software/bash/manual/bash.html#Pattern-Matching)」

# 1. 最長一致

|パターン置換を用いたパターン削除|意味|
|-|-|
|`"${parameter/#pattern}"`|前方一致<br>`"${parameter##pattern}"`|
|`"${parameter/%pattern}"`|後方一致<br>`"${parameter%%pattern}"`|
|`"${parameter/pattern}"`<br>`"${parameter//pattern}"`|部分一致|

※パラメータ展開 `"${parameter/#pattern}"` および `"${parameter/%pattern}"` はシェルオプション `nocasematch` の影響を受けますが、パラメータ展開 `"${parameter##pattern}"` および `"${parameter%%pattern}"` は影響を受けません。

パラメータ展開 `"${parameter/pattern/string}"` は最長一致でパターン置換を行うため、パターン置換を用いてパターン削除を行う場合も同様です。

```bash:例
# 
function f() {

	local -r parameter='foo bar baz'

	echo "${parameter##* }"
	echo "${parameter/#* }"

	echo "${parameter%% *}"
	echo "${parameter/% *}"

	echo "${parameter/ }"

	echo "${parameter// }"

}

f
```

```text:例の実行結果
baz
baz
foo
foo
foobar baz
foobarbaz
```

# 2. 最短一致

パラメータ展開 `"${parameter/pattern/string}"` は最短一致でパターン置換を行えないため、拡張パターンを用いる等して最長一致に書き換えるか、またはパターンマッチングでなく正規表現等で置換します。

※シェルオプション `nocasematch` の影響の有無に注意。

```bash:例
shopt -s extglob

# 
function f() {

	local -r parameter='foo bar baz'

	echo "${parameter#* }"
	echo "${parameter/#*([^ ]) }"
	[[ "$parameter" =~ ' '(.*)$ ]] && echo "${BASH_REMATCH[1]}" || echo "$parameter"

	echo "${parameter% *}"
	echo "${parameter/% *([^ ])}"
	[[ "$parameter" =~ ^(.*)' ' ]] && echo "${BASH_REMATCH[1]}" || echo "$parameter"

}

f
```

```text:例の実行結果
bar baz
bar baz
bar baz
foo bar
foo bar
foo bar
```
応用情報技術者に一発で合格するための午後の戦略

こんにちは。昨日は応用情報の合格発表でしたね。筆者も無事に応用情報に合格することができました。半年に一回の試験、絶対に一回で受かりたい！という気持ちを強く持ち、対策を進めていたので、これから受験する方の参考になればと思い、記事を作成しました。

## 方針①広く学習し、本番で簡単な問題を選べるようにする

- 午後問題の難易度ははっきり言って運要素がかなり強いです。過去問を解いていて、どの問題を選択しても三割～ほぼ満点まで本当に点数がばらつきます。勉強時間はかかりますが、できる限り受かる確率を高めるには勉強範囲を広げるしかないと思います。

## 方針②ネットワークは必ず勉強する

- 必須の情報セキュリティでネットワークの知識が絡んでくることがあるため、たとえで午後ネットワークを選択しないとしても、ネットワークの勉強を完全に避けるのはおすすめできません。しかも、ネットワークは体系的な学習が必要で午前の問題を回しているだけでは基礎が身につきにくいのでなかなか厄介な存在です。ネットワークを捨てる場合は、必須の情報セキュリティが難しかった場合に点数を大きく落とすことを覚悟しておく必要があります。

## 方針③問題数が極端に少ない設問は避ける

- やや本番のテクニック的な話になりますが、たまに極端に設問数の少ない（その代わりすべて記述式）設問に当たることがあります（特に問11のシステム監査）。一つ間違えた時のダメージが大きいので、よほど自信がない限り避けるのが吉です。



## 午後の選択問題おすすめ

- 問1 情報セキュリティ◎★
- 問2 経営戦略〇★
- 問3 プログラミング
- 問4 システムアーキテクチャ
- 問5 ネットワーク〇★
- 問6 データベース
- 問7 組み込みシステム開発
- 問8 情報システム開発〇
- 問9 プロジェクトマネジメント〇
- 問10 サービスマネジメント〇★
- 問11 システム監査〇★

※◎は必須、〇は筆者が過去問演習していたもの、★は筆者が当日(R6春)選択したもの

## 問2経営戦略

- 年によって難易度の差が激しいです。簿記や会計が得意ならかなり有利だと思います。ただ、簿記3級のレベルだと満点は難しいです。
- 簡単な年に当たったときだけ選択するという戦略もありですが、私は経営戦略で点数を安定させたかったので力を入れて勉強しました。
- 簿記三級でやるような仕訳は出題されず、フレームワークなどを利用した経営戦略に関する問題がメインとなります。難しい年だと、中小企業診断士で出題されるような経営指標（売上高経常利益率など）が出題されることもあります。筆者は、中小企業診断士のテキストを使って少し知識を補強しました。

## 問5ネットワーク

- ネットワークも年によって難易度の差が激しいです。筆者が受けた時はたまたまネットワークが簡単だったので、試験途中であまり出来が良くなかったサービスマネジメントを捨てて、こちらに切り替えました。

## 問8情報システム開発

- 出題テーマが年によって大きく変わるので、難易度というよりも、実務で経験のあるものが出題されるか、が当日選択するかに影響してくることが多そうです。

## 問9,10,11

- いわゆる文系科目です。こちらの三問は、過去問演習を繰り返すことで比較的点数が安定する傾向にあります。