OmniAICreator/Qiita-1.07M huggingface dataset:
リスト内のタプルを消去する方法 (Python)



# リスト内のタプルを消去する方法です。

## 早速コード

models というリストの中から
('Perceptron', 0.52953807740324599) というタプルを消去したい。


```python:

models = [(name, score) for name, score in models if name != 'Perceptron']

# models という中の、(name, score)の部分の、name が
#'Perceptron'じゃないやつだけ残しますよってことです。
```


ちなみに、models の中身はこんな感じ、

```py
[('KNeighbors',
  KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
             metric_params=None, n_jobs=1, n_neighbors=5, p=2,
             weights='uniform')),
 ('DTC',
  DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,
              max_features=None, max_leaf_nodes=None,
              min_impurity_split=1e-07, min_samples_leaf=1,
              min_samples_split=2, min_weight_fraction_leaf=0.0,
              presort=False, random_state=None, splitter='best')),
 ('SVM', SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
    decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',
    max_iter=-1, probability=False, random_state=None, shrinking=True,
    tol=0.001, verbose=False)),
 ('LinearSVC',
  LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,
       intercept_scaling=1, loss='squared_hinge', max_iter=1000,
       multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,
       verbose=0))]
```
pyenvとvirtualenvとvirtualenvwrapperを試しに使ってみた話

今までPythonの環境はpyenvで扱っていたが、よく耳にするのでvirtualenvを使ってみた。
一緒に、virtualenvwrapperもインストールする。

#事前環境
こんな感じ

```text
$ pyenv versions 
  system
* 3.5.2 (set by /Users/hikaru/.pyenv/version)
```

#インストール
python 3.5.2の環境でインストールする。

```text
$ pyenv version
3.5.2 (set by /Users/hikaru/.pyenv/version)
$ pip install virtualenv virtualenvwrapper
```

#セットアップ
以下を.bashrcに書く

```bash
export WORKON_HOME=$HOME/.virtualenvs
source $PYENV_ROOT/versions/3.5.2/bin/virtualenvwrapper.sh
```

次のコマンドを実行。

```text
$ mkdir ~/.virtualenvs
$ source ~/.bashrc
```

ハマりかけたのが、sourceするvirtualenvwrapper.shの場所。
$HOME/.pyenv/shims/virtualenvwrapper.shというファイルもあるが、これは上記のものとは別物。
というか、これをsourceするとterminalがexit?された。

#動かす
##環境の構築

```text
$ mkvirtualenv django
Using base prefix '/Users/hikaru/.pyenv/versions/3.5.2'
New python executable in /Users/hikaru/.virtualenvs/django/bin/python3.5
Also creating executable in /Users/hikaru/.virtualenvs/django/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /Users/hikaru/.virtualenvs/django/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/hikaru/.virtualenvs/django/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/hikaru/.virtualenvs/django/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/hikaru/.virtualenvs/django/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/hikaru/.virtualenvs/django/bin/get_env_details
(django) $ pip list -l --format=columns
Package    Version
---------- -------
appdirs    1.4.3  
packaging  16.8   
pip        9.0.1  
pyparsing  2.2.0  
setuptools 35.0.2 
six        1.10.0 
wheel      0.29.0 
```
こんな感じで、djangoという環境ができた。
パッケージも必要最低限のものだけ入っている。

##環境を抜ける
```text
(django)$ deactivate
$
```

workonコマンドで環境一覧を表示、オプションで環境を選択し、各環境に入ることができる。

```text
$ workon 
django
$ workon django
(django) $
```

##環境の削除
```text
$ rmvirtualenv django
Removing django...
$ 
```

## Pythonを指定して環境構築
python3.5.2環境下でmkvirtualenvを実行したらpython3.5.2の環境ができたが、明示的に他のpythonを使うこともできる。

```text
$ mkvirtualenv --python=/usr/bin/python2.7 django
Running virtualenv with interpreter /usr/bin/python2.7
New python executable in /Users/hikaru/.virtualenvs/django/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /Users/hikaru/.virtualenvs/django/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/hikaru/.virtualenvs/django/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/hikaru/.virtualenvs/django/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/hikaru/.virtualenvs/django/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/hikaru/.virtualenvs/django/bin/get_env_details
(django) $ python --version
Python 2.7.10
(django) $ 
```

ちゃんとpython 2.7.10が動いている。

#まとめ
pythonのversionごとにパッケージを管理する必要がない場合、virtualenvは必要なさそう。
一方、互いに悪影響するパッケージがあったり、細かいバージョン指定が必要な場合は、
virtualenvで環境切ったほうが良さそう。
暗号通貨NEMアカウントの残高履歴をJavaScriptで表示する。

[前回](http://qiita.com/nem_takanobu/items/58d0586a0d53b6d0f48e)はブラウザのURLを直接叩いてNEMアカウントの情報にアクセスする方法を説明しました。
今回は一歩進めて、JavaScriptでアクセスし、一覧で残高履歴などの情報を表示する方法を説明します。

アドレスはURLの後ろに指定する方式にします。


ttp://nemtest.com?address=NBZNQL2JDWTGUAW237PXV4SSXSPORY43GUSWGSB7

こんな感じです。何度も繰り返しますが、NEMではアカウント情報にアクセスするためにnode.jsなどのサーバを立てる必要はありません。一般的に使われているブラウザでノードにアクセスするだけで十分です。
"?address=" の後ろの部分を調べたいNEMアドレスにすることで、情報を表示することが出来るようにします。
この追加する文字列をクエリ文字列と言いますが、JavaScriptを利用してパラメータとして抜き出します。

```js:getparam
if (1 < document.location.search.length) {
	var query = document.location.search.substring(1);

	var params = query.split('&');
	var item = new Object();
	for (var i = 0; i < params.length; i++) {
		var element = params[i].split('=');
		var index  = decodeURIComponent(element[0]);
		var value = decodeURIComponent(element[1]);
		item[index] = decodeURIComponent(value);
	}
	address = item["address"];
}

```

これでaddres=の後ろの部分を変数addressに入れることに成功しました。
次に、NEMのノードへ非同期でアクセスし、アカウント情報を取得します。
非同期通信にはとりあえず、jQueryのAjaxを利用します。

依存ライブラリは一つだけ。

```html:call_jquery
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
```

処理は以下のような感じです。

```js:ajax
function sendAjax(URL){
	URL +=  address;
	return $.ajax({url: URL ,type: 'GET'});
}

sendAjax(ACCOUNT_TRANSFERS).done(
	function(result){

		var dataArray = result.data;
		dataArray.forEach(function(val){
		
			var tran = val.transaction;
			//ここにテーブル表示ロジックを挿入

		});
	}
);

```

これでtranという変数に1件分のトランザクションデータが入りました。
そのデータをHTML上に展開します。表示する器はHTMLは以下のように準備しておきます。

```html:table
<table id="transfers">
	<thead>
		<tr>
			<th>timeStamp</th>
			<th>type</th>
			<th>amount</th>
			<th>recipient</th>
		</tr>
	</thead>
	<tbody>
	</tbody>
</table>

```

 #transfersの場所に以下のテーブ要素をループで差し込みます。

```js:append
$( "#transfers tbody" ).append( "<tr>" +
	"<td>" + tran.timeStamp + "</td>" +
	"<td>" + tran.type + "</td>" +
	"<td>" + tran_amount + "</td>" +
	"<td>" + tran_fee + "</td>" +
	"<td>" + tran_recipient + "</td>" +
	"<td>" + tran_signer + "</td>" +
"</tr>" );
```


同じようにすれば、ハーベスト結果やアカウント情報にも簡単にアクセスできます。
わざわざログインする必要もなく、気になる入金、インポータンス値の変化、ハーベスト結果が常にチェックできます。
Web API機能が提供されているNEMならではのツール開発が簡単にできてしまいますね。

では最後に動くものを置いておきます。
addressの後ろはご自身のアドレスを指定してみてください。
徐々にブラッシュアップして最後にはXEMBookとして、貯める系XEM運用ツールにしていけたらと思っています。


http://s3-ap-northeast-1.amazonaws.com/nemtest/xembook2.html?address=NAFYRW5DCJR7L5JKOOF2XQ4YFYNDQN6Y5C3UI4PM

次回は、もう一つ気になる機能をこのXEMBookに追加したいと思います。
乞うご期待！

----
以下のNEMアドレスは、全てNEM上でエンジニアが活動できるための資金に使用します。
これから私が書く記事に共感していただけましたら、ご寄附いただけると助かります。
NEM ADDRESS: NBZNQL-2JDWTG-UAW237-PXV4SS-XSPORY-43GUSW-GSB7
GitLab on Dockerの日本語化

# はじめに
以下の記事をベースに、Docker上のGitLab(9.1.1)の日本語化を行ったので、その内容を書き記します。

[CentOS7に構築したGitLab8を日本語化](http://qiita.com/ghfdjk/items/4418cc4e6fa56c5bd8e0)

# GitLab on Dockerインストール
GitLab on Dockerについては、[sameersbn/docker-gitlab](https://github.com/sameersbn/docker-gitlab/blob/master/docker-compose.yml)のdocker-compose.ymlを使って、docker-composeでコンテナを起動します。
一部、docker-compose.ymlを書き換えて、GitLab:9.1.1のイメージをダウンロードするように修正します。これは２０１７年５月６日時点で、日本語化パッチがGitLab9.1.1までしか対応していないためです。

```
$ diff docker-compose.yml docker-compose.yml.org

25c25
<     image: sameersbn/gitlab:9.1.1
---
>     image: sameersbn/gitlab:9.1.2
```

また、volumesの内容は、それぞれの環境によって変更してください。私はMacOSで実行したので、以下のように変更しました。

```
$ diff docker-compose.yml docker-compose.yml.org

10c10
<     - /Users/Shared/redis:/var/lib/redis:Z
---
>     - /srv/docker/gitlab/redis:/var/lib/redis:Z
16c16
<     - /Users/Shared/postgresql:/var/lib/postgresql:Z
---
>     - /srv/docker/gitlab/postgresql:/var/lib/postgresql:Z
33c33
<     - /Users/Shared/gitlab:/home/git/data:Z
---
>     - /srv/docker/gitlab/gitlab:/home/git/data:Z

```

docker-compose.ymlの修正が終わったら、docker-composeでコンテナを起動します。

```
$ docker-compose up
```

# 日本語化
docker-composeで起動したら、docker_gitlab_1にdocker execでアクセスして、日本語化パッチを適用します。
日本語化については、[ksoichiro/gitlab-i18n-patch](https://github.com/ksoichiro/gitlab-i18n-patch)を利用しています。


```
$ docker exec -it docker_gitlab_1 /bin/bash
# apt update 
# apt install patch
# cd /usr/local/src/
# git clone https://github.com/ksoichiro/gitlab-i18n-patch.git
# cd /home/git/gitlab
# patch -p1 < /usr/local/src/gitlab-i18n-patch/patches/v9.1.1/app_ja.patch
```

日本語化パッチ適用後に、プリコンパイルし直す。

```
# cd /home/git/gitlab
# rm -rf public/assets
# export PATH=/home/git/gitlab/bin:$PATH
# bundle exec rake assets:precompile RAILS_ENV=production
# rake webpack:compile
```

プリコンパイルが終わったら、dockerイメージからexitして、コンテナの再起動をします。
再起動は必須ではないですが、後々再起動した時にエラーが出ると面倒なので、動作確認のため再起動します。

```
$ docker-compose stop
$ docker-compose start 
```

その後、Webブラウザから[http://localhost:10080/](http://localhost:10080/)にアクセスすると、
日本語化したGitLabが使えるようになります。
[ HOW TO ] PHP等でPDFファイルを生成する時に簡単にデバッグする方法

![sample(rotatetext)-2.jpg](https://qiita-image-store.s3.amazonaws.com/0/175742/dc5983b7-adea-7ea8-abdf-d75416f025d4.jpeg)

こんにちは。サーバーサイドでPDFファイルを生成する仕事は今でも沢山あると思います。Webがこれだけ浸透してもやはり帳票関係のPDF印刷や、Adobe Illustratorのファイルを手軽に公開しようと思った時には一番最適な方法なのだと思います。もちろんサーバーサイドでPDFファイルを動的生成する開発業務も沢山あると思います。ただしサーバーサイドでPDFファイルを生成する時にはデバッグ作業が大変です。主なデバッグ方法は下記の三つです。

---
**（1）printデバッグでPDFを生成するの数値や文字とひたすらニラメッコしつつデバッグする。**

printやPHPのvar_dump等のプリントデバッグは一番手軽ですが、実際にPDFファイルがどう生成されるかはPDFを最後に生成しないと分かりません。

**（2）サーバーにログファイルを生成して、確認しながらデバッグする**

PDFロジックからPDFがどのように生成されていくのか確実に確認できますが、計算数値等の確認にはサーバーに出力されたログを確認する必要があるため、デバッグには非常に手間が掛かります。あまり現実的な方法ではありません。

**（3）本格的なデバッガを使う**

PDFを生成するサーバーにデバッグソフトウェア（xdebug等）をインストールすると、本格的なデバッグが可能になります。恐らく効率良くデバッグが可能でしょう。ただしサーバーに別途ソフトウェアをインストールする必要があるのと、そもそもインストール出来ない時が多いと思います。

---

**■とりあえず手軽に効率良く開発しよう**

そこでprintデバッグ並に簡単に使えて、データの状況把握が簡単なedumpを使って見ましょう。
![logo.png](https://qiita-image-store.s3.amazonaws.com/0/175742/1cac1532-2dec-523c-2019-4bf5485ca081.png)　　http://www.edump.net/

edumpを使うとブラウザの画面で何を表示しているかは関係無く、またサーバーに特別なソフトウェアのインストールが必要なく、デバッグ作業を簡単に行う事が出来ます。ブラウザの開発者向け機能拡張も使えば、あっという間に本格的な開発環境の完成です。サーバーサイドで生成されるPDFの状態を確認しつつ、効率良くデバッグ値の確認が出来ます。
![20170505.jpg](https://qiita-image-store.s3.amazonaws.com/0/175742/3bc901fa-8644-4a95-3297-dbea74e71669.jpeg)

WEBアプリケーションはデスクトップアプリケーションとは違い、手軽に開発出来る一面もあれば、面倒な部分もありますが、状況に応じて効率の良い方法を選択していければ良いと思います。
windowsでTensorFlow その14

#概要
windowsのTensorFlowの環境で、OpenAiやってみた。
'Pendulum-v0'を手でやってみた。

#写真
![gg.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/be8e4c76-7f63-1157-07e8-f0756847dad4.jpeg)


サンプルコード

```
from __future__ import print_function
import math
import sys
import gym
import gym.spaces
import numpy as np
from gym import core, spaces
from gym.utils import seeding
from numpy import sin, cos, pi
import time

env = gym.make('Pendulum-v0')
ROLLOUT_TIME = 1000
SKIP_CONTROL = 0
human_agent_action = 0
human_wants_restart = False
human_sets_pause = False

def key_press(key, mod):
	global human_agent_action, human_wants_restart, human_sets_pause
	if key == 0xff0d:
		human_wants_restart = True
	if key == 32:
		human_sets_pause = not human_sets_pause
	a = int(key - ord('0'))
	if a == 0:
		a = -1
	if a == 1:
		a = 1
	human_agent_action = a

def key_release(key, mod):
	global human_agent_action
	a = int(key - ord('0'))
	if a == 0:
		a = -1
	if a == 1:
		a = 1
	if human_agent_action == a:
		human_agent_action = 0
env.reset()
env.render()
env.unwrapped.viewer.window.on_key_press = key_press
env.unwrapped.viewer.window.on_key_release = key_release

def rollout(env):
	global human_agent_action, human_wants_restart, human_sets_pause
	human_wants_restart = False
	obser = env.reset()
	skip = 0
	for t in range(ROLLOUT_TIME):
		if not skip:
			a = human_agent_action
			skip = SKIP_CONTROL
		else:
			skip -= 1
		print(a)
		obser, r, done, info = env.step([a])
		env.render()
		if done:
			break
		if human_wants_restart:
			break
while 1:
	rollout(env)

```
RaspberryPi B+にタッチスクリーンを挿す

情報が錯綜してて、一日まるごと無駄にしたので記しておきます。
この記事は2017/05/06時点の情報です。

#使うもの
- RaspberryPi B+
- Elecrow3.5インチタッチパネル タッチスクリーンディスプレイ
    - 公式 https://www.elecrow.com/35-inch-480x320-tft-display-with-touch-screen-for-raspberry-pi-p-1385.html
    - Amazon: https://www.amazon.co.jp/gp/product/B01LXM8NL4/
- microSD 8G以上
- 任意の給電ケーブル

#結論先取
OSのイメージはここから該当するモデルのものを取得しましょう！！！
https://www.elecrow.com/35-inch-480x320-tft-display-with-touch-screen-for-raspberry-pi-p-1385.html
![3e85e06be9db168c0117e9a42a1fc854.png](https://qiita-image-store.s3.amazonaws.com/0/126264/58c27bad-8ad2-d542-30cc-c2ff442636f1.png)
後は「Driver for B+/2B」あるいは3Bからドライバを取得して、ユーザマニュアルに添って

- microSDをフォーマット
- microSDにイメージをリストア
- microSDをRaspberryPiに挿す
- RaspberryPiにディスプレイを挿す
- 電源を投入する

だけです！！

**Raspbian( https://www.raspberrypi.org/downloads/ )をインストールした後に公式配布のドライバーを導入すると、再起動後にカーネルパニックを起こします。**

#失敗例
##パターン1
既にインストール済みのRaspbianに公式( https://www.elecrow.com/35-inch-480x320-tft-display-with-touch-screen-for-raspberry-pi-p-1385.html )のドライバーをダウンロードして

```
$ tar zxvf LCD-show-161112.tar.gz
$ cd LCD-show/
$ ./LCD35-show
```

の順にコマンドを打つと自動的に再起動がかかるが、ディスプレイにはなんの表示もなく、SSHも出来ない。
HDMIを繋いで見るとkarnel panicの文字。駄目っぽい。

##パターン2
ドライバーを取得する先を変更すれば動くという説を発見し、以下のサイトの「树莓派LCD驱动：161112」からドライバーを拾ってくる。
http://www.waveshare.net/wiki/3.5inch_RPi_LCD_(A)

```
$ tar zxvf LCD-show-161112.tar.gz
$ cd LCD-show/
$ ./LCD35-show
```

同様にカーネルパニックを引き起こす。

#解決策
公式マニュアルをよく見ると、DVD(そんなもの同封されてないが)の中は以下のようなディレクトリ構成になっているらしい。

```
　├ document/
　├ IMAGE/
　├ Interface/
　└ software/
```

IMAGEディレクトリ以下に入ってる `TFT320TP-Raspberry-140921-V3.0.img` をSDにリストアしろとの記述がある。

ダウンロードしたドライバの中身を見てみる。

```
　├ document/
　├ Interface/
　└ software/
```

無いですね。

これは以下のURLの赤枠部分で入手できます。
適宜自分のRaspberryPiのモデルに合わせたものを選んでください。

https://www.elecrow.com/35-inch-480x320-tft-display-with-touch-screen-for-raspberry-pi-p-1385.html
![3e85e06be9db168c0117e9a42a1fc854.png](https://qiita-image-store.s3.amazonaws.com/0/126264/58c27bad-8ad2-d542-30cc-c2ff442636f1.png)

あとは以下の通りです。

- SDFormatterでmicroSDをフォーマットする。
- USB Image ToolでmicroSDに先程取得したイメージをリストアする。マニュアルと異なり、イメージのファイル名は `LCD35-150602.img` でした。
- microSDをRaspberryPiに挿し、ディスプレイも挿して電源を投入。

少し待つと起動中の画面がディスプレイに表示されます。
![C_HawDeUQAAF0Ua.jpg](https://qiita-image-store.s3.amazonaws.com/0/126264/92851a81-bece-4503-eb21-40216128a0b5.jpeg)

起動後です。
![IMG_20170506_141546214.jpg](https://qiita-image-store.s3.amazonaws.com/0/126264/97a05267-aee7-3c54-207b-7441a14380c5.jpeg)

ソフトウェアキーボードもデフォルトで入ってていい感じです！
~~そういえばドライバ自体は全く使ってないですね、何なんだ~~

後は自由に

- WiFiドングルや有線LANを使ってSSH(自分の場合はデフォルトでSSHは許可されてました)したり
- piユーザのパスワードを変更したり
- `$ raspi-config`でLocaleを日本にしたり
- `$ sudo apt-get update`や`$ sudo apt-get dist-upgrade`したり

適宜調理していきましょう。


以上。
Laravel5+でレスポンスJSONのキーをcamelCaseにする


Laravel5+で最も馴染めないのがJSONのキーが snake_case であること。DBのカラム名をそのままモデルのフィールドとして扱うので `users.user_name` をJSONにすると `{"user_name": "Grohiro"}` になってしまう。ほんとは `{"userName": "Grohiro"}` にしたい。

開発者いわく

>「それはフレームワークの仕事じゃないから自分でやって。」

ということらしい。オプションぐらい用意してくれればいいのに😭

Eloquentには `Model::$snakeAttributes = false` という設定があるのだけど、これを設定すると何が変わるのかよくわからない。知ってる人がいたら教えてください。

妥協してフィールド名は snake_case のまま、レスポンスJSONだけcamelCaseにしたいのでプラグインを書いた。

[laravel-camelcase-json](https://github.com/grohiro/laravel-camelcase-json)

LaravelのResponseFactoryを置き換えてJSONのキーをcamelCaseに変換する。レスポンスの生成処理を変更することなくcamelCaseに変換できる。

Controller

```
return response()->json($user);
// {"userName": "Grohiro"}
```

このプラグインは出力側の変換なので、入力側の変換も必要になったら作るかもしれない。
ロジカルシンキングの鍛え方

ロジカルシンキングを身につけるべく、インプットしたエッセンスを書き込んでいきます！

読んだ本は下記2冊になります。
『世界一やさしい問題解決の授業』
『マッキンゼー式ロジカルシンキング』

##世界一やさしい問題解決の授業

###・問題解決のフロー
1, 現状の理解
2, 原因の特定
  原因としてありえるものを洗い出す
  原因の仮説を立てる
  どんな分析をするかを考え、情報を集める
  分析する
3, 打ち手の決定
  打ち手のアイディアを幅広く洗い出す
  最適な打ち手を選択する
  実行プランを作成する
4, 実行

###・分解の木
原因をもれなく探す時、うちてのアイディアを幅広く具体的に洗い出す際に使う。

###・はい、いいえの木
原因を調べる時、打ち手を考える道筋を明確にする
設定した質問に対してはい、いいえで答え、原因を探る。

###・課題分析シート
具体的な目的を持って情報集めや分析を出来るようにする。
具体的な課題、現時点での仮説と根拠、分析に必要な情報を明確にする。
課題→仮説→根拠→分析・作業→情報源

###・縦横に軸のあるマトリックス
最適な打ち手を選択する
例えば、効果と実行のしやすさで打ち手をマッピングする。
また出来ていない打ち手をどうすればできるのかを考える。

###・良い点、悪い点リスト
選択肢のメリットを左、デメリットを右にかき、良い点を「+」、悪い点を「-」として書き込み点数化する。

###・目標設定フロー
1, 目標を設定する
2, 目標と現状のギャップを明確にする
3, 仮説を立てる
  選択肢を幅広く洗い出す
  選択肢を絞り込んで仮説を立てる
4, 仮説が正しいかチェックする
  仮説に沿って情報を集める
  データを分析しチェックする




##マッキンゼー式ロジカルシンキング

###・A4メモ書き
左上にタイトル、右上に日付けを書き、本文は4~6行、各20~30字でかく。

頭の整理、優先度付け、説明ができるようになる。
1分で書く
毎日10~20ページ書く
頭に浮かぶままに書き出す
タイトルは具体的に、疑問形だとベター。

###・理由を3つ上げる
検討が深くなる
自問自答できるようになる

###・マトリックス
考えの整理の方法

縦軸と横軸には整理得する上で重要で独立した2つの項目を書く。
緊急度、重要度、など。

###・3C分析
Customer、Competitor、Companyで事業環境を分析する

###・ロジックツリー
現象・問題、本質的な原因、根本的な解決策、具体的施策をつなげてかく。
HoloToolKitのAirTapに関するメモ(AirTapイベントの取得)

#Hololensアプリ開発に関するメモ（AirTapイベントの取得）
ホロレンズのアプリ開発を始めるにあたって、ネットでAirTapの取得方法を調べたが、最近
HoloTooKitの仕様が変更されたようで、AirTap時にOnSelect()が反応しなくなっている。
最新版（2017/5月現在）のHoloToolKitでAirTapイベントを取得するための方法を簡単にまとめた。

Unity向けHoloToolKitダウンロード先：
https://github.com/Microsoft/HoloToolkit-Unity

1．HoloToolKitをUnity Projectにインポート。Assets内のHoloLensCamera、Input->Prefabs->Cursor->CursorおよびInputManagerをHierarchyに配置。
（SpatialMappingを利用する場合はSpatialMapping->Prefabs->SpatialMappingも配置する）

2.以下の例のように、IInputClickHandlerの継承、Start()内のとメソッドOnInputClicked()を追加したコードを作成、Hierarchy内のゲームオブジェクトにアタッチする（HoloLensCameraなど）

```CS:AirTapExample.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using HoloToolkit.Unity.InputModule;

public class AirTapExample : MonoBehaviour,IInputClickHandler {
	public Camera HololensCamara;

	void Start () {
		//AirTapを検出したとき、OnInputClickedが呼ばれる。
		InputManager.Instance. PushFallbackInputHandler(gameObject);
		}

	void Update () {
		
	}

	//AirTapを検出したとき呼ばれるメソッド
	void OnInputClicked(InputClickedEventData eventData){		
　　　　　//AirTap検出時の処理を記述

	}


}
```


Start()内の記述がなくても、このスクリプトがアタッチされたゲームオブジェクトがAirTapされた場合、OnInputClickedメソッドが呼ばれる。
ゲームオブジェクトがタップされたかにかかわらず、メソッドを呼びたい場合、今回のサンプルコードのような記述になる。
Activator が EOL を迎えるので、Activator と SBT コマンドの対応表を作成します。

最近 PlayFrameworkを使用し始めました。
Playでは、Activatorでビルドや起動を行うって覚えましたが、

Activator が 2017/05/24 で　EOL を迎えるらしいですね。
[公式サイトのソース](https://www.lightbend.com/activator/download)
今後は、新規テンプレートは、Giter8 を使用し、compileやrun は、素のsbtで行うという流れになるらしいです。
GW開けたら、EOL...
休みボケの状態で、焦らないように、今のうちにコマンドの対応表を作成しておきたいと思います。

まだまだ、Play初心者なので、間違っているところや足りないものがあれば、編集リクエストなどで教えていただけると助かります。

[sbt公式サイト](http://www.scala-sbt.org/index.html)


# コマンド対応表

注意) 
 activator と sbt の 接頭語 は 省いています。
使用する際は、表記されているコマンドの前に、activator もしくは、sbt を追記して使用してください。


| Activator            | SBT                     | 概要                       | 備考 |
|----------------------|-------------------------|---------------------------|------|
| activator            | sbt                     | コンソールの起動              |         |
| help \<command>      | help \<command>         | ヘルプの表示                 |         |
| ---                | about                   | 詳細情報を表示 | |
| run              　　   | run                     | 開発モードでサーバを起動       |          |
| clean                | clean                   | 全ての生成されたファイルを削除   |         |
| compile              | compile                 | コンパイル                  |          |
| ---                  | package                 | jar の作成                |           |
| ---                  | reload                  | ビルド定義の再読込み          |          |
| console              | console                 | 対話コンソールを起動           |           |
| -jvm-debug <port>    | ---                     | デバッグモード                | sbtには、標準だと `-jvm-debug` は入っていない。<br> [sbt-launcher-package](https://github.com/sbt/sbt-launcher-package) を使うことで可能となる |
| test                 | test                    | 全てのテストをコンパイルし実行 |    |
|  "testOnly <テストクラス>"    | "testOnly <テストクラス>"  | 特定のテストクラスを実行 | 複数のテストクラスを実行するばあいは、スペースを開け、 <br> "testOnly testA testB" と指定する
| new \<project name>  | new \<giter8 template> | テンプレートの新規プロジェクトを作成 | sbt version 0.13.13 以上から使用可能。 <br>[Giter8 template](http://www.scala-sbt.org/0.13/docs/sbt-new-and-Templates.html)   |
| ~ \<sbt command>     | ---                     | sbtの機能を利用             |                 |
CREATE TABLE / ALTER TABLE においてMySQLネイティブのプリペアドステートメントは動作しない

何を言っているのかわからないのでPsySHで実験したときの画像↓

![スクリーンショット 2017-05-06 12.37.41.png](https://qiita-image-store.s3.amazonaws.com/0/25060/e69e672e-3ed2-c51c-3560-391f748fe607.png)

**「PDOの擬似プリペアドステートメントは信頼性に難あり，MySQLネイティブのやつを使っておけ」**と言われがちですが，本当に信頼性が低いのはどちらでしょうね？

あと生PDOだとなぜか再現できなかったのですが，Laravelのマイグレーションファイルで以下のように**プレースホルダをダブルクオーテーションで括ると動作する**という謎の現象を確認しています。

```php:動作しない
    public function up()
    {
        Schema::table('example', function () {

        });
        DB::statement('ALTER TABLE example COMMENT ?', ['test']);
    }
```

```php:動作する
    public function up()
    {
        Schema::table('example', function () {

        });
        DB::statement('ALTER TABLE example COMMENT "?"', ['test']);
    }
```
tmuxのショートカットキーのチートシート

tmuxのショートカットキーのチートシート。
デスクトップの背景画像にどうぞ。
(文字よりも直感的に分かりやすいはず)

元aiファイルは https://github.com/gigatune/memo あるので、カスタマイズはご自由に。

![tmux_cheatsheet.png](https://qiita-image-store.s3.amazonaws.com/0/36569/db6e2da8-f010-e816-2255-d0bbe1613303.png)
オブジェクトの中の ランドマークを探して タッチした人をテレポートさせるスクリプトサンプル


```LSL:LandmarkTP.LSL

// LM Teleport Script
// Written by いっちゃん
//
// オブジェクトの中の ランドマークを探して タッチした人をテレポートさせます
//


string lm_name;
key lm_id;
vector pos;

default
{

    state_entry()
    {
        lm_name = llGetInventoryName(INVENTORY_LANDMARK,0);
        
        //LM名を読み取り
        if(lm_name != "")
        {
            lm_id = llRequestInventoryData(lm_name);
        }
    }

    touch_start(integer total_number)
    {
        if(lm_name != "")
        {
            llMapDestination(llGetRegionName(), pos, ZERO_VECTOR);
        } 
    }

    dataserver(key qid, string data)
    {
        // LM 読み込み
        if (qid == lm_id)
        {
            lm_id = "";
            pos = (vector)data;
        }
    }

    changed(integer change)
    {
        if(change & CHANGED_INVENTORY)
        {
            llResetScript();
        }
    }
}


```
Inno Setupで使えるUI画面

今回は、Inno Setupでインストール時に使えるダイアログボックスを紹介していきます。Inno Setupもマニュアルには画面が出ていないので、表示する画面の検討にご活用ください。

- StartupPrompt  
![01StartupPrompt.png](https://qiita-image-store.s3.amazonaws.com/0/83170/e18ab83e-7df9-d47c-18ec-5830f60ebc48.png)  
- LanguageDialog  
![02LanguageDialog.png](https://qiita-image-store.s3.amazonaws.com/0/83170/2b1921db-249f-8f0a-65da-c61425e33d6c.png)
- wpWelcome  
![03wpWelcome.png](https://qiita-image-store.s3.amazonaws.com/0/83170/44e35d54-936a-ec4d-b844-f563fee12ea2.png)
- wpLicense  
![04wpLicense.png](https://qiita-image-store.s3.amazonaws.com/0/83170/955a7df5-7813-219a-1dee-a0cb879f4be6.png)
- wpPassword  
![05wpPassword.png](https://qiita-image-store.s3.amazonaws.com/0/83170/c022eddc-0c4d-a638-7b0a-8259e928d17f.png)
- wpInfoBefore  
![06wpInfoBefore.png](https://qiita-image-store.s3.amazonaws.com/0/83170/cfa3f7dc-0976-c878-4e00-1a6078235162.png)
- wpUserInfo  
![07wpUserInfo.png](https://qiita-image-store.s3.amazonaws.com/0/83170/236db10e-c0ce-8b78-847a-5ea8101a07dc.png)
- wpSelectDir  
![08wpSelectDir.png](https://qiita-image-store.s3.amazonaws.com/0/83170/50fe9ed1-492c-b4cf-fe72-bdeb78994ee2.png)
- wpSelectComponents  
![09wpSelectComponents.png](https://qiita-image-store.s3.amazonaws.com/0/83170/0e1a68ed-3527-eec5-b4a1-ebe7534afdf4.png)
- wpSelectProgramGroup  
![10wpSelectProgramGroup.png](https://qiita-image-store.s3.amazonaws.com/0/83170/d8a4cf9e-674f-6ab4-e154-c53ff1b94ef6.png)
- wpSelectTasks  
![11wpSelectTasks.png](https://qiita-image-store.s3.amazonaws.com/0/83170/f63f1a33-fb85-9dc8-1095-a6c2a4a7f859.png)
- wpReady  
![12wpReady.png](https://qiita-image-store.s3.amazonaws.com/0/83170/04ab38b2-1763-7e04-6a05-ae346db922df.png)
- wpPreparing  
![13wpPreparing.png](https://qiita-image-store.s3.amazonaws.com/0/83170/33af794c-1925-eafd-c0c3-2b4602ff787e.png)
- wpInstalling  
![14wpInstalling.png](https://qiita-image-store.s3.amazonaws.com/0/83170/654c8929-bb17-2ec0-ee18-bf53984a0bb5.png)
- wpInfoAfter  
![15wpInfoAfter.png](https://qiita-image-store.s3.amazonaws.com/0/83170/e322493c-7ee1-d136-5ca2-e03eee7672a4.png)
- wpFinished  
![16wpFinished.png](https://qiita-image-store.s3.amazonaws.com/0/83170/f7d97b16-3e7b-a086-7d5b-e70bcae36aac.png)
Vagrantでスナップショットを使って(ﾟ∀ﾟ)ｳﾏｳﾏする

# vagrant snapshot save [スナップショット名]
```
bash-3.2# vagrant snapshot save snapshot_test
==> default: Snapshotting the machine as 'snapshot_test'...
==> default: Snapshot saved! You can restore the snapshot at any time by
==> default: using `vagrant snapshot restore`. You can delete it using
==> default: `vagrant snapshot delete`.
bash-3.2# vagrant snapshot save snapshot_ut
==> default: Snapshotting the machine as 'snapshot_ut'...
==> default: Snapshot saved! You can restore the snapshot at any time by
==> default: using `vagrant snapshot restore`. You can delete it using
==> default: `vagrant snapshot delete`.
bash-3.2#
```
# vagrant snapshot list
```
bash-3.2# vagrant snapshot list
snapshot_test
snapshot_ut
bash-3.2#
```

# vagrant snapshot restore [スナップショット名]
```
bash-3.2# vagrant snapshot restore snapshot_ut
==> default: Forcing shutdown of VM...
==> default: Restoring the snapshot 'snapshot_ut'...
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
bash-3.2#
```
# push, popも使える
```
bash-3.2# vagrant snapshot push
==> default: Snapshotting the machine as 'push_1494041160_9738'...
==> default: Snapshot saved! You can restore the snapshot at any time by
==> default: using `vagrant snapshot restore`. You can delete it using
==> default: `vagrant snapshot delete`.
bash-3.2# vagrant snapshot list
push_1494041160_9738
snapshot_test
snapshot_ut
bash-3.2# vagrant snapshot pop
==> default: Forcing shutdown of VM...
==> default: Restoring the snapshot 'push_1494041160_9738'...
==> default: Deleting the snapshot 'push_1494041160_9738'...
==> default: Snapshot deleted!
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
bash-3.2#
```

#捕捉
* バージョン１．８．６だと私の環境ではうまく動かない部分があったため、１．９．４にバージョンアップしたところ解消できた
CgitをDockerで起動する


```bash
docker run -d -p 8181:80 \
    -v /var/opt/git-repository:/srv/git \
    --name nginx-cgit-srv \
    corfr/nginx-cgit
```

https://hub.docker.com/r/corfr/nginx-cgit/
 https://git.zx2c4.com/cgit/
XPS-15-9650-laptop (4K) を分解せずに、部分的に破壊された(？)BIOSを回復する

- @aki-s が、XPS-15にUbuntuをインストールし、迂闊にもUbuntuがpopupしてきたfirmware updateを適用したためにPCをブートできなかったときの体験記です(UbuntuからはUEFIのカプセルアップデート機能を使えらしいが、更新データとしてXPS-15はサポートしていなさげ？）。
- 起動するために電源ボタンを押した後に、「DELLのロゴはでるけれども、F2やF12キーをを押してもそこから先の画面へ進めない」ので「BIOSが部分的に破壊された」と解釈しています。
  - @ak-s はBIOSに詳しくないです。理解が正しくない場合もあります。
- 2015/12以降のDELL　PCとタブレットで有効な手法である模様
- [DELL Official Pageの"デルのPCまたはタブレットでのBIOS回復オプション"](http://www.dell.com/support/article/us/en/19/SLN300716/デルのpcまたはタブレットでのbios回復オプション?lang=JA)の***ビデオ見れば方法が完全にわかります***。

上のリンクにたどり着くのに非常に時間がかかったことからQiitaにも記載することにしました。

以下は、上のリンクのビデオと解説文章を読みながら実際に回復をしたときにとった手順です。

# 回復手順
## 用意するもの
- FAT32 formatされたUSB
- 標準出荷されてくる電力供給ケーブル
- 自分のPCに対応するBIOS file
    - DELLの公式ページでユーザー登録をし、downloadする (HOME > Support > Product Support)
    - downloadしたファイルは"BIOS_IMG.rcv"として先のUSBのトップディレクトリに配置する
    - USBの中に、他にファイルが有ってよいか判らないが、面倒を避けるため極力他のファイル入れない（ @aki-s の場合は、.Trashesとかのフォルダはあったけど問題なかった。）

## <a name="BIOS recovery 画面を出現させる">BIOS recovery 画面を出現させる</a> 
1. ノートパソコンの電源が切れていることを確認し、ACアダプタを外します。
1. キーボードのCTRLキー+ESCキーを押し続けます。
1. ACアダプタをノートパソコンに接続します。
1. 「BIOS Recovery（BIOSの回復）」画面が表示されたら、キーボードのCTRLキーとESCキーを放します。

「BIOS Recovery（BIOSの回復）」画面
![DELL-RECOVERY-BIOS.png](https://qiita-image-store.s3.amazonaws.com/0/52277/273c4fe5-3b9b-a199-036c-189989d4989d.png)

***回復中はキーボードなどに全く触ってはいけないし、電源も抜いてはいけないことに注意して以下の作業をする。***

## 一旦初期状態に戻してみる

- 「BIOS Recovery（BIOSの回復）」画面の２つのラジオボタンのうち下の方をタッチパットで選択して実行。
  - (ビデオでは、先ずは上の方(自動回復？)を選択して実行
しているようだが、私の場合は、内蔵ハードディスクのパーティションにリカバリ用のファイルが存在しないと推測できたので)

## 自動回復がだめならファイルから回復
- 案の定、だめだったので、先のUSBを差し込んで [BIOS recovery画面を出現させる](http://qiita.com/aki-s/items/a03c056fcf0bd3c5d7e6#bios-recovery-画面を出現させる)
- 今度は"Reset BIOS Settings to Default"(図の下の方)を実行
- ２分（体感）も待てば修復して、OSログイン画面まで表示される。(OSが壊れていないこと前提)

以上
【WordPress】固定ページに設置したフォームが確認画面に遷移しない。

#詳細
固定ページをフロントページに設定し、その中にMW WP Formを設定したら、確認画面に画面遷移しなかった。
フォームは、MW WP Formで作成した。

#原因
WordPressでinputタグのname属性に、値*name*を使用していた。

#理由
WordPressで使用されているパラメータ変数で、nameが使用されているため。
（$public_query_vars）


#解決方法
name属性の値を、customer_nameのように変更した。
Raspberry Pi 3で作ったSDカードをRaspberry Pi Zeroで動かしたらnodejsで「Illegal Instruction」エラー

# 状況
自宅の環境で、raspi3で試行錯誤してできあがったものをSDカード丸コピしてraspi zeroに移植して、運用。raspi3は次の何かの開発に使い続ける。
みたいなことをやってたら、raspi zeroでnodejs動くタイミングで、
```Illegal Instruction```
とエラーが出た。

# 結論
raspi zeroにてdpkgでnodeとnpmを再インストールすれば、エラー出なくなった！！

# 解決まで
色々ぐぐってたところ、下記参考にあるように、ARMアーキテクチャの違いにより発生するらしい。なるほど〜

参考
https://ja.stackoverflow.com/questions/17639/illegal-instruction%E3%81%A8%E3%81%84%E3%81%86%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
http://www.schrankmonster.de/2014/03/22/install-nodejs-npm-raspberrypi-illegal-instruction-error-messages/
vagrant上に立てた開発環境にて、webpackのhot reloadが効かない

# 状況
仕事で、Ruby on Rails + webpack使ってて、vagrant上にローカル開発環境を構築してvagrantとローカルでディレクトリ共有してある状態で、ローカルで修正したjsやcssファイルの変更がvagrant上でwebpackに認識してもらえず、hot reloadされなくて、毎回webpackを再起動しなきゃならなかった

# 結論
vagrantとローカルの共有フォルダをrsyncにしてやらないとだめらしい

参考
http://stackoverflow.com/questions/33681004/webpack-dev-server-reload-doesnt-work-on-virtual-box

# 解決方法

Vagrantファイルの共有フォルダ設定を下記のようにrsyncにする
``` config.vm.synced_folder ".", "/vagrant", type: "rsync", rsync_auto: true
```

この状態だと、手動で
``` vagrant rsync ```
コマンドを打たないとファイルが同期されないので、
``` vagrant rsync-auto ```
で自動同期されるようにしておく

ローカルでjsを修正したら、webpackに認識されてhot reloadされた！！！！

# 補足
vagrantとの共有フォルダをrsyncにすると、今度はvagrant上でのファイル変更がローカルに反映されない問題が発生する。
ので、vagrant-rsync-backプラグインを使う
https://github.com/smerrill/vagrant-rsync-back

インストール
``` vagrant plugin install vagrant-rsync-back
```

同期
``` vagrant rsync-back
```
上記コマンドを実行すると、vagrant上で修正した内容がローカルに反映される！
Raspberry Pi からPDF印刷するとマルチバイト文字が表示されない時は

# TL;DR

`sudo apt-get install epdfview`

# 経緯

1. プリンタってわざわざ買わなくてもコンビニでだいたい事足りる。プリンタ高いし。　
2. え、[３０００円のプリンタあるの？](http://amzn.asia/gGyviB9)コレならペイするじゃん
3. せっかくだからRaspberry Pi ３でネットワークプリンタ化しよう。[ココ参考になるなぁ](http://deviceplus.jp/hobby/raspberrypi_entry_011/)
4. スマホのEvernoteから直接プリントできると未来感あるよね！[iPhoneなら標準機能でできた](http://blog.gizmo.co.jp/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC/linux%E3%81%AEcups%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%82%92airprint%E3%81%8B%E3%82%89%E5%88%A9%E7%94%A8/)し、[Androidもこのアプリでできた](https://play.google.com/store/apps/details?id=io.github.benoitduffez.cupsprint&hl=ja)
5. 役所のPDFを印刷すると文字化けする・・・これじゃあ意味ないよ・・・マルチバイトがレンダリングできていないみたい
6. 調べると、`sudo apt-get install poppler-data` すれば良いとあるけど、Raspberry Pi 3には初めから入っているんだが・・・
7. そもそも標準ではいっているxpdfで日本語が表示されない。xpdfのバグ？とりあえず別のPDFビューワを入れてみるか。
8. `epdfview`を入れたらあっさり日本語が表示された。試しに印刷したらあっさり印刷された。
Macに"音声学に関する分析ソフト"Praatを入れる

# 導入するもの
「Praat」
音声学に関する分析をおこなうフリーソフト [Praat](http://www.fon.hum.uva.nl/praat/:title) 。
音声言語処理の授業で必要になったので入れます。
入れる先は MacBookAir (MacOS Sierra ver.10.12.4) です。
  
# インストール手順  
1. 公式ページに飛び、Download PraatのMacintoshをクリックします。  
![スクリーンショット 2017-05-05 16.30.52.png](https://qiita-image-store.s3.amazonaws.com/0/179891/056ce02f-2621-95d1-b1b5-e493a5713c7a.png)  
1. Praat6028_mac64.dmgをクリックします。  
![スクリーンショット 2017-05-05 16.31.11.png](https://qiita-image-store.s3.amazonaws.com/0/179891/d4cb23d9-131a-62ed-a199-51d7a637f3ef.png)  
1. ダウンロードした.dmgを解凍するとPraatが入っているのがわかります。アプリケーションフォルダに移動します。  
![スクリーンショット 2017-05-05 16.32.23.png](https://qiita-image-store.s3.amazonaws.com/0/179891/127587be-da1c-978f-b564-bb04d6f052e3.png)  
1. Praatを起動しました。  
![スクリーンショット 2017-05-05 16.46.48.png](https://qiita-image-store.s3.amazonaws.com/0/179891/40447162-680a-d4ac-27d5-deafd9564842.png)

# 感想  
とてもスムーズな導入でした。なんのエラーも発生しませんでした。びっくり。
[node.js]express-sessionでセッションを使用してみた

# expressでアプリケーションを作る際にsessionを使う
自分がチャットアプリケーションを作る際にログイン時にセッションを使いたかったので。
とりあえず、express-sessionの使い方から学んできたい。
とりあえずセッションの格納方式はメモリストアで行く。

## モジュールインストール
` npm install --save-dev express-session `
パッケージファイルに自動で上書きしてくれるように--save-devオプションを使う。
これでexpress-sessionが使えるようになった。


## app.jsでrequire&use
宣言文は以下の通り。  

```node.js:app.js
var cookieParser = require('cookie-parser'); 
var session = require('express-session');`
``` 
  
npmのread.meではヴァージョン1.5以降はクッキーパーサーは必要はないと書いてあったのでもしかしたら一行目はひつようないかも。

sessionの設定
 
```node.js:app.js 
 app.use(session({
  secret: 'secret',
  resave: false,
  saveUninitialized: false,
  cookie:{
  httpOnly: true,
  secure: false,
  maxage: 1000 * 60 * 30
  }
}); 
```

* secret属性は指定した文字列を使ってクッキーIDを暗号化しクッキーIDが書き換えらているかを判断する。
* resaveはセッションにアクセスすると上書きされるオプションらしい。今回はfalse.
* saveUninitializedは未初期化状態のセッションも保存するようなオプション。今回はfalse.
* httpOnlyはクライアント側でクッキー値を見れない、書きかえれないようにするオプション
* secureオプションはhttpsで使用する場合はtrueにする。今回はhttp通信なのでfalse
* maxageはセッションの消滅時間。単位はミリ秒。ミリ秒は千分の一秒なので1000 * 60 * 30で30分と指定。

## sessionの使用
今回はログインしたらセッションにユーザーIDを格納する。ちなみにログインフォームでidとパスワードが入力されreq.body.idで使用している。

```node.js:login.js 
var Users = mongoose.model('User');
var id = req.body.id;
var pass = req.body.password;
Users.findOne({ "id": id},function(err, user){
  if(err){
    console.log(err);
  }
  else{
    if(user.password === pass){
    req.session.username = id;
    res.render('index', {name: req.session.username});
  }
    else{
    res.render('login');
  }
  }
});
});
``` 

認証に成功したらreq.session.usernameをindexファイルにレンダリング。
indexファイルに以下の文を記述する.

```node.js:index.ejs
<p>welcome to <%=name %> !!!<p>
```

結果
![スクリーンショット (61).png](https://qiita-image-store.s3.amazonaws.com/0/136442/4d4912e3-2d2e-187f-deb0-03d02dbf05d7.png)

おそらくセッションが作られた。
次はこれをsocket.ioで使用できるようにしたい。

## github
githubにコードを挙げておくので参照してみてください。
>https://github.com/hikaru7719/chat_app

## 参考文献
>github express-sessionリポジトリ
https://github.com/expressjs/session

>Node.js + Express.js + express-sessionでセッションにデータ格納する方法
http://qiita.com/moomooya/items/00f89e425a3034b8ea14
TriState製NTP-Serverキット(K-07339)のファーム書き込み

#目的
秋月電子通商さんにて購入したTriState製[NTP-Serverキット(K-07339)](http://www.tristate.ne.jp/ntpserver/ntpserver.htm)のファームウェアを[USBAVRライタ+ProgISP(ver.1.72)](http://www.aitendo.com/product/9558)で書き込む手順を示します。AVRマイコンの今更ド初心者向けです。ProgISPの操作に関する日本語情報として参考までにどうぞ。

#概要
- ちょっと古めのキットだからか、メーカで推奨されているATMEL純正のAVRISPmkⅡが見つからない！(10年遅い)
- aitendoさんで購入した1000円AVRライタ:[USB-ASP](http://www.aitendo.com/product/9558)と、ProgISPを使用しました。
- ファームウェアが更新できました。

#手順
##ソフトウェアをダウンロード
書き込みに必要なソフトウェア類を準備します。

- 書き込み用ソフトウェア：ProgISPを使用しました。[購入ページ](http://www.aitendo.com/product/9558)にもリンクがあります。
- NTP-Serverキットのファームウェア：TriStateさんの[DLリンク](http://www.tristate.ne.jp/tsjob007-2.htm)からhexファイルがDLできます。
- ライタのドライバ：AVRライタのハードウェア自体はWindows10でそのまま刺すだけでUSB機器として認識されました。専用のドライバは不要のようです。

##基板とライタを接続
今回購入したAVRライタは2x5の10pinですが、NTP-Serverキットの基板のISP端子は2x3の6pinインタフェースとなっています。マニュアルでピンアサインを確認しながらブレッドボード用のジャンパ線を使用して同じ信号同士を接続します。AVRライタごとに微妙にピンアサインの表示が違うかもしれませんがあしからず。。(10pinから6pinに変換できる便利なケーブルも市販されているようです。)
![AVR_ISP接続図.jpg](https://qiita-image-store.s3.amazonaws.com/0/167660/021b25b0-1e22-384e-593e-af411617ea1e.jpeg)

##書き込み操作
接続したらProgISPを起動して書き込みます。
NTP-Serverキットのマニュアルにある通り、NTP-Serverキット側の電源も投入します。

1. Select Chipでターゲットを選択します。今回のNTP-ServerキットはATmega644Pです。(この時RDボタンを押すとチップIDを読んで確認してくれている様子)
2. Load FlashでDLしたファームウェアのhexファイルを選択します。
3. Program Fuseのチェックボックスを外すか、マニュアルに合わせて**「Low:FFh/High:D7h/Ext:FCh」**に修正。良く判らずにデフォルトの「Low:42h/High:99h/Ext:FFh」のまま書いてしまうとハマります。誤ったヒューズ設定を書き込んでしまった場合には値を書き戻します。そのほかデフォルトのチェック状態から不要な操作はなるべく外した方が間違いがないかも。
4. Autoボタンを押してFlashに書き込み・ベリファイを実行します。成功したらログ欄に「Successfully done」が表示されます。

![ProgISP操作.jpg](https://qiita-image-store.s3.amazonaws.com/0/167660/b969ae0a-8cf7-8ef7-bc8b-4c19c6a0fd28.jpeg)

#最後に
- Program Fuseを意識せずに書き換えてしまうとド初心者は焦る。
- 10年遅い。
- Arduino持ってればArduinoからでも書けるかも。。
Elastic の時系列異常検知手法について調べたところまで書いておく

5月4日にこんな記事が出ました。

[Elastic StackにMachine Learningが登場](https://www.elastic.co/jp/blog/introducing-machine-learning-for-the-elastic-stack)

卒論で異常検知をやったのもあり、興味があったので、調べられるところまで調べてみました。本当は手法まで明らかにできると良かったんですが、イマイチ分からなかったので「調べたところまで」です。余裕があったら後日もう少し深掘りして追記したいです。

参考に出来そうなのは以下の 3 つでした。
- 発表スライド & 動画
- 論文
- ソースコード

## 発表スライド & 動画
調べたら、中の人による解説スライドがありました。

[Machine Learning and Statistical Methods for Time Series Analysis](https://speakerdeck.com/elastic/machine-learning-and-statistical-methods-for-time-series-analysis)

実際の発表の動画もありました。メアドを登録すると見られます。スライドだといまいちよく分からない式が口頭で説明されていました。

https://www.elastic.co/elasticon/conf/2017/sf/machine-learning-and-statistical-methods-for-time-series-analysis

## 論文
上のスライドに載っている 2 人(Steve Dodson & Tom Veasey)の名前で調べたら、それらしい論文が 1 つだけ出てきました。

[Anomaly Detection in Application Performance Monitoring Data](https://www.elastic.co/assets/blt1338d14117ef78ae/anomaly-detection-in-apm-data.pdf)

図を見た感じ、上のスライドの内容と似た図が結構出ているので、この論文を読めばある程度何をやっているか分かるかもしれません。

## ソースコード
[公式 GitHub](https://github.com/elastic) でリポジトリを探しましたが、ありませんでした。 Forum を見ると、「オープンソースにはしてません」とのこと。

>>I want to know if the code for performing the detection is open source by any chance

>No. It's not.

https://discuss.elastic.co/t/using-x-pack-anomaly-detection-on-my-own-time-series-data/84613

オープンソースにはなってないとはいえ、 X-pack(今回の異常検知拡張が入っているプラグイン)をインストールすれば `.jar` ファイルが手に入るので、デコンパイルしてそれらしい単語 (anomal, detect, probability 等) を検索してみましたが、異常検知のロジックが書いてあるところには辿りつけませんでした。 `org/elasticsearch/xpack/ml` 以下にありそうではあるんですが、探し方が悪かったのかもしれません。

## 手法について
以下蛇足です。

ざっくりと発表スライドと動画を見ただけですが、学習では normal や log-normal などの分布からどの分布が一番よくヒストグラムに当てはまりそうかモデル選択してパラメータも推定し、推論では学習させた分布で確率が低いところを異常とみなす感じでした。季節性の時系列に対しては、学習時にクラスタも学習させて、同じクラスタに属しそうな時刻のデータ点だけを使って分布に当てはめるようなことをやっているみたいです。あまり良く読んでいないので、おかしかったらコメントなり編集 PR を送っていただけると助かります。

もしこれからもっと詳しく調べるなら、発表スライドと動画を見て概要を掴んでから論文を読むのが良いと思います。ソースコードを読もうとしたのは無駄足でした。
windowsでTensorFlow その13

#概要
windowsのTensorFlowの環境で、OpenAiやってみた。
'Acrobot-v1'をtensorflowでやってみた。

#参考にしたページ
http://enakai00.hatenablog.com/entry/2016/05/18/125007

#写真
100位に入っちゃった。
https://gym.openai.com/evaluations/eval_N3ruxjMCSDuxjSECp7LViA#reproducibility

![kk.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/49a94362-410c-e381-7194-4ebba2c9ada2.jpeg)


#環境
windows 7 sp1 64bit
anaconda3
tensorflow 1.0
pyqt5
OpenAi Gym 0.5
windowsでTensorFlow その12

#概要
windowsのTensorFlowの環境で、OpenAiやってみた。
OpenAi GymのClassic環境を調査してみた。

#'CartPole-v0'の場合
ポールを倒さない様、カートを動かす。
observationは4つ
x, x_dot, theta, theta_dot
rewardは、1
actionは2つ
0, 1
ゲームオーバーは、200回、角度195

#'CartPole-v1'の場合
ポールを倒さない様、カートを動かす。
observationは4つ
x, x_dot, theta, theta_dot
rewardは、1
actionは2つ
0, 1
ゲームオーバーは、500回、角度475

#'MountainCar-v0'の場合
車が山を登る。
observationは2つ
position, velocity
rewardは、-1
actionは3つ
0, 1, 2
ゲームオーバーは、200回、角度-110

#'MountainCarContinuous-v0'の場合
車が山を登る。
observationは2つ
position, velocity
rewardは、-1
actionは3つ
0, 1, 2
ゲームオーバーは、999回、角度90

#'Pendulum-v0'の場合
鉄棒の倒立。
observationは3つ
cos(theta), sin(theta), thetadot
rewardは、角度
actionは1つ
-2 : 2
ゲームオーバーは、200回

#'Acrobot-v1'の場合
鉄棒の大回転。
observationは6つ
cos(s[0]), np.sin(s[0]), cos(s[1]), sin(s[1]), s[2], s[3]
rewardは、-1
actionは3つ
0, 1, 2
ゲームオーバーは、500回

#サンプルコード

```
from __future__ import print_function
import sys, gym

#env = gym.make('CartPole-v0')
#env = gym.make('CartPole-v1')
#env = gym.make('MountainCar-v0')
#env = gym.make('MountainCarContinuous-v0')
#env = gym.make('Pendulum-v0')
env = gym.make('Acrobot-v1')
print ("id is ", env.spec.id)
print ("observation is ", env.observation_space)
print ("action is ", env.action_space)
print ("act is ", env.action_space.sample())
print ("fps is ", env.metadata.get('video.frames_per_second'))
print ("step is ", env.spec.max_episode_steps)
print ("threshold is ", env.spec.reward_threshold)
```
Welcome To Sboxx Agen | Review Detail Agen Online

<h1>Welcome To Sboxx Agen | Review Detail Agen Online</h1>

Sboxx Agen Adalah sebuah admin Blog yang bernama <a href="http://putrasaur.esy.es/">Putra Saur</a>. Blog Putra Saur menyediakan artikel ternama dan opini menarik seputar agen online dan juga opini-opini lainnya. Hal yang paling disukai banyak orang adalah opini tentang bagaimana cara berbicara dengan baik dan benar. Akan tetapi sebagai agen review detail Blog Putra Saur sangat meyakini kalau review agen onlinelah yang terdetail dari postingan mereka seperti <a href="http://asyarh.com/2017/04/19/sejarahqq-net-agen-dominoqq-online-bandarq-terpercaya/">Sejarahqq</a>, <a href="http://asyarh.com/2017/05/04/jadwalqq-agen-poker-online-agen-domino-online-terpercaya/">Jadwalqq</a>, <a href="http://asyarh.com/2017/03/22/sboqq-io-domino-99-agen-bandarq-domino-qiu-qiu-capsa-online/">Sboqqio</a> DLL. Apakah anda tahu Sboqq? kalau belum anda bisa membacanya di Blog Putra Saur guys. hehe karena sangat banyak sekali review yang diadakan didalamnya.

Sekilas tentang Sboqq. <a href="https://poptype.co/sboiox/sboqqio-domino-99-agen-bandarq-domino-qiu-qiu-capsa-online">Sboqq.io</a> merupakan sebuah website yang menyediakan permainan online dengan menggunakan games card guys. <a href="https://www.academia.edu/32866864/Sboqq.io_Domino_99_Agen_Bandarq_Domino_Qiu_Qiu_Capsa_Online.docx">Sboqqio</a> sekarang sangat terkenal khususnya di Indonesia karena mereka menyediakan permainan dengan licenence yang sangat jelas dan gamblang, coba anda bayangkan bahwa wbsite ini bisa anda mainkan semua permainan yang tersedia hanya dengan 1 Akun atau 1 User saja. Bahkan mereka menyediakan sistem yang memungkinkan anda bermain didalam website dalam adroid anda. Nah sekian saja ulasan seputar pendahuluan dari website Putra Saur ini. Salah Sboxx Agen Salam Kenal. hehe.

By : <a href="https://www.pinterest.com/asyarh3/ping-and-pin-sboqqio-domino-99-agen-bandarq-domino/">Pinteres Sboxx</a>
Raspberry Pi に Wiresharkをインストールする

以下の手順でインストールできます。

```bash
$ sudo apt-get install wireshark
$ sudo groupadd wireshark
$ sudo usermod -a -G wireshark pi
$ sudo chgrp wireshark /usr/bin/dumpcap
$ sudo chmod 750 /usr/bin/dumpcap
$ sudo raspi-config
$ sudo setcap cap_net_raw.cap_net_admin=eip /usr/bin/dumpcap
$ sudo chmod 4711 'which dumpcap'
$ sudo chmod 4711 /usr/bin/dumpcap
```
Gitサーバーを 1行で構築する (GitBucket)

サーバー用PCに[GitBucket](https://github.com/gitbucket/gitbucket)を入れます。

手順1. dockerを入れる

手順2. 公式イメージをインストールして実行する

```bash
$ docker run --name gitbucket-8001 -d -p 8001:8080 takezoe/gitbucket
```

これだけ別のPCからも http://server-ip:8001 にアクセスすれば使えます。

>補足: コマンドについて解説
>
* `docker run takezoe/gitbucket` で公式イメージを取ってきて、実行します
* `--name gutbucket-8001` はコンテナにつける名前です。（省略可）
* `-d` でバックラウンドで走らせます。
* `-p 8001:8080` はフォワーディング設定です。GitBucketがコンテナ上でポート8080で起動するので、適当なポート8001に マッピングしています。

---

![20160321030207.png](https://qiita-image-store.s3.amazonaws.com/0/158680/6d0ba799-bc52-5831-b230-f5f27e160966.png)
macでコードから音声を喋らせる (eSpeak, OpenJTalk)

導入めちゃめちゃ簡単でした。homebrewありがとう。

## espeak: 英語

#### インストール & 実行

```bash
$ brew install espeak
```
```bash
$ espeak "hello world"
```

## open-jtalk: 日本語

#### インストール

```bash
$ brew install open-jtalk
```
これだけで
辞書ファイル(/usr/local/Cellar/open-jtalk/1.10_1/dic/)も
音声ファイル(/usr/local/Cellar/open-jtalk/1.10_1/voice/)も入りました。

#### 実行 

女性ボイス: mei_normal.htsvoice

```bash
$ echo "吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。" > sample.txt
$ open_jtalk \
-x /usr/local/Cellar/open-jtalk/1.10_1/dic \
-m /usr/local/Cellar/open-jtalk/1.10_1/voice/mei/mei_normal.htsvoice \
-ow out.wav sample.txt
$ afplay out.wav
```

男性ボイス: nitech_jp_atr503_m001.htsvoice

```bash
$ open_jtalk \
-x /usr/local/Cellar/open-jtalk/1.10_1/dic \
-m /usr/local/Cellar/open-jtalk/1.10_1/voice/m100/nitech_jp_atr503_m001.htsvoice \
-ow out.wav sample.txt
$ afplay out.wav
```

pythonから実行。以下の`jtalk.py`を作成して保存。

```python:jtalk.py
# coding: utf-8
import subprocess
from datetime import datetime

def jtalk(t):
    open_jtalk = ['open_jtalk']
    mech = ['-x', '/usr/local/Cellar/open-jtalk/1.10_1/dic']
    htsvoice = ['-m', '/usr/local/Cellar/open-jtalk/1.10_1/voice/mei/mei_normal.htsvoice']
    speed = ['-r', '1.0']
    outwav = ['-ow', 'out.wav']
    cmd = open_jtalk + mech + htsvoice + speed + outwav
    c = subprocess.Popen(cmd, stdin=subprocess.PIPE)
    c.stdin.write(t)
    c.stdin.close()
    c.wait()
    aplay = ['afplay', 'out.wav']
    wr = subprocess.Popen(aplay)

def say_datetime():
    d = datetime.now()
    text = '%s月%s日、%s時%s分%s秒' % (d.month, d.day, d.hour, d.minute, d.second)
    jtalk(text)

if __name__ == '__main__':
    say_datetime()
```

```bash
$ python jtalk.py
```

python モジュールとして利用

```bash
$ python
>>> import jtalk
>>> jtalk.jtalk ("ロウセイのリチョウは博学サイエイ、天宝のマツネン、若くして名をコボウに連ね、ついでコウナンイに補せられたが、性、狷介、自ら恃むところ頗る厚く、センリに甘んずるを潔しとしなかった。")
```

> 参考: http://qiita.com/kkoba84/items/b828229c374a249965a9
Gradle DSL method not found: 'compile()'　の対応方法

`build.gradle`の`dependencies`に`compile 'com.squareup.retrofit2:retrofit:2.2.0'`を追加したら、エラーが発生した。

> Error:(11, 0) Gradle DSL method not found: 'compile()'
Possible causes:<ul><li>The project 'xxxxxxxxxxx' may be using a version of the Android Gradle plug-in that does not contain the method (e.g. 'testCompile' was added in 1.1.0).
<a href="fixGradleElements">Upgrade plugin to version 2.3.1 and sync project</a></li><li>The project 'xxxxxxxxxxx' may be using a version of Gradle that does not contain the method.
<a href="open.wrapper.file">Open Gradle wrapper file</a></li><li>The build file may be missing a Gradle plugin.
<a href="apply.gradle.plugin">Apply Gradle plugin</a></li>

対応方法は、ルートにある`build.gradle`の`dependencies`に記入している`compile`行を
モジュールにある`build.gradle`の`dependencies`に移動すればOK
Hyのソースコードから実行ファイルを作成するパッケージを作った

[Hypo](https://github.com/koji-kojiro/hylang-hypo)
タイトルの通りですがせっかく作ったので一応宣伝ということです．

# はじめに
そもそも聞き慣れないと思いますが[Hy](http://docs.hylang.org/en/latest/)とは**PythonのVM上で動くLisp方言**です．たとえば[Pythonで書かれたイカしたLisp: Hy](http://qiita.com/t-sin/items/07ac1c7e413b43f8b6a8)とかを読めば雰囲気がわかるかと思います．JVMに対する**ClojureのPython版**と理解していただければよいです．というか**見た目はまんまClojure**なのでクソマイナー言語の割にマークダウンやReSTでそれらしくシンタクスハイライトできてしまいます．

Hyそのものは専用のインタプリタで実行できますが構文解析のオーバーヘッドがイマイチです．なので付属コマンドである`hyc`を使って`.pyc`ファイル（バイトコンパイルされたPythonスクリプト）に変換してから使うのがイイ感じです．また同様の付属コマンドである`hy2py`を使えば`.py`ファイルに変換することも一応可能ですが**大抵そのままでは動かせません**．なのでデバッグ用途ぐらいでしか使い物になりません．というのもHyが生成するPythonのASTには通常Pythonで用いることのできないシンボル名が頻繁に登場するためです．（例えば`gensym`で生成される変数名は`:`始まり）

以上のことはHyを使って日々のタスクを簡単にするような小さなアプリケーションを書きたいと言ったようなときに非常にイマイチです．いちいち`hyc`するなりMakefileを書いたりしとけば済む話ですがあんまり**クールじゃない**．またPythonista的には`.pyc`ファイルを日々目にするのはなんとなく**気持ち悪い**．

じゃあ[**Hyのソースコードをまとめて実行形式にしちゃうようなの**](https://github.com/koji-kojiro/hylang-hypo)を作ってしまえというのでできたのがこの記事の**本題**です．

# インストール
PyPIからどうぞ．

```shell-session
$ sudo pip install hypo
```

# 使い方

```shell-session
$ hypo -o 出力名　ソースファイル１　ソースファイル２..
```

のように使います．`-o`オプションが省略された場合は`a`という名前で出力されます．ちなみにアプリケーションのエントリーポイントはここでいう`ソースファイル１`になります．なお入力は`.hy`ファイルのみしか受け付けません．出力は[zipapp](https://docs.python.org/3/library/zipapp.html)よろしく書庫ファイルですが予めシバンと実行権限を付与しているので実行バイナリのように考えていただいてかまいません．
# 使用例
例えば以下のような２つのファイルからなるアプリケーションをビルドしてみます．

```clj:main.hy
(import [iota [iota]])

(defmain [&rest args]
  (print (iota 10)))
```

```clj:iota.hy
(defn iota [m &optional [n 0] [step 1]]
  (if (>= n m)
    None
    (cons n (iota m (+ n step) step))))
```

ちなみにこれらのコードはPythonでいうと以下のようなカンジです．

```py:main.py
from iota import iota

if __name__ == '__main__':
    print(iota(10))
```

```py:iota.py
def iota(m, n=0, step=1):
    if n >= m:
        return ()
    return (n, ) + iota(m, n + step, step)
```
Pythonでは普通再帰は使いませんが関数型言語といえば再帰ということで．ただし**末尾再帰では無い**のでLisper的にもイマイチなコードであることは一応断っておきます.ちなみにHyで末尾再帰を使う場合は[`loop/recur`](http://docs.hylang.org/en/latest/contrib/loop.html)マクロを使います．

で，本題に戻ります．ターミナルから以下のコマンドを実行します．なお，今回は`example`という名前でビルドします．

```shell-session
$ hypo -o example main.hy iota.hy
```

するとカレントディレクトリに`example`というファイルが作成されるので実行してみます．

```shell-session
$ ./example
(0L 1L 2L 3L 4L 5L 6L 7L 8L 9L)
```
`main.hy`の内容が実行されます．この時実行ファイルの内部では`.pyc`にコンパイルされたファイルが呼び出されているのでHyのインタプリタから実行するよりちょっとだけ高速です．なお，数値の出力がキモいのは**Hyの仕様**です．

# まとめ
手前味噌な感じで[**Hyのソースコードをまとめて実行形式にしちゃうようなの**](https://github.com/koji-kojiro/hylang-hypo)の使い方を紹介しました．あまり大規模なアプリケーションを作るのには向いていませんがぜひ使っていただけると嬉しいです．休日の暇つぶしに数時間で書き上げたパッケージですのでバグなり要望なりあればぜひ[プルリク](https://github.com/koji-kojiro/hylang-hypo/pulls)なり[issue](https://github.com/koji-kojiro/hylang-hypo/issues)なり投げてください．ここまで読んでいただきありがとうございました．