OmniAICreator/Qiita-1.07M huggingface dataset:
Lightsail環境でVPCピアリングを使ってALBに接続する

## はじめに
Lightsailを使うとまずWAFが使用できない。
ちょっとセキュリティ面があれだよねーという感じではある。
Cloudfrontを使えという話ではあるのだが、ちょいとめんどうがくさいなという事もあると思う。
たぶん。きっと。そうであってほしい。
なので、VPCピアリングを使って、ALBに接続する。てかLightsailから他のAWSサービスに接続したいときはこのようにするぞとのお話。

## Lightsail側の設定
もろもろLightsail側の構築は済んでいると想定しています。
インスタンスの準備とかIP固定とかもろもろ。

Lightsailのコンソール → 右上の「アカウント」 → タブの「アドバンスド」  と進み、
対象のリージョンで「VPC ピア接続」をオンにする。

![スクリーンショット 2024-08-28 11.29.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134825/acaae56e-e6c8-73b9-a49c-0b0d96b29b03.png)

## ALBの設定
Lightsail側のVPCピアリングは同一リージョンのデフォルトVPCとしかピアリング接続ができません。
Private Linkを使ったらできるとかあれとかそれとか記事を見つけましたが。えーい。知らぬ知らぬ。男はだまってデフォルトVPC。

### ALB ターゲットグループの設定
ALBのターゲットグループを作成する。
・基本的な設定箇所のターゲットタイプの選択で「IPアドレス」を選択する

![スクリーンショット 2024-08-28 13.35.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134825/2e124ffd-806c-a608-8182-679ee0ac786c.png)

ターゲットグループ名などよしなに設定、ターゲットVPCにデフォルトVPCを選択する。
「ネットワークを選択する」 箇所を「その他のプライベートIPアドレス」を選択。

「IP を指定してポートを定義する」 箇所ではLightsailのプライベートIPを入力し、「保留中として以下を含める」をクリックし、ターゲットグループを作成する。

![スクリーンショット 2024-08-28 13.42.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134825/01bd4521-431f-4381-2ff0-cb060ceb8e91.png)

### ALBの作成
ロードバランサーの作成で、Application Load Balancerを選択しもろもろ作成していく。
ロードバランサーの IP アドレスタイプでIPv4を選択し、リスナーとルーティング箇所のターゲットグループに先ほど作成したターゲットグループを選択し作成完了。WAFを設定したい人はここで対象のWAFを設定してください。

### 確認
ALB経由で表示ができているか確認する。
もし、表示できないーとかあれば、ターゲットグループのIPが違うとかそんなところだと思うので、なんしか確認してくださいーー。
Error: Clerk: auth() was called but Clerk can't detect usage of clerkMiddleware() (or the deprecated authMiddleware()). が発生する

## 前提
* dockerで環境構築をしています。
* Next.jsでsrcフォルダーを使用しています。

## 事象
next.jsでclerkを使用する際に以下のエラーメッセージが表示される。
```:エラーメッセージ
Error: Clerk: auth() was called but Clerk can't detect usage of clerkMiddleware() (or the deprecated authMiddleware()). 
```

middlewareは以下のように作成している。
```typescript:middleware.ts

    import { authMiddleware } from "@clerk/nextjs";
    
    export default authMiddleware({});
    
    export const config = {
        matcher: ['/((?!.+\\.[\\w]+$|_next).*)', '/', '/(api|trpc)(.*)'],
    };
```

## 原因
middleware.tsがルートに配置されていなかったため。


```
├── src/
│   ├── .next
│   ├── src/
│   │   ├── app/
│   │   │   ├── page.tsx
│   │   │   ├── layout.tsx
│   │   │   └── middleware.ts //ここに配置していました。
│   │   └── component/
│   │       └── ui/
│   │           └── button.tsx
│   └── .env
└── docker-compose.yml
```

## 修正
middleware.tsをルートに保存する

```
├── src/
│   ├── .next
│   ├── src/
│   │   ├── app/
│   │   │   ├── page.tsx
│   │   │   └── layout.tsx
│   │   ├── component/
│   │   │   └── ui/
│   │   │       └── button.tsx
│   │   │
│   │   │
│   │   └─ middleware.ts //ここに配置する
│   └── .env
└── docker-compose.yml
```

## まとめ
* middleware.tsはルートに保存する必要がある。

## 参考資料
Clerk authMiddleware() is not being used even though it is in my middleware.ts file which is in the root of the application
https://stackoverflow.com/questions/77108110/clerk-authmiddleware-is-not-being-used-even-though-it-is-in-my-middleware-ts-f
『プログラミングの基礎』第3章 変数・第4章 関数

# 変数
　コード内で複数回登場する数値は変数として定義すると後々便利である。
 　OCamlでは以下のように変数を定義する。
 ```OCaml:変数
let 変数名 = 式
 ```
 　OCamlにおける変数は他の言語における定数に近い。関数型言語の変数が他言語と違う点は、一度ある値を代入すると他の値に書き換えることができない部分にある。
　また、OCamlにおいて定義されるすべてのデータは定義時に型推論が行われ、必ず型が付与されるようになっている。

# 関数
　OCamlでは以下のように関数を定義する。
 ```OCaml:関数
 let 関数名 引数 … = 式
 ```
　前述のとおりOCamlにおける全てのデータには型が付いており、関数にももれなく型推論により自動的に型が付与される。
 ```OCaml:型推論による型付けの例
 # let f x = 2 + x ;;
 val f : int -> int = <fun>

 # let f x = 2.0 +. x ;;
 val f : float -> float = <fun>
```

 #### 練習
 　問題 4.8「与えられた鶴と亀の合計数と足の合計数に応じて、鶴の数を返す関数tsurukameを定義せよ」のコードは以下のようになる。
```OCaml:問題 4.8
(* 目的：[鶴と亀の数の合計数]と[足の数の合計数]に応じて、[鶴の数]を計算する *)

(* 鶴1匹の足の数 *)
let legs_a_tsuru = 2;;

(* 文字式：鶴の数 = 鶴と亀の合計数 - ((足の合計数 - (鶴1匹の足の数 * 鶴と亀の合計数)) / 2) *)
let tsurukame count_all legs_all = count_all - (legs_all - legs_a_tsuru * count_all) / 2;;
```
上記コードを実行すると
```OCaml:実行式と出力結果
# tsurukame 100 274 ;;
- : int = 63
```
このような出力結果が得られる。
<br>

[次項：『プログラミングの基礎』第5章 条件分岐](https://qiita.com/D_Sato_01/items/333ce883f6a1594ae9c2)
【Xcode】開発環境を分ける方法

## はじめに
毎回本番・ステージング・開発などと環境を分ける際にやり方を忘れてしまうので備忘録を残します。

## 基本設定

まず最初にステージング環境から作成していきましょう。

`Configurations`のプラスボタンを押下して **`Duplicate "Debug" Configuration`** を選択

![SettingConfiguration1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/f19ac381-6226-8362-b4f9-340a75d95a5e.png)

そうすると、Debug環境が複製されるので **Staging** と入力

![SettingConfiguration2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/dc234b24-68fa-fc4b-5102-7fbb88d73cd1.png)

続いて`Build Settings`を設定します。

`Active Compilation Conditions`と検索

![SettingActiveCompilationConditions1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/3915d014-0385-253d-7c1b-fc2b29cf22d8.png)

Stagingの箇所を、**STAGING** に書き換え
![SettingActiveCompilationConditions2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/1f48973a-b44a-063f-74ef-b3ca8424e556.png)


これで、ソースコード上で環境ごとの条件分岐ができるようになります。
``` Swift 
# if RELEASE
  print("本番環境")
# elseif STAGING
  print("検証環境")
# else
  print("開発環境")
#endif
```

続いて**Scheme**の設定をしていきます。

`Manage schemes`を選択して設定画面を表示します。
![manageScheme.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/ce22f1e8-443a-4ae0-3114-fc15c034ca2e.png)

デバック用スキームを選択すると、設定画面で以下の画像のように`Duplicate`が選択できるようになるので選択
![preDuplicateStage2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/a747c7f0-abc0-b2c6-6aab-2e257be3ed26.png)

Scheme名を設定したら、`Build Configuration`を**Staging**に変更
![duplicate_staging_run.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/2d439a8a-b875-1918-44ef-b0a1904f136f.png)

もし`App Store Connect`などに配信する場合は、Archiveも同様にStagingに変更
![duplicate_staging_archive.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/c23fcfe5-8f45-1cad-7836-83be1550afcb.png)

同様の手順でReleaseの環境も作成します。

すると以下のようにデバッグ・リリース・検証で切り替えが可能となります。
![createReleaseEnvAfter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/b11ce263-1567-9288-5196-481e11a5ebea.png)

上で書いたこのコードがそれぞれの環境で動くようになります。
``` Swift 
# if RELEASE
  print("本番環境")
# elseif STAGING
  print("検証環境")
# else
  print("開発環境")
#endif
```
最後に`Bundle Identifier`の設定をします。

以下の画像のようにTARGETSの`Build Settings`で`Product Bundle Identifier`と検索すると該当するものが表示されるため、それぞれの環境にBundle Identifierを登録すると設定は完了になります。
![スクリーンショット 2024-10-01 13.48.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/323baf99-3a60-9e7f-17da-00fac019d7f3.png)

また以下のようにUser-DefinedでBundle Identifierのユニークな部分を設定
![bundleUserDefind設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/012f657b-b659-2260-7884-a5a3932ee93e.png)

TARGETSのBuild Settingsで`Product Bundle Identifier`と検索して一番上を以下のように変更
![スクリーンショット 2024-10-01 13.41.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/8e80c714-0c6f-555b-516a-f76aa970b2f1.png)

すると先ほど同じ内容となります。
![スクリーンショット 2024-10-01 13.48.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072069/323baf99-3a60-9e7f-17da-00fac019d7f3.png)

それぞれの環境をビルドしてアプリが環境ごとに作成されれば成功となります。
【UiPath】バージョン「September/24.10」 Community版まとめ

# はじめに
この投稿は、RPAツール「UiPath」で 2024年9月27日にリリースされた、バージョン「September/24.10」Community版について「個人的に」 まとめたものです。

# 情報ソース
以下の「UiPath公式リリース」を元にしています。

https://forum.uipath.com/t/uipath-2024-september-community-release/769009/4

# 最近のリリース内容
直近の関連リリースは以下の内容です。

https://qiita.com/miya_gis/items/13a84d0fb2d66d2f4608

https://qiita.com/miya_gis/items/95c6cb2dffccb13de647


# 目次
今回紹介する内容は下記になります。

```
1）[Studio] Autopilotタブ
2）[Assistant] 引数の表示名とツールチップ
3）[TestSuite] クロスブラウザテスト用のテンプレート
```

# 1）[Studio] Autopilotタブ

オブジェクトリポジトリ等と横並びで「Autopilot」タブが追加されました。
2024年9月時点では、以下のような機能があります。

### ①ワークフローの要約
シーケンスの注釈から要約を作成してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/08ba215a-7e4d-9bdf-d0ab-3a40a51cda5a.png)

### ②シーケンスを生成
「生成」ボタンを押下して表示されたシーケンスに注釈を記載すると、内容に応じてアクティビティを配置してくれます。

![uianime33.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/1a63d9d1-a8ee-0908-7fbd-09bf5c6c306a.gif)

### ③エラーの修正補助
検証エラー（実装時のエラー及びワークフローアナライザーのエラー）がある場合に、修正するための提案を提示してくれます。

![uianime31.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/807fc61e-9e37-7963-aae2-9eede4b3d889.gif)

### ④Studio内で公式ドキュメント検索
検索／Search ボタンを押して入力欄に質問をセットして「＞」ボタンを押下で、公式ドキュメントから検索した結果をサマリして表示してくれます。

![uianime32.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/8ea51429-888b-14cb-cff4-6f239438549d.gif)

# 2）[Assistant] 引数の表示名とツールチップ
Assistantの設定（Configure）タブで入力引数の指定をする際に表示される「名前」と「ツールチップ（説明の吹き出し）」を設定できるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/a5e25fb9-8a6b-d596-d4bc-9e51532feab2.png)

# 3）[TestSuite] クロスブラウザテスト用のテンプレート
Web サイトまたは Web アプリの場合、使用するブラウザによって描画や仕様が変わるため、テストの観点では、複数・クロスでブラウザ動作確認をすることになりますが、ブラウザごとにセレクタ、特にスコープで使用するタイトル部が変わってしまうので、ブラウザごとにテストケースが必要になっていました。
今回のリリースで、ブラウザスコープをパラメーター化する機能が追加され、テストケーステンプレートも追加されました。内部で「ブラウザー タイプの設定」アクティビティを使用して切り替えるイメージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/2ebeb9d8-6220-a945-8103-25d37ae4cd7e.png)



# 終わりに
以上、バージョン「September / 24.10」Community版 のリリース内容まとめ でした。
CDKでAWS ChatbotのTeamsチャネル作成時に指定するチャンネルID


### 前提
AWS Chatbotに対象となる宛先のTeamsクライアントが作成されていること（CDKでは作成不可）

```Example.ts

import { aws_chatbot as chatbot } from 'aws-cdk-lib';
const cfnMicrosoftTeamsChannelConfiguration = new chatbot.CfnMicrosoftTeamsChannelConfiguration(this, 'MyCfnMicrosoftTeamsChannelConfiguration', {
  configurationName: 'configurationName',
  iamRoleArn: 'iamRoleArn',
  teamId: 'teamId',
  teamsChannelId: 'teamsChannelId', //ここで指定する内容について
  teamsTenantId: 'teamsTenantId',
});

```

https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_chatbot.CfnMicrosoftTeamsChannelConfiguration.html

### 結論
チャネルへのリンク「`https://teams.microsoft.com/l/channel/`」の後に続く以下の部分
```
19%～～～.tacv2
```

### ちなみに
コンソールでは、チャネルURLをそのまま貼り付けることで指定可能
セッションIDとは

セッションIDにはどのような情報があるのかわからないので調べたい。
# セッションとは
>WebブラウザとWebサーバーのやり取りにおいて、`一連の関連性のある処理の流れを「セッション」`と呼びます。

>`あるブラウザからの処理を関連性のある一連の処理`
# セッションIDとは
>セッション管理において`Webブラウザを識別するための情報を「セッションID」`と呼び、`セッションIDはWebサーバーで生成`され、`Cookieに含めてWebブラウザに送信`されます。
...
`セッションIDと紐付いて「セッションデータ」としてWebサーバーに保存`されます。WebブラウザはセッションIDを用いてWebサーバーに保存されている自身のセッションデータを参照できます。

# セッションIDのやり取り
>Cookieが使えないWebブラウザもあるため、`URLにセッションIDを埋め込む`手法や`Webページないのフォームに埋め込む`手法があります。しかし、`Cookieを使う方法と比べて情報が漏洩する可能性が高い`ため、あまり利用されていません。
　また、セッションIDは個人を識別するために使われる重要な値なので、なりすましを防ぐためにも推測されにくい値である必要があります。

どういった攻撃があるのだろうか？

# セッションハイジャック
>何らかの手段で第三者がCookieの中身やセッションIDを取得できれば、`ユーザーIDやパスワードを知らなくてもその情報を使ってログイン済みのユーザーとしてそのシステムを利用`できるようになり、容易に個人情報を取得されてしまいます

# 出典
https://www.sbcr.jp/product/4797388817/
GPTScriptで使える組み込みtool一覧

# GPTScriptとは
自然言語でプログラムが書けるツールです。
# 組み込みtoolとは
GPTScriptに最初から組み込んであるツールです。
例えばsys.execを使えばコマンド実行が、sys.writeを使えばファイル書き込みが出来ます。
以下のGPTScriptでtoolの一覧を生成してみました。実際に自然言語をAIが解釈して動いています。
```
tools:sys.exec,sys.write

"gptscript --list-tools"を実行しその出力結果を日本語に翻訳しgtoollist.txtに出力してください。
```
名前: sys.abort
説明: 実行を中止します
モデル: gpt-4o
パラメータ: message: 中止が呼び出されたエラーまたは予期しない結果の説明

---
名前: sys.append
説明: ファイルに内容を追加します
モデル: gpt-4o
パラメータ: content: 追加する内容
パラメータ: filename: 追加するファイルの名前

---
名前: sys.chat.current
説明: 現在のチャットダイアログを取得します
モデル: gpt-4o

---
名前: sys.chat.finish
説明: 会話を終了します。これを使用して質問をすることはできません。
モデル: gpt-4o
パラメータ: return: 指示された値を返すか、指示された値がない場合はダイアログの要約を返します

---
名前: sys.chat.history
説明: 以前のチャットダイアログを取得します
モデル: gpt-4o

---
名前: sys.context
説明: 現在の内部GPTScriptツール呼び出しコンテキスト情報を取得します
モデル: gpt-4o

---
名前: sys.download
説明: URLをダウンロードし、指定された場所に内容をディスクに保存します
モデル: gpt-4o
パラメータ: location: (オプション) ファイルを保存するディスク上の場所。場所が指定されていない場合は一時的な場所が使用されます。ターゲットファイルが既に存在する場合、overrideがtrueに設定されていない限り失敗します。
パラメータ: override: trueの場合、指定された場所にファイルが存在する場合、ファイルは上書きされます。デフォルトはfalseです
パラメータ: url: ダウンロードするURL（httpまたはhttps）

---
名前: sys.exec
説明: コマンドを実行し、コマンドの出力を取得します
モデル: gpt-4o
パラメータ: command: 実行するコマンドとすべての適用可能な引数
パラメータ: directory: コマンドの現在の作業ディレクトリとして使用するディレクトリ。引数が渡されない場合、現在のディレクトリ「.」が使用されます

---
名前: sys.find
説明: ディレクトリをトラバースして、パターンに一致するファイルを検索します（unixのfindコマンドのスタイル）
モデル: gpt-4o
パラメータ: directory: 検索するディレクトリ。引数が渡されない場合、デフォルトで現在のディレクトリ「.」が使用されます
パラメータ: pattern: 検索するファイルパターン。パターンは、*が任意の文字に一致し、?が単一の文字に一致する従来のunixグロブ形式です

---
名前: sys.getenv
説明: OS環境変数の値を取得します
モデル: gpt-4o
パラメータ: name: ルックアップする環境変数名

---
名前: sys.http.get
説明: httpまたはhttps URLの内容をダウンロードします
モデル: gpt-4o
パラメータ: url: ダウンロードするURL

---
名前: sys.http.html2text
説明: httpまたはhttps URLの内容をダウンロードし、HTMLから変換されたレンダリングされたテキストとして内容を返します
モデル: gpt-4o
パラメータ: url: ダウンロードするURL

---
名前: sys.http.post
説明: POSTメソッドを使用してhttpまたはhttps URLに内容を書き込みます
モデル: gpt-4o
パラメータ: content: POSTする内容
パラメータ: contentType: application/jsonやtext/plainなどの内容の「コンテンツタイプ」
パラメータ: url: POSTするURL

---
名前: sys.ls
説明: ディレクトリの内容をリストします
モデル: gpt-4o
パラメータ: dir: リストするディレクトリ

---
名前: sys.prompt
説明: ユーザーに入力を促します
モデル: gpt-4o
パラメータ: fields: プロンプトするフィールドのカンマ区切りリスト
パラメータ: message: ユーザーに表示するメッセージ
パラメータ: sensitive: (trueまたはfalse) 入力を非表示にするかどうか

---
名前: sys.read
説明: ファイルの内容を読み取ります
モデル: gpt-4o
パラメータ: filename: 読み取るファイルの名前

---
名前: sys.remove
説明: 指定されたファイルを削除します
モデル: gpt-4o
パラメータ: location: 削除するファイル

---
名前: sys.stat
説明: 指定されたファイルのサイズ、変更時間、およびモードを取得します
モデル: gpt-4o
パラメータ: filepath: ファイルの完全なパスとファイル名

---
名前: sys.time.now
説明: RFC3339形式で現在の日付と時刻を返します
モデル: gpt-4o

---
名前: sys.write
説明: ファイルに内容を書き込みます
モデル: gpt-4o
パラメータ: content: 書き込む内容
パラメータ: filename: 書き込むファイルの名前
Amazon Route 53 Resolverの転送ルールとシステムルールの違い

Amazon Route 53 Resolverにおける「転送ルール（Forwarding Rules）」と「システムルール（System Rules）」の違いについて解説。
これらのルールを理解することで、VPC内外のDNSクエリを効率的かつ安全に管理できるようになります。

### Amazon Route 53 Resolverとは？

Amazon Route 53 Resolverは、AWSのDNSサービスで、VPC（Virtual Private Cloud）内のリソースとオンプレミス環境との間でDNSクエリを解決するためのサービスです。主に以下の2つの機能を提供します：

- インバウンドエンドポイント（Inbound Endpoints)
    オンプレミスからVPC内のリソースへのDNSクエリを受け取ります。

- アウトバウンドエンドポイント（Outbound Endpoints）
    VPC内からオンプレミスや他のネットワークへのDNSクエリを送信します。

###  転送ルール（Forwarding Rules）とは？

転送ルールは、特定のドメインに対するDNSクエリを指定したDNSサーバーに転送するための設定です。具体的には、以下のようなケースで使用します。

- オンプレミスのDNSサーバーにクエリを転送
    PC内のリソースがオンプレミスの内部ドメイン（例：internal.example.com）を解決する必要がある場合。

- 他のVPCやAWSアカウントのDNSサーバーにクエリを転送
    マルチVPC環境やクロスアカウント環境で、特定のドメインを別のVPCやアカウントのDNSサーバーで管理している場合。

### 転送ルールの特徴
- 特定ドメインに対するクエリのみ転送
    例：example.com や *.example.com に対するDNSクエリを指定したDNSサーバーに転送。

- カスタマイズ可能な転送先
    転送先のDNSサーバーのIPアドレスを指定できます。

- セキュリティと制御
    必要なドメインに対してのみ転送を設定することで、セキュリティを強化。

### システムルール（System Rules）とは？
システムルールは、Route 53 Resolverがデフォルトで提供するDNSクエリの解決方法を定義するルールです。これらのルールは、ユーザーが明示的に設定しなくても自動的に適用されます。

### システムルールの特徴

- デフォルトのDNS解決
    VPC内のリソースからインターネット上のドメイン（例：google.com）へのDNSクエリを解決。

- 広範な適用範囲
    明示的に転送ルールが設定されていないすべてのドメインに適用。

- Route 53 Resolverの内部ネットワーク
    AWSの内部DNSサーバーを使用してクエリを解決。

### まとめ
Amazon Route 53 Resolverでは、転送ルールとシステムルールの2種類のルールを使用して、DNSクエリの解決方法を制御します。

- 転送ルール（Forwarding Rules)
	•	特定のドメインに対するDNSクエリを指定したDNSサーバーに転送。
	•	カスタムDNS解決やクロスアカウントアクセスに最適。
	•	ユーザーが明示的に設定する必要がある。



 - システムルール（System Rules）
  	•	転送ルールが設定されていないすべてのドメインに対してデフォルトのDNS解決を提供。
	•	一般的なインターネットアクセスや標準的なDNS解決に最適。
	•	自動的に適用され、ユーザー設定不要。


 選択ポイント：

	•	特定のドメインに対してカスタムなDNS解決が必要な場合は、転送ルールを設定。
	•	一般的なインターネットアクセスや特別なDNS設定が不要な場合は、システムルールが自動的に機能。
JenkinsでToo many authentication failuresが出たら

Jenkinsで`Too many authentication failures`が出たらトライしてみるといいことです。
（ほぼ自分用のメモです）

# 1. Credential登録情報の確認
秘密鍵
```
~/path/to/ssh/.ssh/id_rsa
```
の中身をJenkinsのCredentialsに貼り付けるのですが、**改行文字**までしっかり入れる必要あります。
![スクリーンショット 2024-10-01 13.14.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/c5f43706-9100-e79e-764d-fc5e03fabcd4.png)
![スクリーンショット 2024-10-01 13.17.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/dde2acd4-1a14-1334-627c-5eace185f6b7.png)
改行文字が抜けてるとssh-addできなくて失敗します。

# 2. Permissionの確認
ssh/scp先で
```
$ chmod 600 ~/path/to/ssh/.ssh/authorized_keys
$ chmod 600 ~/path/to/ssh/.ssh/id_rsa
```
して読み書き権限付与しておきましょう。

# 3. -o "IdentitiesOnly=yes"の追加

```
ssh  -o "IdentitiesOnly=yes" user@hostname
```
SSHクライアントは指定された鍵ファイルのみを使用し、他の鍵ファイルやエージェントに登録されている鍵を使用しません。
【Laravel】Pintで改行コードがLFになる問題の解消方法！

泉（[@izumin_0401](https://twitter.com/izumin_0401)）です。

今回は、LaravelのPintで改行コードがLFになる問題の解消方法を解説しやす！！

# ブログ記事はこちら

https://traveler0401.com/laravel-pint-lf-crlf/

# そもそもpintでは無理
そもそもですが、pintでは改行コードの設定は変えられないっぽいです。

なので、「.gitattributes」で改行コードを設定します。

# 「.gitattributes」の設定
```
* text=auto eol=crlf
```
これでOK！！

# まとめ
もはやLaravel Pintの解説ではないのである！

ではまた！

# 最後に
暇つぶしに[Twitter](https://twitter.com/izumin_0401)と[ブログ](https://traveler0401.com/)もやってるので見てね。
012 AI屋さんの　LLMとstreamlitとdockerとcloud runと私


AI屋さんの　LLMとstreamlitとdockerとcloud runと私

LLMに２００万トークン全文入力　追加学習ずみの専門分野特化のLLMの作り方




概要
大規模言語モデルのwebアプリを クラウドのサーバーレスでデプロイする
最小構成の資料です。
　 gemini
　 streamlit
　 docker
　 cloud run
だけで作れちゃいます。
雛形で一度デプロイできれば、あとは簡単です。

既知の組み合わせで構成されています。
応用は自由自在です。

作り方は下記参照（まとめ）

https://docs.google.com/document/d/e/2PACX-1vRZ9RkstP6oPLMcKOHXygf8X4HFKhHTiPt2glUvDD_-NZWXY9HKOb7XqfBa26BBqhAihzaysasJsk7b/pub



https://
docs.google.com/document/d/e/2PACX-1vRZ9RkstP6oPLMcKOHXygf8X4HFKhHTiPt2glUvDD_-NZWXY9HKOb7XqfBa26BBqhAihzaysasJsk7b/pub





![スクリーンショット 2024-09-30 20.40.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/82965cfc-e5f3-a594-1485-e87ee6bb63a3.png)




サンプル
大規模言語モデルに資料を全文入力済みLLM
Webアプリ

Streamlit

https://bono0-ghc4uieygq-an.a.run.app/



Gradio

https://bono0-grd-ghc4uieygq-an.a.run.app/

Flask

www.bono0.com

webAPI
flask

https://llm001-v01-ghc4uieygq-an.a.run.app/






![スクリーンショット 2024-09-30 21.12.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/498730bc-f040-8bc1-5d79-39a3538effc8.png)


![Screenshot_20241001-081805.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/9139f1f8-9568-39df-25fe-a0ec882858a6.jpeg)


![Screenshot_20241001-082035.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/8304a7e9-99fc-ceb5-a600-fe606327c2f9.jpeg)








ー完ー
【基本情報・応用情報】ロールバックとロールフォワードの違いについて

# ロールバック（後退復帰）
システム障害が発生した時に，システムを以前の**安定した**状態に戻すこと．
「最新のチェックポイント後のことはどうでもいいからとりあえず安定した場所まで戻したい！！」というときに使う．

> git reset --hardと考えるとわかりやすいかも

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/c47f8ad8-dae1-fa70-5e2e-3a3dc223906b.png)


# ロールフォワード（前進復帰）
システム障害が発生した時に，一度チェックポイント時点の状態まで戻し，ログに記録された変更を適用して状態を進めることによりシステム障害が起きる直前の状態に復元すること．
「最新のチェックポイント後にかなり進んだから，できるだけ多くの変更を保持しつつ復旧したい！！」というときに使う．
障害発生時に単に前の状態に戻るだけでなく、問題の原因を特定し修正した上で、有効な変更を再適用するという含む．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/879a6bcd-77b4-2e57-041d-7a3510d23e95.png)


# 問題
1~5について，システム障害が発生したときにロールフォワードをによって障害回復できるトランザクションを選べ．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/dc761c0e-9e4b-fdcd-e8e2-612df46e1eb5.png)

|
|
|
|
|
|
|
|
|
|

## 答え
1と4
## 解説
**1・4** : 
チェックポイント後にコミットしているため，チェックポイントの状態に戻してからロールフォワードによって更新直後の状態に戻せる．
**2・3** : 
チェックポイント後にトランザクション処理中に障害が発生したのでロールフォワードはできない...そのため，ロールバックによって更新前の状態に戻す．
**5** : 
チェックポイント前にコミットされているため，ロールバックもロールフォワードも不要である．

# 最後に
10/13に応用技術者試験がありますね！
受ける人は共に頑張りましょう！！！
それではみなさんよいエンジニアライフを〜👋

# 基本情報・応用情報記事

https://qiita.com/bearl27/items/48ea517e5debbff3b2e9

https://qiita.com/bearl27/items/c08be5f2a53fd3fb7b53

https://qiita.com/bearl27/items/e63a6fb14eba0067d940

https://qiita.com/bearl27/items/f8cf339e7f966291683d

https://qiita.com/bearl27/items/849c9400ae93608331e7
Django cssを用いてフォームののレイアウトを変える方法

## 問題の発生
forms.pyで設定したフォームをテンプレートに表示しようとしたところ、デフォルトのスタイルが適用されたため、フォームの見た目が整っていない状態になってしまった。（下参照）

![スクリーンショット 2024-09-30 10.48.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3893783/abd4afc1-f4dc-8f65-011d-8912216a8b7f.png)

<font color="MediumVioletRed">これはwidgetの設定がされていないことが問題である。
</font>
## widgetとは？
widget＝ウィジェット。直訳すると小型の装置や部品と言う。

<font color="MediumVioletRed">Djangoのwidgetとは、フォームフィールドがどのようにHTMLとして表示されるかを制御するもの。</font>
widgetを設定せず、フィールドを設定したら、デフォルトで設定されているChar_Fieldはinput_type= text、Choice_Fieldはselectとして表示されている。

なので、widgetを設定すれば、フォームのレイアウトを変えることができる。

## 解決策　widgetの設定

```python: forms
match_result = forms.ChoiceField(
        widget=forms.Select(attrs={'class': 'form-control'}),
        choices=[
            ('完全勝利','完全勝利'),
            ('点差勝利','点差勝利'),
            ("引き分け",'引き分け'),
            ("点差敗北",'点差敗北'),
            ("完全敗北",'完全敗北')
            ],required=False,)
change_point = forms.IntegerField(
        widget=forms.NumberInput(attrs={'class': 'form-control'}),
        required=False)
match_leader = forms.CharField(
        max_length =100,
        widget=forms.TextInput(attrs={'class': 'form-control'}),
        required=False)
```

widget=forms.〇〇(attrs={'class': 'form-control'}),...
とすることでcssファイルで設定したform-controlのcssが適用される。

-----form-controlのCSS---------
```css:css
.form-control {
    width: 200px;
}
```
これでform-controlというクラスがついている要素が横幅200pxの大きさに統一されることとなる。

:::note
ポイント
match_resultやchange_point、match_leaderにform-controlというクラスをつけるイメージ
:::

## 結果

以下のように大きさを揃えることができた。

![スクリーンショット 2024-10-01 11.59.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3893783/aad656a5-bd4f-73c9-dcbd-bf4980369a37.png)

## 感想
フォームフィールドのレイアウトを変更するためにはwidgetにより設定することが重要だとわかった。このほかにも様々な表現方法があるので学んでいきたい
【ChatGPT＋DALL-E3】女性のドレスの柄に数学的理論を。


　どうも、カーブミラーです。

　今回は、女性のドレスの柄に数学的理論を組み込みます。

:::note info
本記事は、ChatGPT（有料版）
＋DALL-E3で行なっております。
画像はあります。　あしからず。
:::
　10月になりましたね。

　先日までの暑さが
　　ウソのように引いて、
　　　過ごしやすくなってきました。

　逆に、明け方、
　　涼しくて目が覚めて
　　　しまっていますけど😅

　今月もよろしくお願いしますね。
***
　まずは、ニュースです。

　SoftBank Vision Fundは、
　　OpenAIに
　　　5億ドル（700億円）投資で合意。

　本調達には
　　Microsoft、
　　　Tiger Global、
　　　　Coatueも参加とのこと。

　SoftBankのAI投資としては
　　最大規模となっています。

[ChatGPT研究所ポスト](https://x.com/ctgptlb/status/1840767327396348013?t=buJfoQdSqOAM5TDBlKSQCw&s=19)

[日本経済新聞 電子版](https://x.com/nikkei/status/1840793624105402477?t=k4KqNGsG3m4A_fpK3Z1ccA&s=19)
***
　これはニュースではないのですが、
　　去年の今頃、OpenAIのDevDayが
　　　ありました。

　一部では
　　新しい発表があるのでは？との
　　　推測が語られています。

　しかし、
　　OpenAIからは
　　　今年のDevDayに関する告知は
　　　　ありませんでした。

　あるとしても
　　小規模な発表くらいでしょう。

　あるとしたら
　　今夜深夜ではないか
　　　との憶測が出ていますので、
　　　　期待して待ちましょう。

　まぁ、おそらく深夜２時でしょうから
　　私は寝ていますが😅
***
　まだ未確認ですが、
　　Luma AIの
　　　動画生成AIである
　　　　バージョンアップ。

　DreamMachineの
　　推論が10倍になり、
　　　20秒以内に
　　　　Dream Machine v1.6の
　　　　　クリップを生成可能に
　　　　　　なったそうです。

　品質に変わりはない、
　　そうなので、うれしいことですね。

　ただし、
　　サブスクユーザーと
　　　API利用者限定だとか。
[田中義弘さんポスト](https://x.com/taziku_co/status/1840934454078136576?t=brT6dj1Xk_e-vbLkhkxRug&s=19)

[Luma AI公式ポスト](https://x.com/LumaLabsAI/status/1840820602296320083?t=pGR3NX0SJJhvLt2UgKRRGw&s=19)
***
　さて、本題です。

　今回は、久しぶりに、
　　DALL-E3です😸

　X-Twitterにて、
　　studio vecoさんという方が
　　　「素数×画像生成AIが面白い」と
　　　　ポストしました。
　　　　　[studio vecoさんポスト](https://x.com/studio_veco/status/1840468102687100962?t=y0j0sar0AO4fwFgR91wp8A&s=19)

　studio vecoさんの考えは
　　素数によるPromptの
　　　ブラッシュアップ
　　　　または追加するPromptへと
　　　　　昇華された模様です。

　全貌はわかりませんけど、
　　面白い試みかと思います。

　しかし、
　　私はポストを読んでも
　　　イマイチわからず😅

　それでも
　　数学が描く図形が
　　　奇妙な美しさを
　　　　持っていることを
　　　　　知っています。

　そこで
　　studio vecoさんが
　　　ポストの中で、
　　　　紹介した数学的理論を使って
　　　　　女性のドレスの模様に
　　　　　　してみました。

　こちらが
　　その追加Promptになります。
```Text:数学的理論組込Prompt
彼女の服装に、✘✘✘理論の要素を組み込んでください。
```

　使う際は、
　　服を着た女性のPromptのあとに
　　　この追加Promptを追加するだけ。

　あとは
　　微調整をしていきます。

　結果として
　　出来上がったのが、こちら。

素数
![1727752066546.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/b0be08f5-7635-db8b-9278-4e05018f8331.jpeg)

フラクタル理論
![1727752099899.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/e9494c59-911a-7f6c-695f-cf6e85ffa8c0.jpeg)

カオス理論
![1727752085779.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/49ff9981-c97a-7c88-1f4a-12e4c31f3af9.jpeg)

フィボナッチ理論（正確には数列）
![1727752109341.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/52565b0d-ecb9-31cb-dd55-a836ed420abd.jpeg)

　フィボナッチは、
　　どうしても線が出てきて
　　　しまいます。

　編集するしかないかも
　　しれませんね😅

　おそらく、
　　ほかの理論も
　　　組み込めるかと
　　　　思います。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
rosetta is only intended to run on apple silicon with a macos host using virtualization.framework with rosetta mode enabled

# dockerコンテナが立ち上がらない

前日まで同じPCでdockerを使って開発していたのに、別のソースコードをcloneしてきたら、コンテナが半分以上立ち上がらない。

なぜ？

## エラー内容
```
rosetta is only intended to run on apple silicon with a macos host using virtualization.framework with rosetta mode enabled
```

macOSのバージョンによって、rosettaが自動でONになるらしく、
docker desktopのバージョンによって対応できずにエラーが出るらしい？


__・・・そういえば昨日macOSのバージョンアップしたな・・・__

## docker desktopのバージョンアップした

というわけで、docker desktopのバージョンアップして無事ことなきを得ました。

アップデートを無視し続けていたツケが回ってきたというお話。
Windows11(23H2)で「ネットワークに接続しましょう」をスキップする方法

##  0.目次
[1.セットアップ画面](#-1.セットアップ画面)
[2.対処方法](#-2.対処方法)
[3.まとめ](#-3.まとめ)

## 1.セットアップ画面
![network_through.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898103/780aa60f-ae49-45a6-c223-e620b89df4ee.jpeg)
ネットに繋げないと進めない...そんな方へ

## 2.対処方法
### （1） Shiftキー + F10でコマンドプロンプトを起動
　　　　　　　　　　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898103/db07bc57-747e-3eb3-155b-a116792507e4.png" width="300px">

### （2） プロンプト内で以下のコマンドを入力
```shell
cd oobe
```

```shell
BypassNRO.cmd
```
　　　　　　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898103/d528b639-f512-8b87-dc05-5c27a2d8e30e.png" width="500px">

### （3）セットアップが中断されて、再起動が自動で行われる

### （4）「インターネットに接続していません」が表示されたら完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898103/df50b4d4-c561-5c8d-7ba2-d76610822e30.png)

## 3.まとめ
:::note
**[shift] + [F10]　→　「cd oobe」　→　「BypassNRO.cmd」で完了**
:::

お役に立てましたら、いいねやLGTMを押して頂けますと幸いです。
【備忘録】Ubuntuでホームディレクトリを/home以外の場所に置くときは、「ln -s hoge/home /home」とかしてはいけない

### 前提
- Ubuntu Serverを入れてサーバー運用していたマシンを、仕事部屋用作業マシンにしようと思い、再インストールも面倒だったので、```sudo apt install ubuntu-desktop```してデスクトップ版にした。
- 元サーバー運用用なのでディスクは```/var```を大きめに切って、```/var/home```をホームディレクトリの親にしていた
- ルートディレクトリには```ln -s /var/home /home```でリンクを作っていた

2000年頃のLinuxだったらこんな感じで上手くいってたなー、と思いながら何も考えずに上記のセットアップをして運用していたものの、デスクトップ版にアップデートしたら問題発生。

- ブラウザがインストールされていないので、```sudo apt install firefox```したらエラーが発生。

```
$ sudo snap install firefox
[sudo] password for User:
cannot create mount point /tmp/snap.rootfs_00owC7//home: Read-only file system
```

調べてみると、```/home```以外にホームディレクトリがある場合、snapがエラーを吐くとのこと。対策として以下のコマンドを実行。

```
sudo apt update
sudo apt upgrade snapd
sudo snap set system homedirs=/var/home
sudo systemctl restart snapd
```

ところが動かないまま。色々なパターンで試したが、理由は謎のまま動かない。

### 回答

ルートディレクトリ直下のシンボリックリンクは削除し、ホームディレクトリの実体をマウントする。```sudo snap unset system homedirs```も忘れない。

```
sudo mkdir /home
sudo mount --bind /var/home /home
```

起動時にマウントされるように、```/etc/fstab```に以下を追加。

```
/var/home       /home   none    bind    0       0
```

```/etc/passwd```等のホームディレクトリ位置は```/home/$HOME```でOK。

### 結果

```
$ sudo snap install firefox
[sudo] password for User:
firefox 130.0.1-1 from Mozilla✓ installed
```

動いた！

### 結論

今どきシンボリックリンクでホームディレクトリを移動してはいけない。
PLATEAU SDKをUnityにインストールするとTexture is not foundというエラーが大量に発生する

![スクリーンショット 2024-09-29 19.42.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/97cdff0e-f221-3c18-78ca-86dd88fb583a.png)

# 症状

GitのURL指定でPLATEAU SDK 2.3.2をインストールしていたのですが、Consoleに以下のようなエラーが大量に発生しました。

```
Texture is not found : assetPath = Packages/com.synesthesias.plateau-unity-sdk/Images/dark_icon_import.png
UnityEngine.Debug:LogError (object)
PLATEAU.Editor.EditorWindow.Common.PlateauEditorStyle:LoadTexture (string) (at Library/PackageCache/com.synesthesias.plateau-unity-sdk@0f0914676e/Editor/EditorWindow/Common/PlateauEditorStyle.cs:879)
```

PCが2台あるのですが、もともと作業していたPCではエラーは発生せず、新しく環境構築をしたPCでのみエラーが発生している状況です。

# 原因

原因を調査したところ、以下のページを見つけました！

https://github.com/Project-PLATEAU/PLATEAU-SDK-for-Unity/issues/5

どうやら新しいPCでGit LFSを有効にし忘れていただけのようです。（恥ずかしい…）


# 解決手順

以下のコマンドを叩いて、巨大ファイルをダウンロードできるようにします。

```bash
git lfs install

git lfs pull
```

あらためて、PLATEAU SDKをインストールしなおしたところ、エラーが解消されました！


# 最後に

本記事作成にあたり以下のページを参考にさせていただきました。
ありがとうございました。

- https://github.com/Project-PLATEAU/PLATEAU-SDK-for-Unity/issues/5
ZIPファイルを分割して転送

Windowsで、.zipファイルを分割し、復元する方法です。
例えば、転送速度が遅いリモート先に、大きいファイルが一気に送信できないとき、ファイルを分割して転送し、リモート先で復元して展開するといったことができます。

## 分割方法
分割は、[7-Zip](https://7-zip.opensource.jp/)を使うと便利です。
圧縮するときのオプションで、`分割ボリュームサイズ`で、分割するサイズを10MBや100MBなどを選択します。
![7zip_split.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/44cc9b6c-e5f2-ef3c-9520-f9ab3ddfbc7c.jpeg)

圧縮すると、設定したボリュームサイズで連番のファイルが生成されます。
![7zip_split_result.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/6db9bc3f-543c-796d-0b93-ece7c7cb2c49.jpeg)

## 復元方法
コマンドプロンプトを開き、以下の様なコマンドを実行します。
```
copy /B 分割.zip.001.+分割.zip.002+分割.zip.003 compressme.zip
```

例えば、
```
copy /B compressme.zip.001.+compressme.zip.002+compressme.zip.003+compressme.zip.004+compressme.zip.005 compressme.zip
```
と書きます。

すると、復元されたZIPファイルが生成されます。

リモート先に、7-Zipがインストールされている場合は、7-ZipのGUIから復元することも可能です。


Via! (https://qiita.com/magiclib/items/a3044c21d195e542472f)
個人的TRPGbotの制作記

# TPRGbotが作りたい！！！

### 卓回す時にDiscordの中で「いあきゃら」とか、「CCFOLIA」とかのURLを管理失敗する人向け

## 目次
| [1. 目標](#1-目標) |私のやりたかった事|
|:-----:|:-----|
| [2. 成果物](#2-成果物) |結果的に出来上がった物|
| [3. 追加予定の仕様](#3-追加予定の仕様) |追加を予定している要素|
| [4. 悩み](#4-悩み) |技術力ない故の悩み|
| [5. リンク集](#5-リンク集) |リンク集|


## 1. 目標
### 開発目標
1. TRPGを進行する上で便利になるツールの制作
1. 仕様ごとに分割した見やすいコードを意識した制作
1. 処理の安定と24/7に耐えうるプログラム制作
1. データベース化することによって、マルチサーバ上で動作するようにする
### 仕様目標
1. 各TRPGに使うロール等の管理
1. Roomでの秘匿処理の管理
1. 各PCのキャラシの管理
1. 秘匿処理用スレッドを自動作成し、HO毎に自動追加



## 2. 成果物

### Botでできること
1. /newコマンドで新たな卓の作成
1. botから送信されたテキストに返信することによって、URLの紐付けが可能
1. 終了した卓用チャンネルは終了カテゴリに移動

リンク集にもGithubにリンクがあります。

## 3. 追加予定の仕様

### プレイヤー毎に紐付いたデータをKP側に表示
- 地雷チェックシートとユーザの紐付け
- ユーザとPC駒の紐付け

### キャラクタ毎に紐付いたデータをKP側に表示
- 2PL継続など二つがどのシナリオを走っているのかわかるようにしたい

### タイマー機能

### ダイス機能
- 実は/rollが入っているが機能が十分ではないため更新したい


## 4. 悩み

### 技術力が0に等しいことを改めて思い知らされた。

~~開発しながら勉強することも多く、個人的には初のDB連携で、2回ぐらい挫折した。~~

1. 趣味でTRPGをやっているが、知らないことや、人によってサーバの作り方が異なり、いろんな人のサーバを参考にして作ってるが、いいところだけ欲張りたい欲が強すぎてぐちゃぐちゃになる

2. タイマー機能の追加の仕方わからん

3. Pythonの24/7の実行とDBとの接続が時々切れる


## 5. リンク集

https://github.com/Sqald/TRPGbot

https://discordpy.readthedocs.io/ja/latest/



## あとがき

Qiitaの書き方も、Pythonの書き方も難しく、知識と技術の向上が必須であると感じる。
今後の開発も楽しみながらやっていきたいが、飽きないだろうか？
OSSで開発しているので使いたかったら自由に使ってください。
需要はないとは思いますが。

どうぞ今後ともよろしくお願いします。
fastapi-paginationでSQLModelの単一フィールドを取得するとバリデーションエラーが発生


# 問題
FastAPIにページネーション機能を追加するライブラリ「[fastapi-pagination](https://github.com/uriyyo/fastapi-pagination)」で以下のようなコードを書いたところ、エラー「 `Input should be a valid dictionary or object to extract fields from...` 」が発生しました。

```python
from fastapi_pagination.ext.sqlmodel import paginate
from sqlmodel import SQLModel

class User(SQLModel):
    name: str

@router.get("/users", response_model=Page[User])
def get_users(session: SessionDep):
    return paginate(session, select(User.name))
```

```
...
  File "/usr/local/lib/python3.10/site-packages/fastapi_pagination/ext/sqlmodel.py", line 121, in paginate
    return _paginate(
  File "/usr/local/lib/python3.10/site-packages/fastapi_pagination/ext/sqlalchemy.py", line 283, in paginate
    return exec_pagination(
  File "/usr/local/lib/python3.10/site-packages/fastapi_pagination/ext/sqlalchemy.py", line 186, in exec_pagination
    return create_page(
  File "/usr/local/lib/python3.10/site-packages/fastapi_pagination/api.py", line 182, in create_page
    return _page_val.get().create(items, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/fastapi_pagination/default.py", line 73, in create
    return create_pydantic_model(
  File "/usr/local/lib/python3.10/site-packages/fastapi_pagination/utils.py", line 171, in create_pydantic_model
    return model_cls.model_validate(kwargs, from_attributes=True)  # type: ignore
  File "/usr/local/lib/python3.10/site-packages/pydantic/main.py", line 509, in model_validate
    return cls.__pydantic_validator__.validate_python(
pydantic_core._pydantic_core.ValidationError: 50 validation errors for Page[User]
items.0
  Input should be a valid dictionary or object to extract fields from [type=model_attributes_type, input_value='...', input_type=str]
    For further information visit https://errors.pydantic.dev/2.6/v/model_attributes_type
...
```

# 対策
不具合として報告したところ、修正版がリリースされました🚀
同問題が発生した場合は、バージョン `0.12.28` 以降にアップデートすると解決します。

https://github.com/uriyyo/fastapi-pagination/issues/1244
OVAファイルからOpenShift VirtualizationのVMを作成してみた

# 初めに
OVAファイルからOpenShift VirtualizationのVMを作成できて起動できるかを試す機会がありましたので、その手順をご紹介します。

# 環境
1. OpenShiftバージョン： 4.16
2. OVAファイル： IBM Storage Copy Management(ISCDMVCM_2.2.24_Linux_Eng.ova)

# 前提条件
以下のOperatorが導入済みであること
・OpenShift Virtualization
・Migration Toolkit for Virtualization Operator
・NFSサーバーを用意し、エクスポートフォルダーにOVAファイルを格納しておくこと
 
# 手順
#### 1. OpenShit Consoleの左ペインから、「Migration」→「Providers for Virtualization」を選択。出てきた画面で、「Create Provider」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/24064932-ef99-894b-1544-02168ce53f1b.png)

#### 2. Provider Detailsの中から「Open Virtual Appliance(OVA)」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/e542fb2c-a0ff-134a-2c5d-f9ed9ca8f929.png)

#### 3. 以下の項目を入力し、「Create provider」をクリックします。
・Provider resource name:任意の文字列。ここではovaとします。
・URL: OVAを置いたNFSサーバーの情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/c15a099c-8aee-a666-ece3-298b1cd3f98f.png)


#### 4. 以下のようなProviderの詳細画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/fec424a7-d7ad-8bb0-1e4a-c666a7434fa1.png)


#### 5. 左のペインから「Migration」→「Plans for Virtualization」を選択、出てきた画面の右ペインで、「Create Plan」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/bfb92a63-408c-03f0-58e1-4f014413b4b2.png)


#### 6. Select source providerから、先に作成したOVAのプロバイダー（ここでは「ova」）をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/f2c0e0a3-8f9a-b108-c225-0e8e953e78c1.png)


### 7. Select virtual machinesにプロバイダー（NFSサーバー）の中に置いたOVAファイルの一覧が出てくるので、インポートしたいOVAを選択し、「Next」をクリックします。
（ここでは、1個しかない、「SCDM-2.2.24.0-23」を選択します。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/8c9edbcc-6ff7-ea8c-9ad9-6aca1f299e5e.png)


### 8. 以下の項目を入力し、「Create migration plan」をクリックします。
・Plan name: 任意の値。ここでは「scdm」とします。
・Traget namespcace: 仮想マシンを作成するWorkspace。ここでは、「virtual-machines」とします。
・上記以外の項目：デフォルト値のまま
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/1913cc63-cc94-35fa-072c-2f34c18f1954.png)


### 9. Migration Planの詳細ページが出るので、「Start migration」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/a8afd9ef-41ff-b34e-5d14-86c74363b1d8.png)


### 10. 確認画面が出るので、「Start」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/f20d880f-9053-7c9b-56f5-ab99384e22a4.png)


### 11. StatusがRunningになり、マイグレーションが開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/abf8ae70-f081-a23f-dd32-20c284917c9e.png)


### 12. しばらくすると、StatusがSucceededになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/b4cfb86c-7318-7500-c130-8ced9c2836a3.png)


### 13. 左のペインから「Virtualization」→「VirtualMachines」を選択すると、右のペインにて、作成された仮想マシンが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740352/cbd19e2b-6a5c-03a6-217f-b780d59334c3.png)


# 所感
以外に簡単にOVAから仮想マシンを作成できました。今回試したのは１個のOVAのため、ほかのOVAでもうまくいくかは不明ですが、この手順を参考に、試してみてください。
OACで式やコードを書かずに経過日数を計算

# はじめに
OAC（**Oracle Analytics Cloud**） 2024年9月の更新で、経過期間を簡単に求めることができる機能が搭載されましたので、どんな動きになるのかを試してみました。

# サンプルデータ
Excelでこんなデータを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/19a09427-d07e-a526-2456-d6a782499555.png)

# 経過期間を求める
OACにログインして、作成したExcelファイルをデータセットとしてアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1ffda76f-fa81-0db3-2acf-304edcff9b83.png)

データセットを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/11eaad06-d403-3560-d392-a725be324a6a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/b851fb5a-b1b2-1438-4b88-9b01c160af52.png)

「受注日」のオプションをクリックして「期間の計算」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/d2bc8e03-1e92-871e-6101-34cb880539f8.png)

新しい列の名前の他に、計算の方向（から、まで）と計算の対象、計算単位を指定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/222184b9-b089-1d79-7bb6-77a38bdfab69.png)

もう少し具体的に見ていきます。
Time DifferenceをSinceにしているので、受注日から対象となる日付までを計算します。
Relative toで現在の日時が選択されているので、「受注日から現在日時まで」という意味になります。
ドロップダウンリストを開くと、他の日付列が選択できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/ead998b3-b363-9937-22ed-371d899d8899.png)

例えば、ここで「発送日」を選択すると受注日から発送日までの期間を求めることになります。
最後に Calculate in で単位を設定します。デフォルトでは年でした。
受注日も発送日も2024年だったので、結果は0となっています。
「日」に変更してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/9a9316ad-5c19-53ef-6915-a4acd0b861a3.png)

こんな感じになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/93c4f106-6be8-f499-8a81-26650218ef0f.png)

これでよければ、「ステップの追加」をクリックします。
なお、SinceではなくUntileを選択していたら、計算の方向が逆になってこうなっていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/7718b18e-4e9c-febe-1fb8-994dd2f1778e.png)

実のところ、これまでもTIMESTAMPDIFF関数を使えば、式を書いて同じことを実現できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/b335e23f-21a0-a104-fa68-ac9062cc9658.png)

ただ、「式を書く」というのは何かとハードルが高いので、より簡単に計算できるようになったのは良かったと思います。
新卒エンジニアで輪読会をしている話 Part2

## はじめに
こんにちは、Supershipの笠井です。
去年のアドベントカレンダーにて[新卒エンジニアで輪読会をしている話](https://qiita.com/haruki_kasai/items/1e429f66d75a0285b45c)という記事を投稿しました。
今回は、前回の記事以降の活動を紹介したいと思います。

今年の6月から23新卒に加えて、24新卒エンジニアも1名参加してくれています。

## 輪読会で読んだ(読んでいる)書籍
### 世界一流エンジニアの思考法
https://amzn.asia/d/3Yy0ElI

著者である牛尾さんがMicrosoft社で一流エンジニアと働く中で得た経験や学びがまとめられています。

- 一流エンジニアは「試行錯誤を悪と考える」、「理解に時間をかける」、「メンタルモデルを作る」などの点でそれ以外のエンジニアと違う
- アメリカで見つけたマインドセットとして、優先順位をつけて1つのタスクにフォーカスしその他はやらないという「Be Lazy」(怠惰であれ)という考え方がある
- コミュニケーションの極意として、「最初は情報量を減らし付加的な情報も聞かたら答える」ようにする
- リモートワークでは特に仕事とプライベートの境を意識することが大事
- 日本の批判文化を壊し、失敗に寛容になるべき

エンジニアとして効率良く業務を遂行するのに役立つ考え方や、日本の文化で正すべきところについて書かれており、自身の仕事に対する考え方を見つめ直すきっかけとなりました。

輪読会内では、仕事中のリフレッシュ方法について盛り上がることもありました。
![スクリーンショット 2024-10-01 9.47.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620839/3991c421-e48e-cef6-e893-8c87e220a8b8.png)




### ソフトウェアアーキテクチャの基礎
https://www.oreilly.co.jp//books/9784873119823/

現在輪読会で読んでいる書籍です。

題名の通りソフトウェアアーキテクチャ基礎や、アーキテクトの仕事について説明されています。

- ソフトウェアアーキテクチャの定義
    - システム構造
    - イリティ特製
    - アーキテクチャ決定
    - 設計指針
- アーキテクトに期待されること
    - アーキテクチャ決定を下す
    - アーキテクチャを継続的に分析する
    - 最新のトレンドを把握し続ける
    - 決定の順守を徹底する
    - 様々なものに触れ、経験している
    - 事業ドメインの知識を持っている
    - 対人スキルを持ち合わせている
    - 政治を理解し、かじ取りする
- ソフトウェアアーキテクチャはトレードオフが全てである
    - 「どうやって」より「なぜ」の方がずっと重要
- ソフトウェアアーキテクチャの基礎
    - モジュール性
    - アーキテクチャ特性
        - 明らかにするための考え方
        - 計測
        - スコープ
    - コンポーネントベース思考
- 各アーキテクチャスタイルの説明
    - パイプラインアーキテクチャ
    - マイクロカーネルアーキテクチャ
    - サービスベースアーキテクチャ
    - ...

ソフトウェアアーキテクチャの基礎から各アーキテクチャの構造/特徴、アーキテクトとしての働き方について学ぶことができていると実感します。

各々の経験を本の内容に照らし合わせて、それを他メンバーに共有したりもしています。
![スクリーンショット 2024-10-01 10.15.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620839/7fb39fe2-e22e-0ed3-fec1-381a135f9a66.png)


## 終わりに
今後も多くの書籍を読んで技術力向上、ナレッジ共有を積極的に行っていきたいです！
また、24新卒メンバーももっと巻き込んでいきたいです。
AzCopyについて

AzCopyについて備忘録として書いていきます。


# 1 AzCopyとは

AzCopyとはコピーコマンドであり、ローカルネットワークとストレージアカウント間でコピーすることができます。

# 2 注意点

AzCopyは、以下のサービスでしか使用できないことに注意です。

使用可能サービス
・Blob
・ファイル

使用不可サービス
・テーブル
・キュー
【Javascript】テンプレートリテラル（テンプレート文字列）



# 文字列の中に式や変数を埋め込むことができる
```ruby:書き方
var name = "ペンギン";
var age = 30;

console.log("こんにちは。私は" + name + "です。" + age + "歳です。");

↓

console.log(`こんにちは。私は${name}です。${age}歳です。`);
```
```
こんにちは。私はペンギンです。30歳です。
```

# 改行文字がそのまま改行として扱われる
```ruby:書き方
var msg = `こんにちは。
私はペンギンです。
30歳です。`;

console.log(msg);
```
```
こんにちは。
私はペンギンです。
30歳です。
```
今更きけないpleiades-all-in-oneを使わないEclipseのインストールに役立つリンク集

## こちらがリンク集です！Eclipseを今日から始めましょう！

やり方としてはEclipseの日本語化の記事を読みながら①Eclipseをインストール、②Pleiadesのプラグインのダウンロードと展開をしてください。

[Eclipseのダウンロード](https://www.eclipse.org/downloads/)

[Pleiadesのプラグイン](https://willbrains.jp/)

[Eclipseの日本語化(Pleiadesプラグインの導入方法)](https://qiita.com/mizu4my/items/b63095c89464ac3b054c)

## JavaでHelloWorldを表示(Eclipseを使わず手動でやる場合)

Javaで「Hello, World!」プログラムを作成し、javacでコンパイルする手順を説明します。

## 1. ソースコードの作成

まず、テキストエディタを開き、以下のコードを入力します:

```java
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
```

このファイルを「Hello.java」という名前で保存します[1]。

## 2. コンパイル

次に、ターミナルを開き、「Hello.java」ファイルを保存したディレクトリに移動します。そして、以下のコマンドを実行してプログラムをコンパイルします:

```
javac Hello.java
```

コンパイルが成功すると、「Hello.class」というファイルが生成されます。

## 3. 実行

最後に、以下のコマンドを実行してプログラムを実行します:

```
java Hello
```

正常に実行されると、コンソールに「Hello, World!」と表示されます。

## 注意点

- javacコマンドを使用する際は、ソースファイル名（Hello.java）を指定します。
- javaコマンドを使用する際は、クラス名（Hello）のみを指定し、.classは付けません。
- コンパイルと実行の前に、JDKがインストールされていることを確認してください。
- パスが正しく設定されていない場合、javacコマンドが認識されないことがあります。その場合は、環境変数の設定を確認してください。

このプロセスを通じて、基本的なJavaプログラムの作成、コンパイル、実行の流れを理解することができます。
LinuxのIntel x86のIntrinsic関数をRISC-VやARM用にポートする（9）

Intel Intrinsic関数をポートする場合において、ランダムに生成したテストデータを含んだテスト記述ファイルをx86-64 PCまたはサーバによって作成し、それをRISC-VやIBM Power、ARMに移動させて、テストを実行したほうが良いという結論に達した。これはネットワークアプリケーションなどを作るよりも良い方法である。理由を以下に記述する。

* 現在は、かなりの大容量のHDDストレージが使えるようになっている。なので、HDDを移動させてテストするという戦略が使用できる。テラバイト単位の情報をネットワークに流すのはちょっと心配になる。
* 暗号化が必要ない。
* テストのエビデンスが残しやすい。
* リアルタイム性が必要ないため、ネットワークアプリとしてテストフレームワークを作る必要性はない
* ネットワークアプリケーションを作ることは、ネットワークやセキュリティの知識なども必要である。

テスト記述ファイルには、IntelのIntrinsicに、ランダムに値を入力した入力値と、出力値がそれぞれ整理されて格納されている。x86-64 のLinux　PCまたはサーバによって作成できる。
そのテスト記述ファイルを、RISC-Vなどのターゲットとなるコンピュータに何らかの形で移動させ、ポートコードを付加して、ポートコードにIntel Intrinsicに入れた値と同じ値を入れ、帰ってきた値が同じであることをチェックし、同じでなければ、エラーを出力する。
テストが正常に完了したら、レポートを吐く。

テスト用のファイルはIntel x86によって作成可能であるため、テストファイルをとりあえず作って、IBM PowerやRISC-Vにファイルを移動させ、ポートコードを人力でドキュメントを読みながら試行錯誤で作る、テストフレームワークを稼働させれば、コードのエラーやレイテンシが表示されるため、それを見て、ポートコードを修正するなどの戦略が使える。
Marketing Cloud Connect Setup


https://trailhead.salesforce.com/content/learn/modules/marketing-cloud-connect

# Test the Connection

+ [名のフィールド属性をマップしようとすると、リードのみ選択でき、Trailhead で説明されているように連絡先を選択することはできません。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eq3IISAY)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/6dfc6904-e988-ff91-1f6c-bc1fb269781a.png)
【Linux】LPIC102合格の最短ルート

## 使用した書籍やサイト
・あずき本
・ping-t

## 受験までの期間
・1週間程度

## 試験までの流れ
１．あずき本の内容を全部覚えるのではなく、こんなコマンドオプションあるんだ～、ぐらいの理解で、とりあえず一周読む。

２．ping-tの最強Web問題集を使用（10問形式で解く→解説を繰り返して全問行う。）
【重要！】この期間が一番しんどいけど、諦めずに毎日コツコツと短い時間でもいいから継続する。

３．２を全問分２～３回分繰り返したら、模擬試験にチャレンジしてみる。

４．模擬試験でコンスタントに９割取れればPeasonVUEにて試験予約

５．コマ問もやってみる。（実際にコマンド手打ちでの解答により理解が深まる。）

６．試験

## 受験してみての感想
　LPIC101の時も思いましたが、ping-tの問題集にかなり助けられた印象です。
　（ほぼping-tと同様の問題が出題していた。）
　是非、受験を考えている方は参考にしてください。
ロール、外部ロール、内部ロール、共有セット（取引先と取引先責任者リレーション）、取引先リレーションデータ共有

ロール、外部ロール、内部ロール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/b9163399-8de0-2f58-134b-08dcd5c231b2.png)

共有セット（取引先と取引先責任者リレーション）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/c23b5c35-16f5-02ff-fa89-33aca8a3a630.png)


取引先リレーションデータ共有

https://qiita.com/tatsuro-suzuki/items/a82198471e30f293bc69


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/2d9da851-c7b2-1fde-1833-5fada8d94f69.png)
空き容量を意図的に減らす

最近、C ドライブの空き容量が少ないときに OS がどのような動作をするか調査する機会がありました。[fsutil file](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/fsutil-file) コマンドにより、簡単に空き容量の調整ができたので、使用した PowerShell スクリプトを残しておきます。

## 環境
Windows OS 全般

## PowerShell スクリプト
```Powershell
# Cドライブの情報を取得
$drive = Get-PSDrive -Name C

# Cドライブの空き容量 (バイト単位)
$freeSpace = $drive.Free

# 1GB (1073741824 バイト)
$targetFreeSpace = 1GB

# 1GBを残すために作成するダミーファイルのサイズ (バイト単位)
$dummyFileSize = $freeSpace - $targetFreeSpace

# 作成するダミーファイルのパス
$dummyFilePath = "C:\dummyfile.dat"

# ダミーファイルのサイズが正の数の場合のみファイルを作成
if ($dummyFileSize -gt 0) {
    fsutil file createnew $dummyFilePath $dummyFileSize
} 
```

## スクリプト解説
この PowerShell スクリプトは、Cドライブの空き容量を計算し、1GB の空き容量を残すように指定したサイズのダミーファイルを作成するものです。これにより、Cドライブの空き容量を自動的に 1GB まで減らすことができます。

### 1. **Cドライブの情報を取得**
```powershell
$drive = Get-PSDrive -Name C
```
`Get-PSDrive` コマンドを使用して、Cドライブの情報（容量、空き容量など）を取得し、`$drive` 変数に C ドライブの情報が格納しています。

### 2. **Cドライブの空き容量 (バイト単位) を取得**
```powershell
$freeSpace = $drive.Free
```
`$drive.Free` は、Cドライブの空き容量をバイト単位で返します。この空き容量が `$freeSpace` 変数に格納されます。

### 3. **1GB をバイトで表す定数を指定**
```powershell
$targetFreeSpace = 1GB
```
1GBは 1,073,741,824 バイト（2の30乗）です。このサイズを `$targetFreeSpace` 変数に格納しています。この1GBを「目標の空き容量」として設定し、それ以上に空き容量がある場合にファイルを作成していきます。

### 4. **作成するダミーファイルのサイズを計算**
```powershell
$dummyFileSize = $freeSpace - $targetFreeSpace
```
現在の空き容量 `$freeSpace` から目標の空き容量 `$targetFreeSpace`（1GB）を引いた値が、ダミーファイルのサイズとなります。つまり、Cドライブの空き容量が1GBになるように調整したサイズのダミーファイルを作成するために、このサイズを計算しています。

### 5. **ダミーファイルのパスを指定**
```powershell
$dummyFilePath = "C:\dummyfile.dat"
```
ダミーファイルの保存場所とファイル名を指定しています。ここでは、`C:\dummyfile.dat` としてファイルを作成するように設定しています。

### 6. **空き容量が 1GB より多い場合にダミーファイルを作成**
```powershell
if ($dummyFileSize -gt 0) {
    fsutil file createnew $dummyFilePath $dummyFileSize
}
```
計算したダミーファイルのサイズ `$dummyFileSize` が正の値（0より大きい）場合にのみ、ダミーファイルを作成します。`fsutil file createnew` コマンドを使うと、指定したパス `$dummyFilePath` に `$dummyFileSize` のサイズを持つ空のファイルが作成できます。作成完了まで、それほど時間はかかりません。

## さいごに
データは、バックグラウンドで作成されたり、削除されたりするものがあり、スクリプト実行してから時間が経つと空き容量が 1GB ではなくなりますが、正確さは問題ではないのでいいかなと思ってます。
【基本情報】独学マラソン 情報セキュリティ Day 1

PdM、PM、POなどの管理者側の業務をしていると、どうしても

「基本的なITの知識不足が足枷になっている‥」

という実感があったので、基本情報処理技術者の勉強をしていこうと思います。

ただの暗記ではなくきちんと使える知識として。

:::note worn
この記事は自分用の備忘録です。
:::


# 情報セキュリティの3要素

<br>

### 機密性（confidentiality）

- 許可された利用者のみが必要な情報にアクセス可
    - 誰にでもアクセス権付与しちゃうのは機密性が低い

<br>

### 完全性（integrity）

- 改竄されず、過不足のない正確なデータが保持されている状態
    - 変更履歴を残さないシステムは完全性が低い
        - 便利だけど編集権限与えすぎるのもよくないということ

<br>

### 可用性（availability）

- データが必要な時にいつでもアクセス可能で、かつ使用できる状態
    - オンプレだと停電でアウトだから、クラウド化は可用性が高い

<br>

# 情報セキュリティの新しく追加された4要素

<br>

### 信頼性（Reliability）

- データやシステムが期待通りの結果を出すこと
    - バリデーションが何もないシステムは信頼性が低い
        - エラーハンドリングもきちんとしないといけないな

<br>

### 真正性（Authenticity）

- データにアクセスする人がアクセス許可された者であること
    - 日本語からは連想しづらいけれど、Authって書いてるからそういうこと
        - 二段階認証、デジタル署名大事

<br>

### 否認防止（non-repudiation）

- システムで取り扱うデータが後から否定されないように証明をしておくこと
    - 悪い人がハッキングした時に「俺はやってないぜ！」と否認されないようにログを取っておく必要がある
        - とはいえアクセスログって多重VPNでノーログポリシー使われたらもう特定できないとか聞いた気が‥謎

<br>

### 責任追跡性（Accountability）

- 情報やデータを使った人の動きを追跡すること
    - 否認防止と責任追跡性はつなげて理解した方がよさそう

<br>

<table>
  <caption>否認防止と責任追跡性の違い</caption>
  <thead>
    <tr>
      <th></th> <th>否認防止</th> <th>責任追跡性</th>
    </tr>
  </thead>
  <tr>
    <td> 目的 </td> <td>後から行動を否認されないようにする。「俺じゃないっす！」を封じる。</td> <td>誰が何を行ったかを記録し、責任を明確にする。「これ、誰がやらかしたん？」を特定できるようにする。</td>
  </tr>
</table>


# 感想
機密性や完全性を重視しつつ、権限与えたりするときは認証をつけたりログを取れる状態にする（否認防止・責任追跡性、真正性）ことが大事なんだなぁ。

# 参考

https://directcloud.jp/contents/security-info/information_security/