OmniAICreator/Qiita-1.07M huggingface dataset:
Nodeで行番号出力するプログラム

ファイルを読み込んで、行番号をくっつけてファイルに出力するプログラム。想像以上にややこしかったのでメモ。Node 9.7.1で動作確認。

```js
const fs = require('fs')
const readline = require('readline')
const createLineWriter = stream => {
  let count = 0
  return line => {
    ++count
    stream.write(`${count} ${line}\n`)
  }
}
const input = fs.createReadStream('test.txt','utf8')
const rl = readline.createInterface({ input })
const out = fs.createWriteStream('testOutput.txt')
const writer = createLineWriter(out)
rl.on('line',line=>{
  writer(line)
})
rl.on('close',()=>{
  out.close()
})
```

ファイルサイズが大きいことを想定すると、Streamで処理したい。Streamから行ごとにデータを切り出すのはreadlineモジュールがやってくれる。lineイベントが来たら対応する関数が呼ばれるが、行番号を覚えておくなどの処理が必要なのでクロージャにした。

`readline.createInterface()`はinputだけでなくoutputのStreamを設定できる。これを利用して、readline.writeを使って実装できないか、とも考えたが、どうもうまくいかないらしいということが、[StackOverflowでの議論](https://stackoverflow.com/questions/35532332/how-does-readline-rl-write-work)があったのでこの実装にしたことを付記しておく。この議論では、outputをTTYであるかのように偽装すればうまくいくとのことであったが、そこまでTrickyなことをしたくない。

補足：文字列を行ごとに区切るのは以下のスニペットでうまくいく。Streamとかめんどい場合はこっちも検討

```js
> 'hello\nworld\n123'.split(/(?:\r\n|\r|\n)/g)
[ 'hello', 'world', '123' ]
```
JupyterNotebookのセル幅を変えたい

# 環境
* CentOS7
* Python3.6 
* JupyterNotebook 5.4.0

# お悩み
レンタルサーバー借りてJupyterNotebook環境を作ったはいいけどなんだかセル幅が狭い。

![notebook2.png](https://qiita-image-store.s3.amazonaws.com/0/92606/fbe82bf9-2ce7-2bb8-81b2-52362d3b21c2.png)


Notebookのソースを見ると、セル幅は以下の構成になっていました。

```html:セルのHTML
<div class="container" id="notebook-container" style="width: 82%;margin-left:auto;">...</div>
```
notebook-containerというidなんですね。こいつをcssでいじればよさそうです。
~/.jupyter/custom/custom.cssをいじくって

```css:custom.css
#notebook-container {
    width: 95%;
}
```
としてみたけど、狭い。
どうやらJupyterNotebookの内部JSの書き込みでstyleが動的に変更させられているためか、上書きされてしまっているようです...どうしたもんか

# 解決法
ググったらCSSで `!important`ルールなるものがあるらしいです。
スタイルを優先させることが出来るようです。
僕はCSSめちゃ素人なので初めて知りました。
さっそく試してみます。

```css:custom.css
#notebook-container {
    width: 95% !important;
}
```
![notebook4.png](https://qiita-image-store.s3.amazonaws.com/0/92606/93f3b964-f2d3-fef5-9ab7-4fea38524f77.png)

持ってるPCの画面が狭いので助かります。

# 今後
最近(半年前くらい)ノートPCがぶっ壊れたので、スマホでNotebook操作出来ないかなぁ～と思っていました。
スマホだとコード実行をするボタンと、コードを入力する時Tabで補完出来ないのが使いにくいなぁ～と感じていたのでそこらへん作れないかな～。
今回のセル幅を解決するためにJupyterNotebookの生コードを色々見たので、何かいけそうな気がしてきたような気がしますが
JSよく知らないので多分出来ません。
スマホに対応してくれないかなぁ～

(2019.07.14)
あまりにも見苦しい文章のため文章の修正(それでも見苦しいのは勘弁)
深センのシェアサイクルはWeChatPay不要で乗れるぞ（ただしSIMカードは欲しい）

中国で主流のシェアサイクルサービスの一つにMobikeがある。
現地で実際に試したところ、このサービスはクレジットカードのみで利用できた。
利用にはWeChatPayによる決済が必須であると思いこんでいたので、意外な発見である。
ネットでもあまりこの事実を明言した記事はなかったので、ここにメモを残す。
  
Qiitaなら深センに行く人も多いであろうから！

## Mobikeの使い方
1. Mobikeアプリのインストールを行う
    * 中国国内からはPlay Storeにアクセスできないので、下記の手段が有効
        * 日本でインストールしておく
        * apkを直配布しているサイトを利用する
        * VPNを利用する
            * 筆者は日本の自宅にPPTPおよびOpenVPNサーバー(dd-wrtルーターによるもの)を用意していたが、いずれも中国から接続できなかった
            * 原因は不明。現地に行かないと使えるかわからないのはつらい
2. 利用情報の登録
    * クレジットカード情報を登録する
        * デポジット金として500円(JPY)が徴収される
    * この時点で、Mobikeサービスを利用できるようになる
    * ここまでは、日本国内でも実施可能と思われる
3. Mobikeの自転車を探す
    * 下図のような、赤い自転車
    * 街を歩いているとそこら中に見かけたので、特に苦労はないだろう
![赤い自転車](https://qiita-image-store.s3.amazonaws.com/0/127392/d0cbc863-65d6-fbeb-6646-fac5c57f8e94.jpeg)
4. 乗車の手続き
    * 自転車に張り付いているQRコードをアプリでスキャンして、ロック解除する
    * スマホに**インターネット接続が必要**
        * 深センの路上に **公衆Wi-Fiはほぼ無い** ため、SIMカードの契約をしていることが望ましい
            * さもなくば、公衆Wi-Fi近くの自転車置場を探し回ることになる
                * 筆者はたまたまマクドナルドの真横にある自転車置き場を発見できた
            * あるいは、Wi-Fiの使えるところまで自転車を移動させるのも有効かもしれない（前輪はロックされてない）
5. ドライブ
    * 深センは比較的緯度が低く、3月でもそれなりに暖かく快適
    * ただし、道路は舗装の質が低かったり段差だらけ（歩道-車道間のスロープなどはほぼ無い）だったりするので、少しつらい
    * また、自転車通行禁止のエリアもあるようなので、気をつけよう
        * 筆者は広場のようなところを快走していたところ、笛で厳しく注意された
        * 風紀向上施策のようであった
![こういうだだっ広い道は怒られるリスクがある](https://qiita-image-store.s3.amazonaws.com/0/127392/8bda7ab7-2625-bf84-e0ab-fbcfc3fbec4d.jpeg)
        * こういうだだっ広い道は怒られるリスクがある

6. 降車の手続き
    * ただ自転車の鍵を手で掛けるだけで良い
    * スマホに**インターネット接続は不要**
        * 自転車自身がインターネットに接続されているため、降車検知は自動で行われる
        * このため、どこでも乗り捨てられる
        
## 感想
* 30分ほど、付近の公園を探索するのに利用した
![mobike-Screenshot](https://qiita-image-store.s3.amazonaws.com/0/127392/49fbaa22-95f1-5e3d-de65-cb63adbc14f1.png)
* 料金は15円(JPY)と、非常に安い
* 現地用SIMカードを持ってなかったために、乗車するまでが非常に大変だった
    * 深センに行くなら、契約することをオススメする
* これに限らず、深センでWeChatPayは思ったより必要みを感じなかった
    * 現金さえあれば十分やっていける
    * 現地でTinderマッチした子に送金してもらおうかと計画してたが、明らかにそこまで頑張る意味はなかっただろう
    * 中国人の知り合いがいるのなら、持っておいても損はしないんじゃね、程度

## まとめ
* 中国でMobikeはクレカのみで利用できるので、そのためだけに頑張ってWeChatPayを用意する必要はない
* ただし、SIMカードは契約しておいたほうが良い
【vimめも】 4. テキストオブジェクト

## テキストオブジェクトってなに？

文字列を１つのまとまりとして扱うための仕組みで
**オペレータ**と組み合わせることで、簡単に範囲を選択して操作を行える


- メソッドの引数の中身だけ変えたい時
- ハッシュのブレスごとコピーしたい時
- 文字列の中身（ダブルクォートの中）だけ削除したい時
- カーソルの単語だけを選択したい時

などなど

## ヘルプの内容

helpにて調べると、こんな説明がされてる


> 次のものはビジュアルモードかオペレータコマンドの後でのみ使うことができる一連の コマンドを示しています。
"a" で始まるコマンドは "a" (1つの) まとまりをホワイトスペースを含めて選択します。
"i" で始まるコマンドはまとまりの "inner" (内部) をホワイトスペースを含まずに選択するか、もしくはホワイトスペースのみを選択します。
ですので、"inner" コマンドは常に "a" コマンドより少なくテキストを選択する ことになります。


簡単にいうと、
内側がいいときは`i`を、外側も含めたいときは`a`を使いなさい
ということ(?)

## 使い方

```
オペレータコマンド + (回数指定) + 内部/外部指定 + テキストオブジェクトの種類の指定
```


## オペレータのおさらい

|オペレータ|意味|
|:-:|:-:|
|v|文字の選択（ビジュアルモード）|
|y|文字のヤンク|
|d|文字のヤンク＋削除|
|c|文字のヤンク＋削除＋挿入モード|
|gu|文字の小文字変換|
|gU|文字の大文字変換|
|~|文字の小文字大文字の入れ替え|

## テキストオブジェクトの範囲と種類

|iのもの|意味|aのもの|意味
|:-:|:-:|:-:|:-:|
|iw|単語|aw|単語（空白含む）|
|i[ or i]|[ ]の中|a[ or a]|[ ]も含めたブロック|
|i( or i)|( )の中|a( or a)|( )も含めたブロック|
|i{ or i}|{ }の中|a{ or a}|{ }も含めたブロック|
|i< or i>|< >の中|a< or a>|< >も含めたブロック|
|it|タグの中|at|タグを含めたブロック|
|i”|“の中|a”|“も含めた文字列|
|i'|'の中|a'|'も含めた文字列|
|i`|`の中|a`|`も含めた文字列|

## 【使用例】

#### ***メソッドの引数の中身だけ変えたい時***
```ruby
def foo(xxx = false)

end
```
括弧の中にカーソルがある状態で`ｃi)`で中身を削除して挿入モードへ
***
#### ***ハッシュのブレスごとコピーしたい時***
```ruby
{:xxx => 3, :yyy => 5}
```
括弧の中にカーソルがある状態で`ya}`でハッシュをヤンク
***
#### ***文字列の中身（ダブルクォートの中）だけ削除したい時***
```ruby
error = "エラーが発生しました"
```
括弧の中にカーソルがある状態で`di"`で文字列を削除
***
#### ***カーソルの単語だけを選択したい時***
```ruby
  messages.each_with_index do |_,i|
    p "#{i} : #{_}"
  end
```
`each_with_index`のどこかにカーソルがある状態で`viw`で`each_with_index`を選択した状態でビジュアルモード

前回:[【vimめも】 3. レジスタ](https://qiita.com/r12tkmt/items/97afb4b489966e746b20)
次回:[【vimめも】 5. insertモード・visualモードの基本的な操作](https://qiita.com/r12tkmt/items/185a32637c1d7463d728)
CIをスキップする方法

# 自己紹介

じゅんじゅんと言うニックネームで、関西を拠点に活動しているフロントエンドエンジニアです。

HAL大阪3回生です。（2018/03/11現在）

イベントや、勉強会に参加してるので是非お会いした際はお声掛けください！

# 文言

コミットのときに**[ci skip]**という文言がはいっていれば大丈夫なので

```
$ git commit -m "commit message" -m "[ci skip]"
```

などとすればいいと思います！
KubernetesのCronJobをPrometheusとGrafanaを使って監視する


普段からPrometheus + Grafanaで監視しているのですが、KubernetesのCronJobを監視できなくて困っていたのでできるようにしました。
インストールとかは省きます

# 環境

* GKE: 1.9.2-gke.1
* kube-state-metrics: v1.2.0
* Prometheus: v1.8系
* Grafana: 4.5系

# Prometheusの設定

Prometheusのkube-state-metricsの値を取得するところで以下のように設定します。relabel_configsは長いので省略します。


```
    - job_name: 'kubernetes-pods'

      kubernetes_sd_configs:
      - role: pod

      relabel_configs:
        ...

      metric_relabel_configs:
      - source_labels: [exported_job]
        action: replace
        regex: ([a-z\-]+)-(\d+)
        replacement: $1
        target_label: exported_job_short
```

metric_relabel_configsで、kube-state-metricsの[jobメトリックス](https://github.com/kubernetes/kube-state-metrics/blob/master/Documentation/job-metrics.md)の、jobラベルをexported_job_shortという名前でかえ、値を正規表現`([a-z\-]+)-(\d+)`で短縮された名前にしています。

kube-state-metricsの`job=<job-name>`のjob-nameは`cron-name-1520746800`のような形ででてきます。Grafanaではこのcron-nameでまとめたいのでリネームしています。
source_labelsがexported_jobとなっているのはPrometheus側で、jobがすでにラベルとして使われて、exported_jobにリネームされているためです。

# Grafanaの設定

Grafanaでは以下のメトリックスをグラフにします。

1. 失敗したCronJobの個数
2. CronJobの最大実行時間

以下みたいなのができあがります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/30079/c1f964f2-54ca-f699-6000-919e76d5cf77.png)


## 失敗したCronJobの個数の設定

![image.png](https://qiita-image-store.s3.amazonaws.com/0/30079/b8c659e9-32fe-7938-053b-f1643c9538c1.png)

## CronJobの最大実行時間

![image.png](https://qiita-image-store.s3.amazonaws.com/0/30079/80351a2b-5534-6ef0-c389-99dd1fd13535.png)


以上で監視できるようになりました。
アラートも設定できます。

# 注意点

`kubectl get jobs`を実行するとジョブ履歴が見れると思いますが、failed jobは都度消さないと、「失敗したCronJobの個数」が減らないです。なんらかしらの方法でお掃除する必要があります。
Guidance for Individual Project

1. The Background
Chap 1. Introduction
* the field of computing ranges from hard to soft.
* types of projects
    1. Research-based: thorough investigation of existing area
    2. Development: development of software or models
    3. Evaluation: comparing several approaches to a particular problem
    4. Industry-based: solving a problem within either an organization or another university
    5. Problem solving: developing a new technique to solve a particular problem, applying existing approaches to solve a problem in different domain
* your projects have number of stakeholders: supervisor, client, user, examiner

Chap 2. Research
* Research is defined as a considered activity, which aims to make an original contribution to expand knowledge
* The research process can be
    1. Sequential: review the field, build theory, test it and reflect and integrate
    2. Generalized: analogous to Sequential process
    3. Circulatory: any research is only part of a continuous cycle of discovery and investigation
    4. Evolutionary: research must evolve and change over time
* research can be classified according to its field, approach and nature. Approaches to research include case studies, experiments, surveys and action research
* research techniques that are used within the above approaches include interviews, questionnaires and observational studies

2. Setting your project’s foundation
Chap 3. Choosing a project and writing a proposal
* Choosing the right project is probably the most important stage of any project
* A number of techniques have been presented that you can use to assist you with choosing a suitable project
* When preparing a proposal there are two golden rules
    1. follow any given guidelines!!
    2. proofread it thoroughly!
* A project proposal should include, at least
    * background
    * related work/research
    * identification of a gap of previous work/research
    * how your project fill that gap
    * risks and contingency plans
* project proposal should include, at the very least
    1. title
    2. aims and objectives
    3. outcomes and deliverables
    4. research methodology
    5. requirements
* be nice to supervisor!!
Play Framework２.６の導入方法　Mac用

先日、プレイフレームワークを初めて入れましたが、方法がよくわからなかったのでまとめます。
私の場合、JDKはインストールされており、パスの登録もされている状態でしたので、その前提で書きます。

#流れ
1.プレイフレームワークのインストール
2.アプリの実行しかし
3.ファイルの実行件の変更
4.再度実行にチャレンジ

#プレイフレームワークのダウンロード
こちらからダウンロード。
https://www.playframework.com/download
私の場合、Javaだったので
`Play 2.6.x Starter Projects`/`Play Java Starter Example`
をダウンロードしました。


#アプリの実行しかし・・・
ターミナルでダウンロードしたフォルダを回答した場所に移動します。
そこで、`stb run`と実行します。
※詳細はgithubページ「Running」の部分に記載があります。
https://github.com/playframework/play-java-starter-example/tree/2.6.x

しかし最初、**ファイルの実行権が無い**ので、以下の様なエラーが発生してしまいます。

１回目

```
-bash: ./sbt: Permission denied
```
２回目

```
./sbt: line 3: ./sbt-dist/bin/sbt: Permission denied
```

これは要するに**`./sbt`と`./sbt-dist/bin/sbt`というファイルに実行権が無い**状態です。

#ファイルの実行件の変更
なので、ターミナルから`chmod`でファイルの上記２つのファイルの実行権を`rw`→`rwx`に変更します。
実行権の考え方や変更方法は以下を参考にしました。
・Linuxの権限確認と変更（超初心者向け）
https://qiita.com/shisama/items/5f4c4fa768642aad9e06

#再度実行にチャレンジ
実行権を変更して再度、`./sbt run`を実行すると、上手くいきました！
20分ほど読み込みに時間が掛かるようです・・・
読み込みが完了したら、webブラウザ上で、 `http://localhost:9000`と実行すればサンプルアプリが動作します！
Promising Company in AI industry

List of good AI companies
http://ainow.ai/2018/02/26/133858/http://ainow.ai/2018/02/26/133858/

http://www.aquifi.com/
https://www.anki.com/ja-jp
https://aeye.ai/
https://capeanalytics.com/
https://www.cerebras.net/careers/
https://www.darktrace.com/
https://www.datarobot.com/
https://www.descarteslabs.com/index.html
https://www.drive.ai/
https://www.kindred.ai/
http://leapmind.io/
https://mty.ai/
https://onfido.com/
https://www.orcam.com/gb/
https://www.playosmo.com/ja/about-us/
https://www.preferred-networks.jp/ja/
https://tractable.ai/
https://www.vicarious.com/
http://zoox.co/
IntelliJでポップアップ辞書を使う

IntelliJ IDEA等、JetBrains系のIDEを使用していて英単語を調べたくなる時があります。
そんな場合は、以下のプラグインを使ってChrome拡張のポップアップ辞書のように利用できます。単語をさくっと翻訳できて便利。

- [Translation](http://yiiguxing.github.io/TranslationPlugin/)

![popup.gif](https://qiita-image-store.s3.amazonaws.com/0/50056/5d8dd065-0d49-546e-1597-d39333b2144d.gif)

デフォルトの設定では英語->中国語に翻訳されるので、英和の辞書として動くよう設定しておく。

<img width="569" alt="スクリーンショット 2018-03-11 15.43.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/50056/1c9d34d5-062f-5193-cd80-1ea7f38ad156.png">

さらにkeymapも登録しておくとシームレスに翻訳できて良い感じになります。
貿易統計（国連）から、読み取れること（１）　準備

# （目的）貿易統計（実データ）の処理体験をする人を増やす
現在、政府統計データは、さまざま角度から分析可能な形で提供されています。しかし、データを分析して、そこから意味を読み取ろうとする動きはまだまだ少ない気がします。貿易統計のように重要でアクセス数の多い統計データがもっと活用されてもよいと思い、手軽に（でもないですが、）活用できるための記事を書いています。

### （想定読者）
貿易統計のデータを、まずは、もう少し細かく集計して、分析したいという人向けです。具体的には、シンクタンクの新人や、大学院生で、統計データ分析のスキルがあるといいなと普段から思っている人向けです。SQLをつかった経験のない人が、この記事を実践して、少しの努力で、手軽にSQLを使えるようなったら、儲けものでしょう。
必要なスキルは、そこそこハードルが高いです。jupyter で,sql,pandas 使って集計します。ここでの説明は、google の colaboratory(無料です。)
という仕組みが前提です。jupyter は、手元のPCでも設定可能ですが、クラウドで動かせるcolaboratory が何かと便利です。

### データ
[kaggle](https://www.kaggle.com/zanjibar/world2014hs07)　にsqlite の形式でおいてあります。主なデータは、国連の多国間の貿易データで、[ここ](https://atlas.media.mit.edu/en/resources/data/)　から取得して、日本の貿易データも付加しています。データは、2014年なので、少し古いです。
多国間のデータなので、例えば、日本から中国への自動車輸出を見てから、中国の自動車輸入を見て、日本は何番目の輸出金額なのかを調べることができます。中国と日本の２国間しかわからない貿易統計では、これはできません。なお、最新の国連データは、[ここ](https://comtrade.un.org/) です。

### 準備
* 上記データをダウンロード
* jupyter 環境用意して、データ(database.sqlite) をjupyter のカレントディレクトリにおく。
 * jupyter の環境は、colaboratory につくると便利です。その時、データはgoogle drive におくと便利です。参考は[こちら](https://qiita.com/uni-3/items/201aaa2708260cc790b8)
 * google のアカウントがあるのは、すみません。前提にしています。

* sql,python,pandas,jupyter ぐらいできないとまずいと思っているなら、ぜひがんばって準備で環境ととのえてみてください。

### jupyter はじめ
最初に、使うものを import しています。sqlite3 がはいっていなかったら、
sudo apt install sqlite3 でインストールしておきましょう。

```python
import os,sys,re
import sqlite3
import pandas as pd
import pandas.io.sql as psql
import matplotlib
import matplotlib.pyplot as plt

db ='database.sqlite'
conn = sqlite3.connect(db)
# mysql での desc table名　相当
desc = 'PRAGMA table_info([{table}])'
# mysql での show tables
show_tables = "select tbl_name from sqlite_master where type = 'table'"
```
次は、日本からの輸出額のランキングを、2014（古いですね...）のデータから抽出してグラフにします。このグラフはいくらでもあるので、つまらないですが、練習と思ってください。
![2018_03_11.png](https://qiita-image-store.s3.amazonaws.com/0/48387/d8f5fec4-16f9-0b87-1d1f-37897b856f87.png)

```
# ある国(origin)からの輸出の相手国別(dest)ランキング
# 日本(jpn) を指定
country='jpn'

# まず合計を計算する
# sql  文
sql="""
select sum(export_val) as total
from hs07_2014
where  origin = '{country}'
"""[1:-1]
# 上記のSQL文の意味
# sum(export_val) as total  輸出金額を合計して、項目 total に格納
# 輸出元をcountryで指定(例えば、country='jpn'で日本に指定)
# ２０１４年の多国間貿易統計（hs07_2014)から、輸出額を抜き出して合計する

# sql 実行
all = pd.read_sql(sql.format(country=country),conn)['total'].iloc[0]
# pd.read_sql(sql文(sql...),データベース接続(conn))
# 合計額を、all という変数に格納します。
# sql の、{country} 部分は、実行するときに、変数 country に置換されます。
# それが、sql.format(country=country) の部分
# ['total'].iloc[0] は、結果が項目(total)と行（最初の行なので、0)を指定


# 合計を表示
print(all)

sql="""
select sum(export_val) as total,dest,c.name
from hs07_2014 h,country_names c
where  h.dest = c.id_3char	and 
origin = '{country}'
group by dest
order by total desc
"""[1:-1]
# 詳しくはのちほど書きますが、輸出金額を輸出先の国別ごとに集計しています。

# 集計実行
df = pd.read_sql(sql.format(country=country),conn)

# 合計をつかって、percentの項目を追加
df['percent'] = 100*(df['total']/all)

# index に国名(name) をいれて、グラフの項目にします。
df.index = df['name']
# 最初の１０つを抽出してグラフにします。
df[['name','percent']].head(10).sort_values('percent',ascending=True).plot.barh(alpha=0.6)
```

# 読み取れること

中国、アメリカが日本の主要な輸出先（当たり前ですね。）
Bash,Zshの環境変数をFishに共有する

Fishに変えても完全に乗り換えられないという人は、Bash/ZshとFishの環境変数の設定を共有したいこともあるでしょう。
そういう方は `.bash_prorile` や `.zshenv` の最後で以下のように最後に `exec fish` を記述すればよい。

```bash
# .bash_profile | .zshenv
...
## 環境変数の設定など
...

exec fish  # PATHが通っている前提
```

## 利点

* 以前使っていたシェル（bash, zsh）の環境変数をそのまま利用可能
* `s/export/set -x/` という環境変数のコピー・置換作業から開放される
* 後から以前のシェルに戻りたいときに設定の差分見て頑張る必要がなくなる

## 何故これだけでいいの？

環境変数は子プロセスに伝搬するため。
そのため `.bash_profile, .zshenv` 経由で環境変数を設定したあとでfishを起動することで `(親)bash/zsh => (子)fish` となるので環境変数の共有が可能。

## 終わりに

環境変数はこの方法で共有できるけど、エイリアスなどは `bash/zsh <=> fish` の記法の差分でシンプルには行かない。
今その問題をクリアするためにシコシコ頑張っているので出来たタイミングで公開したい。
[Oxford DL/ML MOOC] Review

This course is taught by Nando de Freitas. 
http://www.cs.ubc.ca/~nando/

Course Link
https://www.cs.ox.ac.uk/people/nando.defreitas/machinelearning/

Lecture 1: Introduction
Lecture 2: Linear prediction
Lecture 3: Maximum likelihood
Lectures 4 & 5: Regularizers, basis functions and cross-validation
Lecture 6: Optimisation
Lecture 7: Logistic regression
Lecture 8: Back-propagation and layer-wise design of neural nets
Lecture 9: Neural networks and deep learning with Torch
Lecture 10: Convolutional neural networks
Lecture 11: Max-margin learning and siamese networks
Lecture 12: Recurrent neural networks and LSTMs
Lecture 13: Hand-writing with recurrent neural networks (Guest speaker: Alex Graves from Google Deepmind) 
Lecture 14: Variational autoencoders and image generation (Guest speaker: Karol Gregor from Google Deepmind) 
Lecture 15: Reinforcement learning with direct policy search
Lecture 16: Reinforcement learning with action-value functions

lec01
https://www.evernote.com/l/ATSR7mjhcmhDpoK_o1tFddTu-Ckb_SrGbiY

lec02
https://www.evernote.com/l/ATTYZbKNIBVBfo-QSupzC5ulgu4S3el6KaQ

lec03
https://www.evernote.com/l/ATTRpr029uJDopWLVw3afVdT7A7kPd8sY2c

lec04&05
https://www.evernote.com/l/ATSMSAL6jlpP55eU1zS93CdZsO6qUmw6N-o

lec06
https://www.evernote.com/l/ATT44El6KwdIb6FC1uuVkym560xd0YxK1Kc

lec07
https://www.evernote.com/l/ATSLJwHYOs9Lhp8G_mX-oK89zaz4WMndOjg

lec08
https://www.evernote.com/l/ATRUFd9wjsZHN7t4fRGn9uC_sz0UaL1PxH4

lec09
https://www.evernote.com/l/ATTxA_VmTgdCbKWRZh6Hk_m20vuCkT9jCUE

lec10
https://www.evernote.com/l/ATQDiFwLfL9G8ZZq5KGdT0pRxN1rptIPStc

lec11
https://www.evernote.com/l/ATR-Hke9gqxK8rdx4t9JY0UEwua-yl8H7WM

lec12
https://www.evernote.com/l/ATSMVJr2mlpLobpChAyGEea_cZsYZb1sr5I

lec13&14 is for guest speaking from Deepmind

lec15
https://www.evernote.com/l/ATSEZq5fLnNAmZwAbO6ZCnQPD9n1Bfyynos
Google HomeでQiitadonに「おはどん」とトゥートする

# はじめに

[Qiitadon](https://qiitadon.com)を使っていますか？
Qiitadonは、Qiitaが運営しているMastodonです。

Qiitadonでは某青い鳥SNSと同様、起きた時に「おはどん」挨拶する文化があります（強制ではありません）。

ですが、起きた時にPCまたはスマホからQiitadonを開き、おはどんと入力するのは現実的ではありません。

最近流行りのスマートスピーカーを使って、おはどんとトゥートしてくれる機能があればいいと考えました。



# 必要なもの

- Google Home
- Qiitadonアカウント
- IFTTTアカウント



# 手順

実は、殆ど下記のサイトを参考にしました。

参考: [Google Homeからマストドンにトゥートする方法](https://sasachi.tokyo/?p=92)

一部異なりますが、大筋はほぼ変わりません。



## 新規アプリの登録

Mastodonの設定画面から、開発項目を選択します。
下図の左下にあります。

![Mastodon設定画面](https://qiita-image-store.s3.amazonaws.com/0/216416/6bd32cd1-2192-dbd0-9d6b-a0d3f7d29ceb.png)

新規アプリを選択します。

そこから「アプリの名前」に任意の名前を設定し、送信ボタンを選択してください。
「アプリの名前」はQiitadonにおける、どこからトゥートしたかを表す識別子になります。

また、アクセス権が気になる方は、write以外はチェックを外しても構いません。

![Mastodon新規アプリ画面](https://qiita-image-store.s3.amazonaws.com/0/216416/5f4ea059-a304-ef79-1118-ec10bf754445.png)



## アクセストークンの取得

先ほど作ったアプリを、設定 -> 開発から選択します。

![Mastodon開発アプリ画面](https://qiita-image-store.s3.amazonaws.com/0/216416/4604523f-c344-597c-3f0e-ce27ae2429c6.png)

そのページから、アクセストークンを取得します。

![Mastodonアクセストークン画面](https://qiita-image-store.s3.amazonaws.com/0/216416/42f69549-330e-c361-2d0a-ac3611457fd5.png)



## IFTTTの設定

"New Applet" -> "Google Assistant" -> "Say a simple phrase" を選択します。

![IFTTTのサービス選択画面](https://qiita-image-store.s3.amazonaws.com/0/216416/d58a9630-d6ad-9d89-72bf-cc10467dc1cc.png)


![IFTTTのGoogleAssistantのトリガー設定](https://qiita-image-store.s3.amazonaws.com/0/216416/008d0a49-5606-d5ac-d733-515b58b747a8.png)

下図の通りに設定します。

![IFTTTのGoogleAssistantのトリガー詳細設定](https://qiita-image-store.s3.amazonaws.com/0/216416/c2c2f04d-5345-6f30-b347-59659559707d.png)

ポイントは、入出力にカタカナの「オハドン」を入れている点です。
これにより、音として "owadon" ではなく "ohadon" を入出力できるようにしています。

次は、 "Webhooks" -> "Make a web request" を選択します。

![IFTTTのアクションサービス選択画面](https://qiita-image-store.s3.amazonaws.com/0/216416/578f5c8a-dea6-a37c-0117-012875c4804c.png)

![IFTTTのWebhooksのトリガー設定](https://qiita-image-store.s3.amazonaws.com/0/216416/f353b1e7-d47d-7513-c9ee-a80fd0b887a7.png)

次のように設定します。
「先ほど取得したアクセストークン」には、その文字通り、先ほど取得したアクセストークンに置き換えてください。

```text:URL
https://qiitadon.com/api/v1/statuses
```

```text:Method
POST
```

```text:ContentType
application/x-www-form-urlencoded
```

```text:Body
access_token=先ほど取得したアクセストークン&status=おはどん&visibility=public
```

![IFTTTのWebhooksのトリガー詳細設定](https://qiita-image-store.s3.amazonaws.com/0/216416/e836dab3-42de-0acb-9bb9-09c81f865c13.png)

これで以上です。



# 「ねぇグーグル、おはどん」

![Mastodonでおはどん](https://qiita-image-store.s3.amazonaws.com/0/216416/3d046a19-39f1-ecb9-0c77-9e315c63c8f3.png)

~~今日は少し遅く起きました。~~



# おわりに

結局 "ohadon" では通じず、 "owadon" では通じました。
これは今後の課題になると思います。

もし何か気づいたこと、気になったことがあれば教えてください！
自分用firefox設定まとめ

自分用備忘録+Qiita投稿練習用記事
本記事執筆時点でのfirefoxのバージョンは*58.0.2*

**_画面の切り替えや読み込み時に表示される白画面を黒出来ないか検討中_**

# アドオン
## Adblock Plus
広告ブロック用
https://addons.mozilla.org/ja/firefox/addon/adblock-plus/　　

## Feedly Notifier
feedlyの通知
https://addons.mozilla.org/ja/firefox/addon/feedly-notifier/

## Gesturefy
マウスジェスチャ
https://addons.mozilla.org/ja/firefox/addon/gesturefy/  

### 設定項目
- タブを閉じる:↓
- ホームページを開く:↑
- 上までスクロール:←↑
- 下までスクロール:←↓  

## Stylish
カスタムCSSの適用
https://addons.mozilla.org/ja/firefox/addon/stylish/
テーマと設定はページの最後に

# 新しいタブページ等の編集
新しいタブページを始めとするfirefoxで用意されたページが眩しいのでダークテーマっぽくする

ダークテーマっぽくする手順
1. *about:support*のページを開く
2. プロファイルフォルダを開く
3. *chrome*フォルダ及び、その内部に*userContent.css*ファイルを作成
4. *userContent.css*ファイルを以下に設定  
```css:userContent.css
@-moz-document url(about:newtab), url(about:home){
body{
color: #C5C5C5 !important;
background-color: #101010 !important;
}
input{
background-color: #222 !important;
}
prefs-pane-button button {
fill: #EDEDF0 !important;
}
.prefs-pane-button button:hover,
.prefs-pane-button button:active {
background-color: transparent !important;
fill: rgba(255, 135, 1, 1) !important;
}
}```
参考 ： http://ssbsblg.blogspot.jp/2017/12/05.html

# Stylishテーマと設定
## Global dark style - changes everything to DARK
汎用ダークテーマ
https://userstyles.org/styles/31267/global-dark-style-changes-everything-to-dark

除外設定
`https?://(?!(habitica.com|www.bbc.co.uk|.*.google.com|twitter.com|www.draw.io|ja.habitica.wikia.com|qiita.com)).*`

## DarkSearch for Google
google用ダークテーマ
https://userstyles.org/styles/118959/darksearch-for-google
なにか書き換えた気がするけど忘れた

## Dark Gmail by DM
gmail用ダークテーマ
https://userstyles.org/styles/155141/dark-gmail-by-dm

## Google Calendar Redesigned
google calendar用ダークテーマ
https://userstyles.org/styles/7339/google-calendar-redesigned

## Twitter Dark Mode (2017)
Twitter用ダークテーマ
https://userstyles.org/styles/135366/twitter-dark-mode-2017

## DeepDark Habitica 1.2.2
Habitica用ダークテーマ
https://userstyles.org/styles/149172/deepdark-habitica-1-2-2  
変更項目
- 66行目 ： *`color: #A0A0A0`*
**一部白背景に白文字で読めない箇所が発生するのを防ぐ**

## Qiita Black2
Qiita用ダークテーマ
https://userstyles.org/styles/152333/qiita-black2

# おまけ
Stylish用に公開されているNyan Catのテーマ群の内適当に動いたもの
特に意味はない

## YouTube - Nyan Cat progress bar video player theme
YouTubeのプログレスバーをNyan Catにする
https://userstyles.org/styles/95033/youtube-nyan-cat-progress-bar-video-player-theme

## Twitch - Nyan Cat progress bar video player theme
TwitchのプログレスバーをNyan Catにする
https://userstyles.org/styles/126572/twitch-nyan-cat-progress-bar-video-player-theme

## Gmail Nyan Cat Progressbar
GmailのプログレスバーをNyan Catに(ry
https://userstyles.org/styles/63639/gmail-nyan-cat-progressbar

## Niconico - Nyan Cat progress bar theme
ニコ動の(ry
https://userstyles.org/styles/149266/niconico-nyan-cat-progress-bar-theme
Fasttext&word2vec 論文関連

こちらfasttext and word2vecを学ぶ際に参照した論文たちです。
自分のコメントを記載しながら読みましたので、読みづらいかとは思いますが、
認識等に間違いがあると思いますので、そちらご指摘いただけますと幸甚です。
記事を書いているのに、お願いになってしまい、、申し訳ございません。。。

[Distributed Representations of Words and Phrasesand their Compositionality]
https://www.evernote.com/l/ATSklNe4iSBI160NpagpAPsb_8QpBCCd8r0

[word2vec Parameter Learning Explained]
https://www.evernote.com/l/ATTiriQGyVREDKdN8qUELFWylw1xbtzOjeM

[Enriching Word Vectors with Subword Information]
https://www.evernote.com/l/ATT4wXGlFo9NY7__uceuEzRsX_hva3KeiuE

[Linguistic Regularities in Continuous Space Word Representations]
https://www.evernote.com/l/ATQ5IV3lDihMWo42b2cC-miqYXpWi-N0iVE

[Bag of Tricks for Efficient Text Classification]
https://www.evernote.com/l/ATQfAiRGrU1AWYIhZenlzfFvTjl4wRs3d5A

[Efficient Estimation of Word Representations inVector Space]
https://www.evernote.com/l/ATSq2hQSR-VJtayq5cYY4nN87OCpy2lIozU
windows 10でdockerを使ってruby 2.5.0 rails 5開発環境を構築する、ファイルの共有

# 今回使ったPC
Think Pad
windows 10
Intel Core i3-4000M 2.40GHz以上
メモリ: 4GB以上
ストレージ 128GB以上

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/53443/4bbcdfc1-8a99-53bf-1bc6-57c62c4c0dac.png)


# dockerとは

https://docs.docker.com/docker-for-windows/


https://docs.docker.com/docker-for-windows/install/

README FIRST for Docker Toolbox and Docker Machine users: Docker for Windows requires Microsoft Hyper-V to run. The Docker for Windows installer enables Hyper-V for you, if needed, and restart your machine. After Hyper-V is enabled, VirtualBox no longer works, but any VirtualBox VM images remain. VirtualBox VMs created with docker-machine (including the default one typically created during Toolbox install) no longer start. These VMs cannot be used side-by-side with Docker for Windows. However, you can still use docker-machine to manage remote VMs.


Hyper-Vが入っていないPCだと少し大変

# 手順

a. アカウント名をチェック
英語で表記"C:/User/<User Name>/"User Name部分に英語表記以外が存在するとdocker-composeコマンドが使えないことがある。
英語以外の場合、新しいユーザーを作成し、それからb.以降を始める
手順は下記参考
https://pc-karuma.net/windows10-create-local-account/

b. BIOSでVirtualization Techologyをonにする
See these instructions to install Hyper-V manually. A reboot is required. If you install Hyper-V without the reboot, Docker for Windows does not work correctly. On some systems, Virtualization needs to be enabled in the BIOS. The steps to do so are Vendor specific, but typically the BIOS option is called Virtualization Technology (VTx) or similar.
手順は下記参考。メーカーによりBIOSの設定が違うので、「メーカー名 BIOS Virtualization Technology」などでググる
https://freesoft.tvbok.com/win10/access_uefi_bios_setup.html

c. （Hyper-Vが入っている場合）Hyper-VをOnにする。

d. download&install docker
if Hyper-Vが入っている場合
https://docs.docker.com/docker-for-windows/install/
if Hyper-Vが入っていない場合
https://docs.docker.com/toolbox/toolbox_install_windows/

ダウンロードしたら、デスクトップに
Docker Quickstart Terminal
が追加されるのでクリックして起動する。

e. 環境変数、COMPOSE_CONVERT_WINDOWS_PATHS に 1を設定する。
下記参考
https://qiita.com/asami-H-Ishi/items/5a6bb2102b3a07cbab41

f. サンプルのアプリをclone
(githubにアカウントを作ってログインする)
git clone https://github.com/akihitoalextsuboi/docker-rails.git

g. dockerを立ち上げ
cd docker-rails
docker-compose run web rails new . --force --database=postgresql
docker-compose build
docker-compose up


h. 192.168.99.100:3000にアクセス

i. 終了はdocker-compose downまたはControl+C
Control+C でやると再起動時にこのエラーが出る
web_1 | A server is already
running. Check /myapp/tmp/pids/server.pid.
To resolve this, delete the file tmp/pids/server.pid, and then re-start the application with docker-compose up.
rm tmp/pids/server.pid


j. dockerにログインする方法
docker-compose exec web bash


注意
docker-composeファイルのように書けばファイルは共有される
https://docs.docker.com/compose/rails/


```
* windowsでdocker-composeが使えないときがある
COMPOSE_CONVERT_WINDOWS_PATHS に 1 
```

複数ターミナルを開く方法は新しく、docker quick terminalのwindowを開くしかなさそう



参考
https://docs.docker.com/compose/rails/#more-compose-documentation
https://nulab-inc.com/ja/blog/typetalk/docker-tutorial-local-environment-team/
https://qiita.com/tomomomo1217/items/3e9664fd5290934f0815

https://qiita.com/acro5piano/items/ac3bef8a9f8bb9fdbdd5
https://qiita.com/KeitaMoromizato/items/ae1a57fc62b41b942d71
Leap Motionを使用してUnityを勉強してみる

# Leap Motionを使用してUnityを勉強してみる

今回はsampleプログラムを使用して経験者の友達と一緒にペアプロしましたー
そこで勉強になった事を軽くまとめます！

※一緒に開発した友達の記事はこっち
[Leap Motion + Unity 2017.3 + Mac で、3Dお絵かきアプリを開発してみた](https://qiita.com/hiesiea/items/f7031f91fe0ce0db5bb2#_reference-30c0368538978f04aeca "Qiita")

* 使用するsampleプロジェクト<br>
https://github.com/leapmotion/LeapMotionCoreAssets/releases/tag/v2.3.0

## `MonoBehaviour`
Unityのオブジェクトは基本的にはこのクラスを継承しています。
C#で書く場合は明示的にこのクラスを継承していると宣言する必要があります

例

```c#:TriggerDrawing.cs
public class TriggerDrawing : MonoBehaviour {
  //処理内容
}
```

## `void Start()`
実行時に一番最初にに呼ばれるメソッド
このメソッドの中に書かれている処理が最初に実行される

例

```c#:TriggerDrawing.cs
void Start() {
  //処理内容
　}
```

## `void Update()`
MonoBehaviourが有効の場合にフレーム毎に呼び出されるメソッド
このメソッドの中に書かれている処理がフレーム毎に実行される
※フレーム関しての参考URL
https://unity-yb.github.io/articles/frame_and_update.html

例

```c#:TriggerDrawing.cs
void Update() {
  //処理内容
}
```

## `void OnDestroy()`
MonoBehaviourが破棄される場合に呼び出されるメソッド
破棄されるのは1つ前にアクティブになっていたゲームオブジェクト

例

```c#:TriggerDrawing.cs
void OnDestroy() {
    foreach (LineRenderer line in lines_)
      Destroy(line.gameObject);
}
```

## 感想
結構Javaっぽい感じの書き方だったので意外と取っ付き易かった！
それに今回は経験者の友達と一緒に開発しながら教えてもらえたので楽しく開発しました。。。たまにはペアプロもいいねー
次回はもっと面白い機能を実装してみたい！

##参考URL
- sampleプロジェクト
https://github.com/leapmotion/LeapMotionCoreAssets/releases/tag/v2.3.0

- UnityDocument
https://docs.unity3d.com/ScriptReference/MonoBehaviour.html

以上！
自然言語処理とは：自分まとめ

こんにちは、自分のまとめを勝手にこちらにあげさせていただいております。
こちらEvernoteまとめシリーズです。
https://www.evernote.com/l/ATQbVnurEjlJk6tddeu92DNQXt5uYIfILr4

大変申し訳ございませんが、、一部どのサイトを拝見して勉強をさせてもらったのかを失念してしまいました。ですので、参照元のリンクを記載できず大変申し訳ございません。
もし、削除のご要望がございましたらすぐに落としますのでご連絡をお願いいたします。
【vimめも】 3. レジスタ

vimでは通常のクリップボードのコピー&ペーストとは違う
**レジスタ**という保存領域を持っている

`x`や`y`や`d`の操作時にはレジスタという領域に保存されるようになっている

## レジスタの種類

↓ @0829さんがわかりやすくhelpの内容をまとめてくださってました
[vimのレジスタ](https://qiita.com/0829/items/0b3f63798b6910623efc)

## むずかしい・・・

という方のために、簡単にまとめると
（個人的に必要と思うものだけ）

|レジスタ|意味|
|:-:|:-:|
|"|通常のヤンクや削除時に無差別に入る|
|a-z|指定して入れれる（上書き)|
|A-Z|a-zの内容に追加で入れれる|
|+|クリップボード。winなら`*`でもよいがmacを考えると`+`を使うべし|
|0|直近のヤンク（コピー）したものが入る ※1|
|1-9|直近の変更・削除したものが入り、順に1から9へと移っていく。9以降は削除される ※1|
|.|直近に挿入した文字が入る|
|:|直近に実行したコマンドラインのコマンドが入る|
|%|編集中のファイル名|
|_|保存されない消去専用のレジスタ(ブラックホール)|

※1:レジスタを指定していなかった時のみ入る


## 使い方

### ノーマルモード

`"` + {レジスタ} + {オペレータ}
で任意のレジスタに入れるようにして、コマンドを実行できる

{オペレータ}のみでレジスタをしてしていなければ、`"`の無名レジスタが対象のレジスタとなる

|オペレータ|意味|
|:-:|:-:|:-:|
|x|カーソルの文字を削除+ヤンク|
|s|カーソルの文字を削除+ヤンク+挿入モードに入る|
|yy|１行ヤンク|
|dd|１行削除+ヤンク|
|cc or S|１行削除+ヤンク+挿入モードに入る|
|d + 位置指定|範囲を削除+ヤンク ※2|
|y + 位置指定|範囲をヤンク ※2|
|p|カーソルの後に貼り付け|
|P|カーソルの前に貼り付け|

※2:wやbやeやfやGなどの移動でのコマンドと組み合わせることができ、カーソル位置から移動先の位置までが対象範囲

### 挿入モード

`<C-r>` + {レジスタ} : レジスタの内容を貼り付け

### ビジュアルモード

`"` + {レジスタ} + {オペレータ}

|オペレータ|意味|
|:-:|:-:|:-:|
|x or d|削除+ヤンク|
|y|ヤンク|

### 使い方の例

私のマッピング例です
削除　と　切り取り　をはっきりと分けて使い分けてます

```vim
" 削除のみ
vnoremap d "_d
nnoremap d "_d
vnoremap D "_D
nnoremap D "_D
vnoremap x "_x
nnoremap x "_x
vnoremap s "_s
nnoremap s "_s

" 切り取り
nnoremap t d
vnoremap t x
nnoremap tt dd
nnoremap T D
```

前回:[【vimめも】 2. normalモードの基本的な操作](https://qiita.com/r12tkmt/items/0e339b642db8693cd375)
次回:[【vimめも】 4. テキストオブジェクト](https://qiita.com/r12tkmt/items/0c1f84c0b64356cfbbff)
ブロックチェーン技術の不動産取引への適用最前線

金融以外にもさまざまな分野への適用可能性がいわれているブロックチェーン技術。ブロックチェーンが適用できる分野としてまずあげられることの多いのが不動産取引ですが、最近、不動産取引におけるブロックチェーン適用の記事がすこしずつ目につくようになってきました。不動産Techの一部としても取り上げられるブロックチェーン技術の不動産取引への適用。なぜ不動産取引がブロックチェーン技術の適用分野としてまず取り上げられることが多いのか、どのような仕組みを作ることがイメージされているのか、それからどのような技術が使われているか、オンラインメディアの記事からピックアップして紹介します。

※下記サイトからの転載。ビッグデータ・AIなどに関するトピックを毎週取り上げています。
[TechCrowd: https://www.techcrowd.jp/related/](https://www.techcrowd.jp/related/)


#[不動産業へのブロックチェーンの応用可能性] (http://www.nli-research.co.jp/report/detail/id=55924&pno=1?site=nli)

ニッセイ基礎研究所のWebサイトに掲載されている金融研究が研究員の佐久間誠さんの不動産テックの動向とブロックチェーンの応用例についての解説記事です。

xxTechという言葉がバズワードとなっていますが、その中のひとつとして不動産テック(Real Estate Tech)とは、IT技術と不動産の融合による技術革新を目指す取り組みのことであるというところからはじまり、今後不動産テックにおいて注目される分野としてブロックチェーン技術の活用が不動産業の労働生産性を大幅に向上させる可能性があると解説しています。

不動産でのブロックチェーンの応用分野としてあげてくれているのは、以下の３つです。
1 不動産登記を含めた不動産情報の記録・管理
2. スマートコントラクトによる不動産取引の電子化・自動化
3. IoTによる不動産管理の効率化

2017年4月の規制改革推進会議の投資等ワーキング・グループでは、不動産登記にブロックチェーンを活用すべきとの提案もあり、不動産情報プラットフォームをつくることも議論が始まっているようです。

いつパン的には、2. がよく取り上げられると思いますが、不動産取引には多くの契約が伴い、また紙での契約書を用いることがまだ一般的ですが、スマートコントラクトを活用すれば、契約書を電子化できることに加えて、契約に付随した資金決済や不動産登記などの業務を自動化して確実に実行されることを保証できるようになります。


#[ブロックチェーンを活用した不動産情報共有・利用実証実験] (https://lifull.com/news/10219/)

株式会社LIFULのプレスリリースです。株式会社LIFUL、株式会社カイカ、テックビューロ株式会社がブロックチェーンを活用した不動産情報共有・利用の実証実験を開始することを発表しています。

実証実験の開始にあたっての背景として、深刻化する空き家問題への対応や既存住宅の一層の流通促進が求められる中で、これまでばらばらに管理されていた情報の一元管理だけでなく、閲覧権限やその所有権の移転など、ブロックチェーン技術を利用する事で不動産情報の透明性が高まり、不動産の利用や活用とひいては市場の活性化が期待できるとしています。

この実証実験では、不動産・住宅情報サイトHOME’sのデータを使って、散在している不動産情報の紐付けをブロックチェーン上で接続・共有する仕組みとその有効性を検証していくとのことです。

ブロックチェーン技術としては、テックビューロ社のプライベートブロックシェーン製品mijinを使うとのこと。テックビューロ社は暗号通貨技術とブロックチェーン技術に基づいたソフトウェアとサービスを開発するとともに、仮想通貨取引所Zaifの運営も行なっています。また、テックビューロ社のインテグレーションパートナである株式会社カイカがmijinのインテグレーションを行うようです。


#[積水、世界初のブロックチェーン活用した不動産情報システム構築] (https://jp.reuters.com/article/sekisui-house-blockchain-idJPKCN1GL0WD)

ロイターの記事です。
積水ハウスが、ブロックチェーン技術を活用して不動産賃貸契約を実行する新たな「情報システム」を２０１８年夏以降に首都圏で稼働させるとの報道です。不動産分野で同技術を駆使したシステムによる本格的なビジネス展開は、世界でも初めてとみられるとのことで、本システムが稼働すれば物件情報収集から入居契約まで手元のアプリで手続きが可能となり、コストや時間を大幅に削減できるとのこと。

積水ハウスでは昨年４月からｂｉｔＦｌｙｅｒの開発によるブロックチェーン技術を活用して、物件検索から入居手続きまでアプリを通して従来より簡単に済ませることができるシステムを開発していて、現在、ほぼ自社の管理する物件情報をブロックチェーンに乗せるところまで進めてきているようです。現在、実際の不動産契約における運用面の課題・導入計画などを検討中。

１８年度中に首都圏でパイロット運用開始し、１９年度をめどに順次、規模・エリアとも運用拡大、２０年の本格運用を目指したいとしています。


#[スマートコントラクトによる土地売買を考える] (http://www.lij.jp/html/jli/jli_2017/2017summer_p018.pdf)

慶應大学SFC研究員の斎藤さんによる「土地総合研究 2017年夏号」への寄稿です。スマートコントラクトによる土地売買とはどのような仕組みのものかを解説してくれています。

筆者はプログラマ向けにイーサリアムにおけるプログラミングが体験できる「スマートコントラクトプログラミング」の講義を行なっているようですが、本記事の第4章で解説しているシンプルなスマートコントラクトによる土地売買のモデルはの講義の最終課題として出題している例題とのことです。概ね30分程度でかける簡単なコードで実際に記述して動かすことができるとのこと。

ブロックチェーン・スマートコントラクトも技術的には以外と身近なもので実用されるものを目にするのもちかいのかもしれません。
Docker for Windows を立ててみる

Docker環境をWindows上に作ろうとした時にやったことや気付きのメモです。
コンテナには全然詳しくなく、興味本位で触ってみたぐらいです。

## 構築環境
普通のWindowsマシン上でやりました。

|リソース|スペック|
|:--:|:--:|
|OS|Windows10 Pro [64bit]|
|CPU|Core i7 6700 [Skylake]<br>3.4GHz(MAX 4.0GHz)|
|RAM|16GB|

## 制約  

Docker for WindowsはHyper-V上にLinuxを立ててLinuxコンテナを利用するので、Hyper-Vが使える環境じゃないとだめとのこと。
要するにはWinSVかWidnows10 Pro以上のOSが必須ということ？
また、Windowsコンテナを利用することも可能らしい。これもDocker for Windowsで管理出来るっぽい？  

## Dockerのインストール  

[Docker Store](https://store.docker.com/editions/community/docker-ce-desktop-windows)でDocker for Windows CEを落としてきてインストールします。
このとき自動的にHyper-VにLinuxが立てられるので、予めHyper-Vを有効化しておきます。

## 早速起動に失敗

インストーラはちゃんと走るのに、Dockerを起動すると以下のエラーで止まりました。

> Unable to create: ユーザー設定変数 "ErrorActionPreference" または共通パラメーターが Stop に設定されているため、実行中のコマンドが停止しました。新しい仮想マシンを作成できませんでした。

調べてみるとどうもディレクトリのアクセス権限の問題らしい？  

> [[Issue] Docker failed to start - GitHub](https://github.com/docker/for-win/issues/574)  
> [[Issue] Docker fails to start on Windows 10 - GitHub](https://github.com/docker/for-win/issues/27)  

Hyper-Vマネージャ見てもLinux作られてないし、エラー内容見てみるとどうもVHDファイルの置き場所にアクセス出来なかったみたいなことが書いてあるので一回そこをExplorerで見てみる。  
するとUAC聞かれました。これが原因？（同じような事を書いてるブログ記事があった気がする）
上記実施してもう一度Docker for Windowsを起動。
すると今度は行けました！
Hyper-V上にもちゃんとVMがいる。（MobyLinuxVM）  
  
VMへのリソース割当が全部お任せなのが気持ち悪かったので一応確認すると、

|リソース|割当|
|:--:|:--:|
|CPU|3コア|
|RAM|4GB|
|Disk|10GBくらい|
|Network|DockerNAT|

上記のように割り当てられていました。コンテナの動作が重くなったら増やせばいいのかな？
ディスクは現時点で10GBくらいでした。（勝手に容量増えてくタイプのやつ？）
ネットワークは新しい仮想スイッチが作成されていました。Docker内でもネットワーク管理ができるらしいのでこの辺は触らないほうが良さそう。


そんなこんながあり、無事Windows(Hyper-V)上でDockerを動かすことが出来ました。
gitコマンドでファイルパスのコピペが面倒な時

addとかcheckoutとかでファイルを指定したい時ってありますよね。
パス全部打つのも面倒なら、コピペも面倒。

# git add -i

インタラクティブなaddという機能があります。

```
$ git add -i
           staged     unstaged path
  1:    unchanged        +1/-1 README.md

*** Commands ***
  1: status	  2: update	  3: revert	  4: add untracked
  5: patch	  6: diff	  7: quit	  8: help
What now>
```

``` git add -i ``` を叩くとこんなのが表示されます。
これを利用することで、数字によってファイルを選択できるようになります。

``` sh
What now> 2
           staged     unstaged path
  1:    unchanged        +1/-1 README.md
Update>> 1
           staged     unstaged path
* 1:    unchanged        +1/-1 README.md
Update>>  # 何も入力せずenter
updated 1 path
```

ファイルが多い？そんなときは範囲指定も可

```
           staged     unstaged path
  1:    unchanged        +1/-0 fuga.txt
  2:    unchanged        +1/-0 hoge.txt
  3:    unchanged        +1/-0 piyo.txt
Update>> 1-3
           staged     unstaged path
* 1:    unchanged        +1/-0 fuga.txt
* 2:    unchanged        +1/-0 hoge.txt
* 3:    unchanged        +1/-0 piyo.txt
Update>>
updated 3 paths
```
単純add以外にも使えるコマンドは以下

|コマンド|何するの？|
|:-:|:-:|
|2: update|ファイル単位で変更のadd|
|3: revert|ファイル単位でaddを戻す(reset)|
|4: add untracked|untrackedなファイルのadd|
|5: patch| ファイルの変更単位でのadd (add -p同等)|
|6: diff|add済みの差分見る(diff --cacehed)|
|7: quit| おわり|

私はほぼ4か5、たまに3を使うくらい。

コマンドでも結構便利に使えるので、これを機にコマンド使ってみませんか？
AWS WorkMailでメッセージの転送ルールを設定する

AWS WorkMailでユーザーを複数作成している場合、それぞれでログインしてメッセージを確認するのは大変です。

そこで、WorkMailでメッセージの転送ルールを設定します。

まずは、WorkMailログイン後、右上にある歯車をクリック
<img width="1387" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/50783/022f71ad-450f-9673-6e2a-c29e170c32b6.png">

表示された画面の左側にある `Email rules`タブをクリック
<img width="1385" alt="11.png" src="https://qiita-image-store.s3.amazonaws.com/0/50783/782ab8a2-e860-7523-7215-15fdf2f13e0c.png">

その後、表示される画面の `New` ボタンをクリック
<img width="1385" alt="12.png" src="https://qiita-image-store.s3.amazonaws.com/0/50783/c35b38e3-70fd-0714-6d6d-f93c8bec72ef.png">

設定モーダルが表示されるので、
ルール名と、このルールをアクティブにするかどうか、
さらに、このルール適用後のルールを停止するかを設定します。
<img width="1385" alt="14.png" src="https://qiita-image-store.s3.amazonaws.com/0/50783/3a8ddaff-93c9-3403-eb83-554d84bf97c6.png">

次にメッセージを受け取ったときの転送ルールの条件を設定します。
プルダウンの上から

- ...から受け取った場合
- 件名にこれらのワードが入っている場合
- 宛先が自分だけの場合
- 宛先に自分の名前がある場合
- 重要メールの場合
- 親展メールの場合
- CCに自分の名前がある場合
- ToまたはCCに自分の名前がある場合
- Toに自分の名前がない場合

<img width="1385" alt="15.png" src="https://qiita-image-store.s3.amazonaws.com/0/50783/9e3820ad-d844-2c55-c58e-6a07272d7204.png">

最後に、条件に当てはまった場合にやることを選択します。
プルダウンの上から

- メッセージを指定のフォルダに写す（受信ボックスに残さない）
- メッセージを指定のフォルダにコピー（受信ボックスに残す）
- メッセージを削除する
- メッセージをリダイレクトする
- メッセージを転送する
- 添付ファイルとしてメッセージを転送する

<img width="1385" alt="16.png" src="https://qiita-image-store.s3.amazonaws.com/0/50783/44082de6-5dcf-5c50-6e3b-c993661a6166.png">

設定後、左下の `Ok` をクリックして設定完了です。
Macでxxx.sql.gzファイルをMySQLにインポートする方法

以下のコマンドを実行する。

```zsh
gzcat ./xxx.sql.gz | mysql -u root -p database_name
```

参考: 
[Macで `.gz` ファイルの内容を確認したい場合はzcatではなくてgzcatを使うらしい - Qiita](https://qiita.com/goyachanpuru/items/1efcb0a45266e81aac0e)
[hoge.sql.gzファイルをMySQLにインポートする - Qiita](https://qiita.com/yamagen0915/items/ce1f9f8569ab2df68714)
ブラウザのネットワークエラーをレポートさせるNetwork Error Logging

2018/05/28 追記

動いた
「[ブラウザのネットワークエラーをレポートさせるNetwork Error Loggingが来た](https://asnokaze.hatenablog.com/entry/2018/05/28/210830)」

<hr>
自身のWebページにおいて、画像やCSSといったサブリソースがネットワークのエラーで取得できない場合があります。原因は、DNSの名前解決が出来なかった、TLSハンドシェイクに失敗したりと様々ですが、それをサーバ側で検知するのは難しいです。

そこで、[Network Error Logging](http://wicg.github.io/network-error-logging/)という仕様がW3Cで策定が進んでおり、ブラウザの実装も行われている状況です。

便利そうなので早く使いたい。

chrome canaryだと実装は入ってそうだが、手元だと上手く行かないorz 
https://chromium.googlesource.com/chromium/src/+/master/net/network_error_logging

## Network Error Logging
Network Error LoggingはHTTPレスポンスヘッダで、nelヘッダを付けることで設定します。
レポート先は、別途[Reporting API](https://wicg.github.io/reporting/)の仕様で定義されている report-toヘッダで指定します。

```js
nel: {"report-to": "network-errors", "max-age": 2592000,
      "include-subdomains": true, "success-fraction": 1}

report-to: { "group": "network-errors",　"max-age": 10886400,
             "endpoints": [
               { "url": "https://example.com/csp-reports" }
             ] }

```
(見やすさのために改行)

- report-to: report-toヘッダで定義されるレポートグループを指定
- max-age: 有効期間
- include-subdomains: Network Error Loggingをサブドメインでも有効にするか
- success-fraction: エラーじゃないものもレポートするか。その割合(1.0 ~ 0.0で指定)
- error-fraction: エラーのレポートするサンプリング割合 (1.0 ~ 0.0で指定)


### レポートデータ例
例えば、HTTP/2の通信がプロトコルエラーとなった場合は下記のようなデータが指定したエンドポイントにポストされます

```js
{
        "nel-report": [
            {
              "uri": "https://www.example.com/",
              "referrer": "http://example.com/",
              "server-ip": "123.122.121.120",
              "protocol": "h2",
              "status-code": 200,
              "elapsed-time": 823,
              "age": 0,
              "type": "http.protocol.error"
            }
          ]
        }
```

DNSの名前解決が出来なかった場合は、下記のようなデータが指定したエンドポイントにポストされます

```js
{
        "nel-report": [
            {
              "uri": "https://widget.com/thing.js",
              "referrer": "https://www.example.com/",
              "server-ip": "234.233.232.231",
              "protocol": "",
              "status-code": 0,
              "elapsed-time": 143,
              "age": 0,
              "type": "http.dns.name_not_resolved"
            }
          ]
        }
```

### Network Errorの種類
取れるエラーは、dns, tcp, tls, httpなどのエラーです。

- dns.unreachable
- dns.name_not_resolved
- dns.failed
- tcp.timed_out
- tcp.closed
- tcp.reset
- tcp.refused
- tcp.aborted
- tcp.address_invalid
- tcp.address_unreachable
- tcp.failed
- tls.version_or_cipher_mismatch
- tls.bad_client_auth_cert
- tls.cert.name_invalid
- tls.cert.date_invalid
- tls.cert.authority_invalid
- tls.cert.invalid
- tls.cert.revoked
- tls.cert.pinned_key_not_in_cert_chain
- tls.protocol.error
- tls.failed
- http.protocol.error
- http.response.invalid
- http.response.redirect_loop
- http.failed
- unknown
- abandoned
Haskellで自然言語処理100本ノックの第1章を解いてみる。【中編〜bi-gramとは】

# Haskellで自然言語処理100本の1章を解いてみます！
[Haskellで自然言語処理100本ノックの第1章を解いてみる。【前編】](https://qiita.com/ayase/items/417ad0bd305b7714a144)の続き
まあ１章だけなら対して苦労しないだろうって誰もがツッコミを入れているだろうが。。

# 05問目の内容が結構ふんだんになってしまった
なのでひとつの記事にしました。

# 問題と解答に至るまでの過程

## 05. n-gram
>**与えられたシーケンス（文字列やリストなど）からn-gramを作る関数を作成せよ．この関数を用い，"I am an NLPer"という文から単語bi-gram，文字bi-gramを得よ．**

まず、`n-gram`とはなにかから始まってしまう。
とりあえずwikiで調べる。
>「N文字インデックス法」「Nグラム法」などともいう。検索対象を単語単位ではなく文字単位で分解し、後続の N-1 文字を含めた状態で出現頻度を求める方法。

はっきりいって↑だけではわからん。(英語版wikiには多少詳しくかいてある。)
他にも調べていくと、
>隣り合う(連続する)n個

などと書いてあり、ようやく近づいてくる。
調べを進めていくとどうも

**`単語n-gram`は連続するn個の単語**
**`文字n-gram`は連続するn個の文字**

という認識らしい。
**nが2のときn-gramはbi-gramともいえるようだ。**
具体的に見ていくと、
![Unigram.png](https://qiita-image-store.s3.amazonaws.com/0/158820/8ad35e9a-b3cf-ae8c-9319-71ba7c5ec082.png)
[↑のソース](http://recognize-speech.com/language-model/n-gram-model/comparison)

上は`"This is a sentence"`に対する`単語n-gram`である。
`文字n-gram`は最小単位を単語ではなく文字にしたバージョンであるとみていいだろう。

では、Haskellではどのようにして`n-gram`関数をかくのか？
リストの先頭のnつをとって、次はリストの先頭をのぞいたリストから先頭のnつをとって、....
といけるので**`再帰`による定義**ができるように思える。
実際、`take`と`drop`を使って、


```haskell:ngram
ngram :: Int -> [a] -> [[a]]
ngram n xs  | n <= length xs = take n xs : ngram n (drop 1 xs)
            | otherwise      = []
```
のように再帰で記述できる。

ただ、ググると他にもいろいろ方法はあるようだ。
見たものに共通して見られるのは

```haskell:tailsとmapとtake
map (take n) . tails
```
を使用する方法である。
`tails`関数は部分リストのリストを生成する関数で、たとえば`"sentence"`に対して`tails`を適用すると、

```haskell:tails
Prelude Data.List> tails "sentence"
["sentence","entence","ntence","tence","ence","nce","ce","e",""]
```
のようになり、一番大きい要素がリストの先頭となる。
そんなわけで、`map (take n)`を引き続き適用すると

```haskell:tailsとmapとtake
Prelude Data.List> map (take 2) . tails $ "sentence"
["se","en","nt","te","en","nc","ce","e",""]
```
といった結果になる。
あとはtakeなり、filterなりをかませば期待する結果が得られる。
というわけで解答は以下のようになりました。

```haskell:05.hs
module Main where

import qualified Data.List as List
import qualified System.IO as IO

-- 解答その1
ngram :: Int -> [a] -> [[a]]
ngram n xs  | n <= List.length xs = List.take n xs : ngram n (List.drop 1 xs)
            | otherwise           = []
-- 解答その2
ngram' :: Int -> [a] -> [[a]]
ngram' n = List.filter (\xs -> List.length xs == n) . List.map (List.take n) . List.tails

main :: IO()
main = do
    let sentence = "I am an NLPer"
        wbigram = Main.ngram 2 $ List.words sentence  -- 単語bi-gram
        cbigram = Main.ngram 2 sentence               -- 文字bi-gram
    IO.print wbigram
    IO.print cbigram
```

```haskell:出力
[["I","am"],["am","an"],["an","NLPer"]]
["I "," a","am","m "," a","an","n "," N","NL","LP","Pe","er"]
```
【vimめも】 2. normalモードの基本的な操作

Normalモードの基本的な操作をおさらいしましょう
## 小さい移動

- `ｗ` : 単語の頭（forward）
    wo<font color="red">r</font>d word => word <font color="red">w</font>ord

- `b` : 単語の頭（backward）
    word wo<font color="red">r</font>d => word <font color="red">w</font>ord

- `e` : 単語の末（backward）
    w<font color="red">o</font>rd word => wor<font color="red">d</font> word

- `%` : 対応するもの
    <font color="red">(</font>word word) => (word word<font color="red">)</font>

- `f` + 何か : 特定の文字へ（forward)
    `fw`
    w<font color="red">o</font>rd word => word <font color="red">w</font>ord

- `F` + 何か : 特定の文字へ（forward)
    word w<font color="red">o</font>rd => wo<font color="red">r</font>d word

- `;` : f or F を進む
- `,` : f or F を戻る
## 大きい移動

- `gg` : 1行目
- `G` : 最終行
- `<C-u>` : 半ページ上の行
- `<C-d>` : 半ページ下の行
- `<C-b>` : 全ページ上の行
- `<C-f>` : 全ページ下の行
- `{` : 段落の始まり
- `}` : 段落の終わり
- `:` + 数字 : 好きな行
## 検索

- `/` + 文字 : 好きな文字で検索
- `*` : カーソル位置の単語で完全一致の検索（forward）
- `#` : カーソル位置の単語で完全一致の検索（backward）
- `n` : 検索を進む
- `N` : 検索を戻る
## その他

- `u` : 変更を１つ戻す
- `<C-r>` : 変更を１つ進む
- `<C-a>` : カーソル行でカーソル以降の数字をインクリメント
- `<C-x>` : カーソル行でカーソル以降の数字をデクリメント
- `<C-e>` : 画面を１行分下にずらす
- `<C-y>` 画面を１行分上にずらす
- `zH` : 画面を半ページ分左にずらす（文字折り返し無しのとき）
- `zL` : 画面を半ページ分右にずらす（文字折り返し無しのとき）
## 挿入モードに入る

- `i` : カーソルの文字の前から
- `a` : カーソルの文字の後から
- `I` : カーソルの行頭から
- `A` : カーソルの行末から
- `s` : カーソルの文字を消して
- `S` : カーソルの行を消して
- `o` : カーソルの行の後に１行追加して
- `O` : カーソルの行の前に１行追加して
## ビジュアルモードに入る

- `v` : ビジュアルモードに入る
- `<S-v>` : 行ビジュアルモードに入る
- `<C-v>` : ブロックビジュアルモードに入る
## コピー・削除

- `x` : カーソルの文字を削除+ヤンク
- `s` : カーソルの文字を削除+ヤンク+挿入モード
- `yy` : １行ヤンク
- `dd` : １行削除+ヤンク
- `cc `or `S` : １行削除+ヤンク+挿入モード

前回:[【vimめも】 1. vimについて](https://qiita.com/r12tkmt/items/fe32db64f50d534810c7)
次回:[【vimめも】 3. レジスタ](https://qiita.com/r12tkmt/items/97afb4b489966e746b20)
AWS WorkMailでユーザーを作成する

まず、AWSのサービスから WorkMailを選択します。
<img width="1385" alt="9.png" src="https://qiita-image-store.s3.amazonaws.com/0/50783/388277b3-d0ca-7ce5-3100-6a6f69234960.png">

ユーザーを作成したい組織を選択。
<img width="1385" alt="10.png" src="https://qiita-image-store.s3.amazonaws.com/0/50783/392c7785-a61f-ce21-d85b-5e16c431d5f9.png">

遷移したユーザ一覧画面の左上にある `Create user` をクリック。
<img width="1385" alt="5.png" src="https://qiita-image-store.s3.amazonaws.com/0/50783/5c971e9d-f959-0141-58f5-49314fef9efd.png">

ユーザ情報を入力してください。
<img width="1385" alt="６.png" src="https://qiita-image-store.s3.amazonaws.com/0/50783/a7fdb0a0-2553-9e13-c4e3-d42340fe2a7b.png">

次に進み、メールアドレスを作成してください。
<img width="1385" alt="8.png" src="https://qiita-image-store.s3.amazonaws.com/0/50783/baeb5ce2-9aba-526a-e4e4-054128ca8a5b.png">

右下の `Add user` ボタンを押して作成完了です。
データベースからLaravelのSeederを逆生成する

## はじめに
結論から言うと、[orangehill/iseed](https://github.com/orangehill/iseed)を使えば、逆生成できます。
逆生成したくなった背景は下記のとおり。

- `Laravel` 5.4で書かれたAPI
- データベースを使った機能テストを書きたい
- マイグレーションはある
- `Seeder`は使っていない
- いわゆるマスターデータ（最初から投入されているデータ）が必要
- CI環境（など使い捨ての環境）でテストを自動実行したい

## 導入手順
`README`を読めば分かることですが、やったことを列挙します。

- `composer require --dev "orangehill/iseed"`
   - 開発者しか使わない機能なので、`--dev`でインストール
- `config/app.php`の`providers`に`Orangehill\Iseed\IseedServiceProvider::class`を追加

## `artisan`コマンド
下記のように`artisan`コマンドを実行すれば、`Seeder`クラスが生成されます。

```bash
$ php artisan iseed {table_name}
```

仮に、`categories`テーブルだとすると、以下のようになります。

```php
// database/seeds/CategoriesTableSeeder.php
<?php

use Illuminate\Database\Seeder;

class CategoriesTableSeeder extends Seeder
{

    /**
     * Auto generated seed file
     *
     * @return void
     */
    public function run()
    {


        \DB::table('categories')->delete();
        
        \DB::table('categories')->insert(array (
            0 => 
            array (
                'id' => 1,
                /* ...(中略)... */
            ),
            1 => 
            array (
                'id' => 2,
                /* ...(中略)... */
            ),
            2 => 

```

## 外部キーチェックを一時的に無効にする（MySQLの場合）
外部キーがある場合、`\DB::table('categories')->delete();`でエラーになったので、`\DB::statement('SET FOREIGN_KEY_CHECKS=0');`で外部キーチェックを一時的に無効にし、`\DB::statement('SET FOREIGN_KEY_CHECKS=1');`で有効にすることで回避しました。

## おわりに
`Seeder`がなくても、`Migration`がなくても、DBをモックせずに、機能テストを書くようにしましょう。
ではでは。