OmniAICreator/Qiita-1.07M huggingface dataset:
IBM i でオープンソースを使用する上での問題と私が考える対応方法

# IBM i 上のオープンソースに関わり始めた時に思っていたこと
IBM i 上で稼動するオープンソースに関わり始めた 2007 年に私が思っていたことは、IBM i に今まで蓄積されてきた各種データを 5250 画面の操作を知っている担当者ばかりではなく、Web アプリケーションとしてもっと簡単に多くの人が活用できたら良いのに。ということでした。Web アプリケーション化するための製品もいくつかありましたが、オープンソースを活用するともっと便利なのではないか、と考えて関わり始めました。

# 予想外のこと
しかしながら、実際は思っていた以上に労力がかかるものでした。もっと円滑にトラブル無く稼動できれば本当は良いのですが、導入してから安定稼動にいたるまで、および稼動開始後に発生するトラブルの原因調査と対応にかかる時間が多すぎる、と感じます。それは、いろいろな使い方の提案を考えたり、マニュアルの整備をしたり、ほかの色々なソフトウェアの使い方も覚えたり、などの前向きのことをするための時間が削られ、後ろ向きの仕事で時間が食いつぶされてしまう、ということにつながります。

# IBM i の問題点
IBM i をオープンソースベースのアプリケーションを稼動させるプラットフォームとしてみた場合、下記の３つがもっとも大きな問題と感じます。

1. CCSID という IBM i 特有の文字コード制御の仕組みにより、英語圏では英語の小文字として解釈される文字が日本語環境では半角カナとして解釈されることがある。オープンソース内部で呼ばれているコマンド名などに英語の小文字が使用されているため、内部でトラブルを発生させることがある。その他、文字コードに依存するインターフェースで問題が生じることがある。
2. x86 Linux 向けに公開されているノウハウが IBM i では参考にできない可能性が高い。ほとんど情報がない中、対処方法を試行錯誤する必要がある。調査依頼可能な企業も限られている。
3. オープンソースの選択肢、およびバージョンアップによる改良の恩恵を受けられるかどうかは、ベンダーによる提供の有無、および提供スケジュールに大きく依存する。自分たちでパッチを当てて改善できる可能性は、ほぼゼロ。

私個人としては、オープンソースベースのアプリケーションをIBM i 上で稼動させることは本当に適切なのだろうか？IBM i にこだわる必要はあるのだろうか？と考えています。

# 最近提案していること
そのため、最近は、x86 Linux プラットフォーム、および x86 Linux ベースのクラウドの利用を積極的に提案しています。例えば下記のような改善効果が期待できます。

1. 文字コードが OS 全体で UTF-8 に統一される。そのため、英語圏では英語小文字として解釈される文字が日本語環境では半角カナとして解釈される、ということがなくなる。
2. x86 Linux 向けに公開されている各種ノウハウがそのまま使用できる。
3. 必要に応じてソースコードを入手して自分でコンパイルしたり、パッチを当てて改善できる。開発コミュニティーでの日々の改善の恩恵も受けやすい。調査依頼可能な企業も多数存在する。

# その他のメリット
さらに、最近ではクラウドを使用することにより、下記のような恩恵も受けることができるようになって来ています。

1. 分析、予測関係のアプリケーションは、IBM i 上で稼動するソフトウェアだけではアイデアを実現することが難しかったが、各種の Watson API により簡単に実現することができる。
2. DevOps 機能との連携により、 ソースコードの管理、本番環境へのデプロイも容易に行える。自分で Git を導入する手間をかけなくてもよい。

# 最後に
IBM i 上に蓄積してきたデータを他のプラットフォームに移行することにもそれなりの労力がかかります。しかしながら IBM i 上でアプリケーションを稼動させようとして、多数のトラブルに直面し、解決に労力をかけることについても疑問に思います。

ひとつの解決策としては、IBM i は、蓄積した業務データのデータソースとして割り切って使い、各種の処理は x86 Linux やクラウド上のアプリケーションへデータ連携して実行する、という住み分けはいかがでしょうか。

この記事が、IBM i 上でオープンソースベースの各種アプリケーションのトラブルに直面して困り果てているみなさま、および IBM i から他のプラットフォームへの移行可否および範囲について検討にお困りのみなさまのお役に立てば幸いです。
機械学習用のデータをExcelで用意してもらいpandasで読み込む

PCに不慣れな人でも機械学習がとりあえず試せるようなアプリを作ることになった。
ユーザーに学習用データや予測したい未知データをどうやって整理してもらうかいろいろと考えた結果、
ひな形を1つのExcelファイルにして、それを埋めてもらう形が最も理解されやすかった。

ひな形はこんな感じに。
・A列に目的変数
・B列以降に特徴量
・1行目は変数名，2行目以降にデータ
・シートの上のほうに学習用データをまとめて配置
・未知データはその下にまとめて配置し、A列は空白

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/242733/ce147329-1e11-724a-d178-5e8d780ec30c.png)



アプリ側でデータの加工はせず、エラー値の除去や特徴量の正規化、交互作用などの追加はユーザーに任せることに。
これをpandasのExcelFileメソッドで読み込み、学習用X,Yと未知Xに分割する。

```python:test.py
def xlsx_read():
   xl_path = "C:\test.xlsx"
   xl= pd.ExcelFile(xl_path)
   df = xl.parse("data") #シート名を指定してDataFrameにする
   df_measured_X = df.dropna().iloc[:,1:len(df.dropna().columns)] #学習用X：dropna()でNaNがある行を除いて、ilocで左端以外の列を抽出
   df_measured_Y = df.dropna().iloc[:,0] #学習用Y：dropna()でNaNがある行を除いて、ilocで左端の列のみ抽出
   df_unknown_X = df[df.isnull().any(1)].iloc[:,1:len(df[df.isnull().any(1)].columns)] #未知X：isnull()でNaNがない行を除いて、ilocで左端以外を抽出
   return df_measured_X, df_measured_Y, df_unknown_X #タプルで返す 学習用X,学習用Y，未知X　の順
```
neovimをインストールする

Neovimの最新版をインストールする方法が意外とないのでメモ


## 結論

brewとかaptとかで配信されてるけどgithubのreleaseを落としてくるのが一番安全
意外と書かれてない

# 手順

* releaseページに行く
    * https://github.com/neovim/neovim/releases
* 環境に合わせたアーカイブをダウンロード
* 解凍して実行できるように配置

## debianの場合

* tarを落として解凍して実行できるパスに配置

```
$ wget https://github.com/neovim/neovim/releases/download/nightly/nvim-linux64.tar.gz
$ tar zxf nvim-linux64.tar.gz
$ mv nvim-linux64/bin/nvim /usr/local/bin
```
PDF Image GeneratorをMacで使うための準備

# PDF Image Generatorとは
PDFをアップロードすると同時にサムネイルを自動で作ってくれるプラグインです。

# 動作するための前提条件
imagemagick
ghostscript
imagick
というライブラリに依存してるみたいなのでこれらをインストールする必要があるようです。
これらをインストールしないとプラグインを有効化できません。

# 必要な手順
## 1. imagemagickをインストールする

`$ brew install imagemagick`

## 2. ghostscriptをインストールする

`$ brew install ghostscript`

## 3. pearをinstallする

```
※ホームディレクトリにインストールする前提で書いてます。
$ cd ~/
$ curl -O http://pear.php.net/go-pear.phar
```

何か聞かれたら全部Enterで良いと思います。

## 4. pearへのパスを通す
~/.bash_profileに以下を追加する。

`export PATH="$PATH:$HOME/pear/bin"`

bash_profileの変更を反映させるため以下コマンドを打つ。
`$ source ~/.bash_profile`



※もしpearをホームディレクトリ以外にインストールした場合は適宜パスを変えてください。

## 5. imagickをインストールする
4.でpearをインストールするとpeclというコマンドが使えるようになるはずです。
以下のコマンドを打ってimagickをインストールしましょう。

`$ pecl install imagick`

## 6. php.iniを修正する。
まず使用してるphpのバージョンを調べます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/112614/f7b9c26b-d1a6-e075-47a7-35e9e79319ff.png)

MAMPのPreferences...から確認できます。
使用しているバージョンに対応するディレクトリの中にあるphp.iniを開きます。
`/Applications/MAMP/bin/php/php7.1.1/conf/php.ini`

`extension=imagick.so`を追加。（;Extensinosと書いてあるところに追加すれば良いと思います。）

以上。
これでPDF Image Generatorプラグインを有効化できるようになるはずです。
【UMLでプリキュア】変身のモデル見直し

#前回からの反省
前回の記事[【UMLでプリキュア】分析モデル](https://qiita.com/azuki8/items/e5bf40d4679361e49831) の続きを書こうとしたのですが、
なんと、ドメインの分析が足りなかったようです。
モデルを見直します。

変身のセリフを調べていたら、
そもそも、変身の概念って、プリキュア個々人ではなく、
複数人での変身がそもそも基本なんですね。
確かに、、、！！！

参考サイト：[歴代プリキュア、変身シーンのセリフまとめ！最新作『HUGっと！プリキュア』までの決め台詞](https://www.hobiwo.com/entry/precurechange)

#変身をモデルで理解する
今回は、変身のドメインの再理解からです。

##変身はそもそもチームでするもの
前回モデル化したときは、**プリキュア個々人が変身するだけ**と思っていたけれど、
上述の参考サイトを見て調べたら、変身は、メンバーがある程度の人数そろっているときに、
みんなで最初の掛け声を出してから、個々人が変身し、その場にいる全員の変身が終わったところで、
再び、全員でのセリフがあるのです。
（『ふたりはプリキュア』は、もう少し複雑だが、まずは除外した。後で見直したい）

##変身時に必要な相手の考え方
当初、あるプリキュアが変身するには、その場に同時にいるべきメンバーがいるのだと思って、
前回のモデルを描いたのですが、
どうも、変身についてみていると、
『ふたりはプリキュア』は、二人が一緒にいないと変身できない、
『プリキュア５』は、一人でも変身できるけれど、複数人でも変身できる、
のように、「変身」というものに、実行開始可能メンバーがあるのだと認識を改めました。

#見直したモデル
ゆえに、それをモデル化すると、

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197297/a90672f6-0340-f083-b1f8-d8d7ab109b31.png)
「変身」とは、複数人の「変身する者」がいて、
「開始のセリフ」と「終了のセリフ」がある。
そして、変身するプリキュアには順番がある（これは関連端の {ordered}制約で表現）。

そのほかに、変身には「必須メンバー」が ０人以上いる(多重度 0..* がそれを表している)。

『ふたりはプリキュア』ならば、必須メンバーに二人が入っていて、
『プリキュア５』ならば、必須メンバーはいない、

という感じです。

#改めてモデル全体像
技についても、変身と同様かと思いきや、どうも同じじゃないみたい。
技のセリフをよくまとめたサイトが見つからなかったので、資料不足で、まずは技の部分は見送り。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/197297/1cf91adc-cb41-fa25-b996-0fcdf7fc2431.png)

#今回の終わりに
という訳で、すみません。プリキュアを初代から見てきた自負はあったのですが、
あんまり、クラス的には理解不足だったみたいです。
モデルの見直しもしながら、連載になりそうです。
Railsで<link_to>にclassを指定してもJavascriptでは呼び出せない！？


#問題(エラー)
Railsでアプリケーションを作成していて、モーダルウィンドウをjsファイルからclickイベントで呼び出そうとしたが反映されなかった。以下、エラーが出ていた時のソースコード。(bg-modalについては割愛)

```script.js
$(function(){
  $('.login').click(function(){
    $('.bg-modal').fadeIn();
  });
});
```
```application.html.erb
<li>
  <%=link_to("ログイン", "/login", { :class => "login"})%>
</li> 
```



#原因

link_toタグにloginクラスを指定していたこと。


#試したこと
link_toタグからliタグにclassを指定し直したらjsが反映された。

```application.html.erb
<li class="login">ログイン</li>
```

原因はわからないが、とりあえず同じように悩んでいる人がいたら上記を試してみて下さい。
vscodeのclojureプラグインのエラー

ここ数週間clojureに初めて触れてvscodeで楽しく書いているのですが、
たまにプラグインで発生するエラーに困っていました。

そのエラーの解決方法が判明し、すっきりしたので書いておこうと思います。

# エラーの内容

REPLをvscode起動時に自動起動する設定にしているのですが、以下のような状態でした。

- vscodeを起動しても起動してこない
- Start nREPLをしても以下のエラーが発生する

![スクリーンショット 2018-06-23 23.52.55.png](https://qiita-image-store.s3.amazonaws.com/0/223116/41d92496-d881-07d9-6226-5356cd637210.png)
 
# 解決方法

vscodeで開いているファイルの拡張子が **.clj** であることを確認してください。
違う場合は、**.clj** ファイルを開くと起動します。
(プラグインのアンインストールはしなくても大丈夫!
CentOS7 SSH設定の記録

CentOS7 のSSHの設定をした時の備忘録

+ SSHポート変更
+ rootログイン禁止
+ ログイン可能ユーザ制限
+ 公開鍵認証設定

# 環境
+ host : centOS7
+ client : windows10 (Tera Term)

# 作業内容
**注意!!ログイン不能に陥る可能性があるため、直接操作できるようにしておくか別セッションを用意しておく**
## portの変更
### firewall
サービスを作る

```bash
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-shift.xml
sudo vi /etc/firewalld/services/ssh-shift.xml
- <port protocol="tcp" port="22"/>
+ <port protocol="tcp" port="XXXXXX"/>
```
サービスを登録する

```bash
sudo firewall-cmd --permanent --add-service=ssh-shift
sudo firewall-cmd --reload
```
### ssh
sshd_config よりポートを変更する

```bash
sudo vi /etc/ssh/sshd_config
- #port 22
+ port XXXXX
```
設定反映

```bash
sudo systemctl restart sshd.service
```

## rootログイン禁止
`/etc/ssh/sshd_config` に`AllowUsers` を加える

```bash
sudo vi /etc/ssh/sshd_config
- #PermitRootLogin yes
+ PermitRootLogin no
```
設定反映

```bash
sudo systemctl restart sshd.service
```

## ログイン可能ユーザ制限
`/etc/ssh/sshd_config` に`AllowUsers` を加える

AllowUsers書式

|                     内容                     |             記述例             |
|----------------------------------------------|--------------------------------|
| 接続許可ユーザ設定                           | AllowUsers ユーザ名            |
| 複数の接続許可ユーザ設定                     | AllowUsers ユーザ名1 ユーザ名2 |
| 特定のIPアドレスからのみ接続許可ユーザ設定   | AllowUsers ユーザ名@接続元IP   |
| 特定のIPアドレスからのみ接続許可（全ユーザ） | AllowUsers *@接続元IP          |

```bash
sudo vi /etc/ssh/sshd_config
+ AllowUsers username
```
設定反映

```bash
sudo systemctl restart sshd.service
```

## 鍵認証設定
### 鍵生成
**client側作業**
今回はTera Term で鍵を生成する

1. メニューバー→設定→SSH鍵生成 を選択
1. 鍵の種類：RSA　ビット数:2048以上
1. 「生成」をクリック(パスフレーズやコメントは適宜。)
1. 「公開鍵の保存」、「秘密鍵の保存」をそれぞれ行う。

### 鍵登録
**host側作業**
hostに一時ディレクトリ(`~/tmp/`)を作り、そこに**公開鍵**を転送する(`~/tmp/id_rsa.pub`)。
方法はSCPでもよいし、内容を転記してもよい。

鍵を`~/.ssh/authorized_keys`に登録する。未作成の場合はつくる。
`authorized_keys`には複数の鍵を、追記していくことで登録できる。

```bash
# ~/.ssh/ がない場合
mkdir ~/.ssh
cat ~/tmp/id_rsa.pub >> ~/.ssh/authorized_keys
#アクセス権調整
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys
#一時ファイルの削除
rm ~/tmp/id_rsa.pub
```

### プレーンパスワード認証の禁止
`/etc/ssh/sshd_config`を変更し、プレーンパスワードでのログインを禁止する。

```bash
sudo vi /etc/ssh/sshd_config
- #PasswordAuthentication yes
- #PermitEmptyPasswords no
+ PasswordAuthentication no
+ PermitEmptyPasswords no

sudo systemctl restart sshd.service
```

## おまけ:鍵認証ログイン用Tera Term マクロ
```
username = 'USER'
hostname = 'XXX.XXX.XXX.XXX'
port = 'XXXX'
keyfile = 'D:\serverFiles\ID_KEY\PATH'

msg = 'Enter password for user '
strconcat msg username
passwordbox msg 'Get password'

msg = hostname
strconcat msg ':'
strconcat msg port
strconcat msg ' /ssh /auth=publickey /user=' ; 「/auth=publickey」で認証方法として公開鍵認証を指定
strconcat msg username
strconcat msg ' /keyfile='
strconcat msg keyfile
strconcat msg ' /passwd="'
strconcat msg inputstr
strconcat msg '"'
connect msg
```
JSON形式のデータをGASで処理する方法(APIの処理で使うメモ)

# GASでAPIを叩くための関数(GETの単純な場合)
```
function API(keyword){
  var APIKEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
  var url ='yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
  var response = UrlFetchApp.fetch(url);
  var o = JSON.parse(response.getContentText());
  return o;
}
```


# JSON形式の処理
  JSONの戻り値が下記の場合

  {result={area={shop=apple : id=19990}}}

```
  var o = JSON.parse(response.getContentText());
  o.result.area //{shop=apple : id=19990}
  o.result.area.shop; //　apple
```
YAML1.1で使われる記号の意味

YAML1.1の記号、結構ググりにくいものが多いので
よく使われそうなものだけまとめました。

また、配列やハッシュに親しい表現になるということを文字列だけで表すと直感的にわかりにくいので
Rubyで読み込んだ後の状態を、プログラム上でのイメージとして今回載せています。

## 調査した環境

```bash
$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) 
```

ruby2.5なのでYAMLのバージョンは1.1です。
参考：[Ruby2\.5時点のYAML標準ライブラリはYAML1\.1 \- コード日進月歩](http://shinkufencer.hateblo.jp/entry/2018/06/10/230945)

## それぞれの記号の意味

### -（ハイフン）
2つ使い方の用途がある。

#### 配列
1つの場合は配列として利用できる。

```yaml:例
- aaa
- bbb
- ccc
```

Ruby的な表現をすると以下のイメージです。（あくまでもイメージ）

```ruby:読み込みイメージ
["aaa", "bbb", "ccc"]
```

#### ファイル始端

3つ重ねて使うとファイルの始端の意味を表す。
`.`の項で詳しく説明します。

### :（コロン）
コロンを境に左側がキー、右側が値というのを表します。
主にHashのようなキーと値のセットのイメージです。

必ずコロンの後はスペースまたは改行をいれること。

```yaml:例
key: value
```

Ruby的な表現をすると以下のイメージです。（あくまでもイメージ）

```ruby:読み込みイメージ
{"key"=>"value"}
```

#### 多重階層表現の場合
多重階層で表す場合はインデントで下げます。

```yaml:例
main:
 sub1: value
 sub2: value
```

Ruby的な表現をすると以下のイメージです。（あくまでもイメージ）

```ruby:読み込みイメージ
{"main"=>{"sub1"=>"value", "sub2"=>"value"}}
```

### &（アンパサンド）
YAMLの用語としては「アンカー」と呼びます。
変数のような使いかたをし、後述のエイリアスと併せて使います。

`&` で記述した内容自体は反映されません

```yaml:例
key: &vars value
```

これをrubyで変換すると以下のイメージ

```ruby:読み込みイメージ
{"key"=>"value"}
```

実際の使い方はアスタリスクの項目で説明します。


### *（アスタリスク）
YAMLの用語としては「エイリアス」と呼びます
アンカーで設定した値をセットすることができます。
アンカーが変数定義で、エイリアスが変数利用のイメージです。

```yaml:例
key1: &vars same_value
key2: *vars
```

上記は、以下の内容と同じになります

```yaml:例
key1: same_value
key2: same_value
```

### <（小なり）
 `<<:` と記述することでハッシュのマージができます。
 これはエイリアスとセットで使われる事が多いです。
 以下に例を示します。
 
```yaml:例
group1: &main_group
  member1: taro
  member2: sato
  member3: kato
group2:
  <<: *main_group
  member4: ito
```

これは以下の内容と同義になります。

```yaml:例
group1: 
  member1: taro
  member2: sato
  member3: kato
group2:
  member1: taro
  member2: sato
  member3: kato
  member4: ito
```


### .（ドット）
3つ重ねて使うことでファイル終端を表します。
`---` と併せて使うケースが多いです。

以下の場合、ファイルをロードすると`key1`と`key2`が読みこまれて終端扱いになり、`key3`は読み込まれません。

```yaml:例
---
key1: value1
key2: value2
...
key3: value3

```



### #（シャープ）

コメントアウトです。
先頭行に書く場合には素直にコメントされるが
テキスト途中で行う場合はうまく挙動しない場合があるので注意してください


### ?（はてな/クエスチョン）

`?` 以降のものは明示的にキーであることを表す
使い所としてはキーが `nil` にしたい時に使う


```yaml:例
? : "key is nil"
```

※ `?`に関してはYAML1.2の定義と若干振る舞いが違うので動きは要確認

## 参考サイト

* [プログラマーのための YAML 入門 \(初級編\)](http://magazine.rubyist.net/articles/0009/0009-YAML.html#%E3%82%A2%E3%83%B3%E3%82%AB%E3%83%BC%E3%81%A8%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9)
* [YAML 基本記法まとめ \- Qiita](https://qiita.com/gcfuji/items/5f8e4c5795ce41b214d1)
* [YAML入門 \- Qiita](https://qiita.com/mo4_9/items/7be753dc221c2f049670#%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AE%E3%83%9E%E3%83%BC%E3%82%B8)
* [YAMLにコメントを書くときの注意 \- Qiita](https://qiita.com/snaka/items/8d1b2be74381a9a98281)
* [YAMLでnilをキーにしたハッシュを扱う \| おおたの物置](https://ota42y.com/blog/2014/11/25/ruby-hash/)
* [YAMLをRubyへ変換する時に困らなくなる記事 \- Qiita](https://qiita.com/tkosuga@github/items/8ed6e45788648f5a089d)

タイトルの元ネタ

* [Rubyで使われる記号の意味（正規表現の複雑な記号は除く） \(Ruby 2\.5\.0\)](https://docs.ruby-lang.org/ja/latest/doc/symref.html)
Atom+NuclideでESModulesをデバッグしてみる

## やりたいこと

`import/export`その他諸々のES記法で書かれたコードをデバッグする。

## やったこと

`Launch debugger`で起動したランチャーで、`Runtime Executable`に絶対パスで`babel-node`のパスを入れる。

![img-atom](https://www.evernote.com/l/AE3U2FQyToFECadDEGhOPw36G5uNNawOeswB/image.png 'img-atom')

最適解かはわからない(´・ω・`)
名前を使った空きドメインの探し方

#名前を使った空きドメインの探し方
ゆるキャン△というアニメに「志摩りん」というキャラクターがいるのですが、
そのキャラクターのファンの方が[https://shimar.in](https://shimar.in)でドメインを取得しサイトを公開しているのです。
名前をそのままドメインにする系のサイトを他の人がどのくらいやっているのか気になったため探ってみようとおもったのがことの始まりです。

##ルール
1.ドメインは以下のサイトで取得可能なドメインから探す
https://www.onamae.com/advanced/?btn_id=02_top_menuarea_advanced_20171215

2.対象はアイドルマスターシンデレラガールズ・ミリオンライブのキャラクターの名前(全名)

3.姓名逆転・声優名・あだ名・相性は含めない。

##実際の探し方
1.取得可能なドメインを一覧にする
本来はスクレイピングをしてとってきた方がテッキーなのですが、今回は簡単にコピペして、

```
.com
1,160円

.net
1,260円

.press
1円

.space
1円

.work
1円
.
.
.
```

こうなって
^[0-9,]{1,6}円$\n  → ``
の置き換えをかけて

```
.com


.net


.press


.space


.work

.
.
.
```

さらに改行を消して
^$\n → ``

```
.com
.net
.press
.space
.work
```

こうして
\n → ','
に置き換えをして、前後に[']をつけて
\. → ''
でドメインのアルファベットのみにすれば、
これでドメインの一覧を用意できました。

2.アイドルを全員ローマ字に変換する
私は以前にコレのデータを自作したので、既に手元にあったのですが、
ない場合は、
[https://github.com/imas/rubimas](https://github.com/imas/rubimas)
[https://github.com/imas/CinderellaGirls.json](https://github.com/imas/CinderellaGirls.json)
からデータを取り込み、yahooのルビ振りAPIでやるのが早いかと思います。

3.ひたすら後方一致をおこなう。
例えばですがこんな感じです。

```ruby:sample.rb
def get_domain(name)
  domains = [ドメインの候補リスト]
  domains.each do |domain|
    if roma.end_with?(domain)
      url = 'http://' + name.sub(/#{domain}$/,'') + '.' + domain
      return link_to url, url, target: 'blank'
    end
  end
  return ''
end
```

##結果
お名前の一覧からのデータではほとんどドメインと一致することがなかった。
空いた時間で簡単にやっただけなので、もしやる気が出た際は、しっかりと改修を行い、沢山の名前ドメインを見つけていきたい。
![domain.png](https://qiita-image-store.s3.amazonaws.com/0/21001/a6a97c79-a703-c6d6-f2c8-33db05dbad3f.png)


##今後やりたいこと
・公開したい
そもそもページを公開にしていないので、まずは公開をしてからいろんな品質を上げていきたいです。

・ドメインの最後の音が「母音(aiueo)」or「ん(n)」のもののみを探す。
地味にマッチングじ時間がかったし、今後候補のドメインが増えていく時に、名前ドメインに必要ない候補は予め弾いておきたい、コレは最初から、フィルターをかけてから検索すればいいですね。

・実際にドメインを取得できるかを出したい。
コレはお名前はAPIが公開されていないようなので、非同期でリクエストを投げて帰ってきた値をパースして、ゴニョゴニョして、、、といった対応になるのかもしれません。
調べた後、実際に本気で取得をする人がどのくらいいるかわかりませんが。。。

・金額を出したい
調べた後、実際に本気で取得をする人がどのくらいいるかわかりませんが念の為。。。

・姓名逆転・声優名・あだ名・相性・ローマ字表記のバリエーションも調べる
思いの外ドメインで一致する件数が少なかったので、可能性を少しでも上がるように。

・お名前以外の海外のドメイン管理会社でもやってみたい
カナダ「ca」など、例外的なドメインも取り扱っていきたいです。
例えば[ここ](https://jp.godaddy.com/tlds/gtld.aspx?catId=0)とか

・お名前取り扱えるドメインが増えた時の対応
今は手作業で全部やっているので、新しく取り扱えるドメインが増えた時の対応を行っていない。
どうにかシステムで対応したい。

##最後に
思いつきで始めたネタでしたが、簡単にそれなりに面白いのが出来てよかったです。
今後も思いついたらすぐに作って、ワチャワチャしてみたいです。
web3.js で Ethereum のトランザクション詳細を取得

web3.js@1.0.0 で Ethereum のトランザクション詳細を取得する方法です。



Ethereum のトランザクション詳細を取得するには、トランザクションの発行時に得ることのできるトランザクションハッシュが必要になります。トランザクションハッシュを引数に、`web3.eth.getTransaction` を呼ぶことでトランザクションの詳細を取得することができます。



#サンプルコード

```javascript

web3.eth.getTransaction('0x26d07b711961a06eb9f07eefe98895100c647c3972247c40dfc81f4458dd42fa')
.then(console.log);

```



# 上記のコードで取得できた結果

```js
{ blockHash: '0xfb35e7511a7e96b804bca4407241b81d4f0155a48d6967da3c7ff44997e5d868',
blockNumber: 5603794,
from: '0xf2018FA89f4ed6F6109f9A871021adebb3E97035',
gas: 210000,
gasPrice: '41000000000',
hash: '0x26d07b711961a06eb9f07eefe98895100c647c3972247c40dfc81f4458dd42fa',
input: '0xe3818ae7a9bae381aee4b88ae3818be38289e38193e38293e381abe381a1e381afefbc81',
nonce: 0,
r: '0x9bc00cb7500b4efb54835f69cb2534d55ed1099c133ab1aea4f823acfb58a057',
s: '0x167c431e0b7b71ef7e2a82d1beffaf607412589e9b388fbadab254e475d259f8',
to: '0xF02c1c8e6114b1Dbe8937a39260b5b0a374432bB',
transactionIndex: 14,
v: '0x25',
value: '0' }

```


 * なお、上記で得られた結果は、[web3.js の公式ドキュメント上](http://web3js.readthedocs.io/en/1.0/web3-eth.html#gettransaction) に記載されている結果と異なります。
* これはおそらく geth 側の API 変更によるものであると考えれます。
[geth のコード](https://github.com/ethereum/go-ethereum/blob/master/internal/ethapi/api.go#L860) をみると、上記コードでの戻り値と一致しています。
* Ethereum 関連のプロジェクトはまだまだ開発が盛んに進められている最中で、ドキュメントの更新が間に合っていないようなので、自ら積極的に手を動かしてコードを実行したり、コミュニティに直接貢献していく必要がありそうです。

#参考
* https://scrapbox.io/web3-jp/web3.eth.getTransaction
* https://github.com/ethereum/go-ethereum/blob/master/internal/ethapi/api.go#L860

# Note
- Ethereum 関連の情報は https://scrapbox.io/sushiether/ に集約することにしました。
- この記事の内容に変更・更新がある場合は、以下の URL を更新します。
- https://scrapbox.io/sushiether/web3.js_で_Ethereum_のトランザクション詳細を取得
Putty＋sshkeygenではまった

#はじめに
Puttyではpemフォーマットのssh-keyが利用できないことを知らずにはまったので、
備忘録として残しておく。

#環境
- window 10
- Putty 0.7
ログイン先
- CentOS7.5

#状況
CentOS7.5上で、ssh-keygenを利用して作成した秘密鍵をwindows上にコピーして来て、
PuttyでPrivate Key fileに設定しても、

```
Unable to use key file (OpenSSH SSH-2 private key (old PEM format))
```
となり、うまくログインできなかった。

#解決方法
どうやら、Puttyでは、pemフォーマットの秘密鍵をSSHのカギとしては利用できないらしい。
[ここ](http://d.hatena.ne.jp/kaishitaeiichi/20120104/1326122048)のサイトの通り、Puttygenを利用して、秘密鍵を作り直すことでログインできるようになった。
ecs-cliを使ってFargateで簡単なタスクを実行してみる

## 概要

これの続きから
[ecs-cli ベースでイメージを管理する](https://qiita.com/cohakim/items/903768ab3d6a8cb17ff3)

とりあえずECRにイメージがあがったので、Fargateを使って非常駐のタスクとして実行してみる。
（常駐コンテナ=service, 非常駐コンテナ=run-task というらしい）

## 手順

### ECSクラスタを作成する

ECSクラスタを作る。Fargateを使うので、EC2のインスタンスなどを用意する必要はない。

#### クラスタの事前設定

まずはクラスタの事前設定を行う

```
$ ecs-cli configure --cluster hello-world --config-name hello-world --default-launch-type FARGATE --region $AWS_REGION
```

以下のようなファイルが作成される

```~/.ecs/config
version: v1
default: hello-world
clusters:
  hello-world:
    cluster: hello-world
    region: us-east-1
    default_launch_type: FARGATE
```

複数の設定が保存されるようだが、構成の切り替えをいい感じにやってくれない。（デフォルトに設定されたクラスタが使われる）
direnv でクラスタの設定コマンドが毎回実行されるようにしておく。

```.envrc
ecs-cli configure default --config-name hello-world
```

#### クラスタの作成

クラスタを作成する。
一緒に実行環境となるVPC/Subnetも作成されるのでIDをメモしておく。

```
$ ecs-cli up
INFO[0003] Created cluster                               cluster=hello-world region=us-east-1
INFO[0005] Waiting for your cluster resources to be created...
INFO[0006] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
VPC created: vpc-2a856650
Subnet created: subnet-482d8866
Subnet created: subnet-966806dc
Cluster creation succeeded.
```

#### セキュリティグループの作成

タスクの実行に必要なセキュリティグループを作成する。
作成されたIDをメモしておく

```
$ aws ec2 create-security-group --group-name "hello-world" --description "default security group of hello-world" --vpc-id "vpc-2a856650"
sg-0deb7f46
```

### タスク定義を作成する

ベースのdocker-compose.yml、本番用差分docker-compose.yml、ECS設定用ecs-params.ymlの3ファイルに分割して作成する

```docker-compose.yml
version: '2'
services:
  app:
    build: .
    image: 08123xxxx.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
```

```docker-compose.production.yml
version: '2'
services:
  app:
    logging:
      driver: awslogs
      options:
        awslogs-group: hello-world
        awslogs-region: us-east-1
        awslogs-stream-prefix: hello-world
```

```ecs-params.yml
version: 1
task_definition:
  ecs_network_mode: awsvpc
  task_execution_role: ecsTaskExecutionRole
  task_size:
    cpu_limit: 256
    mem_limit: 512
  services:
    app:
      essential: true

run_params:
  network_configuration:
    awsvpc_configuration:
      subnets:
        - subnet-482d8866
        - subnet-966806dc
      security_groups:
        - sg-0deb7f46
      assign_public_ip: ENABLED
```

サブネットやセキュリティグループはクラスタ作成に一緒に生成されたものを利用している

### タスクを実行する

タスク定義の登録とタスクの実行が同時に行われる
すでに定義済みで設定に更新があった場合、自動で新しいリビジョンが作成される

```
$ ecs-cli compose --file docker-compose.yml --file docker-compose.production.yml --ecs-params ecs-params.yml up --create-log-groups
```
Zilliqa エコシステムグラントプログラムについて

Zilliqaは ハイスループットで安全なブロックチェーン インフラを構築するため、優れた学者、開発者と企業家を集めました。私たちは世界中で初シャーディングの技術を使用し ネットワークの拡張につれて、スループットを増やすことができるプラットフォームを作りました。 Zilliqaもう一つの展望は既存のスマートコントラクトの セキュリティー問題を解決することです。 そのため、新しい中間的なスマートコントラクト言語 Scillaを開発しました。この言語を使えば、もっと簡単に安全なスマートコントラクトを書くことはできます。

第三四半期のメインネットロンーチまで、ZilliqaのチームはプラットフォームとScillaの開発に取り組んでいます。いくつかのDappsはすでにZilliqaで実行する意向を公表しました。Zilliqaはハイスループットで安全なのでペイメント、金融、ゲーム、デジタル広告、メディアなどに 適しています。

Zilliqaのエコシステムの開発を促進するため、米ドル5百万のZilliqaエコシステムグラントプログラムを開始しました。

目的:Zilliqaプラットフォームのツール、ライブラリやDappsの開発を促進する

グラント総額: 米ドル5,000,000相当

支払方法: 最低30% ZILs, 残りはUSDかETH

支払計画: 参加者はZilliqaチームと 開発マイルストーンや成果物を決めます。グラントは3段階で支払いします: 頭金、 中間の支払い（一部のマイルストーンが達成したら）と最後プロジェクトが完成する際の支払いです。プロジェクトはオープンソースでなければなりません。また、各チームは最低1年間プロジェクトのメンテナンスの責任を負わなければなりません。

Zilliqaからのサポート:

    資金（トークンや株式は取らない）
    技術的アドバイス
    Zilliqa最初のツール・DappsとしてウェブサイトやSNSでの掲載

選定過程:

    申し込みは2018年6月19日から始まります。
    ブロックチェーン開発関連の経験お持ちの方、またはほかのブロックチェンでMVPお持ちの方は優先です。
    Zilliqaチームによって評価されます。
    各作業は 割当制限あるので、早めに応募してください。
    申し込みはグラントを獲得するとは限らない

作業:

ツールとライブラリ

プロジェクト期間: ~1ヶ月

グラント見込み金額: ～USD 5,000、最大USD 10,000

    Sublimeのようなエディタのプラグインサポート
    Remixのような IDE*
    OSサポート：例えば、ウィンドウズ

プロジェクト期間:2～3ヶ月

グラント見込み金額: ～USD 10,000、最大USD 20,000

    Zilliqaウオレットと統合されるブラウザー拡張機能
    ブロック エクスプローラー*
    ウェブウオレット、 デスクトップ・モバイルウオレット*
    GPUマイニングスクリプトと複数トークンの自動マイニング切り替えソフトウェア
    Zeppelinのようなライブラリ
    web3.jsをZilliqaに 移植する

*このようなプロジェクトは既存のテストネットウオレット https://wallet.zilliqa.com/home, エクスプローラー https://explorer.zilliqa.com/home ともうすぐ公開するの ScillaウェブIDEよりいいユーザー体験を提供しなければなりません。

プロジェクト期間:3～6ヶ月

グラント見込み金額: ～USD 20,000、最大USD 50,000

    Truffleのような開発枠組
    Scillaのデバッガ
    Scillaの静的や動態分析ツール
    PythonかSolidityのような 高級言語をScillaに翻訳するサポート
    ステートチャネルのような添加インフラ

Dapps

プロジェクト期間:6～8ヶ月

グラント金額は 個別に判断します

    DEX、ゲーム、 ステイブルコイン、オークション、マーケットプレイス
    他のDapps

免責条項: グラントの選考や支払いはZilliqaチームの判断により決定されます。 もしマイルストーンを達成できない場合、Zilliqaチームは支払いを中止する権利を留保します。 コンプライアンスの原因で特定の国からの参加者を制限する権利も留保します。

申込方法: こちらの申込書に記入してください https://goo.gl/forms/cD9m8Hv3yM10h6gl1

他の開発者と交流、またはチームを結成するには https://gitter.im/Zilliqa/ecogrant に参加してください。
css div　を　center　に配置する方法

検索すると色々でるが、自分が今、これだと思ったのは以下の通り。

```test.html
<div style="position: relative;">
　<div style="width:50%;margin: 30px auto;">
　　ああああ。
 </div>
</div>
```



#bootstrapを使っている場合
まずは、bootstrapのグリッドシステムを理解する
http://websae.net/twitter-bootstrap-grid-system-21060224/

```
<div class="col-sm-3">
</div>
<div class="col-md-6">
真ん中に来させたい文。
</div>
```

このようにするだけで、とりあえず真ん中にくるので、手っ取り早い。
自分の場合、bootstrapはグリッドシステムしか意識して使っていない感じ。
webカメラ2台で距離測定その2

## はじめに
以前クリスマスに書いた[webカメラ2台で距離測定](https://qiita.com/ringo156/items/6c58ed5fae9e56dafefb)の続きになります。
前回は一度距離を測定してから，近似式を求めることで，距離を逆算しました。
今回はカメラのセンサーサイズを考えてステレオ画像の視差から距離を求めてみます。

## ステレオカメラ
### 三角測量

三角測量とは空間の1つの点を別々の地点から観測することで、その地点の位置が計算できるというものです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147601/4375e6b8-7298-fdd5-2aa4-c7937ba60231.png)
対象の位置と視差は図のように反比例の関係になります。
そのため、比較的近い距離のオブジェクトに対してのみ高精度な測定が行えます。

もう一度ステレオカメラにおける距離の計算式を考えてみます。
<img src = "https://qiita-image-store.s3.amazonaws.com/0/147601/8a007ac8-9e14-6b76-15c1-e6aa6fcfb839.png" width=70%>
上の図のような単純なステレオ装置を考えます。図の$c_{x}^{left}$および$c_{x}^{right}$は左右の画面であり、$x^l$および$x^r$は左右の画面上の対象Pです。
$O_l$と$O_r$は左右のカメラの主光軸で、カメラと対象$P$との距離を$Z$としています。
焦点距離を$f$カメラ間の距離を$T$とすると、上図のとき距離$Z$は次の式で求められます。

```math
\frac{T-(x^{l}-x^{r})}{Z-f} = \frac{T}{Z} \Rightarrow Z = \frac{fT}{x^{l}-x^{r}}
```
このとき視差$d$は$d = x^{l}-x^{r}$で表されます。
ここで視差$d$の単位はピクセルですが、実際の単位はカメラの撮像素子間の距離です。そのため1画素の大きさを求めることができれば視差を距離に変換して$Z$を求めることができます。

### 撮像素子の大きさを求める
使用したlogicoolのUSBカメラは撮像素子の大きさは公開されていませんでした。
そこで、USBカメラを分解して直接撮像素子のサイズを測りました。
カメラの撮像素子の大きさは光学サイズとか光学インチサイズと言われ、1/3インチとか4/3インチというふうにある程度大きさが決まっています。
そのためバラして測れば分かるだろうと憶測のもとに分解して測ってみました。
<img src = "https://qiita-image-store.s3.amazonaws.com/0/147601/a5ea507a-2429-7280-90b6-e0dd49da71a2.png" width = 70%>
バラして測った結果1/4サイズの撮像素子を使用していて、大きさは3.6[mm]x2.7[mm]でした。
カメラのキャプチャサイズは1280[pixel]x960[pixel]なので1画素あたりの大きさは2.8[μm/pixel]となります。
したがって距離$Z$をも求める式は次のようになります。

```math
Z = \frac{fT}{2.8(x^{l}-x^{r})}
```
## 距離を測定してみる
画像処理の手順は前回と同じで

1. カメラから画像を取得
2. 色抽出＆二値化
3. 平滑化処理
4. 対象の重心位置の推定
5. 左右の画像から得られた対象の重心位置の差を求める
6. 重心位置の差から距離を求める

画像処理にはOpenCVを、ラベリングと重心位置の検出には[ラベリングクラス](http://imura-lab.org/products/labeling/)を用いました。
カメラのキャプチャサイズは1280x960じゃ大きすぎるので640x480にリサイズしてから処理をしています。

## 結果
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147601/5412af88-eedf-c53a-fa4b-ec111e582d44.png)
測定された視差から距離を計算したものをグラフにしました。
反比例のグラフが現れているため測定はできていると考えていいと思います。
動作してる様子は次の動画を御覧ください。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">オープンキャンパスもあるので久しぶりに動かしてみた <a href="https://t.co/Os7Dl7bGiX">pic.twitter.com/Os7Dl7bGiX</a></p>&mdash; ringo (@Malus_Mill_) <a href="https://twitter.com/Malus_Mill_/status/1010515648609337345?ref_src=twsrc%5Etfw">2018年6月23日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
動画では処理速度と視差と求められた距離を表示しています。
1～2cmぐらいズレてますが、おおむね距離が測定できていると思います。

## おわりに
前回は最初に距離ごとに視差を求め、逆算することで距離を求めましたが、今回は既知の値を使うことで距離を測定することができました。
今後は得られた値をもとになにか動かしたり、FPGAで速度を稼いだりしたいと思います。

## 参考
[詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識 ](https://www.amazon.co.jp/%E8%A9%B3%E8%A7%A3-OpenCV-%E2%80%95%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%93%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86%E3%83%BB%E8%AA%8D%E8%AD%98-Gary-Bradski/dp/4873114136/ref=sr_1_2?ie=UTF8&qid=1529758409&sr=8-2&keywords=%E8%A9%B3%E8%A7%A3+opencv)
Swift超初心者が見るべきサイト

# swift超初心者なんだけど、どのサイトを見れば良い？って人。
つまり今の俺。ボエ〜

目次:
1.プログラムは書けても、そもそもMacが慣れない等、それ以前の問題がある場合。
2.バージョンは？
3.プログラムの文法とかはリファレンス見れば良いけど、xcodeの使い方まったくわからねえ
4.自分で補足しよう

## 1.プログラムは書けても、そもそもMacが慣れない等、それ以前の問題がある場合。
Macにwindowsの旗マークがある英語キーボード繋いだ俺の場合。
Ctrl Alt辺りのカスタマイズは可能で、ここは大事だ。

### Mac OS X のキーボードショートカットを Windows に適合させる
http://tokyo.secret.jp/macs/key_control.html
便利な世の中。

### ⌘英かな - 左右のコマンドキーを単体で押した時に英数/かなを切り替えるようにするアプリです。また、キーのリマップアプリとしても使用することができます。
https://ei-kana.appspot.com

なお、端末（ターミナル）のショートカットキーを使う場合は、まだ他にも何かあるらしいな。（俺は今はそこまで必要ない）

### Macの使いやすいランチャーは何かない？

Quicksilver というのがある https://qsapp.com/index.php

### PrintScreenキーが？効かないよ



```システム環境設定 - キーボード - ショートカット - スクリーンショット```
俺のキーボードでは、PrintScreenキーを押すとF13が割り当てられる。（日本語キーボードの事までは知らない）


## 2.バージョンは？
swiftのバージョンは、ターミナル（端末）で
```$ swift -version
Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42)
Target: x86_64-apple-macosx10.9```
俺のやつ古いやんけ！(2018.06.23現在4.1.1wikipediaソース)ちょっとアップデートしてくる

MacOSとxcodeをアップデートした。でもまだバージョン見れない。
```$ swift -version
Agreeing to the Xcode/iOS license requires admin privileges, please run “sudo xcodebuild -license” and then retry this command.```
ライセンスへの同意は、コマンドでも可能らしい。
```$ sudo xcodebuild -license
（中略）
By typing 'agree' you are agreeing to the terms of the software license agreements. Type 'print' to print them or anything else to cancel, [agree, print, cancel] agree```（agreeと入力してEnter）
```$ swift -version
Apple Swift version 4.1.2 (swiftlang-902.0.54 clang-902.0.39.2)
Target: x86_64-apple-darwin17.6.0```
いえす。

## 3.プログラムの文法とかはリファレンス見れば良いけど、xcodeの使い方まったくわからねえ
そもそも画像で説明してくれないと、操作方法があやしかったりする。

### 初心者のためのSwiftで始めるプログラミング入門（9）： 初めてiPhoneアプリをデザインするには、どうすればいい？――すぐ分かるInterface Builder、Storyboard、Auto Layoutの使い方
http://www.atmarkit.co.jp/ait/articles/1602/17/news031.html
概要がわかる！画像が多数入っていて、非常にわかりやすい。

### TwitterAPIとSwiftを使ってiOSアプリを作ろう！ - 前編 - #dotsgirls
https://qiita.com/ktanaka117/items/e721b076ceffd182123f
コードと共に順序立てて操作方法が説明してある！画像が多数入っていて、非常にわかりやすい。

### 超初心者向け！0からわかるXcodeの使い方入門コンテンツまとめ8選！
https://www.sejuku.net/blog/8484
ここの下のほうにこんなタイトルのやつがあって、これは詳細な上にわかりやすかった。「Swift学習・Xcode使い方入門｜iOSアプリ開発初心者が最初に知りたかったのはこれ」
まとめ8選の記事については、動画などもそうだし多様なアプローチで上手くまとまっていると思う。（俺は他のまではまだ見ていないが、そこは好きずきで見られよ）


## 4.自分で補足しよう
![image.png](https://qiita-image-store.s3.amazonaws.com/0/189956/1d00d2ec-3928-07c4-ef8d-cfd026aedaea.png)

### Spacing to nearest neighbor … 「最近傍」な空白
これはオブジェクト同士の位置を決めるという事ではなく、主体となるオブジェクトに対する近隣のオブジェクトとの距離（空白の量）を決めるという概念で合ってるって事なのか。
類似の件: wikipedia - 最近傍法(nearest neighbor algorithm)
https://ja.wikipedia.org/wiki/%E6%9C%80%E8%BF%91%E5%82%8D%E6%B3%95
なるほどね。

あともうしばらくしてよくわかってきたら、応用的な本まで視野に入れて何か買うぜ。
node redでWatson Assistantノードからapi key、Time Out Periodを求めるが空百にするそれとtwitter bot コツ

2018/06/23に書きました


#Watson Assistant

　
Watson bluemixがWatson Cloudになっていつの間にかnode redがWatson Assistantノードでapi keyを
求めるようになったがTime Out Periodと一緒に空白にするとおｋ（めちゃよくうまく動く）
##api key
watson Assistantの説明をよく見ると、なんか特別なお客様だけ入れるやつらし

特に空白にしろ！と言った説明はないが空白にすることでめちゃ動く

やったぜ

#twitter botコツ
参考にしなきゃいけないものが沢山ある
https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/tweet-object
当たり前かもだけどdebug参考して使いたいものを取るとおｋになる！
<img width="960" alt="dhdhchd.png" src="https://qiita-image-store.s3.amazonaws.com/0/258501/14c0f026-caaf-5d05-18ba-2084441593ac.png">
赤い線みたいにすればよし

##debugデバッグ入る方
![image.png](https://qiita-image-store.s3.amazonaws.com/0/258501/89757443-bbe9-1c32-181f-85457e792e22.png)
３線のハンバーガー（menuアイコン）をクリックして「表示」をクリックして「デバッグメッセージ」をクリック！完了
　
『サイドバー』ってのはデバッグメッセージと情報のバー
　

##DM(Direct Message) エラー＆方法

###エラー
<img width="251" alt="ｄｈｄｈｄｈｄｊｓｓｊ.png" src="https://qiita-image-store.s3.amazonaws.com/0/258501/70a504ad-ee8d-a516-e653-e80c6bd79338.png">


<img width="662" alt="ｄｄｄｄ.png" src="https://qiita-image-store.s3.amazonaws.com/0/258501/11f60264-1170-3da3-1775-776f28aa38c4.png">

###dm送った人にdmをするよにする方法
<img width="802" alt="ｄｂｓｈｃｈｓｈ.png" src="https://qiita-image-store.s3.amazonaws.com/0/258501/33cebd4f-8a26-cfbd-740b-6ee48bf0c7bf.png">



```
msg.payload = "D @"+msg.tweet.sender.screen_name+" "+msg.payload.output.text[0];
return msg;
```
Firebaseでオンライン対戦ゲーム作る

オンライン対戦ゲームを作ろうと色々調べていたら、[Firebase](https://firebase.google.com/)を使うと、簡単にオンライン対戦ゲームが作れることを知りました。

#参考にした記事
[Firebaseの始め方](https://qiita.com/kohashi/items/43ea22f61ade45972881)
[FirebaseとVue.jsで作るオンライン○✕ゲーム](https://qiita.com/miso_develop/items/c2061519bb458e22f7d3)
上記サイトを参考に、ローカルホストで動かしたり、オンライン上に公開するところまでいけました。
M5GoのマイクをArduinoで使う

###目的
M5GO/Fireに内蔵しているマイクをArduinoで読み取ってみる。

###準備
アナログピン34番から読み出すことができます。

###実装例


```
#include <M5Stack.h>

int analogPin = 34;
void setup() {
  M5.begin();
  dacWrite(25, 0); // Speaker OFF
　 pinMode(analogPin, INPUT);
}

void loop() {
  int val = analogRead(analogPin);    // アナログピンを読み取る
  Serial.println(val);
  delay(1);
}
```
Vueのv-htmlでXSSを回避する

[Vueのテンプレート構文](https://jp.vuejs.org/v2/guide/syntax.html#%E7%94%9F%E3%81%AE-HTML)の項を読めばわかることですが、v-htmlにはXSSの危険があることがわかります。

危険なコードの例を見てみましょう。

```vuejs:危険なコード
<template>
    <div id="app">
        <h1>サニタイズなし</h1>
        <p>{{ mastache }}</p>
        <p v-html="vhtml"></p>
    </div>
</template>

<script>
  export default {
    name: 'app',
    data() {
      return {
        mastache: 'mastache:<br><a onmouseover=alert(document.cookie)>click me!</a>',
        vhtml: 'vhtml:<br><a onmouseover=alert(document.cookie)>click me!</a>'
      }
    }
  }
</script>
```

このコードを実行すると、以下のような画面が描画され、click meにマウスオーバーしたときに攻撃コードが実行されてしまいます。
<img width="517" alt="スクリーンショット 2018-06-23 21.57.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/261125/a947a05c-3340-fa39-156d-eae7ae4be99a.png">

v-htmlを利用して描画する項目に、ユーザからの入力が含まれる可能性がある場合は、v-htmlにサニタイズ処理を加えましょう。
以下の例では、[sanitize-html](https://github.com/punkave/sanitize-html)を利用してVueの共通処理に仕込んで利用しています。

```js:共通処理を設定
import Vue from 'vue'
import App from './App.vue'
import sanitizeHTML from 'sanitize-html'

Vue.prototype.$sanitize = sanitizeHTML
new Vue({
  el: '#app',
  render: h => h(App)
})
```
```vuejs:サニタイズを行う
<template>
    <div id="app">
        <h1>サニタイズなし</h1>
        <p>{{ mastache }}</p>
        <p v-html="vhtml"></p>
        <h1>サニタイズあり</h1>
        <p>{{ $sanitize(mastache) }}</p>
        <p v-html="$sanitize(vhtml)"></p>
    </div>
</template>

<script>
  export default {
    name: 'app',
    data() {
      return {
        mastache: 'mastache:<br><a onmouseover=alert(document.cookie)>click me!</a>',
        vhtml: 'vhtml:<br><a onmouseover=alert(document.cookie)>click me!</a>'
      }
    }
  }
</script>
```

これを実行すると、以下のようになります。
[sanitize-htmlの初期設定](https://github.com/punkave/sanitize-html#what-are-the-default-options)では、aタグで許可される属性にonmouseoverは含まれていませんので、サニタイズされることがわかります。改行タグなどは、そのまま機能していますね。

![vue-xss.mov.gif](https://qiita-image-store.s3.amazonaws.com/0/261125/018bb285-6211-6223-0000-bd88e5897411.gif)

サンプルコードは以下。
プロジェクトを作るのが面倒だったので、Springのサンプルプロジェクトの中に紛れています。

https://github.com/tnemotox/sandbox

以上。


参考：
https://github.com/vuejs/vue/issues/6333
https://blog.sqreen.io/xss-in-vue-js/
M5Stackのファームを書き換える

##概要
M5Stackには、
・Arduinoで開発できる、M5Stack
・MicroPythonで開発できる、M5Cloud
・スマホからビジュアルプログラミングに対応した、M5go
の3種類が出ている。ファームウェアを書き換えれば、開発環境を入れ替えることができる。


##Espressif Flash Download Toolsのインストール

###Linuxの場合：
esptoolのインストール： pip install esptool

###Windowsの場合：
Espressif Flash Download Toolsをダウンロードする。
[Espressif Flash Download Tool](https://www.espressif.com/sites/default/files/tools/flash_download_tools_v3.6.4.rar)

##ファームのダウンロード
以下から*.binのファイルをダウンロードする。

M5Stack
https://github.com/m5stack/M5Cloud/tree/master/firmwares/OFF-LINE
M5Cloud
https://github.com/m5stack/M5Cloud/tree/master/firmwares
M5go
https://github.com/m5stack/M5GO/tree/master/firmware/v0.11


##ファームの書き換え手順

###Linuxの場合：
1.Flash ROMの内容を消去（erase）する、/dev/ttyUSB0はM5Stackのポートを調べて書き換える。

> esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash

2.Flash ROMにファームウェアを書き込む、firmware.binはファームウェアのファイル名に書き換える。

>esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash --flash_mode dio -z 0x1000 firmware.bin

###Windowsの場合：

1.esp32 download toolsを選択する。

![111.png](https://qiita-image-store.s3.amazonaws.com/0/73020/974feb69-c5fd-c58f-acfb-8c63e5e7beb5.png)

2.SPI Downloadタブから、ファームウェアを選択し、Eraseを押した後、Startを押す。

![memo2.png](https://qiita-image-store.s3.amazonaws.com/0/73020/7d47adf5-4839-bda4-1b46-a8dc41d6d18f.png)



##参考

M5GOのfirmwareをM5Stack用に書き換える（＋戻し方）http://littlewing.hatenablog.com/entry/2018/05/21/153646
M5Cloud
https://github.com/m5stack/M5Cloud/blob/master/README_JP.md
M5GOのLED-BarをArduinoで使う

###目的
M5GO/Fireの、LEDをArduinoで変えてみる。

###準備
Arduinoのライブラリマネージャーから、「Adafruit_NeoPixel」をインストールします。

###実装例

```
#include <Adafruit_NeoPixel.h>
#define PIN            15
#define NUMPIXELS      10
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 10; 
void setup() {
  pixels.begin(); 
}
void loop() {
  int color_r = random(255) ;
  int color_g = random(255) ;
  int color_b = random(255) ;
  for (int i = 0; i < NUMPIXELS; i++) {
    pixels.setPixelColor(i, pixels.Color(color_r, color_g, color_b)); 
    pixels.show(); 
    delay(delayval);
  }
  delay(100);
}

```
Rのlmer関数がp値を出力しない理由

# はじめに
階層データに対してマルチレベルモデリングなどの線形混合モデルをあてはめる際、よく使われるアプリケーションにRの[lme4パッケージ](https://www.rdocumentation.org/packages/lme4/versions/1.1-17)というのがあるのですが、これはRの関数にしては珍しく、フィッティングしたモデルの係数について**p値を出力しない**という特徴があります。いままで僕はこの特性について、作者が反p値主義者だからとかそういう「思想」的な産物によるものだと思っていましたが、少し調べてみるとどうやらそういった理由によるものではないらしいということが分かりました。以下、lme4パッケージの作者[Douglas Bates](https://www.stat.wisc.edu/~bates/)がこの件について述べた簡単な文章の拙訳を掲載します。原文は[ここ](https://stat.ethz.ch/pipermail/r-help/2006-May/094765.html)です。

# lmer, p-values and all that (2006)
lmer[^1] パッケージによる線形混合モデルのあてはめ結果にp値が含まれていないことに対して驚愕するユーザーも少なくない。同様に単一のlmerモデルに対する分散分析の結果ついても、固定効果の項それぞれの二乗和とそれに対応する分子の自由度は提供するが、分母の自由度とp値については提供しない。

ユーザーは分母の自由度とそれに対応するp値が簡単に計算できると思っているので、これはlmerを作った人（私）に欠陥があったからだと言っている。

ここで私は再び、なぜ（lmerに）p値を引用しないのか、つまり、なぜ私がSASの結果を再現するという「明らかに正しい」アプローチをとらないのかについて説明しよう。もちろんRプロジェクトの目的はSASによって出力されるp値の結果を再現することだと考える人もいるけれども、私はその一派ではない。もし彼らが私を異端児で、地獄の炎で焼きつくされるべきだと感じるなら、私は来月開催される2006年Rユーザーの会の懇親会でエキサイティングな最後を迎えるのを心待ちにしようと思う。

よく知られているように、固定効果モデル行列[^4]の係数についてのt検定量は分子の自由度が1のF検定量の平方根である。したがって、一般性を失うことなく、我々は分散分析の結果に現れるF検定量に集中することができる。大昔に「分散分析」または「実験計画」という授業を受けたことのある人なら、観測平方和と期待平方和に基づく分散の要素の推定方法と"error strata"[^2]に基づく検定の方法を習ったはずだ。（もし覚えるように言われていなければあなたはラッキーかもしれない）。よってlmerモデル（SASによるものも含めて）によって作られるF検定量はerror strataに基づくものである。しかしこれが簡単な話ではない。

lmerによるパラメータ推定は最尤法または**制限付き最尤法(RMEL)**によって行われるが、それらは観測二乗和・期待二乗和に基づくものでもerror strataに基づくものでもない。MLやRMELによる推定はlmerが、何重にもネストした要因や部分的に重なりのあるグループを持つ偏りのあるデザインを扱うことを可能にしたという意味で、良い方法であることは間違いない。そしてこうした状況は大規模な観察研究でよく起こるケースである。

ここに私にとって興味深く、何年もの間取り組んできた線形混合モデルの式とパラメータ推定に関する性質がある。しかしここではあまり立ち入らずに、単にモデルとデータが与えられて、パラメータの推定値が求められたとしよう。どのようにF検定量が計算されるのだろうか？　平方和と分子の自由度は線形モデルと同様に計算される。線形混合モデルには線形モデルの"effect"要素と似たスロット[^3]があり、モデル行列への属性の割り当てと同時に分子のF比を提供するスロットがある。分母は制限付き残差平方和をREML自由度で割ったもので、nを観測数、pを固定効果に対するモデル行列の列ランクとするとn-pに等しい。

ここで"the penalized residual sum of squares（制限付き残差平方和）"の"the"に注目して最後の文章を読んでみよう。すべてのF比は同じ分母を共有している。繰り返して言うが、すべてのF比は「同じ」分母を使っている。これが私が前提に問題があると考える理由である。ここでいう前提とはF統計量の分布は可変な分母の自由度を除いて既知の自由度を持つF分布に従い、検定ごとに異なる分母の自由度を割り当てる公式を発見することに酔ってどのようにp値を計算するかという問いに答えられるという前提である。分母は変わらない。分母は変わらない。なぜ分母の自由度は変わるのか？

混合モデルの固定効果の検定に関する研究の大部分はこれらの検定量が既知の自由度をもつF分布に従うと仮定しており、分母の自由度の近似をもとめることを目的としている。私は賛成しかねるが。

私が思うに実りあると考え、求めつづけている方法が一つだけである。混合効果モデルの罰則付きの二乗誤差は実際の罰則付き残差二乗和において残差の二乗和となる。そしてこの中に罰則付き最小二乗問題の自由度のように振る舞う量がある。私はそれを計算するコードを埋め込み、シミュレーションで振る舞いをみるつもりだ。

当面の間は、係数の一つ一つを評価するのであれば、私はMCMCサンプリングをおすすめする。それぞれの項を評価するのは難しいが、常にF比と分母の自由度の下限を得ることができる。

もしどうしてもSASによって得られる「明らかに正しい」分母の自由度の計算の実装に貢献したい人がいれば協力するのも吝かではない。しかしlmerに必要な罰則付きの二乗和アプローチと疎な行列の計算方法にはかなりの量の数式の移植を必要とすることを警告しておく。これらの式はn行n列行列の逆行列の計算する必要があり、nが100万を超える場合にはあなたも絶対に、絶対に計算したくないはずだ。

# 感想
読んでみると、真面目な話の間にちょいちょいきつめの皮肉が込められていてやっぱり癖のある人なんだなと思いました。技術的なことに関して言うと、結局混合モデルの係数をF検定の枠組みで検定するのは難しいから、どうしても検定をしたいならMCMCを使えってことなんでしょうか。この文章は2006年に出されたものなので、その後混合モデルのパラメータ推定に関する研究がどう進んだのかも気になります。この分野に詳しい方がいたら教えて下さい。

[^1]: Linear Mixed Eeffect model via REML methodの略
[^2]: すみませんここの訳分かりませんでした。直訳すると「誤差層」になりますが…。
[^3]: これは専門用語か一般用語かの判別が付きませんでした。一般的に言うと「枠」とかでしょうか。
[^4]: model matrix の略。モデルを行列で表すということに対してまだ自分自身よくわかっていないので誤訳かもしれません。
M5GOのIRセンサーをArduinoで使う

###目的
M5GOに入っている、IRセンサーをArduinoで使ってみる。

###準備
Arduinoのライブラリマネージャーから、「IRremote」をインストールします。

###実装例

```
#include <IRremote.h>
#include <M5Stack.h>
int RECV_PIN = 36;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
  M5.begin();
  irrecv.enableIRIn(); 
}
void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

```
[Arduino-IRremote](https://github.com/z3t0/Arduino-IRremote)
ecs-cli ベースでイメージを管理する

## 概要

dockerコンテナを管理するコマンドは複数あるが（docker, docker-composeなど）、デプロイ先に AWS ECS/ECR を考えた場合、ecs-cli ベースで管理すると便利そうだとわかった。

利用方法をメモしておく。

## ecs-cli のよいところ

- 基本的には docker-compose と同じコマンド体系
- 基本的には docker-compose と同じ構成管理ファイル（docker-compose.yml）が使える
- ECS専用のパラメータは別ファイルとして切り出せる
- AWSの認証周りの面倒なところをうまいことラップしてくれる

## 手順

### 環境変数を設定する

アカウント情報を環境変数として設定する
direnv で自動読み込みされるようにしておく

```.env
AWS_ACCESS_KEY_ID=1234xxxxx
AWS_SECRET_ACCESS_KEY=5678xxxxx
AWS_ACCOUNT_ID=08123xxxx
AWS_DEFAULT_REGION=us-east-1
AWS_REGION=us-east-1

AWS_ECR_REPOSITORY=08123xxxx.dkr.ecr.us-east-1.amazonaws.com
```

### プロジェクトの設定を行う

認証情報をプロフィールとして保村する

```
$ ecs-cli configure profile --access-key $AWS_ACCESS_KEY_ID --secret-key $AWS_SECRET_ACCESS_KEY --profile-name hello-world
INFO[0000] Saved ECS CLI profile configuration hello-world.
```

~/.ecs/credentials にファイルが作成される

```~/.ecs/credentials
$ cat ~/.ecs/credentials
version: v1
default: default
ecs_profiles:
  default:
    aws_access_key_id: 1234xxxxx
    aws_secret_access_key: 5678xxxxx
  hello-world:
    aws_access_key_id: 1234xxxxx
    aws_secret_access_key: 5678xxxxx
```

direnv で常に環境変数が設定されるならプロフィールの作成は必要ないかも

### ECR にログインする

```
$ $(aws ecr get-login --no-include-email)
```

### ECR にリポジトリを作成する

```
$ aws ecr create-repository --repository-name hello-world
```

### ビルドの構成ファイルを作成する


```Dockerfile
FROM ruby:2.5-alpine
MAINTAINER cohakim "cohakim@gmail.com"

WORKDIR /app
ENV RAILS_ENV production

RUN \
  apk upgrade --no-cache \
  && apk add --update --no-cache \
    bash

COPY . /app

RUN chmod a+x entrypoint.sh
RUN ./entrypoint.sh

ENTRYPOINT ["./entrypoint.sh"]
```

```entrypoint.sh
#!/bin/bash

set -e

echo 'hello world'

exec $@
```

```docker-compose.yml
version: '2'
services:
  app:
    build: .
    image: 08123xxxx.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
```

docker-compose.yml で環境変数を使えたら最高だが、ecs-cli は環境変数を展開してくれないみたい
ECSにデプロイするときに困るのでここでは直接書いている

### ビルドする

ecs-cli は build タスクに未対応っぽい
build は docker-compose で行う

```
$ docker-compose build
...
Successfully built e4879add2b3a
Successfully tagged 08123xxxx.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
```

### ECR にPushする

`ecs-cli push` が使える

```
$ ecs-cli push 08123xxxx.dkr.ecr.us-east-1.amazonaws.com/hello-world
INFO[0000] Getting AWS account ID...
INFO[0001] Tagging image                                 image=hello-world repository=08123xxxx.dkr.ecr.us-east-1.amazonaws.com/hello-world tag=
INFO[0001] Image tagged
INFO[0002] Pushing image                                 repository=08123xxxx.dkr.ecr.us-east-1.amazonaws.com/hello-world tag=
INFO[0006] Image pushed
```

## 参考

[Amazon ECS コマンドラインリファレンス](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ECS_CLI_reference.html)
javascriptのhashをmapで処理する

# javascriptでのhashをmapで処理する

- rubyでmapをよく使うのでjsでも使いたいな〜と思って調べた
- hashでmapを使う
- hashから配列にする
- 多重配列バージョンは以前、「[javascriptでmapを使う](https://qiita.com/emono/items/cc9d4ce06ea9fa75c9fe)」に書いた

## keyを取得
```js

var test = {};
test['a'] = 1;
test['b'] = 2;
test['c'] = 3;

// keysで配列のkeyを取得
Object.keys(test)
=> ["a", "b", "c"]
```

## こんな感じでmap使った
```js
var test = {};
test['a'] = 1;
test['b'] = 2;
test['c'] = 3;

// keysで配列のkeyを取得してmap使う
Object.keys(test).map(function (key) {return test[key]})
=> [1, 2, 3]
```

　以上！！あざした！！
MacのNumbersでチェックボックス追加してフィルターかけるメモ

英単語を暗記するのにNumbersを使っていて、
チェックしたものがどんどん消えていってほしいのでフィルターかける。

#チェックボックスの入れ方

①右上の「フォーマット」が選ばれてる状態で、「セル」タブをクリック
②データフォーマットを「チェックボックス」にする

<img width="858" alt="チェックボックスの入れ方図" src="https://qiita-image-store.s3.amazonaws.com/0/40940/15eddc58-599b-6ee1-9bfe-1a2aea207d45.png">

選択していたセルにチェックボックスが入る。

<img width="857" alt="Numbers チェックボックス" src="https://qiita-image-store.s3.amazonaws.com/0/40940/4e0eee00-8b43-100e-208b-0372edc70087.png">

#チェックボックスでフィルターかける方法

チェックの入っている「2,3,5,6」をフィルターで隠したい。

<img width="969" alt="Numbers" src="https://qiita-image-store.s3.amazonaws.com/0/40940/33836194-f145-a744-7edf-de30da5c7911.png">

① 右上の「並べ替え/フィルタ」をクリック
②「フィルタ」タブをクリック
③「フィルタを追加」ボタンをクリック

<img width="856" alt="Numbersチェックボックスでフィルターかける方法1" src="https://qiita-image-store.s3.amazonaws.com/0/40940/dff2f65f-99ea-a781-4c97-7145016c478e.png">

④チェックボックスがある列を選ぶ（この例は列A）

<img width="861" alt="チェックボックスでフィルターかける方法2" src="https://qiita-image-store.s3.amazonaws.com/0/40940/6e22153f-99e9-8c61-3075-25e0cb491a98.png">

フィルタリングルールの、
⑤ 「テキスト」
⑥「...である」
を選ぶ

<img width="1169" alt="チェックボックスでフィルターかける方法3" src="https://qiita-image-store.s3.amazonaws.com/0/40940/a11edcc1-4485-dcde-6ec2-8d2531d31fa5.png">


⑦テキストエリアに「false」を記入
true...チェックが入っている状態
false...チェックがない状態

チェックの入っている行がここで消える。

<img width="969" alt="チェックボックスでフィルターかける方法4" src="https://qiita-image-store.s3.amazonaws.com/0/40940/3f8c2e5b-81ea-e88f-7e03-55876da31812.png">


⑧右側のさりげないチェック欄のチェックを外すとフィルターがOFFになる。
チェックを入れると、またフィルターが効く。

<img width="969" alt="チェックボックスでフィルターかける方法5" src="https://qiita-image-store.s3.amazonaws.com/0/40940/55cbbc7f-ab7e-a4ee-b015-c00c232c4b38.png">
kotlinでandroid入門　丸いボタン (FAB)

入門者がいい気になってアップしてましたが、もうストックがありません

手元にあるコードを洗い出して調べな確認している物があり
やってみたのコードですが
・丸いボタン : FAB
・一時メッセージ:Toast
・画面下部への表示 : Snackbar
・地域設定取得 : locale
・ネットワーク状況の確認 : ConnectivityManager
・ツールバー : Toolbar
・リスト表示 : ListView
・オプションメニュー:OptionsMenu
・サイドメニュー:
・プリファレンス
・内部ストレージ
・簡易データベース
・ユーザー設定
・外部ストレージ
・GPS
と同レベルの初心者が調べそうなものがそろってました。

-- 08/21 追加 --
[github](https://github.com/bokufolivora/hinagata)に置いてみました
----

自分もそうなんですが、いろんなものを一回に説明されると理解できない事があるので
１つ　づつ書いていこうかと
で最初に

## FAB
下の項目に関係なく表示される、丸いボタンです
![FAB.png](https://qiita-image-store.s3.amazonaws.com/0/258658/89af02a3-64c2-ef4b-5882-b6f67ddea40f.png)
こんなの

昨日的には、普通のボタンと変わらないです

### implementation
FABはAndroid Design Support Libraryというライブラリで実装可能らしく
build.gradl (app)にcom.android.support:designを追加します

```build.gradl (app)
implementation 'com.android.support:design:xx.x.x'
```

バージョンはその時最新の物で

### xmlに配置
使用する xml に FloatingActionButton を配置します
```xml
    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fAB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginTop="64dp"
        android:clickable="true"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@android:drawable/btn_star_big_on" />
```

### 押された時の処理
onCreate() 内に
```
    fAB.setOnClickListener { view ->
        // FABが押された時に処理
    }
```
こんな感じで使えます
Microsoft Edgeで同じJSを2回読み込むと文字化けする

## Edgeでのみ発生する文字化け

```html:index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8"/>
</head>
<body>
        <p>読み込む: <script src="write.js"></script></p>
        <p>もういちど読み込む: <script src="write.js"></script></p>
        <p>もういちど読み込む: <script src="write.js"></script></p>
</body>
</html>
```

```js:write.js
document.write("水金地火木土天海");
```

このようなごく簡単なhtmlとjsファイル(どちらもUTF-8)を用意して同じディレクトリに置きます。

Edgeで開きます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125224/adb5c4b1-4f3d-0979-5c05-c031662bd7eb.png)

化けます。

## 化け方の確認

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125224/223a082d-0ba2-373c-1b19-f0910a8bc6df.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125224/c13e8ddc-1aaf-b29e-62b2-aa0f1c80f55f.png)

[Windows-1252](https://ja.wikipedia.org/wiki/Windows-1252)として開いたら同じような化け方が確認できます。
NANJコインのunlockUnixTimeについて

NANJコインのコードを参考にERC223のコントラクトを作成しています。

NANJコインのコードに unlockUnixTime という記載があります。
下記のブログによると、ロックアップ期間をしていているとのことでしたが、具体的にいつを unlockUnixTime として指定しているのか不明でした。
https://qiita.com/yukkuri_sinai/items/4e076bbdbe773fae12fc

■ご質問事項

① unlockUnixTime はNANJコインのコード上ではどこで指定しているのでしょうか。
② NANJのコードを参考にコントラクトを作成する際、 unlockUnixTime の箇所はどのように記載すれば良いでしょうか。


■該当のソースコード
mapping (address => uint256) public unlockUnixTime;
…
now > unlockUnixTime[msg.sender]
UbuntuにXRDPで接続してソフトインストールできた。

この数日Google cloud platformのGoogle Compute Engineのインスタンスに、Ubuntu17.10をインストールしてXRDPでリモートデスクトップ接続して使いたいソフトをインストールしようと試みていました。
先に公開した記事の通りに、リモートデスクトップ接続はできました。

#ソフトウェアが使えない
デスクトップで、ソフトウェアを選択しました。
私がインストールしたいソフトを見つけたので、インストールのボタンをクリックしました。
そしたら、「あなたはパーミッションがありません」という内容のエラーが出たのです。

#必死にユーザーに管理者権限つけようとする
リモートデスクトップ接続用に追加したユーザーは、sudoのグループに加えていました。
でも、デスクトップのユーザーの項目で確認したら、一般ユーザーでした。
そのため、管理者権限を付けようと色々調べました。

```
sudo gpasswd -a ユーザー名 グループ名
```
または、

```
sudo usermod -aG sudo USER_NAME
```
usermodは、オプションの-aを付け忘れると上書きになってしまいます。
必ず-aを合わせて使い追加されるようにしてください。

そして変更後は、ログインし直してください。

ネットでは、adminやsudoで管理者権限付くとありますが、GCEでは、サーバーを再起動しても、XRDPやデスクトップでログアウトして入り直しても、GUIでは権限が変わっていないです。
一般ユーザーのままです。
色々調べてGCEは、adminと同じ役割をすると思われるグループを見つけたので、それにも追加しました。
それでも、ユーザーの権限はGUIで確認したら、一般ユーザーのままでした。
CUIでは、ちゃんとsudo使えるし、suで確認するなどして権限は変更できたと思っています。
試しにソフトウェアで再度インストールを試みましたが、同じエラーが出ました。

```
su - user_name
```
で、@の左にユーザー名が表示されるか確認しました。


#諦めてVNCで接続
やむを得ずVNCで接続する環境を作りました。
こちらの記事を参考にしました。
https://medium.com/google-cloud/graphical-user-interface-gui-for-google-compute-engine-instance-78fccda09e5c
VNCについては、後程詳しく書きます。

こちらでは、ブラウザで目的のソフトをダウンロードして、インストールして起動することに成功しました。
ネット環境悪くwi-fi無い状態で、スマホで作業しました。

#記事を書くためにまとめ作業で閃き
顛末をまとめるために、色々調べている中、リモートデスクトトップでも、ひょっとしたらネットからダウンロードする方法でインストール出来ないか気になりました。

#ネットからダウンロードしてインストール出来ました
VNC接続と同じで、firefoxで目的のサイトにアクセスして、ダウンロードしてインストール出来ました。

![eclipseキャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/20977/a03cddfc-6838-7b8a-c2aa-53b36eb9ebb8.png)

もっと早く気がつけば、2日くらい無駄にはしなかったと思います。
とにかく、リモートデスクトトップの環境で、ネットからダウンロードしてインストール、起動が出きることを確認できたので、良かったです。