OmniAICreator/Qiita-1.07M huggingface dataset:
mordredで特定の記述子だけの計算を高速に行う

#はじめに

以前、[mordredで1分子1記述子の計算を行う](https://qiita.com/kimisyo/items/a85435fc91031f8055e5)により、mordredで1分子毎に記述子を計算する方法を調べた。これにより使いたい記述子だけを計算することができるようになった。

しかし、この方法で、大量に分子がある場合に特定の記述子だけを計算させようとすると以下の点で都合が悪い。

- 計算が並列化されずに遅い。CalculatorクラスのpandasメソッドはCPUコア数を指定すると、いい感じで並列計算をしてくれる。

- 計算結果をDataFrameの形式で得ることができないため、余計な手間がかかる

今回は大量に分子がある場合に、使いたい記述子だけを指定して、Calculatorクラスのpandasメソッドにより記述子計算を行う方法を調べた。


#環境

- mordred 1.1.2

#ソース

こんな感じで行ける。

```python

from mordred import Calculator, descriptors

calc_dummy = Calculator(descriptors, ignore_3D=False)
my_desc_names = ["SpAD_A", "SRW10"]
my_descs = []
for i, desc in enumerate(calc_dummy.descriptors):
    if desc.__str__()  in my_desc_names:
       my_descs.append(desc)

calc_real = Calculator(my_descs, ignore_3D=False)
df = calc_real.pandas(mols, nproc=3)
df.to_csv(args.output + "/mordred.csv")
```

#解説
Calculatorクラスのソースをよく読んでみると、コンストラクタの引数に、descriptorsではなく、Descriptorクラスのインスタンスのリストを指定できるようになっている。

これを利用し、自分の計算させたい記述子の名前(my_desc_namesに記載）から、そのインスタンスをピックアップしてリストに入れる。

calc_dummyでダミーのCalculatorオブジェクトを生成している理由は、記述子のインスタンスの一覧を取得するためだ。（もっとエレガントなやり方が絶対あるはずなのでソースをハックしてみてほしい）。

次に記述子のインスタンスのリストを、Calculatorクラスのコンストラクタの引数に与えてCalculatorオブジェクトを作成する。

最後に、このCalculatorオブジェクトにより計算を行うと、指定した記述子のみの計算結果が格納されたDataFrameが得られる。

#おわりに

今回のノウハウは、予測モデルを作成した後、予測だけを行う場合にかなり有用だ。というのも予測だけを行う場合は、予測モデルに利用された記述子のみを計算すればよいからだ。特に数万、数十万といった化合物のリストに対して計算する場合、処理時間に大きな差がでると考えている。
Dockerコンテナに127.0.0.1でアクセスできない場合の解消方法

## TL;DR
Dockerコンテナで起動したアプリケーションに対してブラウザから以下のアドレスでアクセスする。
http://127.0.0.1:8000

## Issue
以下のように ERR_EMPTY_RESPONSE が返却されてしまい、
Dockerコンテナで起動しているアプリケーションにアクセスできない。
![スクリーンショット 2020-02-29 09.50.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319350/2b5d01cf-4ab9-e785-5e15-5cfa7ad055c7.png)
ホストマシンから`curl`を送信しても以下の通り、うまく繋がらない。

```shell
taichikanaya@kanayatBookpuro attakait_hp % curl http://127.0.0.1:8000
curl: (52) Empty reply from server
taichikanaya@kanayatBookpuro attakait_hp % 
```
## Cause
Dockerコンテナ内でのアプリケーションを`127.0.0.1`で起動しているから。
（なので、Dockerコンテナ内からアプリケーションへのアクセスは可能だが、
　ホストマシンからDockerコンテナ内へのアクセスはできないといった現象が発生する）

## Solution
Dockerコンテナ内でのアプリケーションを `0.0.0.0`で起動する。
（`127.0.0.1`だとDockerコンテナ内からのみアクセス可能になってしまうので、
　ホストマシンからアクセスできるように `0.0.0.0` へ変更する必要がある）

gunicornを起動する場合は以下のようにしてあげることでアクセスできるようになりました。

```bash
gunicorn attakait_hp.wsgi --bind 0.0.0.0:8000 --log-file -
```

以下は私が使用していた簡単なDockerファイル群です。

```dockerfile:Dockerfile
FROM python:3.7
ADD . /var/www/html
WORKDIR /var/www/html
RUN pip install -r ./requirements.txt
```

```yml:docker-compose.yml
version: '3'
services:
  attakait_app:
    build:
      context: .
      dockerfile: ./Dockerfile
    image: python:3.7
    volumes:
      - '.:/var/www/html'
    container_name: hp
    tty: true
    working_dir: '/var/www/html'
    ports:
      - 8000:8000
    command:
      gunicorn attakait_hp.wsgi --bind 0.0.0.0:8000 --log-file -
```

では、アクセス確認。
![スクリーンショット 2020-02-29 10.08.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319350/72eb4c1e-d17c-ac3b-baae-63698fab7637.png)
以上、終わり。
量子コンピュータって何が「量子」なの？

# はじめに
今回のお話は蛇足です。物理学を学んだものとして「量子コンピュータ」について素朴な疑問をまとめてみました。それは、量子コンピュータの何が「量子」なの？というものです。ちなみに僕はまだ勉強不足ということもあり、この結論を出せていません。お分かりになる方がいればぜひ教えてください。

# 量子コンピュータの名前の起源ってなに？
今世間で注目されいる量子コンピュータって何が量子なんでしょうか？ちょっと思いつく限りの理由を挙げてみます。

- 量子ビットは量子力学の基礎原理である重ね合わせの原理を利用しているから
- 量子コンピュータは超伝導やイオントラップ等々量子力学の枠組みで説明できる現象を利用しているから

他にもあるかもしれませんが、こんなところでしょうか。
うーん、どれなんだろ・・・
ということで、困ったときの[Wikipedia](https://ja.wikipedia.org/wiki/%E9%87%8F%E5%AD%90%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)！量子コンピュータの説明を一部抜粋すると、
>量子力学的な重ね合わせを用いて並列性を実現するとされるコンピュータ

となっています。やはり、量子力学の重ね合わせの原理が由来と考えるのが自然なんですかね。

# 重ね合わせの原理は量子特有のものではない
そもそも、量子とは簡単に言うと、
　**「粒子性と波動性の２つの性質を兼ね備えたもの」**
となります。

重ね合わせの原理は、この内の波動性を起源とした原理となり、古典的な波動でも重ね合わせの原理を満たします。従って、この重ね合わせの原理のみで量子を語るには、ちょっと無理があります。

なお、この波動をベースとした量子力学は、「第一量子化」と呼ばれる枠組みの力学体系となり、実際はただの古典的な波動方程式を解くことになります。

# 「第二量子化」こそ本物の量子化！！
「第二量子化」って何・・・？って感じですが、本腰を入れて説明すると時間がいくつあっても足らないです。

簡単に言うと、
　「場（field)、生成・消滅演算子を導入することで、波動性を持つものをとある最小単位（量子）に分けること」
とでも言っておきましょうか。実はこの第二量子化こそ物理学的には真の量子化となっています。

例えば身近な例で、以下のようなものが量子となります。

|  量子化対象  |  量子 |
| ---- | :----: | :-----: |
| 振動 | フォノン |
| 電磁力 | フォトン |

# 量子コンピュータって何が「量子」なの？
ここでやっと本題です。量子コンピュータって何が量子なの？
うーん、僕はまだ分かりません・・・

このままじゃ「波」コンピュータになっちゃいそうな気がします・・・Σ(ﾟдﾟlll)

# 最後に
第一量子化、第二量子化の詳細については朝永振一郎先生の「量子力学Ⅰ、Ⅱ」に詳しく書いているので一読してみるのもいいと思います。

繰り返しとなりますが、答えや色々な経緯を知っている方がいれば、ぜひぜひ教えてください。

それではまた次回の投稿で！
eclipse.ini に java path 指定

# eclipse 起動時の java を変えたいとき

- java の場所 は
  -  `-vm` で設定する
  - `-vmargs` の前に書く

```text:eclipse.ini
・ ・ ・ ・ ・ ・
-vm
C:/java/jdk1.8.0_161/bin/java
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx4g
・ ・ ・ ・ ・ ・
```
Microsoftアカウントと組織アカウント

Microsoftアカウントと組織アカウントの違いが話題になったので理解した内容を投稿します。

# 全体像

||用途・タイプ|登録者|テナント管理|
|---|---|---|---|---|
|Microsoftアカウント|個人Windows10ログイン<br>個人のHotmail、Outlook、Skypeなど|本人|Microsoft|
|組織アカウント|AzureAD<br>Office365|組織|組織|
|組織アカウント|セルフサインアップテナント|本人|なし|
|（オンプレAD）|組織Windows10ログイン|組織|組織|

## Microsoftアカウント

- Live IDアカウント、Skype IDなど、いろんな名称で呼ばれていた
- プライベートで作成、利用しているアカウント。
- 組織アカウントに登録したメールアドレスを使って、Microsoftアカウントを新規取得できない。（登録済みのものは継続利用可能）
- Visual Studio Expressの利用では、Microsoftアカウント必須（組織アカウントは利用不可）
- Office 2013以降のFPP版インストールでは、Microsoftアカウント必須（組織アカウントは利用不可）

## 組織アカウント（AzureAD）

- Office365の利用で作成するアカウント
- オンプレADからの同期で作成していたりする

## 組織アカウント（セルフサインアップテナント）

- 組織アカウント（AzureAD）としてメールドメインを登録していない場合、知らないうちに作成される
- 例：ボリュームライセンスセンターを会社メールアドレスで登録する
- 例：他社のマイクロソフト製品（SharePoint、AIP）、テナントから招待を受ける
- AzureB2B の受け側（組織アカウント（AzureAD）が無い場合）
- 知らないうちに登録されるので、管理者不在

### セルフサインアップテナントの管理者権限を取得するためには

1. Office365ポータルにログインする
2. ユーザ管理から管理者になろうとする
3. メールドメインのTXTレコードに提示された文字列を登録する

# セキュリティ対策
## サインイン制限

組織において、MicrosoftアカウントのOutlookやOneDriveは利用させたくないと思います。
テナント制限を実現するには、プロキシ サーバーで以下の2つのHTTPヘッダーを挿入します。

- Restrict-Access-To-Tenants
- Restrict-Access-Context

https://docs.microsoft.com/ja-jp/azure/active-directory/manage-apps/tenant-restrictions
https://docs.microsoft.com/ja-jp/archive/blogs/office365-tech-japan/tenant-restrictions

## サインイン制限（Microsoftアカウントを許可する）

“Restrict-Access-To-Tenants” ヘッダーに以下を挿入する

- microsoftservices.onmicrosoft.com
- MSARealms.onmicrosoft.com

https://jpazureid.github.io/blog/azure-active-directory/tenant-restriction/

## 困ること

Microsoftアカウントが必須となるシステムがある。一方で情報漏えい対策としてMicrosoftアカウント（個人OutlookやOneDrive）の利用は制限したい。（詰んだ）

Microsoftアカウントを作成したいが、組織のメールアドレスはAzureADに使われており、新規Microsoftアカウントを取得できない。Microsoftアカウントを作成するために個人のメールアドレスを使って、、、とは言えない。
今すぐ使えるリファクタリング

## 今回扱うリファクタリング

- パラメーターへの代入の除去
- 問い合わせによる一次変数の置き換え
- 委譲の隠蔽


###パラメータへの代入の除去

####ダメな例


```Python
def get_discount_val(input_val,percent):
    if input_val > 100:
        #　×　パラメータであるinput_valを直接触っている．
        input_val = input_val * percent
    else:
        input_val = input_val
    return input_val
```


パラメーターへ直接代入している．
他の部分でもinput_valを使う可能性があるため**関数のパラメーターを書き換えちゃダメ**

####良い例

```Python
def get_discount_val(input_val,percent):
    #input_valをvalueに代入
    value = input_val
    if value > 100:
        # ○ パラメータであるinput_valは直接触れていない．
        value = value * percent
    else:
        value = value
    return value
```

- パラメータを直接触るのではなく変数に代入してから値を操作
- 他の部分でもinput_valを使うことができる．
- 他の部分でもinput_valを使う場合同じように変数に代入する．

内部変数名を**value**にすると引数なのか返り値なのかわかりづらいので
分かりやすい名前にする．↓↓↓↓↓↓↓↓↓↓↓↓↓

####もっと良い例 変数を**result**に変更する

```Python
def get_discount_val(input_val,percent):

    if input_val > 100:
        result = input_val * percent
    else:
        result = input_val
    return result
```

**できるだけ短くしたいならこっち!**

```Python
def get_discount_val(input_val,percent):
    return input_val * percent if input_val > 100 else input_val
```

このリファクタリングはとても簡単にできるのでおすすめです！
可読スピードが上がります.



###問い合わせによる一次変数の置き換え

一時変数(ローカル変数)が多くてメソッドの抽出が難しい時に使う．

####シチュエーション
以下の変数を使って売り上げを計算したい．
売上: salsePrice
量　: quantity
値段: itemPrice

####ダメな例

```python
#
double salesPrice = _quantity * _itemPrince
    if(salesPrice > 1000):
        reuturn salesPrice * 0.95
    else: 
        return salesPrice * 0.90
```

####良い例

```python
#salesPrice()を呼び出す
    if(salesPrice() > 1000):
        reuturn salesPrice() * 0.95
    else: 
        return salesPrice() * 0.90

def salesPrice():
    return _quantity * _itemPrince

```
メリット
- 他のクラスや関数でsalesPrice()を使いたい場合管理できる．
- もし変数(itemPrice)に変更があった場合アップデートが簡単にできる．
- その変数を関数にすることで一括管理が可能になる．
- ローカル変数を減らす＝いいこと
- 一括管理ができる
- 急激な変更が加わった時に管理が簡単
- 関数の引数にも宣言できる






### 委譲の隠蔽
####シチュエーション
- johnという社員の上司の名前を取得したいとする．
- Personクラス　とDepartmentクラスがある．
- getDepartment()→所属を返す
- getManager()→マネージャーを返す


####ダメな例					

```python
jun = Person('jun')
manager1 = Person('manager1')
department = Department(manager1)
jun.setDepartment(department)

manager = john.getDepartment().getManager()
```

- getDepartment()→Personクラス
- getManager()→Departmentクラス


####良い例

```python
#getManager()を新規作成する．
manager = john.getManager()
```
getManager()→DepartmentクラスからPersonクラスに記述する．
こうすることで
Person→Department→Manager_nameというフローから
Person→Manager_name　　　　　　　というフローにできる．


```python
class Person(object):
    #Personクラスにマネージャーを呼び出す関数を書く．
    def getManager(self):
        return _department.getMamager()

class Department(object):
    def __init__(self, department_name):
        self.department_name = department_name
```

```python
jun = Person('jun')
manager2 = Person('manager2')
department = Department(manager2)
jun.setDepartment(department)
j_manager = jun.getManager(manager2)
print(j_manager)
      #manager2

```
クラスから呼び出すものが２個以上つながった時はこの手法をとるべき

※ダメな例と良い例と対比させていますがリファクタリングはプログラミングの1つの書き方なので絶対ダメとかではないです。
rustでsin波

# 概要

rustでsin波、やって見た。

# 仕組み

paiza.ioを利用して、吐き出したhtmlを表示させた。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/352c9312-1cd1-12aa-9e1b-53a9fb6cbfda.png)


# サンプルコード


```

use std::f32::consts::PI;

fn main() {
    println!("<html><head></head><body>");
    println!("<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas>");
    println!("<script type=\"text/javascript\">");
    println!("var canvas = document.getElementById(\"canvas\");");
    println!("var ctx = canvas.getContext(\"2d\");");
    println!("function draw(data) {}", "{");
    println!("ctx.strokeStyle = \"#f0f\";");
    println!("ctx.lineWidth = 2;");
    println!("ctx.moveTo(0, 150);");
    println!("for (var i = 1; i < canvas.width; i++) ");
    println!("{}", "{");
    println!("ctx.lineTo(i, 150 - data[i] * 30);");
    println!("{}", "}");
    println!("ctx.stroke();");
    println!("{}", "}");
    println!("var src = [");
    for i in 0..300 
    {
        let v = (i as f32 * 440.0 * 2.0 * PI / 48000.0).sin();
        print!("{}, ", v);
    }
    println!("];");
    println!("draw(src);");
    println!("</script></body></html>");
}






```


# 成果物

https://paiza.io/projects/9sygjtz6eXbBz3Uw7D4zPQ

以上。
Kotlin入門:インターフェース

##インターフェース

構文:
 
```Kotlin
interface name{ definition }
```
`name`:インターフェース名
`definition`:インターフェースの定義

インターフェースには以下の制限があります。
・コンストラクターを持てない
・抽象プロパティかカスタムアクセサーを持つこと
・アクセサーからバッキングフィールドへのアクセスはできない
・アクセス修飾子は`public`のみ利用可能

入力例:

```Kotlin
interface Person{
    fun sayHello()
}
class MagickPearon():Person{
    override fun sayHello(){
        println("Hello")
    }
}
fun main() {
    val mp = MagickPearon()
    mp.sayHello()
}
```

インターフェースを実装するときは継承と同じように
後方に「`:インターフェース名`」で表します。
継承とインターフェースの実装を同時に行うこともできます。

実行結果は以下の通りです。

```Kotlin
Hello
```

###インターフェースでのプロパティ

入力例:

```Kotlin
interface Person{
    var greeting:String
    fun sayHello()
}
open class MagickPearon():Person{
    override var greeting:String="Hello World"
    override fun sayHello(){
        println(greeting)
    }
}
fun main() {
    val mp = MagickPearon()
    mp.sayHello()
}
```

インターフェース内でもプロパティの設定は可能です。
この場合、実装先では必ずプロパティを実装しなければいけません。
また、プロパティの実装時には`override`キーワードを付与している点に注意してください。

実行結果は以下の通りです。

```kotlin
Hello World
```
[やってみた][Android]Termuxのインストールとssh接続

## 環境

LenovoPad 601LV(Softbank TAB3)

Android 6.0



## 参考サイト

[TermuxでSSH Serverを起動する](https://qiita.com/dev100kg/items/11fdaac265c35e777664)



## 手順

1. アプリストアからTermuxをインストールし起動

2. Androidで以下のコマンドを実行

   ```
   $ termux-setup-storage
   
   $ apt update
   $ apt upgrede
   
   $ apt install -y openssh
   $ ssh-keygen
   $ cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
   $ chmod 600 ~/.ssh/authorized_keys
   $ chmod 700 ~/.ssh
   
   $ sshd
   
   SSH Server を終了する場合
   $ pkill sshd
   ```

3. 参考にしたサイトでは鍵をストレージにコピーとあったが、手順通りのフォルダにコピーしてもPC(Mac)からは参照できなかったため、GoogleDriveアプリを使用し、GoogleDrive経由で鍵ファイルをPCにコピー

   

## 動作確認

PCからSSH接続

```
$ ssh -i id_rsa -p 8022 root@xxx.xxx.xxx.xxx
```
ActiveAdmin の各パーツのカスタマイズ方法がドキュメントのどこに載っているのかざっくり調べた

## はじめに

最近 [ActiveAdmin](https://activeadmin.info/index.html) について、ドキュメントを読みながらカスタマイズを試しているのですが、画面の各パーツがドキュメントでどこを指しているのかがわかりづらかったので、備忘で整理しておきます。

## ざっくり全体感を掴むには

[ActiveAdminのドキュメントのトップページ](https://activeadmin.info/index.html) にのっている説明画像をまず見るとイメージがつきやすかったです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222030/569f6085-0963-ec78-ab0c-d6be80632291.png)

## 各パーツについて

ActiveAdmin が用意しているデモ画面を参考にします。

http://demo.activeadmin.info/admin/users

### Global Navigation

ヘッダー部分です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222030/c5fdb240-719c-d28b-cabf-23f8fdb05f04.png)

ここに表示される各メニューについてのカスタマイズ方法は [Customize the Menu](https://activeadmin.info/2-resource-customization.html#customize-the-menu) に載っています。

メニューの表示非表示や表示の順番、ドロップダウンメニューの利用などができるようです。

### Sidebar

右側のサイドバーです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222030/6f05f370-6bd5-59b9-17c4-060a21d83961.png)

ここのカスタマイズ方法は [Sidebar Sections](https://activeadmin.info/7-sidebars.html) に載っています。

サイドバーの設置方法や、サイドバーの中に表示するhtmlタグの定義、サイドバーの表示順番などが記載されていました。

### Action Items

ヘッダー下のタイトル部分右側に表示されるボタンです。デフォルトでは新規作成や編集・削除ボタンが表示されていると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222030/b3ad24fb-639b-5da4-f12b-b72a6e8e86da.png)

ここのカスタマイズ方法は [Action Items](https://activeadmin.info/8-custom-actions.html#action-items) に載っています。

自前のアクションボタンの設置方法や、どの画面で表示するかの制御、表示順番の調整などができるようです。

### Index Page

リソースの一覧表示の部分です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222030/ded3ede3-7c24-0d37-ec6f-0dff8efb07e7.png)

ここのカスタマイズ方法は [Customizing the Index Page](https://activeadmin.info/3-index-pages.html) に載っています。

一覧の表示形式（テーブルやグリッドなど）、どんな情報を表示するか、どんなアクションボタンを設置するかなどができるようです。

## おわりに

一部分の紹介でしたが、他にもページネーションの部分や検索の部分など、意外と画面に表示されているパーツは一通りカスタマイズできる印象を持ちました。

ドキュメントを読んでみると、画面のどの部分がカスタマイズできるのかが徐々にわかってきます。ただどうやってドキュメントを読み込んでいくかは、ActiveAdmin に限らずその都度試行錯誤が必要だなと思いました。

効率よく理解していくためのドキュメントの読み方を見出していきたいです。

## 参考

* [Active Admin | The administration framework for Ruby on Rails](https://activeadmin.info/index.html)
Twitter のアイコンを丸角四角に戻す方法

# 経緯

Twitterのアイコンが丸くなってからもう２年半。
　「今では例えばアイコンが円いことに誰も違和を抱かないな」
という主張を見かけるが、残念ながら私はまだ違和感を覚える。

というのも、元々丸いアイコン前提のデザインなら良いが、
明らかに四角前提のアイコンもあって違和感でしかない。

自分のアイコンも四角なデザインで、この Qiita の表示通り。
Twitter で使うアイコンも同じ四角い元画像を使っている。
たまたま丸く収まってるから、そのまま放置しているだけ。面倒いし（ぁ

今思えば、変更当時は結構大変だった公式アカも居たもんだ。
例えば、タカラトミーさん（のアイコンメーカー）
https://www.itmedia.co.jp/news/articles/1707/18/news026.html
他は matome が詳しい。
https://matome.naver.jp/odai/2149758066866700401
理屈では、アイコンが丸くなって失われたの情報量は最大で 21.46% らしい。
https://togetter.com/li/1120825

ということで、思い出した以上、丸角四角に戻したくなるもの。

# 手順
1. ブラウザで Twitter のページを開く。（Windows × Firefox で確認）
2. F12キーを押して「開発ツール」を表示させる。
3. 開発ツールの一番左上の「![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343826/8cd54d15-2244-959b-314b-3f186ac6f55b.png)」を押して、要素選択モードに入る。
4. 任意のアイコンにカーソルを合わせてクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343826/8052a049-06a9-405c-fc75-a9371d6a8adf.png)
5. 開発ツールで ```<div class="css-...``` がハイライトされていることを確認。
6. その２つ上に ```<a class="css-...``` があるのを確認してクリック。
7. スタイル領域から ```border-radius: 9999px``` を含む ```.r-sdzlij```を探し出す。
　　　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343826/f09c032f-d19f-ef46-ddc0-d4441f19fc36.png)

8. ```9999px``` をダブルクリックして ```0.3em``` に書き換える。
　　　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343826/385a729d-7f43-cb7b-d887-5c9d8690ee9a.png)

これで開いた画面のみならず、
「ホーム」や「通知」に移動しても丸角四角のスタイルが引き継がれる。

# 結果
丸四角いアイコンを堪能しよう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343826/82f1d0bf-f380-c830-926b-49993f63e31e.png)
-備忘録- AWS SES を使ってRedmineからのメールを送る

# Redmine からメールを送ろう
Redmine は便利なタスク管理ツールですが、これでメールが送信できないと嬉しさは半減してしまいます。
そこで、備忘録をかねて、ちょっと設定したことを書いていきます。

## AWS の設定

### 認証情報の取得
AWSのマネジメントコンソールへ入って
「カスタマーエンゲージメント」の項目にある「Simple Email Service」を選択します。

SESの画面が出たらダッシュボードの左ペインから「SMTP Settings」をクリック
メールサーバなどの基本的な設定が書いてあるので、それをメモ帳などにコピペしておきます。


この画面で重要な、SMTPの認証情報を手に入れます。
「Create My SMTP Credentials」をクリックしてください。
すると次の画面でIAMの設定をするけどOK？って聞かるので、IAMの名前を変える時はここで変えます。
それが終わったら、右下の「作成」ボタンで作成します。

なんと次の画面から日本語
「1 ユーザーが正常に作成されました。
これは、SMTP セキュリティ認証情報をダウンロードできる唯一の機会です。SMTP ユーザーの認証情報はユーザーの作成時のみ利用できます。保護のため、誰とも SMTP 認証情報を共有しないでください。」
って書いてあるのでこの機会をのがすとダメなので、これをきちんと行います。

右下にある「認証情報のダウンロード」ボタンを押して、CSVファイルを落とします。これがないとこの設定が使えなくなります。

##Redmine の設定
Redmine側の設定は、
/redmine-root-dir/config/configuration.yml
に記述します。

```
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: hogehoge.amazonaws.com(AWSで指定されたSMTPサーバ)
      port: 587
      domain: "あなたのドメイン"
      user_name: 先程の認証情報CSVファイルの中にある "Smtp Username"
      password: 先程の認証情報CSVファイルの中にある "Smtp Password
```
これでRedmineを使った時にメールが発報されます。
めでたしめでたし。
pythonで素数判定器を実装してみた

pythonとアルゴリズムの勉強かねがね、素数判定器を実装してみました。

入力値が1、2のときはTrue、2の倍数のときはFalseを返します。

入力値が3以上のときは「入力値の1/2乗+1」まで割り算を行って、一度も割り切れなければ素数と判定します。

```prime_number.py
def prime_number(number):
    """素数判定プログラム.
    戻り値
    素数：True
    素数ではない：False
    """
    # 1,2,偶数は結果をそのまま返却
    if number == 1:
        return False
    elif number == 2:
        return True
    elif number % 2 == 0:
        return False
    else:
        pass

    # 3以上の奇数は入力値の1/2乗+1まで除算を行う
    for i in range(3,int(number ** (1 / 2)) + 1):
        if number % i == 0:
            # 一度でも割り切れたら素数ではない
            return False
    # 一度も割り切れなければ素数
    return True

# 数値を入力するとTrue/Falseが返却される
number = 13

print(number, prime_number(number))

ans = {}

for i in range(100):
    ans[str(i)] = prime_number(i)

for k, v in ans.items():
    if v == True:
        print(k)
```
【随時更新】Cisco スイッチ コマンド【運用編】

Cisco スイッチを業務利用する中で
よく使うコマンドを備忘録として残します

HPEはこちら
[>> 【随時更新】HPE スイッチ コマンド【運用編】](https://qiita.com/0tuy0r0hi/items/81a2a2a89cc988aeaac7)
##基本編
####特権EXECモードに移行
```
> enable
```
enableしてからじゃないと
show run等の打てないコマンドがあります

---
####ログアウト
```
> exit
```
モードの移行にも使います

---
####ページ送りを無効
```
> terminal length 0
```
show runなどの長い結果を見る際に
--more-- が出てこなくなります

---
####相手の機器にtelnet接続
```
> telnet IPアドレス
```
相手側の機器の設定によっては
telnetできない場合もあります

---
####ヘルプ(コマンド、引数の候補表示)
```
> ?
```
とても便利なので多用しましょう
sからはじまるあのコマンドなんだっけ・・・
そんなときでも大丈夫
わかるところまで入力して?を入力するだけ
スペルチェックにも使える最強コマンドです

##設定確認編
####現在の設定の確認
```
> show running-config
```
現在の設定値を見たい時や
バックアップを取るときに使います

---
####保存されている設定の確認
```
> show startup-config
```
名前のとおり起動時に読み込まれる
設定の確認に使います

---
####結果から検索対象を含む行を表示
```
> コマンド | include "検索対象"
```
Linuxでいうgrepと一緒です

---
####結果から検索対象を含むまない行を表示
```
> コマンド | exclude "検索対象"
```
Linuxでいうgrep -vと一緒です

---
####結果を検索対象が含まれる行から表示
```
> コマンド | begin "検索対象"
```
以外に使う頻度が高いので覚えておくと便利です

---
####機器のバージョン確認
```
> show version
```
設定によってはVer依存するものがあるため
一応確認しておきましょう

---
####機器と接続されているSFPのシリアルNoを表示
```
> show inventory
```
SFPがちゃんと認識されているか確認する時に使います

---
####インターフェースの情報を表示
```
> show interface status
```
インターフェースごとの速度
VLANを見たい場合はこちら

---
####インターフェースの情報を表示２
```
> show ip interface brief
```
インターフェースごとに設定されている
IPアドレスを見たい場合はこちら

---
####VLANの情報を表示
```
> show vlan brief
```
登録されているVLANの一覧が見れます

---
####ルーティングテーブルの確認
```
> show ip route
```
Sはスタティック、OはOSPFなど
先頭のアルファベットによって意味があります

---
####ARPテーブルの確認
```
> show ip arp
```
MACアドレス解決されて
登録されているものが表示されます

---
####接続されているMACアドレスの確認
```
> show mac address-table
```
接続されている全ての
MACアドレス一覧が確認できます

---
####VRFの確認
```
> show vrf
```
登録されているVRFの一覧を確認できます

---
####リンクアグリゲーションの状態確認
```
> show etherchannel summary
```
イーサチャネルの一覧を確認できます

---
####システムログの確認
```
> show logging
```
システム的なログを見たい時に使います

##疎通確認編
####通信相手の応答有無の確認
```
> ping IPアドレス
```
リーチアビリティが取れているか
確認したい時に使います

---
####通信経路上のルータを確認
```
> traceroute IPアドレス
```
どのルーターを通るのか確認できます

## おわりに
以上がCiscoスイッチの運用で
よく使うコマンドでした

また使うものが増えてきたら
随時更新していきます
SEOのこれからはどっちか

SEO対策とはなに？これは時代によって違った。基本姿勢として、価値のある優れたコンテンツを持っているサイトが良いことは間違いない。ただ、その優れたコンテンツのさるサイトとは何かということが、昔と今で違うところ。

昔はドメインやリンクだった。そのために被リンク施策こそが一番で、価格コムのようなサイトが人気でありドメインパワーに優れていて強かった。そしてコンテンツ重視時代が来る。新規のドメインにもチャンスがあり、検索結果は毎年大きく変わった。

しかし歴史は繰り返すように、SEOも繰り返すようだ。ドメイン、被リンクの時代と言っても過言ではない。もちろん、ベースとなる優れたコンテンツが必要だが、Googleは昔と違って、サイトの内容を理解する能力が上がっている。

テキスト文の内容、質と量というふたつが比重をしめていた時代もあった。今はやや比重が軽くなり、例えば文字数が何千字であるか、どれだけ専門性があるか、独自性があるか、そして信頼するにたる情報なのかと質の審査も厳しさを増している。<a href="https://pressurize-shirt.com/important-point-kaatu/" >注意点はどこか加圧の悪いところ</a>のサイトは特に厳しい。変わりにドメインが強いところが上位に来る。これは今後のスタンダードなのか、コンテンツに比重がうつる時期もまた来るだろう。
HTML&CSS道場コース中級編

#道場コース初級編
　つまづいたところ
　　1.paddingとmarginの使い分け
　　　paddingとmarginはよくごちゃごちゃになってしまった。
　　　色々試していると理解することができた。頭で理解するよりも目で見て手を動
　　　かして理解したほうが覚えやすかった

　　2.classで分けるときの名称が覚えられない
　　　これは数をこなして徐々に覚えていくしかないと思った。
　　　主にheader,main,footerの三つに分かれていて、そこからまた更に
　　　分解していく

　初級編では多少つまづいたものの、ちんぷんかんぷん、まったくわからないという
　状況にはならなかった。この調子で中級編も頑張っていきたい。

##道場コース中級編
　つまづいたところ
　　1.インライン要素をインラインブロック要素に変換するところ
　　　インライン要素のままではwidth,heightまどを指定できないことを忘れていた

　　2.要素の大きさを相対的に設定する
　　　％で設定する。親要素に設定する。
スプレッドシートからGASでファイルがダウンロードできなくなった

# 現象
スプレッドシートに入力した値を加工してファイルとしてダウンロードする、というGASでファイルがダウンロードできなくなった。

# 原因
GASのJavaScriptエンジンがV8ランタイムに変わったからの模様

## スクリプトエディタを開くと下記が表示される
<img width="643" alt="スクリーンショット 2020-02-29 5.01.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131603/13db7cf9-3945-de74-c9af-401fac447a38.png">

# 対応
## V8ランタイムの使用をやめる
スクリプトエディタの `実行` メニューからV8ランタイムを無効にできる
<img width="443" alt="スクリーンショット 2020-02-29 5.03.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131603/ed1e324c-cd2f-1eda-bc00-058015b8f20e.png">

# 後のタスク
V8ランタイムに対応したGASに修正する
初心者オススメのLinuxディストリ

##そもそもLinuxって名前しか知らない人
UbuntuかLinux Mintがオススメです。

とりあえず標準で入っているブラウザを動かしたりしてみましょう。Linuxらしさはないかもしれませんが、動かしてみると無料とは思えない完成度に感動します。MacOS経験者はUbuntu、windows経験者はMintがオススメです。


##軽いOSがほしい人
Linux MintのMATEかxfceバージョンか、xubuntuがオススメです。
古いPCの延命にはピッタリです。


##サーバ関係に興味がある人(デスクトップでも使用可)
CentOSかOpenSUSEがオススメです。

CentOSはサポートが(Debian系Linuxディストリビューションと比較して)長く、実務でも使われるRed Hat Enterprise Linux(RHEL)の有償部分を抜き、一部独自の仕様を追加したディストリビューションです。安定性が高いことが特徴です。ただし、最新バージョンのCentOS8はまだ若干情報不足気味ではあります。

OpenSUSEはYaSTという管理ツールが優秀で、特にWeb系なら聞いたことがあるだろうLAMP環境をGUIで作って試したりできます。Web系開発をしたい人向けのディストリビューションです。日本ではマイナーですが、英語ができるなら情報取得に困ることは少ないでしょう。


##Linuxそのものに興味がある人
Manjaroがオススメです。

Arch Linuxのシンプルさを持ったまま、Archでは難易度が高かったインストールなどを簡略化したOSで、比較的安全に最新の環境を使い続けられます。初心者から上級者まで扱える上、最強の情報サイトと名高いArch Wikiの情報をほぼそのまま使えます。

#まとめ
とりあえず使ってみたい・・・Ubuntu/Mint
サーバやりたい・・・CentOS
Linux好き・・・Manjaro

他にオススメのディストリがあれば是非教えてください。
Next.jsでproductionビルド後に`Couldn't find a `pages` directory. というエラーが出る

## 現象

[next.js/examples/custom-server-typescript at canary · zeit/next.js](https://github.com/zeit/next.js/tree/canary/examples/custom-server-typescript)

上記のcustom-server-typescriptに近い環境。

Docker内で`.next`や`.dist`をコピーして元の`pages`や`src`はない状態。

起動すると以下のようなエラーが発生する。

```
frontend_1  | /node_modules/next/dist/lib/find-pages-dir.js:3
frontend_1  | if(existsSync(_path.default.join(dir,'..','pages'))){throw new Error('> No `pages` directory found. Did you mean to run `next` in the parent (`../`) directory?');}throw new Error("> Couldn't find a `pages` directory. Please create one under the project root");}
frontend_1  |                                                                                                                                                                    ^
frontend_1  | 
frontend_1  | Error: > Couldn't find a `pages` directory. Please create one under the project root
frontend_1  |     at findPagesDir (/node_modules/next/dist/lib/find-pages-dir.js:3:170)
frontend_1  |     at new DevServer (/node_modules/next/dist/server/next-dev-server.js:1:3830)
frontend_1  |     at Object.createServer [as default] (/node_modules/next/dist/server/next.js:2:105)
frontend_1  |     at Object.<anonymous> (/dist/server/server.js:11:27)
frontend_1  |     at Module._compile (internal/modules/cjs/loader.js:1158:30)
frontend_1  |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
frontend_1  |     at Module.load (internal/modules/cjs/loader.js:1002:32)
frontend_1  |     at Function.Module._load (internal/modules/cjs/loader.js:901:14)
frontend_1  |     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
frontend_1  |     at internal/main/run_main_module.js:18:47
```

## 解決

`NODE_ENV=production` が必要。指定すると解決。
fastlaneでIn-Houseで配布するコマンドを作る

　開発しているアプリを実機で確認したい場合、通常は、「iOS Developer Program」の「Certificates,Identifiers & Profiles」から、実機登録を行なって、AdHoc配信でインストールするかと思いますが、開発者が多い場合や、イベントの時だけなど、端末を登録したくない理由がいろいろ出てくると思います。
この場合に、もし、エンタープライズライセンスを持っている場合は、社内向けに配布ができる、In-Houseという配信方法があるので、それを活用して、開発中のアプリをインストールできるようにすると便利です。

ただ、In-House配信も簡単にとはいかないので、これもfastlaneのコマンド一発で、crashlytics もしくは、Firebase App Distribution までアップロードし配布できるようにすると、かなり運用が便利になります。
必要あれば、CircleCIなどのCIサーバーに、自動で実行するジョブをセットすれば、もっと楽になります。

この場合に問題になるのが、証明書やProvisioningProfileやTeamIDなどを、ビルドの際に指定する必要があって、非常に煩わしいので、メモがてら残して置こうと思います。

自分は、以下のようにfastlaneのコマンドを作成しました。

```shell


desc "Deploy a new version of In-House to the Crashlytics Beta "
lane :inhouse do
  # Download and install certificate
  if is_ci?
    match(
      type: 'enterprise',
      keychain_name: keychain[:name],
      keychain_password: keychain[:password],
      app_identifier: ENV["IN_HOUSE_APP_ID"],
      team_id: ENV["IN_HOUSE_TEAM_ID"],
      force_for_new_devices: true
    )
  else
    match(
      type: 'enterprise',
      app_identifier: ENV["IN_HOUSE_APP_ID"],
      team_id: ENV["IN_HOUSE_TEAM_ID"],
      force_for_new_devices: true
    )
  end

  # Update build number
  increment_build_number

  ## Change application icon to beta version
  add_badge(alpha: true)

  # enterpriseを指定してビルド
  build_app(configuration: ENV["IN_HOUSE_CONFIGURATION"], export_method: "enterprise")

  // TODO: crashlytics もしくは、Firebase App Distribution で配布
  ...
end
```

これを、direnvを使って、環境変数をセットしています。

```
export IN_HOUSE_APP_ID="AppID"
export IN_HOUSE_CONFIGURATION ="inHouse"
export IN_HOUSE_TEAM_ID="**********"
```
ECSサービスディスカバリで名前解決できないとき

## 現象

ECSのサービスディスカバリで正常にRoute53にレコードはできているが、
ホスト名でアクセスすると名前解決できない（ENOTFOUND等のエラーが発生する）。

## 解決

VPCの"DNS ホスト名"の設定が無効になっていた。
有効に設定し、ECSタスクを再起動したところ解決した。

## 参考

[Fargate Service discovery - Stack Overflow](https://stackoverflow.com/questions/54588060/fargate-service-discovery)
heroku関連コマンド一覧

herokuでアプリをデプロイする頻度が高く、コマンドを見返せるようにメモ。

##アプリ作成コマンド
```terminal
$ heroku create
```
`heroku create 任意のアプリ名`でアプリ名の指定可能。
(指定しなかった場合は、heroku側で自動付与)
##環境変数の確認コマンド
```terminal
//環境変数の一覧表示
$ heroku config

//指定した値のみを表示
$ heroku config:get 任意のENV_NAME
```
##環境変数の設定コマンド
```terminal
//環境変数の設定
$ heroku config:set 任意のENV_NAME=値
//例
$ heroku config:set SECRET_KEY='＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊'

//環境変数の削除
$ heroku config:unset 任意のENV_NAME
```
##デプロイコマンド
```terminal
$ git push heroku master
```
Gitを使ってheroku上のmasterブランチにアプリをデプロイ。
##アプリ（デプロイ済）オープンコマンド
```terminal
$ heroku open
```
アプリを開く。
##アプリ更新コマンド
```terminal
$ git push heroku master
```
herokuリポジトリへ再度pushすることで更新。
##アプリ削除コマンド
```terminal
$ heroku apps:destroy --app 任意のアプリ名
$ heroku apps:destroy --app 任意のアプリ名 --confirm 任意のアプリ名
```
Heroku上のアプリもリモートリポジトリの設定もすべて削除。
`--confirm 任意のアプリ名`を付けて実行した場合、確認のアプリ名の入力は省略。
##データベース(PostgreSQL)接続コマンド
```terminal
$ heroku pg:psql

任意のアプリ名::DATABASE=> (SQL文の実行)

//終了コマンド
任意のアプリ名::DATABASE=> \q
```
##データベースリセットコマンド
```terminal
$ heroku pg:reset DATABASE

//マイグレートの実行忘れずに(下記Djangoの場合)
$ heroku run python manage.py migrate

$ heroku run python manage.py createsuperuser
```
＊マイグレートの実行忘れると、エラーが出てしまう。
##データベース行数確認コマンド
```terminal
$ heroku pg:info

=== DATABASE_URL
Plan:                  ＊＊＊＊＊＊＊
Status:                ＊＊＊＊＊＊＊
Connections:           ＊＊＊＊＊＊＊
PG Version:            ＊＊＊＊＊＊＊
Created:               ＊＊＊＊＊＊＊
Data Size:             ＊＊＊＊＊＊＊
Tables:                ＊＊＊＊＊＊＊
Rows:                  4119/10000 (In compliance)
Fork/Follow:           ＊＊＊＊＊＊＊
Rollback:              ＊＊＊＊＊＊＊
Continuous Protection: ＊＊＊＊＊＊＊
Add-on:                ＊＊＊＊＊＊＊
```
herokuのPostgresqlは無料プランの場合、１００００行までと制限あり。
上記の`Rows：`項目で確認可能。
##Dyno使用量確認コマンド
```terminal
$ heroku ps

Free dyno hours quota remaining this month: 517h 25m (94%)
Free dyno usage for this app: 30h 43m (5%)
```
1アカウントごとに、550時間/月の無料Dynoが付与（クレジットカード登録を行うと450時間/月の無料Dynoが加算）と無料枠の制限があるため上記のように確認可能。
特定フォルダの.blendファイルを一括処理

ソフトウェアで作業していると複数のファイルを一括処理したいことがあり
３DソフトのBlenderでも当然そういう場面に遭遇します。

Blenderもコマンドラインで操作可能ですが
アーティスト系の人は　コマンド操作は極力したくないと思うでしょう
一度処理を書けばBlender上で操作が完結できるようにするスクリプトを作成してみました。

Blenderのテキストエディッタにコピペして使用するスクリプトです。
テキストエディッタの「スクリプト実行」ボタンを押すとファイルオープンダイアログが開くので
フォルダを指定すると　そのフォルダ内にある.blendファイルに対して一括処理を加えます

このスクリプトのデフォルト状態では　画像をレンダリングしてPNGで保存します

``` python:process_dir.py
import bpy
import subprocess
from bpy.props import StringProperty
from bpy_extras.io_utils import ImportHelper
from pathlib import Path

#ディレクトリの指定
class PROCESS_OT_DIR(bpy.types.Operator, ImportHelper):
    bl_idname = "processing_dir.blfiles"
    bl_description = 'processing select directry'
    bl_label = "Select Directory"

    filepath: StringProperty(
            name="input file",
            subtype= 'DIR_PATH'
            )
    filename_ext : ".blend"
    filter_glob: StringProperty(
            default="*.blend",
            options={'HIDDEN'},
            )
    def execute(self, context):  
        # 対象ファイルの取得
        blend_list = self.get_blend(context)
        for blend_file in blend_list:
            # インフォエディッタに情報出力
            self.report( {'INFO'},("render:%s" % str(blend_file)) )
            call_subprocess(blend_file)
        return{'FINISHED'}
    def get_blend(self, context):
        """ディレクトリ内の.blendファイルを取得"""
        dir_path = Path(self.filepath)
        blend_list = list(dir_path.glob("*.blend"))
        return(blend_list)

def call_subprocess(blend_file):
    """指定したファイルをバックグラウンド処理"""
    # スクリプトを開いているBlenderのパス
    exe_path = bpy.app.binary_path
    # レンダリング用のコマンド
    command_txt = render_command(blend_file)
    # 開いたドキュメントでPythonを実行
    #command_txt = expr_command()
    # バックグラウンドでレンダリングを実行
    call_command = '%s -b %s  %s' % (exe_path, blend_file,command_txt)
    subprocess.call(call_command)
    return()

def render_command(blend_file):
    """ レンダリング用のコマンド """
    # 出力画像のタイプ(TGA RAWTGA JPEG IRIS IRIZ PNG BMP)
    img_type = "PNG"
    # 出力する画像ファイル名
    f_name = "%s_img" % blend_file.stem
    # 出力パス
    parent_dir = blend_file.resolve().parents[0]
    img_path = parent_dir.joinpath(f_name)
    command_txt = "-o %s -F %s -x 1 -f 1" % (img_path, img_type)
    return(command_txt)

# Pyhtonとして実行させるテキスト
script_text = """\
import bpy
print(bpy.context.active_object.name)
"""
def expr_command():
    command_txt = '--python-expr \"%s\"' % script_text
    return(command_txt)

def register():
    bpy.utils.register_class(PROCESS_OT_DIR)

def unregister():
    bpy.utils.unregister_class(PROCESS_OT_DIR)

if __name__ == "__main__":
    register()
    # test call
    bpy.ops.processing_dir.blfiles('INVOKE_DEFAULT')
```

バックグラウンドで動作するようになっていて
処理中は開いているウインドウは何も反応がなくなります。

最小限の変更で　レンダリング以外の操作もできるようにしています

```python:
    # 開いたドキュメントでPythonを実行
    #command_txt = expr_command()
```
の行をコメントアウトすることで
script_textの部分に書いたpythonのコードを実行するようにできます

```python:
script_text = """\
import bpy
print(bpy.context.active_object.name)
"""
```
サンプルでは開いたファイルのアクティブなオブジェクトの名前を出力します

ここを調整することで色々できることは多いと思います
Arduinoで他ライブラリいりライブラリを自作する

#はじめに/目標
**ライブラリ入ライブラリ**を自作するのが目標
今回、沼にハマったことを書いて行きたいです。

#ライブラリの作り方
１．ArduinoIDEでライブラリ名の新規ファイルを作成（空ファイルにすること）
２．新規タブを生成して名前を、**~.h**（ヘッダファイル）と **~.cpp**（ソースファイル）にする
３．ともに中身を埋めてLibrariesに入れる（.inoを消さないほうが作業が楽）

#実際に制作する
ライブラリ名：FlashLib
メソッド1　：jiwa()→徐々に点灯
メソッド2　：pika()→点滅させる



###ファイル
ほんとに何も入れないでください（loop関数やsetup関数がエラーの原因になります。）

```FlashLib.ino

```

右の逆三角から新規タブ（ctrl+shift+N）を選択してください

```FlashLib.cpp
#include <Arduino.h>
#include <FlashLib.h>

void jiwa(void){
  for (int i = 0; i<10; i++){
    delay(100);
    analogWrite(11,i);
  }
}


void pika(void){
    digitalWrite(11,HIGH);
    delay(100);
    digitalWrite(11,LOW);
    delay(100);
}
```


もう一回新規タブ

```FlashLib.h
#ifndef _FlashLib_h
#define _FlashLib_h

void jiwa(void);
void pika(void);

#endif
```
検証（コンパイル）すると3つまとめたフォルダが生成されるので、ドキュメント保存場所（デフォルトは`C:\Users\<アカウント名>\Documents\Arduino\libraries `）に追加します。

###使ってみる
新規ファイルをtest1とする

```test1.ino
#include <FlashLib.h>

void setup() {
  pinMode(11,OUTPUT);
}

void loop() {
  pika();
  jiwa();
}

```

これで動くと思います。

#ライブラリの中にライブラリを入れてみる
ライブラリ名：loopMan
メソッド１：loop_man5→5回ループさせるメソッド
メソッド２：loop_man10→10回ループさせるメソッド

```loopMan.ino

```

```loopMan.cpp
#include <Arduino.h>
#include <FlashLib.h>
#include <loopMan.h>

void loop_man5(void){
  for (int i = 1; i<5; i++){
    pika();
  }
}

void loop_man10(void){
  for (int i = 1; i<10; i++){
    jiwa();
  }
}
```

```loopMan.h
#ifndef _loopMan_h
#define _loopMan_h

void loop_man1(void);
void loop_man2(void);

#endif
```
これもlibrariesに入れます

#実際に動かしてみる
新規ファイルを作って`libTest`と、しました。

```libTest.ino
#include <loopMan.h>

void setup() {
  pinMode(11,OUTPUT);
}

void loop() {
  digitalWrite(11,HIGH);
  delay(5000);  
  loop_man10();
  loop_man5();
}
```

5秒光って点灯して点滅しましたか？？？
おわり。
ワードプレスの編集ツールが表示されない


はじめまして、

ワードプレスを最近はじめたものですが、記事の「投稿」ページに編集ツールが表示されません。
エディターはClassic Editer（旧エディター）を使用しております。
<img width="671" alt="スクリーンショット.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594301/3e358f23-5791-abdf-7c1e-1e63e7bd80ea.png">

<img width="391" alt="スクリーンショット2.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594301/d5bc0e23-5e10-9c50-3d33-664a105de6e2.png">


編集ツールがないため見出しを入れることができません。
下記のような画面がうつるようにしたいです。
<img width="260" alt="キャプチャ3.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594301/9c807db0-8d04-b2f4-6427-7808835e7d71.png">



どなたかお助けのほどお願いいたします。
順列の各要素に上限がある時の順列の個数

順列の各要素に上限がある時の順列の個数を $O(N\log N)$ 時間で求める。
####問題
長さ $N$ の数列 $A_1, A_2, \dots, A_N$ が与えられる。次の条件を満たす $1, 2, \dots N$ の順列 $P_1, P_2, \dots, P_N$ の個数は何通りか。$10^9+7$ で割った余りを求めなさい。
・$i=1, 2, \dots , N$ について、$P_i≦A_i$
####解法
この問題は次のような解法で解くことができる。  
1. $A$ を昇順にソートする
2. $(A_1-0)\times(A_2-1)\times\dots\times(A_N-(N-1))$ 通りが答え

なぜこうなるのかを説明する。
$A$ は順番を入れ替えても答えは変わらないので、$A$ は昇順にソートしてあるとしてもよい。以降は $A$ は昇順にソートされているものとする。

順列 $p$ を $p_1, p_2, \dots, p_n$ の順で決めていくことを考える。
まず、$p_1$ は $1$ 以上 $A_1$ 以下の $A_1$ 通りである。
$p_2$ は $1$ 以上 $A_2$ 以下だが、$A$ はソートされているので $p_1≦A_1≦A_2$ であり、$1$ 以上 $A_2$ 以下の中に必ず $p_1$ が含まれることになる。$p_1$ の値は $p_2$ では使えないので、$p_2$ は $A_2-1$ 通りである。
$p_3$ は $1$ 以上 $A_3$ 以下だが、$A$ はソートされているので $p_1, p_2≦A_2≦A_3$ であり、$1$ 以上 $A_3$ 以下に必ず $p_1$ と $p_2$ が含まれることになる。$p_1$ と $p_2$ の値は $p_3$ では使えないので、$p_3$ は $A_3-2$ 通りである。
同様にして、$p_k$ は $A_k-(k-1)$ 通りとなり、積の法則より答えは $(A_1-0)\times(A_2-1)\times\dots\times(A_N-(N-1))$ 通りとなる。
####問題例
[yukicoder No.1001 注文の多い順列](https://yukicoder.me/problems/no/1001)
【備忘録】docker環境でrails開発　dbconsole編

2020/02/28
docker×railsでmysqlを使って開発しています。
table同士を外部キーで紐付けしたく、modelとmigrationファイルを作ったところ、作る際に紐付け先のtable名を間違えていました。
ただマイグレーション実行前にmigrationファイルとmodelの中身を編集し直したので結果、大丈夫だったのですがしっかり作れているか不安だった為、テーブルの中身を確認したいと思いました。

railsではrails dbconsoleというコマンドライン上からデータベースの中身の確認や編集をすることができるコマンド(らしい)があります。
今回それをつかって確認しようと思いましたが上記コマンドを実行しようとするとエラーになりました。
調べていくとdockerfileが原因らしく、以下の記事を参考にdockerfileを編集したらうまくいくようになりました。
https://qiita.com/ryosk7/items/077ea98a88ec3df289c8
一応、動くようにはなったのですが、dockerのイメージやらコンテナやら用語がイマイチ難しくてわかっていません。

```
rails $ docker-compose run web rails dbconsole
Starting rails_db_1 ... done
Enter password: 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.29 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [app_development]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| app_development    |
| app_test           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

MySQL [app_development]> 

```

ちなみに rails dbconsole からでなく普通に接続したらデータベースの中身が違ったのですがなぜでしょう、、、

```
$ mysql -u root -p[パスワード]
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.16 Homebrew

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql> 

```

参考：
https://jp.techcrunch.com/2016/10/17/20161016wtf-is-a-container/
https://knowledge.sakura.ad.jp/15253/
【備忘録】Ruby : モジュールの使い方(Mix-in,多重継承)

```ruby:sample.rb

module ActionTarget
	# モジュール
	def throw
		puts "#{@person}は#{@object}を投げた"
	end

	def kick
		puts "#{@person}は#{@object}を蹴った"
	end
end

class ActionPlace
	# 継承元クラス
	def run
		puts "#{@person}は#{@place}で走った"
	end

	def sleep
		puts "#{@person}は#{@place}で寝た"
	end
end

class Person < ActionPlace
	# クラスを継承
	include ActionTarget
	# モジュールのメソッドが使えるようにミックスイン
	attr_accessor :object,:place,:person

	def initialize(object,place)
		@object = object
		@place = place
		@person = "私"
	end
end

me = Person.new("サッカーボール","校庭")
me.throw # (モジュールメソッド)　=>私はサッカーボールを投げた
me.kick # (モジュールメソッド)　=>私はサッカーボールを蹴った
me.run # (継承クラスのインスタンスメソッド)　=>私は校庭で走った
me.sleep # (継承クラスのインスタンスメソッド)　=>私は校庭で寝た

# ruby では単一継承を想定して作られているらしい。
# モジュールをミックスインすることで多重継承的な動きが可能


```
起動している Docker Machine まとめて終了する方法

起動している Docker Machine をまとめて終了する方法です.

```shell
% docker-machine ls -q --filter state=running | xargs docker-machine stop
Stopping "sandbox"...
Stopping "default"...
Machine "sandbox" was stopped.
Machine "default" was stopped.
```

`-q` でマシンの名前だけ取得し, `--filter state=running` で動いているマシンでフィルタします.
kerasのFunctional APIを使ってseq2seqモデルを構築する　概要編

# どんな記事？
深層学習のモデリングであれやこれや試してみたいけど、どうやって実装したらいいかわからん人向けに
割と自由度が高く、程よく抽象化されている枠組みとしてのkerasのfunctional APIを使って
sequentialでは難しいseq2seqをなるべくシンプルに実装してみる

# 目次
0. 概要編（イマココ）
1. [前処理編](https://qiita.com/nabion/items/19a07b34fade96a6760b)
2. [モデル構築＆学習編](https://qiita.com/nabion/items/423ec7a34b73260557af)
3. [推論編](https://qiita.com/nabion/items/bcfd854c531bcd7fcc95)
4. モデル改良編　（まだ作ってない）

# 解くタスク
英→日の機械翻訳モデルを構築します。
文字列はあらかじめ単語単位に分解されているものとします。
具体的には以下のデータを使います
https://github.com/odashi/small_parallel_enja

# モデルの概要
まず、入力単語列を単語IDに変換し、適当な次元に埋め込みます。
次に入力単語列に対応する埋め込みベクトルたちの可変長ベクトル列をLSTMを使って
固定長の特徴ベクトルである2つのLSTMセルの隠れ状態h,cにエンコードします。

エンコードされた隠れ状態h, cと文章開始を表す特別な単語（の埋め込みベクトル）を別のLSTMに入力し、
LSTMの出力を全結合層に渡してsoftmaxを取ることで1単語目が各単語である確率を得ます。
1単語目が各単語である確率のargmaxを取ると1単語目の推定結果になります。
以降、t単語目の単語の埋め込みベクトルとt単語目の時点の隠れ状態h, cから次々と単語を生成していき、出力の単語列を得ます。

図にすると以下のような感じです。

![LSTM-Page-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373785/fec68ff3-b231-8e6c-2f40-1007d2099304.png)


同じ色の四角はウェイトが同じです。
具体的な単語が入っている四角の実際の入力は単語を対応する単語IDに変換したものです。便宜上単語そのもので書いています。
例として、今回書いたコードでの各セル間で受け渡される値の次元を書いておきましたが、それらはハイパーパラメータです。
ニューラル機械翻訳に限らずseq2seqはもっと色々モデルがありますが、kerasに慣れることを重視してシンプルなモデルでいきます。

# 環境構築
色々面倒なのでSagemakerのノートブックインスタンスを使います。
諸々のライブラリやら、GPUインスタンスならGPU環境やらが構築済みでお値段なんと0.0464 USD/hourから！
GPU使うとml.p2.xlargeで1.26 USD/hourとかしますので、デバッグをml.t2.mediumでやって、学習時だけml.p2.xlarge使うなどすればお安く抑えられるかと。
手元にゲーミングPCあるので手元でもできるんですが、何かと面倒なので最近はずっとノートブックインスタンスばっかつかってます。

# 参考
前処理部分は下記
アテンションを用いたニューラル機械翻訳
https://www.tensorflow.org/tutorials/text/nmt_with_attention

学習・推論部分のコードのベースは下記
Sequence to sequence example in Keras (character-level).
https://keras.io/examples/lstm_seq2seq/

学習に使ったデータは下記
https://github.com/odashi/small_parallel_enja

本記事のコードが入ってるリポジトリ
https://github.com/nagiton/simple_NMT
【Git】commitメッセージを変更したい (git rebase -i)

# こんなとき
あぁ〜、コミットメッセージ変更したいなぁ〜。

# 方法
`git log`：n個前のコミットメッセージを変更したい！
↓
`git rebase -i HEAD~n`
↓
自動でvim起動。変えたいコミットの先頭にある`pick`を`edit`に変える。
↓
`git commit --amend -m "<新コミットメッセージ>"`
↓
`git rebase --continue`
↓
`git log`：変更できている！

## 解説
### git log：コミットメッセージを見る
```zsh
% git log --oneline
e35aade (HEAD -> master) commit 4
754cc2f commit 2 # ここのメッセージを変えたい！
25c09e4 commit 2
58e25f0 commit 1
```
`HEAD`から2個目のメッセージを変えます。

### git rebase -i HEAD~n：n番目までのコミットを編集
```zsh
% git rebase -i HEAD~2
```
`HEAD`から2個目ということで`HEAD~2`。
すると、vimが自動で起動します。

#### vim起動
```vim
    pick
     ↓
  1 edit 754cc2f commit 2
  2 pick e35aade commit 4
  3
  4 # Rebase 25c09e4..e35aade onto 25c09e4 (2 commands)
  5 #
  6 # Commands:
  7 # p, pick <commit> = use commit
  8 # r, reword <commit> = use commit, but edit the commit message
  9 # e, edit <commit> = use commit, but stop for amending
 10 # s, squash <commit> = use commit, but meld into previous commit
 11 # f, fixup <commit> = like "squash", but discard this commit's log message
 12 # x, exec <command> = run command (the rest of the line) using shell
 13 # b, break = stop here (continue rebase later with 'git rebase --continue')
 14 # d, drop <commit> = remove commit
 15 # l, label <label> = label current HEAD with a name
 16 # t, reset <label> = reset HEAD to a label
 17 # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
 18 # .       create a merge commit using the original merge commit's
 19 # .       message (or the oneline, if no original merge commit was
 20 # .       specified). Use -c <commit> to reword the commit message.
 21 #
 22 # These lines can be re-ordered; they are executed from top to bottom.
 23 #
 24 # If you remove a line here THAT COMMIT WILL BE LOST.
 25 #
 26 # However, if you remove everything, the rebase will be aborted.
 27 #
 28 # Note that empty commits are commented out
```
1行目の`pick`を`edit`に変えて終了。
zshに戻ると、

```zsh
Stopped at 754cc2f...  commit 2
You can amend the commit now, with

  git commit --amend

Once you are satisfied with your changes, run

  git rebase --continue
```
と出ています。

### git commit --amend -m "<新コミットメッセージ>"：コミットメッセージ変更
```zsh
% git commit --amend -m "commit 3"
[detached HEAD eaf967d] commit 3
 Date: Xxx Xxx 00 00:00:00 0000 +0000
 1 file changed, 2 deletions(-)
 delete mode 100644 test2.html
```
ここで、変更したいメッセージを入力します。

### git rebase --continue：rebaseの終了
```zsh
% git rebase --continue
Successfully rebased and updated refs/heads/master.
```

### git log：コミットメッセージを見る
```zsh
% git  log --oneline
0b421f9 (HEAD -> master) commit 4
eaf967d commit 3 # 変わっている
25c09e4 commit 2
58e25f0 commit 1
```
無事変更されました。

# 余談
## git rebase について
#### 更新中...
【Unity】【 OpenCV for Unity】 RawImageに描画した動画を動画ファイルにして保存

投稿し過ぎ感。。
だが、させてくれ。
今日一日（いやそれ以上？）、まーまーはまらなそうなとこではまったんだから:punch_tone1:

前回（https://qiita.com/wirsind55/items/35b411ae4d618ad09f47）、
OpenCV For UnityでVideoWrite出来んと嘆きを入れたところ、
@utibenkei さんの優しさによって見事に解決に至った翌日00:30である（どんだけはまるねん、とは言わない）。

ここまで出来ればやはりもうちょっと格好をつけたい（今は真っ黒な画面の動画が出来てるだけだから）。
やったことは、VideoPlayerでRenderTextureに描画し、それをUPDATE（）から毎フレーム取り出し、
動画ファイルを作っていくということである！

まず、
UnityのRaw ImageにVideoPlayerを追加して、
動画をRawImageに描画する（細かいやり方は割愛。画面HCだけ貼っとく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504562/344c62b1-9e28-5ae7-eca0-5bf576aafafe.png)

上記手順は大体はこちらを参考にした感じだったので知りたい方はご参考に
【Unity】VideoPlayerの使い方 – 動画再生をマスターしよう！　https://xr-hub.com/archives/15798　）


で、
この素晴らしいスクリプトを任意のGameObjectにアタッチ。

```Cap.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OpenCVForUnity.CoreModule;
using OpenCVForUnity.VideoioModule;
using OpenCVForUnity.VideoModule;
using UnityEngine.UI;

public class Cap : MonoBehaviour
{
    private VideoWriter _videoWriter;
    private int cnt = 0;

    // Start is called before the first frame update
    void Start()
    {
        _videoWriter = new VideoWriter(@"C:\Users\hiro\openCvSample\output.avi", VideoWriter.fourcc('M', 'J', 'P', 'G'), 60.0, new Size(256, 256), true);
        //_videoWriter = new VideoWriter(@"C:\Users\hiro\openCvSample\output.mp4", VideoWriter.fourcc('m', 'p', '4', 'v'), 60.0, new Size(256, 256), true);
        Debug.Log(System.IO.Directory.GetCurrentDirectory());
    }

    // Update is called once per frame
    void Update()
    {
        if(cnt < 500)
        {
            CaptchaScreen();
            //cnt.ToString() + ".png");
        }else if(cnt == 500)
        {
            Debug.Log("Dispoooooose");
            _videoWriter.Dispose();
        }

        cnt++;
    }

    public void CaptchaScreen()
    {
        RawImage raw = GameObject.Find("RawImage").GetComponent<RawImage>();
        Texture2D tex2 = TextureToTexture2D(raw.texture);

        Mat srcMat = new Mat(new Size(256, 256), CvType.CV_8UC4);
        OpenCVForUnity.UnityUtils.Utils.texture2DToMat(tex2, srcMat);

        _videoWriter.write(srcMat);
    }

    private Texture2D TextureToTexture2D(Texture texture)
    {
        Texture2D texture2D = new Texture2D(texture.width, texture.height, TextureFormat.RGBA32, false);
        RenderTexture currentRT = RenderTexture.active;
        RenderTexture renderTexture = RenderTexture.GetTemporary(texture.width, texture.height, 32);
        Graphics.Blit(texture, renderTexture);

        RenderTexture.active = renderTexture;
        texture2D.ReadPixels(new UnityEngine.Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
        texture2D.Apply();

        RenderTexture.active = currentRT;
        RenderTexture.ReleaseTemporary(renderTexture);
        return texture2D;
    }
}
```

やってることは単純（少し調子に乗る）。

動画を描画しているRenderTexture
⇒Texture ⇒ Texuture2D ⇒ Mat へと変換させていき
最後はVideoWriter.write()にぶち込むという戦略でござる。

これで所定の位置に動画が出来たよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504562/73a78cc9-9a20-c250-68fc-cb3f311f5bad.png)


以上、どどん！
Typescriptってなんですか。



typescriptを勉強してね、と言われた超初心者のお話なので温かく見守っていただけると嬉しいです。

#Typescriptとは何か

TypeScript はマイクロソフトによって開発され、メンテナンスされているフリーでオープンソースのプログラミング言語である。TypeScriptはJavaScriptに対して、省略も可能な静的型付けとクラスベースオブジェクト指向を加えた厳密なスーパーセットとなっている。
（Wikipediaより）

わかりやすく言うと書き方はほとんどJavascriptと同じで、変わる部分はJavascriptは動的型付け（勝手に型付けしてくれる）なのに対し、Typescriptは静的型付け（自分で書かなければならない）ということである。

型付けを自分で行い記すことによって、瞬時に間違いに気づけていいね！間違いが減るね！間違いを教えてくれるね！複数人で作業してもわかりやすくていいね！と、安全性が高いことから多くの人が導入している言語である。


#静的型付け

基本の型を学んでいくっ！

###String型
```typescript
let moji : string = 'hello!';

let suji : string = 850;//嘘をつくなと怒られる。
```
文字列を定義できる。
###Number型
```typescript
let suji : number = 200;
let moji : number = 'hello!'//嘘を付くな。
```
数値ならなんでも定義できる。
##Boolean型
```typescript
let isDone : boolean = true;
```
trueかfalseかを指定することができる。

###Void型
```typescript
let tasizann : number = 0;
function count() : void {
tasizann++;
console.log(tasizann);
}
count()
```
戻り値（return）がないことを示すことができる。

###Null,Undefind
```typescript
let nothing : null = null;
let no_encontrado : undefind = undefind;
```
値がない、定義がないことを示すこと（だけ）ができる。

###配列型
```typescript
let suji : number[] = [1,2,3];
let moji : string[] = ['太郎','次郎','三郎'];
```
型[ ]のようにして配列の型を示すことができる。

```typescript
interface Person {
  name: string;
  height: number;
}

let personArray : Person[] = [];
```
このようにインターフェースを利用することもできる。

###Any型
```typescript
let suji : any = 30;//数字だね。
let moji : any = 'hello!'//文字列だね。
```
何でも指定できるがせっかく型付けしてる意味がなくなってしまうので困ったときだけ使うのが良い。

#型アサーション
```typescript
let pie : any = '3.14';
let pieLength : number = (<string>pie).length;//4
```
型を別の型に変更できる。
＜変更したい型＞型を変更したい値
というように定義する。

#Typescriptの環境構築

最新版TypeScript+webpack 4の環境構築まとめ
https://ics.media/entry/16329/#webpack-ts
こちらを参考にどうぞ。


#参考
今回参考にさせていただいた方々です。
こちらのほうがわかりやすいので、こちらを読むことをおすすめします。
Typescript入門
https://dev.classmethod.jp/client-side/javascript/lean-typescript-basic-types/
Typescript
https://ja.wikipedia.org/wiki/TypeScript

#終わりに
typescriptのお勉強のために本を読んでいたのですが、
読めば読むほどtypescriptがわからなくなってしまったので今回はこのへんで。