OmniAICreator/Qiita-1.07M huggingface dataset:
Oracle表領域情報を取得するSQL

:::note
Oracle Database 19c用
BIGFILEに対応し、自動拡張にも対応したものになっております。
表領域個別ブロックサイズにも対応したものになっております。
:::

:::note warn
警告
SMALLFILEで自動拡張ありとなしのファイルが混在している場合には、正しく表示されません。
:::

## 主な列の説明。

| 列名 | 説明 |
|:-----------|:------------|
| tsname | 表領域名|
| bigfile | BIGFILE表領域なら Y、SMALLFILE表領域なら N|
| tsmax | 表領域最大サイズ(MB) データファイルが自動拡張の時は、自動拡張の最大サイズの合計。|
| autoextensible | 自動拡張の有無|
| tssize | データファイルの合計サイズ(MB)|
| tsused | 表領域の使用サイズ(MB)|
| tsfree | 表領域の未使用サイズ(MB)|
| tsusedpct | 表領域の使用率。計算式は、tsused/tsmax |

## SQL

```sql
set pages 150 lin 150
col tsname format a25
col tsmax format 999,999,999.99
col tssize format 999,999,999.99
col tsused format 999,999,999.99
col tsfree format 999,999,999.99
col tsusedpct format 990.99
WITH
 total_free_space AS (
 SELECT tablespace_name , SUM(bytes) AS bytes
 FROM dba_free_space
 GROUP BY tablespace_name
 ),
 ts_file_spec AS (
 select tablespace_name, sum(bytes)/1024/1024 AS bytes_mb, autoextensible
 from dba_data_files
 group by tablespace_name, autoextensible
 )
SELECT
 usage.tablespace_name AS tsname
 , tblsp.bigfile
 , usage.tablespace_size * tblsp.block_size/1024/1024 AS tsmax
 , spec.autoextensible
 , spec.bytes_mb as tssize
 , usage.used_space * tblsp.block_size/1024/1024 AS tsused
 , (usage.tablespace_size - usage.used_space) * tblsp.block_size /1024/1024 AS tsfree
 , usage.used_percent AS tsusedpct
FROM
 dba_tablespace_usage_metrics usage
 INNER JOIN dba_tablespaces tblsp ON usage.tablespace_name = tblsp.tablespace_name
 INNER JOIN total_free_space free ON usage.tablespace_name = free.tablespace_name
 INNER JOIN ts_file_spec spec ON usage.tablespace_name = spec.tablespace_name
ORDER BY
 usage.tablespace_name;
```
√100(ルート百)までのテーブル(表)を作って遊ぶ。(sqrtを使う)


- 過去ログを見よ
- M5NanoC6での予定は、未定

目的
----

配列に0から100を入れると0から10を解す
10×10=100で百がルートの中に入る方で10が答え
32ビットの整数のみ
最終的には、教科書等の裏にあるルートの表で確認する
(教科書裏)(どっちの(なんのこと))


プログラム
----

オンラインコンパイラ paiza


```c++




#include <math.h>

#include <iostream>
using namespace std;
int main(void){
    // Your code here!

    int al;
    int y[100+1];

    printf("START\n");
    for(int i = 0;i<=100;i++ ){
        al   = sqrt( i );
        y[i] = al;
        printf("[%d]=%d\n",i,al);
    }

    for(int i = 0;i<=100;i++ ){
        if( (i % 10) == 0 ) {printf("\n");}
        printf("%d,",y[i]);
    }
    
}




```


```



START
[0]=0
[1]=1
[2]=1
[3]=1
[4]=2
[5]=2
[6]=2
[7]=2
[8]=2
[9]=3
[10]=3
[11]=3
[12]=3
[13]=3
[14]=3
[15]=3
[16]=4
[17]=4
[18]=4
[19]=4
[20]=4
[21]=4
[22]=4
[23]=4
[24]=4
[25]=5
[26]=5
[27]=5
[28]=5
[29]=5
[30]=5
[31]=5
[32]=5
[33]=5
[34]=5
[35]=5
[36]=6
[37]=6
[38]=6
[39]=6
[40]=6
[41]=6
[42]=6
[43]=6
[44]=6
[45]=6
[46]=6
[47]=6
[48]=6
[49]=7
[50]=7
[51]=7
[52]=7
[53]=7
[54]=7
[55]=7
[56]=7
[57]=7
[58]=7
[59]=7
[60]=7
[61]=7
[62]=7
[63]=7
[64]=8
[65]=8
[66]=8
[67]=8
[68]=8
[69]=8
[70]=8
[71]=8
[72]=8
[73]=8
[74]=8
[75]=8
[76]=8
[77]=8
[78]=8
[79]=8
[80]=8
[81]=9
[82]=9
[83]=9
[84]=9
[85]=9
[86]=9
[87]=9
[88]=9
[89]=9
[90]=9
[91]=9
[92]=9
[93]=9
[94]=9
[95]=9
[96]=9
[97]=9
[98]=9
[99]=9
[100]=10

0,1,1,1,2,2,2,2,2,3,
3,3,3,3,3,3,4,4,4,4,
4,4,4,4,4,5,5,5,5,5,
5,5,5,5,5,5,6,6,6,6,
6,6,6,6,6,6,6,6,6,7,
7,7,7,7,7,7,7,7,7,7,
7,7,7,7,8,8,8,8,8,8,
8,8,8,8,8,8,8,8,8,8,
8,9,9,9,9,9,9,9,9,9,
9,9,9,9,9,9,9,9,9,9,
10,


```
for() の代わりにwhileを使える部分

最近知ったものです。
初心者の方は参考になるかも！

```java
int limit = ?;
for(int i=0; i<limit; i++){
    ~~~;
}
```
の代わりに、
```java
while(limit-- >= 0){
    ~~~;
}
```
が使えるという話！

ただし反復する回数は等しいが、前者のiは1ずつ増えるのに対し、
後者はlimitが1ずつ減るという違いがある。

後者のやり方で1ずつ増やそうとすると、
```java
int limit = ?;
while(limit > i++){
    ~~~;
}
```
となり、結局iを使うことになるので、forの方がiのスコープが狭くなって使いやすいと思います。スコープが狭いということは、他の部分でiが使えるということなので。

結論、繰り返し処理を行うだけでいいならwhileを使った方がすっきりする
DB から取得した長文を <div> で綺麗に表示する方法（Tailwind CSS）

# 基本的な折り返し (break-words)
```
<div class="w-full bg-gray-100 p-3 border border-gray-300 break-words">
    {{ $collection->description ?? '' }}
</div>
```

before
![スクリーンショット 2025-02-20 20.18.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/9859bc05-ad43-41ba-a657-171ea3caea9e.png)

after
![スクリーンショット 2025-02-20 20.20.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/dc3e7d7a-d18c-4c47-bccc-841dea12f916.png)



# resize-y を適用（基本的なリサイズ）
```
<div id="description"
    class="w-full min-h-12 bg-gray-100 p-3 border border-gray-300 focus:outline-none focus:border-indigo-500 focus:ring-2 focus:ring-indigo-200 text-base text-gray-700 leading-6 transition-colors duration-200 ease-in-out overflow-y-auto resize-y">
    {{ $collection->description ?? '' }}
</div>
```
before
![スクリーンショット 2025-02-20 20.55.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/c06dc78c-3012-4b18-a78a-47134d462f5d.png)

after
![スクリーンショット 2025-02-20 20.55.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/476e7534-b626-49e8-ab1a-2a50b7968e06.png)


# 長すぎる場合にスクロール可能 (max-h-64 overflow-y-auto)
```
<div class="w-full min-h-12 max-h-64 overflow-y-auto bg-gray-100 p-3 border border-gray-300 whitespace-pre-wrap">
    {{ $collection->description ?? '' }}
</div>
```
before
![スクリーンショット 2025-02-20 20.57.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/c29e6bf4-80bb-4f15-94e7-8baf24a3ecb0.png)


after
![スクリーンショット 2025-02-20 20.57.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/f3c943ae-af8c-4b07-8766-de12781c2e5d.png)
Kubernetes: .status.conditions 実装チェックリスト

<!-- Kubernetes: CRDを作るなら「.status.conditions」を活用しないともったいない！-->
https://qiita.com/suin/items/0c8d6692d06abab3a4f8

## 基本構造の実装

- [ ] `type` フィールドが実装されており、先頭大文字のCamelCaseで記述されている
- [ ] `status` フィールドが実装されており、"True"/"False"/"Unknown"のいずれかの値のみを使用している
- [ ] `lastTransitionTime` フィールドが実装されており、ISO8601タイムスタンプを使用している
- [ ] `reason` フィールドが実装されており、UpperCamelCaseで簡潔に記述されている
- [ ] `message` フィールドが実装されており、人間が理解できる詳細な説明が含まれている

## Conditionタイプの設計

- [ ] 複数の独立したConditionで状態を表現している
- [ ] 各Conditionが異なる側面（準備完了、処理中、エラーなど）を表現している
- [ ] 並行する状態を矛盾なく表現できる設計になっている
- [ ] リソースの全体的な可用性を示す`Ready`（または類似の）Conditionが実装されている
- [ ] 既存ツールとの互換性のため、標準的な命名規則に従っている

## 状態定義

- [ ] True: 条件が現在成立している状態が明確に定義されている
- [ ] False: 明確に「成立していない」と判断できる状態が定義されている
- [ ] Unknown: コントローラーが判断不能または未評価の状態が定義されている
- [ ] 状態が`False`の場合、`reason`と`message`で詳細情報を提供している

## ドキュメンテーション

- [ ] Conditionタイプと説明の一覧表が作成されている
- [ ] 各Conditionの取りうる状態とその説明が文書化されている
- [ ] 状態遷移図が提供されている

ドキュメンテーションの例:

**Conditionタイプと説明の一覧表の例**

| Conditionタイプ | 説明 |
|---------------|-------------|
| Ready | アプリケーション全体の準備状態 |
| DatabaseReady | データベース接続とマイグレーションの状態 |
| ApplicationReady | アプリケーションコンテナとサービスの状態 |

**各Conditionの取りうる状態とその説明の例**

| Status | Reason | 説明 | 運用者のアクション |
|--------|---------|-------------|-----------------|
| True | DatabaseConnected | データベースに接続され、マイグレーションが完了している | 対応不要 |
| False | ConnectionFailed | データベースへの接続が確立できない | データベースの認証情報とネットワーク接続を確認 |
| False | MigrationFailed | データベースマイグレーションが失敗した | マイグレーションログとデータベースの状態を確認 |
| False | CredentialsMissing | データベースの認証情報が正しく設定されていない | Secretの設定を確認 |
| Unknown | ConnectionTimeout | データベース接続確認がタイムアウトした | データベースの可用性とネットワーク状態を確認 |

**状態遷移図の例**

```mermaid
stateDiagram-v2
    direction LR
    [*] --> True: ContainersReady
    True --> False: ContainerCrashLoopBackOff
    True --> False: ImagePullBackOff
    False --> Unknown: ProbeFailure
    Unknown --> True: ContainersReady
    False --> True: ContainersReady
```

## 世代管理

- [ ] `.status.observedGeneration`を実装している
- [ ] リコンシリエーション時に`metadata.generation`の値で更新している

## 監視対応

- [ ] kube-state-metricsで扱える形式でConditionを実装している
- [ ] Prometheusメトリクスとして収集可能な形式になっている
- [ ] イベント（Events）と組み合わせた監視が可能な設計になっている
[Rails migration] ユニーク制約を1行で書きたいんだ！

# 概要

テーブル作成時に **「特定のカラムに対して、ユニーク制約を適用したい」** ケースがよくあると思います。

ユニーク制約を適用する方法として、2パターンがあるのですが、個人的に「`1`」の書き方が好みではないので、スッキリ記載できる「`2`」のパターンをなるべく採用したいと考えています。
1. `create_table` 後に `add_index` を使用する
1. `unique: true` を使用する

ただし、いざ作業する際に **「あれ？どうするんだっけ？」** と混乱することが多かったため記事の執筆に至りました。

# 結論
以下のようにします。

```ruby
create_table :users do |t|
  t.string :unique_code, index: { unique: true }
end
```

# ダメなケース（落とし穴）

以下の書き方では、**マイグレーションは成功** しますが、ユニーク制約は適用されません！

なんだと!?

```ruby 
create_table :users do |t|
  t.string :unique_code, unique: true
end
```

# 検証

検証していきましょう！

検証のため、事前にスキーマ情報をモデルに追加してくれる 「`annotate gem`」をインストールしておくと便利です。

https://qiita.com/koki_develop/items/ae6b5f41c18b2872d527


### 正常形

モデルと、マイグレーションを作成します。
```bash
rails g model Test unique_code:string
      invoke  active_record
      create    db/migrate/20250220105451_create_tests.rb
      create    app/models/test.rb
      invoke    rspec
      create      spec/models/test_spec.rb
      invoke      factory_bot
      create        spec/factories/tests.rb
```

マイグレーションファイルを変更します。

```ruby
class CreateTests < ActiveRecord::Migration[7.0]
  def change
    create_table :tests do |t|
      # , index: { unique: true } を追加
      t.string :unique_code, index: { unique: true }

      t.timestamps
    end
  end
end
```

実行します。
```bash
rails db:migrate
```

モデルの内容を見ると、ユニーク制約が適用されていることがわかりますね！
OK!

```ruby
# == Schema Information
#
# Table name: tests
#
#  id          :bigint           not null, primary key
#  unique_code :string(255)
#  created_at  :datetime         not null
#  updated_at  :datetime         not null
#
# Indexes
#
#  index_tests_on_unique_code  (unique_code) UNIQUE
#
class Test < ApplicationRecord
end
```

### 異常系
さて次は、期待した挙動にならないパターンを見ていきましょう。

```bash
rails g model AbnormalTest unique_code:string
      invoke  active_record
      create    db/migrate/20250220105951_create_abnormal_tests.rb
      create    app/models/abnormal_test.rb
      invoke    rspec
      create      spec/models/abnormal_test_spec.rb
      invoke      factory_bot
      create        spec/factories/abnormal_tests.rb
```

マイグレーションファイルを変更します。
```ruby
class CreateAbnormalTests < ActiveRecord::Migration[7.0]
  def change
    create_table :abnormal_tests do |t|
      # , unique: true を追加
      t.string :unique_code, unique: true

      t.timestamps
    end
  end
end
```

実行します。
```bash
rails db:migrate
```

マイグレーションは成功します（個人的にはエラーになってほしい...🥲）
そして、ユニーク制約が適用されていないことがわかりますね...

```ruby
# == Schema Information
#
# Table name: abnormal_tests
#
#  id          :bigint           not null, primary key
#  unique_code :string(255)
#  created_at  :datetime         not null
#  updated_at  :datetime         not null
#
class AbnormalTest < ApplicationRecord
end
```

## まとめ
ユニーク制約が正しく適用されない場合は、マイグレーションが失敗してくれると嬉しいのですが…
この点、何かしたらの理由がある場合はコメントで教えてくれると嬉しいです🙋‍♂️

良いエンジニアライフを！
ALBの暖気申請の方法が変わったみたい

# LCU予約機能とPre-warmingの今後の活用
AWSのLoad BalancerにおけるPre-warming（暖機運転）は、特定のトラフィックの予測に基づいて、事前にロードバランサーをスケーリングするための手法だ。このプロセスはAWSサポートに依頼する必要があるが、最近ではLoad Balancer Capacity Unit Reservation（LCU予約）機能を利用することで、より自主的かつ効率的にシステムを運用することが可能となった。
## LCU予約機能の利点
現在、LCU予約機能を活用することで、AWSサポートに依頼せずとも、事前に予想されるトラフィックに対して必要なスケールを実現できる。この機能に移行することで、煩雑な手続きから解放され、運用がスムーズになる。今後、Pre-warmingの申請が受け付けられなくなる可能性もあるため、早めにLCU予約機能への移行を検討することを推奨する。
## LCU予約を利用する際の注意点
・初回利用時のクォータ設定: LCUのクォータはデフォルトで0となっているため、初めてLCU予約機能を利用する場合は、Service Quotasコンソールより「Reserved Application Load Balancer Capacity Units (LCU) per Region」の引き上げをリクエストする必要がある。

・スケーリングの期間制限: LCU予約機能は予めスケールさせるものであり、期間指定でのスケールはサポートしていない。期間を指定したい場合は、EventBridge SchedulerやLambdaなどを利用した構成を検討することが求められる。

・料金について: LCU予約を利用する場合、予約したLCUおよびそれを超えて使用されたLCUについて料金が発生する。詳細については、AWSのElastic Load Balancingの料金ページを確認することが重要だ。

## 結論
LCU予約機能の導入を真剣に考えることが、今後のAWS運用において大きなメリットとなる。
LCU予約機能に興味を持っている方は、ぜひ下記の詳細を確認し、無理のない運用を進めることをお勧めする。

参考

https://docs.aws.amazon.com/elasticloadbalancing/latest/application/capacity-unit-reservation.html

https://aws.amazon.com/elasticloadbalancing/pricing/


LCU予約機能とPre-warmingの活用に関する記事となる。必要に応じて、内容を調整し、より多くのユーザーにとって役立つ情報を提供していきたい。
社内向けにAWSハンズオン勉強会を開催したときの反省点と振り返り

# 概要
この記事では、社内向けに開催した初心者向けAWSハンズオン勉強会の反省点を紹介します。
初めての勉強会運営だったこともあり、準備・進行・タイムスケジュール管理などで多くの課題がありました。
これから勉強会を企画する方がスムーズに準備・運営できるよう、 今回の勉強会開催から出た反省等を共有します。

# 勉強会の内容
勉強会の概要は以下の通りです。
- テーマ
    - 初心者向け・AWSアカウント作成とやっておくべき初期設定のハンズオン
- 時間
    - 1時間
- 参加人数
    - 約15人

テーマが「初心者向け・AWSアカウント作成とやっておくべき初期設定のハンズオン」ということで、
アカウント作成手順、MFAの設定、IAMユーザーの作成、エイリアスの設定、Budgetsの設定、CloudTrailやCostExplorerの紹介
という内容を行いました。

# 開催までの手順

テーマが決まってからは、
1. 勉強会資料作成（約2週間）
1. レビュー（約1週間）
1. 結果を基に資料修正（約1週間）
1. 再レビュー（約2日間）
1. 本番
という流れでした。
後ほど触れますが、開催までの間にも反省点がありました。

# 反省点と改善点
反省点とその改善点について、勉強会準備、本番に分けて書きます。

## 準備段階

準備段階の反省点には以下のようなものがあります。
- レビューのタイミングが遅かった
- レビューの依頼の際の観点があいまいだった

### レビューのタイミングが遅かった
本番2週間半ほど前に依頼を行いましたが、再レビューまで含めると資料完成が本番直前となってしまいました。
初めての勉強会であること、レビュワーの忙しさなどを考慮して、もっと早くレビュー依頼をするべきでした。（そのためにも資料作成をもっと早いうちにすべきだった）
また、手戻り防止のためにも、
資料を作る前に具体的な内容を明確化→そこに対してレビューをいただく
という方法のほうがよかったとも思います。

#### 具体的な改善策
- 初回レビューをもっと早める
    - 作業量を想定の1.5～2倍くらいと考えて計画を立てる
- 資料作成前に内容を明確化し、レビューの回数を減らす

### レビューの依頼の際の観点があいまいだった
これはレビュワーに言われたことです。
依頼の際に、「どのような資料か」ということについては説明しましたが、「どこを見てほしいか」ということを伝えられていませんでした。
自分がレビューする側になることが少なかったため気づいていませんでしたが、何を見ればよいかわからずにレビューを依頼されても困るだけだなと感じました。

#### 具体的な改善策
- レビュー時に見てほしい観点を伝える
    - 想定している受講者に適しているか
    - 資料のボリューム
    - 目的とあった資料内容になっているか
    - etc...


## 本番

本番での反省点には以下のようなものがあります。
（※勉強会後のアンケートの結果を基に反省点を書いています）
- 勉強会の形式、対象者に適した資料になっていなかった
- 実際に操作する画面を見せながら進行すればよかった
- タイムスケジュール、ハンズオンにかかる時間の想定不足


### 勉強会の形式、対象者に適した資料になっていなかった
ハンズオンということで、資料を見るだけで作業ができるような資料を目指しましたが、「手順が一部出来ていなかったため資料を見返したが、説明がなくわからなかった」という意見がありました。
スライドには最低限の説明のみで、細かい解説は発表のほうを聞いてもらうという想定でしたが、手順がわからなくなった人を想定してもう少し説明を載せておいてもよかったと思います。
特に、今回の受講者は「初めてアカウントを作成するレベルの初心者」ということで、見るだけである程度の内容と作業がわかるような資料のほうが適していたと感じています。


#### 具体的な改善策
- 受講者の知識レベルを細かく想定する
    - 初心者の中でも、少し触ったことがある人/画面を見たことがない人など
- より具体的な手順説明を載せた資料


### 実際に操作する画面を見せながら進行すればよかった
画像だけではわかりにくい部分もあるため、実際に操作をしながら進行すればよかったと思います。
アカウント作成のハンズオンに個人情報の入力などが多かったため、その流れでスライドのみで進めてしまいました。
アカウント作成はしょうがないとして、それ以外の部分はスライドだけではなく実際の画面を見せたほうがわかりやすかったと思います。

#### 具体的な改善策
- 実際の操作を見せながら進める

### タイムスケジュール、ハンズオンにかかる時間の想定不足
事前に用意したタイムスケジュールが大雑把すぎたために、「今やっている部分に何分使えるのか」が把握できていませんでした。
また、上記のことが原因で先に進めるのを急いでしまい、ハンズオンの作業が追いついていない人が出てしまいました。
受講者のレベル感に合わせたハンズオン作業時間の想定と、タイムスケジュールの細分化、想定より遅れた場合の対処の用意といった部分で準備不足でした。

#### 具体的な改善策
- 5分単位で時間配分を決めてみる
- 各パートの遅延を考慮し、バッファ時間を確保
- 削ってもいい箇所、絶対にやるべき箇所を明確化


# まとめ
今回、初めて勉強会を開いてみて多くのことを学びました。
勉強会の開催がとても大変なこと、実際に教えるとなるとわかっていない部分が多々あること、その過程で主催者側も勉強になること、勉強会以外でも役立ちそうなスキル習得にもつながること等々、学べることが多く、とても良い経験になりました。
（それと同時に、今まで何となく受けていた勉強会が開催者の大きな労力の上にあると知り、感謝の気持ちが増しました。）

皆さんもぜひ勉強会を開催してみてください。
VOICEVOX（zip版）を使って読み上げwavを作る際のメモ #2

# はじめに

https://qiita.com/hideh_hash_845/items/adaca269390fdac4aaf4

の続きです。

# Web APIを叩くスクリプトの改造

前回の記事で
> あとは、params_dict.textを外部ファイル化などすれば、より便利になるだろうと感じた。
と書いたので、そこを変更しました。

ファイルの読み込みは `with` を使うと便利だそうです。

https://xtech.nikkei.com/atcl/nxt/column/18/03063/012200004/

これを踏まえて、スクリプトを変更しました。

~~~ vvt2.py
import json
import requests
import wave
from datetime import datetime

# 基本情報
base_hash = {
    'host' : "localhost",
    'port': 50021,
    'in_txt' : "./input.txt",
    'out_wav': "./audio.wav"
}
# パラメータ
params_dict = {
    'text' : "これはテストなのだ。",
    'speaker': 1,    # ずんだもんあまあま
#    'speaker': 29,   # No.7ノーマル
}
# 追加のパラメータ
data_dict = {
    'speedScale': 1.3,
#    'speedScale': 1.1,
}

#----------

# wavファイルを出力
def generate_out_wav():
    host = base_hash['host']
    port = base_hash['port']

    # audi_queryを作る
    response1 = requests.post(
        f'http://{host}:{port}/audio_query',
        params=params_dict
    )
    headers = {'Content-Type': 'application/json',}

    # 追加のパラメータはここでセット
    my_audio_query = response1.json()
    for key, value in data_dict.items():
        my_audio_query[key] = value

    # synthesis
    response2 = requests.post(
        f'http://{host}:{port}/synthesis',
        headers=headers,
        params=params_dict,
        data=json.dumps(my_audio_query)
    )

    # ファイルに保存
    base_hash['out_wav'] = './' + get_nowymdhms_14str() + '.wav'
    wf = wave.open(base_hash['out_wav'], 'wb')
    wf.setnchannels(1)
    wf.setsampwidth(2)
    wf.setframerate(24000)
    wf.writeframes(response2.content)
    wf.close()

# txtファイルを読み込む
def read_in_txt():
    with open(base_hash['in_txt'], 'r', encoding='utf-8') as f:
        str = f.read()
        params_dict['text'] =str

# 現在の日時を14桁の文字列にフォーマット
def get_nowymdhms_14str():
    now = datetime.now()
    formatted_now = now.strftime('%Y%m%d%H%M%S')
    return formatted_now

# main()
if __name__ == '__main__':
    read_in_txt()
    generate_out_wav()
~~~

出力ファイル名が毎回同じだと管理が面倒なので、yyyymmddHHMMDDで出力されるように変更。（この関数自体はCopilotに書いてもらいました。便利。）

# 今後の課題

wavを外部ファイル化できたものの、wavファイルの冒頭に「プツッ」のようなノイズが乗るようになってしまったので、そのうち見直します。気になる。

（この項おわり）
オススメのススメ

人に何かをオススメする行為は、実はすごくレベルの高い行為ではないだろうか。
というのも、自分自身でそれを体験し、その良さを踏まえて
相手に合わせて提案する必要があるからである。

本でも映画でもレストランでも何でも、
まずは自分がそれを読んだり、見たり、行って体感してみないことには
他人にオススメすることはできない。

さらに、ただ体感しているだけではなく、
それの何が良かったのかを言語化し、データとして蓄積。
そのデータの中から最適なものをピックアップし、
それがなぜ（今のあなたに）オススメなのかを説明するという
とてもハイレベルなインプットとアウトプットが求められる。

どんなものでも誰かにオススメできる人は
こういった活動を通して、多くの経験を積んでいる人だと思う。

そういう人に、私もなりたいものである。
REHL9でネットワーク接続に困ってしまった件

基本的なことで申し訳ございません。初投稿です。需要なく間違っているかもしれませんが、ご容赦ください。

## RHEL9 NetWorkManager-wait-online.Serviceがfailed
今回はオフラインインストールを行っていたが、NeNetWorkManager-wait-online.Serviceがfailedになってしまう。
調査してみたが、systemd-analyzeコマンドを使用し、起動時間に時間がかかっていることが分かった。

```
systemd-analyze
```
時間としては1m28sであった。そのため、failedしてしまうと予測した。
## NetworkManager-wait-online.serviceのTimeout確認
ネットワークインターフェースの起動完了前のTimeoutを疑い、Timeoutを長くしてみようと思いたつ。
記述は以下のようになっていた。
```
ExecStart=/usr/bin/nm-online -s -q 
```
Timeoutは特に設定されていない。ではどうするか？
## override.confの作成
オフラインインストールであると、最小限しかインストールされていない。
そのため/etc/systemd/system/NetworkManager-wait-online.service.d/override.confを一から作成。
```
mkdir /etc/systemd/system/NetworkManager-wait-online.service.d
vi /etc/systemd/system/NetworkManager-wait-online.service.d/override.conf
```
override.confに以下の記述を追加。
```
[Service]
ExecStart=
ExecStart=/usr/bin/nm-online -s -q --timeout=200
```
保存後、デーモンの再起動を実行。
```
systemctl daemon-reload
systemctl restart NetworkManager-wait-online
```
その後、Status確認を行う。
```
systemctl status NetworkManager-wait-online
```
有効になっていることを確認後、nmcliコマンドでネットワーク設定を行った。
```
nmcli connection modify ens33 ipv4.addresses x.x.x.x/x
nmcli connection modify ens33 ipv4.gateway x.x.x.x
nmcli connection modify ens33 ipv4.dns "x.x.x.x x.x.x.x"
nmcli connection modify ens33 ipv4.method manual
nmcli connection up ens33
```

以上でネットワーク接続を終了。
GASでGoogleDriveに格納されているhtmlファイルをWebページとして表示する

## 投稿の経緯
GoogleDriveに格納されているhtmlファイルはそのまま開いてもWebページとして表示されませんが、GASを使いWebページを表示させる機会があったのでその方法をまとめました。

## 前提
今回Webページは外部に公開しないため、GoogleDriveが参照可能な権限内で行う必要がありました。それを理由にホスティングサービスは使わず、リスク回避のためにWebページ表示はGASによる実装で作りました。

### 扱うファイルの種類
ファイルの種類は以下になります。JavaScriptは含まれていません。cssと画像ファイルは相対パスで参照されていました。
* html
* css
* 画像ファイル

## 方法
Webページとして表示させるにはGASでhtmlファイルの変換やURLへの読み替えをし、そのGASをウェブアプリケーションとしてデプロイします。そしてWebブラウザからのデプロイしたURLにリクエストすることで表示が可能になります。
今回表示するにあたり、相対パス参照しているファイルの変換とURLへの読み替えが一番手こずりました。

### ファイルの変換
#### htmlファイル
GASでhtmlを表示する方法については調べれば出てきますので、ここでは詳しく説明しません。

https://wywy.jp/blogs/gas-web-detailed-explanation

やり方は、htmlファイルはGoogleドライブのファイルIDで特定して読み込み、Webページとして出力する関数で表示させます。

``` JavaScript
// htmlファイルの読み込み
var htmlContent = DriveApp.getFileById({htmlのファイルID}).getBlob().getDataAsString();

// htmlファイルを表示
HtmlService.createTemplate(htmlContent).evaluate();
```

#### cssファイル
これだけだと、htmlファイルから相対パスで参照されているcssファイルは読み込まれません。cssファイルもhtmlファイルと同様の読み込みが必要になります。
更に今回はファイル参照から読み込んだファイルを展開する形で置換することにしました。

``` JavaScript
htmlContent.replace(<link rel="stylesheet" href="{相対パス}.css" />, `<style>${DriveApp.getFileById({CSSのファイルID}).getBlob().getDataAsString()}</style>`);
```

#### 画像ファイル
相対パスによる参照となっているため、ファイルリンクで参照させようとしましたがうまくいきませんでした。
これはファイルリンクを`https://lh3.googleusercontent.com/d/{画像ファイルID}`とすることで解決しました。

``` JavaScript
htmlContent.replace('../{画像ファイル名}.png','https://lh3.googleusercontent.com/d/{画像のファイルID}');
```

### リクエストの方法

.gsファイルに`doGet()`関数を用意します。
ブラウザからのリクエストすると`doGet()`が動きます。クエリパラメータを受け取りたい場合は、`doGet(e)`のように引数を設定すると、`e.parameter`という形でパラメータが取得できます。

リクエストパラメータの形式については以下を参照ください。

https://developers.google.com/apps-script/guides/web?hl=ja

## 次のステップ

今回JavaScriptファイルの扱いがありませんでしたが、次回はJavaScriptファイルも考慮したWebページ表示をしてみたいです。
SveltosのLuaで使う hs は「health status」のこと

SveltosでLuaのコードを見ていると、`hs`という変数をよく目にしませんか？これは何を表す変数なんだろうと思ったので調べてみました。

## `hs` ── `evaluate()`関数内で使われるアレ

Sveltosでは、クラスタのヘルスチェックやイベント検出のロジックをLuaスクリプトで記述できます。その際に`hs`というテーブル変数が必ず登場します。

```lua
apiVersion: lib.projectsveltos.io/v1beta1
kind: EventSource
metadata:
  name: sveltos-service
spec:
  collectResources: true
  resourceSelectors:
  - group: ""
    version: "v1"
    kind: "Service"
    evaluate: |
      function evaluate()
        hs = {} -- これ
        hs.matching = false
        hs.message = ""
        if obj.metadata.labels ~= nil then
          for key, value in pairs(obj.metadata.labels) do
            if key == "sveltos" then
              if value == "fv" then
                hs.matching = true
              end
            end
          end
        end
        return hs
      end
```

## `hs`は「ヘルスステータス」の略

`hs`は「ヘルスステータス (health status)」を表すオブジェクトを指す略称らしいです。[Sveltos作者のブログでも「`hs`はSveltosに返すヘルスステータスオブジェクトです」と明言](https://dev.to/gianlucam76/managed-cluster-health-checks-2na6#:~:text=In%20above%20example%2C%20we%20are,Healthy%2C%20Progressing%2C%20Degraded%20or%20Suspended)されていました。
ある確率である関数を実行するには

例として、UnityC#の場合で書く。
```csharp
float enemyDeathChance = 0.3f;
void Start()
{
    if (Random.Range(0f, 1f) > enemyDeathChance) return;
    AttackPlayer();
}
```
要は、０から１までのランダムな数を生み出して、それとの大小によって、実現する。
Unityであれば、Random.Range(0f, 1f)は、Random.valueでかける。
CloudWatch Logs 設定手順

AWS Systems Managerのセッションマネージャーを使用してEC2インスタンスにログインする方法を説明します。この方法ではSSHやRDPを使用せずに、より安全にインスタンスにアクセスできます。

### ステップ1: IAMロールの作成

1. **AWS Management Consoleにログイン**します。
2. **IAM（Identity and Access Management）**に移動します。
3. 左側のナビゲーションペインで「ロール」をクリックし、「ロールを作成」を選択します。
4. 「ユースケースの選択」で「EC2」を選択し、「次のステップ: 権限」をクリックします。
5. **ポリシーの選択**で以下のポリシーを追加します。
   - `AmazonSSMManagedInstanceCore`（SSMエージェントの実行に必要）
6. 「次のステップ: タグ」をクリックし、必要に応じてタグを追加します。
7. 「次のステップ: 確認」をクリックし、ロールに名前を付けて（例: `SessionManagerRole`）、作成をクリックします。

### ステップ2: EC2インスタンスにIAMロールを割り当てる

1. **EC2ダッシュボード**に移動します。
2. インスタンスの一覧から、セッションマネージャーでログインしたいインスタンスを選択します。
3. 「アクション」→「セキュリティ」→「IAMロールの変更」を選択します。
4. 作成したIAMロール（例: `SessionManagerRole`）を選択し、「適用」をクリックします。

### ステップ3: SSMエージェントのインストール（必要に応じて）

AWSのAmazon LinuxやAmazon Linux 2、Ubuntu 20.04以降のAMIには、SSMエージェントがプリインストールされていますが、古いAMIやカスタムAMIを使用している場合は手動でインストールが必要です。

以下は一般的なOSにおけるインストール手順です：

- **Amazon Linux:**  
  SSMエージェントは標準でインストールされています。
  
- **Ubuntu:**
  ```bash
  sudo snap install amazon-ssm-agent --classic
  ```

- **RHEL/CentOS:**
  ```bash
  sudo yum install https://s3.amazonaws.com/ssm-agent/latest/linux_amd64/amazon-ssm-agent.rpm -y
  ```

- **インストール後、SSMエージェントを開始します。**
  ```bash
  sudo systemctl start amazon-ssm-agent
  sudo systemctl enable amazon-ssm-agent
  ```

### ステップ4: セッションマネージャーでの接続

1. **AWS Management ConsoleでSystems Managerに移動します。**
2. 左側のナビゲーションペインから「セッション」を選択します。
3. 「セッションの開始」ボタンをクリックします。
4. 接続したいEC2インスタンスを選択します。
5. 「開始」をクリックします。
6. 新しいタブでターミナルが表示され、インスタンスに接続されます。

### ステップ5: CloudWatch Logsの設定

EC2インスタンスに接続した状態で、次の手順に従ってCloudWatch Logsのエージェントをインストールおよび設定します。

以下は、すでに前述した手順を参照してください。

1. **CloudWatch Logsエージェントのインストール:**
   ```bash
   sudo yum update -y  # Amazon Linuxの場合
   sudo yum install -y awslogs
   ```
   または、Ubuntuの場合は以下を使用します。
   ```bash
   sudo apt-get update
   sudo apt-get install -y awslogs
   ```

2. **設定ファイルの編集:**
   ```bash
   sudo nano /etc/awslogs/awslogs.conf
   ```
   設定を更新します。

3. **エージェントの開始:**
   ```bash
   sudo systemctl start awslogsd
   sudo systemctl enable awslogsd
   ```

4. **CloudWatchのロググループを確認:**
   ConsoleのCloudWatchから確認できます。

### おわりに
これで、EC2インスタンスへセッションマネージャーを使用してログインし、CloudWatch Logsを設定する手順が完了しました。この方法はSSHよりもセキュアで、管理も容易です。必要に応じて更なる設定やアラーム設定を行ってください。
Pythonエンジニア認定データ分析試験合格までの勉強法

勉強を始めてから４週間ほどで合格できたので、これから勉強する人向けに。

といっても、私も下記の@y-matsunaga(ローズん)さんのを参考にして合格した口なので、以下を参考にしたら間違いないです。ありがとうございました。

https://qiita.com/y-matsunaga/items/c6e62dd9af7e32a20ece


これで終わり、というと身も蓋もないのでちょっと説明すると


## １．テキストは最初はさらっと最後までよむ
・正直言って、読むだけではわからないところは絶対あるので、そこは一旦飛ばす。
　特に数学とか。
・わけわかめなところはたくさんあって眠たくはなるので、部屋の中を歩きながら読んだほうがよいです。まあダイエットにもなるし

## ２．PRIME STUDYの試験を１回うけて勉強する
無料であり、かつ１回目のみ解説があるのでやらない手はないです。
ここで重要なのは、選択肢で間違ってるところはどこが間違っているか、なんでこの答えになるのか？をちゃんと理解し、説明できるようにする。（特に数学系）

## ３．模擬試験を何度もやる
何度も受けられるので何度もやりつつ、選択肢でなぜこれが間違いなのか？を説明しながら解く。
わからなければ、理解が足りないということなので、タイマーがまわっていてもその場でテキストを調べたりChatGPTにきくなり、調べるなりして理解しましょう。
自分の言葉で、テキストに書き込んでも良い。私はそうしてました。

※模擬試験の選択肢を正しい文に直せばそれが、覚えるべき事柄になります。しかも選択肢のため、短くなっているので、覚えやすいんですよね。これがさっき言った、テキストはサラッと読め、という理由です。選択肢になるということは重要ということなので、テキストを見てあ、これや、こういうことか、というのがわかるので、ここでテキストに書いてあることを理解すればOKってことです。しかも出題の意図がわかる。一石二鳥です。

※何回もやると正解の位置とかを記憶してしまうというのはあるあるです。でもそれは、選択をすることだけやってるからです。選択をすることが重要なんじゃなく、<b>どうしてそうなるの？どこがまちがってるの？というのが自分で説明できるかどうかが大事</b>です。

２回目、３回目は、解説がないのですが、似たような問題なので、あとは自分で調べればたいていわかると思います。

## ４．DIVE INTO CODEに課金してひたすら問題演習

ここらへんでまあまあ完璧だとは思いますが、私の場合、１日前にDIVE INTO CODEに課金して問題演習をしました。
実際ここの問題から応用で出たのもちらほらありました。

３でちゃんとやっていれば、４．はまあまあ復習と応用になってて、より理解しやすくなります。むしろディープロではかなり簡単に説明してくれてるので、テキストに書いてあることがわかってくるようになります。
ただし、テキストにも自分なりに理解したことを書き込むようにする。解くだけで満足しないのがコツです。

※ちなみに@y-matsunaga(ローズん)さんも言ってますが、DIVE INTO CODEでの問題の書き方が一番良く似ていると思います。でも中身は別物かな。たぶんDIVEのほうが難しいです。とはいえ、難しいほうが本番で勝てますので、これはこれでよき、ということかと。

## ５．(余談)数学

学生の時は苦手だった口なので、いったんChatGPTに聞くなりしてちゃんと理解しました。それと、解き方の練習と、公式は覚えましょう。

サイン・コサイン・タンジェントの３０度〜９０度はいくらとか、パイ、ネイピア数とか、期待値の求め方とかはたいてい解き方が決まってるので覚えたら楽です。
積分と微分も基本的なことしかやらないので頑張って理解しましょう
（私の場合動画は見なかったです）

## まとめ

こんな感じでやりました。
１月末からやりはじめて今日試験を受けたので、まあ、４週間弱ぐらいかな？
でもぶっちゃけ数学でかなり時間を取られていた気がします。
それさえなければ2週間でいけたかも。まあ、仕方ないですね。

３と４はどちらか一方だけでもだめだったなと試験を受けて思うので、両方やっといたほうが吉です。

ぶっちゃけ、これは受けてよかったやつだなと思います。
実際、仕事でも活かせますしね。実際業務でもやるようになりました。
やってることは分析じゃないかもですが、それでも大量データを加工できるのはいいですね。
ブロックチェーン革新全解説シリーズ　第5回：プロジェクトマネジメント視点～実装とリスク管理のポイント～（全5回）

## 5.0 はじめに
全5回にわたる本シリーズの最終回、第5回目では、プロジェクト計画、実装プロセス、セキュリティ対策、及びリスク管理の具体的なポイントを取り上げ、現実の運用における注意事項をまとめます。
ブロックチェーンプロジェクトを成功に導くためのプロジェクトマネジメント手法や、実装時に注意すべきリスク管理のポイントについて詳しく解説します。技術面だけでなく、運用面やチーム編成にも焦点を当てます。

## 5.1 プロジェクト計画と要件定義
### 5.1.1 目標の明確化
- **目的設定:**  
  ブロックチェーン導入の目的（例：透明性向上、コスト削減、業務プロセスの自動化）を明確にすることが第一歩です。
- **ステークホルダーの特定:**  
  経営層、技術担当、運用部門など、関係者間で共通のビジョンを持つことが重要です。

### 5.1.2 技術評価とパートナー選定
- **内部リソースの評価:**  
  社内の技術力やシステム環境を精査し、外部パートナーとの連携が必要かどうかを判断します。
- **パイロットプロジェクト:**  
  初期段階で小規模な実証実験を実施し、技術的な実現性や運用上の課題を把握します。

## 5.2 実装フェーズと運用の注意点
### 5.2.1 段階的導入
- **プロトタイプ開発:**  
  まずは基本機能を実装したプロトタイプを作成し、フィードバックをもとに改良を重ねます。
- **スケーラビリティの検証:**  
  実際の運用環境下でトランザクション処理能力やネットワークの負荷を評価し、必要に応じたシステムの拡張を検討します。

### 5.2.2 セキュリティ対策
- **スマートコントラクトの監査:**  
  コードレビューや第三者による監査を実施し、バグや脆弱性を事前に排除します。
- **ネットワーク監視:**  
  異常検知システムを導入し、リアルタイムでセキュリティインシデントに対応できる体制を整えます。

## 5.3 リスク管理のポイント
### 5.3.1 技術リスク
- **新技術の不確実性:**  
  ブロックチェーンは急速に進化する技術であるため、最新の動向を常に把握し、予期せぬ障害に備える必要があります。

### 5.3.2 運用リスク
- **システム障害対策:**  
  冗長構成やバックアップ体制を整え、万一のシステム障害に迅速に対応できる仕組みを構築します。
- **セキュリティインシデント:**  
  インシデント発生時の対応プロセスや、被害を最小限に抑えるための事前準備が重要です。

### 5.3.3 市場リスクと規制対応
- **規制変動:**  
  各国の規制変更や法制度の変動に迅速に対応するため、法務部門との連携を強化します。
- **市場環境:**  
  ブロックチェーン市場は変化が激しいため、常に最新の情報を取り入れた柔軟な運用が求められます。

## 5.4 チーム編成とコミュニケーション
- **多職種連携:**  
  技術者、プロジェクトマネージャー、法務、運用担当など、各専門分野の連携がプロジェクト成功の鍵となります。
- **定期ミーティング:**  
  プロジェクト進捗や課題を共有し、迅速な意思決定を行うためのコミュニケーション体制を確立します。

## 5.5 まとめと将来展望
ブロックチェーンプロジェクトの成功には、計画段階から実装、運用、そしてリスク管理まで、一貫した戦略と体制が不可欠です。技術的な課題に加え、組織全体での柔軟な対応と継続的な改善が求められます。今後も進化する技術動向に合わせ、プロジェクトマネジメントの手法をアップデートしていくことが重要です。

---

以上、ブロックチェーンの技術的基盤から実用例、経営層向けのビジネス戦略、そしてプロジェクトマネジメントの視点に至るまで、全5回にわたる詳細解説でした。  
各回の記事を通じて、ブロックチェーンの全体像とその実践的応用がより明確になることを願っています。  
ご意見やご質問がございましたら、コメント欄にてお気軽にご連絡ください！

---

ブロックチェーン革新全解説シリーズ
[第1回：ブロックチェーンとは？～初心者向け基礎知識～](https://qiita.com/comty/private/0d4b3bc77b1d356f5814)
[第2回：技術的基礎～ブロックチェーンの仕組みとアーキテクチャ～](https://qiita.com/comty/private/cffe5e807df554b92661)
[第3回：実用例と応用事例～ブロックチェーンの活用シーン～](https://qiita.com/comty/private/4e59b1ae784ffff87311)
[第4回：経営層向け～ブロックチェーンがもたらすビジネス革新～](https://qiita.com/comty/private/3e2a941556c4013ae85d)
[第5回：プロジェクトマネジメント視点～実装とリスク管理のポイント～](https://qiita.com/comty/private/adc0f5a5a30371e6f571)
ブロックチェーン革新全解説シリーズ　第4回：経営層向け～ブロックチェーンがもたらすビジネス革新～（全5回）

## 4.0 はじめに
本シリーズ全5回の中で第4回目は、コスト削減や新たなビジネスモデル創出など、ブロックチェーンが企業経営にもたらす革新的な効果と、戦略的導入のポイントについて詳しく説明します。
経営層の視点から、技術的側面だけでなく、ビジネスモデルや市場環境の変化にも注目しましょう。

## 4.1 ブロックチェーンがビジネスに与える影響
### 4.1.1 コスト削減と効率化
- **中間業者の排除:**  
  取引の自動化と透明性の向上により、従来必要だった中間管理コストや手数料が大幅に削減されます。
- **プロセスの最適化:**  
  取引履歴がリアルタイムで共有されるため、業務プロセスの迅速化と効率化が実現されます。

### 4.1.2 新たなビジネスモデルの創出
- **分散型エコシステム:**  
  中央集権型のシステムから脱却し、分散型ネットワークを活用した新たなサービスやプラットフォームの構築が可能です。
- **デジタルトランスフォーメーション:**  
  既存のビジネスプロセスにブロックチェーンを統合することで、競争優位性を高める取り組みが進んでいます。

## 4.2 戦略的導入のポイント
### 4.2.1 パイロットプロジェクトの実施
- **小規模な検証:**  
  初期段階で限定的な範囲で導入し、技術や運用面での課題を明確にすることが重要です。
- **フィードバックループ:**  
  パイロットプロジェクトから得た知見をもとに、システムの改善やスケーリングを検討します。

### 4.2.2 業界連携とエコシステムの構築
- **パートナーシップ:**  
  異業種との連携により、ブロックチェーンを活用した新たなサービスの創出や市場拡大を狙います。
- **規格と標準化:**  
  業界全体での標準規格の整備により、システム間の相互運用性が向上し、導入リスクが低減されます。

### 4.2.3 法規制とコンプライアンス
- **規制の理解:**  
  各国の法制度や規制動向を正確に把握し、事業戦略に反映させる必要があります。
- **リスク管理:**  
  規制変更や法的リスクに迅速に対応できる体制を構築することが求められます。

## 4.3 成功事例と課題
### 4.3.1 成功事例
- **金融業界:**  
  一部の金融機関では、国際送金システムの効率化や決済プロセスの自動化に成功しています。
- **物流・サプライチェーン:**  
  商品の追跡や偽造防止を実現するプロジェクトが実用段階に入り、業界内で注目を集めています。

### 4.3.2 課題と展望
- **スケーラビリティ:**  
  トランザクション処理能力の向上が求められ、技術開発が継続的に進められています。
- **市場成熟度:**  
  ブロックチェーン市場は急速に進化しているものの、業界全体での標準化や信頼性の確立が今後の課題です。

## 4.4 まとめ
ブロックチェーン技術は、コスト削減や新たなビジネスモデルの創出を通じて、企業経営に大きなインパクトを与えます。経営層は、技術導入のリスクとメリットを総合的に評価し、戦略的な取り組みを推進することが重要です。

---

ブロックチェーン革新全解説シリーズ
[第1回：ブロックチェーンとは？～初心者向け基礎知識～](https://qiita.com/comty/private/0d4b3bc77b1d356f5814)
[第2回：技術的基礎～ブロックチェーンの仕組みとアーキテクチャ～](https://qiita.com/comty/private/cffe5e807df554b92661)
[第3回：実用例と応用事例～ブロックチェーンの活用シーン～](https://qiita.com/comty/private/4e59b1ae784ffff87311)
[第4回：経営層向け～ブロックチェーンがもたらすビジネス革新～](https://qiita.com/comty/private/3e2a941556c4013ae85d)
[第5回：プロジェクトマネジメント視点～実装とリスク管理のポイント～](https://qiita.com/comty/private/adc0f5a5a30371e6f571)
同一名称のDATAステップの挙動

SAS言語は他のプログラミング言語と比較してコードの並びと実行タイミングが直感的でない場合が多いです。例えば、それが体現されている状況として下記の場合が挙げられます。同じ名称のDATAステップが並んでいるのですが、これは同じデータを一度読み取った上で加工するのかと思いきやデータは再定義されます。この挙動は後半に記載する「set」ステートメントで解決することになります。


```sas
data b;
  input Name_b $ Age_b Height_b;
  datalines;
John 15 5.5
Mary 16 5.7
James 14 5.8
Sophia 17 5.9
;
data b;
  hoge = Age_b + 2;
run;
proc print data=b;
  title 'Dataset B';
run;
```
出力結果：
![result1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4003689/5379b04d-c680-4a57-bf7d-a8513ee83d2a.png)

<br><br>

途中でRUN文を挟んでも同一名称のDATAステップは内容が上書きされるためやはり前半の内容はなくなっています。つまり、DATAステップ境界を意図的に設定しても上書きされる仕様だということです。

```sas
data b;
  input Name_b $ Age_b Height_b;
  datalines;
John 15 5.5
Mary 16 5.7
James 14 5.8
Sophia 17 5.9
;
run;
data b;
  hoge = Age_b + 2;
run;
proc print data=b;
  title 'Dataset B';
run;
```
出力結果：
![result2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4003689/a86e400a-520f-46c8-8a2c-8d325301a19a.png)

<br><br>

同じ名称のDATAステップを編集したい場合には、2回目のDATAステップの中で「set」ステートメントを使用して前回のDATAステップを参照する必要があります。

```sas
data b;
  input Name_b $ Age_b Height_b;
  datalines;
John 15 5.5
Mary 16 5.7
James 14 5.8
Sophia 17 5.9
;
run;
data b;
  set b;
  hoge = Age_b + 2;
run;
proc print data=b;
  title 'Dataset B';
run;
```
出力結果：
![result3](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4003689/f9a9905d-03ff-4486-9778-3e3e9b70fd56.png)

私が慣れ親しんでいるプログラミング言語の例としてPythonを挙げると、Pythonは1行ごとに実行する逐次実行であり、仮に同じ名前の名前のデータフレームへ再代入することがあっても明示的でありわかりやすいです。SAS言語の処理のタイミングはステップごとであり、「run;」を書いた時点で処理がまとめられ一括の処理として扱われるため上書き自体が気づきにくいです。さらにステップの概念と相まって挙動が把握しにくくなっていました。
<br>
おそらく、慣れが解決してくれる範疇の問題かと考えております。

<br><br>

## SAS言語の実行環境

SAS言語の動作環境は[Altair SLC 及び Altair Analytics Workbench](https://www.brainpad.co.jp/services/products/Altair.html)を使用しております。詳細や最新情報は[Altair公式サイト](https://www.altairjp.co.jp/altair-analytics-workbench/)をご覧ください。

## 動作確認を行なった環境
- MacBookPro（2020 M1）
    - RAM 16GB
    - macOS Sonoma 14.4.1
- Altair SLC 2024 (05.24.03.00.001528)
- Altair Analytics Workbench 5.24.3.0.1528-GA-release-2024.2
ブロックチェーン革新全解説シリーズ　第3回：実用例と応用事例～ブロックチェーンの活用シーン～（全5回）

## 3.0 はじめに
全5回にわたる本シリーズの第3回目では、金融、サプライチェーン、デジタルアイデンティティなど、多岐にわたる応用例に焦点を当て、そのメリットと現状の課題について考察します。
ブロックチェーン技術が実際にどのような現場で活用されているのか、具体的な事例を通じて紹介します。

## 3.1 金融分野での応用
### 3.1.1 暗号資産（仮想通貨）
- **概要:**  
  ビットコインやイーサリアムなどの暗号資産は、ブロックチェーン技術を活用して分散型の通貨システムを実現しています。
- **メリット:**  
  中央管理者を介さず、迅速かつ低コストでの取引が可能です。

### 3.1.2 国際送金
- **概要:**  
  従来の銀行送金に比べ、国境を超えた送金が迅速に行われ、手数料も低く抑えられるため、国際送金の効率が大幅に向上します。
- **具体例:**  
  複数の金融機関が連携し、ブロックチェーンを利用して送金処理を行うプロジェクトが進行中です。

## 3.2 サプライチェーン管理
### 3.2.1 トレーサビリティの向上
- **概要:**  
  商品の生産から配送、販売までの各プロセスをブロックチェーン上で記録することで、偽造品の混入防止や品質管理が向上します。
- **実例:**  
  農産物や医薬品の流通経路を透明化するプロジェクトが既に実施されています。

## 3.3 デジタルアイデンティティ
### 3.3.1 個人情報の安全な管理
- **概要:**  
  ブロックチェーンにより、個人のデジタルアイデンティティを安全に管理でき、本人確認プロセスの信頼性が向上します。
- **メリット:**  
  中央集権的なデータベースと比較して、情報漏洩のリスクが低減されます。

## 3.4 その他の応用事例
### 3.4.1 医療情報の管理
- **概要:**  
  患者の診療記録や医薬品の情報をブロックチェーンに記録することで、医療現場でのデータ共有とセキュリティが向上します。

### 3.4.2 不動産取引の透明化
- **概要:**  
  不動産の所有権や取引履歴をブロックチェーンで管理することで、取引の透明性と信頼性が確保されます。

### 3.4.3 投票システム
- **概要:**  
  改ざんが困難なブロックチェーンを利用することで、公正かつ透明な電子投票システムの構築が期待されています。

## 3.5 まとめ
ブロックチェーン技術は、金融、物流、医療、不動産など多岐にわたる分野で革新的な応用が進んでいます。各業界において透明性、効率性、信頼性を向上させる手段として、今後もさらなる発展が期待されます。

---

ブロックチェーン革新全解説シリーズ
[第1回：ブロックチェーンとは？～初心者向け基礎知識～](https://qiita.com/comty/private/0d4b3bc77b1d356f5814)
[第2回：技術的基礎～ブロックチェーンの仕組みとアーキテクチャ～](https://qiita.com/comty/private/cffe5e807df554b92661)
[第3回：実用例と応用事例～ブロックチェーンの活用シーン～](https://qiita.com/comty/private/4e59b1ae784ffff87311)
[第4回：経営層向け～ブロックチェーンがもたらすビジネス革新～](https://qiita.com/comty/private/3e2a941556c4013ae85d)
[第5回：プロジェクトマネジメント視点～実装とリスク管理のポイント～](https://qiita.com/comty/private/adc0f5a5a30371e6f571)
ブロックチェーン革新全解説シリーズ　第2回：技術的基礎～ブロックチェーンの仕組みとアーキテクチャ～（全5回）

## 2.0 はじめに
本シリーズ全5回の解説の中で、第2回目は技術的側面に焦点を当て、ブロックの構造、ハッシュ関数、各種コンセンサスアルゴリズム、そしてスマートコントラクトの仕組みについて詳しく解説します。
ブロックチェーンの技術的側面を理解することで、実際のシステム設計や導入時のポイントが見えてきます。

## 2.1 ブロックの構造とデータの記録方式
### 2.1.1 ブロックの基本構造
- **ヘッダー:**  
  各ブロックのヘッダーには、前のブロックのハッシュ値、現在のタイムスタンプ、ナンス（nonce）などが含まれ、ブロック間の連鎖性と整合性を担保します。

- **ボディ（トランザクションデータ）:**  
  ブロック内には、実際の取引やイベント情報が記録されます。これらの情報は、各ノード間で共有され、検証プロセスに使用されます。

### 2.1.2 ハッシュ関数とデータの連結
- **ハッシュ関数の役割:**  
  入力データから固定長の出力を生成し、わずかな入力変更でも大きく異なるハッシュ値を返すため、改ざん検知に優れています。
- **ブロックの連結:**  
  各ブロックは前ブロックのハッシュを含むため、一部のデータを変更すると連鎖的に全ブロックの整合性が崩れ、改ざんが即座に検知されます。

## 2.2 コンセンサスアルゴリズム
ブロックチェーンネットワークでは、全ノードが正しい台帳を共有するために、コンセンサスアルゴリズムが重要な役割を果たします。

### 2.2.1 Proof of Work (PoW)
- **仕組み:**  
  膨大な計算問題（パズル）を解くことで、新しいブロックの正当性を証明します。  
- **特徴:**  
  高い計算リソースを必要とするため、セキュリティが高い反面、エネルギー消費が多いという課題もあります。

### 2.2.2 Proof of Stake (PoS)
- **仕組み:**  
  ノードが保有するトークン量に応じて、新しいブロックの生成権が割り当てられます。  
- **特徴:**  
  エネルギー効率が高く、計算リソースの消費が少ないため、環境への負荷が低減されます。

### 2.2.3 その他のアルゴリズム
- **Delegated Proof of Stake (DPoS):**  
  投票によって代表者を選出し、その代表者がブロック生成を行う方式。  
- **Byzantine Fault Tolerance (BFT):**  
  システムの一部が不正であっても全体として正しい判断ができるように設計されたアルゴリズム。

## 2.3 スマートコントラクト
### 2.3.1 定義と概要
スマートコントラクトは、プログラム可能な契約で、あらかじめ定められた条件が満たされた際に自動的に実行される仕組みです。

### 2.3.2 実行プロセスとメリット
- **自動実行:**  
  条件が満たされると即座に取引が実行され、中間者を排除できます。
- **透明性:**  
  契約内容がブロックチェーン上に記録され、誰でも確認可能なため、不正が防止されます。

### 2.3.3 利用例
- **金融取引:**  
  自動決済や保険の自動処理など、取引の信頼性と効率を向上させます。
- **分散型アプリケーション (DApps):**  
  ブロックチェーン上で動作するアプリケーションの基盤として利用されています。

## 2.4 システム設計における課題と展望
- **スケーラビリティ:**  
  トランザクション処理速度やネットワークの拡張性が大きな課題となっており、レイヤー2ソリューションなどで改善策が模索されています。
- **セキュリティ:**  
  スマートコントラクトのバグや脆弱性は大きなリスクとなるため、コードレビューやセキュリティ監査が重要です。

## 2.5 まとめ
ブロックチェーンの技術的基盤は、分散型台帳、暗号技術、そして多様なコンセンサスアルゴリズムによって支えられています。これらの技術が組み合わさることで、高い信頼性と透明性を実現しています。次回は、実際の応用例や利用シーンについて詳しく見ていきます。

---

ブロックチェーン革新全解説シリーズ
[第1回：ブロックチェーンとは？～初心者向け基礎知識～](https://qiita.com/comty/private/0d4b3bc77b1d356f5814)
[第2回：技術的基礎～ブロックチェーンの仕組みとアーキテクチャ～](https://qiita.com/comty/private/cffe5e807df554b92661)
[第3回：実用例と応用事例～ブロックチェーンの活用シーン～](https://qiita.com/comty/private/4e59b1ae784ffff87311)
[第4回：経営層向け～ブロックチェーンがもたらすビジネス革新～](https://qiita.com/comty/private/3e2a941556c4013ae85d)
[第5回：プロジェクトマネジメント視点～実装とリスク管理のポイント～](https://qiita.com/comty/private/adc0f5a5a30371e6f571)
IBM i 駆け出し日記：スプールファイルをPDFにする

# はじめに
自分向けメモです！
ACSやNavigatorからDLすると、文字化けしてしまうので解決方法です。

# 概要
プログラムILP40を実行することによって吐き出されるスプールファイルを確認する。
- LIB：SAKURA
- PGM：ILE40P

# 手順
## 印刷装置ファイルの指定変更
```                                                      
OVRPRTF FILE(ILE40P) DEVTYPE(*AFPDS) CDEFNT(QFNT61/X0N16V) IGCCDEFNT(QFNT61/X0M32F)
```
- 印刷装置ファイル名：FILE(ILE40P)
**※ILE40Pはプログラム名ではない**
- コード化文字フォント：QFNT61/X0N16V
- DBCDコード化文字フォント：QFNT61/X0M32F    


## プログラム実行
```
CALL SAKURA/ILE40P
```

## IFSにコピー
```
CPYSPLF FILE(ILE40P) TOFILE(*TOSTMF) SPLNBR(*LAST) TOSTMF('ILE40P.PDF') WSCST(*PDF)
```
- 印刷装置ファイル名：FILE(ILE40P)
**※ILE40Pはプログラム名ではない**
- TOFILE(*TOSTMF):コピー先ファイル名
- SPLNBR(*LAST)：一番最後に作成したスプール
- TOSTMF('ILE40P.PDF')：作成されるPDFファイル名、今回はディレクトリを指定していない
- WSCST(*PDF)：出力形式

## オーバーライドの削除
```
DLTOVR FILE(ILE40P)
```
指定変更の削除を実行しました


## PDFの確認
ACSの統合ファイルシステムから当該ファイルを探し、右クリックでDLする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3212743/e9a46a8f-806f-4fdb-8d40-7a6cc58a4f45.png)

# ちなみに
印刷装置を作成する上で、PDF専用の印刷装置ファイル(PRINTPDF)を作ってしまい、印刷装置ファイルとして指定するのもアリ


```
CRTPRTF FILE(SAKURA/PRINTPDF) DEVTYPE(*AFPDS) IGCDTA(*YES) CDEFNT(QFNT61/X0N16V) IGCCDEFNT(QFNT61/X0M32F)
 ```
ブロックチェーン革新全解説シリーズ　第1回：ブロックチェーンとは？～初心者向け基礎知識～（全5回）

## 1.0 はじめに
本シリーズは全5回にわたり、ブロックチェーン技術の基本から応用、経営層やプロジェクトマネジメントの視点までを解説します。  
今回は第1回目として、ブロックチェーンの定義や基本概念、仕組みについて初心者の方にも分かりやすく説明します。
ブロックチェーンは暗号資産（仮想通貨）の基盤技術として有名ですが、その応用範囲は金融以外にも多岐にわたります。
まずは、基本をしっかりと押さえていきましょう。

## 1.1 ブロックチェーンの定義と基本概念
**ブロックチェーン**とは、取引データを「ブロック」という単位でまとめ、時系列に連結した「チェーン」として管理する分散型台帳技術です。この仕組みにより、データの改ざんが困難となり、透明性と信頼性が確保されます。

### 1.1.1 ブロックとチェーンの仕組み
- **ブロック:**  
  各ブロックは複数の取引データを含むデータ構造で、以下の要素から構成されます。  
  - **ヘッダー:** 前のブロックのハッシュ値、タイムスタンプ、ナンス（nonce）などが含まれる。  
  - **ボディ:** そのブロックに記録される実際の取引情報。  

- **チェーン:**  
  各ブロックは、前のブロックのハッシュ値を含むことで強固に連結されます。この連鎖構造により、一部のブロックを改ざんすると以降すべてのブロックのハッシュ値が変わり、ネットワーク全体で不正が即座に検知されます。

- **分散台帳:**  
  ブロックチェーンは中央のサーバーではなく、ネットワークに参加する多数のノード（コンピュータ）が同一の台帳を保持・管理するため、システム全体の耐障害性が向上しています。

## 1.2 ブロックチェーンの主要な特徴
ブロックチェーン技術の根幹をなす特徴として、以下の点が挙げられます。

### 1.2.1 分散性と非中央集権
- **中央管理者が不要:**  
  すべてのノードが台帳を共有し、各ノードが取引の検証を行うため、中央管理者に依存せずシステムが運営されます。  
- **高い耐障害性:**  
  どこか一部のノードが停止しても、他のノードが台帳を保持しているため、全体としてのシステムが継続して動作します。

### 1.2.2 透明性と改ざん防止
- **公開台帳:**  
  ブロックチェーン上の全取引はネットワーク参加者に公開され、誰でも内容を確認できるため、透明性が確保されています。  
- **改ざん困難:**  
  各ブロックは暗号学的ハッシュ関数によって固定長のハッシュ値が計算され、前のブロックのハッシュ値が組み込まれているため、途中のデータを変更することが極めて難しいです。

### 1.2.3 セキュリティと信頼性
- **暗号技術の活用:**  
  取引データは暗号化され、各ブロック間の連携も暗号技術により保護されます。  
- **コンセンサスアルゴリズム:**  
  ネットワーク参加者全員が正しい取引データを共有するため、Proof of Work（PoW）やProof of Stake（PoS）などのアルゴリズムが採用され、悪意ある改ざん行為が防止されます。

## 1.3 ブロックチェーンの基本用語
ブロックチェーンの理解を深めるために、重要な用語をいくつか解説します。

- **ノード (Node):**  
  ブロックチェーンネットワークに参加する各コンピュータ。各ノードは台帳のコピーを保持し、取引の検証に貢献します。

- **マイニング (Mining):**  
  新しいブロックを生成するために、ノードが計算問題を解くプロセス。計算に成功すると、新たなブロックが生成され、報酬が与えられます。

- **ハッシュ関数:**  
  入力データから固定長のハッシュ値を生成する関数で、少しの入力の変化が大きな出力の違いを生むため、データの整合性や改ざん検知に有効です。

- **コンセンサスアルゴリズム:**  
  ネットワーク参加者が取引の正当性を合意形成するための仕組み。代表的なアルゴリズムにはProof of Work（PoW）やProof of Stake（PoS）があります。

## 1.4 ブロックチェーンの歴史と背景
ブロックチェーン技術の発展の背景を理解することで、現在の技術がどのようにして形作られたのかが見えてきます。

- **初期の研究:**  
  1990年代から分散システムや暗号技術に基づいた台帳技術の研究が行われていましたが、実用的な技術として普及したのは2008年以降です。

- **ビットコインの登場:**  
  2008年、サトシ・ナカモトによって発表された論文に基づき、2009年にビットコインがリリースされました。ビットコインは、初めてブロックチェーン技術を実用化し、暗号資産として大きな注目を集めました。

## 1.5 ブロックチェーンの応用例
ブロックチェーンは、その特徴を活かしてさまざまな分野で活用されています。以下に代表的な応用例を挙げます。

- **暗号資産（仮想通貨）:**  
  ビットコインやイーサリアムなど、デジタル通貨の基盤技術として利用され、従来の金融システムに変革をもたらしています。

- **サプライチェーン管理:**  
  商品の流通履歴を透明に記録することで、偽造品の排除や効率的な物流管理を実現します。

- **デジタルアイデンティティ:**  
  個人情報の管理や本人確認に利用され、セキュリティの向上とプライバシー保護に寄与します。

## 1.6 まとめ
ブロックチェーンは、分散性、透明性、セキュリティという3大要素により、データの改ざんが極めて困難な台帳技術として注目されています。  
初心者の方は、まずは基本概念と仕組みをしっかりと理解することが大切です。次回以降の記事では、さらに技術的な詳細や具体的な活用事例について掘り下げていきます。

---

以上、ブロックチェーンの基礎知識に関する第1回の記事でした。  
ご意見やご質問がありましたら、コメント欄にてお気軽にお寄せください！

---

ブロックチェーン革新全解説シリーズ
[第1回：ブロックチェーンとは？～初心者向け基礎知識～](https://qiita.com/comty/private/0d4b3bc77b1d356f5814)
[第2回：技術的基礎～ブロックチェーンの仕組みとアーキテクチャ～](https://qiita.com/comty/private/cffe5e807df554b92661)
[第3回：実用例と応用事例～ブロックチェーンの活用シーン～](https://qiita.com/comty/private/4e59b1ae784ffff87311)
[第4回：経営層向け～ブロックチェーンがもたらすビジネス革新～](https://qiita.com/comty/private/3e2a941556c4013ae85d)
[第5回：プロジェクトマネジメント視点～実装とリスク管理のポイント～](https://qiita.com/comty/private/adc0f5a5a30371e6f571)
Proj #002 取引先コード申請のオンライン化をするゾ～第4回 ローコードツールの壁～

https://qiita.com/Novskiiiiiiiiii/items/32871191d906c9f938d0

こちら、現在携わっているキャンバスアプリの案件での、とあるテキストフィールドのOnChangeプロパティです。
（一部マスキングあり）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3891071/3f083f69-c27d-4aed-9416-8d6f05fa9c67.png)

コードにするとこんな感じ。

    // 初期化
    Reset(drp_24_tekikaku_invoice_2);
    
    // フォントカラー初期化
    Set(varTextColor_11, Color.Black);Set(varTextColor_12, Color.Black);Set(varTextColor_13, Color.Black);Set(varTextColor_14, Color.Black);Set(varTextColor_16, Color.Black);
    Set(varTextColor_17, Color.Black);Set(varTextColor_18, Color.Black);Set(varTextColor_19, Color.Black);Set(varTextColor_20, Color.Black);Set(varTextColor_21, Color.Black);
    Set(varTextColor_22, Color.Black);Set(varTextColor_23, Color.Black);Set(varTextColor_24, Color.Black);Set(varTextColor_25, Color.Black);Set(varTextColor_26, Color.Black);
    
    // 境界線カラー初期化
    Set(varBorderColor_11, Color.Black);Set(varBorderColor_12, Color.Black);Set(varBorderColor_13, Color.Black);Set(varBorderColor_14, Color.Black);Set(varBorderColor_16, Color.Black);
    Set(varBorderColor_17, Color.Black);Set(varBorderColor_18, Color.Black);Set(varBorderColor_19, Color.Black);Set(varBorderColor_20, Color.Black);Set(varBorderColor_21, Color.Black);
    Set(varBorderColor_22, Color.Black);Set(varBorderColor_23, Color.Black);Set(varBorderColor_24, Color.Black);Set(varBorderColor_25, Color.Black);Set(varBorderColor_26, Color.Black);
    
    // 申請部門コードによって参照するテーブルを切り替える
    UpdateContext({varTableName:
        Switch(
            txt_5_Sinsei_bumon_code_2.Text,
            "7***",'7***_hogehoge',
            "0***",'0***_fugafuga'
        )
    });
    
    // 別途取得している管理番号をキーに、部門用テーブルから該当する取引先コード-枝番のアイテムをコレクションに追加する
    ClearCollect(MyCollection, LookUp(varTableName,管理番号=Value(cf_27_ID_2.Text))); 
    
    // 取得したコレクションに対して存在チェックをするために取引先コードと枝番を変数に格納する
    Set(VarClientCode, txt_2_Torihikisaki_code_2.Text);
    Set(VarBranch, txt_3_Edaban_2.Text);
    
    // 取得したコレクションに該当するアイテムが存在するかチェック（必ず存在するが）
    If(
       CountRows(
          Filter(MyCollection, 
             取引先コード = VarClientCode && 
             枝番 = VarBranch)
       ) = 0 And Len(VarBranch) = 4,Notify("エラー: 取引先コードが存在しません。", NotificationType.Error));
    
    // 各項目に表示する値をアイテムから変数に格納する
    Set(txt11Furigana_2,LookUp(varTableName,管理番号=Value(cf_27_ID_2.Text),タイトル));

やりたい事に対してこれがベストな方法なのかは自信がないけど、まあ悪くはないと思う。
欲を言えば、varTableNameにセットするテーブルの値をSwitchで切り替えているけど、
ここだけテーブル名ベタ打ちしちゃっているから、もっとスマートに出来ないかなと思っている。

別の場所でテーブル名を変数に格納して、それを使おうとしたけどエラーになったので苦肉の策でこうした。詳しい人教えてきぼんぬ。

仕事の進め方として、ユーザー部門を巻き込んで一緒に設計とかをするスタイルなんだけど、Microsoft ListsとPower Automateはユーザにも少しずつやってもらえつつある。

が、キャンバスアプリで色々と制御しようとするとこういう関数を駆使する場面がどうしても出てくるので、いわゆる市民開発者にとってはここのハードルはかなり高いよなと思ったりする。

まあそれを可能にしていくのが自分のミッションであるわけだけど。

でもこうやって色々と試行錯誤しながら自分で手を動かして仕組みを構築していくのって本当に楽しいなと感じる。

社内の無駄な作業を減らしつつ、自分のスキルも高められて、かつこれでお賃金までもらえるんだからこんなに楽しい仕事ってないね。

入社して８か月経過したけど、ここまでストレスゼロだし。（自分で自分の首を絞めて苦しんだりする事はあるけど）

こういうのを天職と言うのだろうな。

さてもうひと頑張りしようかな。
Visual Studio Code チートシート【Mac版】


## 🚀 はじめに

Visual Studio Code（VS Code）は、軽量で拡張性が高く、多くの開発者に愛されているコードエディタです。本記事では、Macユーザー向けにVS Codeの便利なショートカットや機能を一覧にしたチートシートを紹介します。

---

## ⌨️ 基本的なショートカット

| 操作 | ショートカット |
|------|---------------|
| 新規ファイルを作成 | `Cmd + N` |
| ファイルを開く | `Cmd + O` |
| 保存 | `Cmd + S` |
| 名前を付けて保存 | `Cmd + Shift + S` |
| 閉じる | `Cmd + W` |
| すべて閉じる | `Cmd + Shift + W` |
| 最近使ったファイルを開く | `Cmd + Shift + T` |

---

## 🖥️ ウィンドウ操作

| 操作 | ショートカット |
|------|---------------|
| 新しいウィンドウを開く | `Cmd + Shift + N` |
| 現在のウィンドウを閉じる | `Cmd + Shift + W` |
| フルスクリーン切り替え | `Cmd + Ctrl + F` |
| エディタの分割（縦） | `Cmd + \` |
| エディタの分割（横） | `Cmd + 1/2/3` |
| 次のエディタに移動 | `Cmd + Option + →` |
| 前のエディタに移動 | `Cmd + Option + ←` |

---

## 🔎 ナビゲーション & 検索

| 操作 | ショートカット |
|------|---------------|
| コマンドパレットを開く | `Cmd + Shift + P` または `F1` |
| ファイル検索（クイックオープン） | `Cmd + P` |
| ファイル内検索 | `Cmd + F` |
| フォルダ内検索 | `Cmd + Shift + F` |
| 行番号へジャンプ | `Cmd + G` |
| シンボル検索 | `Cmd + Shift + O` |

---

## 📜 コード編集

| 操作 | ショートカット |
|------|---------------|
| 行をコピー | `Cmd + C` |
| 行をカット | `Cmd + X` |
| 行を削除 | `Cmd + Shift + K` |
| コメントアウト（トグル） | `Cmd + /` |
| インデントを増やす | `Cmd + ]` |
| インデントを減らす | `Cmd + [` |
| マルチカーソル追加 | `Cmd + Option + ↑/↓` |
| すべての出現箇所を選択 | `Cmd + Shift + L` |

💡 **Tip:** 
* 「Cmd + D を使うと、同じ単語を順に選択でき、Cmd + Shift + L を使うと一括で選択できます。状況に応じて使い分けると便利です！」

---

## 🛠️ デバッグ & ターミナル

| 操作 | ショートカット |
|------|---------------|
| ターミナルを開く/閉じる | `Cmd + ~` |
| デバッグの開始 | `F5` |
| デバッグの停止 | `Shift + F5` |
| ブレークポイントの設定 | `F9` |
| ステップイン | `F11` |
| ステップオーバー | `F10` |
| ステップアウト | `Shift + F11` |

---

## 🎨 カスタマイズ

| 操作 | ショートカット |
|------|---------------|
| 設定を開く | `Cmd + ,` |
| 拡張機能を開く | `Cmd + Shift + X` |
| JSON設定を開く | `Cmd + Shift + P` → "Preferences: Open Settings (JSON)" |

---

## 🏆 まとめ

VS Codeのショートカットを活用することで、作業効率が大幅に向上します。最初は覚えるのが大変かもしれませんが、少しずつ使いこなして快適な開発環境を構築しましょう！

💡 **Tip:** よく使うショートカットはメモしておくと便利です。

---

🔗 **参考リンク**
- [VS Code 公式ショートカットリスト（Mac）](https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf)
pacman fcitx4,5 衝突

あんま自信ないです。
参考程度に。

pacman 衝突 依存
---

pacmanで衝突が出る、
fcitx5とfcitx4。
ならfcitx4をアンインストールしようとするが、
そもそも4は入れてない。

なぁ〜んて人、居るよね。

その場合は
```history.log
sudo pacman -Rs fcitx5 fcitx5-configtool fcitx5-mozc fcitx5-qt
pacman -Syu
sudo pacman -Rs fcitx fcitx-qt5
sudo pacman -S fcitx5 fcitx5-configtool fcitx5-mozc fcitx5-qt
sudo pacman -Syu
```
↑
 1. 一旦fcitx5まわりuninstall
 1. update
 1. fxitx4まわりをuninstall
 1. fcitx5まわりを再install
 1. update

---

<font color="#000">
↓検索用
conflict pacman
解決できないパッケージの衝突が検出されました
処理の準備に失敗しました
衝突する依存関係
</font>
【電脳少女プログラミング2088 ─壊レタ君を再構築─】D:ネオン街の裏路地やってみた。

# はじめに
paizaの新作プログラミングゲーム【電脳少女プログラミング2088 ─壊レタ君を再構築─】で、ネオン街の裏路地（paizaランク：D相当）の課題に挑戦しました。

# 問題
あなたは裏路地にある扉を開けようとしています。扉は n 個あり、各扉には順不同に数字が書かれています。最も大きな扉の数字を出力してください。

# 解答
```go
package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    scanner.Split(bufio.ScanWords)
    
    scanner.Scan()
    num, _ := strconv.Atoi(scanner.Text())
    
    max := 0
    for i := 0; i < num; i++ {
        scanner.Scan()
        n, _ := strconv.Atoi(scanner.Text())
        if max < n {
            max = n
        }
    }
    
    fmt.Println(max)
```

# 今回学んだこと
string型からint型に変換する方法
```
n, _ := strconv.Atoi(scanner.Text())
```
`, _ `はエラー文を記入する欄であり`_`は省略している
知ってると便利！エンジニアのためのワンライナーチートシート

## はじめに

ワンライナー（one-liner）とは、その名の通り「1行で完結するコマンドやスクリプト」のことを指します。特にエンジニアやシステム管理者にとって、ワンライナーを活用できると作業効率が大幅に向上します。

この記事では、便利なワンライナーをカテゴリ別に紹介し、日常業務で役立つ使い方を解説します。

---

## 1. ファイル操作系ワンライナー

### ファイルの行数を数える
```sh
wc -l filename.txt
```

### 指定したファイルを末尾10行だけ表示
```sh
tail -n 10 filename.txt
```

### ファイルを10行ずつ分割して保存
```sh
split -l 10 largefile.txt part_
```

### 空のファイルを作成
```sh
touch newfile.txt
```

### ファイルの更新日時を変更
```sh
touch -m filename.txt
```

### 特定の拡張子のファイルを削除
```sh
rm -rf *.log
```

### ディレクトリ内のすべてのファイルサイズを合計
```sh
du -sh *
```

---

## 2. テキスト処理系ワンライナー

### 特定の文字列を含む行を抽出
```sh
grep '検索文字列' filename.txt
```

### カンマ区切りのCSVをタブ区切りに変換
```sh
sed 's/,/\t/g' input.csv > output.tsv
```

### すべての小文字を大文字に変換
```sh
tr '[:lower:]' '[:upper:]' < input.txt > output.txt
```

### 重複行を削除
```sh
sort input.txt | uniq > output.txt
```

### 文字列を逆順に表示
```sh
tac input.txt
```

### JSONファイルを整形して表示
```sh
jq . data.json
```

---

## 3. ネットワーク系ワンライナー

### 指定したURLにHTTPリクエストを送る
```sh
curl -X GET https://example.com/api
```

### 自分のグローバルIPアドレスを取得
```sh
curl -s ifconfig.me
```

### 特定のポートが開いているかチェック
```sh
nc -zv example.com 80
```

### サーバーのレスポンスタイムを測定
```sh
time curl -o /dev/null -s -w '%{time_total}\n' https://example.com
```

### ネットワークの接続状況を確認
```sh
ping -c 4 example.com
```

### ネットワークの帯域幅を測定
```sh
iperf -c example.com
```

---

## 4. システム情報系ワンライナー

### CPU使用率をリアルタイム表示
```sh
top
```

### ディスク使用量を一覧表示
```sh
df -h
```

### メモリの使用状況を確認
```sh
free -m
```

### 現在のプロセスを確認
```sh
ps aux
```

### システムの稼働時間を確認
```sh
uptime
```

### 利用可能なメモリを監視
```sh
vmstat 1
```

---

## 5. Git操作系ワンライナー

### 直近のコミットログを表示
```sh
git log --oneline -5
```

### 変更したファイルを確認
```sh
git status -s
```

### 指定したコミットまでリセット
```sh
git reset --hard HEAD~3
```

### 最新のリモートリポジトリの変更を取得
```sh
git pull origin main
```

### 変更をステージングしてコミット
```sh
git add . && git commit -m 'Update files'
```

### リモートリポジトリのURLを確認
```sh
git remote -v
```

---

## まとめ

ワンライナーを活用することで、コマンド操作のスピードが格段に向上します。日々の業務やシステム管理で使えるものばかりなので、ぜひ試してみてください。

他にも便利なワンライナーがあれば、ぜひコメントで共有してください！