OmniAICreator/Qiita-1.07M huggingface dataset:
FITライブラリをCS+に組み込んで使う時の設定

　ルネサスエレクトロニクスのRXマイコンを使い始め、今まで経験のないエラーが発生し対処に苦労したので備忘録として残します。同じようなエラーが発生している方のお役に立てれば幸いです。

#概要
　CS+にてRX63Nマイコンのプロジェクトを新規作成し、EthernetのFITライブラリを組み込んでコンパイルをしました。すると次のようなエラーが発生しました。

```
(E)ライブラリのあるパス～/r_bsp/mcu/all/r_bsp_common.h(70):F0520035:#error directive: "This version of FIT needs C99 (or later)."	r_bsp_common.h	70	プロジェクト名.mtpj
```

#対応
　FITモジュールはC言語のコンパイル規格 **C99** で記述されているようです。
しかしながら、CS+のコンパイラのデフォルト言語はC89になっているため、このエラーが発生するようです。

　CS+の**CC-RXビルドツールのプロパティ**を開き、C89からC99に変更するとこのエラーが消えます。
　変更箇所は、「コンパイルオプション」タブの「Cソースファイルの言語」

<img width="409" alt="設定箇所1_コンパイル.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183282/5f676de6-19ca-8f09-4e37-3049b1131c41.jpeg">

と、「ライブラリジェネレートオプション」タブの「ライブラリ構成」です。

<img width="461" alt="設定箇所2_ライブラリジェネレート.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183282/7d55d61e-970e-c037-fc3d-b8764e7d5c0a.jpeg">

#参考文献
[C99 - C言語入門](https://kaworu.jpn.org/c/C99)
[ルネサスエレクトロニクス FITについて](https://www.renesas.com/jp/ja/products/software-tools/software-os-middleware-driver/software-package/fit.html)
ApacheでFilesやFilesMatchが反映されない問題とその原因 

Apacheのconfにはデフォルトで次のような記述があり、通常は.htaccessなどが見えてしまうことはありませんが、設定によっては.htaccessファイルが丸見えになってしまう（FilesやFilesMatchの設定が無視される）場合があります。
```
<Files ".ht*">
    Require all denied
</Files>
```
例えば、次のような設定が行われていると、FilesやFilesMatchの設定が評価されず、.htaccessが見えてしまう原因となります。
```
<Location "/">
        <RequireAll>
                Require all granted
                Require not ip 192.168.0.0/24
                Require not ip 192.168.1.0/24
                Require not ip 192.168.2.0/24
        </RequireAll>
<DirectoryMatch>
```
## 原因
ディレクティブには優先順があります。
```
<Directory>  <   <Files>   <   <Location>
```
上記のように種類の異なるセクションが混在し、かつセクション同士で一部あるいは全部の条件が重複する場合は、優先度の高いセクションの内容が評価されます。つまり、```<Files>```よりも```<Location "/">``` の優先度が高いため、```<Files>```が評価されない問題が発生します。
そして、設定は記述順（上から順）に評価されるとは限らず、```<Files>```を```<Location>```の前に持ってこようが、後ろに持ってこようが結果は変わりません。
## 対応
Locationを使わず、DirectoryやDirectoryMatchを使います。
Locationはトラブルになりやすいため、なるべくLocationを使用しない運用とすることが望ましいといえます。
```
<Directory "/var/www/html">
        <RequireAll>
                Require all granted
                Require not ip 192.168.0.0/24
                Require not ip 192.168.1.0/24
                Require not ip 192.168.2.0/24
        </RequireAll>
<Directory>
```
## 参考
- http://park12.wakwak.com/~eslab/pcmemo/linux/apache/apache2.html
- https://thinkit.co.jp/free/article/0706/3/8/
C++14 or later で constexpr  で std::map 的にリードオンリー連想配列を作るメモ

## 背景

`std::map<std::string, int>` みたいなシグネチャの動的に内容変化せずリードオンリーの連想配列(変換テーブルなど)を作りたい需要はよくありますが,

```
constexpr std::map<std::string, int> ...
```

というのは直接にはできません.

## ライブラリ

C++14 以降になります.

https://github.com/serge-sans-paille/frozen

frozen 使ってみましたが, いい感じに動きました. `frozen::string` は `std::string` や `.c_str()` はないので, 使うにはちょっと変換いります(`.data()` で `const char *` ポインタが取得できるのでこれを使う) 


https://github.com/mapbox/eternal

デカコーンと言われる mapbox さま謹製の eternal も良さそうです. ありがとうございます.


## C++17 で実現

優秀な C++ さまから, C++17(`std::string_view`)で super minimal constexpr map をお教えいただきました! :tada:

<blockquote class="twitter-tweet"><p lang="ht" dir="ltr">Super minimal conxtexpr map <a href="https://t.co/BQi27OUouP">https://t.co/BQi27OUouP</a></p>&mdash; Антирежим Йолки (@murderotica_) <a href="https://twitter.com/murderotica_/status/1232580707018530816?ref_src=twsrc%5Etfw">February 26, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

素晴らしいですね, ありがとうございます.

## TODO

* [ ] C++11 で実現する方法を探す(string_view-lite https://github.com/martinmoene/string-view-lite などを使えばいけるか?)
ftpを終了するときがなんだかほっこりする

#ftp> bye:relaxed:

みんな「exit:runner::runner_tone1::runner_tone2::runner_tone3::runner_tone4::runner_tone5:」とか「:q!:stuck_out_tongue:」だからかわいく見える。











FTPコマンドはちょっと他のコマンドライン系と異なるので気を付けながら勉強中です。
rails:DM送信機能を簡単に実装〜model〜

#ダイレクトメッセージ機能
検索に苦労したのでDM機能について簡単に実装手順を紹介します。

前提として、DM機能の実装には
①トークルームを作成してそこで話す機能を実装する方法（中間テーブルが2つ）
②トークルームを作成しない方法
があります。

今回は②についての説明です。
#ER図
![スクリーンショット 2020-02-27 19.21.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536974/f3c180ea-e3b2-ed51-51be-2380871e91d3.png)

roomモデルを作らなくても作成できる理由は、routesで設定できます。

#手順
usersモデルがある前提で書きていきます。

```
$ rails g model Messages content:string user:references receive_user:references
```
Messages modelとmigrateファイルを作成します。

完成したものがこちら

```_create_messages.rb
class CreateMessages < ActiveRecord::Migration[5.2]
  def change
    create_table :messages do |t|
      t.string :content
      t.references :user, foreign_key: true
      t.references :receive_user, foreign_key: { to_table: :users }

      t.timestamps
    end
  end
end
```

```_create_messages.rb
{ to_table: :users }
```

を追記しています。
これが無いと、receive_usersテーブルを参照してしまうので『そんなテーブルは存在しないよ』と言われてしまいます。
そのため、外部キーとしてusersテーブルを参照するという指定を行っています。

```
$ rails db:migrate
```
↑します。

###続いて、model

```models/message.rb
class Message < ApplicationRecord
  belongs_to :user
  belongs_to :receive_user, class_name: 'User'
end
```
```models/message.rb
class_name: ‘User’ 
```
を追加します。
これによって、receive_userがReceive_userという存在しないクラスを参照することを防ぎます。

```models/user.rb
has_many :messages
has_many :sent_messages, through: :messages, source: :receive_user
has_many :reverses_of_message, class_name: 'Message', foreign_key: 'receive_user_id'
has_many :received_messages, through: :reverses_of_message, source: :user

def sent_messages(other_user, content) #メッセージを送るためのメソッド
    unless self == other_user
      self.messages.find_or_create_by(receive_user_id: other_user.id, content: content)
    end
end
```

これで完成です！

しっかり作成できるか $ rails cで確認することは忘れないでください🙇‍♂️

#補足
修正依頼などあれば気軽にお申し付けください。

参考記事
https://aka-shin.com/techacademy-mentaring-09/
前回のゲーム制作に置いての補足#ゲーム制作2.5

前回の記事の補足情報になります。

##カードはどんな役割の要素なのか

カードにはHPやAT、画像といった基本的な情報を保有していて（下記通り）

保有データ

```C#:CardModel.cs
    public Sprite icon;
    public new string name;
    public int hp;
    public int at;
    public bool isDead;
```

CardModelを生成した時に呼ばれる関数(コンストラクタ？)
事前に用意したScriptableObjectの情報を読み込むものになっています。

```C#:CardModel.cs
    //Entityからカードモデルにデータを送る
    public CardModel(int cardID)
    {
        CardEntity cardEntity = Resources.Load<CardEntity>("CardEntityList/Card"+cardID);
        icon = cardEntity.icon;
        name = cardEntity.name;
        hp = cardEntity.hp;
        at = cardEntity.at;
        isDead = false;
    }

```

CardViewで、モデルへのデータの受け渡しと描画を行っていて


```C#:CardView.cs
    public void Show(CardModel cardModel)
    {
        // カードデータの受け渡し＋描画
        iconImage.sprite = cardModel.icon;
        hpText.text = cardModel.hp.ToString();
        atText.text = cardModel.at.ToString();   
    }

```

CardControllerでModelを生成してViewを介して描画しているといった形を取っています。

```C#:CardController.cs
    public void Init(int cardID)
    {
        model = new CardModel(cardID);// 生成
        view.Show(model);// 反映
    }

```

実際にカードをInstantiateする時はこのように記述しています。

```C#:GameManager.cs
        //生成
        CardController card = Instantiate(cardPrehab, position, false);
        card.Init(cardID);
```



※CardPrehab→カードの型のPrefab
![SnapCrab_NoName_2020-2-27_19-16-52_No-00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542433/633b64e0-2f0a-c7b6-cf86-da170de06cb6.jpeg)
※Position→親要素にしたいPanel


役割としては、対戦にあたって体力の管理をしたり戦闘で勝利した時攻撃力分ダメージを与えると言ったことがあります。




##どういうデータをどのように渡そうとして上手くいってないのか


結論から言うと**カードの作りをあまり変更せずCardControllerの情報全てを受け渡ししたい**と考えています。ですが現状はCardControllerの型でPhotonNetwork.Instantiateをすることが出来ない（CardPrehabには空の型しかない＋GameObject型では内部にデータを持つことが出来ないため）ので困り果てていた状態です(;´д｀)ﾄﾎﾎ…

ターン制なので常にデータをたくさん送受信する予定はなく
多少多くデータを保有していても問題ないかと思っています。（浅はかだったら申し訳ないです）

以上です。ありがとうございました。
[PyTorch]CrossEntropyLossを数式入りでちょっと理解する

## はじめに
Pytorchの損失関数の基準によく```criterion=torch.nn.CrossEntropyLoss()```を使用しているため，
詳細を理解するためにアウトプットしてます．
間違ってたらそっと教えてください．

## CrossEntropyLoss
[Pytorchのサンプル](https://pytorch.org/docs/stable/nn.html#crossentropyloss)(1)を参考にして，

```python
torch.manual_seed(42) #再現性を保つためseed固定
loss = nn.CrossEntropyLoss()
input_num = torch.randn(1, 5, requires_grad=True)
target = torch.empty(1, dtype=torch.long).random_(5)
print('input_num:',input_num)
print('target:',target)
output = loss(input_num, target)
print('output:',output)
```

```
input_num: tensor([[ 0.3367,  0.1288,  0.2345,  0.2303, -1.1229]], requires_grad=True)
target: tensor([0])
output: tensor(1.3472, grad_fn=<NllLossBackward>)
```
正解クラスを $class$，クラス数を $n$ とするとCrossEntropyLossの誤差 $loss$ は以下の式で表すことができます．

```math
loss=-\log(\frac{\exp(x[class])}{\sum_{j=0}^{n} \exp(x[j])}) \\
=-\{\log(\exp(x[class])- \log(\sum_{j=0}^{n} \exp(x[j])\} \\
=-\log(\exp(x[class]))+\log(\sum_{j=0}^{n} \exp(x[j])) \\
=-x[class]+\log(\sum_{j=0}^{n} \exp(x[j])) \\
```
ソースコードのサンプルより正解クラスは $class=0$，クラス数は $n=5$ なので，確かめてみると

```math
loss=-x[0]+\log(\sum_{j=0}^{5} \exp(x[j]))\\
=-x[0]+\log(\exp(x[0])+\exp(x[1])+\exp(x[2])+\exp(x[3])+\exp(x[4])) \\
= -0.3367 + \log(\exp(0.3367)+\exp(0.1288)+\exp(0.2345)+\exp(0.2303)+\exp(-1.1229)) \\
= 1.34717 \cdots \\
\fallingdotseq 1.3472
```
プログラムの結果と無事合いましたね！
ちなみに計算は以下のコードでしてます（手計算の算数は無理・・・）

```python
from math import exp, log
x_sum = exp(0.3367)+exp( 0.1288)+exp(0.2345)+exp(0.2303)+exp(-1.1229)
x = 0.3367
ans = -x + log(x_sum)
print(ans) # 1.3471717976017477
```
ごり押しです．

## さいごに
丸め込み誤差（小数点の二進数表示による循環小数の発生）は今はあまり考えなくてもよさそう
普段は```random.seed(42)```なのですが，Pytorchだと```torch.manual_seed(42)```なのではえ～って感じです．

## 参考文献
(1)[TORCH.NN](https://pytorch.org/docs/stable/nn.html#crossentropyloss)
Terminalに拒否感がある人にnode.jsを布教する

`node.js`の布教で、心が折れそうになってきたので書き留めておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216132/5d897785-3b4e-c272-a8cf-b8616207f44c.png)
（引用元）https://blog.mach3.jp/2017/12/15/kuroigamen.html

##「便利」とか言うだけでは、絶対使ってくれない。
`Prepros`があれば`Sass`のコンパイルできる、と言われると何も言えなくなるので
せめて`vue-cli-ui`まで行けたら、黒い画面は一切見なくて良いはずなのに。と思った。

####相手のmacをちょっと借りてからやること
`node.js`と、`vue-cli >3`は、グローバルにインストールしておく。
※いちいち違うバージョンでパスを通すのは面倒なので `nodebrew`などは使わない。
何か`vue.js`のリポジトリを１つ`git`からクローンして持ってくる。

##MacのAutometerを使う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216132/1ecb3e9d-76e7-090a-29f0-da9b83329a96.png)
「シェルスクリプトを実行」を選んで

```
export PATH=$PATH:/usr/local/bin
vue ui
```
これを書き込んで、保存すると簡易的なアプリケーションになる。

##それっぽいツールに見せる

ロボットのアイコンだと、拒否感があるかもしれないので、Vueのアイコンに変えておく。
（Vueのロゴをクリップボードにコピーして、「情報をみる」の中の、アイコンの所をクリックしてペーストすると変わる。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216132/1f23b652-70d0-68d0-bc79-4b40ae8acced.png)

これを渡して、Dockに置く。コレをクリックするだけで、ブラウザでGUIでnpmコマンド使える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216132/dc410f34-eff6-1693-37ce-575fe06c08e8.png)

##Vue.jsはもちろん、Reactもこれで行ける
`vue.js`ならコレで`serve`とか`build`が使える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216132/84807c19-58fc-4bcd-a665-40b0929e02bc.png)

Reactの場合どうなんだろうと思って調べたら、何か足りないけど、普通にできた。
あいや、開けたけど、コレは、エラーで止まった場合にCtrl+Cできないから、詰む。。
ReactはやはりVS Code経由かな。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216132/5c524d88-1e15-2470-0097-15ed836f1935.png)

ついでに、Webpackは、ログがなるべく出ないようにしておく。
https://qiita.com/DaisukeNishi/items/ee2600de2b424e6a253f

これでターミナル一切使わず`node.js`を布教できる。
これで黒い画面に触ることなく`vue.js`とか`React`が使えるようになる。

多分。

vue-cli-uiをオフにする時は

```
killAll node
```
結局黒い画面使ってますねｗ

###参考記事
https://blog.mach3.jp/2017/12/15/kuroigamen.html
お客様の記念日にPardotから自動メールを送る

#お客様の記念日に自動メールを送る

諸々の事情により、理由は割愛しますが、

お客様の記念日にメールを送る設定をご説明します。

これは、Pardot Rookie groupの会で、質問させていただき、
Pardotユーザー会リーダー　宇佐見さん、田中さん、Pardot rookie group のリーダーの南さん、セールスフォースの小林さんのお力をお借りして、そこから、私なりに考えて検証をして、実装しました。
どうしてもお客様の”記念日”にメールをPardotから送りたかったもので。

##Salesforceで作業

（誕生日　デフォルト項目　Birthdate　を利用）

新しい項目を作成　仮にここでは「記念日」とします。

データ型：数式（日付）

###数式は以下
```
IF (
AND(
MONTH(Birthdate) = 2,
DAY(Birthdate) = 29,
OR (
MOD(YEAR(TODAY()), 4) != 0,
AND(
MOD(YEAR(TODAY()), 400) != 0,
MOD(YEAR(TODAY()), 100) = 0
)
)
),
DATE(YEAR(TODAY()), MONTH(Birthdate), DAY(Birthdate) - 1),
DATE(YEAR(TODAY()), MONTH(Birthdate), DAY(Birthdate))
)
```

##Pardotで作業

1．ダイナミックリストを作成
2．ルールを作成
![【削除不可】本日_誕生日 ダイナミック  - Pardot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532958/c895f9df-5457-ddf6-bbc8-07babb59d68f.png)

3．記念日用メールテンプレートを作成
4．engagement studioの設定
5.　リストの設定、メールテンプレートの設定
6.　engagement studioの時間設定は、以下

※私は、お客様へ送るメールは、以下の時間で設定しましたが、ここは、その方の時間設定にお任せしますが
ダイナミックリストで、リストになるのは、記念日の0:00　以降のはずなので、お気をつけください。

```
業務時間のみ
日, 月, 火, 水, 木, 金, 土 7:00 AM - 1:00 PM
(GMT+09:00) Asia - Tokyo
再エントリの対象: 365 日
エントリ総数を制限: 制限なし
```

以上
こちらで、毎日、お客様の記念日に自動的にPardotからメールが送られます。

こちらは、あくまでも弊社環境での検証でできたことです。
もちろん御社の環境で検証された上で間違いないことを試されてから実装ください。

もし、こちらを参考として間違えた、などのクレームなどは一切お受けしませんので、そのご認識の上、参考にしていただけたらと存じます。また、明らかに、これはおかしいのでは？などありましたら、是非、こそっと教えてください！
宜しくお願い致します。
Unity Nuget OpenCV DLLNotFoundError対応【解決済み】

UnityでOpenCVを使うことにした。

packageを落としてやる方法もあるが、
有料のものやら、無料だけどなんか上手く動かせなかったものやら。。。

そこでNugetでOpenCVを落としてやる方法で上手くいった記事があったので、
https://qiita.com/kingyo222/items/11100e8f7be396b98453
その方法でいってみることにした。

1. NugetでOpenCVSharp3 Any CPU　を落とす
2. 諸々コード書いて動かす
　　ちなみにやろうとしたのは読み込んだ動画の各フレームをOpenCvShaprのVideoWriterで書き込み動画出力すること

3. Unityでデバッグ。
　　すると、VideoWriterを呼び出す箇所でDllNotFoundが出まくる。

4. エラー対応：別途DLLをダウンロードして所定フォルダに格納
　　エラーログを読むとOpenCvSharpExtern.dllが無いそうな。

　　なんでないんだよ。と思いつつ、無いなら取ってこればよい。GitHubからそのファイルを取ってきましょう。
　　下記URLにアクセスしてx64用のやつを落とす。
　　https://github.com/shimat/opencvsharp/releases/tag/3.4.4.20181118

　　解凍してOpenCvSharpExtern.dllを取り出し、下記の様にUnityのProject Viewで所定の位置っぽいところにぶち込む。
　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504562/45343fcf-a281-7341-6a10-cb82ab54ddf4.png)

5.　Unityでデバッグ

以上、どどん。
データに列を加える・列のデータを書き換える関数（mutate）

###### tags: `rBasicLearning`
# mutate関数
## 1. mutate関数でできること
mutate関数は, 列にデータを加えることや, 列のデータを書き換えることができます. mutate関数は, dplyrパッケージにあります.
## 2. 今回使用するデータ
今回は, irisのデータを使用します.

```r
library(datasets)
head(iris)
```
```r
> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
```
## 3. データに列を加える
対象とするデータセットを第一引数とし, 第二引数以降に加えたいデータを指定します.
今回は具体例として, irisデータに 1~150のデータを加えます.

```r
library(dplyr)
numbers <- 1:150
iris <- mutate(iris, numbers)
head(iris)
```
```r
> numbers <- 1:150
> iris <- mutate(iris, numbers)
> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species numbers
1          5.1         3.5          1.4         0.2  setosa       1
2          4.9         3.0          1.4         0.2  setosa       2
3          4.7         3.2          1.3         0.2  setosa       3
4          4.6         3.1          1.5         0.2  setosa       4
5          5.0         3.6          1.4         0.2  setosa       5
6          5.4         3.9          1.7         0.4  setosa       6
```
## 4. データを書き換える
対象とするデータセットを第一引数とし, 書き換えたい既存のデータ名を書き, それにデータを与えるとデータが書き換えられる.
今回は具体例として, Sepal.Lengthを2倍にしたものに書き換えます.

```r
library(dplyr)
iris <- mutate(iris, Sepal.Length = Sepal.Length * 2)
head(iris)
```
```r
> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1         10.2         3.5          1.4         0.2  setosa
2          9.8         3.0          1.4         0.2  setosa
3          9.4         3.2          1.3         0.2  setosa
4          9.2         3.1          1.5         0.2  setosa
5         10.0         3.6          1.4         0.2  setosa
6         10.8         3.9          1.7         0.4  setosa
```
webpack-dev-serverのログが見づらい時

備忘録です。

##`webpack-dev-server`で作業時
ほとんどが不要なログのように思ったりします。

```terminal
$ webpack-dev-server 
ℹ ｢wds｣: Project is running at http://localhost:8080/
ℹ ｢wds｣: webpack output is served from /
ℹ ｢wds｣: Content not from webpack is served from /Users/NC00008197/react_redux

inspect: ul margin 0 auto
inspect: ul margin 0 auto
Child extract-text-webpack-plugin node_modules/extract-text-webpack-plugin/dist node_modules/css-loader/index.js??ref--0-1!node_modules/postcss-loader/lib/index.js!node_modules/sass-loader/lib/loader.js!assets/components/logo/styles/base.scss:
       2 modules
Child extract-text-webpack-plugin node_modules/extract-text-webpack-plugin/dist node_modules/css-loader/index.js??ref--0-1!node_modules/postcss-loader/lib/index.js!node_modules/sass-loader/lib/loader.js!assets/components/navigation/styles/base.scss:
       2 modules
Child extract-text-webpack-plugin node_modules/extract-text-webpack-plugin/dist node_modules/css-loader/index.js??ref--0-1!node_modules/postcss-loader/lib/index.js!node_modules/sass-loader/lib/loader.js!assets/components/navigation/styles/default.scss:
       2 modules
Child extract-text-webpack-plugin node_modules/extract-text-webpack-plugin/dist node_modules/css-loader/index.js??ref--0-1!node_modules/postcss-loader/lib/index.js!node_modules/sass-loader/lib/loader.js!assets/components/panel/styles/base.scss:
       2 modules
Child extract-text-webpack-plugin node_modules/extract-text-webpack-plugin/dist node_modules/css-loader/index.js??ref--0-1!node_modules/postcss-loader/lib/index.js!node_modules/sass-loader/lib/loader.js!assets/components/section/styles/base.scss:
       2 modules
Child extract-text-webpack-plugin node_modules/extract-text-webpack-plugin/dist node_modules/css-loader/index.js??ref--0-1!node_modules/postcss-loader/lib/index.js!node_modules/sass-loader/lib/loader.js!assets/components/section/styles/default.scss:
       2 modules
Child extract-text-webpack-plugin node_modules/extract-text-webpack-plugin/dist node_modules/css-loader/index.js??ref--0-1!node_modules/postcss-loader/lib/index.js!node_modules/sass-loader/lib/loader.js!assets/components/button/styles/base.scss:
       2 modules
Child extract-text-webpack-plugin node_modules/extract-text-webpack-plugin/dist node_modules/css-loader/index.js??ref--0-1!node_modules/postcss-loader/lib/index.js!node_modules/sass-loader/lib/loader.js!assets/components/tab/styles/base.scss:
       2 modules
```

「Webpackに読み込んでいるプラグインが、何かしました。」という説明のログが出てきて、いちいち読みづらい時があります。

```webpack.config.js
export default {
  //省略しています。
  devServer: {
    stats: {
      builtAt: false,
      children: false,
      modules: false,
      version: false
    }
  },
}
```

これでログがスッキリしました。以上です。

##参考記事：
（イシュー）出力ログレベルの冗長性
https://github.com/webpack-contrib/extract-text-webpack-plugin/issues/550
https://webpack.js.org/configuration/stats/
Indexing API で"サイト所有者を追加"がない件について

# あらすじ
下記urlのサイト所有者を追加がUIのどこを見てもなくユーザーと権限でメールを追加して"できた！"と思ってもPermission denied. Failed to verify the URL ownershipで死ぬ

https://developers.google.com/search/apis/indexing-api/v3/prereqs?hl=ja

# 解決法
https://support.google.com/webmasters/thread/4763732?hl=en&msgid=6359270
@Max i figured it out. Sort of. It is broken you are correct. You need to remove the properties from the new search console. Then go to the [old webmaster tools](https://www.google.com/webmasters/verification/home?), add it in there with your service address (the indexing API now works) and then you go back to the new search console and you can add it back in there. Google is constantly doing this so get used to it!

# 原因
おそらく古いからの移行フェーズでリニューアルされた方に機能が持ってこれてないのかもしれないです。
続編：Javascriptでテキストを自動で円形にする


#はじめに

この記事は別記事「[HTMLとCSSで魔法陣を描いてみる](https://qiita.com/yomogenium/items/789f9d35cefa54e97b31)」の続編です。続編みたいなものです。

自動化したので、長いテキストでも円形にできるようになった。


#サンプル

<p class="codepen" data-height="265" data-theme-id="default" data-default-tab="js,result" data-user="yomogenium" data-slug-hash="OJVmLOd" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="OJVmLOd">
  <span>See the Pen <a href="https://codepen.io/yomogenium/pen/OJVmLOd">
  OJVmLOd</a> by Yomogenium (<a href="https://codepen.io/yomogenium">@yomogenium</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>



#コード


```html:html

<style>
/* cssはなくても大丈夫だが、つけないとほぼ確実に見た目が悪くなる。 */
#test{
  background-color: black;
  color: white;
  position: relative;
  width: 400px;
  height: 400px;
}
</style>

<div id="test">I am the flesh and bone of my own sword, Steel flows through my body, And fire is what courses through my blood, I have created over thousand blades. Unknown to Death. Nor known to life, Many times have withstood enormous pain to create thousands of weapons. And yet those hands that are brave so much never hold anything, So as I pray now I call for “Unlimited blade works”.</div>

<script type="text/javascript">
(function(){

function ToArch(element){


  // 要素内のテキストを抜き出して配列にする
  var text = element.textContent;
  text = text.split('');

  // 要素内のテキストを１文字ずつかこみ、それらに角度と高さを設定
  element.innerHTML = '';
  for(var int = 0; int < text.length; int++){

    var divnode = null;

    // 要素の角度
    var divrotate = (360 / text.length) * int;

    divnode = document.createElement('span');
    divnode.innerHTML = text[int];
    divnode.style.position = 'absolute';
    divnode.style.height = '50%';
    divnode.style.color = 'unset';
    divnode.style.transformOrigin = 'bottom center';
    divnode.style.top = '0';
    divnode.style.bottom = '0';
    divnode.style.left = '49.5%';
    divnode.style.transform = 'rotate(' + divrotate + 'deg)';
    element.appendChild(divnode);
  }
  return element;
}

// 引数にはdocument要素を入れること。
var archtarget = document.getElementById('test');
ToArch(archtarget);
})();
</script>

```
Google Edge TPU推論の概要

Edge TPUはTensorFlow Liteモデルのみと互換性があります。 そのため、TensorFlowモデルをトレーニングし、TensorFlow Liteに変換し、Edge TPU用にコンパイルする必要があります。 次に、このページで説明されているオプションのいずれかを使用して、Edge TPUでモデルを実行できます。(Edge TPUと互換性のあるモデルの作成の詳細については、Edge TPUのTensorFlowモデルをご覧ください。https://coral.ai/docs/edgetpu/models-intro/）

![0_JmfSG0YqReUOjyGH_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/c13fec41-a762-328b-464a-9bcacbe20ab7.png)


#### Pythonで推論を実行する
Pythonを使用して推論を実行している場合、2つのオプションがあります。

#####TensorFlow Lite APIを使用します：
これは、TensorFlow Liteモデルを実行する従来のアプローチです。 データの入出力を完全に制御できるため、さまざまなモデルアーキテクチャで推論を実行できます。
TensorFlow Liteを以前に使用したことがある場合、Interpreterコードはごくわずかな変更を加えるだけでエッジTPUでモデルを実行できます。（詳細については、PythonでTensorFlow Liteを使用して推論を実行するをご覧ください。https://coral.ai/docs/edgetpu/tflite-python/）

#####Edge TPU APIを使用します：
これは、`TensorFlow Lite C ++ API`の上に構築されたPythonライブラリであるため、画像分類モデルとオブジェクト検出モデルを使用して、より簡単に推論を実行できます。
このAPIは、TensorFlow Lite APIの経験がなく、単に画像分類またはオブジェクト検出を実行する場合に役立ちます。入力テンソルの準備と結果の解析に必要なコードを抽象化するためです。 また、Edge TPUで分類モデルの高速転送学習を実行する独自のAPIも提供します。（詳細については、Edge TPU Python APIの概要をご覧ください。https://coral.ai/docs/edgetpu/api-intro/）

####C ++で推論を実行する
C ++でコードを記述したい場合は、他のプラットフォームでTensorFlow Liteを実行するのと同じように、`TensorFlow Lite C ++ API`を使用する必要があります。 ただし、`edgetpu.h`または`edgetpu_c.h`ファイルのAPIを使用して、コードにいくつかの変更を加える必要があります。 基本的に、`Interpreter`オブジェクトの外部コンテキストとしてEdge TPUデバイスを登録するだけです。（詳細については、「C ++でTensorFlow Liteで推論を実行する」を参照してください。https://coral.ai/docs/edgetpu/tflite-cpp/）



Coral Acceleratorモジュールは、2020年初頭にCoral Webサイトで販売されます。Google Coral製品、および大量販売または大量販売（ボリュームディスカウント）の詳細に興味がある場合は、ようこそCoral 海外代理店 Gravitylink : https://store.gravitylink.com/global
bash の for で year / month /day を回すとか

```
set -exou pipefail


y_str=2020
for m in {1..2} ; do
    echo ${m}
    for d in {1..31} ; do
        m_str=`printf %02d $m`
        d_str=`printf %02d $d`
        echo ${m_str}-${d_str}
    done
done

for m in {1..2} ; do
    echo ${m}
    for d in {1..31} ; do
        m_str=`printf %02d $m`
        d_str=`printf %02d $d`
        echo ${m_str}-${d_str}
        echo "aws s3 ls 's3://EXAMPLE.COM/LLLLL/YYYY=${y_str}/MM=${m_str}/DD=${d_str}/'";
    done
done
```
FlaskでHelloWorld【適当メモ】

#Flaskを扱う最初のTripメモ

```
pip install Flask
```


#Pythonコード
```python
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, World!"
@app.route('/test')
def hello2():
    return "Hello, TEST!"

if __name__ == '__main__':
    app.run()

```
Excelで扱えない行数の CSV をなんとかする方法

column -t -s,
| -t | 入力行のカラム数を判定して整形する |
| -s | -tオプションを使う際に、入力行をカラムに分ける区切り文字を指定する |


```
cat hoge.csv|sed -e 's/,,/,-,/g'|sed -e 's/,,/,-,/g'| sort -t, -k10 | column -t -s,
```
iPhoneアプリで自己証明書のサーバーにリクエストを送りたい

# はじめに
開発環境ではlocalhostに対してAPIリクエストを送って情報を得るケースがあります。
しかし、iPhoneのデフォルトではどのサーバーにも`https`であればきちんとした証明書を求めます。
証明書関連をしっかりするのをチーム全員に求めるのも酷なので(たまにしか触らない人も出てくるし)、アプリ側で吸収する方法を調べました。

# 環境
iOS 13.3

# ライブラリを使う
`Alamofire`というライブラリを使用するのが一番楽という結論になりました。
Security関連の設定を楽にできる仕組みが入っているためです。

# Alamofireインストール
https://qiita.com/ume1126/items/9ec378c02ca1b06287e9

上記記事を参照ください。
少し前の記事ですが、この記事を記載している時点で同じやり方で特に困りませんでした。

# Sessionの生成
`Alamofire`はSessionを元に動きます。
公式では`AF.request`という形でリクエストを作っていますが、`AF`の正体は`Session.default`です。
一般的なSessionを作り出しているので、ここを自分で作ったSessionに変えればOKです。
Sessionを作るコードは以下です。
`ServerTrustManager`が肝で、これにevaluatorを変更したいhostと`ServerTrustEvaluting`を渡せば勝手に判定してやってくれます。
Evaluatorはいくつか種類がありますので、詳しくは公式を参照ください。

https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#security

今回は証明書判定をスルーして欲しいので、`DisabledEvaluator`を使用します。
`DisabledEvaluator`は完全無視なので使用の際には要注意なEvaluatorです。

``` Swift
private let session: Session = {
    let manager = ServerTrustManager(evaluators: ["localhost": DisabledEvaluator()])
    return Session(configuration: URLSessionConfiguration.af.default, serverTrustManager: manager)
}()
```

こちらはStack Overflowにあったコードを使わせてもらいました。特に変える必要はないのでそのまま使ってます。
https://stackoverflow.com/questions/55543462/how-to-use-alamofires-servertrustpolicy-disableevaluation-in-swift-5-alamofire-5

# リクエスト部分
リクエスト部分は上で作成したSessionを使ってリクエストすればOKです。

``` Swift
self.session.request("https://localhost/api/v1/login", method: .post).response { response in
    print(response)
}
```

Evaluatorのhostを変更してリクエストを送ってエラーが出て、`localhost`の際にはエラー出ずにリクエストが送れていますので、これで大丈夫そうです。
なお、証明書エラーになった際は以下のようなエラーが出ます。

```
failure(Alamofire.AFError.serverTrustEvaluationFailed(reason: Alamofire.AFError.ServerTrustFailureReason.noRequiredEvaluator(host: "localhost")))
2020-02-27 18:07:19.829669+0900 qasee-ios[92585:4214289] Task <630403A5-077F-481E-AD99-9CB312F60676>.<1> HTTP load failed, 0/0 bytes (error code: -999 [1:89])
```
【CSS】ラジオボタンで横並び・◯部分無しの選択UIを作る

# 概要
ラジオボタン（`<input type="radio">`）を使って、以下のような選択UIのスタイルを作成してみる。
選択肢を横並びにして、選択したことを◯ではなく下線で表す。
![radio-buttons.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124752/cbebb415-6407-52b5-4b69-610a1a8baeee.gif)


# スタイル
```html:HTML
<div class="radio-button-container">
  <div class="radio-button-label">ラジオボタン</div>
  <div class="contents">
    <span>選択肢</span>
    <div class="radio-buttons">
      <input id="one" type="radio" name="radio" value="1" checked>
      <label for="one">One</label>
    </div>
    <div class="radio-buttons">
      <input id="two" type="radio" name="radio" value="2">
      <label for="two">Two</label>
    </div>
    <div class="radio-buttons">
      <input id="three" type="radio" name="radio" value="3">
      <label for="three">Three</label>
    </div>
  </div>
</div>
```


スタイルを当てない場合、以下のようになる。
![スクリーンショット 2020-02-27 17.12.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124752/b15e031e-7515-911b-ac89-bd3b62ac406b.png)


ラジオボタンの🔘を無くして、選択していることを下線で表すようにする。

```scss:SCSS
.radio-button-container {
  color: #404040;
  font-size: 16px;
  font-weight: bold;
  .radio-button-label {
    margin-bottom: 9px;
  }
  .contents {
    display: flex;
    align-items: center;
    span {
      font-size: 14px;
      padding-right: 6px;
    }
    .radio-buttons {
      display: inline-flex;
      justify-content: space-between;
      height: 25.5px;
      margin: 0;
      padding: 0;
      label {
        padding: 0 3px;
        margin: 0 6px;
        cursor: pointer;
      }
      input[type=radio] {
        display: none;
        &:checked + label {
          border-bottom: 3px solid #FFFF00;
        }
      }
    }
  }
}
```

<p class="codepen" data-height="265" data-theme-id="default" data-default-tab="css,result" data-user="mmmmmmk" data-slug-hash="eYNvwMM" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="radio-buttons">
  <span>See the Pen <a href="https://codepen.io/mmmmmmk/pen/eYNvwMM">
  radio-buttons</a> by mmmmk (<a href="https://codepen.io/mmmmmmk">@mmmmmmk</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>



`input[type=radio]:checked + label`の`border-bottom`を`background`にすることで、選択した要素の背景色が変わるようにすることもできる。

```scss:SCSS
... (略)
&:checked + label {
    background-color: #FFFF00;
}
```

![スクリーンショット 2020-02-27 15.11.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124752/e9b83159-b4af-056c-be93-28920c591e55.png)


# まとめ
ラジオボタンを使って、選択肢が横並び・選択した時に下線で選択したことを表すUIのスタイルを作成した。
【Unity】楽曲に合わせて〇〇するスクリプト

こんにちはっ🌟八ツ橋まろんです

個人バーチャルYouTuberとして、UnityのTimeline機能を使って、3Dモデルを使ったオリジナルのミュージックビデオを制作しています。

楽曲のリズムに合わせてパーティクルを出したり演出を入れたりしているのですが、**Timelineの時間軸はフレーム単位(60フレーム/秒)**なので、「100bpmの楽曲だから60/100 = 0.6秒 = 36フレームごとにパーティクルをEnableにして、、、」とか、「155bpmだと割り切れないから〇回に1回だけ1フレーム減らして、、、」なんて作業は、**正直しんどいのでやっていられません。**

なので、『最初の1回だけ指定したら残りは同じ時間サイクルで動作をしてくれるスクリプト』を書きました🌟(小難しくない簡単なスクリプトです)


使用例：一定間隔でハートが鼓動を打つ
![qiia.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478685/6c4807be-ba51-667f-4b79-826d49e57831.gif)


```C#:BpmAction.cs
using System.Collections;
using UnityEngine;


public class BpmAction : MonoBehaviour
{
    public int bpm;

    enum Coef
    {
        quarter,
        half,
        x1,
        x2
    }

    [SerializeField]
    Coef coef;

    [Header("Events")]
    public OnBPM onBPM;

    float BpmCoef()
    {
        switch (coef)
        {
            case Coef.quarter:
                return 0.25f;
            case Coef.half:
                return 0.5f;
            case Coef.x1:
                return 1f;
            case Coef.x2:
                return 2f;
        }
        return 1f;
    }

    [SerializeField]
    bool IsBpmAction;
    float time;

    private void Update()
    {
        if (IsBpmAction)
        {
            time += Time.deltaTime;
            if(time >= 60f / (bpm * BpmCoef()))
            {
                time -= 60f / (bpm * BpmCoef());
                Action();
            }
        }
    }

    void Action()
    {
        onBPM.Invoke();
    }
    [System.Serializable]
    public class OnBPM : UnityEngine.Events.UnityEvent
    {

    }
    public void BpmActionStart()
    {
        IsBpmAction = true;
        Action();
    }
    public void BpmActionStop()
    {
        IsBpmAction = false;
        time = 0;
    }
    public void SetNewBpm(int i)
    {
        BpmActionStop();
        bpm = i;
    }
}

```
【ポイント】
以下の記述によって、uGUIのボタンのように、イベント登録ができるのでとっても便利です。覚えておきましょう。私も今回初めて知りました。(下の画像の赤枠部分が追加される)

冒頭のハートの例では、ハートのAnimatorにSetTrigger("Beat")をして鼓動させています。

```
    [Header("Events")]
    public OnBPM onBPM;

    [System.Serializable]
    public class OnBPM : UnityEngine.Events.UnityEvent
    {

    }
```
![無題 (復元済み).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478685/28b4c3a0-3d57-f5b2-b136-287905bfdb3b.png)

また、時間の計測は、コルーチンを使わず、Update関数内でTime.deltatimeを毎フレーム足しています。

通常、〇〇時間後に起動する処理ではコルーチンをよく使いますが、更新はフレーム毎にしか行われないので、例えば「1.00秒の設定に対して1.01秒経った→1.00秒を越えているのでカウントを0にする」という処理では、毎回0.01秒遅いアクションになり、積もり積もって時間差が目立ってしまいます。そのため、「Updateで毎回Time.deltatimeを足す→1.01秒になったのでカウントを1.00秒引いて0.01秒から再スタート」とすることで正確な時間計測をしています。
(コルーチンでのやり方あったら教えてほしいです。よくわからんかった。)

【使い方】
・BPMに楽曲のBPMを入れてください。

・Unity2019以降：Timeline上にSignal Trackを追加し、最初の1回目の位置にSignalを置いてBpmActionStart()関数を呼んでやればOKです💡終わるときはBpmActionStop()関数を呼んでください。

・Unity2018以前：TimelineにSignal機能がないため、追加でAnimatorを付けて、TimelineにAnimation Trackを追加して、IsBpmActionをtrueにすればOKです💡終わるときはfalseにしてください。

・Coefは係数です。x1で毎ビート毎に、x2で2倍、halfで2回に1回、quarterで4回に1回です。

以上、「楽曲に合わせて〇〇するスクリプト」でしたっ🌟またね

八ツ橋まろん
GitHubで過去にリリースしたタグ名を変更したいとき

# 大前提
- Tag（タグ）
    - Gitの機能。コミットにつけられる。
- Release（リリース）
    - GitHubの機能。タグにコメントや添付ファイルをつけて公開できる。

# TL;DR
```
git tag new-tag old-tag
```
`old-tag`から`new-tag`に変更したいときは、上記コマンドで`new-tag`を作ってから、GitHub上のReleaseのEdit画面でタグ名を`new-tag`に変更する。

# やりたいこと
`1.0`→`1.1`→`2.0`というリリースがあるが、よくよく見たらリリース`1.1`のタグ名が間違っていた。
リリース`1.1`のタグを正しいものに直したい。

# 最初にやってみたこと
GitHub上のReleaseのEdit画面で、素直にタグ名を編集してみた。
ら、そのブランチの最新コミット（ここではリリース`2.0`時点のコミット）でタグが作られてしまった。失敗。

# やるべきこと
GitHub上では操作できないので、Gitコマンドで。

```
git tag new-tag old-tag
```
これで`old-tag`のコミットに`new-tag`というタグが新しく作られる。
まずはこれをプッシュ。

```
git push origin new-tag
```

これでリモートに`new-tag`が反映される。

次に、GitHub上でタグ名を変更したいReleaseのEdit画面を開く。
タグ名をさっき作った`new-tag`に変更してUpdateする。
これでやりたいことができた。

あとは修正前のタグ（`old-tag`）はもう不要なので、それを削除する。
リモートからの削除。

```
git push --delete origin old-tag
```

ローカルからの削除。

```
git tag -d old-tag
```

以上。
CIAによる公電盗聴の仕組みの解読実験

依頼でCIAはバックドア無しの脆弱性だけで暗号解読可能か調査。
スノーデン事件や下記の公電情報漏洩の暗号解読の裏付け調査。
https://www.asahi.com/articles/ASN2D638WN2DUHBI010.html
仮定の元、112ビット楕円曲線暗号(ECC)が1/100秒で解読できた。
解読性能は完全な量子計算機(50年後?)による解読に相当。
ECC-112は解読世界記録。プレステ3で110年台,PCで数百年台で解読。

ECC-256以上で評価予定だが、CIAなら容易に解読できそうで怖い。
バックドアによる盗聴と言われているが、仕込まなくても可能。
公開暗号はRSA-2048からECC-256にほとんどで移行済み。
楕円曲線暗号は数学的には強固だが、攻撃に弱い性質を持つ。
味噌は、ECC(y^2=x^3+ax+b (mod p),p,と位数rは素数)が暗号処理
にb(従ってrも)を使用しないことを利用して攻撃する。
暗号通信では、ECC上の点(x,y)だけしか送付しない。

面白いので、6月の数値解析シンポジュームで発表しよう。
蛇足：小生は傍受や脆弱攻撃の技術を持たず興味もないので安全。

ECCによるAとBの鍵交換：
 step1:
　A: ECCの点P=(Px,Py)を作成し、Bに送信。
 step2:
  A: 乱数mを作り、ECCの点Q=m*Pを計算し、QをBに送信。
  B: 乱数nを作り、ECCの点R=n*Pを計算し、RをAに送信。
 step3:
  A: 受信したRで、S=m*Rを計算
  B: 受信したQで、T=n*Qを計算

共通鍵交換の原理
　ECCの交換律で下記(S=T)が成立
　  S=m*R=m*(n*P)=n*(m*P)=n*Q=T
  共通鍵はS=T=(Sx,Sy)のSx
　送信した、点P,Q,Rは傍受されても共通鍵SxはECCが解読
　されないと、盗めないのが味噌です。

今回の方式による共通鍵(Sx)の盗聴方法
前提:
　(1) 脆弱性を利用しBのECC処理のチェックを外す。
　(2) A,Bの送信は共に傍受でき、変更し送信可能。
盗聴方法：
 step1: AからBへ送信の、点Pを傍受し、Eに変更しBに送る。
 step2: A,B双方送信の点Q,Rを傍受。
　　　今回の方式でnを解読し、R=n*Pで再計算したRをAに送信。
 step3: T=n*Qを計算し、T=S=(Sx,Sy)のSxを解読

1カ月かけてECC-256が攻撃で解読可能なパラメータの算出プログラムの開発を予定していたが中止した。自分は攻撃しないと、軽く考えていた。
現在使用されているECC-256の種類は推奨の十種類足らず。ビットコインの暗号はspeck256k1で、各銀行も容易に分かる。ECC-256が瞬時に解読できる攻撃用係数を算出して公表し、悪用されて他人の銀行口座から預金が盗まれたら、当方の刑事責任を問われかねない。公表しなくても、プログラム作成して、求めていると、盗聴され流出の可能性がある。6月の発表前に、暗号の所属官庁である総務省と通産省に相談に行く。
解読の簡単な説明資料(例がほとんど)を https://ecc-256.com に掲載した。
解読用pythonプログラム、入力データ、結果、実行の画面コピー(デモ)も上記webのpythonプログラムに追加した(2020年3月30日)。pythonプログラムはC+gmp(多倍長)より約20倍遅い。それでも160,192,224,256ビットECCの解読は4GhzのPCでそれぞれ1,10,100,1000秒程度。解読時間は数倍変動する。
解読に一昨年発見した学習λ法が適用できることが判明。256ビット楕円曲線暗号もPCで瞬時(0.05秒)で解読できそう。現在詳細設計中で、連休明けには実測の見込み。事前学習時間もPCで数日だろう。(2020年4月7日)
楕円曲線暗号の脆弱性攻撃。学習λ法と組み合わせることに成功。現256ビット暗号がパソコン(4Ghz)で平均0.05秒で解読できた(2020年4月25日)。学習時間はパソコンで1日(24時間)。更に改良し、連休明けには100件の解読で1秒(1件平均0.01秒)を目標。同時にpythonにも移植(解読部分だけ)する。
無線ランのbluetoothは正当性チェックが無く、容易に解読されることが見つかっている。現在はパッチ対策されている。ただモデム(ルータ)側はパッチの適用が面倒なので放置している人が多い。
カラムの修正、追加、削除、変更、データ型の変更

##カラムの修正方法
マイグレーションファイルのカラムをスペルミスしたときにrails db:rollbackするとマイグレーションファイルを差し戻せる
ロールバック=>修正=>マイグレートで修復できます。

```
$ rails db:rollback
```
##データベースに反映済みのマイグレーションファイルは修正してはダメ
マイグレーションファイルが既にマイグレーション済みなのかどうかは、rails db:migrate:statusで確認できます。

```
$ rails db:migrate:status
```
適用されているときはupと表示され、修正するためにはロールバックする。適用されていないときは、downと表示され、そのまま修正や削除が可能です。
最後に

```
$ rails db:migrate
```
##カラムの追加方法

```
$ rails g migration Addカラム名To追加先テーブル名 追加するカラム名:データ型
```
【例】カラム名はtitle、テーブル名はposts、データ型はstringの場合

```
$ rails g migration AddTitleToPosts title:string
```
カラム名、削除元テーブル名は頭文字は大文字で、削除するカラム名、データ型は小文字です。
最後に

```
$ rails db:migrate
```
##カラムの削除方法

```
rails g migration Removeカラム名From削除元テーブル名 削除するカラム名：データ型
```
【例】カラム名はtitle、テーブル名はposts、データ型はstringの場合

```
$ rails g migration RemoveTitleFromPosts title:string
```
最後に

```
$ rails db:migrate
```
カラム名、削除元テーブル名は頭文字は大文字で、削除するカラム名、データ型は小文字です。
##カラムの変更
カラム名を変更するためのmigrationファイルを作成します。
【例】変更したいカラム名はtitle、変更後のカラム名はcomment、テーブル名はpostsとします。

```
rails g migration rename_変更したいカラム名_column_to_テーブル名
```

```
$ rails g migration rename_title_column_to_posts
```
####生成されたファイルを編集します。

```
ename_column テーブル名, 変更前のカラム名, 変更後のカラム名
```

```db/migrate/20XXXXXXXXXXX_rename_title_column_to_posts.rb
class RenameRequestColumnToJobAdministrations < ActiveRecord::Migration[5.0]
  def change
    rename_column :posts, :title, :comment
  end
end
```
最後に

```
$ rails db:migrate
```
##データ型の変更

```
$ rails g migration ChangeDatatypeカラム名Ofテーブル名
```
【例】データ型をstringからtextに変える場合

```
$ rails g migration ChangeDatatypeCommentOfPosts
```
カラム名、テーブル名の頭文字は大文字です。
####生成されたファイルを編集します。

```
change_column :テーブル名, :カラム名, :データ型
```

```db/migrate/20XXXXXXXXXXX_rename_comment_column_to_posts.rb
class ChangeDatatypeUseIdOfBlogs < ActiveRecord::Migration[5.0]
  def change
    change_column :posts, :comment, :text
  end
end
```
最後に

```
$ rails db:migrate
```
Laravel 暗号化 初期化ベクトルが格納される場所

Laravelには```encrypt```、```decrypt```という暗号化、復号のヘルパーメソッドが用意されています。

暗号化 6.x Laravel
https://readouble.com/laravel/6.x/ja/encryption.html

暗号化の結果を見ると、同じ文言でも全く違う文字列になっています。ということは、Laravelの暗号化ではランダム生成された初期化ベクトルを使っているということになりますが、データベースには初期化ベクトルのカラムはありません。初期化ベクトルはどこに保存されているのでしょうか。

# 前提知識

LaravelはAES-256-CBCという方式で暗号化をしています。この記事を理解するためには、AES、CBC、初期化ベクトルについてある程度の知識が必要です。

プログラマの暗号化入門
https://qiita.com/asksaito/items/1793b8d8b3069b0b8d68

Advanced Encryption Standard
https://ja.wikipedia.org/wiki/Advanced_Encryption_Standard

暗号利用モード
https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%88%A9%E7%94%A8%E3%83%A2%E3%83%BC%E3%83%89

初期化ベクトル
https://ja.wikipedia.org/wiki/%E5%88%9D%E6%9C%9F%E5%8C%96%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB

# 初期化ベクトル保存場所

```encrypt``` で暗号化したデータに、初期化ベクトルが含まれています。ただ、base64エンコードされているので、そのままでは読めません。```encrypt``` で暗号化したデータをbase64デコードすると以下JSONが得られますが、「iv」に初期化ベクトルがセットされています。

```json:暗号化のbase64デコード結果
{
  "iv":"初期化ベクトル",
  "value":"暗号化された文言",
  "mac":"メッセージ認証符号"
}
```

## 動くコードで確認する

説明だけだとしっくりこないと思うので、実際に動くコードで確認しましょう。以下URLに今回使うコード一式をアップロードしました。

https://github.com/kaidouji85/laravel-encrypt-iv


コードの動かし方は、リンク先を参照してください。コードの本体はLaravelカスタムコマンドで、ファイルパスは```app/Console/Commands/EncryptIV.php```です。ボイラープレートのせいで行数が無駄に多いですが、handleメソッドがサンプルコードのメインです。プログラムを実行すると、前セクションで紹介した「暗号化のbase64デコード結果」が出力されます。

```php:app/Console/Commands/EncryptIV.php
public function handle()
    {
        // 勉強用に暗号化前の情報をコンソール出力している
        // ただ、セキュリティ上の問題があるので、本番環境では絶対にこのようなコードを書いてはいけない

        $origin = "オリジナルメッセージ";
        $this->info("origin: {$origin}");
        
        $encrpted = encrypt($origin);
        $this->info("encrpted: {$encrpted}");
        
        $base64Decoded = base64_decode($encrpted);
        $this->info("base64Decoded: {$base64Decoded}");
    }
```
ルートパスとは

###ルートパス
ルートパスとはアプリケーションのアクセス先でルーティングの設定で、呼び出すアクションを指定する

```
root to: 'コントローラー名#アクション名'
```
【例】コントローラー名がpostの場合

```config/routes.rb
Rails.application.routes.draw do
  root to: 'posts#index'
end
```
これでhttp://localhost:3000にアクセスしたらpostsのindexアクションにとぶことができる
VueCLIの導入とプロジェクト作成からデプロイの備忘録

# VueCLIの導入

## node.jsのインストール

下記を参考に行う。
[MacにNode.jsをインストール - Qiita](https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09)

## VueCLIのインストール

$ npm install -g @vue/cli

# VueCLIでプロジェクト作成〜デプロイ

## 新しいプロジェクトの作成

$ cd '作成したい場所'
$ vue create 'プロジェクト名'

## Vueプロジェクトの起動
$ cd 'プロジェクト名'
$ npm run serve

## ビルド・デプロイ

$ npm run build
distフォルダが作成されるので、サーバーに配置
近所のマスク及びアルコールの在庫を効率的に確認する方法

初投稿です。文章が拙かったら申し訳ないです。

今、日本ではコロナウイルスが流行っております。マスクやアルコールといった感染予防商品が入手困難になっている状況です。台湾では、マスクの在庫マップが台湾のエンジニアのボランティアによって開発されました。台湾に見習って日本で自分に出来ることはないかと模索しました。

結論として、AppleがApp Storeで出しているショートカットのアプリを用いて簡単に作成してみました。誰でもノンプログラミングで作成可能です。それでは手順をこれから公開します。

まずApp Storeのアプリを起動して以下のアプリをダウンロードしてください。
<img width="320" alt="IMG_6636.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/8ba6f90f-b531-3c50-d61a-f75d02d4a76c.jpeg">
ダウンロード出来ましたでしょうか、次にショートカットの作成に入っていきたいと思います。
<img width="320" alt="IMG_6638.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/e178e832-5ebc-4d1e-c9b8-1181364dc43a.jpeg">
上記画面の左上にある在庫確認というショートカットを今回は作成します。名前はご自身で好きなように変更して構いません。ショートカットを作成するときは＋のマークがついた青丸ボタンをタップします。画面だと一番右上にあります。
<img width="320" alt="IMG_6639.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/911916f2-dbdb-0005-8af5-a27540f4046b.jpeg">
アクションを追加をタップすると以下の画面になります。
<img width="320" alt="IMG_6640.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/be1b92c0-a004-9dac-7885-82692ed6b0ad.jpeg">
検索バーにマップ又は地図と入れます。
<img width="320" alt="IMG_6642.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/4703cf1b-422e-9879-03c9-eb0f58eaad67.jpeg">
アクションが表示されます。画面を下方向にスワイプします。
<img width="320" alt="IMG_6652.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/d4935bf7-1616-ac7b-f3d9-eafe9e33fca5.jpeg">
①近くの店舗や企業を検索 
②"マップ"で表示の順番でアクションを追加します。
<img width="320" alt="IMG_6648.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/87ff9413-ce11-842d-e7b0-c3cb73130929.jpeg">
すると上画面のように出来上がります。
近くの店舗や企業 と書いている薄い文字を長押しでタップすると内容の変更が出来ます。テキストアイコンが付いた毎回尋ねるを選択してタップします。
<img width="320" alt="IMG_6650.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/1eb8e049-68c3-f492-1b7b-6da307bbe446.jpeg">
これで在庫確認のショートカットの中身であるアクションは完成です。
名前を付けたいので青丸が付いた...のボタンをタップして名前を付けます。
<img width="320" alt="IMG_6651.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/fa27475d-7a34-6a7b-daac-f791f7ee33c5.jpeg">
ウィジェット表示をオンにします。ホーム画面からの右スワイプで編集を行えば、ウィジェットでショートカットを起動出来るようになります。プライバシー設定にある位置情報及び場所もオンにしといてください。
<img width="320" alt="IMG_6653.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/bc98c8a7-2763-f82b-acaa-31bffb2e7b33.jpeg">
起動すると上画面になります。半径で現在地からの距離を設定出来ます。距離は今回は10kmに指定します。近くの店舗や企業と灰色の薄文字で書いている所にドラッグストアと入力します。
<img width="320" alt="IMG_6658.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/17705ce0-f2f6-1b31-0e33-a97a7ca1b651.jpeg">
完了のボタンをタップすると半径10キロ圏内のドラッグストア一覧の表示が出ます。
<img width="320" alt="IMG_6666.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/29c17121-fcfc-6cf5-74cc-b78bfa50bfe2.jpeg">
表示された店舗をタップするとGoogle Mapに登録されているお店の詳細にジャンプします。
<img width="320" alt="IMG_6670.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355134/36d0af22-c388-343d-d963-3921e61740e3.jpeg">
経路、お店の電話番号が分かりますので在庫の有無は発信して確認してください。
コンビニ、スーパーに検索対象を変えたい場合は入力を変更します。
便利なので是非オススメです。
Vue.jsでCSSのスタイルをデータに紐付ける方法


# classをデータにバインディング(紐付け)する

## パターン1

``` html:
<div id="app">
  <h1 :class="classObject">Text</h1>
  <button @click="isActive = !isActive">switch</button>
</div>

<style>
  .red {
    color: red;
  }
  .bg-blue {
    background-color: blue;
  }
</style>

<script>
  new Vue({
    el: "#app",
    data: {
      isActive: true
    },
    computed: {
      classObject: function () {
        return {
          red: this.isActive,
          'bg-blue': !this.isActive
        }
      }
    },
  })
</script>

```

# パターン2

``` html:
<div id="app">
  <h1 :class="classObject">Text</h1>
  <button @click="isActive = !isActive">switch</button>
</div>

<style>
  .red {
    color: red;
  }
  .bg-blue {
    background-color: blue;
  }
</style>

<script>
  new Vue({
    el: "#app",
    data: {
      isActive: true
    },
    computed: {
      classObject: function () {
        return {
          red: this.isActive,
          'bg-blue': !this.isActive
        }
      }
    },
  })
</script>

```

# styleをデータにバインディング(紐付け)する

``` html:
<div id="app">
  <h1 :style="{ color: textColor, 'background-color': bgColor }">Text</h1>
  <h1 :style="styleObject">Text</h1>
</div>

<script>
new Vue({
  el: "#app",
  data: {
    textColor: 'red',
    bgColor: 'blue',
    styleObject: {
      color: 'red',
      'background-color': 'blue'
    }
  }
})
</script>
```
Vue.jsコンポーネントの作り方



## 基本的なコンポーネント

Vue.jsの仕様で、コンポーネントでdataをオブジェクト型にしてしまうとエラーで動きません。
これはオブジェクトにしてしまうと、データが一つのメモリに保存され、複数のコンポーネントで同じメモリにアクセスしてしまうからです。
なのでコンポーネント化するときは、dataをfunctionにして初期値の値をreturnする形式にする必要があります。

``` vue:
<div id="app">
  <my-component></my-component>
  <my-component></my-component>
  <my-component></my-component>
</div>

<script>
Vue.component('my-component', {
  data: function () {
    return {
      number: 0
    }
  },
  template: '<p>カウント({{number}})<button @click="increment">+1</button></p>',
  methods: {
    increment: function () {
      this.number += 1
    }
  },
})

new Vue({
  el: "#app"
})
</script>

```

## コンポーネントのローカル登録

先程までの書き方だと、コンポーネントはグローバルとして登録されるため、どこからでもアクセスできてしまいます。
実際に開発する際は基本的にこちらを使います。

``` vue:
<!-- ローカル登録済み -->
<div id="app1">
  <my-component></my-component>
  <my-component></my-component>
  <my-component></my-component>
</div>

<!-- ローカル未登録なので表示されない -->
<div id="app2">
  <my-component></my-component>
  <my-component></my-component>
  <my-component></my-component>
</div>

<script>
var component = {
  data: function () {
    return {
      number: 0
    }
  },
  template: '<p>カウント({{number}})<button @click="increment">+1</button></p>',
  methods: {
    increment: function () {
      this.number += 1
    }
  },
}

new Vue({
  el: "#app1",
  components: {
    'my-component': component
  },
})

new Vue({
  el: "#app2"
})
</script>
```

## 単一ファイルコンポーネント(.vue)の書き方

コンポーネントを一つのファイルとして管理できます。
VueCLIを導入していないと使えません。

コンポーネントのtemplateタグは、ルート要素を一つしか設定できません。

``` vue:
<template>
  <p>いいね({{ number }})</p>
</template>

<script>
export default {
  data() {
    return {
      number: 12
    }
  },
};
</script>

<style>
</style>
```
Vue.js computedプロパティとwatchの使い方

# computedプロパティ

動的な処理をプロパティとして持たせることができます。

``` html:
<div id="app">
  <p>{{ number }}</p>
  <button @click="number += 1">+1</button>
  <p>{{ lessThanThree }}</p>
</div>
<script>
new Vue({
  el: "#app",
  data: {
    number: 0
  },
  computed: {
    lessThanThree: function () {
      return this.number > 3 ? '3より上' : '3より下'
    }
  },
})
</script>

```

## methodとの違いについて

methodだとテンプレート内が少しでも再描画された際に実行されます。
ですが、computedの場合だと、表示されているかつ、プロパティ内部で参照している値が変更したときのみ、実行されます。
今回の例だと、「numberの中身が変わったときだけ」実行されることになります。めちゃくちゃ賢いですね。
そのため無駄な処理を省くことができます。

# ウォッチャについて

基本的にはcomputedプロパティを使用したほうが良いですが、computedではまかないきれないときがあります。
例としては、画面に表示されていない場合などです。

そのようなときはウォッチャで実装することができます。
非同期通信などはウォッチャを使用する良い例です。

``` html: 
<div id="app">
  <p>{{ number }}</p>
  <button @click="number += 1">+1</button>
  <p>{{ lessThanThree }}</p>
</div>

<script>
new Vue({
  el: "#app",
  data: {
    number: 0
  },
  computed: {
    lessThanThree: function () {
      return this.number > 3 ? '3より上' : '3より下'
    }
  },
  watch: {
    number: function () {
      var vm = this;
      setTimeout(function () {
        vm.number = 9999
      }, 3000)
    }
  }
})
</script>

```
Photonを使ってオンラインターン制ゲームを作ろうとしたら失敗した話#ゲーム制作02

どうも、わたたかです。
現在オンラインのターン制ゲームを作ろうと試みており巷で噂のPhotonを使ってみることにしたんですよ。（サーバー言語とか建て方とか分からないですし）

それで、とりあえずAI戦なるものを作ってからオンライン仕様にゲームを作り変える方式を取ることにしてオフラインとしては形になったのですが
ここで問題発生。

##photonnetwork.instantiateは/ResourcesファイルのPrefabしか適応できない。

photonnetwork.instantiateの**第一変数がString**なのでGameObject.instantiateのように
serializeFieldでInspectorから指定したものを生成したり、同じように扱うことが出来ないのである。

```C#:test.cs
    CardController card = Instantiate(cardPrehab, position, false);
```
MVCを採用してカードを生成していたので
このようにカードをInstantiateしてGameObject型に変換することも出来ず
photonnetwork.instantiateで生成することが出来ないって話です。

```C#:test2.cs
    GameObject card = PhotonNetwork.Instantiate("PlayerCard",new Vector3(),Quaternion.identity,0);
```
現状はこのようにして無理やりPrefab化したカードモデルを生成してみましたが
ステータスを持たせられなかったり
データの反映がとても面倒くさくなるのでいい方法を探してます。


現在解決策を永遠に悩んでいますが2日くらい立っているのでもう泣きそうです。
有識者の方がいたら相談させてほしいです...（泣）

##結論
Photonでオンラインゲームを作るなら最初からオンラインで作るつもりで実装を進めて行こう。
自分はもう後に引けないので意地でもいい方法を模索します。それではさようなら。

いいアイディアがありましたらコメント、Twtter（@wttk05）のDMお待ちしてます。

[補足](https://qiita.com/wttk05/items/f8cea345db8ed00c72fd)
DeepLabCut 2.1 マニュアル 導入編(Windows10 GPU)

#はじめに
DeepLabCut 2.1 をGPUを積んだ Windows 10 で使用する方法です。以下の公式ホームページと公式が作成したGitHubを参考にしたので、Ubuntu18.04を使う場合はこちらを参照してください。Python環境やドライバ等のインストールは済んでいれば必要ありません。

DeepLabCut 公式ホームページ
http://www.mousemotorlab.org/deeplabcut

GitHub
https://github.com/AlexEMG/DeepLabCut/blob/master/docs/installation.md

----------

#導入準備
1. Anacondaを使ってPython 3.7をインストール
https://www.anaconda.com/distribution/
2. NVIDIAドライバをインストール
3. CUDAインストールキットをインストール
4. 以下のyamlファイルをダウンロード
http://www.mousemotorlab.org/s/dlc-windowsGPU-aa86.yaml (Windows 10 GPU)
5. Anaconda を**管理者権限**で実行
#環境構築
1. 導入準備でダウンロードしたyamlファイルディレクトリを選択し仮想環境を作成

```
conda env create -f C:\yourenvironment\dlc-windowsGPU.yaml
```

2. 仮想環境に入る

```
conda activate dlc-windowsGPU
```
3. pipで以下3つをインストール

```
pip install numpy==1.17.2
pip install deeplabcut
pip install imgaug
```
4. pythonを実行しdeeplabcutをインポートできれば成功!!

```
python
import deeplabcut
```