OmniAICreator/Qiita-1.07M huggingface dataset:
書籍紹介：Spring Boot 初心者におすすめの参考書！

※記事の内容は2020年7月25日執筆時点のものです
##書籍情報
今日はSpring Boot初心者におすすめの書籍を紹介したいと思います。
私自身も業務でSpring Bootを初めて使う際に大変お世話になりました。
それが↓↓こちら↓↓の書籍です。

[「【後悔しないための入門書】Spring解体新書」田村達也 (著) ](https://www.amazon.co.jp/【後悔しないための入門書】Spring解体新書-Boot2で実際に作って学べる！Spring-Security、Spring-JDBC、Spring-MyBatisなど多数解説！-ebook/dp/B07H6XLXD7)

これからこの書籍のおすすめポイントをいくつかご紹介したいと思います。

##おすすめ読者像
　この書籍はJavaでのオブジェクト指向プログラミングなど基本は理解しているけれど、Spring Bootなどを使ったフレームワーク開発は未経験という方におすすめです。
　また、時間のない方、まずはSpringについてざっくりと概要を知りたい方にもおすすめです。逆に、Springについて深く理解したい方には物足りないかもしれません。

##おすすめポイント
###１．表現が平易かつサンプルコードが豊富で読みやすい
　実はこの書籍の他にも何冊かSpringの関連書籍を読んだのですが、内容や言い回しが難解だったり、それぞれの機能の使い所がいまいち頭に入ってこないものがありました。その点この書籍はアプリを作る流れに沿って説明をしているので、小説を読むような感覚でサクサクと読み進めることができました。
　また、サンプルコードについては該当する箇所だけでなく、クラス宣言や前後のコードを含めて掲載してくれているほか、トピックとなる箇所には下線を引いてくれています。そのため実装のイメージが湧きやすく、読む際に迷子になることもなくスムーズに理解を深めることができました。

###２．Spring初学者にとって最適なボリューム感
　前述の通りアプリを作成する流れに沿って説明しているため、実用的なトピックをハイライトで学ぶことができます。そのためすべての機能を網羅している訳ではないのですが、DI、AOP、Springセキュリティ、SpringJDBCといった主要なトピックを押さえているため、一冊理解すればアプリ開発に必要なSpring Bootの必須知識は一通りインプットできるのではないかと思います。

###３．Kindle Unlimitedメンバーなら追加料金なしで読める！しかも電子書籍用レイアウト対応！
　この書籍はkindle版があり、そちらは電子書籍用レイアウトに対応していますので、デバイスに合わせて文字サイズなどのレイアウトが自動調整されます。文字などもくっきり表示され読みやすいです。ハイライトマーカーを引いたり、検索したり、目次ジャンプをすることもできるので学習の記録をしたり辞書的な使い方もできますよ。固定レイアウトだとこれらの機能がつかえず、文字も小さくなりがちで読みづらいんですよね。
　そして嬉しいのがなんとこの書籍、Kindle Unlimitedの対象書籍になっているため、契約をしていれば追加料金なしで読むことができます！ちなみにKindle Unlimitedとは、月額980円で対象の電子書籍が読み放題のサブスクリプションサービスです。技術書の他にも漫画や雑誌も読み放題ですし、一冊技術書を買うよりも安いかと思いますので、ご利用になられたことのない方は一度試してみてはいかがでしょうか。

##おわりに
以上のように、Spring Boot学習の一冊目にはうってつけかと思いますのでぜひ試してみてくださいね。最後まで読んでいただきありがとうございました。
初心者のためのpandas基礎⑥Group by

#pandasとは
Pythonにて、構造化データ（テーブル型のデータ）を扱うためのライブラリです。ファイルの読み込みやその後の加工・抽出処理などを簡単に行うことができ（SQL的な感覚で行うことができ）、機械学習などのデータの前処理で必須となるライブラリです。
他項目への目次は[こちら](https://qiita.com/Yanagawa_Yoshihisa/items/e1d7d0e939f58e7301ea)になります。

#はじめに
本記事では、Group byテーブルについて記載します。基本的なSQLの知識がある前提での記載になります。

サンプルはタイタニックのデータで試してみます。タイタニックがわからない人は｢kaggle タイタニック｣で調べて下さい。

```python:
dataframe = pd.read_csv('train.csv')
```

#使い方
まずはライブラリをインポートします。pandasにpdという名前をつけてimportします。

```python:
import pandas as pd
```
基本的なサンプル構文を下記に示します。

Sex(性別)とSurvived(生存フラグ)でグループ化し、`count()`で要素の数をカウントします。

```python:
dataframe.groupby(['Sex','Survived']).count()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600679/a0b67702-c2fd-f496-023b-215ccfbf67c2.png)

対象となる列を絞る場合は、下記のように記載します。（例としてAge（年齢）に限定します）

```python:
dataframe.groupby(['Sex','Survived'])['Age'].count()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600679/f05bb58b-d208-5418-87c8-f8b392fd7ff6.png)

平均が取りたい場合は、`.mean()`、行数が取りたい場合は、`.size()`のように`count()`の部分を置き換えます。`describe()`では全体感つかむことができます。

```python:
dataframe.groupby(['Sex','Survived']).describe()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600679/1f2230aa-d967-705d-800e-79767230adaf.png)

#抽出
SQLのGroup byのイメージとは異なるのですが、データ抽出にも使えます。
Sex(性別)がmaleのデータを抽出します。

```python:
dataframe.groupby(['Sex']).get_group("male") 
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600679/2836d8c7-61ae-16fe-885c-de31f9bfd824.png)

以上です。グループ化についてはもっといろいろな機能があるのですが、あまり使わないのでここまでに留めます。他にもやりたい事がある方は、ご自身での調査をお願いします。

#最後に
初心者にもわかるように、Pythonで機械学習を実施する際の必要な知識を簡便に記事としてまとめております。
目次は[こちら](https://qiita.com/Yanagawa_Yoshihisa/items/a3fa521d89c471b3e71f)になりますので、他の記事も参考にして頂けると幸いです。
Git,GitHubの基礎　（コマンド）

Gitの基礎復習のため作成

すべて該当ディレクトリで実行

####ローカルリポジトリを作成

```:ターミナル
$ git init

#隠しディレクトリである.gitが作成され、Gitで管理できるようになる。
```



####隠しディレクトリが存在しているか確認

```:ターミナル
$ ls .git
```


####インデックスに追加

```:ターミナル
$ git add　"ファイル名"

#※実行の際は上記　""　は不要
```


####インデックスに追加されている変更修正を確認

```:ターミナル
$ git status
```


####コミット
```:ターミナル
$ git commit -m 'first commit' 

#'first commit'というタイトルを付けてコミットする
```



####ログの確認

```:ターミナル
$ git log

#コミットの履歴を表示するための操作
```


####ローカルリポジトリをリモートリポジトリに紐付け

```:ターミナル
$ git remote add origin "紐付けたいリモートリポジトリで発行されているURL"

#※実行の際は上記　""　は不要
```


####リモートリポジトリ紐づけ完了確認

```:ターミナル
$ git remote
```


####ローカルリポジトリをリモートリポジトリに反映させる

```:ターミナル
$ git push origin master


#pushした際にユーザー名とパスワードの入力を求められたら、下記実行。

#ユーザー名求められたら
Username for 'https://github.com' : #ここにGitHubのusernameを入力

#パスワード求められたら
Password for 'https://github.com' : #ここにGitHubのpasswordを入力
```


####gitのローカルリポジトリを削除

```:ターミナル
$ rm -rf .git


#レポジトリ名を指定して削除
$ rm -rf "レポジトリ名"

#※実行の際は上記　""　は不要

```



違っていたらコメントなどいただけると幸いです。
虹彩認証

応用情報技術者令和元年秋期 午前問45

虹彩認証に関する記述のうち，最も適切なものはどれか。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/ee99cada-02e2-1c3e-1955-79a3120dbfa9.png)

**虹彩認証**とは、眼球の特徴で本人認証を行うバイオメトリクス認証技術です。
**虹彩**とは、眼球の黒目部分、瞳孔の外側にある円状の部分のことで、その部分のしわのパターンが個人ごとに異なることを認証に利用します。
**虹彩**は、満2歳以降は経年変化しない
**虹彩**は、一卵性双生児でも判別可能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/b96cf212-c1ed-8544-f9ef-fc8741b63d82.png)


From　https://www.ap-siken.com/kakomon/01_aki/q45.html
月度を用いて範囲の判定をしたい

# 問題点
月度のデータをもっているときに9月以前で取得したいが、
1,2,3月は次の年のデータなので含めたくないということがあると思います。
そのときに簡易的に取り除く方法の例をメモします。

# どうやるか
以下のように比較するそれぞれの月度を変換して、
変換後の値を用いて判定することで解決できます。

```java

(月度 + 8) % 12
```
例えば、9月度以前のデータを取得する際は、
取得元データの月度変換値<=基準となる月度変換値とすることで、
4,5,6,7,8,9月だけが取得できるようになります。
なぜなら変換後の値が以下のようになるためです。
9月の変換後の値は「5」なので、その値以下である4～9月が取得できます。

| 月度 |変換後の値 |
|:----|----------:|
| 1   |9|
| 2   |          10 |
| 3   |        11 |
| 4   |         0 |
| 5   |          1 |
| 6   |           2|
| 7   |  3         |
| 8   |   4        |
| 9   |    5       |
| 10  |    6       |
|11   |      7     |
| 12  |      8     |
RTX1200をセットアップする(CUI編)Part1.5

##目的
このページではRTX1200を初期化してからipv4/ipv6で通信できるようにするところまでを目的とする。[前回](https://qiita.com/yunimisaka/items/019add5cc0f6c43ccacf)と[次回](https://qiita.com/yunimisaka/items/0632c402ac5606d993e9)の間で文字コードで困ったのでそれの対処法を記す。
例のごとく筆者がCUIが好きなので使いやすいGUIが用意されているがガン無視していく。
いつものことながら筆者が環境作りなおすときに見るためのメモ書きなのでわかりにくいところが多い気がする。

##使用機材・ソフトウェア
前回と同じだが記しておく。
・RTX1200([リンク](https://network.yamaha.com/products/routers/rtx1200/index))
・PC(Ubuntu16.0.4)
・GTKTerm 0.99.7-rc1
・telnet
・ifconfig
・USBシリアルケーブル(クロス)([amazonで筆者が買った物](https://www.amazon.co.jp/dp/B01N0F91GH/ref=cm_sw_r_tw_dp_x_IiNgFb4TCTWJ8))

##ログイン
前回ログインまでは行ったので前回と同じ手順でログインをする。
今回もせっかくシリアルケーブルを買ったのでシリアル通信で行っていく。
何から何まで時代に逆行してけんかを売っている気がするけれどもきっと気のせい。

##文字コードの設定
作業をしていると以下の画像のように文字化けが発生した。赤い塗りつぶしの部分にはMACアドレスが出ている。

![Screenshot from 2020-07-25 10-33-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408603/66c4a2e3-2fbd-a6b5-d9bb-a53dcb5e26e7.png)

こうなった場合は以下のコマンドで文字コードを変更する。初期設定ではシフトJISになっている。
以下のコマンドを実行すると文字コードAscii、英語でログが出力されるようになる。

```
console character ascii
```

Ascii以外を設定したい場合は上記コマンドの`ascii`部分を以下の表を見て変更する。

|設定値|言語   |文字コード|
|:----|:-----|:--------|
|ascii|英語   |ascii    |
|sjis |日本語 |シフトJIS |
|euc  |日本語 |euc      |

執筆時点ではRTX1200はRev.10系なので問題はないと思うが、もし14以降のファームウェアを使っている場合は以下の表を参考にする。

|設定値|言語   |文字コード|
|:----|:-----|:--------|
|en.ascii|英語   |ascii    |
|js.sjis |日本語 |シフトJIS |
|js.euc  |日本語 |euc      |
|js.utf8 |日本語 |utf8     |

##保存
設定を保存するには下記のコマンドを打つ。ただし、Administratorでなければ出来ないので、Administratorで実行する。Administratorに昇格するには`administrator`コマンドを発行する。


```
save
```


##参考
- [ヤマハネットワーク周辺機器
技術情報ページ-4.19 コンソールの言語とコードの設定](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/setup/console_character.html)
Raspberry PIにパスワードなしでsshでログインする（鍵認証）

# モチベーション

RaspberryPiをサーバっぽく使っているとsshでログインする機会が増えますよね。毎回パスワードを打つのは面倒なので鍵認証を設定しましたというお話です。

Linuxの基本的なお作法だと思うので調べたらいくらでも出てくるのですが、毎回調べるのすらめんどくさいのでここに残しておきます。

## authorized_keysの作成

raspberry pi 上で```~/.ssh```の作成（まだない場合のみ）

```bash
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
```

authorized_keysの作成

```bash
$ touch ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
```

## 公開鍵の作成

自分のPCで（ログインコマンドを打つ側のpc）

```bash
$ ssh-keygen -t rsa
```

いろいろ聞かれますが、とりあえずは全てDefaultで（Enter Keyを押し続ける）

以下に、秘密鍵と公開鍵が作られます。

```bash
$ ls ~/.ssh
id_rsa  id_rsa.pub
```

```id_rsa.pub```をraspberry piに転送する。
注意：RaspberryPi上に同じ名前のファイルがあると意味不明、最悪の場合上書き保存されてしまうのでリネームして転送することをお勧めします。私はimacの鍵なので```*.imac```としました。

```bash
$ scp id_rsa.pub pi@xxx.xxx.xxx.xxx:~/.ssh/id_rsa.pub.imac
```

##　公開鍵の登録

再びraspberry piに戻り```~/.ssh```で作業を進めます。
転送がうまく行っていれば以下のようにファイルが置かれます。

```bash
~/.ssh $ ls
authorized_key id_rsa.pub.imac
```

```id_rsa.pub.imac``` の内容をauthorized_keysに登録します。


```bash
cat id_rsa.pub.imac >> ~/.ssh/authorized_keys
```

##　完成

これで、次からsshでログインする際にパスワードを聞かれることはなくなります。
正規表現の使用事例

プロジェクト中使っていた正規表現を整理する。
----------
- メールアドレスのチェック

```メールアドレスのチェック.cls
'^[a-zA-Z0-9!#%&*+\\-\\./=?_`{|}]*@[a-zA-Z0-9\\-\\.]*$'
```

- 半角文字チェック

```半角文字チェック.cls
'[ -~｡-ﾟ]'
```

- 半角英数記号

```半角英数記号.cls
'[a-zA-Z0-9!-/:-@ -/:-@-~]'
```

- 半角ｶﾀｶﾅ

```半角ｶﾀｶﾅ.cls
'[ｦ-ﾟ]'
'[\\uff61-\\uff9f]'
```

- 全角ひらがな

```全角ひらがな.cls
'[ぁ-んー]'
```

- 全角カタカナ

```全角カタカナ.cls
'[ァ-ンヴー]'
```

- 郵便番号形式チェック

```郵便番号形式チェック.cls
'[\\d{3}-\\d{4}]'
```

- パスワードチェック　半角英数字、特殊記号12桁

```パスワードチェック.cls
'^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[!"#$%&'()\-^@[;:],./\|`{+*}<>?_])[a-zA-Z0-9!"#$%&'()\-^@[;:],./\|`{+*}<>?_]{12}$'
```

- 第1、第2水準以外の文字チェック[亜-黑]

```第1、第2水準以外の文字チェック.cls
String value = 'テスト文字列';
// 指定文字コードに変換
String encode = EncodingUtil.urlEncode(value, 'ISO-2022-JP');
String decode = EncodingUtil.urlDecode(encode, 'ISO-2022-JP');
// 変換前後で比較
if (value != decode) {
    //変換失敗
    return false;
}
```

- 整数部５桁・小数第２位までの小数または整数

```整数部５桁・小数第２位までの小数または整数.cls
'^([1-9][0-9]{0,4}|0)(\\.[0-9]{1,2})?$'
```

- カナ文字数チェック（濁点、半濁点は１文字になります）
　以下の全角カナ濁点分離処理が必要

```全角カナ濁点分離.cls
['ガ','カ゛']
['ギ','キ゛']
['グ','ク゛']
['ゲ','ケ゛']
['ゴ','コ゛']
['ザ','サ゛']
['ジ','シ゛']
['ズ','ス゛']
['ゼ','セ゛']
['ゾ','ソ゛']
['ダ','タ゛']
['ヂ','チ゛']
['ヅ','ツ゛']
['デ','テ゛']
['ド','ト゛']
['バ','ハ゛']
['ビ','ヒ゛']
['ブ','フ゛']
['ベ','ヘ゛']
['ボ','ホ゛']
['パ','ハ゜']
['ピ','ヒ゜']
['プ','フ゜']
['ペ','ヘ゜']
['ポ','ホ゜']
```

- すべて○○ですかの表現

```すべて○○ですか.cls
'^[正規表現式]+$'
```

- ○○が含まれているか

```○○が含まれているか.cls
'.*[正規表現式]+.*'
```
[備忘録]初学者同士で1ヶ月行ったアジャイル開発を終えて

# はじめに
先日、プログラミングスクールの10週間のカリキュラムを終え卒業しました。

その中のRuby on Railsでの最終課題のフリマアプリ作成で、スクラムを用いたアジャイル開発を行い、GitHubを通じたチーム開発について学びました。
様々な困難があったので、記憶の新しいうちに書き残しておきます。
参考になる記事というよりは体験談になりますのでご了承ください。

# アジャイル開発とは
### 概要
一度にまとめて開発を行うのではなく、スプリントと呼ばれる開発周期(今回は1週間)ごとに、その期間でやるべきことを決めて、終わりにレビューを得ながら少しずつ調整して進めていく開発手法です。

### 目的
アプリケーション開発の過程では、仕様変更が頻発します。その頻繁な変更に対応するために、細かく作って細かく確認をすることで柔軟な開発を行うことができます。

### メリット・デメリット
・メリット：　　手直しが容易で、仕様変更にも柔軟に対応できる。
・デメリット：　全体の進捗が把握しにくい

# スクラムについて
### 概要
チーム開発を進めるための手法の一つです。
チームメンバー全員が主体性を持ってアプリケーション作成に対する責任を持って開発を進めていくことが特徴です。

### 進め方
大まかに分けると以下のようになります。

1.アプリケーションの要件定義
2.開発意図をメンバー全員が理解する
3.実装すべき要素を洗い出す
4.上記で洗い出した作業量を見積もる
5.スプリントごとに実装を行う
6.スプリントごとに行ったことを共有する
7.レビューを行いカイゼンに取り組む。

こういったフローを繰り返して開発を進めていきます。

# 実際に行ってみて
ここまでは概念的な話でしたので、
ここからは体験を通じて感じたことを書いていきます。

### 開発メンバーに関して
まず、スクールに通っている初学者同士がチームを組んでいるため、全員が学習開始から2ヶ月程度という状況でした。

よって、全員がしっかりとRailsについて理解できている。というわけではなく、細かいエラーやそもそものロジックが大きく間違っているという事も多くありました。それでも、最後まで作成できたのはチームメンバー同士の助け合いがあったからだと感じました。私自身は比較的理解が早い方でしたので、メンバーのサポートに回ることが多かったです。

「他の人のコードを読むことにより得るものは多い」とよく聞きますが、今回の開発で他の方のエラーを解消することによって、Railsの基本的なMVCモデルの動きへの理解がより深まったと感じております。例えば、ビューでエラーが起きているからそのビューファイルだけしか見ずに長く悩んでいるメンバーのコントローラーを見せてもらうと、そもそも変数が定義されていなかったり、ストロングパラメーターに変更したいカラムが入っていないと言ったことが何度かありました。

### 開発の流れについて
まず、開発のはじめにチームとしてのルールを設定します。
私たちのチームの場合は技術的な面よりもチームとしてのコミュニケーションを重視して、
・分からないことは15分考えたらチームメンバーに相談する
・1日3回の進捗報告には必ず参加する
・参考にした記事やサイトは共有する
・GitHubのコンフリクトの解消は1人では行わない
と言ったことを決めました。

あとは、先ほど書いた流れに沿って進んでいきます。

1週間を1つのスプリントとして、初めに洗い出した要素を細かく分けてメンバーに割り振ってスプリント内で各々が行うタスクとして設定します。そして終わりに、設定したタスクが終えられているか、ルールをしっかり守れていたかというレビューを行います。今回確認のスクールのメンターが行いました。
レビューが終わると、次のスプリントでのタスクの設定を行い、振り返りを元に新たなルールも設定します。
タスク管理はTrelloを用いました。

# まとめ
細かい点はカリキュラムの漏洩になってしまうので触れられないため申し訳ありません。
チーム開発では、個人での開発とは大きく異なる点がたくさんあると実感させられました。
まだ実務に入ったことがない私がいうのもなんですが、チーム開発を学ぶことで、GitHubの使い方や新たなマインドも身につくので、何かしらの手段で経験することをお勧めします。
ここまで駄文を読んでいただきありがとうございました。
RUST(VSCode) package内に複数ファイルがある場合のDebug設定

# RUST(VSCode) package内に複数ファイルがある場合のDebug設定

package内に複数ファイルがある時
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441104/6e500bb5-f6ae-e45b-de68-f7c8deccfd79.png)

cargo.toml
```ruby:qiita.rb
name = "main03_01"
path = "src/main03_01.rs"
```



launch.jsonの書き方をメモ

```launch.json
    "configurations": [
        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug main03_02",
            "cargo": {
                "args": [
                    "build",
                    "--bin=main03_02",
                    "--package=sample03"
                ],
                "filter": {
                    "name": "main03_02",
                    "kind": "bin"
                }
            },
            "args": [],
            "cwd": "${workspaceFolder}"
        },
        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug main03_01",
            "cargo": {
                "args": [
                    "build",
                    "--bin=main03_01",
                    "--package=sample03"
                ],
                "filter": {
                    "name": "main03_01",
                    "kind": "bin"
                }
            },
            "args": [],
            "cwd": "${workspaceFolder}"
        }
    ]
```

configlation内のnameが、デバッグ起動画面に出てくる。

デバッグ設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441104/bc5b0a5b-14cd-e02b-2849-0a2c482cad24.png)
【Laravel】Authを使ったログインとユーザー登録

#Authでログイン機能とユーザー登録機能を用意する
composerでlaravel/uiをインストールし、artisanコマンドでスカフォールドを生成する。

```terminal
composer require laravel/ui

php artisan ui bootstrap --auth
```
※uiではbootstrapの他に、vueやreactを用いることもできる。
[uiの生成](https://readouble.com/laravel/7.x/ja/frontend.html)
これでログイン機能とユーザー登録機能は用意できたが、このままではデザインがないのでnpmをインストールし、run devでコンパイルしてデザインを付ける。


```terminal
npm install
npm run dev
```
##データベースの作成
ユーザー情報を保存するためにデータベースを作成する。
今回はmysqlを使う。
mampのスタート画面のtoolsからphpmyadminを開く。
新規作成からデータベース名を埋めてデータベースを作成する。
laravelの.envファイルの内容を書きえる。

```B_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

B_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=【mampで決めたデータベースの名前】
DB_USERNAME=root
DB_PASSWORD=root
```

database/migrationsにusers_tableのmigrationが作成されているので、あとはartisanコマンドでmigrationとすればusers_tableが作られてログインとユーザーの登録ができるようになる。

##Authを使ってアクセスを制限
Authのログイン機能を使い、ログインしていればページが表示され、ログインしていなければログインページを表示する。

```php
Route::get('sample', SampleContoroller@index})->middleware('auth')->name('sample.index');

#groupを使う場合
Route::group(['prefix' => 'sample', 'middleware' => 'auth'], function () {
    Route::get('/', 'SampleController@index')->name('sample.index');
    Route::get('edit', 'SampleController@edit')->name('sample.edit');
    Route::post('update', 'SampleController@update')->name('sample.update');
});
```
middlewareをつけることでログインしないとそのページにアクセスできないようにできる。
[認証について](https://readouble.com/laravel/7.x/ja/authentication.html)

バージョン
---
php:7.3.11
Laravel:7.21.0
cmd???

#なんぞや？cmd
とりあえず↓を覚えていれば楽しい

###・指定ファイルのみコピー
繰り返しならbatとかだと幸せになれるかも。
list.txtに改行でファイル名を記入しておく。

set dir1=元の場所
set dir2=コピー先

for /F %%i in ( list.txt ) do copy %dir1%\%%i %dir2%



###・指定フォルダ内のファイルを表示
cd *** 
dir

※クリップボードにコピーするなら dir | clip
[Python学習その１]リスト内包表記の書き方と使い方について

参考記事:[リスト内包表記を使ったリストの作成](https://www.javadrive.jp/python/list/index16.html)

##リスト内包表記の使い方
###基本形
[式 for 変数 in イテラブルオブジェクト]

リストを効率的に書くための方法らしい。

###実際に使ってみる
```python:
[tweet.user.name for tweet in tweepy.Cursor(api.search, q='スマブラ').items(10) if list(tweet.text)[:2] != ['R', 'T']]
```


いったん終わる
ダークネットで観測されるもの

応用情報技術者令和元年秋期 午前問43

ダークネットは，インターネット上で到達可能であるが，使われていないIPアドレス空間を示す。このダークネットにおいて観測されるものはどれか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/159f48d4-e342-02a8-86ac-a578b9acbe8a.png)

ダークネットですね。
**dark net** ダークネットは、インターネット上で到達可能かつ未使用のIPアドレス空間のことを指します。
多分、ビールで考えたほうが理解しやすいかもしれません。
・ダークネットは、人が住んでいないお部屋ですね。
　勿論、メールを送っても意味がないです。普通は、誰もそのアドレスに送りませんね。
　ただ、広告など、人が住んでいないことが分からず、メールボックスにパンフレートを詰めますね。


ちらっと見ると、あれ、ダークエーブと思った。。。
**dark web**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/5a339078-d15a-ff60-874a-b3f186adeffb.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/cc056a97-d25b-51ea-5ccd-f8d69ed638e4.png)


From　https://www.ap-siken.com/kakomon/01_aki/q43.html
https://ja.wikipedia.org/wiki/%E3%83%80%E3%83%BC%E3%82%AF%E3%83%8D%E3%83%83%E3%83%88
https://www.nttdata.com/jp/ja/data-insight/2017/0803/
初心者のためのpandas基礎⑤Pivotテーブル（Excel対比付き）

#pandasとは
Pythonにて、構造化データ（テーブル型のデータ）を扱うためのライブラリです。ファイルの読み込みやその後の加工・抽出処理などを簡単に行うことができ（SQL的な感覚で行うことができ）、機械学習などのデータの前処理で必須となるライブラリです。
他項目への目次は[こちら](https://qiita.com/Yanagawa_Yoshihisa/items/e1d7d0e939f58e7301ea)になります。

#はじめに
本記事では、Pivotテーブルについて記載します。Pivotとは何か等は省略します。基本的にはExcelではここの設定がpandas構文ではこうなりますという記載とします。

サンプルはタイタニックのデータで試してみます。タイタニックがわからない人は｢kaggle タイタニック｣で調べて下さい。

```python:
dataframe = pd.read_csv('train.csv')
```

#使い方
まずはライブラリをインポートします。pandasにpdという名前をつけてimportします。

```python:
import pandas as pd
```
基本的なサンプル構文を下記に示します。

```python:
dataframe.pivot_table(index =['Age'], columns = 'Sex', values = 'Fare', aggfunc = 'count', margins=True, margins_name='Total')
```
ExcelのPivot機能と対比させると`index`が｢行｣ 、`columns`が ｢列｣、`values`が｢値｣ `aggfunc`が｢フィールドの設定｣に相当します。`aggfunc`は個数に相当する`count`を設定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600679/beba9e05-c262-b908-df45-1009c49578ae.png)

`margins`は｢総計｣に相当し、`margins_name`は、そのラベル名称です。

`aggfunc`には平均である`mean`や`max` `min`等が指定できます。併記したい場合は、`['count','mean']`として下さい。

#欠損値の取り扱い
注意事項として、集計対象のデータに欠損値が含まれるとExcelでは｢（空白）｣として扱ってくれますが、pandasでは集計の対象となりません。そのため欠損値処理を実施する必要があります。欠損値処理については[こちら]('https://qiita.com/Yanagawa_Yoshihisa/items/c418e360ce9319f2af06')を参照下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600679/836c30d9-cf28-8058-1e1c-0054381f91b4.png)

次に集計結果の欠損値ですが、`NaN`で表示されます。それを埋めたい場合は`fill_value`を指定して下さい。
例として欠損値をゼロで埋めます。

```python:
dataframe.pivot_table(index =['Age'], columns = 'Sex', values = 'Fare', aggfunc = 'count', margins=True, margins_name='Total',fill_value=0.0)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600679/2da5de6c-5ba8-8f62-167b-e02319def010.png)

以上です。

#最後に
初心者にもわかるように、Pythonで機械学習を実施する際の必要な知識を簡便に記事としてまとめております。
目次は[こちら](https://qiita.com/Yanagawa_Yoshihisa/items/a3fa521d89c471b3e71f)になりますので、他の記事も参考にして頂けると幸いです。
AWS ソリューションアーキテクト アソシエイト試験 合格体験記(SAA-C02)　おすすめ教材や難しく感じた点

#はじめに
2020年7月24日、AWSソリューションアーキテクト アソシエイト試験(以下、SAA)に、2度目の受験で合格しました。
1度不合格を経験していることもあり、合格結果をみた時は声が出るぐらい嬉しかったです！

SAAを受験してみて、難しいと感じたところやおすすめ教材を書いていきたいと思います。
これから受験を予定されている方やリベンジに燃えている方は、参考にして頂けると幸いです。

##私の経歴
- SIer勤務5年目。これまでは主に検証作業をしており、最近やっと開発プロジェクトに参画できた
- 勉強をはじめるまでAWSの経験はなし。インフラ知識もほとんどなく、DNSとかの単語を多少知っている程度

##合格までの道のり
| 日付|内容 |
|:-----------|:---------------------------------------|
| 2019年9月 | AWS案件にアサインされたことを機に勉強開始 | 
| ～ | 仕事に忙殺されながらudemy(後述)で勉強| 
| 2020年5月 | 受験を決意してテストセンターに赴くも、あえなく不合格。コロナ禍だったこともあり死ぬほどテンションが下がる| 
| ～ | 下がりきったテンションのままひたすら模擬試験(後述)を解く| 
| 2020年7月24 | なんとか合格| 

勉強期間は1年たらずという結果になりました。SAAの対象者が「1 年以上の実務経験者」であることを考えると、妥当な期間かなと思います。
ちなみに、AWS案件にアサインされたものの、業務ではコーディング一辺倒で、インフラ構築をする機会には恵まれませんでした。


# 個人的に難しいと感じた点

難しさを感じる点は個々人それぞれかと思いますが、個人的には以下3つに苦しめられました。

### VPCとIAMは基本にして鬼門
VPCとIAMはそれぞれAWSのネットワークと権限まわりの根幹をなすサービスですが、ここを理解することが合格の第一関門だと思います。
**特にVPCは、これを理解しないとことには合格はないといっても良いくらい重要です。**
私は初回に受験したとき、VPCがよくわからないままだったため、そもそも問題文の意味がほとんど理解できませんでした。
幸い業務でVPCでネットワーク構築する機会があったため、2回目の受験では問題がありませんでしたが、AWSの利用経験がない方は、ハンズオンなどを通して理解を深めていくと良いと思います。

### それぞれのデータベースの違いの理解
SAAでは、主に以下の5つのデータベースに関する問題が出題されます。

 - RDS
 - Aurora
 - Elasticache
 - Dynamo DB
 - Redshift

**RDSとAuroraの違いや、それ以外の3つのデータベースのユースケースに関する問題がよく出題されます。**
ですので、これらのデータベースの特性やユースケースを理解していくことが重要になります。

私はRDSとElasticacheは業務で使用したことがあったのでイメージがつきやすかったのですが、Dynamo DBとRedshiftはいまいち理解が進みませんでした。
正直、合格した今でもこの2つはよくわからないままです。

###問題の日本語がわかりづらい
SAAの問題文は英語を日本語訳したもののため、問題文の意味を理解しにくいことがあります。
私は2回目の受験時、緊張してるわ昨日寝れなかったわで、試験開始から30分くらいは何を書いているのか全く頭に入ってきませんでした。
さすがに解読不能な文章は出てこないので、落ち着いて問題文を読み解いていけば大丈夫です。
試験では英語で問題の原文も読めますので、英語が読める方は活用するとよいでしょう。

#おすすめ教材

###[これだけでOK！ AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座](https://www.udemy.com/course/aws-associate/)
勉強をはじめたばかりの頃はこの教材をやっていました。
講義形式でSAAの試験範囲となるサービスのハンズオンができます。
定価だと2万円ちかいですが、セールの時に買う2,000円くらいで買えます。

**※講義中に使用したサービスは講義終了時に削除するようにしましょう。余計なお金が(しかも結構)かかるリスクがあります。(講義内でも指示があります)**

###[AWS認定資格試験テキスト　AWS認定 ソリューションアーキテクト-アソシエイト](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-AWS%E8%AA%8D%E5%AE%9A-%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88-%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88-%E4%BD%90%E3%80%85%E6%9C%A8-%E6%8B%93%E9%83%8E-ebook/dp/B07R1H87Y1/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=aws+%E8%AA%8D%E5%AE%9A&qid=1595635518&s=digital-text&sr=1-1)
一度目の受験に失敗したタイミングで購入。
試験範囲のサービスについて綺麗にまとまっており、テキストでは断トツでこれがおすすめです。
**特に第13章「AWSのアーキテクチャ設計」が素晴らしい。試験前日にこの章を読んだことが、合格にかなり寄与しました。**

付属の模擬試験はかなり優しめなので、次に紹介する模擬問題集をやっておいた方がよいです。

###[【SAA-C02版】AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集（6回分390問）](https://www.udemy.com/course/aws-knan/)
模擬試験が6つもついています。SAC-02にも対応しているので、この模擬試験で合格できていれば本番でも問題はないでしょう。
6つある模擬試験のうち4つは「高難易度の模擬試験」と銘打たれていますが、本番では高難易度試験と同等レベルの問題が平気で出てきます。マイナーサービスだと思っていたAWS snowballに関する問題も、本番で3題ほど出題されました。

問題解説はそれほど親切ではないので、公式ドキュメントやネットの記事を読んで知識を補強していく必要があります。


##以上
お読みいただきありがとうございました。
誤字等あればご指摘よろしくお願いいたします。
大学からプログラミングを始めた僕が実務未経験で自社開発系企業でアルバイトをした時に困ったこと

## まえおき

僕は現在大学二回生でちょうど一年前、大学に入学したことをきっかけにプログラミングを始めました。

情報系の学部に入学したことをきっかけにプログラミングを始め、プログラミングを学んでいくうちに将来的にはエンジニアとして就職するなら学生のうちから開発経験を積みたいと思い、アルバイトとして雇用してもらいました。

高校時代はアルバイト禁止の自称進学校出身だったのでアルバイト経験がそもそも薄く、最初はわからないことだらけでしたが、アルバイトを初めて、半年以上経つので、今回はそんな僕の経験を元にアルバイトをしてて困ったことを話していきたいと思います。

同じようにアルバイトをしたいと思ってる方、IT企業でアルバイトを採用したいと考えている方の参考になれば幸いです。


## わからないことがわからない

まず初めに一番辛いのはこれですね。

基本的に学生のアルバイトで開発経験を積ませてくれる企業というのは大企業以外がほとんどです。(募集してるかもしれませんが倍率的に厳しいと思います...)

つまり中小企業くらいの企業さんで働くことが一般的だと思うのですが、そうなってくると研修制度がしっかりしてないところが多いです。


開発に参加させていただいてるので、技術的なことでわからないのは自分の実力不足ですが、そもそも技術的なワードなのか、社内でしか使われてないワードなのか、ググって出てくるようなことなのか。

同じワードでも様々な意味を持つこともあるので、社員との会話や開発するものの仕様書に書いてある意味がわからなくて解決方法もわからないというのが個人的に一番辛かったです。

入って間もない頃はそう言ったことを誰に聞くのがベストで誰が詳しいかも全くわからないので尚更一人で考える時間が増えます。

気にせず聞ける人ならいいのですが、社員の方も忙しそうにしてるので、そもそも実態のわからない疑問だったり、社内で当たり前に使われてるワードレベルのことを聞いていいのかわからないというのが率直な気持ちでした。

## サービスの機能が多すぎる

これは自社開発企業だけかもしれないですが、サービスの機能が多すぎることですね。例えば〇〇の機能を修正するというタスクを課された時にその機能がどういう仕組みで他のどの機能に依存してデータベースのどのテーブルを参照して処理してるなど全て考慮しないといけないのが辛いです。

さらにそれを依頼内容ごとに毎回把握していかないといけないのでその分工数もかかります。
毎回サービスの機能の詳細把握をしなければいけないのは精神的にもしんどいです。

## 常勤の社員と進捗の度合いが全く違う

当然ですが、大学生でアルバイトをしているのでメインは大学の授業です。

そうすると週５で働いてる社員の人と週2,3のアルバイトでは進捗の差がかなり出てしまいます。

特にアジャイル開発では

- 開発
- テスト

このイテレーションを短いスパンで回すことでスピーディーな開発をすることができるので、アルバイトの進捗が遅いというのは悩みどころになります。

## そもそも技術的なことがわからない

自社開発企業というのは一般的には技術レベルが高い傾向にありますので、大学一回生で潜り込んだ身としては前提知識がなさすぎてわからないということが多々ありました。

ソフトウェアの開発工程やアジャイル開発での用語やMVCモデル、フレームワークなど。

知っておかなければいけない知識、技術は多岐に渡ります。

そもそも趣味でプログラミングをやっていたような身からすると要件定義や設計、テストなど細かくやることはないので当然ではあるのですが、知らないことを学んでいくのは非常にエネルギーがいります。

## バイトの時間の確保が難しい

基本的にシフト制ではないので自由は聞くのですが、大学の授業が1限と5限にあるみたいな、いわゆる空きコマのある日だと会社に出社できないのでバイトを入れれなくてバイトの時間の確保ができないです。

空きコマにバイトの時間を確保したとしても一時間、二時間ですぐ終わるようなタスクではないので、結果的に移動時間だけ無駄に消費します。

## エラーが出た際の原因特定が難しい

例えば趣味でプログラミングをしてる場合は書いたコードに対してデバッグしてやれば大抵はエラーを治せることが多いです。

これがバイトの開発となると話は別で書いたコードのバックエンド部分でうまく行ってないのか、もしくは連携してる決済サービスがうまく動いてないのか、サーバの方が不具合を起こしてるのか考慮する項目が非常に多いです。
Vue(Nuxt.js)でTopへ戻るボタンを実装する方法【ライブラリ使用無し】


Vue(Nuxt.js)でTopへ戻るボタンを実装する方法になります。
ライブラリ等は使用しないので、導入もしやすいかと思います。

## クリックイベントを設定する

```vue:ReturnTopButton
<template>
  <div>
    <button @click="returnTop">
      Topへ戻る
    </button>
  </div>
</template>
```
まずは、コンポーネントを作り、クリックイベントを設定します。
## methodsでTopへ戻る処理を実行

```vue:ReturnTopButton
<template>
  <div>
    <button @click="returnTop">
      Topへ戻る
    </button>
  </div>
</template>

<script lang="ts">
import Vue from 'vue'

export default Vue.extend({
  methods: {
    returnTop() {
      window.scrollTo({
        top: 0,
        behavior: 'smooth'
      })
    }
  }
})
</script>

```
`window.scrollTo`メソッドを使用して、Topへ戻す処理をしています。
`behavior: smooth`とオプションを指定することで、スムーズスクロールさせることができます。
`behavior: auto` だと一瞬で移動します。

## スクロールしたらTopへ戻るボタンが表示するようにする
初期表示では、Topへ戻るボタンを表示させずに、ある程度スクロールしたら表示させる方法です。

```vue:ReturnTopButton
<template>
  <div>
    <button v-show="buttonActive" @click="returnTop">
      Topへ戻る
    </button>
  </div>
</template>

<script lang="ts">
import Vue from 'vue'

export default Vue.extend({
  data() {
    return {
      buttonActive: false,
      scroll: 0
    }
  },
  mounted() {
    window.addEventListener('scroll', this.scrollWindow)
  },
  methods: {
    returnTop() {
      window.scrollTo({
        top: 0,
        behavior: 'smooth'
      })
    },
    scrollWindow() {
      const top = 100 // ボタンを表示させたい位置
      this.scroll = window.scrollY
      if (top <= this.scroll) {
        this.buttonActive = true
      } else {
        this.buttonActive = false
      }
    }
  }
})
</script>

```
`v-show`を使い、スクロールの条件を満たしたらTopへ戻るボタンが表示されるように処理を追加しています。

### ボタン表示にアニメーションをつける
Topへ戻るボタン出現時にアニメーションをつけることも可能です。
その場合は、`transition`を使います。

```vue:ReturnTopButton
<template>
  <div>
    <transition name="button">
      <button v-show="buttonActive" @click="returnTop">
        Topへ戻る
      </button>
    </transition>
  </div>
</template>

<style lang="scss" scoped>
.button-enter-active,
.button-leave-active {
  transition: opacity 0.5s;
}
.button-enter,
.button-leave-to {
  opacity: 0;
}
</style>
```
`transition`を使うことで、アニメーションを簡単につけることができます。
上記の例だと`opacity`を設定することで、フワッと表示させることができます。

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559347/ad8ebbe3-ab08-18df-c78c-1dae0b4f7263.gif)
SAA-C02に合格しました

# はじめに
また投稿するのに期間が開いてしまいましたが、AWSのソリューションアーキテクトアソシエイト(SAA-C02)の勉強をしていましたので、その内容を投稿します。

# SAA-C02取得の目的

AWSについては何度か触った事があったものの、体系的に学ぶ事ができると思い資格取得を目指しました。

# 結果
何とか合格できました。

# スコア

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568280/10c71322-9718-97ce-ba3f-d614115e9ba1.png)


# 学習期間
約3週間

# 学習方法

* 5日くらい？：書籍で全体像把握
 * [AWS認定資格試験テキスト　AWS認定 ソリューションアーキテクト-アソシエイト](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-AWS%E8%AA%8D%E5%AE%9A-%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88-%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88-NRI%E3%83%8D%E3%83%83%E3%83%88%E3%82%B3%E3%83%A0%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE/dp/479739739X)
 
　　[進め方、感想]
　　・300ページくらいあるので、1日70ページを読むようにしました。
　　・個人的には大変読みやすかったです。頭にスッと入ってきました。
　　・内容が良くまとまっているので、今後も活用したい一冊です。


* 1週目～2週目：動画で学習 + ハンズオン
 * [これだけでOK！ AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座（SAA-C02試験対応版）](https://www.udemy.com/course/aws-associate/) 
 
　　[進め方、感想]
　　・セールで1500円程度で購入できました。
　　・講座+ハンズオン+模擬試験のセットになっています。
　　・全体的に24hくらいのボリュームですが、ハンズオンをやろうとするとDB構築などで待ち時間が発生するので実際はもっとかかります。時間短縮のため、講座の再生速度を1.5xにしました。
　　・ハンズオンはすべてやりました。
　　・実際に触ると理解が深まるようなので、ハンズオンがとても役立ちました。
　　・模擬試験が3回分ついているので、それぞれ1回実施して間違えた箇所の解説を熟読ました。どうしても意味が分からない箇所は、ネット上で検索して理解を深めました。

* 2週目～3週目：模擬試験問題集
 * [【SAA-C02版】AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集（6回分390問）](https://www.udemy.com/course/aws-knan/)
 
　　[進め方、感想]
　　・セールで1500円程度で購入できました。
　　・それぞれ2周しました。1回毎に間違えた箇所の解説を読んで覚えました。
　　・難易度が高い問題が多く、1周目では50%程度しか取れませんでした。

# 全体の感想
本番試験の難易度としては、Udemyの模擬試験問題集と同等かそれよりもやや難しいと感じました。

個人的には、捻った問題が多い気がしました。難しくてもあきらめず(時には消去法で)、見直しをしっかりしたことで何とか合格できたと思います。

とはいえギリギリ合格だったので、今後はもっと手を動かして覚えていく必要がありそうです。
Rust: mongodb ドライバーの使い方

こちらのサンプルを改造してみました。
[Announcing our Rust Driver: Version 1.0](https://www.mongodb.com/blog/post/announcing-rust-driver-version-1)

次の環境で確認しました。
古いバージョンだと、コンパイルが通りません。

```text
$ uname -a
Linux *** 5.7.10-arch1-1 #1 SMP PREEMPT Wed, 22 Jul 2020 19:57:42 +0000 x86_64 GNU/Linux
$ rustc --version
rustc 1.45.0
$ cargo --version
cargo 1.45.0
```

```text:Cargo.toml
[package]
name = "mongodb_sample"
version = "0.1.0"
edition = "2018"


[dependencies]
mongodb = "1.0.0"
tokio = "*"
```

```rust:src/main.rs
// --------------------------------------------------------------------
/*
	mongodb_sample/src/main.rs

					Jul/25/2020
*/
// --------------------------------------------------------------------
use mongodb::{
	bson::doc,
	error::Result,
	Client
};

#[tokio::main]
async fn main() -> Result<()> {
	eprintln! ("*** 開始 ***");
	let client =
		Client::with_uri_str("mongodb://localhost:27017").await?;

	let coll = client
		.database("animals")
		.collection("pets");

	let new_pets = vec![
		doc! { "type": "犬", "name": "しろ" },
		doc! { "type": "猫", "name": "たま" },
		doc! { "type": "猫", "name": "みけ" }, 
	];

	coll.insert_many(new_pets, None).await?;

	eprintln! ("*** 終了 ***");
	Ok(())
}
 
// --------------------------------------------------------------------
```

実行

```text
$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.14s
     Running `target/debug/mongodb_sample`
*** 開始 ***
*** 終了 ***
```

mongo cli でデータが作成されたことを確認

```text
$ mongo
> use animals
switched to db animals
> db.pets.find()
{ "_id" : ObjectId("5f1b7edd00fec86e00bb2de8"), "type" : "犬", "name" : "しろ" }
{ "_id" : ObjectId("5f1b7edd002ae22200bb2de9"), "type" : "猫", "name" : "たま" }
{ "_id" : ObjectId("5f1b7edd00ae494700bb2dea"), "type" : "猫", "name" : "みけ" }
> 
```
OpenCV を使ってお絵かきアプリを作る方法

#0.最初に
今回作るものがどういう感じで動くのか見てみたい方は、[こちら](https://youtu.be/RH7_kFyjqTM)(youtubeの動画)からどうぞ。
#1.実装
```opencv.py
import cv2
import numpy as np

drawing = False 
color = (255,255,255)
ix,iy = 0,0

def nothing(x):
    pass

def draw_circle(event,x,y,flags,param):
    global ix,iy,drawing,color

    b = cv2.getTrackbarPos('B','image')
    g = cv2.getTrackbarPos('G','image')
    r = cv2.getTrackbarPos('R','image')
    s = cv2.getTrackbarPos('Size','image')
    i = cv2.getTrackbarPos(switch,'image')

    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        ix,iy = x,y

    elif event == cv2.EVENT_MOUSEMOVE:
        if i == 1:
            b,g,r = 0,0,0
        if drawing == True:
            cv2.circle(img,(x,y),s,(b,g,r),-1)

    elif event == cv2.EVENT_LBUTTONUP:
        if i == 1:
            b,g,r = 0,0,0
        drawing = False
        cv2.circle(img,(x,y),s,(b,g,r),-1)

img = np.full((800,800,3),255,np.uint8)
cv2.namedWindow('image')

cv2.createTrackbar('B','image',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('R','image',0,255,nothing)
cv2.createTrackbar('Size', 'image',1,30,nothing)
cv2.setMouseCallback('image',draw_circle)
switch = '0 : OFF \n1 : ON'
cv2.createTrackbar(switch, 'image',0,1,nothing)

while True:  
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    cv2.imshow('image',img)
cv2.destroyAllWindows()
```
ここでは、色を変えるためのトラックバー3つとペンのサイズを変えるためのトラックバーを1つ、消しゴムとペンに切り替えるためのトラックバー1つを作っています。nothing()はコールバック関数でその名の通り何もしません。なのでマウスが押されたときに色のトラックバーの値を取得し、その位置に円を描きます。これが連続的に続くことによって線が描かれているように見えます。マウスが離れたらその位置まで円を描いて終了です。線がマウスに追いつかなかったり、マウスを速く動かしすぎると円が見えてしまいますがそこまで気になりませんでした。また、消しゴムは上から黒で塗りつぶしているだけです。
#最後に
今回作ったものは[Youtube](https://youtu.be/RH7_kFyjqTM)でも解説しているのでそちらも良かったらご覧ください。質問、アドバイスなどがございましたらぜひコメントしてください。
mvコマンドでファイル(ディレクトリ)名の変更、移動

mvコマンドを使えば、
`①ファイル(ディレクトリ名)の変更`
`②ファイル(ディレクトリ)の移動`

の２種類の処理を行うことができます。

#ファイル(ディレクトリ)名の変更

```
$ mv < 変更前のファイル(ディレクトリ)名 > < 変更後のファイル(ディレクトリ)名 >
```

例）`test.txt`というファイルを`hoge.txt`というファイル名に変更する場合

```
$ mv  test.txt  hoge.txt
```
なお、上記の例でコマンドを実行した時に
既にhoge.txtファイルが存在していた場合は、test.txtを名前変更したと同時にもともとあったhoge.txtが上書きされてしまいます。
それを防ぐには、その１つの方法として`-i`オプションを付けます。
これにより、mvコマンド実行時に「上書きしていいですか？」と確認されるようになります。


```
$ mv  -i  test.txt  hoge.txt
```
ファイルの上書き防止系のオプションは他にもありますので、この記事の最後にオプションを一覧にまとめておきました。

また、mvコマンドでは１つずつしかファイル名の変更はできないので、複数のファイルを一括して変更したい時は`renameコマンド`を使います。

#ファイル(ディレクトリ)の移動

```
$ mv  < ファイル(ディレクトリ)名 >  < 移動先のディレクトリ名 >
```

例）`sample.txt`というファイルを`dir`というディレクトリに移動する場合

```
$ mv  sample.txt  dir
```

ちなみに、移動先のディレクトリに`/.`を付けて、`dir/.`とした方が安全です。
この`/.`には、「ディレクトリ直下の」という意味があります。
理由として、もし「sample.txtファイルをdirディレクトリに移動する」という指示のコマンドを実行した時にdirディレクトリが存在していなかった場合、単に`sample.txt`ファイルが`dir`という名前の__ファイル__に変更されてしまうという挙動をとるためです。
ファイル名の変更の際の構文である
`$ mv < 変更前のファイル(ディレクトリ)名 > < 変更後のファイル(ディレクトリ)名 >`
が適用されてしまっているのですね。
なので、以下のようにコマンドを打つのが安全です。

```
$ mv  sample.txt  dir/.
```


###複数のファイル(ディレクトリ)をまとめてディレクトリに移動

mvコマンドでは、複数のファイルを移動することもできます。

例）`sample01.txt`,`sample02.txt`,`sample03.txt`をまとめて`dir`というディレクトリに移動する場合

```
$ mv  sample01.txt  sample02.txt  sample03.txt  dir/.
```

###ファイル(ディレクトリ)をカレントディレクトリの一つ上の階層に移動

```
$ mv  < ファイル(ディレクトリ)名 >  ../
```

#mvコマンドの主なオプション一覧

| オプション | 説明 |
|:-:|:-:|
| -b<br>(--backup)  | 移動先に同名のファイルがあれば、バックアップを取ってから上書きする  |
| -f<br>(-force)  | 移動先に同名のファイルがあれば、強制的に上書きする  |
| -i<br>(–interactive）  | 移動先に同名のファイルがあれば、上書きしてOKか確認する  |
| -n<br>（–no-clobber）  | 移動先に同名のファイル(ディレクトリ)があったら上書きしない  |
| -v<br>(–verbose） | 移動処理行う際の詳細情報を表示する |
第2回　今週のRPA関連ニュース　7/20(月)〜7/24(金)


こんにちは！
Peaceful morning社でインターンをしている川内です。

普段RPA HACKでは、Twitterアカウント(https://twitter.com/NewsRpa)
にて、毎日RPAのニュースを紹介しています！

そこで先週に引き続き今週も川内が気になった**RPA関連ニュース**を独断で紹介いたします！この記事を見ていただければ、この1週間でおきたRPAの周りでおこった主な出来事がサクッと理解できます！

**第1回目はこちら↓**
https://qiita.com/RPAHACK/items/e63242fd9604a9908cd8

記事の形式としては、**「記事の題名」「記事のリンク」「記事の要約」**を各曜日で順に書いていきます。今週は、7/22（木)に特筆すべきニュースがなかったので、7/21(水)からニュースを3本紹介します！

※各曜日ニュースがない場合もあること、ご了承ください。

##月曜日 7/20
###DX時代のまったく新しい業務自動化ソリューションを考察すホワイトペーパーを公開
https://prtimes.jp/main/html/rd/p/000000132.000023654.html

NTTアドバンステクノロジ株式会社は、クラウド型RPAサービス「WinActor® Cast on Call」の公式サイトにて、ホワイトペーパー「時代の変化に対応するための、まったく新しい業務自動化ソリューションとは」を公開した。ホワイトペーパーは無料でダウンロードできる。この資料では①これからの企業活動になぜDXが必要なのか ②あらゆる企業がDXを実現するためのソリューションとは何か③WinActor® Cast on Callは既存RPAと何が異なるのかについて掲載されている。

##火曜日　7/21
###日本最大級DXイベント開催！「DIGITAL WORLD ONLINE 2020 SUMMER」
https://www.jiji.com/jc/article?k=000000010.000049156&g=prt

RPA・AIを始めとしたDX総合プラットフォームメディアを運営する「RPA BANK」は、人手不足に伴う業務効率化や生産性改善に課題を抱えている企業・団体様を対象に、DXイベント「DIGITAL WORLD ONLINE 2020 SUMMER」を2020年8月25日（火）～31日（月）にオンラインにて開催することを発表。

##水曜日　7/22
7/23(木)に特筆すべきニュースがなかったので7/22(水)からニュースを3本紹介します。

###パーソルP＆T、WinActorの利用企業向けに「RPAロボット診断サービス」を無償提供
https://cloud.watch.impress.co.jp/docs/news/1266995.html

　パーソルプロセス＆テクノロジー株式会社（パーソルP＆T）は22日、「WinActor」利用企業に向け、ロボット診断・点検を無償で行う「RPAロボット診断サービス」を提供すると発表した。2020年9月までに申し込んだ企業が対象となる。


WinActorについて興味がある方はこちらをご覧ください↓
**純国産RPA『WinActor®』とは？歴史～特徴まで完全ガイド**
https://rpahack.com/winactor

###KPMGコンサルティング、RPA推進アプローチの診断サービスを提供開始
https://cloud.watch.impress.co.jp/docs/news/1267128.html

KPMGコンサルティング株式会社は22日、RPAの導入を実施している企業を対象に、企業のRPA推進アプローチの診断、改善策を織り込んだロードマップの策定をフルリモートワーク下により4週間で実施する、RPAクイック診断サービスの提供を開始した。サービスでは、すでにRPAの導入を実施している企業を対象として、さらなる業務自動化の加速、ROI改善を目的として、RPA推進アプローチを診断し、改善策を織り込んだロードマップの策定を全4週間で実施する。

###Blue Prism、6,700人以上の意思決定者と知識労働者を対象に実施した「デジタルワーカーの導入と展開に関する意識調査」結果を発表
https://www.jiji.com/jc/article?k=000000092.000028912&g=prt

Blue Prism社 は、「デジタルワーカーの導入と展開に関する意識調査」と題した年次調査レポートを発表した。6,700人以上の意思決定者と知識労働者(Blue Prismに限らず既に何らかの自動化が導入されている企業に所属)を対象としている。この調査ではRPAへの期待値で大きな差が明らかになるとともに、グローバル調査で世界と日本の違いも明らかになっている。



##金曜日　7/24
###異動手続き、手軽に　能美市、オンラインで事前申請 
https://www.hokkoku.co.jp/subpage/H20200724104.htm

来庁者や職員の負担を軽減するため、能美市は８月、引っ越しなどに伴う住民異動の手続きを市のホームページで事前に行えるシステムを導入する。新システムは事務作業を自動化するＲＰＡ（ロボットによる業務自動化）を活用した「ＣＨＡＴ窓口申請」。新システムは日本語のほか、英語、中国語、韓国語、スペイン語、ポルトガル語、ベトナム語に対応する。住民が事前に手続きしてを来庁することで窓口での職員の負担軽減が期待できる。

##RPA HACKについて
RPA HACKではRPA・AI・Power Automateに関する記事が100本以上掲載されています！すべて無料でご覧いただけます！

RPAのツールを触ってみたい！という方におすすめ↓
・UiPath StudioXの基本をマスター！～画面構成/カード/アクション
https://rpahack.com/uipath_studiox_1

RPAエンジニアとして働いてみたいという方におすすめ↓
・事務職から転職したRPAエンジニアが語る仕事の2つの魅力
https://rpahack.com/attraction-of-rpa

Power Automateの使い方を学んで見たい方におすすめ↓
・Power Automateの便利な使い方をカテゴリーごとに紹介
https://rpahack.com/powerautomate-2

RPA HACKのtwitterのフォローもよろしくお願いします！
(URL：https://twitter.com/home)
Laravel Eloquent 論理削除

#Laravel Eloquentで論理削除を行う手順
Eloquentで論理削除(Soft Delete)を行う手順

##手順概要
1. マイグレーションファイルの編集。
1. モデルの編集。
1. コントローラーの編集。

##手順詳細
###マイグレーションファイルの編集
テーブル作成のコードに「$table->softDeletes();」を追記。

[コード例]

```php:migtation
public function up()
{
    Schema::create('tablename', function (Blueprint $table) {
        $table->id();
        $table->string('name', 50);
        $table->string('tel', 13);
        $table->timestamps();
        $table->softDeletes();
    });
}
```
※この記述でテーブルに「deleted_at」が追加されます。

###モデルの編集
対象となるモデルに
「use Illuminate\Database\Eloquent\SoftDeletes;」
「use SoftDeletes;」
を追記。

[コード例]

```php:Model
namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Modelname extends Model
{
    use SoftDeletes;
}
```

###コントローラーの編集
あとは、コントローラーで削除すれば、論理削除が実行されます。

[削除コード例]

```php:controller
Modelname::find($id)->delete();
```

※削除してもレコードは残り、「deleted_at」に削除日時が挿入されます。
※「deleted_at」が入力されたレコードはget等で取得されません。
Vue.jsで時計アプリを作ろう（前編：開発環境の構築）

![vue.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665011/5e899152-0c98-bb28-eace-2f4ee7e08d91.jpeg)

これから2回に分けて、Vue.jsのチュートリアルを兼ねて時計アプリを作成します。

####開発環境の構築

本記事では、vue-cliを使って開発環境を構築していきます。

[Node.js](https://nodejs.org/ja/)をインストールしていない方はインストールしておいてください。

ターミナルを開いて、

```
$ npm install -g vue-cli
```

と入力し実行するとvue-cliがインストールできます。

次に任意の場所にアプリ用のディレクトリを作成し、ターミナルで移動します。

アプリ用ディレクトリ内で、以下のコマンドを実行します。

```
$ vue init webpack
```

すると、対話形式で設定を決めることができます。

```
? Generate project in current directory?
```

現在のディレクトリにプロジェクトを作成するか聞かれるので、yと入力しEnterを押します。

```
? Project name
? Project description
? Author
```

プロジェクトの名前／概要／作者名はお好きに決めてください。

```
? Vue build
```

コンパイラの有無を選択できますので、「Runtime-only: about 6KB lighter min+gzip, but templates (or any Vue-specific HTML) are ONLY allowed in .vue files - r ender functions are required elsewhere」を選択します。

```
? Install vue-router?
? Use ESLint to lint your code?
? Set up unit tests
? Setup e2e tests with Nightwatch?
```

上から順に、「vue-routerを利用するか」「ESLintを利用するか」「ユニットテストを行うか」「E2Eテストを行うか」を選択できるので、いずれもnと入力しEnterを押します。

```
? Should we run `npm install` for you after the project has been created? (recommended)
```

Node.jsのモジュールをインストールするかを聞かれますので、「Yes, use NPM」を選択します。（Yarnを使用している方は「Yes, use Yarn」を選択しても大丈夫です）

設定を終えるとプロジェクトの作成が始まりますので、しばらく待ちます。

プロジェクトの作成が終わったら、

```
$ npm run dev
```

を実行します。

ローカルサーバが起動するので、http://localhost:8080 にアクセスします。

![img1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665011/29b42cc7-75c9-9422-12ed-bfde5ccea732.png)

上の画面と同じように表示されればプロジェクトの作成は完了です。

本格的なアプリ開発は後編で行っていきます。

[Vue.jsで時計アプリを作ろう（後編：アプリの作成）](https://qiita.com/takahashitakuya031126/items/a56718ec5c80575e846f)
Windowsのマウスホイールの向きを逆にする

Macの向きと合わせたい。
Macは設定の変更で向きを変えられた気がするが、Windowsはレジストリの修正が必要。

## 環境
Windows 10

## 手順

### マウスのハードウェアIDを調べる

1. コントロールパネル
2. ハードウェアとサウンド
3. デバイスとプリンター -> マウス
4. 「マウスのプロパティ」の「ハードウェア」タブを選択
5. プロパティ
6. 「詳細」タブを選択
7. 「プロパティ」を「ハードウェアID」にして、「値」の一番長いやつ（？）をメモしておく

### レジストリ修正

1. "regedit"を自分のWindows上で検索し、開く（レジストリエディター）
2. "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID"を選択する（フォルダを選びながら下っていく）
3. 先ほどメモしたハードウェアIDのフォルダを探す。私の場合は、"REV_xxxx"が抜けてるものしか無かったが、まぁよしとした。
4. この下にまたフォルダがあり（IDみたいな文字列のフォルダ名）、その下に"Device Prameters"というフォルダがあるのでそれを選択。私はなぜか３つあったので、３つとも作業した。
5. "FlipFlopWheel"のデータが0x00000000(0)になっているので、1に変更する
6. PCを再起動する

### 確認
逆になってるはず。
Docker上にGrafanaとInfluxDBを構築する

#

## 事前準備
事前にWSL2とかDocker Desktopとかのインストールを終わらせておくこと
- [Windows10でWSL2を使う](https://qiita.com/ryotaro76/items/cec9cbd24ca404bdf9da)
- [Docker Desktop をWSL2で利用する。](https://qiita.com/ryotaro76/items/305d4d61dfd82e3f2bfa)

## 環境
Windows10
WSL2
Docker Desktop
Grafana 7.1.1

## コンテナを作る

docker-compose.yml

```vim
version: "2"

services:
  influxdb:
    image: influxdb
    container_name: local-influxdb  #grafanaからアクセスするための名前
    volumes:
      - /home/xxxx/docker/grafana/influxdb:/var/lib/influxdb
    ports:
      - 8086:8086

  grafana:
    image: grafana/grafana:7.1.1
    ports:
      - 8085:3000 #grafanaのポート
    user: "472"
    volumes:
      - /home/xxxx/docker/grafana/grafana:/var/lib/grafana    
    depends_on:
      - influxdb
    environment:
      - GF_SERVER_ROOT_URL=http://192.168.77.6:8085
      - GF_SECURITY_ADMIN_PASSWORD=admin
```

## 起動
```bash
docker-compose up -d
```

## ログを確認

```bash
docker-compose logs -f
```
はい、エラーが出ました。

```bash
grafana_1   | You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1-or-later
```

権限がないということなので、ホスト上でオーナーを変更

```bash
cd /home/xxxx/docker/grafana/
mkdir grafana
sudo chown 472:472 grafana
```

改めて起動して、ログを確認。エラーが出てなければ完了です。

# Grafanaを表示する

ブラウザで[http://localhost:8085](http://localhost:8085)にアクセスすると、以下の画面が表示されればOKです。
admin/adminでログインできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132118/c7fa9b97-bb96-71b8-be33-220c9a252e5a.png)


# さいごに
docker使うとほんと簡単に環境ができますね。
さて次は、中身の設定ですね。
Auto ML Visionで、流行りのAIとかいうやつをちょろっとやってみた

# はじめに
流行りのAIとかいうやつで、ちょろっとやってみてよと言われた時に、ちょろっとやるためのTipsです。

# 背景
製造業向けAIベンチャーで働いている非エンジニアなのですが、お客さんから、「ちょろっとやってみてよ」と言われた時に、なんかいい方法ないかなと考えていた時にAutoMLに出会いました。エンジニアに稼働してもらう前にこっちで簡単に試したいなと思っていたので、うってつけのツールです

#やったこと
AutoML Visonで画像分類をしました。

## 使用したデータセット
データセットはMVTec Anomaly Detection Datasetを使いました。
こちらから[ダウンロード][1]しました。
[1]:https://www.mvtec.com/company/research/datasets/mvtec-ad/

今回はお試しで画像分類なので、データセットの本来の目的のAnomaly Detectionではなく、画像分類としてScrewのtestだけ使用します

## 準備
GCPのアカウント作成して、ログインします
画像データアップロードから学習の流れは、[こちらの記事][2]を参考にさせて頂きました。
[2]:https://qiita.com/doikatsuyuki/items/ff00183f71347219d0f8

zipにしてアップロードしましたが、結構時間かかりました。
コーヒーでも飲んで待ちましょう。

データが準備できたら一覧で見れます。
<img width="967" alt="スクリーンショット 2020-07-24 22.03.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356793/f3b67f3b-abb2-361f-00ea-a8b88f1b53d2.png">


## 学習
データ読み込みが成功したら、"トレーニング" タブに移動します
<img width="871" alt="スクリーンショット 2020-07-24 22.04.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356793/98f9bc72-b440-4c9c-2d7e-1d1f1b0bab0b.png">

”トレーニングを開始”ボタンを押すと、Googleさんの方でよしなに学習を進めてくれます。
しかし、こんな少量の学習データでちゃんと分類できるのできるだろうか。。。

ここでもしばらく待ちます。
アカウント作ると30000円分くらいは無料で使えるので、多分大丈夫です。

## 結果
夜中に学習開始して、朝起きたら終わってました。
画像の分類結果は以下の通りです。

<img width="602" alt="スクリーンショット 2020-07-25 6.05.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356793/a013c40d-af4a-83cc-ea94-81961a96b430.png">

データが少ない割に、OKはちゃんと分類できているようです
<img width="577" alt="スクリーンショット 2020-07-25 6.20.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356793/3a21d1d5-80d4-1caf-c39e-7b11a14681a6.png">

その他、各ラベルの分類結果が見れます。
<img width="468" alt="スクリーンショット 2020-07-25 6.08.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356793/7810f934-0a58-2e98-3ca7-f0afd07d741a.png">
<img width="476" alt="スクリーンショット 2020-07-25 6.16.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356793/34c7858a-b220-9969-7147-0e60a014a629.png">

# まとめ
ボタンぽちぽちするだけで分類モデルを(よしなに)作れてしまうのは、めちゃ便利。今回のは少量の学習データでそれっぽい結果が出たけど参考程度だろう。また、学習・推論にどんなモデルを使っている/使ってみたのか、全く分からないブラックボックス(Googleの秘伝のタレ的な)なので、ビジネスプロセスに合わせた使い方を模索したい。
【Python】データサイエンス100本ノック（構造化データ加工編） 012 解説

- データサイエンス100本ノックをやりきる会を作りました🎉
- こちらの[Slack招待URL](https://join.slack.com/t/data-science-100nocks/shared_invite/zt-gfncg9vm-8W8b3UrDg8R~TKaqUkQpgw)からご参加ください！！
- ぜひ一緒に励まし合いながら、データサイエンス100本ノックをやり切りたいと思っています！

##Youtube
[動画解説](https://youtu.be/fZJdGwEu-qQ)もしています。

##問題
P-012: 店舗データフレーム（df_store）から横浜市の店舗だけ全項目表示せよ。

##解答
```:コード
df_store.query("address.str.contains('横浜市')", engine='python')
```

##出力
|  | store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area |
|--:|:--|:--|--:|:--|:--|:--|:--|--:|--:|--:|
| 2 | S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732.0 |
| 3 | S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495.0 |
| 7 | S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548.0 |
| 9 | S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830.0 |
| 12 | S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574.0 |
| 16 | S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341.0 |
| 18 | S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
| 20 | S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
| 26 | S14048 | 中川中央店 | 14 | 神奈川県 | 神奈川県横浜市都筑区中川中央二丁目 | カナガワケンヨコハマシツヅキクナカガワチュウオウニチョウメ | 045-123-4051 | 139.5758 | 35.54912 | 1657.0 |
| 40 | S14042 | 新山下店 | 14 | 神奈川県 | 神奈川県横浜市中区新山下二丁目 | カナガワケンヨコハマシナカクシンヤマシタニチョウメ | 045-123-4047 | 139.6593 | 35.43894 | 1044.0 |
| 52 | S14006 | 葛が谷店 | 14 | 神奈川県 | 神奈川県横浜市都筑区葛が谷 | カナガワケンヨコハマシツヅキククズガヤ | 045-123-4031 | 139.5633 | 35.53573 | 1886.0 |

##解説
・PandasのDataFrame/Seriesにて、条件に当てはまる先頭データを確認する方法です。
・条件に当てはまる情報を確認したい時に使用します。
・**'contains(<文字列>)'は、指定した文字列が含まれているどうかを判定する関数**であり、含まれる場合はTrue、含まれない場合はFalseを返します。
・ただし、**'.query('---.str.contains(<文字列>))'は、指定した文字列が含まれることを条件として指定します**。
・今回の場合、address を文字列に置換するために'address.str'とし、'.contains('横浜市')'を続けることで、「横浜市」を含む address を指定しています。
・'engine = 'python''について、query の引数である engine には'python'か、'numexpr'かを選択することができますが、strを用いる場合は、'python'を指定してあげないとエラーが発生してしまいます。

※データを見る限りは、↓のコードでも問題なさそうに見えますが、「神奈川県」という文字が欠損しているデータがあった場合に、出力から漏れてしまうため、おすすめしません。

```:コード
df_store.query("address.str.startswith('神奈川県横浜市')", engine='python')
```
全角対応テキストテーブルライブラリ「FluentTextTable」を公開しました！

「オブジェクトを手軽にテーブル状にテキスト出力したい！」

そんなことを思ったことはありませんか？

# これは何？

FluentTextTableは、柔軟で簡単な「全角文字に対応した」.NET用のテキストテーブルライブラリです。デバッグや簡単なツールなどに利用できます。

- [GitHub - https://github.com/nuitsjp/FluentTextTable](https://github.com/nuitsjp/FluentTextTable)
- [NuGet - https://www.nuget.org/packages/FluentTextTable](https://www.nuget.org/packages/FluentTextTable)

つぎのような簡単なコードから・・・

```csharp
var users = new[]
{
    new User {Id = 1, Name = "ビル・ゲイツ", Birthday = DateTime.Parse("1955/10/28")},
    new User {Id = 2, Name = "スティーブ・ジョブズ", Birthday = DateTime.Parse("1955/2/24")}
};
Build
    .TextTable<User>()
    .WriteLine(users);
```

このようにコンソールにテーブル状に値を表示することができます。

![basicforjp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99262/99524d0b-e1d5-a0ad-2b82-acacd688b8d6.png)

複雑なテーブルの書式を、簡単かつ流暢（Fluent）に設定できます。

```csharp
Build
    .TextTable<User>(builder =>
    {
        builder
            .Borders.Horizontals.AllStylesAs("-")
            .Borders.HeaderHorizontal.AllStylesAs("=")
            .Columns.Add(x => x.Id).HorizontalAlignmentAs(HorizontalAlignment.Right)
            .Columns.Add(x => x.Name).VerticalAlignmentAs(VerticalAlignment.Center)
            .Columns.Add(x => x.Birthday).VerticalAlignmentAs(VerticalAlignment.Bottom).FormatAs("{0:yyyy/MM/dd}")
            .Columns.Add(x => x.Occupations).FormatAs("- {0}");
    })
    .WriteLine(users);
```

![formatted.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99262/fe8091ed-4036-181a-afec-bc5f7e9d650a.png)

つぎの書式のカスタマイズをサポートとしています。

- 列指定（もしくは列自動生成）
- オブジェクトのフォーマット
- 水平・垂直アライメント
- 罫線文字の変更
- マージンとパディング

マークダウン形式での出力にもサポートしています。

```csharp
Build
    .MarkdownTable<User>()
    .WriteLine(users);
```

![markdown.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99262/0f440365-32f3-9c46-e2b1-69ad15e4c6d5.png)

# クイックスタート

.NET Framework 4.0以上、.NET Standard 2.0以上をサポートしています。[NuGet](https://www.nuget.org/packages/FluentTextTable)からインストールして利用してください。

```console
> Install-Package FluentTextTable
```

出力対象となるクラスを定義します。

```cs
public class User
{
    public int Id { get; set; }
    public string EnglishName { get; set; }
    public string JapaneseName { get; set; }
    public DateTime Birthday;
}
```

Buildクラスを利用して出力対象クラス用のテーブルを作成します。

デフォルトではpublicなプロパティ・フィールドのすべてが出力の対象となります。

```cs
var table = Build.TextTable<User>();
```

行に該当するオブジェクトを生成して、出力します。

```cs
var users = new[]
{
    new User {Id = 1, EnglishName = "Bill Gates", JapaneseName = "ビル・ゲイツ", Birthday = DateTime.Parse("1955/10/28")},
    new User {Id = 2, EnglishName = "Steven Jobs", JapaneseName = "スティーブ・ジョブズ", Birthday = DateTime.Parse("1955/2/24")}
};
Build
    .TextTable<User>()
    .WriteLine(users);
```

# 詳細な利用方法

[Github](https://github.com/nuitsjp/FluentTextTable/blob/master/README-ja.md#%E7%9B%AE%E6%AC%A1)に利用方法をまとめています。

機会があればぜひご利用ください！