OmniAICreator/Qiita-1.07M huggingface dataset:
Laravel5.2 DBに登録済みのバイナリデータをダウンロードさせる

## やりたいこと
Laravel5でDBに登録済のバイナリデータをダウンロードさせる。
Laravel5 publicディレクトリからファイルダウンロードする記事は出てくるが、DBに登録済のバイナリデータをダウンロードする方法についてはあまり記述がなかった。


## 環境
・Laravel 5.2
・Laravel/homestead v0.5.0
　　・Ubuntu 16.04
　　・PHP7
　　・Nginx
　　・MySQL等
 参照URL:[Vagrant box laravel/homestead](https://atlas.hashicorp.com/laravel/boxes/homestead "Vagrant box laravel/homestead")・[Laravel ドキュメント](https://laravel.com/docs/5.2/homestead "Laravel ドキュメント")


## 前提条件
DBにバイナリデータが既に格納済。
Hogeテーブルに主キーとなるid、ファイルタイトルを格納するfile_title、バイナリデータを格納するfile_dataが存在する。

## 手順
1.DBからバイナリデータを取得する。
2.取得したバイナリデータをfile_put_contentsの第2引数に指定でファイルに書き込む。
第1引数はデータを書き込むファイルへのパスだが、存在しないファイルを指定しても新規作成されるので問題ない。
3.ヘッダーに拡張子を指定する。オリジナルの拡張子も使える。
4.レスポンスに返却する。



```php:HogeController.php 

    /**
     * Hogeファイルダウンロード実行Action
     * download/{id}のURLのidから、Hogeテーブルの指定したidをキーとするファイルをDLする
     */
    public function downloadHoge($id) {
        $hoge = Hoge::where('id', '=', $id)->first();

        // タイトル取得
        $title = $hoge->file_title;
        // バイナリデータ取得
        $fileData = $hoge->file_data;

        // 取得したバイナリデータをファイルに書き込んでレスポンスに返却
        $writingHogeData = '.hoge';
        file_put_contents($writingHogeData , $fileData);

        // 拡張子はhoge
        $headers = array(
            'Content-Type: application/hoge',
        );

        return response()->download($writingHogeData, $title, $headers);
    }
```

### 参考
[PHPマニュアル:file_put_contents](http://php.net/manual/ja/function.file-put-contents.php "PHPマニュアル file_put_contents")
[stackoverflow:Download files in laravel using Response::download](http://stackoverflow.com/questions/20415444/download-files-in-laravel-using-responsedownload "Download files in laravel using Response::download")
jq で `"` なしに文字列を出力する

# 問題

`jq` で `"` なしに文字列を出力できない。

たとえば `"Hello"` ではなく `Hello` と出力したい。

# 解決策

`-r` を使う。

`jq` の help を見ると次のように書かれている。

```
-r             output raw strings, not JSON texts;
```

# 例

```
$ echo '"Hello"' | jq .
"Hello"

$ echo '"Hello"' | jq -r .
Hello
```
生産性を上げるアプリMagnetの紹介

##Magnetとは
Macのウィンドウの大きさを自由自在に変更・移動できるアプリです。
[Magnet](https://itunes.apple.com/jp/app/magnet-magunetto/id441258766?mt=12)

##使用イメージ
コマンド一つでウィンドウを分割したり、モニターに移動したりできるのでワークスペースをうまく使えるようになります。おすすめです！
[![https://gyazo.com/7e3b506413c4d65059774a49897e2afd](https://i.gyazo.com/7e3b506413c4d65059774a49897e2afd.gif)](https://gyazo.com/7e3b506413c4d65059774a49897e2afd)
Freeplane からエクスポートする HTML を好みの書式にした


Freeplane から HTML にエクスポートする xslt を変更してみた。

- ルートを H1, 最初のノードを H2 で出力
- なるべく style 指定をしない
- xslt の整理
- HTML を UTF-8 で出力

インストール先の resources\xslt\mm2html.xsl を https://bitbucket.org/hokorobi/freeplane_mm2html/src/tip/mm2html.xsl と入れ替えれば試せる。
Bash | for in に渡す変数を引用符で囲うと 中身がなくても展開してまう

```bash
list=''

for i in $list
do
  echo I am hidden
done

for i in "$list"
do
  echo I am not hidden
done
```

# 結果

```
I am not hidden
```

# 環境

- bash 3.2








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
vagrant up 時のエラーでハマった件

#現象
仕事で使っているPCの調子が悪かったので新しいPCにVM環境を構築していたら
エラーで「Vagrant up」出来ない状態に・・・。

バージョンはこんな感じ
**VirtualBox 5.1 + Vagrant 1.8.4**

#エラー内容
```C:\Users\hoge>vagrant up
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/util/platform.rb:85:in `block in windows_hyperv_admin?': undefined method `include?' for #<Vagrant::Util::Subprocess::Result:0x2de92e0> (NoMethodError)
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/util/platform.rb:89:in `call'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/util/platform.rb:89:in `windows_hyperv_admin?'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/plugins/providers/hyperv/provider.rb:20:in `usable?'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/environment.rb:381:in `block in default_provider'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/environment.rb:379:in `each'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/environment.rb:379:in `default_provider'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/plugin/v2/command.rb:174:in `block in with_target_vms'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/plugin/v2/command.rb:201:in `call'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/plugin/v2/command.rb:201:in `block in with_target_vms'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/plugin/v2/command.rb:183:in `each'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/plugin/v2/command.rb:183:in `with_target_vms'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/plugins/commands/up/command.rb:131:in `install_providers'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/plugins/commands/up/command.rb:85:in `execute'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/cli.rb:42:in `execute'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/lib/vagrant/environment.rb:302:in `cli'
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.4/bin/vagrant:174:in `<main>'```

#原因
7月12日にリリースされたばかりのVirtualBox5.1での不具合みたいです。
まだ、解決されていなさそう。


#対処法
サラッと調べてみても特に対処法が見当たらず。
素直にVirtualBox 5.0.24を入れなおしたら解決しました。
http://download.virtualbox.org/virtualbox/5.0.24/
pixi.js - タッチイベント(マウスイベント)

##pixi.js - タッチイベント(マウスイベント)

ボタンをクリックすると、アラートが表示されるデモです。
[Demoページ(jsfiddle)](https://jsfiddle.net/fpmnjsfc/)

```html:index.html
<script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/3.0.11/pixi.min.js"></script>
<script src="./script.js"></script>
```

```js:script.js
var size = {
	w: window.innerWidth, 
  h: window.innerHeight,
};

//レンダラーの生成
var renderer = PIXI.autoDetectRenderer(size.w, size.h, null);
//Canvasをbodyの子要素として追加
document.body.appendChild(renderer.view);

//ステージの生成
var stage = new PIXI.Container();

//ボタンの生成
var button = new PIXI.Text('BUTTON',{font : '50px Arial', fill : 0xffffff, align : 'center'});
button.width = size.w * 0.2;
button.height = size.w * 0.1;
button.anchor.x = 0.5;
button.anchor.y = 0.5;
button.position.x = size.w * 0.5;
button.position.y = size.h * 0.5;
//ボタンをステージに追加
stage.addChild(button);

//タッチイベント(マウスイベント)を有効化
button.interactive = true;
//イベントの追加
button
.on('click', function () {
  alert('button clicked');
})
.on('touchstart', function () {
  alert('button touchstarted');
});

//レンダリング
renderer.render(stage);
```

###リンク
[pixi.js公式サイト](http://www.pixijs.com/)

以上です。
Digdag Serverを使う


## 環境構築

 - 設定ファイル

```properties:postgresql.properties
database.type = postgresql
database.user = postgres
database.password = passwd
database.host = 127.0.0.1
database.port = 5432
database.database = digdagdb
```

 - DB作成
  - `CREATE DATABASE digdagdb;`
 - テーブル作成
  - `digdag server --config postgresql.properties`
  - この時テーブルが無ければ作成されます.

## Server起動

- `digdag server --config postgresql.properties`

### 自動起動

今の所なさそう、自分なら以下の何れかで自動起動するようにする.

- Systemd
	- [digdag.service GitHub:Gist](https://gist.github.com/uu59/23968e3983adcf5b4cce400710b51cb2)
- rc-script(/etc/init.d)
- [Upstart](http://heartbeats.jp/hbblog/2013/02/upstart-daemon.html)
- [Supervisor](http://supervisord.org/)

## HA構成

PostgreSQLを使っている場合は、
単純にDigdag Serverを複数用意しておけば良い.

あとは構成次第で以下のオプションを設定する感じ.

- `--disable-local-agent`
	- RESTインターフェースを無効にします.
	- クライアントモードの操作を受け付けなくなります.
- `--disable-executor-loop`
	- ワークフローのタスクの実行を無効にします.
- `--max-task-threads N`
	- タスクの実行の最大スレッド数

## 死活監視

### クライアントモードを利用

`digdag workflows`の終了ステータスで良さそう.
`0`以外は死んでる感じ.

```sh
$ digdag workflows >/dev/null 2>&1; echo $?
0
$ digdag workflows >/dev/null 2>&1; echo $?
1
```

Client系の`digdag workflows`はDigdagのストレージにまでアクセスしているので死活監視に利用できると思います.

### サーバーのローカルエージェントを利用

デフォルトでは`127.0.0.1`でサーバが起動しますが、
`--bind`オプションを指定すれば外部からでもアクセスできます.
これを利用して.

```sh
$ curl -sf http://localhost:65432/api/projects > /dev/null 2>&1; echo $?
0
$ curl -sf http://localhost:65432/api/projects > /dev/null 2>&1; echo $?
22
```
Digdagのモード


## モード

digdagは3種類のモードがあります.

`digdag --help`を叩くと各サブコマンドがどのモードなのか分かるようになっています.

### ローカル モード

ローカルモードは開発用で`.digdag`ディレクトリにタスクの状態等が格納されます.

### サーバー モード

サーバー/クライアントモードはサーバプロセスと、それにアクセスするクライアントの構成になります. デフォルトでは`127.0.0.1:65432`のIP:Portが使用されます. 

サーバーのストレージにはH2またはPostgreSQLを使用できます.
このストレージは主に以下のものを扱ってるようです.

 - ワークフローのアーカイブを保存(`revision_archives`)
	 - `digdag push`する度に保存されてた
 - スケジュールの情報
 - ワークフローのログ
 - 実行可能なワークフローのタスクのキュー

おそらくHA環境を構築する場合は、PostgreSQLでHAを組んで、
複数の物理サーバ上でDigdagのサーバープロセスを立ち上げることになる感じかな?


#### PostgreSQL

プロダクションにはPostgreSQLを使うと良さそうです.

[Digdag Release 0.4.0](https://github.com/treasure-data/digdag/blob/master/digdag-docs/src/releases/release-0.4.0.rst)にてPostgreSQLのバージョン制限がありました.

- PostgreSQL >= 9.4
- PostgreSQL >= 9.5

#### H2

H2はオンメモリまたは永続化を選択できます。


### クライアント モード

サーバーへの操作はクライアントモードのサブコマンドを通して行います.
GitHubにRailsプロジェクトをアップロードしたり、リポジトリ名を変更する手順

Railsなどのアプリケーションを作り、GitHubのリポジトリを新規で登録する際の手順を記載します。

# 前提
LINUX
GitHubアカウント取得済み
Rails環境構築済み

# 手順
## 端末のSSH公開鍵をGitHubに登録する。
既に登録済みの場合は読み飛ばしてください。
この手順を行っていない場合、pushなどでエラーが発生する場合があります。
なお、GitHub Desktopでは問題は発生しないはずです。

1. LINUXにSSHなどで接続し、以下コマンドを実行します。

```
$ ls ~/.ssh
```
この結果、以下ファイルが既にある場合は公開鍵は作成されている為、手順2は飛ばしてください。

```
id_rsa id_rsa.pub
```
　
2. 公開鍵and秘密鍵を生成する

```
$ ssh-keygen -t rsa -C "<メールアドレス>"
```
実行すると、鍵を保存するディレクトリ、パスフレーズ、パスフレーズ確認を求められますが、
基本的にそのままENTERで構いません。
※変えたい場合は変えてください。
　
3. 公開鍵をコピーする
公開鍵をクリップボードにコピーします。
以下コマンドを実行して公開鍵ファイルを開き、全選択をしてコピーして下さい。

```
$ vi ~/.ssh/id_rsa.pub
```
　
4. GitHubに登録する
GitHubにログイン⇒Settings⇒SSH and GPG keys⇒SSH keys⇒New SSH keyを押します。

- Title : 管理用の名前になるので、分かるような名前を付けて下さい。
- Key   : 前の手順でコピーした公開鍵をペーストします。

最後にAdd Keyを押して下さい。

**ここまででとりあえずGitHubへの接続が出来るようになりました**

## アプリケーションを作成する。
既にアプリケーション作成済みの場合は読み飛ばして下さい。

1. プロジェクト作成

```
$ rails new プロジェクト名 -d mysql
```
　　
## GitHubにリポジトリを準備する
1. GitHubのトップページから New repository をクリック
2. リポジトリ名や公開範囲などを指定する。</br>
3. **Initialize this repository with a READMEにチェックしないで下さい。**
4. Create repositoryします。
5. 表示されたページの「…or push an existing repository from the command line」の内容を使うので、このまま開いておいて下さい。

## RailsアプリのGitをプッシュする
LINUX側で行います。
1. SSHなどでLINUXに接続します。

2. Git開始

```
$ git init
```
　
3. gitで管理しないファイルを指定する
gitignoreファイルには、Gitで管理しないファイルを指定します。
以下コマンドを行います。

```
$ cd プロジェクト名
$ git .gitignore
```
```shell-session:.gitignore
末尾に追加
.DS_Store
```
　
4. プッシュします。
 
```
$ git config --global user.email <メールアドレス>
$ git add .
$ git commit -m "initial commit"

# 以下２行は先の手順で開いたままにした「…or push an existing repository from the command line」の内容です。
$ git remote add origin git@github.com:<GitHubのユーザー名or組織名>/<リポジトリ名>.git
$ git push -u origin master
```

以上でGitHub上にアップロードされます。

# プロジェクト名と、リポジトリ名を変更する
Railsのプロジェクト名を変えたい場合があります。
そんな時、GitHubのリポジトリ名も変えないといけない場合の手順です。
[Railsのプロジェクト名と、GitHubのリポジトリ名を変更する](http://www.techbox.jp/entry/github-namechange)
UbuntuかつPHP7でphpredisを使えるようにする

UbuntuかつPHP7でphpredisを入れた日本語情報がないのでメモレベル

### 今回試したバージョン

Ubuntu 14.04.3
PHP 7.0.8
Redis 3.0.3

### makeできる環境を整える
php7.x系が入っていることをチェック

```bash
$ php -v
```

phpizeが`php5-dev` ではなく `php7.0-dev` を入れないと
ただしくmakeできないので7.0のほうを入れる

```bash
$ sudo apt-get install php7.0-dev
```

### makeする
現在はPHP7用のphpredisは別ブランチで管理されているので
専用のブランチからmakeする

```bash
$ cd /usr/local/src
$ sudo git clone -b php7 https://github.com/phpredis/phpredis.git
$ cd phpredis
$ sudo phpize
$ sudo ./configure
$ sudo make && sudo make install
```

### makeしたファイルを元に設置
各種ファイルをコピー、シンボリックリンクを貼る

```bash
$ sudo cp modules/redis.so `php-config --extension-dir`
$ sudo cp rpm/redis.ini /etc/php/7.0/mods-available/
$ sudo echo "extension=redis.so" > /etc/php/7.0/mods-available/redis.ini
$ sudo ln -s /etc/php/7.0/mods-available/redis.ini /etc/php/7.0/cli/conf.d/redis.ini

# 以下はサーバー環境次第で設定
$ sudo ln -s /etc/php/7.0/mods-available/redis.ini /etc/php/7.0/apache2/conf.d/redis.ini
$ sudo ln -s /etc/php/7.0/mods-available/redis.ini /etc/php/7.0/fpm/conf.d/redis.ini
```

### 最後に動くか確認
以下コマンドで実際にプラグインが動いているかを確認する。

```bash
$ php -r "if (new Redis() == true){ echo \"OK \r\n\"; }"
```

OKが出れば完了。

### 参考リンク

* [How to install Redis and Redis php client \(Updated: Feb 26, 2016\) \- Anton Logvinenko](https://anton.logvinenko.name/en/blog/how-to-install-redis-and-redis-php-client.html)
* [Phpredis as Redis client in Ubuntu 12\.04 LTS \- LeaseWeb labs](https://www.leaseweb.com/labs/2013/08/phpredis-as-redis-client-in-ubuntu-12-04-lts/)
* [PHP7\.0\.3からRedisを使う \- 備忘録](http://eeggs.hatenablog.com/entry/2016/02/07/151013)
【three.jsのヘルパー解説集】 ⑧ FaceNormalsHelperの使い方


## FaceNormalsHelper
継承：THREE.Mesh
解説：オブジェクトの面法線を可視化してくれるヘルパーです。__独自で作ったジオメトリーや、外部から読み込んだモデルの法線を確認したい場合に重宝します。__

### デモ

![Untitled.gif](https://qiita-image-store.s3.amazonaws.com/0/42248/010d9e13-0300-9f54-8c25-5d725b1464d7.gif)

- [jsdo.itで確認する。](http://jsdo.it/sawa-zen/Szha)
- [ソースコードを確認する。](https://github.com/sawa-zen/three_js_demo/blob/master/helper/src/helper/FaceNormalsHelper.ts)　

### 実装例

```js:javascript
var geometry = new THREE.BoxGeometry(10, 10, 10, 2, 2, 2);
var material = new THREE.MeshBasicMaterial({color: 0xff0000});
var object = new THREE.Mesh(geometry, material);

var normal = new THREE.FaceNormalsHelper(object, 2, 0x00ff00, 1);

scene.add(object);
scene.add(normal);
```

FaceNormalsHelper(object, size, color, linewidth)

- object：面法線を表示させたいObject3Dオブジェクト
- size：法線の長さ
- color：法線の色
- lineWidth：法線の太さ
MacにHomeBrew,rbenv,bundlerをインストールする

主に自分のため、もしくはRubyに全然触ったこと無いiOS開発ユーザーが
そのまま端末のgemをガンガン入れて行かないようにして欲しいと願って作成したメモです。
iOSアプリを開発する方は下記の記事もご一読いただけると余計な心配事が減るかもしれません。
[bundler で cocoapods そのもののバージョン管理をする \- Qiita](http://qiita.com/shinkuFencer/items/821501cd0c5c460c1fea)

### Homebrewをインストールする

OSX向けのパッケージマネージャのHomeBrewを入れます。
ホームページに行くと丁寧にコマンドが書いてあるので
コピーして実行します。
http://brew.sh/index_ja.html

入ったかどうかを確かめます。

```bash
$ brew --version
0.9.5 (git revision 8328; last commit 2015-11-19)
```

### rbenvをインストールする

MacにはデフォルトでRubyが入っているのですが
気軽にバージョンアップ等ができないので
複数バージョンを管理することができるrbenvを入れます。

```bash
$ brew install rbenv ruby-build
```

インストールできると `rbenv` で叩けます

```bash
$ rbenv --version
rbenv 0.4.0
```

利用したいバージョンのRubyを落とします。
まずは利用可能なrubyのリストを確認します

```bash
$ rbenv install -l
Available versions:
  1.8.6-p383
  1.8.6-p420
  1.8.7-p249
  1.8.7-p302
  1.8.7-p358
  1.8.7-p370
  1.8.7-p371
  1.8.7-p374
  (中略)
  rbx-2.5.7
  rbx-2.5.8
  ree-1.8.7-2011.03
  ree-1.8.7-2011.12
  ree-1.8.7-2012.01
  ree-1.8.7-2012.02
  topaz-dev
```

上のリストの中から入れたいバージョンを指定して
インストールします。

```bash
$ rbenv install 2.1.0
```

インストールしたRubyは以下のコマンドでわかります。
※なおsystemはMacに最初から入っているRubyです。

```bash
$ rbenv versions
* system (set by /usr/local/var/rbenv/version)
  2.1.0
```

`global` でRubyのバージョンを切り替えられます。
システム全体で適用されるので、一部プロジェクトに適応したい場合は
`local` で変更して下さい。

```bash
$ ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
$ rbenv global 2.1.0
$ ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin15.0]
$ rbenv versions
  system
* 2.1.0 (set by /usr/local/var/rbenv/version)
```

これでRubyのいろいろなバージョンを使えるようになりました。


### bundlerをインストールして使う

Rubyのプラグイン、Gemは普通に使うとグローバルに入ってしまいます。
それを防ぐために特定ディレクトリに入れる仕組みがbundlerです。
今回はcocoapodsのインストールを例に記載します。

bundler自体もGemなので、Bundlerだけはグローバルにインストールします。

```bash
$ gem install bundler
```

なお新しいgemを入れたらrbenvでrehashしてください。
行わないとパスが通っていなかったりします。

```bash
$ rbenv rehash
$ bundler -v
Bundler version 1.12.4
```

bundlerの設定ファイルを作成します。

```
$ bundler init
```

`Gemfile` というファイルができるので
入れたいGemを記述します。今回はcocoapodsを追記します。

```ruby
# frozen_string_literal: true
# A sample Gemfile
source "https://rubygems.org"

gem 'cocoapods' , '0.39.0'
```
※詳しい書き方は「[gemfile - リファレンス - - Railsドキュメント](http://railsdoc.com/references/gemfile)」参照

`Gemfile` に書いた内容をインストールします。
インストール先のディレクトリとしては
メジャーな `vendor/bundle` を指定します。

```
$ bundle install --path vendor/bundle
```

実際に利用するときは頭に `bundle exec` をつけて実行します。
cocoapodの場合は `pod ほげほげ` で実行するので
以下の様な形で利用します。

```
$ bundle exec pod --version
0.39.0
```



## 参考URL

[rbenv で ruby の環境を整える - Qiita](http://qiita.com/ringo/items/4351c6aee70ed6f346c8)
[cocoapodsの仕組みとバージョン固定 - Qiita](http://qiita.com/AcaiBowl/items/f48f9d0f53f1448720ec)
AWSでAMIを使ってWordPressをさくっと立ち上げたらSSHできなかった件（解決済み）

タイトルの通りですが、AWSでWordPress立ち上げてみようと思い立ってみたらSSH時に（個人的に）予想外な「Permission denied (publickey).」に悩まされたので忘れないように書いておきます。

# 問題にぶつかるまでの経緯

1. https://aws.amazon.com/jp/getting-started/tutorials/launch-a-wordpress-website/ を見ながら。ぽちぽち。
2. ただし途中のステップ 2: インスタンスを構成する内の『 6. 次の画面で、キーペアを設定します。キーペアは、セキュアシェル (SSH) を使用する端末プログラムを介して EC2 インスタンスに接続する手段を提供するものです。[キーペアなしで実行]を選択し、EC2 インスタンスに接続するにはこのキーが必要であることを理解していることを示すために、チェックボックスをオンにします〜 』な手順のところでSSHしたいんじゃい！とキーを設定する
3. 無事にサーバ起動
4. WordPress立ち上がってる！手順通りログインも出来た！
5. ちょっといじりたいところあるからSSHしよう
6. **Permission denied (publickey).**
7. (ﾟДﾟ≡ﾟдﾟ)ｴｯ!?

ちなみにSSHするときはconfigに以下のものを書いていました。
（一部適当ですが重要な部分はそのままです）

```~/.ssh/config
Host yurichanblog
  HostName 999.999.999.999
  Port 22
  User ec2-user
  IdentityFile ~/.ssh/yurichanblog.pem
  ProxyCommand うんたらかんたら
```

ちなみにAWSのサーバたててログインするのは別にはじめてではありません。
はい、はじめてではないんです・・・！！！！ので！過去の自分を信じてハマっていたようです :scream: :scream: :scream: 

# 結論

+ AWSのリンク先の手順で立ち上げたときのOSは「Ubuntu」である
+ デフォルトなuserは「ubuntu」である 
+ 先ほどのconfig内は **いつもどおり userをec2-userとしていた**

ec2-userでやっていたらそれは *Permission denied (publickey).* ですよね。。
ちなみに、気づいたのは、手順が書いてあるAWSページのステップ 3: Web サイトを変更するの『WordPress インスタンスを選択し、[Actions] ボタンをクリックします。ドロップダウンメニューで、[Instance Setting]、[Get System Log] の順に選択します。』で確認出来るシステムログを改めて確認したからです。

一番下までみたら、どーんと、書いてありました。

**Ubuntu 14.04.4 LTS ip-10-0-0-252 ttyS0**

AMIを使うことが少なかったのでハマりました。おや？と思ったらぜひ基本に帰って System Log とか確認してみましょう、自分。
Windows 10の現状


<http://jp.easeus.com/infographics/windows-10-tips.html" title="Windows 10の現状―インフォグラフィック - EaseUS"><img src="http://jp.easeus.com/images/Infographic/Windows_10_Tips_and_Tricks---jp.png" alt="Windows 10の現状" /></a><p> <a href="https://jp.easeus.com" title="EaseUS">EaseUS</a>より</p>

より詳しい内容はこちら:[データ復元](https://jp.easeus.com/data-recovery-software/drw-free.html)、[パーティション変更](https://jp.easeus.com/partition-manager-software/free.html)、[バックアップソフト](https://jp.easeus.com/backup-software/free.html)。
gradleでJavaのmainメソッドを実行する

Androidアプリを作ってるときに、アプリ本体とは別にJavaのアプリケーションを実行したい場合がありますよね？

例えば、以下のようなときとか。

- CSVファイルからSQLiteのrawデータを生成、アプリの初期データとして格納したい
- CSVとかExcelの定義ファイルから、Javaのコードを自動生成して、アプリ側のファイルツリーに加えたい

そんなとき、apkの生成と同じように、gradleで実行できたらいろいろ嬉しいですよね？

## 実装

まず、新たにmoduleを作成し、そのbuild.gradleに下記を追加します。
（moduleの作成は、Android Studioから出来ますね）

```groovy:somemodule/build.gradle
apply plugin: 'application'

mainClassName = 'jp.co.hoge.fuga.Main'

run {
    if (project.hasProperty('args')) {
        args project.args.split('\\s+')
    }
}
```

実行時のプロパティを、main関数の引数に置き換えています。
'args'とか split しているあたりを変えることで、必要なシチュエーション毎に対応できるかと思います。

そして、mainメソッドを持つクラスを作成します。

```java:Main.java
package jp.co.hoge.fuga;

public class Main {
    public static void main(String[] args) {
        System.out.println("args = " + Arrays.asList(args));
    }
}
```

とりあえず、引数に渡ってきている配列を出力します。

settings.gradle に、moduleを追加したことを記載しておきます。

```settings.gradle
include ':app', ':somemodule'
```

## 実行

```
./gradlew somemodule:run -Pargs="/Users/foo/bar"
```

とすると、標準出力に `args = [/Users/foo/bar]` が表示されます。
`args[0]` に実行時のパラメータが渡ってきているので、あとは煮るなり焼くなりしたら良いと思います。

## 例

入力ファイルパスと、出力ファイルパスを受け取るアプリを作ったとします。
mainメソッドの、
0番目の引数：入力ファイルパス
1番目の引数：出力ファイルパス
という具合にするには、

```groovy:somemodule/build.gradle
run {
    if (project.hasProperty('in') && project.hasProperty('out')) {
        args = [project.in, project.out]
    }
}
```

として、

```sh
./gradlew convertanimation:run -Pin="/Users/hoge/fuga" -Pout="/Users/foo/bar"
```

といった形で実行してやれば良さそうです。

## 言い訳

あんまりgroovy力やgradle力が無いので、「普通はこうする」みたいなのがあれば、教えてほしいです :bow:
EasySCPで快適サーバ管理生活

手元のサーバの状態を一目で確認して、ちょっとした操作ならブラウザ上から済ませたいという方向け。
※セキュリティ対策等は、各自でしっかりと行ってください。

# Web上から、ステータスの確認・CronJobの追加まで
自宅や職場でサーバを管理している方、特に複数人で利用するサーバの管理、どうされてますか？
ステータス管理ならNagiosやZabbix、シブい所ではMRTG、それなりにコントロールするなら、もう少しちゃんとしたものが必要でしょうか。

自分も普段から何を使うか迷うのですが、[EasySCP](http://www.easyscp.net/forum/)という、手軽に使えてそれなりの機能を有しているソフトを見つけたので紹介します。

# どんなの？
これ一つで、現在のステータスからCronJobの追加、ユーザ・証明書の管理までこなせます。
![sample.JPG](https://qiita-image-store.s3.amazonaws.com/0/131348/794857e5-7cb9-1156-09e6-e415a019641a.jpeg)
もちろん日本語対応。

# とりあえずインストール
細かく説明するよりも、まずは自分で動かしてみるのが一番ですよね。
というわけでインストール手順。
CentOS6で動作を確認しています。

まず、システムをアップデートして。
```
$ yum -y update
```

動作にはEPELが必要なので、有効化。
```
$ rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
```

お約束ですが、SELinuxをオフ。
```
$ setenforce 0
```

ファイルをＤＬして、展開。
※ファイルについては、公式サイトから最新版をＤＬしてください。
```
$ cd /usr/src
$ wget http://www.easyscp.net/download/index.php/EntryFile/84-easyscp-2-0-0-rc-tar-gz/
$ tar xfvz easyscp-2.0.0.tar.gz
```

動作に必要なパッケージをインストール
```
$ cd easyscp-2.0.0
$ yum install $(cat ./docs/CentOS/centos-packages)
```

EasySCPのセットアップ
```
./easyscp-setup.sh
```

あとは、画面の指示に従って進めば、完了。

# 動作確認
インストールが無事に終了したら、以下のURLへアクセスしてみましょう。

http://{YourDomain}/setup/
例）ローカル環境ならhttp://localhost/setup/

こんな画面が出ましたか？
![000.JPG](https://qiita-image-store.s3.amazonaws.com/0/131348/5530a0aa-e2dc-b0c9-0fc2-504d67af791e.jpeg)
出ていれば、インストールは正常に完了しています。
入力項目を埋めて、"Next"をクリックして次の設定画面へ。
![001.JPG](https://qiita-image-store.s3.amazonaws.com/0/131348/99e2dc18-6164-8355-7fe7-1f560d0b7875.jpeg)
ここも、システムに関する設定ですね。
OSのバージョン、管理パネルにアクセスするためのアカウント設定などを入力しましょう。

# 設定の完了・ログイン画面
設定が完了すると、以下のログイン画面へアクセス可能となります。
![002.JPG](https://qiita-image-store.s3.amazonaws.com/0/131348/e05d1225-0ea6-f2c7-990a-3f736bd76d9b.jpeg)
先ほど設定したアカウント情報でログインし、早速ステータスなどを確認してみましょう。
正しく表示されていれば、特に問題はないはずです。
Tensorflowのアップデート方法

ここでは、pip3を用いたtensorflowのアップデート方法について解説します。
この記事は、OSXでのアップデート法なので環境(OS等)によって異なります。
詳しくは、[公式サイト](https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html)。

アップデートは、3段階に分かれています。
1. 旧バージョンのアンインストール
2. 環境変数の設定
3. アップデート

必要無さそうな箇所はスキップしてください。

# 1. 旧バージョンのアンインストール
ターミナルで
```
pip3 uninstall tensorflow
```
を実行する。

# 2. 環境変数の設定
emacs か何かで、``~/.bash_profile``に
```
export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/tensorflow-0.9.0-py3-none-any.whl
```
の行を追加。[OS& CPU/GPUによって変えるべし](https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html)。
これをやるには、
```
emacs -nw ~/.bash_profile
```
と打ち込んで、上記の行を追加して保存する。

``.bash_profile``の変更後、環境変数をロードするために
```
source ~/.bash_profile
```
を実行する。

# 3. アップデート
```
sudo pip3 install --upgrade $TF_BINARY_URL
```
で完了。
【JQuery】Swipeboxにおけるajax追加読み込み要素へのスライドショー効果適用

自分用のメモ書き程度なので参考程度でお願いします。
後で加筆するかもしれません。


非常に便利なSwipebox。

`<a href="###" class="swipebox" rel="gallery"></a>`
クリックした画像で指定されたURLをモーダルウィンドウで開き、
relで指定したものをスライドショーにしてページ内で遷移することが出来る。

# AJAXで追加読み込みした要素に効いてない####

こちらを例えばWORDPRESSの記事一覧（画像サムネイルが記事に該当）ページ内で、
「MORE」ボタンをクリックするとajaxローディングで新しい要素（記事）が読み込まれた場合、
それらの要素はスライドショー内に入らず、指定URLの画像も表示されないといったトラブルがあった。
使用ライブラリとバージョンは下記の通り。
* * *
jquery-2.2.4.min.js
Swipebox v1.3.0.2
* * *

# 解決策####
とりあえず、Swipeboxの現最新バージョン v1.4.4 を組み込んでみた。
それでも動かねえじゃねーかコノヤロウ。定番としてイベントをバインドするための記述に問題があるんじゃないかと見て、「jquery.swipebox.js」の299行目付近を修正で稼動した。
公式ではJQueryのバージョンは2.0.3を薦めているのにbindなのか･･･

`$( 'body' ).bind( 'touchstart', function( event ) {
↓
$( 'body' ).on( 'touchstart', function( event ) {`

使用ライブラリとバージョンは下記の通り。
* * *
jquery-2.2.4.min.js
Swipebox v1.4.4
* * *
AWS リージョンの短いエイリアスとしての空港コード

# tl;dr

AWS リージョンの短いエイリアスとして3文字の空港コードを使おう。

# 一覧

| リージョンコード | リージョン名                       | 空港コード | 空港名                                     |
|------------------|------------------------------------|------------|--------------------------------------------|
| us-east-1        | 米国東部（バージニア北部）         | IAD        | ワシントン・ダレス国際空港                 |
| us-west-2        | 米国西部（オレゴン）               | PDX        | ポートランド国際空港                       |
| us-west-1        | 米国西部（北カリフォルニア）       | SFO        | サンフランシスコ国際空港                   |
| eu-west-1        | 欧州（アイルランド）               | DUB        | ダブリン空港                               |
| eu-central-1     | 欧州（フランクフルト）             | FRA        | フランクフルト空港                         |
| ap-southeast-1   | アジアパシフィック（シンガポール） | SIN        | シンガポール・チャンギ国際空港             |
| ap-northeast-1   | アジアパシフィック (東京)          | NRT        | 成田国際空港                               |
| ap-southeast-2   | アジアパシフィック（シドニー）     | SYD        | シドニー国際空港                           |
| ap-northeast-2   | アジアパシフィック (ソウル)        | ICN (?)    | 仁川国際空港（？）                         |
| sa-east-1        | 南米 (サンパウロ)                  | GRU (?)    | グアルーリョス国際空港（？）               |
| ap-south-1       | アジアパシフィック (ムンバイ)      | BOM (?)    | チャトラパティ・シヴァージー国際空港（？） |

※ `(?)` は AWS による資料に記載がなく、筆者予想のもの

# 急いでない人向け

AWS を日々使い倒している諸姉諸兄におかれましては、全リージョン名を暗記していることは当然かと思います。

- [リージョンとアベイラビリティーゾーン - Amazon Elastic Compute Cloud](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html)

しかし、 `ap-northeast-1` や `us-west-2` というのは何かの名前（例えば、マルチリージョン構成におけるインスタンスや ELB の名称）の一部にリージョン識別子として入れるにはどうにも長いと思いませんか？私は思います。

そこで**[空港コード](https://ja.wikipedia.org/wiki/%E7%A9%BA%E6%B8%AF%E3%82%B3%E3%83%BC%E3%83%89)**です。正確には IATA 空港コード（3レターコード）です。

唐突に何言ってんだという感じですが、実は AWS 内部で符牒として使われているようなのです。

**公式のドキュメントに記載はありません**が、 `aws iad pdx` などで[検索してみる](https://www.google.co.jp/search?q=aws+iad+pdx)と AWS 発の資料がいくつか出てきます。

- [AWS Black Belt Techシリーズ Amazon VPC](http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-amazon-vpc-47025202/96)

また、 WorkSpaces のネットワークヘルスチェックサーバーのドメイン名の一部としても使われています。

- [クライアントポート - Amazon WorkSpaces](http://docs.aws.amazon.com/ja_jp/workspaces/latest/adminguide/client_ports.html)

空港コードはユニークだし、短いし、リージョンを示す名前として良さがある。と思いませんか？私は思います。
「Dlib FaceLandmark Detector」初期化処理を別スレッドで行う方法

# Dlib FaceLandmark Detectorの初期化時に画面が固まる問題

FaceLandmarkDetectorクラスのインスタンスを生成時、数秒間ほど画面が固まってしまう。
PCやiPhoneではギリで気にならない程度だが、Android端末ではちょっと焦る！

# 原因

Assetに同梱されている顔器官検出用学習データファイル（sp_human_face_68.dat）のサイズが**約100MB**もあり、コンストラクターでの初期化の際にそのファイルの読み込み処理に時間がかかるためだと思われる。

# 対策

初期化処理に時間がかかるのは仕方が無いとして、せめて画面が固まるのを何とかしたい。
重い処理をメインスレッドで同期的にではなく別スレッドを立てて非同期的に実行することでフレームを止める事無く初期化処理が可能になるはず。

手軽にマルチスレッドで処理するために今回は「[UniRx](https://assetstore.unity.com/packages/tools/integration/unirx-reactive-extensions-for-unity-17276)」を利用することにした。

### UniRxとは

> UnityでReactive Programmingを実現できる神Asset（無料）
>[https://assetstore.unity.com/packages/tools/integration/unirx-reactive-extensions-for-unity-17276](https://assetstore.unity.com/packages/tools/integration/unirx-reactive-extensions-for-unity-17276)
> （今回はObservable.Start()という処理を別スレッドで実行することが可能になるオペレータを使用）
>
> 具体的な使い方はgitのREADMEに詳しく書いてあります。
> [https://github.com/neuecc/UniRx](https://github.com/neuecc/UniRx)
> 



### コード例

あらかじめAssetStoreからUniRxをインポートしておいて、以下のコードに置き換える。

```csharp:ExampleScene.cs

public class ExampleScene : MonoBehaviour
{

     FaceLandmarkDetector faceLandmarkDetector;

     void Start()
     {
            Debug.Log("Start!");

            //次のフレームで実行
            Observable.NextFrame()
           .Subscribe(_ => initFaceLandmarkDetector(DlibFaceLandmarkDetector.Utils.getFilePath("shape_predictor_68_face_landmarks.dat")));

     }

     private void initFaceLandmarkDetector(string filePath)
     {
            //別スレッドでDlib初期化処理開始、終了を待って処理後の処理へ
            Observable.Start(() =>
            {
                // heavy method...
                faceLandmarkDetector = new FaceLandmarkDetector(filePath));
            })
            .ObserveOnMainThread() // return to main thread
            .Subscribe(x =>
            {
                Debug.Log("Finish!");

                //次のフレームで実行
                Observable.NextFrame()
                .Subscribe(_ => startGame());
            }); 
     }

     private void startGame()
     {
            //Dlib初期化処理後の処理
     }
}
```



この方法で画面が何秒間も固まるような事態は回避出来た。
あとは初期化処理終了待っている間に画面にローディングアニメを表示するなど、ユーザーに不安を与えないような演出を追加すればいい。

# 関連記事

- [UnityでDlibFaceLandmarkDetectorを利用した顔器官検出アプリ事始め](http://qiita.com/utibenkei/items/2f392d6fa00960f39e45)
【three.jsのヘルパー解説集】 ⑦EdgeHelperの使い方

## EdgeHelper
継承：THREE.Line
解説：オブジェクトのハードエッジとなっている部分を可視化してくれるヘルパーです。__全てのエッジを表示させるわけではないので、ワイヤーフレームを表示させたい場合はWireframeHelperを使用して下さい。__

### デモ

![Untitled.gif](https://qiita-image-store.s3.amazonaws.com/0/42248/14bff7db-e09c-c345-f8a9-c95ca0afe428.gif)

- [jsdo.itで確認する。](http://jsdo.it/sawa-zen/Qycn)
- [ソースコードを確認する。](https://github.com/sawa-zen/three_js_demo/blob/master/helper/src/helper/EdgesHelper.ts)　

### 実装例

```js:javascript
var geometry = new THREE.BoxGeometry(10, 10, 10, 2, 2, 2);
var material = new THREE.MeshBasicMaterial({color: 0xff0000});
var object = new THREE.Mesh(geometry, material);

var edges = new THREE.EdgesHelper(object, 0x00ff00);

scene.add(object);
scene.add(edges);
```

EdgesHelper(object, color, thresholdAngle)

- object：ヘルパーを表示させたいObject3Dオブジェクト
- color：エッジラインの色
- thresholdAngle：エッジとして表示させるラジアン角のしきい値。デフォルトは0.1
nginxでサーバ名が長いって怒られた

日本語ドメインなどnginxで長いサーバ名の場合、デフォルトで設置したままだと、こんなエラーが出る時があります。

```
could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
```

サーバ名が長すぎてハッシュサイズに収まんねーよという感じ？

そんな時は、nginxの設定ファイルを弄りましょう。

`vi /etc/nginx/nginx.conf`

```
http {
・・・
    keepalive_timeout  65;

# この記述をこの下辺りに入れておけばOK
    server_names_hash_bucket_size 64;

・・・
}

```

よいnginxライフを！
wordpress移行について　お名前.comの共有サーバーからAWS（アマゾン）へ移行する場合の、データベースsqlエクスポートとファイルダウンロード

今回はAWSへWPを移行する場合の、お名前.comからのwordpress関係のファイルダウンロードと、データベースのsqlエクスポートを紹介します。

まず、お名前.comのサーバーは共有サーバーの場合です。その場合は、SSH接続が基本できないようになっているので（たぶん）FTPで接続してダウンロードするしかありません。その場所のネット状態にもよるかと思いますが、基本めっちゃ時間かかるので、1~2時間は余裕で見ておきましょうね。

FTPの接続については、詳細は省きますが、お名前.comの場合は、

①サーバーNAVIにログイン
②左枠の「ご利用サービス確認」をクリック
③入りたいドメインのコントローラーパネルのところの「ログインする」をクリック
④Web設定のFTP・SSHアカウントっていうところをクリック
⑤アカウント、パスワード、サーバー名をGET！！

こんな流れになります。

そんでFTPに接続して、ドメイン以下のファイルをダウンロードしましょう！

そして、次、データベースのsqlエクスポートですね。

お名前.comではphpmyadminをダウンロードするしか方法がないようなので、そいつをFTPでぶち込んで、そっからダウンロードするしかないようです。

自分はこちらの記事を参考にさせていただきました！

http://rental-server-info.com/?p=3272#1

これ読んでおけば、だいたい大丈夫のはず！


新しいサーバーのホスト名ですが、それはお名前.comのホストサーバーになります。

サーバーNaviのコントローラーパネルのところに、データーベース設定という場所があるかと思いますので、そこをクリックして入ってみると、ホストサーバー名、アカウント、パスワードが出てますので、そのホストサーバー名でサーバーを新規作成、その後ログインする時は、そこのアカウントとパスワードをコピって入ればオッケーです！

後はphpmyadminでエクスポートを選んで、エクスポートしたら終了！

どうでしたか？できました？

もしでけへんやんけ、ハゲ！って方がいましたら、コメントしてください！一緒に悩みましょう！（自分は初心者なので、難しい質問には答えられません。一緒に悩むか、できる人に聞きに行くか、奇跡的に自分が知っていたら教えます！）

本日は以上です。
ありがとうございました。
Ubuntu 14.04にDocker 1.12をインストールする方法


## 背景
Dockercon 16で発表されたDocker 1.12にはDocker EngineにOrchestration機能であるSwarm modeが組み込まれました。しかしながらDocker 1.12はまだプレビュー版であり正式リリースはされていないため普通に `apt-get instal docker-engine` などをしてもインストール出来ません。

## apt-get 編

基本的には以下のページに従いますが、7の項番だけ以下のように変更します。

[Ubuntu — Docker-docs-ja 1.12.RC ドキュメント](http://docs.docker.jp/engine/installation/linux/ubuntulinux.html)


> 7.Ubuntu オペレーティング・システム向けのエントリを追加します。
> 利用可能なエントリは以下の通りです。
>　・Ubuntu Trusty 14.04 (LTS)

```(変更前)/etc/apt/sources.list.d/docker.list
deb https://apt.dockerproject.org/repo ubuntu-trusty main
```

　↓

```(変更後)/etc/apt/sources.list.d/docker.list
deb https://apt.dockerproject.org/repo ubuntu-trusty experimental
```

あとは残りの手順をこなしてくれればdocker 1.12がインストールできます。

```
$ sudo docker version
Client:
 Version:      1.12.0-rc4
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   e4a0dbc
 Built:        Wed Jul 13 04:02:03 2016
 OS/Arch:      linux/amd64
 Experimental: true

Server:
 Version:      1.12.0-rc4
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   e4a0dbc
 Built:        Wed Jul 13 04:02:03 2016
 OS/Arch:      linux/amd64
 Experimental: true
```

## curl -fsSL https://test.docker.com/ | sh 編
もっと簡単な方法を教えてもらいました

```
$ curl -fsSL https://test.docker.com/ | sh
[sudo] password for ubuntu:
```

```
$ sudo docker version
Client:
 Version:      1.12.0-rc4
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   e4a0dbc
 Built:        Wed Jul 13 03:54:54 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.0-rc4
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   e4a0dbc
 Built:        Wed Jul 13 03:54:54 2016
 OS/Arch:      linux/amd64
```
el-getでgit共有できるemacs環境構築


emacsの環境をgithub等で管理している場合、新規に環境構築しようとした時パッケージのダウンロードが問題となる。
理想としては

* パッケージのリストを列挙しておくと
* パッケージが無い場合は自動的にダウンロードしてインストールしてくれる
* すでにインストールしてある場合は何もしない

のように動いて欲しい。いろいろ方法はあるようだが、自分の環境では今までどれもうまく動いてくれなかった。

今回[el-get](https://github.com/dimitri/el-get)を使うことで上記理想の動作ができるようになった。

参考: http://tarao.hatenablog.com/entry/20150221/1424518030

## package.elについて

el-getはpackage.elやMELPAを自動的に参照してくれるため、init.elでそれらの設定をしている場合は消去してしまってかまわない。

## el-getの設定

init.elの冒頭に以下の記述を行う。

```elisp:~/.emacs.d/init.el
(when load-file-name
  (setq user-emacs-directory (file-name-directory load-file-name)))

(load (concat user-emacs-directory "init-el-get.el"))
```

init-el-get.elを作成しel-getのための設定と必要なパッケージを`el-get-bundle`で列挙していく

```elisp:~/.emacs.d/init-el-get.el
(add-to-list 'load-path (locate-user-emacs-file "el-get/el-get"))
(unless (require 'el-get nil 'noerror)
  (with-current-buffer
      (url-retrieve-synchronously
       "https://raw.githubusercontent.com/dimitri/el-get/master/el-get-install.el")
    (goto-char (point-max))
    (eval-print-last-sexp)))

(el-get-bundle helm)
(el-get-bundle helm-ls-git)
; 以下略
```

基本的にはこれだけ。パッケージ名はMELPAとほぼ同じなので迷うことはないだろうが`M-x el-get-list-packages`で確認することもできる。

`el-get-bundle`に対してはオプションでインストール元がいろいろ指定できる（[参考](https://masutaka.net/chalow/2015-06-17-1.html)）
Re:dashをdockerで起動する


dockerとdocker-composeが入っていればlinuxでもmacでも動くと思います。
（私はmacで起動しました）
dockerの使い方と導入方法は説明しません。

## Re:dash

[公式サイト](http://redash.io/)
[公式セットアップ手順](http://docs.redash.io/en/latest/setup.html)


クックパッド開発者ブログ
[ディレクターがSQLを使えてよかった話](http://techlife.cookpad.com/entry/2016/07/06/094332)
>この頃、社内ではre:dashというツールを各部署で使っています。re:dashでは、SQLで抽出したデータをそのままグラフにでき、任意の間隔で自動更新ができます。また、複数のグラフやデータを組み合わせてダッシュボードとしてまとめられます。
re:dashダッシュボードのサンプル
![20160704110904.png](https://qiita-image-store.s3.amazonaws.com/0/33251/6aae01fb-eb18-7116-c402-31048f40bcda.png "20160704110904.png")

クックパッドさんのブログを見て導入してみました。
社内にSQL文化を作る良いきっかけになりそうです。

## セットアップ

公式の手順通り
途中にエラーも出たけど起動に問題は無かった（たぶん・・・）

```bash
% git clone https://github.com/getredash/redash.git
% cd redash
% cp docker-compose-example.yml docker-compose.yml
% vi docker-compose.yml
# /opt/postgres-dataを自分の環境に合ったパスに変更
postgres:
  image: postgres:9.3
  volumes:
    - /opt/postgres-data:/var/lib/postgresql/data # ここ
% docker-compose up postgres
# postgresが無事起動したら終了
% ./setup/docker/create_database.sh
# 結果はエラーになるが特に問題は無かった
% docker-compose up # deamonにしたい場合は-d
```

Webページ

```
http://127.0.0.1:80
```

```
ID: admin
PASS: admin
```

ポートを変更したい場合はymlを修正

```bash
% vi docker-compose.yml
redash-nginx:
  image: redash/nginx:latest
  ports:
    - "80:80" # ここ
  links:
    - redash
```

## データソースを追加

Webページから参照したDBの情報を設定（ここではMySQL）

Settings > DATA SOURCES > NEW DATA SOURCES

![スクリーンショット 2016-07-14 17.11.29.png](https://qiita-image-store.s3.amazonaws.com/0/33251/149d7035-7ce8-366a-74f5-9b85cf43d367.png "スクリーンショット 2016-07-14 17.11.29.png")

踏み台経由でDBに接続する場合はautosshが便利


```bash
# mac
% brew install autossh
# ubuntu
% apt-get install autossh
```

```bash
# autossh -f -M 0 -N -L [バインド]:[DBサーバ] [踏み台]
% autossh -M 0 -f -N -L 127.0.0.1:13306:127.0.0.1:3306 user@example.com
```

## CLI

webページでのユーザー作成がメール認証だった
redashのメール設定がうまく出来なかったのでCLIでユーザー作成

```bash
% docker-compose run redash bash
% cd /opt/redash/current
% ./bin/run ./manage.py users create [name] [mail] 
```
Wordpressでimgタグにsrcsetとなるのを無効にする

Wordpress4.4からレスポンシブイメージというのが実装された。
imgタグにsrcsetというのが出るようだ。

（WP Offload S3 Liteというプラグインを途中から導入したために過去分の画像の表示が上手くいかなかったため・・・）

レスポンシブイメージの機能を無効化の方法は、

functions.phpに1行追加。

```php:functions.php
add_filter( 'wp_calculate_image_srcset', '__return_false' );
```
【Unityエディター拡張】「戻る/進む」機能を追加するエディター拡張を作ってみた

#はじめに
「さっきのアセット、どこにあったっけ....」

アセットを選択したとき、直前に選んでいたアセットがどこにあったのか分からなくなることがあります。
アセットが大量にあると探すのもひと苦労だったりします。

そんなとき、過去に選択したアセットをUnityエディターに覚えさせておいて、遡って選択できるようにしたら便利なのでは？
と思って「戻る/進む」機能をUnityへ追加するエディター拡張を作ってみました。

Unityのバージョンは5.3.5f1です

# 使いかた
1.アセットをクリックします 
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/0b3f1121-f96a-0a2a-f31c-a5b0b36e0fad.png)

2.別のアセットをクリックします
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/2bdf4213-b66f-7f14-8fef-8a0c29082498.png)

3.Ctrl と - を同時押しするとアセットを遡って選択します。(戻る)
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/0b3f1121-f96a-0a2a-f31c-a5b0b36e0fad.png)

便利かも・・・?

Shift と Ctrl と - を同時押しすると逆方向へ遡って選択できます。(進む)

# ソースコード
``` SelectionHistory.cs
#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;

[InitializeOnLoad]
public class SelectionHistory
{
    static int pos = -1;
    static List<Object> history = new List<Object>();
    static bool lockHistory = false;

    /// <summary>
    /// エディター起動時に呼ばれる
    /// </summary>
    static SelectionHistory()
    {
        Selection.selectionChanged += SelectionChanged;

        EditorApplication.projectWindowItemOnGUI += (guid, selectionRect) =>
        {
            lockHistory = false;
        };
    }

    /// <summary>
    /// 別のアセットを選択したら呼ばれる
    /// </summary>
    static void SelectionChanged()
    {
        if (lockHistory) { return; }
        if (Selection.activeObject == null) { return; }
        if (history.Count > 0 && history[history.Count - 1] == Selection.activeObject) { return; }

        if (pos < history.Count - 1)
        {
            history.RemoveRange(pos + 1, history.Count - pos - 1);
        }

        history.Add(Selection.activeObject);
        pos = history.Count - 1;
    }

    /// <summary>
    /// 一つ前のアセットを選択
    /// </summary>
    [MenuItem("Assets/Navigate Backward History %-")]
    static void Backward()
    {
        lockHistory = true;
        if (Selection.activeObject == null)
        {
            Selection.activeObject = history[pos];
        }
        else
        {
            pos--;
            Selection.activeObject = history[pos];
        }
    }

    /// <summary>
    /// 一つ後のアセットを選択
    /// </summary>
    [MenuItem("Assets/Navigate Forward History %#-")]
    static void Forward()
    {
        lockHistory = true;
        pos++;
        Selection.activeObject = history[pos];
    }

    /// <summary>
    /// Validate Backward
    /// </summary>
    [MenuItem("Assets/Navigate Backward History %-", true)]
    static bool ChkBackward()
    {
        return pos > 0;
    }

    /// <summary>
    /// Validate Forward
    /// </summary>
    [MenuItem("Assets/Navigate Forward History %#-", true)]
    static bool ChkForward()
    {
        return pos < history.Count - 1;
    }
}
#endif // UNITY_EDITOR
```

<br>
UE4には戻る/進む機能があるのでUnityにも標準でついててほしいですね（今後のアップデートに期待)

#参考
Unityでショートカットキーの自作
http://qiita.com/okuhiiro/items/f6d0f0fe99d04fe03e83
Docker のストレージ関連の事柄を調べる時に気をつけたほうが良いこと

# 概要

storage driver と graph driver (graph?) の違いをよくわかっていなかったようなので、調べ始めたら、
いろいろ混同しているような気がしたので、まとめてみようと思った。

# 結論

似ているが違うものをきちんと理解したほうが良い



# 似ているようで違うかもしれないもの

調べたら追記する予定。
忘れないように、日本語のドキュメントへのリンク

* storage driver
 * [イメージ、コンテナ、ストレージ・ドライバの理解 — Docker-docs-ja 1.12.RC ドキュメント](http://docs.docker.jp/engine/userguide/storagedriver/imagesandcontainers.html)
* graph driver (graph?)
 * これについてはどこをみてよいのかがわかっていない。
* volume plugin
 * [Docker プラグインの理解 — Docker-docs-ja 1.12.RC ドキュメント](http://docs.docker.jp/engine/extend/plugins.html)
 * [Docker ボリューム・プラグインを書く — Docker-docs-ja 1.12.RC ドキュメント](http://docs.docker.jp/engine/extend/plugins_volume.html)
* data volume
 * [コンテナでデータを管理 — Docker-docs-ja 1.12.RC ドキュメント](http://docs.docker.jp/engine/userguide/containers/dockervolumes.html)

## Graph driver について

Graph driver の定義がまだよくわかっていない。
他のはドキュメントがそれぞれあるようだけど。

## -v での絶対パスと、相対パスの違いを学んだ

* [コンテナでデータを管理 — Docker-docs-ja 1.12.RC ドキュメント](http://docs.docker.jp/engine/userguide/containers/dockervolumes.html#mount-a-host-directory-as-a-data-volume) 

上記のページより引用

> コンテナ内のディレクトリ は、/src/docs のように、常に絶対パスが必要えす。ホスト側のディレクトリ は相対パスでも 名前 でも構いません。ホスト側のディレクトリ に対して絶対パスを指定したら、Docker は指定したパスを拘束マウント（bind-mount）します。この時に 名前 の値を指定したら、Docker は指定した 名前 のボリュームを作成します。
puredataでfizzbuzz

#概要
puredataでfizzbuzzやってみた。
#写真
![pd.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/e9b12967-648d-f89d-7fed-ec81d4ccdacf.jpeg)

#サンプルコード
```
#N canvas 177 43 516 548 12;
#X floatatom -24 108 5 0 0 0 - - -;
#X obj -24 7 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
;
#X obj 104 103 + 1;
#X obj -19 471 print;
#X msg -47 265 fizzbuzz;
#X obj -37 167 mod 15;
#X obj 39 227 mod 5;
#X obj 37 285 select 0;
#X obj 126 232 mod 3;
#X obj 124 285 select 0;
#X msg 31 337 buzz;
#X msg 124 345 fizz;
#X obj 33 72 float 1;
#X obj 2 35 metro 700;
#X obj 228 182 spigot;
#X msg 193 324 1;
#X msg 306 216 0;
#X obj -48 205 select 0;
#X obj 38 179 spigot;
#X obj 124 178 spigot;
#X msg 2 241 1;
#X msg 90 319 1;
#X msg 173 205 0;
#X msg 87 203 0;
#X connect 0 0 5 0;
#X connect 0 0 18 0;
#X connect 0 0 19 0;
#X connect 0 0 14 0;
#X connect 1 0 13 0;
#X connect 2 0 12 1;
#X connect 4 0 3 0;
#X connect 5 0 17 0;
#X connect 6 0 7 0;
#X connect 7 0 10 0;
#X connect 7 1 21 0;
#X connect 8 0 9 0;
#X connect 9 0 11 0;
#X connect 9 1 15 0;
#X connect 10 0 3 0;
#X connect 11 0 3 0;
#X connect 12 0 2 0;
#X connect 12 0 0 0;
#X connect 13 0 12 0;
#X connect 14 0 3 0;
#X connect 14 0 16 0;
#X connect 15 0 14 1;
#X connect 16 0 14 1;
#X connect 17 0 4 0;
#X connect 17 1 20 0;
#X connect 18 0 6 0;
#X connect 18 0 23 0;
#X connect 19 0 8 0;
#X connect 19 0 22 0;
#X connect 20 0 18 1;
#X connect 21 0 19 1;
#X connect 22 0 19 1;
#X connect 23 0 18 1;

```
bashで長いオプション解析をするためのスクリプト

# 解決する問題

  * 参考： [bash によるオプション解析](http://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb)
  * `getopts` ではロングオプションが解析できない
  * `getopts` のオプション指定方法が覚えられない
  * スクリプトの半分くらいがオプション解析になる
  * だいたいボイラープレートっぽい
  * ヘルプとオプション解析を同時にメンテするのが辛い

# 解決策

ヘルプ用のテキストと引数を解析して、環境変数に設定するスクリプト

https://github.com/team-lab/longoption

を作りました。ご利用ください。ライセンスはMITです。

## インストール

longoption.sh を適当な名前でPATHの通ったところにおいて、実行権限をつけてください。

## 基本的な使い方

```bash
# まず、ヘルプを用意します
HELP="
  --opt1 OPTION1   値付きのオプション１です
  --opt2 OPTION2   値付きのオプション２です
  --flag           値なしのオプション（フラグ）です
"

# ヘルプを longoption.sh のひとつ目の引数として渡し、残りも渡します。
# 出力結果を eval すると（ダブルクオートが大変なことになっているけど大事）
eval "$(longoption.sh "$HELP" "$@")"

# 結果を環境変数で受け取っています
echo opt1=$OPTION1
echo opt2=$OPTION2
echo flag=$FLAG

# ヘルプは LONGOPTION__HELP_TEXT に入っていますので、必要ならそれを表示します
if [ -z "$OPTION1" ];then
  echo "$LONGOPTION__HELP_TEXT" # 
  exit
fi

# オプションとして有効でなかった引数は LONGOPTION__OTHER_ARGS に入っているので、それを利用してエラーを出したり、さらなる解析をしたりできます
if [ ${#LONGOPTION__OTHER_ARGS[@]} != 0 ];then
  echo "未知の引数が指定されています ${LONGOPTION__OTHER_ARGS[@]}"
  echo "$LONGOPTION__HELP_TEXT"
  exit -1
fi
```

こんな感じです。大抵の場合はこれで事足りるのではないかと思います。`aws cli` 作りたい時とか。

LONGOPTION__OTHER_ARGS に解析できなかった引数が入っているので、それを再度解析して、短いオプションや引数の解析などを行ってください。

動作的には、ヘルプ文の中の `/^\s*--([a-z][-a-z0-9]*)\s*([A-Z][_A-Z0-9]*)/` を解析して、 `\2` があれば値付きオプション、なければフラグとして扱います。フラグの場合はフラグ名を `tr [-a-z] [_A-Z]` した環境変数に 0 か 1 で値を入れます。

フラグは `--no-flag` のように反転フラグ宣言することができます。この場合、環境変数 `FLAG` に 0 が入ります。（通常フラグはデフォルトが 0 で指定されれば 1 だが、反転フラグ宣言された場合、デフォルトは 1 で、指定されれば 0 です。値付きオプションの場合、デフォルトは空文字です）

ヘルプ文中に幾つかプラグマ指定することができ、ヘルプ文中にパースを誤作動させそうな文書を含みたかったり、隠しオプションを指定したい場合などに利用してください。

 * `LONGOPTION:` この文字列で始まった場合、その行は LONGOPTION__HELP_TEXT に含まれない（オプションの指定はできる）
 * `LONGOPTION:STOP_PARSE` この文字列の行以降は、オプション指定が無視される（ LONGOPTION__HELP_TEXT には含まれる）
 * `LONGOPTION:START_PARSE` この文字列の行は LONGOPTION:STOP_PARSE の効果を解除する 
 * `LONGOPTION:STOP_HELP` この文字列の行以降は LONGOPTION__HELP_TEXT に含まれなくなる（オプションの指定がされていれば有効）
 * `LONGOPTION:START_HELP` この文字列の行は LONGOPTION:STOP_HELP の効果を解除する 


# 環境変数による動作

環境変数 `LONGOPTION` に引数をしてすることで、いくつか動作を変更できます。

 * `--prefix PREFIX` を指定することで、オプション解析結果を入れる環境変数名に接頭語をつけることができます。例えば `LONGOPTION='--prefix ARGS_'` のようにすると `--hoge HOGE` の結果は `ARGS_HOGE` に入ります。
 * `--import` を指定することで、オプション値のデフォルト値を環境変数から読み込みます。これが指定されない場合、デフォルト値は、値付きオプションの場合は空白、フラグの場合は0（反転フラグの場合は1）です。未指定か空白か、などの判定はできません。
 * `--stop STOP` を指定することで、オプションの解析を停止する文字列を指定することができます。例えば`LONGOPTION='--stop --'` の用に指定すると、`--hoge HOGE -- --huge HUGE` という引数があっても、`--huge HUGE` の部分は解析されません。

# テストとサポート

Mac osx の bash3、 git for windwos の bash4、travis-ci の bash4 などで動くことをテストしています。

# 今後

短いオプションの解析はいろいろパターンがあり過ぎてちょっと難しい・・ `-la` みたいな連結した指定方法を許すかとか、ヘルプの書式とか反転フラグの指定方法（ `+x` ？）とか

インストール方法を考える（いい案募集・・）

英語を何とかする
[OSX] Auto Layout によるレイアウト変更にアニメーションをつける ( Swift )

##Auto Layoutの働きにより起こる変化をアニメーション表示する

Appleが公開してる Auto Layout ガイドが微妙に間違っていたのと、ついでにSwiftで書くにはどうしたらいいかのメモ
####Case1 . NSLayoutConstraintのconstantプロパティを単に変更するだけの簡単なケース

~~~swift
targetConstraint.animator().constant  = 30
~~~
このように NSLayoutConstraintのanimator関数を経由しconstantを変更すると簡単にアニメーションできます。ただこの場合、NSViewに対してNSLayoutConstraintをaddしたりremoveしたりしてレイアウトを制御する、といった高度な処理をアニメーション化できません。

#####Case2.対象となるViewをLayerBasedにしてアニメーションさせる
対象のViewがLayerBasedになっている場合、NSAnimationContext.runAnimationGroupのブロック内部で、NSViewのlayoutSubtreeIfNeededを呼び出すことで、Layoutが変更する様をアニメーション化させることができます。

~~~swift
//targetViewの子要素としていくつかのNSViewがAutoLayoutで配置されているとして
targetView.layoutSubtreeIfNeeded() //まずレイアウトを確定させる
/*
 このブロックに、レイアウト変更をともなうNSLayoutConstraintの処理を好きに描く
*/
NSAnimationContext.runAnimationGroup(
     { context in
    　 context.allowsImplicitAnimation = true
       self.targetView.layoutSubtreeIfNeeded()            
     }, 
      completionHandler: {
          //好みに応じてアニメーション終了時の処理を記載
      }
)
~~~
GCS | $ gsutil cp -n  ( ファイルが既に存在する場合にコピーしないオプション )

表題の通り。
こんな感じでスキップしてくれる。

```
$ gsutil -n cp gs://example_bucket/from.txt gs://example_bucket/to.txt

Skipping existing item: gs://example_bucket/example.txt
```

# 参考

- http://stackoverflow.com/questions/11591536/google-cloud-storage-gsutil-copy-files-skip-existing-do-not-overwrite








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
新人プログラマーの軌跡　#6　MySQLの型


初めてMySQLを触って3週間。
触らなくなって1週間が経ちました。

このままではせっかく入れた知識が抜けていってしまいます・・・

そこで記憶が行方不明になってしまわぬ為にも、
基礎的なMySQLの型について復習しておきます。



#MySQL
## 数値型
### int　
- 整数を格納する。
- 他にも4種(tinyint・smallint・mediumint・bigint)あり、格納可能な数字の範囲が異なる。　
- unsignedで整数のみの指定で範囲は正に限定される。また数値の範囲は不変。
- zerofillで足りない桁数分、０を追加する。　　※zerofillはunsignedの拡張である。

接尾語としてintがついているので覚えやすい。

### double 
- 小数を格納する。
- floatもあるが格納範囲が異なる、doubleの方が大きい。
- double(α,β)の形で指定。αは全体の桁数、βは小数点以下の桁数。
- 指定した小数の桁数以上を格納してもエラーは出ないが、整数部分の桁数が格納可能桁数より大きい場合はエラーとなる。
- unsigned・zerofillあるが範囲は減少する。

##日付・時間型
5種類(timestamp・time・year)あるが、2種類を扱う。
###date 
- フォーマット: 'YYYY-MM-DD' 
 
###datetime 
- フォーマット: 'YYYY-MM-DD HH:MM:SS' 


範囲はどちらも1000年 - 9999年までである。ちなみに '2016-06-26 05:16:09' を '2016-6-26 5:16:9' と書くことも出来るので、状況によって使い分けたほうが簡略化できる。

網羅する範囲が広く、他の3種類はそこまでの網羅性がないので上の2つを使えばよいのかなと。

##文字列型
###char・varchar
- varはvaryからきており変化を意味する。→　charは固定長・varcharは可変長である。
- 表示されるときは変わらない。
- charは指定した固定長より、小さなデータを格納すると末尾にスペースを自動的に挿入する。
- データ容量から見ればvarcharに分があるのだが、charは全て同じ容量で扱うために、処理スピードの向上が見込める。
- charやvarcharの後ろには文字セットと照合順序を記述することが出来る。
- ``SHOW CHARACTER SET;``　で文字セット一覧を参照。
- ``mysql> show collation like 'utf8%';``　で照合順序を参照できる。

似た型としてtextがある。
###text 
- varcharのバイト数を指定しなかったものと変わりない。

###binary・varbinary
-どちらもバイナリデータとして格納されている。

似た型としてblobがある。
###blob 
- varbinaryのバイト数を指定しなかったものと変わりない。

###enum・set
- 選択数の違いがあり、enumは１つ・setは複数選択することが出来る。
- {}内の選択肢に''を付け忘れるとエラー。(このせいで3時間も悩んでいたので、もう忘れないです。)

#まとめ
MySQLの型について紹介いたしました。
調べてみると、差異の影響が予想できないものが多く
実際に使ってみないと分からないというのが本音です。

けど、様々な型が用意されているのはそれが便利だから。
意味が分からなくても辛抱強く頑張ろっと
もっと簡単にnode.jsを使いたい ~関数ホスト~


有給消化中、漫然と起きたり寝たり。
このままでは腐りそうだと、リハビリがてらあまり触れていなかったnode.jsをがっつり触っています。

で。

# もっと簡単にnode.jsを使いたい。

これ。

特に、ちょっとしたAPIサーバを立てるのに、expressが～、とかmongoが～と、いろいろ定型文を書いていくのも面倒だし、相乗りさせる時にポートが、とかnginxのリバースプロキシが、とかそういうのを考えるのが超面倒です。
マイクロサービスのフレームワークなんてのも考えると面倒だし。

PHPの頃は、phpファイルを書いて、適当に載せれば何とでもなったのに。
デプロイは乗っけるだけで終わり。

「じゃあPHPで書けばいいじゃん」みたいな発想で、前職では結構本当にPHPで解消していたのですが、これを機にそういう感じの関数 as JSON APIサーバを作ってみました。

## 使ったもの
- node.js
- express
- json-web-token
- nedb

## 出来上がったもの
https://github.com/zrelyydereva/node-function-server

## 適当な説明
　userland以下の、functionsと、staticの下に、配信したものを置くと、そのまま公開してくれる便利な子。
　関数を書き換えると、勝手にリロードしてくれる賢い子。

## ちょっと細かい話

- リクエストされたURLの、一つ目と同名のjsファイルがfunctionsの下にあれば、解釈して、二つ目の関数を実行します。
- アンスコ一つで始まるfunctionは、トークンがないと実行できないです。
- アンスコ二つで始まるfunctionは、外から実行できないです。
- クエリ文字列、POSTされたbodyを、そのまま列挙したものが関数の引数になります。
- 最終引数にはユーザ情報も入っています。
- どのjsにも、authenticate関数があり、userid、パスワードを渡すと（それが有効ならば)JWTを返却します

　jsファイルがない場合、以下の順序で静的ファイルが返却されます。 
- static/group_xxx/リクエストパス(トークンがある場合、かつグループのフォルダがある場合）
- static/authed/リクエストパス(トークンがある場合、かつグループのフォルダがない場合）
- static/public/リクエストパス(トークンがない場合）

　こんな感じで、おおざっぱに作ってみました。
　作りかけで、結局実装しないものも入ってはいますが、備忘録がてら、一旦書き終えようかと。
　次回はもう少しこまごま書いていこうと思います。