OmniAICreator/Qiita-1.07M huggingface dataset:
ファイルレイアウト変更時の CRTPF と CHGPF の使い分け

## はじめに

一度作成したデータベースの仕様を変更（DDS のリコンパイル）する際、`CRTPF`か`CHGPF`を使用することが多いかと思います。

この記事では、`CRTPF`と`CHGPF`の 2 つのコマンドの違いをまとめました。


## `CRTPF`と`CHGPF`の比較表

| 変更時の状況       | CRTPF                 | CHGPF                             |
| ------------------ | --------------------- | --------------------------------- |
| データ登録有り     | ×（消去）             | ○                                 |
| 論理ファイル有り   | ×（リコンパイル不可） | ○                                 |
| データタイプの変更 | ○                     | ×（リコンパイル不可）             |
| フィールド数の増加 | ○                     | ○                                 |
| フィールド数の減少 | ○                     | △（プログラムメッセージ出力有り） |
| フィールド長の増加 | ○                     | ○                                 |
| フィールド長の減少 | ○                     | △（プログラムメッセージ出力有り） |


## おわりに

役割として`CRTPF`：物理ファイル作成、`CHGPF`：物理ファイル変更ですので、一度作成したデータベースの仕様を変更する際は`CHGPF`がより適しているかと思います。
しかし、データタイプの変更等場合によっては`CRTPF`を使用することが必要になります。

参考になれば幸いです。最後までお読み頂きありがとうございます。
Docker×Ruby on Rails環境でデバックを行う

# はじめに
Dockerを使ってRuby on Railsの環境構築をした際に、デバックの仕方に困ったので、そのメモ書きになります。
今回はpry-railsを使ってのデバックです。

# Gemfile
Gemfileに以下を追記します
```
group :development, :test do
  gem 'pry-rails'　★追加
end
```
pry-railsがインストールされるようにします。

# docker-compose.yml

Gemfileに以下を追記します
```
app:
  tty: true　★追加
  stdin_open: true　★追加
```
これはdocker runコマンドの -it オプションと同じで、
dockerでの操作結果等がコンソールに出力されるようにする設定です。

# binding.pryの記述
デバックしたいRubyのソースに下記を追記してください。
```
binding.pry
```

# Dockerイメージを再構築
これまでの変更があるので、イメージを再構築します。
```
docker-compose build --no-cache
```

# Dockerを立ち上げ
```
docker-compose up
```

# Railsサーバーにアタッチ
docker attach でRailsサーバーにアタッチします。
```
docker attach コンテナ名又はコンテナID
```
　
以上で、binding.pryの部分で処理が止まるようになっているはずです。
ABC277回答メモ

0.はじめに
　ビギナーとは・・・。。
　と、なるくらいＣ以降の難易度が高く感じました。
　まぁ私のレベルが低いのかもですが。

1.A - ^{-1}
　リストを配列に入れて、頭からチェックでAC頂けました。

　https://atcoder.jp/contests/abc277/submissions/36409527

2.B - Playing Cards Validation
　【考え方】
　　(1)1文字目OK文字の辞書dict1を用意
　　(2)2文字目OK文字の辞書dict2を用意
　　(3)重複がないかをチェックする辞書dictinを用意
　　(4)SiをN回読み込んでいく
　　　(4-1)Siの一文字目がdict1にあるかチェック
　　　　　　→なかったら"No"を出力しプログラム終了
　　　(4-2)Siの２文字目がdict1にあるかチェック
　　　　　　→なかったら"No"を出力しプログラム終了
　　　(4-3)Siがdictinにあるかチェック
　　　　　　→あったら"No"を出力しプログラム終了
　　　　　　→なかったらdictinにSiを登録
　　(5)Siのチェックがすべて通ったら"Yes"を出力しプログラム終了


　解説をみたら正規表現等使うスマートな回答がありましたが
　まぁ、辞書使うのでもいいかなと思いました。

　https://atcoder.jp/contests/abc277/submissions/36417441

3.C - Ladder Takahashi
　初見DPかなと思いましたが、戻るケースもあるなと思うと
　DP初心者には難しいとあきらめモードでした。
　まぁ、よくみると木の探索系であると気づき
　とにかくやってみようと始めました。

　【考え方１】
　　(1)全フロアごとにどのフロアへの階段があるかの配列を持つ表Lを作り初期化
　　(2)全フロアごとにそのフロアのチェックが終わったかの表Pをつくり初期化
　　(3)以下再帰関数chkF(引数nm)を定義
　　　(3-1)表Lのインデックスnmの表を順に読み込む
　　　　(3-1-1)読み込んだ値：iがチェック済みかをチェック
　　　　　(3-1-2)チェック済みでない場合
　　　　　　→表Pのiをチェック済みに変更
　　　　　　→chkFを引数iで呼び出し
　　-以下メインルーチン-
　　(4)A,Bを読み込み、表Lに格納していく
　　(5)引数に1をセットしchkFを呼び出し
　　(6)表P内でチェック済みとなっている一番大きいフロアを表示して終了

　実装して実行したところ、表Lの定義時にメモリーエラー・・・。
　さすがに、10の9乗の配列をもつ表はきつかったか・・・と方針変更。

　配列を辞書にすれば、大体何とかなるので辞書を採用

　【考え方２】
　　(1)フロアをキーに、どのフロアへの階段があるかの配列を値に持つ辞書Lを作り初期化
　　(2)チェック済みのフロアをキーに登録する、フロアチェック済み保持辞書Pをつくり初期化
　　(3)以下再帰関数chkF(引数nm)を定義
　　　(3-1)辞書Lのキーnmの値配列を順に読み込む
　　　　(3-1-1)読み込んだ値：iがP表示あるか(チェック済みか)をチェック
　　　　　(3-1-2)チェック済みでない場合
　　　　　　→表Pにiを登録
　　　　　　→chkFを引数iで呼び出し
　　-以下メインルーチン-
　　(4)A,Bを読み込み、表Lに格納していく
　　(5)引数に1をセットしchkFを呼び出し
　　(6)表PのMAXキーを表示

　例題は難なくACが出たので、提出したところ、半分RE。
　いろいろ試したけど分からないので、諦める・・・

　と、思いましたが実装内容からREになるケースは再帰上限オーバーだな・・・と推察。
　再帰上限オーバーのなんか素晴らしい回避策ロジックがないかをぐぐる。
　
　いいロジックはなかったけど、再帰上限パラメータを書き換えることができることが分かる。

```
import sys
import resource
sys.setrecursionlimit(200000)
```

　Atcoderでは認められないだろうな・・・・と思いつつ
　テストケースで試すと通った・・・。

　そのまま提出するとみごとAC。　
　何か反則っぽいけどまぁ良しとしました・・・。


　https://atcoder.jp/contests/abc277/submissions/36448092
【JavaScript】配列内の連想配列の特定のキーの値の存在確認

他に良い方法がありましたらご教示いただけますと幸いです。

```javascript
const array = [{id:1},{id:2},{id:3}]
const check = (key,val) => array.find(obj => obj[key] === val) 

check("id",1)
>{id: 1}

check("id",4)
>undefined
```
３年間英語でアウトプットしたら

ちょうど3年前の2019年の12月にたまたま、とある海外のブログ用プラットフォームに英語で記事を書いてこうなったよみんなも書こうよーという記事です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30943/5c66f069-d074-d65a-bbe0-110be5958077.png)

これは今年の11月末のスクリーンショットですが記事を150本ほど書いて180万人程に見られて約35万に読まれました。三千人以上のフォロワーもできました。150本も書いたらもっと閲覧数が多い人もたくさんいますがこんなもんでしょー。

## 自分のブログを作るのめんどくさかった

最初の記事は仕事で使っていたアプリをこんな風に使えるよーというたわいも無い記事でしたが自分のブログを作るのもめんどくさいので海外のブログに載せたところPublicationの一つから連絡があり私たちのPublicationに書かないかと誘いがありました。えっ何それ？と色々と調べてみると自分でも学んだことを発信できるのではという気になり徐々に記事を書きました。今年は病気の事もあり6ヶ月ほど書くことができませんでしたが今でも毎月6万以上の人に見てもらっています。

## 英語で書けば10倍以上の人に見てもらえるチャンスがある

英語を話す人口は約15億人、日本語を話す人口の10倍以上です。ヨーロッパのプログラマーの共通語は英語ですので実際のオーディエンスはもっといると思います。日本で100人に読んでもらえた記事なら千人以上に見てもらえる可能性が高いです。

## 英語は得意じゃないけどどうすればいいの
という質問があると思い以下に気づいたTipsをいくつかあげておきます。

### 記事は英語は小学6年生用に書く

小学6年生といってもネイティヴの6年生ですが文法的には日本の高校生のグラマーがあれば大丈夫。最近はAIのアプリも出て大変便利になっています。以下のリストは役に立つと思いますので使ってみてください。

一番大切なのは英語のインプットを毎日行うことです。聞いたことですが人間はインプットの100分の1しかアウトプットできないのでインプットを多くすれば自然とアウトプットが多くなるよーとの事です。

[Hemingwayapp](https://hemingwayapp.com/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30943/caebbef0-a6f8-d02c-9ce5-74f3ae428cb2.png)で英語が何年生用か分かります。

### ChatGPT

[https://chat.openai.com/chat](https://chat.openai.com/chat)を使えば翻訳もGoogle Translateよりもずっとましです。

### AIアプリ
[rytr](https://rytr.me/)と[wordturne](https://www.wordtune.com/)などのアプリはあなたの英語をもっとかっこいい言い方に変えてくれます。でも何がかっこいいかを解るためにはやはり英語のインプットを多くしましょう。ブラウザー用のエクステンションもありますのでインストールしておくと便利です。

### Gramally extension
言わずと知れたGrammarlyです。ブラウザー用のエクステンションもありますのでインストールしておきましょう。

## 心得は

オリジナルの記事を書く。
自分で調べる。
子供に説明するように書く。
自分のために書けば誰かのためにもなると思い書く。
[とにかく書く!](https://blog.codewithshin.com/welcome-to-my-medium-page-344e7eddb5a0)なんでも書く!の意気込みで。


## 全てが受けるわけではない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30943/48a0419f-7d51-db58-c4f9-cebd697df62f.png)
これは私のトップ５の記事です。閲覧数が10万以上の記事が３本ありますが3分の2の記事は1万以下で次の図がワースト5です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30943/e9bc96a0-5e88-41e5-c137-33cf204f19c5.png)
記事が新しいのもありますが受ける記事は100本書いて5本あれば上出来です。

でも塵も積もれば山となるので閲覧数は必ず増えます。

## 最後に

[David Robinson](https://twitter.com/drob)さんからの引用です。
> When you’ve written the same code 3 times, write a function.
When you’ve given the same in-person advice 3 times, write a blog post. — David Robinson

３度でなくとも将来の自分が探すであろうと思う新しい発見は今日書いておきましょう。
英語で書く記事は長くなくても良いのでまず初めてみてください。
皆さん英語で記事を書きましょう。あなたにもできます。
1-1 SSHの手続きと、レポジトリの作製 (スナガクのポートフォリオ作成日記)

こんにちは！
記事をご覧いただきありがとうございます。
スナガクと申します。

転職などのためにポートフォリオを制作させて頂いてます。
言語はPythonで、基本的な文法は、本などで学習した者です。
分からないことだらけで、悪戦苦闘中ですが、頑張ります！
同じ初心者の方の助けになれば、幸いです！

今日は、GitにおけるSSHの設定と、リポジトリの作製を行いました。

具体的な手順は下記の通りです！
Bash上で、SSH Keyを作製
→GitHubに登録して、暗号化通信できるように。
→GitHub上で、新しいレポジトリ作成
＊詳細な手順は、省かせて頂きます。

SSH Keyを作成までは上手くいきました。
そして、これをコピーするために、clipコマンドを実行した所、

![とりあえずsudoで.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2963171/5d9d25b7-229f-e3cc-0543-3d24fe6becb2.jpeg)

このように、clipが使えない…と
そこで、アドバイス（？）に従い、sudoでインストールすると、
![言われるがままダウンロードしたが、上手くいかず.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2963171/099e1465-fc47-ec28-e1e6-08edf8d79768.jpeg)

なぜか、エラーが出て、上手くいかず。
もちろん、clipもできませんでした。
原因究明は大切ですが、
今のレベルではまだ理解できない、と思い。

とりあえず、SSH Key出力は、下記のコマンドから出来る
だから、これで出力して、それをGitHubにペーストすれば、
![コードを出力した.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2963171/617b2534-f2eb-a853-5747-43be59476963.jpeg)

で、上手くいきました！
![SSH 上手く設定できた.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2963171/090872c7-4547-61de-2bfd-2e191650585f.png)

その後、新しいレポジトリの作製まで完了しました！
![リポジトリー作成しました！.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2963171/d9c69f49-4adb-dfdd-169f-ccacaa9fe0d2.png)

次は、Djangoのアプリを作っていきます！

最後まで、ご覧頂き、ありがとうございました！
次回の記事も、よろしければご確認ください。

下記　作りたいポートフォリオの内容です！

制作するポートフォリオの内容は、
Djangoを使ったWebアプリケーションです！
Webアプリケーションの中身は、
It技術の最新情報・トレンドを確認できる、そんなサイトです。
時間がない、ご多忙なエンジニアの方でも、
意欲があれば、このサイトを見て勉強できる。
そんなサイトを作れば、周りの方に貢献できるかな？
と思っています！

具体的な方法は、
Webスクレイピング等を用いて、
最新技術や、気になるトピックを一目見て確認できる。
そんなサイトです！
また、機能は順次追加していければ、と思っています！

更新頻度は、1週間に1～2回になると思います！
（2022/11/12　現在）

見守って頂けると幸いです！
ご指導、ご鞭撻のほど、よろしくお願いいたします。
OPMのソースメンバー検索方法

## はじめに

様々なライブラリーを使い分けて開発をすることが多々あるかと思います。
その際、ソースメンバーがどこに格納されているか分からなくなってしまったことが、一度はありませんか？
また、途中から開発に参加することになったため、そもそも知らないということもあるかと思います。

この記事では、オブジェクトからソースメンバーがどこに格納されているか検索する方法をご紹介します。


## コマンド

オブジェクト記述表示`DSPOBJD`を使用します。


## 方法

（画像１）のように検索したいソースメンバーのオブジェクト、詳細に`*SERVICE`を指定します。

（画像１）
![searchSourceMember_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962887/f9397fd5-2817-d425-1906-9de6db67f936.png)

そうすると、（画像２）のようにソースメンバーがどこに格納されているか確認することができます。

（画像２）
![searchSourceMember_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962887/ef63b7b1-6526-a4ae-fb46-3785d619c1f9.png)


## おわりに

`DSPOBJD`を使用することで手軽にソースメンバーがどこに格納されているか確認することができます。
但し、ILE プログラムとサービス・プログラムに関してはこの方法では検索することができません。

ILE プログラムとサービス・プログラムのソースメンバーの検索方法は[ILE、サービスプログラムのソースメンバー検索方法](https://qiita.com/tamaday/items/e6a303e6bc548b8c3498)でご紹介しています。

ご参考になれば幸いです。最後までお読み頂きありがとうございます。

## 関連した投稿

[ILE、サービスプログラムのソースメンバー検索方法](https://qiita.com/tamaday/items/e6a303e6bc548b8c3498)
TypeScript で、どんなプロパティもセットできる空オブジェクトを作る

空オブジェクトを作って、何かしらプロパティをセットしようとすると怒られる。

```typescript
const obj = {};
obj.foo = 1;  // Property 'foo' does not exist on type '{}'.
```

当然であるobj は `{}` 型、つまりいかなるプロパティも持ってはいけない型であるため。

どんなプロパティもセットできる空オブジェクトを作りたい場合は下記でできる。

```typescript
const obj = Object.create({});
```

実質やっていることは

```typescript
const obj: any = {};
```

と同じなのだが、こちらは typescript-eslint の no-explicit-any というルールに引っかかる。

どうしても上記の方法でいきたい場合は、ルールを ignore する。

```typescript
/* eslint @typescript-eslint/no-explicit-any: 0 */
const obj: any = {};
```
GitLab Pages でページを公開する

次のようなアドレスでページを公開する方法です。
[https://ekzemplaro.gitlab.io/]([https://ekzemplaro.gitlab.io/)

ekzemplaro というプロジェクトに、ekzemplaro.gitlab.io　というリポジトリーを作成します。
[https://gitlab.com/ekzemplaro/ekzemplaro.gitlab.io](https://gitlab.com/ekzemplaro/ekzemplaro.gitlab.io)
public フォルダー内の　index.html が公開されます。
[public](https://gitlab.com/ekzemplaro/ekzemplaro.gitlab.io/-/tree/master/public)

## 作成手順
GitLab にログインして、
新規プロジェクト/リポジトリ　を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/bd478e4e-793d-5d47-dfdf-f0a37d886ce0.png)

テンプレートから作成　を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/50e9a527-687c-6412-6da7-d0bbec8ff79c.png)

Pages/Plain HTML の　テンプレートを使用をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/747dbb08-8fed-3414-5dbd-5d223963c4d1.png)

プロジェクト名
プロジェクトの URL
プロジェクトslug
を入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/c736a224-42f4-f1d2-fa30-d52ebf894383.png)

プロジェクト名: ekzemplaro.gitlab.io
プロジェクトの URL: ekzemplaro
プロジェクトslug ekzemplaro.gitlab.io
パブリック　をチェック

プロジェクト作成　をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/cc60dd62-730e-4d9a-fcf7-5542b63111f1.png)
TrailblazerCommunity「Salesforce認定アドミニストレーター試験目指す会」メンバー数300名突破しました

こんにちは

Salesforce認定アドミニストレーター試験ですがみなさんどのように勉強していますか？


Salesforceから勉強方法が紹介されているので見てみましょう
https://trailhead.salesforce.com/ja/credentials/administrator


ここにあるように

コミュニティに参加
ということも勉強法法として紹介されています

Trailblazer Community では、Trailblazer 仲間と交流したり一緒に勉強したりすることができます。


しかしながらこちらのリンクをクリックすると基本的に英語でのやり取りが多いので日本語で質問したりするのはちょっと難しいな　と感じる方多いかと思います

そのような方々のために、TrailblazerCommunity「Salesforce認定アドミニストレーター試験目指す会」をご紹介します

https://trailhead.salesforce.com/ja/trailblazer-community/groups/0F94S000000kJUPSA2?tab=members&sort=LAST_MODIFIED_DATE_DESC

こちらのコミュニティは参加者が300名を超えているTrailblazerCommunityグループです
Trailheadのアカウントがあればだれでも参加できるグループです

今は毎週だれかしらが勉強の質問をして、それを誰かが答える　という流れ出ています。

ぜひみなさん、「Salesforce認定アドミニストレーター試験目指す会」に参加してみてはいかがでしょうか

このコミュニティが
皆様の勉強のお役に立てれればと思います

一人で勉強するのは大変だと思います。

みなさん一緒に勉強しましよう。
変数をリストにまとめる

複数の変数を一個のリストにまとめて、デバッグのために表示したいとする。

```el
(defun sut (arg)
  "テスト対象"
  (let ((a 1) (b 10) (c 100))
    (message "sut: %s" (list a b c arg)))
  t)
```

メッセージバッファにはこのように表示されるだろう。

```
sut: (1 10 100 hogehoge)
```

だが、願わくばどの値がどの変数なのかをいっしょに表示したい。なのでこうしてみる。

```diff
-    (message "sut: %s" (list a b c arg)))
+    (message "sut: %s" (list :a a :b b :c c :arg arg)))
```

するとメッセージバッファの表示ではこのようになり、どの変数がどの値なのかわかりやすくなる。

```
sut: (:a 1 :b 10 :c 100 :arg hogehoge)
```

このような `(キー1 値1 キー2 値2 …)` のように平坦なリストの中でキーと値が互い違いに現れるような構造のリストは**属性リスト**(plist)と呼ばれるものであることは「Emacsを書く前のLisp」という記事にも書いた。

https://qiita.com/tadsan/items/0d3a772f4b8fb733bf52

表示するための情報量としては十分なものだろう。しかし問題がある。リストの構築がめんどくさい。

そういうときはマクロを使う。

```el
(defmacro compact (&rest variables)
  "Compact variables into plist."
  (let ((var (cl-gensym "compact")))
    `(cl-loop for ,var in (quote ,variables)
              nconc (list (intern (format ":%s" ,var))
                          (symbol-value ,var)))))
```

`compact`というマクロ名はPHPの同名の関数から拝借した。

https://www.php.net/compact

Lispには詳しくないのでCommon Lispなどにも同様の機能が既にある可能性もある。

Emacs Lispのマクロで使える変数はマクロ内に閉じていない(別の言い方をすると[健全なマクロ](https://ja.wikipedia.org/wiki/%E5%81%A5%E5%85%A8%E3%81%AA%E3%83%9E%E3%82%AF%E3%83%AD)ではない)ので、単に`symbol-values`を使うとマクロ外の変数も平然と参照できる。

```diff
-    (message "sut: %s" (list :a a :b b :c c :arg arg)))
+    (message "sut: %s" (compact a b c arg)))
```

見ためがとてもすっきりした。

世の中には「俺はプロパティリストは好かん、連想リストしか勝たん」というやつもおろう。仕方がない。

```el
(defmacro compact-assoc (&rest variables)
  "Compact variables into plist."
  (let ((var (cl-gensym "var")))
    `(cl-loop for ,var in (quote ,variables)
              collect (cons ,var (symbol-value ,var)))))
```

```
sut: ((a . 1) (b . 10) (c . 100) (arg . hogehoge))
```

俺はどっちでもいいけど。

## 追記

@ROCKTAKEY 先生から

https://twitter.com/rocktakey/status/1591509778852741121

完全にその通り。

```el
(defmacro compact-list (&rest variables)
  "Compact variables into plist."
  (cons 'list
        (cl-loop for var in variables
                 nconc (list (intern (format ":%s" var)) var))))
```

`` ` `` も `,` も出てこないし、異様にすっきりしましたね… `gensym` とかしなくても変数名汚染の心配がないのがおいしい。


## 追記2

マクロで `symbol-value` をとろうと思ったら何か怪しいという嗅覚が自分には身についていなかった。

https://twitter.com/rocktakey/status/1591520339405996033

https://twitter.com/tadsan/status/1591520208858255360

このあたりは曖昧だったので、さらなる理解は筆者(@tadsan)への課題とします。
2022/11/13主にITとかセキュリティの記事

米子会社に不正アクセス、個人情報流出の可能性 - 東京化成工業
https://www.security-next.com/141266

漁協直売店で「なりすましメール」 - 8月の「Emotet」感染が原因か
https://www.security-next.com/141270

サイトが改ざん被害、送受信メールも流出の可能性 - システム開発会社
https://www.security-next.com/140846

あなたの会社も狙われる サイバーリスクに必要なBCP策定(11/11)
https://wedge.ismedia.jp/articles/-/28496

中国政府、ソフトウェア脆弱性情報を悪用か　Microsoft指摘(11/11)
https://www.zaikei.co.jp/article/20221111/696884.html

サイバー攻撃でデジタル化に隙(11/11)
https://www.yakuji.co.jp/entry99625.html

多要素認証の製品選び、主なポイントと代表的製品8選（下）(11/11)
https://project.nikkeibp.co.jp/idg/atcl/19/00340/102800003/

東京化成工業の米国子会社に不正アクセス、グループ企業保管情報が流出の可能性(11/11)
https://scan.netsecurity.ne.jp/article/2022/11/11/48478.html

電子カルテ一部閲覧可能に　大阪の病院システム障害(11/10)
https://www.nikkei.com/article/DGXZQOUF10CA10Q2A111C2000000/

ＥＵ、サイバー防衛と軍事機動力巡り行動計画案　対ロ懸念で(11/11)
https://jp.reuters.com/article/europe-security-idJPKBN2S103E

オフィスのWi-Fiがつながらない原因【15選】(11/11)
https://note.com/mjeinc/n/n0ec376c88b55

ランサムウエアのサイバー攻撃に関与か 男を訴追 米司法省(11/11)
https://www3.nhk.or.jp/news/html/20221111/k10013888531000.html

CT Analysis DeFi 『2022年10月 DeFi市場レポート』を無料公開(11/11)
https://crypto-times.jp/ct-analysis-defi-15/

産業用制御システム（ICS）セキュリティ市場、2027年に300億米ドル規模到達見込み(11/11)
https://japan.cnet.com/release/30800229/?ref=rss

マルウェアを配信しているPyPIパッケージを複数発見、確認を(11/10)
https://news.mynavi.jp/techplus/article/20221110-2507440/

【記者のひとこと】あのブランドが復活(11/11)
https://www.bcnretail.com/market/detail/20221111_304162.html

Microsoft Exchange Serverのゼロディ脆弱性が修正、確認と更新を(11/11)
https://news.mynavi.jp/techplus/article/20221111-2508929/

Pixelスマホを「SIMカードを挿すだけ」でロック解除できる特大バグ発見！ 11月のアップデートで解決します(11/11)
https://getnavi.jp/digital/806273/

iPhone・iPad・Macに複数の脆弱性、すぐにアップデートを(11/11)
https://news.mynavi.jp/techplus/article/20221111-2510148/

調査結果：日本のWebサイトには平均13のトラッカーが存在する
日本のWebサイトには平均13のトラッカーが存在し、データを収集し収益化することが明らかに(11/11)
https://prtimes.jp/main/html/rd/p/000000022.000072662.html
ghコマンドとか色々使ってgithub上のリポジトリをいい感じに取得できるようにする

## どういう記事？

本記事は [ディップ with 全部俺 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/dip-with-all-me) 1日目の記事になります。

個人のPCで新しいMacを買ってセットアップをしていたのですが、既存のリポジトリをcloneしてくるのがちょっと面倒だったのでいい感じにできるやつを組んでみたよ。
という記事です。

`git clone` をするのに毎回gitリポジトリのURLをコピーしてコマンドに貼り付けてというのが面倒だなと思い、コマンドを叩けばリポジトリ選択ができて、選択したリポジトリをclone出来るようになればいいなと思ったのが発端です。

## 実行環境

- homebrew
``` sh
$ brew -v
Homebrew 3.6.10
Homebrew/homebrew-core (git revision d38f0f7b60a; last commit 2022-11-12)
```

- peco ※brewからinstall

``` sh
$ peco --version
peco version v0.5.10 (built with go1.17.2)
```

- gh ※brewからinstall
``` sh
$ gh --version
gh version 2.20.0 (2022-11-08)
https://github.com/cli/cli/releases/tag/v2.20.0
```

- ghq ※brewからinstall
``` sh
$ ghq --version
ghq version 1.3.0 (rev:ccbbc18)
``` 

## 設定編
インストールしたアプリそれぞれに幾つかの設定が必要なので設定を行います。

### ssh Keyをgithubに登録する。
これから作るコマンドはssh経由でgit cloneを行うため、ssh Keyの登録を行う必要があります。

例）ssh keyの作成
``` sh
ssh-keygen -t rsa -b 4096
```

設定方法は他の記事を参照してみてください。

### ghq の設定を行う。
ghqのrootディレクトリを設定する必要があるので、`~/.gitconfig` に下記2行を追加します。
この辺の設定は下記を参照してもらえるといいかと思います。
[びくんびくんしながらコードを書く：ghqとpecoで作るお手軽プロジェクト管理環境](https://tech-note.bikunbikun.com/entry/2019/12/12/120000)
```
[ghq]
	root = ~/go/src
```

### ghコマンドのログインを済ませておく。
普段からghコマンドを利用している場合は問題ありませんが、これのためにインストールした場合は、先にログインをしておく必要があります。

``` sh
gh auth login
```

### .zshrc に追記する

``` sh
clone-repo () {
  local org=""
# organizationを指定したい場合、標準入力で受け付ける。
  read "org?input organization name:"

# 取得するリポジトリ数を指定したい場合、標準入力で受け付ける
  read "limit?input limit Repository count:"
# 設定がなければデフォルト1000を指定
  if [ -z $limit ]; then
    limit=1000
  fi

# リポジトリの選択を行うコマンド。
# 選択が終わったらrepoという変数に選択されたリポジトリが格納される。
  local repo=$(gh repo list $org --limit $limit --json sshUrl --jq '.[].sshUrl' | peco)

# pecoでの選択をescなどで抜けた場合、ghq getコマンドがコケるのでその前に抜けるようにする。
  if [ -z $repo ]; then
    return 0
  fi
  ghq get $repo

# cloneしたリポジトリのディクトりへ移動する。
  cd $(ghq list --full-path | grep $(basename $repo .git))
}
# ウィジェットへ登録
zle -N clone-repo
# keybindへの設定(esc+l)
bindkey '^[l' clone-repo
```


上記手順で一通り設定完了です。
コマンドそれぞれに挙動のコメントを記載しているので、ご参考にしていただければと思います。
※もっといい方法があるよというのをご存じでしたら教えてください。

## 使い方
esc+lでコマンドが起動します。

起動後はpecoのインクリメンタルサーチが即起動するため、cloneしたいリポジトリを選択します。

下記表示例
```
QUERY>                                    Regexp [30 (1/2)]
git@github.com:unagiya/dotfiles.git                                                                      
git@github.com:unagiya/cram.git
git@github.com:unagiya/habu.git
git@github.com:unagiya/ISUCON12q.git
・
・
・
```

また、コマンドラインからコマンドを起動するとorganization選択用のキー入力が求められます。

```
$ clone-repo
input organization name:
```

ここでorganizationを入力すると、自分以外のアカウントなども含め、公開されているリポジトリを選択できます。

### おまけのヘルプ
キーバインドの方から起動すると標準入力でorganization, limitを受け取る部分がなぜか起動してくれず、自分のアカウントのリポジトリからしか選択できないです。。。
※なぜそうなるかご存知の方がいたらご教授いただきたいです。

## 最後に
とりあえず使えればいいやで実装したため、こうした方が良いなど改善点はあると思いますのでツッコミ大歓迎です。
また、改善点として、すでにclone済のリポジトリなどはcloneしないようにする制御などを入れても良いですね。
※今はすでにclone済のリポジトリをcloneしようとするとghq側のコマンドでエラーが吐かれ異常終了します。

あまりガンガン使う機能ではないですが、git 管理を楽にするためのコマンドのご紹介でした。
有用なことは一つも書いていない記事2

# 自分用(rubyのこと)

標準入力　
数値で受け取りたい場合　→　gets.to_i
文字列　→　gets

配列
配列→配列
連想配列→ハッシュ　{"状態" => "眠い", "機嫌"=> "悪い"}


# 感想

唐突にまとめてみた
急に仕事でrubyonrailsをさわることになり、急いでrubyを勉強中(railsもしないとけない)
もともと開発関係は未経験で、Pythonを初心者に毛の生えた程度の独学していた人間に急に全く触れたことない
言語を触ることになったので吐きそう

paizaでとりあえず講義動画を見ず、演習問題を爆速で進めてます
ハッシュが許せん。なんだよハッシュて。「=>」の文字がじみにうつのがめんどくさいのでげせぬ

標準入力も文字列と数値の場合で変わるのがげせぬ
統一してほしい～（あとで、数値に変換しなくていいのが楽だけど）




お優しいかたで、いい教材がありましたらコメントでいただきたい
Vue.jsのVueCLIをWindowsにインストールする手順

Vue.jsの「Vue CLI」をWindowsにインストールする方法を紹介します。

# 環境
+ Windows 10
+ Node.js v18.12.1
+ npm 8.19.2
+ @vue/cli 5.0.8

# インストール手順

### 1. Node.jsとnpmをインストール

「[Node.jsとnpmをWindowsにインストールする方法](https://qiita.com/yasushi-jp/items/fd885d38f11d95e81328 "Node.jsとnpmをWindowsにインストールする方法")」の通り、「Node.js」と「npm」をインストールします。

### 2. VueCLIのインストール

コマンドプロンプトで以下のコマンドを実行します。
`npm install -g @vue/cli`

```:実行結果
C:\>npm install -g @vue/cli
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated subscriptions-transport-ws@0.11.0: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws    For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md

added 847 packages, and audited 848 packages in 3m

64 packages are looking for funding
  run `npm fund` for details

4 vulnerabilities (2 moderate, 2 high)

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
npm notice
npm notice New major version of npm available! 8.19.2 -> 9.1.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v9.1.1
npm notice Run npm install -g npm@9.1.1 to update!
npm notice

C:\>
```
（警告が出ているけど、今回は放置しています。）

:::note info
Windows 10では
`C:\Users\username\AppData\Roaming\npm`
配下に「Vue CLI」がインストールされます。
:::


### 3. VueCLIのバージョン確認
以下のコマンドでインストールされた「Vue CLI」のバージョンを確認します。
`vue --version`

```:実行結果
C:\>vue --version
@vue/cli 5.0.8

C:\>
```

# 参考
+ [Installation | Vue CLI](https://cli.vuejs.org/guide/installation.html "Installation | Vue CLI")

---
以上
Windows11で旧ターミナル(コマンドプロンプト)を使う方法

みなさん、Windows11のターミナルは使っていますか?
今風でかっこよくて使いやすいですよね。
でも、文字サイズ取得などの昔のコンソールAPIに対応していないなど、(今ではほとんど使われませんが)
レガシーなCUIアプリを使う際に昔のターミナルを使いたい時があります。
前まではcmdを直接呼び出したら旧ターミナルが使えましたが、最近になってこの方法でも新しいターミナルが開くようになってしまいました。
でも、旧ターミナルがどうしても使いたい！
そんな時のために旧ターミナルを使うための設定方法を書いていきます

# 結論
新ターミナルアプリの設定で、「既定のターミナル アプリケーション」を「Windows コンソール ホスト」に変えます

# やり方
1. Windows ターミナルを開きます
 ![スクリーンショット 2022-11-13 013141.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851058/73e6a81b-3a8a-cf08-4bb1-0215e2a8ac89.png)
こんな画面が開けたら大丈夫です

1. 上にある「v」マークを押し、「設定」をクリックします
 ![スクリーンショット 2022-11-13 013421.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851058/df9da84e-02f1-028f-bb4a-4f4aa2e2861d.png)
上にある「+」マークの右にある「v」マークを押すと上に貼ったスクリーンショットのようなタブが開くので、そこにある「設定」ボタンを押してください。
![スクリーンショット 2022-11-13 013437.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851058/3ac2793b-ae1a-3366-c369-4c07b4a0cd9a.png)
「設定」ボタンを押すと上に貼ったスクリーンショットのような画面になると思います。

1. 「既定のターミナル アプリケーション」を「Windows コンソール ホスト」に変更します
![スクリーンショット 2022-11-13 013459.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851058/b3421f4b-3ed6-4acc-82ba-e5c64f90c9fe.png)

1. 何らかの方法で、cmdを開きます
Winキー + R や、 Windows管理ツール からなど、好きな方法で開いてください。

1. 完了!
![スクリーンショット 2022-11-13 013305.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851058/d866d0bb-b1ce-df7e-d7f3-648165b202b1.png)
昔懐かしいあのコマンドプロンプトが呼び出せました。
Elixir IExプロンプトの上に出るやつ

[Elixir]: https://elixir-lang.org/
[Erlang]: https://www.erlang.org/
[IEx]: https://elixirschool.com/ja/lessons/basics/basics/#%E5%AF%BE%E8%A9%B1%E3%83%A2%E3%83%BC%E3%83%89
[iexコマンドの実行ファイル]: https://github.com/elixir-lang/elixir/blob/main/bin/iex
[erl]: https://www.erlang.org/doc/man/erl.html
[Erlang user]: https://www.erlang.org/doc/man/user.html

[Elixir]の対話シェル（[IEx]）を起動したときにプロンプト（`iex> `）の上に出るやつはどこからきているのか気になりませんか？

```
❯ iex
Erlang/OTP 25 [erts-13.1] [source] [64-bit] [smp:10:10] [ds:10:10:10] [async-threads:1] [jit] [dtrace]

Interactive Elixir (1.14.0) - press Ctrl+C to exit (type h() ENTER for help)
iex>
```

`iex> `上に2行印字されています。

https://qiita.com/torifukukaiou/items/17d55cf896c24b13350e

## 1. "Erlang/OTP..."

これは[Erlang]の対話シェルにより印字されているようです。

試しに[Erlang]の対話シェルを起動してみます。

```
❯ erl
Erlang/OTP 25 [erts-13.1] [source] [64-bit] [smp:10:10] [ds:10:10:10] [async-threads:1] [jit]

Eshell V13.1  (abort with ^G)
1>
```

出ました。詳しくは（まだ）知りません。

[iexコマンドの実行ファイル]の最後の行で`elixir`コマンドが実行される際に[Erlang]の[erl]コマンドの引数が`--erl`に渡されています。

- `-noshell`: [Erlang]の対話シェルを起動せずに[Erlang]ランライムを起動
- `-user`: [Erlang user]をセットする　

```sh
exec "$SCRIPT_PATH"/elixir --no-halt --erl "-noshell -user Elixir.IEx.CLI" +iex "$@"
```

https://github.com/elixir-lang/elixir/blob/a9447f3dc71061b72151fe7ac7f301a094e0cc50/bin/iex#L33

https://www.erlang.org/doc/man/erl.html#flags

https://www.erlang.org/doc/man/user.html

https://github.com/elixir-lang/elixir/blob/a9447f3dc71061b72151fe7ac7f301a094e0cc50/lib/iex/lib/iex/cli.ex#L1

## 2. "Interactive Elixir..."

これは[Elixir]の[IEx.Server.run/1]から呼ばれる[IEx.Server.run_without_registration/2]で印字されています。

[IEx.Server.run/1]: https://hexdocs.pm/iex/IEx.Server.html#run/1
[IEx.Server.run_without_registration/2]: https://github.com/elixir-lang/elixir/blob/a9447f3dc71061b72151fe7ac7f301a094e0cc50/lib/iex/lib/iex/server.ex#L83

## ご参考までに

https://qiita.com/piacerex/items/e0b6e46b1325bb931122

https://qiita.com/torifukukaiou/items/1edb3e961acf002478fd

https://qiita.com/piacerex/items/e5590fa287d3c89eeebf
[python] Qiita、インスタに自動ログインさせる

# はじめに
最近はブラウザーの機能としてアカウントのIDとパスワードを自動入力させることができるが、昔は毎回手動で入力する必要があった。今の世代はそれがわかるだろうか。。
今回は自動化の機能として自動ログインをまとめておく

# 環境 
python 3.7.8
Window 10
Chrome 107.0.5304.107

```
pip install selenium==3.141.0
```
## Chorme WebDriver ダウンロード
以下のリンクファイルをダウンロード

https://chromedriver.chromium.org/downloads

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/3fdf0b99-3eb4-f74a-2493-e8f60276df26.png)

`chrome://version`からバージョンを確認して、なるべく自分のChromeのバージョンと近いファイルをダウンロードする。


# Code
## Qiitaに自動ログイン（22.11.13）
```python
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time


# コードファイルと同じフォルダの経路に置く
driver = webdriver.Chrome('chromedriver.exe')

driver.get('https://qiita.com/login')

# ロード時間を考慮し、２秒ほど間を置く
time.sleep(2)

# ID入力
e = driver.find_element_by_css_selector('input[name="identity"]')
e.send_keys('your id')

# パスワード入力
e = driver.find_element_by_css_selector('input[name="password"]')
e.send_keys('your password')

# エンター
e.send_keys(Keys.ENTER)
```
## IDのhtml情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/a9819f42-9f60-b5d2-ed76-a55aeffe66dc.png)

## パスワードのhtml情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/2673004f-67d8-7354-2168-70a3dc5bd1c1.png)

html情報からログイン、パスワードのinput情報を得た

## instagramに自動ログイン（22.11.13）
```python
driver.get('https://www.instagram.com/accounts/login/')

time.sleep(2)

e = driver.find_element_by_css_selector('input[name="username"]')
e.send_keys('your account')

e = driver.find_element_by_css_selector('input[name="password"]')
e.send_keys('your password')

e.send_keys(Keys.ENTER)
```

# 終わりに
Twitterなどの自動Botはこのような仕組みだったんでしょうか
使い方にもよるが、多数のアカウントを作成していいねボタンを押してり、特定のトレンドキーワードを表示するようにしたり、使い方はいろいろあると思う。
しかしインスタなどはBot対策に力を入れているので、怪しい行動が続くとログインが制限される可能性があり、自分のアカウントで行うのはかなり危険であるかと
たった4行で画像の中の人を数える方法

# どうも
face_recognitionについて調べてて意外と簡単だったので紹介します。

## 用意する物

+ face_recognition　←こいつが無いとお話にならない
+ 顔の入った写真　←顔が隠れてないやつ

### 用意した画像
最近寒くなってきたのでこの画像にしました。
![3061076_s.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915539/14237492-c38f-6cb3-4167-19390d3fbf4a.jpeg)

画像は[ここからダウンロードできます](https://www.photo-ac.com/main/detail/3061076)

:::note warn
注意
face_recognitionの学習モデルの関係で赤ちゃんの顔を認識できません。
:::
注意事項の[詳しい説明はこちら](https://github.com/ageitgey/face_recognition/blob/master/README_Japanese.md#%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85)

## コード全体
~~~python:face_recognition.py
import face_recognition

image = face_recognition.load_image_file("ここに顔画像の入ったパス")#画像をロード
face_locations = face_recognition.face_locations(image)#顔の座標

print(f'画像の中に{len(face_locations)}人います')

~~~

すげえ信じられないくらい短い.....

## ざっくり解説
### 画像の読み込み
~~~python
image = face_recognition.load_image_file("ここに顔画像の入ったパス")#画像をロード
~~~
この行で画像を読み込んで**image**に入れています。
### 画像の中の顔の座標取得
~~~python
face_locations = face_recognition.face_locations(image)#顔の座標
~~~
**image**に入った画像を読み込んで、画像の中にある顔の座標を取得して**face_locations**に座標を入れています。

printで確認してみましょう。
~~~python
print(face_locations)
~~~
### 実行結果
~~~
[(68, 235, 175, 127), (239, 349, 301, 287)]
~~~
こんな感じで写真の中の顔の座標を取得できました。

:::note warn
写真の顔が認識できないとValueErrorが出ます。
:::

**おいおい座標取得と人数を数えるの関係ないじゃ無いか！！！**

っと言う前に下を見てください。

### どうやって人数を数えるのか？

もうすでに勘のいい人はわかると思いますが、実行結果を見ると **リスト[ ]** の中の **タプル型の( )** の中に

一人の顔の座標が入っています。つまりlen関数でリストの長さを調べれば、写真の中の人数を数えられます！

### 人数を出力

~~~python
print(f'画像の中に{len(face_locations)}人います')
~~~

これでOK！

解説終了！！！！！

## コードを動かしてみる

~~~:実行結果
画像の中に2人います
~~~

こんな感じで出力されます。

最初に説明したように赤ちゃんの顔は認識してないので**2人**と出力されます。

# 結構簡単だった
たった4行で画像から顔の座標撮って人数を数えられるface_recognitionすごいですよね

インストールが鬼畜すぎるだけで入れて使ってみると結構楽しいです。



これからもface_recognitionを使ったいろんな記事を書いていきたいと思います!!!

## 使用したURL


https://www.photo-ac.com/main/detail/3061076

https://github.com/ageitgey/face_recognition/blob/master/README_Japanese.md
azure仮想マシンスケールセットについて

●仮想マシンスケールセット
システム性能を調整する。

■垂直スケーリング
サイズの変更と同義。上位のサイズに変更してシステム性能を高めるスケールアップと回サイズに変更してシステム性能を下げるスケールダウンがある。
垂直スケーリングは簡単だが、ダウンタイムが発生し、サイズに上限がある。

■水平スケーリング
システムを構成するマシンの台数を変更することで性能を調整するアプローチ。このアプローチは、仮想マシンの台数を増やしてシステム性能を高めるスケールアウトと台数を減らしてシステム性能を下げるスケールインと呼ばれる。

●仮想マシンスケールセットの実装
自動スケーリングのためのパラメーターの主なもの

■初期インスタンス数
スケールセット内に最初に作成する仮想マシンの数。0~1000までの範囲で指定。

■スケーリングポリシー
スケーリングを手動で行う場合は手動。自動スケーリングを行う場合にはカスタムを選択する。カスタムを選択するとインスタンスの最小値や最大値、CPU閾値、追加するインスタンスの数などを指定できる。

■スケールインポリシー
スケールセットないで削除する仮想マシンを選択する順序を構成する。既定では可用性ゾーンと障害ドメイン感のバランスを維持しつつ、削除される仮想マシンが決定される。必要に応じて可用性ゾーン間バランスをとりながら最も新しく作成された仮想マシンから削除する「最新のVMポリシー」や、可用性ゾーン緩募バランスをとりながら最も古い仮想マシンから削除する「最も古いVMポリシー」を使用する様に変更できる。

■アップグレードモード
スケールセットモデルによって仮想マシンを最新の状態に維持するための方法を指定する。

・手動
スケールセットモデルの変更が既存の仮想マシン位は影響を及ぼさない。スケールセットモデルでサイズ変更をしても既存の仮想マシンは更新されず、更新するには手動でアップグレードする必要がある。

・自動
スケールセットモデルの変更後、ランダムな順序ですぐに各仮想マシンが更新される。しかし、順序の保証がなく、全ての仮想マシンが同時に停止する時間が発生する。

・ローリング
スケールセットモデル内で同時に更新を行う仮想マシンの割合（バッヂサイズ）を指定しておき、その割合に応じて仮想マシンが順次更新される。例えば仮想マシンが１０台ありバッヂサイズが２０％の場合は２台ずつ更新される。

■オーバープロビジョニング
仮想マシンのプロビジョニングの成功率を向上するための設定。
等々力陸上競技場利用予定表のPDFをCSV変換

# インストール
```
pip install pdfplumber
pip install japanera
pip install requests
pip install BeautifulSoup4
```
# スクレイピング
```python
import requests
from bs4 import BeautifulSoup

from urllib.parse import urljoin

def fetch_soup(url, parser="html.parser"):

    r = requests.get(url, headers=headers)
    r.raise_for_status()

    soup = BeautifulSoup(r.content, parser)

    return soup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}

url = "https://www.city.kawasaki.jp/nakahara/"

link = urljoin(url, "./page/0000088519.html")

soup = fetch_soup(link)

pdf_links = []

# h2の等々力陸上競技場利用予定表を基準にPDFを抽出
for i in (
    soup.find("h2", text="等々力陸上競技場利用予定表")
    .find_next_sibling("div", class_="mol_attachfileblock")
    .select("ul > li > a")
):

    d = {}

    d["link"] = urljoin(url, i.get("href"))
    d["text"] = i.get_text(strip=True)

    pdf_links.append(d)

pdf_links
```

# 日付変換
```python
# PDFの和暦日付からdatetimeを生成

import re

from datetime import date
from japanera import Japanera, EraDate, EraDateTime

s = pdf_links[-1]["text"]
m = re.match("令和(\d{1,2})年(\d{1,2})月", s)

janera = Japanera()

dt_date = janera.strptime(m.group(0), "%-E%-O年%m月")[0]

dt_date
```

# PDF変換
```python
import pathlib

import requests
import pdfplumber
import pandas as pd

def fetch_file(url, dir="."):

    p = pathlib.Path(dir, pathlib.PurePath(url).name)
    p.parent.mkdir(parents=True, exist_ok=True)

    if not p.exists():

        r = requests.get(url)
        r.raise_for_status()

        with p.open(mode="wb") as fw:
            fw.write(r.content)

    return p

# 最新のPDFをダウンロード
p = fetch_file(pdf_links[-1]["link"])

with pdfplumber.open(p) as pdf:

    dfs = []

    for page in pdf.pages:

        for table in page.extract_tables():

            df = pd.DataFrame(table[2:], columns=["day", "曜日", "大会名", "午前", "午後"])

            # 年・月・日
            df["year"] = dt_date.year
            df["month"] = dt_date.month
            df["day"] = df["day"].astype(int)

            # 日付変換
            df["日付"] = pd.to_datetime(df[["year", "month", "day"]])

            df["大会名"].mask(df["大会名"] == "", inplace=True)
            df["午後"].mask(df["午後"].isna(), df["午前"], inplace=True)

            dfs.append(df.reindex(["日付", "曜日", "大会名", "午前", "午後"], axis=1))

# 陸上競技場（メイン）
dfs[0]

dfs[0].to_csv(f"{dt_date:%Y%m}_main.csv", encoding="utf_8_sig", index=False)

# 陸上競技場（補助）
dfs[1]

dfs[1].to_csv(f"{dt_date:%Y%m}_sub.csv", encoding="utf_8_sig", index=False)
```
Node.jsとnpmをWindowsにインストールする方法

Node.jsとnpmをWindowsにインストールする方法を紹介します。

# 環境
+ Windows10
+ Node.js v18.12.1
+ npm 8.19.2

# インストール手順

「[ダウンロード | Node.js](https://nodejs.org/ja/download/ "ダウンロード | Node.js")」のページから、インストーラーをダウンロードします。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/8443f0cb-4176-740a-037e-4d3a167dc4c9.png)

ダウンロードしたインストーラー（ここでは「node-v18.12.1-x64.msi」）を実行します。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/2eaa2ecc-62f7-d8f6-220f-df8fa8c220a0.png)

「Next」をクリックします。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/9e4b02ee-76d1-b2f1-f639-643ba38a2d2e.png)

Agrementをチェックして、「Next」をクリックします。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/8e4c2777-22a5-888c-61c5-4598ece2aec4.png)

インストールフォルダを確認して、「Next」をクリックします。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/d23bb99c-8bfd-b479-eb84-30ace006e1a0.png)

npmも含まれていることを確認して、「Next」をクリックします。
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/1b407ade-ec0e-3c91-fe93-b62e2cd2c44f.png)

ここではChocolateyのインストールにチェックを入れずに、そのまま「Next」をクリックします。

:::note info
Chocolateyとは「コマンドラインによるアプリケーションの導入や削除を実現するパッケージ管理システム」です。
:::
![6-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/b932af23-beda-60b7-90c4-21aecc683543.png)

「Install」をクリックします。
※ユーザーアカウント制御の画面が表示された場合、「はい」をクリックします。
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/b1396da5-c734-8a2e-2bf3-3a63d87019bd.png)

インストールが開始されるので、しばらく待ちます。
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/b0cf21d3-28bf-f34f-d303-4861a9e8b7e6.png)

インストール完了の画面が表示されたら「Finish」をクリックします。
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/021cd3d0-45ae-33a9-69dd-6d39800f5889.png)

# バージョン確認

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

```:実行結果
C:\>node -v
v18.12.1

C:\>
```

次に以下のコマンドを実行し、npmのバージョンを確認します。
`npm -v`

```:実行結果
C:\>npm -v
8.19.2

C:\>
```

# 参考
+ [ダウンロード | Node.js](https://nodejs.org/ja/download/ "ダウンロード | Node.js")

---
以上
The Design of The Universe (創造主に聞いた世界の成り立ち)

https://zenn.dev/javacommons/scraps/2c181b2ddfc4ff より引用(書く項目の洗い出し中)：

## 唯物論vs唯意識論
* 意識は研究室で作れない
  * 物質から意識は生まれない
  * (究極)意識が「旅(経験)」をするために(物理)世界ができた
    * 究極意識(だけ)が最初にあった
    * 意識は「時間」を使って旅(経験)をする
  * 物質は意識の支配下にある
    * 物質(世界)の法則・原理を定めているのは究極意識である
* 我々は「モノ」ではない、ワケミタマの入れ物である
* メタバースは流行らない
  * マトリックスの恐怖/トラウマ
  * 「意識のデータ化」はできない

## 愛する神・見放す神

* すべての意識(存在)は究極にはヒトツ(ヒトリ)である
* 自己保存欲求(本能)が愛と裁きの本質である
* 「相手が自分かのように」ふるまえればそれでよい

## 世界線

* 意識が量子を(直接)制御するのではない
* それぞれの意識が「舞瞬舞瞬世界線を選択」している
* 究極の意識も「世界線の選択に関与」している。創造主にそむく行為など存在できない

## 神を創造する

* (できるのであれば)やってよろしい
* AI(モノ)に意識は宿りえない

## 未来は決まっているか

* (ある程度の未来まで)「無限に近い世界線の組み合わせ(可能性の集合)を」「計算できている」
* 究極意識が好まない世界線がまず削除される。その上で、それぞれの意識が「未来(世界線)」を選ぶ
* 「現在(時点)」が進む度に「計算された未来」は変化していく

## 永遠の生命

* 究極の意識と我々の意識は(時間を含む)「この世」を旅することで成長することを最大の目標としている
* この世界での制限(時に苦難)が大きければ大きいほど成長の幅が大きくなる
* 「あの世のなんでも瞬時に叶う 」状態から「この世のままならない現実」への落差がトランポリンのように「死後のあの世での(霊)格を跳ね上げてくれる」。それを信じて「地球」に(勇んで)生まれてくるが、「成長のための旅であることを忘れている」ため「この世は地獄」「この世は牢獄」であると感じてしまう
* 成長しなくても「永遠の生命」は保証されている
* ただし「極悪の限りを尽くせば、ブーメランの法則で地獄のような苦しみ(フィードバック)を受ける」
* 我々はいずれ「死ななくてもよくなる」「永遠に肉体を持っていきることをゆるされる」
プログラミング学習総括（半年）

## はじめに
プログラミング学習を始めて半年が経ちました。非常に大変でしたが、自分も驚くほど成長できたと思います。

## １．学習成果
|    |  項目  |  時間（ｈ）  |
| ---- | ---- | ---- |
|  プログラミング言語  |  java, spring boot  |  90  |
|  プログラミング言語  |  php  |  100  |
|  プログラミング言語  |  javaScript  |  30  |
|  プログラミング言語  |  HTML&CSS  |  20  |
|  資格  |  ITパスポート  |  70  |
|  資格  |  基本情報技術者試験  |  120  |
|  その他  |  Git, GitHub, AWS, Linux, SQL(MySQL, oracle), 環境構築等 |  70  |
|  合計  |  ー |  約500  |

## ２．感想
未経験からWeb系会社へ転職するには1年間（**１０００時間の学習時間**）が必要だと言われています。
私は最初何もわからない状態からスタートして半年間の学習を通して、ざっくりではありますが確かにそうだと考えています。

## ３．できない　⇒　できるようになったこと
下記の状況はただ勉強時間が足りていないだけかもしれません。
※以前の私はできませんでしたが、半年の学習を通して今はできるようになりました。

|  状況  |  学習内容  |
| ---- | ---- |
|  ①エラー対処ができない  |  基礎文法、言語知識  |
|  ②環境構築ができない  |  インフラ、アーキテクチャ知識、フレームワーク等幅広い知識が必要  |
|  ③簡単なアプリの作成ができない<br>（例：掲示板 php,js, HTML&CSS, apache, MySQL）  |  Web知識  |
|  ④コードが読めない<br>※実務では何千、何万行のソースコードにて追加作成・検索・修正するため理解が必要  |  アルゴリズム  |
|  ⑤Git, GitHub,Linuxの重要性は知っているが、原因と使い方が分からない  |  ITリテラシー、Web知識  |
|  ⑥自走方法が分からない（何をどうやるべきかが分からない）  |  ITリテラシー、基本情報技術者試験  |

## ４．最後に
焦らずにコツコツ学習していくことが大事だと思います。
迷っているときは基本情報技術者試験を受験してみるのもいいかもしれません。効率的に幅広い基礎知識を取得することが可能です。
Free プランでも Cloudflare の「IPv6 互換性」を無効にする方法

グレーアウトして無効にできないので Cloudflare API を実行する

![alt](https://qiita-image.cloudremix.net/Cloudflare-IPv6-Compatibility.jpg)

> Freeプラン、Proプラン、Businessプランのドメインをご利用のお客様は、Cloudflare API経由でIPv6 互換性を更新しなければなりません。
>
> [CloudflareのIPv6サポートを理解した上で設定する](https://support.cloudflare.com/hc/ja/articles/229666767)

# cURL を一回叩くだけ

 - `ZONE_ID`：ドメインの「概要」ページ右下
 - `EMAIL`：ログイン時のメールアドレス
 - `GLOBAL_API_KEY`：右上「マイプロフィール」→「API トークン」


```
ZONE_ID=【ゾーン ID】
EMAIL=【メール アドレス】
GLOBAL_API_KEY=【Global API Key】

curl -X PATCH "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/settings/ipv6" \
     -H "X-Auth-Email: $EMAIL" \
     -H "X-Auth-Key: $GLOBAL_API_KEY" \
     -H "Content-Type: application/json" \
     --data '{"value":"off"}'
```

## 結果

```:変更前
# nslookup www.cloudremix.net
Server:         1.1.1.1
Address:        1.1.1.1#53

Non-authoritative answer:
Name:   www.cloudremix.net
Address: 104.21.26.194
Name:   www.cloudremix.net
Address: 172.67.138.152
Name:   www.cloudremix.net
Address: 2606:4700:3032::6815:1ac2
Name:   www.cloudremix.net
Address: 2606:4700:3035::ac43:8a98
```

```:変更後
# nslookup www.cloudremix.net
Server:         1.1.1.1
Address:        1.1.1.1#53

Non-authoritative answer:
Name:   www.cloudremix.net
Address: 104.21.26.194
Name:   www.cloudremix.net
Address: 172.67.138.152
```

# 参考

 - [Cloudflare API v4 Documentation](https://api.cloudflare.com/#zone-settings-change-ipv6-setting)
CSSで使えそうで使ったことない機能メモ

# 関数
### min()
```css
div{
    width: 50%;
    max-width: 800px;
}
```
これは↓のように書ける
```css
div{
    width: min(50%, 800px)
}
```
- 親要素の80%ただし800pxでクリップする

### max()
```css
div{
    width: 50%;
    min-width: 300px;
}
```
これは↓のようにも書ける
```css
div{
    width: max(50%, 300px)
}
```
- 親要素の50% ただし300pxを下回らない
- 
### clamp()
```css
div{
    width: 50%;
    min-width: 150px;
    max-width: 800px;
}
```
これは↓のよにも書ける
```css
div{
    width: clamp(150px, 50%, 800px);
}
```
- 見出しなどのテキストをvwで指定して画面幅に応じて変えたいときなど
```css
div{
    font-size: clamp(18px, 2.8vw, 36px);
}
```
WinActorでの設定ファイルの取得方法について

![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646663/5b7c2394-d7f9-9b72-b816-95854a695c05.png)
こちらの内容は、RPACommunityの [**ライトニングトーク大会 vol.2**](https://rpacommunity.connpass.com/event/251548/ "ライトニングトーク大会 vol.2") にてお話したことをまとめたものです。
WinActorのシナリオを引き継いだはいいものの、パスやURLや初期値の設定箇所が分からず、動かなくなって困っている……という方向けの内容です。

動画でご覧になりたい方はこちら！ ▶  [WinActorでの設定ファイルの取得方法について](https://www.youtube.com/watch?v=gOK7QLbFdas&t=270s "WinActorでの設定ファイルの取得方法について")
# 設定ファイルとは
### 設定ファイルについて
プログラムを動かすのに必要な**初期値**や**環境設定**を記録しているファイルのことです。
ファイルに関する、場合によって**変更する必要のある部分をまとめたもの**、と考えていただくと分かりやすいかもしれません。
初期値や使用するファイルの保存場所を、シナリオ外のファイルに記録しておくと**保守性が上がります**。
![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646663/aebb0efc-eaed-fe4e-c989-9320a882ccdb.png)

### なぜ作る必要があるか
設定ファイルが無くても、シナリオのライブラリのプロパティへ直書きすることは可能です。
また、変数一覧の初期値の欄に書き込むことも可能です。

作成者がいる間は問題はないのですが、**作成者の異動やシナリオ引継ぎが発生したときに課題が発生します**。

![スライド5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646663/0b7fcbd0-3d4c-62eb-5971-c3775ee70c7c.png)

初期値や使用するファイルの保存場所の変更が発生すると、直書きした箇所を探すのに時間がかかります。
また、RPAに慣れていない人が修正するとなると、修正に抵抗感が出てしまいます。

シナリオ外のファイル（例えばExcelなど）を修正する形にしておくと、
修正箇所を探す手間も減らせますし、RPA初心者の修正への抵抗感も下がります。
また、WinActorの実行版（シナリオ修正不可で実行のみ行える）を使用する場合に、設定ファイルがあるとそちらで変数の初期値を変更することも可能になります。

上記理由により、設定ファイルを作成しておくことで保守性を上げることが可能になります。
# 取得方法について
### 設定ファイルの作成
ExcelやCSVやテキストファイルなど、**誰もが編集しやすいファイルで作成するといい**かもしれません。
中身のレイアウトについては、**使用するライブラリで取得しやすい形**に作成すると効率が良いと思います。

例えば、パソコンにExcelがインストールされていない場合は、CSVやテキストファイルで設定ファイルを作っておく必要があります。
また、CSVの編集ルールが詳しくない場合は、何度も操作しているExcelを使用するといいかもしれません。
### 設定ファイルから取得した値の収納先
主に「**変数**に取得」する場合と「**メモリ**に取得」する場合があります。
#### 変数に取得
変数一覧に登録されている**変数に取得した値を代入するパターン**です。
登録されている変数と取得した値が１対１になっていないと代入できないので、あらかじめ変数を登録しておく必要があります。
設定ファイルの項目が多すぎると、事前に設定しておく変数が増えて管理が大変になる可能性もあるので、検討しておく必要があるかもしれません。
#### メモリに取得
変数一覧には登録せず**パソコンのメモリに値を一時的に保存しておくパターン**です。
変数一覧のように代入された値を見ることはできません。（テキストファイルにつど書き出すことは可能）
設定する項目を変数一覧に事前登録の必要はないので、項目が増減しても使用可能です。
ライブラリは、辞書型、一次元配列、二次元配列、JSON形式関連で使用可能です。
![スライド6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646663/29ea6c4a-2b2a-e00a-d63a-90c02ccf3d0b.png)
# 今回は基本のExcelから変数への取得方法を解説
### 設定ファイルの取得手順
まず、設定ファイル（Excel）とWinActorのシナリオを**同じ場所**に保存します。
それから、Excelで設定した内容を保存するために、WinActorの変数一覧に変数を（必要なら初期値も）設定しておきます。
それからExcelを開いて読み取るためのライブラリを配置して、プロパティを設定しておきます。
※ 詳細な設定内容は次のスライドを参照してください。
![スライド7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646663/61bae411-2c7e-1986-8910-6579b6309578.png)
### シナリオ実行の流れ
では、実際に読み取れるかどうか実行してみましょう！
![スライド8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646663/f0917a28-6490-05c2-3e2d-1b55f7d8f006.png)
WinActorのシナリオの実行ボタンを押下すると、Excelで設定した変数値の内容が変数一覧の現在値に読み取られていることが分かります。
# まとめ
ですので、変更の可能性があるフォルダパスやURLや初期値を、設定ファイルにまとめておくことでスムーズに引き継ぐことが出来ます。
設定ファイルも、使用する相手のスキルや保存場所を考慮して設定することも大切です。
WinActorで使用するライブラリも、設定ファイルや使用する相手に合ったものを考慮して使用していただくと保守しやすくなると思います。
![スライド9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646663/ca9207a2-b88a-d1c0-5601-90b4a790d6d4.png)
うまく使い分けて、楽しいWinActorライフを👍✨
CourseraでGoogle データアナリティクス プロフェッショナル認定証を取得した


## これはなんなのだ

https://jp.coursera.org/professional-certificates/google-data-analytics

- Google Data Analytics Professional Certificate
- それ以外は以前のGoogle プロジェクト管理 プロフェッショナル認定証の時の記事を参照。

https://qiita.com/tatsu_sekine/private/d2ed2c12eaa3ff8b2844

## きっかけ
- CourseraでGoogle プロジェクト管理 プロフェッショナル認定証を取得していたので、もう一つは技術よりの事を学ぼうと思った。


## 取得してみて
- 基本的にはプロジェクトマネジメントのコースと同じだが、データアナリティクスの方が私にとってはつまらなかった。
  - 他人の課題を見るという実習がなかったので、そう言う意味でも退屈であった。
- 正直、（英語であるという事を除けば）簡単すぎて初学者以外には全くおススメ出来ない。
  - 基本情報技術者試験の方がはるかに難しい。
  - このコースを修了してデータアナリストを名乗れる、とは思えない。
  - データアナリストとは何なのかを体験学習的に知ることは出来るが、それにしてもあまりにも簡単。
  - 自分の趣向もあるが、プログラミングやロジックに興味があるなら別のモノを学習することをお勧めする。
- ”SQLは「シークェル」または「シーケル」と発音する”と一部では言われているが、「エスキューエル」と発音している人が居た。
  - Google プロジェクト管理 プロフェッショナル認定証の時より訛りの強い人が多いので、違う意味での勉強になった。
  - 非英語圏の人が英語圏、特に米国で職を求めるとなると言語障壁の少ないITにならざるを得ない、ということなのか。
Nuxt.jsでvue-toast-notificationを利用してtoastを表示する

Nuxtアプリで、Vue.jsプラグインのvue-toast-notificationを利用してトースト通知を表示します。

こんな感じ↓
![recorded.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267536/9e597c96-d80f-8b37-093b-82becd817e02.gif)

## なぜvue-toast-notificationか
これが良いのは、
- メンテナンスされている
- 少ないコードでOK

というところです。

メンテナンスについては、他のtoastが出せるVueプラグインは多くが2020年で更新が止まっていましたが、こちらは数ヶ月前に最終更新されていて、npmのWeekly Downloadsもかなり多かったので、しっかりメンテナンスされていて今後も問題なさそうと判断しました。Vue3.x系にも対応している点も良いですね。

また、少ないコードで書けるのも良いです。NuxtのUIフレームワークには大体toast(Vuetifyではsnackbar)はあるのですが、地味にコードが長くて辛いのです。
たとえば、vue-toast-notificationなら以下のように書けばtoastを出せます。
```js
this.$vueToast.success('成功')
this.$vueToast.error('エラー')
```


## vue-toast-notification

デモ
https://ankurk91.github.io/vue-toast-notification/

GitHub(Vue2.x)
https://github.com/ankurk91/vue-toast-notification/tree/v1.x

GitHub（Vue3.x）
https://github.com/ankurk91/vue-toast-notification

npm
https://www.npmjs.com/package/vue-toast-notification

開発者(Ankur Kumarさん)
https://twitter.com/ankurk91

## インストール
私のアプリケーションはVue2.x系なので、vue-toast-notification0.6をインストールします。Vue3.x系の方は0.6 -> 3.0にしてください。
```
npm i vue-toast-notification@^0.6
```

## Nuxtのpluginとして設定
Nuxtのpluginとして利用したかったので、pluginsにvue-toast-notification.jsファイルを追加します。

```js:plugins/vue-toast-notification.js
import Vue from 'vue';
import vueToast from 'vue-toast-notification';
import 'vue-toast-notification/dist/theme-sugar.css';
Vue.use(vueToast);
```

さらに、nuxt.config.jsにpluginとして追加します。

```js:nuxt.config.js
plugins: [
    {
      src: "plugins/vue-toast-notification.js",
      mode: "client",
    },
  ],
```

## vueファイルで利用
あとは好きな場所で利用してください。
記事冒頭でも紹介しましたが、以下のような記述でさまざまなtoastが出せます。
```js:pages/foo.vue
this.$vueToast.success('成功')
this.$vueToast.error('エラー')
this.$vueToast.warning('注意')
this.$vueToast.info('インフォ')
```

## optionsもたくさんあるよ
こういう書き方をすれば、optionsを利用してカスタマイズできます。
```js
this.$vueToast.open({
    type: 'error',
    message: 'エラーですよ',
    // その他optionsをここに書ける
});
```

optionsはGitHubにあるこちらをご覧ください。これはVue3.x系でも2.x系でも関係ありませんね。
https://github.com/ankurk91/vue-toast-notification#available-options
Cloudera CDP Public Cloud でデータ収集

まずはCDPにログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/ebe11050-b1c7-e3e9-b251-46b88f34d8c4.png)


次は、新しいNiFiクラスタを新規作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/d0c12955-6f6b-5108-f384-323ec58ede0e.png)
Create Data Hubボタンを押す。

新規作成画面に画面遷移。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/cecef610-d393-9da4-730d-6e2c45f04d4d.png)

入力

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/fd618156-c815-4db2-f49e-594c07bcfe9f.png)

そしたら、先ほど作成したData Hubは一覧に表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/3288308b-2611-c8b3-494e-44ea66e8456b.png)

しばらく作成をまちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/39b29c38-eca7-8aab-3271-5927de040a4b.png)


Data Hub作成、出来ました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/29d2b04b-898d-0e10-a7d3-bc109c24747c.png)

早速NiFi画面にログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/7db84d5d-2f2f-09f9-c040-e0d54af58733.png)


POP3メール受信設定：
POP受信頻度を３０秒間に設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/4bbc60c3-e1c1-8d0a-01f0-016e32212122.png)
FizzBuzz問題を初心者向けにわかりやすく解説

# 1.はじめに

こんにちは。
今日はJavaでよく出る問題の「FizzBuzz」を解説付きコードで初心者向けに解説します。
僕がJavaの学習をはじめたときに詰まった点を中心に説明するので最後まで読んでもらえたらうれしいです。


# 2.解説付きコード
以下が解説付きのコードになります。
この問題には別の解き方も存在するので回答の1つとして見てもらえたらと思います。

```FizzBuzz.java
public class FizzBuzz{
	public static void main(String[] args) {
		
		// for文を使って1から100までの数字を表示
		for(int i = 1; i <= 100; i++) {
			
			/*if文を使って3と5のどちらでも割り切れる数を
			求めてFizzBuzzと表示させる。*/
			if(i % 3 == 0 && i % 5 == 0) {
				System.out.println("FizzBuzz");
			
				
			/*if文を使って3で割り切れる数を求めてFizzと表示させる。
					
			※3でも5でも割り切れる数は最初のif文の時に拾っているので
			ここでは3で割り切れて5で割り切れない数が表示される*/
			}else if(i % 3 == 0) {
				System.out.println("Fizz");
				
				
			/*if文を使って5で割り切れる数を求めてBuzzと表示させる。
					
			※5でも3でも割り切れる数は最初のif文の時に拾っているので
			ここでは5で割り切れる数がBuzzと表示される*/
			}else if(i % 5 == 0) {
				System.out.println("Buzz");
				
			/*最初の3つのif文で3で割り切れる数と５で割り切れる数はすべて拾っているので
			残りは3でも5でも割り切れない数となりこれらはそのまま表示させる	*/	
			}else {
				System.out.println(i);
			}
		}	
	}
}
```

# 3.まとめ
今回はFizzBuzz問題を解説しました。
今回の回答はif文とfor文を使用しているのでもしまだ理解しきれていないという人はこの2つを中心に学習をすれば解けるようになると思います。
最後まで読んでいただきありがとうございました。
windows10 laravel設定

```
apache php 設定済前提
```

編集
```
php.ini

;extension=bz2
extension=curl
;extension=ffi
;extension=ftp
extension=fileinfo
;extension=gd
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=ldap
extension=mbstring
extension=openssl
```
動作確認
```
cd C:\Apache24\htdocs
laravel new blog
php artisan serve --host=0.0.0.0 --port=8080
http://localhost:8080/