OmniAICreator/Qiita-1.07M huggingface dataset:
git submoduleを使うときのコマンドTips

# この記事は
Androidのプロジェクトでsubmoduleを使う時によくコマンドを忘れるので自分の備忘録として残しています

# submoduleのinitができない
## 原因
2段階認証で引っかかった

### Githubの2段階認証(Two-Factor Authentication)とは？
* パスワードによるログインだけでなく2段階目の認証を追加できるもの

https://docs.github.com/en/github/authenticating-to-github/securing-your-account-with-two-factor-authentication-2fa/about-two-factor-authentication

####2段階認証の設定方法
- アカウントのprofile > [Account security](https://github.com/settings/security)から設定できる



## 解決方法
[Personal access tokens](https://github.com/settings/tokens) を利用する

- gitコマンドでの操作をするだけの場合は`repo`の項目にチェックをつけて生成すればOK
    - 後から権限変更も可能なので　、とりあえずで作っても可

```
$ git submodule update --init
Cloning into 'example'...
Username for 'https://github.com': bami-oxaliser
Password for 'https://bami-oxaliser@github.com': ${access tokenの英数字}

```

# submoduleを新しいコミットに更新したい
submoduleの更新手順をよく忘れるのでメモ
よくある `git submodule update --init`のコマンドはsubmoduleに指定されたコミットの状態にしてくれるものなのでsubmoduleのコミットのを変更したいのとはまた別のお話

```
$ cd 更新したいサブモジュールディレクトリパス
$ git checkout ブランチ名            // 変更したいブランチ(コミット)にする
$ git pull                        // ブランチを最新の状態に更新
$ cd ../
$ git submodule status            // 更新されたか確認
```
Azure LogAnalytics - Kusto Query (KQL)クエリーでJSONを抽出する方法

# はじめに
Azure環境を触りだして、LogAnalyticsを使ってイベントをフィルターする際に、JSONが含まれているレコードを条件にしたい場合の方法についてまとめてみました。

# サンプル例
- AWS CloudTrailのログサンプル
- コンソールログインでフィルタ
- JSONで出力される以下の"Success"のみを条件に絞りたい

```json
{"ConsoleLogin":"Success"}
```
![20210713_jsonsample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/a44a6ada-95da-27fe-eaef-eb2be8e323d1.png)

# KustoクエリーのJSON抽出方法
以下の2通りが機能として提供されています。

- **[extractjson](https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/extractjsonfunction)**
    - パス式を使用している JSON テキストから、指定された要素を取得する方法
    - 一つのデータのみをjson bodyから抽出する場合に使える。逆に複数のデータを抽出する場合は使えない。
    - メリットとしてはシンプル、型変換ができる
    - 構文
        - extractjson(Jsonpath ,データソース)

- **[parse_json](https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/parsejsonfunction)**
    - JSON テキストより、jsonをparseして読み込ませて、複数のデータを抽出する
        - イメージは Python の json.loadと覚えておけば良さそう
    - 一度読み込ませることで、複数のデータを抽出できる
    - 構文
        - parse_json(json)

# やってみる
**1. extractjsonパターン**

```sql
AWSCloudTrail
| where TimeGenerated > ago(7d)
| where EventName == "ConsoleLogin" // CloudTrailのイベントを絞る
| extend extractjson_result = extractjson("$.ConsoleLogin", ResponseElements)  // ResponseElementsからConsoleLoginを抽出する
| project TimeGenerated,EventName,UserIdentityUserName,ResponseElements,extractjson_result // 出力
```

結果
![20210713_extractjsonsample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/d9ed19d8-d924-f727-7cd9-4b45c6662fef.png)
- ResponseElementsが元データ
- extractjsonで抽出したデータを "extractjson_result" フィールドで表示

**2. parse_jsonパターン**

```sql
AWSCloudTrail
| where TimeGenerated > ago(7d)
| where EventName == "ConsoleLogin" // CloudTrail のイベントを絞る
| extend d=parse_json(ResponseElements) // parse_json で読み込み
| extend parsejson_result = d["ConsoleLogin"]  // 正規化されたJSONを抽出する
| project TimeGenerated,EventName,UserIdentityUserName,ResponseElements,parsejson_result // 出力
```

結果
![20210713_parsejsonsample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/2c911c69-28bb-ba5a-2028-df2df647d646.png)
- 一度、parse_jsonでjson.loadしているのがポイント
- 正規化することで、複数のjson抽出するので、複数を抽出するのであればこちらがお勧め

# 用途例
- 通常のケースは parse_json() の方が利用用途が多そう
- Python等慣れている方はjson.loadの考え方がしっくりくるので後者かと
- extractjsonは型変換が出来るので、用途的にはそちらかも

# 最後に
- まだ Azure Monitor / LogAnalytics を使い始めたばかりですが、他にも気になる点があれば投稿していきたいと思います。
同じ断片から複数個所シーケンスする利点

<font size="+3" color="#AAA">
[PictBio HP「解析メモ」](https://www.pictbio.com/tips/2997.html)から移行中です。
元記事：2021/5/28 公開 同じ配列断片から複数個所シーケンスする利点とは
</font>

　次世代シーケンサー（NGS）では、機種以外に機種ごとにシーケンスの手法を選ぶことができます。配列断片から単純に数百 base シーケンスするほかに、「同じ配列断片から複数個所シーケンスする」手法があります。

　有名なので例を挙げると Paired-End のことです。これに、どんな利点があるのかお話いたします。ここで挙げているものは一部で、様々な利用方法の開発が行われています。

#マッピングの正確性を上げる
　ゲノムなどのリファレンスにマッピングを行う際に、同じ配列断片からシーケンスされた配列データは、近い位置に該当すると考えられます。

　例えば、類似配列により、リファレンス上の複数個所に該当しそうだった場合、もう片方の該当位置から、どちらがより正しいかの判断に使えます。

#de novo アセンブルでつなげた配列を長くできる
　de novo でよくある大まかな計算フローとして、次の流れがあります。このうちスキャッフォールディングで特に活躍します。

1. アセンブル
2. スキャッフォールディング
3. ギャップクローズ

>**スキャッフォールディング**
>アセンブルでつなげた結果であるコンティグ配列同士をつなげる作業。

　コンティグに対しマッピングを行った際に、同じ配列断片から得られた配列データが、それぞれ、異なるコンティグに該当したとします。そのコンティグ同士は近くにあったことがわかるため、間を塩基不明を意味する「N」で埋めてつなげ、長くします。

#検出変異の種類が増える
　マッピングと同様に、同じ配列断片からシーケンスされた配列データは、マッピングすると近い位置に該当すると思われます。ただ、サンプルの配列はリファレンスと差があります。

　例えば、次のような変異を検出することが可能です。

###転座
転座個所から複数個所シーケンスした場合、これらは異なるクロモゾームにマップされる。

###大きな InDel
シーケンスを行った配列断片の長さと断片上の位置がわかれば、通常のアライメント計算ではうまくマップできないような大きな InDel のある箇所も、またいでマッピングができる。
Bladeが使いたかったのでお絵かき掲示板作った

## お絵描き掲示板だぞ

ちょっと前までPOTI-board改二を管理してたさこつです。忙しいしめんどくさいのでやめました。

## BladeとSQLite

せっかくなのでつくりました。[ROIS](https://github.com/sakots/ROIS)

[PaintBBS NEO](https://github.com/funige/neo/)を使うために作ってます。

おい、有識者！！　これ脆弱性とかあったらおしえてください！！！！！

## 今後

レンダリング部分を全部Reactとかにしてもいいかなーとかおもいました。
iPhoneでCSSが崩れている際の対処法

WEBアプリやサービスの開発において、スマートフォンやタブレットなどでの利用を想定した「レスポンシブデザイン化」はマストです。
しかし、実際にコーディングしてみると、PCでは問題ないのに、スマートフォン(iPhone)ではスタイルが崩れているケースがあります。

この記事では、実際に私が遭遇したケースをもとに、CSSで指定したスタイルがiPhoneに反映されていない際の対処法について紹介します。


早速、まずは状況から。
以下のように、新規登録画面における入力内容の送信ボタンを設置しました。

<font color="BLUE">HTML</font color>

```
<input type="submit" value="新規登録">
```
<font color="BLUE">CSS</font color>

```
.form input[type="submit"] {
  cursor: pointer;
  color: white;
  background-color: #fa6d1b;
  font-weight: 300;
  width: 140px;
  border-radius: 5px;
  margin-top: 15px;
  margin-bottom: 0;
  float: right;
}
```
PCで確認すると、このようなボタンを設置できています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1657063/b9a2a514-3ef2-ecec-8441-bfe3a91604da.png" width="400px">
しかし、iPhoneで確認してみると...
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1657063/bc4fbe85-80b3-91f2-82a8-6deb01a03aa2.jpeg" width="400px">
スタイルが崩れている...

#原因
これは、input要素に対してiOSのデフォルトスタイルが適用されてしまっているからです。
iPhoneやiPadなどのiOSで動作するブラウザには、Webkit(Apple製)というレンダリングエンジンが使用されています。
このWebkit系ブラウザには、あらかじめデフォルトのスタイルが当てられているため、指定したCSSスタイルが反映されない場合があるというワケです。

#対処法
CSSの該当箇所にて、iOSデフォルトスタイルを適用しないように指定することで、指定したスタイルを反映させる事ができます。

以下のコードで、Webkit系ブラウザにおけるiOSデフォルトスタイルの適用を回避できます。

```
-webkit-appearance: none;
```
<font color="BLUE">CSS</font color>

```
.form input[type="submit"] {
  cursor: pointer;
  color: white;
  background-color: #fa6d1b;
  font-weight: 300;
  width: 140px;
  border-radius: 5px;
  margin-top: 15px;
  margin-bottom: 0;
  float: right;
  -webkit-appearance: none;    --------追加--------
}
```

再度iPhoneで確認してみましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1657063/92d55027-829a-71b7-3bfb-7c52784ed5fa.jpeg" width="400px">

指定したCSSを適用させる事ができました！

#まとめ
指定したCSSのスタイルが、iPhoneで確認すると崩れている場合があります。
その際は、Webkit系ブラウザにおけるデフォルトスタイルの適用を防ぐように指定しましょう。

#参考
・https://sitest.jp/blog/?p=10883
・https://news.mynavi.jp/article/20190331-iphone_why/
Db2 Community EditionをWindows 10に導入してSAMPLEデータベース作成でハマった話

開発用のWindows 10環境に[Db2 Community Edition](https://www.ibm.com/cloud/blog/announcements/ibm-db2-developer-community-edition)を導入してみました。以前は、開発者用にDb2 Express-Cが無償提供されていたのですが、Db2 Community Editionに変わったようです。少しハマったのでメモを残しておきます。Windows 10とDb2のバージョンは以下のとおりです。

+ Windows 10 Enterprise version 20H2
+ Db2 Community Edition version 11.5

ダウンロードしてインストールするところまでは順調でしたが、SAMPLEデータベースを作ろうとして、`db2sampl`コマンドを実行したところ、以下のようなエラーが発生しました。メッセージに表示されているユーザーID: "XXXXXXXXX"はWindows 10のログイン・ユーザーであり、Db2導入時に指定したDB2管理者ID[^1]ではありません。


[^1]: 導入時に「DB2 Administration Serverのユーザー情報の設定」ダイアログで指定するユーザーIDで、デフォルトは`db2admin`ですが、私は別のローカル・アカウントを指定しました。


```
C:\study>db2sampl

  Creating database "SAMPLE"...
  Attempt to create the database "SAMPLE" failed.
  SQL1092N  このユーザー ID
には要求されたコマンドまたは操作を実行する権限がないため、要求されたコマンドまた
は操作が失敗しました。  ユーザー ID: "XXXXXXXXX"。


  'db2sampl' processing complete.

```

以下の方法で解決しました。
まず、doDb2sample.batというバッチファイルを作成し、以下の内容を記述。

```
db2sampl > doDb2sampl.log
```

runasコマンドで、上記バッチファイルを、導入時に指定したDB2管理者ID(下記実行例では`myadmin`)で実行。
DB2管理者IDのパスワード入力を求められるので入力。

```
runas /env /user:myadmin doDb2sampl.bat
```

doDb2sampl.logに出力された実行結果を確認。

```
  Creating database "SAMPLE"...
  Connecting to database "SAMPLE"...
  Creating tables and data in schema "MYADMIN"...
  Creating tables with XML columns and XML data in schema "MYADMIN"...

  'db2sampl' processing complete.
```
無事SAMPLEデータベースが作成できました。

SAMPLEデータベース以外のデータベースを`create database`コマンドで作成する場合も同じ要領で作成できますが、この場合は`db2cmd`コマンドでオープンした**DB2コマンド・ウィンドウ**からバッチファイルを実行する必要があります。
catコマンドを使ってファイルに書き込む

# 概要
catコマンドからリダイレクトでファイルに書き込む方法を簡単にまとめます。
ファイルの後ろに追記もできるので、覚えておくと便利かもしれません。
# ファイルの上書きその1
catコマンドを引数なしで実行し、書き込みたい内容を標準入力,その出力結果をfileにリダイレクトします。
(Ctrl + dでEOFを入力し標準入力を終了させる)

```
$ cat > file
hoge
fuga
$ cat file
hoge
fuga
```
# ファイルの上書きその2
ヒアドキュメントを利用して書き込みます。


```
$ cat <<EOF > file
heredoc> hoge
heredoc> fuge
heredoc> EOF
$ cat file
hoge
fuge
```
`<<`の後ろに識別子を定義して、その識別子が入力されるまでの標準入力をfileに出力します。
識別子はなんでもよいですが、EOF(end of file)やEOS(end of string)を使用するのが一般的なようです。
# ファイルの追記
リダイレクトを`>`ではなく`>>`で行うとファイルの後ろに追記ができます。先ほど作成したfileに追記していきます。

```
$ cat >> file
hogehoge
fugafuga
$ cat file
hoge
fuge
hogehoge
fugafuga
```

ヒアドキュメントを使って追記もできます。

```
$ cat <<EOF >> file
heredoc> piyopiyo
heredoc> EOF
$ cat file
hoge
fuge
hogehoge
fugafuga
piyopiyo
```

# まとめ
コードレビュー時に上記の方法でファイルに書き込みをしていた方がいて、気になったので調べました。
ファイルの後ろにちょっとした追記をするなら、エディターを立ち上げて編集するよりもcatコマンドを使用する方が早いかもしれませんね。
PHPで第n〇曜日

業務で「第1月曜日」や「第3水曜日」等の日付型を扱いたくなったので、PHPでどう書くのか調べてみました。

# DateTimeの場合
ドキュメントの[相対的な書式](https://www.php.net/manual/ja/datetime.formats.relative.php)に、Datetimeが理解できるフォーマットの一覧があります。
これらを組み合わせることによって自然言語っぽく第n〇曜日を実現できます。

```php
<?php

// 2025年1月の第1月曜日
$dt1 = new DateTime('first Monday of 2025-01');
echo $dt1->format('Y-m-d'); // 2025-01-06

// 今月の第2土曜日
$dt2  = new DateTime('second Saturday of this month');
echo $dt2->format('Y-m-d'); // 2021-07-10

// 来月の第4火曜日
$dt3 = new DateTime('forth Tuesday of next month');
echo $dt3->format('Y-m-d'); 2021-08-24
```
ちょっと面白い・・・
ちなみに、存在しない第n〇曜日（2021年7月第5月曜日）で試してみると、月初めから数えて5回目の月曜日に当たる翌月の第1月曜日となりました。

```php
<?php

// 2021年7月第5月曜日（存在しない）
$dt4 = new DateTime('fifth Monday of 2021-07');
echo $dt4->format('Y-m-d H:i:s'); // 2021-08-02
```

## Carbonの場合
PHPで日付といえば[Carbon](https://carbon.nesbot.com/)ですよね。
これはDateTimeのラッパーで[Laravel](https://laravel.com/)等の人気フレームワークにも組み込まれています。
[Composer](https://getcomposer.org/)でインストールできます。

```
composer require nesbot/carbon
```

DateTimeのラッパーなのでもちろん上述と同様の方法も使えます。

```php
<?php
require 'vendor/autoload.php';
use Carbon\Carbon;

// 2025年1月の第1月曜日
echo Carbon::createFromDate('first Monday of 2025-01')->format('Y-m-d') // 2025-01-06

// 今月の第2土曜日
echo Carbon::createFromDate('second Saturday of this month')->format('Y-m-d') // 2021-07-10

// 来月の第4火曜日
echo Carbon::createFromDate('first Monday of 2025-01')->format('Y-m-d') // 2021-08-24

// 2021年7月第5月曜日（存在しない）
$dt4 = new DateTime('fifth Monday of 2021-07'); // 2021-08-02
```

ただ、Carbonにはこのような用途専用のメソッドである`nthOfMonth()`があります。
第n〇曜日を求めたい場合、第一引数にn、第二引数に〇（曜日を表す定数）を与えます。
曜日定数はCarbonに定義されています。

| 曜日 | 定数 | 値 |
| - | - | - |
| 日曜日 | Carbon::SUNDAY | 0 |
| 月曜日 | Carbon::MONDAY | 1 |
| 火曜日 | Carbon::TUESDAY | 2 |
| 水曜日 | Carbon::WEDNESDAY | 3 |
| 木曜日 | Carbon::THURSDAY | 4 |
| 金曜日 | Carbon::FRIDAY | 5 |
| 土曜日 | Carbon::SATURDAY | 6 |

これらを用いて実行してみてみます。

```php
<?php
require 'vendor/autoload.php';
use Carbon\Carbon;

// 2025年1月の第1月曜日
echo Carbon::createFromDate(2025, 1)->nthOfMonth(1, Carbon::MONDAY)->format('Y-m-d') // 2025-01-06

// 今月の第2土曜日
echo Carbon::now()->nthOfMonth(2, Carbon::TUESDAY)->format('Y-m-d') // 2021-07-10

// 来月の第4火曜日
echo Carbon::now()->addMonth()->nthOfMonth(4, Carbon::TUESDAY)->format('Y-m-d') // 2021-08-24
```

いい感じですね。
ちなみに存在しない日付の場合は、nthOfMonthの段階でfalseを返してくれます。

```php
require 'vendor/autoload.php';
use Carbon\Carbon;

// 2021年7月第5月曜日（存在しない）
echo Carbon::createFromDate(2021, 7)->nthOfMonth(5, Carbon::MONDAY) // false
```
Zabbixの機能

# マニュアル
日本語マニュアルは機械翻訳でまったく使い物にならないので原文を読むべき
「Zabbix統合監視実践入門」は非常に読みづらいので公式ドキュメントを読んだ方がマシ、あるいは触って覚えるのがベスト
# Discovery
ネットワークを指定するとPINGとかSSHとかを使って自動でその網内を探索してくれる。
発見次第そのマシンを監視対象に追加したりできる。
自分の環境ではサブネットの範囲で固定IPを契約しており、どのIPを使っているか分からなくなっていたので便利だった。

# API
ZabbixサーバーにはWebAPIが実装されていて、指定のURLに対してJSONを送ることでブラウザと同様の操作ができる。
個人的にブラウザをポチポチ弄るのは疲れるのでもっと早く知りたかった。
シーケンスアライメントの計算

<font size="+3" color="#AAA">
[PictBio HP「解析メモ」](https://www.pictbio.com/tips/2099.html)から移行中です。
元記事：2016/12/08 公開 シーケンスアライメントの計算
</font>

#NGSデータ解析におけるアライメント
　NGSデータ解析におけるアライメントは、マッピングなどの配列（文字の並び）を比較の際に出てくる用語です。NGSはシーケンス配列を得るための機器のため、アライメントが最も重要となる計算です。

　では、この計算はどのようなロジックで行われているのでしょうか？

#スコア行列
　現在の比較手法は複数の配列を文字位置で一文字ずつ合わせてずれを調整します。パターンが複数できた場合は、最も一致度の高いものを採用します。

 この一致度の計算方法ですが、下記のような二次元の表でパターンごとのスコアを決める**スコア行列**（スコアテーブル、スコア関数）を用います。計算結果で最もスコア値が大きいパターンが「最も一致度が高いパターン」とされます。

ex : 塩基のスコア行列

|  |A  |T  |G  |C  |
|---|---|---|---|---|
|**A**  |1  |0  |0  |0  |
|**T**  |0  |1  |0  |0  |
|**G**  |0  |0  |1  |0  |
|**C**  |0  |0  |0  |1  |

#マッチ、ミスマッチ
　表で見ていくと、Aに対する位置がAである場合「1」の値が付きます（**マッチ**）。Aに対する位置がA以外の場合「0」です（**ミスマッチ**）。

　AはAの位置に必ず来るように並べらればいいのですが、比較する配列によって他の塩基位置は一致してもAだけ対応が見つからない場合もあるでしょう。このような不一致はゲノムと比較した場合、変異として疑うことができます。

#ドットマトリックス表
　スコアの設定ができたら配列を縦横軸に並べた二次元の表（ドットマトリックス表）で配列を比較します。下記の表で実際に見てみましょう。

ex : 塩基配列のドットマトリックス
![ドットマトリックス](https://www.pictbio.com/wp-content/uploads/tips/tips1697_1.png)

　一致個所に印をつけ、左上から右下の向きに一致が連続している並びをたどります。途切れた場合は、同じく左上から右下の向きに縦横に進み、折れ線を作成します。いくつかパターンができますので、ここでスコア計算を行います。

#ギャップ
　ドットマトリックス表でできた折れ線の縦横はギャップを表し、マイナスのスコアが割り当てられます。図例のパターンに表例のスコアを当てはめると下記のようになります。（ギャップを-2とします。）

###1. 赤→緑
```
C T G A T G C G A C – – –
  | | | |     | | |   
– T G A T – – G A C G A C
```
マッチ7 + ギャップ2 = 1×7 + -2×2 = 3

###2. 赤→青
```
C T G A T G – C G A C
  | | | | |   | | | |
– T G A T G A C G A C
```
マッチ8 + ギャップ1 = 1×8 + -2×1 = 6

###3. 黄→青
```
– – C T G A T G C G A C
    | | | |     | | | |
T G A T G A – – C G A C
```
マッチ7 + ミスマッチ1 + ギャップ2 = 1×7 + 0x1 + -2×2 = 3

###結果 :「2. 赤→青」のスコアが高い　　　　　　　
= 最も一致度の高いアライメントパターン

#アライメントの種類

###マルチプルアライメント
3配列以上を比較する

###ペアワイズアライメント
2配列で比較する

###グローバルアライメント
配列の全体を比較する

###ローカルアライメント
配列の一部分を比較する

　いずれも基本的には上記の手法をとっており、この計算を高速にすることがNGSデータ解析ツールに求められています。
深層強化学習を用いたシステムトレーディング

# はじめに
　近年、人工知能ブームにより、人工知能を使ったトレーディング手法が盛んである。そこで、今回は深層強化学習を用いたシステムトレーディングを実施した。

まず、実際の深層強化学習モデルである。agentの行動として、 BUY、HOLD、SELLの三つの内一つを選択する。環境の戻り値として、状態（今現在保有しているポジションの価格、市場価格、手持ちのキャッシュ）、報酬（手持ちのキャッシュの変化値（含む益も含む））、終了（取引の終了か否か）、情報（ターミナルにディスプレイする情報）を返す。

![rl_flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/6c29d9a1-b2fe-8821-0b4a-ce462792d877.png)

## 使用データについて

トレンド傾向の掴みやすさから、yahoo financeからGSPCの日足を使用した。

訓練データの期間：2015/1/1 - 2017/6/30
テストデータの期間：2017/7/1 - 2021/1/1

以下ソースコード

https://github.com/sugiyama404/ReinfoceLearningForTrading/blob/main/get_csv.ipynb

# Q学習

```math
Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \eta (R_{t+1} + \gamma \max_a Q(s_{t+1},a_t) -Q(s_t,a_t))
```

Q学習は価値ベース手法の代表的な例の一つ。Q学習は状況に応じて、agentに報酬を最大化するのにどのような行動を取るのが良いかを教えるシステム。


# SARSA

```math
Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \eta (R_{t+1} + \gamma Q(s_{t+1},a_{t+1}) -Q(s_t,a_t))
```

SARSAは、Q学習において、行動の選択が最大値を取るところを、実際に行う行動を入れる、より方策ベースの行動を取りやすくしいてる。

# &epsilon; - greedy法

　行動の初期に、ランダムな行動をし、報酬の局所的な最大化を防ぐ、方法を &epsilon; - greedy 法という。実行回数の増大化に伴い、 &epsilon; が減少し、ランダムな行動の回数が減り、その代わり、学習による行動が増える。[^1]

下記図は、条件分岐フロー

![epsilon_greedy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/493d7679-9d1f-2f59-a622-996c2c1cc583.png)



また、今回は割引率の違いによる、イプシロンと減少の関係と学習の累積度数を調べた。
r: 割引率、左軸: &epsilon; 右軸: 累積度数

![con.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/3d61f6c2-ddd6-2ca3-41b9-2f823602de17.jpeg)


以下、ソースコード

https://github.com/sugiyama404/ReinfoceLearningForTrading/blob/main/epsilon_dgreey_method.ipynb

# 価値ベース手法と方策ベース手法

深層強化学習には、大別すると価値ベース、方策ベース、ゲームAIの三つの手法がある。
その中の価値ベース、方策ベースを解説したい。
## 価値ベース手法
価値観数Qを学習を通じ、最適な行動を目指す。
行動の選択は決定論に準ずる。
※sarsa,Q学習はここに含む。
## 方策ベース手法
agentの方策の条件付き確率πを学習し、価値観数Qを使わず、最適な行動を目指す。

行動の選択は確率論に準ずる。

# 売買ルール

1.空売りは認めない
2.ポジションを持っている場合、追加注文を出せない。
3.最後のステップでポジションを全て売却する。
4.ポジションは全買い、全売り
5.所持金は1000000ドル

# 実装と結果

比較のため、ネガティブコントロールとして、ランダムによる売買を入れた。


以下、共に訓練モードのソースコード

ランダム

https://github.com/sugiyama404/ReinfoceLearningForTrading/blob/main/Control/random_test.ipynb

Q学習

https://github.com/sugiyama404/ReinfoceLearningForTrading/blob/main/Q-Learning/q_learning_test.ipynb

SARSA

https://github.com/sugiyama404/ReinfoceLearningForTrading/blob/main/SARSA/sarsa_test.ipynb

ランダムに対して、Q学習、SARSAともに勝率では勝ち、収益率が負けている。学習がうまくいっていると言える。

![Unknown.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/504684ed-84d9-da47-8c2a-eae4be813ddc.png)


ソースコードはこちら

https://github.com/sugiyama404/ReinfoceLearningForTrading/blob/main/make_data_analysys.ipynb

[^1]: Richard S. Sutton and Andrew G. Barto(2015),'Reinforcement Learning: An Introduction',The MIT Press Cambridge, Massachusetts London, England
GitLabのPumaのメモリーリークをPuma Worker Killerで対応した話

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。


# 0. はじめに

弊社では、GitLabをオンプレで動かしています。
そのGitLabもUnicronからPumaに切り替わりまして、もう1年になります。
[参考記事:GitLab 12.9のUnicornをPumaに変更する - Qiita](https://qiita.com/ynott/items/869fe31eb0f62dfb35ba)
Pumaはスピードも早く、快適なレスポンスを実現してくれています。

しかし、Pumaはメモリーの利用量がなかなかに激しいです。
以下はとある日のhtopのスクリーンショットです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/d4e12cfc-4c10-cca0-6e2c-b6389af50619.png)

見ていただければ分かるとおりSWAPファイルを2.1GB使っています。
VMwareで仮想化されており、SWAPファイルもストレージが早いことから遅くなって困るということはありませんが、サーバー管理者としてはあまり気持ちのよいものではありません。

そこで、Puma Worker Killerを導入した話になります。

GitLabの情報は以下にあります。

Configure the bundled Puma instance of the GitLab package | GitLab   
https://docs.gitlab.com/ee/administration/operations/puma.html#change-the-memory-limit-setting

# 1. 前提

GitLabのバージョン: 14.0.5-ee(Community Editionでもおそらく同じ)
OS: Ubuntu 20.04 LTS
Memory: 8GB
インストール方式: omnibus-gitlab

■使用上の注意点

以下のGitHubの注意事項にあるように副作用が発生します。
その辺りを理解してご利用時ください。

schneems/puma_worker_killer: Automatically restart Puma cluster workers based on max RAM available
https://github.com/schneems/puma_worker_killer

# 2. 設定方法

## 2-1. gitlab.rbファイルに追記

```file:/etc/gitlab/gitlab.rb
puma['per_worker_max_memory_mb'] = 1024
```

## 2-2. reconfigure

```shell
$ sudo gitlab-ctl reconfigure
```

reconfigureしたら、自動的にpumaが再起動されます。
ご注意ください。

# 3. 結果

SWAPファイルの使用はなくなりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/9329efe8-cc0a-2054-6e1e-abcf48a65d83.png)

今のところ深刻な問題は報告されていないようです。
STM32G031とCO2センサーモジュールMH-Z19CでCO2測定


x いろいろあるから回路、FWは、非公開

目的
ちょつと役に立つ物を作ってみた
今、コロナで流行りのCO2測定器
二酸化炭素濃度を測る

外部仕様
400から5000
AC100V(DC6V)からアダプターを使い内部5Vに変換
秋月のＣＯ２センサーモジュール　ＭＨ－Ｚ１９Ｃ　M-16142
ＳＴＭ３２マイコン　ＳＴＭ３２Ｇ０３１Ｊ６Ｍ６　I-15688
スタート後、約8秒　キャブレーション　リセットでも同じ
0.1秒毎に更新
7セグ4桁　見やすい為
仕様書通りに作ったら値がおかしいので調整した。

クラウドワークスの人にお知恵をお借りして基板化しました。
パターンからガーバーまでを依頼しました。
電源基板担当は、btbw80さん
7セグ担当は、skal81さん
STM32G031ボード担当は、btbw80さん
本当にありがとうございました。

![h_con35.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/236a3e6c-142a-475a-3491-2b8f7e95209c.jpeg)



基板か前

![co2_bbb_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/5230f978-727e-e657-437e-e5244933eb12.jpeg)



開発中1 

![co2_bbb_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/2f7249d7-8e90-f4f0-7f23-e155dae6f099.jpeg)
Python　ランダムな数列を作成する方法。重複有無、全列挙


## 指定した範囲を列挙する

rangeを使えば、範囲の数列を作ることができます。

```py
lst = list(range(0, 10))
print(*lst)
# 0 1 2 3 4 5 6 7 8 9
```

## 指定した範囲から、重複のないランダムな数列

random.sampleを使用して、重複のないランダムな数列を作れます。

```py
import random

lst = list(range(0, 10))
print(*random.sample(lst, len(lst)))
# 8 9 7 6 0 3 1 2 5 4

# 別の書き方
lstlen = 10
print(*random.sample(list(range(0, 10)), lstlen))
```

## 指定した範囲から、重複ありでランダムな数列

```py
import random

lst = list(range(0, 10))
print(*random.choices(lst, k=len(lst)))
# 2 4 7 5 6 1 7 9 3 2

# 別の書き方
lstlen = 10
print(*random.choices(list(range(0, lstlen)), k=lstlen))
```

## とりうる組み合わせを全て列挙する

```py
import itertools

lst = list(range(0, 3))
for i in itertools.permutations(lst):
    print(*i)
# 0 1 2
# 0 2 1
# 1 0 2
# 1 2 0
# 2 0 1
# 2 1 0

# 別の書き方
lstlen = 3
for i in permutations(list(range(0, lstlen))):
    print(*i)
```

## おまけ
rangeのさまざまな使い方

```py
list(range(10))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list(range(1, 11))
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(range(0, 30, 5))
# [0, 5, 10, 15, 20, 25]
list(range(0, 10, 3))
# [0, 3, 6, 9]
list(range(0, -10, -1))
# [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
list(range(0))
# []
list(range(1, 0))
# []
```

## 参考

[【Python】リストや文字列の要素をランダムに抽出する(random.choice, choices, sample) | Hbk project](https://hibiki-press.tech/python/random-sequence/4913#toc5)

[random --- 擬似乱数を生成する — Python 3.9.4 ドキュメント](https://docs.python.org/ja/3/library/random.html?highlight=%E4%B9%B1%E6%95%B0#random.sample)

[組み込み型 — Python 3.9.4 ドキュメント](https://docs.python.org/ja/3/library/stdtypes.html#range)

[itertools --- 効率的なループ実行のためのイテレータ生成関数 — Python 3.9.4 ドキュメント](https://docs.python.org/ja/3/library/itertools.html)
Taxonomy rank 別にゲノムのサイズ感を見る

<font size="+3" color="#AAA">
[PictBio HP「解析メモ」](https://www.pictbio.com/tips/3152.html)から移行中です。
元記事：2018/11/21 公開 ゲノムのサイズ感をつかむ
</font>

　今回は検証を行ってみました。NCBIに登録されているゲノムの一覧をとってきて、Taxonomy のランクごとにサイズを見てみます。使用したゲノムの一覧は NCBI のデータがある FTP の「Genome」フォルダからとってきました。

>overview.txt （取得ファイルの更新日時 2018/11/20 21:48:00）
>ftp://ftp.ncbi.nlm.nih.gov/genomes/GENOME_REPORTS/

　このファイルから「Kingdom」「Group」「SubGroup」毎に、最小値、最大値を取得しました。結果はそれぞれ以下の通りです。

#Kingdom で集計

![Kingdom](https://www.pictbio.com/wp-content/uploads/tips/3152_kingdom.png)

　ログスケールですが、Viruses と Eukaryota のサイズの幅広さを感じます。

#Group で集計

![Group](https://www.pictbio.com/wp-content/uploads/tips/3152_group.png)

#SubGroup で集計

![SubGroup](https://www.pictbio.com/wp-content/uploads/tips/3152_subGroup.png)

　エクセルだとデータサイズの制限や、計算が遅いのでスクリプト言語でプログラムを作成して集計してみました。弊社ではこういった簡単なプログラムがサービス内で必要になった場合は、カスタムさせていただいております。
Destructive SWAP testに関するメモ

# 参考文献
Destructive SWAP testの元ネタ:

https://arxiv.org/pdf/1303.6814.pdf

そもそもSWAP testとは

https://whyitsso.net/physics/quantum_mechanics/swaptest.html

# SWAP test

量子状態|0>|Ψ>|φ>に
`Circuit().h[0].cswap[0, 1, 2].h[0].m[0]`
を回路に付け加えると、0ビット目が0と測定される確率が(1+|<Ψ|φ>|^2)/2になる。

# 元ネタの論文
- 光の分野で知られているHong-Ou-Mandel (HOM)効果はSWAP testと等価だよ
- けれど、HOM効果は無駄な|0>を使ってないよね、ということでやってみた
  - 元々のSWAP testでは、|Ψ>, |φ>のレジスタは(そのままではないものの)状態として残るが、HOM効果を真似た今回のは、そのレジスタは壊れてしまう(そこがdestructive)

# 回路づくり

SWAP: `Circuit().cx[2, 1].cx[1, 2].cx[2, 1]`
CSWAP: `Circuit().cx[2, 1].ccx[0, 1, 2].cx[2, 1]`
なので、SWAP testは
`Circuit().h[0].cx[2, 1].ccx[0, 1, 2].cx[2, 1].h[0].m[0]`

X = HZHを使うと

`Circuit().h[0].cx[2, 1].h[2].ccz[0, 1, 2].h[2].cx[2, 1].h[0].m[0]`

CCZを使い終わったら、1, 2の量子ビットはもういらないから、いらないゲートを消してしまって

`Circuit().h[0].cx[2, 1].h[2].ccz[0, 1, 2].h[0].m[0]`

ところで、0量子ビット目に注目するとHZH = Xの関係が再び使えて(CCZはどれがcontrolとかどれがtargetとか関係ない)

`Circuit().cx[2, 1].h[2].ccx[1, 2, 0].m[0]`

ところで、0量子ビット目の測定結果が0になる確率が(1+|<Ψ|φ>|^2)/2になるのだった。
0量子ビット目の測定結果が0になるのは、1量子ビット目と2量子ビット目の少なくともいずれかが0になっているとき。(0量子ビット目にCCXを使っているので)

なので、これでよい。
`Circuit().cx[2, 1].h[2].m[1, 2]`

0量子ビット目が消えた!

|Ψ>|φ>に対しては、
`Circuit().cx[1, 0].h[1].m[0, 1]`

の測定結果が11以外となる確率が、(1+|<Ψ|φ>|^2)/2になる。

# 例
|Ψ> = `Circuit().ry(1)[0].rz(0.4)[0].run()`
|φ> = |0>
とすると、

```py
from blueqat import Circuit
import numpy as np
c = Circuit().ry(1)[0].rz(0.4)[0]
print((1 + abs(np.vdot(c.run(), Circuit(1).run()))**2) / 2)
# => 0.8850755764670349
print(c.cx[1, 0].h[1].m[0, 1].run(shots=10000))
# => 動かすたびに変わるが
# Counter({'00': 3804, '01': 3900, '11': 1170, '10': 1126})
# 10000 - 1170 = 8830
# 0.8850... * 10000とかなり近い
```
ゲノム配列のバージョン

<font size="+3" color="#AAA">
[PictBio HP「解析メモ」](https://www.pictbio.com/tips/1632.html)から移行中です。
元記事：2021/5/28 公開 ゲノム配列を取得する際の注意点
</font>

　ゲノム配列を取得する方法はいくつかあります。

　IGVなどのゲノムビューワーでは、あらかじめよく使われるモデル生物がリストアップされており、そこからゲノム配列の取得をすることができます。しかし、**ゲノム配列にはバージョンが存在する**ので、自分のほしいデータとバージョンが一致しているかどうか、ゲノム配列を取得する際には注意しなければなりません。

　ヒトの場合、hg19（GRCh37）やhg38（GRCh38）のように、数字でゲノム配列のバージョンが管理されていますが、**NCBIではさらに細かいバージョン管理が行われています。**

　まずは最新のゲノム配列を見てみましょう。

#検索
NCBIのトップページからデータベースに「Genome」を選択、検索ワードに「human」と入力して検索してください。

![検索](https://www.pictbio.com/wp-content/uploads/tips/tips1632_1.png)

#バージョンの確認
　表示された結果はヒトの最新ゲノム情報になります。

　赤枠をご覧ください。「GRCh38」のバージョン名の後に「.p8」とあります。実はこれもバージョンを表しており、小さなアップデートではここの数字が変わります。バージョンに対応してdbSNPなどのアノテーションも異なるので、必要に応じてリリースノートなどの情報確認が必要です。

![ゲノムページ](https://www.pictbio.com/wp-content/uploads/tips/tips1632_2.png)

#FTPサイト
　最新のゲノム配列以外はNCBIではFTPサイトで取得できます。

![FTPサイト](https://www.pictbio.com/wp-content/uploads/tips/tips1632_3.png)

　今回はNCBIを例に見てきましたが、データベースごとに保存されているデータは異なります。ポジションやアノテーションの付け方も異なるため、複数のデータベースから取得したデータを比較する際には、相互対応があるか、気を付けてみてください。
FASTAファイルについて

<font size="+3" color="#AAA">
[PictBio HP「解析メモ」](https://www.pictbio.com/tips/3364.html)から移行中です。
元記事：2021/5/28 公開 FASTAファイルについて
</font>

　今回は初心に帰ってFASTAファイルについてになります。

　FASTAファイルはバイオインフォマティクスをやっていなくてもご利用されている方もいらっしゃるかと思います。 そうでない方も、シンプルなのにたくさんの情報が詰まった便利なファイルですので是非ご確認ください。

>[ファイルのフォーマットを判別する](https://qiita.com/PictBio/items/d29a4446a541843b67d7)

　FASTAファイルは塩基、アミノ酸配列の情報を記載するファイルフォーマットであり、次のような書式になっています。

![FASTA形式](https://www.pictbio.com/wp-content/uploads/tips/fasta_format.png)

　「>(大なり)」で始まる行は配列のID（ユニークな名称）です。 次のID（>(大なり)が来るまで、1つの配列情報です。配列は好きな位置で改行できます。

　塩基のATGCのように1分子を1文字であらわし、配列の並びがわかります。 どの文字が何の分子を表しているかのルールとして、IUPACコードが使われていることが多いです。

>[IUPACコード](https://en.wikipedia.org/wiki/Nucleic_acid_notation)

　1分子1文字とはいえ、ヒトのゲノムサイズは約30億塩基対であるため、ゲノムのFASTAファイルのデータサイズはかなり巨大になります。

>[バイオデータベースで取得した巨大ファイルを目でみる](https://qiita.com/PictBio/items/5dbd000429188006c453)

　次のような特殊な配列もあらわすことができます。

|表記  |内容  |
|---|---|
|N  |不明な分子  |
|. (または「-」)  |ギャップ  |

　データベースによっては複数の分子を表すこともあり、SNPなども表現できます。 また、大文字小文字で情報で信頼度や繰り返し配列を表すこともあります。信頼度の場合、大文字で信頼度の高い情報、小文字で信頼度の低い情報を表します。

　ここまでくると、FASTAファイルの提供元がどんなルールで記載しているか明示してあることが多いです。 FASTAファイルを見かけた際は、是非注目してみてください。
dockerについて~1~

## 前置き

※ 本記事はエンジニア転職を目指している私が学習のアウトプットのために書いている記事になります。

**対象**
- docker初心者
- プログラミング初学者
- dockerについてイメージを掴みたい人

**本記事の構成**

- dockerとコンテナについて（前章）
- コンテナを活用することでできるようになったこと
- コンテナについて
- まとめ
- 参考


## dockerとコンテナについて（前章）

dockerはLinux上で動作するサービスで**コンテナ**を実現するサービスを提供しています。
ほかにもコンテナ関連のサービスはあるが、圧倒的な人気を誇るのがdockerだそうです。

そもそもコンテナとは何なのかを説明します。

コンテナとは文字通り**箱**であり、この箱の中身に入るのは

  - Linux基本コマンド
  - ライブラリ
  - フレームワーク
  - アプリケーション

である。
　簡単に言えば、dockerを利用すれば、何かしらのサービスを**コンテナ（箱）**の中に入れて運用できるようになります。

　では、このコンテナと呼ばれる**箱**でサービスを運用するメリットについて深掘りしたいと思います。

## コンテナを活用することで、できるようになったこと


- **同一ディレクトリ内で複数のサービスを別々に運用できる。**
- **同一ディレクトリ内にある複数のサービスの内、影響を与えることなく、サービスを更新できる。**

ではコンテナが活用されるまでは、どうだったのか。

- **同一ディレクトリ内で共通のフレームワークを使用して、複数のサービスを運用する**
（同一ディレクトリ内でRuby on Rails（以下Railsと記述する）を共通のフレームワークとして使って、TwitterとLINEを運用するみたいなこと）

- **同一ディレクトリ内で共通のフレームワークを使用している複数サービスの内、どれか一つに更新する必要が生じ、フレームワークの仕様について変更する場合、運用されているその他のサービスについてもフレームワークの使用変更に伴う変更を行わなければならない。つまり一つのサービスの更新が他のサービスに影響を与えてしまいます。**
例えばTwitterのサービスを更新する都合でフレームワークであるRailsの仕様について変更する必要が生じた場合に同一フレームワークで運用されているLINEについてもフレームワークの仕様変更に伴う変更を行わなければならないのです。
片っぽを変更する場合は、もう片っぽも変更するのです。
もしくは、片っぽのディレクトリを変更して、影響受けないようにするとか。
めんどくさいですね笑

これを解決したのが**コンテナ**なんです！

## コンテナについて
コンテナは**サービスを隔離の状態**にすることができます。

サービスをコンテナの中に入れて**隔離**の状態にすることで、同一ディレクトリに二つのサービスが競合していても影響を与えることなく、運用できます。

そのほかにも**複製**を簡単にできたりもします。
**前はファイルをひとつひとつコピーしたりしていた**ようですが、コンテナを使用していれば、**コンテナごと複製が可能**なので、作業量が少なく済みます。

## まとめ

今回はdockerのさわりのさわりの部分について、説明しました。
docker初心者の方やプログラミング初学者の方がイメージを掴めればと思い、書きましたので、学習の参考にしていただければと思います。

今後は、dockerの運用方法等について説明したいと思います。

## 参考

https://www.amazon.co.jp/%E3%81%95%E3%82%8F%E3%81%A3%E3%81%A6%E5%AD%A6%E3%81%B6%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9-docker%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E6%A7%8B%E7%AF%89-%E5%A4%A7%E6%BE%A4-%E6%96%87%E5%AD%9D-ebook/dp/B089VZXX63/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=docker&qid=1626160233&sr=8-5
バイオデータベースで取得した巨大ファイルを目でみる

<font size="+3" color="#AAA">
[PictBio HP「解析メモ」](https://www.pictbio.com/tips/1002.html)から移行中です。
元記事：2016/3/28 公開 バイオデータベースで取得した巨大ファイルを目でみたい
</font>

　世の中のデータファイルにはいろんな形式があります。バイオデータベースで採用されているファイル形式にも、以下のような様々な形式があります。

|名称  |内容  |
|---|---|
|FASTA  |アミノ酸や塩基配列の情報  |
|BED  |配列上のポジションの情報  |
|GTF, GFF  |ゲノム配列上の遺伝子情報  |
|GenBank  |配列のアノテーション情報  |

↓ファイルフォーマットについて
[ファイルのフォーマットを判別する](https://qiita.com/PictBio/items/d29a4446a541843b67d7)

　一例ですが、ここに挙げたファイルは全て目で見ることが可能です。Windowsに標準搭載されている「メモ帳」でも開くことができる場合があります。気をつけるべき点は「巨大ファイル」「改行コードがLinux」であることです。

###巨大ファイル
　「メモ帳」はバイオデータベースに登録されているような、大きなデータサイズの表示ができません。

###改行コードがLinux
　改行コードとはコンピューターが「ここが改行位置である」という人の目には見えない目印。OSごとに異なるのでWindowsはLinuxの改行位置を判別することができません。（MacはLinuxに近い要素があるため、表示できる可能性あり。）

追記：最近（2021/7/13）Windows10付属の「メモ帳」でLinux改行ファイルを開いてみたら、正しく開けるようになってました。

　これらの問題を解決するのに我々が使用しているのが、フリーのテキストエディタです。検索すると多くの方が開発して、配布してくださっています。

###よく使うエディタ一例

+ [TeraPad](https://tera-net.com/)
+ [サクラエディタ](https://sakura-editor.github.io/)
+ [CotEditor](https://coteditor.com/)
+ [Sublime Text](http://www.sublimetext.com/)

一際巨大なファイルは表示ができないこともありますが、大体のファイルを開くことができます。

　よくある「タブ文字区切り（TSV）ファイル」を見るときに、タブ文字をマーク表示してくれて見やすいです。（表示設定の調整にもよります。）

　また、改行コードの変換を行ってくれたりします。これを使いこなせばWindowsで作ったテキストファイルをMacユーザーの先生に送っても大丈夫！！

　お持ちのデータをテキストエディターで開いて観察してみてはいかがでしょうか？
オブジェクト指向(Part2)

#クラスメソッド

インスタンスに属する情報はインスタンスフィールドでしたが、クラスに属するのは
クラスフィールドと言います。
クラスフィールドはpublic static データ型 変数で表します。
クラスフィールドを呼ぶ時はクラス名.クラスフィールド名で表します。

同様にクラスに属するメソッドをクラスメソッドと言います。
クラスメソッドの時はpublic staticのようにstaticを付けます。
クラスメソッドはインスタンスを生成する前でも呼び出すことができます。

#コンストラクトのオーバーロード

コンストラクタはオーバーロードすることができます。
引数の数が違えば、どちらのメソッドをとっていいかが分かるようになります。

コンストラクタの中で、他のコンストラクタも呼び出すことができます。
呼ぶ時はthis（）を使って呼ぶことができます。その時はコンストラクタの先頭に置くようにして下さい。

もし、データが入ってない時はnullを使って表しましょう。

#カプセル化

カプセル化とは使い手に必要のないモノは隠しておきましょうという考え方です。

具体的にはフィールドとメソッドへのアクセスを制限することです。
普段はフィールドもメソッドもpublicを使って記述していますが、
publicの箇所をprivateに変えましょう。

#ゲッター

フィールドをプライベートにした上でフィールドの値だけをとる方法をゲッターと言います。
ゲッターはgetフィールド名で表します。

#セッター

フィールドをprivateにすることで、クラスの外からの変更が効かなくなります。
そのために変更用のメソッドを作ります。それをセッターと言います。
setフィールド名で表しましょう。

カプセル化の定石として、フィールドはpravateで、メソッドはpublicを使用しましょう。

#最後に

初心者ですので、拙い文章や書き方だと思いますが、最後まで見て頂き
ありがとうございました。もし、ご指摘等がございましたらよろしくお願い致します。
[Ruby] firstメソッドとlastメソッド

##はじめに
私が現在作成中のオリジナルアプリに進捗状況を記録していく機能があります。データベースの蓄積されている進捗記録たちの一番最新に更新されたレコードの情報から進捗状況をプログレスバーで表示させています。

その時に役に立ったのがfirstメソッドです。その逆の効果を得られるlastメソッドも一緒に紹介したいと思います。
よろしくお願いします。

##firstメソッド

firstメソッドは配列に対して使用します。配列の中の最初の要素を取り出すために使うメソッドです。つまり配列を添字で0の要素ですね。

```ruby
配列.first
```

このように使います。もし配列が空であればnilを返します。

例を紹介します。

```ruby
fruits = ["apple", "banana", "peach", "melon"]

puts fruits.first
# => "apple"
```

firstメソッドは引数に数字を与えることで、配列のはじめの要素からいくつまでを取得するか指定することができます。
先ほどの配列fruitsを使って例を見てみましょう。↓

```ruby
fruits = ["apple", "banana", "peach", "melon"]

puts fruits.first(2)
puts fruits.first(3)

# => ["apple", "banana"]
# => ["apple", "banana", "peach"]
```

もし、指定した数字が配列のなかの要素の数を超えていれば、その配列の最後までを取得します。

##lastメソッド
lastメソッドはfirstメソッドの逆バージョンです。
配列の最後の要素を取り出すことができるメソッドです。もちろん引数を渡すことで、その数字の数だけ、配列の最後から要素を取得してくれます。

一応例を記載しておきます。↓

```ruby
fruits = ["apple", "banana", "peach", "melon"]

puts fruits.last
puts fruits.last(2)
puts fruits.last(3)

# => "melon"
# => ["melon", "peach"]
# => ["melon", "peach", "banana"]
```

##おまけ

私はこのメソッドを利用して、データベースから取得してきた進捗記録から最新の情報だけを抜き取り、プログレスバーに反映させました。

特に説明などはしませんが、whereメソッドで取得している実際のコードを一応載せときます↓

```ruby
@progresses = Progress.where(students_textbook_id: @students_textbook.id).order('created_at DESC')
```

このような取得の仕方をすることで、```@progresses.first```とするだけで使えます。


データベースから取得する時はwhereメソッドがかなり相性が良いです。なぜなら、whereメソッドは配列としてデータベースから取得してきた情報を返してくれるので、そのままfirstメソッドが使えます。
もしfind_byメソッドを使って情報を取ってきた場合、配列では返してくれないので、おそらくfirstメソッドは使えないでしょう（確認はしていません）

全くの別件ですが、以前このwhereメソッドとfind_byメソッドの特徴の違いで悩まされたことがあります。その時の記事もよかったら読んでください↓

https://qiita.com/minhee/items/ebbb37c26b91b017cfb7
ミュータブル / イミュータブル

プログラミングの世界における、オブジェクトの種類の区分の一つ。
mutableとimmutable。ここではRubyを例にとります。

### ミュータブル

「変更可能な」と言う意味
ミュータブルなオブジェクトには破壊的な変更が適用可能。
Rubyの文字列など(Stringクラス)

### イミュータブル

「変更不可能な」と言う意味
イミュータブルなオブジェクトでは破壊的な変更が適用できない。

Rubyにおいて、常にイミュータブルなクラスや値はいくつかある。基本的なデータ型で言うと、次の4種類。

1. 数値(Integerクラス・Floatクラス)
2. シンボル(Symbolクラス)
3. true/false(TrueClassとFalseClass)
4. nil(NilClass)

### 余談

オブジェクト指向を理解する為には、書籍などのインプットと同時に手を動かしてアウトプットする必要があるなぁ。
オブジェクトIDとか、今回のミュータブルとかイミュータブルについては、概念的な感じもするけれど、知っていた方がイメージがつきやすいぜ。
GCP f1-microでPHPを導入しようとしたらメモリ不足でKilledされた話

#簡潔に
f1-microだとメモリ不足のようです、g1-smallにアップグレードしたら導入できました。
#詳しく
f1-microのメモリ0.6GBではPHPインストール時の負荷に耐えられないようです、
g1-smallのメモリ1.7GBであれば何の問題もなくインストールすることができました。

Linux上のOOMKillerという機能がメモリが枯渇しそうになるとプロセスをKillしてくれるようです。

メモリ使用量をモニタリングするサービスを導入していないのでメモリ使用量を確認することはできませんが、メモリ増量で解決したのでこれが原因だと思って間違いないと思います。
CPU使用料から見ても明らかにf1-microではオーバーワークだったことがわかります。
![f1micro-g1small-compare.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531208/48a034b0-e234-2e0f-3ffb-090c70d2fe6d.png)

##料金

参考までに料金を比較すると
f1-micro 3.88$(428.20 円)/1month
g1-small 13.80$(1,522.97 円)/1month
なのでかなりコストが上がりますね、現状f1-microのレスポンスに不満がないので、PHPのためだけにこんなに上がるのはコスパが悪いと感じてしまいます。
とりあえずしばらく使ってみて実際の請求額を確認してみようと思います。
Symbol '$変数' is declared but not used.　include や require でファイルを読み込んだ時

##状況

共通するHTML部分や関数を別ファイルにしてinclude や require でファイルを読み込んだ時（リファクタリング）に、別ファイル内で使っている変数に対して`Symbol '$変数' is declared but not used.`という記述が出てきた。

>Symbol '$変数' is declared but not used.
↓日本語訳
シンボル '$変数'が宣言されていますが、使用されていません

###原因

ユーザー定義の関数の中では変数の有効範囲はローカル関数の中となる。関数の中で使用された変数はデフォルトで有効範囲が関数内部に制限される。
PHP では、グローバル変数は、関数の内部で使用する場合、**関数の内部でグローバルとして宣言する必要がある**。

今回の場合、別ファイルの中で関数を定義したりして、変数のスコープが及ばなくなることが原因だと思われる。

###対処法
PHP では、グローバル変数は、関数の内部で使用する場合、関数の内部でグローバルとして宣言する必要がある。

>変数の宣言
　　**global $変数名;**

```php:index.php
// ログイン者の投稿数を取得 
function 関数名(){
		try{
		$db = データベース接続;

    　　　　　　　　　$sql = "SQL文"; 
    　　　　　　　　　
    　　　　　　　　$res = $db->query($sql);

　　　　　　　　　　　　　　　// 変数の宣言
　　　　　　　　　　　　　　　global $result;
    
    　　　　　　　if( $res ){
    	　　　$result = $res->fetchColumn();
    　　　　　　　}else{
　　　　　　　　　　　　　　　return false;
　　　　　　　　　　　　　　　　}
	}catch(Exception $e){
		error_log('エラー発生：'.$e->getMessage());
	}
}
```



>**スコープ**
>ある変数や関数などの名前（識別子）を参照できる範囲のこと。 通常、変数や関数が定義されたスコープの外側からは、それらの名前を用いるだけでは参照できない。 このときこれらの変数や関数は「スコープ外」である、あるいは「見えない」といわれる。

https://www.php.net/manual/ja/language.variables.scope.php
サーバーにアップロードされたファイルのサイズが0バイトになる

## 事象

ブラウザのFormからサーバーにアップロードされたファイルを確認すると、時々0バイトのファイルが存在する。
必ず0バイトになるわけではなく、正しくアップロードされることの方が多い。
ログを確認しても何らかのエラーが発生している様子はない。
ディスク容量は十分にある。
事象発生時のファイル名や拡張子、時間帯、元のファイルのサイズに共通点はない。

## 原因

iOSのバグ（14.6にて確認）。
ブラウザでファイルを選択した後、他のアプリを起動してブラウザをバックグラウンドにする、あるいはスマホをスリープさせるなどして、それからブラウザを再度表示してアップロードすると、iOSの機嫌次第で発生する（SafariでもChromeでも再現）。
おそらく、ブラウザがメモリから一時的に追い出されて復帰したときに起こるのであろう。

## 対策

サーバー側でファイルサイズ0バイトのチェックを行う。

Apple製品は作り込みが甘くてこういう厄介な問題を起こしがちなのが嫌なんだよなー。
ファイルのフォーマットを判別する

<font size="+3" color="#AAA">
[PictBio HP「解析メモ」](https://www.pictbio.com/tips/1029.html)から移行中です。
元記事：2016/3/28 公開 ファイルのフォーマットを判別する
</font>

　バイオデータには様々なファイルのフォーマット定義があります。フォーマットによって、ファイルにどのような情報が入っているかが異なります。このフォーマットを判別するのには「拡張子」を用います。

|名称  |拡張子  |内容  |
|---|---|---|
|FASTA  |.fasta/.fa/.fna/.faa など  |アミノ酸や塩基配列の情報  |
|BED  |.bed  |配列上のポジションの情報  |
|GTF, GFF  |.gtf/.gff/.gff3  |ゲノム配列上の遺伝子情報  |
|GenBank  |.gbk/.gb  |配列のアノテーション情報  |

拡張子はパソコンがどのソフトでファイルを開くのか、判別する目印に使われています。例えば、「.txt」で終わるファイルをダブルクリックで開こうとすると、Windowsのデフォルトでは「メモ帳」ソフトで開くように設定されています。

　初期設定ではファイル名の拡張子が表示されていませんが、変更することで見えるようにすることが可能です。

###Windowsの場合
[こちら](https://support.microsoft.com/ja-jp/windows/windows-%E3%81%AE%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E6%8B%A1%E5%BC%B5%E5%AD%90-da4a4430-8e76-89c5-59f7-1cdbbc75cb01)のMicrosoftのページが詳しいです。

###Macの場合
フォルダメニューの「環境設定」を開きます。
![環境設定](https://www.pictbio.com/wp-content/uploads/tips/extension_flowMac_1.png)

詳細に移動し、「すべてのファイル名拡張子を表示」にチェックを入れます。

![詳細](https://www.pictbio.com/wp-content/uploads/tips/extension_flowMac_2.png)

　ソフト自体も「拡張子」から、ファイルに何の情報が記録されているかを判断することがあります。IGVなどのゲノムビューワーでゲノム配列のインポートをファイルから行う際は、主にFASTAフォーマットを使用します。

　要求されているファイルを持っているかどうか、拡張子で判別できますので、表示する設定にしておくとファイルを探すのに便利です。
pythonでの順列全探索

## 概要
atcoderなどで順列全探索の問題が出た際に、さらっと参照するための記事です。
細かな順列全探索の説明は、[アルゴリズムの解説サイト](https://algo-logic.info/permutation/)などを見た方が良いと思います。

## 順列全探索について
順列全探索とは、ある集合{1,2,3,...,N}を並び替えた際にありうる全てのパターンを探索する方法です。
（おそらく）高校数学の確率などを求める際に倣ったPやCの**P**の方です。
細かな式の確認やPもCも記憶にない方は[こちら](https://manapedia.jp/text/1421)の記事などをご参考ください。

例えば、N個の数列を並び替える際の並び替えの総数は**N！**通りですが、このN！通りのパターンを列挙してから行う全探索のことを順列全探索と呼んでいるそうです。

## 使い方
Pythonでは、itertoolsという非常に素敵なモジュールがあるため、そちらを用いるのが良いと思います。
（Python以外でも "言語名　順列" などで検索すれば、順列の求め方は出てくると思います。）

使い方は非常に簡単で、

```python:example.py 
import itertools
arr = [0, 1, 2]

print(list(itertools.permutations(arr)))
# [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]

```

とpermutationsの引数に配列を渡すだけでできてしまいます。
※ぜひ上記だけでなく[公式ドキュメント](https://docs.python.org/3/library/itertools.html#itertools.permutations)もご確認ください。


それでは、以下の問題を解く過程で、実際の利用方法を見ていきたいと思います。

引用元：[Atcoder Beginner Contest 145](https://atcoder.jp/contests/abc145/tasks/abc145_c)

上の問題は、
1. 各座標を１回ずつ順にたどっていく。
2. 辿る際の各座標間の距離（移動距離）の和を求める。
3. この和を経路を辿るパターン全てで求め、その平均を出力する。
と解釈できるので実装していきます。

#### 入力
> N
x1 y1
:
xN yN

```python:sample.py 
# ルートを使うため、今回はmathもインポートする
import itertools
import math

# 入力からNを受け取る 
N = int(input())

# 座標を全て格納する 
point = []
for _ in range(N):
  xy = list(map(int, input().split()))
  point.append(xy)
 
# 0 ~ N-1までの配列を作成
num = list(range(N))
 
# 街の番号の順列を全て列挙する
ptn = list(itertools.permutations(num))
 
# 合計の距離を格納する変数を定義
sum_dist = 0

# 各パターンごとに距離を求め、sum_dist に加算
for p in ptn:
  for i in range(len(p)-1):
    a = p[i]
    b = p[i+1]
    x1 = point[a][0]
    y1 = point[a][1]
    x2 = point[b][0]
    y2 = point[b][1]
    sum_dist += math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
 
# 加算したものを全パターンの総数で割ったもの（平均）を出力
print(sum_dist/len(ptn))
```

## 終わりに
順列を求める問題では、順列全列挙は非常に強力な手段です。
しかし、n個の集合の順列は、nの階乗の計算量になるため、利用できるのは、nが小さいor小さく設定できる時のみという点だけ注意しましょう。

※n = 10でも、10! = 3628800 ~ **10^6** のオーダーになります。

なんとなく理解できた方には、@e869120さんが書かれた[分野別　初中級者が解くべき過去問精選 100 問](https://qiita.com/e869120/items/eb50fdaece12be418faa#2-3-%E5%88%86%E9%87%8E%E5%88%A5%E5%88%9D%E4%B8%AD%E7%B4%9A%E8%80%85%E3%81%8C%E8%A7%A3%E3%81%8F%E3%81%B9%E3%81%8D%E9%81%8E%E5%8E%BB%E5%95%8F%E7%B2%BE%E9%81%B8-100-%E5%95%8F)で練習すると良いと思います。

ここまで、お読みいただきありがとうございました。
gitにおける error: unable to write file ./objects/**/**: Permission denied の対処法

## はじめに

エラー内容で検索してもなかなか解決策に行き当たらなかったのでまとめました。

## エラー内容

git pushを実行した際に次のようなエラーが発生しました。

```shell
error: unable to write file ./objects/bb/0007aecb93cd1d80cb48050ad405278491ac76: Permission denied
error: unable to write file ./objects/05/001e0be863816bdadb6994dccb61456cc1d666: Permission denied
To ssh://path/to/repository/**.git
 ! [remote rejected] branch_name -> branch_name (unable to migrate objects to permanent storage)
error: failed to push some refs to 'ssh://path/to/repository/**.git'
```

## エラーの原因

このエラーは、リモートレポジトリのobjectsディレクトリ内にできるサブディレクトリ（ディレクトリ名はハッシュの先頭の２文字）のパーミッションが適切でなかったことが原因でした。

## 具体例

以下では

`taro`: 新たなコミットを作成したユーザ
`developer`: gitレポジトリを使うことができるグループ
`00`: サブディレクトリ名

とします。

### エラーが発生する場合

```shell
drwxrwsr-x   2 taro taro   60 Jun 21 10:21 00 <- グループ名がコミットを作成したユーザになっている
```

### エラーが発生しない場合

```shell
drwxrwsr-x   2 taro developer   60 Jun 21 10:21 00 <- グループ名がgitレポジトリを使うことができるグループになっている。
```

## 解決策
スティッキービットを設定することで、この問題を解決することができます。

具体的な解決方法は以下で詳しくまとめられています。

- [Gitでリモートリポジトリを後からグループ共有にする](https://qiita.com/muranet/items/19f640b333fb3a1d916d)


## 参考文献

- [Gitでリモートリポジトリを後からグループ共有にする](https://qiita.com/muranet/items/19f640b333fb3a1d916d)
Xcodeでリファクタリングに失敗するRename failed

###XcodeでリネームしようとしたらRename failedと出て失敗する

![スクリーンショット 2021-07-13 14.45.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385759/ad787f14-175e-34a4-f89b-5adf997e4728.png)

![colom.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385759/3ae3fb61-804c-09e3-0fa9-0976796c3596.png)

file > Workspace Settings... OR  Project Settings...を選択

![スクリーンショット 2021-07-13 14.56.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385759/799a6741-319b-78cf-c202-72428714322f.png)

右矢印をクリックするとFinderが開きます

![スクリーンショット 2021-07-13 15.01.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385759/2409eaf4-c56a-4ca3-3286-5fce5e85f859.png)

~/Library/Developer/Xcode/DerivedData
DerivedDataをフォルダごと削除します。
※Clean Build FolderではDerivedDataは消えません

> DerivedDataとは
ここはビルドする際の様々な情報やデバッグログなどが溜まっていくところだそうで、過去のビルド情報やログを見る必要がなければ消してしまって問題ありません。毎日消すという人もいるようです。消すとまた自動的に作られます。
https://qiita.com/eytyet/items/133dc9be14135b92c572

xcodeを再起動

indexingが終了したらリネームができるようになります


###Rename failed Refactoring engine ranges didn't match initial rangesと出て失敗する場合

xcodeを再起動で治ります
Heroku で Laravel 環境構築

Heroku に Laravel のデプロイ環境を作ってみました。
MySQL はクレカ登録が必要なので、PostgreSQL を使用します。

# 概要
- 以下が全て

https://devcenter.heroku.com/ja/articles/getting-started-with-laravel

- DB 設定は以下が全て

https://qiita.com/neneta0921/items/9c59503b0c3e668157c6#db%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B

- できたもの
    - https://bookshelf555.herokuapp.com/
WPF勉強用サンプル集

## 作成済み（改良の余地しかない）

#### テストアプリ
　　シンプルな計算機
　　[SimpleCalcWpfSample01](https://github.com/devneko94/SimpleCalcWpfSample01)

　　100マス計算
　　[100SquareCalc](https://github.com/devneko94/100SquareCalc)

　　シンプル電卓
　　[CalculatorSample](https://github.com/devneko94/CalculatorSample)

#### バインディング練習
　　サンプル１（現在時刻を取得して表示するやつ）
　　[BindingExample1](https://github.com/devneko94/BindingExample1)

　　サンプル２（ObservableCollectionを使ったやつ）
　　[BindingExample2](https://github.com/devneko94/BindingExample2)

#### DB接続
　　サンプル１（Accessとの接続）
　　[DBConnectSample01](https://github.com/devneko94/DBConnectSample01)

#### ソケット通信
　　TCPクライアントサンプル１
　　[SocketSampleClient01](https://github.com/devneko94/SocketSampleClient01)

　　TCPサーバーサンプル１
　　[SocketSampleServer01](https://github.com/devneko94/SocketSampleServer01)

　　UDPチャットアプリサンプル１
　　[SocketChatApp01](https://github.com/devneko94/SocketChatApp01)

#### UIデザイン
　　モダンUIなサンプル１
　　[ModernUISample01](https://github.com/devneko94/ModernUISample01)

## 作成中

なし
apex id.getSobjectType 由id获取obj类型

 トリガ処理などで、特定のオブジェクトの時に動かしたい処理があって、その時には、Id.getSobjectType() で特定ができます。

Id.getSobjectType()
比如说下面的判断
f( row.parentid.getSobjectType() == Account.sobjecttype) {trigger
Latex For Mac ドキュメントクラス

# はじめに
　LaTex

## 環境
ハード：MacBook Air2020
OS：macOS 11.4（BigSur）
LaTex：LaTeX2ε pLatex(ptex2pdf)
その他：ANACONDA、MAMP for Moodle、Visual Studio Code等

## ドキュメントクラス
論文　　　　　：jsarticle
報告書（長文）：jsreport
本　　　　　　：jsbook

### オプション
####  出力ソフト
- dvipdfmxなど

#### フォントサイズ
- 10pt（デフォルト）
- 11pt
- 12pt
- その他 17pt、21pt、25pt、30pt、36pt、43pt、12Q、14Qなど

#### 用紙サイズ
- a4paper（A4版）
- a5paper
- b4paper
- papersize

#### 組み方
２段組 `twocolumn`

#### 例　A4サイズ２段組で11ポイントで論文フォーマットとする
　　```\documentclass[dvipdfmx,11pt,a4paper,twocolumn]{jsarticle}```

## プリアンサンブル
`\documentclass`と`\bigin{document}`間に記述するオプション
　　```\usepackage[パッケージオプション]{オプションのパッケージ名}```

- 本文と数式をpalatino： \usepackage[sc]{mathpazo}
- サンセリフはHelvetica： \usepackage[scaled]{helvet}
- 追加フォント： \usepackage{textcomp, mathcomp}
- 8ビットエンコード（標準）：\usepackage[T1]{fontenc} 
- 等幅フォントをlmttに再定義：\renewcommand{\ttdefault}{lmtt}
- 使用漢字数を増やす：\usepackage{otf}


例１

```
\documentclass[b5/12Q,fleqn]{kbdbook6_dic}
\usepackage[dvipdfmx]{graphicx}
\usepackage[TS1,OT1,T1]{fontenc}
\usepackage{textcomp}
\usepackage{amsmath,amssymb}
\usepackage{makeidx}
\usepackage{ascmac,fancybox} 		    % 枠
\usepackage{colortbl}                   % 表のセルカラー化
\usepackage{pxrubrica}                  % 文字列上ドット用
\setlength{\columnseprule}{0.4pt}
```

例2

```
\documentclass[b5/14Q,fleqn]{kbdbook6_edc}
\usepackage[dvipdfmx]{graphicx}      % 図
\usepackage[TS1,OT1,T1]{fontenc}     % 8ビットエンコード等

\usepackage{fourier}                 % IBM PLex フォント
\usepackage{plex-serif}
\usepackage[basic,italic,symbolgreek]{mathastext}
\usepackage[sfdefault]{plex-sans}

\usepackage{textcomp,mathcomp}       % 追加フォント
\usepackage{amsmath,amssymb}

\usepackage{ascmac,fancybox}         % 文字囲み
\usepackage{tcolorbox}               % 枠囲み
\usepackage{setspace}                % 行間調整
\usepackage{enumerate}               % 箇条書き
\usepackage{multirow}                % 表の縦結合
\usepackage{makeidx}
```


## 章・節・項・段落
- 部　　　　\part{xxxx}
- 章　　　　\chapter{xxxx} ※jsbook、jbook、jreportなど一部
- 節　　　　\section{xxxx}
- 小節　　　\subsection{xxxx}
- 小段落　　\paragraph{xxxx}
- 長い引用　\begin{quotation} 〜 \end{quotation} 
- 短い引用　\begin{quote} 〜 \end{quote} 

[目次](https://qiita.com/okirakuna_danna/items/5cc04d44ed12480fab31)
[文字サイズと書体](https://qiita.com/okirakuna_danna/items/c3f7e299b963b83616a6)
Hyper-V ロールは、Windows 10 Home にはインストールできません。

[Windows 10 上に Hyper-V をインストールする](https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v)

> Hyper-V ロールは、Windows 10 Home にはインストールできません。

Docker Desktopで調べていると「Hyper-Vを有効にしないとね(ry」なる記事を、見た気がする。なるほど設定しよう、と探してみても見当たらず。どうやらWindows10 HomeにHyper-Vのロールはないらしい...

ただ、HomeでもHyper-Vを有効にする方法はあるらしいです。

## 参考リンク thx
[【Win10】Windows 10　Homeバージョンで Hyper-Vを有効にする方法【Tips】](https://zeropasoakita.livedoor.blog/archives/37449396.html)


なお、Docker DesktopはHyper-Vを有効にしなくてもWSL2で問題ないってオチでした。
下記の記事がわかりやすかったかな！

## 参考リンク2 thx
[WSL2とHyper-Vの関係](https://qiita.com/matarillo/items/ca1eecf8f9a3cd76f9ce)
Python　関数の備忘録

#bin()
10進数を二進数にする時に使う。

```Python
print(bin(1))
print(bin(2))
print(bin(5))
print(bin(10))

# result
0b1
0b10
0b101
0b1010
```

出力結果の頭の0bは2進数であることを表しているだけのもの。

また、2進数をそのままprintで出力すると10進数として出力される。

```Python
num_bin = 0b1010

print(num_bin)

# result
10
```

#count()
文字列のカウントに使う。

```Python
string.count(element, start, end)
```
**string**はstring型の変数。
**element**はカウントしたい要素。
**start**はスライスの位置の指定。オプションなので必須ではない。
**end**はカウントを止めるスライスの位置の指定。これもオプション。

```Python
string = "Hello World"

print(string.count("l"))
print(string.count("l", 1, -2))

# result
3
2
```
スタートを1に指定しているが、0からのスタートなので0番目の文字は"H"。
-2は後ろからのカウントとなるので-2番目は"l"。

Pythonでは場所を指定するとそれ以降、それ以前のものを指すことになるので実際には"llo Wor"の間でカウントをしていることになる。

#str.rfind()
引数に指定した文字列がstrに含まれるとき、最大となるインデックスを返す。
つまり、一番最後に見つかった場所をインデックスで返す。
str.rfind()は次のような構造になる。

```Python
str.rfind(sub, start, end)
```
**str**は文字列。
**start**は検索対象の文字列のスライスのスタート位置。
**end**は検索対象の文字列のスライスのエンド位置。

```Python
a = "No pain, No gain."

print(a.rfind("No"))
print(a.rfind("i", 2, -3))

# result
9
5
```


#map()
第一引数に関数、第二引数にシーケンス(リストやタプルなど)。
第二引数に指定されたものに含むそれぞれの値に対して、第一引数の処理を施すもの。
厳密には定義が違うらしいが、少々難解なので初学者の認識としてはこれで良いと思う。

```Python
l = ['Ryu', 'ken', 'Terry', 'Kazuya']

print(list(map(len, l)))

# result
[3, 3, 5, 6]
```
Python2でmap関数はリストを返していた。
Python3ではmapオブジェクトというイテレータを返す点に注意。

結果をリストにしたい場合はlist()を使う

```Python
l = [3.3, -6, 8]

print(map(int, l))
print(list(map(int, l)))

# result
<map object at 0x7ffedbfd5a30>
[3, -6, 8]
```
#float()
引数に指定した数値や文字列から浮動小数点数を得るときに使う。

```Python
print(float(10))
print(float(1.1))
print(float())
print(float("3.14"))

# result
10.0
1.1
0.0
3.14
```
また、floatを用いると無限大を表現することができる。

```Python
float('inf')
```
【自己紹介】watamyonのページについて【投稿一覧】(増やしていきます)

##自己紹介
簡単な経歴となぜQiitaで記事を書いているのかについてご紹介いたします。**ご興味持っていただけましたらフォローや投稿へのLGTMを是非お願いします。またアドレスもプロフィールに載せておりますので何かございましたらコンタクトいただけますと嬉しいです。**中の人と話してみたい、ちいかわトークしたいどのような理由でも大歓迎です。

###経歴(随時更新します)
IBM Security Verify API CSVユーザー登録時のパスワードオプションについて

# はじめに
IBM Security Verify(ISV) APIを利用して、CSVからユーザー登録を行うときのパスワードに関連するオプションについてご紹介します。

# 1.初期パスワードの通知メール送付を抑止する

デフォルトでは、以下のようにランダムに生成されたパスワードがメールで通知されます。
![Notification (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/1a8065e3-c79b-e0ba-f4f4-d20523ee7db5.png)

/v2.0/CSV/importUsers API利用時にパスワード通知を抑止するには、以下の2つのオプションを利用します。

- defaultPassword ： デフォルトのパスワードを指定します。CSVで複数ユーザー登録する場合、すべてのユーザーが同じパスワードになります。
- notifyType ： NONEを指定します。

![Notification (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/00008d15-7ce9-4e48-bdca-72060f21ebba.png)

リクエストは以下のようになります。

```
curl -X POST "https://<テナント名>.verify.ibm.com:443/v2.0/CSV/importUsers?notifyType=NONE" -H "Content-Type: multipart/form-data;charset=UTF-8" -H "Authorization: Bearer <アクセストークン>" -F defaultPassword=<デフォルトのパスワード> -F file=@<FilePath>/user.csv
```

# 2.初期パスワード変更を不要とする

デフォルトでは、IDと初期パスワードを利用してログインすると、パスワード変更を求められます。

![Notification (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/bc478387-56c6-35f2-c38e-80f06a585807.png)

このパスワード初回変更を抑止するためには、以下のオプションを利用します。

- usershouldnotneedtoresetpassword： trueを指定します。

![Notification (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/83feea1d-d167-a369-f44e-802623f37af9.png)

リクエストは以下のようになります。

```
curl -X POST https://<テナント名>.verify.ibm.com:443/v2.0/CSV/importUsers -H "usershouldnotneedtoresetpassword:true" -H "Content-Type: multipart/form-data;charset=UTF-8" -H "Authorization: Bearer <アクセストークン>" -F file=@<FilePath>/user.csv
```

# 最後に
IBM Security Verifyで、CSVユーザー登録時のパスワードオプションについてご紹介しました。CSVによるユーザー登録方法については以下の記事をご参照ください。

[IBM Security Verify API で CSVを使用したユーザー登録を行う](https://qiita.com/fitz/items/f93fb4257cea8ff32f64)