OmniAICreator/Qiita-1.07M huggingface dataset:
CentOS 6.x系がサポートしているCPU

# 経緯

職場でKabylake（第7世代Coreシリーズ）のCPUを搭載したマシンにCentOS 6をインストールしようとしたところ、OSインストール時に謎のエラーが起きてインストールを完了できませんでした。
そのため、試しにCPUをSkylake（第6世代Coreシリーズ）に換装してみたところ、CentOS 6のインストールが正常に完了しました。

そこで今回は、SkylakeとKabylakeのCPUを搭載したマシンでCentOS 6系をインストールできるかを調べてみました。
※「今時はCentOS 7系を使うだろ」というツッコミは無しで...

# 材料と方法

## テストに使用した環境

* CPU
 * Skylake: [Core-i3 6100T](https://ark.intel.com/ja/products/90734/)
 * Kabylake: [Pentium G4560](https://ark.intel.com/ja/products/97143/)
* マザーボード：[ASRock H110M-STX](https://www.asrock.com/MB/Intel/H110M-STX/index.jp.asp)
 * BIOSバージョンはP7.70で、[CPUサポート一覧表](https://www.asrock.com/MB/Intel/H110M-STX/index.jp.asp#CPU)を見ると上記のCPUのいずれにも対応していました。
* OS
 * [CentOS 6.0](http://vault.centos.org/6.0/isos/x86_64/)
 * [CentOS 6.5](http://vault.centos.org/6.5/isos/x86_64/)
 * [CentOS 6.7](http://vault.centos.org/6.7/isos/x86_64/)
 * [CentOS 6.10](http://isoredirect.centos.org/centos/6/isos/x86_64/)

## インストール時の条件

* 「Install system with basic video driver」でインストールを実行しました。
* インストールタイプは「Minimal」を選択しました。

# インストール作業のテスト結果

|CPU|6.0|6.5|6.7|6.10|
|---|---|---|---|---|
|Skylake (Core-i3 6100T)|×|×|〇|〇|
|Kabylake (Pentium G4560)|×|△|〇|〇|


## CentOS 6.0の場合

* SkylakeとKabylakeの両方とも、インストールの開始直後の「言語を選択する画面」が表示されるとキーボードが操作不能になりました。
 * キーボードが通電していなかったので、もしかするとキーボードのドライバが合わなかったのかもしれません...
* インストール開始直後で止まってしまったため、以降のインストールを続行できませんでした。

![CentOS6.0_install (1).jpg](https://qiita-image-store.s3.amazonaws.com/0/312166/d26d756f-833f-be89-87c9-c20afa7a919f.jpeg)

## CentOS 6.5の場合

* Skylakeの場合、インストール開始直前に「ISOLINUX 4.02 2010-07-21...」というメッセージが出て、そこから先に進めませんでした。
* Kabylakeの場合、インストールの途中で「Unsupported Hardware Detected」というWarningが表示されましたが、インストールを続行できました。

```
ISOLINUX 4.02 2010-07-21 ETCD Copyright (C) 1994-2010 H.2010 H. Peter Anvin et al
```

![CentOS6.5_install.jpg](https://qiita-image-store.s3.amazonaws.com/0/312166/1bd58eb3-58c7-cf1a-789e-22d04b3a2ac9.jpeg)

# インストール後の起動の結果

|CPU|6.0|6.5|6.7|6.10|
|---|---|---|---|---|
|Skylake (Core-i3 6100T)|×|×|〇|〇|
|Kabylake (Pentium G4560)|×|×|△|△|

## CentOS 6.0の場合

* SkylakeとKabylakeの両方ともインストールできなかったので、当然ながら起動できず...

## CentOS 6.5の場合

* Skylakeの場合はインストールできなかったので、当然ながら起動できず...
* Kabylakeの場合、OS起動中にカーネルパニックが発生して起動できませんでした。

![CentOS6.5_Kernel-Panic (3).jpg](https://qiita-image-store.s3.amazonaws.com/0/312166/697b7d12-9779-60f2-6a54-96bd42508641.jpeg)

## CentOS 6.7と6.10の場合

* Kabylakeの場合、OSが起動する直前に以下のメッセージが表示されましたが、OSを起動することができました。
 * 直訳すると「このハードウェア（Intel製CPU）はRedHatによるテストを受けておらず、認定（認証？）されていないかもしれない。」となるため、KabylakeのCPUだと動作が保証されていないということだと思います。
 * なお、このメッセージは一瞬で流れてしまうため、起動後にdmesgコマンドでメッセージを確認しました。

```bash:dmesg
Detected CPU family 6 model 158
Warning: Intel CPU model - this hardware has not undergone testing by Red Hat and might not be certified. Please consult https://hardware.redhat.com for certified hardware.
```

# 結論

## Skylakeの場合

* CentOS 6.5以前のバージョンでは正常にインストール出来ない。
* CentOS 6.7以降であれば問題なく動作する。

## Kabylakeの場合

* CentOS 6.5以前は正常に動作しない。
* CentOS 6.7以降だとインストールは可能であるが、動作が保証されていない。
* 新しいバージョンであるCentOS 7.xを使うべき。
Ruby で Bitcoin の秘密鍵・公開鍵・アドレスを生成

# gem のインストール

```bash
$ gem install bitcoin-ruby
```

# サンプルコード

```ruby
require 'bitcoin'

key = Bitcoin::Key.generate

## 秘密鍵
p key.priv

## 公開鍵
p key.pub

## アドレス
p key.addr
```

# References
- http://bitcoin-ruby.org/README_rdoc.html#label-Keys%2FAddresses
- https://scrapbox.io/playground/RubyでBitcoinのアドレスを生成する
Calibre で .awz3 ファイルを PDF に変換する際の余白設定

## はじめに
Calibre で .awz3 ファイルを変換しようと思った時，出力された PDF でどうしても余白ができてしまいました．
色々とパラメータをいじった結果，なんとか上手くいったので備忘録も兼ねて載せておきます．

## 環境設定
余白を消すために変更したのは `変換設定` のうち `共通オプション` と `出力オプション` の 2 箇所です．
<img width="1133" alt="スクリーンショット 2019-01-03 22.36.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/131552/8554dd55-5aee-63a0-3166-a1e4d8a7ecdc.png">

### 共通オプション
以下のように設定することで，画質を維持したまま変換できるはずです．

```
出力プロファイル: Tablet
入力プロファイル: Default Input Profile
余白: 全て 0.0 ポイント
```
![スクリーンショット 2019-01-03 22.23.02.png](https://qiita-image-store.s3.amazonaws.com/0/131552/14e86fb9-1861-f627-9817-7e4b4ae98045.png)

### 出力オプション
```
出力プロファイルに設定された紙面サイズを使用: true
変換するドキュメントのページマージンを使用: false
ページマージン: 全て 0.0 pt
```
![スクリーンショット 2019-01-03 22.23.38.png](https://qiita-image-store.s3.amazonaws.com/0/131552/22acaabf-a333-0f2a-a41e-d524b99abba0.png)

## おわりに
上記の項目以外にも様々な設定を加えている記事もありましたが，余白を無くしたいだけであればこれで十分だと思います．

私の場合，**全体の設定を変えても以下のような個別の変換画面では反映されていないことがありました．**設定を変更したはずなのに上手くいかないと感じたら，今一度確認してみると良いかもしれません．
![スクリーンショット 2019-01-03 22.25.20.png](https://qiita-image-store.s3.amazonaws.com/0/131552/3ff2ccf3-b5ea-593e-7f9a-a0941cc42427.png)
PHPでMySQLのクエリを実行する方法

## 使われる側の例
```php
<?php
function execute_query($query, $type, $args) {
  $config = parse_ini_file('mysql_config.ini', true);
  $mysql_client = new mysqli($config['mysql']['server_name'],
                             $config['mysql']['user_name'],
                             $config['mysql']['password'],
                             $config['mysql']['db_name']);

  if ($mysql_client->connect_error) {
    printf("Mysql_Clientection failed: " . $mysql_client->mysql_clientect_error);
  }
  if (!$mysql_client->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $mysql_client->error);
  }

  if ($type == '') {
    $result = $mysql_client->query($query);
    $mysql_client->close();
    return $result;
  } else {
    $stmt = $mysql_client->prepare($query);

    $params = array();
    $params[0] = $type;
    foreach ($args as $key => $value) {
      $params[] = &$args[$key];
    }
    call_user_func_array(array($stmt, 'bind_param'), $params);

    $stmt->execute();

    return $stmt;
  }
}
?>
```
## 使う側の例
```php
<?php
require_once('mysql_client.php');
$type = $_POST['type'];
switch ($type) {
  case 'create':
    create_response();
    break;
  case 'read':
    read_response();
    break;
  default:
    break;
}

function create_response() {
  $thread_id = $_POST['thread_id'];
  $comment = $_POST['comment'];
  $query = 'INSERT INTO response (thread_id, comment, remote_address) VALUES (?, ?, ?)';
  $type = 'iss';
  $args = array($thread_id, $comment, $_SERVER['REMOTE_ADDR']);
  execute_query($query, $type, $args);

  $query = 'SELECT * FROM response ORDER BY id DESC LIMIT 1';
  $result = execute_query($query, '', array());
  $rows = array();
  if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
      $rows[] = $row;
    }
  }
  echo $rows[0]['created_at'];
}

function read_response() {
  $thread_id = $_POST['thread_id'];
  $query = 'SELECT * FROM response WHERE thread_id = ?';
  $type = 'i';
  $args = array($thread_id);
  $stmt = execute_query($query, $type, $args);
  $stmt->bind_result($id, $thread_id, $comment, $remote_address, $created_at);
  $rows = array();
  while ($stmt->fetch()) {
    $rows[] = array('id'=>$id, 'thread_id'=>$thread_id, 'comment'=>$comment, 'remote_address'=>$remote_address, 'created_at'=>$created_at);
  }
  echo json_encode($rows);
}

?>
```
## 設定ファイル例
```
[mysql]
server_name=""
user_name=""
password=""
db_name=""
```
##
エンジニアに向いている人とは？　〜集中力の要素から〜

【エンジニアに向いている人】
仕事の進め方がマッチするかどうかも重要、
マルチタスクというよりはシングルタスクを行うイメージ。
人と話すことは少ないが、トラブルシューティング時には、
多角的に見てもらわないと袋小路にはまる。

GithubやQiitaを覗いて、
何が書いているかわからないけど、
とりあえずワクワクできる人や、
新しい知識から将来が想像できる人は、
モチベーション維持もできて良いと思う。

【集中力が深い、長い！この２つが重要】
エンジニアは没頭（深さ）と継続（長さ）ができる人であれば、向いていると思う。

・「深さ」は集中力の強度
・「長さ」は集中力の継続力
・「早さ」は集中するまでの瞬発

集中力は「深さ」、「長さ」、「速さ」の掛け算!

ちなみに営業（人材紹介）だと、「早さ」が需要。
「深さ」はそこそこ、「長さ」はたまに。

※左ききのエレンから抜粋
https://twitter.com/SAYURI_stART/status/801331546552696832/photo/1?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E801331546552696832&ref_url=https%3A%2F%2Fwww.buntadayo.com%2Fentry%2Fsyutyushiyo
データ構造 応用情報技術者試験 対策日記@4

# データ構造
## 1. スタック
後入れ先出しのデータ構造。データを取り出す時には最後のデータが取り出される。
わかりにくく言うと... 焼き鳥の串をイメージしてください！
最後に刺した肉から食べていきますよね。そんなイメージです。
スタックにデータを入れることをpush、取り出すことをpopと言う。
CPUのレジスタや関数呼び出しなどに用いられる。

## 2. キュー
先入れ先出しのデータ構造。データを取り出す時には最初のデータが取り出される。
これもわかりにくく言うと... ロケット鉛筆をイメージしてください！
最初に入れた芯が外に出て来ますよね。そんなイメージです。
キューにデータを入れることをenqueue、取り出すことをdequeueと言う。
プリンタ出力など処理の順番が重要な場合に用いられる。

## 3. リスト
順序づけられたデータの並びで、データ部分とデータの並びを格納するポインタ部を合わせて管理する。データの先頭は先頭ポインタが指し示している。最後方のデータに簡単に辿り着ける様に末尾ポインタを用いる場合もある。

また、各データは別のデータへのポインタを持っているが、次のデータへのポインタのみを持つ物を**単方向リスト**、前後のデータにそれぞれポインタを持つ物を**双方向リスト**、最後尾のデータから先頭に戻って環状につながる物を環状リストと呼ぶ。

## 4. 木
樹形図で表せる様な、親ノードと子ノードの関係によるデータ構造。
親ノードに対して子ノードが二つのものを2分木、三つ以上持てるものを多分木と呼ぶ。
特に、一つの段が完全にいっぱいになるまで次の段にいかない木を完全木と呼ぶ。
もっとも子のノードを葉、もっとも親のノードを根という。
木についてはもっと勉強したいな〜

**ヒープ**
完全二分木の中でも、「子ノード>=親ノード」もしくは「子ノード<=親ノード」が常に成り立つものをヒープと呼ぶ。

----
[ホームへ](https://qiita.com/k-y/items/dc2c9a3a8425712253e8)
.net core環境でvue.jsをTypescriptを利用して、Visualstudio2017でデバッグできるようにする。

visualstudio2017 15.9よりvue.jsが使えるようになったとありました。

見てみたところ２種類ありました。
ソリューションエクスプローラーで、node.js環境での開発から、typescriptで開発するvue.jsと、dotnet new コマンドでインストールするソリューションテンプレートによるvue.jsの環境です。

前者はクライアント側だけの開発環境のようで、右クリックで.vueの単体コンポーネントの追加が出来たりしますが、APIは別のプロジェクトに作成したりと今までとはデバッグなど環境が大きく変わって来そうで断念しました。

後者は.netのバージョンや使っているnpmでのファイルが古く、プロジェクトのままでバージョンアップしてもエラーの嵐でした。

そこで、検索して出てきたのがこちらのサイト。
https://github.com/vhanla/vuets
このテンプレートだと.netcore2.1にはしてくれます。2.2にするのは比較的優しいです。

ただ、そのままだとtypescriptでのブレークポイントが効かず。
ルートディレクトリにある、webpack.config.jsのmode:devModeをコメントアウトするとブレークポイントも効いてくれます。

vue.jsに関しては、vue.htmlとtsとファイルが二つになっており、.vueの単一コンポーネントではありませんが、VisualStudio2017で開発・デバッグするにはこちらの方がよさそうです。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/157360/f3fd1dde-619a-5a72-717a-ffbab69252d4.png)
TJBotZeroをつくりました（１．パーツお買い物リスト編）

# 1.   はじめに
<font color="blue"><strong>TJBot</strong></font>は声を文字、文字を声にしたり、話しかけられた意図(意味)を理解してお話したり、カメラを使って何が映っているかを話してくれるシンプルなAIロボットです。
https://ibmtjbot.github.io/

<font color="blue"><strong>IBM Watson</strong></font>を使用していますので、これから機械学習（AI）を勉強したい方にはTJBotを成長させることにより、楽しく学習できると思います。

TJBotはRaspberryPi3 ModelBを使用しますが、新たにRaspberryPiZeroWHで動きコンパクトになった<font color="blue"><strong>「日本語版JTBot(TJBot Zero)」</strong></font>がでました。
https://www.ibm.com/developerworks/jp/code/open/projects/tjbot/

今回は、<font color="blue"><strong>「TJBot Zero」</strong></font>を作ってみたいがパーツを買いに行けない方にインターネットでオーダーできるものを選び、必要な<font color="red"><strong>お買い物リスト</strong></font>を掲載しました。

# ２.   パーツお買い物リスト
2019年1月3日時点での情報です。
価格やパーツ情報変わる可能性がありますので、ご注意ください。
![TJBotZero_お買い物リスト.png](https://qiita-image-store.s3.amazonaws.com/0/59815/9bd55d0b-8ef4-6a53-5d0c-99ebc18ffbb8.png)

# ３.   TJBot Zeroの情報
ボディ型紙を厚紙で自作する際の図面は下記サイト。
https://www.ibm.com/developerworks/jp/code/open/projects/tjbot/downloads.html
レーザカットできれば楽ですが、インクジェットプリンターでＡ４シールに印刷して厚紙に張り付けたものをデザインカッターで切り取る方法もあります。

また、期間・数量限定でしょうが、
facebook TJBotFan
https://www.facebook.com/groups/547028405784779/
に良いことが書かれています。


Twitter #TJBotzero
Fedora29 workstationセットアップ

#はじめに
2019年、自宅のラボ(という程の構成ではないが)を再構築するに当たり、Fedora29のworkstation(デスクトップ版)をセットアップしたので記録を残します。virtualbox6.0上に仮想マシンとして立てました。余談ですが私は普段RHEL7(やCent)を触っているので、差分についても触れられればと思います。
・参考(こちらはserver版についてですが、基本は同じです)
　https://www.server-world.info/query?os=Fedora_29

#インストール
特に難しい点はないかと思いますが、rootパスワードの設定を求められないことだけ知っておくと驚かないかもしれません。ほとんどの設定コマンドはroot権限が必要なのでsudoを用いるか、rootパスワードの設定を先に行ってください。
###rootパスワードの設定
```
$ sudo rootpswd
```

#ネットワークの設定
sshで繋がらないと設定を始める気にならない・・・ので、まずはネットワーク周りの設定から。RHEL7系からNetworkManagerというデーモンがネットワーク周りを一括で担うようになり、推奨となりました。いまだに/etc/sysconfig/network-scripts/を手でいじりたい気持ちはわかりますが、NMと競合するので時代の流れに乗りましょう。nmtuiコマンド(gui)とnmcuiコマンド(cui)があります。個人的には後者が好みです。

```
# nmcli connection modify enp0s3 ipv4.addresses 10.0.0.3/24 
# nmcli connection modify enp0s3 ipv4.gateway 10.0.0.1 
# nmcli connection modify enp0s3 ipv4.dns 10.0.0.1 
# nmcli connection modify enp0s3 ipv4.method manual 
# nmcli connection down enp0s3
# nmcli connection up enp0s3 
```

#firewallとSElinuxの設定
私の環境はセキュアなLAN内なので、これらはオフにしました。
必要な場合は、ポートの解放や、SElinuxに対して許可の設定を行うなどしてください。SElinuxはリブート後に反映されます。

```
# systemctl stop firewalld
# systemctl disable firewalld
# vi /etc/selinux/config
(中略)
SELINUX=disabled
```

#sshの設定
```
# vi /etc/sshd/sshd_config
# systemctl start sshd
# systemctl enable sshd
```

#システムのアップデート
RHEL系だとパッケージマネジャはyumが担っていますが、今後はdnfへ移行することが決まっており、fedoraでは既にdnfが採用されています。これはyumがpython2系で書かれていることに由来します。(pythonは2系と3系で互換性がない)

```
# dnf -y update
```

#リモートデスクトップ(xrdp)の設定
私はヘッドレスで起動してwindowsからリモートデスクトップで接続する運用とするので、xrdpをインストールします。また、インストール後xrdpを起動してリモートデスクトップ接続を試みた際にエラーが出ました。リブートしたところ無事に接続できました。また、ちゃんと検証していないのですが、リモートデスクトップ時の色の設定を適切に行わないと画面に描画されないアプリケーションがあったり、エラーで接続できなくなることがあります。

```
# dnf -y install xrdp
# systemctl start xrdp
# systemctl enable xrdp
```

#以上です
bashでコマンドの結果を格納して行単位でloopを回す

bashでコマンドの結果を格納して、それを行単位でloopで回そうとすると結構面倒で、間違いやすいので備忘録として書く。

## 結論

コマンドの結果は`()`に入れてarray variableにして、更に`IFS`をいじってやるのが一番確実(？)っぽい。

環境

```bash
bash-4.4$ tree /path/to/dir
/path/to/dir
├── foo\ bar
├── fuga
└── hoge

0 directories, 3 files
```

コード

```bash:sample.sh
#!/usr/bin/env bash

oldifs="${IFS}"
IFS=$'\n'  # Internal Field Separatorをnew lineに限定
arr=( $( ls /path/to/dir ) )  # ()で囲んでarrayに。前行の処理により要素の区切りはnew lineのみになる
IFS="${oldifs}"

for elem in "${arr[@]}"; do  # IFSで区切られた要素ごとではなく、配列の要素ごとにloopが回るように
  echo "elem: " ${elem};
done
```

結果:

```bash
bash-4.4$ ./sample.sh
elem: foo bar
elem: fuga
elem: hoge
```


`IFS`をいじらなかったり、コマンドの出力結果を`()`で囲まないとスペース区切りに上手く対応できなかったり、逆に全部が一要素として認識されてループが上手く回らなかった。


## 補足

`IFS=$'\n'`でダラーを改行文字の前につけてるのは、`\n`をANSI-Cのエスケープシーケンスだとbashに認識させるため。

```bash
$ man bash
```

```

.
.
.
       Words of the form $'string' are treated specially.  The word expands  to  string,  with  backslash-
       escaped  characters  replaced  as specified by the ANSI C standard.  Backslash escape sequences, if
       present, are decoded as follows:
              \a     alert (bell)
              \b     backspace
              \e
              \E     an escape character
              \f     form feed
              \n     new line
              \r     carriage return
.
.
.
```

実験

```bash
bash-4.4$ echo '\n'
\n
bash-4.4$ echo $'\n'


bash-4.4$
```
Mac Book Display の明るさ調整  + サングラスで夜眠れるようにするハック、睡眠負債返済計画

Mac Book prevent brightness display and get well sleeping hack

https://github.com/YumaInaura/YumaInaura/issues/213

# 3 lines

- Wear sun glass
- Control Brightness of mac e.g function key and F1 F2
- Even if your glass is too dark to read text but control brightness on Mac save that!

lol

# in Japanese Mac Book Display の明るさ調整  + サングラスで夜眠れるようにするハック、睡眠負債返済計画

---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues










<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
atcoder ABC112 D問題

今回は問題は数学的な問題であり、気づきがないと一生終わらない問題だった。
https://atcoder.jp/contests/abc112/tasks/abc112_d

#方針
数値Mについて、N個の数字の和で表し、その最大公約数を求める問題である。まずある数iについて考えると、これがMをN個の数字の和で表せ、その公約数となるなら、Mはiで割り切れなければならない。また、i*N<=Mも満たさなければならない。以上を踏まえ、iをM/Nからはじめ1までforで回し、条件に合うのを探せば良い。
Macでパスワードなしユーザーを作ろうと思ったら作れなかったので、設定を変更した記録

Macを修理に出そうと思ったら、Appleの担当者にパスワードなしの管理者ユーザーを作ってくれと言われたので、作ろうと思ったらパスワードなしは弾かれてしまった。OSは10.14.2で、他の同じバージョンのMacでは作れていたため、パスワードポリシーが怪しそうだったので確認してみたらそれが原因だった。変更方法を書いておく。デフォルトはパスワードなしでも作れるっぽいが、自分は何かの時に変えてしまったのかもしれない。

<img width="666" alt="スクリーンショット 2019-01-03 22.07.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/10532/415604a1-dd71-5573-9ae5-2070e8c78842.png">


### 1. コマンドで現在の設定を取得
```
pwpolicy getaccountpolicies > file.plist
```

### 2. file.plistを開き、1行目のメッセージを削除（そのままだとplistとして認識されない）

```
Getting global account policies
...
```

### 3. 下記の正規表現を書き換える
書き換え前

```
<key>policyContent</key>
<string>policyAttributePassword matches '.{4,}+'</string>
```

書き換え後

```
<key>policyContent</key>
<string>policyAttributePassword matches '^$|.{4,}+'</string>
```

### 4. 設定を反映

```
pwpolicy setaccountpolicies file.plist
```
年越しが思いの外ひまだったのでなんか作ったろってなってLINE bot 使って投げた文章に語尾をつけて返してくれるbotを作ってみた


# 経緯

発端

> わい「年越し暇やな〜...せや語尾つけるapi作って何かしらでbotつくろ」

語尾とは

> アイドルに大事なのはキャラづくりぷり！！

詳しくはプリパラを視聴してください

# 環境

- Heroku
- Ruby, sinatra
- LINE bot

LINEにしたのは，Slackとかは色々やったことあったので，LINEでやってみようかなってくらいの理由です．

この記事を参考にさせていただきました：https://qiita.com/fullmated/items/81d1a49ed3d49eda2285

# 環境構築部分
## LINE
LINEには開発者ツールが用意されており（初めて知った），今回は配信と返信が可能な「Messaging API」を使いました．
こんなアカウントって個人的に作れちゃうんですね．

基本的なやり方は先程の記事に沿って行ったので説明は割愛します．
ただ，APIを使うには２つの値の`channel_secret`と`channel_token`を設定する必要があり，若干どれを指すのかわかりにくかったです．
`channel_secret`はそのままで`Channel Secret`の値を，`channel_token`は`アクセストークン`を発行して設定します．

## heroku
地味にmecabを動作に苦戦しました．
Heroku上でsinatora / rubyのアプリケーションを動かすのは簡単で，割と多くの記事が出てくるのですが．Mecabを動作させるのが苦戦しました．

herokuでsinatra+mecabで動作させる記事です．
https://qiita.com/hidao/items/104355b0a2b6f5ae29fb
こちらも参考にさせていただきました．
同じようなことをやろうとしてる人ってたくさんいるんですね．


ただ，一箇所つまってしまった箇所があり，`libmecab.so`というファイルを環境変数でパスを指定する必要があり，それがうまくいきませんでした．
私は，heroku上でfindコマンドを使って`libmecab.so`の位置を探しました．
結果的に↓の場所にありました．

```
MECAB_PATH /app/vendor/mecab/lib/libmecab.so
```


# 語尾生成部分

どう語尾を生成するか悩んだのですがMecabを使った形態素解析をして，品詞の並びをとってやればいいかなとなんとなく思いました．

## Mecabとは
- 日本語の文章の形態素解析を行い，単語ごとに分割してくれるすごいやつ

Mecabはrubyのgemから動かせるのでそれを使用しました．

Mecabによる解析例（例文「我々宇宙人はこの地球を侵略しにきました」）

```ruby
我々	名詞,代名詞,一般,*,*,*,我々,ワレワレ,ワレワレ
宇宙	名詞,一般,*,*,*,*,宇宙,ウチュウ,ウチュー
人	名詞,接尾,一般,*,*,*,人,ジン,ジン
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
この	連体詞,*,*,*,*,*,この,コノ,コノ
地球	名詞,一般,*,*,*,*,地球,チキュウ,チキュー
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
侵略	名詞,サ変接続,*,*,*,*,侵略,シンリャク,シンリャク
し	動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
き	動詞,自立,*,*,カ変・クル,連用形,くる,キ,キ
まし	助動詞,*,*,*,特殊・マス,連用形,ます,マシ,マシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
EOS
```

ここから得られる情報を基に語尾を付与するということをしていきます．

## 語尾のつけかた

> 我々宇宙人は地球を侵略しにきました． → 我々宇宙人は地球を侵略しにきましたぷり．

この例であったら助動詞「た」の後ろに「ぷり」がつきそうなので，基本的には助動詞の後ろにつければよさそうな気がします．
ただし，助動詞「まし」の後ろには助動詞「た」があるため，後に助動詞が続く場合は除外する必要がありそうです．

また，「パラ宿からき（動詞）た（助動詞）ハシビロコウ（名詞）です」のように，助動詞のあとに名詞がくるパターン（助動詞前の動詞が副詞的な作用をする場合）も除外する必要がありそうです．

ということで助動詞に関する法則は

> 後ろに助動詞・名詞が続かない助動詞のあとに「ぷり」を付与する

というような感じになりそうです．
これに則ると，文末が，「きました」だけでなく`「き（動詞）た（助動詞）」`，`「き（動詞）ます（助動詞）」`，`「き（動詞）まし（助動詞）た（助動詞）ね（助詞）」`あたりの対応ができそうです．

この語尾をつける法則を見つけるのが難しく，これだけだと不十分なのですが，年越しの酔っ払った自分にはこれしか法則が見つけられませんでした．
この部分の改良が今後の課題になりそうです．
例えば文末が「くる（動詞）」や「き（動詞）まし（助動詞）た（助動詞）わ（助詞）ね（助詞）」あたりはこれだと語尾がつかなかったり不自然になったりしそうでし，「あれはデビルマン」のように名詞で終わるような場合にも対応できてなさそうで，探せばミスパターンは幾らでも出てきそうです．

ひとまずこの記事では年越しのタイミングでやった内容のみを書いていきます．
いつかは最新版を更新したいと思いますぷり．

## 語尾生成部分のコード
LINEで投稿された文章をこのメソッドにぶん投げて語尾をつけるような実装です．
コーディング力高めていきたい．

```ruby
require 'mecab'
require 'natto'

class Gobi
  def self.add_gobi(str)
    nm = Natto::MeCab.new
    result = ""
    flag = false
    nm.parse(str) do |n|
      result += 'ぷり' if flag && n.feature.split(',')[0] != '名詞' && n.feature.split(',')[0] != '助動詞'
      flag = false
      flag = true if n.feature.split(',')[0] == '助動詞'
      result += "#{n.surface}"
    end
    result
  end
end
```

# 動かした感じ↓

![IMG_5535.jpg](https://qiita-image-store.s3.amazonaws.com/0/307103/d4ae40ca-e3a8-6575-1fcc-fdbbe030a8a3.jpeg)


ガバガバなのでもっと精度高めていきたいのでイゴ！よろしく！！！
あと，今後は夢川ゆいみたいに「ユメ○○」を自動生成できたらいいなって思います．
【個人開発】リアルRPGのWebアプリ「まちかどルート」をリリースしました

個人開発のWebアプリ「まちかどルート」はこちら。
https://machiroute.herokuapp.com/

# Rubyに入門して1ヶ月で公開
IT業界で20年近く会社員として働き、Webサイト制作もしていましたが、じぶんでイチからWebアプリを作ったのは初めて。ドットインストールとかで学ぶ一方もいいけど、とにかく何か作ってみようと最初に出来たのがこのWebアプリです。

# 手さぐりでバージョンアップ
Ruby on Railsで開発しています。gemをじぶんで組み込むのも初めてで、ネットでたくさんの情報を頼りにしながらひとつずつ機能を追加していきました。

# Mastodonでログイン
Twitter認証とかいろいろありますけど、分散型サービスの可能性に興味があり、Mastodonという新興SNSのアカウントでログインできるようにしました。

# Rails 5.2の新機能を使ってます
みんなのつぶやきが流れるタイムラインにはWebSocketによるサーバーとの双方向通信「Action Cable」、写真アップロードには非同期通信「Active Storage」を導入しています。

# リアルRPG > クエストを作って共有
ただつぶやくこともできるけど、このWebアプリの醍醐味はやっぱりリアルRPGであること。「道ばたのゴミを拾おう」のようなものをはじめ、位置情報をつけて投稿できるので「〇〇に行って〇〇しよう」という投稿を作って共有してクリアしあい、レベルアップしていくのを楽しめます。

# ソーシャルアップデート
という新しいジャンルのWebアプリだと自称してます。Twitterだと批判とかいっぱいあって息苦しいと思うひとなんかにぜひ。気軽に楽しみながらちょっとだけ世の中が明るくなるような、そんな感じです。

# これから
せっかくなのでQiitaを試しながら、少しずつ開発者らしくなりたいし、技術用メモとして書き方なんかも充実させていきたいです。

どうぞよろしくお願いします。
VBEのカラーを変えたい

### 1.VBE本体の.DLL(VBE7.dll) を書き換えることで標準で設定されているカラーの変更が可能
書き換えるには、VBEThemeColorEditor を使う
[ここから](https://github.com/gallaux/VBEThemeColorEditor)**VBEThemeColorEditor**をDownloadして.exeを実行するとこのウィンドウが開く
![vbethme.png](https://qiita-image-store.s3.amazonaws.com/0/256866/b81370f1-2427-9d33-93b3-62f8e547c888.png)
**1.** ﾒﾆｭｰの[Theme][LOAD]から.xmlを読み込ませる。または1色ずつ変更していく
**2.** 色の設定ができたら[Apply theme to VBE.DLL] をクリックで書換えを実行



office2013
`C:\Program Files\Common Files\microsoft shared\VBA\VBA7`
office365
`C:\Program Files (x86)\Microsoft Office\root\vfs\ProgramFilesCommonX86\Microsoft Shared\VBA\VBA7.1`


**3** あとは通常通りVBEでカラーを設定するだけ
レジストリから一括で設定も可能
![vbaregedit.png](https://qiita-image-store.s3.amazonaws.com/0/256866/967ac3cb-4c4b-d41e-0965-3a779ee58f61.png)
麻雀の点数判定アプリを作る#2

#開発環境
- OS : macOS Sierra 10.12.6
- Python 3.6.7
- OpenCV 3.4.2

#和了画像に前処理を施す
<img width="652" alt="agari2.png" src="https://qiita-image-store.s3.amazonaws.com/0/335220/266be90f-78c6-89ac-14d3-528029479804.png">
画像認識の前に，より良い結果が得られるように，この和了画像に仕込みを行います．
1. グレースケール化
2. 平滑化
3. 閾値処理

###1.グレースケール化
一般に画像認識ではRGB値が使われることはほとんどありませんので，グレースケール化を行います．余談ですが，具体的な理由が気になったので調べて見たところ，

> ・多くの画像処理アルゴリズムは単一チャネル（グレースケール）画像のみを対象とする
> ・人間の視覚特性として色差成分よりも、輝度成分に対して強い感度を持っている
> ・計算量削減・作業メモリ削減のために、扱うデータが3チャネルよりも1チャネルの方が好ましい

https://ja.stackoverflow.com/questions/28973/画像処理をする際-グレースケール変換が必要なケース-としては-どういう処理が挙げられるでしょうか

のような理由でした．なるほど，信憑性は別にして腑に落ちました．



```python:to_grayscale.py
import cv2
import matplotlib.pyplot as plt

path = '/Users/mac/sample.png'
img = cv2.imread(path)

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.imshow(gray_img)
```
出力画像
![gray_img.jpg](https://qiita-image-store.s3.amazonaws.com/0/335220/272fe852-75ee-9d46-5df9-468ff39ddde6.jpeg)
`cv2.imread`では画像をBGRで読み込んでいることに注意します.
そのため，RGB画像をグレースケール画像に変換する際，`BGR2GRAY`と指定しなければなりません．`RGB2GRAY`としても同様の出力はされますが，グレースケール化のアルゴリズムとしてRGBそれぞれに重みを付けるものも存在するため，モードの指定には厳密であるべきでしょう．

参考 : https://qiita.com/yoya/items/96c36b069e74398796f3

###2.平滑化
平滑化を行うことで，画像に「ぼかし」を与えることができます．画像加工アプリでも馴染みのある，にきびなどの小さくて不要なものを消すブラー効果と同じ目的で使用します．次の閾値処理において，余分な細かい部分を無視することができます．今回は一般的な5×5ガウシアンフィルタを使います．第2引数で使用する行列の大きさを指定．
他にもOpenCVでは様々なフィルタが用意されています．

参考 : https://docs.opencv.org/3.1.0/d4/d13/tutorial_py_filtering.html#gsc.tab=0

```python:to_blur.py
import cv2
import matplotlib.pyplot as plt

path = '/Users/mac/sample.png'

img = cv2.imread(path)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

filtered_img = cv2.GaussianBlur(gray_img, (5, 5), 0)
plt.imshow(filtered_img)
```
出力画像
![gray_img.jpg](https://qiita-image-store.s3.amazonaws.com/0/335220/dad04a9a-94b0-c856-8aef-207579602104.jpeg)

###3.閾値処理
閾値処理は，その点が閾値(threshold)より大きいか，そうでないかを判定し，2値に振り分けます．

```python:to_threshold.py
import cv2
import matplotlib.pyplot as plt

path = '/Users/mac/sample.png'

under_thresh = 150
maxValue = 255

img = cv2.imread(path)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
filtered_img = cv2.GaussianBlur(gray_img, (5, 5), 0)

th, th_img = cv2.threshold(filtered_img, under_thresh, maxValue, cv2.THRESH_BINARY)
plt.imshow(th_img)
```
出力画像
![gray_img.jpg](https://qiita-image-store.s3.amazonaws.com/0/335220/b36b5af0-6ba8-3f3c-0428-62df91b2ab61.jpeg)

閾値処理にはいくつかモードがありますが，今回使うのは`THRESH_BINARY`．`under_thresh`未満の画素値を0(黒)，`under_thresh`以上の画素値を255(白)とします．パラメータの値は使用する画像依存なので出力から吟味する必要があります．

以上の処理により，輪郭が明確になりました．
BeautifulSoupのfunction

BeautifulSoupを用いた関数を作りました。最低限の間隔を置いて実行したく、下記のように書きましたが、もしよりよい方法があればご教示ください。m(_ _)m

```python
from bs4 import BeautifulSoup
import requests
import time

time_start_stump_soup=0

def getSoup(url, timeSleep=3, check_each=0.2):
    global time_start_stump_soup
    while True:
        if time.time() - time_start_stump_soup > timeSleep:
            res = requests.session().get(url)
            soup = BeautifulSoup(res.content, 'lxml')
            time_start_stump_soup = time.time()
            return soup
        else:
            time.sleep(check_each)
```
【Visual Studio Code】 ウェルカムページに表示される最近開いた項目の内容を削除する方法

皆さん、こんにちは。戸倉彩です。

今回は、Visual Studio Codeの起動時に**ウェルカムページ**を表示する設定にしている場合 (デフォルトではチェックが入っています)、**「最近」**の項目に表示される最近使用したフォルダ名やファイル名の記録を消したい場合の対処方法をご紹介します。

<img src="https://4ykydg.by.files.1drv.com/y4mXbR2FEIt53JXTBfYbvrzvYKxOmZnp9MhWpAa-95P56Brr2yZCKJHqCphqhiYJaQ3j2OL6rDy3M78XMbsRD4ygKINf45VimMkOgmwvFEjUFPk23Gi5bkl7YsOsmStGpMct1CzXAbL7IkjNHyWUojKgdE_4jWfFcbh23YeaVxH4IJYH9EaZNkhaxL4L4cXDtIA8UbnmZsF45VfpXXcdBEVJA?width=1400&height=1114&cropmode=none" width="600">

代表的な削除する方法は2つあります。

**【Visual Studio Code のメニューから操作する場合】**
「ファイル」→「最近使用した項目を開く」→「最近開いた項目をクリア」の順にクリックします。
<img src="https://4ykwdg.by.files.1drv.com/y4mg6vtblJysna-BIF0SoCtdBbLYYZ6PojckBToZjOI_py0CcnHLUCcEtfYZfUp160Ob7pKi91jVuE5ldj2LvQZO9ALvtO3Z2REtbQlV6aPwN5Cbw9RGXdi9bh-zvldasFQMyeGZpTJTeh3vEKmBck3JkvilJ3HT6RYEIBhPcbZnt9yLk89hpMtrQ5WG7I_pi9P1BcKd74Y0-wAC97kQlFdrg?width=1400&height=1112&cropmode=none" width="600">

**【コマンドパレットから操作する場合】**
コマンドパレットを表示し、例えば「項目」と入力して候補を表示させ、**「ファイル: 最近開いた項目をクリア | File: Clear Recently Opened」** を選択します。
<img src="https://4ykxdg.by.files.1drv.com/y4mmBZsw3ubBKnESDZha8IXbezFlsoeroWv2K6HmKcjNv313Pfq1oTtz58eeUPmS9iGogaxMCbE-tfmfyVfZEKa0rVRzciMvHNPNGf3zOBuEw_heiYuPS3OPNiO_2aVpoSPQdCKcyW7VkfxxjH5oVvzb6ocF7j6D3AOylqvdzhZ8XWot8Sn8LVQAA2vHCLkUNN-VqE82rn1c9pJr1JgNKPD5Q?width=1404&height=1116&cropmode=none" width="600">

Visual Studio Codeを再起動後、または次回起動時は **「最近」** の項目がクリアな状態となり、「最近使用したフォルダなし」と表示されます。
<img src="https://4ykvdg.by.files.1drv.com/y4me4KDNmqEqQBc4z-sAn4mRzh5pvpN9oKsY0x4ne0f6qhmeg1nqMXtuRPKP2yr6Xrgswe8pDdKV0cnaV5slj2j14GeuzU0rqvn9QQxT9rToTZj12POnLcrmcZycp954uwlFX1TOb-7TYsXTdkK0E_bZBa0O-MfFI0qOlQIZ44p-tIJuFhA-uNJ_H40ggOwU7iYUe6u5sFaeson00WMINwJnA?width=1402&height=1114&cropmode=none" width="600">

今回は以上です。

Have a nice Geek Life♪

※Twitterで最新情報配信中 [@ayatokura](https://twitter.com/ayatokura)
Acrobat Pro DCのスクリプトについてのメモ

Acrobat Proにはアクションウィザードという仕組みがあって、作業を自動化できるようだ。
さらに、AcrobatにはJavascriptで操作する機能もあるらしい・・・。
3,4ページごとにページを削除するスクリプトが欲しかったので書いた。

```javascript
delNum = 0;//削除した数を保管
maxPage = this.numPages;//末尾のページ数を保管
for(i = 0; i < maxPage; i++){
    three = (i-2) % 4;//3つ目かを調べる(0の時3つ目)
    isThree = (three == 0);//3つ目か判定
    four = (i-3) % 4;//4つ目かを調べる(0の時4つ目)
    isFour = (four == 0);//4つ目か判定
    if(isThree){//3つ目の時、ページを削除し、削除数を増加
        this.deletePages(i-delNum);
        delNum++;
    }
    if(isFour){//4つ目の時、ページを削除し、削除数を増加
        this.deletePages(i-delNum);
        delNum++;
    }
}
```

この辺参考にした。

* Delete Pages Without Text(テキストが埋め込まれてないページを削除するやつ)
    * https://www.evermap.com/javascript.asp#Title:%20Delete%20Pages%20With%20No%20Text

* 見開きのPDFを2ページに分割する方法（Acrobat X 以降用）
    * http://tanweb.net/2014/06/27/1234/
* 見開き２頁分の本のPDFファイルを１頁ずつに分ける方法
    * https://askoma.info/2015/09/22/1210
* How to Delete the First Page for Thousands of PDF Documents(最初のページを削除)
    * http://commonsenseatheism.com/?p=8335
* Adobe Acrobat XI + JavaScript例文辞典
    * http://www.openspc2.org/reibun/AcrobatXI/
* Double page book spread, change to a single flowing page(見開き1ページを1ページにするやつ)
    * https://forums.adobe.com/thread/2404101
    * http://khkonsulting.com/2014/04/page-splitter-redux/
* Adobeのレファレンス
    * https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJSPreface%2FJS_API_AcroJSPreface.htm
    * Docについてのところをよく眺めた
誤り検出・標本化定理 応用情報技術者試験 対策日記@3

# 誤り検出・訂正
## 1. パリティ
データ中の「1」の個数の偶奇を用いて誤りを検証する方法。
データビット列の最後に「パリティビット」を1ビット追加する。
1の個数を偶数にする偶数パリティと、奇数にする奇数パリティがある。

(偶数パリティの例)
1101101 → 1の個数が偶数になる様に末尾に1を追加 11011011
0010001 → 1の個数が偶数になる様に末尾に0を追加 00100010

誤り検出はできるが、誤り箇所の特定や訂正はできない。
また、2ビット以上の誤りがあれば検出できないかもしれない。

## 2. 垂直パリティと水平パリティ
1で学んだパリティを二次元的に活用する方法。
データ列ごとに垂直パリティを付与していき、最後に各列を横断的に見て水平パリティを付与する。

(偶数パリティを用いた例)
------- 👇垂直パリティ
1100110 0
0100010 0
1101011 1
0101001 1
0000110 0 👈水平パリティ

二つのパリティの交差を考えることで、誤りがあった時に誤り箇所を特定できる。
誤り箇所のビットを反転させることにより、誤り訂正が可能となる。

## 3. ハミング符号
データにいくつかの冗長ビットを付加することによって、1ビットの誤りを検出・訂正できる仕組みのこと。[例題](https://www.ap-siken.com/kakomon/20_haru/q7.html)を解いてみたら理解できると思います。

## 4. CRC
通信データにおいて、ケーブルの不良や混線などによって誤りが一度にまとめて起こることがあり、これを**バースト誤り**という。バースト誤りの場合、1ビットのみの誤りしか検出できないパリティやハミング符号は使えないため、CRCを用いてエラーチェックを行う。CRCでは多項式の除算を用いて誤り制御を行うらしいが、詳しいメカニズムは難しそうやったからパス。CRCではバースト誤りが検出できるということを覚えておけばいいっぽい。

-------
# 計測・制御に関する理論
## 1. A/D変換とD/A変換
これは見たまんま。アナログ→デジタルのデータ変換をA/D変換、デジタル→アナログのデータ変換をD/A変換と呼ぶ。

A/D変換を行うためには標本化、量子化、符号化の三つの作業が必要になる。
**標本化** 連続データを一定の間隔において切り取りサンプルの値とする
**量子化** 標本化したデータをデジタルに変換する
**符号化** 量子化したデータを2進数に変換する

## 2. 標本化定理
連続した波形を標本化するとき、元の波形の周波数の2倍以上の周波数でサンプリングを行わなければ、元の波形を復元できないという定理。周波数とはHzという単位で表され、1秒間に波形が何周期繰り返されるかを示す。サンプリング周波数が40kHzなら、40000回/秒サンプリングを行うということ。標本化定理はフーリエ変換とかを使って証明するらしいけど、難しくてわからないので詳しくは外部サイトをご覧ください！

----
[ホームへ](https://qiita.com/k-y/items/dc2c9a3a8425712253e8)
Hugo 0.53でサポートされたconfigディレクトリの対応方法


# Hugo 0.53でconfigディレクトリをサポート

Hugo 0.53でconfigディレクトリがサポートされました。
これにより、設定ファイル(config.toml)の分割管理が可能になります。

また、開発用と本番用で設定を変えることも可能になりました。

- [Configuration Directory | Hugo](https://gohugo.io/getting-started/configuration/#configuration-directory)
- [Add a /config dir · Issue #5422 · gohugoio/hugo](https://github.com/gohugoio/hugo/issues/5422)

このために行った作業を書いておきます。

# 1. config.tomlの移動

以下のように `config/_default` ディレクトリを作成してそのまま移動します。

```sh
mkdir -p config/_default
mv config.toml config/_default
```

この状態でも問題なく動きます。

# 2. menuの移動

以下のようにメニューが定義されているとします。

```toml
[[menu.main]]
name = "Home"
weight = 1
url = "/"
```

このときには、 `config/_default/menu.toml` を作り、`[[menu.main]]`の内容を移します。
それから以下のように　`menu.` を消します。

```toml
[[main]]
name = "Home"
weight = 1
url = "/"
```

# 3. blackfridayの設定を移動

元の設定は以下のようになっています。

```toml
[blackfriday]
smartypants = false
hrefTargetBlank = true
```

この設定を移動するには、 `config/_default/blackfriday.toml` ファイルを作成し、
以下のようにします。

```toml
smartypants = false
hrefTargetBlank = true
```
Pipenvコマンドメモ

# Pipenvとは
virtualenv と pipでのパッケージ管理を簡易的に行えるようになるツール。
**Pipfile**と呼ばれるファイルにライブラリ情報を記載し、そこから仮想環境の構築、管理が行える。

公式
https://pipenv-ja.readthedocs.io/ja/translate-ja/

# 基本コマンド

```
pipenv install
# ディレクトリ内にPipfile Pipfile.lockを作成
# 既にある場合はPipfileを元に仮想環境が構築される

pipenv install [package]
# 仮想環境にライブラリをインストールする
# インストール後、Pipfileに追加される
# version指定も可能

pipenv uninstall [package]
# 仮想環境のライブラリ削除
# Pipfileからも削除される
# ※依存ライブラリは削除されない

pipenv shell
# 仮想環境を有効化する

pipenv run [コマンド]
# 仮想環境でコマンドを実行

pipenv --rm
# 仮想環境を削除

pipenv --venv
# 仮想環境のパスを確認できる
```
bitbucketからgithubへお引越し

当初railsチュートリアルに沿ってプライベートリポジトリをbitbucketにて作成しました。
今回恥をさらす覚悟でgithubの公開リポジトリにお引越ししようと思います。
コミットの時の名前の付け方もめちゃくちゃなのがバレます。


#まずはこちらのサイトを参考に
[BitbucketからGithubへの移行方法](https://qiita.com/takish/items/684dd34156ee3f178224)

1 bitbucketのリポジトリのアドレスをHTTPSで表示しコピー
![スクリーンショット (323)_LI.jpg](https://qiita-image-store.s3.amazonaws.com/0/256858/87ed0e18-765d-a169-6807-e16d9e816718.jpeg)

2 githubの[インポート機能](https://github.com/new/import)にはりつける



3 ５分ほどで完了

![スクリーンショット (324).png](https://qiita-image-store.s3.amazonaws.com/0/256858/3898f2d8-3076-789a-5133-c0f55caa1768.png)

ブラウザ上での手続きは完了です。


#リモートリポジトリをリセットし、新しいリポジトリを登録する
今登録されているリモートリポジトリはbitbucketのものなので、新しいほうを登録しなおしましょう。

`$ git remote rm origin`で現在のリポジトリを削除し、`git remote add origin`で新しいリポジトリを登録します。

```
ec2-user:~/environment (master) $ git remote rm origin
ec2-user:~/environment (master) $ git remote add origin https://github.com/ユーザー名/アプリ名.git
```

ここまではうまくいきました。


#（注）Githubをpushするときは、本来のパスワードではなくアクセストークンを使用
こんな記事を見つけました。pushでパスワードを求められたときはアクセストークンを入力しましょう。
[[初心者]GitHub にてpushができなかった話とその解決（２段階認証）](https://qiita.com/matsuhei/items/554be988ce5deabc2510)
[githubで2段階認証を設定したらpushできなくなった](https://qiita.com/yoan/items/08b1ba9c9aceab1ffe5e)

###アクセストークンを作る
[Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/)

こちらを参考にアクセストークンを作ります。マニュアル通りにすればOKです。


#アクセストークンを入力

```
ec2-user:~/environment (master) $ git push -u origin master
Username for 'https://github.com': ayachika　#正しいユーザー名
Password for 'https://ayahcika@github.com': 　#入力しようとするとできない
remote: Invalid username or password.
```

んんんなんかパスワードのところが入力しようとしてもできません。

こちらにて私も質問させていただきました：[コンソールに文字の入力ができなくなる](https://teratail.com/questions/106094)

ご回答によると、キーボードで文字を打ってもコンソールには反映されないが、文字を入力したことは認識されているということなので、私もアクセストークンをコピペしました。するとpushできました！


```
$ git push -u origin master
Username for 'https://github.com': ayachika
Password for 'https://ayachika@github.com': #ここは入力しても見えないが、アクセストークンをコピペし、エンターする
Branch master set up to track remote branch master from origin.
```

リポジトリのページでどんな言語が使われているか見れたりして面白い！CSSこんなに使ってるんだ。。(笑)

![スクリーンショット (328).png](https://qiita-image-store.s3.amazonaws.com/0/256858/1eb50e9d-e311-3d6c-d605-978c957f6f32.png)


何か誤りがありましたらコメント欄にてご教示ください。
MacのDockをもう永遠に使わない、Spotlight検索最強！ ディスプレイを再大画面幅で使う心地良さ！

Mac I never uses display narrowing Dock and love Spotlight search for full width clear screen!

https://github.com/YumaInaura/YumaInaura/issues/211

# No Screen shot

take spotlight search screenshot is difficult so imazine :)

# Mac Dock is useful but narrow display

- its so troublesome and Mottainai
- Full width screen is Soooooo clear my view and its so comfortable yes yes yes
- we can use any app we know with spotlight search immediately and its speed is higher than touch pad controlling with Dock

# Push Command + Space now!

if you disable spotlight searching re enable it now!


 # MacのDockをもう永遠に使わない、Spotlight検索最強！ ディスプレイを再大画面幅で使う心地良さ！

---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues











<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
arXiv 数学論文投稿・閲覧

数学系の論文投稿
https://arxiv.org/

ミレニアム問題であるポアンカレ予想 (Poincaré Conjecture)をグリゴリー・ペレルマンによりarxivに投稿があった。

1. Perelman, G.: The entropy formula for the Ricci flow and its geometric applications, arXiv.math.DG/0211159, November 11, 2002.
 https://arxiv.org/abs/math/0211159
2. Perelman, G.: Ricci flow with surgery on three-manifolds, arXiv.math.DG/0303109, March 10, 2003.
 https://arxiv.org/abs/math/0303109
3. Perelman, G.: Finite extinction time for the solutions to the Ricci flow on certain three- manifolds, arXiv.math.DG/0307245, July 17, 2003 https://arxiv.org/abs/math/0307245

公開投稿場である。論文を公開で読める。

# Download
３分類がある。
PDF
PostScript
Other formats

PostScriptは、AcrobatのソフトウェアでPDFに容易に変換ができる。
PostScript対応印刷機で、デバイスドライバがないときに、流し込みで印刷できることがある。

# reference and citations
Harvard.eduの資料へリンクがある。

例：上記3のcitations
https://ui.adsabs.harvard.edu/#abs/2003math......7245P/citations

例：上記3のreference
arxivから連携のあるharvard.eduにはreferenceの一覧がない。

# trackback
https://arxiv.org/help/trackback/

例：
http://arxiv.org/trackback/0307245

# 参考資料

投稿予定 ACM, IEEE and arXiv

https://qiita.com/kaizen_nagoya/items/34530481571a4ef11745

arXiv Submission Guidelines

https://qiita.com/kaizen_nagoya/items/3a43b7bf5099d18a7336
### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

#### Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
atcoder ABC111 D問題

今回は600点問題ということもありめちゃめちゃ難しかった。2の累乗をアームにしていく発想ができなさすぎた
https://atcoder.jp/contests/abc112/tasks/abc112_d

#方針
初めに、不可能な場合を考えると、ある点における(x,y)についてx+yの偶奇が各点について偶奇が揃っていないと不可能である。よって、偶奇がそれっているときを考える。まずアームについてであるが、明らかにアームの数とそれぞれのアームの長さを全探索するのは不可能なので、アームの数と長さを決めてしまうことを考える。アームは1,2,4,8,と2の累乗を用いて、30本使えば図のような位置は全て網羅できることがわかる。よって、各点のx+yが奇数の時、このアームを用いて表すことができる(偶数についても1ずらすだけで表せられる)。
![図6.png](https://qiita-image-store.s3.amazonaws.com/0/263740/df91f806-fbb3-459c-341c-4e1b0b820794.png)
AmazonLinux Tomcatの環境変数設定

SpringBootの`application.properties`は **System.getProperties(...)** を使って環境変数を取ってますので、Linuxの環境変数ではなく、Javaの環境変数になります。その設定方法は下記通りです。

```/usr/share/tomcat/conf/tomcat.conf
# Use JAVA_OPTS to set java.library.path for libtcnative.so
# JAVA_OPTS="-Djava.library.path=/usr/lib"
JAVA_OPTS="-DRDS_DB_NAME=postgres -DRDS_DB_USER=user -DRDS_DB_PSW=password"
```

修正後、`service tomcat restart`で再起動すれば、適用されます。
起動時下記確認できます。（一部省略）

```
11:17:22.536 INFO [main] ... Command line argument: -DRDS_DB_NAME=postgres
11:17:22.537 INFO [main] ... Command line argument: -DRDS_DB_USER=user
11:17:22.537 INFO [main] ... Command line argument: -DRDS_DB_PSW=password
```
Macの絵文字入力パレットを出すショートカットは Command +Control + Space  / 画像つき

Mac emoji input pop window pallet shortcut is Command + Control + Space key 

https://github.com/YumaInaura/YumaInaura/issues/210


#  hand form image 

# Left hand

![image](https://user-images.githubusercontent.com/13635059/50635418-6923ac00-0f95-11e9-8519-3805965487df.png)

# Right hand

![image](https://user-images.githubusercontent.com/13635059/50635429-75a80480-0f95-11e9-8f99-4ef1ac833b10.png)

# Text searching

![image](https://user-images.githubusercontent.com/13635059/50635438-80fb3000-0f95-11e9-8050-e263590922d1.png)

---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues


# Macの絵文字入力パレットを出すショートカットは Command +Control + Space  / 画像つき









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
短絡評価（Short-Circuit Evaluation）

@Dina です。
本記事は[「Invent Your Own Computer Games with Python 2nd Edition」](http://inventwithpython.com/invent4thed/)by Al Sweigartの短絡評価についてを書きます。


##バックグラウンド
今まで、私がこのようなのifステートメントを使っています：

```simpleIF.php

if($condition) {
    // do something
}
// or something like this

// Shorthand If Statement Using Ternary Operators (?:)
$score = 10;
echo 'Based on your score, you got ',($score > 8 ? 'A' : 'F');
```

Invent Your Own Computer Games with Pythonの本を読んだあと、ifステートメントはそれ以上のものがあります。だから、将来の参考為、本記事に残したいです。

##短絡評価

短絡評価、英語でShort-Circuit Evaluationとは結果が決定されるとすぐに式の評価が停止されます。次は直接本からPythonで書いてある短絡の例と説明です。

```truefalsefizz.py
 1. def TrueFizz(message):
 2.     print(message)
 3.     return True
 4. def FalseFizz(message):
 5.     print(message)
 6.     return False
 7.
 8. if FalseFizz('Cats') or TrueFizz('Dogs'):
 9.     print('Step 1')
10. if TrueFizz('Hello') or TrueFizz('Goodbye'):
11.     print('Step 2')
12. if TrueFizz('Spam') and TrueFizz('Cheese'):
13.     print('Step 3')
14. if FalseFizz('Red') and TrueFizz('Blue'):
15.     print('Step 4')
```
```output.txt
A. Cats
B. Dogs
C. Step 1
D. Hello
E. Step 2
F. Spam
G. Cheese
H. Step 3
I. Red
```

この例は2つの関数があります：TrueFizz()とFalseFizz()。TrueFizz()はメッセージを表示、Trueを返します。FalseFizz()はメッセージを表示、Falseを返します。これは、これらの関数がいつ呼び出されているのか、またはこれらの関数が短絡によりスキップされているのかを判断するのに役立ちます。

**1番目のif ： CatsとDogs**
8行目のifステートメントに短絡はありません。FalseFizz('Cats')の呼び出しはTrueを返しますが、*or* キーワードの右側の式がTrueの場合、式全体がTrueになることがあります。 そのため、8行目のTrueFizz('Dogs')呼び出しが評価され、Dogsが画面に出力され（出力のB行目）、Trueが返されます。 8行目では、ifステートメントの条件は*False or True*に評価され、次にTrueが評価されます。 その後、Step 1が画面に出力されます。 

**2番目のif ： HelloとGoodbye**
10行目の2番目のifステートメントには短絡があります。 これは、10行目でTrueFizz('Hello')を呼び出すと、Helloを出力し（出力のD行を参照）、Trueを返します。*or*キーワードの右側に何があるかは関係ないので、PythonインタープリタはTrueFizz('Goodbye')を呼び出しません。Goodbye画面に表示されていないので、呼び出されないのがわかります。ifステートメントの条件はTrueなので、Step 2はE行の画面に表示されます。

**3番目のif ： SpamとCheese**
12行目の3番目のifステートメントは、短絡はありません。TrueFizz('Spam')の呼び出しはTrueを返しますが、*and*演算子のために条件全体がTrueかFalseかはわかりません。そのため、PythonはTrueFizz('Cheese')を呼び出します。これは、Cheeseを出力してTrueを返します。 ifステートメントの条件は*True and True*に評価され、それが次にTrueに評価されます。 条件が真なので、Step 3がH行に画面に出力されています。

**4番目のif ： RedとBlue**
14行目の4番目のifステートメントは、短絡があります。FalseFizz('Red')を呼び出しは、出力のI行にRedを出力し、Falseを返します。*and*キーワードの左側はFalseなので、右側が*True or False*構いません。条件はFalseに評価されます。 そのため、TrueFizz('Blue')は呼び出されず、Blueは画面に表示されません。 ifステートメントの条件がFalseと評価されたから、Step 4も画面に表示されません。

##最後
短絡評価は一般的に第二因数の望ましくない不作用を避けるためです。短絡はブール演算子の*and*及び*or*に、いつでも何式でも発生することができます。けれど、ある関数がお呼び出されないのがわからなくなてしまうときもありますが、使う気を付けが必要です。

最初はこのようなのコードを理解しにくいと思いますが、けれど短絡評価を使うとき、ランタイムエラーを減らすの可能性があるかも知れませんか？短絡評価がシンプルと小さいプロジェットに適用されるほうがいいと思います。

---
以上は短絡評価の内容です。足りない所や間違えた所若しくは不明点があったら、コメントやフィードバックをお願い致します。
Powershellのコードの字句解析

Powershellのコードは簡単に字句解析ができることを知ったので、その方法のメモ。

# 使うもの

> [PSParser.Tokenize Method (System.Management.Automation) | Microsoft Docs](https://docs.microsoft.com/en-us/dotnet/api/system.management.automation.psparser.tokenize?view=pscore-6.0.0 "PSParser.Tokenize Method (System.Management.Automation) | Microsoft Docs")

上記のメソッドにコードを渡せば、解析結果を返してくれます。

# 使用例

PowerShell自身で実行してみる場合のコードです。

```powershell
# 字句解析したいスクリプト文字列
[string]$code = {Get-ChildItem -LiteralPath $PSHOME -Filter *.exe}.ToString()
<# $code =>
Get-ChildItem -LiteralPath $PSHOME -Filter *.exe
#>

# 解析エラーを入れる変数。中身は`Tokenize`内で設定されるため$nullでOK
[Collections.ObjectModel.Collection[Management.Automation.PSParseError]]$parseErrors = $null

# トークン化
[Management.Automation.PSToken[]]$tokens = 
    [Management.Automation.PSParser]::Tokenize($code, [ref]$parseErrors)

# 表示用に整形
$tokens | Format-Table -AutoSize
```
## 結果

| Content | Type | Start | Length | StartLine | StartColumn | EndLine | EndColumn |
|---------------|------------------|-------|--------|-----------|-------------|---------|-----------|
| Get-ChildItem | Command | 0 | 13 | 1 | 1 | 1 | 14 |
| -LiteralPath | CommandParameter | 14 | 12 | 1 | 15 | 1 | 27 |
| PSHOME | Variable | 27 | 7 | 1 | 28 | 1 | 35 |
| -Filter | CommandParameter | 35 | 7 | 1 | 36 | 1 | 43 |
| *.exe | CommandArgument | 43 | 5 | 1 | 44 | 1 | 49 |

各トークン毎に、中身・種類・文字列中どの位置なのか、が取得できているのが分かります。

## 補足

基本は書いてある通りですが、いくつか気になった点があったのでその補足です。

### 構文エラーも無視して解析される

`[Management.Automation.PSParser]::Tokenize`は構文エラーがあった場合も、最後まで解析が行われ結果が返ります。

構文エラーを確認したい場合は、第2引数（上記のコードだと`$parseErrors`）の個数や中身をチェックします。

ただし、上記のコードではスクリプトブロックを`ToString()`しているため、構文エラーがある場合はスクリプトブロック生成段階でエラーが起きます。

### 空白はトークンではない

当たり前といえば当たり前の話ではありますが、スペースなどはトークンとして認識されません。

ただし、改行に関しては`NewLine`というTypeで表現されます。

### 変数の`$`は`Content`に含まれない

PowerShellの変数は`$`から始まりますが、先頭の`$`は結果の`Content`に含まれません。

`$`も含めた範囲を取得したい場合は、以下のように元の文字列からSubStringで切り出す必要があります。

```powershell
$tokens |
    ForEach-Object -Process {
        $code.Substring($_.Start, $_.Length)
    }
```
TwitterでWeb UI のタイムラインのショートカットが効かないんだけど？ 通知やHomeやメッセージに移動したい

- G n みたいに G を大文字で押してから、次に n や N など、他のキーと組み合わせることで動いた
- なぜこの表記なのかは不明

# English

@Twitter timeliness Web UI shortcuts needs capital G and other keys combinations?

https://github.com/YumaInaura/YumaInaura/issues/209

# The Answer

- push capital G and push next capital N or small n is work
- Why? i dont know

![image](https://user-images.githubusercontent.com/13635059/50634934-8bb4c580-0f93-11e9-87b2-135d0846b62e.png)

![image](https://user-images.githubusercontent.com/13635059/50634942-92433d00-0f93-11e9-9bc5-25232e5a5cc7.png)



# Twitter Web ui for Web Browser shortcuts "Timelines" what does mean?

![image](https://user-images.githubusercontent.com/13635059/50634564-71c6b300-0f92-11e9-89df-f41413a1c99b.png)

# I pushed key g next n 

- I expect move to notification tab
- But new tweet dialog appear
- g n does not mean chain key?

# Another way

- i pushed both tome g and n
- it does not work



---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues










<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
失効・移転ドメインと Let's Encrypt

`sudo certbot renew --allow-subset-of-names` に成功したので記念に。

(面倒だという理由で)いくつかのサイトの SSL 証明書をまとめてしまうということは、あるだろう。ところが、一部のドメインを手放す、あるいは、IP 変更で更新できない…といったことがあると思われる。サイトを増やしたい場合は、`expand` が自動でされるが、減らす場合は `renew` しても失敗するだけなのだ。

[Let’s Encrypt証明書発行から削除まで試行錯誤](https://qiita.com/wynnkengeofu/items/10b5f96b838cbda2f014) にあるように、`--allow-subset-of-names` というオプションは、サイトを減らすことを可能にさせる。
https://letsencrypt.jp/command/
https://letsencrypt.jp/docs/using.html
にも少しだけ書いてある。`renew` と当該オプションの併用で、所有権を手放したサイト以外の更新に成功したので報告しておく。
MySQLのrootユーザのパスワード忘れた

自分用メモ  
  
# mysql -uroot でログインできない
mysql に root でログインしようとした。  

  
```
$ mysql -u root  
```
  
しかし、パスワードが必要。でも、パスワード忘れてしまた。

→ セーフモードで起動してパスワードリセットしよう

**セーフモードで起動**

```
$ mysqld_safe --skip-grant-tables &
```

しかし、以下のメッセージが出てセーフモードで起動できない。
  
```  
$ mysqld_safe A mysqld process already exists  
```  
  
msqldのプロセスがすでに実行中とのこと。プロセスを終了しよう。  

```  
$ killall mysqld mysqld_safe
$ mysql.server stop  
```  
 を試した。停止できているっぽいのに、 `mysql.server status` で確認すると、サーバー起動中となっている。`mysqld_safe A mysqld process already exists`も出る。


調べた結果、どうやら自動起動しているらしい。なので、自動起動を無効にした。    
  
```  
$ brew services stop mysql  
```  
  
## セーフモードで起動できるようになった
まずmysqlサーバの停止  
  
```  
$ mysql.server stop  
$ killall mysqld mysqld_safe  
```  
  
**セーフモードで起動**    
  
```
$ mysqld_safe --skip-grant-tables &  
```  

起動できた。
  
**rootでログイン（パスワードなし）**
  
```
$ mysql -u root  
```  
rootでパスワードなしでログインできるようになった。  

しかし、パスワードの再設定ができない問題が残っている。結局解決できず、めんどくさいのでMySQLを再インストールした。 



> 参考   
https://qiita.com/ryouzi/items/7ace711d51ce291702bf
https://naoki-is.me/archives/848
https://qiita.com/fukumon/items/69c541cd5c87d77465b2
VcXsrvがサスペンド・レジューム後にリモートクライアントと切断される問題とその回避策

Windowsをサスペンドしてレジュームした際に、VcXsrv上のリモートクライアントのウィンドウが消えてしまう問題とその回避策です。

# 発端
VcXsrvはWindows上のXサーバとして広く使われていると思います。私も最近Windows 10上のVirtualBoxでLinux(Fedora)を使い始めたのですが、ゲストのLinux上のXクライアントのウィンドウがホストのWindowsのウィンドウと同様に扱えるのが大変便利です。
しかし一つ問題があります。
それは、Windowsをサスペンドしてレジュームすると、Linux上のXクライアントのウィンドウが消え、そのプロセスがハングアップ状態になることです。

# 調査
調べてみると、VirtualBox上のXクライアントに限らず、別の物理ホスト上のXクライアントも含めて、

```shell
export DISPLAY=hostname:0.0
```
と指定してVcXsrvに接続すると、Windowsのサスペンドレジュームでウィンドウが消えることがわかりました。

VirtualBoxのゲストOSもhost-only networkやbridge modeなどでネットワーク経由でホストOSに接続されるわけですから、VcXsrvから見ると同じものなのでしょう。
ちなみにXサーバ側をXming(パブリックドメイン版)やCygwin/Xに替えても、仮想マシン側をWSL2に替えても同じ症状でした。WSL2については[このチケット](https://github.com/microsoft/WSL/issues/4992#issuecomment-827319807)で報告されている通り、少なくともWindows 10 19042.928では解決しているようです。

# 回避策
VcXsrvと直接つながるのがリモートクライアントでなければいいので、sshのX11 forwardingを使えば回避できます。
具体的には、WSLなどから

```shell
ssh -X hostname
```
で接続先のホスト(VirtualBoxでも別の物理ホストでも)に入ってXクライアントを立ち上げれば、サスペンドレジュームしても生き残ります。ただしhostnameはbridge modeではなくhost-only networkなどのアドレスにしないと、サスペンドで切れることがあります。

# しかし…
別の物理ホストであれば、sshのX11 forwardingを使うのがセキュリティ的にも正しいと思います。
しかし、ゲストOSとホストOS間で使うのはCPU時間がもったいないです(貧乏症?)。
また、WSL2の場合、cygwinからsshでX11 forwardingしても、サスペンドレジュームでウィンドウが消えます。

本質的な解決策として、ネットワークが切れてもセッションを保存できるXpraを使う方法について、[別記事](https://qiita.com/teikan/items/97ad4a567c7d44ab3b99)を書きました。
jsdoでgame その2

#概要

ゲームは、嫌いだけど、テンプレート作ってみる。
国産のenchantでやる。

#実現した機能

| 要件  | 実現  |
|:--|:--|
|物理演算|○|
|オープニング画面|○|
|ゲームオーバー画面|○|
|線を引く|×|
|プリロード|○|
|パッド入力|○|
|もう一度|○|
|FPS設定|×|
|残り時間|○|
|スコア表示|○|
| ツイート機能|×|
| データ保存機能|×|
| ランキング機能|×|
| サウンドループ|○|
| プレイ履歴保存機能|×|
| セーブ・ロード機能|×|
| コメント機能|×|

#成果物

http://jsdo.it/ohisama1/usCt

以上。
配列系メソッド（forEach, map, filter, find）をfor文で説明

JavaScriptの配列系メソッドについて、for文で書き直して説明するための記事

## forEach

「繰り返しの処理」をするときに使う

```javascript
const list = ["apple", "orange", "banana"];

for(let i = 0; i < list.length; i++) {
  const item = list[i];
  console.log(i);
  console.log(item); // 何がしか任意の処理
}
```

これをforEachで書き直すと

```javascript
const list = ["apple", "orange", "banana"];

list.forEach((item, i)) => {
  console.log(i);
  console.log(item); // 何がしか任意の処理
})
```

## map

「配列の1つ1つの要素を加工した新しい配列を作る」ときに使う

```javascript
const list = ["apple", "orange", "banana"];
const newList = [];

for(let i = 0; i < list.length; i++) {
  const item = list[i];
  console.log(i);
  newList[i] = item.length; // 何がしか任意の処理
}

console.log(newList); // > [5, 6, 6]
```

これをmapで書き直すと

```javascript
const list = ["apple", "orange", "banana"];

const newList = list.map((item, i) => {
  console.log(i);
  return item.length; // 何がしか任意の処理。returnした値で新しい配列を生成する
})

console.log(newList); // > [5, 6, 6]
```

## filter

「配列をフィルターして新しい配列を作る」ときに使う

```javascript
const list = ["apple", "orange", "banana"];
const newList = []

for(let i = 0; i < list.length; i++) {
  const item = list[i];

  // 任意のフィルター条件
  if(item.length === 6) {
    newList.push(item);
  }
}

console.log(newList); // > ["orange", "banana"]
```

これをfilterで書き直すと

```javascript
const list = ["apple", "orange", "banana"];

const newList = list.filter(item => {
  return item.length === 6; // 任意のフィルター条件。trueのものだけで新しい配列を生成する
})

console.log(newList); // > ["orange", "banana"]
```

## find

「配列の中から条件に合致する要素を探す」ときに使う

```javascript
const list = ["apple", "orange", "banana"];
let result;

for(let i = 0; i < list.length; i++) {
  const item = list[i];

  // 最初に条件にマッチしたitemをresultに入れてbreakして終了する
  if(item.length === 6){
    result = item;
    break;
  }
}

console.log(result); // > "orange"
```

これをfindで書き直すと

```javascript
const list = ["apple", "orange", "banana"];

const result = list.find(item => {
  return item.length === 6; // trueの条件になるitemを返す
})

console.log(result); // > "orange"
```