OmniAICreator/Qiita-1.07M huggingface dataset:
PowerShellのSend-MailMessageを使ってバッチメールを送るメモ



すべての環境に当てはまるわけじゃないのでご注意ください。


## ps1ファイル

以下の内容でps1ファイルを作成する

```powershell:hogehoge.ps1

$mail = @{
    from = "example@gmail.com";
    to = "example+to@gmail.com";
    smtp_server = "xxxxxxxxxx";
    smtp_port = 587;
    user = "example@gmail.com";
    password = "1234";
}

$subject = "件名";
$crlf = "`r`n";
$body = "おはようございます。" + $crlf;
$body += "つらつらつづる" + $crlf;
$body += " よろしくお願いします" + $crlf;

$encoding = ([System.Text.Encoding]::BigEndianUnicode); # 有効な値は、ASCII、UTF8、UTF7、UTF32、Unicode、BigEndianUnicode、Default、および OEM です https://docs.microsoft.com/ja-JP/previous-versions//dd347693(v=technet.10)


$password = ConvertTo-SecureString $mail["password"] -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $mail["user"], $password

Send-MailMessage -To $mail["to"] `
                 -Cc $mail["cc"] `
                 -From $mail["from"] `
                 -SmtpServer $mail["smtp_server"] `
                 -Subject $subject `
                 -Body $body `
                 -Credential $credential `
                 -Port $mail["smtp_port"] `
                 -UseSsl
                 -Encoding $encoding
```


 #理由は不明だが、２バイト文字からBodyが始まると文字化けする場合があるので、そういう場合には、Bodyの先頭に1文字半角文字を入れると解消する場合がある。


## batch

PS1ファイルを実行できるbatファイルを作成し、タスクへ登録する

```bat:batchファイル
@echo off
echo 開始..
powershell -NoProfile -ExecutionPolicy Unrestricted .\hogehoge.ps1
echo 完了！
pause > nul
exit
```


# 参考

[Powershellを楽に実行してもらうには - Qiita](https://qiita.com/tomoko523/items/df8e384d32a377381ef9)

[Send-MailMessage | Microsoft Docs](https://docs.microsoft.com/ja-JP/previous-versions//dd347693(v=technet.10))

[PowerShellを使って、SMTPでGmailを送信する - メモ的な思考的な](https://thinkami.hatenablog.com/entry/2016/07/09/075608)
Visual Studio Code InsidersのRemote ContainersでJavaをリモートデバッグしてみる

こちらの記事を参考に、Nuxt.jsのリモートデバッグ環境を実行してみて感動したのでJavaでも同じことを試してみます。
https://qiita.com/relu/items/defde8de8c4d21af662f

# 環境準備

今回使用した環境は以下です。

|ツール名等|バージョン|
|:--|:--|
|macOS|Mojave 10.14.3|
|Docker|18.06.1-ce|
|Visual Studio Code Insiders|1.34.20-insider|

## Dockerのインストール

Homebrewをインストール済みの場合はコマンドだけでOKです。
入れていない方はご自身で調べてください。

```bash
$ brew install docker
$ brew cask install docker
```

## Visual Studio Code Insidersのインストール

たったこれだけ。

```bash
# VSCode Insidersをインストール
$ brew cask install visual-studio-code-insiders
```

事前にこちらの拡張機能を入れておきましょう。
<img width="660" alt="remote.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199056/29fa858c-bce2-bd96-6292-fb1374e4f189.png">

ついでにDockerの拡張機能も入れておきます。
(こちらはお好みで。)
<img width="653" alt="docker.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199056/207b1ea9-7589-15d0-7a9a-c08b646c39e8.png">


# 開発環境準備

以下からソースを取得します。

```bash
$ git clone https://github.com/Microsoft/vscode-remote-try-java
```

VSCode Insidersから実行します。

```bash
$ code-insiders vscode-remote-try-java
```

すると、以下のダイアログが表示されるのでボタンを押下します。

<img width="481" alt="dialog.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199056/23429d0d-0b43-9d55-0498-751a1a77705a.png">

# デバッグ実行

`src/main/java/com/mycompany/app/App.java`を開き、ブレイクポイントを設定します。

<img width="752" alt="breakpoint.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199056/e55eca93-3f60-d9e0-fdf1-ea26991fd6ab.png">

F5を押下するとブレイクポイントで停止します！

<img width="1074" alt="debug.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199056/df4d9bbe-a711-66b6-26d3-ddbb2b474df4.png">

# まとめ

たったこれだけのステップで、コンテナ化されたJavaの開発環境を構築できてしまいます。
今回は公式の案内に沿って実行しただけなので、設定内容などを詳細に学んでこちらに追記します。

記事の更新まで、しばしお待ちください。

# 参考

https://code.visualstudio.com/docs/remote/containers
Rails6 のちょい足しな新機能を試す17（bin/rake dev:cache編）

# はじめに

Rails 6 に追加されそうな新機能を試す第17段。 今回のちょい足し機能は、 `bin/rake dev:cache` 編です。
Rails 6.0 では `bin/rake dev:cache` を実行すると DEPRECATION WARNING が出力されるようになりました。

記載時点では、Rails は 6.0.0.rc1 で確認しました。Rails 6.0.0.rc1 は `gem install rails --prerelease` でインストールできます。

```shell
$ rails --version
Rails 6.0.0.rc1
```

# おことわり

ここでは、 `bin/rake dev:cache` ( `bin/rails dev:cache` ) の機能については、触れません。
機能については、「 [Railsのフラグメントキャッシュについて調べてみた](https://qiita.com/suketa/items/eeae7e2196520323f694) 」を参照してください。

# Railsプロジェクトを作る

```shell
$ rails new sandbox_6_0_0rc1
$ cd sandbox_6_0_0rc1
```

# `bin/rake dev:cache` を実行する

```shell
$ bin/rake dev:cache
Running via Spring preloader in process 452
Development mode is now being cached.
```

# log/develpment.log を確認する

log/development.log を確認するとワーニングが出力されていることがわかります。

```
DEPRECATION WARNING: Using `bin/rake dev:cache` is deprecated and will be removed in Rails 6.1. Use `bin/rails dev:cache` instead.
 (called from block in execute at /usr/local/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rak/home/suke/mywork/learning/javascript/react-udemy/songs/src/reducers/
```

# ちょっと思ったこと

このワーニングは、使い道から考えると、ログじゃなくてコンソールに警告が出てくれた方が良いような気がしないでもないです。
こんな感じになっている方が良さそうな気が(もっとシンプルに書ける方法がありそうな気がしますが、すぐに見つけられませんでした。 logger を書き変えて出力先を変更するとかできるのかな... :thinking: )。


```ruby:railties/lib/rails/tasks/dev.rake
namespace :dev do
  task cache: :environment do
    old_behavior = ActiveSupport::Deprecation.behavior
    begin
      ActiveSupport::Deprecation.behavior = :stderr
      ActiveSupport::Deprecation.warn("Using `bin/rake dev:cache` is deprecated and will be removed in Rails 6.1. Use `bin/rails dev:cache` instead.\n")
    ensure
      ActiveSupport::Deprecation.behavior = old_behavior
    end
    Rails::Command.invoke "dev:cache"
  end
end
```

# 参考情報

* [What is new in Rails 6.0](https://bogdanvlviv.com/posts/ruby/rails/what-is-new-in-rails-6_0.html)
* [Move `dev:cache` rake task to use Rails::Command](https://github.com/rails/rails/pull/33559)
内定辞退の三水準

内定辞退するときに、どのような方法がよいか聞かれた。

# 最上級
 将来取引先になる可能性があるなど、一生の間でなんらかの関係を持ちたいと思っている会社

毛筆で、一生の間でなんらかの関係を持ちたいという気持ちを素直に書いて、今回は事情により内定を辞退させてくださいと書き、最後に署名し、普通郵便で送る。

# 上級
それなりに好感を持った会社

 Webの内定辞退の書式、電子メール、FAX、Twitter, Lineなど会社の正式の窓口に電子的な手段で送る。

電子メール、Twitter, Lineアカウントなどの固有情報があれば証拠になる。

# 下級
絶対一生かかわりたくないと思っている会社

訪問して断ったり、電話して断る。

電子的な証拠を残さない。

仕事の邪魔になります。この方法は取らないでください。

# IT関連会社に限らないかも
# Reference
Ethernet 記事一覧　Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48) 
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網（Wi-Fi）空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

小川清最終講義、小川清最終講義（再）計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53

# 文書履歴(document history)
ver. 0.01 初稿 20190516
ver. 0.02 署名加筆 20190521
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
Pythonで書かれたLisp方言HyでFlaskを動かす

# 動機
Lispで実際にアプリケーション書いてみたいと思ったけどCommon LispやSchemeなどのLisp方言はライブラリの管理とかよくわかんないしどうしようかと思ったところでPythonで書かれたLisp方言の[Hy](https://github.com/hylang/hy)を知ったのでFlaskを動かしてみる。[Hy](https://github.com/hylang/hy)だとPythonのVM上で動くのでFlaskだろうがDjangoだろうがKerasだろうが書ける。神。

# Hyのインストール
pipenvを使ってインストールします。

```shell
$ mkdir hy_flask
$ cd hy_flask
$ pipenv --python 3.6.5
$ pipenv install hy
```

# Python -> Hy
## 変数代入
```python
hello = 'Hello world!'
```

```hy
(setv hello "Hello world!")
```

hyではシングルクォーテーションで囲っても文字列にならないので注意

## 関数定義
```python
def say(hello):
    print(hello)
```

```hylang
(defn say [hello]
  (print hello))
```

## 四則演算
```python
print(5 + 2)
print(5 - 2)
print(5 * 2)
print(5 / 2)
```

```hy
(print (+ 5 2))
(print (- 5 2))
(print (* 5 2))
(print (/ 5 2))
```

## インポート
```python
import random
from operator import add, sub
import numpy as np
```

```hy
(import random)
(import [operator [add sub]])
(import [numpy :as np])
```

## デコレータ
```python
def deco(func):
    def wrap():
        print('--start--')
        func()
        print('--end--')
    return wrapper

@deco
def hello():
    print('Hello Decorator')

hello()
```

```hy
(defn deco [func]
  (fn []
    (print "--start--")
    (func)
    (print "--end--")))

#@(deco
  (defn hello []
    (print "Hello Decorator")))

(hello)
```

これで一通りFlaskでHello Worldくらいの文法は十分だと思うのでFlask動かしてみる。

# Hy + Flask

前述のHyをインストールしたディレクトリでFlaskをインストールしてプログラムを書いていく

```shell
$ pipenv install flask
$ touch app.hy
```

```hy:app.hy
(import [flask [Flask]])

(setv app (Flask __name__))

#@((app.route "/")
  (defn hello []
    (return "Hello World!")))

(app.run)
```


## 実行
```shell
$ pipenv shell
$ hy app.hy
```

もしくは

```shell
$ pipenv run hy app.hy
```

`http://localhost:5000`にアクセスして`Hello World!`が出力されていれば終わり。
【DynamoDB】トランザクションを効かせて書き込みを行う【.Net】

DynamoDBに対してトランザクションを効かせた書き込みをやってみました。

# 書き込む対象
以下のようなテーブルへの書き込みを想定しています。

- Mapテーブル
    - ID対状態を保持
    - 重複作成は禁止
- Logテーブル
    - IDと操作日時と操作内容を保持
    - 1から辿ればMapテーブルを再現できるようにする

# サンプルコード
```cs
private readonly AmazonDynamoDBClient _client;

await _client.TransactWriteItemsAsync(
    new TransactWriteItemsRequest
    {
        TransactItems =
        {
            // マップテーブルへの書き込み
            new TransactWriteItem
            {
                Put = new Put
                {
                    TableName = "Map",
                    Item = new Dictionary<string, AttributeValue>()
                    {
                        { "Id", new AttributeValue { S = /* ID */ }},
                        { "State", new AttributeValue { S = /* 状態 */ }}
                    },
                    ConditionExpression = "attribute_not_exists(Id)" // 重複時は作成不可
                }
            },
            // ログテーブルへの書き込み
            new TransactWriteItem
            {
                Put = new Put
                {
                    TableName = "Log",
                    Item = new Dictionary<string, AttributeValue>()
                    {
                        {"Id", new AttributeValue {S = /* ID */ }},
                        {"DateTimeStr", new AttributeValue {S = /* 操作日時 */ }},
                        {"Operation", new AttributeValue {S = /* 操作内容 */ }}
                    }
                }
            }
        }
    }
);
```

# 感想
.NetでDynamoDBをいじるのはサンプルが見つからなくて結構苦労しますね……。
公式サンプルもインデントがズレているように見えて読みにくいですし、結局コード補完や自力でソース読んで作ってました。
All-in-One WP Migrationエクスポート時に高度なオプションに自動でチェック

サイトをエクスポートする時にMW WP Form等を使っているとメールアドレスを置換されてしまい、意図しないアドレスなってしまう事があります。
以下はエクスポート画面が表示されたら勝手にチェックボックスにチェックしてくれるコードです。

```php


add_action( 'load-toplevel_page_ai1wm_export', 'check_ai1wm_no_email_replace' );

function check_ai1wm_no_email_replace(){
?>
<script>
    window.onload = function() {
        var obj = document.getElementById('ai1wm-no-email-replace');
        obj.checked = !obj.checked;
    };
</script>
<?php
}
?>
```
Elastic Beanstalkで一緒に作ったMySQLの日本語対応

# 1. RDSのページを開いて
左のメニューの`パラメータグループ`を開いて
右上の`パラメータグループの作成`を開いて
- `パラメータグループファミリー`
- `タイプ`
- `グループ名`
を適宜入力して作成

# 2. 作成したパラメータグループを開いて
`フィルタ パラメータ`に`character_`を入力して以下のパラメータを変更して保存

- `character_set_results` : `utf8`
- `character_set_connection` : `utf8`
- `character_set_client` : `utf8`
- `character_set_server` : `utf8mb4`
- `character_set_database` : `utf8mb4`
- `skip-character-set-client-handshake` : `1`

# 3. 日本語対応させたいデータベースを選択して
右上の「変更」を押して
`データベースの設定` > `DB パラメータグループ` に
作ったパラメータグループを割り当てて「次へ」を押し
`変更のスケジュール`から`すぐに適用`を選んで保存

# 4. 一覧から再度データベースを選択して
`設定`タブからパラメータグループを見て
`(同期中)`になったら右上のアクションから`再起動`

# 5. データベースを作り直す
すでに作られたテーブルがある場合文字コードは古いままなので変更するか作り直すか
作り直すなら

```shell-session
$ eb ssh
```
でEC2にログインして

```shell-session
$ mysql -u$RDS_USERNAME -p$RDS_PASSWORD -h$RDS_HOSTNAME -D$RDS_DB_NAME
```
でDBに接続して

```
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ebdb               |
| innodb             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.01 sec)

mysql> DROP DATABASE ebdb;
mysql> CREATE DATABASE ebdb;
mysql> exit
```

てな感じでDBの作り直し
あとはテーブルやらなんやら作り直しておしまい
文献『From Model to FPGA: Software-Hardware Co-Design for Efficient Neural Network Acceleration』を読む。

#目的
Kaiyuan Guo, Lingzhi Sui, Jiantao Qiu, Song Yao, Song Han, Yu Wang, Huazhong Yang1. 
From Model to FPGA: Software-Hardware Co-Design for Efficient Neural Network Acceleration.
2016 IEEE Hot Chips 28 Symposium (HCS) 

この文献は、以下で公開されている。
https://www.hotchips.org/wp-content/uploads/hc_archives/hc28/HC28.22-Monday-Epub/HC28.22.40-Vision-Image-Epub/HC28.22.411-Neural-Net-Accleration-Yao-DeePhi-0821.pdf

ディープラーニングのモデルの処理量を知りたい場合がある。
処理量としては、G-Ops等で示されているのが、扱いやすい。
処理量が記載された文書やサイトは沢山あるが、どれが、語弊のない数値が書かれているか、判断つかないときがある。
少し、情報を集めたいと考えました。
この文献は、ディープラーニングのFPGA実装(xillinx)を検討する場合に役立ちます。
ただし、やや古い情報のため、これをベースに、更に、新しい情報を探されるといいと思います。

　:memo:まず、この文献は、書籍からも参照されていたので、ある程度、信頼できると考えた。以下の方に役立つと思います。

　　　・ディープラーニングのモデルの処理量（GOPSなど）を知りたい人


#よく見る情報

（適宜、追記します。まずは、この文献の存在の紹介が主な意図です。）


|model|Gop|備考|
|:---:|:---:|:---:|
|VGG16<br>Image classification|30.68|13 Conv layers|
|YOLO Tiny<br>General object detection |5.54|9 Conv layers|
|Customized Network<br>Face alignment|0.1046 ※1|9 Conv layers|
※1 資料では、104.6 Mop と記載。

#まとめ
この文献は、よく見ます。
下記の書籍でも、引用されていました。
　「GPUを支える技術　超並列ハードウェアの快進撃[技術基礎]」

#関連（本人）

[DNNのモデル毎の処理量(GOP)をまとめる](https://qiita.com/enoughspacefor/items/83a9eac69f6209daf424)

[良書 「GPUを支える技術　超並列ハードウェアの快進撃[技術基礎]」を読む](https://qiita.com/enoughspacefor/items/31e9461b6a07b484b643)

[文献『AN ANALYSIS OF DEEP NEURAL NETWORK MODELS FOR PRACTICAL APPLICATIONS』を読む。](https://qiita.com/enoughspacefor/items/ea5a3225c6c54c469326)

#今後
適宜、情報を足します。
コメントなどあれば、お願いします。:candy:
意外と知らない！？知ってると快適IntelliJ（PhpStorm）の小技トップ３

# 【第3位】Packageがまとまっちゃうのをフォルダ表示にする
これは多分IntelliJオンリーですが、`Mark Directory as`で`source root`や`test source root`をにして色を付けてやると、下記のように（ちょっと違うのですが、）パッケージがまとまってしまうことがあります。（試しにやってみたらならなかったので困ってます💦）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68254/638c5eb2-d8f3-be8c-f1d7-719498cbc8f4.png)
巨大ソースすぎて、まとまっちゃうと作業できないレベルになってる君！これで一発解消です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68254/2ac35acc-7ae0-0f27-4718-97db6636fdb8.png)
Projectメニューの歯車アイコンをクリックしてみてください。
この例だと`Flatten Packages`のチェックをoffにしてやるとOKですが、あなたの好みの表示に切り替えてみてください。
ついでですが、`Autoscroll from Source`をチェックで、Editのファイルを切り替えるとProjectのメニューもそのファイルの場所にスクロールしてくれて便利です。（不便な場合もありますが）

# 【第2位】💡の対応メニューをすぐ表示して、リファクタ適用する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68254/984c58d7-3024-2ba4-43df-d37fccda08b1.png)
黄色はもってのほか、灰色も撲滅したいって思ってる潔癖症の君！
なみ線がついてるところにカーソルを合わせて、１テンポおいて💡が表示されたら、クリックしてリファクタ案をクリックしてませんか？
`Alt + Enter`ですぐ表示できますよ！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68254/5533271f-cf82-46ce-07ab-e927cf608f85.png)
それと`Fix all **** in file`でファイル内の対象エラーすべて適用するのがおすすめです。

# 【第1位】すぐ消えるふきだし💭の内容をコピーする
なんかしらソースにミスがあると、ここ変だよ！ってふきだし💭が表示されますが、これをコピーしたくて表示されている間にマウスでなどって、Ctrl+Cを連打したにも関わらずクリップボードには何も入っていない...ムキー！って嘆いてる君！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68254/27342b70-728f-7110-a186-fc89758391ce.png)

ふきだし💭の上にマウスカーソルを移動して、`Altキーを押しながらクリック`で、クリップボードにコピーされますよ～

# おわりに
これらすべて自分がとても困ってググった結果でして、この記事が同じ悩みのかたの手助けになれば幸いです。
文献『AN ANALYSIS OF DEEP NEURAL NETWORK MODELS FOR PRACTICAL APPLICATIONS』を読む。

#目的
AlfredoCanziani&EugenioCulurciello,AdamPaszke. 
AN ANALYSIS OF DEEP NEURAL NETWORK MODELS FOR PRACTICAL APPLICATIONS.
arXiv:1605.07678v4.

この文献は、以下で公開されている。
https://arxiv.org/pdf/1605.07678.pdf

ディープラーニングのモデルの処理量を知りたい場合がある。
処理量としては、G-Ops等で示されているのが、扱いやすい。
処理量が記載された文書やサイトは沢山あるが、どれが、語弊のない数値が書かれているか、判断つかないときがある。
少し、情報を集めたいと考えました。

　:memo:まず、この文献は、沢山の情報があり、以下の方に役立つと思う。

　　　・ディープラーニングのモデルの処理量（GOPSなど）を知りたい人


#よく見る情報

下記の図をよく見る。
個人的には、いまの段階では、横軸の値だけが関心事ですが。

（この文献をよく見る理由は、沢山のモデルに関する情報があるため、
個別の情報も正しく、語弊のない記載になっていると期待できるから。）

（適宜、追記します。まずは、この文献の存在の紹介が主な意図です。）

図：引用
Figure 2: Top1 vs. operations, size ∝ parameters. 

<img width="568" alt="fig2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342207/d812f889-3902-6218-08d5-c217bc31acc3.png">

以下のページにて、updateされた情報が公開されている。
https://medium.com/@culurciello/analysis-of-deep-neural-networks-dcf398e71aae

引用：
<img width="530" alt="update2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342207/fd611c2f-c763-345c-4bc2-951fd3fbe977.png">

目分量で、グラフの値を読む。
結果は、以下のとおり。

|model|Gop|備考|
|:---:|:---:|:---:|
|MobileNet-v1 |1.4|※目分量の精度悪し|
|MobileNet-v2 |0.7|※目分量の精度悪し|
|AlexNet |2.2|※目分量の精度悪し|
|GoogleNet |2.5|※目分量の精度悪し|
|ResNet-50 |8.0|※目分量の精度悪し|
|VGG19 |39|※目分量の精度悪し|
|VGG19 |31|※目分量の精度悪し|



#まとめ
この文献は、よく見ます。
よく参照されているのではないでしょうか？
（どこで、この文献にたどり着いたのかは、忘れました。）

#関連（本人）

[DNNのモデル毎の処理量(GOP)をまとめる](https://qiita.com/enoughspacefor/items/83a9eac69f6209daf424)

[良書 「GPUを支える技術　超並列ハードウェアの快進撃[技術基礎]」を読む](https://qiita.com/enoughspacefor/items/31e9461b6a07b484b643)

[文献『From Model to FPGA: Software-Hardware Co-Design for Efficient Neural Network Acceleration』を読む](https://qiita.com/enoughspacefor/items/7de477dc3c1a50d36f2e)

↓　随分、後々の追加（2021/3/19)
[深層学習。GopsとAccuracyの関係グラフ（2系統）。](https://qiita.com/enoughspacefor/items/ec6307cf9a44181b0185):tada:

#今後
適宜、情報を足します。
コメントなどあれば、お願いします。:candy:
pythonであみだくじもどきを作ってみた。

# 前述

会社の飲み会で幹事を決める際に、あみだくじを使用しました。
なかなかいいサイトが見当たらないので、自作を試みましたが線を引くのとか面倒。
なので、単純にスタートの数配列を用意して、それをランダムに入れ替えたものをゴールに設定し、1に行く人が当たりにしました。

これも
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326155/725965bf-2ffb-dd79-33a1-aacebd1246ff.png)

これも
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326155/36ae7641-5459-ed3c-ec9d-a2535bab929c.png)

結果は変わらないので。

# 環境

- CentOS7.5
- Python 3.6.5


# プログラム

``` python
#!/bin/python
# -*- coding: utf-8 -*-

import random

def main() :
    while True :

        print('input number')
        number = input('>>')
        if not number.isdigit() :
            print('wrong number')
            continue

        list = []
        target = []
        for choice in range(1, int(number)+1) :
            list.append(choice)
            print('input name')
            target_name = input('>>')
            target.append(target_name)

        print(list)
        goal_list = random.sample(list, len(list))
        print(goal_list)
        index = goal_list.index(1)
        print("%sさんがあたりです。" % target[index])

        break

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

使用例

```
python3.6 test.py
input number
>>4
input name
>>a
input name
>>b
input name
>>c
input name
>>d
[1, 2, 3, 4]
[4, 1, 2, 3]
bさんがあたりです。
```
AWSのEC2インスタンスにNode.jsを入れる

# 前提
Amazon Linux 2でEC2インスタンスを立てていて、Node.jsをインストールしたかったのですが、他のQiitaの記事のやり方だと古くなっているのか、インストールできなかった為、最新のやり方でインストールしたので備忘録として残します。

# はじめに
Node.jsのパッケージマネージャのnvmをインストールします。
[※AWSの公式チュートリアル参照](https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html)


コマンドラインで次のように入力して、ノードバージョンマネージャー (nvm) をインストールします。

```
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash
```
コマンドラインで次のように入力して、nvm を有効にします。

```
. ~/.nvm/nvm.sh
```

安定版の最新をインストール

```
nvm install stable
```

Node.jsバージョン確認

```
node -v
```

以上で簡単にnode.jsがインストールできました！！
イメージナビゲーションとスライダーの作成方法

今回はこんな感じのスライダーを作成します。
slickについては
[【rails】slickを使ったスライダーの実装](https://qiita.com/milneo/items/3560cb01cba92c2ccb6f)
こちらで説明しております！
![ezgif-1-5f7bcf3b4036.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365973/592fecd4-c1fe-54bb-fa1e-1afc306950eb.gif)


slick以外の基礎知識はJqueryがあれば実装できます！

下のナビゲーション画像は、slick-dotsを使用しております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365973/a091fd8b-5d28-9808-f88e-67f076726a92.png)
この部分です！
なのでデフォルトでスライドナビゲーションがあるのでめっちゃ便利なので是非使ってみてください！


htmlとJqueryの記述だけさらっと

```slider.html.haml
.slick-main
 = image_tag "img1.png"
 = image_tag "img2.png"
 = image_tag "img2.png"
```

```slider.js
$(document).on('turbolinks:load', function(){
  $('.slick-main').slick({
    dots:true,
    customPaging: function(slick,index) {
      var targetImage = $(slick.$slides[index]).attr('src');
      return '<img src=" ' + targetImage + ' "/>';
    }
  });
  $( '.slick-main' ).on( 'mouseenter', '.slick-dots > li', function() {
    $( this ).click();
  });
  $( '.slick-main' ).on( 'mouseover', '.slick-dots > li', function() {
    $( this ).css({
      opacity: "1",
      cursor: "pointer"
    });
  });
  $( '.slick-main' ).on( 'mouseout', '.slick-dots > li', function() {
    $( this ).css({
      opacity: "",
      cursor: ""
    });
  });
});
```
何をしているかと言いますと・・・

```slider.js
  $('.slick-main').slick({
    dots:true,
    customPaging: function(slick,index) {
      // スライダーのインデックス番号に対応した画像のsrcを取得
      var targetImage = $(slick.$slides[index]).attr('src');
      // slick-dots > li　の中に上記で取得した画像を設定
      return '<img src=" ' + targetImage + ' "/>';
    }
  });
```
上記部分はドットを作成して
`customPaging`でページングテンプレートをカスタマイズします。ドットリストの部分ですね！
`(slick,index)`にはご想像の通り、slickのオブジェクト（コード）と、index(数字)が渡されています。Jqueryでは`$`をオブジェクトの前に記述する事でそのHTML要素を取得する事ができます。
参考画像の様に`slick.$slides[index]`でドットのindexナンバーに当たるHTML要素が取得できた事になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365973/67d15bc7-a042-1394-8df9-c20681a6741d.png)

その要素の中のsrc要素を取得する事でドットの対をなす画像が取得できそうですね！`.attr('src')`の`.attr()`はHTMLの要素を指定して取得できるメソッドです！

`return`で`slick-dits li`にHTMLを差し込めば・・・
画像が表示されたでしょうか・？・？
もし表示されなかった場合は、

```slider.js
 customPaging: function(slick,index) {
        // スライダーのインデックス番号に対応した画像のsrcを取得
        var targetImage = slick.$slides.eq(index).find('img').attr('src');
        // slick-dots > li　の中に上記で取得した画像を設定
        return '<img src=" ' + targetImage + ' "/>';
    }

```
としてみてください！

後は、

```slider.js
//マウスポインターが要素に乗ったらクリックする動きでホバーの動きを作成
$( '.slick-main' ).on( 'mouseenter', '.slick-dots > li', function() {
    $( this ).click();
  });
//CSSの変化をつける。
  $( '.slick-main' ).on( 'mouseover', '.slick-dots > li', function() {
    $( this ).css({
      opacity: "1",
      cursor: "pointer"
    });
  });
  $( '.slick-main' ).on( 'mouseout', '.slick-dots > li', function() {
    $( this ).css({
      opacity: "",
      cursor: ""
    });
  });
```

以上となります！
Angularとは

#Angular
![angular.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368226/c103b5fe-f044-eb6b-e5ed-ca44bfff11e6.png)

Googleが開発しているJavaScriptのフレームワークです。
現在（2020/02/20）はVersion9までリリースされているようです。



Wikipediaには
>Angular（アンギュラー）は、Googleと個人や企業のコミュニティによって開発されているTypeScriptベースのオープンソースのフロントエンドWebアプリケーションフレームワークである。

と記載されています。

他にも「Vue」や「React」などありますが、一番大きな違いはフルスタックであることです。
「Vue」や「React」は画面側のフレームワークですが、「Angular」はルーティングなどwebアプリケーションに必要な機能が全て備わっています。
そのため、「Vue」や「React」はフレームワークというよりかは画面側のライブラリという認識でも良いのではないでしょうか。

つまり、「Angualr」を使うだけでwebアプリの開発ができると言うことです。

#AngularJSとAngular
調べていると、AngularJSとAngularが出てきて、何が違うんだ？となったので簡単に調べておきました。
AngularJSも同様にGoogleが開発していましたが、多くの欠点があったためAngularJSを構築した開発者がコードを１から書き直したようです。
一部の機能は受け継がれていますが、基本的には別のフレームワークとして考えたほうが良いみたいです。

#Angularの特徴
####Angularは全てのプラットフォームで動作する。動作環境を意識をする必要がない。
  - Web、モバイルWeb、ネイティブモバイル、ネイティブデスクトップ全てのプラットフォームで動かすことが可能です。

---
####SPA（Single Page Application）の開発に向いている。
 - 最近よくみるリッチで良い感じのサイトですね。
 - 例えばこういう[サイト](https://2019.kfug.jp/)

---

####双方向データバインディング
  - 非常に少ないコードで機能を実装できてしまったので、感動しました。
  - `[(ngModel)]="name"`と記述するだけで、nameプロパティと双方向データバインディングされています。


####コンポーネント思想のアーキテクチャ
![cdk.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368226/5899ac16-456c-6cbd-814a-1cdd1483dc17.png)

 - 簡単に言うと複数のコンポーネントを積み重ねて、モジュールを作成する思想ですね。一つの大きいコンポーネント内に様々なコンポーネントを含有する感じです。

---

####RxJS
 - Observables というアーキテクチャを用いたリアクティブ・プログラミング用のライブラリで、非同期処理を簡潔かつ可読性高くコーディング出来るやつです。


#開発するために知っておいたほうが良いこと
####TypeScript

- JavaScriptに静的型付けを与えてくれるJavaやC#などオブジェクト指向経験者が嬉しいやつです。
- Angularは基本的にこれを使っていきます。

####Angular CLI
![cli.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368226/f069fbb1-1e85-b97b-5c19-0a6ff8f55777.png)

- Angularアプリのプロジェクト生成や実行などが行えるコマンドラインツールです。簡単に雛形を作ったりしてくれて、開発が楽チンです。

---

####Ionic
![eyecatch_ionic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368226/861082ad-7941-c972-105b-849427d10f66.png)

- Google社のAngularをベースに作成されたHTML5ハイブリッドモバイルアプリの制作に便利なフレームワークです。
- ちなみにアイオニックと読みます。

#参考サイト
[Angular](https://angular.jp/)
[Angular Wikipedia](https://ja.wikipedia.org/wiki/Angular)
[Angular開発の強力サポートするコマンドラインツール「Angular CLI」の活用法](https://codezine.jp/article/detail/10795)
[Angularの学習コストは本当に高いのか](https://lacolaco.hatenablog.com/entry/2019/02/19/001547)
[プロトタイプ制作にも使えるモバイルフレームワーク「Ionic」を便利に使うコツ](https://www.webprofessional.jp/5-ionic-app-development-tips-tricks/)
[Ionic](https://ionicframework.com/)
herokuで本番環境にデータ投入

#概要
Railsでタスク管理アプリケーションを作成していました。
予め本番環境にユーザー情報を登録しておきたいと考え、seedしようとしたところエラーが出たので、エラーの原因と解決方法をまとめました。

## 環境
・Ruby 2.5.1
・Rails 5.2.1
・DB postgresql
・heroku

##エラー内容
seed.rbに以下のユーザーのデータを記述

```
User.create!(
  name: 'test',
  email: 'test@example.com',
  admin: false,
  password: 'password',
  password_confirmation: 'password'
  )

User.create!(
  name: 'admin',
  email: 'admin@example.com',
  admin: true,
  password: 'password',
  password_confirmation: 'password'
  )

```

ターミナルで

```
rake db:seed RAILS_ENV=production
```

と実行したところ

```
rake aborted!
ActiveRecord::NoDatabaseError ~~~

Caused by:
PG::ConnectionBad: ~~~
```

と表示されました。
DBの変更が反映されていないのかと考え、**heroku run rake db:migrate**を実行しましたが変化はなくここは問題なし。
本番環境だけ反映させるため、RAILS_ENV=productionと記述したところが間違っているのかと思い、色々試しましたがうまくいきませんでした。

##解決方法
以下のコマンドで解決しました。

```
heroku run rake db:seed

Running rake db:seed on ⬢ sample_app... up, run.0000 (Free)
~~
```

結論としては、herokuの場合はherokuの仕様に沿ったコマンドを実行しなければならないと言うことです。
AWSでデプロイしている場合であれば、**rake db:seed RAILS_ENV=production**で問題ないと思われます。

##まとめ
初めてherokuを利用すると、AWSでデプロイする時とは異なる点が多く、またターミナルからgitを操作することも必要になってきます。
ただ、エラーを解消しながら進めることで、herokuやgitへの理解がエラー解決の過程で深まっていくので、一度herokuでアプリケーションをデプロイしてみると勉強になると思います。
Magic Leap MagicScript Landscape Application. AudioNode

**Prepare**
Magic Leap One
https://www.magicleap.com/magic-leap-one

mlsdk v.0.20.0
https://creator.magicleap.com/downloads/lumin-sdk/overview

magic-script-cli v2.0.1
https://www.npmjs.com/package/magic-script-cli

magic-script-polyfills v2.1.1
https://www.npmjs.com/package/magic-script-polyfills

mp3 file
https://www.bensound.com/royalty-free-music/track/pop-dance


**Create Project**

```
magic-script init my-sound org.magicscript.sound "Audio Sound"
cd my-sound
mkdir res
```
Put mp3 file in res folder. (Renamed to audio.mp3)

**Code**
Change app.package

```
DATAS = "digest.sha512.signed" : "." \
        "bin/" : "bin/" \
        "res/" : "res/"
OPTIONS = package/minApiLevel/2
```
Change app.js

```javascript
import { LandscapeApp, ui } from 'lumin';
const { UiButton } = ui;

export class App extends LandscapeApp {
  onAppStart () {
    const prism = this.requestNewPrism([0.5, 0.5, 0.5]);
    const button = UiButton.Create(prism, 'PLAY', 0, 0.1);
    const resource = 
               prism.createLoadedFileAudioResourceId("res/audio.mp3");
    const audio_node = prism.createAudioNode();
    const isCreateAudio = 
               audio_node.createSoundWithLoadedFile(resource);
    let isPlay = false;
    
    button.onActivateSub(function (uiEventData) {
        if (isCreateAudio && !isPlay)
        {
            isPlay = true;
            audio_node.startSound();
            button.setText("STOP");
        }
        else if (isCreateAudio && isPlay)
        {
            isPlay = false;
            audio_node.stopSound();
            button.setText("PLAY");
        }
    });
    prism.getRootNode().addChild(button);
  }
}

```

**Build**

```
magic-script build -i
```

**Run**

```
magic-script run --port=10000
```

**Reference**
AudioNode (MagicScript API)
https://docs.magicscript.org/lumin.AudioNode.html

magicscript
https://www.magicscript.org/

Thanks!
Windows Server 2012 R2 構築における問題解決

##リモートデスクトップに入れない
解決: ①+②
①ネットワークレベルのみのところにチェックをはずす。
②ファイアウォールでリモートデスクトップのパブリックにもチェックを入れる。

##システム更新でフリーズ
解決: 保留中のPKGを解除する。
操作: セーフモードにて、管理者コマンドプロンプトにて「dism /image:[イメージが処理されたドライブ。例：C]:¥ /cleanup-image /revertpendingactions」とenter。
[EC-CUBE4]トップ画面スライダー画像を管理画面から差し替える

# 環境

EC-CUBE4.0.2

# やりたいこと

EC-CUBE4のトップ画面のスライダ画像を差し替えたい。
![](https://i.gyazo.com/f2e1e781346b8052189138f05fb9ece6.png)

# 手順

- 画像を用意する
- 画像をアップロードする
- スライダ定義画像タグを編集する

## 画像を用意する

横:1090px 縦:463pxの画像を1枚以上用意します。

初期状態で利用されている画像ファイルはこれより大きいですが実際の表示はこれが最大のようです。
また、スマホ表示時でも同じ画像ファイルが縮小されて表示されます。

## 画像をアップロードする

用意した画像を「ファイル管理」機能でアップロードします。

任意の場所でよいのですが、以下は初期状態から存在する `user_data / assets / img`の下に`slider`ディレクトリを作成して、slider01.png,slider02.pngという名前で配置した例です。

![](https://i.gyazo.com/c685e4934b8b73e1edf59f5ccd91bfca.png)

## HTMLタグ定義

スライダ画像を定義しているタグを「ページ管理」機能で編集します。

`管理サイト > コンテンツ管理 > ページ管理 > TOPページ` で コードの108行目のmain_visualクラスが設定されたタグ内にアップロードした画像定義を反映します。

![](https://i.gyazo.com/a0c088a8de1a16119dc2bc1ed9359b12.png)

例えばファイル管理機能で画像をアップロードした場所が`user_data/assets/img/slider`で、表示したい画像が２枚、ファイル名がそれぞれ slider01.png , slider02.png とすると以下のような定義となります。

### 変更前

```html
        <div class="main_visual">
            <div class="item slick-slide"><img src="{{ asset('assets/img/top/img_hero_pc01.jpg') }}"></div>
            <div class="item slick-slide"><img src="{{ asset('assets/img/top/img_hero_pc02.jpg') }}"></div>
            <div class="item slick-slide"><img src="{{ asset('assets/img/top/img_hero_pc03.jpg') }}"></div>
        </div>
```

### 変更後

```html
        <div class="main_visual">
            <div class="item slick-slide"><img src="/html/user_data/assets/img/slider/slider01.png"></div>
            <div class="item slick-slide"><img src="/html/user_data/assets/img/slider/slider02.png"></div>
        </div>
```
for model in model_or_iterable: TypeError: 'type' object is not iterable とかいうエラーが出た

djangoでフォロー機能を実装しているとき、中間テーブルの値を取り出したくて(というかフォローしてるかどうか調べたかった)、

```view.py
result = followAndFollower.objects.filter(follower__username=context['user'].username).filter(follow__username=username)
```

と書いたところ、

**for model in model_or_iterable: TypeError: 'type' object is not iterable**

とかいうエラーが出た。
Django初心者なので、ん、.objectsって書き方間違ってる？
とか、
英語初心者なので、objectsのスペル違う？
とか色々調べたが解決せず。

とほほ、と途方にくれながら、エラーメッセージ全文コピぺしてgoogleに聞いたところ、
以下のようなサイトが....

[stackoverflow](https://stackoverflow.com/questions/52461137/seeing-error-register-for-model-in-model-or-iterable-typeerror-type-object-i)

これによると、
*you forgot to subclass it from models.Model*
(お前models.Model書くの忘れてんちゃう？)

とのこと。まさかそんなことするわけ、初心者だしそんな変なことしてねえよと思い恐る恐るmodels.pyを見てみると、、、

```models.py
class followAndFollower():
```
あっ、、、、、土下座

ということでそもそもテーブルすら作られてなかったっぽい、南無。

そもそもエラーメッセージをターミナルで毎回確認しているんですが普通はどうやってチェックするんだ？初心者過ぎて何もわかりません泣
誰か教えていただけると泣いて喜びます。
HoloLensアプリ開発手順　備忘録（カーソル、エアタップ）

# はじめに
すでに沢山の方が開発手順の記事を記載してますが、個人の知識整理として投稿します。
※2019/05/15時点の記事になります。

１．Unityでプロジェクトを作成する
２．プロジェクトにMRTKをインポートし、Mixed Realityプロジェクト用の設定にする
３．Input Managerを追加する
４．カーソルを追加する
５．エアタップを認識させる

# 環境
Unity：2017.4.27f1 Personal(64bit)
MRTK：[HoloToolkit-Unity-2017.4.3.0-Refresh.unitypackage](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases)


# MRTKをインポートし、Mixed Realityプロジェクト用の設定にする
Unityで3Dプロジェクトを作成したら、メニューバーから「Assets」→「Import Package」→「Custom Package...」を選択する。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401360/8badf386-1938-defe-79d8-eabd6eca94af.png)
ファイル選択ダイアログが表示されるので、ダウンロードしたMRTKのパッケージを選択し、インポートする。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401360/d7ea3183-e6e5-b816-cb68-f55beea4acb1.png)
インポートするとメニューバーに「Mixed Reality Toolkit」が追加されるので、「Mixed Reality Toolkit」→「Configure」→「Apply Mixed Reality Project Settings」を選択する。これを選ぶとMixed Reality用のセットアップを行ってくれる。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401360/a3d08b4e-5d57-d4e1-9d75-2261bf71e10b.png)

# Input Managerを追加する
Input ManagerはHoloLensの入力系を制御するオブジェクトとのことで、ジェスチャの認識やカーソル、視線などを制御できるようになるとのこと。

１．ProjectウインドウのHoloToolkitにあるInputManagerオブジェクトをHierarchyウインドウに追加する。
　InputManagerオブジェクトはHoloToolkit/Input/Prefabs/の配下にある。

# カーソルを追加する
視界の中心にカーソルを表示する。
PCで言うところのマウスポインタの役割を果たす。

１．ProjectウインドウのHoloToolkitにあるCursorオブジェクトをHierarchyウインドウに追加する。
　CursorオブジェクトはHoloToolkit/Input/Prefabs/Cursor/の配下にある。


２．HierarchyウインドウでInputManagerを選択し、InspectorウインドウにInputManagerの情報が表示されている状態にする。

３．HierarchyウインドウのCursorオブジェクトを、Inspectorウインドウの「Simple SinglePointer Selector(Script)」内の「Cursor」にドラッグアンドドロップする。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401360/aa510866-0d9d-07da-6619-027ea103ec5b.png)
これでカーソルが表示される。


# エアタップでオブジェクトに干渉する
オブジェクトに対しエアタップジェスチャによる干渉する。

１．エアタップで干渉したいオブジェクトに対し、C#スクリプトを追加する。
　Hierarchyウインドウで干渉したいオブジェクトを選択し、Inspectorウインドウの下にあるAdd Componentを押下。
　new scriptを選択してC#スクリプトを追加する。

２．C#スクリプトでゲームオブジェクトにIInputClickHandlerインターフェースを追加する。
　手順２で追加したC#スクリプトを開き、オブジェクトにIInputClickHandlerインターフェースを追加する。

```
using UnityEngine;
using HoloToolkit.Unity.InputModule;    // InputModuleをusingで追加しておく

public class GestureTest : MonoBehaviour, IInputClickHandler {  // IInputClickHandlerを追加

    // OnInputClickedイベントを追加する（これがエアタップされた時にイベントハンドラとして呼ばれる）
    public void OnInputClicked(InputClickedEventData eventData)
    {
        // ここにエアタップされた時の処理を記述（以下はオブジェクトのカラーを赤に変えている）
        GetComponent<Renderer>().material.color = Color.red;
    }

    // Use this for initialization
    void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}
```

上記の様にIInputClickHandlerを追加することでOnInputClicked()が実装される。
エアタップするとこのOnInputClicked()がイベントハンドラとして呼びだされる。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401360/6c0ce18d-589c-2d43-da49-47088a670aa1.png)

オブジェクトをエアタップすると

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401360/093de7ee-070e-bf1c-d8b6-00b9bc4268ef.png)

色が変わる（エアタップというジェスチャを認識し、イベントハンドラの処理が行われた。）
netshで確認できるprefixpoliciesの一覧について(IPv6)

#概要
調べてみると意外と出てこなかったため作成。
(知識しっかりあるわけではないので間違ってたりしたらコメントで教えて下さい。お願いします)


```
C:\Windows\system32>netsh interface ipv6 show prefixpolicies
アクティブ状態を照会しています...

優先順位   ラベル  プレフィックス
----------  -----  --------------------------------
        50      0  ::1/128
        40      1  ::/0
        35      4  ::ffff:0:0/96
        30      2  2002::/16
         5      5  2001::/32
         3     13  fc00::/7
         1     11  fec0::/10
         1     12  3ffe::/16
         1      3  ::/96
```

これに対しての対応関係は次の通りらしい.

|優先順位|ラベル|プレフィックス|割り当て|IPv4に該当する割り当て|(コメント)|
|----|---|---|---|---|---|
|50|0|::1/128|||IPv6用ループバックアドレス,いわゆるlocalhost.
|40|1|::/0|||[デフォルトルート？](https://www.wdic.org/w/WDIC/%3A%3A/0)
|35|4|::ffff:0:0/96|[IPv4射影アドレス](https://www.wdic.org/w/WDIC/IPv4%e5%b0%84%e5%bd%b1%e3%82%a2%e3%83%89%e3%83%ac%e3%82%b9)
|30|2|2002::/16|6to4 [※Historical](https://tools.ietf.org/html/rfc7526)
|5|5|2001::/32|Teredo||いわゆる6to4系の技術の一つっぽく,v4内ではNAT変換も通るとか([RFC 4380](https://tools.ietf.org/html/rfc4380))
|3|13|fc00::/7|[ユニークローカルユニキャストアドレス](https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%8B%E3%83%BC%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9)|プライベートアドレス|IPv6でプライベートアドレスを使うならいりそう
|1|11|fec0::/10|サイトローカルユニキャストアドレス（廃止）|プライベートアドレス|fc00::/7の発行と同時に消えたっぽいですね([RFC 3879](https://tools.ietf.org/html/rfc3879))
|1|12|3ffe::/16|6bone - IPv6 の実装実験用（廃止）|
|1|3|::/96|IPv4互換アドレス（廃止）|


#まとめ
標準のままだと廃止やらHistorialやらが堂々と混ざってますねこれ（－ω－
IPv6、IPv4がNGWまで通っている方は以下の作業をしても問題ないかもしれません（？）

- 場合に応じてラベル13を入れ替え
- ラベル2,3,11,12の削除
- ラベル5の削除(これはちょっと自信ないです)

#出典
- [Wikipedia - IPv6 アドレス割当のまとめ](https://ja.wikipedia.org/wiki/IPv6#%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9)
- [Wikipedia - ユニークローカルアドレス (ULA: unique local address)](https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%8B%E3%83%BC%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9)
- [通信用語の基礎知識 - サイトローカルユニキャストアドレス](https://www.wdic.org/w/WDIC/%e3%82%b5%e3%82%a4%e3%83%88%e3%83%ad%e3%83%bc%e3%82%ab%e3%83%ab%e3%83%a6%e3%83%8b%e3%82%ad%e3%83%a3%e3%82%b9%e3%83%88%e3%82%a2%e3%83%89%e3%83%ac%e3%82%b9)
- [通信用語の基礎知識 - ::1](https://www.wdic.org/w/WDIC/%3A%3A1)
- [IANA - IPv6 Address Space](https://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml)
- [IANA - IPv6 Special-Purpose Address Registry](https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml))  
- https://www.wdic.org/w/WDIC/IPv4%e5%b0%84%e5%bd%b1%e3%82%a2%e3%83%89%e3%83%ac%e3%82%b9
HTMLからJSに配列データを渡す(C#を使ったASP.NET MVCとEntityFrameworkでの応用もちょこっと）

#HTML上のデータを配列で取得する方法。
大きく分けて2種類紹介します。
下記のデータをk=["ss","ss","ss"]と取得する方法を２種類紹介します。
結論から言うとgetElementsByClassNameだけでいい気もします。

##getElementsByClassNameを用いて取得する方法
こちらで取得するのがよいそうです。

```html:test.html
    <input class="hiddata" value="ss" />
    <input class="hiddata" value="ss" />
    <input class="hiddata" value="ss" />
```

```javascript:tes.js
    var k = [];
    for (var i = 0; i < 3; i++) {
        k.push(document.getElementsByClassName('hiddata')[i].value);
    }
```


##getElementByIdを用いて取得する方法
idは一意であることが好ましいらしいとのことなので、idを配列のように記述し取得する方法です。


```html:test.html
    <input id="hiddata3[0]" value="ss" />
    <input id="hiddata3[1]" value="ss" />
    <input id="hiddata3[2]" value="ss" />
```

```javascript:tes.js
    var k = [];
    for (var i = 0; i < 3; i++) {
        k.push(document.getElementById('hiddata3['+i+']').value);
    }
```

#解説
上記の方法は仕組みが少し異なります。
"getElementsByClassName"で取得を試みると、同名のクラスが**自動的に配列になります**。
"getElementById"で取得を試みると、**同名の値を１つだけ取得します**。（idは一意であるという原則があるから）
そこで、ループを用いて**idの名前を書き換えることで複数の値を取得**しています。

#補足１：なぜvalueを付けなければいけないのか？
getElement●●で取得したばかりのものはHTMLCollectionという形式で保存されており、**直接値の取得はできません**。
試しに以下のように記述し、取得を試みると、画像のようにHTMLCollectionという型のデータであることが分かります。

```html:test.html
    <input class="hiddata" value="ss" />
    <input class="hiddata" value="ss" />
    <input class="hiddata" value="ss" />
```

```javascript:tes.js
    var example = document.getElementsByClassName('hiddata');
```

![cc1f09b8d54c3a998f04e52b219ef94e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361263/e257952a-e376-d4fa-8534-94e5bd4160ab.png)

よって、hiddata[0].valueとすることによって"ss"というデータを取得できます。
これをループによって繰り返し取得し、k=["ss","ss","ss"]の取得ができるようになります。


#補足2：ASP.NET MVC+EntityFrameworkでの取得例
"getElementById"での取得は違う名前のidをたくさん取得する必要があるので、多少手間です。
ASP.NET MVC+EntityFrameworkを活用すればDBの情報を下記のように取得できます。

１．DBの情報をリストにしてViewBagに詰める

```c#:tes.cs
        public ActionResult Test()
        {
            var tes = db.Cleaner.Select(m=>m.Cgroup).Where(m=>m.HasValue).Distinct().ToList();
            ViewBag.tes = tes;
            return View();
        }
```

２．隠しデータ(type="hidden")という形でこっそり渡す

```html:tes.cshtml
@using (Html.BeginForm("Test", "Index"))
{
    var s = 0;
    foreach (var item in @ViewBag.tes)
    {
        <input type="hidden" id='hiddata[@(s)]' value="@item" />
        s += 1;
    }
}
```

３．jsで取得

```javascript:tes.js
    var k = [];
    for (var i = 0; i < 3; i++) {
        k.push(document.getElementById('hiddata['+i+']').value);
    }
```



#後記
四苦八苦しながら習得した方法なので、使うならgetElementsByClassNameさえ使えれば大丈夫です。
AVRマイコンでいろいろやる②-1　シリアル通信1

# マイコンからのデータ送信
マイコンからマイコンROM内の一定の数値を受け取って
PCの画面に出力します。

通信設定は
ボーレート：250kbps
パリティ：なし
ビット数：8Bit
ストップビット：1bit
です。マイコンとPC側で同じ設定をします。

マイコンに書き込むプログラムは以下です。

```C:main.c
#include <avr/io.h>
#include <avr/interrupt.h>　//まだいらない

int main(void)
{	
	UCSR0B = 0b00001000;//USART送受信ENA/DIS設定
	UCSR0C = 0b00000110;//USART各通信設定
	UBRR0 = 4;//システムクロック20MHz、ボーレート250kbps設定
	while(1)
	{
		while ( !(UCSR0A & (1<<5)) );//送信バッファが空くまで待機
		UDR0 = 0x77;//0x77をPCに送信
	}
}
```

各レジスタ値の役割はATmega328Pのドキュメントを見ると書いてあります。
（面倒なので省略してしまいます。）


ちなみにADC変換速度を基にするとボーレートは

```math
16f_{sample} [\rm bps]
```

で求まります。（16は8bit×2バイト分、ADCの分解能が10bitに因る）
ADC最大分解能サンプリング周期：15kSample/s
より240kpbsは必要です。かつかつです。


PC側はC#で作っていきます。
C#でシリアルポート通信するのは初めてなので、
うまく行くか心配です。

```C#:Program.cs
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OnBoardTester
{
    class Program
    {
        static void Main(string[] args)
        {
            //受信Only
            SerialPort serialPort = new SerialPort("COM3", 250000, Parity.None, 8, StopBits.One);
            serialPort.Open();

            while (true)
            {
                System.Console.WriteLine(serialPort.ReadByte().ToString("x2")+"\n");
            }
        }
    }
}
```

[こちらのページ](https://qiita.com/mag2/items/d15bc3c9d66ce0c8f6b1)を参考にしました。

そして回路はこんな感じです。

![IMG_20190516_001830.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416780/216ae80b-fa2d-73d5-84b9-edabec30a94f.jpeg)

TXDとRXDつなげときゃ動くかくらいの感覚です。
ということでPCにつないで、C#のプログラムを起動します。
![20190516_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416780/b165d873-b270-2f13-9e4a-7e1751b346d8.png)

マイコンからの信号を受信することができました!!!!!!

以上です。
次回は地獄のトラブルシューティングが始まります。
AOJ ITP1_11_B: Dice II サイコロ問題

Dice II | Aizu Online Judge
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_11_B

サイコロは下記の画像の展開図で考える、これは偶数ならY軸に1回転、奇数ならX軸に1回転と交互にループさせていくので、for文との相性が良い。
6回繰り返すことで、元に戻る。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44761/2ee2b9be-e2af-2bdf-1b0e-bbe762b7b185.png)

この問題は
AOJ ITP1_11_A: Dice I サイコロ問題を再利用して解く。

新たに加わった関数getRightを解説すると、
クラスCubeとトップ面、フロント面を引数としてとる。

処理としては、
外側のループは、サイコロの全面を調べる。6回。
内側のループは、サイドをZ軸回転ですべて調べるので4回。
中、サイドを調べるループの2重ループでオーダーはO(n^2)

もし、トップ（c1.f[0]）とフロントc1.f[1]が一致した場合、サイド（c1.f[2]）の値を返す。

```dice2.cpp
if (i % 2 == 0)
    c1.roll_y();
else
    c1.roll_x();
```
for文に従って偶数のときはY軸を回転させて、奇数のときはX軸を回転させている。
これでこのサイコロは西北西北西北と移動を繰り返し、元に戻る


# 参考
オンラインジャッジではじめるC/C++プログラミング入門 p239

```dice2.cpp
# include <bits/stdc++.h>
using namespace std;

class Cube {
   public:
    int f[6];  //サイコロ
    Cube() {}  //コンストラクタ
    void roll_z() { roll(1, 2, 4, 3); }
    void roll_y() { roll(0, 2, 5, 3); }  // to W
    void roll_x() { roll(0, 1, 5, 4); }  // to N
    void roll(int i, int j, int k, int l) {
        int t = f[i];
        f[i]  = f[j];
        f[j]  = f[k];
        f[k]  = f[l];
        f[l]  = t;
    }
    void move(char ch) {
        if (ch == 'E')
            for (int i = 0; i < 3; i++) roll_y();  // Wを３回
        if (ch == 'W') roll_y();
        if (ch == 'N') roll_x();
        if (ch == 'S')
            for (int i = 0; i < 3; i++) roll_x();  // Nを３回
    }
};

int getRight(Cube c1, int top, int front) {
    for (int i = 0; i < 6; i++) {
        for (int j = 0; j < 4; j++) {
            if (c1.f[0] == top && c1.f[1] == front) return c1.f[2];
            c1.roll_z();
        }
        if (i % 2 == 0)
            c1.roll_y();
        else
            c1.roll_x();
    }
    return -1;
}

int main() {
    Cube   c;    // サイコロ
    string com;  // 命令

    // 入力
    for (int i = 0; i < 6; i++) cin >> c.f[i];  // サイコロの面
    int q;
    cin >> q;  // 質問回数

    // データ入力
    int top, front, side;
    for (int i = 0; i < q; i++) {
        cin >> top >> front;
        cout << getRight(c, top, front) << endl;
    }
    return 0;
}

```

### 感想
最初は全面を舐める方法を考えループを考えるのに、頭の中がごちゃごちゃしてしまったが、
class Cubeのmove関数を利用することでうまく解くことができる。
また展開図を画像のとおりに合わせることでfor文が綺麗に書ける。

サイコロ問題3,4は簡単すぎるので省略。
JuliaをDebugする

Juliaを[Juno](http://docs.junolab.org/latest/index.html)を使って[Atom](https://atom.io/)上でdebugします。現段階では、Atomのみの対応でVScodeとかには対応してないみたいです。

こんなかんじ↓　引用元：http://docs.junolab.org/latest/man/debugging/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266140/1f934675-d61b-79e3-52c1-7a5805f90268.png)

### やること
1. Atomをインストールする。
2. [uber-juno](https://atom.io/packages/uber-juno)というパッケージをインストールする
3. Atomの上にあるメニューから、Julia > Open ConsoleとしてEnter (juliaのPATHが通ってないとなにもおこらない)
4. ３で開いたコンソールから以下のように入力してデバッグ開始

```julia:test.jl
module Test
    function sayHello()
        println("Hello World")     
    end
end
```

```julia:REPL
julia> include("test.jl")
julia> using .Test
julia> Juno.@enter Test.sayHello()
"Hello World"
```

####結論
Atomを使います:bride_with_veil:
v-modelの値をループ内で動的に指定したい

# やりたいこと
`v-for`のリストの中の`input`の`v-model`を個別に指定したい。
さらにその値を`vuex store`に入れたい。

```vuejs
<template>
  <div>
    <dl v-for="n in 10">
      <dt>第{{n}}位</dt>
      <dd>
        <input v-model="/* ここをなんとかしたい */">
      </dd>
    </dl>
  </div>
</template>
```

# 方法1. `v-for`をあきらめる。

```vuejs
<template>
  <div>
    <dl>
      <dt>第1位</dt>
      <dd>
        <input v-model="rank1">
      </dd>
      <dt>第2位</dt>
      <dd>
        <input v-model="rank2">
      </dd>
      <!-- 中 略 -->
      <dt>第10位</dt>
      <dd>
        <input v-model="rank10">
      </dd>
    </dl>
  </div>
</template>

<script>
export default {
  data() {
    return {
      rank1: '',
      rank2: '',
      // 中略
      rank10: ''
    }
  }
}
</script>
```

**いやだ！やりたくない！**
[YAMEKUDASTOP!!](https://twitter.com/minano_shu/status/1128546022076981248)

# 方法2. オブジェクト化する

```vuejs
<template>
  <div>
    <dl v-for="n in 10">
      <dt>第{{n}}位</dt>
      <dd>
        <input v-model="ranks['rank' + n]">
      </dd>
    </dl>
  </div>
</template>

<script>
export default {
  data() {
    return {
      ranks: {
        rank1: '',
        rank2: '',
        // 中略
        rank10: ''
      }
    }
  }
}
</script>
```

HTML部分がものすごくすっきりします。
ただ、

> 現代の JavaScript の制約のため、Vue はプロパティの追加や削除を検出することはできません。

ということもあるので、オブジェクトを使いたくない場合もあるかもしれません。

# 方法3. `$data`を使う

```vuejs
<template>
  <div>
    <dl v-for="n in 10">
      <dt>第{{n}}位</dt>
      <dd>
        <input v-model="$data['rank' + n]">
      </dd>
    </dl>
  </div>
</template>

<script>
export default {
  data() {
    return {
      rank1: '',
      rank2: '',
      // 中略
      rank10: ''
    }
  }
}
</script>
```
言われてみれば「あ〜」って感じなのですが、気づきませんでした。
配列にもならないので変更検知も簡単です。

# おしまい
YAMEKUDASTOP言いたかっただけ感ありますね。
[OYASLEEPNASAI !!](https://twitter.com/evanshohappy_2/status/1128618336961449984)

# 参考
[Dynamic v-model directive #1056](https://github.com/vuejs/vue/issues/1056)
（「ヘルプフォーラムじゃねーぞ」って怒られてますね）
PowerApps と App Makerを比較してみる -Day0

# 目的
今回はMicrosoft PowerApps大好きな私が、Google GSuiteに含まれるApp Makerを利用してアプリを作成することで、それぞれの長所・短所を比較することを目的としています。

なお、PowerApps側のCanvasアプリ相当のアプリを作るまでに留めます。モデル駆動型のようなアプリがApp Makerで作成可能か不明ですが、簡単なフォーム・リストアプリ、可能であればWorkflowを交えたデータ取得等も行います。
*BIは今回は対象外としています。ごめんなさい。


# 参考資料
- [App Maker Guide](https://developers.google.com/appmaker/overview)
- [App Script Guide](https://developers.google.com/apps-script/)
- [Google Data Studio関連ブログ](https://ledge.ai/ga_datastudio/)

# Day 0
初日はG Suiteのセットアップで終了しました。
無料で14日間利用できるので、２週間でどこまでできるか試してみます。
**注意: G Suite BusinessじゃないとApp Makerは試せないです。**

簡単に調べてわかったのは、

PowerApps &harr; App Maker
Microsoft Flow &harr; App Script
Power BI &harr; Google Data Studio

こんな関係にあるということです。

また、App Makerを利用するためには、**Cloud SQL** というサービスが前提になるようです。 Power Platformの中でのCommon Data Serviceのような役割だと考えられます。(実際にはただのMySQLなのでAzure SQLのほうが近いかも)
![Screen Shot 2019-05-15 at 11.04.02 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/80cb9d88-ff7c-3588-f715-6213f624c3df.png)


作成したアプリは、PowerAppsだとDynamicsのポータルか、PowerAppsポータルに表示されますが、App Makerのアプリは、企業(テナント)の[G Suite Marketplace](https://gsuite.google.com/marketplace)に発行されるようです。

## Cloud SQLのインスタンス作成
設定でだいぶ時間を使ってしまいましたが、Day0でなんとか終わらせておきたい項目です。
Cloud SQLのインスタンス作成は、まずGoogle Cloud Platformのコンソールで、SQLを選択し、「インスタンスを作成」をクリックします。
![Screen Shot 2019-05-15 at 11.52.05 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/6c72019d-5a3c-b040-4c29-9bc3765dfea0.png)
![Screen Shot 2019-05-15 at 11.50.50 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/d78a4fa5-8452-360b-2b32-127eb8b290c5.png)

PostgreSQLかMySQLを選べますが、ここではMySQLにしました。

![Screen Shot 2019-05-15 at 11.54.15 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/c19d5658-3fca-f1ae-79bf-d7c2a085260f.png)

## 一応App Makerも使えるか確認
App Makerの開始方法は[こちら](https://www.apps-gcp.com/how-to-appmaker/)を参考にしました。

![Screen Shot 2019-05-16 at 12.05.15 AM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/21c69058-dbc8-ce6c-b4bb-484c35448e8e.png)
アクセスできたー！ということで完了です。
明日以降アプリを作成していきます。
tblsのカラム名コメント登録をサボる

tblsを使ってDDLを管理し始めたのですが、同一のカラム名でカラム名コメントが揺れたり、新規テーブルを作ったときにコメント名を一から入力するのが面倒だったので、Pythonの勉強がてらツールを書きました。

## 環境
- tbls 1.14.0
- macOS Mojave 10.14.3
- Python 3.6.5
- pipenv 2018.11.26

## 準備
1. https://github.com/watarukura/tbls-util を`git clone`します。
2. 必要なツールを準備します。Macならいずれも`brew`でインストールできます。
    - tbls
    - direnv
3. `.envrc`にDBへの接続情報を記載します。↓MySQLのとき

```bash
$ cat .envrc
export USER=username
export PASSWORD=password
export DATABASE=dbname
export HOST=localhost

```

PostgreSQLのときは、connection.ymlのdsnを書き換えてください。

```diff
---
- dsn: mysql://${USER}:${PASSWORD}@${HOST}:3306/${DATABASE}
+ dsn: postgres://${USER}:${PASSWORD}@${HOST}:5432/${DATABASE}
docPath: ./dbdoc

```

v1.14.0でAmazon Redshiftにも対応いただけました！多謝！

```diff
---
- dsn: mysql://${USER}:${PASSWORD}@${HOST}:3306/${DATABASE}
+ dsn: redshift://${USER}:${PASSWORD}@${HOST}:5439/${DATABASE}
docPath: ./dbdoc

```


## 使い方
1. `make doc`でDBドキュメントを生成します。
2. `make lint` でテーブル名コメント・カラム名コメントが付与されていない一覧を出力します。
3. `make dupcheck` で同一カラム名でカラム名コメントが複数あるもの一覧を出力します。
4. `make completion` でカラム名コメントが付与されていないカラムに、カラム名コメントを以下のルールで付与します。
    - 同一のカラム名と同じカラム名コメントを追加
        - カラム名コメントが複数ある場合はそのうちの一つ
    - 初出のカラム名の場合は'###'を追加

## 感謝
tblsのおかげでExcelのDBドキュメントを捨てられそうです。