OmniAICreator/Qiita-1.07M huggingface dataset:
スタックを活用した文字列展開アルゴリズム

## 問題概要
与えられた文字列には、括弧で囲まれたパターンと繰り返し回数が含まれています。この文字列を解釈し、括弧内のパターンを繰り返して最終的な文字列を返すことが目標です。括弧は入れ子になっている場合があり、それぞれのパターンは括弧の外にある数字に基づいて複数回繰り返されます。

### 例
- 入力: `"3(a2(b))ef"`  
  出力: `"abbabbabbef"`
- 入力: `"2(2(ab)3(2(ac)))"`  
  出力: `"abacabacabacabacabacabacabacabac"`

---

## 使用するデータ構造
### 1. **スタック (Stack)**
- **スタック**はLIFO（Last In, First Out）構造で、最後に追加された要素が最初に取り出されます。
- この問題では、括弧を効果的に処理するためにスタックを使用します。入れ子になった括弧に遭遇したとき、スタックを利用してその括弧内のパターンを抽出し、繰り返し処理を行います。

## 問題解決のアプローチ

### 1. **文字列の走査と文字の処理**
- 入力文字列を1文字ずつ走査し、各文字をスタックに格納します。
- もし `)` に遭遇した場合、スタックを用いて直前の括弧内のパターンを処理します。

### 2. **括弧内のパターン抽出**
- `)` を見つけたとき、`(` が出てくるまでスタックから文字を取り出してパターンを構成します。
- パターンは逆順で格納されているため、正しい順序に並び替えます。

### 3. **繰り返し回数の計算**
- 括弧の外側にある数字を探し、繰り返し回数を計算します。複数桁の数字も処理できるように `idx` を使用して桁数を乗算しながら計算します。
- 繰り返し回数が0の場合、そのパターンをそのままスタックに格納し、0でない場合はパターンを繰り返して再びスタックに格納します。

### 4. **最終文字列の生成**
- 全ての文字を処理した後、スタックに残った文字を順に取り出し、最終的な文字列を構成します。
- 最終文字列は逆順で格納されているため、再度逆にして返します。

---

## 重要なポイント
1. **スタックを使った効率的な括弧処理**:
   - 入れ子になった括弧のパターンを効率的に管理できます。
2. **繰り返し回数の処理**:
   - 文字列パターンを正確に拡張するために繰り返し回数を計算します。
3. **入れ子になった括弧の解決**:
   - スタックを使用すれば、入れ子の構造でも正確にパースできます。

---

## コード例
```java
public class Solution {
    public String solution(String s) {
        StringBuilder answer = new StringBuilder();
        Stack<String> stack = new Stack<>();
        for (char item : s.toCharArray()) {
            if (item == ')') {
                StringBuilder tmp = new StringBuilder();
                while (!stack.isEmpty() && !stack.peek().equals("(")) {
                    tmp.append(stack.pop());
                }
                tmp.reverse();
                if (stack.peek().equals("(")) {
                    stack.pop();
                }
                int idx = 1;
                int sum = 0;
                while (!stack.isEmpty() && Character.isDigit(stack.peek().charAt(0))) {
                    sum += Integer.parseInt(stack.pop()) * idx;
                    idx *= 10;
                }
                if (sum == 0) {
                    stack.push(tmp.reverse().toString());
                } else {
                    StringBuilder tmp2 = new StringBuilder();
                    for (int i = 0; i < sum; i++) {
                        tmp2.append(tmp.toString());
                    }
                    stack.push(tmp2.reverse().toString());
                }
            } else {
                stack.push(item + "");
            }
        }
        while (!stack.isEmpty()) {
            answer.append(stack.pop());
        }
        return answer.reverse().toString();
    }
}
```

### 結論
スタックを使用することで、入れ子になった括弧や繰り返し構造を効率的に処理することができます。このアルゴリズムは、文字列を順に走査し、パターンを展開して繰り返し処理を行い、最終的な文字列を構成する方法で設計されています。
DockerHubにpushするときに詰まったこと

## この記事の目的
DockerFileから作成したイメージをDockerHubにpushしようとしたら、`no sush host` と言われてpushできなかった。
この問題の原因を見つけたので説明する。

## 唯一で最大の問題
DockerHubに登録した際、ユーザ名に大文字を含めてしまっていたが、登録時にDockerHub側で全て小文字に置き換えられていた。
本来ならば、`docker login` のときに気づくはずだが、GitHubと連携して登録をしていたため、気づくことができなかった。

## 解決方法
登録時のユーザ名を全て小文字に置き換えたものを今後、ユーザ名として扱う。
レコードフォルダ化(階層化)プラグインを紹介【kintone】

kintoneのレコードをフォルダ化(階層化)プラグインを作成しましたので紹介します。

# 特徴
・kintoneアプリのレコードをフォルダ化(階層化)できる
・階層化でマスタデータを地域毎や案件毎に区分けできる
・階層化プラグイン系のよくある欠点の「APIコール数の問題」を解決している
・kintone一覧の検索機能やソート機能はそのまま使える

# 動作例
kintoneのアプリ上で感覚的にフォルダ管理をすることができます。
![初期行数.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850653/19700ff0-4dd2-4c76-9319-c094c39fb11b.gif)

# 機能紹介

## 機能①：フォルダ管理機能
・画面上部の「新しいフォルダ」から現在のフォルダにフォルダを作成することができます。
・画面上部の「新しいレコード」から現在のフォルダにレコードを作成することができます。
　※通常の＋ボタンから作成したレコードは「HOME」へ保存されます。
・画面上部の「ゴミ箱を開く」からゴミ箱へ入れたファイルやフォルダを確認することができます。
![アクションボタン.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850653/82e58a7e-59f6-ab0a-984f-186c64b746ac.png)

## 機能②：フォルダアクション
フォルダの右端にあるメニューからフォルダアクションを操作できます。
![1730558573798.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850653/7e388024-d14a-ca2a-b058-3578ff02a162.jpeg)

### レコードの詳細画面を開く
レコードの詳細画面を開きます。
### 名前を変更する
フォルダの名前を変更することができます。
### このフォルダを移動する
フォルダを別のフォルダへ移動することができます。
※移動する際は配下のレコードやフォルダも移動します。
### ゴミ箱へ移動する。
ゴミ箱へ移動します。
※一度、ゴミ箱へ移動したフォルダでも別のフォルダへ移動することが可能です。

## 機能③：ファイルアクション
一覧でレコードを2秒間長押しすることでファイルアクションを開くことができます。
![1730560237549.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850653/602aad20-701f-3fe9-db5c-67f5fe0510da.jpeg)
### このフォルダを移動する
レコードを別のフォルダへ移動することができます。
### ゴミ箱へ移動する。
ゴミ箱へ移動します。
※一度、ゴミ箱へ移動したレコードでも別のフォルダへ移動することが可能です。

# プラグインの設定方法
プラグインは下記手順で設定可能です。
1．APIトークンを発行する。
※下記の権限のようにAPIトークンを発行してください。
![1730623474088.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850653/4c3b0b9a-2588-46c4-0b2b-8caa3f4dd778.jpeg)

2．プラグイン設定画面からフィールド設定、APIトークンの設定する。
プラグイン概要に記載のフィールドを参考にしてフィールド設定をしてください。
1．で発行したAPIトークンを連携設定に設定してください。
![1730561106360.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850653/95bf986c-326f-b614-778f-581d0fb2b02a.jpeg)

# その他トピック
## ゴミ箱を空にする方法
本プラグインはファイル(レコード)やフォルダをゴミ箱へ移動することができます。
ゴミ箱に移動したそれらのデータが不要な場合は以下の手順ですべて削除することができます。
1．ゴミ箱へ移動する。
2．「絞り込む」から格納フォルダの絞り込み条件を「次のキーワードを含む」に変更する。
3．kintoneの一括削除機能ですべて削除する。
※一括削除機能はアプリ設定の高度な設定から有効にしてください。

:::note alert
ゴミ箱/というフォルダを検索して削除する方法です。
他のフォルダに「ゴミ箱」と名の付くフォルダがあるとそれらも削除してしまうので注意してください。
:::
![ゴミ箱を空にする.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850653/7bf7d097-72f1-8908-1d77-727eb3f9a1f0.gif)

## APIコール数を圧迫しない設計
kintoneにはAPIのコール数制限があります。
https://jp.cybozu.help/k/ja/id/04044.html#limitation_limit_30

従来のファイル管理や階層化プラグインはAPIにてデータ取得をしていることが場合あり、
閲覧者が多い環境やデータ数の多い環境だとAPIの上限に容易に達してしまう問題がありました。

本プラグインではデータを**閲覧する際にAPIコールをしない設計**(kintoneの検索機能に準じている)のためAPIコール数を全く消費しません。
※レコード登録や名前変更の際はRESTAPIを使用してデータ登録や重複チェックをしています。

## ソート機能や検索機能がそのまま使える
kintone一覧で使えるソート機能や検索機能はそのまま使用することができます。

# 販売元
紹介したプラグインは以下にて購入できます。
[レコードフォルダ化プラグイン](https://idepenshop.stores.jp/items/6728c01cd3fe32212e70ba77)

他にもプラグインを紹介していますので興味があればご確認ください。
[イデペンショップ](https://idepenshop.stores.jp/)
Windows Server 2025の仮想化機能情報まとめ（GA時点）

# 本記事について
2024/11/1にWindows Server 2025がリリースされたとのことで仮想化基盤としての機能に注目して情報をまとめておきます。

# 情報ソース
- [MS Learn | Windows Server release information](https://learn.microsoft.com/en-us/windows/release-health/windows-server-release-info)
延長サポートの終了は2034/10/10と記載されています。
これまでのバージョンと同様に10年間ですね。地味ながらもAzure Stack HCIには無い特徴の一つです。
- [MS Learn | What's new in Windows Server 2025](https://learn.microsoft.com/en-us/windows-server/get-started/whats-new-windows-server-2025)
基本的にはこちらのページを見れば新機能、機能強化の内容を抑えられます。
- [MS Learn | Windows Server 2025 known issues and notifications](https://learn.microsoft.com/en-us/windows/release-health/status-windows-server-2025)
記載されている既知の問題には特に大きく影響するものは無い様子です。（2024/11/4pos）

# 仮想化基盤としての機能について
Windows Server 2025では仮想化基盤としての機能も多く強化されています。
強化された機能の内容は大きく1.Azure Stack HCIに追従した機能と2.Windows Server独自の機能の2つに分けられます。
列挙した機能はプレビュー時代に発表された情報ソースに基づくものも記載していますので、正式にサポートされるかは今後のドキュメントの更新を確認していきましょう。
## 1.Azure Stack HCIに追従した機能
- [シングルノード構成とストレッチクラスター構成のサポート](https://www.youtube.com/watch?v=QrAIfB4Y_ko)
この機能についてはMS Learnのドキュメントで見つけることができず、2024/3のWindows Server Summitの発表程度しか情報が見つけられませんでした。
- [GPU-P VMのライブマイグレーション対応](https://learn.microsoft.com/en-us/windows-server/virtualization/hyper-v/gpu-partitioning?pivots=windows-server)
- [ネットワークATC対応](https://learn.microsoft.com/en-us/azure-stack/hci/concepts/network-atc-overview?pivots=windows-server)
Azure Stack HCIのドキュメントにWindows Serverの情報として追記されています。
- [SDN機能の強化](https://learn.microsoft.com/en-us/windows-server/get-started/whats-new-windows-server-2025#software-defined-networking-sdn)
SDN機能の強化はWhat's newのページに要点がまとめられていますのでまずはこちらを参照。
- [NVMe強化](https://learn.microsoft.com/en-us/windows-server/get-started/whats-new-windows-server-2025#nvme)
NVMeのディスクにおけるパフォーマンス向上が記載されています。
NVMe over Fabricについての情報はドキュメントで見つけられませんでしたがWindows Server Summitでは発表されています。
- [OSConfig](https://learn.microsoft.com/en-us/windows-server/security/osconfig/osconfig-overview)
Azure Stack HCIで言うところのセキュリティの既定値機能の1つであるドリフト制御などをおこなう機能のようです。
Azure PolicyやWindows Admin Centerとも連携できるとのことでガバナンス管理として期待できます。

## 2.Windows Server独自（先行？）の機能
- [ワークグループクラスター(におけるライブマイグレーション機能)](https://learn.microsoft.com/en-us/windows-server/virtualization/hyper-v/manage/live-migration-workgroup-cluster?tabs=powershell)
以前プレビュービルドで検証した際のまとめは[こちら](https://qiita.com/biri/items/a052699f3078dc6999a3)。
- [高速ネットワーク（SR-IOV）](https://learn.microsoft.com/en-us/windows-server/networking/technologies/accelerated-networking/accelerated-networking)
2024/11/4現在ではドキュメントがまだプレビューになっています。

# まとめ
ハードウェアメーカーがサポートを表明するのはまだ少し先になるかと思われますが、今後のHyper-Vベースの仮想化基盤の選択肢として改めてWindows Serverが注目されようになると感じます。
Azure Stack HCI推しとしてはワークグループクラスターの機能などAzure Stack HCIにも機能が輸入されないかと期待しています。
Igniteも近いので引き続きAzure Stack HCI/Windows Server 2025に注目していきましょう。
2024年のTOPPERS RISC-V ワーキンググループの活動レポート

[TOPPERS RISC-V ワーキンググループ発足に向けて](https://qiita.com/zacky1972/items/8e946779bd9c87df1c15)を書いて，TOPPERS RISC-V ワーキンググループが発足して1年ほど経ちましたので，ふりかえりたいと思います．

## 細々と進めざるを得なかった事情について

2023年度のコンテスト時には，是非ともRISC-V ワーキンググループを強く推進してほしいという旨の激励を受けたのですが，私事ながら，2024年度初め時点で，2024年度中は激務にあることが予想されたので，活動開始を延期することを申し入れておりました．

その後，解消の見込みが立ってきたので，次項の技術検討会議から，徐々にワーキンググループ発足に向けて，細々と活動開始することにした次第です．

## TOPPERSプロジェクト　2024年度第1回技術検討会議への参加

2024年6月6日に開催されたTOPPERSプロジェクト2024年度第1回技術検討会議に参加しました．本田晋也先生がTOPPERS/FMP3カーネルをRISC-Vに対応させて，いくつかの論点についてディスカッションをしたいということでしたので，議論に加わりました．

この後も少しずつ書きます．
Amazon Cognitoメモ

Amazon Cognito（アマゾン コグニート）は、AWS（Amazon Web Services）が提供するユーザー認証、認可、ユーザー管理を行うためのサービスです。Cognitoを使うと、モバイルアプリやウェブアプリのユーザー認証やアクセス管理が簡単に実装でき、セキュアにユーザー情報を扱えます。

### Amazon Cognitoの主要機能
1. **ユーザープール（User Pools）**  
   Cognitoのユーザープールは、アプリケーションのユーザーを登録、認証、管理するためのディレクトリです。ユーザープールを使うと、ユーザー登録、ログイン、多要素認証（MFA）、パスワードリセットなどの認証機能を提供できます。ユーザーの認証が成功すると、CognitoはJWT形式のトークン（IDトークン、アクセス・リフレッシュトークン）を発行します。

2. **IDプール（Identity Pools）**  
   IDプールは、ユーザーに対してAWSリソース（S3、DynamoDBなど）へのアクセス権を付与するための仕組みです。これにより、認証済みおよび未認証のユーザーに対して異なるアクセス権限を設定できます。例えば、SNSアカウントや企業のIDプロバイダー（SAMLやOpenID Connect）を使ったフェデレーション認証にも対応しています。

3. **フェデレーション認証のサポート**  
   Cognitoは、ユーザーがGoogle、Facebook、Apple、AmazonなどのSNSアカウントや、企業のSAMLベースのIDプロバイダーでログインするためのフェデレーション認証もサポートしています。

### Amazon Cognitoのメリット
- **迅速な実装**: 認証機能を構築する時間と労力を大幅に削減できます。
- **スケーラビリティ**: 数百万のユーザーを対象にスケール可能で、アプリの成長にも対応。
- **セキュリティ**: AWSのセキュリティ基準に基づいたユーザー管理と認証が行えます。
- **カスタマイズ性**: サインアップ・サインインフローのカスタマイズ、カスタム認証ロジックやUIカスタマイズも可能です。

### 利用シーン
- **ウェブやモバイルアプリでの認証**: ユーザーのサインイン、サインアップ機能が必要なアプリケーション。
- **複数の認証プロバイダーを使ったアクセス制御**: 外部のSNSや企業IDからもアクセス可能にしたい場合。
- **AWSリソースへのアクセス管理**: 認証されたユーザーがアプリから直接S3などのAWSサービスにアクセスする必要がある場合。

Cognitoを利用することで、セキュアな認証とAWSリソースのアクセス管理をシンプルかつ柔軟に行うことが可能になります。
【Python基礎】データ型について

# 目次
[1.はじめに](#1-はじめに)
[2.4つのデータ型](#2-4つのデータ型)
[3.Float型の注意点](#3-Float型の注意点)
[4.String型の特徴](#4-String型の特徴)
[5.おわりに](#5-おわりに)

# 1. はじめに
この記事では、Pythonの4つのデータ型について紹介します。

特に、float型を扱うときの注意点などについては、改めて勉強して初めて知ったので学んだ記録としてここにまとめてみました。

# 2. 4つのデータ型
### ＊ int型（整数）＊
int型は、整数を表すためのデータ型です。
```sample1.py
ex_num_1 = 5
ex_num_2 = 0
ex_num_3 = -10
```

### ＊ float型（浮動小数点数）＊
float型は、浮動小数点数を表すためのデータ型です。
本記事の中程で説明をしますが、float型のデータを扱う際には誤差が生じる可能性があるので、注意が必要です。
```sample2.py
ex_num_1 = 1.2345
ex_num_2 = 0.0
ex_num_3 = -1.5
```

### ＊ string型（文字列）＊
string型(str型)は、文字列を扱うためのデータ型です。
以下の例のように、シングルクォートまたは、ダブルクォートで囲って定義します。
```sample3.py
ex_1 = 'This is a string.'
ex_2 = "This is also a string."
ex_3 = "123456789" # ex_3 = '123456789' でも可
```

### ＊ bool型（ブール値）＊
bool型は、真理値を表すためのデータ型です。
bool型には、「True」と「False」の2つのインスタンスがあります。
また、bool型はint型のサブクラスで「True」は「1」、「False」は「0」として扱われます。
```sample4.py
ex_1 = True
ex_2 = False
```

# 3. float型の注意点
Pythonのfloat型を扱う際には、誤差が生じる可能性があることを考慮する必要があります。
例として、以下を実行します。
```sample5.py
print(1.23 + 2.80)
```
```sample5.pyの実行結果
4.029999999999999
```
上記の通り、sample5.pyを実行した場合、結果は「4.03」にならず「4.029999999999999」が出力されます。
これは、PythonがC言語の上に作られており、C言語ではデータがbinaryで処理されるために引き起こされる現象のようです。

このような誤差を生じさせないための解決策として、2つの方法があります。
### 【解決策1：int型を活用する】
まず、1つ目はint型を活用する方法です。少数を整数に直して、int型として演算処理を行うことで誤差が生じるのを回避することができます。
```result1.py
result_1 = (123 + 280) / 100 # 1.23と2.80を100倍して整数として計算
print(result_1)
```
```result1.pyの実行結果
4.03
```

### 【解決策2：round()関数を使用する】
2つ目はround()関数を使用する方法です。round()関数を使用して四捨五入することで誤差が生じるのを回避することができます。
```result2.py
result_2 = 1.23 + 2.80
print(round(result_2, 2)) # round(四捨五入したい値, 小数点以下の桁数の指定)
```
```result2.pyの実行結果
4.03
```
ちなみに、round()関数は上記の例のように、小数点以下の桁数を指定せず、round(四捨五入したい値)のように記述することもできます。
この場合、結果は以下のように整数になります。
```sample6.py
ex = 1.23 + 2.80
print(round(ex)) # round(四捨五入したい値)
```
```sample6.pyの実行結果
4
```
:::note warn
注意
「四捨五入」と記載していますが、正確には少し違います。
Pythonのround()関数では、
・round(2.5) → 2
・round(3.5) → 4
のように丸められるので、「0.5」や「0.05」などを扱う際には注意が必要です。
(詳細に調べてはいませんが、round()関数で四捨五入ではなく、偶数丸めをする理由は、大量のデータを処理する際などに統計的な偏りを回避して、より正確な計算結果を得るためらしい...。)
:::
# 4. string型の特徴
Pythonのstring型には、いくつかの特徴があります。

* <strong>インデックスアクセス</strong>
文字列の各文字に、インデックスを使ってアクセスできます。
```sample7.py
ex = "orange"

print(ex[2])
print("apple"[4])
```
```sample7.pyの実行結果
a
e
```

* <strong>スライス</strong>
文字列をスライスできます。
```sample8.py
ex = "apricots"

print(ex[:3]) # 始まりを指定しない場合は、最初の文字から取得
print(ex[2:5]) # 3文字目から5文字目までを取得
print(ex[4:]) # 終わりを指定しない場合は、最後の文字までを取得
```
```sample8.pyの実行結果
apr
ric
cots
```

* <strong>結合</strong>
文字列を結合することができます。
```sample9.py
ex = "ab" + "-" + "cd" # 「+」で結合

print(ex)
print(ex[3])
print(ex[1:4])
```
```sample9.pyの実行結果
ab-cd
c
b-c
```
:::note info
ちなみに、ここまでで紹介してきたスライスなどの操作を行っても、最初に定義した文字列は保持されます。
↓↓↓↓↓↓↓↓↓↓
:::

```sample10.py
data = "sample text"
sliced_data = data[4:]

print(sliced_data)
print(data)
print(data[8])
print(data)
```
```sample10.pyの実行結果
le text
sample text
e
sample text
```

# 5. おわりに
本記事では、Pythonのデータ型についてまとめてみました。

float型の誤差やround()関数の偶数丸めなどについては、全く知らなかったのできちんと勉強し直してよかったなと思いました。
【今更だけど】ネットーワークトポロジの種類と用途についてまとめるよ。

# 【今更だけど】ネットーワークトポロジの種類と用途についてまとめるよ。

どうも、こんにちは、えっとっとです。  
今回は今更過ぎますがネットーワークトポロジの種類と用途についてまとめたいと思います。 
古の参考書を読み返した際にこの辺の知識を、知識とだけ知っていたので、用途など深堀りできればなと思います。また、現在大学3年生で卒業までにネットワークスペシャリストか情報処理安全確保支援士を取得しようと考えています。（その前に応用情報合格しろっていう話ではあるのですが....。受かってるといいな、午後試験ヤバい笑）

さぁ、前置きはさておき、本題に入りたいと思います。

## ネットワークトポロジって？？？ふわっと

```
「ネットワークトポロジ」とは、通信ネットワーク上にコンピュータや制御機器、および各種端末機器  
（以下、これらをすべて端末と総称します）がどのような形態で接続されるかを表す用語です。  
代表的なネットワークトポロジには、「スター型」、「バス型」、「リング型」などがあります。
⇛要はネットワークの接続の様子を点と線で表現しましたよー。って事。

参考文献1より
```
ついでにご存知の方もいると思いますが、トポロジー(topology)は位相幾何学という意味です。

関連ワードに物理トポロジー（物理的な線のつなぎ方に着目）や論理トポロジー（論理的なデータの流れに着目）などもあります。

## いよいよネットワークの接続形態の種類について解説

## スター型接続
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575047/e5906c56-c566-7253-4df8-b76f1081cf78.png)

複数の機器をハブなどの通信機器を介して自転車の車輪（スポーク状）のように接続する形態をスター型接続というらしい。

**この各種電子機器は、テレビ、ゲーム機、スマホなどを指す。**

**⇛スポークってなんだ？って人の為に**
```
自転車やオートバイ、スポーツカーなどの車輪の中心部から
車輪の枠（リム）に放射状に延びている針金状の部品﻿。
```

## バス型トポロジー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575047/2a4d15d4-3552-614c-8176-fbe2b02e61a8.png)

線が一個でも駄目だったら全滅

全ての機器を一筆書き出来るような構成の接続形態となる。

## リング型トポロジー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575047/5664f752-b158-5185-b456-1fe70ff66e55.png)

名前の通り各機器を輪っかのように構成する接続形態となる。
単純にバスの両端を繋いだ訳ではない。ある機器の信号が次の入力に1対1で繋がっていて、機器を順番に辿っていく事で伝送路を一巡する形になっている。
辿っていく順番は片方向で固定であるが、原則逆順に辿る伝送路も用意し、２重にすることが多いらしい。これで欠点のケーブル断線や機器故障による遮断を防ぐ事が出来る。
しかし、構築が非情に面倒なので一般家庭やオフィスなどではまず見ない・

## それぞれの長所と短所、そして用途

### スター型トポロジー
長所：高い信頼性と拡張性があり、トラブルシューティングしやすい。
短所：中央のハブに障害が発生すると全体が影響を受ける可能性がある。
用途：非情に汎用的である。企業や企業のローカルエリアネットワークなど。

### バス型トポロジー
長所：コスト効率が高く、設置が非常に簡単である。（ケーブル短いし、中央装置いらないよー）
短所：中央ケーブルに障害が発生すると全体が影響を受けてパフォーマンスが低下する可能性がある。
用途：小規模なネットワーク（デバイスの追加が難しい為。）

### リング型トポロジー
長所：データ転送が効率的で衝突が少ない。
短所：一箇所の障害で全体が通信不能になる可能性がある。
用途：[都市ネットワーク](https://www.cloudflare.com/ja-jp/learning/network-layer/what-is-a-metropolitan-area-network/#:~:text=%E3%83%A1%E3%83%88%E3%83%AD%E3%83%9D%E3%83%AA%E3%82%BF%E3%83%B3%E3%82%A8%E3%83%AA%E3%82%A2%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%EF%BC%88MAN%EF%BC%89%E3%81%AF,%E6%84%8F%E5%91%B3%E3%81%99%E3%82%8B%E3%82%82%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82)や広域ネットワーク、工業用の生産ラインの制御システムなどリアルタイムが求められる環境で使われるよ。

**⇛取り敢えず、どのトポロジーも基本的には中央主権的な弱点があるよね～**

### アホな俺「じゃあ全部P2Pでよくね？」
・パフォーマンスの不安定性
ノードの間の接続品質や帯域幅に依存するため、通信速度が安定しない事がある。
・管理の複雑さ
中央管理社がいないので、ネットワークの監視や制御が難しいよ。

当然だが全ての状況で最善なプロトコルはない！！

# 参考文献(参照日はいずれも2024年11月4日)
https://emb.macnica.co.jp/articles/7294/

https://wa3.i-3-i.info/word12190.html


ここまで、読んでくださりありがとうございます！
今度、高度試験受けるときもこうやってまとめながら学習するのも良いなと思いました！！（やっぱり、自分の言葉でまとめたノートを見ると頭に入りますよね）
ではまた！！
Googleスプレッドシートで日毎の売上から月単位の売上合計を簡単に集計する方法

# はじめに
お店の売上や支出、日常生活だと貯金額や出費をEXCELやスプレッドシートで日々管理されている方も多くいるでしょう。
その際に、日単位の売上や収入を、当月や前月の月単位の合計値を算出したい方も多くいると思います。

スプレッドシートでは、高度なプログラミングスキルを必要とすることなく、日単位の値を月合計値にすることができます。

今回は、Googleスプレッドシートで日毎の売上から月単位の売上合計を簡単に集計する方法を紹介します。

# 対象の読者
- 店舗の売上管理をスプレッドシートで行っている人
- 財務管理をスプレッドシートで行っている人

# 方法
今回は、商品の売上金額を題材とし、**「日毎の売上を商品ごとで月単位の売上合計」を算出する手順**について紹介します。データの期間は2024年7月1日から9月30日になります。
下記のように商品名ごとに、日毎の売上が集計されています。

![スクリーンショット 2024-11-04 18.16.08 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/bc15fae5-c3a8-7569-7db7-c442dae5d8dc.png)

![スクリーンショット 2024-11-04 19.51.45 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/364c3676-e86b-e689-1338-4922e9d05008.png)


なお、月単位の合計は「今月の合計値」と「前月以前の合計値」と分けて解説します。

### 今月の合計値算出方法
では、実際の集計に進みましょう。手順は２つです。
#### ① 集計する月の列を作成
月毎の合計値を出す前に、集計する月の列を追加します。
今回は元データに列を追加する形で対応していきます。
関数の`TEXT`を用いて日時の列から月の情報を取得します。
関数の使用方法は下記のように使います。

```
=TEXT(対象のセル,"yyyy/mm")
```

そうすると、日時の列の年と月の情報が新しく追加した`年、月`のカラムに追加されました。

![スクリーンショット 2024-11-04 20.09.29（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/b5a30272-b537-8f21-b89f-d76a5340084b.png)

#### ② ①で作成した列を基準に集計
次に、今月の売上合計値を出す手順に移ります。
関数の`SUMIFS`を用いて、集計していきます。
関数の利用方法は以下です。

```
=SUMIFS(集計したい列,条件範囲1,条件範囲1の対象セル,条件範囲2,条件範囲2の対象セル)
```

今回は、月毎・商品ごとの集計のため、`年、月`と`商品名`の2列を指定することになります。
そのため、指定方法は下記になります。

![スクリーンショット 2024-11-04 20.43.36 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/763ff4af-02df-73c4-4ea0-e4f86d73b7cb.png)

関数が終了すると、下記のように`今月の売上`の列にその月の商品ごとの売上が算出されました。
同じ商品でも7月と8月で値が異なっているほか、商品ごとでも違う値が集計されていることが確認できます。

![スクリーンショット 2024-11-04 20.43.36 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/09996148-fdb4-4de1-ceb2-c816f50971e6.png)

![スクリーンショット 2024-11-04 21.39.20 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/58e825f7-c9a6-b3e5-cae8-0f6df08a5459.png)


### 前月以前の合計値について 
前月以前について月単位で出す場合は、①の手順で少し手を加える必要があります。
たとえば、前月の月合計を出す場合は、対象セルから1を引いた値で`TEXT`の関数を使います。

```
=TEXT(対象のセル-1,"yyyy/mm")
```

![スクリーンショット 2024-11-04 21.49.18（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/817bc6c8-a6a9-286c-0a80-4ddb23a3ea36.png)

その上で、`SUMIFS`関数を使います。商品の条件範囲は今月の場合と同じで問題ないです。
年、月について、`条件範囲`の箇所ですが範囲は`今月の年、月`、`条件範囲のセル`については`1ヶ月前の年、月`を指定します。データの対象期間が2024年7月1日-9月30日なので、7月の前月の売上は0となります。

![スクリーンショット 2024-11-04 21.57.24 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/b3a8df1b-4f1b-4ee0-04ee-f5e278dca11c.png)

# まとめ
今回は、スプレッドシートを活用し、月単位の合計値を算出する方法について紹介しました。
高度なプログラミングスキルがなくとも、比較的簡単に集計することができました。

今回紹介した手法なら、1年前の同月の月合計なんかも算出できます。
大容量なデータをスプレッドシートで管理されている方は是非とも使ってみてください！
【Ruby】singleton_classについて

どうもこんにちは。

今回は`singleton_class`について勉強したので備忘録としてまとめます。

# singleton_class（シングルトンクラス/特異クラス）とは

**singleton_class（シングルトンクラス）** は、Rubyにおける特別なクラスで、特定のオブジェクトに固有のメソッドや変数を定義するために使用されます。

Rubyでは、すべてのオブジェクトが自身のシングルトンクラスを持っており、このクラスを通じてオブジェクトに一時的または特定の機能を追加できます。

# singleton_classの基本的な使い方

`singleton_class`は、オブジェクトのシングルトンクラスを取得するためのメソッドです。このクラスを操作することで、特定のオブジェクトに対するシングルトンメソッドやシングルトン変数を定義できます。

```rb
object.singleton_class
```

- `object`: シングルトンクラスを取得したいオブジェクト

```rb:サンプルコード
obj = Object.new

# シングルトンクラスを取得
singleton = obj.singleton_class

# シングルトンクラスにメソッドを定義
singleton.define_method(:greet) do
  "Hello from singleton class!"
end

# メソッドの呼び出し
puts obj.greet  # => "Hello from singleton class!"
```

# シングルトンクラスを使用してメソッドを定義する方法

## `singleton_class`を使用する方法

```rb
obj = Object.new

obj.singleton_class.define_method(:greet) do
  "Hello from singleton_class!"
end

puts obj.greet  # => "Hello from singleton_class!"
```

## defキーワードを使用する方法

```rb
obj = Object.new

def obj.greet
  "Hello from singleton method!"
end

puts obj.greet  # => "Hello from singleton method!"
```

## `define_singleton_method`を使用する方法

```rb
obj = Object.new

obj.define_singleton_method(:greet) do
  "Hello from define_singleton_method!"
end

puts obj.greet  # => "Hello from define_singleton_method!"
```

# クラスメソッドを定義する方法

## `self`を使用する方法

```rb
class MyClass
  def self.class_method
    "This is a class method."
  end
end

puts MyClass.class_method  # => "This is a class method."
```

## `singleton_class`を使う方法

```rb
class MyClass
  singleton_class.define_method(:another_class_method) do
    "Another class method defined via singleton_class."
  end
end

puts MyClass.another_class_method  # => "Another class method defined via singleton_class."
```

## `class << self`を用いてシングルトンクラスをオープンする方法

```rb
class MyClass
  class << self
    def class_method
      "This is a class method."
    end
  end
end

puts MyClass.class_method  # => "This is a class method."
```
エラー　Unpermitted parameter:

```
Unpermitted parameter: :phone_no. Context: { controller: OrdersController, 
action: create, request: #<ActionDispatch::Request:0x00007f5c82fcdb78>, 
params: {"authenticity_token"=>"[FILTERED]", "order_address"=>{"post_no"=>"", 
"phone_no"=>"09012345678"}, "controller"=>"orders", "action"=>"create", "item_id"=>"24"} }
```
もろに文章の中で教えてくれているエラーでした。
`phone_no` パラメータが `OrdersController` の `create` アクションで許可されていないことが原因。
現在の `order_params` メソッドで `phone_no` を許可する必要があるよ、と教えてくれています。

解決方法
`order_params` メソッド内で `phone_no` を `permit` に追加する。
以下のように `order_params` メソッドを修正すればOK。

```orders_controller.rb
def order_params
  params.require(:order_address).permit(:post_no, phone_no).merge(
  token: params[:token]
  )
end
```

分かりやすいエラーで助かりました。
Web制作における画像の形式一覧

# はじめに
学んだことを忘れないように備忘録として残しています

Web制作では、画像ファイルの形式選びがページのパフォーマンスや見た目に大きく影響します。
画像形式にはさまざまな種類があり、それぞれに特徴と最適な用途があります。
ここでは、代表的な拡張子「jpg」「png」「svg」について簡潔に説明します。


## jpg(ジェイペグ)

特徴：多くの色を滑らかに表現することができるため、特に写真などのフルカラー画像に適しています。圧縮技術によってファイルサイズを抑えることも可能。ただし、透過はできない。
用途：フルカラーの写真

## png(ピング)	
特徴：透過ができる。また、色の数が少ない場合でも高画質を保つことができます。ただし、使用する色の数が増えるとファイルサイズも大きくなってしまうため、大量の色が必要な写真には向いていない。
用途：透過のある写真、カラーの少ない画像

## svg(エスブイジー)

特徴：ベクター形式の画像で、どれだけ拡大・縮小しても画質が劣化しない。ただし、複雑なデザインや色数が多い場合はファイルサイズが大きくなりがち。
用途：ロゴ、アイコン

## まとめ

jpgは写真向きで軽量、pngは透過可能で背景を自由に設定できるためアイコンやデザインに適しています。svgはどのデバイスサイズでも鮮明に表示できるベクター画像で、ロゴやアイコンにおすすめです。
【Gitマージの罠】別のプルリクエストのマージも自動で勝手に行われてしまう現象

## 結論
先に結論からお伝えすると、以下が本記事でお伝えしたいことです。

### 本記事でお伝えしたいこと
**ブランチAがブランチBの全てのコミット履歴を含む場合、PR Aをマージすると、PR Bも自動で一緒にマージされ（たとGitによって判断され）てしまう**

※ブランチA, BとPR A, Bはそれぞれ以下の通り
ブランチA：developブランチから切ったfeatureブランチA
ブランチB：developブランチから切ったfeatureブランチB
PR A：「ブランチAをdevelopブランチにマージする」プルリクエスト
PR B：「ブランチBをdevelopブランチにマージする」プルリクエスト

## 「結論」の具体例
上記の具体例として、以下の1.~4.のようなシナリオがあります。

**1. featureブランチAの作成と開発**
- developブランチから切った、「featureA」というfeatureブランチを作成
- featureA上で、新しい機能Aを追加し、以下のコミットを実行
```:ターミナル
git commit -m "新機能Aを追加"
```
- featureAをdevelopブランチへマージするプルリクエストを発行

**2. featureブランチBの作成と開発**
- developブランチから切った、「featureB」というfeatureブランチを作成
- featureB上で、新しい機能Bを追加し、以下のコミットを実行
```:ターミナル
git commit -m "新機能Bを追加"
```
- featureBをdevelopブランチへマージするプルリクエストを発行

**3. featureBをfeatureAにマージして取り込み**
- 何かしらの理由で、featureBをfeatureAにマージする必要が生じたため、ブランチをfeatureAに切り替えた上で、以下のように、featureBをfeatureAにマージ
```:ターミナル
git merge featureB
```

:::note info
ポイント
このマージにより、featureAはfeatureBのコミット履歴を全て含んだ状態となります。
:::

**4. プルリクエストAをマージ**
- プルリクエストAのマージを実行

**上記1.~4.のシナリオを実行すると、結果として、プルリクエストAだけでなく、プルリクエストAと一緒にプルリクエストBも、自動的にマージが完了した状態となります。**

## 上記の事象が起こる理由
- 一言で言うと、**Gitの仕様**です。
- 上記の例で言うと、3.が終了した時点で、ブランチAは、ブランチBを取り込んだ状態（「新機能Bを追加」といったブランチBの全てのコミットを全て含んだ状態）となっています。
- そして、4.でプルリクエストAのマージを行うことにより、（ブランチBを取り込んだ）ブランチAがdevelopブランチに取り込まれるので、あたかもブランチBも取り込まれてマージされたような状態となります。
- 言い換えれば、あたかもプルリクエストBもマージされた状態となり、プルリクエストBが不要となります。
※というかそもそも、「新機能Bを追加」といったブランチBの全ての変更内容はすでにdevelopブランチへ反映されてしまっており、ブランチBをdevelopブランチにマージしようにも、ブランチBとdevelopブランチの差分が無くなってしまったのでマージができない
- そして、以上を踏まえた上でGitが、「プルリクエストBはすでに取り込まれて処理済みの状態となった」と判断し、プルリクエストBが自動的にclosedの状態（処理済みの状態）となってしまうのです。

## 補足：マージの順番
- 上記の例では、プルリクエストAを先にマージすると、もう片方のプルリクエストBが自動的にclosedとなりましたが、プルリクエストAではなく、プルリクエストBを先にマージした場合、もう片方のプルリクエストAは自動的にclosedの状態となりません。
- 理由は、プルリクエストBをマージしても、ブランチBにはブランチAのコミット履歴は含まれておらず、ブランチAとdevelopブランチには差分が存在し、ブランチAをdevelopブランチへマージするというプルリクエストAが成立するためです。

## まとめ
上記のようなGitの挙動を知っておくことで、意図しないマージによる混乱を防げるかと思います。正しい運用でトラブルを防ぎましょう。

最後までお読み頂き、ありがとうございました！この記事が少しでも参考になれば幸いで
【powershell】特定のプリンタドライバを使用しているプリンタを端末から削除する方法


```
# 特定のプリンタドライバ名を指定
$targetDriverName = "対象のドライバ名"  # 例: "Microsoft XPS Document Writer v4"

# 指定したドライバを使用しているプリンタを取得
$printers = Get-WmiObject -Class Win32_Printer | Where-Object { $_.DriverName -eq $targetDriverName }

# 該当するプリンタがあるか確認
if ($printers.Count -eq 0) {
    Write-Output "指定されたドライバを使用しているプリンタは見つかりませんでした。"
} else {
    # 該当するプリンタを削除
    foreach ($printer in $printers) {
        Write-Output "プリンタ $($printer.Name) を削除しています..."
        $printer.Delete()
        Write-Output "プリンタ $($printer.Name) を削除しました。"
    }
    Write-Output "処理が完了しました。"
}
```
自己紹介


## はじめに
初めまして。マティアと申します。
アウトプットの習慣を作るため、Qiitaにて投稿することとしました。
今回は私の経歴についてまとめることを目標といたします。

### 経歴
現在は27歳で、RPAエンジニアとして働いています。
現職では、WinActorというRPAツールを主に使用していますが、今はUiPath(まれにVBA)の案件に参画しています。

2019年4月　 地方私立文系大学を卒業後、営業職につく
2021年9月　 初転職　営業2
2022年12月　ITエンジニアとしてジョブチェンジ

### 学んでいること
UoPeopleという大学でComputer Scienceのコース(学科)を受講しています。N年後に学士号取得する予定です。
はじめの研修でJavaについて学びました。
UoPeopleでもJava、Pythonを今のところ学びました。
ある日、UiPathでロボット作成中に繰り返しの中に繰り返しを入れる部分があり、
コードで考えた方がわかりやすいと思い、なんとなく書き起こしたのがPythonだったため、
これから独学ではひとまずPythonにしてみようと思っています。

### これからやりたいこと
UoPeopleの授業に取り組みつつ、独学の学びを行い、アウトプットとしてこちらに投稿したいと思います。
WEB開発に参画できるように自己研鑽をしていきたいと思います。
どうぞよろしくお願いいたします。
【Ruby】instance_variable_getメソッドについて

どうもこんにちは。

今回はRubyの`instance_variable_get`メソッドについて、備忘録としてまとめました。

# instance_variable_getメソッドとは

`instance_variable_get`メソッドは、オブジェクトのインスタンス変数の値を取得するためのメソッドです。

Rubyでは通常、インスタンス変数はクラス内で直接アクセスすることはできず、アクセサメソッド（`attr_accessor`、`attr_reader`、`attr_writer`）を通じてアクセスします。

しかし、`instance_variable_get`を使用すると、これらのアクセサメソッドを介さずに直接インスタンス変数にアクセスできます。

# 基本的な構文

```rb
object.instance_variable_get(:@variable_name)
```

- `object`: インスタンス変数を持つオブジェクト
- `:@variable_name`: 取得したいインスタンス変数のシンボル。先頭に@を付ける必要があります

# instance_variable_setメソッドとの関係

`instance_variable_get`メソッドとペアでよく使用されるのが`instance_variable_set`メソッドです。`instance_variable_set`はオブジェクトのインスタンス変数に値を設定するためのメソッドです。

```rb
object.instance_variable_set(:@variable_name, value)
```

- `object`: インスタンス変数を持つオブジェクト
- `:@variable_name`: 設定したいインスタンス変数のシンボル
- `value`: インスタンス変数に設定する値

# サンプルコード

```rb:サンプルコード
class Person
  def initialize(name, age)
    @name = name
    @age = age
  end
end

person = Person.new("Alice", 30)

# インスタンス変数の値を取得
name = person.instance_variable_get(:@name)
age = person.instance_variable_get(:@age)

puts "名前: #{name}"
puts "年齢: #{age}"

# => 名前: Alice
# => 年齢: 30

# インスタンス変数の値を設定
person.instance_variable_set(:@age, 31)

# 更新された値を取得
updated_age = person.instance_variable_get(:@age)
puts "更新後の年齢: #{updated_age}"

# => 更新後の年齢: 31
```
UISliderで作る、重なり合う画像のグラデーション効果

## **1. はじめに**

iOSアプリ開発において、画像を重ねたレイアウトの透明度を変えることで、視覚的なグラデーション効果を作り出すことができる。レイヤーごとに透明度を変えることで、スライダーの操作に応じて見え方が少しずつ変化し、インタラクティブな視覚効果が生まれる。このブログ記事では、`UISlider`を用いて3つの画像の透明度を調整し、グラデーションのような効果を得る方法について解説する。

## **2. グラデーション効果の仕組み**

このコードでは、以下のロジックでグラデーション効果を実現している：

- **重ねた画像の透明度を動的に変更**：3つの画像を重ねた状態で、それぞれ異なる透明度が設定されている。スライダーの操作により透明度が変化するため、画像が重なりながら滑らかに見え方が変化する。
- **異なる透明度が重なって表現される**：透明度の変化により、前景の画像が後景の画像を覆うようにフェードイン・フェードアウトし、自然なグラデーション効果が視覚的に表現される。

こうした重なりによる透明度の変化は、複数の画像や色の要素が組み合わさる場面で、柔らかな変化や奥行きを感じさせるビジュアルを作るのに役立つ。

## **3. 実装コード**

以下に、グラデーション効果を実現する透明度調整の実装コードを示す。スライダーを操作すると、3つの重なり合う画像の透明度がそれぞれ少しずつ変わり、グラデーション効果が生まれる。

### UISliderの宣言

```swift
@IBOutlet weak var opacitySlider: UISlider!
```

### 初期透明度の設定

まず、各画像ビューに異なる透明度を設定し、重なったレイヤーがバランスよく見えるように初期値を指定する。なお、スライダーの初期値は任意での設定でよい。

```swift
override func viewDidLoad() {
    super.viewDidLoad()
    
    // 初期透明度を設定
    firstImageView.alpha = CGFloat(calcImageViewOpacity(level: "low", sliderValue: opacitySlider.value))
    secondImageView.alpha = CGFloat(calcImageViewOpacity(level: "medium", sliderValue: opacitySlider.value))
    thirdImageView.alpha = CGFloat(calcImageViewOpacity(level: "high", sliderValue: opacitySlider.value))
}
```

### UISliderの値変更時に透明度を更新するメソッド

次に、スライダーを動かしたときに透明度が変わる処理を実装する。透明度が滑らかに変わり、グラデーションが強まったり薄まったりするように見える。

```swift
@IBAction func opacitySliderChanged(_ sender: UISlider) {
    // UIViewを更新する
    firstImageView.alpha = CGFloat(calcImageViewOpacity(level: "low", sliderValue: opacitySlider.value))
    secondImageView.alpha = CGFloat(calcImageViewOpacity(level: "medium", sliderValue: opacitySlider.value))
    thirdImageView.alpha = CGFloat(calcImageViewOpacity(level: "high", sliderValue: opacitySlider.value))
}
```

### 透明度を計算する関数

それぞれの画像の透明度は、この計算関数で設定する。各画像ごとに異なる透明度の変化パターンがあり、これによって自然な重なりが表現され、滑らかなグラデーションが形成される。

```swift
func calcImageViewOpacity(level: String, sliderValue: Float) -> Float {
    switch level {
    case "low":
        return 1 - 2 * sliderValue
    case "medium":
        return sliderValue <= 0.5 ? 2 * sliderValue : -2 * sliderValue + 2
    case "high":
        return 2 * sliderValue - 1
    default:
        return 0.5
    }
}
```

## **4. おわりに**

このコードを使うことで、スライダーによって重なり合う画像の透明度が滑らかに変化し、視覚的に奥行きや変化を感じさせるグラデーション効果を作り出すことができる。透明度の変化を調整しやすいため、シンプルながら動きのあるUIを手軽に実装するのに適している。また、透明度の計算式やレイヤーの組み合わせを工夫することで、さまざまなビジュアル表現に応用することも可能である。
Dockerを使ったWebアプリのホスト

## 記事作成の動機
趣味の一環で<a harf=https://www.shuwasystem.co.jp/book/9784798068923.html>位置エン本</a>を参考に地図系のWebページを作成しようとしたのですが。。。環境構築すら怪しいことが分かったので、備忘録的に勉強内容を記録しておきます。

## Dockerを使ったWebサーバの開発環境構築
まずはDockerを使ってWebサーバをホストさせます。
### Dockerでアパッチを立ち上げる。
簡易的なWebページであれば、Apacheが簡単かつサクサク動くので、私のような初心者には最適です。
公式のDocker Hubに組み立て済みのアパッチイメージがあるので、それをPullしましょう。
```
docker pull httpd
docker run --name XXX -d -p 8080:80 -v "XXX:/usr/local/apache2/htdocs/" httpd
```

## 今後
LeafletはCDN(Content Delivery Network)を使えば特にライブラリを参照しなくて済みますが、ローカルでホストする可能性も考えて、ライブラリのインストールまで行いたいです。
Npmを使うらしく、Node.js関連の知識が必要になるので、今度はそちらも勉強します。
Dockerも不慣れなので、こちらも勉強していきたいです。

### 参考先
　https://qiita.com/kerupani129/items/60ee8c8becc2fe9f0d28
AWSコンソール上からWindowsServerにユーザを作成する

# はじめに
AWSコンソール上からWindowsServerにユーザを作成できる機能があることを知ったので実際に試してみました。

# 流れ
1.前提条件
2.AWS Systems Manager設定
3.IAMロール設定
4.OSユーザ作成
5.実機確認

# 1. 前提条件
・VPC・EC2等が作成済み
・SGのアウトバウンドで443ポートを開放済み
・OSに最新バージョンのSSMAgentがインストール済み(プリインストールされているAMIもあります)
・セッションマネージャで利用するKMSキーが作成済み(ユーザ作成時にパスワード設定する場合)

# 2. AWS Systems Manager設定
:::note info
※ユーザ作成の際にパスワード設定をしない場合は必要ありません
:::
はじめにフリートマネージャを利用してユーザを作成するために、セッションマネージャの設定を行います。
ナビゲーションペインより「セッションマネージャ」を選択し、設定タブから「General preferences」の編集を押下します。

「Enable KMS encryption」にチェックを入れ「KMS key option」にあらかじめ作成したKMSキーを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767946/56308f70-a32a-39f7-3631-148104994192.png)


設定を保存したのち、「KMS encryption」が「Enabled」と表示されていれば設定完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767946/05753d8f-47b1-e01f-a3be-b6d757499ef1.png)

# 3. IAMロール設定
EC2インスタンスにアタッチするIAMロールを作成します。

IAMロールにアタッチするポリシーは以下の2つです。

・AmazonSSMManagedInstanceCore(AWS管理ポリシー)
・KMSへのアクセス権限を与えるカスタマー管理ポリシー(ユーザ作成時にパスワード設定する場合)

2つ目のカスタマー管理ポリシーは下記の内容で作成してください。
```json:json
{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": "設定したKMSキーのARN"
  }
}
```

作成したIAMロールをEC2インスタンスにアタッチしたらIAMロール設定は完了です。

# 4. OSユーザ作成
Systems Managerのナビゲーションペインより「フリートマネージャ」を選択し、ユーザを追加したいインスタンスのノードID(＝インスタンスID) を押下します。全般から「ユーザとグループ」を選択すると現在サーバ上に存在するユーザの一覧が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767946/5fd3d987-658c-5d09-aa0e-476342246105.png)

右上の「新しいユーザーの作成」を押下します。
作成するユーザの名前、説明(オプション)、パスワード設定(オプション)を入力して「新しいユーザーの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767946/f071375d-a5cc-d9fe-ae56-2277b6f6ee1e.png)

ユーザの一覧に作成したユーザが追加されていることを確認し、OSユーザ作成は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767946/360dbb07-519b-4661-5b82-945c5c54ee1b.png)

今回は作成したユーザでRDP接続するためにユーザをグループに追加します。
作成したユーザを選択し、「アクション」から「ユーザをグループに追加」を選択
「Remote Desktop Users」を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767946/f1d27183-d582-2a77-3e2f-98879b36bade.png)


# 5.実機確認
実際にサーバにユーザが追加されているか確認します。
今回はフリートマネージャの機能の「リモートデスクトップ」を利用します。
全般の「リモートデスクトップ」から認証タイプ「ユーザ認証情報」を選択し、ユーザ名とパスワードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767946/cf229c29-bbfd-d812-a0b7-cdc462b99ccb.png)

「接続」を押下するとコンソール上からサーバに接続できます。
![スクリーンショット 2024-11-02 205711.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767946/6b5321ff-32c0-8327-b0e7-85c06d0dbf4f.png)

サーバ上の「computer management」でもユーザが作成されていることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767946/9f44c18f-f161-3ccb-d71a-096c7ec421e1.png)

# おわりに
コンソールからユーザを追加する機会はあまりないと思いますが、方法の一つとして頭の片隅に置いておきたいと思います。
【Ruby】ナンバードパラメータ

どうもこんにちは。

今回は、Ruby Gold ver3から出題範囲になったナンバードパラメータについて勉強したので、備忘録として残します。

今回はメモ程度です。

# ナンバードパラメータとは

ナンバードパラメータとは、`each`や`map`で使用するブロック引数を使用する代わりに使用することでコードをシンプルに書くことができるパラメータです。

# 従来のループ文

```rb
numbers = [1, 2, 3, 4, 5]
doubled = numbers.map { |number| number * 2 }
puts doubled

# => [2, 4, 6, 8, 10]
```

# ナンバードパラメータを使用した場合

```rb
numbers = [1, 2, 3, 4, 5]
doubled = numbers.map { _1 * 2 }
puts doubled

# => [2, 4, 6, 8, 10]
```

以上
JSTQB ALTAE CBT受験思い出し日記

## きっかけ

9月の中旬頃Xで、JSTQB AL テスト自動化エンジニアのCBT試験が10月末まで期間限定で可能というのを遅ればせながら知った。情報のキャッチアップしてなかった。
最終日まであと1ヶ月半だが受けてみるかと申し込でみることにした。
CBTなので最終日の近所で午前中受けられる場合を探すと、わりとすいている場所があったのでそこで受験することにして申し込んだ。
22000円は財布に安くはない。
CBTは初めてなので経験としても受けてみるかが目的の一つ。


## 結果
合格した。

## 試験内容
K-4レベルの問題が多かった。カウントしてないけど1/3から半分近くなかった?

## 合格の感触
JSTQB AL TA のときは全問埋めることできたけど受かったかどうか分かんねーなというので落ちたり受かったりしたが、今回も全部埋めたが受かったかどうか分かんねーなぐらいな感じだったので不安だった。3週間後の結果を待つか。という気持ちだった。

## 学習方法

### 聞き流し

シラバスを読み上げソフトで読み上げさせたものを出力して、ジムで運動しているとき聞く。
上の空で聞いていた。
ある程度クレンジングしたり清書したはずだが、改行が入っていてそこで息継ぎが入ったり、1節とかの節がふしと読まれたりする誤読がいくつかあったが、そこ修正するのに時間をかけたくないのでそのままにした。
VOCALOIDとVOICEBOX使って複数の音声で録音してみた。

### 問題を作って文章の理解と問題の乖離を埋める

シラバスを読んでも、それが出題される問題の解答に役立つ理解に繋がらないのが悩みだったが、JSTQBの試験の勉強会で自分でシラバスから問題を作成する方法を知ってから、それが役立ったが今回はそれをやりつつ全部シラバス読む時間がない。シラバスの文章から問題を作ってそれを回答するという作業を繰り返すのが、私にとっては試験合格のために理解を助けるシラバス学習方法なので、試験をAIで作ることにした。そこでLLMを使用した。現在ChatGPT有料課金しているので試してみた。
とりあえず、ISTQBのサンプル問題をテキストにして食わせ、JSTQBのシラバスも食わせて、サンプル問題をもとに、シラバスから1.2章の問題をK-2レベルで20問作ってとプロンプト書いてみた。やってみると問題は作るが、プロンプトで20問とか30問作ってと書いても5〜8問しか作らないし、連続して作らせると指定した章の問題を作るわけでもなく、コントロールが難しい。K-4レベルの問題は作ってとたのんでも、本物の試験で出るようなK-4の問題にはならない。これはシラバスのみが報源なので仕方がないと言えば仕方がない。そこがんばる時間もない。問題数は20問とかじゃなくと20個とか書くと作ってくれるが、連続して作ってもらうと大体5問しか作らなくなる。何故?

ある程度試して作業の流れが固定されたので、一々サンプル問題とか事前情報として上げるの大変なのでGPTsを作成した。ISTQBのサンプル問題と、JSTQBのシラバスを上げて、そこから問題を作るように指定したプロンプト指定し、
問題を作るときは、シラバスの一部をコピーして「次の文章からK-2レベルの問題を作成して。」毎回指定して、問題を作らせた。
問題は20問作ってと書いても大体5問しか作らない。だからコピーする文章の量は5問作ると内容が網羅されそうな量をコピーする。
そうやって問題を解くことによってシラバスを読んでいった。

何故かクセとして、4択のときA,B,C,Dの選択肢のうちBばっかりが正答になる。ランダムにしてと言ってもなる。

K-4の問題は実際のK-4の問題っぽくないが、そこは人間の理解と応用で試験本番に何とかする。

10月の始め頃までは時間的余裕があったが、最初は章全体の問題作らせていたのザックリな把握にしかなっていないかも知れない。 1,2,8,7,6,5 という順で読んでいった。
その後は、5問毎に作る作業になり、一度に進む文量は少なくなったが、読み込みの密度は上がった。

直前最後の週は学習している時間が少なくなって3章の後半が読み込めなかった。CBTの操作試すのも直前になってしまった。

そこまで理解できた感触はなかったし、試験のできもそこまで自身がなかったが受かっていた。

## 試験前日

試験の前日お試しCBTの操作の練習をした。本当は直前の週末にやる予定が前日になった。

## 当日と初CBTの感想

会場に着くと、書類を書かされて、サインしたり写真撮られたりした。不精鬚とか剃って行くべきだった。
試験会場に入るには荷物一切合財持って入れない。PC入力だからペン類も、時計もティッシュも。ポケットも空にする。
かばんはロッカーに入れるが、ロッカーの幅が20cmだから入れるときぎりだった。
メモ用のペンとボードは渡してもらえる。ただし一度書くと自分では消せない。
予約した試験時間前でも空いていれば、上の事前の準備が終れば試験が開始される。
席に案内されて、PCにログインしたら開始される。

試験会場には、渡されたIDカードっぽいものと、渡された筆記具と、本人確認に使った免許証を持って入る。免許証もロッカーにしまったら、それも持って入れと言われてあわてて出した。

試験する会場は個室ではなく、PCが長机で並んでいて、モニターの背よりちょっと高いパーティションで区切られた場所で、向こうや横の人の頭が見れる感じだった。
まあ他人は別の試験受けてるだろうから見えても何にもならないが。
ガラガラなのに試験中の隣の人の席に案内するの、試験中の人も俺も気になるんじゃないの?どういう基準?システムが割り振るの?
前の席に人が座ってお互い足を前に伸ばしたら多分ぶつかる。

試験の残り時間の確認は時計の持ち込みはできないし、部屋に時計がないし、PCに現在時刻の表示もないが、残り時間のカウントダウンが右上に表示されているので、それで確認する。
現在時刻よりも残り時間の方が確かに親切かも。

試験自体はJSTQBの試験はチェックボックスの選択だけなのでテキスト入力しないからキーボード配列や漢字変換の問題はどうなのかは不明。

回答の見直しは、後で見直すのチェックも付けてそこを目印に飛べるし、目印なくても任意の場所に飛べるしジャンプする目次に戻れる。

試験がタイムアップになったら直後にアンケートがあって、それが終ると試験終了になる。ただし10分間の制限時間があり、ここはソフトウェアテスト勢としてはタイムアップをねらうべきかと思ったが、やめた。


## 後日
10月31日に受けたからなのかは知らないが、11月1日に試験結果が送られてきた。2,3週間かかるというのは何だったのか?
そして、アンケートがまた送られてきた。試験会場の受け付けの人の仕事内容のアンケートで、なかなかCBTだかピアソンだか運営会社もシビアな世界だなと思った。

ISTQB SCRに登録されるのはいつ?

この学習方法で行けるかどうかはまた別の試験受けてみて確認すればよいか?
2種類のハイフン「－」と「−」が全く別の記号だったので文字列が一致しなくて困った話

## 結論

先に結論を記載しておく。

今回問題になった2つのハイフンは以下の文字コードである。

| 記号 | Unicode番号 |
| --- | --- |
| － | U+FF0D |
| − | U+2212 |

## 発生した現象

データベース上の2つのテーブルに登録した文字列が、一致しているかどうかを判定して処理をするシステムを構築していた。

このとき、データベース上の2つのテーブルには「サンプル－1」「サンプル−1」と登録されていた。

この文字列を比較して一致判定をするが一致せず、原因を探してみるとハイフンのような文字が文字コードの異なる別の記号だったことが確認できた。

これらの文字列は顧客からExcelにてもらったファイルをインサートしただけなので、文字コードの違いに気づくのに時間がかかった。

## それぞれ何の記号なのか？

### U+2212

せっかくなので、今回の2種類の記号が何の文字なのかを少し調べてみた。

`U+2212` に関しては先人がQiita上にまとめてくれた一覧に記載されているので、そちらの記事リンクを貼り付けておく。

https://qiita.com/ryounagaoka/items/4cf5191d1a2763667add

上記の記事によると `U+2212` は全角のマイナス記号のようだ。

### U+FF0D

`U+FF0D` に関しては上記の記事にも記載がなかったので、調べてみると「全角ハイフンマイナス」という記号らしい。

https://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%95%E3%83%B3%E3%83%9E%E3%82%A4%E3%83%8A%E3%82%B9

https://symbl.cc/jp/FF0D/

「ハイフンマイナス」と呼ばれている理由としては、コンピュータ上ではハイフンとマイナスを区別していないので、「ハイフンマイナス」という名称になっているそうだ。

https://wa3.i-3-i.info/word12667.html

## まとめ

今回は、顧客からもらったExcelファイルをそのままインサートしたので、文字コードの違いに気づかなかった。

顧客に限らず他人が作成したファイルをデータベース上で扱うときは、ハイフンのようなややこしい文字列が含まれる場合は、文字コードのことを頭の中に入れておくと問題の早期発見につながるかもしれない。

## 参考資料

https://qiita.com/ryounagaoka/items/4cf5191d1a2763667add

https://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%95%E3%83%B3%E3%83%9E%E3%82%A4%E3%83%8A%E3%82%B9

https://symbl.cc/jp/FF0D/

https://wa3.i-3-i.info/word12667.html
データに関する基本用語

## はじめに

昨今、発展が目覚ましい生成AIや顧客の購買データ分析などの技術の礎となっているのはデータです。現在ではデータはなくてはならないものになっており、企業の財産である「人」「モノ」「金」に次ぐ第４の資産と言われるようになりました。

私は新卒でデータ基盤を扱う部署に配属されましたが、データについて勉強するうちに今までデータについてなんとなくでしか理解していなかったことに気づきました。また、配属されてわからない用語だらけで、調べて理解しては忘れて、先輩に２回聞いちゃったりといったこともありました。

## 内容

なので、これまで理解した「データ基盤」に関する以下の入門書を読んだり、ネットで調べたりしたうえで私なりに咀嚼した、データに関する用語の意味をアウトプットしたいと思います。

https://www.amazon.co.jp/［エンジニアのための］データ分析基盤入門-データ活用を促進する！-プラットフォーム＆データ品質の考え方-斎藤-友樹-ebook/dp/B09S5ZW33G/ref=sr_1_4?adgrpid=128170672973&dib=eyJ2IjoiMSJ9.EY-YuhSDFEsVRU9c7kWpDJ-drrS5Mzg94ecOLmm-xbLfg_vTgTPX8ApPe9x-z5kO7cLb0sachH4o5upKMUOvOJEh8u6K-GAxw5M6sTqG3GUmM61nZhD945oHnSt1RpytUzQ7sD37mDKfVlJzZOqsMZkGOe6adGRQYjPSEAM43oXSAkPgTnFOQMzM4XcGyhGQSzcFkFT9rb6LWkOKeMZ801V3LQjL0kZkuH1nQoyDF6AMcg_MR_GCUunjLybNulMgroqV-Y7kfVsgwWZOOub5Jxy75ocdUN0bSVMIbUf7VBY.1ilMeIU6MwQ2BxzuZisByZGdseQVKMIgwSz2N1hF6z4&dib_tag=se&hvadid=679023192403&hvdev=c&hvlocphy=1009312&hvnetw=g&hvqmt=e&hvrand=556018884741827793&hvtargid=kwd-1646673739113&hydadcr=27265_14738572&jp-ad-ap=0&keywords=データ分析基盤+入門&qid=1730385130&sr=8-4

まだまだ知識は浅いですが、私と同じくデータエンジニアとしてキャリアを始めたばかりの方などの参考になると幸いです。

## データとは

パラメータと関係を持つもののことを指すそうです。

例：自分の自転車を認識するとき

- パラメータ
    - サドルの高さ
    - 傷
    - 色
- 関係
    - 「この自転車のパラメータ」は「自分の自転車」という関係を持っている

## データの種類

### 構造化データ

データを配置する場所と型が決まっているものです。
表データとも言われます。
RDB（リレーショナルデータベース）が一番わかりやすい例だと思います。

### 半構造化データ

構造化データの定義である、データの配置場所は決まっているが、データの型が決まっていないデータのこと。
「表で表されていないが、表せなくはないデータのこと」という定義もされます。
▼ 例
- CSVファイル
- JSON
- XML

### 非構造化データ

データの配置場所や型が決まってないもの。
スキーマ（データの構造の定義）がないものです。
例：PDFや画像

## データベース（DB）

大量のデータを決まった形式で構造化したり、整理したものです。
例えば、電話帳や生徒名簿が挙げられます。

データベース＝システムチックなものとして認識していたため、これがDBに分類されるのは意外でした。

### スキーマ

データに関する用語の中でこの単語が一番理解が進みませんでした。なぜなら使う場面によって意味が変わったからです。
以下の記事が参考になりました。

https://qiita.com/to3izo/items/7b8d44021cb386de2ef7

私が今までで認識したスキーマの意味は以下の２つに分かれます。

#### 1. DBにおけるスキーマはデータの構造の定義のこと。

データを説明するという点で、メタデータと似たニュアンスだと認識しています。

- なんていうテーブルが有るか
- テーブルにはどんなカラムがあるか
- テーブル同士の関係

#### 2. 複数のテーブルを一つのグループとして区分けるディレクトリのような存在
OptaPlannerのHelloWorld

## はじめに
　OptaPlannerを久しぶりに手を付けてみようと思う。しかしながら、HelloWorldを動かすのに手こずったのでメモを。
 - OptaPlannerのチュートリアル
     - https://www.optaplanner.org/docs/optaplanner/latest/quickstart/hello-world/hello-world-quickstart.html#helloWorldJavaQuickStart
## 環境
- OptaPlanner 9.44.0.Final
- OpenJDK 21.0.5
- gradle 8.10.2

## うまくいかない
　チュートリアルの言うとおりにやってみたが、以下の表示になり何も表示されない。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90251/4da1da90-5081-4fa0-8da4-7f2d81c12347.png)

　しばらく眺めていろいろ試したがなにも変わらず。
 　メッセージを見るとlogbackで何か言われているので、試しにbuild.gradleのlogbackVersionを上げてみた。
  1.2.11 -> 1.5.12

  そうするとうまくいった。よかった。
また始めるUIKit 大丈夫かな?

みなさんこんにちは
最近swift勉強また始まりました
Blenderとか基本情報技術者とかjlpt n1などを勉強して忙しかったです。
本気を出して今回は韓国で一番人気なスイフト勉強本![Screenshot 2024-11-04 at 20.08.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513806/89e31ab7-bbb1-e7f7-6611-9869346f7705.png)
を勉強始まりました。面白いなことはこの本UIKitです。それでちょっと悩みました。なぜなら今の主流はswift uiだからです
でもこれ韓国語で書かれているし、何か理由があると思いし
![Screenshot 2024-11-04 at 20.20.10-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513806/2b473f00-c43e-86c6-4ca6-746e27f0cee2.png)
redditでもmacTouchbarみたいにまた捨てれるようなものではないなので早く完了しようと決めて今からしばしば投稿するきがついます😁
【CSS】CSSでランダムな値を指定したい

## はじめに
CSSでランダムな値を指定したいと思ったことはありますか？

**僕はありません。**

ただ、CSSでランダムな値を扱う `random()`・`random-item()` 関数が 2024年11月現在 Editor's Draft となっており、近いうちにCSSでランダムな値が指定できるようになることでしょう。

そのため、この記事では `random()`・`random-item()`関数の使い方を紹介しようと思います。

https://drafts.csswg.org/css-values-5/#typedef-random-caching-options

## `random()` 関数
`random()` 関数は、均一分布から抽出された最小値と最大値の間のランダムな値を表す数学関数です。
また、オプションで選ばれる値を最小値と最大値の間のステップを制限できます。

`random()` 関数は、以下のような引数に受け取ります。

```
random(<random-caching-options>?, <calc-sum>, <calc-sum>, by <calc-sum>? )
```

- **`<random-caching-options>`**
    - ページ上の他の`random()` 関数と干渉しないように制御するオプション
    - カスタム変数を指定します（`--x`, `--hoge`, etc. ）
- **`<calc-sum>, <calc-sum>`**
    - ランダムな値を選ぶ範囲を指定します
    - 最大値が最小値より小さい場合は、最小値と等しいものとして扱われます
- **`by <calc-sum>`**
    - 最小値と最大値の間のステップ数を指定するオプション

　
 
*例）100pxから300pxの間の50pxごとの値が選ばれる*
```css
.sample {
    width: random(--x, 100px, 300px, by 50px);
    /* 100px, 150px, 200px, 250px, 300px のどれかが選ばれる*/
}
```



## `random-item()` 関数
`random-item()` 関数は、リストの中からランダムな項目を選ぶ関数です。

`random-item()` 関数は、以下のような引数に受け取ります。

```
random-item(<random-caching-options>?, [<declaration-value>?])
```

- **`<random-caching-options>`**
    - ページ上の他の`random()` 関数と干渉しないように制御するオプション
    - カスタム変数を指定します（`--x`, `--hoge`, etc. ）
- **`[<declaration-value>?]`**
    - ランダムで選ばれる値を指定します

　
 
*例）red, green, blueから値が選ばれる*
```css
.sample {
    width: random-item(--x, red, green, blue);
    /* red, green, blueから選ばれる*/
}
```

## まとめ
この記事では、`random()`・`random-item()`関数の使い方を紹介しました。

[CSS Values and Units Module Level 5](https://drafts.csswg.org/css-values-5)は、まだEditor's Draft であるため、仕様が変わる可能性があります。

CSSにおいて、`random()`・`random-item()`関数がどんな使われ方を想定しているか僕にはわかりませんが、使えるようになって有識者が色々とサンプルを作ってくれることを楽しみしています。

---

最後まで読んでくださってありがとうございます！

普段はデザインやフロントエンドを中心にQiitaで記事を投稿しているので、ぜひQiitaのフォローとX(Twitter)のフォローをお願いします。

https://twitter.com/degudegu2510
OutSystems公式ドキュメントの編集履歴を確認する方法

OutSystemsのドキュメントは、githubでバージョン管理されているようで、修正履歴を確認できる。

以前見たドキュメントを再度確認したら、更新日が変更されているときは、この修正履歴を確認することで、必要な場所だけを確認することができる。

[Integrate with external data sources - ODC Documentation](https://success.outsystems.com/documentation/outsystems_developer_cloud/integration_with_external_systems/integrate_with_external_data_sources/)というドキュメントを例に手順を確認していく。

この記事は、2024/11/04に書いている。

![スクリーンショット 2024-11-04 19.58.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/73b4a914-b620-a4dc-3bdc-70d1a027ae71.png)

①各ドキュメントページ内の、タイトル上部に、その最終更新日を確認できる（ここでは、2024/10/31）。
前回に該当記事を確認したときと、違う日付が表示されていたら、後続の手順で変更点を確認する。

②編集アイコンをクリックして、該当ページをgithub上で開く。

githubで開くとはいえ、目的は修正ではない。

![スクリーンショット 2024-11-04 20.09.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/11d92fcd-814f-fddd-88ad-ab2777122543.png)

③ページ上部右側に表示される「History」のリンクをクリック

githubへのコミット履歴が表示される。
前回の記事確認日以降にコミットされた修正のタイトルをクリックすると、そのコミットのDiffが表示される。
ID-POSデータを活用したデータ分析入門　その６

## はじめに
「ID-POSデータを活用したデータ分析入門」というタイトルですが、今回、分析に使用するデータはID-POSデータではありません。
今回は、某商店街に設置されたAIカメラで計測された人流データの分析事例をご紹介します。
## 今回の前提
某商店街ではある時期から大規模な再開発工事が始まりました。
この再開発工事により一部区間のアーケードが撤去されるなど、商店街の通行量へのマイナスの影響が懸念されています。
そこで、再開発前後で、本当に商店街の通行量に影響が生じているのか、それとも実はあまり影響は生じていないのかという点をAIカメラの人流データを分析することで明らかにしていきたいと思います。
また分析の結果、通行量に有意な差が見られた場合、その要因は何なのかという事も明らかにしていきたいと思います。
なお、商店街の特定を避けるため、一部回りくどい表現をしています。
何卒、ご了承ください。

## 分析結果の要約
### 再開発前後の通行量の変化についての分析
再開発前年の7月～9月の人流データと、再開発着工年の7月～9月の人流データを取得し、正規性、等分散性の検証を行ったのち、平均値の差の検定（ウェルチの検定）を行いました。
その結果、再開発前年の通行量の平均値と再開発年の通行量の平均値には有意な差があり、通行量の減少が認められました。
### 通行量の差が生じる要因についての分析
通行量の減少が本当に再開発によるものなのか、それとも別の要因によるものなのかを検証しました。
具体的には、再開発工事の中でもアーケードが撤去されたことの影響がどの程度のものなのかを検証していきました。
アーケードが撤去されたことによる一番の影響として「天候の影響を受けやすくなる」という事が考えられます。
そこで、気象庁のDBより「平均気温、降水量、日照時間」のデータを取得し、これらを説明変数に、通行量を目的変数とした重回帰分析を行いました。
結果、再開発前年においては「平均気温」「降水量」の2変数は通行量に有意な影響を与えていると言えるが、説明変数全体では、通行量の分散の16.4％しか説明していないことが分かり、天候要因が通行量に与える影響はわずかであることが分かりました。
また、再開発着工年においては「平均気温、降水量、日照時間」全ての変数が有意ではなく、自由度修正済決定係数も0.019と、非常に精度の低いモデルとなりました。
したがって、天候が通行量に与える影響は僅かであるという事が分かりました。

再開発前後で通行量の平均値には有意な差は認められた一方で、再開発に伴うアーケードの撤去、すなわち天候の影響を受けやすくなったことは商店街の通行量に僅かな影響しか与えていないことが分かりました。
通行量の変化を特定するには天候以外の説明変数を加える等、モデルの精度を高める必要があります。
また、実際のビジネスにおいては、天候による影響は軽微であると判断し、伸びている部分に注力することも考えられます。
当該商店街においては、付近にマンションが建設されたことで、周辺人口が増えており、周辺人口属性のボリュームゾーンである特定の顧客層の来訪が増加していることもAIカメラの人流データから分かっています。
こうした顧客層への施策を行うことが優先順位の高い取り組みであると考えられます。


## Rによる実装
### 使用するデータ
使用するデータは商店街に設置されたAIカメラの人流データです。
再開発が始まった年の7月～9月の3か月間のデータと、その前年（再開発前）の7月～9月の3か月間のデータを比較し、通行量の平均値に差が生じているかどうかを分析していきます。

### 再開発前後の通行量の変化についての分析
分析に使用するデータを読み込みます。
始めに、再開発前年の人流データを読み込みます。
````R:code
# データの読み込み
# 初めに再開発工事前年の人流データの読み込み
bef_cons　<- read_csv("bef_cons.csv")
``````
次に、再開発着工年の人流データを読み込みます。
````R:code
#次に、再開発着工年の人流データの読み込み
aft_cons <- read_csv("aft_cons.csv")
``````
標本を抽出した再開発工事前年、および再開発工事着工年とも正規性は確認できましたが、等分散性は確認できませんでしたので、ウェルチの検定を行います。
検定に使用するデータを読み込みます。

````R:code
# データの読み込み
two_years <- read_csv("two_years_2σ.csv")
``````
ウェルチの検定を行います。
````R:code
# ウェルチの検定
t.test(formula = 来訪者 ~ 年度, data = two_years )
``````
> ウェルチの検定
> t.test(formula = 来訪者 ~ 年度, data = two_years )
>data:  来訪者 by 年度
t = 2.3232, df = 111.24, p-value = 0.02198
alternative hypothesis: true difference in means between group 2023 and group 2024 is not equal to 0
95 percent confidence interval:
   84.93899 1070.02303
sample estimates:
mean in group 2023 mean in group 2024 
          17036.04           16458.56 

t値が2.3232で、p値が0.021(<0.05)ですので、帰無仮説：「再開発工事前後で通行量の平均値に差はない」が棄却されました。

したがって、再開発前後で通行量の平均値には有意な差があり、再開発着工年において通行量の減少があることが分かりました。

## 次回（第7回目）のテーマ
前半が長くなりましたので、「通行量の差が生じる要因についての分析」は次回（7回目）に回します。
天候要因を説明変数に、通行量を目的変数とした重回帰分析を行います。
基本情報技術者試験 合格へのみちのり

# はじめに
縁あって今年度からITエンジニアとして働くことになりました．初年度の目標として，基本情報技術者試験合格を掲げていました．
今後受ける方の参考のため，また自分の備忘録として記事を残してみます．
<br>

筆者プロフィール
1. ITエンジニアの社会人一年目．
2. 大学では機械系を専攻．fizzbuzzくらいはすぐかけるレベル．
3. 入社後5カ月間研修を受け，SpringBootやVue.jsなどを一通り学んだ．

# 勉強期間と勉強方法
勉強期間はおよそ6カ月でした．一時間程度の勉強を，2,3日に一度の頻度で行っていました．研修の勉強と両立する必要があったため，一日の勉強時間をできるだけ減らし，期間を延ばす作戦です．

# 1-4か月目
科目Aの学習を行う．学習に際して以下を使用した．
・参考書「徹底攻略 基本情報技術者の科目B実践対策」
・過去問道場 H30年からR5年度分

今書いていて気づいたんですが，使用していた参考書は科目Bの本ですね...科目Aの本だと思ってた...
参考書は一通り最後まで内容を読み，時間をかけて理解することを意識しました．
過去問道場では，安定して80%とれるまで繰り返し解きました．

# 5,6か月目
科目Bの学習を中心に行います．学習に際して以下を使用しました．
・参考書「情報処理教科書 出るとこだけ！基本情報技術者［科目B］予想＋過去問題集」
https://www.shoeisha.co.jp/book/detail/9784798188492

この参考書がかなり良かったです．自分はテキストを購入せず問題集だけで勉強しましたが，解説が十分で問題数も多く，科目B対策に最も役に立ちました．試験時に科目Bの自信を持てたのはこの参考書のおかげと言えるでしょう．


# 試験結果と感想
**科目A：700点**
過去問道場の過去問を何度も解いていたため自信があったのですが，本番では初見の問題がほとんどでした．過去問道場の解説などで言及されていた部分が出題されていることがあり，そこで点数を稼いでいく形になりました．やはり一度科目Aの参考書を一度見ておくべきでしたね．
また，他のIPAの試験で問題が流用されているパターンもあるらしく，そちらも解いてみると良かったかもしれません．さらに，試験前日にIPAの試験範囲を確認し，新規追加された部分を確認すると，確実に取れる問題を増やすことができます．毎年試験範囲改定されているので，最新の情報に触れておくのがおススメです．

試験で気を付けたのは以下
・初見の単語はメモった．休憩中に思い出して調べるため．
・問題文をよく読む（意外と見落としがあるので）
<br>


**科目B：790点**
試験で問われているのは，「プログラムを正しくトレースできるか？」という能力です．これは，参考書の問題演習だけで十分とおもいます．自分は参考書を一周してから試験を受けましたが，苦手意識がある人は三周くらいすると自信をもって試験に臨めます．
一問あたり5分を目安に解くといいです．自分は15分くらい時間があまったため，見直しをすることができました．5分経ったらいったん他の問題を解いていくと，正答率あがるかな？と思います．

試験に当たって気を付けたのは以下
・なんのプログラムか？を問題文から読み取る．
・単方向リストか？オブジェクトか？ソートか？を判断する．
・明らかに違う選択肢を外しつつ，トレースを行う．
・序盤の簡単な問題と情報セキュリティに関する問題は絶対に落とさないこと．
・明らかな捨て問（あまり見かけないが）は捨てる潔さも大事．