OmniAICreator/Qiita-1.07M huggingface dataset:
PHPでのキャスト

PHPは明示的に型を宣言しなくていい言語ですが、（それと似合うかはよくわからない）C言語スタイルのキャストが存在します。とはいえ、**PHPの常ですが**、一筋縄ではいかない変換もいろいろあります。

# スカラー型への変換
C言語では整数を文字列にキャスト、なんて芸当はできませんが、PHPなら普通に可能です。ただ、どういうわけか型の指定子が複数あります。

* 整数へのキャスト：`(int)`、`(integer)`
* 文字列へのキャスト：`(string)`
* ブール値へのキャスト：`(bool)`、`(boolean)`
* 浮動小数点数へのキャスト：`(float)`、`(double)`、`(real) `

なお、これらについては同等な変換関数が存在します（`intval`、`strval`、`boolval`、`floatval`）ので、長い式の途中で、キャストを使うとどこまでにかかるかわかりづらい場合には、関数で書いたほうが読みやすいかもしれません。

# 配列へのキャスト
PHPでは、`(array)`と書くことで、配列へのキャストも行えてしまいます。これの挙動は、

* NULL→空の配列
* その他のスカラー値→1個だけ入った配列
* 配列→そのまま
* オブジェクト→プロパティ値をキーにした連想配列

のようになっています。PHPでよくある「値1個でも、配列でも引数に取れる」関数を作る際に、受け取った引数を配列キャストしてしまうことでそれ以降は配列として扱える、というような使い道もあります。ただし、オブジェクトについては、継承していたり`private`や`protected`のプロパティがあったりすると、ヌル文字の入った妙なキーを生成してしまうので、実用になるのは`stdClass`を連想配列にキャストするぐらいでしょう。

# オブジェクトへのキャスト
なんと、オブジェクトもキャストで生成することができますが、これらはすべて`stdClass`のオブジェクトとなります。

* スカラー値→それを`scalar`プロパティに入れたオブジェクト
* 連想配列→配列のキーをプロパティ名に変換したオブジェクト
* オブジェクト→そのまま

なお、配列に数値キーがあった場合、変換したオブジェクトではアクセスできなくなってしまう、とのことです。

# NULLへのキャスト
`(unset)`というキャストもありますが、何が来ても必ずNULLを返します。C言語であれば、稀に`(void)`とする必要のある場面が生じますが、型に厳密でなく、マクロもないようなPHPで必要とする場面は…容易には思いつけません。
VSCodeのフォントにMigu 1Mを使う

VSCodeでMigu 1Mが使いたいのでsettings.jsonで次のようにフォント設定をしてみたがうまくいかない。
>"editor.fontFamily": "Migu 1M"

AtomでMigu 1Mを使う場合は"Migu 1M"って入れないと駄目だったなと、試しにシングルクォートで囲って次のようにしたら適用された。
>"editor.fontFamily": "'Migu 1M'"
コルーチンを使ってアニメーションを書いてみる

GameObjectをY軸にそって180度回転する処理はこう書く。

```csharp
void OnMouseDown () {
  transform.Rotate (new Vector3 (0, 180, 0));
}
```

これだと回転が一瞬で終わってしまうので、アニメーションさせたい。
毎フレーム18度ずつ回転して、10フレームで回転するアニメーションにしてみる。

```csharp
void OnMouseDown () {
  StartCoroutine (AnimatedRotate ());
}

IEnumerator AnimatedRotate() {

  for (int i = 0; i < 10; i++) {

    transform.Rotate (new Vector3 (0, 18, 0));
    yield return null;

  }
}
```
C# : Visual Studio で気軽に前回値の保存と復元を行う方法

### ■目的
フォーム内で入力した値を保存して、再起動したときに値を復元させたい

### ■準備
適当なフォームを作ります（プロジェクト名：Hoge、フォーム名：Form1）

![image](https://qiita-image-store.s3.amazonaws.com/0/53164/4dde3ddf-f935-40d5-e59f-dd0c762afa43.png)

保存させるコントロール

- txtHogeString という名前のTextBox（上段）
- txtHogeInt という名前のTextBox（下段）

### ■入力した値を保存する変数を定義

ソリューションエクスプローラー　＞　Hogeのプロパティ　＞　設定

|名前|型|スコープ|値|
|---|---|---|---|
|HozonString|string|ユーザー| |
|HozonInt|int|ユーザー|0|

![image](https://qiita-image-store.s3.amazonaws.com/0/53164/c676fc9d-fae5-09a8-7466-0593706b44b9.png)

### ■クローズイベント（保存処理）の作成

```csharp:Hoge.Form1.cs
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
	Properties.Settings.Default.HozonString = this.txtHogeString.Text;
	Properties.Settings.Default.HozonInt = int.Parse(this.txtHogeInt.Text);
	Properties.Settings.Default.Save();
}
```

### ■ロードイベント（復元処理）の作成

```csharp:Hoge.Form1.cs
private void Form1_Load(object sender, EventArgs e)
{
	this.txtHogeString.Text = Properties.Settings.Default.HozonString;
	this.txtHogeInt.Text = Properties.Settings.Default.HozonInt.ToString();
}
```

### ■完成

実行　＞　適当な値を入力　＞　閉じる　＞　実行　＝　(ヽ´ω`)

![image](https://qiita-image-store.s3.amazonaws.com/0/53164/1f8e8d21-6327-a2d6-79dc-7edc78f2c281.png)

値はデフォならこの辺に保存されている↓

`C:\Users\{User名}\AppData\Local\Hoge\...\1.0.0.0\user.config`

### ■コード全体

```csharp:Hoge.Form1.cs
using System;
using System.Windows.Forms;

namespace Hoge
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		private void Form1_Load(object sender, EventArgs e)
		{
			this.txtHogeString.Text = Properties.Settings.Default.HozonString;
			this.txtHogeInt.Text = Properties.Settings.Default.HozonInt.ToString();
		}

		private void Form1_FormClosing(object sender, FormClosingEventArgs e)
		{
			Properties.Settings.Default.HozonString = this.txtHogeString.Text;
			Properties.Settings.Default.HozonInt = int.Parse(this.txtHogeInt.Text);
			Properties.Settings.Default.Save();
		}
	}
}
```
たぶんみんな間違っていないgolangのHTTP Respose Bodyの閉じ方

ネット眺めていると[たぶんみんな間違えてる golang の HTTP Respose Body の閉じ方](http://ikawaha.hateblo.jp/entry/2015/06/04/190536)というエントリが流れてきたけれど、多分みんな間違っていないという話。

# 元エントリでの話
net/httpのResponseを撮るときに、errorがnilであることを確認するだけでは不十分で、Responseがnilかどうかを確かめたほうがよいというエントリ。すなわち、

```go
resp, err := http.Get("http://golang.org")
if err != nil {
    return err
}
defer resp.Body.Close()
```

ではなく、

```go
resp, err := http.Get("https://api.ipify.org?format=json")
if resp != nil {
    defer resp.Body.Close()    // ← ここで nil じゃないときは閉じるようにしておく
}
if err != nil {
    return err
}
```

と書いたほうが良いとされている。

# たぶんこうする必要はない
ところで、僕は多分こうしなくても良いと思う。
go 1.4のnet/httpを読むと、たしかにredirectFailedの時は、

```go
if redirectFailed {
    // Special case for Go 1 compatibility: return both the response
    // and an error if the CheckRedirect function failed.
    // See http://golang.org/issue/3795
    return resp, urlErr
}
```

とrespを返すように書かれているのだけれど、ここで返されるrespは[client.goの378行目](https://github.com/golang/go/blob/release-branch.go1.4/src/net/http/client.go#L378)で必ずCloseが呼ばれている。

```go
if shouldRedirect(resp.StatusCode) {
	// Read the body if small so underlying TCP connection will be re-used.
	// No need to check for errors: if it fails, Transport won't reuse it anyway.
	const maxBodySlurpSize = 2 << 10
	if resp.ContentLength == -1 || resp.ContentLength <= maxBodySlurpSize {
		io.CopyN(ioutil.Discard, resp.Body, maxBodySlurpSize)
	}
	resp.Body.Close()
	if urlStr = resp.Header.Get("Location"); urlStr == "" {
		err = errors.New(fmt.Sprintf("%d response missing Location header", resp.StatusCode))
		break
	}
	base = req.URL
	via = append(via, req)
	continue
}
```

たしかにResponseが帰ってくることはあるが、BodyはCloseされているので別にそっとしておいてあげても良いと思う。少なくともリークするとか悪さはしない。この性質を利用すればレスポンスコードを取ったりすることはできるだろうけれど、少なくとも閉じるという操作はしなくても大丈夫そう！

# 結論
そういうわけで、まぁみんな間違っていないんじゃないかなあと思った。
僕のほうでは明日からも元気よく、

```go
resp, err := http.Get("http://golang.org")
if err != nil {
    return err
}
defer resp.Body.Close()
```

と書いていきたいと思う。


# 追記：ちなみに、Go1では
ところで、コメントで「Go1と互換性を取るために〜」と書いてあるけれど、本当にGo1ではそうなっているのだろうか。そこでGo1ではどう動くのかを確認してみると、[client.goの259行目](https://github.com/golang/go/blob/release-branch.go1/src/pkg/net/http/client.go#L259)でClose()が呼ばれている。

```go
if shouldRedirect(resp.StatusCode) {
	resp.Body.Close()
	if urlStr = resp.Header.Get("Location"); urlStr == "" {
		err = errors.New(fmt.Sprintf("%d response missing Location header", resp.StatusCode))
		break
	}
	base = req.URL
	via = append(via, req)
	continue
}
return
```

なので、コメントの趣旨を汲んでもここで閉じない対応は問題ないと思う。

#追記2： 本当に閉じなくてもいいのだろうか
僕の読みは浅はかだったのかもしれない。難しい。
https://twitter.com/mattn_jp/status/606472630665773056
https://twitter.com/mattn_jp/status/606478900596645889
C++でcommand line引数をparseしたい人生だった

Gnuに勝てるわけないだろ！馬鹿野郎お前俺は書くぞお前！

---
というわけでC++でコマンドライン引数をparseしたいわけで、
gccにはgnu getoptという素敵な物があるわけですが、
Gnu汚染やだよねとかいうアレコレもあるので、書いてみました。

```cpp
#pragma once
#include <string>
#include <iostream>
#include <vector>
#include <map>

class Option{
	std::map<const std::string, const bool> shortNoArg;
	std::map<const std::string, const std::string> shortWithArg;
	void Parse(const std::size_t argc, const std::string* const options){
		for(std::size_t i = 0 ; i < argc ; ++ i){
			if(options[i][0] == '-'){
				//This is opt
				//If this is the last, this is bool.
				if(i == argc - 1){
					for(std::size_t c = 1 ; c < options[i].length() ; ++ c){
						shortNoArg.insert(std::map<std::string, bool>::value_type(options[i].substr(c, 1), true));
					}
				}else{
					//Look up next and if it starts '-', this is bool.
					if(options[i+1][0] == '-'){
						for(std::size_t c = 1 ; c < options[i].length() ; ++ c){
							shortNoArg.insert(std::map<std::string, bool>::value_type(options[i].substr(c, 1), true));
						}
					}else{//otherwise
						shortWithArg.insert(std::map<std::string, std::string>::value_type(options[i].substr(1, 1), options[i+1]));
					}
				}
			}else{
				//This is arg
			}
		}
	}
	public:
	Option(std::size_t argc, char** argv){
		std::string* options = new std::string[argc];
		for(std::size_t i = 0 ; i < argc ; ++ i){
			options[i] = argv[i];
		}
		Parse(argc, options);
		delete [] options;
	}
	~Option(){
	}
	void Show(void){
		std::cout << "Boolean Options" << std::endl;
		for(std::map<const std::string, const bool>::iterator it = shortNoArg.begin() ; it != shortNoArg.end() ; ++ it){
			std::cout << it->first << ", " << it->second << std::endl;
		}
		std::cout << "Options w/ Argument" << std::endl;
		for(std::map<const std::string, const std::string>::iterator it = shortWithArg.begin() ; it != shortWithArg.end() ; ++ it){
			std::cout << it->first << ", " << it->second << std::endl;
		}
	}
	bool GetShortNoArgument(const std::string key){
		return shortNoArg[key];
	}
	std::string GetShortWithArgument(const std::string key){
		return shortWithArg[key];
	}
};
```

で、これをopt.hみたいな名前にしといて、
つかい方としてはこんな感じ。

```cpp
#include "opt.h"
int main(int argc, char** argv){
	Option opts(argc, argv);
	opts.Show();
	std::cout << opts.GetShortNoArgument("a") << std::endl;
	std::cout << opts.GetShortWithArgument("b") << std::endl;
	return 0;
}
```
で、コンパイルして```./a.out -a -b test```とか打つと、
aはbooleanでtrueに、bにtestが帰ってくる。
おすぃまい。
--versionみたいなlongな形式にはそのうち対応する…かも。
Sparkのソースコードリーディン環境をIntelliJで構築する

記事の内容は[このページ](https://cwiki.apache.org/confluence/display/SPARK/Useful+Developer+Tools#UsefulDeveloperTools-IntelliJ)に書かれていることに、初めてIntelliJを触るのでもう少し詳しい説明があるといいなと思った部分を補完したものです。

## Sparkのソースコードリーディング
SparkのコミュニティはIDEとしてIntelliJを勧めているので、今回はIntelliJで環境を整えてみます。


## Sparkのコードのダウンロード
ダウンロードしたのはSpark 1.4.0-RC3です。

```shell-session:
git clone -b branch-1.4 https://github.com/apache/spark.git
```

## IntelliJのインストール

[公式サイト](https://www.jetbrains.com/idea/)からコミュニティ版をダウンロードします。
設定は全てデフォルトのままで大丈夫です。
Scalaプラグインのインストールは忘れずに。
![スクリーンショット（2015-06-03 19.40.56）.png](https://qiita-image-store.s3.amazonaws.com/0/59346/e30b5993-0373-601f-b82f-37fb5d405df7.png)


念のためインストール後はsbtのプラグインを追加しました。
[File]->[Preferences]->[Plugins]->[Browse Repositories]からSBTのpluginをインストール


## Sparkのプロジェクトの作成
1. [File]->[New]->[Project from Existing Sources...]
2. 先ほどgitでcloneしたディレクトリを指定
3. [Import project from external model]でMavenを選択

![スクリーンショット（2015-06-02 21.39.50）.png](https://qiita-image-store.s3.amazonaws.com/0/59346/9e0e1c5c-a238-53a2-ad57-d3a68906a67c.png)
4. Import Maven projects automaticallyにチェック
5. Import Projectはお好みで（今回はデフォルトに加えてyarn、hadoop-2.6、他いくつかにチェック）

![スクリーンショット（2015-06-02 21.42.18）.png](https://qiita-image-store.s3.amazonaws.com/0/59346/a450e6b9-c344-1587-b4c6-85a683baf864.png)
6. SDKを指定（JDKを選択）

これで作業は完了です。
あとはIntelliJがSparkのプロジェクトをビルドしてくれます。
ビルドが完了するとこんな画面になるはずです。
![スクリーンショット（2015-06-02 22.55.46）.png](https://qiita-image-store.s3.amazonaws.com/0/59346/4e3c5a29-b50b-e424-8a97-6149b4300b07.png)
Cordovaのプライグイン


Cordovaでは、cordova pluginコマンドを用いてプラグインを管理します。
開発者はコマンドを通じて様々なプラグインを導入することができます。

**下記は「Cordova5.0.0」の場合です。
Cordova5.0.0未満の場合は、コマンドの書式がちがいます。**


## 組み込みプラグインの一覧
|       概要      | コマンドライン |
|:----------------|:------------|
| デバイス情報 |cordova plugin add cordova-plugin-device|
| ネットワーク接続 |cordova plugin add cordova-plugin-network-information|
| バッテリーイベント |cordova plugin add cordova-plugin-battery-status|
| 加速度センサ |cordova plugin add cordova-plugin-device-motion|
| コンパス |cordova plugin add cordova-plugin-device-orientation|
| 位置情報 |cordova plugin add cordova-plugin-geolocation|
| カメラ |cordova plugin add cordova-plugin-camera|
| カメラ・録音 |cordova plugin add cordova-plugin-media-capture|
| 音声・動画 |cordova plugin add cordova-plugin-media|
| ファイルストレージ  |cordova plugin add cordova-plugin-file|
| ファイルトランスファー |cordova plugin add cordova-plugin-file-transfer|
| アラート・ダイアログ |cordova plugin add cordova-plugin-dialogs|
| バイブレーション |cordova plugin add cordova-plugin-vibration|
| コンタクト |cordova plugin add cordova-plugin-contacts|
| 国際化 |cordova plugin add cordova-plugin-globalization|
| スプラッシュスクリーン |cordova plugin add cordova-plugin-splashscreen|
| アプリ内ブラウザ |cordova plugin add cordova-plugin-inappbrowser|
| デバッグコンソール |cordova plugin add cordova-plugin-console|


## インストールされているプラグインの確認表示

```
$ cordova plugin ls    # または 'plugin list'
[ 'cordova-plugin-console' ]
```


## プラグインの削除

```
$ cordova plugin rm cordova-plugin-console
$ cordova plugin remove cordova-plugin-console    # 上記と同じ
```


## プラグインの一括追加・一括削除

```
$ cordova plugin add cordova-plugin-console cordova-plugin-device   # 一括追加
$ cordova plugin rm cordova-plugin-console cordova-plugin-device    # 一括削除
```

# 高度なプラグインオプション
## 最新のバージョンのプラグインを追加

```
$ cordova plugin add cordova-plugin-console@latest
```

## バージョンを指定してプラグインを追加

```
$ cordova plugin add cordova-plugin-console@0.2.1
```

## プラグインが登録されていない場合
代替のURLを指定することができます。

```
$ cordova plugin add https://github.com/apache/cordova-plugin-console.git
```

```
$ cordova plugin add https://github.com/apache/cordova-plugin-console.git#r0.2.0
```


---------------------------------------
上記のプラグインの情報は、以下のCordova5.0.0のドキュメントを参照しました。
[Apache Cordova API Documentation](http://cordova.apache.org/docs/en/5.0.0/guide_cli_index.md.html#The%20Command-Line%20Interface)
Goで受け取ったシグナルによって動きを変えたい

Goでシグナルを受け取ってゴニョゴニョしたくなったとします。`SIGINT`か`SIGTERM`を受け取ったら終了して`SIGUSR1`を受け取ったらそのことを通知するようなGoのプログラムは以下の様な感じで書けました。

```go
package main

import (
	"log"
	"os"
	"os/signal"
	"syscall"
)

func main() {
	c := make(chan os.Signal, 1)
	ec := make(chan int)
	signal.Notify(c, syscall.SIGTERM, syscall.SIGINT, syscall.SIGUSR1)

	go func() {
		for {
			switch <-c {
			case syscall.SIGTERM:
				ec <- 0
			case syscall.SIGINT:
				ec <- 0
			case syscall.SIGUSR1:
				log.Println("SIGUSR1!")
			}
		}
	}()

	<-ec
}
```

シグナルが来る時にメモリを確保しないようにチャネル`c`のサイズを指定しています。printしているところに何か処理を書けば`SIGUSR1`シグナルを受け取ったらいい感じにするプログラムが書けると思います。

別途PIDファイルを作りたい場合は以下の記事を参考にしてください。

[Go製のサーバーで起動時にPIDファイルを作る - Qiita](http://qiita.com/catatsuy/items/a485066ca9d4115dd213)
Go製のサーバーで起動時にPIDファイルを作る

Goで書かれているサーバーのPIDファイルが欲しいとなったとします。`start-stop-daemon`とか使っているならPIDファイルを作ってくれる機能があるのでそれに乗っかるのがいいと思いますが、そういった機能がないものを使ってデーモン化している場合は自前でPIDファイルを作る必要があります。

というわけで以下のような感じにしてみました。

```go
package main

import (
	"fmt"
	"os"
	"syscall"
)

func init() {
	pidFilePath := "tmp.pid"
	if ferr := os.Remove(pidFilePath); ferr != nil {
		if !os.IsNotExist(ferr) {
			panic(ferr.Error())
		}
	}
	pidf, perr := os.OpenFile(pidFilePath, os.O_EXCL|os.O_CREATE|os.O_WRONLY, 0666)

	if perr != nil {
		panic(perr.Error())
	}
	if _, err := fmt.Fprint(pidf, syscall.Getpid()); err != nil {
		panic(err.Error())
	}
	pidf.Close()
}

func main() {
}
```

PIDファイルは起動時に一旦削除してファイルを開きます。今回はファイルを開く時にファイルが存在しないことを保証したかったので`os.O_EXCL|os.O_CREATE`を指定しています。PIDはとりあえず`syscall.Getpid()`で取れるのでこれを書き込んでファイルをCloseすれば起動時にPIDファイルをさくっと書き込んでファイルディスクリプタを手放します。

とりあえず普通に動くので参考までに。
picoを使う - 序章

PicoというCMSがあります。データベースを持たず、コンテンツフォルダの中に配置したMarkdownファイルをパースして、テンプレートとマージしてWebサイトを作るという、割とアグレッシブなCMSです。

使い方も非常にシンプルで、[Githubのページ](https://github.com/picocms/Pico)にあるとおり

1. Picoをダウンロードする
2. composerをダウンロードし、ルートディレクトリで実行する

と、これだけでとりあえず使える状態になります。動作を確認したければ、以下のようにPHPをサーバーモードで実行すればよいだけ。非常にお手軽です。

```shell-session
 php -S 0.0.0.0:8080
```

ざっくり見た感じの特徴。

 * content-sampleというディレクトリがコンテンツディレクトリになっている。変えたい場合はindex.phpのCONTENT_DIRとconfig.phpの$config["content_dir"]を **同時に変える**(見ている場所がモジュールの中で統一されていないため、両方一緒に変えておいた方が無難)
 * コンテンツの作成日やタイトルなどのメタデータは、マークダウンファイルの先頭にコメントを記載して定義する
 * プラグインを作成できる(プラグインは既存のpico_plugin.phpから、フックしたいメソッドだけを定義したクラスを作れば良いという簡単設計)
 * テンプレートエンジンには、[Twig](http://twig.sensiolabs.org/)を用いる。
 * コンテンツディレクトリは、サブディレクトリをちゃんと見る。ただし、pages(コンテンツ一覧が格納される配列)にはディレクトリ構造が反映されるわけではない(ので、ディレクトリベースで表示されるコンテンツを切り替えたい場合はプラグインの作成が必要)
 * 画像はimagesディレクトリの中のものを参照(他のディレクトリを見たい場合はプラグインの作成が必要)
 * タグの仕組みはない。なので、必要ならばプラグインの導入が必要(公式ページでも紹介されていますが、2015/06/04の執筆時点では使われているメソッドが古いようで、そのままではちょっと使いづらいかもしれない)。
 * ぱっと見た感じ、Twigやマークダウンの展開などの処理を除くと、pico.phpだけに全ての処理が記載されている。ある意味いじりやすいCMS。

中に「プラグインを作れば出来る」という項目があるとおり、プラグインがないと出来ないことが多く、かなり利用のハードルが高いCMSです。
とはいえ

 * 管理画面がない(管理画面をクラックされていたずらされるというセキュリティリスクがない)
 * データベースがない(ので、簡単に設置・撤収できる)
 * データソースがマークダウン形式なので、あとあとつぶしが利く

という点は、他には代えがたいかな と。あとは自分も調べてないですが、Dropboxに置いたファイルを自動アップロードとか、Gitにコミットしたファイルを自動アップロードみたいな仕組みを実装して使っている人もいるらしく、それらを使えばかなり編集作業を省力化できると思われます。使うまでは手間がかかりますが。

というわけで、これからいくつかPicoに関する記事を書いていこうと思います。
C#　HttpのヘッダーにgZipとDeflateを追加

下記参照
　http://www.atmarkit.co.jp/fdotnet/dotnettips/519httpcompress/httpcompress.html


下記を設定すると、ヘッダーにAccept-Encoding: gzip, deflate　となる。
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
ベタ塗り画素カウント（写真編）

#はじめに

* 前回アップしました[ベタ塗り画素カウント（イラスト編）](http://qiita.com/Ponyo1127/items/3343d2a47a70e46e33a1)の続きになります。
* 前回はイラスト画像のベタ塗り画素の割合を数えましたが<br>今回は3次元の女性の写真を入力画像に用いて調査しております。
* 枚数は1002枚です。
* 大きさはバラバラですが、イラスト編で使用した画像が1920*1080サイズが多かったので<br>今回使用する画像も1000*1000を超えるくらいの大きさになっています。

※環境、プログラム等は前述の記事と同様ですので省略いたします。

#実験結果

**ヒストグラムが書けるようになりました！！！！！！！**
![写真ベタ塗り2.jpg](https://qiita-image-store.s3.amazonaws.com/0/68592/da608f6f-489f-871b-8f15-fb32fd724a68.jpeg)
5%区切りです。

予想通り写真の方はベタ塗り画素の割合が小さいですね。
CSVも置いときます。
[Picture_result.csv(uff-8)](https://dl.dropboxusercontent.com/u/11090008/Picture_result.csv)
[Picture_result_s.csv(Shift-JIS)](https://dl.dropboxusercontent.com/u/11090008/Picture_result_s.csv)

せっかくヒストグラムを書けるようになったので前回のイラストの方も書きました。
![イラストベタ塗り.jpg](https://qiita-image-store.s3.amazonaws.com/0/68592/8cf2cbb8-17fb-47b5-384b-1984d28cd7d3.jpeg)

イラストと写真で左右対称ぽい結果になるかと思っていましたが
案外そうでもなかったです。

#今後の課題

* 輝度でフーリエ変換したときの高周波成分の分布などに違いが出てくるのではないか？
* RGB完全一致ではなく色空間上で距離を計算しては？
* HSV値で距離を計算しては？

というご意見を @xr0038 さんから頂きました。

距離の方は多分簡単に実現できそうですね。
ただ、閾値をどれくらいにするかって問題も。

またデータ集めかな…。
Windows 8.1で起動時のデフォルトプリンタを変更する


#コマンドプロンプトで実行

```
> rundll32.exe printui.dll,PrintUIEntry /y /n "printer name"
```

#クリックで実行
こんな感じでバッチファイルにすれば、クリックで変更できる

```lang:change_default_printer.bat
@echo off
rundll32.exe printui.dll,PrintUIEntry /y /n "printer name"
```

#ログイン時に実行
バッチファイルを以下に置けば、全ユーザーのログイン時にデフォルトプリンタが設定される
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
誰でも簡単にターミナルでgitHubを使う

SourceTree使ってみると、すぐに何かとぶつかって
うぎゃーってなる事が多い。
プッシュとプルとコミットを使う位ならターミナルからやった方が
100倍くらい楽って話です。

まず、クローンの方法から
以下のように指定のディレクトリから打つだけで良い。
git clone https://○○○○○○○○.git 任意のファイル名

すべてを追加
git add .

コミット
git commit -m 任意のメッセージ

プッシュ
git push
git push -u origin master

gitから最新を拾ってくる
git pull

特定のファイルの変更を取り消す
git checkout <ファイル名>

現状のログを見る
git log

変更されたファイルの一覧を表示
git status

ファイルの登録
git add -u

ファイルを削除
git rm <file>

一時的に処理を無視する
git stash

指定のフォルダからgitを管理する方法
git init

まだaddすらしていない状態だけど、行った変更を取り消したい。
git checkout <path>

--
vimの終了
:wq
ghq で管理しているリポジトリを複数選択して消す ghq-unget コマンド書いた

## README

![ghq-unget.png](https://qiita-image-store.s3.amazonaws.com/0/735/14ce3dab-94dc-38e5-0ecf-f1c18f8a0c3f.png)


`ghq get` でリポジトリを get できるのは便利だけども便利すぎて色々 get してしまうし、こんなにいらない状態にすぐ陥る。なのでいらないリポジトリを unget するコマンドを書いた。[→ソース](#ghq-unget)

```bash
ghq-unget
```

これを実行すると ghq で管理しているリポジトリを peco や何かで絞り込んで削除できる。複数選択したら全部削除する。コミットしていないファイルがあったり push していないブランチがあったりしたら削除前に確認するようになっている。

peco や何かと書いたがデフォルトでは [fzf](https://github.com/junegunn/fzf) で絞り込むようになっている。こいつのファジーマッチは peco より便利だと常々思っているが、まあそうじゃない人もいると思うので、

```bash
FILTER=peco ghq-unget
```

または

```bash
git config --global aux.filter peco
ghq-unget
```

として好きに設定してほしい。

## ghq-unget

```bash:ghq-unget
#!/bin/bash

if [[ -z "$FILTER" ]]; then
    FILTER=$(git config --global aux.filter)
    FILTER=${FILTER:-fzf}
fi

ask_yn() {
    local msg=$1
    local yn
    while read -r -p "$msg [yN] " yn; do
        case "$yn" in
            [Yy]*) return 0 ;;
            [Nn]*) return 1 ;;
            "")    return 1 ;;
        esac
    done
}

test_repo_is_clean() {
    local msg
    msg=$(git -c status.color=always status --short)
    if [[ $? = 0 && -z "$msg" ]]; then
        return 0
    else
        printf "\e[31mThe repository is dirty:\e[0m\n"
        echo
        sed 's/^/    /' <<< "$msg"
        echo
        return 1
    fi
}

test_no_unpushed_commits() {
    local msg
    msg=$(git log --branches --not --remotes --simplify-by-decoration --decorate --oneline --color=always)
    if [[ $? = 0 && -z "$msg" ]]; then
        return 0
    else
        printf "\e[31mThere are unpushed commits:\e[0m\n"
        echo
        sed 's/^/    /' <<< "$msg"
        echo
        return 1
    fi
}

rm_each_repo() {
    local fd=$1
    local repo_path
    local ret
    while read -u "$fd" -r repo_path; do
        printf "\e[1;34m> %s\e[0m\n" "$repo_path"
        (
            cd "$repo_path"
            ret=0
            test_repo_is_clean
            ret=$(( ret + $? ))
            test_no_unpushed_commits
            ret=$(( ret + $? ))
            if [[ "$ret" -gt 0 ]]; then
                if ask_yn "Are you sure you want to remove it?"; then
                    rm -rf "$repo_path"
                fi
            else
                rm -rf "$repo_path"
            fi
        )
    done
}

main() {
    rm_each_repo 3 3< <( ghq list -p | "$FILTER" )
}

main

```
[Grails]Serviceの中でrequest、response、sessionを取得する方法

以下の方法で取得できます。

```groovy
package sample

import grails.transaction.Transactional
import org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest
import org.codehaus.groovy.grails.web.util.WebUtils

@Transactional
class SampleService {

    def serviceMethod() {

        GrailsWebRequest webUtils = WebUtils.retrieveGrailsWebRequest()
        def request = webUtils.getCurrentRequest()
        def response = webUtils.getCurrentResponse()
        def session = webUtils.getSession()
        println request.aaa
    }
}
```
RenderTextureで任意のnodeを画像保存

画面全体のスクリーンショットを保存する場合`utils::captureScreen`が使えますが、一部のnode以下だけの画像を保存したい場合RenderTextureを使います。

```cpp
auto s = Director::getInstance()->getVisibleSize();
auto rt = RenderTexture::create(s.width, s.height);
rt->beginWithClear(0, 0, 0, 0);
target->visit();
rt->end();
rt->saveToFile("node.png");
```

`target`が保存ディレクトリ以下に`node.png`として保存されます。
WindowsAzureのUbuntuVMにrootでアクセスする

Azureで動かしているubuntuはrootでアクセスするとはじかれる。これでは不便だったので、rootログインができるようにする。

まずはrootアカウントにパスワードを設定する必要があるらしい。

```
sudo passwd root
```
次にsshの設定をいじる

```
# /etc/ssh/sshd_config
...
#PermitRootLogin without-password
PermitRootLogin yes
...
```
そしてsshを再起動

```
sudo service ssh reload
```
これでログインできます。公開鍵でアクセスしたい場合は、/root/.ssh/authorized_keysに自分の公開鍵を突っ込んでください。
c:\直下の不要なファイル

C:\に変なファイルがいっぱいあって調査したので残しておく
## VC++ 2008のインストーラ
[VCRedist from VC++ 2008 installs temporary files in root directory](https://support.microsoft.com/ja-jp/kb/950683)

Visual C++ 2008 再頒布可能パッケージ（ vcredist_x86.exeを、 VCRedist_x64.exe 、 VCRedist_ia64.exe ）のインストールすると、以下のファイルがシステムで使用可能な最大容量を持つドライブのルートディレクトリに生成されるそうです。
これらのファイルは不要であり、安全にシステムから削除することができます。ランタイムライブラリの機能は、この影響を受けません。既知のバグで、 VS2008 SP1で修正されているそうです。

|||||
|:--|:--|:--|:--|
|install.exe |install.res.1041.dll |install.ini |eula.1041.txt |
|install.res.1028.dll |install.res.1042.dll |eula.1028.txt |eula.1042.txt |
|install.res.1031.dll |install.res.2052.dll |eula.1031.txt |eula.2052.txt |
|install.res.1033.dll |install.res.3082.dll |eula.1033.txt |eula.3082.txt |
|install.res.1036.dll |vcredist.bmp |eula.1036.txt |VC_RED.MSI|
|install.res.1040.dll |globdata.ini |eula.1040.txt |VC_RED.cab |

#dao360.dll
[[ACC2002] dao360.dll をレジストリに再登録する方](https://support.microsoft.com/ja-jp/kb/822545/ja)

Access 2002のDLLらしい誰がインストールしたんだ？使ってないので消すことにする。

#IFRToolLog.txt

>ネットの情報
>インテルの何かのソフトかドライバが使用しているファイルです。これは消してもまた作られますので、無視して構いません。（何のログ？をとっているようです）

Intelの何かその内調査...する？
ember-cli-railsでrailsのフロントエンド開発がもっといい感じになる

## ember-cli

ember.jsはjavascriptのフレームワークで、ember-cliは```ember```コマンドで```generate```したり```test```したり```build```する便利な実行環境のようなものです。

> Ember CLI | A command line utility for creating ambitious web applications
> http://www.ember-cli.com/

ember.jsで本格的に開発するならなるべくember-cliを使ったほうがいいです。
addonも沢山ありますし、testが書きやすいし、ES6で書けるしいいことだらけです。

## ember-cli-rails

その名の通りember-cliとrailsの環境をつなげるものです。
asset-pipelineがember-cliのbuildを実行してrailsのviewにemberを埋め込むのがかなり楽になります。

> rwz/ember-cli-rails
> https://github.com/rwz/ember-cli-rails

GithubからREADMEを読めば普通に動くと思います。

## railsのassetsが参照しづらかった

スタイルシートはember-cli内でsassが使えますし特に問題にならないのですが、railsのapp/assets/images以下に置いた画像なんかが参照しづらいのがネックでした。

なのですが今日以下のプルリクエストを発見したのですべて解決した感じです。

https://github.com/rwz/ember-cli-rails/pull/119

これ自体とてもシンプルなことしかしていないのでEmberAssetsHelperをコピペしてちゃんと手元のrailsで動きました。

こんな感じのhelperでemberのtemplateからapp/assets/images以下のファイルを参照できるようになります。
```
{{rails-image "cat.jpg"}}
```

classとかaltとか属性を設定したいならrails-imageをcomponentにしておくと捗ると思います
AWS Summit Tokyo 2015 スライド及び記事まとめ

AWSサミットの各種スライドが公開されてきたので、見つかったものから簡単にまとめていきます。

**2015/06/20 追記**
AWSから開催レポートの動画や資料が公開されました。
こちらから全てのセッションの内容が閲覧できます。

http://aws.amazon.com/jp/summit2015-report/details/

## Day1
### Session - SmartNews のデータサイエンティストの高速イテレーションを支える広告システム
http://www.slideshare.net/smartnews/aws-summit-tokyo2015newsads

### Session - 急成長しつづける freee、AWS との付き合い方
http://futoase.hatenablog.com/entry/2015/06/03/093737
https://speakerdeck.com/futoase/aws-summit-tokyo-2015-freee

### DevCon - 2035 年、その時デベロッパーはどう生きるか
大前研一、大前創希によるセッションの書き起こし。
http://niwatako.tips/20150603/article265.html

## Day2

### Session - BrainWars を支える AWS サービスたち
http://www.slideshare.net/matsukaz/brainwarsaws

### DevCon - 実践 GitHub Flow
https://speakerdeck.com/cobyism/github-flow-aws-summit-tokyo-2015

### DevCon - 日本最大の即レスサービス「アンサー」を支える Amazon DynamoDB
http://www.slideshare.net/akiyan/amazon-dynamodb-48929424

### DevCon - 『Gunosy』を支える大規模モバイルプッシュ通知基盤
https://speakerdeck.com/toshimaru/900mo-daunrodoapuri-gunosy-wozhi-eruda-gui-mo-mobairuputusiyutong-zhi-ji-pan-1

### DevCon - なぜクックパッドは開発しやすいのか
https://speakerdeck.com/mirakui/developer-productivity-in-cookpad

### DevCon - サーバにログインしない・させないサービス運用
https://speakerdeck.com/koid/aws-summit-2015-devcon
【iOS】NSStringとStringの違い


Swiftには`NSString`と`String`の２つの文字列型があり、どういう違いがあるのか気になったので調べました。


## NSStringとStringの違いは？
　Objective-CではNSString型が使用されていましたが、Swiftになって新たに追加されたのがString型です。
**SwiftではString型の利用が推奨されています。**
Swiftで`NSString`をほとんど気にしなくていいのは、Objective-Cのライブラリで`NSString型`のものを、Swiftから使おうとしたときにはStringに見えるようになっているからです。


#### では実際の使うときの違いは？
`NSString`にはある文字列の数を返す`lengthプロパティ`などのプロパティやメソッドがあるが、`String`では使えない点です。

##### サンプルコード
![lengthプロパティは使えない](http://i.imgur.com/Rz5kq63.png)
- 7行目
String型で文字数を取得するときはcountプロパティを使います。
　
- 10行目
String型の変数もNSString型にキャストすればlengthプロパティをつかうことも可能です。

　
## 結局のところ
 現状ではSwiftでプログラムを書くためにObjective-Cのライブラリが欠かせないのに、事実上`NSString`を使わなければならないケースはほとんどありません。
結局、NSStringではなく**Stringを使えばいい！**ということです。
chcpコマンドで文字コードを変更して戻せなくなった時の対応

コマンドプロンプトが英語表示になって困っている人は読んでみてください。

#コマンドプロンプトの文字コード変更
コマンドプロンプトの文字コードは、chcp コマンドで確認と変更できる。

      C:\>chcp /?
      現在のコード ページ番号を表示または設定します。
      
      CHCP [nnn]
      
        nnn   コード ページ番号を指定します。
     
      現在のコード ページ番号を表示するときは、パラメーターを指定せずに CHCP と入力してください。


日本語環境だとシフトJIS(932)になっている


     C:\>chcp
     現在のコード ページ: 932

Shift-JIS: 932
UTF-8:     65001
[参考 Developper Network](https://msdn.microsoft.com/ja-jp/library/aa288104%28v=vs.71%29.aspx)

#はまった手順＆状況

*コマンドプロンプトを起動し文字コードをUTF-8に変更

     C:\chcp 65001
     Active code page: 65001
     ※画面が初期化され1行目は消える


*コマンドプロンプトのプロパティ表示
コントロールアイコン(左上のアイコン)をクリックしてメニューからプロパティを選び[オプション]タブの　OKボタン　で画面を閉じる

![fig1.png](https://qiita-image-store.s3.amazonaws.com/0/54159/f1132ce2-a2d8-0565-0e04-764b8e39ed4d.png)

この後、コマンドプロンプトがシフトJISにもどらず。PC再起動しても規定値変更しても起動直後は UTF-8 になってしまう。UTF-8だと英語表示、なにより困るのが日本語のファイル名が表示されない...UTF-8って日本語表示できないんですね。
![fig2.png](https://qiita-image-store.s3.amazonaws.com/0/54159/648a0aa2-2eb4-1945-2d71-1f93a62863f1.png)

##解決方法
ここまで読んだらわかると思いますが、chcp 932 コマンド実行して、プロパティ表示[オプション]タブのOKボタンを押せばシフトJISの表示に戻ります。なんか変な仕様です。
capybara + poltergeistでonchangeを発火させる方法

やり方を発見するまでに時間がかかったので、ここで共有します。

#方法
`spec`ファイルから`evaluate_script`で`change`を呼び出して、`onchange`を発火させます。
自分の環境では、`onchange`の実行終了まで1秒待つ必要がありました。

````onchange_spec.rb
feature 'form check', js: true do
  scenario 'onchange' do
    visit 'sample.html'
    expect(page).not_to have_content('changed!')

    # select しただけではonchangeが発火しません。
    select '1', from: 'sample-form'

    # evaluate_scriptでsample-formの変更を発生させます
    page.evaluate_script("$('#sample-form').trigger('change')")

    #必要があれば、onchangeの反映まで待ちます
    sleep 1

    expect(page).to have_content('changed!')
  end
end
````

````sample.html
<select id="sample-form" type="text" name="sample" onchange="$(this).after('changed!')">
  <option value=""></option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>
````

以上です。

# 参考
https://github.com/teampoltergeist/poltergeist/issues/204
連立方程式ってどうやってプログラムすればいいんだ？

# きっかけ
　　家庭教師で連立方程式教えててふとコードを書きたくなりまして、
　　意外とめんどくさそぉと思いながら書いてみようと思いました。

# 連立方程式
　　この方程式って意外と不思議でプログラムだと書きづらい気がします
　　そこで学部１年だった時
　　童貞くさい教授「逆行列を使え！」
　　さすが童貞言うこと違うぜと思い
　　pythonのnumpyに敬礼をしながら書いてみました！

```lang:連立方程式.py
  1 # -*- coding: utf-8 -*-
  2 import numpy
  3 
  4 '''
  5 2(x1)+5(x2)=17
  6 5(x1)-2(x2)=-1 の連立方程式を求める
  7 '''
  8 
  9 def inver(a1,a2,b1,b2):
 10         mat=numpy.matrix([[a1,a2],[b1,b2]])
 11         return mat.I
 12 
 13 def ans(con1,con2,inver_mat):
 14         con_vec=numpy.matrix([[con1],[con2]])
 15         return numpy.dot(inver_mat,con_vec)
 16 
 17 ans_mat=ans(17,-1,inver(2,5,5,-2))
 18 
 19 for index,num in enumerate(ans_mat):
 20         print "x{0}={1}".format(index,num)
```

なんかすげぇ練習のつもりで書いたけど(コードが汚い僕でも）まだ綺麗・・・w
さすがpythonですね。
（ちなみに自分はpythonの"py"っていうところが好きで使い始めました）
ちょっとこれを今度はn次の連立でもできるように実装したいと思いますー
Winodwsに適応済みの更新プログラムを調べる


####    Windows Management Instrumentation Command Lineで調べる
`> wmic qfe | find "KB"`

####    システム情報を収集して調べる
`> systeminfo | find "KB"`

####    PowerShellを用いてWMIのオブジェクトから調べる
`PS> Get-WmiObject -Class Win32_QuickFixEngineering`
NginxでQuery Stringを判定して、Rewriteする

Nginxにあまり触れていないaraiです。
NginxでQuery Stringの値を判定し、rewriteさせるメモです。
# やりたいこと
codeの値を判定して、301転送を振り分けしたい。
Query Stringのcodeの値がユニークで別のものになっているので、正規表現は使えない。

- - - -
http://example.jp/aaaaa?code=b1111 ⇒301転送 http://example.jp/aaaaa?code=centos
http://example.jp/aaaaa?code=b2222 ⇒301転送 http://example.jp/aaaaa?code=ubuntu
http://example.jp/aaaaa?code=b3333 ⇒301転送 http://example.jp/aaaaa?code=debian
http://example.jp/aaaaa?code=b4444 ⇒301転送 http://example.jp/aaaaa?code=redhat

http://example.jp/zzzzz?code=b1111 ⇒301転送 http://example2.jp/zzzzz?code=centos
http://example.jp/zzzzz?code=b2222 ⇒301転送 http://example2.jp/zzzzz?code=ubuntu
http://example.jp/zzzzz?code=b3333 ⇒301転送 http://example2.jp/zzzzz?code=debian
http://example.jp/zzzzz?code=b4444 ⇒301転送 http://example2.jp/zzzzz?code=redhat
				:
				:
100件以上。
- - - -


# 設定方法
最初はこんな感じで、やればいいんでしょ。っと思ってましたが、全然NGでした。

```
rewrite /aaaaa?code=b1111$ http://example.jp/aaaaa?code=centos permanent;
rewrite /aaaaa?code=b2222$ http://example.jp/aaaaa?code=ubuntu permanent;
rewrite /aaaaa?code=b3333$ http://example.jp/aaaaa?code=debian permanent;
rewrite /aaaaa?code=b4444$ http://example.jp/aaaaa?code=redhat permanent;
				:
				:
```


とりあえず、以下で想定通りの動きは確認できました。

```
set $keyword_name "";

if ($args ~ "code=(.*)") {
    set $keyword_name $1;
}
if ($keyword_name = "b1111") {
    rewrite ^/aaaaa.*$ http://example.jp/aaaaa?code=centos? permanent;
    rewrite ^/zzzzz.*$ http://example2.jp/zzzzz?code=centos? permanent;
    break;
}
if ($keyword_name = "b2222") {
    rewrite ^/aaaaa.*$ http://example.jp/aaaaa?code=ubuntu? permanent;
    rewrite ^/zzzzz.*$ http://example2.jp/zzzzz?code=ubuntu? permanent;
    break;
}
if ($keyword_name = "b3333") {
    rewrite ^/aaaaa.*$ http://example.jp/aaaaa?code=debian? permanent;
    rewrite ^/zzzzz.*$ http://example2.jp/zzzzz?code=debian? permanent;
    break;
}
if ($keyword_name = "b4444") {
    rewrite ^/aaaaa.*$ http://example.jp/aaaaa?code=redhat? permanent;
    rewrite ^/zzzzz.*$ http://example2.jp/zzzzz?code=redhat? permanent;
    break;
}
				:
				:
```


# 注意点
#### 転送先の最後に?を付けないと・・・
NginxはQuery Stringを自動で引き継いで設定するようです。
転送先の最後に?を付けることで、転送先にQuery Stringを引き継がせないようにしています。

```
if ($args ~ "code=(.*)") {
    set $keyword_name $1;
}
if ($keyword_name = "b1111") {
    rewrite ^/aaaaa.*$ http://example.jp/aaaaa?code=centos permanent;
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　 ↑ここの？を取った。
    break;
}
```

上記の設定だと、以下のように、最後尾に　&code=b1111　が付いてきてしまいます。
http://example.jp/aaaaa?code=b1111 ⇒301転送 http://example.jp/aaaaa?code=centos&code=b1111

転送先の最後に?を付けた場合
http://example.jp/aaaaa?code=b1111 ⇒301転送 http://example.jp/aaaaa?code=centos

# 最後に
Nginxの設定はちょっとプログラムっぽく長くなったけど、もっと簡単にできる方法があるのかも。。
ES6 で書く環境（Babel + Browserify + gulp 編）＆ RxJS と jQuery の導入例


自分的にはどの JavaScript ライブラリを試すにしても、この環境の上に目的のライブラリを載せるnのが一番効率が良いかなと思い、テンプレート化してみた。

https://github.com/hkusu/babel-browserify-gulp-sample

> テスト系が含まれていないが、学習目的ならこれで十分かと。

下記は補足です。

## Node.jsモジュールの構成(package.json)

主要なのは `browserify` と、Babel 用のトランスパイラである `babelify` です。最悪この２つだけあれば、本 package.json の `scripts` の `build` に書いてあるようなコマンドを叩く(もしくはこの環境の場合は `$ npm run build` で実行できる)ことで ES6 から ES5 への変換および Browserify による Node.js ライブラリ（= npm コマンドでインストールした `node_modules` 配下のライブラリ）を含んだ形で、JavaScirpt ファイルがビルドされます（この例だと `js/bundle.js` としてビルドされる）。

`browserify` と `babelify` 以外の Node.jsモジュールは gulp によるファイルの変更監視＆自動変換用です（なので毎回、手動でコマンドを叩いてビルドするならば不要）。

```json:package.json
{
  "name": "babel-browserify-gulp-sample",
  "version": "0.0.1",
  "devDependencies": {
    "browserify": "^10.2.1",
    "babelify": "^6.1.1",
    "gulp": "^3.8.11",
    "vinyl-source-stream": "^1.1.0",
    "gulp-webserver": "^0.9.1"
  },
  "scripts": {
    "build": "browserify --debug --transform babelify es6/app.es6 --outfile js/bundle.js"
  },
  "license": "MIT"
}
```

本環境は下記の環境から React.js を抜いただけなので、不明な点があれば下記を参考にしてください。

- https://github.com/hkusu/react-babel-browserify-gulp-sample
- [React.js + Babel + Browserify + gulp の環境を作ってみた](http://qiita.com/hkusu/items/e068bba0ae036b447754)

## ライブラリ導入例①：RxJSを導入する場合

例えばこの環境に追加で [RxJS](https://github.com/Reactive-Extensions/RxJS) を導入する場合は、次のように npm コマンドで導入し、利用したいシーンで import します。

### インストール

```shell:
$ npm install --save-dev rx
```

### 利用例

```javascript:app.es6
import Rx from 'rx'

var arr = [1, 2 ,3];

// stream の定義
var hogeStream = Rx.Observable.from(arr)
  .map(
    // 各配列の値を３倍
    (n) => n * 3
  );

// stream の購読
hogeStream.subscribe(
  (n) => console.log(n)
);
```

## ライブラリ導入例②：jQueryを導入する場合

同様に、みんな大好き jQuery の場合は次のように。

> この方法だと、ブラウザで実行しない場合はエラーとなる（例えば `$ node hoge.js` のように実行した場合など）ので注意ください。

### インストール

```shell:
$ npm install --save-dev jquery
```

### 利用例

前出の RxJS と組み合わせてみます。

```javascript:app.es6
import Rx from 'rx'
import $ from 'jquery'

// stream の定義。ボタンのクリックイベントを起点とする
var hogeStream = Rx.Observable.fromEvent($('#execute'), 'click')
  .flatMap(
    () => {
      // Qiitaの新着投稿１０件を取得
      let promise = $.ajax('http://qiita.com/api/v1/items?per_page=10');
      return Rx.Observable.fromPromise(promise);
    }
  );

// stream の購読
hogeStream.subscribe(
  (res) => {
    // 結果(複数件)に対して１件づつ処理
    res.forEach(
      (element, index, array) => {
        console.log(index + ":" + element.title);
      }
    );
  }
);
```

```html:index.html
<!DOCTYPE html>
<html>
<head lang="ja">
  <meta charset="UTF-8">
</head>
<body>
<button id="execute">実行</button>
<script src="js/bundle.js"></script>
</body>
</html>
```

実行イメージ：

![スクリーンショット 2015-06-04 16.45.59.png](https://qiita-image-store.s3.amazonaws.com/0/35733/687bdf04-f79a-4fc9-2c50-7aff27b8d78e.png "スクリーンショット 2015-06-04 16.45.59.png")

## おわりに

慣れてしまうと ES6 + Browserify は便利なので手放せなくなるなりますね^^
jThirdの勉強会セミナーに参加したよ

#はじめに
Sunday, 2015.05.31 14:00-22:00に行なわれた、**「全天球動画xWeb3DxスマホVRコンテンツ制作ハンズオン」**でハッカソン形式の課題製作の縛りが、jTree,jThirdを使った全天周コンテンツでした。全天周動画の撮影にはRICOH THETAの最新機種をお借りし、[H2MD.js](https://h2md.axell-embedded.com)と言うコーデック形式でエンコードしてもらうと言う結構複雑な仕組みをjTree,jThirdでまとめます。作品の作成時間が3時間30分で、チーム分けもふわっとしていたので結構大変でした。と言うか出来た人がそのコンテンツを発表したと言ういわゆる失敗系のJamでした。

と言う訳で、jThirdの使いかただけでもメモてきに残しておきます。

#jThirdについて
Web系のLL言語はVM上で吸収されるのでいろいろあり過ぎて良くわからないのですが、WebでMMDのモデルとか動かせる様にカスタマイズしたWebページを作成できるWebの統合開発環境と投稿環境がそろっているといったところでしょうか。わたしのMac Book ProのIntelCPU/GPUだと正直辛かったです。**「ふぁ〜」**とかなりっぱなしでした。

#使い方
Web上に統合開発環境がある感じで、アカウントを作らなくてもanonymous365とか自動生成アカウントが作られるので、パスワードだけを設定すれば、直に使えます。
![スクリーンショット 2015-06-01 11.26.48.png](https://qiita-image-store.s3.amazonaws.com/0/25895/e72664c1-4bfd-e597-ab79-40333407ae39.png)

統合開発環境は以下の感じです。
![スクリーンショット 2015-06-01 11.26.29.png](https://qiita-image-store.s3.amazonaws.com/0/25895/2346f082-cb9c-9587-8b58-309139eed861.png)

#どきゅめんと
[正式？](https://github.com/j3-jp/jThree-docs)
[勇士？](http://seesaawiki.jp/j3wiki/d/%cd%ad%bb%d6%a5%b5%a5%a4%a5%c8)
はっきり言って、やっている人しか解りません。

#Web統合開発環境jThirdの使い方
真ん中のビューのプラスボタンを押すと新規にプロジェクトを作成します。
![スクリーンショット 2015-06-04 16.28.02   .png](https://qiita-image-store.s3.amazonaws.com/0/25895/4a966dd2-6861-957f-832e-56ee8b199735.png)

既存のプロジェクトはボタンの左となりのプルダウンメニューで開けます。
![スクリーンショット 2015-06-04 16.32.21.png](https://qiita-image-store.s3.amazonaws.com/0/25895/166f5250-a9c5-c673-f7e0-9c8fc3afcdb1.png)

真ん中ビューの下側に拡張ビューみたいなのが隠れています。緑の丸の部分をクリックすると拡張機能用のリストがせりあがります。
![スクリーンショット 2015-06-04 16.33.54  .png](https://qiita-image-store.s3.amazonaws.com/0/25895/36861aa5-4ca0-a009-9f87-a47d56f73728.png)

こんなかんじで必要なタグなどを水色の上ボタンで追加します。
![スクリーンショット 2015-06-04 16.40.00.png](https://qiita-image-store.s3.amazonaws.com/0/25895/35f708bf-1f44-6d27-8e8f-978ac534bba6.png)

フロッピーディスクボタンを押さないとローカルに保存されません。再生はお隣のビューのボタンになります。
![スクリーンショット 2015-06-04 16.42.54.png](https://qiita-image-store.s3.amazonaws.com/0/25895/b6cb62a4-1b98-17f4-488f-fbbeebdf22b6.png)

右側プレビューのSteta publicにして、雲マークボタンを押すと公開されます。
![スクリーンショット 2015-06-04 16.46.13.png](https://qiita-image-store.s3.amazonaws.com/0/25895/8b2d1816-f846-8cb4-1993-b171a2d3efd1.png)

#おわりに
開発途中ですので結構あれなのとドキュメントが解っている人ようすぎるので初心者向きではない気がします。が使いこなせればWebのUnityになる可能性は秘めています。
macbook 12 を手に入れたので設定

# app

* homebrew

```
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

```bash:
brew update
brew tap Caskroom/cask
brew install Caskroom/cask/osxfuse
brew install sshfs
brew install w3m nkf wget zsh Caskroom/cask/sshfs autossh tig mutt vim go mobile-shell bash-completion pwgen cdrtools
brew install mariadb homebrew/php/php56-mysqlnd_ms
```

* sshの接続先を補完されるようにbash_completionを使う。

```bash:.bash_profile
if [ -f `brew --prefix`/etc/bash_completion ]; then
    . `brew --prefix`/etc/bash_completion
fi
```

* DB接続
  * [sequelpro](http://www.sequelpro.com/download)

* Turbo boostを無効化しバッテリー持続時間を伸ばす
  * [Turbo Boost Switcher for OS X | rugarciap.com](http://www.rugarciap.com/turbo-boost-switcher-for-os-x/)

# CapsをEscキーに割り当てる

* [Seli](https://pqrs.org/osx/karabiner/seil.html.en)
  * Caps Lockキーを`アクションなし`にする。(ディレイ予防)
  * keycodeを`53`にする。
  * 設定したら左上の☓で閉じる。(`Quit Seli`は押してはいけない。)

![スクリーンショット 2015-06-04 19.09.19.png](https://qiita-image-store.s3.amazonaws.com/0/25728/39d0e65e-feac-9187-d2b4-db2887f94bfa.png)
![スクリーンショット 2015-06-04 19.11.07.png](https://qiita-image-store.s3.amazonaws.com/0/25728/750797f4-b67e-3cf8-e066-17a8eb9a4d6c.png)

# safari

* ツールバーの表示を隠す。

## 拡張機能

* [ublock](https://www.ublock.org)
* [Translate Safari Extension](http://www.sidetree.com/extensions.html#Translate)
* [Feed登録button](https://extensions.apple.com/details/?id=de.philippkatz.feedbutton-U49888C3GJ)
* [リンク先URLを画面左下に表示](http://dbergey.github.io)
* [WOT(Web of Trust)](https://www.mywot.com/en/download)

# 解像度についてメモ

* 2304 x 1440
  * 2で割ると、1152 x 720

## LinuxのVNCサーバ設定例

```
vncserver -geometry 2304x1440 :0 -dpi 180
```

* dpiが96や120だと小さすぎる。192だと若干大きかったので180で。

## XQuartz (X11)

* http://xquartz.macosforge.org/landing/

```bash:
brew install Caskroom/cask/xquartz
```

## firefox + selenium IDE

* [Selenium IDE](http://www.seleniumhq.org/download/)

```bash:
sudo easy_install pip
sudo pip install selenium
```

# 3本指でドラッグを有効にする

![スクリーンショット 2015-06-04 16.23.44.png](https://qiita-image-store.s3.amazonaws.com/0/25728/74d400d5-be0f-2a53-2ad2-fc789b55b254.png)

## 3本指で辞書検索

これをチェック外したらできた。なぜか競合

![スクリーンショット 2015-06-04 16.22.52.png](https://qiita-image-store.s3.amazonaws.com/0/25728/b0794d66-52b4-fccf-7f79-fb836b223558.png)
WebMatrix が強制終了する場合

WebMatrix を起動して、サイトを選択すると強制終了するようになってしまった場合の対処法。

1. WebMatrix を起動し、右下の「オプション」をクリック
2. 「学習」をクリックし、右上に表示される「検証」をクリック
3. フィードソースの URL の横に ○ とか × がつくので、 x のものを削除で、無事起動できるようになる

### 参考 ###

[WebMatrixでサイトを選択するとクラッシュする](https://kurosawa0626.wordpress.com/2014/04/05/webmatrix%E3%81%A7%E3%82%B5%E3%82%A4%E3%83%88%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%99%E3%82%8B%E3%81%A8%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%81%99%E3%82%8B/)
json4s ライブラリで extract できないケース


# 概要
Scala の Json ライブラリ で json4s を使っているが、とある JValue を、ある case class に
extract しようとした際、予想外に extract できないケースがあった。

# こんなケース
```JsonExtractTest.scala
import org.json4s.DefaultFormats
import org.json4s.JsonAST.JValue

object JsonExtractTest {

  implicit val formats = DefaultFormats
  
  def extract(json: JValue) = {
    json.extract[Test]    
  }
  
  case class Test(item: Option[List[Int]])
}
```

# REPL で試してみる

試しに REPL にペーストして実行してみると

```REPL
scala> :paste
// Entering paste mode (ctrl-D to finish)

import org.json4s.DefaultFormats
import org.json4s.JsonAST.JValue

object JsonExtractTest {

  implicit val formats = DefaultFormats
  
  def extract(json: JValue) = {
    json.extract[Test]    
  }
  
  case class Test(item: Option[List[Int]])
}

// Exiting paste mode, now interpreting.

defined object JsonExtractTest

scala> import org.json4s.native.JsonMethods._
import org.json4s.native.JsonMethods._

scala> JsonExtractTest.extract(parse("""{"item":[4,5,6]}"""))
JsonExtractTest.Test = Test(Some(List(4, 5, 6)))
```

予想通り。

# Specs2 で確認してみる
よし、うまくいくこと確認できたぞー！と実装してSpecs2も実装

```JsonExtractTestSpec.scala
import org.specs2.mutable.Specification
import org.json4s.native.JsonMethods._

class JsonExtractTestSpec extends Specification {

  "extract method" should {
    "return item" in {
      val jsonString = """{"item":[4,5,6]}"""
      val result = JsonExtractText.extract(parse(jsonString))

      result.item must beSome(List(4, 5, 6))
    }
  }
}
```

テスト流してみる。

```
> test
[info] JsonExtractTestSpec
[info]
[info] extract method should
[info] ! return item
[error]    MappingException: : Can't find constructor for ExtensionRequest  (ScalaSigReader.scala:27)
[error] org.json4s.reflect.ScalaSigReader$.readConstructor(ScalaSigReader.scala:27)
[error] org.json4s.reflect.Reflector$ClassDescriptorBuilder.ctorParamType(Reflector.scala:108)
[error] org.json4s.reflect.Reflector$ClassDescriptorBuilder$$anonfun$6.apply(Reflector.scala:98)
[error] org.json4s.reflect.Reflector$ClassDescriptorBuilder$$anonfun$6.apply(Reflector.scala:95)

...(snip)...
```

ほわーーーーーーーーーい！ジャパニーズピーポー！！
なんで REPL だとうまくいったのにテストコケるんだよー！！

# 調査
ぐぐったらソッコー出てきた。。
https://github.com/json4s/json4s/issues/125
リフレクションの関係でクラス内で定義された case class には extract できないよってことらしい。。

# 修正、そして結果
object ないで定義した case class Test を外に出す。
そしてテストをもっかい実行してみる。

```
> test
[info] JsonExtractTestSpec
[info]
[info] extract method should
[info] + return item
```
できた。。

# まとめ
この挙動は知らなかったので勢いで投稿してしまった。
item の型を Option[List[String]] にすると case class をクラス内に定義しても extract できるという謎がありますが、いったんここまで。。
send-mail: fatal: user1(1000): queue file write error とは、サイズ制限に引っかかったということ。

logwatchにて検知。

## 参考

* [Postfix Illegal seek / queue file write mail server error and solution](http://www.cyberciti.biz/tips/linux-unix-posttfix-mutt-illegal-seek-error.html)
* [Postfix のサイズ 制限](http://www.math.kobe-u.ac.jp/~kodama/tips-postfix-size.html)

## 解説

> Postfix version 2.3 or olders reports "illegal seek" instead of "file too large" error. There are two ways to fix this problem:

サーバから直接メール送信する時のサイズが大きすぎる場合になる様子。
main.cf の該当箇所を変更すれば良いが、そもそもでかいメールはなにかありそう。


```bash:main.cf
message_size_limit = 20971520
```
oh-my-fishのプラグイン分割による設定変更

5月の末にoh-my-fishの大きな仕様変更がありました。
https://github.com/oh-my-fish/oh-my-fish/commit/91f37c43ce0ae091564656c57cc09d54558d4e6d

従来プラグインやテーマははメインレポジトリに入っていたのですが、
テーマ、プラグインごとのレポジトリに分割されるようになりました。

organization化もしています。
https://github.com/oh-my-fish

~~ランディングページはここの予定みたいですが、まだアクセスできません。~~
~~https://www.oh-my-fish.com/~~
仮に入れた値だったようです。

```bash:config.fish(分割前)
set fish_path $HOME/src/github.com/bpinto/oh-my-fish
set fish_theme gitstatus
set fish_plugins z emoji-clock
set fish_custom $HOME/.config/fish/custom
. $fish_path/oh-my-fish.fish
```

```bash:config.fish(分割後)
set fish_path $HOME/src/github.com/bpinto/oh-my-fish
. $fish_path/oh-my-fish.fish
Theme "gitstatus"
Plugin "z"
Plugin "emoji-clock"
```

いままでは
`. $fish_path/oh-my-fish.fish`
を実行する前にfish_theme,fish_pluginsをsetしていました。

今後は
`. $fish_path/oh-my-fish.fish`
のあとに関数Theme,Pluginをつかってテーマやプラグインを有効にします。
指定したプラグインが入っていない場合は
`omf install`
でインストールします。
MySQL　カラム名を小文字に変換したい

カラム名に、大文字・小文字が混ざっていてWindowsやMacからLinuxにデータを移行したら動かないなんてことになったときのためのメモ

素直に小文字に統一しようぜとなった場合

カラム名を変更するSQL(itemテーブルのIDをidに変換する)
`alter table item change ID id varchar(12);`

上記のSQLを一括で作成するSQL
`select concat('alter table ',table_name,' change ',column_name,' ',LOWER(column_name),' ',column_type, ';' ) from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = 'データベース名(スキーマー)'
`
[c++]テンプレート関数の定義と実装はまとめてヘッダファイルに書かなければいけない

# [c++]テンプレート関数の定義と実装はまとめてヘッダファイルに書かなければいけない

（備忘録です．もっとうまいやり方があったら教えてください．．．）

関数の定義は「ヘッダファイル」，実装は「cppファイル」に記述するというような場合が結構あると思います．
しかし，テンプレート関数の場合，定義と実装は「ヘッダファイル」と「cppファイル」に分離できないようです．


## ダメな例
```hoge.h
class Hoge{
 public:
  template <class T> void func1(T val);
};
```

```hoge.cpp
#include <iostream>
#include "hoge.h"

template <class T>
void Hoge::func1(T val){
  std::cout << "func1" << std::endl;
}
```

```main.cpp
#include "hoge.h"

int main(){
  Hoge h;
  h.func1(1);
  h.func1("test");
}
```

### 結果

```g++
$ g++ -o hoge.exe hoge.cpp main.cpp
main.cpp: In function ‘int main()’:
main.cpp:5: error: no matching function for call to ‘Hoge::func1()’
```

と出る．

## 解決策

ヘッダに実装も書く．

一応，定義とは分離させて以下のように書いた．

```hoge.h
#include <iostream>

class Hoge{
 public:
  template <class T> void func1(T val);
};

template <class T>
void Hoge::func1(T val){
  std::cout << "func1" << std::endl;
}
```

```main.cpp
#include "hoge.h"

int main(){
  Hoge h;
  h.func1(1);
  h.func1("test");
}
```

### 結果

```
$ g++ -o hoge.exe main.cpp
$ ./hoge.exe
func1
func1
```

## 明示的実体化による解決

テンプレートの実装をヘッダに書かなければならない理由 - (void*)Pないと:　http://d.hatena.ne.jp/pknight/20090826/1251303641
によると，
コンパイルの時点でテンプレート関数が一回も実体化されていないのが問題らしい．

そこで予め使われる型を使って実体化しておくと実行できる．

```hoge.h
class Hoge{
 public:
  template <class T> void func1(T val);
};
```

```hoge.cpp
#include <iostream>
#include "hoge.h"

template void Hoge::func1(int val);
template void Hoge::func1(char const* val);

template <class T> void Hoge::func1(T val){
  std::cout << "func1" << std::endl;
}
```

```main.cpp
#include "hoge.h"

int main(){
  Hoge h;
  h.func1(1);
  h.func1("test");
}
```

### 結果

```
$ g++ -o hoge.exe hoge.cpp main.cpp
$ ./hoge.exe
func1
func1
```

しかし，明示的実体化は予め使われる型の関数宣言が必要なので，新しい型（特にユーザ定義型）が追加される場合は対応できない！
[メモ] Mac版 Android Studio で Eclipse キーバインド

## 動機
長年、Windows版Eclipseを使ってきて指が慣れてしまっていたので、EclipseっぽいキーバインドをAndroid Studioでやってみた

## 環境
Mac版 Android Studio 2.2

## やったこと
### キーマップの変更
1. メニューから[AndroidStudio]-[Preferences...]を開く
2. [Keymaps]から[Eclipse (Mac OS X)]を選択し、[copy]を押下する
3. [Main menu]-[Edit]-[Find]-[Find...]に[⌘F]を追加
4. [Main menu]-[Navigate]-[Declaration]に[⌘Button1 Click]を追加

## その他設定しとくと便利なもの
### エディタの背景色を黒色にする
1. メニューから[AndroidStudio]-[Preferences...]を開く
2. [Editor]-[Colors & Fonts]を開く
3. [Schema]をDarculaに変更する

### コード補完時の大文字小文字判定をなくす
1. メニューから[AndroidStudio]-[Preferences...]を開く
2. [Editor]-[General]-[Code Completion]を開く
3. [Case sensitive completion]をNoneに変更する

### 行番号の表示、メソッドセパレータの表示、空白文字の表示
1. メニューから[AndroidStudio]-[Preferences...]を開く
2. [Editor]-[General]-[Appearance]を開く
3. [Show line numbers],[Show method separators],[Show whitespaces]にチェックを入れる

### ログ文字色変更
1. メニューから[AndroidStudio]-[Preferences...]を開く
2. [Editor]-[Colors & Fonts]-[Android Logcat]で[Save As...]を押下し、[android]を作成
3. [Info]を緑色に、[WARN]を黄色に変更する

## 参考ページ
- http://dev.classmethod.jp/smartphone/android/android-studio-customize-settings/
AppPreview用に動画サイズを拡大／縮小する

AppPreview動画を、各サイズ分作成する時のメモ。
私の場合、iPhone5sで録画した動画を、ffmpegで拡大して作りました。
録画にはQuickTimeを使っています。

例えば、4.7インチ（iPhone6）用の動画は以下のコマンドで作成。
`ffmpeg -i AppPreview.mov -s 1080x1920 -r 30 -strict -2 AppPreview_1080x1920.mov`

※`-r 30`で30fpsにしています。


iPad用の動画は縦横比が違うので拡大／縮小しただけではダメですが、
上下切り取りの合わせ技で、無理矢理作ることはできそうです。

まずは横のサイズ（900）に合わせて拡大／縮小して、
`ffmpeg -i AppPreview.mov -s 900x1598 -r 30 -strict -2 AppPreview_900x1598.mov`

さらに上下を切り取って900x1200に。
`ffmpeg -i AppPreview_900x1598.mov -vf crop=900:1200 -strict -2 AppPreview_900x1200.mov`


※この場合、iPad用の縦横比で、上下黒帯が出ているような状態でアプリを起動させる必要があります。



以上です。