OmniAICreator/Qiita-1.07M huggingface dataset:
AIにどこまで子育てを頼むか

かこそだて×生成AI (byこそぷろ👶) 　Calendar 2024
https://qiita.com/advent-calendar/2024/kosopro2024
Day 4　投稿記事です。

投稿予定の方は、購読ボタンを押してください。よろしくお願いします。
記事をお読みになられたら、Calendarにあってもいいかなって記事には、いいね💚　をお願いします。

# 前史
30年ほど前、Macintosh Classicという198,000円のApple Computerがあった。
初めて２０万円を切るApple Macintoshで飛びついた。

ちょうど子供が産まれ、子育ての最中に、赤子とMacintosh Classicをどちらも置いて放置していた。

１歳前になる子供が、画面の設定を勝手に変えた。
表示が変わるのが面白いらしい。

「うにょ」っていうunoというカードゲームのアプリを入れていた。
うにょをやりながら、それだけでは面白くないらしく、設定の変更の仕方を覚えてしまったらしい。

１歳未満の子供に、コンピュータな子守りをさせるのは駄目だと思った。

# AIに子守りをさせてもいいか。
子守り専用のAIなら、ひょっとしたらいいものができるかもしれない。

子供が、設定の変更の仕方に気がついてしまい、何をするかはわからない。

子供用の設定は、なんの役にもたたない。
場合によっては、パスワードも。

## 子守りAI
そうはいっても、子守りAIは必須だと思う。

自動車内部に子供を放置したり、誰もいない家に子供を放置したりすることがあっても、子供の安全を見守る機能は欲しい。

できればAIの機能を利用して。

どこまでAIに子守りの機能をまかせるかは大事。

子供が、いつのまにかネットでどこかの国か地方に戦争をしかけるかもしれない。

コンピュータエンジニアの子供は、とても危険な状況におかれているのかもしれない。

カッコウはコンピュータに卵を産む 上 クリフォード・ストール
https://bookmeter.com/books/1817
https://www.amazon.co.jp/dp/product/4794204302/

>この本が出たときには、衝撃的でした。
内容もすごいが、当事者の親の立場を勘案すると、心が痛みました。
具体的な技術については、詳細には書かれていないが、なんとなく類推することができる。
ネットワークの基本的な機能について理解していなくても、十分理解できるように書き下されているように思われる。
鳥のカッコーが、自分の卵を他の鳥の巣に生んで，育てさせるという話の比喩として、 コンピュータの不正利用の話の標題にしている。
コンピュータ業界で仕事をしていくなら、この程度の英語が読めることが重要なので、 英語版で読む事をお勧めしたい。
新人教育にはもってこいの書籍である。

AIにどこまで子育てを頼むかは、悩ましい。
macOS Sequoia 15.1 zshでbrewがターミナルから使えない時の対処法

## brewを環境変数に追加する

brewをインストールしたのに、command not foundエラーが出る場合、環境変数のパスが通っていないことが原因である。

`export PATH=/opt/homebrew/bin:$PATH
`
このコマンドを実施。その後

`brew --version`
で、現在のバージョンを確認できればOK。

# 環境変数に追加するとは
環境変数 PATH は、コマンドを実行する際にシステムがどのディレクトリを探すかを決めるものである。これで /opt/homebrew/bin 内のプログラムが、他のディレクトリにあるものより優先して実行されるようになる。

# 追記
環境変数を~/.zshrcに登録しなければ、上記のコマンドを毎回打たなくてはならない。
以下の手順を行うと解決される。


##### 1.~/.zshrcを好きなエディタで開く
`code ~/.zshrc`
codeはVScodeを開きます。nanoなどのエディタも使えるので好きなものを使ってください。

##### 2.~/.zshrcに環境変数を登録する
`
export PATH="/opt/homebrew/bin:$PATH"
`
これを書き加えて保存してください。
/opt/homebrew は、homebrewの通常のインストール場所です。自分のhomebrewがどこにあるかは

`brew --prefix`

で確認できます。適宜自分の環境で読み替えてください。

##### 3.変更を反映させる
`source ~/.zshrc`
これで設定が反映されます。

##### 4.設定が反映されているか確かめる
`brew --version`
バージョンが表示されれば完了です。
Netskope導入で仕事がこんなに変わるなんて！私たちのセキュリティ改革体験

****  

こんにちは！今日は、私たちの会社が **Netskope** を導入して、クラウドセキュリティがどれだけ変わったかをお話ししたいと思います。これを読んで、同じような悩みを抱えている方の参考になれば嬉しいです！  

### **Netskope導入前の悩みあれこれ**  
まずは、導入前の状況からお話しします。私たちの会社は、クラウドサービスをフル活用して業務を進めています。リモートワークやモバイルワークもどんどん普及し、場所を問わず仕事できる環境が整ってきました。
でも、その一方でこんな悩みも…。  

- 社員が勝手に使っているクラウドアプリが増えていて、どれが許可されているか分からない  
- 「この情報、本当に安全に扱われているの？」と心配になることが増えた  
- セキュリティ対策が複雑で、トラブル対応に手が回らない  

特に「シャドーIT」と呼ばれる、許可されていないツールやアプリの利用が問題でした。
仕事を効率よく進めたい気持ちは分かるけど、セキュリティリスクがどんどん増えてしまうのは見逃せません。  

### **Netskopeとの出会い**  
そんな中で出会ったのが **Netskope** でした。セキュリティ対策をどうするか模索していた時にこのツールを見つけ自分たちのニーズに合う！と盛り上がったのを覚えています。  

特に魅力的だったのは、以下のポイント  
- クラウドアプリの利用状況が「見える化」される  
- 社員が安全に使える範囲を細かくコントロールできる  
- リアルタイムでリスクを検知して対応できる  

### **導入してみてどう変わった？**  
いざ導入してみたら、本当に仕事の進め方が変わりました！
ざっくりまとめるとこんな感じです。  

#### 1. **クラウドの「見える化」で安心感アップ**  
今までは「どのクラウドアプリを誰が使っているか」が分からずモヤモヤしていたのですが、Netskopeを導入した途端、すべてがクリアに。  
たとえば、社員の中で外部のファイル共有サービスを使っていた割合が意外と多いことが分かり、「こんなに使われてたの！？」と驚きました。それを元にルールを見直して、より安全に運用できるように改善しました。  

#### 2. **リスクをコントロールできる安心感**  
「この部門はここまで使えるけど、こっちはもっと制限が必要」など、細かいルールを設定できるようになりました。例えば、営業チームが特定のクラウドストレージにしかアクセスできないようにしたり、重要データのアップロードに制限をかけたりしています。これでデータの流出リスクを大幅に減らせました。  

#### 3. **不審な動きをすぐキャッチ！**  
Netskopeのおかげで、怪しい動きがあれば即アラートが飛んできます。実際に、ある社員が許可されていないアプリを使おうとしていた時、瞬時に検知して未然に防げたことがありました。その時の安心感といったらもう！  

### **社員の反応は？**  
最初は「また新しいツールか～」と少し不満そうな顔をする人もいました。でも、定期的にセキュリティトレーニングを行い、「これがあるから安全に働けるんだよ」と伝えることで、今では「必要なもの」として受け入れられています。  

### **導入して良かったこと**  
一番の収穫は、「見えないリスクに怯えなくて良くなった」ことです。セキュリティチームのストレスも減り、リソースを他のプロジェクトに回せるようになりました。そして何より、社員全体が安心してクラウドサービスを使えるようになったことが大きいです。  

### **最後に**  
もしクラウドセキュリティに悩んでいる方がいたら、Netskopeは本当におすすめです。導入後の世界がどれだけ変わるか、私たちの体験談が少しでも参考になれば嬉しいです！  

これからも、Netskopeと一緒に安全で快適な仕事環境を目指していきたいと思います。読んでいただきありがとうございました！
Oracle Live SQL 使ってみた

Oracle Database を無料かつインストール不要でブラウザで使用可能な Oracle Live SQL を使ってみました。

## 利用開始手順

1. まず[Oracle Live SQL](https://livesql.oracle.com/ords/f?p=590:1000)を開きます。
2. 画面右上の「Sing in」を押下します。

    ![スクリーンショット 2024-12-01 10.11.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/6a59882a-75c3-2bbf-854d-1ea91edd46bb.png)

3. （3から6まではOracle アカウントを持っていない場合のみ）「アカウントの作成」を押下します。

    ![スクリーンショット 2024-12-01 10.11.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/e79f6d6d-9a7e-21f5-986e-994a12ba8d39.png)

4. 「Oracle プロファイルの作成」画面で作成するアカウントの情報を入力して、「同意してプロファイルを作成」を押下します。

    ![スクリーンショット 2024-12-01 10.13.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/30fdff4c-14bb-fb93-7174-bc9e6283ef72.png)
    ![スクリーンショット 2024-12-01 10.13.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/9cad71ec-ff4b-62a4-76cc-4d56e2622fdc.png)
    ※会社名を入力する欄がありますが私は適当な名前を入力しました。

5. メールが送られるので、メール本文の「電子メール・アドレスの確認」を押下してアカウント作成を完了させます。

    ![スクリーンショット 2024-12-01 10.16.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/53edadc4-2e36-0def-03fe-5890f3b7c062.png)

6. 再度[Oracle Live SQL](https://livesql.oracle.com/ords/f?p=590:1000)を開いてサインインします。

    ![スクリーンショット 2024-12-01 10.17.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/9e202316-f3cd-9c80-a262-ebd28d30e59c.png)

7. サインインに成功すると右上にメールアドレスが表示されます。

    ![スクリーンショット 2024-12-01 10.19.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/d1dd64cb-1152-fcd6-932d-d7962955922d.png)

## Oracle Live SQL の操作

1. 操作画面を開くにはトップページの「Start Coding」を押下します。

    ![スクリーンショット 2024-12-01 10.20.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/afeb37ae-6d34-ae0c-8a3d-b7c99ee0cfff.png)

2. SQL Worksheet に実行したい SQL 文を入力して、右上の「Run」を押下して実行します。

    ![スクリーンショット 2024-12-01 18.07.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/e4b1e0ff-938d-b2d1-2815-6a609a5fb114.png)

3. SQL 文を入力した下部に実行結果が表示されます。

    ![スクリーンショット 2024-12-01 18.09.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/eb7f2f76-ba90-efd4-4283-d893c3f094f6.png)

## Oracle Live SQL を使った感想

Oracle Database は PostgreSQL など他の DBMS に比べて環境構築に手間がかかる印象ですが、その手間を省いてすぐに使用できるのはとても便利だと思います。

一方で、テーブルスペース作成は権限がなく実行できなかったので、テーブル作成や CRUD 操作だけ実行できるようです。  
ユーザ作成など構築・運用に必要な操作を試したい場合は、自前で環境構築が必要です。

## 参考にした記事

[環境構築なしで Oracle が使える！Oracle Live SQL を使ってみた！ | DXO スタッフブログ](https://dxo.co.jp/blog/archives/8722)

## 余談

Oracle Database を初めて使う機会があったので勉強のために Oracle Live SQL を使用しました。
環境構築なくすぐに試せてかなり便利なサービスだと思います。
Qiita社でインフラコストを抑えるためにやった取り組みを公開する

Qiita社では現在インフラコストの削減するための取り組みを段階的に行っております。
この記事では、この数年でやった施策のうちいくつかを公開します。
今後インフラコストを削減したい方の参考になれば幸いです。

## データ基盤の変更

Qiita社では2019年よりTreasure Dataを中心としたデータ基盤を構築していました。
しかし、Treasure Dataの料金形態が利用状況とあっていないことを理由として、データ基盤をGoogle CloudのBigQuery中心の構成に変更しました。
大幅な費用の削減に成功しましたが、この記事で紹介するには規模が大きすぎるため別記事で紹介する予定です。

## BigQueryのストレージ料金タイプの変更

2023年に、BigQueryの新料金が発表されましたが、ストレージ料金は新料金(物理ストレージ)と旧料金(論理ストレージ)で選択できるようになっています。
大抵の場合は、新料金形態の方が安いため、以下のページにある確認用のクエリでどれくらい安くなるか確認して、問題なければサッと変えてしまいましょう。

https://cloud.google.com/bigquery/docs/information-schema-table-storage?hl=ja#forecast_storage_billing

Qiita社でも全データセットの料金形態を変更して、ストレージ費用を大幅に削減することができました。
基本的どのデータセットに適用しても費用が安くなりますが、気を付けるべきデータセットも存在します。
Embulkなどを使って定期的にデータを全更新しているようなテーブルを持つデータセットでは、タイムトラベルなどの課金仕様の都合上旧料金の方が高い可能性もあります。
タイムトラベル期間を短くするかそのデータセットだけ旧料金にするなどの工夫をしましょう。

## CloudWatchに保存していたRDSのAuditログのS3移行

RDSのAuditログをこれまでCloudWatch logに保存していましたが、非常に大きな料金がかかっていました。
これをAWS Lambdaを利用することで、直接S3へアップロードするようにし大幅に料金を削減することができました。
詳細は担当してくれたメンバーから記事が上がるかもしれないので、そちらへ任せることにします。

## RDSインスタンスタイプ・台数の見直し

RIの購入タイミングで、RDSやOpensearchのサイズを小さくしたりstaging環境の過度な冗長化を排除しました。これにより、無駄な料金がかかっていた場所を適正化することができました。
また、インスタンスの世代が古かったもの(r4やt2等)は極力r6gやt4g等にすることで、Gravtion化によるインスタンス費用削減も行っています。
特にRDSに関してはクエリの高速化を行うことで、負荷を下げインスタンスサイズの縮小を行うと同時に、レスポンスタイムの改善されユーザー体験の改善に成功しました。

## AWS Configの記録頻度抑制

EC2からECSに移行したタイミングで、AWS Confogの料金が数倍に跳ね上がりました。
記録を止めるのは最終手段にしたかったため、記録頻度をに`Continuous`(連続)かから`Daily`(日時)にすることで費用の抑制を行っています。

https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/select-resources-recording-frequency.html

## Fargate移行

Qiita/Qiita Teamは2024年にEC2からECS on EC2へ移行を行いました。
そこから更に、ECS on Fargateへ移行を現在進めており、費用の削減を行っています。
インスタンス費用自体はほぼかわらないか若干増加の見込みですが、それ以上に削減されると見込んでいるのがDatadogの料金です。
以下が製品サイトに記載されたDatadogの料金です。

| 製品 | 請求単位 | 料金(オンデマンドの場合) |
|:-|:-|-:|
| インフラストラクチャー Pro  | 	インフラホストあたり、1か月  |  22.50$ |
| APM  |  APMホスト毎、1か月 | 45.00$  |
| Fargate (Infra)  | Fargate タスクあたり、1か月  | 1.75$  |
| Fargate (APM)  | Fargate タスクあたり、1か月  | 3.63$  |

どの程度ECS taskを一つのインスタンスに詰め込んでいたか等で変動率は変わりますが、インスタンス料金が高いからとFargate化を試算せず見送っていてる方は、監視サービスも加味して計算してみると持つ印象が変わるかもしれません。





## これからやっていきたいこと

ここまで複数の施策を紹介してきましたが、まだ対応完了できていないこともあります。
そのうちのいくつかを紹介します。

- ECS taskをArmインスタンスで動かすようにする
    - 同時に移行する予定のCIで利用しているsetup-rubyのArm対応を待っている状態です
        - https://github.com/ruby/setup-ruby/issues/577
        - https://github.com/github/roadmap/issues/970
- 料金の監視体制の構築
    - 現在はAWSやBigQueryの料金を毎日コンソールから確認していますが、Slackへ流せるようにして、料金が大きく変動したときにコンソールを見なくても気が付けるようにしたい
- Amazon Auroraのストレージ構成をAurora I/O-Optimizedに変更

## まとめ

今回はQiita社で行ったインフラコストの削減施策を紹介しました。
他にも大小様々な取り組みを行っていますが、段々安くなっていく領収書を眺めるのは楽しいです。
是非皆様の参考になれば幸いです。
【基本情報】セキュリティについて

## 情報セキュリティの七要素
- 機密性
許可された人だけが情報にアクセスできるようにする。
- 完全性
情報が置き換えられたりすることなく、完全な状態を保っていること。

- 可用性
利用者が、必要な時に必要な情報資産を利用できるようにすること。

- 真正性
エンティティは、それが主張するとおりのものであるという特性。

- 責任追跡性
いつ、だれが、何をしたのかを特定・追跡できる特性。

- 否認防止
主張された事象又は処置の発生、およびそれらを引き起こしたエンティティを証明する能力。

- 信頼性
意図する行動と結果とが一貫しているという特性。

 
## セキュリティリスクへの対応
- リスクコントロール
「損失の発生を防止する、もしくは発生した損失の拡大を防止する」もの。

- リスクファイナンシング
「損失を補填するための財務的な備えを講ずる」もの。

## 不正のトライアングル
- 機会
不正行為の実行を可能または容易にする環境が存在すること。

- 動機・プレッシャー
ノルマによるプレッシャーなど不正を働く動機があること。

- 姿勢・正当化
不正行為を自身で正当化させ得る自分勝手な心理状態にあること。



## ユーザーの認証方法
- バイオメトリクス認証
指紋や声紋など身体的特徴を使って個人を識別する認証方法。

- ワンタイムパスワード
一度限り有効という、使い捨てのパスワードを用いる認証方法。
トークンと呼ばれるワンタイムパスワード生成器を使う形が一般的である。

- コールバック
一旦アクセスした後で回線を切り、逆にサーバー側からコールバックさせることでアクセス権を確認する認証方法。





## 様々な不正アクセスの手法

- パスワードリスト攻撃
どこからか入手したID・パスワードを用いて、他のサイトへのログインを試みること。

- ブルートフォース攻撃
特定のIDに対し、パスワードとして使える文字の組み合わせを片っ端から全て試す手法。

- リバースブルートフォース攻撃
パスワードを固定において、IDとして使える文字の組み合わせを片っ端から試す手法。

- レインボー攻撃
ハッシュ値から元のパスワード文字列を解析する手法。

- SQLインジェクション
悪意のある問い合わせや操作を行うSQL文を埋め込み、データベースのデータを不正に取得したり、改ざんしたりする手法。

- DNSキャッシュポイズニング
DNSのキャッシュ機能を悪用して、一時的に偽のドメイン情報を覚えさせることで、偽造Webサイトへと誘導する手法。

- DoS攻撃
-電子メールたWebリクエストなどを、大量にサーバーに送り付けることでネットワーク上のサービスを提供不能にする手法。

- DDoS攻撃
-複数のコンピュータから一斉に電子メールやWebリクエストなどを、大量にサーバーに送り付けることでネットワーク上のサービスを提供不能にする手法。

- フィッシング
偽装Webサイトに利用者を誘導し、暗証番号をはじめとする個人情報を不正に取得しようとする手法。


- ルートキット
不正アクセスに成功したコンピュータに潜伏し、攻撃者がそのコンピュータをリモート制御できるようにするソフトウェアの集合体のこと。

- ルートキット
侵入者やマルフェアの挙動を監視するために、意図的に脆弱性を持たせた機器をネットワーク上に公開し、おとりとして用いる手法のこと。
シェル関数を定義しなかった人生があると思うとゾッとする

# はじまりは自己紹介から

はじめまして！
Linuxが全く分からない、あおげばにゃんこです。
今回はLinuxを勉強して少し開発までのフローが楽になったので記事にしてみました。
あまり力を入れずに手短に紹介します。

# シェル関数を使わない人生

これまで、開発をする際は毎回以下のようなコマンドを打って環境を整えていました

```
$ cd ~/parent/child
$ docker compose up -d
$ docker ps
$ docker attach $CONTAINERID
```

思わずため息が出るような長さですよね？
特に、`docker ps`なんて　`docker compose up -d`したら絶対つかうんだからセットでやってくれよと思ってしまいますよね？

# シェル関数を使う人生
さっきの長々としたコマンドは忘れてこれからは以下のように打つだけでいいんです！

```
$ child
$ dcs
$ da $CONTAINERID
```

いかがですか？
こんだけ短くなるともう元には戻れないでしょう。

# どうやって設定するの？
macユーザーであればターミナルを開くとおそらくzshだと思うので

```
$ vi ~/.zshrc
```
を実行してzshrcファイルを開くと
こんな感じのvimエディタが開きますのでこちらに書き込んでいきます。

:::note info
画質悪いですが気にしないでね🫶
export~が書いてありますが、私が以前設定したものです。
何も設定しないと多分何も書いてない
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804334/78645930-34e6-da21-135b-13cad209c59b.png)

キーボードの[i]を押してinsertモードにします
その後
```
child() {
  cd ~/parent/child
}

dcs() {
  docker compose up -d
  echo '-----------------------------------'
  docker ps
}

ds() {
  docker ps
}

da() {
  docker attach "$1"
}
```
上を丸っとコピペします。
[esc]ボタンを押して[:wq]と打ち込み保存します
最後に
```
$  source ~/.zshrc
```
を実行します。
すると
```
$ child
$ dcs
$ da $CONTAINERID
```
これだけのコマンドで実行できるようになります。

# 最後に
簡単に自分が現在設定しているコマンドを紹介します

```
# zshコマンド
vz() {
  vi ~/.zshrc
}

sr() {
  source ~/.zshrc
}

# git コマンド
gb() {
  git branch
}

ch() {
  git checkout "$1"
}

cb() {
  git checkout -b "$1"
}

# docker コマンド
da() {
  docker attach "$1"
}

dce() {
  docker compose exec "$1" bash
}

dcs() {
  docker compose up -d
  echo '-----------------------------------'
  docker ps
}

dcd() {
  docker compose down
}

ds() {
  docker ps
}

# cd コマンド（よく使うファイルをこれに設定しています）
item() {
  cd ~/article/item
}

child() {
  cd ~/parent/child
}
```

# お願い
皆さんの便利コマンドの設定もよければ教えてください！
長々と記事にお付き合いありがとうございました😊

## 余談
今回設定したcdコマンドですが、シンボリックリンクでいいのでは？と最初は思ったのですが、その場合だとgit情報が引き継がれないらしく断念しました。
あと、書籍で勉強したいたのですが、「シェルとターミナルを一緒にしている奴は素人だ！」と書かれていたので気をつけていきたいです。
Gophishを使った効果的な社内フィッシングメール訓練方法に関して



## **はじめに**

フィッシング攻撃は、近年、サイバー攻撃の中でも特に多い手法の一つです。これに対応するためには、従業員がフィッシングメールを見分け、適切に対応するスキルを身につけることが重要です。  

この記事では、オープンソースツール「Gophish」を活用して、社内フィッシング訓練を効果的に実施する方法を具体例とともに解説します。また、技術的手順だけでなく、倫理的配慮や教育戦略についても触れていきます。

---

## **1. Gophishのセットアップ**

### **1.1 セットアップ方法**
#### **直接インストール**
1. Gophishの公式サイトから適切なバージョンをダウンロードします。
2. ファイルを解凍し、以下のコマンドを実行して起動します：
   ```bash
   ./gophish
   ```
3. 初回起動時に管理者アカウントを作成する必要があります。

#### **Dockerを使用したインストール**
1. Dockerをインストールし、以下のコマンドを実行：
   ```bash
   docker pull gophish/gophish
   docker run -d --name gophish -p 3333:3333 -p 80:80 gophish/gophish
   ```
2. **トラブルシューティング**:  
   - ポート競合エラーが発生する場合は、異なるポート番号を指定してください：
     ```bash
     docker run -d --name gophish -p 3334:3333 -p 8080:80 gophish/gophish
     ```

---

## **2. 訓練キャンペーンの準備**

### **2.1 ランディングページの作成**
- ランディングページは、「フィッシングメール」に見せかけるリンク先となるページです。
- SSL/TLS証明書を適用し、HTTPS接続を使用することで、安全性と信頼性を確保します。

#### **SSL/TLS証明書の適用（Let's Encryptの利用例）**
```bash
sudo apt install certbot
sudo certbot certonly --standalone -d example.com
```
証明書を取得後、Dockerコンテナ内にマウントして使用します。

### **2.2 メールテンプレート作成**
- **推奨されるテンプレート例**:
  - 「パスワード変更リクエスト」  
    件名: 「【重要】アカウントの安全性を確保してください」  
    内容: 「IT部門です。セキュリティ向上のため、次のリンクからパスワードを更新してください。」  
    *(リンクはランディングページに接続)*

### **2.3 ユーザーグループの設定**
- 公平性を保つため、すべての部署や職種から均等に対象者を選びます。

---

## **3. キャンペーンの実施とモニタリング**

### **3.1 キャンペーンの作成**
- 「Campaigns」タブで、送信プロファイル、メールテンプレート、ランディングページ、ユーザーグループを設定。

### **3.2 リアルタイムの監視**
- ダッシュボードで以下のデータをリアルタイムで確認可能です：
  - メール開封率
  - リンククリック率
  - 情報提供率（入力フォームがある場合）

---

## **4. 結果の分析と教育戦略**

### **4.1 結果の可視化**
- **グラフやチャートでの分析例**:
  - 開封率の時間帯別推移
  - 部署ごとのクリック率比較

### **4.2 教育セッションの具体例**
1. **ワークショップ形式**:  
   実際のフィッシングメールと訓練メールを比較し、特徴を議論。
2. **オンライン学習モジュール**:  
   インタラクティブなクイズ形式で、フィッシングメールの見分け方を学習。

---

## **5. 他ツールとの比較**

| ツール         | 特徴                                   | メリット                       | デメリット                     |
|----------------|---------------------------------------|-------------------------------|-------------------------------|
| **Gophish**    | オープンソース、使いやすいUI           | コストが低い、簡単に導入可能   | 高度な分析機能は少ない         |
| **King Phisher** | 高度なカスタマイズが可能             | 詳細なレポート機能             | 導入・設定がやや複雑           |

---

## **6. 法的・倫理的な配慮**

- **事前告知**:  
  従業員に対し、フィッシング訓練が実施されることを通知し、目的を明確に説明します。
- **同意の取得**:  
  訓練対象者から事前に同意を得ることで、法的リスクを回避します。
- **プライバシー保護**:  
  訓練結果を個人単位で公開せず、統計データとして活用します。

---

## **7. 成功事例と改善策**

### **成功事例**
- 第1回訓練でクリック率が40% → 第2回訓練で10%に減少。  
  教育セッションを行い、従業員の意識向上が確認されました。

### **改善策**
- 高クリック率の部署に対して追加訓練を実施し、成功事例を共有。

---

## **まとめ**

Gophishを活用した社内フィッシング訓練は、組織のセキュリティ意識を高めるための強力なツールです。ただし、従業員への心理的負担を最小限に抑え、教育的な目的を重視することが成功の鍵となります。  
定期的な訓練を通じて、組織全体でセキュリティ意識を高める取り組みを推進しましょう。

---

## **参考リンク**
- [Gophish公式ドキュメント](https://getgophish.com/documentation)
- [OWASP フィッシング対策ガイド](https://owasp.org/)
- [Let's Encrypt公式サイト](https://letsencrypt.org/)

---
【基本情報】

## 論理回路
### 論理和(OR)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673845/89a0f25c-9967-598a-f224-36c136e9e486.png)
入力が両方とも0のとき0、それ以外は１になる論理演算

### 論理積(AND)
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673845/c0bb5a00-e47e-1ac5-a9d5-d0bfb94eef9f.png)
入力が両方とも１のとき１、それ以外は0になる論理演算

### 否定論理和(NOR)
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673845/725570d0-d5b4-1d07-fcde-8cb50dfdaf60.png)
論理和（OR）の否定

## 補助単位

|補助単位  |意味  |説明  |
|---|---|---|
|キロ(ｋ)  |10の3乗  |基本単位×1,000倍の意味  |
|メガ(M) | 10の6乗 |基本単位×1,000,000倍の意味  |
|ギガ(G) | 10の9乗 |基本単位×1,000,000,000倍の意味  |
|テラ(T) | 10の12乗 |基本単位×1,000,000,000,000倍の意味  |

|補助単位  |意味  |説明  |
|---|---|---|
|ミリ(ｍ)  |10の-3乗  |基本単位×1/1,000倍の意味  |
|マイクロ(μ) | 10の-6乗 |基本単位×1/1,000,000倍の意味  |
|ナノ(ｎ) | 10の-9乗 |基本単位×1/1,000,000,000倍の意味  |
|ピコ(p) | 10の-12乗 |基本単位×1/1,000,000,000,000倍の意味  |
【基本情報】CPU

## 五大装置
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673845/b636d6a7-b004-c4f8-1ed1-ec4ba4639202.png)
※制御の流れは必ず制御装置からほかの装置へと伝達される
※データの流れは記憶装置を経由して各装置にデータが渡る


## レジスタの種類と役割

|名称  |役割  |  |
|---|---|--
|プログラムカウンタ  |次に実行するべき命令が入っているアドレスを記憶するレジスタ。
|命令レジスタ | 取り出した命令を一時的に記憶するためのレジスタ。
|インデックスレジスタ | アドレス修飾に用いるためのレジスタで、連続したデータの取り出しに使うための増分値を保持する。
|ベースレジスタ | アドレス修飾に用いるためのレジスタで、プログラムの先頭アドレスを保持する。
|アキュムレータ| 演算の対象となる数や、演算結果を記憶するレジスタ。
|汎用レジスタ| 特に機能を限定していないレジスタ。

## 命令の実行手順
### ①命令の取り出し(フェッチ)
　プログラムカウンタ→命令レジスタ
### ②命令の解読
### ③対象データ(オペランド)読み出し
　命令レジスタ→汎用レジスタ
### ④命令実行

## アドレス指定方式
|名称  |説明  |  |
|---|---|--
|即値アドレス指定方式  |オペランド部に、対象となるデータそのものが入っている方式。
|直接アドレス指定方式 | オペランド部に記載してあるアドレスが、そのまま実効アドレスとして使える方式。
|間接アドレス指定方式 | オペランド部に記載してあるアドレスの中に、対象となるデータが入っている箇所を示すメモリアドレスが記されている方式。
|インデックスアドレス指定方式 | オペランド部の値にインデックスレジスタの値を加算することで実行アドレスを求める方式。
|ベースアドレス指定方式| オペランド部の値にベースレジスタの値を加算することで実行アドレスを求める方式。
|相対アドレス指定方式| オペランド部の値にプログラムカウンタの値を加算することで実行アドレスを求める方式。


## CPUの性能指標

### クロック周波数
クロックが１秒間に繰り返される回数のこと。

### CPI
1命令あたり何クロックサイクル必要かを表す。

### MIPS
1秒間に実行できる命令の数のこと。

## CPUの高速化技術

### スーパーパイプライン
各ステージの中身をさらに細かいステージに分割することで、パイプライン処理の効率アップを図るもの。

### スーパースカラ
パイプライン処理を行う回路を複数持たせることで、まったく同時に複数の命令を実行できるようにしたもの。

### CISC
CPUに高機能な命令を持たせることによって、一つの命令で複雑な処理を実現できるアーキテクチャのこと。

### RISC
CPU内部に単純な命令しか持たない代わりに、それらをハードウェアのみで実装して、ひとつひとつも命令を高速に処理するアーキテクチャのこと。
今度出す本「知能とはなにか　ヒトとAIのあいだ」についてChatGPTと語ってみた。

# 知能とはなにか　ヒトとAIのあいだ
という本を２０２５年１月に現代新書から出します。

アマゾン：https://amzn.asia/d/9VTuk9o
楽天他：https://www.hanmoto.com/bd/isbn/9784065384671

それでですね、いっそのことChatGPTに感想を聞いてみたら面白いのではと思ったのですが、

ビデオ（youtube）https://youtu.be/r2-oY4dth14
ビデオ（ニコニコ動画）https://www.nicovideo.jp/watch/sm44383626

驚きのまともな対話が成り立ってしまったのでちょっとここに共有しておきます。

**自分**：「知能とはなにか　人とAIのあいだ」って本を出すんだけどどう思う？

**ChatGPT4o**（以下4o):それは素晴らしいですねAIと人間の知能についての本を書くのはとても興味深いテーマだと思います。特に一般の読者に向けて書かれるならAIの複雑な側面を分かりやすく伝える良い機会になりますね。読者がどんな反応を示すか楽しみですね。

**自分**：この本は来年の1月に講談社現代新書から出るんだ。

**4o**:そうなんですね講談社現代新書からの出版は多くの読者に届くチャンスが広がるでしょう。新年早々興味を持つ多くの方々にとって刺激的な一冊になると思います。出版に向けて準備が順調に進むことを願っています。

**自分**：この本の中で僕はAIは非線形非平衡多自由度系だっていうこと主張しているんだけどどう思いますか？

**4o**:それは非常に興味深い視点だと思います。生成AIを非線形非平衡多自由度系と捉えることでその複雑な動作や予測不能性を強調できます。非線形性は小さな変化が大きな結果を生む可能性を示し非平衡性はシステムが一定のバランス状態にないことを示唆します。さらに多次元性は様々な要因が絡み合って結果を左右することを表していてAIの理解に新たな視点を提供する考え方だと思います。

**自分**：僕が出した結論は脳も生成AIもシミュレーターでやり方が違うだけだってことなんだけどどう思いますか？

**4o**：それは非常に興味深い結論ですね。脳と生成AIの違いをシミュレーターと捉えることで根本的なメカニズムの違いを強調しつつ共通点も示しているように思います。脳は生物学的システムで学習と適用を通じて進化しますが生成AIはアルゴリズムとデータに基づくものです。この視点は両者の違いと共通点を理解するために非常に興味深いアプローチだと思います。

**自分**：人間の脳が現実のシミュレーターだという例として古典力学を挙げました。現実は量子力学だけど古典力学はその現実を解釈するために人間脳が作りあげた仮想現実だという立場で話をしたんだけどどう思いますか？

**4o**:それはとても面白いアナロジーですね。古典力学を現実のシミュレーターとみなすことで人間の脳が複雑な量子世界を理解するために略化されたモデルを作り出しているという考え方は非常に説得力があります。現実の複雑さを理解するために脳がどのように抽象化やモデル化を行っているかを考える上で興味深い視点を提供してくれます。このアプローチは科学的な概念を一般の人々に伝える際にも有効だと思います。

**自分**：この本は売れると思う？

**4o**:とても可能性があると思いますよ。AIと人間の知能に関するテーマは今非常に関心が高まっている分野ですし一般の読者にも興味を持ってもらえる内容だと思います。特に難しい概念を分かりやすく説明することができれば多くの人に読まれる可能性が高いでしょう。発売が楽しみですね。

**自分**：今日はどうもありがとう。


**4o**:こちらこそ話せて楽しかったです。またいつでも話しかけてくださいね。

どうです？なかなかちゃんと会話になっていると思いませんか？
azure-cliをUbuntuにインストール

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

これでインストールできなかったのでメモ。

```
apt upgrade 
apt update
```
をした後

```
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

sudo mkdir -p /etc/apt/keyrings
curl -sLS https://packages.microsoft.com/keys/microsoft.asc |
  gpg --dearmor | sudo tee /etc/apt/keyrings/microsoft.gpg > /dev/null
sudo chmod go+r /etc/apt/keyrings/microsoft.gpg


AZ_DIST=$(lsb_release -cs)
echo "Types: deb
URIs: https://packages.microsoft.com/repos/azure-cli/
Suites: ${AZ_DIST}
Components: main
Architectures: $(dpkg --print-architecture)
Signed-by: /etc/apt/keyrings/microsoft.gpg" | sudo tee /etc/apt/sources.list.d/azure-cli.sources

sudo apt-get update
sudo apt-get install azure-cli
```

でいけました。
技術登壇してよかった

個人アドベントカレンダー2日目です。3日は続けたいので粗めに頑張ります。

というわけで、今年自分の中でも結構大きかったのは技術登壇してよかったって話です。

https://qiita.com/kwtc_/items/dc61d54de1b8df6ec047

登壇後、この記事を書いた後でなんかトレンドにも載せてもらってとてもうれしかったのでとてもモチベーションが上がりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/67179a41-d3c2-7a43-b646-9c8c1829c019.png)

人それぞれ価値観あると思うので無理に登壇しろってのは言わないですが、やっぱり得られるものはとても多かったと思います。

エンジニアとしての成長機会になると思うので、LTとかどんどんやっていければなぁと思っています。

とはいえ、転職して1年近く経って最近業務が忙しすぎるので、どうしたらこういう時間が取れるのかちょっと考えていきたいと思います。（無理やり申し込んでみて逃げれないようにするドリブンが正解なのかもしれない。）
Lispの真実

> この記事は、「K47deのひとりぼっち Advent Calendar 2024」の Day 3 です。

## Lispの真実って？

https://secretgeek.net/lisp_truth

http://www.aoky.net/articles/leon_bambrick/lisp_truth.htm

> In which the truth about lisp is revealed, and some alternatives are enumerated.
Learning lisp will alter your life.
Your brain will grow bigger than you ever thought possible.
You will rewrite all of your applications in just a handful of lines
Society will shun you. You will shun society.
You will become dissatisfied with everything and everyone around you.

> ここにLispの真実が明らかにされ、いくつかの代替が提示される。
Lispを学ぶことはあなたの人生を変える。
あなたの脳はすごく大きくなり、そんなに大きくなるものだとは思わなかったほどになるだろう。
あなたは自分のアプリケーションをすべて、ほんの一握りのコードで書き換えるだろう。
社会はあなたを避けるようになる。あなたも社会を避けるようになる。
あなたは自分のまわりの物やまわりの人すべてに不満を感じるようになる。

この記事を書く理由になった投稿。
この文面白すぎる。声に出して読みたい日本語である。

当方はLispを(実際触ったのはSchemeだが)1年ちょい触ってきた。
始めたときは正直「なんだこの言語は」という感想だったが、最近関数型の素晴らしさに気づいてしまい、(ようやく)LispとElixirの門を叩いたところである。

## Lispのいいところ

https://www.geekpage.jp/blog/?id=2007/8/20

### Lispは神の言語である。
C、C++、Perl、Fortran、Java、COBOL、APLが引き合いに出され、神はこれらの言語を全て知っているが、その上でLispを選んだ、Lispで世界の全てを作った。なぜなら神には締め切りがあって6日間で世界を作らなければならなかったから。

### 一貫したシンプルな記述構造
構造がそもそも単純である
(関数 引数) だけである

Lispのコードはすべてアトムを持つリストであり、データである。
コードとデータに差がなく一緒であるということである。

そのシンプルさが明快な書き心地を提供している。
再帰や自己言及がしやすく書きやすい。

## 学習したツール

Lispの解説記事はたくさんあるのでこの記事では解説しない。
私は以下のサイトで勉強をした。
参考になれば幸いである。

https://lyrical.bugyo.tk/

以上！少しでも興味を持ってくれれば幸いだ。
Juliaコードのシェア方法：最小限版

Juliaで書いたコードを他人とシェアするための最小限の方法について。

Juliaのコードを他の人に渡す際に、インストールしたパッケージが何かとかを知らせる必要があるのかな、とか思うかもしれません。あるいは、パッケージとして登録しないと難しいのかな、とか思うかもしれません。
ここでは、一番シンプルなものと思われる方法を述べます。

# 方法

シェアしたいコードをmain.jlとします。そして、このコードがたとえば
```julia
using CSV
using DataFrames
using LinearAlgebra
```
などを使っているとします。この時、他の人にmain.jlを渡しても、そのまま実行させてしまうとパッケージがないとエラーが起きます。

それを解消するには以下のようにします。
まず、適当にディレクトリを作ります。そして、その中でJuliaのREPLを立ち上げます。次に、]キーを押してパッケージモードにします。そこで、
```
activate .
```
とします。これでパッケージが何も入っていないまっさらなJuliaができます。そのあと、
```
add CSV
add DataFrames
add LinearAlgebra
```
として、main.jlが使うパッケージを全部インストールしましょう。

これによって、作ったディレクトリには、Project.tomlというファイルができているはずです。このファイルが、main.jlを実行するために使ったパッケージを記録してくれます。他の人には、Project.tomlとmain.jlを共有します。

次に、main.jlの一番先頭に、
```julia:main.jl
using Pkg
using Pkg.instantiate()
```
と２行追記しておきます。

# 実行方法
実行するには、Project.tomlとmain.jlが入っているディレクトリの中で、
```
julia --project=. main.jl
```
とします。
これによって、Project.tomlが読み込まれ、```Pkg.instantiate()```によって必要なパッケージが自動的にインストールされます。そして、コードが実行されます。
CDKのことはじめ

株式会社システムアイの川合です

システムアイカレンダーの１日目ということで最近ハマっているCDKについての記事にしようと思います。

https://qiita.com/advent-calendar/2024/systemi24


## CDKとは

CDK (Cloud Development Kit) は、AWSのクラウドインフラストラクチャをコードで定義し、デプロイするためのオープンソースのソフトウェア開発フレームワークです。

https://docs.aws.amazon.com/cdk/v2/guide/home.html

AWSのインフラストラクチャのコード化だとCloudformationがありますが、どちらもAWSのインフラストラクチャをコードで定義し、自動的にプロビジョニングするためのツールです。次のような違いがあります。

* **CloudFormation**: YAMLまたはJSONという専用のフォーマット
* **CDK**: TypeScript、Python、Java、C#など、一般的なプログラミング言語で記述できるツール

またCDKはConstructsによってより抽象度があがって少ないコード量で記述できるので、プロトタイプを構築する時はCDKを使って構築したりしています。

次に僕が最近やっているCDKの始め方を記述していこうと思います。

## インストール方法

一から作成する場合は、最近は [projen](https://github.com/projen/projen) を使って必要なファイル一式を揃えて作り始めています。

https://projen.io/

まず、node.jsをインストールします。インストール方法はなんでもよいですがバージョン管理も含めて"mise"でインストールします。

```bash
mise install node
```

https://mise.jdx.dev/

nodeのインストール後はnpxをつかってprojenを実行しプロジェクト初期ファイルを設置していきます。
なおprojenではyarnを使っているのでyarnも実行しておきます。

```bash
npm install --global yarn
npx projen new awscdk-app-ts
```

少し待つと以下のようなファイル群が生成されています。

![スクリーンショット 2024-12-01 120307.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1425487/47972654-2b84-b801-e4a6-1aedff5ce481.png)

これらは"projen"によって自動生成されたファイルであるため、これらのファイルは直接手で編集しないように注意します。
偏したい場合は"**projenrc.ts**"を変更し、変更後 ```npx projen``` を実行します。

今回は初期状態で用意されているnpmの更新確認用Github Actionsをなくし、dependabotに変更してみます。
.projenrc.tsを以下のように変更します

```typescript
import { awscdk } from 'projen';
const project = new awscdk.AwsCdkTypeScriptApp({
  cdkVersion: '2.1.0',
  defaultReleaseBranch: 'main',
  name: 'cdk-sample-app',
  projenrcTs: true,
  dependabot: true,  

  // deps: [],                /* Runtime dependencies of this module. */
  // description: undefined,  /* The description is just a string that helps people understand the purpose of the package. */
  // devDeps: [],             /* Build dependencies for this module. */
  // packageName: undefined,  /* The "name" in package.json. */
});
project.synth();
```

その後、```npx projen```を実行するとdependabotを使った更新確認に変わります。

```bash
npx projen
```

こんな感じで基本的に設定の変更は.projenrc.tsを触ることになります。

## デプロイについて

ここまでで一回デプロイを試してみましょう
まず、bootstrapを行って準備してから、デプロイします

bootstrap

```
npx cdk bootstrap
```

これでデプロイの準備ができたので、次のコマンドでデプロイします

```
npx projen deploy
```

すると、Cloudformationのスタックが作られデプロイが進みます。
デプロイが完了すると、定義したAWSのリソースが作成されています。
また、失敗した場合はロールバックなどされます。（このあたりはCloudformationの挙動）


## リソースの定義方法

AWSリソースの定義方法ですが詳しい方法は後日記事にするとして、対象のファイルは ```src/``` 配下のコードを編集することでデプロイしたいAWSリソースを定義できます。
次はコードの書き方やよく使うディレクトリ構成について記載しようと思います。

※公開設定間違えていて遅くなってしまいすみません。
ImageJでコマンドラインから画像を開く

## 概要
- ターミナル上で処理した画像（一枚絵やスタック）をImageJで開いて確認することがよくある．流れ作業でやっていると，キーボードからマウスにいちいち持ち替えてD&Dで入力するのが面倒になってきた．   
- そこで，ターミナルでコマンドを打って画像を開く仕組みを作った．   
- これがあると，他の画像処理スクリプトに自動でImageJで開く処理を組み込まることもできるので，使い道が広そう．

## 作ったもの：コマンド化するためのバッチファイルとImageJマクロ
- こちら：https://github.com/xrm-bl/imagej-tools/tree/main/cui-open
- バッチファイルにPATHを通すことでコマンド`ij`で入力できるようになる．
- `ij [file_path]` 画像一枚を開く  
- `ij [dir_path]` 画像スタックを開く
- `ij [dir_path] v` 画像をvirtual stackで開く
- `ij [dir_path] [i] [j]` 指定フォルダ内のi番目からj番目までの画像をスタックで開く
- `ij [dir_path] [i] [j] v` 指定フォルダ内のi番目からj番目までの画像をvirtual stackで開く
- 画像の入力パスは絶対/相対両方OK（のはず）


## 解説
### 基本的な仕組み
- 画像一枚だけ開くのであれば，以下でOK
```
ImageJ.exe C:\hogehoge\hogehoge\image.tif
```
- スタック（ディレクトリ）を指定するには，ImageJマクロを作る．
```open-macro.ijm
run("Image Sequence...", "open=[C:\\hogehoge\\image-dir-path] sort");
// sortはsort names numericallyオプションをオンにするという意味
```
- ImageJをマクロ付きで実行する．
```
ImageJ.exe -macro open-macro.ijm
```
- これで画像がスタック（Image sequence）で開かれる．

### 改良：virtual stackや画像番号の指定
- virtual stackで読み込むときはuseをつける．"use (virtual stack)"
```
run("Image Sequence...", "open=[C:\\hogehoge\\image-dir-path] sort use");
```
- 画像番号はnumber=, starting=, increment=,で指定できる
```
run("Image Sequence...", "open=[C:\\hogehoge\\image-dir-path] number=4 starting=2 increment=1 sort");
```

### 改良：画像のパスを引数にする
- シンプルに入力パスのみを引数にする場合は，以下．
```open-macro2.ijm
input = getArgument();
input = File.getAbsolutePath(input);

run("Image Sequence...", "open=[" + input + "] sort");
```
- パスを引数にして実行すればOK
```
ImageJ.exe -macro open-macro2.ijm C:\hogehoge\image-dir-path
```

### 改良：各種オプションを引数にする
- virtual stackにするかどうか，とか，いろいろオプションをつける（引数を増やす）場合は，工夫が必要．
- 理由①　ImageJ macroは１個しか引数を受け付けてくれない．
- 理由②　ImageJ macroの引数で半角スペースで空いた文字列以降は，別の引数として無視される．
- 理由③　コンマ記号は引数の区切り文字として認識される．(アットマークは区切り文字としては認識されない．)
- 今回は，以下の仕組みとした．
- `ij [dir_path] [i] [j] v`と入力されたら，バッチファイル内で`[dir_path]@[i]@[j]@v`という文字列を作り，ImageJマクロに１個の引数として読み込ませる．
- ImageJマクロ内で引数をアットマークで分割する(`argsArray = split(args, "@");`)．
- 分割した変数をオプションとして使う．
- これに加えて，作ったバッチファイルでは，引数の数に応じて場合分けや入力内容のエラー判定，相対パス→絶対パスへの変換，を行っている．
Orchestratorの「これ使っている？」機能2選

# はじめに
Orchestratorの機能、およびそれらを設定する項目は多岐にわたります。
本記事では、見落とされがちだけどおすすめな機能、「これ使っている？」機能を2つを紹介します。


# レコーディング機能
### 機能概要
ジョブ実行の最後の3分間を動画記録する機能です。

エラーハンドリング例として「エラースクリーンショットを撮影する」ことはあると思いますが、**エラースクリーンショットがエラー発生瞬間を通り過ぎてしまったケース**、ありませんか？

終了3分前からの動画であれば、エラー発生経緯をより詳細に解析可能です。

### 使用方法
プロセスの設定画面の「ジョブの記録」からビデオ記録をOnにするだけ！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1776370/0387ff08-0df7-23c1-5a3b-53593d96118f.png)

記録先はAutomation Cloudであり、自端末の保存容量をひっ迫するなどの問題もないため、私はとりあえず全てOnにしています（過度の保存がAutomation Cloudを重くする可能性は0ではありませんが、今のところその経験はないです）

動画はジョブの三点リーダーから視聴可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1776370/fda824f2-b781-c7fd-e2ea-aeb1f9065de2.png)

動画はログとともに表示され、ログをクリックすると該当時間に移動することも可能です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1776370/56add598-3f53-6402-dbfd-c2136540ff2a.png)

※リアルタイムでUR端末の画面表示＆制御をする「ライブストリーミング機能」も便利そうなのですが（[分かりやすいhidechaさんの記事](https://qiita.com/hidecha/items/1735f412c0cf6f00aaa6)）、[企業のプロキシ設定がある場合は使用できないケース](https://docs.uipath.com/ja/orchestrator/automation-cloud/latest/user-guide/live-streaming-and-remote-control-via-realvnc#security-considerations)があるため、私はレコーディング機能の使用に留まっています。

# クライアントバイナリの自動更新ポリシー
### 機能概要
OrchestratorでStudio/Assistantのバージョンを設定（更新含む）する機能です。

設定したVerより低いStudio/Assistantをインストールしている端末については、インストーラー不要でVerUpが実施されます（グレードダウンはできません、再インストールが必要）。

設定したVerに準拠しているかどうか、Orchestrator側から確認する画面と合わせ、組織のStudio/AssistantのVerを統制することができますね！
下記画面ではVer準拠しているもの、Ver準拠していないもの、ポリシーが設定できていないものが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1776370/bd9cc3bf-4bd6-a977-0646-76a56b2bf727.png)

Automaticon Cloudでは[直近3verのStudio/Assistantとしておくことが推奨](https://docs.uipath.com/ja/overview/other/latest/overview/compatibility-matrix#robot%2C-studio-%26-orchestrator-in-automation-cloud)されており、定期的なVerUpが必要になります。そのVerUp負荷を下げてくれることもあり、設定しておきたい機能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1776370/194a8949-209d-e3fe-220c-22ed3ae101a9.png)


### 使用方法
グループ、もしくは個人ユーザーのアクセス権管理画面で「クライアントバイナリ」から設定可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1776370/89a78ed9-ff4d-eabf-3293-47aaef0c74b6.png)

Unattendedの場合はマシンテンプレート設定画面から。
※更新スケジュールを設定することも可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1776370/653aa57f-cba0-731d-57d6-9cdec2eb6224.png)

VerUpについてはプロンプトが表示され、「今すぐ更新」か「後で」を選択することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1776370/94a3a888-33af-8970-5270-ee7629028671.png)

「後で」を選択しても、一定時間後には自動更新されます（[公式ドキュメント](https://docs.uipath.com/ja/orchestrator/automation-cloud/latest/user-guide/auto-updating-client-components#how-this-works)）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1776370/5c240ce2-ea41-e97f-3e53-c62602f32a19.png)
学生さん必見！情報処理学会ジュニア会員がお得すぎる話

## はじめに
　みなさんこんにちは。突然ですが、情報処理学会のジュニア会員って知ってますか？この記事では、ジュニア会員のどこがお得なのかを解説していきたいと思います。

## ジュニア会員になれる対象者

https://www.ipsj.or.jp/junior/aboutJunior.html

> 小中高校生
> 大学学部３年生以下（科目等履修生は対象外です）
> 高等専門学校専攻科１年生以下
> 短期大学生
> 専門学校生
> ＊以前「正会員」にご入会いただいている方はこの制度をご利用いただけません。

だそうです。

## どこがお得なのか
### 1\. 会費が無料
　これは学生さんにとって非常にうれしいことでしょう。会費が無料なのにもかかわらず、豊富な特典が無料もしくは特別料金で利用できます。
### 2\. 豊富な特典
　ジュニア会員の特典を調べてみました。
* 学会誌が無料で読める
* 電子図書館の論文が有料のものでも、ジュニア会員なら無料で読める
* 学会のイベントにお得に参加できる
* すべての研究発表会へ原則無料で参加できる
* 論文掲載料が申請すれば免除される
* 各種優待サービス（ホテル・レンタカー・パック旅行など）を利用できる
* 「先生，質問です！」のコーナーに質問を投稿できる
* 学生支援プログラム（Azure for Students）を利用できる

　これらの特典の中で特にうれしいと思ったのは「学生支援プログラム（Azure for Students）」です。

#### 学生支援プログラム（Azure for Students）とは

https://www.ipsj.or.jp/member/service-gaku-mds.html

https://learn.microsoft.com/ja-jp/azure/education-hub/about-azure-for-students

> Microsoft Azure for Students は、高等教育機関の学生にさまざまな Azure クラウド サービスとリソースへのアクセスを提供する Microsoft プログラムです。

というサービスらしいです。


　なぜ、この特典がうれしいのかというと無料のソフトウェアカタログを利用することできるからです。
![無料のソフトウェアカタログ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/a6c89a02-4bf6-ec0b-19c6-e6768a3a1866.png)
![無料のソフトウェアカタログ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/956dcd19-6d61-9455-ab49-0a3f851dcff4.png)
　中には、Windows Serverなどの有料のMicrosoft製品もあり、それらを無料で利用することができます。最新のWindows Server 2025も利用できます。

　また、学校のメールアドレスで登録しなければいけないかもしれません。私の場合、個人的に使っているメールアドレスだと登録できませんでした。



## 申し込み方法
　[こちら](https://www.ipsj.or.jp/junior/aboutJunior.html "ジュニア会員のメリットと入会方法")のページ内の「入会申請(仮申請)をする」または「会員登録」ボタンをクリックします。表示されたページの指示に従って必要事項を入力してください。審査完了後、登録時のメールにて入会手続きが完了した旨のメールが届きます。

## おわりに
　皆さんも、情報処理学会のジュニア会員になって豊富な特典を利用しましょう。最後に述べておきますが、別に私は情報処理学会の回し者ではないですよ。
転職して1年を振り返る

既に走り切れる気がしませんが、とりあえず25日間キャリア面も技術面でも自分語りを自己満足のように振り返るアドベントカレンダーにしていこうと思い、まずは1日目の記事を執筆します。
一日目はIT業界から飛び出して製造業へ転職したこの一年を適当に振り返ります。

## ざっくり書くこと、書かないこと
・書くこと
　学びになったことや広げていきたい知見。
　
・書かないこと
　会社や業務の良くないこと。（これはお酒の場で話しようと思うので誘ってください。）

## 学びになったこと
・普通にレベルが高い
事業会社で主語をくくってしまうと今自分が参画しているプロジェクトしか見れてないのであれですが、ITの会社じゃないのにレベルが高いと思いました。
全体的にシステム工学や技術的な知見が高く、マイクロサービスアーキテクチャをベースに設計できていたり、アジャイル開発の採用など、SIer時代に取り組んでみたいなと思っていたことに取り組んでいて事業会社ってこんなレベル高かったのかといい意味で驚きが多かった一年でした。


・発注作業や稟議対応なども開発担当者が全部自分たちで対応する
自分がこれまでやってこなかっただけかもしれませんが、見積もりを取ったり工数精査してお金に換算したりするところまではやってきたものの、発注も稟議もすべて開発部門の担当者が自分でやるのが新しい学びでした。
SIer時代は開発部門以外にも開発企画部門がいて、お金に関する資料を整理した後は発注業務などすべて企画部門や営業部門に丸投げしていたので、結構開発業務に注力できていたなぁと振り返って思いました。稟議資料の説明とかも資料作成までは対応していたものの、説明は企画部門や営業や管理職がやってたので、この辺も結構管理職が巻き取ってくれていたんだなぁと改めて思いました。（他の部署はもしかしたら担当レベルで稟議やってたのかもですが。）
今は自分たちで見積もりを取ったり開発工数から金額をはじき出した後で、SAP Aribaの申請や開発における稟議資料の説明なども自分で実施するので、ビジネスの進め方や会社ってこうやって動いてるんだというのを学べたのは社会人としてよかったと思っています。こういう開発に関係ない手間なことって絶対経験しておくべきだなと思いました。

・特許調査や外為法について意識しないといけない
今参画しているプロジェクトがグローバルとのやり取りも多いことや、そもそも商品開発を行っていることもあり、特許に抵触していないかや、キャッチオール規制に引っかかっていないか等の開発スキル以外の知見が必要になることもとても大きな学びでした。
このあたりもこれまで営業部門と法務部門が対応していた気がするので、現場レベルでこういう内容を意識しないといけない経験も新鮮だなと思いました。


・インフラだけのエンジニアって求められてない感
もちろんインフラエンジニアとしてのスキルは大切ですが、やはり商品やプロダクトを産み出していかに会社を成長させていくかが大事になるので、求められているスキルがプロジェクト管理や業務要件の設計、アプリ開発とトータルして求められているなと強く感じました。
一応、これまでのキャリアとしてアプリ開発もしてきましたが、基本的にインフラとプロマネがメインのキャリアなのでなかなかフルスタック的な動きが難しいなと感じる一年でした（というか業務知識のキャッチアップが難しくて無理、、、）。とはいえ、事業会社で求められるのってこういうところなんだろうなと思っているので、より知見を広げていきたいなと思っているところです。


## さいごに
ざっくりでも1年振り返ってみて、しんどいことも多かったですが色々学びが多かったなという一年になりそうです。
あと1か月頑張って走り抜けつつ、25日頑張ってブログ書いていこうとおもいます。（続いたらいいな。）
Pixela StationTVでWindows Script Hostエラー

## エラーの内容
インストールはできるがエラーを引き起こす？？？？

![1687049590826-suRFumJOmQ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895176/6d90a3c2-6ab2-b195-297b-c421d29022d7.png)
<br>

`ConfigFileEditor.vds`の中身はレジストリを読み書きしているらしい．

OKを押すと一応インストールは終わるので、StationTVを起動しようとすると、録画管理ツールへと誘導され、復元開始をするとエラーを起こし落ちる。また録画情報の初期化をするとコンポーネントエラーを吐く。

![1687049776619-QejKv4rvFP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895176/808df7b2-9877-5a37-9413-d7faa243a6d5.png)

## 結論と結果
自分の場合は、Windows Management Instrumentation (WMI) のエラーか、破損。修復したらソフトウェアインストールもできるようになった。

windows の設定でなぜかプロセッサー名が出てこなかったので、プロセッサー名を表示するためにエラーを解消する手を探していた。

## OS
OS : Windows 10 Pro 21H1

## 手順
### 爆速版
1. WMIサービスの停止
2. リポジトリの再構築
3. 再起動
4. msinfo32で状態確認

### 詳細版
1.WMIのサービス停止

参考サイトのように、コマンドプロンプトからではWMIが停止できなかった。
そのような場合、管理ツール/サービスからWMIを停止させる。
自分の場合、「停止」をクリックしても拒否されできなかったため、「一時停止」をしてから「停止」をする。

cmdから
```
net stop winmgmt
```
止まっていることが確認できた。

<br>

2.リポジトリの手動再構築

リポジトリの再構築を行うため、まずは `C:\Windows\System32\wbem\Repository` の内容をバックアップしておく。
次に、参考サイトでリポジトリ手動再構築を行うバッチファイルが配布されているので実行する。



## 参考リンク

https://evangelist-st.com/?p=2573

### StationTVのアンインストール

https://teihenchannel.hatenablog.com/entry/%E3%83%94%E3%82%AF%E3%82%BB%E3%83%A9%E3%81%AEXit%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E6%97%A7%E5%9E%8B%E3%81%AEPC%E7%94%A8TV%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%BC_PIX-DT460_%E3%81%A7%E4%BD%BF
【転職組】基本情報技術者試験

合格したので書いておきます。

# 背景
会社からの要望です。
面接の際に必ず受験するように言われました。
IT業界から離れており、なんの資格のことかも分からなかったけど、半年以内に取りますと宣言。
面接の帰りに問題集を買ったけど、まったく何も理解できず絶望。
そこから２ヶ月必死で努力して、結果的に合格できたので安心しました。

# やったこと
### 栢木先生の基本情報技術者教室
評判よかったので選びました。
会社ではJavaとかVBAを勉強しないといけなかったので、この本を片手にカフェ通いして勉強しました。
効率わるいけど、紙とペンでコツコツやっていました。
簡単な四則演算もやり方忘れていたので、人に聞くのが恥ずかしくて、スマホでChatGPTに聞いていました。
ドリルのほうはほとんどやりませんでした。

### 出るとこだけ!基本情報技術者科目B
この本で午後問題のコードトレースと、セキュリティについて学びました。
ざっと１周しただけなので、本番でコードトレースに苦戦してギリギリ合格でした。
しっかりとやったほうがいいです。

### 過去問道場
会社で出された課題終わらせてから、空き時間に進めました。
自分の場合は勉強時間を確保できたので、時間はかりながら１０週以上回しました。
何度もやると問題と回答を覚えてしまいますが、そこは仕方ないかなと思います。
B問題は内容がだいぶ変わっていたので、ほとんど解きませんでした。

# 大変だったこと
計算問題が多いので、前述のように四則演算すら忘れてしまっていた自分には、とても大変でした。
勉強の甲斐もあり、試験当日は面白いようにすらすら解けました。

# よかったこと
まず会社で褒めてもらえました。合格率４割ということで、比較的簡単な試験だと思いますが、約束してすぐに取ってきたということで評価されました（笑）
今までウェブサイトは作れるけど、ネットワークのことは良く分からないという中途半端なエンジニアでしたので、そういった部分の知識が身についたのはとてもよかったと思います。
貧欲法の簡単な概要について

# 内容
　各状況における最適解を求める手法. 
各探索において獲得価値が最大となるように最適化を行う構造の問題において有用な探索設計技法. 注意点は問題の解くための構造にある.　各探索で局所的な解を求める，あるスパンでの最適解などではないという点である. 　
# 結論
 各探索において最大となる解を求める設計法.  探索範囲を絞る際に貧欲法である程度探索範囲を絞るなどの行為が可能となりそう.
# 注意点
- 探索は局所的
- 探索時の最適でしかない
スミレ畑の遊び方と解説

# TL;DR
- [「スミレ畑」](https://sum.irelang.jp/play/)はPWAの日本語プログラミング言語のインタプリタ実行環境です
- スミレ畑はプロデルと同じ文法,言語仕様です
- スミレ畑は標準入出力と、タートルグラフィックスでの図形描画ができます
- シンタックスハイライトやプログラム掲示板と連携したプログラム共有機能を持っています

# 日本語プログラミング言語実行環境「スミレ畑」

スミレ畑は、日本語プログラミング言語「スミレ」のプログラムを実行できるPWA(プログレッシブウェブアプリ)です。
日本語で記述したプログラムを実行できます。

https://sum.irelang.jp/play/

スミレは.NET 6.0以降(旧.NET Coreと呼ばれていたもの)で動作するプロデル互換の日本語プログラミング言語です。文法や言語仕様はプロデルと同一です。プロデルと異なる点はライブラリと実行環境です。

# 使い方

画面の説明など使い方は、公式サイトに記載しています。
https://sum.irelang.jp/sumirebatake/

## サンプルを実行する

単にプログラム例や動作に興味がある方は、サンプルを選択して開くことができます。画面下部の「プログラム置き場」には、サンプルコードが用意されています。
プログラムに選択したサンプルが読み込まれるので[実行する]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101225/fff6f476-17ba-6f35-f084-037cf3a979f2.png)


## ダイアログによる入出力
Webブラウザの汎用ダイアログを利用して、文字列を入力したり、メッセージダイアログを表示するプログラムです。

```
「お名前は」と聞いて名前とする
「[名前]さん、こんにちは！」と表示する
```

## コンソールの入出力
スミレ畑の標準入力は、画面右側の「コンソール」タブと「入力」タブを使います。
出力結果は「コンソール」タブのテキストボックスに追記され
「入力」タブには、プログラムへ入力する内容をテキストで指定できます。
```
繰り返す
　　コンソールから受け取って内容とする
　　内容が空なら繰り返しを抜け出す
　　内容を出力する
そして
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101225/3f17ba10-841d-554a-5983-ccbfd8104dd1.png)


## カメ(タートルグラフィックス)で図形を描画する

「キャンバス」タブには、図形の描画結果が表示されます。
キャンバスにはカメを使ってタートルグラフィックスによるカメの軌跡で図形を描画できます。キャンバス上で「カメ」種類のオブジェクトを作ると、カメを操作して図形を描けます。
カメを使ったサンプルは、複数用意されていますので、プログラム例はそちらをご覧ください。

```
キャンバスにカメを作って、かめさんとする
かめさんの位置は{200,150}
かめさんの線色は「緑色」
4回繰り返す
	かめさんを100だけ進める
	かめさんを90度回転する
そして
```

## キャンバスを使う

座標系で位置と大きさを指定して図形を描く場合には、キャンバスに直接用意された描画手順を使います。

```
キャンバスに「スミレ畑」という文字を書く
	その位置は{100,100}
	その背景色は「紫」
	そのフォントは「36pt sanserif」

キャンバスに四角形を描く
	その大きさは{100,100}
	その位置は{150,150}
	その線色は「黄緑」
	その背景色は「緑」

キャンバスを更新する
```

# 仕様
スミレ畑は、Blazor WebAssemblyという技術を使っています。この技術を使うことでC#のコードをWebブラウザ内部で実行できます。Webブラウザであれば、PC以外のスマホやタブレット、Windows以外のOSでも同じように実行できます。

スミレ畑はプロデルのパーサと実行環境のコードを移植して実装していますので、プロデルの文法や実行環境をほぼそのまま移植でき、実質上Windows専用だったプロデルのプログラムを、様々な環境で実行できるのが特徴です。

スミレ畑はインタプリタの実行環境です。JavaScriptで同等のコードを書いた場合や、WebAssemblyにコンパイルされたバイナリと比べると、実行速度は劣ります。

AtCoderなどのプログラミングコンテストのテスト環境としては速度面が弱点ですが、それなりに使用できる速度で動作しますので、学習向けにアルゴリズムを実装して試すなどの用途では十分使えます。

# 便利な使い方(?)

## シンタックスハイライトが使える
[検証]ボタンをクリックすると、プログラムが解析されて、プログラムの字句が色分けされます。
色分けされたプログラムを書式も含めてコピーされるため、リッチテキストに対応したエディタで色分けされたコードを貼り付けたいときに便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101225/4ecc786b-05cf-9b0f-4d57-89503649b4ba.png)


## プログラム掲示板と連携したプログラム共有
アカウント登録が必要ですが、プロデルのプログラム掲示板と連携しています。
投稿時に、分類を「スミレ畑」としてプログラムを投稿すると、そのプログラムをそのままスミレ畑で開くことができます。投稿を非公開にして、投稿URLをブログやSNSなどで共有することもできます。

https://produ.irelang.jp/bbs/progbbs/forump.php?theme=%E3%82%B9%E3%83%9F%E3%83%AC%E7%95%91

https://produ.irelang.jp/bbs/progbbs/forump.php?mode=view&id=13

# サポートされていない機能
## イベント手順全般
現時点では「待機」手順がないため、キー入力やマウス入力を受け付ける手段がありません。スミレの実行環境の実装とBlazor WebAssemblyの仕様とがかみ合っていない部分があり、スミレの実行環境を見直すことで実現したいと思っています。

# 今後について
Webブラウザで気軽に日本語プログラミング言語を体験できるアプリは、大切だと思っています。現状は実験段階や試行錯誤をしている段階で多少遊べる程度ですが、ゲームなどちょっとしたプログラムが実行できるアプリとして機能拡充したいと思っています。
スプレッドシートで競プロの問題を管理したい

# はじめに

こんにちは、tardigradeです。普段は競技プログラミングや組合せ最適化などをしています。

タイトルの通り、本記事では競プロ問題管理シートを作っていこうと思います。

先輩がスプシで問題管理をしていて、かなり便利そうだったので真似したくなりました。

具体的な用途としては、解説ACした問題や解けなかった問題、印象に残った問題を記録することを想定しています。

ちなみにスプシを触った経験はほとんどないです。ChatGPT先生と二人三脚でやっていきます。

# 管理したいもの

- 問題名	
- コンテスト
    - A〇C、div〇、ICPC、JOI、etc.	
- 問題リンク
- 体感難易度
    - AtCoder Ploblemsのdifficultyに合わせてつけるのが丸そう
- ジャンル
    - 複数個のタグをつけたい
- ステータス	
    - AC、解説AC、WA、No Sub、etc.
- コメント	
    - 問題の特徴を一言で書いてもいいし、Scrapboxのリンクを貼ってそっちにがっつり考察とかを書くのもあり
- 日付
    - その問題に触れた最後の日付を書いておくのがいいかな

# 最低限

Google Driveにアクセスして「新規」から「Googleスプレッドシート」を選択。

とりあえず一番上の行に管理したいものを入れてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570491/cecb43f7-d21e-d3bc-168e-557708338ccb.png)

あとはこの下に情報を追加していけば最低限の運用はできますね、ヨシ！

## 見た目をいい感じに

このまま終わったら流石に記事として薄すぎるので、もう少し続けます。

機能面も気になりますが、一旦見た目がしょぼすぎるのでこれを何とかしたいです。

## ヘッダーを見やすく

一行目のセルを選択して「表示形式」から「交互の背景書式」を選択。「ヘッダー」にチェックをつけて好きな色を選ぶ。

同じく「表示形式」から「テキスト」、「太文字」を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570491/c95b6228-149e-19a9-4e3d-d0f085b64994.png)

おー、なんかスプシっぽい。

仮データを入れて、列幅を調整します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570491/0c947da9-8128-d385-2244-76aff2526549.png)

うん、いい感じ。

# 難易度に合わせて色を付ける

体感難易度の列（D列）を選択し、「表示形式」から「条件付き書式」をクリック。

「セルの書式の条件」で「次の間にある」を選択し、数値を入力。色を選ぶ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570491/36774948-71d9-db5d-340d-afea5a25514f.png)

# 機能面を改善

## プルダウンで選択できるようにする

コンテスト、体感難易度、ステータスはプルダウンで選択できた方が便利そうですよね。

コンテストの列（B列）を選択し、「データ」から「データの入力規則」をクリック。

「ルールを追加」をクリックして、条件として「プルダウン」を選択。アイテムを追加します。

範囲に一行目が含まれて欲しくないので、「'問題管理シート'!B2:B1000」としました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570491/57a423ef-2943-c59a-40c2-50849e824ee6.png)

（なんかめっちゃ下に伸びてるな…）

同様に、ジャンル、ステータスの列も設定します。ジャンルは「複数選択できるようにする」にチェックをつけました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570491/ced838e1-9d36-5583-2b73-d2a6ec878b16.png)

ちょっとガチャガチャしすぎな気もするけど…まぁいいか。

## 日付セルにカレンダーを設定する

日付もカレンダーから選択したいですよね。

日付の列（H列）を選択し、「データ」から「データの入力規則」をクリック。

「ルールを追加」をクリックして、条件として「有効な日付」を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570491/9cf1abfd-28be-f39b-2ecf-690a132f67d3.png)

# おわり

見た目が悪かったので入力形式の範囲を設定し直しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570491/66a7167e-699a-2b26-5ad1-c89bcefaa1a7.png)

実用上は範囲を十分大きくとったほうが使いやすいと思いますし、僕もあとで戻すと思います。

本当は自動化出来たら一番良かったんですけどね…ChatGPTにスクリプトを書かせたら、これまでに行った設定をいくつか破壊されてしまい、直し方がわからなかったので一から全部作り直しました。

~~萎えたので~~スプシ初心者でも簡単に調整できることは一通り終えたような気がするので、ここで記事を終わりにしたいと思います。

他に追加すると便利なものがあれば、コメント等で教えていただけると嬉しいです。

最後まで読んでいただき、ありがとうございました。
【Java】配列の初期化

## 初めに
配列の初期化にはいくつかルールがあり、非常に間違えやすい。まとめたので、1つ1つ理解していこう。

## 配列の宣言
[]はデータ型の後でも変数名の後でもどちらでもok。この時[]の中身は何も書かない。

```
int[] array1;
int array2[];
```

## 配列のサイズの指定
以下では1次元配列に3つの要素を入れる箱を作っている。この時、new側の[]に要素数を入れるのが必須。忘れるとエラーになるので注意。

```
int[] array1;
array1 = new int[3];

int[] array2 = new int[3];

int[][] array3 = new int[2][];

int[] array4[] = new int[2][]
```

### NG集
```
int[] array1 = new int[]; //要素数が未指定
int[][] array2 = new int[2]; //宣言した配列と配列のサイズがずれている
```

## 配列の初期化
```
int[] array1;
array1 = new int[3];
array1[0] = 1;
array1[1] = 3;
array1[2] = 3;

int[] array2 = new int[2]{1,2,3};

int[][] array3 = new int[][]{}; //{}は空でも良い

int[] array4 = {1,2,3};

```

### NG集
```
int[] array1 = new int[2]{} //配列初期子がある場合、[]の要素数は記載できない

int[] array2 = new int[3];
array2 = {1,2,3} //配列初期子はnew int[]を使う初期化の時のみ使用可能
```

## クラスを配列で扱う時の注意点
```ruby:Java(A.java)
public class A{
	public int a;
}
```

```ruby:Java(Main.java)
public class Main {
	public static void main(String[] args) {
		A[] arrayA = new A[2];
		for(A array : arrayA) {
			System.out.println(array.a);
		}
	}
}
```

結果
```
Exception in thread "main" java.lang.NullPointerException: Cannot read field "a" because "array" is null
	at Main.main(Main.java:5)
```

ここで注意すべきなのは配列を宣言・サイズを指定したのみで、配列に含まれるクラスをインスタンス化していないということだ。そのため、インスタンス変数は初期化されずnullの状態でfor文に使われようとしたため例外が発生している。
もしインスタンス変数を初期化した状態で配列にしたければ、配列の初期化時にインスタンス化しておくと良い。なおこれはインスタンス変数のみでクラス変数(static変数)はインスタンス化しなくても使えるので、上記のソースで問題無く呼び出せる。

```ruby:Java(Main.java)
public class Main {
	public static void main(String[] args) {
		A[] arrayA = new A[] {new A(),new A()};//修正
		for(A array : arrayA) {
			System.out.println(array.a);
		}
	}
}
```

結果
```
0
0
```

## 配列の型について
以下の問題を考えてみよう。
```ruby:Java(Sample.java)
public class Sample{
	public void test(Object[] val) {
		System.out.println("Object[]");
	}
	public void test(Object val) {
		System.out.println("Object");
	}
}
```
```ruby:Java(Main.java)
public class Main {
	public static void main(String[] args) {
		new Sample().test(new int[3]);
	}
}
```

結果
```
Object
```

これはnew int[3]がObject型としてとらえられていることを意味する。今回完全一致する引数はないが、そのメソッドを呼び出しているコードがコンパイルで型変換され、対応するメソッドで呼び出すようになる。この時**配列はObjectクラスのサブクラス**であることを覚えておくこと。一方Object型の配列は参照の集合を扱う配列のため、new int[3]のような値の集合を扱う配列とは異なる型になる。

## String型配列とint型配列の初期値
```ruby:Java(Main.java)
public class Main {
	public static void main(String[] args) {
		int[] nums = new int[3];
		String[] strs = new String[3];
		
		for(int num : nums) {
			System.out.println(num);
		}
		
		for(String str : strs) {
			System.out.println(str);
		}
	}
}
```

結果
```
0
0
0
null
null
null
```

上記を実施するとString型配列の要素の初期値はnull、int型配列の要素の初期値は0となる。

## まとめ
* 配列の宣言は[]を使う
* 配列のサイズの指定はnew側の[]に要素数を入れる
* 配列の初期化では配列初期子{}を使う。なお、配列初期子がある場合、[]の要素数は記載できない。また、配列初期子はnew int[]を使う時のみ使用可
* クラスを配列に含める場合、インスタンスの初期化も忘れずに
* 配列はObjectクラスのサブクラスに含まれる
* String型配列の初期値はnull、int型配列の初期値は0
dbt のfor文でkey,val をぐるぐるするサンプルと、n回繰り返すサンプル

- 1つのテーブルにkeyとvalが複数あって、それを縦に並べたいときがあるので、組み合わせを定義しといて、あとはunionで繋げるときのサンプル。

```sql
{% set dict = 
    {'column_key_1': 'column_val_1', 
     'column_key_2': 'column_val_2'} 
%}

select 
    0 AS column_key,
    'test' AS column_val

{% for key, val in dict.items() %}
    union
    select 
        {{ key }} AS column_key,
        {{ val }} AS column_val,
    from {{ ref('hoge_table') }} 
{% endfor %}

```


- n回繰り返すサンプル
(YYYY-MMを現在の日時から5回遡っていくサンプル)
```sql
select TO_CHAR(current_date(),'YYYY-MM') AS yyyymm
{% for i in range(-1,-5,-1) %}
union
select TO_CHAR(DATEADD(MONTH, {{i}} ,current_date()),'YYYY-MM') AS yyyymm
{% endfor %}

```
指定した文字列でコードを縦に揃えるツール(日本語対応)

## 使い方
区切り文字の部分に縦に揃えたい文字を入力します。初期値で「,」が入っています。
大きいテキストボックスにコードを入れて「コード整形ボタン」をおす。
「コードをコピー」ボタンでコピー。あとはそのまま使うだけ！

<p class="codepen" data-height="700" data-default-tab="result" data-slug-hash="yyByoRB" data-pen-title="指定した文字で縦に揃える" data-user="8787kazuye" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/8787kazuye/pen/yyByoRB">
  指定した文字で縦に揃える</a> by ken1math (<a href="https://codepen.io/8787kazuye">@8787kazuye</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

## 動機
Visal Studio の縦揃えが、日本語が混ざるとうまくいかなかったのでつくりました。私が知らないだけでちゃんとできるのかな？

便利なのでぜひ使ってください。
なにとぞ！