OmniAICreator/Qiita-1.07M huggingface dataset:
既にGit で管理しているファイルと新しく追加したファイルをGit管理下から外す方法

# 概要
チーム開発を行う際、個人の開発環境のみに追加したいファイルや既に`git`管理下にあるファイルだが編集内容を個人のローカル環境のみに留めて置きたい場面があるかと思われます。この場合、よく使われる手法として、`.gitignore`に書き込むやり方があると思います。ただ、`.gitignore`に書き込むと他の開発者にも影響するので、チーム開発に於いては、良いやり方とは言えないです。
今回は、表題にも記載した様に、他の開発メンバーに影響を与えず、自身のローカル環境のみに修正内容を反映させる方法を記載します。

# 新規で追加したファイルをGit管理しない方法
- `.git`に`info`ディレクトリーを作成後、`exclude`ファイルを作成する
- `exclude`ファイルにバージョン管理外にしたいファイルやディレクトリーを指定する

:::note warn
`exclude`ファイルに記述する内容は、個人的なツールの設定、エディタの一時ファイル、ユーザ特有のビルド設定等を書き込む為に使用する
:::

```sh
# .gitのディレクトー構成

.git/
├── FETCH_HEAD
├── objects
├── index
├── ORIG_HEAD
├── config
├── logs
├── refs
├── packed-refs
├── hooks
└── info/  # ⇦ infoディレクトリーを追加
    └── exclude # ⇦ excludeファイルを追加
```
- `exclud`ファイルの書き方の例
```sh
# excludファイル

my-test-target.txt
aaa-test-target.txt
```
- 上記の設定を行った事により、`git status`コマンドの処理を実行した際、設定したファイルは`git status`に表示されなくなる

# 既に`Git`管理しているファイルを無視する方法
- 設定方法が二つある為、どちらのやり方も記載する

## `git update-index --skip-worktree`コマンドを使用した場合

### 設定方法
:::note info
**オプションコマンド、`--skip-worktree`の補足説明** 
- フラグが設定されたファイルの変更は、`git add`や`git commit`等の`Git`操作に反映されない
- `git pull`実行時も、ローカル環境での変更は上書きされず、そのまま状態が保持される
:::

:::note alert
**`git pull`にて、新たな変更をローカル環境に取り込む際、フラグをリセットする必要がある**
:::

```sh
# -skip-worktreeを使用した方法
$ git update-index --skip-worktree <file>
# 相対パスにて、ファイルを指定する([ ]は不要)
```

### 確認方法
```sh
$ git ls-files -v | grep ^S       

# 出力結果
# `--skip-worktree`のオプションコマンドを使用すると[S]で表示をされる        
S test/test.text
S test/index.html
```

### `Git`の管理下に戻す方法
```sh
$ git update-index --no-skip-worktree <file>
# 相対パスにて、ファイルを指定する([ ]は不要)
```


## `git update-index –assume-unchanged`コマンドを使用した場合

### 設定方法
:::note info
**オプションコマンド、`–assume-unchanged`の補足説明** 
- `--assume-unchanged`フラグが設定されたファイルは、`Git`が追跡し続ける
:::

:::note alert
**--assume-unchanged を設定しても、`git pull`を行うとリモートの変更によってローカル環境の内容が、上書きされる可能性がある**
:::

```sh
# –assume-unchangedを使用した方法
$ git update-index --assume-unchanged <file>
# 相対パスにて、ファイルを指定する([ ]は不要)
```

### 確認方法
```sh
$ git ls-files -v | grep ^h

# 出力結果
# `--assume-unchanged`のオプションコマンドを使用すると[h]で表示をされる        
h test/test.text
h test/index.html
```

### `Git`の管理下に戻す方法
```sh
$ git update-index --no-assume-unchanged <file>
# 相対パスにて、ファイルを指定する([ ]は不要)
```

# 参考資料
- [自分の環境だけgitignoreする方法（2つ）](https://www.yoheim.net/blog.php?q=20160510)
- [Gitで既に管理されているファイルをローカルで無視する方法](https://nishinatoshiharu.com/git-skip-worktree/)
- [既に git 管理しているファイルをあえて無視したい](https://qiita.com/usamik26/items/56d0d3ba7a1300625f92)
- [.gitignoreできないファイルを無視する方法を実例で解説](https://prograshi.com/general/git/update-index-assume-unchanged-and-skip-worktree/)

# 感想
　今回、初めてまともなチーム開発を行い、`Git`の操作を正確に行わないと他の開発メンバーに多大なる影響を与える事を、改めて身に染みて理解しました。`Git`に関しては、もっと理解する必要があるので、チーム開発を通して深く理解していきたいと考えています。
Teams会議でYouTubeの動画を綺麗に見る



![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) 動画の投影、もうカクカクしない。

# やること

MicrosoftのTeamsでリモート会議をするとき、YouTubeの動画をみんなで快適に見られるようにします。
通常の画面共有によるカクカクした動画再生とはちがって、とてもなめらかに再生されます。

# やり方

## STEP1 : TeamsにYouTubeアプリを追加する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/083915aa-6195-ddb6-3d42-aaf0471b6dd3.png" width = 700>

Teamsのリモート会議を立ち上げたら、上のメニューバーにある「＋アプリ」というボタンを押します。
（このボタンがない場合、Teamsのバージョンが古いとか、会社のシステムが対応していないとか、そういう事情があるかもしれません。）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/c9c923ca-51db-9b7c-b742-4a146627b99c.png" width = 700>

検索窓にyoutubeと入力するとアイコンが出るので、押します。
あらじめyoutubeアイコンが見えている場合もあります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/623742e4-7bff-3648-330c-f10abffc7fbf.png" width = 700>


この表示がでたら保存を押して進みます。

## STEP2 : YouTubeアプリを使う

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/d8815a13-e333-7363-323b-556242fb5c5c.png" width = 700>

上部メニューに現れた「YouTube」アイコンを押し、検索窓にYouTubeの動画のURLを入力します。
URLはブラウザでYouTubeを見ている時にブラウザ上部に出ているものでよいです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/9b0d0bf3-4230-5349-8c8b-4bab108f68c1.png" width = 700>


該当の動画が現れたら「一緒に見る」ボタンを押すと、すぐに投影が始まります。

## STEP3 : YouTubeを操作する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/674198ca-d7dd-2ebc-7eaa-e2cacbde83e5.png" width = 700>

投影された動画は参加者全員の手元で滑らかに再生されます。
再生タイミングも全員に同期されています。

動画を再生しながら会話することもできます（動画の音声が絞られます）

また、下のシークバーも共有、同期されており、一人の操作が全員の再生に反映されます。
グループコントロール」ボタンで、シークバーを投影者のみが操作可能できるか、全員が操作できるかを切り替えられます。


## STEP4 : オリジナルの動画をYouTube経由で共有する

上記はYouTubeで公開されている動画についての説明でした。

YouTubeで公開されていない動画を共有したい場合には、あらかじめご自身のYouTubeアカウントなどにアップしておけばOKです。

以上
Markdownで画像サイズを変更する方法

## 概要
Markdownを使用して掲載した画像のサイズが適切ではない際に、特定のwidthを設定することで、サイズを変更するやり方を紹介致します。

## やり方
Markdownで使用されるオリジナルのコードは以下の通りです。
***\!\[画像.jpg](\*\*\*.jpg)***

このコードを下記のように変更します。
***\<img src="\*\*\*.jpg" width="300">***

また、widthをパーセンテージで指定することも可能です。
***\<img src="\*\*\*.jpg" width="50%">***

## 実例
例えば、以下のようなファイルが存在するとします。
***\!\[test.jpg](画像のURL.jpg)***

それを以下のように修正します。
***\<img src="画像のURL.jpg" width="50%">***

## 直ぐに使用されたい方用
直ぐに使用されたい方は、以下をコピーしてご使用下さい。
```
<img src="" width="50%">
```

## 参考
[Markdown記法で画像サイズを変更する方法（widthを指定する）](https://k-koh.hatenablog.com/entry/2020/02/22/111440)
Ruby silver 模擬問題解説3

Ruby silverの模擬問題を抜粋して解説をしていきます。


下記コードの出力を4択から選ぶ問題になっています。

```
puts "A".ord + 1
```
1.66
2.114
3.エラーとなる
4.B

まず、'"A".ord'は'A'という文字コードの整数値を取得するメソッドになります。したがって、'A'はASC文字コードでは65を示します。

'"A".ord + 1'を計算すると、65 + 1で66になります。

したがって、puts "A".ord + 1の結果は66になります。

解答は1番になります
ソフトウェア更新についてのお話

# はじめに

皆さんはソフトウェアの更新をしていますか。

ソフトウェアの更新と聞くといくつかの単語が出てきます。
それは「アップデート」・「アップグレード」・「バージョンアップ」です。
それぞれざっくりと以下のような内容になります。
※人によって解釈が違う場合があります。

* **アップデート** 
ソフトウェアのプログラムやファイルの一部分を更新すること。ソフトウェアに大きな変化はない。
（小規模な更新）

* **バージョンアップ（アップグレード）**
ソフトウェア全体に対して大部分を更新・改良すること。ソフトウェアに大きな変化がある。
（大規模な更新）


「バージョンアップ」と「アップグレード」は厳密には違いますが、だいたい同じような意味合いです。
さて、今回はソフトウェアのバージョンアップ（アップグレード）についてお話をさせてください。


# バージョンアップのメリット・デメリット
ソフトウェアをバージョンアップすると様々なメリット・デメリットがあります。

* **【メリット】**
   * 新しい機能の追加や改善
　便利な機能の追加や性能の改善などの恩恵が受けれます。
   * セキュリティ性能の向上
　定期的なアップデートやリリースにより脆弱性対策ができます。
   * サポート期間の延長
　ソフトウェアのアップデートを受けれたり、問い合わせ等のサポートを受けることができます。

* **【デメリット】**
   * 既存のソフトウェアやハードウェアが対応していないことがある
　例えばwindows11には対応しているがwindows10は未対応のような製品があったりします。その場合は別途OSのアップグレードを実施しないといけません。
   * コストがかかる
　バージョンアップに伴って新たに製品を購入する必要があったり、新しい製品の検証や導入に伴う学習コストなどがかかります。
<br>
逆にバージョンアップしない場合のメリット・デメリットとしては以下が考えられます。

* **【メリット】**
   * コストがかからない
　既存のソフトウェアを使用し続けるので、新しい製品の購入費用がかかりません。
   * 新しい機能を覚える必要がない
　既存のソフトウェアを使用し続けるので、学習コストなく運用できます。

* **【デメリット】**
   * サポート終了
　ソフトウェアの各バージョンごとにサポート期間が設定されており、古いバージョンの製品についてはサポートが受けられなくなることが多いです。
　サポートを受けれないと問題が発生した際に問い合わせができない等のデメリットがあります。
   * セキュリティリスクがある
　サポートの終了したソフトウェアについては更新ファイルがアップデートされない場合があり、脆弱性を突かれててウイルスに感染したり不正アクセスに利用されたりする危険性があります。

<br>

上記のように様々なメリット・デメリットがありますが、バージョンアップをする主な目的はサポートを受けれる点とセキュリティ性能の向上です。

バージョンアップをしないで脆弱性のある状態の製品を使い続けるとウイルスに感染する可能性があります。
ウイルスに感染すると膨大な損害が発生する可能性がありますので更新判断については慎重にしてください。

# 実際にソフトウェアのバージョンアップをした話
実際に体験したとあるソフトウェアのバージョンアップについてお話します。

社内のとある製品についてバージョンアップの話がありました。
オンプレミスの製品であり、自社サーバとクライアントPCぞれぞれにバージョンアップ作業が必要です。

ここで重要なことは、まずバージョンアップする製品の動作環境をよく調べることです。
例えば以下のような点に注意しましょう。

* 対応するOSやデータベースのバージョンはなにか
* サーバやクライアントPCが必要スペックを満たしているか

この確認作業を疎かにするとバージョンアップ作業中にエラーが発生したりして作業を後日に延期せざるを得ない状況に陥ります。

残念なことに今回担当することになった製品については、現行サーバに入れているデータベースのバージョンが動作環境を満たしていなかったため、新しいバージョンのデータベースをインストールする必要がありました。

さて、ここで現行サーバにそのまま新しいバージョンのデータベースをインストールして、その後新しい製品のバージョンアップ作業をすればよいかというとそういう訳にも
いかない状況がありました。
それは現行製品については営業時間中は常にソフトウェアが実行中の状況となるため、データベースの停止やサーバーのシャットダウンを容易に実施できないという点です。

そのため現行サーバと同等な環境を構築し、その環境に新しいバージョンのデータベースのインストールや製品のバージョンアップ作業を実施する必要がありました。
つまりは検証作業が必要という事です。

事前に検証を行うことで、問題なく製品がインストールされ動作できるのか、作業時間はどのくらいかかるのか等の必要な情報を集めることができます。
実際に検証をしてみるとうまくインストールできなかったり動作しなかったりなど問題が発生したのでサポートに問い合わせながら試行錯誤して解決に至りました。

この検証で集めた情報を基にバージョンアップ作業の手順書を作成し、当日手順書に沿って問題なくバージョンアップ作業を完了させることができました。


# 最後に
ソフトウェアのバージョンアップについてはセキュリティリスクやサポートの観点から基本的に実施した方がよいです。

また、ソフトウェアのバージョンアップを実施するときは以下の点に注意しながら対応してみてください。

* サーバやクライアントPCが動作環境を満たしているか。
* 十分な検証を行っているか。
* 余裕をもったスケジュールを立てているか。
CSSの疑似要素内で特殊文字を使いたい時の注意点

皆さんはコーディングをする中で特殊文字を使用した事はありますでしょうか？
特殊文字というと種類は様々ですが、
よく目にするので有名なのはコピーライトや商標登録のマークでしょうか。

特殊文字の多くは基本的にキーボード上で打つ事が出来ないのが多く、
「文字実態参照」や「数値文字参照」と呼ばれるコードを用いて表します。

私は現場で特殊文字を使う機会が多いのですが、いつもはHTML上にて数値文字参照を使用して特殊文字を表示させておりました。
この度、CSSの疑似要素（after、before）を使ってcontentプロパティで特殊文字を表示させたい案件が来まして、
いつも通り数値文字参照にて変換しようと試みたのですが……

```HTML
<body>
    <div id="sample">
        左に特殊文字が入ります。<br>
        「&#0174;」はHTMLに記述してます。
    </div>
</body>
```

```css
#sample::before {
    content: "&#0174";
}
```

![Qiita](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2151781/68f48d54-dd03-6b89-4245-45055562e6dd.png "出力結果")

入力した文字がそのまま表示されてしまう事態が発生しました。
※サンプルでは分かり易い様に疑似要素の部分にグレーの背景色を敷いております。
　また、CSSはcontentプロパティ以外は記載を省略してます。

調べた結果、contentプロパティに特殊文字を使用する際は特定のルールに沿って変換する必要があるという事が分かりました。

自分が調べた範囲で分かったのは以下のルールです。

1.「#」は「0（数字のゼロ）」に変換
2.「&」は「\（環境によってはバックスラッシュ表示）」に変換
3.「数字」は 「10進数」ではなく「16進数」に変換
4.「;（セミコロン）」は省略する

なので、例えば商標登録のマークを表示させたい場合は

```CSS
#sample::before {
    content: "&reg;"; /* 文字実態参照の場合 */
    content: "&#0174"; /* 数値文字参照の場合 */
}
```

上記の様に入れるのではなく、

```CSS
#sample::before {
    content: "\00AE"; /* ルールに沿って変換した場合 */
}
```

この様に表記する事で実際のWebページに表示させる事が出来ます。

使う機会は非常に限定的かと思いますが、知らずにいざ直面すると原因を探るのに時間をかけてしまう事もあるので頭の片隅にでも覚えておくと良いかもしれません。
***
▼一覧表を掲載されているサイトもご紹介しておきます。

「IT技術を身に着けようブログ きまぐれアップデート」
・content で使える特殊文字コード CSS

https://kg-update.net/content-%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E7%89%B9%E6%AE%8A%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89-css/
GitHubリポジトリのEnvironmentsに表示される、現在は使ってない環境の削除方法

## 概要
GitHubリポジトリ画面の右サイドバーにある、Environmentsに現在は使ってない環境が残ってしまっている場合の削除方法を紹介致します。
私の場合は、以下のgithub-pagesとproductionを削除致しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961835/26ea21ce-054d-89df-aaad-f2195d4ac233.png" width="50%">

## 解決法
1.現在は使ってない環境が表示されているリポジトリのSettingsを選択
![スクリーンショット 2023-05-29 13.28.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961835/0bfbc7b3-6179-737e-7108-7fcd3055d846.png)
2.左サイドバーにあるEnvironmentsを選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961835/f45d128f-68a2-e8a6-2d9b-d43fe246143d.png" width="30%">
3.使用している環境が一覧で表示されるので、使わなくなった環境の右側のゴミ箱マークを選択し、削除完了
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961835/ade01ad2-badf-1914-670b-cf91b0e3da5b.png" width="70%">

## 参考
[デプロイに環境を使用する](https://docs.github.com/ja/actions/deployment/targeting-different-environments/using-environments-for-deployment)
Delphi　書き方

## Delphiで書く手順

- Delphi IDE（統合開発環境）を起動
→コードの編集、ビルド、実行するためのツールが含まれる

- 新しいプロジェクトを作成
<作成方法>
メニューバー
「File」→「New」→「VCL Forms Application」（または他の適切なテンプレート）
→フォームが作成される

- フォーム上でコンポーネントを配置

フォーム上にコンポーネント（ボタン、テキストボックス、ラベルなど）をドラッグ＆ドロップして配置
→ユーザーインターフェースを構築するために使用される


☆Delphiは、視覚的なデザインとコードの結びつきが強い


- イベントハンドラを作成
コンポーネントを操作するために、イベントハンドラを作成する
コンポーネントの特定のイベント（ボタンクリック、テキストの変更など）が発生したときに呼び出されるコードブロックを記述

EX)ボタンクリックイベントのコードの場合

~~~delphi
procedure TForm1.Button1Click(Sender: TObject);
begin
  // ボタンがクリックされたときの処理
  ShowMessage('ボタンがクリックされました！');
end;

~~~
Ruby2.1技術者認定試験 Silver　time.now.to_i問題解説

```ruby
Time.now.to_i
```

Q上のコードの実行結果は？

・解説

- **`Time.now.to_i`** はRubyにおいて、現在のタイムスタンプを取得するためのコード。
    
    これを実行すると、Unixエポック（1970年1月1日）からの経過秒数が整数として返される。
    
- **`Time.now`** は現在の時刻を表す **`Time`** オブジェクトを生成する。
- **`to_i`** メソッドは、**`Time`** オブジェクトを整数として表すためのメソッド。具体的には、Unixエポックからの経過秒数（整数）を返す

A.起算時（1970年1月1日午前0時)からの経過秒数を整数で返す。

```ruby
1685333172
```


読んでくださり、ありがとうございます！
PHPにおけるプロパティ、メソッド、関数それぞれの違い

# 目的
ちがう記事でphpにおけるプロパティ、メソッド、関数の違いを指摘されたので、その辺曖昧にしてしまっていたので整理してみる。


# メソッド
メソッドは**クラス内で定義された関数**のこと。
クラスのインスタンス（オブジェクト）に対して実行可能な操作を定義するために使用される。
メソッドはオブジェクトの振る舞いを表現するためのコードを含んでいる。

### メソッドの特徴
・クラス内のプロパティにアクセスできる。
・クラスのインスタンスに対して呼び出すことができる。
・メソッドは引数を受け取ることができ、返り値を返すことができる。

```
<?php

class MyClass {
    public $property;

    public function myMethod($arg) {
    　// メソッドの処理
       // プロパティへのアクセス
        $this->property = $arg;

       // 返り値の設定
        return $this->property;
    }
}

$obj = new MyClass();

$obj->myMethod('Hello');
```


# プロパティ
プロパティは**クラス内で定義された変数**のこと。
クラスのインスタンスごとに異なる状態を表現するために使用される。
プロパティはクラス内のメソッドからアクセスされたり設定されたりする。

### プロパティの特徴
クラスのインスタンスごとに異なる値を持つことができる。
メソッド内からアクセスや設定が可能。
アクセス修飾子を使用してアクセスレベルを制御できる（public、private、protectedなど）

```
<?php

class MyClass {
    public $property;

    public function myMethod() {
        // プロパティへのアクセスと設定
        $this->property = 'Hello';
    }
}

$obj = new MyClass();
$obj->myMethod();

echo $obj->property;  // 'Hello' を出力
```

# 関数（function)
**クラスに依存しない独立したコードブロック**。
再利用可能な処理を実行するために使用される。
関数はクラス内に定義されず、独自の名前空間に存在する。

### 関数の特徴
クラスに依存しない。
クラス内に定義されず独自のスコープを持つ。
パラメータを受け取り、処理を実行する。
返り値を持つことができる。
ファイル内のどこからでも呼び出すことが可能。

```
<?php

function fun() {
    $str = "This is function"   
    echo $str;
}

fun();  // "This is function" を出力
```

# 感想
自分の中でプロパティ、メソッド、関数の呼び方とメソッドと関数を混同していたところがあった。
基礎的なところを曖昧にするといつか詰みそうなので合間合間で復習せねばと思った。
Java Silver 合格した時の話

はじめに
---
2023/04/03にJava Silverを合格した時の話。
自分は今、WEBアプリ開発プログラマーになるために、職業訓練校でWEBアプリ開発について学んでいます。
<img width="300" alt="スクリーンショット 2023-05-29 125119.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3248215/389ecb26-83db-7242-3251-a6a860e4e6af.png">

なぜ受験したか
---
技術をつけるためと、就活の際に自分が学んできたスキルを証明するためにJavaSilverを受験してみようと思いました。

やった勉強法
---
職業訓練校で、スッキリわかるJava入門をやっていたので、ある程度の基礎はやっていました。
<a href="https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BJava%E5%85%A5%E9%96%80-%E7%AC%AC3%E7%89%88-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%B8%AD%E5%B1%B1%E6%B8%85%E5%96%AC/dp/4295007803/ref=sr_1_1?adgrpid=71421259606&hvadid=649636524139&hvdev=c&hvlocphy=1009717&hvnetw=g&hvqmt=e&hvrand=2098838683405014893&hvtargid=kwd-419849975203&hydadcr=1795_13591167&jp-ad-ap=0&keywords=%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA+%E3%82%8F%E3%81%8B%E3%82%8B+java+%E5%85%A5%E9%96%80&qid=1685330225&sr=8-1">スッキリわかるJava入門</a>

<img width="200" alt="81O50g96bwL._AC_UF1000,1000_QL80_.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3248215/0b194296-3861-62be-b73f-fb7d274bd900.jpeg">

JavaSilver黒本と呼ばれる本を4.5周して、基礎をしっかり固めていきました。
<a href="https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Java-SE-11-Silver%E5%95%8F%E9%A1%8C%E9%9B%86-1Z0-815/dp/4295007625/ref=sr_1_1?keywords=java+silver+%E9%BB%92%E6%9C%AC&qid=1685330597&sprefix=Javasil%2Caps%2C263&sr=8-1">JavaSilver黒本</a>

<img width="200" alt="1118101186-520x.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3248215/c514ca86-137a-c6b4-056c-9cb5ba3d6425.jpeg">


oracleが主催している、Java Programmer, Silver SE 11 試験対策ポイント解説セミナーを1回受講しました。
<a href="https://go.oracle.com/LP=136383?elqCampaignId=434347">oracle　セミナー</a>
<img width="300" alt="スクリーンショット 2023-05-29 125521.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3248215/186da3ee-a7cd-fedd-ea60-73a894c2bdf1.png">

分からない箇所は、黒本著書の方のYouTubeを見て理解を深めていきました。
<a href="https://www.youtube.com/channel/UC42DlV-0RDb6fJ8A3IbAang">やさしくない！？ Java</a>
<img width="300" alt="スクリーンショット 2023-05-29 125849.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3248215/3a8ef18f-8e85-315c-0bd4-8a2fdfb1294e.png">


勉強時間は平日1～2時間、土日は、3～5時間ほどの勉強で1ヶ月ほど勉強して取得しました。



次の勉強に活かす事
---
他の方の合格記事をみても書いてますが、1周目に時間をかけすぎないことが大事だと思います。
なぜかというと、やはり1周目はとても難しく、解説を読んでも理解ができないことがあります。
その時に長考してしまい、気持ちが折れそうになったりしました。
分からないことは、分からないと割り切り参考書を進めていくうちに、分かってくることもあったので、やはり1周目は「こんな問題がでるんだ」程度の気持ちで挑むのが自分は大事だと思ったので、これからの勉強でも、臨機応変に勉強していけたらいいなと思いました。

最後に
---
これからも色々な勉強をしていく中で、分からないことが出てくると思います。
その時、どうしてもわからないことは、あまり考えこみすぎずにネットで調べたり、学校の友人などに聞いて、理解を深めていきたいと思いました。
アプリ作成にあたって参考になったYoutubeチャンネル

プログラミングの勉強をするにあたって、
私がよく参考にさせて貰ってるチャンネルです。

# Python プログラミング VTuber サプー
https://m.youtube.com/channel/UC5Kgc_HNzx4GJ-w4QMeeKiQ

### ＜参考＞Python WEBアプリ作成 Flask入門
https://youtu.be/EQIAzH0HvzQ

取り扱いは、ほぼほぼPythonに絞られていて、
Pythonの範囲では幅広く動画を扱って
いるように思います。
個人的にはわかりやすく、いつも参考に
させてもらってます。


# クライン【KLeIn】
https://m.youtube.com/channel/UCI2HUZx-Ch6oc96o7BQ9JLQ

### ＜参考＞EC2とDockerでHello Worldしよう
https://youtu.be/HvrIPQ77xRY

AWS EC2周りでつまづいて
どうにもならなかったところを救ってもらった
救世主。
こちらの方は特にPythonという訳ではなく、
幅広く扱っていそう。
今後、活用させていただこうと思ってます。
いつも使ってるMaterializeの紹介(簡単に)

# はじめに
どうもAtsu1209です♪
今回は「CSSがめんどくさいのでMaterializeつかいます」といって使ってる
Materializeについて簡単に紹介していきたいと思います
今回紹介する機能はほんの一部です。

# Materializeとは
Materializeとは、cdnサーバーを経由してURLを指定して、
外部CSSを使用できるツールです。すごく便利!!!!!
# 使い方
使い方は簡単で、タグに指定のクラスをつけることで、使えます。
~~~html:main.html
<body class="red"></body>
~~~
 `class=red`でページ全体の背景が赤色になります。
また、
~~~html:main.html
<body clas="red write-text"></body>
~~~
とすることで、背景色が赤文字を白色にすることができるようになります。
また、`red-text`など、背景だけでなく文字の色も変えることができます。
# めちゃくちゃ使えるbtn
次に僕が一番使っているクラス `btn`を紹介します。
同じようにクラスをつけるだけです。
~~~html:main.html
<button class="btn">button</button>
~~~
これで、いい感じのデザインのボタンになります。
`input`のsumbitやテキストの`span`につけることもできます。

### flow-text
`flow-text`を使えば、少し大きく太くはっきりとした文字がかけます。

# 最後に
materializeには他にもたくさんの機能があるので、ぜひ自分で調べて
使ってみてください。今回は私がいつも使っているほんの一部の機能を
紹介してみました。
現状

今年（2023/01）入ったくらいから業務で
VBAを積極的に使い始め、プログラミング、
開発に興味を持ちました。

Pythonを学び始めたのが3月頃で、
VSCodeでの開発環境を構築。

Excel周りの業務効率化アプリに始まり、
ようやくFlaskでサンプルレベルのWEBアプリを
作成できるようになり、AzureAppServiceで
公開することができるように。。

HTML/CSSは以前仕事で触っていたため、
まったくの0からという訳ではなかったですが、
これだけでもなかなか苦労してしまいました。

今はより仕事に結びつきそうな
Django、Docker、AWSを用いて
もっと実用性のあるアプリを作成中です。

･･･というような自己紹介でした。
リストの括弧を出力しない簡単な方法

## 括弧が邪魔で提出できないんだが？

paizaの問題に慣れていないため課題の通りに処理するコードはかけても出力でうまくいかなかった

```python
sample_list = [1,2,3,4,5]
print(sample_list)

>> [1,2,3,4,5]
```
括弧を外さないと正しい答えとして認識されない。

ここで*を出力したいリストの前に明記する


```python
sample_list = [1,2,3,4,5]
print(*sample_list)

>> 1 2 3 4 5
```

知らなかった。。。
JSTQB（ソフトウェアテスト技術者資格）の勉強体験記

# はじめに
みなさま、はじめまして！
Ayumiと申します。

仕事では、ソフトの品質評価→金融系業務システム開発→公共事業のシステム開発と携わってきました（現在6年目）。

現在は進捗管理やプロジェクトの情報分析などに関わっており、中身を触る機会がほぼ無く、コーディングは記憶の彼方に行ってしまいました…

しかし、品質評価をやっていた頃に取ったJSTQBという資格が活きると感じる瞬間が業務中にちょくちょくあります。
知っている人が少ない（体感）資格ではありますが、評価以外の開発業務でも役立つ知識がいろいろあるので、
特にソフトウェア開発に携わっている方にはおすすめです:information_desk_person:
資格勉強の体験談をシェアさせていただくので、これからこの資格を取ろうかなと考えている方にも、少しでも参考になれば幸いです。


# この記事の読者対象
・JSTQB資格初学者
・ソフトウェアテストのスキル向上に興味のある方
・ソフトウェア開発を行っている/興味のある方


# JSTQBとは？

組み込み等のテスト評価の分野ではわりとメジャーな資格かと思います。
私がいた現場でも、新卒1〜3年目の若手に対して
　「まずはJSTQBのFoundation Levelを取ろう！」
という空気があり、先輩たちは基本的にみんな取得していました。

* JSTQBとは？
JSTQB（Japan Software Testing Qualifications Board）という運営組織が認定している、テスト技術者の資格。
誰でも受験できる **Foundation Level** と、FL合格者で業務経験3年以上という条件をクリアすれば受験できる **Advanced Level** の、大きく2種類があります。
参照：[公式サイト](https://jstqb.jp/index.html)


ただ、受験料が22000円（税込）と高額で、当時新卒１年目だった私には衝撃価格でした。
当時の会社は「資格は自己研鑽のために自主的に受けるもの」というスタンスだったので、自腹。
ですがそのおかげ？で、「絶対に受からねば…！」と真剣に勉強に取り組むことができたので逆に良かったです。（受かって本当に良かった:joy:）


# 勉強方法
基本的には **シラバス**（参考書） と **テス友**（アプリ） で勉強しました。


・[参考書](https://www.amazon.co.jp/ソフトウェアテスト教科書-JSTQB-Foundation-第4版-シラバス2018対応/dp/4798160660)（ちょっと良いお値段ですが絶対に落ちたくなかったので買いました）
・[テス友アプリ](https://www.qbook.jp/info-testomo/)


通勤で片道45分ほど電車に乗っていたので、その時間を利用して試験1ヶ月前ぐらいから始めました。
（とはいえ22時ごろまで残業する毎日だったので、よく参考書を開いたまま爆睡していました……）

最初の頃こそ「参考書を1章読んで重要そうな箇所にはマーカーで線を引きアプリをやる、わからないところは参考書に戻る」と丁寧に進めていたのですが、
ある時から参考書を開いた途端に寝落ちるという負の習慣（逃避？）に悩まされ、また、座れなかった時に混雑した通勤電車で本を広げることにも抵抗を感じ、途中からはひたすらアプリで問題演習をしました。

ですがこれは、テスト評価のチームに配属されて2〜3ヶ月目の新人（文系出身の私）がやっていた方法であり、
個人の感覚ですが、ソフトウェアテストの実務経験が2〜3年ある方なら、参考書が無くてもある程度経験則で正解できそうな問題が多いです。
ただ、体系的に知識を学ぶという意味で、経験のある方にも非常におすすめできます。


どんな問題が出るか気になった方、公式サイトにサンプル問題が載ってますのでぜひ参照してみてください。
[Foundation Levelサンプル問題](https://jstqb.jp/syllabus.html#sample_foundation)


# 資格勉強を通して身についたこと
テスト技術に関する知識がつくのはもちろんですが、テスト業務にかかわらず、広い意味で以下のような学びがありました。
* 論理的に妥当性や網羅性を捉える視点
* 適切な手順を踏んでより良いアウトプットを出す組み立て方
* 日本語処理能力（試験問題でひたすら文章を読むため）


# 最後に
この勉強法でやってみて、最後は直前の数日で詰め込みましたし正直ギリギリの合格でした:joy:
あまり実務経験がなく初学者の方は、
私のようにまとまった勉強時間が取れない場合は1ヶ月よりもっと前から取り組んだ方が余裕が持てると思います。


私は今はWebシステム開発の現場におり、ソフト評価とは全く違う分野なのですが、
この資格取得を通じて、開発を進める上での考え方やベースとなる知識を身につけられたのでとてもよかったと思っています。
基本/応用情報や◯◯スペシャリスト、といった数あるIT系資格の中でもマイナーな部類かもしれませんが、スキルアップしたい方にはぜひおすすめです！


# ひとこと
エンジニアってどうしても、専門性の高い職種であるが故に視野が狭くなりがちですが、個人的には視野を広げて、職場以外のエンジニアとも交流していきたい想いがあります。
TECH WOMAN KANSAIは、関西を拠点とする女性エンジニアがオンライン・オフラインで交流するコミュニティです:cherry_blossom:
ご興味のある方はぜひ一度チェックしてみてください！
[TECH WOMAN KANSAI](https://tech-woman-kansai.connpass.com)


# 参考文献
https://jstqb.jp/index.html

https://www.qbook.jp/column/1168.html

https://www.juse.or.jp/sqip/qualification/jstqb/advanced.html
Flutter/Riverpod ConsumerWidgetやWidgetRefが認識しない原因

# 処方箋
Riverpodを入れたのに、ConsumerWidgetやWidgetRefだけなぜか認識しない場合以下のことを確認してくささい。

このライブラリを間違えてインストールしてませんか
NG↓

https://pub.dev/packages/riverpod

<br>
<br>

こちらに入れなおしてください
OK↓

https://pub.dev/packages/flutter_riverpod
ソフトウェア開発で重要な原則について改めて調べてみた

# はじめに
最近、人のコードを見る機会が増え、色々と気づくことがあったのでもういちど基本原則から学び直そうと思い、ソフトウェア開発で重要とされている原則を調べてみました。
その中でも意外と見落としがちと感じた原則２つをまとめます。
ここではあくまで初心者に向けての説明になるので詳細な解説は省きます。
## DRY原則
DRY原則は、「Don't Repeat Yourself」の略で、同じ情報を二度書かないという意味です。この原則は、情報の重複を避けることで、コードの量を減らし、保守性を向上させることを目指しています。
現場ではコピペ実装や、納期に追われる実装をしていたりするとよく発生するのでこれを意識して実装することは非常に重要だと思います。
### DRY原則の適用例
以下に、Go言語でDRY原則を適用した例を示します。
```go
// DRYを適用しない例
func add(a int, b int) int {
    return a + b
}
func subtract(a int, b int) int {
    return a - b
}
// DRYを適用した例
type Calculator struct {
    a int
    b int
}
func (c *Calculator) add() int {
    return c.a + c.b
}
func (c *Calculator) subtract() int {
    return c.a - c.b
}
```
コードのみで見るとかなり単純な原則ですね。
説明にもありますが、「情報の重複を避ける」を目的としているのでコードだけでなく、ドキュメントやDBスキーマについても当てはまります。
チーム開発の際は実装部分や方針などあらかじめ擦り合わせておき、その上でこの原則に則って実装することが大切だと感じました。
## KISS原則
続いてKISS原則です。
KISS原則は、「Keep It Simple, Stupid」の略で、コードをできるだけシンプルに保つことを目指しています。この原則は、複雑さがソフトウェアのバグを引き起こし、保守性を低下させるという考えに基づいています。
また「現在の機能に必要な実装のみを行う」という意味もあります。
今後実装するならあらかじめ組み込んでおこう。と聞くと一見するといいように聞こえますが、現状使われることのないコードが増えることはコードの可読性を低下させる恐れがあり、思わぬバグにつながる可能性があります。

実際の現場では急な仕様変更等が発生した場合、既存の実装からできるだけ崩さずに実装することが多いのでコードが複雑になりがちです。
筆者も解読に時間が必要なSQLや謎な処理をしているコードをしばしばみてきたのでこの原則はあらためて重要だなと感じました。


### KISS原則の適用例
以下に、Go言語でKISS原則を適用した例を示します。
```go
// KISSを適用しない例
func calculate(a int, b int, operation string) int {
    switch operation {
    case "add":
        return a + b
    case "subtract":
        return a - b
    default:
        panic("Invalid operation")
    }
}
// KISSを適用した例
func add(a int, b int) int {
    return a + b
}
func subtract(a int, b int) int {
    return a - b
}
```
こちらもこのレベルだとすぐに理解できますが、実際のプロジェクトや実装者がいないシステムなどでは
「ん？なにこれ、どういうこと？」
みたいなことは多々あります。
その度に時間をかけるわけにもかないので3日後の自分が理解できなさそうであれば一度立ち止まり、俯瞰して見ることが大事かもしれません。
# まとめ
ある程度経験を積んでから改めて原点回帰してみると「意外と守られていない現場もあったなぁ」と感じます。
かなり基本なところなのでこの記事から知る人は少ないと思いますが初めて知った人も、知っていた人も改めてこの原則を守り、**後世につなぐ**システムを作りましょう！！
Gitを理解するためのアドバイス

### Q. Gitで何をしているかのイメージを掴みたいんだけど、何かアドバイスありますか？
### A. Gitを理解するためのアドバイスは以下の通りです

1. **基本的なコンセプトを理解する**: Gitはコミットと呼ばれるスナップショットに基づいて動作します。コミットはファイルの変更の集合で、一連のコミットはプロジェクトの歴史を形成します。

2. **基本的なコマンドを覚える**: `git init`、`git add`、`git commit`、`git push`、`git pull`、`git clone`、`git checkout`、`git branch`などの基本的なGitのコマンドに慣れることは重要です。

3. **実践的な経験を積む**: 実際にGitを使用してプロジェクトを管理することで、理解が深まります。小さなテストプロジェクトを作成し、変更をコミットして、新しいブランチを作成し、それらをマージするなどを試すと良いでしょう。

4. **リモートリポジトリを理解する**: Gitはローカルリポジトリ（あなたのコンピュータ上のリポジトリ）とリモートリポジトリ（通常はGitHubなどのインターネット上のサービスにホストされているリポジトリ）の両方で動作します。これらのリポジトリ間で変更をプッシュ（送信）したりプル（取得）したりすることを理解することは重要です。

5. **Gitのベストプラクティスを学ぶ**: Gitフローと呼ばれる一般的な作業フローを学ぶと、チームでの共同作業がスムーズになります。

6. **エラーメッセージを理解する**: Gitがエラーメッセージを出力した場合、それが何を意味し、どのように解決すればよいかを理解することが重要です。

これらの要点を理解すれば、Gitで何が行われているかの基本的なイメージを掴むことができるでしょう。
また、インターネット上には多くのGitチュートリアルが存在しますので、それらを利用すると理解が深まると思います。

### 一般的なガイドライン(ブランチ戦略とその他の慣習)
Gitの使用方針を作成する際には、プロジェクトの目的、チームの規模、メンバーの経験レベル、作業の頻度などを考慮する必要があります。一つのアプローチがすべてのシチュエーションに適合するわけではありませんが、以下に一般的なガイドラインとして役立つかもしれないブランチ戦略とその他の慣習を提案します。

**ブランチ戦略**

1. **Master(Main)ブランチ**: このブランチはプロジェクトの最新の安定版を示すもので、一般的には本番環境にデプロイされます。このブランチへの直接的な変更は避け、フィーチャーブランチからマージされた安定したコードのみを含むようにします。

2. **Developブランチ**: このブランチは開発のためのブランチで、新機能の統合やバグ修正が行われます。一般的には開発環境にデプロイされます。

3. **Featureブランチ**: 新しい機能やバグ修正のためには、個別のフィーチャーブランチを作成します。これらのブランチは直接developブランチから派生し、作業が完了したらdevelopブランチにマージされます。

4. **Hotfixブランチ**: 緊急のバグ修正のためにはhotfixブランチを作成します。これらのブランチは通常、masterブランチから派生し、修正が完了したらmasterブランチとdevelopブランチの両方にマージされます。

5. **Releaseブランチ**: 新しいプロジェクトバージョンをリリースするためには、releaseブランチを作成します。このブランチはdevelopブランチから派生し、リリースの準備が整ったらmasterブランチにマージされ、その後タグ付けされます。

**その他の慣習**

1. **コードレビュー**: ブランチがマージされる前には、少なくとも一人の他のメンバーがコードレビューを行い、その変更を承認するようにします。

2. **コミットメッセージ**: 明確で理解しやすいコミットメッセージを書くようにします。変更の目的と影響を明示的に説明します。

3. **Pull Request(PR)**: ブランチをマージする前に、PRを通じて変更を共有します。PRの説明には、変更の目的、実装の詳細、テスト手順などを記載します。

4. **定期的な同期**: メンバーは定期的にリモートの変更を自分のブランチにpullして、コンフリクトを早期に検出し解消するようにします。

5. **CI/CDの統合**: コード品質を確保し、自動化を向上させるために、継続的インテグレーション（CI）と継続的デプロイメント（CD）のツールを統合します。

これらは一例であり、チームの具体的な要件と目標に基づいて調整が必要です。また、チームが方針に慣れるまでのトレーニングと継続的なフィードバックも重要です。

### Gitを初めて使う人々が陥りがちな一般的なミスと誤解

1. **全てを一つのコミットに詰め込む**: コミットは小さく、特定の変更に集中したものにするべきです。あまりに多くの変更を一つのコミットに詰め込むと、そのコミットが何をしているのか理解するのが難しくなります。

2. **コミットメッセージが不明確**: コミットメッセージは、そのコミットが何を変更し、なぜ変更したのかを明確に伝えるべきです。"Fix bug"や"Update file"といった曖昧なメッセージではなく、具体的な情報を含めることが重要です。

3. **ブランチの誤解**: ブランチは作業を分離し、コードを整理するための強力なツールですが、初心者はしばしばすべての作業をmaster（またはmain）ブランチで行ってしまいます。これはリスクが高いです。代わりに、各タスクや機能ごとに新しいブランチを作成し、その後masterにマージするという流れを理解し、実践することが重要です。

4. **変更をpushせずにpullする**: 自分のローカルリポジトリの変更をpushせずにpullを行うと、マージコンフリクトが発生する可能性があります。これはコードの両方のバージョンを手動で解決する必要があるため、時間がかかる場合があります。

5. **バージョン履歴を改ざんする**: `git commit --amend`や`git rebase`などのコマンドを使って過去のコミットを変更すると、バージョン履歴が改ざんされ、混乱を招く可能性があります。これらのコマンドは慎重に使用する必要があります。

6. **変更を追跡しない**: `.gitignore` ファイルを適切に設定しないと、ビルドファイルやログファイルなど、バージョン管理すべきでないファイルがリポジトリに追加される可能性があります。これらのファイルはリポジトリを膨らませ、混乱を招く可能性があります。

これらのミスと誤解を避けるためには、Gitの基本的な概念を理解し、具体的なコマンドの使い方

を学ぶことが重要です。また、チーム内でGitのベストプラクティスを共有し、コードレビューを通じて互いに学び合うことも有用です。
マイグレーションファイルのカラムの変更

はじめに
日々の勉強をアウトプットしていきたいと考えております。自分なりの理解した表現でアウトプットしていくので、初学者のため、誤りもあるかと思います。その際はご指摘頂けると幸いです。

マイグレーションファイルのカラムを変更する場合の手順について、
１：rails db:rollbackを実行する。
２:マイグレーションファイルがdownになっているかをrails db:migrate:statusを実行し、確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/bc9ea42a-678f-64c8-7e0f-a6b261496fa7.png)
３：マイグレーションファイルがdownになっていれば、カラムの修正が可能である。
４：カラムを修正したら、rails db:migrateを実行する。
５：マイグレーションファイルがupになっているかをrails db:migrate:statusを実行し、upになっているかを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/4eec1216-c364-771b-76a5-70e7992a0e08.png)
６：dbディレクトリ内のschema.rbを確認し、マイグレーションファイルのログを確認し、カラムが修正できているかを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/8c7a12a6-8224-8403-1369-a3bf5799bcb9.png)
※マイグレーションファイルの下から２つ目を修正したい場合はrails db:rollbackを2回実行すると下記画像のように２つのマイグレーションファイルがdownになっているのが確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/d4cc7c28-4458-f046-e9a2-03da647e2c85.png)
()と、遅延環境変数(＝enabledelayedexpansion)

## バッチの変数は癖が強いです。

for文とかで、変数を変化させながら処理するバッチ作ったことありますか？

作った人は、「なんでやねん！」と思ったことが、あるんじゃないかと思います。

それは、()でくくった中に変数があると、実行中に変化しない。
というバッチの変数の不思議な特性があるためかもしれません。

## 遅延環境変数という難しそうな名前のおまじない、

どういうことか、実例を挙げてみます。
下記を実行すると、
a=100にしたはずなのになってない。
a=500の方は、ちゃんと500になってる。

そうなんです、バッチの変数は()の中にあると、()内のコマンドが動き始める時点に変数が確定するんです。
()内でも変わるようにしたいときは、
setlocal enabledelayedexpansion
を宣言したうえで、変更したい変数を%でなく、!で囲みます。
500の方は、変数を!で囲んでいるからちゃんと表示できました。

これは、for文の中などでも起こりますので、要注意です。

```bat:test.bat
@echo off
setlocal enabledelayedexpansion

set a=1

echo a=?
(set a=100
echo %a%)
echo.

echo a=?
(set a=500
echo !a!)
echo.
```
cscの作法 その320

# 概要
cscの作法、調べてみた。
練習問題、やってみた。

# 練習問題
クローラーを実装せよ。

# サンプルコード

```


using System;
using System.IO;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

namespace App 
{
	class test {
		static void Crawler1(string url) {
			ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
			Encoding enc = Encoding.GetEncoding("UTF-8");
			WebRequest req = WebRequest.Create(url);
			WebResponse res = req.GetResponse();
			Stream st = res.GetResponseStream();
			StreamReader sr = new StreamReader(st, enc);
			string txt = sr.ReadToEnd();
			sr.Close();
			st.Close();
			Regex re0 = new Regex("title(.*?)/title");
			Match m = re0.Match(txt);
			if (m.Success) 
			{
				Console.WriteLine(m.Groups[1].Value);
			}
		}
		static void Crawler0(string url) {
			ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
			Encoding enc = Encoding.GetEncoding("UTF-8");
			WebRequest req = WebRequest.Create(url);
			WebResponse res = req.GetResponse();
			Stream st = res.GetResponseStream();
			StreamReader sr = new StreamReader(st, enc);
			string txt = sr.ReadToEnd();
			sr.Close();
			st.Close();
			Regex re0 = new Regex("a href=\"https://qiita.com(/.+?)\" ");
			MatchCollection mc = re0.Matches(txt);
			//foreach (Match m in mc) 
			{
				Console.WriteLine(mc[1].Groups[1].Value);
				Crawler1("https://qiita.com" + mc[1].Groups[1].Value);
			}
		}
		static void Main() {
			Crawler0("https://qiita.com/");
		}
	}
}




```


以上。
SPSS Modeler ノードリファレンス 5-21 Statistics モデル

# 5-21 Statisticsモデル[Statisticsタブ]
![194_161Statsモデル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d43dce4e-17af-acd4-babc-6d18c7a230ac.png)

## 1.ノードの目的
SPSS StatisticsのモデルをModelerから呼び出します。
（SPSS Statisticsのライセンスが必要です）

## 2.解説動画（60秒）

<iframe width="560" height="315" src="https://www.youtube.com/embed/mgh6x6rsxAM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

## 3.クイックスタート

### Statistics連携のための事前準備

メニューから[ツール]>[オプション]>[ヘルパーアプリケーション]を選択し編集します。

![スクリーンショット 2023-02-20 14.56.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/a839447d-b911-ff80-357b-332dbc2a8837.png)

Mac版は以下を参照ください。

https://qiita.com/Makimaki2020/items/c3cd57cfb5da78e38e6f#:~:text=Big%20Sur%2011.4-,SPSS,-Modeler%E3%81%A8SPSS



Windows版は以下の通り設定します。

![image (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/57aaf04a-1c3c-5348-d761-b7664f3f72d6.png)

＊Modelerのバージョンがリリースされた時点でのStatisticsの最新バージョンに原則対応しています。

### Statisistisモデルの連携

IBM SPSS Statistics 29.0.1で線型回帰モデルに搭載されたPRESS（残差平方和）を求めます。

＊入力データは[5.参考情報]からダウンロードできます。
![スクリーンショット 2023-05-29 10.44.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/a66ed7b7-9430-9f06-4b3c-bb85132b941f.png)

ストリームは以下の通りです。
![スクリーンショット 2023-05-29 10.46.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/b7e85e00-4e39-224b-fdcb-f3538bea6d82.png)

[Statisiticsモデル]ノードを編集します。メニューから[変換]の[欠損値の置き換え]を選択します。

![スクリーンショット 2023-05-29 10.48.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/fe9d2db8-c293-011e-4824-f722ee1719c9.png)

Statisiticsのダイアログが表示されますので、以下のように設定し[OK]します。

![スクリーンショット 2023-05-29 10.50.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/dab1e4b3-e25b-3d41-56d8-f6e376ca0808.png)

実行するSPSSシンタックスが自動で記述されます。[OK]を押します。
![スクリーンショット 2023-05-29 10.51.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/aefdd04a-03b0-3bd5-2194-a13dd6210d2c.png)

モデルが生成されます。
![スクリーンショット 2023-05-29 10.52.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0b767b73-5895-a824-8f7b-1406b82d09ed.png)

モデルナゲットを編集します。赤枠がPRESSです。2023年5月現在誤約ですが残差平方和を示しています。![スクリーンショット 2023-05-29 10.55.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/985a80bb-d08b-a922-4739-b41df50b8b00.png)



## 4.Tips

GEEを除く予測モデルはすでにModelerに搭載済みです。コレスポンデンスなどの分類系アルゴリズムはStats加工ノードを利用するか以下のPython連携でも実現可能です。

https://learning.riverf.com/archives/457


## 5.参考情報

#### 利用データ

右クリックでリンク先を保存してください。

https://github.com/yoichiro0903n/blue/raw/main/car_sales.sav

#### ModelerとStatsの連携に触れている　記事

https://www.ibm.com/blogs/solutions/jp-ja/life-spss-12/

#### ノードのヘルプ

https://www.ibm.com/docs/ja/spss-modeler/18.3.0?topic=nodes-statistics-model-node

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/items/4bf813e6cba84b2a1008

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee
Pythonの割り算でエラーメッセージの出方が微妙に違う

### 本記事の背景
あるサイトの挑戦問題において、0割エラーにおいて出力されるエラーメッセージに微妙な違いがある為、本メモを残す

### Pythonの割り算
まずは正解のソースコードを以下に示す
```python
n = int(input())

for n1 in range(0,n):
    a,b = map(str, input().split())
    try:
        print(int(a)//int(b))
    except (ZeroDivisionError, ValueError) as e:
        print("Error Code:", e)
```
入力値
```terminal
3
3 0
3 $
3 1
```
出力結果
```terminal
Error Code: integer division or modulo by zero
Error Code: invalid literal for int() with base 10: '$'
3
```
引っかかったポイント
```python
try:
    print(int(a)/int(b))
except (ZeroDivisionError, ValueError) as e:
    print("Error Code:", e)
```
上記のソースコードだとエラーメッセージが以下になる
```terminal
Error Code: integer division by zero
Error Code: invalid literal for int() with base 10: '$'
3
```
「integer division or modulo by zero」と「integer division by zero」という微妙に違っていた。
実は、Pythonで割り算をする場合
a/b →　「商＋余り」を含めて小数で出力する
a//b → 「商」のみ出力する
以上を押さえておくと良いかと思います。
Google Colaboratoryでpythonのバージョンを変更する

# 結論
pythonの任意のバージョンをインストール後、`update-alternatives`コマンドでpythonのバージョンを切り替えることができます。

# 手順
※pythonの3.5をインストールするときを例に挙げます。数値は適宜修正ください。

1. Google Colab上のセルに以下のコマンドを記述して実行し、python3.5をインストールします。
    ```
    !sudo apt install python3.5
    ```
1. 続いてセル上に以下のコマンドを記述して実行し、`update-alternatives`コマンドでバージョン切り替えの候補に追加します。
    ```
    !sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
    ```
1. セル上に以下のコマンドを記述して実行します。
    ```
    !sudo update-alternatives --config python3
    ```
1. 実行したセルの出力結果の右下の部分をクリックすると入力欄が表示されます。出力部分にあるpythonのバージョン一覧を参考にして変更したいpythonのバージョンのSelection番号を入力してエンターキーを押下します。
    ![colaboversion01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3071987/44d651ab-b499-c561-cc1f-3359f88ac2cd.png)
1. セル上に以下のコマンドを記述して実行し、pythonのバージョンを確認します。
    ```
    !python --version
    ```
    ![colaboversion02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3071987/c75877ce-3518-49e7-d128-33ac3cfae7c9.png)
1. 変更したpythonにはpipがインストールされていません。以下のコマンドをセル上に記述して実行することでpipをインストールします。
    ```
    !sudo curl https://bootstrap.pypa.io/pip/3.5/get-pip.py -o get-pip.py
    !python get-pip.py
    ```
pythonのバージョン変更の手順は以上です。
ただし、以下の2つの点に注意してください

:::note warn
- ランタイムのpythonバージョンを変更するものではないです。そのため、セルにpythonコードを書いて実行しても変更したpythonのバージョンでは実行できません。変更したpythonバージョンで実行する一例として作成済みのpyファイルを実行する方法があります。pyファイルを実行する方法については以前の私の記事を参考にしてみてください。
    - [GooleColaboratoryでpyファイルを実行する](https://qiita.com/76r6qo698/items/6279035a16d1548c8ff8)
- Google Colaboratoryではいくつかのモジュールが既にインストールされていますが、バージョンを変えた後はそれらも必要に応じてインストールする必要があります。
:::

以上です。

# 参考

https://qiita.com/mihara-shoko/items/0e5375644004a8bfccd5

https://qiita.com/seigot/items/02105181679f0b8924e6

https://ja.stackoverflow.com/questions/92544/google-colaboratory-%E3%81%A7-python-%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%923-7%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%9F%E3%81%84
windowsサーバー　バッチ設定方法

# バッチ設定方法
1.「スタート」をクリックし、アプリの一覧を表示します。
「W」欄の「Windows管理ツール」をクリックして、「タスクスケジューラ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/b98e91de-897f-84bc-3373-2ef48059d495.png)

2.「タスクスケジューラ」が表示されます。
「操作」をクリックし、表示された一覧から「基本タスクの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/0c101ded-c742-407e-6500-af2f19678827.png)
3.基本タスクの作成ウィザード」が表示されます。
「名前」ボックスにタスクの名前を入力して、「次へ」をクリックします。
ここでは例として、「ディスククリーンアップ」と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/5e87b089-2dc7-77e0-77ed-2b10f3147459.png)
4.タスクを実行する開始時期をクリックして、「次へ」をクリックします。
ここでは例として、「毎週」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/142feaa0-127e-29aa-6f45-c2c421a7c636.png)
5.「開始」ボックスにタスクを開始する日時を入力し、「間隔」ボックスに週単位の間隔を入力して、タスクを実行する曜日にチェックを入れて、「次へ」をクリックします。
ここでは例として、毎週月曜日12:00に開始するように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/93ea0dd5-a495-28b5-8939-77ee9d7f4c8a.png)

6.「プログラムの開始」をクリックして、「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/79bd0b74-65b2-18a5-db49-c3c3c73b6d36.png)
7.「プログラム/スクリプト」ボックスの右側の「参照」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/0204517d-c2ad-cd6b-0cae-f65008954897.png)
8.実行したいプログラムを選択または入力して、「開く」をクリックします。
ここでは例として、「ファイル名」ボックスに「cleanmgr.exe」と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/07918d13-d8af-8a2a-a34b-8b915a78a27a.png)
9.「プログラム/スクリプト」ボックスに実行したいプログラムが表示されていること確認し、「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/9ca18ec6-1301-aad0-acfe-a8b3e290b92f.png)
10.表示されている内容に誤りがないことを確認して、「完了」をクリックします。
※ 修正が必要な場合は、「戻る」をクリックして前の手順に戻り修正します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/5dd740c9-bea3-9414-36dd-58d5fe0d5aa8.png)
11.「タスクスケジューラ」画面に戻ります。
画面左側の「タスクスケジューラライブラリ」をクリックし、作成したタスクが追加されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/42f75585-13b9-1778-6abb-1912e6971fb2.png)

# 注意点
下記のようなバッチの場合、手順7.の開始「オプション」をルートパスに設定する必要がある
main.bat
```
call a.exe
start /b b.exe
call c.exe
```

# 相対パス時の手順
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/a6896dc1-31e8-7fe1-f6e7-2581e4e56596.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/4c7f6d4d-d29f-193b-8e5e-e1dc90ec9d12.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/11ee4340-88d2-cdbd-6659-21a0630d9012.png)

# 参照サイト
https://support.lenovo.com/jp/ja/solutions/ht506528


https://se-abeaver.com/taskschd-batch/#:~:text=%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%A9%E3%81%A7%E8%A9%B2%E5%BD%93%E3%82%BF%E3%82%B9%E3%82%AF,%E3%81%97%E3%81%AA%E3%81%84%E3%82%B1%E3%83%BC%E3%82%B9%E3%81%8C%E5%A4%9A%E3%81%84%E3%81%A7%E3%81%99%E3%80%82
Javaで関数を変数や引数に入れる

# Javaで関数を変数や引数に入れる
　Javaでコーディングしているとき、関数そのものを変数や引数に入れたいときがあります。インターネットで情報を探すと、ConsumerやFunctionの解説がたくさん見つかります。ですが、コーディングしている最中にもっとも欲しいものは何でしょう。私は、下記のようなコピペしたらすぐに動くコード片が欲しいです。特に、戻り値の有無、引数の有無で細かいコンパイルエラーに悩まされるのは避けたいところです。なので、関数を変数や引数に入れるとき、関数の戻り値の有無、引数の有無の4通りのバリエーションのコード片を書き留めておきたいと思います。

```Java
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;

public class Main {
    public static void main(String[] args) throws Exception {
        /* error: non-static variable this cannot be referenced from a static context
           とか言われないようにMainコンストラクタの中に書きたいことを書く */
        new Main();
    }
    public Main(){
        Job j = new Job(
            (Void) -> { func1();},             /* 戻り値なし、引数なし */
            (Void) -> { return func2();},      /* 戻り値あり、引数なし */
            (param) -> { func3(param);},       /* 戻り値なし、引数あり */
            (param) -> { return func4(param);} /* 戻り値あり、引数あり */
        );
        j.execFunc1();
        j.execFunc2();
        j.execFunc3();
        j.execFunc4();
    }
    
    /* 戻り値なし、引数なし */
    public void func1(){
        System.out.println("void, void");
    }
    /* 戻り値あり、引数なし */
    public Integer func2(){
        System.out.println("return, void");
        return 1;
    }
     /* 戻り値なし、引数あり */
    public void func3(Integer i){
        System.out.println("void, arg" + i);
    }
    /* 戻り値あり、引数あり */
    public Integer func4(String i){
        System.out.println("return, arg" + i);
        return 1;
    }
    
    public class Job {
        private Consumer<Void> func1;            /* 戻り値なし、引数なし */
        private Function<Void, Integer> func2;   /* 戻り値あり、引数なし */
        private Consumer<Integer> func3;         /* 戻り値なし、引数あり */
        private Function<String, Integer> func4; /* 戻り値あり、引数あり */
        
        public Job(Consumer<Void> func1,
            Function<Void, Integer> func2,
            Consumer<Integer> func3,
            Function<String, Integer> func4
        ){
            this.func1 = func1;
            this.func2 = func2;
            this.func3 = func3;
            this.func4 = func4;
        }
        public void execFunc1(){
            this.func1.accept(null);
        }
        public Integer execFunc2(){
            return this.func2.apply(null);
        }
        public void execFunc3(){
            this.func3.accept(1);
        }
        public Integer execFunc4(){
            return this.func4.apply("hoge");
        }
    }
}
```


■株式会社ディマージシェアの情報はこちらから
　・[Organization](https://qiita.com/organizations/dimage_qiita)
　・[会社HP](https://www.dimage.co.jp/)
　・[採用ブログ](https://note.com/dimage/)
Convert Lead 

+ [Converting a Lead - Convert Lead Page](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000QL4pb)

HealthCloudでリードレコードタイプの変換を管理する

リードレコードを変換する場合、個別レコードタイプマッパーを使用して、どのレコードタイプを患者に変換し、どのレコードタイプを他のレコードタイプに変換するかを指定します。

https://help.salesforce.com/s/articleView?id=sf.admin_manage_lead_record_type.htm&type=5


+ リードを商談に変換すると、デフォルトで間違った連絡先タイプとアカウントタイプが設定されます。IEのデフォルトアカウント=はビジネスアカウントですが、デフォルトで個人アカウントに設定する必要があります。

:::note
https://help.salesforce.com/s/articleView?id=000385750&type=1&_ga=2.149257971.479810053.1685322405-1888824673.1605750394
:::

+ [カスタム メタデータ タイプ] をクリックしても、[レコード タイプの管理] が表示されません。新しいカスタム メタデータ タイプの作成のみが可能です。私が探しているものをさらに詳しく説明すると、リードを商談に変換するときに、リードと一致するようにレコード タイプを設定したいと考えています。

これはできないような気がする


+ [CSV ファイルを使用してリード/連絡先レコードの [リード ソースの最新] フィールドを更新する方法](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000QLry6)

:::note
If you only have the email to update Contacts or Leads, I would recommend you use the Data Import Wizard in setup then choose Leads (or Contacts)> Update existing records and make sure you select "Email" in "Match Lead/Contact) by".

One thing though, if more than 1 Lead or contact has the same email address, there is no way for you to know which one will be updated.

連絡先またはリードを更新するための電子メールしか持っていない場合は、セットアップでデータ インポート ウィザードを使用し、[リード (または連絡先)] > [既存のレコードを更新] を選択し、[リード/連絡先の照合] で [メール] を選択していることを確認することをお勧めします。 」。

ただし、複数の見込み客または連絡先が同じ電子メール アドレスを持っている場合、どれが更新されるかを知る方法はありません。
:::
JavaScriptでaxios以外の方法 【HTTPリクエストを送る】



## はじめに

JavaScriptでHTTPリクエストを送るためによく使われるライブラリに`axios`がありますが、ここでは`axios`以外の方法を紹介します。それらは`fetch`APIと`XMLHttpRequest`です。

## Fetch APIを使う方法

`fetch`はブラウザの組み込み機能であり、非常にシンプルなHTTPリクエストを送ることができます。以下に、`fetch`を使用したGETリクエストの例を示します。

```javascript
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
```

POSTリクエストも同様に送ることができます。

```javascript
fetch('https://api.example.com/data', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({key: 'value'}),
})
.then(response => response.json())
.then(data => console.log(data))
.catch((error) => console.error('Error:', error));
```

## XMLHttpRequestを使う方法

`XMLHttpRequest`はより古いブラウザでも対応しているHTTPリクエストを送るためのAPIです。以下に、`XMLHttpRequest`を使用したGETリクエストの例を示します。

```javascript
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data');
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(JSON.parse(xhr.responseText));
  }
}
xhr.send();
```

POSTリクエストも同様に送ることができます。

```javascript
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://api.example.com/data');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(JSON.parse(xhr.responseText));
  }
}
xhr.send(JSON.stringify({key: 'value'}));
```

## まとめ

JavaScriptでHTTPリクエストを送るための方法は、`axios`だけでなく、`fetch`APIや`XMLHttpRequest`など、複数の手段があります。使用する手段は、ブラウザの互換性、コードの可読性、必要な機能などにより選択します。それぞれの方法を理解し、適切に使い分けることが重要です。
TwitterのAPI有料になる

先日Pro版が発表されたのですが、どうでしょう？:eyes:
月70万を払いますでしょうか。

自分の現状は、API v2をアップグレードもしくはダウングレードしたら、capが1500になりますが、なにもしない場合そのままcapが変わらず使え続けます。いつまで使えるかどうかは不明だが、気になってしょうがない。。

これは使っている途中でアップグレード・ダウングレードしたものです。汗！
![2023-05-29_102733.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457744/ff4865b3-4a7b-9acd-832b-84bf9517eb44.png)


これだと、リセットしてそのまま使っています。
![2023-05-29_102923.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457744/6a984f21-211a-aae6-e218-b29b8e33a184.png)
Terraformエラー

# terraform init / terraform plan エラー対応

## 名前制限によるエラー
名前の先頭は文字かアンダースコアである必要がある。

```
% terraform init
╷
│ Error: Invalid resource name
│ 
│   on vpc.tf line 1, in resource "aws_vpc" "1234_my-vpc":
│    1: resource "aws_vpc" "1234_my-vpc" {
│ 
│ A name must start with a letter or underscore and may contain only letters,
│ digits, underscores, and dashes.
╵
```

## 変更前
名前の先頭が数字で始まっていた。

```
resource "aws_vpc" "1234_my-vpc" {
  cidr_block           = "10.0.0.0/16"
  instance_tenancy     = "default"
  enable_dns_support   = true
  enable_dns_hostnames = true

  tags = {
    Name = "1234_my-vpc"
  }
}
```

## 変更後
名前の先頭にアンダースコアを入れた。タグの文字列は数字のままで問題なし。

```
resource "aws_vpc" "_1234_my-vpc" {
  cidr_block           = "10.0.0.0/16"
  instance_tenancy     = "default"
  enable_dns_support   = true
  enable_dns_hostnames = true

  tags = {
    Name = "1234_my-vpc"
  }
}
```
LightGBMで特徴量の数値を1000倍にした場合としてない場合の結果に違いがあるか？

## 目次
- はじめに
- 決定木とは
- データの準備
- 実験
- 結論

## はじめに
yamayafumiteru(https://twitter.com/yamayafumiteru) です。
機械学習でLightGBMを活用するケースをよく見るようになりました。
自分もLighGBMを使う機会があり、決定木は、「特徴量の大小関係を見ているので、値が等倍されても結果が変わらない」ということを目にしました。
本当かな？と疑問に思ったので検証してみることにします。
今回は、標準正規分布に従う乱数のfeature1とfeature2を用意し、片方の特徴量を1000倍した際に結果が変わるかを検証します。

## 決定木とは
決定木とは、分類木と回帰木を組み合わせたもので、ツリーによってデータを分析する手法です。
やりたいことが分類のときは、分類木を使い、やりたいことが数値の予測なら回帰木を使います。

以下の記事がわかりやすかったので画像と説明を引用します。
参考記事)[決定木、分類木、回帰木の意味と具体例](https://mathwords.net/ketteigi)

分類木の例です。
温度と湿度のデータ、および、その日A君が暑いと感じたか暑くないと感じたかのデータが与えられた状況を考えてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304234/63ef8778-461e-284c-be72-64a335c33949.png)
図の１つの点が１日を表します。赤い点はA君が暑いと感じた日、青い点は暑くないと感じた日を表します。
例えば、温度が 27度で湿度が 40％の日は暑くないと感じています。

このデータから、例えば、下図のような温度と湿度がどのようなときに暑いと感じるのか？を表現したツリーを作ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304234/a49391c5-e994-bf53-dc6e-c990be65acb7.png)

この分類木をもとのデータ図に境界線を追加して表現することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304234/adfdeaab-38e4-60b3-2aeb-3e03306acbfd.png)

なお、この例は二値分類ですが、3つ以上のグループの分類問題にも有効なモデルです。

## データの準備
``` python
# ランダムなデータ100件を作成する。
import lightgbm as lgb
import pandas as pd
import numpy as np
from sklearn.metrics import accuracy_score
from lightgbm import plot_tree

# サンプルデータの作成
np.random.seed(42)
df = pd.DataFrame({'feature1': np.random.randn(200), 'feature2': np.random.randn(200), 'target': np.random.randint(0, 2, 200)})
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304234/8df59fe7-b9fe-7add-ad1b-69e10cdbdd51.png)

## 実験
```python
# 特徴量を1000倍しないパターン
df['feature1'] = df['feature1'].values
df['feature2'] = df['feature2'].values

# モデルの構築
model = lgb.LGBMClassifier()

# モデルのトレーニング
model.fit(df[['feature1', 'feature2']], df['target'])

# 決定木の可視化
plot_tree(model, tree_index=0, figsize=(10,10))

# モデルの予測
predictions = model.predict(df[['feature1', 'feature2']])

# 精度の計算
accuracy = accuracy_score(df['target'], predictions)

print('Accuracy:', accuracy)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304234/b0a1b65a-70ff-4794-15e8-905e1481cc91.png)



```python
# 特徴量を片方だけ1000倍する
df['feature1'] *= 1000
df['feature2'] = df['feature2'].values

# モデルの構築
model = lgb.LGBMClassifier()

# モデルのトレーニング
model.fit(df[['feature1', 'feature2']], df['target'])

# 決定木の可視化
plot_tree(model, tree_index=0, figsize=(10,10))

# モデルの予測
predictions = model.predict(df[['feature1', 'feature2']])

# 精度の計算
accuracy = accuracy_score(df['target'], predictions)

print('Accuracy:', accuracy)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304234/dc04f1b4-6c23-33e4-4b5c-e10ed8b147b6.png)

## 結論
特徴量を1000倍しても互いにAccuracy0.79という結果になりました。片方だけ特徴量を1000倍した場合でも、木の形は変わらないという結果になりました。
間違いがありましたら、お手数ですがご指摘いただけますと幸いです。
また、今回記事を作成するにあたり参考にした記事も記載します。ご参考くださいmm

## 参考文献
https://nnkkmto.hatenablog.com/entry/2020/12/15/000000
https://mathwords.net/ketteigi