OmniAICreator/Qiita-1.07M huggingface dataset:
[macOS] TensorFlowをインストールする

[macOS] TensorFlowをインストールする

<p>CoreMLではモデルは開発者で用意しないといけない。TensorFlowの利用を考えて、インストールしてみる。</p>

<p>公式サイトの情報によると、macOSでは以下の選択肢がある。</p>

<ul>
    <li>virtualenv</li>
    <li>"native" pip</li>
    <li>Docker</li>
    <li>installing from sources</li>
    <li>Anaconda</li>
</ul>

<p>お勧めはvirtualenvということなので、素直に従ってみる。</p>

<p>virtualenvをインストールする。</p>

<pre><code>$ sudo easy_install pip
$ pip install --upgrade virtualenv
</code></pre>

<p>あれ、二個目のコマンドでエラーになる。パーミッション関連なので、sudoつけてみた。</p>

<pre><code>$ sudo pip install --upgrade virtualenv
</code></pre>

<p>成功した。</p>

<p> virtualenv 環境を作成する。標準のPythonは2.7.10なので、以下のコマンドとなる。</p>

<pre><code>$ virtualenv --system-site-packages ~/tensorflow
</code></pre>

<p>次はアクティベート。bashなので、以下のコマンドとなる。</p>

<pre><code>$ source ~/tensorflow/bin/activate
(targetDirectory) $
</code></pre>

<p>pip 8.1がインストールされていることを確認する。</p>

<pre><code>$ easy_install -U pip
</code></pre>

<p>TensorFlowをインストール。</p>

<pre><code>$ pip install --upgrade tensorflow
</code></pre>

<p>動作確認する。</p>

<pre><code>$ python
Python 2.7.10 (default, Jul 15 2017, 17:16:57) 
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> # Python
... import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
2017-12-15 22:40:19.713684: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.2 AVX AVX2 FMA
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> 
</code></pre>

<p>成功したみたいだ。</p>

関連情報
<a href="https://www.tensorflow.org/install/install_mac"> Installing TensorFlow on macOS </a><br />
<a href="https://qiita.com/advent-calendar/2017/cocoa">Cocoa Advent Calendar 2017</a><br />
<a href="https://cocoa-kanto.connpass.com">Cocoa勉強会 BUKURO.swift (connpass)</a><br />
<a href="https://atnd.org/groups/cocoa-study">Cocoa勉強会 BUKURO.swift (ATND)</a><br />
<a href="http://cocoa-study.peatix.com">Cocoa勉強会 BUKURO.swift (Peatix)</a><br />

【Cocoa練習帳】
<a href="http://www.bitz.co.jp/weblog/">http://www.bitz.co.jp/weblog/</a><br />
<a href="http://ameblo.jp/bitz/">http://ameblo.jp/bitz/</a>（ミラー・サイト）<br />
<a href="https://t.co/6P3h2jtbRk>note</a><br />
<a href="https://qiita.com/m_yukio>Qiita</a><br />
Xcode Gameアプリケーションでゲームパッドが認識されない

#問題
USBゲームパッドの制御プログラムはコマンドラインプログラムでは動作するにも関わらず、Gameプロジェクトに移植するとゲームパッドを認識しない。

#原因
またSandboxのせいでした。（気づくまで6時間浪費）
外部機器の動作が期待通りにならない場合はまずはSandboxを疑いましょう。
Xcode9.2から表示が変わっているようです。Sandbox全体をOFFにすることも可能です。

<img width="1108" alt="sandbox2.png" src="https://qiita-image-store.s3.amazonaws.com/0/187104/644fff7c-080c-f55d-ab45-c84e7c9cbff6.png">


#環境
macOS 10.13.1
Xcode9.2 macOS/Gameプロジェクト SceneKit
LogicoolGamepad F310 (Xbox360タイプ)
XBox 360 Controller Driver Version 0.16.4 (https://github.com/360Controller/360Controller/)

GCControllerではゲームパッドを認識しない模様。MFi必須なのでしょうか。
そのため、IOHIDManagerでUSB機器として扱いました。
MPIで各ランクごとに違うファイルに標準出力する方法

kaityoさんの[MPI Advent Calender 2017](https://adventar.org/calendars/2548)の13日めの記事[『MPI-IOを使ってみる』](https://qiita.com/kaityo256/items/18dee7e7e4a663fdee47)を読んで、MPIの標準出力って自分いつもどうやってたっけって忘れがちなので、メモがてら15日めに参加します。

と言っても、大したことはなくて、単に

```shell
#!/bin/sh
./a.out > ${OMPI_COMM_WORLD_RANK}.log
```

というラップスクリプトを書くだけです。

この環境変数からランクを取得する方法、をいっつも忘れてしまうので、まとめました。

| 実装 | 環境変数名 |
|----|----|
| OpenMPI | `OMPI_COMM_WORLD_RANK` |
| mpich2, intel MPI | `PMI_RANK` |
| mvapich2 | `MV2_COMM_WORLD_RANK` |

毎回どの実装だったか調べるのも煩わしいので、一気にまとめることもできると思います。

```shell
#!/bin/sh
./a.out > ${OMPI_COMM_WORLD_RANK:=${MV2_COMM_WORLD_RANK:${PMI_RANK:?"ERROR!!"}}}.log
```

というわけでしょうもない小ネタでした。
Praatで録音＆スペクトラムを表示する

# 何をするのか
Praatの動作確認も兼ねて、Praatで自分の声を録音＆スペクトラム表示してみます。
[こちら](http://www.f.waseda.jp/kitahara/Notes/praat.html)のサイトの解説をなぞっています。
環境：MacOS sierra

# Praatの操作
録音からフォルマント表示するところまで流れを追っていきます。

1. Praat Objects ウィンドウの New タブをクリックし、Record mono Sound をクリックします。 ![praat1.png](https://qiita-image-store.s3.amazonaws.com/0/179891/a0805388-0037-9208-dcc8-b7425bdc6d68.png)
  
2. SoundRecorder ウィンドウが開きます。右下のTextボックスは録音した波形を記録するときの名前です。
Recordを押して録音を開始し、Stopを押して録音を終了します。Save to fileを押すと録音した情報がObjectsウィンドウに表示されます。
（この時点ではまだ.wavなどで保存されてはいないらしいです）![praat2.png](https://qiita-image-store.s3.amazonaws.com/0/179891/8e6543ad-822c-b63a-ba8a-12881334c202.png)

3. Praat Objects ウィンドウのView & Editを押します。![praat3.png](https://qiita-image-store.s3.amazonaws.com/0/179891/fe06104c-05dd-4e0b-43b5-ec9eb91fe1c0.png)
  
4. このような画面が表示されます。赤い点はフォルマントを表しています。私の時は初期状態でこれは表示されていませんでした。![praat4.png](https://qiita-image-store.s3.amazonaws.com/0/179891/5b6727b7-5653-b2d7-7e15-1ac50281595c.png)
  
5. Formant タブを押し、Show formantsを選択することで表示されます。![praat5.png](https://qiita-image-store.s3.amazonaws.com/0/179891/9f2632a1-5019-a7c8-0df9-86245875f99d.png)
  

# あいうえおかきくけこ
母音の区別はつきますね。フォルマント周波数の５角形[（音声生成の基礎と音声学）](https://www.slideshare.net/akinoriito549/phonetics-23821542)がそれっぽく出ているように思えます。"い"がちょっと分かりづらいですけど...。![praat6.png](https://qiita-image-store.s3.amazonaws.com/0/179891/02d8c80a-792a-f5f9-205b-876e0a4c7216.png)
Amazon EchoのSkillで何かを作ってみて申請してみたら申請結果が返ってきた


#〇前回までのアレクサスキル！
[適当なSkillを作成して申請してみた。](https://qiita.com/ryo_naka/items/936d9a6853be85bae88b)

#〇結果
二日ぐらいで申請結果がeMailで送られてきました。
※土曜の夕方の申請で月曜の夜に送られてきたので1営業日的なことなのかもしれません。

結果。
<img width="746" alt="01.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/106639/3fa65ea2-2937-c3db-9965-23a63a10f7d4.png">

とはいえ、
**・何がどうダメだったのか**
**・どう修正すればいいのか**
を懇切丁寧に教えてくれているのでそれの通りに修正すればよさそうな雰囲気。

せっかくなので自分に返ってきた分をご紹介。

##１．第三者の商標またはブランドを使用

<img width="741" alt="02.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/106639/085c8bde-cc26-f0aa-0c45-92d8a96b4832.png">

単純に権利違反。

意外だったのが、解決策に
>スキルのタイトルや詳細に「非公式」と記載する

という解があったこと。
「非公式」とうたえば問題ないんですかね？

##２．最初のサンプルフレーズには、ウェイクワードとスキルの呼び出し名の両方を含める必要がある

<img width="570" alt="03.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/106639/2f8f52b3-7950-2a93-2d33-7b5a7d9b2c27.png">

これが一番どう修正したらいいのかがよくわからない。

https://developer.amazon.com/ja/docs/custom-skills/functional-testing-for-a-custom-skill.html#review-and-test-example-phrases
ここを読む限り、サンプルフレーズには「Alexa」というウェイクワードも書けということなんでしょうね。
ただ、ウェイクワードって個々で変えられると思うんですけどね。
変えたやつに直して表示してくれるとかならわかるのですが。

##３．サンプルフレーズが、サンプル発話に含まれていない

<img width="738" alt="04.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/106639/5667e906-d824-1837-3a49-55355aa6cfd9.png">

申請後、自分で遊んでいてうすうす気が付いてはいましたが、
スキルの説明書きに記載しているフレーズでは起動しない状態になっていました。。

>サポートされている起動フレーズについて詳しくは、下記のリンク先をご参照ください。
https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/supported-phrases-to-begin-a-conversation


##４．サンプル発話が足りない。

<img width="745" alt="05.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/106639/6560bc05-a726-dae6-2bc9-2bac7e5ece56.png">

要するに
現在の設定では思ったような発動ができないためにもちっとバリエーションを足してくれや
ということだと思います。

>サンプル発話の増強について詳しくは、下記のリンク先をご参照ください。
https://developer.amazon.com/appsandservices/solutions/alexa/alexa-skills-kit/docs/defining-the-voice-interface#The%20Sample%20Utterances%20File


以上の４点。


#〇所感
思ってたよりも怒られなかった！
というのもかなり適当な申請をしていた自覚はあった(記載しているフレーズがサンプルに入ってないし。)ので、
もう少しぼろくそな結果になると思っていたのですが、そうでもなかったなというのが第一印象。
「非公式！」をつければいいよ　というのも意外でしたし。


また、この申請結果のレスポンスの速さからすると、
ある程度申請の自動チェックをしているのだと思いますが、
この辺のチェックの仕組みそのものにも興味ありますね。。

とりあえず上記の指摘事項を修正したらまた申請してみようかと思います。
離散型の発生間隔の分布

ランダムなイベントの発生間隔$x$を表す分布は、通常、[指数分布](https://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E5%88%86%E5%B8%83)で表現されます。

```math
\begin{align}
f(x)&=\lambda e^{-\lambda x}\\
\int_0^\infty f(x)dx&=\left[-e^{-\lambda x}\right]_0^\infty=1\\
E[x]&=\int_0^\infty xf(x)dx=\left[-xe^{-\lambda x}\right]_0^\infty+\int_0^\infty e^{-\lambda x}
=\frac{1}{\lambda}=\mu\\
\lambda&=\frac{1}{\mu}
\end{align}
```

ここで$x$は連続型の変数ですが、発生間隔を日単位などの離散型とした場合はどうなるのか気になったので調べてみました。
間隔が$x$となる確率は、$1$から$x-1$までは事象が発生せず、$x$で事象が発生する確率となります。

```math
\begin{align}
f(x)&=\lambda(1-\lambda)^{x-1}\\
\sum_{x=1}^\infty f(x)&=\sum_{x=1}^\infty\lambda(1-\lambda)^{x-1}=\lambda\frac{1}{1-(1-\lambda)}=1\\
E[x]&=\sum_{x=1}^\infty x f(x)=\sum_{x=1}^\infty x\lambda(1-\lambda)^{x-1}
=\lambda\frac{1}{(1-(1-\lambda))^2}=\frac{1}{\lambda}=\mu\\
\lambda&=\frac{1}{\mu}
\end{align}
```

確率の計算式は少し異なりますが、パラメータと平均値の関係式は同じになりました。
実際には[幾何分布](https://ja.wikipedia.org/wiki/%E5%B9%BE%E4%BD%95%E5%88%86%E5%B8%83)と呼ばれていることが分かりました。
CDSW上で、ローカルにMeCabをインストールする

Cloudera Data Science Workbench (以下CDSW) 上にMeCabをインストールする方法としては、[C/C++拡張されたPythonライブラリをCloudera Data Science WorkbenchとSparkクラスタで分散実行する](https://blog.cloudera.co.jp/conda-recipe-to-use-c-extended-python-library-on-pyspark-cluster-with-cloudera-data-science-workbench-224ab84570da)があるが、単に1ノードでMeCabを使いたい場合、ローカルにインストールするだけでいい。

セッションではroot/sudo権限はないため、`$HOME`以下にインストールする。

# ターミナルを開く

![CDSW12 Terminal Access.png](https://qiita-image-store.s3.amazonaws.com/0/17749/3cde406f-5471-72c3-2345-a1cea4ed9e39.png)

# MeCabのインストール

## MeCab本体

```shell-session
$ git clone https://github.com/taku910/mecab
$ cd mecab/mecab
$ ./configure --with-charset=utf8 --prefix=$HOME
$ make
$ make install
```

## 辞書

```shell-session
$ cd ~/mecab/mecab-ipadic
$ ./configure --with-charset=utf8 --prefix=$HOME
$ make
$ make install
```

## $HOME/bin にパスを通す

```shell-session
$ vi ~/.bashrc
```
`export PATH=${PATH}:${HOME}/bin` を追加して、bash起動。

```shell-session
$ bash
```

## NeoLogd辞書



```shell-session
$ git clone https://github.com/neologd/mecab-ipadic-neologd
$ cd mecab-ipadic-neologd
$ bin/install-mecab-ipadic-neologd --prefix $HOME/lib/mecab/dic/mecab-ipadic-neologd
```

# mecab-python3 のインストール

```shell-session
$ pip3 install mecab-python3
```

# 環境変数の設定

| 変数 | 値 |
|:-:|:-:|
|`LD_LIBRARY_PATH`|`${LD_LIBRARY_PATH}:${HOME}/lib`|

![CDSW12 Project Settings - Engine.png](https://qiita-image-store.s3.amazonaws.com/0/17749/43981670-b6b0-b0df-336a-27ec53a1dd51.png)

# 参考

- [Clouderaドキュメント: Project Environment Variables](https://www.cloudera.com/documentation/data-science-workbench/latest/topics/cdsw_environment_variables.html)
値と参照のappendはどちらが良いのか

# はじめに
こんにちは、LIFULL HOME'S事業本部 技術開発部の宮崎です。
これは[LIFULL その2 Advent Calendar](https://qiita.com/advent-calendar/2017/lifull2)の15日目の投稿になります。
ついでに[LIFULL Advent Calendar](https://qiita.com/advent-calendar/2017/lifull)もよければご覧下さい。

8日目にも記事を書きました。よければご覧ください。
[強いエンジニアにHelloWorldさせてみた](https://qiita.com/imishinist/items/1883b5eef836aeee93ff)

# Benchmark
golangは色々なツールが公式で提供されています。
その中で今回はbenchmarkツールを用いて疑問に思っていた内容のベンチマークをとってみようと思います。

# 内容
今年のISUCONの問題を解いている時に、sliceの先頭に要素を追加する必要がありました。
その時に、sliceの型が参照である場合と、値である時どちらのほうが早いのか疑問に思いました。

以下のようなものです。

```go
type User struct {
	Id int
	a  int
	b  int
	c  int
	d  string
}

// 参照のslice
sliceRef := make([]*User)

// 値のslice
sliceVal := make([]User)
```

それぞれの要素のサイズがいくつになるか計算してみます。

```go
package main

import (
	"fmt"
	"unsafe"
)

type User struct {
	Id int
	a  int
	b  int
	c  int
	d  string
}

func main() {
	u0 := &User{}
	u1 := User{}

	fmt.Println(unsafe.Sizeof(u0))
	fmt.Println(unsafe.Sizeof(u1))
}
```
```shell:実行結果
8
48
```

`&User{}`は参照で、`User{}`は値なので当然ですね。

参照のほうがサイズが小さいため、早そうです。

# 実行結果

```go:コード
package main

import "testing"

type User struct {
	Id int
	a  int
	b  int
	c  int
	d  string
}

func BenchmarkRef(b *testing.B) {
	slice := make([]*User, 0)
	for i := 0; i < b.N; i++ {
		slice = append(slice, &User{Id: i})
	}
}

func BenchmarkVal(b *testing.B) {
	slice := make([]User, 0)
	for i := 0; i < b.N; i++ {
		slice = append(slice, User{Id: i})
	}
}
```
```sh:ベンチ結果
$ go test -bench . -benchmem
goos: darwin
goarch: amd64
BenchmarkRef-4   	 5000000	       227 ns/op	      91 B/op	       1 allocs/op
BenchmarkVal-4   	 2000000	       524 ns/op	     246 B/op	       0 allocs/op
PASS
ok  	_/Users/taisuke/Desktop/bench	3.141s
```

やはり参照のほうが早そうです。

しかし、このベンチのコードの中では、sliceを確保する際に容量を指定していません。
容量を指定してみます。

```go:コード
package main

import "testing"

func BenchmarkRef(b *testing.B) {
	slice := make([]*User, 0, b.N)
	for i := 0; i < b.N; i++ {
		slice = append(slice, &User{Id: i})
	}
}

func BenchmarkVal(b *testing.B) {
	slice := make([]User, 0, b.N)
	for i := 0; i < b.N; i++ {
		slice = append(slice, User{Id: i})
	}
}

```
```sh:ベンチ結果
$ go test -bench . -benchmem
goos: darwin
goarch: amd64
BenchmarkRef-4   	10000000	       193 ns/op	      56 B/op	       1 allocs/op
BenchmarkVal-4   	20000000	       184 ns/op	      48 B/op	       0 allocs/op
PASS
ok  	_/Users/taisuke/Desktop/bench	6.111s
```

意外な結果になりました。


# まとめ
想像だけでコードを書いてはいけないですね。
場面によって内容が異なると思いますので、パフォーマンスが気になる場合は自分でベンチマークを取ってみてはいかがでしょうか。

どうしてこのような原因になったのかは後日調べてみようと思います。

~~本当はgolangでのduck typeの実装について調べようと思っていたけど、気付いたら時間が…~~
KUSANAGI RODのphp7でphp-gdのJPEGを有効にする

Dockerfile書き換え。
[DockerでConoHaのインスタンスを建てて、KUSANAGI(Wordpress)を導入する](https://qiita.com/tpywao/items/5cedd19d80a86e5c18ac)の番外編。

## 問題発生
### 画像をアップロードした時に別のサイズが作られない
Wordpressに画像をアップロードすると、アイキャッチ用やモバイル用など様々なサイズの画像が自動で生成されます。
なぜかjpegの時だけ作られていませんでした。ナゼ。

#### とりあえずググる。
GDってのが使われているらしいぞ。

#### php infoを見てみる
GDのところを見るが、PNGやGIFなどの表記があるのにJPEGはない。

#### 普通にインストールしたGDでは、JPEGは扱えないらしい
php再インストールからやらなきゃかな...

## Dockerfileを探す
前の記事で示した`docker-compose.yml`から、dockerイメージの元となる`Dockerfile`を探します。

```yml:docker-compose.yml
...
kusanagi-php7
  image: primestrategy/kusanagi-php7:7.0.6-1
...
```

[dockerhub](https://hub.docker.com/) の primestrategy/kusanagi-php7を確認します。
(URLが明示されていないときはdockerhubから取ってくる仕様らしいです)
https://hub.docker.com/r/primestrategy/kusanagi-php7/

Source Repository にgithubのリンクがあったので確認します。
それっぽいのでクローンしてみます。

```
$ git clone --depth 1 --single-branch https://github.com/prime-strategy/kusanagi-php7.git
```

## コンテナをビルドしてみる
とりあえずクローンしてきたDockerfileを使ってコンテナをビルドしてみます。

```
$ ls
Dockerfile
$ docker build .
```

### 残念...
エラーが出ました。

### 原因
Dockerfileで指定されているmariadbのバージョンが古いためでした。
(この確認のために `&&` で繋がれているコマンドを一行ずつに分けて記述してビルドしたりしました。他にいい方法があれば教えて...)
apk(alpineのパッケージ管理ツール)でとってこれるバージョンが変わってしまっているようです。

### 改善
本当であれば指定されていたmariadbのバージョンのソースを取ってきてビルドした方が良いと思います。
面倒なので今回はmysqlのバージョンを指定しないようにします。

```diff:Dockerfile
-ARG MYSQL_VERSION=10.1.21-r0
+# ARG MYSQL_VERSION=10.1.21-r0
...
-               mariadb=$MYSQL_VERSION \
-               mariadb-dev=$MYSQL_VERSION \
+               # mariadb=$MYSQL_VERSION \
+               # mariadb-dev=$MYSQL_VERSION \
+               mariadb \
+               mariadb-dev \
```

#### 再度ビルドしてみる
今度は上手くいった。
(warningはたくさん出ているけども...とりあえず大丈夫なはず...)

```
$ ls
Dockerfile
$ docker build .
```

## gdのjpeg利用設定
- [PHP: インストール手順 - Manual](http://php.net/manual/ja/image.installation.php)

docker-php-ext-installの前にgdでjpegを使用する設定のコマンドを書いておきます。
--with-jpeg-dirにつけるパスが、なぜ/usrで良いのかはよくわからなかった...

```diff:Dockerfile
     ...
+    && docker-php-ext-configure gd --with-jpeg-dir=/usr \
     && docker-php-ext-install \
     ...
```

### ビルドする
-t でイメージに名前をつけています。

```
$ ls
Dockerfile
$ docker build . -t php7-enable-jpeg
```

### ちゃんとgdのjpegサポートができているか確認
```
$ docker run -it --rm php7-enable-jpeg /bin/sh
/var/www/html # php --info | grep -A10 GD
...
JPEG Support => enabled
...
```

## docker-compose.ymlを書き換える
`build: context` にDockerfileのあるディレクトリまでのパスを書いてください

```diff:docker-compose.yml
...
-    image: primestrategy/kusanagi-php7:7.0.6-1
+    build:
+      context: [path/to/Dockerfile/directory]
```

## 後は前の記事に沿って実行する
[前の記事](https://qiita.com/tpywao/items/5cedd19d80a86e5c18ac)の「docker-machineの情報を設定する」くらいが続きになるはずです。

頑張ってください！

## 参考
- [PHP: インストール手順 - Manual](http://php.net/manual/ja/image.installation.php)
組合せ最適化で美術館を解く

Advent Calendar 15日目の記事 [組合せ最適化でののぐらむを解く](https://qiita.com/SaitoTsutomu/items/7e01f4bc3acb540b4c81)
Advent Calendar 17日目の記事 [組合せ最適化でナンバーリンクを解く](https://qiita.com/SaitoTsutomu/items/a1a2df0e142c7ab10ff5)

## これなに

**美術館**を、Pythonで[組合せ最適化](https://qiita.com/SaitoTsutomu/items/bfbf4c185ed7004b5721)モデルを作って解きます。
解く楽しみは、モデル化を工夫することになります。

自分でも試してみたい人は、下記を参考にしてください。

- [数独を通して組合せ最適化を学ぼう](https://qiita.com/SaitoTsutomu/items/bd09190d8a02432b3f16)

## 問題
* 黒マスに入っている数字は、それと隣接する縦横両隣の最大4つの白マスに入る○の数を表します
* 照明は，そのマスから上下左右に黒マスか外枠にぶつかるまでの範囲を照らします
* 斜めには照らすことはできません
* どの照明にも照らされていない白マスがあってはいけません
* 照明のあるマスは他の照明で照らされてはいけません

下記は、問題と答え(○のところ)です。

![](https://raw.githubusercontent.com/SaitoTsutomu/opt4puzzle/master/pic/museum.png)

### 入力パラメータ

`data`にヒントが入っているとします。

```py3:python
import numpy as np, matplotlib.pyplot as plt
from itertools import groupby
from pulp import LpProblem, lpSum, value
from ortoolpy import addbinvars
data = np.array([list(s) for s in """\
#.....#
..4...1
...2...
.#...1.
...#...
0...#..
#.....1""".splitlines()])
```

## Pythonで解く

数理モデルを作成し、解きましょう。

### 変数
* v:各マスに照明をおくかどうか (1)

### 制約
* 白マスの並びの中で照明は1つ以下 (2)
* 各マスは1つ以上の照明で照らされること (3)
* 数字の周りに同じ数の照明 (4)
* 数字に照明はおけない (5)


```py3:python
m = LpProblem()
u = np.array(addbinvars(data.shape[0]+2, data.shape[1]+2))
u[0] = u[-1] = u[:,0] = u[:,-1] = 0
v = u[1:-1,1:-1] # (1)
a = [[] for _ in range(v.shape[0] * v.shape[1])] # 見えるマス
b = np.arange(v.size).reshape(v.shape) # aのindex
c = data == '.' # 白マス
v[~c] = 0 # 黒マスは0 (5)
for v_, b_, c_ in [(v, b, c), (v.T, b.T, c.T)]:
    for vv, bb, cc in zip(v_, b_, c_):
        d = [0] + (cc[1:] != cc[:-1]).cumsum().tolist()
        g = groupby(zip(d,bb,cc,vv), lambda a: a[0])
        for e in [list(i[1]) for i in g]:
            f = lpSum(j[3] for j in e)
            if f:
                m += f <= 1 # (2)
                for j in e:
                    a[j[1]].append(f)
for aa in a:
    if aa:
        m += lpSum(aa) >= 1 # (3)
w = u[:-2,1:-1] + u[1:-1,2:] + u[2:,1:-1] + u[1:-1,:-2]
for h, e in zip(data.flat, w.flat):
    if h.isdigit():
        m += lpSum(e) == int(h) # (4)
m.solve()
```

### 結果の表示

```py3:python
plt.imshow(c+np.vectorize(value)(v), cmap='gray', interpolation='none')
plt.show()
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/13955/28479805-dd67-a5c5-8702-8179d9013955.png)

解けていることが確認できます。

以上
【jQuery 超初心者】指定したslackのチャンネルにwebアプリから入力したメッセージを送ってみた

SlackAPIのトークンが色々データ持ってて面白そうなので、扱えるようになりたい！って思って
取り敢えずトークン使いたくて**メッセージ送信機**作ってみた。
指定したslackのチャンネルに入力したメッセージを送れるよ。
これで匿名発言出来るね！:sunglasses:

こんな感じになります↓

#### ■ webアプリ画面
<img width="446" alt=" 2017-12-15 20.57.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/42808/95517b82-fcc1-cc09-c7aa-84b8b4fb47f2.png">
#### ■ slackに送信されたやつ
<img width="296" alt=" 2017-12-15 20.55.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/42808/c8e0d406-7dc7-d1bf-039f-7f4748027aab.png">

## slackのトークンを取得しよう
**[legacy-tokens](https://api.slack.com/custom-integrations/legacy-tokens)**に行って
送りたいチャンネルがあるワークスペースのトークンを作ってコピーしましょう！
![Image uploaded from iOS (2).png](https://qiita-image-store.s3.amazonaws.com/0/42808/0a17ccb6-8aa3-6f89-0c0f-2801c82adb49.png)

## コード書くぞー！！

```html:index.html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>Slack Sample</title>
	<link rel="stylesheet" type="text/css" href="css/common.css">
</head>
<body>
	<section>
		<p>匿名で発言しちゃお(˘︶˘*)</p>
		<div class="slack-send">
			<form method="post">
				<input type="text" name="inputText" placeholder="なんて送る？">
				<button class="slack-submit" type="button" name="button">送信！</button>
			</form>
		</div>
	</section>
	<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
	<script src="js/app.js"></script>
</body>
</html>
```
```css:common.css
@charset "utf-8";
/* resetCSS 適当に入ってます */
section{
	margin-top: 50px;
}
p{
	font-family:"ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "ＭＳ Ｐゴシック", "MS PGothic", verdana, arial, helvetica, sans-serif;
	margin: 10px 20px;
}
.slack-send input{
	font-family:"ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "ＭＳ Ｐゴシック", "MS PGothic", verdana, arial, helvetica, sans-serif;
	width: 285px;
    border: solid 1px #ccc;
    border-radius: 4px;
    margin: 10px 20px;
	padding: 5px 10px;
    font-size: 20px;
    height: 45px;
}

.slack-send button{
	height: 45px;
	display: inline-block;
	font-size: 15px;
	padding: 0.3em 1em;
	text-decoration: none;
	color: #c69;
	border: solid 2px #c69;
	border-radius: 3px;
	transition: .4s;
}
.slack-send button:hover {
    background: #c69;
    color: white;
}
```

```js:app.js（jQuery)
$(function () {
	$('.slack-submit').on('click', function () {
		var url = 'https://slack.com/api/chat.postMessage',
			param = $(this).prev().val(), 
			// prev():指定した要素の兄弟要素でマッチした要素を選択。
			// val():指定した要素のvalue属性の値を取得。
			data = {
			token: '{各自のslackのトークン}',
			channel: '#random', // 送りたいチャンネル名
			username: '匿名希望さん', // 表示したい名前
			text: param
		};

		$.ajax({
			type: 'GET',
			url: url,
			data: data,
			success: function (data) {
				alert('送ったよ');
			}
		});
	});
});
```

こんな感じで書きました。
でもきっともっと良い書き方とかあるのかな。
ほんとはアラートのところ、
[おじさんが若い時はね$.ajax()のオプションでsuccessとかerrorとか指定していたんだよ（追憶）](https://qiita.com/tonkotsuboy_com/items/0722ad92f370ab0c411b)
に書かれてるように書きたかったんだけど結局使い方よく分からなかったので、もうちょっと頑張ってみる:muscle:
Elixirで利用するIDEについて


## はじめに

OS環境 : Mac
IDE環境: IntelliJ IDEA / Ruby Mine / Pycharm

個人的に、IDEが大好きなので、下記の環境にて、Elixirが開発可能か試してみた。

当然のように、Pluginにて提供されているので、その設定方法を書いてみる。

今回の画面は、HTML等のシンタックス等が、`Phoenix`に似ていいるので、`RubyMine`を使用する。


## Pluginのインストール

[RubyMin]-[Preferences] で Preferences画面を表示する。

![スクリーンショット 2017-12-15 19.28.37.png](https://qiita-image-store.s3.amazonaws.com/0/3184/dcba7cfd-f816-c68e-560a-a9277b896831.png "スクリーンショット 2017-12-15 19.28.37.png")



[Plugins]を選択し、検索欄に、「elixir」を入力すると、最適な「Elixir」プラグインが表示されるので、そのままインストールする。IDEの再起動が必要なので再起動する。

![スクリーンショット 2017-12-15 19.30.27.png](https://qiita-image-store.s3.amazonaws.com/0/3184/0727137f-4125-5e77-a12f-d9c191066cdc.png "スクリーンショット 2017-12-15 19.30.27.png")



## Elixir External Tool の設定

IDE再起動後に、インストールしたプラグイン[Elixir External Tools]の設定を行う。

※自分の環境の場合、`elixir`は、`Home brew`にてインストールしているので、他のインストール方法を行っている場合は、同様であるかは未検証である。

同様の環境である場合は、下記を設定する。

Mix Path : /usr/local/bin/mix
Elixir Path : /usr/local/Cellar/elixir/1.X.X


![スクリーンショット 2017-12-15 19.29.59.png](https://qiita-image-store.s3.amazonaws.com/0/3184/402d05d7-2cc6-32dd-d946-5b6adbafcaba.png "スクリーンショット 2017-12-15 19.29.59.png")


## Runの設定

ここでは、`Mix`コマンドをIDEから実行する設定をしてみる。
下記のように `Run...`から、`Edit Configrations...` を選択して設定する。

![スクリーンショット 2017-12-15 21.03.50.png](https://qiita-image-store.s3.amazonaws.com/0/3184/c3ab3fc9-1d89-5ba7-5ae5-1370b69b955b.png "スクリーンショット 2017-12-15 21.03.50.png")

ここでは、既に3つの`Run`タスクが既に登録されているが、下記のように、`mix phx.server`を登録してみる。


![スクリーンショット 2017-12-15 21.01.45.png](https://qiita-image-store.s3.amazonaws.com/0/3184/7370d1dd-bc52-b8f9-c073-f635054a2d7f.png "スクリーンショット 2017-12-15 21.01.45.png")


## Runの実行

IDEから、Runを実行するとサーバが起動され実行されることが確認できる。

![スクリーンショット 2017-12-15 21.06.01.png](https://qiita-image-store.s3.amazonaws.com/0/3184/6ec52ab3-8bdb-3918-5708-38959b98b51b.png "スクリーンショット 2017-12-15 21.06.01.png")

![スクリーンショット 2017-12-15 21.09.20.png](https://qiita-image-store.s3.amazonaws.com/0/3184/29484b5f-c376-2b8c-f1f0-535bcb814007.png "スクリーンショット 2017-12-15 21.09.20.png")
クラウドの踏み台越えのSSH接続をラクラク一発で！

# はじめに
AWSなどのクラウド環境へのSSH接続では踏み台サーバーを経由するのが一般的です。
しかし、踏み台サーバーへログインし、再度SSHで内部のサーバーにアクセスするのはちょっとめんどくさいですよね。
そこで、クラウド内の目的のサーバーに一発でログインできる方法を紹介します。(Windows限定)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/211866/e63b36c8-3fed-d19e-efd2-c8d1ecad1fc9.png)

# 必要なのも
今回はSocksプロキシを利用した方法を紹介しますので、[RLogin](http://nanno.dip.jp/)というソフトを利用します。

# 設定方法
## 踏み台（10.0.0.1）への接続設定
- 踏み台へ接続する設定をしてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/211866/22af9f35-f81e-a68b-f854-41a63e653d50.png)

- 次にプロトコルからポートフォワードを選択します。
豆ですが、**ポートフォワードだけ行う** にチェックを入れると便利です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/211866/e8e63c1b-460e-50ba-febc-53a89ccb123a.png)

- 新規を選択しlocalhostの任意なポートを設定します。
ここでのポイントとしては **Local Socks** を選択することです。
必ず、Local Socks を選択してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/211866/a4ecac65-56a9-366d-8957-4391f049952d.png)

以上で踏み台の設定は完了です。

## 踏み台（10.0.0.1）への接続
- 先ほど設定した踏み台転送を実行します。
汚くてすみません・・・
![image.png](https://qiita-image-store.s3.amazonaws.com/0/211866/89795158-442a-bc9c-82bc-b08e3142193d.png)
- **ポートフォワードだけ行う** にチェックが入っていると以下のような画面が出てくると思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/211866/e190f17c-3047-dfc6-1bbd-1e33ca60784b.png)

これで準備OKです。

## Server A（10.0.1.1）への接続設定
- 新規で接続設定をします。
socket port をsshに設定してください。
パスワード、又は秘密鍵は、ServerA（10.0.1.1）へのログインで必要な情報を設定してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/211866/7788a665-7995-c839-b149-f442d85deb78.png)

- ダイアログ内の Proxy Serverの**設定** を選択します。
Select Proxy Protocol を **SOCKS5** にチェックします。
Proxy Server Adress には localhost、 Socket Port には踏み台設定で指定したportを設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/211866/c4eb0221-451a-ad89-11bd-703ce604c65f.png)

これで設定完了です。

# ServerA（10.0.1.1）へログインしてみよう
先ほど設定したServerAを実行します。
いきなりServerAにログイン出来ましたよね？
踏み台転送を最初に実行しておけば、上記の方法で踏み台越えログインが簡単に実現できます。

# さいごに
今回はRLoginを使った方法を紹介しましたが、RLoginは便利ですね。
タグも使えるのでウインドウが汚れずに重宝しています。
では、良いクラウドライフを！！
Swift4 Codableがすごすぎた件

Swift4から新たにFoundationに追加されたCodableプロトコルがすごすぎたのでご紹介。

API通信でデータを取得する際に、JSONで受け取ってモデルや構造体に変換する、といった手法が一般的である。これまでは、JSONSerializationやライブラリを用いてパースし、プロパティにセットする、ということをしていたと思う。Swift4からは、Codableを用いることで、シンプルにコレを実現することが可能となったのだ！

## Codable

以下のようなJSONをAPI通信のレスポンスで取得するとしよう。

```json
{
    "name": "hoge",
    "sex": 0,
    "birthday": "19900530",
    "mail_address": "hoge@gmail.com"
}
```

コレを"User"構造体に変換する場合は以下のようになる。

```Swift:User.swift
import Foundation

struct User: Codable {
    
    let name: String
    let sex: Int
    let birthday: String
    let mail_address: String
    
}
```

変換する処理は一撃だ！

```swift
let jsonString = さんぷるのじぇいそん
let user = try! JSONDecoder().decode(User.self, from: jsonString.data(using: .utf8)!)
```

以上、終了である。

## ネストにも対応

ネストされたデータはどうだろうか。
以下のようなJSONのケースを考えてみる。

```json
{
	"status_code": 200,
	"user_list": [
		{
    		"name": "hoge",
    		"sex": 0,
    		"birthday": "19900530",
    		"mail_address": "hoge@gmail.com"
		},
		{
    		"name": "fuga",
    		"sex": 1,
    		"birthday": "19850421",
    		"mail_address": "fuga@gmail.com"
		}
	]
}
```

コイツを以下のような構造体に変換する。

```Swift:UserListResult.swift
import Foundation

struct UserListResult: Codable {
    
    let status_code: Int
    let user_list: [User]
    
}
```

お前は既に死んでいる

```swift
let jsonString = さんぷるのじぇいそん
let userListResult = try! JSONDecoder().decode(UserListResult.self, from: jsonString.data(using: .utf8)!)
```

ひでぶ!!

## スネークケースはちょっと…。

サーバーサイドではスネークケース、クライアントサイドではキャメルケースを採用している場合など、JSONのキーと構造体のプロパティ名が意図しているものと異なることがある。でもご安心を、そんなあなたに"CodingKey"!!

```Swift:UserListResult.swift
import Foundation

struct UserListResult: Codable {
    
    let statusCode: Int
    let userList: [User]
    
    private enum CodingKeys: String, CodingKey {
        case statsCode = "status_code"
        case userList = "user_list"
    }
    
}
```

コレでプロパティ名とフィールド名をマッピング定義させることができた。**Coooooooool!!!!!!**

## 終わりに

iOSアプリ開発には必ずつきまとうであろうAPI通信のレスポンス処理、Codableを導入すればきっとあなたは幸せになれるハズである。
アートは難しい？

#創作者としての活動を通して
私は株式会社グロービスにて、デザインやコンテンツ開発のお手伝いをする傍ら、個人的に作品を作る活動もちょこちょことやっております。（[ホームページ](http://gomanomoto.wixsite.com/hnworks)）
そこで、今回は僭越ながら「アート」についての所感を記事にしようかと思います。

Qiitaを利用されている方はエンジニアの方が多いかと思いますが、何かを作る職業の一つとしてアートについて少しでも興味を持っていただければと思います。

#アートは難しい？
![s_gerome-viavant-217865.jpg](https://qiita-image-store.s3.amazonaws.com/0/201050/b0fadd4c-d96e-c96b-2cc8-09f254da830c.jpeg)

アートは難しい、よくわからない、ということを耳にすることが多々あります。
でも、アートというのは本来全然難しいことではないと私は思っています。

なぜなら、鑑賞者にとってのアートは平たく言うと「感動すること」だからです。
その作品をみて、楽しくなったり、衝撃を受けたり、考えさせられたり、何かに気づいたり…
それらの感情や思考というものは、自分の中から勝手に湧き出てくるものです。
そして、アートというのはその勝手に湧き出てくる何かを楽しむものなのです。

こと日本においては、有名だから、みんながすごいと言っているからと、まるでありがたいものを拝みに行くような感覚で展示に行く方が多いように思います。
「ゲルニカ」だろうが「モナリザ」だろうが「太陽の塔」だろうが、そこに心をうごかされないのであれば、その鑑賞者にとってのアートはそこに存在しないと私は思います。

#アートを難しくしている原因
![s_andre-hunter-350301.jpg](https://qiita-image-store.s3.amazonaws.com/0/201050/8dded4db-22d6-007c-0ff4-adf71b95303e.jpeg)

アートを難しくしている原因として私は下記要因があると思っています。

1. アートの特性
2. アート作品の社会的な価値
3. 現代アート

####1.アートの特性
少しデザインについて述べると、デザインにはユーザーやクライアントがいるので、必ずその相手のことを意識して制作をする必要があります。
それに対し、アートは「表現すること」そのものが作者にとっての目的なので、特定の誰かのためにの表現ではなく、自分の中にあるこれがいいと思う表現することになります。
なのでアートは「作者」と「作品に共鳴してアートを体験できた人」の間にしか存在しません。なので、作品に対してなにも感じ得なかった人にとっては理解しがたいものとして捉えられてしまいます。

####2.アート作品の価値
これはどちらかと言うと、反感からくる理解不能という感じだと思います。
アート作品は、そのもの自体の価値とは別に、歴史的・学術的な価値や、また資産としての価値といった社会的な価値がつきます。それらによって、ときにとてつもない値段がつくこと、また先に述べたアートの特性が相まって、余計に摩訶不思議な現象として捉えられがちなのです。

####3.現代アート
アートを難しくしている原因でインパクトが大きいのはここだと思います。
アートは表現することだと先に述べましたが、その表現というものは、技術や科学の発展と同じように、人類の営みの中であらゆる表現が開発されてきたのです。
先人のアーティストたちが、類まれなる才能をいかんなく発揮し、いろいろな表現に手をつけていった結果、現代アートと呼ばれるものには「よくある公衆便所の便器に落書きして置いただけ」という表現が出現したりしてしまうのです。
つまり、その発展の歴史や内情を知らないとわかりづらくなっており、また技術の発展とともにあらゆる表現が可能になったものも相まって、さらにアートを属人的なものにしているように思います。
しかしながら、色々と知っていくうちに良さや面白さを体験できるともいえますね。


#アートを楽しんでほしい
![s_samuel-zeller-367981.jpg](https://qiita-image-store.s3.amazonaws.com/0/201050/2a9a5f40-1edf-4873-3541-5b68e90f1c01.jpeg)

逆にいうと、今の世にはあらゆる表現が存在します。
その中にはきっと自分に合った「アート」が存在するはずなので、是非アートを毛嫌いせずに楽しんでいただければと思います。
鑑賞者として、時には表現者として。

短いですが、今回のところは以上です。
（感想やご意見あればありがたいです）
[とあるコンテスト:Apache] Digest認証を設定してみる


Hello World !!
今回は、CentOS上でhttp serverにDigest認証を実装させたいと思います。

※ Digest認証とは、Basic認証とは違い平文でパスワードを送信しない認証方式です。しかし、Basic認証よりもかなりセキュアであるという訳でもありませんので、一般的にはSSL(TSL)を使うべきです。

# 環境
- Ubuntu 16.04 (on VirtualBox)
- CentOS 7.4 (docker container)

# 設定内容

|設定項目               |                       |
|:--------------------:|:---------------------:|
|認証対象のディレクトリ　| /var/www/html/private |
|認証領域名　　　　　　　| Private Zone          |
|ユーザー管理ファイル　　| .htdigest             |
|認証ユーザー　　　　　　| test                  |

# 設定

```
# vi /etc/httpd/conf/httpd.conf          // 160行目辺りに、下記を書き込みます
<Directory "/var/www/html/private">
AuthType Digest
AuthName "Private Zone"
AuthUserFile /etc/httpd/.htdigest
Require user test
</Directory>
```

```
# mkdir /var/www/html/private
# vi /var/www/html/private/index.html    // 表示させるものを書き込む

# htdigest -c /etc/httpd/.htdigest 'Private Zone' test
Adding user test in realm Private Zone
New password: [任意のパスワード]
Re-type new password: [任意のパスワード]

# chown apache:apache /etc/httpd/.htdigest
# chmod 400 /etc/httpd/.htdigest
```

認証したいユーザーを追加したい場合は、

```
# vi /etc/httpd/conf/httpd.conf          // 160行目辺りに、下記を書き込みます
<Directory "/var/www/html/private">
(省略)
Require valid-user                       // or Require user test new_user
</Directory>

# htdigest /etc/httpd/.htdigest 'Private Zone' new_user
Adding user new_user in realm Private Zone
New password: [任意のパスワード]
Re-type new password: [任意のパスワード]
```


# 参考
- [Apache Module mod_auth_digest](https://httpd.apache.org/docs/2.4/mod/mod_auth_digest.html)
知らない人にforkされてちょっと嬉しかった話

GitHubに上げてたリポジトリがforkされてちょっと嬉しかったという話

# 自分のスペック
- デザイナー見習い
- 授業で習った程度のプログラミング力
- JavaScriptを扱うことが多いが、ES6とかそういうのがまだよくワカラナイ

# 経緯
- [textchan](https://github.com/amotarao/textchan) というbotを作った
- [Qiita記事](https://qiita.com/amotarao/items/6bbb58ca74b4d9d1fae8)を書いた
- [dev.to](https://dev.to/amotarao/slackbot-376)に同じ内容の記事を書いた
- 続けて[dev.to](https://dev.to/amotarao/create-slack-bot-to-generate-text-image-d4l)に英訳(やばい)の記事も書いた
- dev.toで記事を見たであろう知らない外人にGitHubリポジトリをfork/starされた
- forkなりstarなりされるの自体が初めてで嬉しかった

# リファクタリングをした
リファクタリング＝簡単に言えばコードをキレイにすること らしい。

botを作る際、動けばよかろうと思っており、自分でも分かる汚いコードだった。
なので、そのまま記事に載せるのには抵抗があった。

そこで、似たようなことをしている他人のリポジトリを漁りつつ、
自分なりのリファクタリングを頑張った。その上で記事を投稿した。

# 学んだこと
コードを書くとき、ネット上の文献を参考にする。
作りたいモノに近いものを作っている人の記事があれば、とても参考になる。
そしてそれは勝手に生成されているわけではなく、誰かが書いているわけ。
なので自分でも何かを作った際でも、コードを上げたり記事を書いたりし、
必要としている人の手助けになれば、こちらも嬉しくなる。

また情報を書く側として、他人が分かりやすいと感じるような、文章／コードを心がけるのが大事だと感じた。
ただプログラミング系の記事では、一部のキュレーションサイトの明らかなデマだと気付くことが難しいし、
同じ出力になるコードでも書き方が大きく違うことがありうる。
自分もそれで混乱したことがある。そしてどう対策をすればいいか難しい。
慣れていくしかないかな。

あと今回よかったことは、英訳(やばい)の記事も書いたこと。
日本語だけでも1億以上の人が読むことができるが、英語があれば15億もの人が読むことができる。
マイナーなモノの場合、響く人を増やすには分母を上げるしかない。それを実感した。

# 言いたいこと
恥ずかしがらず、やっていることをいろいろなに見てもらうこと。
攻撃されることもあるだろうが、嬉しいと思う人もいるので気にしない。

なお自分は全体的に未熟。
JUMAN++で未定義語が認識された場合に発生する可能性のあるバグとその対処法

JUMAN++を使っているときに発生したバグ。

# 環境
JUMAN++ Ver1.02


# 症状1

「未定義語のうち、アルファベットとして認識された単語＋動詞、形容詞などの単語」の組み合わせで、動詞、形容詞などの単語が名詞＋他の単語として認識されてしまう。

## 例

```
$ echo  apple食べる| jumanpp
apple apple apple 未定義語 15 アルファベット 3 * 0 * 0 "品詞推定:名詞"
食 しょく 食 名詞 6 普通名詞 1 * 0 * 0 "代表表記:食/しょく 漢字読み:音 カテゴリ:抽象物 ドメイン:料理・食事"
べる べる べる 名詞 6 人名 5 * 0 * 0 "自動獲得:Wikipedia Wikipedia人名 Wikipedia名"
```
「食べる」が「食」＋「べる」として認識されてしまっている。

## 対処法
・アルファベットと動詞、形容詞などの単語の間にスペースを入れる。

```
$ echo  apple 食べる| jumanpp
apple apple apple 未定義語 15 アルファベット 3 * 0 * 0 "品詞推定:名詞"
\  \  \  特殊 1 空白 6 * 0 * 0 "代表表記: / "
食べる たべる 食べる 動詞 2 * 0 母音動詞 1 基本形 2 "代表表記:食べる/たべる ドメイン:料理・食事"
```

# 症状2
「半角記号+半角スペース＋動詞、形容詞などの単語」の組み合わせで、動詞、形容詞などの単語が名詞＋他の単語として認識されてしまう。

## 例

```
$ echo  ? 使う| jumanpp
?\  ?\  ?\  未定義語 15 その他 1 * 0 * 0 "品詞推定:名詞"
使 つかい 使 名詞 6 普通名詞 1 * 0 * 0 "代表表記:使い/つかいv 送り仮名引っ込み 連用形名詞化:形態素解析"
う う う 名詞 6 普通名詞 1 * 0 * 0 "代表表記:鵜/う カテゴリ:動物"
@ う う う 名詞 6 普通名詞 1 * 0 * 0 "代表表記:雨/う 漢字読み:音 カテゴリ:抽象物"
@ う う う 名詞 6 普通名詞 1 * 0 * 0 "代表表記:卯/う カテゴリ:場所-機能;時間"
```
「使う」が「使」＋「う」として認識されてしまっている。


## 対処法
・全角記号を使う

```
$ echo  ？ 使う| jumanpp
？ ？ ？ 特殊 1 記号 5 * 0 * 0 NIL
\  \  \  特殊 1 空白 6 * 0 * 0 "代表表記: / "
使う つかう 使う 動詞 2 * 0 子音動詞ワ行 12 基本形 2 "代表表記:使う/つかう"
```

・スペースを消す

```
$ echo  ?使う| jumanpp
? ? ? 特殊 1 記号 5 * 0 * 0 NIL
使う つかう 使う 動詞 2 * 0 子音動詞ワ行 12 基本形 2 "代表表記:使う/つかう"
```

# さいごに
JUMAN++はあくまで日本語形態素解析システムであり、アルファベットや半角記号などが入ることは想定外だと思われます。しかし、こういう想定外の使い方をしてしまう人はいます。このことから、例外処理やデバッグは大切だということが再確認できました。
Elm+Grid Layoutで15パズル作った！

Elm Advent Calendar 2017 フライング記事です。

コッテリした文章記事に疲れたので、簡単なアプリを作りましたのお披露目です。大したものではありませんが、ここから発展していけるシンプルなお題目な感じがしたので満足です。もうちょっとロジックをシンプルに出来る気もしますが、簡単な2Dゲームを作りたい人は参考にどうぞ。こういう小さいものをたくさん作ってElmでこんなこと出来ますよーと言うポートフォリオ的なものを公開してみたいです。こちらが[リポジトリ](https://github.com/ababup1192/15-puzzle)です。

![](https://i.gyazo.com/4d3f8ec0906c72df05a462493fec68fe.gif)
デザインのここだけはおさえたい３つのポイント

# はじめに

WEBデザイナーとして約２年が経ちましたが、まだまだ、良いデザインとは？どう表現すれば良いのか？と頭を悩ませる日々を過ごしております。
そんな自分が普段意識しているデザインをする上でここはおさえたいポイントというものをまとめさせていただきます。

# ポイント1　余白に気をつける

これは入社したばかりのころ、よくご指摘を受けた部分です＞＜
余白に気をつけることで**見やすさがぐんと上がります**
また、最近は余白を多く取り入れたデザインをよく見かけます

### 上下左右均等な余白
![01.jpg](https://qiita-image-store.s3.amazonaws.com/0/211011/e7defaf4-56e0-a2ed-f6d1-7b25a30540ba.jpeg)

伝えたい情報を配置するときに上下・左右の余白を揃える

### 文字周りの余白
![02.jpg](https://qiita-image-store.s3.amazonaws.com/0/211011/0a92af03-acea-1e57-6940-6da923021cb0.jpeg)

背景や枠を置いてテキストを配置するときに枠との間の余白を揃える

### コンテンツごと余白
![03.jpg](https://qiita-image-store.s3.amazonaws.com/0/211011/0e2fb015-d5ce-a9a7-d8aa-166fc64c4d27.jpeg)
見出しと文章など、コンテンツごとの間に余白をつけ、周りとの余白を揃える

# ポイント2　フォントに気をつける

どんなに余白やイメージが綺麗で、整っていてもフォントがイメージに合っていなければ一気に違和感が出てしまいます。
同じ文章でもフォントを変えるだけで、イメージを大きく変えることができます。

### やさしいイメージのフォント
![04.jpg](https://qiita-image-store.s3.amazonaws.com/0/211011/63df6fbf-5177-7ee8-fda2-0e41463e728d.jpeg)

### ポップなイメージのフォント
![05.jpg](https://qiita-image-store.s3.amazonaws.com/0/211011/0fe9c342-0510-c733-b7ab-48e6c90f8086.jpeg)

### 上品なイメージのフォント
![06.jpg](https://qiita-image-store.s3.amazonaws.com/0/211011/e5c6e932-b55f-4dd0-e052-7a7bfbb0781a.jpeg)

### しっかりしたイメージのフォント
![07.jpg](https://qiita-image-store.s3.amazonaws.com/0/211011/f8bede3f-f483-636a-1175-46612a4534e4.jpeg)

# ポイント3　配色(カラー)に気をつける

配色によって与える印象を変えることができます。
色のわずかな違いが分からず、最初はよくつまづいていました。。(今でも悩む部分です)

### やさしいイメージの配色
![08.jpg](https://qiita-image-store.s3.amazonaws.com/0/211011/7d7ef019-89c8-5062-8f57-2bd39fcde3de.jpeg)

### ポップなイメージの配色
![09.jpg](https://qiita-image-store.s3.amazonaws.com/0/211011/02db02a0-eb0a-354c-3c5c-8c01b3b3ace2.jpeg)

### 上品なイメージの配色
![10.jpg](https://qiita-image-store.s3.amazonaws.com/0/211011/46b7c7ca-5ee2-8505-9354-2a53796218a6.jpeg)

### しっかりしたイメージの配色
![11.jpg](https://qiita-image-store.s3.amazonaws.com/0/211011/6f040384-48f7-e3d9-064e-d0ae27cfc877.jpeg)

# デザインに悩んだら..(個人的なアイデアの出し方)

- とにかく何か良いデザインを探す。
    - Pinterestはよく見ます。WEBだけでなくポスターなどいろんなデザインを見ます。
    https://www.pinterest.jp/
    - あとはWEBデザインまとめ的なサイトをずらーっと眺めて見る。


- 周りのデザイナーさんに話しかける
    - ふとした会話の中でひらめきが生まれることも。

- お休みの日にポスターをじっくり見て見たり、雑誌(ファッション誌でも何でも)を読んでみたり映画みたり
    - こういう発想があったかー！と気づかされることがたくさんあります。

# まとめ

入社当初はこんな感じでやってみよう！！と、勢いに任せてデザインしていたので、今回書いた３つのポイントは、よくご指摘をいただきました。。
このポイントは意識してデザインするようになったものの、まだまだ頭を悩ませる毎日です。

これからデザインの勉強をする方や、まだデザインを始めたばかりの方の
ほんの少しでもお役に立てればと思います〜！
QAって！

# **アカウンティング・サース・ジャパン株式会社でQAグループで日々テストに追いまくられている毎日、皆さんいかがお過ごしですか？**
それにしても寒くなりましたね。年ごとに、日本の四季で"春"と"秋"が短くなり"夏"と"冬"が長くなっているように思います。（暑いか寒いか）それとも体温調節機能が低下しているのかな？

# **当社は会計・税務をクラウドでご提供するサービスを開発、提供しています**
会計・税務は一部の方が利用されるもので、ゲームソフトは０才からすべての方が対象に幅広く利用されていますね。ゲームに比べれば地味かな？でもゲーム会社も会計処理や税務申告業務をおこなっていますので当社サービスは税理士さんを通してすべての会社、事業者に関係あります。この記事を読まれている方の給与計算を当社でおこなっていただいているかもしれません。
巷で「確定申告」という言葉が聞こえてくると、当社のお客様はこれから繁忙期といって１年で一番忙しい時期に突入します。したがって当社も、、、
会社員の方は高給取り以外あまりなじみがないかもですが、フリーランスの方は頭が痛くなって来るかな？当社のお客様はその申告業務をお手伝いする税理士です。税金のプロで様々な知識を駆使してクライアントの節税になるようにアドバイスや代行を行います。赤字だから関係ないと思われるかもしれませんが翌年黒字になって税金を納めるとき前年の赤字分と相殺して納税額を計算するなんてこともできます。フリーランスの方で税理士とお付き合いのない方も一度お話だけでも聞いてみる価値はあると思います。（ちょっとPRになっちゃった:relaxed:）

# **QA業務というお仕事**
企画→開発→QA→リリース→フィードバック→企画
のサイクルの中QAが見逃すと後がない、崖っぷちの気持ちで日々業務にあたっています。気が付けば崖っぷちではなく崖から落ちていたなんてこともあったりして！
開発すべてに納期がありますが、こと税務は申告期限という絶対的な納期があります。その申告期限より前にリリースしなければ税務を出したけど税制改正に合わせタイミングよくリリースしていかなければ信頼を失います。税務申告業務も増えてきますのでさらにタイトになってきた。そんな中、お客様からお褒めを頂くとうれしくそれをビタミンにかえてがんばろ～っと！
AndroidのWebViewの画像をUnityに持ってくる

Unityを使っていてWeb画面を表示したい場合は、greeさんが公開している[unity-webview](https://github.com/gree/unity-webview)を使用することが多いと思いますが、この処理はネイティブのWebViewをUnityのビューの上に乗っけて表示を行う仕組みなので、Unityの表示の常に上に表示されてしまいます。
そこで、Unityの中で優先を混ぜられるようにします。

サンプルプロジェクトはこちら
https://bitbucket.org/HoshiyamaTakaaki/pixelreadstest

まずベースとなる処理は[こちらのページ](http://www.felixjones.co.uk/neo%20website/Android_View/)にまとめられています。
ここではWebViewの表示をOpenGLESのテクスチャとして使用しています。
WebViewのレンダリング先を自前で用意したGLSurfaceに切り替えてやり、OpenGLESテクスチャに書き込みます。

この処理を応用して、このテクスチャをUnity側に持って来れば良いわけです。
Unityにはネイティブ側で作成したテクスチャを持ってくる機構がありますが、スレッドが違うせいかうまく参照ができません。
またGLSurfaceで使用するテクスチャはGL_TEXTURE_2Dではなく、GL_TEXTURE_EXTERNAL_OESで生成を行うため、シェーダーもsamplerExternalOESを使用する必要があります。
UnityではsamplerExternalOESが使用できないので、このあたりも工夫が必要です。

今回はネイティブ側でReadPixelsを行なってピクセル情報をUnity側へ渡してやって、Unity側でテクスチャを生成します。
このため処理負荷が結構高いです。

```csharp:WebViewTexture.cs
private void Start()
{
	var texture2D = new Texture2D(texWidth / 2, texHeight / 2, TextureFormat.ARGB32, false);
	m_WebView = GameObject.Find("RenderCanvas/WebView").GetComponent<RawImage>();
	m_WebView.texture = texture2D;
	var rt = m_WebView.GetComponent<RectTransform>();
	rt.sizeDelta = new Vector2(texWidth * aspect, texHeight * aspect);
	rt.localPosition = new Vector3(posX, posY, 0);
}

private void Update()
{
	var data = GetWebTexturePixel();
	if (data != null)
	{
		var tex = (Texture2D)m_WebView.texture;
		tex.LoadRawTextureData(data);
		tex.Apply();
	}
}
```
ネイティブ側でキャプチャしたピクセル情報を`GetWebTexturePixel()`で取得して、あらかじめ作っておいたテクスチャに`LoadRawTextureData()`で流し込みます。
LoadRawTextureDataは重そうな感じがしますが、意外とサクサク動きます。
ReadPixelsが重すぎるせいでそう感じるだけかもしれませんが。

texture2Dとして使用できるので、モデルのテクスチャとしても利用が可能です。
ただしタッチ入力は本来のWebViewの表示範囲内で行われるため、平面表示以外の場合は操作が破綻します。
また表示の優先は変更できても、入力は必ずWebView側が勝ちます。
WebView上にuGUIのボタンなどを置いても反応しませんので注意が必要です。
そのような場合はWebViewの表示を一時的にOFFにすることで、Unity側のUIが反応するようになります。
ただし今度はWebView側の操作ができなくなります。
（表示は最後にレンダリングした状態を保持しますのでそれほど違和感はないかも）

GLSurfaceのテクスチャをそのまま流用できればパフォーマンスが上がると思うのですが。
スレッド間でOpenGLESのコンテキストを共有できれば何とかなるのかもしれませんが、うまい方法が今の所見つかっていません。
スクラムマスター研修の学び8つ

この記事は[mediba Advent Calender 2017](https://qiita.com/advent-calendar/2017/mediba)の20日目です。

## はじめに

[Scrum Inc.認定資格 スクラムマスター研修](http://scrum.esm.co.jp/)に行ってきました。
Scrum Inc.は様々な大企業のコンサルを通じて裏打ちされた知見があるんだなあと感じました。
そう言うデータや論文をまじえつつスクラムのやり方や概念など沢山の事を教えていただきました。
そこで、驚きであった学びを8つ共有させてもらいます！

## 1. ウォーターフォールPJが成功する確立は世界で11%

開発中に要求が変化する可能性は65%、ほとんどのPJで経験的プロセスを導入するメリットがある。

## 2. スクラムはリーン生産の軽量フレームワーク

無駄を発見して省き、価値のある作業に集中して取り組む事で、プロジェクトの生産性を上げる。
(無駄というのはトヨタ生産方式の「7つのムダ」のような無駄の事、調べると色々な[論文](https://www.researchgate.net/publication/313360479_Software_Development_Waste)がある)

## 3. マネジメントはリーダーシップの役割をする

プロダクトオーナーやスクラムマスターやチームが、その責任を果せる状態を作る。

## 4. 幸せだとパフォーマンスが向上する

チームの幸福度は生産性と関係している。
チームの幸福度を高めるためのPDCAも必要。
中庸を目指し目標のためにチームで協力し努力する。

## 5. チーム毎にプロダクトの1つの(画面に出る)機能を受け持つ

サービスが大きくなりチームが大人数になった時に、スクラムの人数の枠を越えてしまう。
チーム単独でデプロイまでできるDevOpsなど、モジュラー/アジャイル設計をしてスケールする。
(その先の話は事業責任者向けのScrum@Scale™研修の内容なんだろうと思う)

## 6. 見積りに擦り合せやコンセンサスは不要

事前の見積りに時間をかけるより、実際にやりながら見積りの精緻化を目指す。(経験的プロセス)
3回目のポーカーで、出た数字の最大と最小を除外した平均値を使う。

## 7. リリースバーンダウンチャートで期日に何がリリースできるかを管理

期日までに何ができるのか、何を優先し実行するべきなのか。
スコープ、ベロシティ、時間のトレードオフの管理をする。
(未完成の車より、完成した自転車を作る方が喜ばれる)

## 8. 分散型スクラム(多拠点)で成功している例は沢山ある

しかし多くは資産を活かすためであり、コスト削減よりも生産性を上げる事の方が大切らしい。
課題はアジャイル宣言のフェイス・トゥ・フェイスができない事で、解決が難しいらしい。
(VR出勤がリアルになる日がいつか来て欲しい)

## 宣伝

フロント、アプリ、バックエンド、クラウドのエンジニア募集してます!!
吉田の紹介だと言ってくれたら、それは喜んで🍺代にします。

具体的なのは[キャリア採用募集職種一覧](http://www.mediba.jp/recruit/career/joblist.html)を参照してください。

## 間違いや意見など

ぜひ、おしえてください。
さくらサーバーのWordPressを常時SSLにしたときの備忘録

さくらサーバーにて、SSL化した際にリダイレクト処理でwww有りにさせたくて悩んだので、その覚書です。

WordPress側では、「さくらのレンタルサーバ 簡単SSL化プラグイン」でSSL化は済みますが、リダイレクト処理がどっちでも使えるものなので、ここは書き直す必要がある。

プラグインを有効化して、設定が済んださいの`.htaccess`です。

```Apache:.htaccess
# BEGIN Force SSL for SAKURA
# RewriteしてもHTTPS環境変数を有効にする
SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1

# 常時HTTPS化(HTTPSが無効な場合リダイレクト)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{ENV:HTTPS} !on
RewriteCond %{REQUEST_URI} !/wp-cron\.php$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
# END Force SSL for SAKURA
```

## 変更した.htaccess

```Apache:.htaccess
# BEGIN Force SSL for SAKURA
# RewriteしてもHTTPS環境変数を有効にする
SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1

# 常時HTTPS化(HTTPSが無効な場合リダイレクト)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{ENV:HTTPS} !on
RewriteCond %{REQUEST_URI} !/wp-cron\.php$
RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

# wwwが付いてなかったら、wwwを付けるようにする
RewriteCond %{ENV:HTTPS} on
RewriteCond %{REQUEST_URI} !/wp-cron\.php$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
</IfModule>
# END Force SSL for SAKURA
```

HTTPSがONの時にリダイレクトがかからなかったので、ONの状態のルールを複製した。
あと、`RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$`これもちゃんと追加する。これないとリダイレクトループが発生します。

.htaccessを編集したあと、今度は`wp-config.php`ファイルにサーバー変数を書く必要があるので、それも追加する。

## wp-config.phpの編集

```php:wp-config.php
if (isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']))
{
	$_SERVER['HTTPS']       = 'on';
	$_SERVER['HTTP_HOST']   = 'www.example.com';
	$_SERVER['SERVER_NAME'] = 'www.example.com';
	$_ENV['HTTPS']          = 'on';
	$_ENV['HTTP_HOST']      = 'www.example.com';
	$_ENV['SERVER_NAME']    = 'www.example.com';
}
```

久々にさくらサーバーさんで構築したので、仕様が全然分かってなかった(´・ω・)
スマホビューでfont-sizeをvw（相対）指定してみよう

[un-T factory! XA Advent Calendar](http://...) 15日目の記事です。

レスポンシブWebデザインでいざコーディング！と意気込んだのもつかの間、
以下のようにスマホビューで表示崩れが起こってしまうことがあります。
![スクリーンショット 2017-12-15 18.41.54.png](https://qiita-image-store.s3.amazonaws.com/0/183513/7666f70f-a2f0-ad2a-c4e5-5a7207e320da.png)

今までは指定のフォントサイズを少し下げて対応していました。
が、フォントサイズを端末幅に対して相対指定（vw）できることを知ったので試してみると…
![スクリーンショット 2017-12-15 18.44.23.png](https://qiita-image-store.s3.amazonaws.com/0/183513/a4831cfa-f5f9-bee5-0f45-3de649d52031.png)
収まりました！

# 設定方法
vw（viewport width）とは、ビューポート幅に対しての割合のことです。
ということは、**ビューポート幅に対するフォントサイズの割合**を計算する必要があります。

↓計算のしかた
例：viewport：640px　font-size：12px の場合
`12px / 640px * 100 = 1.875vw`

あとは値をCSSで指定するだけです。簡単！

```css
font-size: 1.875vw;
```

# 注意すること
vw指定は画面幅に応じてサイズが可変していきます。
他のパーツも%指定にしておかないと、ありがたみを全く感じられない結末になります。
うまく利用して、スマホビューでの表示崩れとおさらばしたいものです。
kotoをUbuntuにインストール

#はじめに

askmonaでスレが立ってる”国産暗号通貨コト(koto)”
http://askmona.org/7853

これをubuntuにインストールした時のメモ

手順書などは
https://github.com/koto-dev/koto/wiki/%E8%A7%A3%E8%AA%AC
にあります。

#ビルド手順

##パッケージの最新化

`sudo apt-get update`
`sudo apt-get upgrade`

##パッケージのインストール

`sudo apt-get install build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python python-zmq zlib1g-dev wget bsdmainutils automake curl`

`

##kotoのインストール

`cd`
`mkdir tmp`
`cd tmp`
~~`git clone https://github.com/koto-dev/koto.git`~~
`git clone https://github.com/KotoDevelopers/koto.git`

`cd koto`
`./zcutil/fetch-params.sh`
~~`./zcutil/build.sh --disable-rust -j$(nproc)`~~
`./zcutil/build.sh -j$(nproc)`

気長に待ちましょう！！
もし途中で失敗する場合は

`./zcutil/build.sh`

を試す

##kotoの設定

rpcユーザ名とパスワードを任意で決めます

`mkdir -p ~/.koto`
`echo "rpcuser=ユーザー名" >>~/.koto/koto.conf`
`echo "rpcpassword=パスワード" >>~/.koto/koto.conf`
`chmod 600 ~/.koto/koto.conf`

##実行ファイルをコピー

`cd src`
`sudo cp kotod /usr/local/bin`
`sudo cp koto-cli /usr/local/bin`
`sudo cp koto-tx /usr/local/bin`

##実行

とりあえず実行してみる

`kotod`

##らくらく起動

下記のファイルを作成

```startkoto.sh
#!/bin/sh

/usr/local/bin/kotod -daemon
```
これを実行する

起動時に実行する場合は

`echo '@reboot /home/ユーザー名/startkoto.sh' | crontab`


##マイニング

ソロでマイニングする場合は

`echo "gen=1" >> ~/.koto/koto.conf`
`sudo supervisorctl restart koto`

##外部公開

`ufw allow 8433`
ポートを開放しておいた


#アドレスの確認など

##アカウントのアドレスを確認

`koto-cli getaddressesbyaccount ""`

##アドレスを確認

`koto-cli listreceivedbyaddress 0 true`

##新規アドレスの作成

`koto-cli getnewaddress ""`

##残高の確認

`koto-cli getbalance`

##トランザクションの確認

`koto-cli listtransactions`



#マイニング

適当なディレクトリで

`cd`
`mkdir koto`
`cd koto`


`git clone https://github.com/koto-dev/cpuminer-yescrypt.git`
`cd cpuminer-yescrypt/`
`./autogen.sh`
`./configure CFLAGS="-O3"`
`make`

`cp minerd ../`
`cd ..`

`./minerd --algo=yescrypt --userpass=username:password -o 127.0.0.1:8432

外部から接続する場合は

`ufw allow 8432`
ポートを開放しする
Boostnote と Markdown でタスク管理

皆さんは、タスク管理には何かツールをお使いでしょうか？

「タスク管理」の代表的なツールの一つが、チェックリストです。最近ではGoogle Keepが手軽で使いやすいですが、割と単純な機能しかないなど一長一短なところがあります。

当記事では、私が最近利用している [Boostnote](https://boostnote.io) を使った Markdown での管理方法をご紹介します。

## Boostnote とは

Boostnote とは、国産のメモ帳です。

<img width="1792" alt="スクリーンショット 2017-12-15 18.50.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/42210/331d43c0-9a95-dc76-0b39-aeab3e99718f.png">

メモ帳と言っても、使い方は Evernote などに近く、Markdown でノートを取れる他、様々なコードや記法のシンタックスハイライトにも対応しています。

ここで重要なのは、Boostnote が Github Flavored Markdown に対応していることです。

**つまり、チェックリストが使えます。**

## 使用方法と Markdown でタスク管理する利点

まず、 GFM でチェックリストを書いてみます。

<img width="271" alt="スクリーンショット 2017-12-15 18.50.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/42210/8608ca5a-8bda-405b-e913-f339adfacc2d.png">

リストの `- [ ]` は、一行書くと改行後に自動で入力されるのも便利です。

画像の上に *0%* の表示がありますが、これはチェックリストを作ると自動で表示されます。

<img width="539" alt="スクリーンショット 2017-12-15 18.51.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/42210/deb395fe-c6ab-e71b-0994-1dad420930fc.png">

エディター画面からプレビュー画面に移ったところです。この画面でチェックボックスを押すと、チェックが入り、上のバーも更新されます。進捗がわかっていいですね。

<img width="535" alt="スクリーンショット 2017-12-15 18.51.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/42210/bfd2c839-9d6d-dcc2-276a-712d10be4dab.png">

もちろん、エディター側も更新されます。

<img width="606" alt="スクリーンショット 2017-12-15 19.06.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/42210/7b853ff2-5abb-279f-5e2a-c7f1f717b22b.png">

Markdown なので複雑な書式にも対応できます。

<img width="480" alt="スクリーンショット 2017-12-15 19.06.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/42210/ac68d7fa-cbc1-001a-431e-99051be70d3e.png">

ソースコードも貼れるのはいいですね。

また、Boostnote の機能として、作成した内容が即時保存されること、文字列を複数ノートで横断検索できること、HTMLや.mdに出力できること、タグやフォルダでノートを管理できるのも、使い勝手がいいところだと思います。

## 未来へ

タスク管理以外でも、Boostnoteはプログラマにとって便利なツールだと思いますので、どのツールを使っても長続きしないとお悩みの方でも、気軽に試してみてはいかがでしょうか。

Mac ユーザの方は、 Homebrew で導入するのが簡単なのでおすすめです。
はじめてのGTC Japan

## GTC Japan 2017
2017/12/12 - 2017/12/13でGTC Japanに参加してきました。初参加。

## DLI
12/12はDeep Learning Institute(DLI)で３つのWorkshopに参加。
1. TensorFlow, MXNet, NVIDIA Dockerを使ったディープラーニングのワークフロー
2. NVIDIA DIGITSによる画像セグメンテーション
3. Kerasを使ったRNNによる時系列データモデリング

3万円ちょっとでこれだけのトレーニングが受けられるのは安いと思う。またトレーニングはiPythonベースで行われ、コードの実行も資料も１ページになってるのですごく見やすいし、手を動かしやすい。nvidi-dockerコマンド最高。DNNや機械学習自体の専門的な話になると、とたんについていけなくなるので勉強せねば。。。


## Keynote
Jensen Huang大人気、会場に入れずサテライト会場でストリーミングでKeynoteを拝聴。サテライト会場にも入れず、ホテル廊下で立ち見の人もいたとか。。。

Holodeck = VR上でのCollaboration Platform
CATIA/Creo/NX -> Maya/3D Max -> Holodeckでデータをいれられるみたい。CGの車から、アバターがエンジン部品と取り出して、拡大表示したり、断面表示したりカッコいい、未来感じた。
![image](https://qiita-image-store.s3.amazonaws.com/0/93823/5cff2676-251c-dcb5-d8f1-279c66f08e56.png)

Voltaの開発には、2B$かかったらしい。

Inference Cost affects to Datacenter cost
45000 image/sec = 160CPU, 4RACKs = 1 x V100 server
1/6 cost, 1/20 power, 1/4 rack = 1/10 TCO

Inference Performance
Skylake CPU = 4.7 images/sec
1 x V100 = 913 images/sec
8 x V100 = 7055

> If you buy more GPU, you can save more money
> by Jensen Huang @GTC Japan 2017

自動運転
software define computer -> software define car
まさにsoftware eats world!!!
Xavior power consumption will be 30W

Isacc
Train in VR, Deploy in real world!
![image](https://qiita-image-store.s3.amazonaws.com/0/93823/485ca1c6-9bb5-2060-9287-9c083d99d171.png)

## Breakout Session

# AI data pipeline
data pipeline is most costy process of machine learning process
DO NOT COPY DATA!!! WASTING TIME!!! WASTING GPUS!!!
![image](https://qiita-image-store.s3.amazonaws.com/0/93823/567c8d35-2ee3-aece-d522-6dfe7b349d45.png)

Data Copyしまくり
![image](https://qiita-image-store.s3.amazonaws.com/0/93823/17daaaca-7f5b-896a-c5bc-fe4d739eb009.png)

Data Copyは最低限
![image](https://qiita-image-store.s3.amazonaws.com/0/93823/0d5797f6-bafc-0234-0083-7d3b67cbe5ef.png)



# 3D CAD VDI
これまで3D CAD/CAE VDIって、まだまだなんだろうなーって勝手に思ってたけど。自分の思ったよりも早くテクノロジーは進歩してた。TOTO、日立建機、アイシン、日揮...etc
GPU,Storage,Network。あの手この手でレンダリングが遅延しないように工夫。150msecのnetwork latencyがあっても使っている会社はあるそうだけど、やっぱり100msecあたりが一つの大きな壁になりそう。