OmniAICreator/Qiita-1.07M huggingface dataset:
Go言語のpackage利用で初手躓いた点

昔うっかり買ったので、せっかくだからとGoの勉強してたら、packageを使用してコードを別ディレクトリに分けるあたりでいきなり出鼻をくじかれたので、備忘録的にメモしておく

#TL; DR

プロジェクトについては初手

```
go mod init プロジェクト名
```

で `go.mod` ファイル作っとかないとダメ

#起こったこと

Goのファイルにて、下位ディレクトリに作った別のGoファイルから `import` しようとしたところ

```
package importしようとしたディレクトリ名 is not in GOROOT
```

とか言われてエラー吐かれた

基本的には講座の通り書いてたはずなのに、講座で特に触れられてないエラー出てきて初学者大混乱

# 取った対応

仕方ないので "is not in GOROOT" あたりの文言でぐぐって何が原因なのか探ってみると、出てくるのはPATHや環境変数あたりの話になる

個人的には「PATHを通す」自体はわかるものではあるんだけれど、学習してると参考書内の記述や講座で喋ってる内容に「PATHを通しておいてくれ」みたいなのがあまりなく、すでに前提条件みたいになってるのに何の説明もないような感じになる＋ここで一旦出鼻くじかれるので、PATHや環境変数のことは正直好きではない（愚痴）

で、GoのPATHについてどう設定するのか、と考えつつ見ていくと出てくるのは `go.mod` なるファイルの存在
何も考えずインストールして作ってたが、自分ではそんなファイル見た記憶がないし、調べても自分のPC内に存在していない
すごい雑な理解だと、これがGoプロジェクトのモジュール関係の管理的なことをやってるらしいので、まずこれが必要そうであるという結論に達する

そのため、中の設定どうするかは後で考えるとしてまず作ってみないと、ということで早速

```
go mod init プロジェクト名
```

で `go.mod` ファイルをプロジェクト内にサクッと用意することに

念のため、ここまでできたらモジュールの依存関係をふんにゃかしてくれるらしいコマンドとして

```
go mod tidy
```

というのがあるらしい、というか `go mod init` した時のメッセージからして 

```
go: to add module requirements and sums:
        go mod tidy
```

モジュール要件とまとめをつけるためにこのコマンド打て、と言われてるので実行する

で、これでどうなるかと、さっきエラー吐かれた `go run` 実行すると

_はい、ちゃんと動きました_

解決！

単に `go.mod` ファイルが存在してなかったのがいけなかったらしい
学習に使った講座では特に言われてなかった気がするが、そもそもコマンドとかでプロジェクト作ると自動でつくようなものだったとかだろうか？
ともかく、解決できたのでこれで良さそう
SortableJSを使ってみる

formrunみたいに「ドラッグアンドドロップで何かしらの成果物を作成する」みたいなHTMLは自分で作れるのだろうか？

と思って色々調べていたら、SortableJSなるものが使えそうだったので使ってみる。

まだ使い始めなので機能とかは全然理解していないけど、メモ程度にここに残していく。予定。

# SortableJSとは
以下を見るよろし。サンプルも同ページにたくさんあるので、基本的な機能はここ見れば十分、なはず。

http://sortablejs.github.io/Sortable/

# 何となく作ってるもの
以下みたいなやつ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401295/e72b9b6c-1010-ccc1-4062-36bb68b6dd85.png)

ドラッグアンドドロップで追加できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401295/3b264a92-b7e8-42e8-4633-dac6f1a32c5f.png)

もうちょいまともになったらもうちょいまともに編集する。まだ全然できてないので、Qiitaへの記事更新を頑張るのはソースができたあと｡｡｡

# リストの描画
上記のサイト(Githubのやつ)に書いてあるし、あんま難しくないのでここでは書かない。

display:flexを使えば普通に横並びにできる。

# リスト間での要素の受け渡し
groupていうプロパティのnameが同じリストは、ドラッグアンドドロップで要素を受け渡すことができる。

でもnameが違う場合でも受け渡したりできるので、ホントのところはよくわからない。

このままだと、要素を渡したときに渡し元のリストから要素が消える。

もし、渡し元のリストから要素を消したくない場合は、pull: 'clone' を指定すればよい。


とりあえずここまで｡｡｡｡詳細はまた随時追加

... to be continue.......
アメリカの有名大学等の授業が無料で受けられるCourseraとは？

#そもそもCourseraとはなんぞや？
公式HP：https://ja.coursera.org/

Coursera（コーセラ）とは2012年ごろ、スタンフォード大学にとある教授二人によって設立されたMOOCs（ムークス）です
Moocsとは　

Massive
Open
Online
Courses

の略です。世界のトップと呼ばれる大学がオンライン学種講座を提供している教育プラットフォームのことです。
CourseraのHPによると、2019年9月時点で196の大学・企業と提携し3700以上の講座と１６の学位を提供しています。

単純に学習できるだけでなく、学位が取れるのが素晴らしいです。



#Courseraの使い方

Courseraの講座には、ビデオ講義の他に、ディスカッション等が行えるコミュニティ機能やテスト、課題が用意されています。

一つの授業はだいたい10分程度で視聴することができ、一講座は約４〜６週間で修了するようになっています。

全ての講座が無料ではなく、有料コースも存在します。
有料コースは３９ドルから提供されており、講座を学んだ証拠となる証明書が取得できます。

この証明書はアメリカ国内では就職時での活用が進んでいるそうです。


#Courseraで学べる分野

Courseraで学べる分野は多岐にわたります。

プログラミング等のコンピューターサイエンスや、ビジネス戦略やマーケティングなぞ様々な分野を無料で学ぶことができます。


#まとめ

有名大学の講座が無料で勉強でき、オンラインだからこそ好きなところで好きな時間だけ勉強できるのは最高ですね。

社会人にとっても、今学生な人にとっても最高のサービスだと思います。
アンサンブル学習-ブースティング(Boosting)

## ブースティング(Boosting)とは

ブースティング(Boosting)とは、複数の弱学習器を組み合わせて強学習器を形成するアンサンブル手法です。
弱学習器は、ランダムな推測よりもわずかに良い結果を出すモデルのことです。例えば、最大深度が1の決定木は弱学習器です。

ブースティングは、学習データもモデルも逐次的に生成・構築されていきます。
予測から外したサンプルが、次のモデル構築の段階で重視されるように新しい学習データが生成されます。イメージは以下です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/c265e116-6ce3-3fef-3af3-d20c68f6897b.png)
引用："Hands on Machine Learning with scikit-learn and Tensorflow." (2017) Géron, Aurélien. 

ブースティングは学習不足(underfitting)時に効果的な手法と言われています。

## AdaBoost

AdaBoostはAdaptive Boosting（適応型ブースティング）の略です。
以下はAdaBoostの実例です。

```python
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import roc_auc_score

dt = DecisionTreeClassifier(max_depth=2, random_state=1)
ada = AdaBoostClassifier(base_estimator=dt, n_estimators=180, random_state=1)

ada.fit(X_train, y_train)

y_pred_proba = ada.predict_proba(X_test)[:, 1]

ada_roc_auc = roc_auc_score(y_test, y_pred_proba)

print('ROC AUC score: {:.2f}'.format(ada_roc_auc))
```

出力：

```text
ROC AUC score: 0.71
```
brew install で「Error: Failed to download resource」エラーが出た時の対処

brew install でパッケージをインストールしようとした際に、
実行した環境やパッケージ取得先の問題でインストールすることができず、
以下のようなエラーが発生することがあります。

``` 
Error: Failed to download resource
```

その際に取れる対処を以下に記載します。

# brew update で formula 情報を最新にする

以下のコマンドを実行することで Homebrew 自体が更新され、
パッケージの取得先を記した formula も更新されます。

```
$ brew update
```

# formula の URL 自体を書き換える

多くの場合は `brew update` の実行で解消すると思いますが、
それでもエラーが解消しない場合があります。

その際の対処として、対象パッケージの formula を編集し、
取得先 URL 自体を書き換える方法があります。

以下は glib の例。

```
$ brew edit glib
```

``` ruby
class Glib < Formula
  include Language::Python::Shebang

  desc "Core application library for C"
  homepage "https://developer.gnome.org/glib/"
# 正常にパッケージを取得できる、他のミラーサイトの URL を指定する
  url "https://mirror.umd.edu/gnome/sources/glib/2.68/glib-2.68.3.tar.xz"
# url "https://download.gnome.org/sources/glib/2.68/glib-2.68.3.tar.xz"
  sha256 "e7e1a3c20c026109c45c9ec4a31d8dcebc22e86c69486993e565817d64be3138"
  license "LGPL-2.1-or-later"

  bottle do
    sha256 arm64_big_sur: "f71020777f716cc22fe8f61eb3973d527bac8b34c3a7149b20cc314d901a16f6"
    sha256 big_sur:       "ebfa4f4aa16221f88df0259b2468c23a43d86a0c0fb5fb39b4ceb8cdebc3502a"
    sha256 catalina:      "8ee9768daf6642ca122ddb3aea294853c979ec8f3d89188cc7ff3c71c517460d"
    sha256 mojave:        "cf7cc5466d575b0c1a8c336770d0105c2624cbdb4a33716761b122b0a640cbe2"
    sha256 x86_64_linux:  "567a626270cda5d42994db048756571d28a3622e57a100455bb21044d65870b7"
  end

# 省略
```
AndroidでHiltをつかう

## Android Studioでの設定
過去記載の内容だとうまくいかないので修正

## プロジェクトのbuild.gradle

pluginsを新規に追記
```
plugins {
    id 'com.google.dagger.hilt.android' version '2.48' apply false
}
```

## app/build.gradle
```
plugins {
    ・・・
    id 'kotlin-kapt'
    id 'com.google.dagger.hilt.android'
}
・・・
dependencies {
　　　　　　　　　・・・
    implementation "com.google.dagger:hilt-android:2.48"
    kapt "com.google.dagger:hilt-android-compiler:2.48"
}
```

以下は、古い記事。
基本的にはチュートリアルの通りなのだが、少し違っているのでとても迷う。
https://developer.android.com/training/dependency-injection/hilt-android
以下に設定すれば通る
## build.gradle
```
dependencies {
        ・・・
        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.38.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"
    }
```
## app/build.gradle
```
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'
・・・
dependencies {
　　　　　　　　・・・
    implementation "com.google.dagger:hilt-android:2.38.1"
    kapt "com.google.dagger:hilt-android-compiler:2.38.1"
```
基本情報技術者試験勉強0819

基本情報技術者試験勉強
平成21年春過去問
平成21年秋過去問
間違えた問題の復習
AWSの本を読む

特許権　産業上利用することができる新規の発明を独占的・排他的に利用できる権利であり，所轄の官庁への出願及び審査に基づいて付与される権利。

エンタープライズアーキテクチャ(EA) 各業務と情報システムを，政策・業務体系，データ体系，適用処理体系，技術体系の四つの体系で分析し，全体最適化の観点から見直すための技法である。

コンピュータ不正アクセス対策基準　　組織のセキュリティ方針を文書化し，定期的に研修を開催する。

エアバッグ制御システム　リアルタイムシステムをハードリアルタイムシステムとソフトリアルタイムシステムとに分類したとき，ハードリアルタイムシステム。

システム監査人の役割　監査対象から独立かつ専門的な立場から情報システムのコントロールの整備・運用に対する保証又は助言を行う。

情報システムの全体計画立案時に策定される業務モデル　ビジネスプロセスとデータクラスを関連付ける。

IT統制を予防統制と発見統制に分類した場合，データ入力の誤りや不正の発見統制に該当するもの　　	•	データ入力結果の出力リストと入力伝票とを照合する。

ベンチマーキング　最強の競合相手又は先進企業と比較して，製品，サービス及びオペレーションなどを定性的・定量的に把握することである。

配列と比較した場合の連結リストの特徴　要素を挿入する場合，数個のポインタを書き換えるだけなので，処理時間は短い。

RAID1～5の各構成は，何に基づいて区別されるか。　データ及び冗長ビットの記録方法と記録位置の組合せ

シングルチップマイコンの特徴　入出力機能が内蔵されている。

ランレングス符号化　文字列中で同じ文字が繰り返される場合，繰返し部分をその反復回数と文字の組に置き換えて文字列を短くする方法。

システム管理基準　情報戦略を立案し，効果的な情報システム投資とリスクを低減するためのコントロールを適切に整備・運用するための事項をとりまとめたもの

関係データベースの主キーの性質　一つの表の中に，主キーの値が同じ行が複数存在することはない。

コンティンジェンシープラン　情報システムのセキュリティコントロールを予防，検知，復旧の三つに分けた場合，復旧に該当するもの

ASP  汎用的なアプリケーションシステムの機能をネットワーク経由で複数の顧客に提供するサービス

メモリインタリーブ　CPUから主記憶へのアクセスを高速化するために，主記憶内部を複数のバンクに分割し，各バンクを並列にアクセスする。

CRM 企業内のすべての顧客チャネルで情報を共有し，サービスのレベルを引き上げて顧客満足度を高め，顧客ロイヤルティの最適化に結び付ける考え方である。

SOA 業務上の一処理に相当するソフトウェアの機能をサービスとして実装し，それらのサービスを組み合わせてシステム全体を構築するという考え方である。

テクノロジアーキテクチャ（技術体系）
実際にシステムを構築する際に利用する諸々の技術的構成要素 （ハード・ソフト・ ネットワーク等）を体系的に示したもの。
構成要素…ネットワーク構成図、ソフトウェア構成図、ハードウェア構成図など

ITILのサービスサポートは、5つのプロセス「インシデント管理，問題管理，構成管理，変更管理，リリース管理」と1つの機能「サービスデスク」から構成されています。

システム適格性確認テストを実施するとき，用意しておくべきテストデータ　実際に業務で使うデータや，業務上例外として処理されるデータ

ISO規格　WTO加盟国の政府関係機関での採用が見込まれる製品の開発

産業機器の機器制御に使われるシーケンス制御の説明　あらかじめ定められた順序又は条件に従って，制御の各段階を逐次進めていく制御方法である。

BPR 顧客視点から業務のプロセスを再設計し，情報技術を十分に活用して，企業の体質や構造を抜本的に変革することである。

SoC 必要とされるすべての機能(システム)を同一プロセスで集積した半導体チップ

システム開発における品質管理　システムヘの要求機能の充足度だけでなく， ドキュメントなどすべての成果物を含めて品質管理の対象とする。

様々なサイズのメモリ資源を使用するリアルタイムシステムのメモリプール管理において，可変長方式と比べた場合の固定長方式の特徴　メモリ効率が悪く，獲得及び返却の処理速度は速く一定である。

RADIUS 無線LANやVPN接続などで利用され，利用者を認証するためのシステム

開発計画　システム管理基準において，情報システムの費用，スケジュール，開発体制，投資効果などを明確にする

非機能要件　ソフトウェアの信頼性，効率性など品質に関する要件

分散データベースの透過性　クライアントのアプリケーションプログラムは，複数のサーバ上のデータベースをアクセスする。アプリケーションプログラムは，データベースがあたかも一つのサーバ上で稼働しているかのようにアクセスできる。

Webコンテンツのユーザビリティ　どれだけ利用者がストレスを感じずに，目標とする要求が達成できるかをいう。

サーバー　何かサービスを提供するもの。
React 入門道場　~Reactを学ぶ上で理解したいES5,ES6~

#　はじめに

Reactの勉強するを前にES5、ES6の違いについて浅はかであったので今回簡単に纏めることにしました。


#　目次
* Javascriptの標準仕様について
* ES6について
* ES6をES5に変換するBabel
* まとめ

#　Javascriptの標準仕様について

JavaScriptの標準仕様はECMAScriptと呼ばれています。
ECMAScriptはECMA Internationalのもとで標準化されているJavaScriptの仕様となっています。

__課題点__
標準化以前は、ブラウザごとに言語仕様の独自拡張が行われていたため、ブラウザ間の互換性が極めて低かったそうです。ECMAScriptが策定されたことにより、ブラウザ間での互換性が向上しました。

現在、大抵のブラウザは、ECMAScript 5.1以上に対応。
ECMAScript 5.1は、略してES5と表記します。


#　ES６について

__ES6は新しいJavaScriptで、今までのJavaScriptを改善したバージョン。
いわゆる次世代JavaScriptってわけですね！！！__

ES6では、以下のような機能が新たに追加されました。

*　importとexportによるモジュール構文
*　アロー関数
*　class構文
*　関数の引数のデフォルトパラメータ
*　分割代入
*　配列展開
*　関数の可変長引数
*　関数のデフォルト引数
*　テンプレート文字列

今回は公文についてはご愛嬌とさせて頂きます。
随時、更新していきたいと思います。気になる人は下記のURLから閲覧ください！

[JavaScript文法ES6の新機能](https://qiita.com/azk0305/items/ebfb43c088101f7138f9)

# ES6をES5に変換するBabel
Babelは、ES6で追加された機能をES5に変換するトランスパイラです。
わかりやすく例えるなら翻訳機を捉えて思って下さい。なぜ、翻訳しないといけない？
それは、現時点ではほとんどのブラウザでサポートされていません。
ここで出てくるのが、ES6形式で書かれたものをES5形式に変換してくれる、Babelといったトランスパイラを用いてブラウザに表示することが出来ます。

#　まとめ

現在のjavascriptの標準規格としては2種類。
*　ES5：従来のJavascript
*　ES6：新しく策定されたJavascript
の2つが存在していることになります。
COVID-19のグラフ化とWEB公開

####はじめに
新型コロナのcsvデータがNHKからダウンロードできるので、そのcsvデータを加工編集しx軸に年月日、y軸に各県毎の感染者数等のグラフを作成し、webで表示するまでのプログラムを作成したので公開します。

- csvデータの編集には、pandasを使用しました。
- グラフ作成にはmatplotlibを使用しました。
- Web構築のフレームにはFlaskを使用しました。Jinja2も使用しています。
- Webサーバーにはpythonanywhereの無料版を利用しました。


####環境

- 開発環境
 - WIndows10
 - Pycharm
 - Python 3.8
- pythonanywhere 
 - 無料版

####ディレクトリ構成とファイル
webサーバー pythonanywhere でのディレクトリ構成とファイルです。

```
mysite/
├── csv/
│   └── COVID-19_by_NHK.csv          NHK提供のcsvファイル
├── covid19_graph.py                 csvデータを編集、加工、グラフ化する
├── fig_manager.py                   グラフファイルを削除
├── flask_app.py                     Flaskのapp
├── static/
│   └── images/                      ここに作成したグラフを格納
└── templates/                       
    ├── COVID-19_error.html          エラー表示
    ├── COVID-19_outofservice.html   サービス外表示
    ├── COVID-19_result.html         グラフを表示
    └── COVID-19_top.html            トップ
```

####プログラムおよび説明

- flask_app.py
- covid19_graph.py
- fig_manager.py
- COVID-19_top.html
- COVID-19_result.html
- COVID-19_error.html
- COVID-19_outofservice.html

後で書きます

####pythonanywhereでWEB化

- すでに、pythonanywhere にユーザー登録済みとします。
- pythonanywhere の Web 画面で、新しいappを作成します。フレームワークはFlaskを選択。pythonバージョンは適切なものにしてください。
- Source code:ディレクトリとWorking directory:ディレクトリは同じにします。できれば、/home/(user)/mysite にすれば楽です。
- 開発環境で作成した、pythonソース、htmlテンプレートをpythonanywhereの所定のディレクトリにコピーします。私は個数が多くないので、１個づつ upload しました。
- 必要なディレクトリを作成します。
- Source code:ディレクトリとWorking directory:ディレクトリは同じにします。
- pythonanywhere の Web 画面で、Reloadします。これで app が起動されてWebが使えるようになります。


####WEBでの実行

- [http://covid19graph.pythonanywhere.com/](http://covid19graph.pythonanywhere.com/) を開いてください。次の様な画面が表示されます。

![COVID-19cond.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566633/ca10ac51-c1b5-6091-0f22-cbea672d0efa.png)


- 条件を指定して［グラフ表示］ボタンを押してください。以下のようなグラフが表示されます。

![COVID-19graph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566633/121ff74e-8d57-4b79-c094-207f7e7603ea.png)
####クレジット表示

- グラフの元データ（csv）は、NHKからダウンロードしています。ダウンロード元は、https：//www3.nhk.or.jp/n-data/opendata/coronavirus/nhk_news_covid19_prefectures_daily_data.csv です（実際は、：を半角にしてください）。ここには、「[詳しい規約はこちら](https://www3.nhk.or.jp/news/special/coronavirus/data/rules.html)」があり、「新型コロナウイルス関連データ・ダウンロードサービス利用規約」が書かれています。
- それに従い、グラフ画面には「※情報：NHKまとめ。グラフは作者が編集・加工したものです。」というクレジットを記載しています。


以上
【Unity】EasyMobilePro + UnityAdsでデフォルトプレースメントエラー起きたときの対処法

# 対処法
EMPではデフォルトプレースメントIDが古いままで、InterstitialとRewardedが”video”,”rewardedVideo”になっている。さらにデフォルトプレースメントIDはインスペクター上で設定することを禁止されてるため、広告が流れなくなってしまう。インスペクターで禁止されている部分を修正して、インスペクターで設定できるようにする。

EasyMobilePro内のEM_SettingEditorの以下の部分をfalseに変更する。
![スクリーンショット 2021-08-16 18.23.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694219/4ef27b62-5431-1b86-0375-29035be55a5a.png)
修正するとインスペクターで設定できるようになる。
![ef32dee0-607c-4efa-a00f-280b7d36ac04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694219/84967420-4e6a-714d-6940-30e6a64b3f49.png)

EasyMobileProめちゃくちゃ便利だけど定期的に穴に嵌るんだよなぁ...
【WordPress】jQueryと別ファイルjavascriptを読み込む

# Javascriptの読み込みを行う
WordPressで外部ファイルに記述したJavaScriptファイルを読みこむ時は、function.phpというデフォルトのファイルを利用する。function.phpはテーマ内で使い回すことのできるプログラムを記述するためのファイル。

# jQueryの読み込み
jQueryを使用したい場合は、WordPressで元々しようされているjQueryを利用するようにする。

```php
<?php
function my_scripts() {
  wp_enqueue_script( 'jquery' );
}
add_action( 'wp_enqueue_scripts', 'my_scripts' );
?>
```

※add_action:
`add_action( 'フックさせたい場所の名前', '呼び出してほしい関数名', 優先順位(省略可能),引数の数(省略可能) );
`
WordPressでは、どのタイミングで関数を実行させるかを指定することができ、第一引数ではそのタイミングを指定している。

# 外部のJavaScriptファイルを読み込む

外部のsample.phpを読み込む場合

```php
<?php

function my_scripts() {
  wp_enqueue_script( 'jquery' );
  wp_enqueue_script( 'javascript',get_template_directory_uri().'/js/sample.js',array('jquery'));
}
add_action( 'wp_enqueue_scripts', 'my_scripts' );

?>
```

wp_enqueue_scriptの使い方
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_enqueue_script#.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF

`<?php wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer ); ?>`
flutter_native_splashでスプラッシュ画面(Splash Screen)を実装する

#はじめに
https://pub.dev/packages/flutter_native_splash

👆splash screen系で一番有名なこのパッケージです。

https://www.youtube.com/watch?v=8ME8Czqc-Oc

動画での解説もありますが、ドキュメントのInstallingとやり方が違ったりして少し困惑したのでメモします。。。

#画像を用意する
条件は以下の通り

**・PNGで作る**
**・正方形で作る**（一番ベーシックなやり方で実装するので）
**・サイズは500 * 500**（サイズは適当でOK）

作った画像は`assets/img/splash.png`に保存

ちなみに私はKeynoteでアイコンを作成しました。


#pubspec.yamlを編集
参考にしてる情報によって
`dependencies`と`dev_dependencies`

どっちに書くかが分かれるところかと。。。

最初は`dev_dependencies`に追加したのですが

>You don't have an extension for debugging YAML. Should we find a YAML extension in the Marketplace?

**VSCodeでこんなエラー？が発生したので、私は`dependencies`にしました。**

`dependencies`と`dev_dependencies`の違いについては下記を参考に！

https://dtpscriptin.com/flutter-pubspec-yaml/


```yaml:pubspec.yaml
dependencies:
  flutter:
    sdk: flutter


  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2
  flutter_native_splash: ^1.2.1

flutter_native_splash:
  color: "#F8E7F4"
  image: assets/img/splash.png
  android: true
  ios: true
```

image に画像を置いているディレクトリのパスを指定します。

colorに背景色（16進数カラーコード）を指定します。

私は動画を見ながら実装したのですが、

```yaml
android: true
ios: true
```

これらのoptionが必要なのかは不明w。結局Web用のsplashも作成されてたし。。

#Splash Screenを作成
下記コマンドを実行

```terminal
$ flutter pub get  

$ flutter pub run flutter_native_splash:create
[Android] Creating splash images
[Android] Updating android/app/src/main/res/drawable/launch_background.xml with splash image path
[Android] Updating android/app/src/main/res/drawable-v21/launch_background.xml with splash image path
[Android] Updating styles.xml with full screen mode setting
[Android] Updating styles.xml with full screen mode setting
[iOS] Creating splash images
[iOS] Updating LaunchScreen.storyboard with width, and height
[iOS] Updating ios/Runner/Info.plist for status bar hidden/visible
[Web] Creating images
[Web] Creating images
[Web] Creating CSS
[Web] Updating index.html

Native splash complete. 👍
Now go finish building something awesome! 💪 You rock! 🤘🤩
```

これでSplash Screenが表示されるようになりました！
すご！

#Splash Screenで使う画像のサイズを変更するには？
次は1000 * 1000で作成したします。

`assets/img/splash.png`に大きくした画像を置き換えます。

置き換えたらまたターミナルからコマンド実行

```terminal
$ flutter clean 

$ flutter pub get  

$ flutter pub run flutter_native_splash:create
```

これでSplash Screen真ん中に表示される画像が大きくなりました！！！
nvimでpowershell

#解決したかった現象
　windows11　nvim v0.5.0
　init.vimにset shell=pwshを追加したところ
　nvim及びnvim-qtで!がエラーで表示してくれない！

# windowsでnvim上でpowershellを使う方法
　help powershellででてくる(0.5.0のhelp)

```_vimrc
let &shell = has('win32') ? 'powershell' : 'pwsh'
let &shellcmdflag = '-NoLogo -NoProfile -ExecutionPolicy RemoteSigned -Command [Console]::InputEncoding=[Console]::OutputEncoding=[System.Text.Encoding]::UTF8;'
let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s; exit $LastExitCode'
let &shellpipe = '2>&1 | Out-File -Encoding UTF8 %s; exit $LastExitCode'
set shellquote= shellxquote=
```
をinit.vimに追加しましょう。

# いろいろやったこと
　上は知っていたが
 set shell=pwsh
 とか、上と同じようなコマンドを入れていたら動かなかった
　なんでまた、&shellなんでしょうねえ？setじゃだめなのか？

#ちなみに
上の設定だと、私はpowershellが動いてしまうので
let &shell = 'pwsh -NoLogo'
で動かしております。

#快適快適
　!も動くし、:termもgvimと違って色が表示されるし完璧
　これで、gvimを使い続けようと思ったが、これでnvmiでいいかなあ
curl 複数リクエスト送る際にパラメータをテキストファイルからセットする

# curlでテストデータを100件くらい作る必要が出てきて、簡単なスクリプトを作ったのでメモ

## 手順1:タブ区切りのパラメータがセットされたファイルを用意する。

ファイル例

```param.tsv
00001  和食
00002  洋食
00003  イタリアン
・
・
```

## 手順2

```curl.sh
#!/bin/bash

# 環境変数IFSで区切り文字をタブにセット
IFS="$(echo -e '\t')"
while read line
do
# array=()の構文でsplitedにテキストファイルをタブ区切りの配列を入れてます。
  splited=($line)

# あとはcurlするパラメータに指定してあげるだけ
  curl --location --request POST 'https://xxx/xxx' \
    --form genreId=${splited[0]} \
    --form genreName=${splited[1]} \
    --form 'remarks="テストデータ"' \
done < param.csv
```
値を連番にするだけでいい時は、テキストファイルから読まなくてもloopで回してインクリメントとかでも良い。
今回の例のようにマスタにもとづいたもので単純にインクリメントで生成できない場合にはテキストファイルから読み込ませると良いかも。
【python】pandasの活用～1回目：DataFrameの作成、applyの使い方～

### はじめに

- バージョン
  - Python: 3.6.8
  - pandas: 1.1.5
- 概要 
  - 以下のようなyamlがある時に、pandasを使うと見やすくかつシンプルに表が作成出来るので紹介します。

```yaml:member.yml
---
member:
  - name: "Aoki"
    age: 23
  - name: "Akiyama"
    age: 38
  - name: "Tom"
    age: 31
```

今回紹介するのは以下のパターンです。

- 1. yamlから表を作成する
- 2. 表の列に対して関数を適用する
    - ageが30以上であるかを判定し、True/Falseを返す 
- 3. 関数の結果を新たな列として追加する   


### 1. サンプルコード

　実際に作成したコードは以下です。

```python:test_pandas.py
import pandas as pd
import yaml


def read_yml(input_file):
    with open(input_file, "r") as yml:
        yml_data = yaml.load(yml, Loader=yaml.SafeLoader)
    return yml_data


def check_age(age):
    return age >= 30


def main():

    print("1. yaml to dataframe")
    file_yaml = read_yml("./member.yml")
    file_df = pd.DataFrame(data=file_yaml["member"])      # point-1
    print(file_df)
    print("")

    print("2. apply function")
    print(file_df["age"].apply(check_age))                # point-2
    print("")

    print("3. merge function result")
    file_df["result"] = file_df["age"].apply(check_age)   # point-3
    print(file_df)


if __name__ == "__main__":
    main()
```


- ポイント
  - 1. yamlから表を作成する
     - 以下のように、``data=``の部分に表にしたいデータを記載します。
      
       ```python
       pd.DataFrame(data=表にしたいデータ])
       ```
  
  - 2. 列に対して関数を適用する
     - 以下のように、DataFrameに関数を適用するには``.apply``と記載します。

       ```python
       DataFrame名[列名].apply(関数名)
       ```

  - 3. 関数の結果を新たな列として追加する
     - 以下のように、左辺に新たに追加する列を、右辺に追加するDataFrameを記載します。

       ```python
       DataFrame名[追加する列名] = 追加するDataFrame名
       ```

### 2. 実行結果

- 実行ログ
  - 変数の中身がわかるように適宜printしているので、詳しく見ていきましょう。 

```text
(venv) [centos@ip-<ip addr> pandas]$ python3 test_pandas.py 
1. yaml to dataframe
      name  age
0     Aoki   23
1  Akiyama   38
2      Tom   31

2. apply function
0    False
1     True
2     True
Name: age, dtype: bool

3. merge function result
      name  age  result
0     Aoki   23   False
1  Akiyama   38    True
2      Tom   31    True
```


- 1. yaml読み取り後
     - 一番左の行番号は自動で割り振ってくれます。

| - | name | age |
| --- | --- | --- |
|0|Aoki|23|
|1|Akiyama|38|
|2|Tom|31|

- 2. 関数適用後
     - 列（age）に関数を適用した結果が返ってくるので、他の列（name）の結果は表示されません。 

| - | - |
| --- | --- |
|0|False|
|1|True|
|2|True|

- 3. 関数の結果とのマージ後
     - 関数の結果が列名resultとして追加されています。

| - | name | age | result |
| --- | --- | --- | --- |
|0|Aoki|23|False|
|1|Akiyama|38|True|
|2|Tom|31|True|

### まとめ

　pandasを使いこなせば、for文を使わずに一気に全てのデータに関数を適用できるので便利だと感じます。


### 参考記事

[Pandas Dataframe のカラムに関数を適用する](https://www.delftstack.com/ja/howto/python-pandas/apply-function-to-column-pandas/)
テストコードとHTML&CSSの知識が繋がった話

テストコードにおける「find('#tweet_text').value」のような記述で、

「なぜ＃がつくんだろう・・・」と疑問に感じていたが、

答えはHTML&CSSの知識にあった。

CSSでクラス名やid名を指定する際は、「.クラス名」「.id名」とするように

テストコードでもその考え方が当てはまる。

よって、「id名の前には＃」「クラス名の前には.」がそれぞれ必要となる。


ちなみに「fill_in 'tweet_text', with: @tweet」のように、

「fill_in」では「.」「＃」の指定は必要ない。

どうやら「フォームの値が入る」とすでに意気込んでいるので、付けなくてもいいらしい。

「find」に関しては、とる値がより広義なものなので、

「これは＃が付くからid名だよ！」と言うふうにお知らせしてあげる必要があるようだ。
DockerのMySQLで ERROR 1006 (HY000) at line 1: Can't create database 'xxx' (errno: xxx) 

#解決策

ローカルでDockerのVolumeがいっぱいになってただけだった

```
docker system prune
docker volume prune
```

```
docker system df                                             
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          27        8         6.733GB   3.781GB (56%)
Containers      8         8         8.662MB   0B (0%)
Local Volumes   6         6         2.002GB   0B (0%)
Build Cache     137       0         292.7MB   292.7MB
```


# 参考

- [【初心者】データベースが作成できない時の対処法（create database dotinstall_todo_app;）](https://qiita.com/matsuma/items/7e1182ec50917549a712)
- [MySQL: ERROR 1006 (HY000) Can't create database (errno: 26469527)](https://stackoverflow.com/questions/39045341/mysql-error-1006-hy000-cant-create-database-errno-26469527?rq=1)
Android（Termux）でプログラミング【code-server】

# Termuxを公式サイトからインストール
https://f-droid.org/packages/com.termux/

Google Play ストアのTermuxはバージョンが古いので、公式サイトからダウンロードしたapkを開いて、インストールしてください。

# TermuxにUbuntuをインストール
https://github.com/termux/proot-distro

起動用のシェルスクリプトを作成しておくと良いでしょう。

# code-serverをインストール、起動
https://github.com/cdr/code-server

キーボードはCodeBoardがおすすめです。
https://play.google.com/store/apps/details?id=com.gazlaws.codeboard

# 端末でテザリングする、外部から接続する場合
テザリングする場合は、まずテザリングをオンにします。
テザリングせずWi-Fiに接続する場合は、Wi-Fiに接続してから、`ip -4 a`コマンドでローカルipを確認します。

次に、code-serverのconfigファイルのbind-addrをローカルipにします。（テザリングの場合: `192.168.43.1:port`）

次に、code-serverを起動します。たまに起動できない時があるので、何度か起動し直してください。

PCでテザリングや同じWi-Fiに接続し、ブラウザからconfigで指定したbind-addrにアクセスできます。
MongodbのfindOneで特定の要素だけ取り出す方法

#初めに
　ずいぶん前に質問していた内容を自己解決していたのにクローズし忘れていたということに今頃(数カ月後)になって気がついたため、折角だしその解決法を記事にまとめようと書いております。回答して下さった@anonymouさんほんとごめんなさい。それと回答してくれてありがとうございます！

##バージョン
・Node.js　　　　　　15.11.0
・MongoDB　　　　　4.4.6
・MongoDBドライバ　7.6.2
#問題点
　そもそもの問題はfindOneの第２パラメータに値をセットしてみてもなぜだか動作しないというお話でした。

```javascript
let result = await col.findOne({_id:~~~},{username:1});
//colにはdb.collectionでインスタントを定義済み。
//awaitはasync関数の中で実行しているという前提です。
```

　このプログラムの実行結果はusernameだけが表示されるというものです。もし仮にconsole.logした場合が以下の通り

```javascript
//間違い表示例
{_id:~~~,username:'example',email:'e@example.com'}
//正しい表示例
{_id:~~~,username:'example'}
```

　本来であれば、usernameを1またはtrueと第２パラメータをおいたため、emailは表示されません。usernameだけを表示するという意思表示をしているためです。
　そしてこの間違い表示例の場合こそが、私が陥ったよくわからない状況です。
　このよくわからない状況に陥らなかった人は回れ右しても問題ないでしょう。もしくはバージョンアップしたーいって人は見てみても価値があります。
#解決
　長い間公式のページを見てもさっぱり答えが分からなかったのですが、ある時たまたま見た海外のサイト(メモし忘れたためどこのサイトかは忘れた)で解決方法を見つけました。もし、私と同じようなバージョンでやっており、同じようなミスをしている人がいれば参考にしてほしいです。

```javascript
let result = await col.findOne({_id:~~~},{projection:{username:1});
```

　projectionというキーを置く必要があったみたいです。
　__それだけ！！！__
rangeで指定する範囲の数字のリストを作成

##指定する範囲の数字のリスト(昇順)を作成

```rb
a = list(range(1,10,2))
print(a)
#実行結果
[1, 3, 5, 7, 9]
```
第一引数: start(含む) デフォルトは0、省略可
第二引数: end(含まない) 省略不可
第三引数: 幅 デフォルトは1、省略可

##降順のリストを作成

```rb
a = list(range(10,0,-1))
print(a)
#実行結果
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
```
【競プロ典型90問】007の解説（python）

## 概要
[競プロ典型90問](https://atcoder.jp/contests/typical90)の解説記事です。
解説の画像を見ても分からない（~~理解力が足りない~~）ことが多々あったので、後で解き直した際に確認できるようまとめました。

※順次、全ての問題の解説記事を挙げていく予定です。
※★５以上の問題は難易度的に後回しにしているため、投稿時期が遅くなる可能性があります。（~~代わりに丁寧に解説してくれる方いたらぜひお願いします~~）

## [問題007-CP Classes](https://atcoder.jp/contests/typical90/tasks/typical90_g)

### 問題概要
配列Aの中から、各Bに最も近い値を見つけ、その絶対値を出力する。

### 解き方
まず初めに、全てのA、Bの組み合わせにおいて、順番に絶対値を求めていく方法が考えられるかと思います。
しかし、この考えでは、計算量がNQとなり、N, Qはそれぞれ$10^5$オーダーのため、TLEとなります。

そこで今回は、事前にAをソートし、二分探索を行うことで、Bに最も近い値を高速で求めます。
この時の計算量は、ソートの際にかかる計算量が$NlogN$、Bに近い値の二分探索に$logN$、その計算をQ回行うので、合計の計算量は$(N+Q)logN$となり、これは時間内に十分に間に合います。
※二分探索に関しては、[こちら](https://qiita.com/wihan23/items/82798e1a838141977cbd)をご参考ください。

実装の流れは以下になります。
1. Aをソートする。
2. Bに近い値を二分探索で求め、絶対値を計算、出力する。

![参考画像](https://raw.githubusercontent.com/E869120/kyopro_educational_90/main/editorial/007.jpg "公式解説画像")

引用元：[競プロ典型90問 Github](https://github.com/E869120/kyopro_educational_90)

### 実装

```python:answer.py

# 入力の受け取り
N = int(input())
A = list(map(int, input().split()))
Q = int(input())

# Aをソート
A.sort()

# 出力する答えを配列で格納
ans = []


for i in range(Q):
  b = int(input())

# b以下を満たす範囲をleft, bより大きい範囲をrightとする
  left = -1
  right = N

  while right - left > 1:
    mid = (right + left)//2
    if A[mid] <= b:
      left = mid
    else:
      right = mid

# B以下を満たす値とBより大きい値で、絶対値を比較する。
# leftの境界値を含まないようifで条件分岐
  comp1 = 10**9
  comp2 = 10**9
  if left >= 0:
    comp1 = abs(A[left]-b)
  if left < N-1:
    comp2 = abs(A[left+1]-b)
  ans.append(min(comp1, comp2))

# 答えを出力
for i in range(Q):
  print(ans[i])

```

## 最後に
問題の解説を読んでも他の人のコードを見てもさっぱり分からないという方の
力に少しでもなれれば幸いです。
コードの改善点やその他、ご意見などあれば、気軽にコメントください。
また、この記事を読んで理解できた方はぜひLGTMを押していただけると嬉しいです。
（~~記事投稿のモチベになります。~~）

ここまでお読みいただきありがとうございました。
【Swift】UIImageが空の場合にブランクの画像を設定する

# どういうことか

たとえばAPIで返ってきたファイルパスを元に画像を設定したいけど返ってこない場合にはブランクを設定したい。

## 空のとき

```swift
imageCell.imageView.image = UIImage()
```

このパターンを実装したいときを検索したらグラフィックコンテキストを使うものばかり出てきたけど、これだと実は都合悪かったりするのかな🤔
FC2ブログのエクスポートからCSVファイルを作る

簡単に組んだスクリプトのメモです。

FC2 ブログのエクスポートは、下記のような形で出力されます。

```
AUTHOR: sou (08thse)
TITLE: とりあえず
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: default
ALLOW PINGS: 1
PRIMARY CATEGORY: 日記
CATEGORY: 日記

DATE: 07/27/2008 22:01:09
-----
BODY:
ほげほげ
-----
EXTENDED BODY:

-----
EXCERPT:

-----
KEYWORDS:

-----

# 以下、記事ごとに繰り返し
```

ここから、「タイトル」「カテゴリ」「公開日」を CSV で出力したかったので、サクッと Python で組んでみました。

```python
import pandas as pd

cols = ['title', 'category', 'publish_date']
df = pd.DataFrame(index=[], columns=cols)

with open('export_text.txt', encoding='utf-8') as f:

    while True:
        line = f.readline()
        if line == '':
            break
        if 'TITLE:' in line:
            current_title = line[7:][:-1]
        if 'PRIMARY CATEGORY:' in line:
            current_category = line[18:][:-1]
        if 'DATE:' in line:
            current_publish_date = line[6:][:-1]
            df = df.append({'title': current_title, 'category': current_category, 'publish_date': current_publish_date}, ignore_index=True)

df.to_csv('export_csv.csv')
```

記事毎の属性の順序は抜け漏れなく決まっているため、順序的に今回は「公開日」まで到達すれば `df.append()` して OK ということで、こんな感じのロジックにしています。

また、`line` の最後に改行文字が含まれるので、`[:-1]` で除外しています。

出力される CSV ファイルは UTF-8 でエンコードされているので、文字化けした際にはエンコーディングに注意しましょう。
JavaScriptを基本からまとめてみた【13】【非同期処理】

##はじめに

####学習するに至った経緯

2020年より、未経験からエンジニアへの転職を目指し、某プログラミングスクールへ通う。入学後、『Ruby』を未経験から学ぶ人が多いのと『Ruby』の求人が思っていた以上に少ないので、卒業後、フロントエンドのエンジニアを目指す事に。
Javascriptの学習した事を言語化し、認識の深化による備忘録として記載。

##非同期処理とは
『非同期処理』とは実行した処理の完了を待たずに次の処理を実行する動きのこと。
逆に『同期処理』は実行した処理の完了を待って次の処理を実行する動きのこと。

##非同期処理が発明された経緯
① 今までは、普通にプログラムを書いていた。

```
例:データを取ってきて、処理をする。 
getData('url');　⇦ 処理が完了してから、次の行の処理へ移行する。
    show();
```
② 上記のプログラムだとデータが取り終わるまで、画面が表示されないという問題が起きる。

```
理由:通常、プログラムが上から順に実行されるから。
getData('url');　⇦ 処理が完了してから、次の行の処理へ移行する。
    show();
```
③ バックグラウンドで処理を行う事を発明した。
先に画面を表示しておいて、データを取り終えると該当の画面を表示する。
⇨ 画面が真っ白な状態を防ぎ、ユーザーを待たせる事がない。

####※ 処理を一度バックグラウンドに移して別の処理を先に行い、処理を完了したら、内容を反映させる　＝　非同期処理

##非同期処理の実現
① コールバック関数を使う
sample.jsは、『setTimeoutが第2引数1000ms (=1秒）を取る。1秒後に、関数1(console.log(1))の処理を行う。』というプログラム。
####※ 引数を取る関数のことをコールバック関数という。コールバック関数を使うと非同期にして、処理のタイミングをずらす。

```sample.js
setTimeout(() => console.log(1), 1000);
console.log(2);
//処理を実行
　2
<・undefined
> 1
```
####⇨ コールバック関数の非同期処理を順々に実行するのが複雑だと判明。

```count.js
setTimeout(() => console.log(3), 1000);
setTimeout(() => console.log(2), 1000);
setTimeout(() => console.log(1), 1000);
//処理を実行
< 5762
   3
   2
   1
>
```
上記のサンプルコードだと１秒後に一斉に表示されるが、順に実行される訳ではない。1秒ずつ、順に実行しようとすると下記のコードになる。※　コードが複雑で読みづらい。

```count.js
setTimeout(() => {
  console.log(3);
setTimeout(() => { 
  console.log(2);
setTimeout(() => { 
  console.log(1);
   }, 1000);
  }, 1000);
}, 1000);
//処理を実行
< 4034
   3
   2
   1
>
```

② Promiseを使う

####『Promise』の特徴

(1) 連続した非同期処理をフラットに書ける

(2)『後で値を返すから待つ』という約束 

(3) 状態を待つ

```sample.js
『Promise』の基本
//最初は『待つ』状態
new Promise(() => {});
//resolveすると『完了した』状態
new Promise(resolve => resolve() => {});
//完了時の値をthenで繋げて次の処理を渡せる
new Promise(resolve => resolve('こんにちは') => 
  .then(res => console.log(res));
```

sample.jsをcount.jsへ書き換えると下記のようになる。
※ thenで繋げるとソースコードが見づらい。

```count.js
new Promise(resolve => {
  setTimeout(() => {
    console.log(3);
     resolve();
},1000)
}).then(() => {
  return new Promise(resolve => {
    setTimeout(() => {
    console.log(2);
     resolve();
    },1000);
  });
}).then(() => {
 return new Promise(resolve => {
    setTimeout(() => {
     console.log(1);
     resolve();
    },1000);
  });
});
```

③ async/awaitを使う

複雑ではなく、普通に書けるようにする。

```count.js
func = async() => { //関数に対してasyncと宣言 ➡︎『この関数は非同期関数』
　await log(3);
  await log(2);
  await log(1);  //関数の呼び出し前にawait
};                   　　//⇨ Promiseの結果が返って来るまで待つ
log = (num) => { //Promiseを返す関数
　retrun new Promise(resolve => {
   setTimeout(() => {
    console.log(num);
    resolve();
   }, 1000);
 });
}
func();
```


##① コールバック関数
[JavaScriptを基本からまとめてみた【15】【コールバック関数】]
(https://qiita.com/kanfutrooper/items/a8f8c60aea11f1b81086)

##② Promise
[JavaScriptを基本からまとめてみた【14】【Promise】]
(https://qiita.com/drafts/c31c9b357fc6200c485e/edit)

##③ 「async/await」
[JavaScriptを基本からまとめてみた【16】【async / await】]
(https://qiita.com/kanfutrooper/items/c71b17d312a7ea53b009)



##参考サイト
[JavaScriptの非同期処理を同期させる方法【初心者向け】]
(https://www.otwo.jp/blog/asynchronous-processing/)
[小学生でもわかるasync/await/Promise入門【JavaScript講座】]
(https://www.youtube.com/watch?v=kbKIENQKuxQ&t=421s)
【98時間】AWS認定デベロッパー - アソシエイト（DVA）勉強方法

#はじめに
AWS認定ソリューションアーキテクト - アソシエイト（SAA）の次は、AWS認定デベロッパー - アソシエイトを取得しました。今回も勉強方法を書いていきます！

![スクリーンショット 2021-08-18 211303.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1615121/a2dd1fdc-9731-cdaf-5974-f9aeb805026c.png)

#受験前までのスペック
- 業務未経験
- 応用情報技術者試験　合格
- AWS認定ソリューションアーキテクト - アーキテクト　合格

#合格までのコスト
- 勉強期間は<font color="Red">**1か月**</font>
- 勉強時間は<font color="Red">**98時間**</font>
- 費用は試験代+模擬試験代+参考書で<font color="Red">**約22,000円**</font>

#使用した教材
|教材|
|:--|
|[ポケットスタディ AWS認定デベロッパーアソシエイト](https://www.amazon.co.jp/gp/product/4798063401/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)|
|[AWS WEB問題集で学習しよう](https://aws.koiwaclub.com/)|
|[Udemy AWS 認定デベロッパー アソシエイト模擬試験問題集（5回分325問）](https://www.udemy.com/course/aws-31955/) |
|[AWSサービス別資料（通称、Black Belt）](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/) |
|AWS公式模擬試験|

#勉強履歴
###15時間　[ポケットスタディ](https://www.amazon.co.jp/gp/product/4798063401/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)

初めにポケットスタディを1周読みました（問題を解くのを含めて）。
この本の特徴は、

- AWS DVA専用の試験対策本
- 体系的な知識の取得ができる
- 発売が2021年3月で、比較的情報が新しい
- 操作画面のスクリーンショットがあるので、視覚的にわかりやすい
- 約300問の問題がある（実際の試験問題とは毛色が異なる）

最初の1周以外でも、わからないこと・忘れたことを調べるために何度も読み返しました。個人的に、<font color="Red">**AWS DVA取得にはこれしかないと思える1冊**</font>です。

###46時間　[AWS WEB問題集](https://aws.koiwaclub.com/)　
次にAWS WEB問題集を#1～#39（#1つに7問、計273問）を1周解きました。2週目は1周目の不正解問題、3周目は2周目の不正解問題を解きました。

1周目：64%
2周目：84%（累計）
3周目：95%（累計）

AWS WEB問題集を解きながら、解説の補足としてポケットスタディと[Black Belt](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/)を使って、進めていきました。AWS DVAの勉強には、<font color="Red">**Black Beltの利用がオススメ**</font>です。理由はAWS SAAは浅く広い知識を問われるのに対して、AWS DVAは狭く深い知識が問われるからです。Black Beltは、1つのAWSサービスについて、詳しく知りたいと思ったときにピッタリの教材になります。文書だけでなく、YouTubeで解説されているものもあります。

###1時間　AWS公式模擬試験
AWS WEB問題集の後は、腕試しにAWS公式模擬試験を受けました（本番試験の1週間前）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1615121/df23ef15-1a72-9c96-f08c-38fc54637b22.png)

結果は60%でしたが、AWS DVAの公式模擬試験は本番試験より難しいため、あまり気にしませんでした。合格者の記事を見ると、みんなの模擬試験の結果は50～65%ぐらいの範囲でした。

###36時間　[Udemy](https://www.udemy.com/course/aws-31955/)
一応、Udemyも65問×3回分を解いてみました。結果は以下のとおり。いつもどおりUdemyはめっちゃムズイです。

模擬試験①：58%
模擬試験②：53%
模擬試験③：49%

本番試験のスコアが905点（合格ラインは720点）と余裕があったので、結果論Udemyはやらなくて良かったと思いました。

#さいごに
AWS SAA取得後のAWS DVA取得でしたが、個人的な難易度はDVAの方が簡単だと思います。次はAWS SOAを取得したいところですが、ラボ問題があるので受けようか迷ってます。どうしよう。。	(´・ω・｀)
magentoにてCould not validate a connection to Elasticsearch.のエラー

# 前置き

ホスト側にて、magentoをインストールしようとしてエラー。

```
作りたい階層$ bin/magento setup:install 
--色々オプション付ける。
```

```
In SearchConfig.php line 81:
                                                                                          
  Could not validate a connection to Elasticsearch. No alive nodes found in your cluster 
```
このようなエラーがでました。


# 対処法

```
$ bin/magento module:disable {Magento_Elasticsearch,Magento_InventoryElasticsearch,Magento_Elasticsearch6,Magento_Elasticsearch7}

The following modules have been disabled:
- Magento_Elasticsearch
- Magento_Elasticsearch6
- Magento_InventoryElasticsearch
- Magento_Elasticsearch7

Cache cleared successfully.
Generated classes cleared successfully. Please run the 'setup:di:compile' command to generate classes.
Info: Some modules might require static view files to be cleared. To do this, run 'module:disable' with the --clear-static-content option to clear them. 
                                                                                       
```
このようにしました。



インストールしなおしたところ、できました。
gitignoreの使い方

app/ ディレクトリの中身を見てみると .gitignore というファイルがある。
.gitignoreとは「Git で管理しないもの」を設定するためのファイル。

↓空のディレクトリを作成

```
touch data/mysql/.gitignore
```

↓作成したディレクトリ（.gitignore）を表示

```
vi data/mysql/.gitignore
```

↓設定を書き換える

これは管理しない（？）っていう意味

```
*
!.gitignore

# 逆に、Git 管理したいファイルがある場合は先頭に ! をつけてファイルを指定する
```


↓ファイルを管理対象から除外する

```
git rm -r --cached {ファイル名}
```

↓addの取り消し

```
git reset HEAD {file} {file}
```


参考記事
https://qiita.com/megu_ma/items/a438a71c84145f14d04e
https://qiita.com/u-dai/items/54c26d94dfddee7345fe
書評「Oracle Cloud Infrastructure徹底入門 Oracle Cloudの基本からインフラ設計・構築まで」

# 国内初のOracle Cloud Infrastructure本が発売されたよ
2021年7月21日にOracle Cloud Infrastructureの市販書籍が出版されました。これまで英語の書籍は4～5冊（資格本を除く）あったのだけれど、日本語版の書籍は2冊目。今回、献本していただいたので書評を書きます。

[「Oracle Cloud Infrastructure徹底入門 Oracle Cloudの基本からインフラ設計・構築まで」](https://www.shoeisha.co.jp/book/detail/9784798169033)（翔泳社）。著者は日本オラクルの方々。464ページで3,828円なり。
![oracle本.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266049/1315ac4b-3d92-eb3d-27c7-ff1fbb64a054.png)
# 目次はこちら

◇第1部：Oracle Cloud概要・主要サービスの理解
　・第1章：Oracle Cloudの基本知識
　・第2章：まずは触ってみよう
　・第3章：認証・認可（IAM/IDCS）
　・第4章：仮想クラウド・ネットワーク（VCN）
　・第5章：コンピュート・サービス
　・第6章：ストレージ・サービス
　・第7章：データベース・サービス
　・第8章：ロード・バランサ
　・第9章：その他のサービス
◇第2部：OCIを利用したシステム設計
　・第10章：クラウドでのシステム設計のポイント
　・第11章：ネットワーク設計
　・第12章：可用性設計
　・第13章：セキュリティ
　・第14章：運用設計
　・第15章：移行設計

# 書評を書くよ
基本的にはOracle Cloud InfrastructureのIaaS部分(Compute, Network, Storage, IAM)を主体にした本で、当然Oracleデータベースについても書かれている。

パブリック・クラウドの書籍で悩ましいのが進化の早さだ。サービスの種類や機能、画面もバンバン変わっていくので陳腐化が激しい。そんなこともあり、画面ショットや具体的な手順を載せているのはホンのわずか。陳腐化しづらい、アーキテクチャや設計の考え方を中心に取り上げている。

**「第1部：Oracle Cloud概要・主要サービスの理解」**
ここではOracle Cloud Infrastructureを使用するうえでの基礎知識が書かれている。クラウド初心者やAWSやAzureのユーザーなら、ひととおり目を通せば、Oracle Cloud Infrastructureがどのようなものなのか理解できるだろう。

Oracle社や日本オラクル社が出しているホワイトペーパー類に書かれていることも多いが、同一時点の記述で簡潔にまとまっているのがメリットだろう。

欲を言えば、AWSやAzureとの比較があると理想的なのだが．．．。たとえば、ネットワークまわりは似ていても少し違う部分があるとか。

**「第2部：OCIを利用したシステム設計」**
ここが本書のアピールポイントだろう。顧客とのQAやコンサルで蓄積したノウハウが投入されている。

ネットワークや可用性、セキュリティなどの観点で設計の考え方を説明し、図表を多く使いわかりやすく解説している。さらにサンプル要件ごとの実装例を解説しているので、これまで学んだことの整理になる。また、将来的に予定されている新機能に言及しているのもGoodだ。



運用設計ではOracle Management Cloudを紹介すると共に、2020年10月に発表したOracle Cloud Observability and Management Platformに少しだけ触れている。執筆時点では詳細が明らかになっていなかったので仕方ないがOracle Management Cloudは無くてもよかったような気がする。

というかOracle Cloud Observability and Management Platformがわかりにくいので、なんとかしてほしい。＞Oracle

# まとめ
すでにバリバリOracle Cloud Infrastructureを使いこなしているユーザーには不要かもしれないが、初心者や中級者には参考になる部分は多いはずだ。また、比較的変わりづらい部分を中心に書いていることもあって、3～4年は十分に使っていけるだろう。

当然、新機能とのギャップは生まれるが、以下のドキュメントを読むことで吸収できるはずだ。

* [公式マニュアル：リリースノート](https://docs.oracle.com/en-us/iaas/releasenotes/)
* [オラクルエンジニア通信 - サービス・アップデート](https://blogs.oracle.com/oracle4engineer/4%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9%e3%83%bb%e3%82%a2%e3%83%83%e3%83%97%e3%83%87%e3%83%bc%e3%83%88)

あらためて振り返って見ると、意外にもOracle Database（Autonomous Database含む）の記述が少ない。オンプレミスとの違いが少ないことや、とくにAutonomous Databaseは変化の可能性があるからだろうか。

なんだか提灯記事のようになってしまったが、クラウドにしては色あせない部分を取り上げた良書と言えるだろう。

ちなみにOracle Cloud Infrastructureのマニュアルは、[日本語版](https://docs.oracle.com/ja-jp/iaas/Content/home.htm)だけでなく、念のため[英語版](https://docs.oracle.com/en-us/iaas/Content/home.htm)もチェックすること。とくに新機能の部分は、英語と日本語で乖離があることが多いので要注意だ。

マニュアルはWeb(HTML)なのでページをクリックするのが面倒という人には[PDF版](https://docs.oracle.com/en-us/iaas/Content/General/Reference/pdfguides.htm#PDF_Guides)がオススメだ。日本語版は無いが、PDFだと縦スクロールだけなので早く読める。
JSTQB AL テストマネージャ　まとめ


以下、作成記事まとめ

[JSTQB AL テストマネージャ 第1章 420分](https://qiita.com/tonosama/items/390555ba6405de61af5e)

* テストプロセス


[JSTQB AL テストマネージャ 第2章 750分](https://qiita.com/tonosama/items/30ab40d49547ae09c57e)

* テストマネジメント

[JSTQB AL テストマネージャ 第3章 180分](https://qiita.com/tonosama/items/e1f1290e6e1c396495a4)

* レビュー


[JSTQB AL テストマネージャ 第４章 150分](https://qiita.com/tonosama/items/577e2dc86b9957f8f2b5)

* 欠陥マネジメント


[JSTQB AL テストマネージャ 第５章 135分](https://qiita.com/tonosama/items/239d73c70811b4af06eb)

* テストプロセスの改善


[JSTQB AL テストマネージャ 第６章 135分](https://qiita.com/tonosama/items/d8b253984137e15e9b9c)

* テストツールおよび自動化


[JSTQB AL テストマネージャ 第7章 210分](https://qiita.com/tonosama/items/0439ecfcdc4c699c2c87)

* スタッフのスキル-チーム構成
Pythonで理解する確率分布

##背景
最近教師あり学習を行おうとして、データが足りないというケースに遭遇することが増えてきたので、データがなくても学習してくれる強化学習に関心を持ちました。

##環境
Google Colaboratoryで実行しました。

##参考
「仕事で始める機械学習第2版」268頁～270頁
この書籍では6目のサイコロを2回振った値(2D6)が5以下になる確率を計算していました。

この記事では12目のサイコロを2回振った場合に合計が10以下になる確率を計算していきたいと思います。

```python:googlecolab
import numpy as np
import scipy.stats 
import matplotlib.pyplot as plt
import japanize_matplotlib

n = 1000000 #サイコロを振る回数の指定
dice_total = np.random.randint(1,13, size=n) #1個目のサイコロを振る
dice_total +=np.random.randint(1,13, size=n) #2個目のサイコロを振る
x, y = np.unique(dice_total, return_counts=True)
y = y/n #カウント値を出現確率に変換
plt.plot(x, y, marker="o", label="2D12 PMF")
plt.legend()
plt.xlabel("2つのサイコロの出目の合計")
plt.ylabel("出現確率")
plt.show()
```

サイコロの出目の合計値の分布はこのようになりました。
![2つのダイスの出目の合計.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1910510/e3ce38f1-7495-7d8e-a34d-5fac9217ef62.png)

今回の条件は10以下の場合なので、ここからは2,3,4,5,6,7,8,9,10が出たパターンの累積和を求めていきます。

```python:googlecolab
cumsum_y = np.cumsum(y)
print(cumsum_y)
plt.plot(x ,cumsum_y, marker="o", label="2D12 CDF")
plt.legend()
plt.xlabel("2つのサイコロの出目の合計")
plt.ylabel("出現確率の累積和")
```

```python:output
[0.006789 0.020778 0.041668 0.0695   0.103853 0.145727 0.19453  0.250322
 0.312429 0.382303 0.458935 0.542448 0.618804 0.68793  0.750322 0.805665
 0.854397 0.895944 0.930564 0.958424 0.979276 0.99311  1.      ]
```
![２つのサイコロの出目の合計(累積和).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1910510/558883bc-312c-0c64-568d-548f485f8a1b.png)

リストの中身を見てみると1が出る可能性は0%なので0と表示されています。
左から順番にリストを確認していき、インデックス[9]つまり10の場合の累積和は0.312429となっています。
よって31.2%ということが分かります。

一応理論値を出してみました。サイコロの理論値2~10まで
1/144+2/144+3/144+4/144+5/144+6/144+7/144+8/144+9/14=0.3125

ということで合っていました。

##まとめ
確率分布の概念についてサイコロの出目を題材にサイコロを用いて計算してみました。
Ubuntu 20.04 LTSで" E: You must put some 'deb-src' URIs in your sources.list"が出た時の対処方法

# エラー内容
```
$ sudo apt-get build-dep linux linux-image-$(uname -r)
パッケージリストを読み込んでいます... 完了
E: You must put some 'deb-src' URIs in your sources.list
```

# 対処方法

以下を参考にした。
https://askubuntu.com/questions/496549/error-you-must-put-some-source-uris-in-your-sources-list

```
$ software-properties-gtk
 -> "ソースコード"にチェックを入れる。
```
ラビットチャレンジ　応用数学

応用数学で学んだ内容をこちらに記載して行きます。
今回は考察等はないため、短めの文章になっていますのでご理解いただけますと幸いです。

# 第1章 線形代数

行列積では、内積を利用した計算方法になる。<br>
また行列式では、行列積とは異なり,ad-bcの計算式で求める。<br>

逆行列とは、とある行列式Aに対し、左右どちらから掛け合わせても単位行列になるものを指す。<br>
逆行列の計算式は、1/(ad-bc)*行列A（a,dを転置したもの、b,cは符号を反転したもの）にて求める事が可能。<br>
また逆行列は、ad-bc=0の場合、存在しないので注意が必要。<br>

固有値と固有値ベクトルについて、Ax = λxにて表現され<br>
λを固有値, xを固有ベクトルという。<br>
各求め方は、(A-λE)x = 0にてλ（固有値）を先に求め、λに数値を代入し固有値ベクトルを求める事が可能。<br>

また、固有値分解とは、先程の固有値と固有値ベクトルを行列で考え3つの積に分解したものをいう。<br>
計算式では、A = VΛV-1（固有ベクトルの行列＊固有値のベクトル＊固有値ベクトルの行列の逆行列）　にて求める事が可能。<br>

また、特異値分解では、m＊nなど正方行列ではないものの固有値分解を当てはめたものをいう。<br>
M = USV-1, M.T = VS.T U-1にて表現が可能。<br>
Uは直行行列、Sは対角行列を示す。（直行行列は、転置した場合に逆行列になるものをいう）<br>
また、特異値とはSの対角行列の対角の箇所を示す。正確には√を掛け合わせて求める。<br>

# 第2章 確率・統計

条件付き確率は、特定化の状況での確率を示し、同時確率とは異なる。<br>
求め方は、P(B|A) = P(A U B)/P(A)にて求める事ができ、ベイズ定理と考え方は同じである。<br>

確率変数とは、事象を結びつく数値を示し、施行回数が良い例である。<br>
また、期待値はsum(確率変数*確率)にて求める事が可能。<br>
ベルヌーイ施行の期待値は、p、分散はp - p**２にて求める事ができる。<br>
（ベルヌーイ施行は、n回施行し、k回成功する確率を求めるものである。
数式はnCk * p ** k(1-p) ** n-k である。また、その分布を示したものを2項分布という。）

# 第3章 情報理論

情報量とは、複雑さや珍しさ（確率の低さ）を示したものである。<br>
数値が高いほど複雑であり、確率が低いほど情報量が多い。<br>
式そのものは、-p(x)log(p(x))にて求める事が可能。<br>

自己情報量は、-log(p(x))にて求める事が可能。<br>
また、計算の単位は底が2ならばbit。底がネイビア数ならnatになる。<br>

シャノンエントロピーとは、自己情報量の期待値の事を示し<br>
-sum(p(x)log(p(x)))にて求める事が可能。<br>

KLダイバージェンスは、確率変数q, pの似ている度合いを示し,q = pならば0で表示される。<br>
０に近いほど2つの分布は似ている。<br>
-∮p(x)log(q(x)/p(x))dxにて表示可能。<br>
[Ruby] AtCoder 過去問　B - 1%

##はじめに
AtCoderの過去問B問題を解いてみました。
よろしくお願いします。

問題は下記リンクから確認してください。

https://atcoder.jp/contests/abc165/tasks/abc165_b

##B - 1%

まず、入力受け取りをします。
今回は一つだけなのでgets.to_iでいけます。
この入力値=目標金額になるのでgoal_balanceとでもしておきます。

```ruby
goal_balance = gets.to_i
```

高橋くんはもともと100円を銀行に預けているので変数に入れておきます。
また、このあとwhile文で使う繰り返した回数を数えてくれる変数を用意して0を代入しておきます。

このカウント=年数です。

```ruby
goal_balance = gets.to_i

bank_balance = 100
year = 0
```

これで使う変数の準備ができました。
あとはwhile文で処理して、yearを出力すればオッケーです。

```ruby
goal_balance = gets.to_i

bank_balance = 100
year = 0

while goal_balance > bank_balance
  bank_balance += bank_balance / 100
  year += 1
end

puts year
```

貯金額が目標金額未満だったら処理を繰り返すように条件式を記述し、処理としては、1%足していくので単純に100で割れば現在の貯金額の1%が割り出せます。
それを貯金額に足していく処理になります。

最後に年数(繰り返した回数)を出力したら完了です。
minttyで設定が保存できないときの対処法(Windows 10)

## 状況
minttyのOptionsから設定を変更したが、次回起動時に設定がリセットされていた。`C:\Users\ユーザー名\.minttyrc` は存在して設定も正しく書き込まれているのに、何故か読み込みができない。

## 対処法
Windowsに`HOME`環境変数を追加する。

1. タスクバーから「environ」で検索し、「システム環境変数の編集」を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188949/e536699c-6ebd-86e2-a8ce-6d38a27201dc.png)

1. 「環境変数」を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188949/d50b8281-6e1d-3c86-772a-bb54801eb90c.png)

1. ユーザー環境変数の方の「新規」から環境変数を作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188949/b0aad5e1-8a41-78f4-62bc-e31ad171d073.png)

1. 「変数名」に`HOME`、「変数値」に`C:\Users\ユーザー名`を入力して「OK」を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188949/2700cba0-75ec-bc24-461c-cc8d5fc96d43.png)

1. 「OK」を押して終了する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188949/62fc104d-2382-0bcf-8001-309c8ce79afc.png)
【amplify】Module not found: Can't resolve './graphql/mutations' のエラー解消

# エラー発生

https://docs.amplify.aws/start/q/integration/react/

AWS amplifyのチュートリアルに沿ってTodoアプリを作ろうとしたところ、下記エラーが発生しました。

```
Module not found: Can't resolve './graphql/mutations' in '/Users/hoge/huga/src'
```

エラー文で検索をかけてみても、解決につながる記事に出会えなかったので、とりあえず最初からやり直すことにしました。

# エラー発生源
チュートリアルに沿って進んでいくと、ターミナル上で質問形式になる箇所がいくつかあります。

その中の、おそらく下記ページでのやり取りで何か入力を間違えてしまっていたように思います。

https://docs.amplify.aws/start/getting-started/data-model/q/integration/react/

ここと、

```
amplify add api
```
```
? Please select from one of the below mentioned services:
# GraphQL
? Provide API name:
# myapi
? Choose the default authorization type for the API:
# API Key
? Enter a description for the API key:
# demo //ここを何か違うことを書いてしまった気がする
? After how many days from now the API key should expire:
# 7 (or your preferred expiration)
? Do you want to configure advanced settings for the GraphQL API:
# No
? Do you have an annotated GraphQL schema?
# No
? Choose a schema template:
# Single object with fields (e.g., “Todo” with ID, name, description)
? Do you want to edit the schema now?
# Yes
```

ここ

```
amplify push
```
```
? Do you want to generate code for your newly created GraphQL API Yes
? Choose the code generation language target typescript // ここでTypeScriptを選ぶことで以後の質問が変わる
? Enter the file name pattern of graphql queries, mutations and subscriptions src/graphql/**/*.ts
? Do you want to generate/update all possible GraphQL operations - queries, mutations and subscriptions Yes
? Enter maximum statement depth [increase from default if your schema is deeply nested] 2
? Enter the file name for the generated code src/API.ts
```

# まとめ
今回は、チュートリアルと違ってTypeScript × Reduxで作成しているので、基本的にはデフォルトの値で問題ないのですが、対応する質問などは注意しながらやっています。

引き続き、チュートリアルを進めていきます。
Pythonではじめる機械学習 part4

# 前回の内容
[Pythonではじめる機械学習 part3](https://qiita.com/yuto_suzuki/items/00f58c32e2c87907b477)

# k-最近傍法を使ったアイリスのクラス分類 概要
一番初めの分析モデルとして、k-最近傍法というアルゴリズムを使ったアイリスのクラス分類についてまとめていきます！
初心者の自分にも分かりやすいアルゴリズムだったので、ここを足がかりに学習を進めていきましょう。

### k-最近傍法とは？
新しいデータポイントを予測する際に、単純に学習済みの特徴量に一番近い点を見つけてきて、それを分類結果とするアルゴリズムである。
k-最近傍法の「k」はいくつの近傍点を参考にするか？を表している(つまり、3個とか5個とかも取れる。)
このセクションでは一旦、1つの近傍点で見る。

### k-最近傍法の実装

```kNeighbors.py
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
```

`n_neighbors`で与えている引数が、近傍点数となる。

また、テストデータを与えるには、fit関数を呼び出す。

```fit.py
knn.fit(X_train, y_train)
```
＊X_train, y_trainはiris_dataから解析したもの。
X_train: データを含むNumpy配列
y_train: ラベルを含むNumpy配列

### 予測を行う
いよいよ本題。fitで与えたテストデータから最近傍法アルゴリズムを用いて新規データの予測を行います。

```predict.py
# ガク長: 5cm, ガク幅:2.9cm, 花弁長:1cm,花弁幅:0.2cmの野生のアイリス
X_new = np.array([[5, 2.9, 1, 0.2]])

prediction = knn.predict(X_new)
print("Prediction: {}" .format(prediction))
print("Predict Target Name: {}" .format(iris_data['target_names'][prediction]))
```

出力は以下の通り

```predictionOutput.txt
Prediction: [0]
Predict Target Name: ['setosa']
```
＊クラス0、[setosa]という分類だとモデルは予測したということになる。

### モデルの評価について
さて、ここで予測を行ったはいいものの、本当にこれが正しいのか？の検証が必要である。
前回までで述べたが、機械学習は学習データとテストデータに分割してから、予測を行うのが一般的である。
ここで、実際に取っておいた各テストデータに対して、同様に予測を行い、正しいかどうかの精度を出力する。

### モデルの評価の実装
```predictonTest.py
# とっておいたテストデータに対して、予測を行い、score関数を使ってスコア(精度)を算出する。
y_pred = knn.predict(X_test)
print("Test set preditions: \n {}" .format(y_pred))
print("Test set score: {:.2f}" .format(knn.score(X_test, y_test)))
```

出力は、以下の通り

```predictonTestOutput.txt
 [2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0
 2]
Test set socre: 0.97
```
これはつまり、テストセットに対して97%の精度を持った予測ができたことを表します！！✌️

# k-最近傍法を使ったアイリスのクラス分類 所感
今回は結構ボリュームが多くなってしまいましたが、k-最近傍法といういかにも機械学習らしいアルゴリズムが登場しました。
記事中にも書きましたが、この内容はまだ初心者にも理解できる範疇かと思ったので、心が折れるのはもう少し先延ばしになりそうです。

予測自体は、KNeighborsClassifierのpredict関数で思ったより簡単に行えるんだなと実感（まだ簡単なアルゴリズムだからかもしれないが。）
また、前記事で予測評価の重要性について触れたが、今回実践的に踏み込めてより理解が進んだように思う。

# 次回記事
[Pythonではじめる機械学習 part5](https://qiita.com/yuto_suzuki/items/7104a87927d0b381ebc0)
自作PCでスピーカー付きモニターから音が出なくて四苦八苦した話

##  環境
- cpu : intel corei7 10700K
- マザボ：TUF GAMING Z590-PLUS WIFI
- モニター：I-O DATA ゲーミングモニター 24.5インチ(75Hz) GigaCrysta（スピーカついてるやつ）

## つまった所
PCを一通り組み終わり、モニターにつなぎwindowsを入れて...
これで無事組み終わった～初めてにしてはうまくいったのでは？！
とか思ってたら悲劇が起きた、なんとモニターから音が出ないのである
不思議なことにＰＣケースにイヤホンを刺すとイヤホンから音が聞こえるという状態

## 詳しい状態
モニターから音が出ない関連をググってみたところ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407528/8a436dce-207d-91a2-ce43-26c92513abd7.png)
以下の画面でディスプレイ用オーディオを選択して規定にする
といったものが多かった（画像は成功した時のスクショ）
が、今回はそのディスプレイ用オーディオが選択肢として初めからなかった
接続としてはHDMI、DisplayPort両方試しても同じく選択肢として表示されなかった
何を思ったかそれらのケーブルに加えオーディオケーブルを購入して刺したところ、上図の部分でスピーカーの部分が選択されている状況で音は何もでないという状態となった
ちなみにここまでで全部モニターに映像は出力されている


## 解決策
どこかのWebサイトに
> 自作PC/BTOパソコンの場合BIOSの設定でHDMI、 DisplayPortでの音声出力を制限している場合があります

とかかれていたため一応自身のマザボのBIOSversionを確認してみたところサポートされてるversionのうち一番古いものが適用されていた
よって以下のサイトを参考に早速BIOSのアップデートを行う

https://www.asus.com/jp/support/FAQ/1044348/

https://www.asus.com/jp/support/FAQ/1012815/

するといい感じに音が聞こえるようになりました！！
めでたしめでたし
オーディオケーブルどうしようかな...