OmniAICreator/Qiita-1.07M huggingface dataset:
Jenkinsの設定やらjob定義やらをまるごとgitやbitbucketにバックアップする方法


## 前提
* Jenkinsが稼働している
* Jenkins実行ユーザーは認証なしにsudoが可能
* Jenkins実行ユーザーは/var/backupに書き込み可能

## 準備
* JenkinsにthinBackupプラグインを導入
	* thinBackupプラグインの設定

		|category|item|value|
		|:--|:--|:--|
		|Backup settings|||
		||Backup directory|/var/backup/jenkins|
		||Backup schedule for full backups||
		||Backup schedule for differential backups||
		||Max number of backup sets||
		||Files excluded from backup (regular expression)||
		||Wait until Jenkins/Hudson is idle to perform a backup||
		||Backup build results||
		||Backup 'userContent' folder||
		||Backup next build number file||
		||Clean up differential backups||
		||Move old backups to ZIP files|on|
	
## バックアップ実行Shell

* 「ビルド」>「シェルの実行」へ下記スクリプトを設定

	```bash
	# -----------------------------------------------------
	#	paramters 
	# -----------------------------------------------------
	
	# thinBackupに指定したバックアップ先ディレクトリ
	THINBACKUP_DIR=/var/backup/jenkins
	
	# bitbucket認証&レポジトリ情報
	GIT_USERNAME="your-git-username"
	GIT_PASSWORD="your-git-password"
	GIT_REPOSITORY="your-git-repository"
	GIT_URL="https://${GIT_USERNAME}:${GIT_PASSWORD}@path/to/your/git/repository.git"
	
	# jenkins認証情報
	# 認証不要の場合はユーザー名、パスワード共に空文字を設定
	JENKINS_USERNAME="your-jenkins-username"
	JENKINS_PASSWORD="your-jenkins-password"
	JENKINS_URL="http://localhost:8080"
	
	# -----------------------------------------------------
	#	begin 
	# -----------------------------------------------------
	
	# =====================================
	# 	Git clone
	# =====================================
	#rm -rf ${WORKSPACE}/${GIT_REPOSITORY}
	rm -rf ${THINBACKUP_DIR}
	git clone ${GIT_URL} ${THINBACKUP_DIR}
	sudo chown -R jenkins:jenkins ${THINBACKUP_DIR}
	
	
	# thinBackup execute
	
	# Jenkins認証が必要な場合
	if [ -n "${JENKINS_USERNAME}" ] && [ -n "${JENKINS_PASSWORD}" ] ; then
		curl -X POST ${JENKINS_URL}/j_acegi_security_check -d "j_username=${JENKINS_USERNAME}&j_password=${JENKINS_PASSWORD}" -c ./cookie.txt
		curl -X GET  ${JENKINS_URL}/thinBackup/backupManual -b ./cookie.txt
	
	# Jenkins認証が不要な場合
	else
		curl -X GET  ${JENKINS_URL}/thinBackup/backupManual
	fi
	
	sleep 5
	
	# =====================================
	#	Git commit & push
	# =====================================
	
	cd ${THINBACKUP_DIR}
	
	# make rollback point
	
	echo "*** make rollback point ***"
	echo "build #${BUILD_NUMBER}" > ${THINBACKUP_DIR}/build_number.txt
	
	git add -A
	
	GIT_DIFF_ROLLBACK=`git status -s | wc -l`
	if [ "${GIT_DIFF_ROLLBACK}" != 0 ] ; then
		git commit -a -m "make rollback point - build #${BUILD_NUMBER}"
		git push origin master
	fi;
	
	
	# log trunk modified
	
	echo "*** log trunk modified ***"
	# trunkディレクトリをFULL-*の内容で置き換える。
	rm -rf ${THINBACKUP_DIR}/trunk
	cp -r FULL-* ${THINBACKUP_DIR}/trunk
	
	git add -A
	
	GIT_DIFF_MODIFIED=`git status -s | wc -l`
	if [ "${GIT_DIFF_MODIFIED}" != 0 ] ; then
		git commit -a -m "log trunk modified - build #${BUILD_NUMBER}"
		git push origin master
	fi;
	
	```
Bash スクリプト内でユーザが任意の意味を付与できるリターンコードの範囲について（あるいは、Ansible の shell モジュールで冪等な処理を一タスクで書くには）


結論を先に書くと、79～125 です。

シェルスクリプトを書いていて、リターンコードによってその後の処理を分けたい場合などに、一体どの範囲のコードを好きに使って良いのかが分からなかったので調べたメモ。



Bash については、右記に記載があります。 ∥ [Exit Codes With Special Meanings](http://tldp.org/LDP/abs/html/exitcodes.html)

たとえば、Bash のコードで言うと下記など。 ∥ [shell.h](https://opensource.apple.com/source/bash/bash-92/bash-3.2/shell.h)

~~~~c:shell.h
...

/* Special exit statuses used by the shell, internally and externally. */
#define EX_BINARY_FILE	126
#define EX_NOEXEC	126
#define EX_NOINPUT	126
#define EX_NOTFOUND	127

...
~~~~

しかしそれとは別に、libc 界隈あたりでエラーをカテゴライズして exit コードを統一しようという動きもあったようで、それは /usr/include/sysexits.h に記載されています。

以上から、こと Bash シェルスクリプトに限って言うと好きに使って良いのは 79～125 となりますが、ひょっとすると “79” はもっと上がってくるかも知れないので、余裕を持って 100 くらいから使っておきましょうかね。

そもそもなぜそんなことが気になったかというと、Ansible の shell モジュールで、冪等な処理を一タスクで書きたかったからです。本当は、状態を確認するタスク、判別するタスク、状態を書き換えるタスクなどに分けるべきなのかも知れませんが、面倒くさいので、一タスクで出来れば良いなと。で、その場合は処理の結果、状態変更が「あった」「なかった」をリターンコードで表したかったので、好きに使えるレンジを調べていたんですね。

結果としては、以下のような感じか。Git の設定が規定のものではなかったら、規定のものに変更する Ansible Playbook タスクです。

~~~~yaml:
- name: Git config (name, email) is set
  args:
    executable: /bin/bash
  shell: |
    set -eu
    rc=0
    if test \
     "$(git config --global user.name)" != "{{git_user_name}}" -o \
     "$(git config --global user.email)" != "{{git_user_email}}"
    then
      git config --global user.name "{{git_user_name}}"
      git config --global user.email "{{git_user_email}}"
      rc=100 # EX__MAX (78) < 100 < EX_NOEXEC (126)
    fi
    exit $rc
  register: ret
  failed_when: ret.rc != 0 and not 79 <= ret.rc <= 125
  changed_when: ret.rc == 100
~~~~

要点としては、

* 何をもってエラーとするか（`failed_when`）については Bash 的に、
* 何をもって変更が加わったとするか（`changed_when`）については当該タスク内の取り決めに従って、

判断してやれ、と。この二点がルールを守っていれば良いということですかね。このイディオムで書き進めます。

あ、本件に関してはどちらでも良いのですが、Bourne Shell (/bin/sh) ではなく Bash で実行して欲しい場合には argument に `executable` を指定する必要がありますね。
【Unity】Projectウィンドウの現在のフォルダにAssetを作る。

UnityにScriptableObjectを作るメニューを追加しようとして

あれ、
Projectウィンドウの現在いるフォルダにUnityで普通にAssetを作った時みたいに
名前も編集状態になるようにするにはどうすればよかったんだっけ？

と悩みまくったので記事に残して置こうと思う。
Assetを作るメニューを追加したときにいつも忘れてしまう。

```cpp:MyMenu.cs
using UnityEngine;
using UnityEditor;

public class MyMenu
{
	/// <summary>
	/// 空のScriptableObjectを作る。
	/// </summary>
	[MenuItem("Assets/Create/ScriptableObject")]
	public static void createScriptableObject()
	{
		ProjectWindowUtil.CreateAsset(ScriptableObject.CreateInstance<ScriptableObject>(), "New ScriptableObject.asset");
	}
}

```

AssetDatabase.CreateAssetではなくて
ProjectWindowUtil.CreateAssetを使う。

プロジェクトウィンドウを扱うのだから、ProjectWindowUtilを使うのは
当たり前のような話ですが、似たような機能が多くて混乱しますね。









-------------------------------------------------
この記事を書いたちょっと後に「UnityEngine.CreateAssetMenuAttribute」というものに出会う。

これを使えば、さっき書いた事がもっと簡単にできるという話です。
このページで詳しく書いてあるのでリンク貼っときます。
http://baba-s.hatenablog.com/entry/2015/06/13/000000
webpackでreactのlive-reloadを設定してみた

いろいろ書いてあって何がbestなのかわかりませんが、試行錯誤してとりあえずできた方法をまとめておきます。

## npm install

    $ npm i -D webpack-dev-server
    $ npm i -D react-hot-loader

## webpack.config

### loadersの一番初めにreact-hotを書く

    module: {
        loaders: [{
            test: /\.jsx?$/,
            include: [path.resolve(__dirname, 'src')],
            loaders: ['react-hot', 'babel', 'eslint-loader'],
        }],
    },

### pluginsを追加

    plugins: [
        ...,
        new webpack.HotModuleReplacementPlugin(),
    ]

### entryを追加

    entry: [
        'webpack-dev-server/client?http://localhost:8080', // WebpackDevServer host and port
        'webpack/hot/only-dev-server', // "only" prevents reload on syntax errors
        './src/app.js',
    ],

### outputのpublicPathがコンパイル後のパスと同じになるようにする


    output: {
        path: path.join(__dirname, 'public'),
        filename: 'app.js',
        publicPath: '/public/', // Required for webpack-dev-server
    },

開発時はJSのパスが変わってもいいならpublicPathを別にしてもいい

## 実行

    $ webpack-dev-server --hot --inline

この状態で
http://localhost:8080/
にアクセスするとプレーンなページが表示される。
http://localhost:8080/webpack-dev-server/
だとステータスバー付きのちょっとリッチなものになる。

### package.jsonにコマンドを書いておくと楽

    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "webpack",
        "start": "webpack-dev-server --hot --inline"
    },
    
    
# 参考

* webpackとbabelでES6コードをさくっと書く<br />http://geta6.hatenablog.com/entry/2016/04/05/165201
* 公式<br />http://gaearon.github.io/react-hot-loader/getstarted/
データグローブを作ってUnityと連携してみた

[簡単なスライド](http://www.slideshare.net/ssusercccbed/dataglove)
[動作確認](https://www.youtube.com/watch?v=BAc83qXYME0)
[ハードウェア](http://fabble.cc/yjiro0403/dataglove1)
[プロジェクト](https://github.com/yjiro0403/Unity_Dataglove)

各Sceneは[こちら](https://github.com/yjiro0403/Unity_Dataglove/tree/master/datagloveMV/Assets/Scenes)にあるのでプロジェクト全体をダウンロードして、てきとーに参考にしてみてください。

以下気になったところを簡単に解説

#Arduinoプログラム
今回Arduinoでは
- 曲げセンサから指の曲げ具合を検出するプログラム
- 手の動きをクォータニオンを使って求めるプログラム
を作成しました。指の曲げを検出プログラムの解説はここでは割愛。手の動きについては以下に示します。
プロジェクトの[dataglove.ino](https://github.com/yjiro0403/Unity_Dataglove/blob/master/dataglove.ino)が今回のプログラムです。

#グローブ-Unity間の通信
今回はグローブとUnityをシリアル通信を用いて連携しました。
先日[Arduino-Unity間のシリアル通信の記事](http://qiita.com/yjiro0403/items/54e9518b5624c0030531)を書いたので参考にしてください。

#指の曲げ具合によってUnityちゃんを動かす
オフィシャルのUnityちゃんを指の曲げ操作から操ってみました[Unitychan.unity](https://github.com/yjiro0403/Unity_Dataglove/tree/master/datagloveMV/Assets/Scenes)。

#手の動きをUnity空間上で再現
Unityのシーンは[cubic9.com](http://cubic9.com/Devel/%C5%C5%BB%D2%B9%A9%BA%EE/Arduino/PaxPowerGlove/)さんのものを流用しました(右手と左手間違えた...)。

また手の動きを取得するためにMPU-6050を用いてクォータニオンを導出しました。このクォータニオンを導出するのに[jrowberg](https://github.com/jrowberg/i2cdevlib)のライブラリをお借りしましたが、うまく動作しなかったりした部分があるためあとで記事にまとめておきます。

#接触判定
OnCollisionEnterなのかOnTriggerなのかわからないので[JunSimura](http://qiita.com/JunShimura/items/942c97d9c133e56f71a7)さんのスクリプトデバッガ用に取り込んで判断しました。

#メニュー画面
手袋の操作で選択できるようにしました[Title.unity](https://github.com/yjiro0403/Unity_Dataglove/tree/master/datagloveMV/Assets/Scenes)。

#参考
[cubic9.com](http://cubic9.com/Devel/%C5%C5%BB%D2%B9%A9%BA%EE/Arduino/PaxPowerGlove/)
[スクリプトからボタンの色を変える](http://fumotoppara.blog.fc2.com/blog-entry-6.html)
[uGUI Butonの使い方](http://qiita.com/2dgames_jp/items/b3d7d204895d67742d0c)
[Change the Color Button](http://answers.unity3d.com/questions/785163/change-the-color-of-the-unity-46-buttons-in-code.html)
[jrowberg](https://github.com/jrowberg/i2cdevlib)
C言語でも愛が生まれた


http://ideone.com/kvOjQA

```c:love.c
#include <stdio.h>

int main(void) {
    
	char dead[] = "死";
	char alive[] = "生";
	int life = sizeof(alive); 
	char love[life];
	
	for(int age = 0; age < life; age++) {
	    love[age] = dead[age] & alive[age];
	}
	printf("%s + %s = %s\n", dead, alive, love);

	return 0;
}
```

```sh:output
死 + 生 = 愛
```

[愛が生まれた](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)
[なんで愛が生まれるのか](http://qiita.com/tienlen/items/44daf3a52eb872085556)
【React.js】Fluxの概念を勉強するときにとっても役に立った記事まとめ

【2016/12/17 追記】
React（flux）を使ったブログエンジンを開発しました！
何か参考になれば嬉しいです！

Notee
https://github.com/funaota/notee

__________________________

最近React.jsを始めた新米javascripterです！
こんな感じで作ってきました。

【rails/非同期】js初心者がいいね機能をReact.jsで実装してみた。その①
http://qiita.com/funao/items/60aa3d7e36cf93e0d832

【rails/非同期】js初心者がコメント機能をReact.jsで実装してみた。その①
http://qiita.com/funao/items/55a91ff1732b9c825630

ただ、Fluxがまだいまいちピンときてなかったので、今回しっかり勉強してみました。そのときに役に立った記事をまとめました。


# 役に立った記事一覧

## Fluxが必要な理由が分かる記事

ReactとFluxとReduxについて順を追って整理する
https://hogehuga.com/post-1095/

この記事のおかげで、なんでFluxの方式が必要なのかが分かります！
必要性がわかったあとだと、めっちゃ理解が早い気がします。


## Fluxの基礎的な部分がめっちゃ分かる記事

Reactの単純なサンプルでFluxの実装を解説
http://mae.chab.in/archives/2747

こちらは前提になる知識から、Fluxを使う場合、使わない場合を比較してくれたり、丁寧に説明してくれます。
これを読めば大体おおまかに理解出来るはずです。

## 短期間でFluxを実装してみる記事

10分で実装するFlux
http://azu.github.io/slide/react-meetup/flux.html

めちゃめちゃ簡単にしかも図解してまとめてくれます。
一緒に作りながらやっちゃえばたくさんみにつくはず！


コードの全体像はこちら
https://github.com/azu/mini-flux

## railsでfluxを使う時にありがたい記事

react(flux)とrails(turbolinks)の親和性
http://qiita.com/8398a7/items/d2a9bd9be0476213e086


# Fluxの認識を自分なりにまとめました（随時更新します！2016/05/10）

Fluxは、Component間のやりとりをわかりやすくするための構造を作るためにある。
Fluxには、View、Store、Actionがある。

 - Viewは、名前通りViewの表示と、イベント発火
 - Storeは、情報の保持、変更などを司ります
 - Actionは、Viewでイベント発火したものを受け取り、処理を行います。

fluxの流れ

 - View → Action → ( Dispatcher, EventEmitter ) → Store → View
 
ActionからStoreに直接伝えられないから、DispatcherとかEventEmitterを通じてStoreに伝えます。
新しいS式を考えてみました

# プロローグ
Lisp系言語はカッコが多いです。LispのソースコードはLispのデータである（同図像性）ということを一目見て実感します。いやはや、うっとりしますね。ずっと眺めていたい。とはいえ、慣れていない人間がその意味を追うためにソースコードを見たり書いたりする際に、スッと入ってこないことがあることがあるのも事実。Clojureをたまに書いたりする自分ですら、エディタのおかげで内容を読み取るのに困ることはないものの、S式そのものに不満がないわけでもありません。

そんな時に下記の記事を見ました。古い記事ですが「やっぱりそうだよね」としきりに頷いてしまいました。
https://practical-scheme.net/wiliki/wiliki.cgi?Lisp%3AS式の理由

以下、よく話題になる部分も含め、気になる部分を挙げてみます。

## 関数適用されるリストとデータとしてのリストがほぼ同じ外見
```Lisp
; b,c,dには数値が入っている
(sum b c d) ;関数適用
'(b c d) ;quoteされたリスト
(list b c d) ;関数適用だけど結果的にはリスト
```

何を今更、と思われるでしょうが、quoteはあるものの、知らない人にはやっぱりわかりにくいのでは。C言語の流れを汲む文法を持つ言語などでは、関数はカッコの外に出ていて、引数だけがまとめられます。個人的には、意味が違うものは違う見かけになってほしい気もします。「同図像性を保つには、これこそが最善」という声も頭の中で響くのですが、もうちょっとなんとかならんのかい、とも感じる自分もどこかにいます。

その点、Clojureは偉い。

```clj
(list b c d) ;リスト
[b c d] ;ベクタ
{:e "f" :g "h"} ;マップ
```

カッコの種類をフル活用しているおかげで、めちゃ読みやすいです。関数適用が行われるのはリストの時のみですし、最初見た時は軽く感動しました。もうこれでええんや！俺Lispとか作らんでもええ！

……としばらくは思っていたのですが、やっぱり、関数と引数が同じリストの中にいることがどうしても気持ち悪い。何をやっても所詮S式なのですが、「構文」まではいかない、S式の他の見かけは、考えられないんだろうか。もちろん、マクロを書く時に困らないほどにはS式の力を保ったままで（この点Elixirのマクロは惜しいと勝手に考えています）。

まず、「リストの最初の引数は関数、残りは引数、評価すると値が返却される」という大前提と戦わないといけない。「リストは評価すると関数が動きだす」のがデフォルトとも言えます。このデフォルトを、Clojureのベクタのような「評価してもデフォルトでは最初の引数が関数とみなされない」側に倒してみるとどうでしょう。

```clj
[1 2 3] ;=> 評価しても[1 2 3]のまま
```

従いまして、ふつーのリストだと関数適用っぽいものも、前提が変わると結果が変わります。

```clj
[sum 1 2 3] ;=> sumが変数扱いになるけれど、sum関数が走るわけではない
```

話を簡単にするためにキーワードに。

```clj
[:sum 1 2 3] ;=> 評価しても[:sum 1 2 3]
```

さて、ここからです。このベクタを外から関数適用したいのです。つまりapplyしたい。
仮に書くと、こんな感じでしょうか。

```clj
[:apply' [:sum 1 2 3]]
```

まあ、でもこれだと、評価してもapplyは走りません。だって、そういう前提で今考えているので。評価しても、データ構造はそのままです。だから、何か「apply的なことをする」、特別なオペレータを導入する必要があります。

いろんな方法があると思うのですが、私の頭の中には、Javaのアノテーションに似たものが浮かんでいました。例えばこんな感じで。

```clj
@apply [:sum 1 2 3]
```

もはやClojureではなくなったので、この角カッコでできたFormを仮にシーケンスと呼びますが、このようなアノテーションをシーケンスに付与することによって、データ構造に関数を適用できるルールにしよう、というアイディアです。そしてこのアノテーションは、概念上、シーケンスに属しています。言い換えると、必ず後続にシーケンスを必要とするということです。

つまり、「フォーム＝リスト」と見做すのではなく、「シーケンスとアノテーション」という二つの基礎概念から成り立っていると見做すわけです。そして、applyアノテーションがシーケンスに付与されている時にのみ、関数適用が行われるルールにします。

## 関数と引数を分ける
ここからは、構文変換を行うことで構文らしきものを作っていきます。きっとリードマクロを使うことでしょう。（上記アノテーションもリードマクロで作れますけど、概念上の話ということで）

```c
sum(1, 2, 3);
```

みたいにしたいので、迷いましたがドット(.)を構文に採用することにしました。

```clj
.sum[1 2 3] ;これをマクロ展開すると
@apply [:sum 1 2 3] ;こうなるイメージ 評価すると6になる
```

C言語っぽい見かけにしたいので詰めて書いてますがトークン的には

```clj
. sum [1 2 3] ;スペースを入れた
```
と分解されます。

```clj
(sum 1 2 (sum 4 5 6) (- 8 5)) ;他のlispだとこう
.sum[1 2 .sum[4 5 6] `[8 - 5]] ;新しい構文だとこう
```

これだけだと上の方がわかりやすいやん、みたいに感じてしまうかもしれません（実際私もそう感じました）が、コード量が増えてきて、いろんな構文を導入し始めると、だんだんその考えも変わってきました。なによりlispに馴染みのない人は下の方が意味を取りやすいはず。

密かにバッククオートとか出てきてますが、これで中値記法ができるつもり。

## 次回予告
自己満足全開、拙い垂れ流しの文章となりましたが、発展させて色々と考えました。力尽きたので続きはまたの機会に。S式への不満その2は「末尾の閉じカッコ弾幕」です。例は我らがバイブルOn Lispより。

```lisp
(defun revc (x k)
  (if (null x)
      (funcall k nil)
      (revc (cdr x)
            #'(lambda (w)
                (funcall k (append w (list (car x)))))))) ;この末尾の閉じカッコ弾幕
```

Lisperはカッコを気にするな、インデントで読むんだ、エディタに任せておけばいいんだ、と言います。事実、私もそうやっております。それでも、この拭い切れないもやもや。カッコの数を、ちょうどよい塩梅で減らすにはどうすればいいんでしょう？？

というテーマでいずれ書こうと思います。お付き合いいただきありがとうございました。ほなまた。
Reverse Proxy の背後にいる Rails アプリケーションからポート番号付きで正しくリダイレクトさせる

Rails 以外でも、当てはまるケースはあるかもしれません。

## 問題

Nginx などの Web サーバを Reverse Proxy として、バックエンドで Rails アプリケーションを動かしているとします。
Reverse Proxy では http://example.com:8000 などポート番号付きでリクエストを受け付けています。

Nginx の設定は例えば次のような感じ:

```nginx
http {
  server {
    listen       8000;
    server_name  example.com:8000;
    proxy_set_header X-Forwarded-Host  $host;

    location / {
      proxy_pass http://localhost:3000; # rails-app
    }
  }
}
```

Rails アプリケーションでリダイレクトが発生した場合には http://example.com:8000 にリダイレクトしてほしいのですが、この設定ではポート番号なしの http://example.com にリダイレクトされてしまい、以降のリクエストで Rails にプロキシされなくなってしまいます。

## 解決方法

上の設定ファイルで `proxy_set_header X-Forwarded-Host` の値を `$host:$server_port` とポート番号付きにすれば OK です。(`X-Forwarded-Host` でなくて `Host` でも可)

```diff
+    proxy_set_header X-Forwarded-Host  $host:$server_port;
-    proxy_set_header X-Forwarded-Host  $host;
```

これで http://example.com:8000 にリダイレクトされるようにできました。

## 参考

- [redirect_to forgets server port (3000) in production / mongrel / nginx (Page 1) - Controllers and Views - Rails Forum - Ruby on Rails Help and Discussion Forum](http://archive.railsforum.com/viewtopic.php?id=1447)
Visual Studio Codeを指定したシェルで開く

# Visual Studio Code 1.1.0 Released :tada: 
[Download Visual Studio Code - Mac OS X, Linux, Windows](http://code.visualstudio.com/Download)
[Visual Studio Code April 1.1.0](http://code.visualstudio.com/Updates)

## 地味に待っていたのが :arrow_down: 
> Launch your preferred shell
You can now specify which external shell VS Code will launch when you use commands like Open in Command Prompt (or Open in Terminal on OS X or Linux). Set the externalTerminal user or workspace setting for your platform (windowsExec, linuxExec) to the executable to launch (cmd is the default for Windows).
For example, to set PowerShell as your external shell on Windows and Terminator on Linux, use:

```json
{
    "externalTerminal.windowsExec": "powershell",
    "externalTerminal.linuxExec": "terminator"
}
```

とりあえずお気に入りの[ConEmu](https://conemu.github.io/)をユーザのsettings.jsonに追記しておく。
Vagrantを使ってCentOS6.5の仮想マシンを2台立てる

## 環境
* Mac OS X Yosemite 10.10.2

## 手順
* boxファイルをダウンロードしVagrantファイルを作成

```
$ vagrant add box CentOS65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
$ vagrant init CentOS65
```

* Vagrantfileを下記のように編集

```
Vagrant.configure(2) do |config|
  config.ssh.insert_key = false
  config.vm.box = "CentOS65"

  config.vm.define "web" do |node|
    node.vm.network "private_network", ip: "192.168.10.10"
    node.vm.hostname = "host1"
  end

  config.vm.define "db" do |node|
    node.vm.network "private_network", ip: "192.168.10.20"
    node.vm.hostname = "host2"
  end
end
```

* 仮想マシンの立ち上げ

```
$ vagrant up [host1/host2]
# 仮想マシン名を指定することで、そのマシンだけ起動できます。
# 指定しなければ全てが起動されます。
```
Eclipse を手っ取り早く使える状態にする (フォントと色とキーバインドの変更)

## 目的

Windows 版の Eclipse はデフォルトのままだと文字は MS ゴシック、エディタの背景色は白であり非常に見づらいという問題がある。

また筆者は Emacs ユーザーなので最低でもキーの移動に関してはカスタマイズしたい。

とはいえ Eclipse のカスタマイズに悠長な時間はかけていられないので、最低限の操作で何とか使い物になるようにする。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/38501/a32ca676-318a-dc60-48e0-54d16320905c.png)

ここにメモした 3 点を実施することで、以上のような感じになる。

### フォント

エディタのフォントを変更する。

Eclipse の [設定] から [一般] - [外観] - [色とフォント] を選択、等幅メイリオあたりの適当な等幅フォントにする。ちなみに設定はどういうわけか [ウィンドウ] 配下にある。

[参考]
http://www.cyber-funnel.com/eclipse/index1542.html

このままだと左側のペインが汚いままである。ここを変更するには Windows 自体の設定を変更する。
コントロールパネルのデザインの詳細設定から「メッセージボックス」を選択、等幅フォントにする。

[参考]
http://ah-2.com/2013/05/13/eclipse-tree-font.html

### 色

同じく [設定] から [一般] - [外観] - [色テーマ] を選択、好みで適当に Sublime Text 2 などを選択する。

### キーバインド

[設定] から [一般] - [キー] を選択、スキームを Emacs にして適用。
ちなみにどのみち Eclipse や Windows のキーバインドとバッティングするので完璧は求めないほうが良さそう。

[参考]
http://qiita.com/scnsh/items/aa304b9433e353333622

## おまけ

メイリオには等幅が無いので、等幅フォントとしては下記リンク先等を参考に MeiryoKe_Console を利用すると良さげ。もちろん他の等幅フォント、たとえば VL ゴシック等でも良い。

[参考]
http://www.sukicomi.net/2012/11/meiryo-console.html

[参考]
プログラミングが捗りすぎる！コーディングに最適なフォント12選
http://goo.gl/B7KB1b
VBAにだって愛を生むことはできる

発端： [愛が生まれた](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)
解説はこちら→ [なんで愛が生まれるのか](http://qiita.com/tienlen/items/44daf3a52eb872085556)

### 乗るしかない、このBig(ry


```vbnet

Debug.Print ChrW(AscW("生") And AscW("死"))

```

### ポイント

- 何気にVBA、文字列の内部形式はBSTRなのでUCS-2相当のエンコードです。
- Andはどちらかのオペランドが数値だとビット論理積演算してくれます。

### 蛇足

このネタを見て[あの曲](https://www.youtube.com/watch?v=lOzDRPRPm9E)が即脳裏に浮かぶのは(私を含めて)おっさんおばちゃんだと思う。
いまさらkoa.js入門

nanameue,incでインターン中の斎藤です。  
最近JSばっかりでkoa.jsにまで手を出してしまったのでkoa.jsの入門記事を書きます。
個人的には1年半ほどRailsをいじっていたのですがReactからJS界隈に入り始め、ついにバックエンドまで到達しました。  
Rails界隈と比較すると割とミニマムな物が好まれていて、高機能なものよりシンプルな部品を組み合わせて作っていく感じです。  
Railsのあまりの大きさに嫌気がさしRailsからnode系に移った人も多いらしくRailsを真似たsailsというフレームワークもありますが全く流行ってません。  

自分は1週間ほど前からkoa.jsをやり始めたのですが、yieldとかgenerateなどを使っているので理解するのに時間がかかりました。なのでその部分を解説します。多分ここがkoaの本質でkoa自体はスーパーミニマムなので多分ここを理解すればkoa自体を理解したことになるんじゃないでしょうか。ならないか。  

## koa.js
koa自体はすごく小さくルーターさえも提供されていません。koaが提供しているのは単なるミドルウェアです。  
というわけでkoaの[公式サイト](http://koajs.com)のsampleコードをやっていこうとしたのですがいきなりこんな感じのコードが出てきて意味不明になりました。

```javascript
// x-response-time
app.use(function *(next){
  var start = new Date;
  yield next;
  var ms = new Date - start;
  this.set('X-Response-Time', ms + 'ms');
});

// logger
app.use(function *(next){
  var start = new Date;
  yield next;
  var ms = new Date - start;
  console.log('%s %s - %s', this.method, this.url, ms);
});
```
一つずつ解説すると```function *()```というのはジェネレーター関数と言って簡単に言うとコードを実行すると```yield```でストップします。es6の新機能です。上のコードではx-response-time実行中にyieldでストップし```next```にloggerのコードが代入されて実行されます。ジェネレーター関数では```.next()```とかで次に進めるんですがそういうのはkoaがうまくやってくれてるんだと思います。


## co
```javascript
app.use(function *(){
this.state.user = yield User.find(id);
});
```
上のコードはUser.find(id)でユーザーが見つかり次第this.state.userへ代入してくれます。なぜこのような同期処理が可能かというとkoa自体はcoというライブラリを組み込んでいてそのcoの機能で可能になります。  
coは一言で言えばPromiseをyieldの引数に取りPromiseがresolveして返した値をreturnしてくれます。意味不明ですよね。なので下にサンプルコードをのせました。他にもPromiseを含む配列を引数にしたりオブジェクトを引数にしたりできます。まぁでも本質はPromiseをいい感じに同期処理っぽく書けるということです。

例えばmongooseのfindOneメソッド。

```javascript
var query = User.findOne({name: "Guns N' Roses"});
 // A query is not a fully-fledged promise, but it does have a `.then()`.
 query.then(function (user) {
   this.state.user = user
 })
 ```
 findOneの返り値はPromiseではないですがthenなどを使えPromiseのような働きをします。なのでこれもkoaのyieldで使用できます。下のコードは上のコードと同等な働きをします。

```javascript
 this.state.user = yield User.findOne({name: "Guns N' Roses"});
```
this.state.userにユーザー情報が代入されます。こんな感じで綺麗に書けるんですよね。そんだけです。  


いきなりですが以上でkoaの説明は終わりです。でもここら辺が一番トリッキーなのでここら辺を理解すれば、あとはkoaの公式サイトを読んだりチュートリアルとかをすればなんとか行けるじゃないでしょうか。koa楽しいですよ。プログラムしてる感じがします。下にオススメチュートリアルのリンクを貼っておきます。  


おすすめチュートリアルリスト  
[Introduction to Generators & Koa.js: Part 1](http://code.tutsplus.com/tutorials/introduction-to-generators-koajs-part-1--cms-21615)  
[Introduction to Generators & Koa.js: Part 2](http://code.tutsplus.com/tutorials/introduction-to-generators-koajs-part-2--cms-21756)  
[A Simple CRUD Demo with Koa.js](http://weblogs.asp.net/shijuvarghese/a-simple-crud-demo-with-koa-js)
既存の東京リージョンのEB環境をALIAS RECORD対応にする


- [AWS Elastic Beanstalk Adds Support for Amazon Route 53 Aliasing](https://aws.amazon.com/jp/about-aws/whats-new/2016/01/aws-elastic-beanstalk-adds-support-for-amazon-route-53-aliasing/)

とのことで、CloudFrontやS3に続き、Elastic BeanstalkもRoute 53のAlias record対応になったみたいです。また、東京リージョン（ap-northeast-1）でも使用できるみたいです。


# 既存のElasticBeanstalkを対応させる

恐らくですが、環境のクローンを作成するのが一番楽かと思います。
環境のクローンを作成すると、ElasticBeanstalkのurlが

- before: xxx.elasticbeanstalk.com
- after: xxx.ap-northeast-1.elasticbeanstalk.com

というふうになると思います。

afterの形式であれば、Route53の設定で、

- type: Aを選択
- Alias: yesを選択

すると、Alias TargetにElastic Beanstalkのurlが候補として挙がり、その中に出てくるのでそれを設定すれば良いです。
zend-expressive-skeletonをGoogleAppEngine/PHP向けにカスタマイズ


Zend公式のPSR-7対応マイクロフレームワーク「zend-expressive」

簡単にインストールできるスケルトンプロジェクトが用意されていますが、
前回の「[zend-expressive-skeletonをGoogleAppEngine/PHPにインストール](http://qiita.com/curious-eyes/items/a6d3c5c2017ce38426cc)」で試した通り、
そのままではAppEngineで利用できないため、カスタマイズしてみました。

https://github.com/curious-eyes/zend-expressive-skeleton/tree/for-google-app-engine

composerコマンドを使ってインストールできるように、packages.json も準備しています。

https://gist.github.com/curious-eyes/5d2b9188f641682720c03fbc7e4fce8b

以下のように packeges.json を指定して、実行してください。
`<project dir>` 部分はインストール先ディレクトリです。

```bash
$ composer create-project --repository-url=https://gist.githubusercontent.com/curious-eyes/5d2b9188f641682720c03fbc7e4fce8b/raw/0c2f913398660395dc81f0f9414579c441c22783/packages.json --stability=dev zendframework/zend-expressive-skeleton <project dir>
```


## skeleton をインストール

前述のcomposerコマンドを実行すると、インストーラーが開始します。
以下の例では、テンプレートエンジンを「Plates」にした以外は、デフォルトのままです。

```bash
Minimal skeleton? (no default middleware, templates, or assets; configuration only)
  [y] Yes (minimal)
  [n] No (full; recommended)
  Make your selection (No):

Which router do you want to use?
  [1] Aura.Router
  [2] FastRoute
  [3] Zend Router
  Make your selection or type a composer package name and version (FastRoute):

Which container do you want to use for dependency injection?
  [1] Aura.Di
  [2] Pimple
  [3] Zend ServiceManager
  Make your selection or type a composer package name and version (Zend ServiceManager):

Which template engine do you want to use?
  [1] Plates
  [2] Twig
  [3] Zend View installs Zend ServiceManager
  [n] None of the above
  Make your selection or type a composer package name and version (n): 1

Which error handler do you want to use during development?
  [1] Whoops
  [n] None of the above
  Make your selection or type a composer package name and version (Whoops):
  
```


## ローカル環境で動作確認
参考: https://cloud.google.com/appengine/docs/php/quickstart#test_the_application

完了すると、`<project dir>`配下に app.yaml が生成されているはずですので、
そのままSDKで動作確認できます。

```bash
$ dev_appserver.py <project dir>

```

ブラウザで、localhost:8080 にアクセスして、以下の画面になれば成功です。

![Zend Expressive](http://f.cl.ly/items/071t202k1y0V3s1a081m/Home_-_zend-expressive.png)


## デプロイ
参考: https://cloud.google.com/appengine/docs/php/quickstart#deploy_your_app

https://console.developers.google.com/
で、プロジェクトを作成して、該当のプロジェクトIDに向けてデプロイしましょう。

```bash
$ appcfg.py -A YOUR_PROJECT_ID update app.yaml
```

ブラウザで、以下のURLにアクセスして確認できます。
http://(YOUR_PROJECT_ID).appspot.com/


引き続き、アプリケーションの開発を進めていきます。
参考: [Introduction to Zend Expressive &mdash; Master Zend Framework](http://www.masterzendframework.com/zend-expressive-introduction/#the-directory-structure)
ガラケー対応が必要な Web サーヴィスにおける HTTPS 設定を少しでもまともにする

Web サーヴィスでガラケー対応が必要なので、泣きながらセキュリティを弱める。
…予定であったが、諸事情によりその必要はなくなった。
せっかく調べたので、書きかけを晒しておく。編集リクエストも歓迎。

環境は CentOS 6、Apache 2.2。

方針
=====
- ある程度の端末がサポートされれば良い。
- SSLv3 は止める
- アルゴリズムは sha2 に移行する

SSLv3 無効化
============
| キャリア      |                                  | 対応バージョン        |
|:-------------|:---------------------------------|:--------------------|
| **docomo**   | iモードブラウザ2.0以降              | SSLv2 SSLv3 TLSv1.0 |
|              | iモードブラウザ2.0以前 (F-01G 除く) | SSLv2 SSLv3         |
| **au**       |                                  | SSLv3 TLSv1.0       |
| **softbank** |                                  | SSLv3 TLSv1.0       |

[SSLv3 で問題になるフィーチャーフォンの対応](http://qiita.com/harukasan/items/dee779c0a3f624758230)より引用 (一部訂正)

上の表から、TLSv1.0 以上に対応していないのは、Docomo の iモードブラウザ1.0搭載機種 (但し F-01G 除く) となる。
各機種のブラウザーヴァージョンは、[端末スペック一覧](https://www.nttdocomo.co.jp/service/developer/make/content/spec/) にある[iモード対応機種 対応コンテンツ・機能一覧](https://www.nttdocomo.co.jp/binary/pdf/service/developer/make/content/spec/imode_spec.pdf)という PDF で確認できる。

iモードブラウザ1.0搭載端末以外は、全て TLSv1.0 に対応しているが、v1.1 以上には対応していないため、TLSv1.0 以上を有効化するものとする。

```apache
SSLProtocol TLSv1 TLSv1.1 TLSv1.2
```

ひとまず安全とされる (既知の脆弱性がない) プロトコルに限定して有効化することができた。満足である。

sha2 移行
=========
各社から、対応しない機種、端末 OS のアップデートが必要な機種などの情報が、プレスリリースとして出されている。

- [Docomo](https://www.nttdocomo.co.jp/info/notice/pages/150715_00.html)
- [au](http://www.kddi.com/important-news/20150715)
- [Softbank](http://www.softbank.jp/mobile/info/personal/news/support/20150715a/)
- [Y! mobile](http://www.ymobile.jp/info/2015/15071501.html)

また、[Symantec でも検証結果一覧のPDF が配布されている。](https://knowledge.symantec.com/jp/support/ssl-certificates-support/index?vproductcat=V_C_S&vdomain=VERISIGN.JP&page=content&id=SO23044&actp=search&viewlocale=ja_JP&searchid=1389342973989&locale=ja_JP&redirected=true)

Cipher Suite の設定
===================
- Cipher Suite は、まずは [Apache で OpenSSL のセキュリティを強化する](http://qiita.com/sion_cojp/items/99fee211ceace3f76cff)を参考に設定する

```apache
SSLCipherSuite EDH+HIGH:HIGH:MEDIUM:+3DES:!LOW:!SSLv3:!SSLv2:!aNULL:!eNULL:!RC4:!ADH:!MD5:!EXP:!PSK:!SRP:!DSS:!KRB5
```
(Apache 2.2 を使っているので、サポートされない EECDH+HIGH は除外してある。)

※Cipher Suite の読み方については、[SSL/TLSの基礎と最新動向](http://www.slideshare.net/shigeki_ohtsu/security-camp2015-tls)の20ページが参考になる。

Docomo でサポートされる Cipher Suite
-------------------------------

まとまったリストはない。

au でサポートされる Cipher Suite
-------------------------------

EXP-RC4-MD5
RC4-MD5
RC4-SHA
EXP-DES-CBC-SHA
DES-CBC-SHA
DES-CBC3-SHA
EXP1024-DES-CBC-SHA
EXP1024-RC4-SHA

[EZwebコンテンツ制作ガイド](http://www.au.kddi.com/ezfactory/web/pdf/contents_guide.pdf) P43

安全でない Cipher Suite しかサポートされていないので、やむを得ず RC4 を有効にする。

Softbank でサポートされる Cipher Suite
-------------------------------

ここらへんを調べる前にガラケーの HTTPS 対応なしという方針が確定した。
gulpでの概要、設定、コマンド



## Gulpとは
- 概要　フロントエンドの自動化

## Gulpのインストール
gulp.jsはnode.jsのパッケージの一つとして適用されるので、gulp.jsをインストールする前にnode.jsもインストールする必要があります。

### nodeのバージョン管理ツール

node.jsはバージョンアップが早く、バージョンが上がるたびにいちいち入れなおすのは大変です。
そこでバージョン管理ツールを使います。今回はnodistをいれてみました。

引用：<a href="http://www.tam-tam.co.jp/tipsnote/javascript/post3479.html" target="_blank">node.jsをインストールしてみた（Windows） ｜ Tips Note</a>
引用：<a href="https://github.com/marcelklehr/nodist" target="_blank">marcelklehr/nodist: Natural node.js and io.js version manager for windows.</a>

最新の安定版node.jsをインストール
```
nodist stable
```
### npm も最新にしておこう
```
npm update -g npm
```

### gulp のグローバルとローカルインストール
プロジェクトのフォルダに移動し、node.jsモジュールを管理する package.jsonを作成。（プロジェクトのメタ情報）
```
npm init
```
gulpをグローバルインストール
```
npm install -g gulp
```
gulpをグローバルインストール
```
npm install -D gulp
```


### グローバルとローカルににインストールされているか確認
```
> gulp -v
```



引用：<a href="http://satoyan419.com/introduction-to-gulp/" target="_blank">これから始める人のためのgulp入門 - satoyan419.com</a>


## gulpでwatchするには

```
gulp watch
```

```gulpfile.js
var gulp = require('gulp');
//gulpのプラグインを読み込み
var sass = require('gulp-sass');
//gulp-sassのプラグインを読み込み


gulp.task('sass', function(){
  gulp.src('./src/scss/*.scss') //タスクで処理するソースの指定
    .pipe(sass()) //処理させるモジュールを指定
    .pipe(gulp.dest('./prod/css')); //保存先を指定
});

gulp.task('watch', function(){
  gulp.watch('./src/scss/*.scss', ['sass']);
});

gulp.task('default', ['sass']);
```



``` 
gulp.task()
```

上記の関数内にSassの処理を書きます。処理は<a href="https://github.com/gulpjs/gulp/blob/master/docs/API.md#gulpsrcglobs-options" target="_blank">gulp/API.md at master · gulpjs/gulp · GitHub</a>を使って、<a href="http://nodejs.jp/nodejs.org_ja/api/stream.html#stream_stream" target="_blank">Stream Node.js v0.11.11 Manual & Documentation</a>をつくり、

``` 
pipe()
```

でstereamから受け取ったファイルのパス名パターン（globs）を処理します。最後に<a href="https://github.com/gulpjs/gulp/blob/master/docs/API.md#gulpdestpath-options" target="_blank">gulp/API.md at master · gulpjs/gulp · GitHub</a>で宛先（保存先）を指定します。



引用：<a href="http://whiskers.nukos.kitchen/2014/12/02/gulp-sass.html" target="_blank">これからはじめるGulp（2）：gulp-sassを使ってSCSSをコンパイルするタスクを作ってみる | Webデザイン、フロントエンド系の技術に関する備忘録 - whiskers</a>
引用：<a href="http://whiskers.nukos.kitchen/2014/12/03/gulp-watch.html" target="_blank">これからはじめるGulp（3）：gulp.watchでファイルの変更を監視しタスクを実行する | Webデザイン、フロントエンド系の技術に関する備忘録 - whiskers</a>
C#でも愛が生まれた

元ネタ：[愛が生まれた](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)
愛が生まれる理由:[なんで愛が生まれるのか](http://qiita.com/tienlen/items/44daf3a52eb872085556)


```csharp

using System;

namespace TestBench
{
	internal class Program
	{
		internal static void Main()
		{
			Console.WriteLine((char)('生' & '死'));
		}
	}
}

```
Processingでも愛が生まれた

```processing:
println(char('生' & '死'));
```
結果
![スクリーンショット 2016-05-10 17.20.54.png](https://qiita-image-store.s3.amazonaws.com/0/119251/33e41834-0097-3177-3583-cd7632d59f47.png)

非常に簡単。
元ネタ: http://qiita.com/dongri/items/041ff3e7dde6c99beeb0
【Ruby】フリップフロップの演算子　..　と　...　の区別

## フリップフロップ
条件分岐や繰り返し文を書く時、演算子　..　と　...　はよく使われます。この二つの演算子は同じだと思う人がいるでしょう。実は、少し異なります。

演算子　..　は　左式　が　true　と評価されるに関わらず、右式　のテストを必ず行う。
演算子　...　は　左式　が　true　と評価されたら、右式　のテストを行わない。

##演算子　..  
- (1..6).each {|x| print x if x==3..x==5}

|x|x==3|x==5|判別式の状態|
|:---:|:---:|:---:|:---:|
|1|False|False|False|
|2|False|False|False|
|3|True|False|True|
|4|False|False|True|
|5|False|True|True|
|6|False|False|False|
出力　⇒　345

- (1..6).each {|x| print x if x==3..x<=3}

|x|x==3|x<=3|判別式の状態|
|:---:|:---:|:---:|:---:|
|1|False|True|False|
|2|False|True|False|
|3|True|True|True|
|4|False|False|False|
|5|False|False|False|
|6|False|False|False|
出力　⇒　3

##演算子　... 
- (1..6).each {|x| print x if x==3...x==5}

|x|x==3|x==5|判別式の状態|
|:---:|:---:|:---:|:---:|
|1|False|False|False|
|2|False|False|False|
|3|True|-|True|
|4|False|False|True|
|5|False|True|True|
|6|False|False|False|
出力　⇒　345

- (1..6).each {|x| print x if x==3...x<=3}

|x|x==3|x<=3|判別式の状態|
|:---:|:---:|:---:|:---:|
|1|False|True|False|
|2|False|True|False|
|3|True|-|True|
|4|False|False|True|
|5|False|False|True|
|6|False|False|True|
出力　⇒　3456

```test.rb
(1..6).each {|x| print x if x==3..x==5}
# ⇒　345
(1..6).each {|x| print x if x==3...x==5}
# ⇒ 345
(1..6).each {|x| print x if x==3..x<=3}
# ⇒ 3
(1..6).each {|x| print x if x==3...x<=3}
# ⇒ 3456
```
Prolog (swi)でも愛が生まれた

ひとりでふたつ投稿するのは野暮かと思ったけど、肝心のコードも間に変数噛ませる必要があって野暮ったいからいいでしょ(?)
もっといい例があれば是非。

元ネタ: http://qiita.com/dongri/items/041ff3e7dde6c99beeb0

```prolog
:- char_code(生, X), char_code(死, Y), Z is X /\ Y, char_code(C, Z), writeln(C), halt.
```

こちらで ideone での結果が見られます: http://ideone.com/UL887Q
[golang]html/templateのテンプレートHTMLでマップ、スライス、配列の指定要素だけ使う記述

## 先頭要素だけ使う

```html
{{$var0 := index .Values 0}}
{{$var0}}
```

## 要素数の確認を入れたバージョン

```html
+{{$length := len .Values}}
+  {{if ne $length 0}}
  {{$var0 := index .Values 0}}
  {{$var0}}
+{{end}}
```


## 全要素をループさせる場合

```html
{{range $var := .Values}}
  {{$var}}
{{end}}
```

## インデックスもつかうなら

```html
{{range $index, $var := .Values}}
  {{$index}}
  {{$var}}
{{end}}
```

## 参考

- <a href="http://golang-jp.org/pkg/text/template/#pkg-overview" target="_blank">template - The Go Programming Language</a>
Unity で Android 向けに Google Play Services のライブラリを追加する。

Unity 5のプロジェクトに [Growthbeat SDK for Unity](https://github.com/growthbeat/growthbeat-unity) を追加してAndroidで実行したら
> Uncaught Exception: java.lang.NoClassDefFoundError; com.google.android.gms.iid.InstanceID

という実行時エラーが出たので google-play-services.jar を Assets/Plugins/Android 以下に配置したら今度は
> warning: Ignoring InnerClasses attribute for an anonymous inner class (org.shaded.apache.commons.logging.LogFactory$3) that doesn't come with an associated EnclosingMethod attribute. This class was probably produced by a compiler that did not target the modern .class file format. The recommended solution is to recompile the class from source, using an up-to-date compiler and without specifying any "-target" type options. The consequence of ignoring this warning is that reflective operations on this class will incorrectly indicate that it is *not* an inner class.

ということをビルド時に言われてしまったので、[Google Play Servicesへの依存を追加する (Unity) &mdash; Repro  ドキュメント](http://docs.repro.io/ja/dev/sdk/push-notification/android-unity.html) を参考に
> ~/Library/Android/sdk/extras/google/m2repository/com/google/android/gms/play-services-gcm/x.x.x/play-services-gcm-x.x.x.aar ファイルを Assets/Plugins/Android/libs ディレクトリにコピーしてください

というわけで、 *.jar ではなく *.aar 形式のライブラリとして追加したらOKでした。
Pythonの独立実行環境、virtualenvの利用

#背景
社内共用サーバで、利用したいライブラリがある際に、独立実行環境を用意したいこと結構あるのでそのメモ

#インストール
`$ pip install virtualenv`
`$ virtualenv`
で、virtualenvのHelpが表示されたらインストール完了

#利用開始
適当なディレクトリ上で、、
`$ virtualenv --distribute newenv`
`$ source newenv/bin/activate`
`(newenv)$ ***`
プロンプトが変われば完了

#インストールライブラリの確認と別環境へのインストール
インストールされたライブラリの確認
`(newenv)$ pip freeze`

別環境へのインストール
`(newenv)$ pip freeze > packages.txt`
`(newenv2)$ pip install -r packages.txt`
Webサイトを作る上で絶対に意識すること。

#はじめに
Webサイト(ホームページ)を作るということは絶対に何かしら目的があるはずです。
それにも関わらず、「今流行ってるからこういうデザインにしてみた！」であったり、「とりあえず、bootstrap使っておこうよ！」では目的達成を叶えることは出来ません。
では、Webサイトを作る上でどういったことを気にしなければならないのか。
私がWebサイトを作る上で常に考えていることを記事にしてみました。
（私自身が常に振り返るための備忘録でもあります。）

#まず、何のために作成するの？
- もっとお店に集客したい？
- もっと商品を売りたい？
- もっと資料請求を増やしたい？
- ブランド認知度を上げたい？
- ブランド力向上のため？
- 企業の信頼性向上のため？
- 技術をアピールしたい？
- 新メニューを告知するため？
- 実施中のキャンペーンを知ってもらうため？

まだまだ色々な理由がありそうですよね。
とにかくこれを意識せずに「ホームページいるよなー」と言って作るようではダメです。
**何のために作るのか。**まずこの点を明確にしましょう。

#どんな人に見てもらいたいの？
一般的にペルソナと言われますが、どんな人に見てもらいたいのかを明確にする必要があります。
もし、**見て欲しい人**がご高齢の方だとしたらどうでしょう。
文字のサイズや色合いなど若い人に向けた場合とは大きく違うデザインになるはずです。
そうしなければ、発信側が意図した思いを相手に伝えることはとても難しくなります。
だからこそ、**誰に見て欲しいのか。**この点も絶対に決めるようにしましょう。

#どんなデバイスで見にくる？
先ほど、**見て欲しい**と考えたユーザー。
そのユーザーはどんなデバイスを利用してWebサイトに見にくるのか考えなくてはいけません。
必ずしも、スマートフォンばかりで見にくるとは限りません。
場合によってはパソコン、タブレット、テレビのブラウザなど他のデバイスで多く流入することも考えられます。
**一般的に…**という思い込みは捨てて、このユーザーさんはこんなシチュエーションでこういう風に見てくれるのではないかと想像してみるようにしましょう。

#どんなコンテンツを提供するの？
- Webサイトを作成する目的は決めました。
- 誰に見て欲しいのか決めました。

では、次にその**見て欲しい人**にどんな情報を見てもらったら**Webサイトを制作する目的**を達成できるのか考えましょう。
いくつか例を挙げてみました。
####1.20代の若い男性にお店に来てもらいたい（レストラン） 
- どんなお店なのか伝えたい（レストランの紹介）
- どんな雰囲気のお店なのか伝えたい(レストランの紹介)
- どんな料理を出しているのか伝えたい(メニュー)
- こだわりをアピールしたい(ブログ/特集コーナー)
- 期間限定メニューなどを知ってもらいたい(ブログ/新着情報/特集コーナー)
- 一度お店に来て欲しい / もう一度お店に来て欲しい（クーポン）
- 予約をして欲しい（お問い合わせ）


####2.幼稚園の入園検討者に資料請求して欲しい（幼稚園）
- どんな幼稚園なのか伝えたい（幼稚園の紹介）
- この幼稚園ならではの魅力を伝えたい（幼稚園の魅力）
- 教育内容を伝えたい（教育内容）
- お知らせも掲載したい（お知らせ）
- 幼稚園での1日を伝えたい（幼稚園の1日）
- 園児の作品を公開したい（みんなの作品）
- 幼稚園の様子を伝えたい（日記）
- 資料請求して欲しい（資料請求）
- わからないことは聞いて欲しい（お問い合わせ）

このように見て欲しい人、そしてサイトの目的などによってWebサイトのコンテンツも大きく変わります。
しっかりと必要なことを抽出してから設計に移るようにしましょう。

#どのようにユーザーを誘導するか
人の目は自然と左上から右下に流れていくことや、Zを描くように流れていきます。
つまり、Webサイトで実現したいことの重要度などに応じて、適切な配置が必要となります。
ですので、きちんと**ラフ**や**カンプ**を作成して制作に移る必要があります。
このような流れで目的達成へ導くんだという**導線設計**がデバイスごとに必要不可欠です。

#ここまで来たらあとは制作
制作についてはユーザー体験を大切にしながら、パフォーマンスや効果演出などに気をつけましょう。
バグについては大きくユーザー体験を損ねてしまうだけでなく、**信頼性の低下**にも陥りかねません。
スピーディーかつ確実な制作を心がけましょう。
また、本来の目的から外れた**技術自慢**、**不親切設計**にならないように気をつけましょう。
Javaでズンドコシステム

元ネタ:
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから<br>「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ！」って出力した後終了って関数作ったら満点で単位貰ってた</p>&mdash; てくも (@kumiromilk) <a href="https://twitter.com/kumiromilk/status/707437861881180160">2016年3月9日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
大学の課題で遂に出たのでやってみた。

```java:zundoco.java
public class zundoco {
    public static void main(String[] args) {
        String word[] = {"ズン","ドコ"};
        String current = "";
        int r ;
        for (int i =0 ; ; i++){
            if (current.lastIndexOf("ズンズンズンズンドコ") > 0){
                System.out.print("キ・ヨ・シ！");
                break;
            }else{
                r = (int)(Math.random()*10);
                if (r < 5){
                    current += word[0];
                    System.out.print(current);
                }else{
                    current += word[1];
                    System.out.print(current);
                }
            }
        }
    }
}
```
Project Tangoをいじってみた

# Project Tangoとは

[Project Tango](https://www.google.com/atap/project-tango/)はGoogleが開発している深度センサ（一応サイトでは赤外線カメラとTOFを使ったもの）とカメラを組み合わせたスマートフォン用AR/MRプラットホームです。現在は購入不能な開発機のみ存在しますが、6/9/2016に[Lenovoが初めて世にでる消費者向けのProject Tango端末を発表する予定です。](http://www.lenovo.com/projecttango/)価格はMAX$500と言われていて来週のGoogle I/Oでも発表がさらにあるはずです。

追記：[発売されました。](http://shop.lenovo.com/us/en/tango/) $499.99 (MAX 500って言ったらスベスベで来ましたね）

先週末、シンガポールのハッカソンにProject Tango Dev Kitがあったので、基本的なデモをビルドしてみたり、簡単なアプリを作ったりした雑感を書いていきたいと思います。

# 開発環境

UnityでAndroid開発をしたことがある/している人でAndroid SDK version > 23を使っている人は[Project Tango SDK](http://qiita.com/new_spaghet/items/2e4466ea29a8f7a37f4d#project-tango-sdk)まで飛ばしてもいいと思います。僕は初めてやったので少してこずりました。

#### Android SDK

Android Studioなどが入っていない人はAndroid StudioとSDKをダウンロードしてインストールします。http://developer.android.com/sdk/index.html

この時点でJavaのjdkも入っていない場合はインストールさせられます。

インストーラーが終わった後__一度Android Studioを開いてインストールを完了させてください__
僕はこれに気づかず古いSDKバージョンをずっと使っていて怒られました。

#### Unity

UnityのSDKが出ているので、それを使いました。(https://developers.google.com/project-tango/apis/unity/)
まず、Unityが入っていない人は[インストール](http://unity3d.com/get-unity/download)します。僕は5.3.4p5を使っていましたが、特に指定はないはずです。

Unityを開いたときに、まずビルドターゲットをAndroidに変更します。
`file`→`build settings`→`Android`にします。
次に、UnityにAndroidSDKの居場所を教えてあげます。
`Edit`→`Preferences`→`External Tools`
Android SDK, JDKの最上位ディレクトリを指定してあげれば問題ないはずです。NDKはなくても大丈夫です。

#### Project Tango SDK

Project Tango SDK for Unity5をダウンロードしてきます。https://developers.google.com/project-tango/downloads
unitypackageなのでUnityで開いてImportします。

`files`→`build settings`→`player settings`→`other settings`→`Identification`→`Minimum API Level`
を
`Android 4.2 'Jelly Bean'(API Level 17)`に設定します.

## デモ

`TangoSDK`→`Examples`→`Scenes`に色々なデモアプリがあります。

適当に選んでビルドしてみました。

#### Experimental Mesh Builder with Color

![ColoredMesh](https://qiita-image-store.s3.amazonaws.com/0/100271/e666b217-a00a-3e05-3e63-2f7f12e8d5aa.png)

このようなMeshと、各頂点ごとの色をとってきて周りの世界を再現するデモです。基本的に一人称視点で歩き回りながら撮影する感じです。

#### Experimental Mesh Builder with Physics

![image](https://qiita-image-store.s3.amazonaws.com/0/100271/d356d114-385e-6db7-e802-7a5b17f40a3f.png)

さきほどと同じような感じで、コライダーが生成されて画面をタップすると玉を発射するデモです。

## Depth Perception Tutorial

https://developers.google.com/project-tango/apis/unity/unity-prefab-depth

![image](https://qiita-image-store.s3.amazonaws.com/0/100271/67718e90-2273-8d81-20a6-401097e8dedc.png)

このような点雲を表示するアプリを作ってみました。

`Tango Prefabs`ディレクトリ内からTango Manager,Tango Point Cloud, Tango Delta Cameraをシーンに入れます。
インスペクターでTango Managerの設定で`Enable Depth`にチェックを入れます。

Tango Point CloudでMesh RendererとUpdate Mesh Pointsにチェックを入れます。

ビルドしてみると良い感じに動きました。

## その他色々

ほかにも色々なデモや、チュートリアルが公式サイトにあるので色々やってみるとたのしいかもです。

- API Reference: https://developers.google.com/project-tango/apis/unity/reference/
- Samples: https://github.com/googlesamples/tango-examples-unity
HTMLメールをmailコマンドで送信

## 参考

* [Linux HTML形式でメール送信するには - Linux系OS | 【OKWAVE】](http://okwave.jp/qa/q6176454.html)

## 方法

* HTMLヘッダーをechoで吐く

```html:a.html
<style> li { white-space: nowrap; } </style>
<li>hoge
```

```bash:send_html.sh
send_html() {
    TO=$1
    SUBJECT=$2
    HTMLFILE=$3
    (echo "To: ${TO}"; echo "Subject: ${SUBJECT}"; echo 'Mime-Version: 1.0'; echo 'Content-Type: text/html'; echo ) \
    | cat - ${HTMLFILE} | sendmail -t
}

send_html "my@mailaddr.com" "kenmei" a.html
```

```bash:送信
sh send_html.sh
```
【Unityエディター拡張】Align View to Selected を Sceneビューから実行するボタンを作ってみた

![editorgui.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/2dc0ea62-d3b8-9308-5e4d-4f27a8aa3654.gif)

※この記事のUnityのバージョンは Unity5.3.2p4 です.


#1. はじめに
GameObjectメニューの中にいる"Align View to Select". いちいちクリックするのがめんどくさかったので
Sceneビュー上から実行できるようにしてみました. 

![image](https://qiita-image-store.s3.amazonaws.com/0/44288/92f09355-5a88-1842-a1d9-892fd381c711.png)



#2. コード
SceneビューにGUIを出すコードは( http://anchan828.hatenablog.jp/entry/2013/03/13/004726 ) を参考にさせていただきました.

``` NewBehaviourScript.cs
using UnityEngine;
using UnityEditor;
using System.Collections;

[InitializeOnLoad]
public class NewBehaviourScript
{
  static GameObject activeGameObject = null;

  static NewBehaviourScript()
  {
    SceneView.onSceneGUIDelegate += OnSceneGUI;
    Selection.selectionChanged += SelectionChanged;
  }

  static void SelectionChanged()
  {
    activeGameObject = Selection.activeGameObject ?? activeGameObject;
  }

  static void OnSceneGUI(SceneView sceneView)
  {
    Handles.BeginGUI();
    GUILayout.Window(1, new Rect(10, 30, 120, 47), Func, "Window");
    Handles.EndGUI();
  }

  static void Func(int id)
  {
    EditorGUILayout.BeginHorizontal();
    if (GUILayout.Button("Align View to"))
    {
      Selection.activeGameObject = activeGameObject;

      // Align View to Selected を実行する
      EditorApplication.ExecuteMenuItem("GameObject/Align View to Selected"); 
    }
    GUILayout.Label((activeGameObject == null) ? "(null)" : activeGameObject.name);
    EditorGUILayout.EndHorizontal();
  }
}
```

#3. 結果
![editorgui2.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/791a5981-38d4-3886-c749-a2b207d443ab.gif)

頻繁に行なう操作はSceneビュー上から実行できるようにすると便利かもしれないですね

#4. 参考

けいごのなんとか - SceneViewクラスについて 
http://anchan828.hatenablog.jp/entry/2013/03/13/004726
GitHubへの公開鍵登録手順メモ

# はじめに
GitHubへのSSH鍵登録手順を忘れそうなのでメモ

## 鍵の有無確認

鍵がすでに作成されている場合は、新たに作らなくてもいいので存在を確認する。

```
$ ls ~/.ssh
```

以下のファイルがある場合は、鍵を新たに作成する必要なし。
`id_rsa` `id_rsa.pub`


## 鍵の作成

無い場合は、以下のコマンドで鍵を作成する
※メールアドレスは自分のものを入力する

```
$ ssh-keygen -t rsa -C "name@example.com"
```

いくつか（多分３つ）の質問がされるので、とりあえず何も考えずにEnterで進めてOK

```
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hoge/.ssh/id_rsa):   質問１
Enter passphrase (empty for no passphrase): 　　　　質問２
Enter same passphrase again: 　　　　質問３

... 以下略
```

これで　`id_rsa` `id_rsa.pub`　が作成されたはず。

ここまでで、鍵の生成は完了。


## 鍵を登録

ターミナルを使って、作成したキーをコピーする。

```
$ pbcopy < ~/.ssh/id_rsa.pub
```

GitHubのSettingsから　`SSH and GPG keys` を選択し、コピーしたキー（文字列）をペーストして登録

## 疎通確認

以下のコマンドを実行

```
$ ssh -T git@github.com
```

以下の出力があれば成功

```
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
```


## おまけ

### Vagrantを使ったゲストOSを鍵を共有する

Vagrantfile で `config.ssh.forward_agent = true` と設定しておく。


で、ホストOS側でssh-agentに秘密鍵を登録しないと、ゲストOSと共有できないので、以下のコマンドを実行

```
$ ssh-add -K ~/.ssh/id_rsa
```

Macの場合は、もともとssh-agentが有効になっているので、なにも考えずに実行するだけでOK
（他のOSは別途有効にする必要あり）
メモ for GoogleEE #2: 範囲を指定して画像を表示

## 画像の範囲を指定（矩形）
矩形に指定するものとして，以下の関数が使える。

```
var (Range)=ee.Geometry.Rectangle(lon1, lat1, lon2, lat2);
```

Rangeには適当な名前を入れておく．
lonには経度の値，latには緯度の値を代入．
東経/北緯が正の値をとり，西経/南緯が負の値をとる．
例えば，lon1=30, lat1=130, lon2=40, lat2=140と置くと，
東経130-140度，北緯30-40度の範囲を指定してくれる．

## 指定した範囲で画像表示
で，表示するためには次の関数を使う．

```
var (PickImage)=(Image).clip(Range);
```

PickImageは適当に決める．Imageは対象とするイメージオブジェクト．

あとはMap.addLayer(PickImage)を使えば，対象のイメージオブジェクトを，指定した範囲で表示することができる．
プログラマの考えが・・身につく本より(Python)：統計処理〜偏差値

[前回](http://qiita.com/teratera/items/2f075d3bcd8290f83ad2)より続けています
こちらの書籍ではC＋＋で紹介していますが、pythonにしてみたらということで書いています。
(といってもプログラミング初心者です、誰かのためになれば。)

今回統計処理ということで簡単な平均値を紹介していました。
内容的にだいぶ簡単だったのでせっかくならもう少しと思い、「偏差値」を求めるpythonを自分なりに書いてみようと思います。

<h1>偏差値</h1>
[こちらの参考サイトで偏差値の求め方](http://www.suguru.jp/nyuushi/hensachi.html)が記載ありましたので参考に作ってみました。 

```test36.py
#!/usr/bin/env python
#coding:utf-8

Elem = [87,76,100,97,64,83,88,92,74,95]
###sum = 0
###for i in Elem:
###    sum += i

###平均点との差を求める
###ave = sum / len(Elem)
###print('平均点',ave)
###value = []
###for b in Elem:
###    value.append(b - ave)

###values = []
###for c in value:
###    values.append(c**2)

#分散を求めている
###sums = 0
###for d in values:
###    sums += d

###平均値
M = sum(Elem) / len(Elem)
print('平均値',M)

###分散
V = sum((x - M)**2 for x in Elem) / len(Elem)
print('分散',V)



#sumsの平方根を求める
#total = int(sums) #小数点を切り捨てる
#totals = str(total) #整数値を文字列へ
#平方根を自分で求めようとして挫折
### len(totals) #桁数を調べる
### a = totals[:2] #>> 11
### b = totals[2:] #>> 74
### a = int(a)
### b = int(b)

import math #ライブラリを使います
totals = math.sqrt(V) #求められた平方根が標準偏差
print('標準偏差',totals)

#平均点との差(value * 10)に10をかけて標準偏差(totals)で割る
goukei = []
###for g in value:
###      goukei.append((g * 10)/totals)
# 偏差値 = (各得点 - 平均値) / 標準偏差 * 10 + 50
for g in Elem:
    goukei.append(((g - M)/totals)*10+50)
print('偏差値',goukei)

kotae = [((g - M)/totals)*10+50 for g in Elem]
print('リスト内包表記',kotae)





・・・(ターミナル実行)
>>> import test36
平均値 85.6
分散 117.44000000000001
標準偏差 10.836973747315254
偏差値 [51.291873573419736, 41.14143835369326, 63.287842469460124, 60.519541954989265, 30.068236295809825, 47.60080622079193, 52.214640411576696, 55.9057077642045, 39.295677379355, 58.67400827867536]
リスト内包表記 [51.291873573419736, 41.14143835369326, 63.287842469460124, 60.519541954989265, 30.068236295809825, 47.60080622079193, 52.214640411576696, 55.90570776420455904677379355, 58.67400827867536]

>>> 

```
たくさんのコメント頂いたおかげさまで、
かなりコードを短く修正することができました。
こんなにご指摘いただきありがたく思います！
Thireportの通常オブジェクトのメソッド一覧

`page.item(:item_id).methods` した中から、よく使いそうなものを

### オブジェクトの表示、非表示
`hide` 非表示
`show`　表示
`visible?`　表示されているか

### 以下は備忘録としてすべてのメソッド

```
[:type, :id, :visible, :visible?, :style, :styles, :hide, :show, :internal, :copy, :deep_copy, :blank_value?, :call_block_in, :dclone, :blank?, :present?, :presence, :psych_to_yaml, :to_yaml_properties, :to_yaml, :acts_like?, :try, :in?, :`, :duplicable?, :to_param, :to_query, :instance_values, :instance_variable_names, :to_json, :with_options, :html_safe?, :pry, :__binding__, :pretty_print, :pretty_print_cycle, :pretty_print_instance_variables, :pretty_print_inspect, :nil?,
:===, :=~, :!~, :eql?, :hash, :<=>, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :to_s, :inspect, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :object_id, :to_enum, :enum_for, :gem, :putc, :silence_warnings, :enable_warnings, :with_warnings, :silence_stderr, :silence_stream, :suppress, :capture, :silence, :quietly, :class_eval, :debugger, :breakpoint, :logger, :pretty_inspect, :suppress_warnings, :==, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__]
```
Ruby で NTLM 認証しろって言われたときのメモ

NTLM 認証って言う奴。初めて使った。[ruby-ntlm](https://github.com/macks/ruby-ntlm) ってやつ使うと簡単にできたよ。


```rb

require 'ntlm/http'
require 'active_support'


http = Net::HTTP.new(uri.host, uri.port)
response = http.start do
  request = Net::HTTP::Post.new(uri.path)
  request.add_field('Content-Type', 'text/xml; charset=utf-8')
  request.add_field('SOAPAction', 'http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute')
  request.ntlm_auth('ユーザID', '', 'パスワード')
  request.add_field('open_timeout', 30)
  request.add_field('read_timeout', 30)
  request.body = '投げるXML'
  http.request(request)
end
hash = Hash.from_xml(response.body)

```