OmniAICreator/Qiita-1.07M huggingface dataset:
OpenCVその４矩形描画


Opencv
http://docs.opencv.org/trunk/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html

cmake
http://www.wakayama-u.ac.jp/~chen/cmake/cmakecv.html

そのままですが前提.
gcc,OpenCV,CMakeインストール済み。

ステップ
1.MyRectangle.cpp
2.CMake file CMakeLists.txt
3.cmake make
4.Run

Using OpenCV with gcc and CMake
Note We assume that you have successfully installed OpenCV in your workstation.
The easiest way of using OpenCV in your code is to use CMake. A few advantages (taken from the Wiki):
No need to change anything when porting between Linux and Windows
Can easily be combined with other tools by CMake( i.e. Qt, ITK and VTK )
If you are not familiar with CMake, checkout the tutorial on its website.
Steps

Create a program using OpenCV
Let’s use a simple program such as DisplayImage.cpp shown below.

参考：http://opencv.jp/cookbook/opencv_drawing.html
少々、追加、変更しています。

名前空間cv使用宣言
ウィンドウサイズ
矩形の始点、終点の座標


```cpp:MyRectangle.cpp
//MyRectangle.cpp
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

//from http://opencv.jp/cookbook/opencv_drawing.html#draw-rectangle

using namespace cv;

int
main(int argc, char *argv[])
{
	//change window size 
	Mat img = Mat::zeros(500, 900, CV_8UC3);

	/*
	// Red，太さ3，4近傍連結
	rectangle(img, Point(200,50), Point(300, 150), Scalar(0,0,200), 3, 4);
	// Green，太さ5，8近傍連結
	rectangle(img, Point(200,200), Point(300, 300), Scalar(0,200,0), 5, 8);
	// Blue，塗りつぶし，アンチエイリアス
	rectangle(img, Point(200,350), Point(300, 450), Scalar(200,0,0), -1, CV_AA);
	*/

	//modify by ggggnonaka start
	// Red，太さ3，4近傍連結
	rectangle(img, Point(0,50), Point(100, 150), Scalar(0,0,200), 3, 4);
	// Green，太さ5，8近傍連結
	rectangle(img, Point(0,200), Point(300, 300), Scalar(0,200,0), 5, 8);
	// Blue，塗りつぶし，アンチエイリアス
	rectangle(img, Point(0,350), Point(600, 450), Scalar(200,0,0), -1, CV_AA);
	//modify by ggggnonaka end

	namedWindow("drawing", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
	imshow("drawing", img);
	waitKey(0);
}
//end MyRectangle.cpp
```

Create a CMake file
Now you have to create your CMakeLists.txt file. It should look like this:

```CMakeLists.txt
cmake_minimum_required (VERSION 2.6)

project( MyRectangle )
find_package( OpenCV REQUIRED )
add_executable( MyRectangle MyRectangle.cpp ) 
target_link_libraries( MyRectangle ${OpenCV_LIBS} )

```

Generate the executable
This part is easy, just proceed as with any other project using CMake:

```
cd <MyRectangle_directory>
cmake .
make
```
Run
./MyRectangle

Result
![kobito.1418989613.207590.png](https://qiita-image-store.s3.amazonaws.com/0/33317/33d1fdd9-22da-328c-818b-9b7d077c592f.png "kobito.1418989613.207590.png")
vue.jsのtemplateでsvgのimageタグ使うときに気をつける話


[vue.js@0.11.2以上ではrepeatするcomponentをtemplate化しないとけない](http://qiita.com/suisho/items/62f9572bb40c3c3ea378)ということがわかったので子要素をtemplate化したはいいものの、svgをtemplateにしたことでまた微妙な問題を踏んでしまった。



# `<image>`が`<img>`にされるよ！
`<svg>`と`<image>`を使うようなコンポーネントを作りたかったのでこんな感じでやると

```html
<html>
  <body>
    <svg id="sample">
      <g v-repeat="items" v-component="item"></g>
    </svg>
    <template id="item" >
      <image width=50 height=50 v-attr="'xlink:href': v"></image>
    </template>
    <script src="build.js"></script>
  </body>
</html>
```

```js
var Vue = require("vue")
Vue.component("item", {  
  template : "#item",
})

var app = new Vue({
  data: {   
    items : [
      {v : "http://cdn.qiita.com/assets/siteid-reverse-cd0519106e5814e34d402b3e821820cf.png"},
    ]
  },
  methods: {
  }
})

app.$mount("#sample")

```
↓こんな感じになってしまった。

```output.html
<g>
  <img width="50" height="50" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://cdn.qiita.com/assets/siteid-reverse-cd0519106e5814e34d402b3e821820cf.png">
</g><!--v-repeat-->
    
```

ぶへ。なんでー。
となったが割りとさっくり解決できた。

### 解法1: templateに直接stringで書く
いや。これはちょっと個人的には微妙。

```js
Vue.component("item", {  
  template : '"<image width=50 height=50 v-attr="\'xlink:href\': v"></image>"',
})
```
### 解法2: scriptタグで書く。
というかやっていてそもそも\<template>を使うとかいきがったことをしているから悪かった。
(そもそも\<template>使うのいいんだっけ？となったけど[このPull Request](https://github.com/yyx990803/vue/issues/335)で取り込まれているので問題なさそう）

なので\<script>で記述すれば問題なかった。

```html
    <script type="x-template" id="item" >
      <image width=50 height=50 v-attr="'xlink:href': v"></image>
    </script>
```
### 解法3: templateの親要素をsvgにする
他には親要素をsvgにすればちゃんと出てくれる

```html
<svg id="item" ><!-- display:noneはサンプルなので省略 -->　
   <image width=50 height=50 v-attr="'xlink:href': v"></image>
</svg>
    
```

### 解法4: templateにnamespaceをつける
更にこんなんでもOKそう。

```html
    <template id="item" xmlns="http://www.w3.org/2000/svg">
      <image width=50 height=50 v-attr="'xlink:href': v"></image>
    </template>
```

## どういうことか。

これはvueの話ではなくブラウザ側の挙動の問題の模様。
(chromeで調査したので他だとどうなるかは未調査です)

こんなサンプルを用意すると、以下のような出力がされる。

```html
<div id="foo">
  <image></image>
</div>
<script>
  console.log(document.querySelector("#foo").innerHTML)
</script>
```
```output
<img>
```

つまりvueがこれと同じようなことをしていて、chromeさんがparseする段にsvgとみなせないような`<image>`タグを`<img>`として扱ったということだろう

ちゃんとした検証はしていないが解法2が一番カバー率が高いのではと思っている。


## ちなみにxlink:hrefのはなし。
「あれ、v-attrにxlink:hrefって使えなくね？」って思ったけど
[このissue](https://github.com/yyx990803/vue/pull/354)にすでに上がっていて`v-attr="'xlink:href':url`にすればよいよーと言われていた。

助かった。
Sails.js で Grunt から gulp に変えても gulp は走らないという罠

罠
====

`.sailsrc` で Generator を差し替えて ([Sailsの内部のGruntをGulpに置き換える](http://qiita.com/dll7/items/f2acf9360033e8d00462))、`tasks/` ファイルを gulp ものに変えただけでは gulp は走らない。
当然 Grunt も走らない (間違っていたら教えてくださいm(__)m)。

`sails lift` を走らせたあとに別のターミナルで `gulp` を走らせても良いが面倒くさい。

対策
=====

というわけでとりあえず、`config/bootstrap.js`  or `.coffee` に gulp を走らせるコードを書いて、対策することにした。

`console.log` じゃなくて `util.print` を使っているのは、子プロセスの標準出力イベントで得た `data` に改行文字がすでに含まれているため。
`console.log` を使うと一行おきに空行が出て気持ち悪かったので、改行文字を吐かない `util.print` を使った。

```config/bootstrap.coffee
{spawn} = require('child_process')
{print, error} = require('util')

module.exports.bootstrap = (cb) ->
  # spawn('gulp') でも良いが、gulp が -g install されていないといけない。
  gulp = spawn('./node_modules/.bin/gulp')

  gulp.stdout.on 'data', (data) ->
    print("gulp: #{data}")

  gulp.stderr.on 'data', (data) ->
    error("gulp error: #{data}")

  cb() # 忘れないでね!
```
Node.jsでScheduledExecutorを作ってみた

Javaの[ScheduledExecutorService](https://docs.oracle.com/javase/jp/7/api/java/util/concurrent/ScheduledExecutorService.html)みたいなのをNode.jsでやりたかったので、作ってみた。

```js:ScheduledExecutor.js
module.exports = {
  scheduleAtFixedRate: function(callback, initDelay, period) {
    return new FixedRateSchedule(callback, initDelay, period);
  },
  scheduleWithFixedDelay: function(callback, initDelay, period) {
    return new FixedDelaySchedule(callback, initDelay, period);
  }
}

function FixedRateSchedule(callback, initDelay, period) {
  var timer = setTimeout(function() {
    callback();
    timer = setInterval(callback, period);
  }, initDelay);

  this.cancel = function() {
    clearTimeout(timer);
    clearInterval(timer);
  }
}

function FixedDelaySchedule(callback, initDelay, period) {
  var timer = setTimeout(function loop() {
    callback();
    timer = setTimeout(loop, period);
  }, initDelay);

  this.cancel = function() {
    clearTimeout(timer);
  }
}
```

## 使い方

```js
var ScheduledExecutor = require('./ScheduledExecutor');

// 2秒後から1秒間隔でコールバックを実行
var schedule = ScheduledExecutor.scheduleAtFixedRate(callback, 2000, 1000);

function callback() {
  console.log('hello');
}

// 10秒後にキャンセル
setTimeout(function() {
  schedule.cancel();
}, 10000);
```
vue.js@0.11.2以上でv-repeat + v-componentの挙動の違いに戸惑った話


**2014/12/20: ご指摘を受けた部分について修正しました**

# 0.11.0での話
もともと0.11.0で下記のような感じで作っていた

```html
<html>
  <body>
    <div id="sample">
      <div v-repeat="items" v-component="item">
        <span>baz</span>
      </div>
    </div>
    <script src="build.js"></script>
  </body>
</html>
```

```app.js
var Vue = require("vue")

// 子要素はコンポーネント化
Vue.component("item", {})

var app = new Vue({
  data :{
    items : [
      {v :1},
      {v :2},
      {v :3},
    ]
  }
})

app.$mount("#sample")
```

で、出力はこんな具合。

```output.html
    <div>
      <span>baz</span>
    </div><div>
      <span>baz</span>
    </div><div>
      <span>baz</span>
    </div><!--v-repeat-->
```

# さーて0.11.4にしてみるかー

とするとどうも出力が・・・

```output.html

      <div></div><div></div><div></div><!--v-repeat-->
```
あれーーーー
どうなってんのーーー

しばらく格闘して0.11.2以上でこうなることはわかったけど
どうすりゃいいのかわからんと思ってつたない英語で質問してみた。

https://github.com/yyx990803/vue/issues/646

~~ふむ、`<span>`は外出しにして`<content>`に挿入するように書き換えよということ~~
↑2014/12/20：勘違いしておりました。contentは必要ありませんでした

[公式ブログ](http://vuejs.org/2014/12/08/011-component/#Where_Does_It_Belong?)情報もあわせて教えてもらった。

### 解決編


```html
<body>
    <div id="sample">
      <div v-repeat="items" v-component="item">
      </div>
    </div>
    <template id="item">
      <span>baz</span>
    </template>
</body>
```


```app.js
var Vue = require("vue")

// 子要素はコンポーネント化
Vue.component("item", {
  template : "#item" // テンプレート利用
})

var app = new Vue({
  data :{
    items : [
      {v :1},
      {v :2},
      {v :3},
    ]
  }
})

app.$mount("#sample")
```

こうすることで確かに期待通り動いた！

これ困る人いるんじゃないかなあ・・・

warn出してくれたらいいのにと思ってコード追っかけてみたけどさすがにどこの変更の影響なのかは特定できず。。。

### もうちょっと試した

[@tejitakさんからコメント](http://qiita.com/suisho/items/62f9572bb40c3c3ea378#comment-f27514d091e5482ec57e)を受けて\<content>についてもうちょっと試してみた。

上記の例では簡略化のため`<span>`には何もつけていなかったが、子要素にディレクティブではcontentを使う/使わないが変わってきそうだった。



#### まず\<content>を使う例
http://jsfiddle.net/suisho/xetpretq/5/

```html
    <div v-repeat="items" v-component="item" >        
        <span v-text="str"></span> 
    </div>
    <template id="item2">
        <content></content>
    </template>
```
こんな具合。
出力は

```
<span></span>
```

となってしまいディレクティブは無視されてしまう。

#### template側にデータをつける
http://jsfiddle.net/suisho/xetpretq/4/

```html
    <div v-repeat="items" v-component="item" >
    </div>
    <template id="item2">
      <span v-text="str"></span> 
    </template>
```
こんな具合。
これだとちゃんとディレクティブが効いてくれた。

```
  <span>baz</span> 
```

### まとめ
componentのディレクティブを効かせるためには、やっぱり`<template>`側にディレクティブ付きの子要素を書く必要がある模様。
`<content>`はそういうのが必要無くinjectしたいときに使うと良いのだろう。




## どうでもいいはなし
vue 0.11.4で`Vue.config.debug=true`たいへんべんり。今までのデバッグしづらさが一気に解消した感じ。
地図配信でネットワーク状況を見てみました onSoftLayer


Outboundが大量に発生しがちな地図配信で、ネットワーク状況を見てみました。


<h1>準備</h1>
クラウド無料トライアルでサーバ構築。
データセンターはSingapore 1を選びましたが、Surcharges:International Servicesの
費用が掛かるかもしれません。

CentOS、Apache、MySQL、phpで環境を構築。
とりあえずのセキュリティ設定で、脆弱性スキャンも使ってみました。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/62630/498c307e-5469-a0e1-4969-de54f775ec33.png)

![2.png](https://qiita-image-store.s3.amazonaws.com/0/62630/ae5bd952-c872-ddd9-f895-d6e3e1a8754c.png)

![3.png](https://qiita-image-store.s3.amazonaws.com/0/62630/f4de83ad-9ed0-959f-3963-fc3d283f8420.png)

Traceのワーニングが出ているので、Traceメソッドを無効化。
　/etc/httpd/conf/httpd.conf
　TraceEnable Offを追加

再スキャンを実施した結果、ワーニングが無くなりました。
![2-2.png](https://qiita-image-store.s3.amazonaws.com/0/62630/f3304d42-a748-3eb3-8b10-8bf244d1fbaf.png)

その他の作業として、
地図データを配置。（地理院地図を使用）
CodeIgnater+CRUDで管理画面と地図配信APIを作成。

<h1>Webアプリ、Androidアプリ作成</h1>
Webアプリは、OpenLayersを使用して構築。
Layerには、地図配信APIを指定。
![7.png](https://qiita-image-store.s3.amazonaws.com/0/62630/ed865a1e-143d-4b02-b7b8-066d4767bd12.png)

Androidアプリは、<a href="http://xn--nqqq0thnh966a.jp/product" target="_blank">GIcompo For Android(GIA)</a>を使用して構築。
Nativeアプリで地図のキャッシュも可能。
![Screenshot_2014-12-16-16-15-44.png](https://qiita-image-store.s3.amazonaws.com/0/62630/e9b743fe-0d1a-fa11-d28d-86ff2e168bd7.png)


<h1>ネットワーク状況を確認</h1>
Devices->Device List->（対象のDeviceを選択）->Device Details->Bandwidthにて確認
![4.png](https://qiita-image-store.s3.amazonaws.com/0/62630/ee9bd334-d232-71d5-da6c-7678c5a96eb3.png)

グラフを範囲選択して、グラフをZoomできます。
![5.png](https://qiita-image-store.s3.amazonaws.com/0/62630/d28458c2-cb72-5c88-1a17-ae185bf0422b.png)
![6.png](https://qiita-image-store.s3.amazonaws.com/0/62630/0b0eba44-8d3e-f482-2c12-969d0dd21d44.png)
WebアプリやAndroidアプリを使用することでOutboundが発生することが確認できました。
最初のInboundは、地図データを配置したため。


<h1>課題</h1>
サマリーされた結果の参照になるので、もっと細かい分析にはユーザーデータ等との
紐付が必要です。
今回のAPIでは、ダウンロードしたファイル名と日時を記録してみました。
![8.png](https://qiita-image-store.s3.amazonaws.com/0/62630/90b949f5-cb3f-e483-1811-6383639ede3c.png)
Steve Wozniakはつまらなくない。 by docker

# Steve Wozniakはつまらなくない。


Dockerでcontainerを起動すると、勝手に名前がつきます。(指定しなければ)
その名前はどうやって付けられているのか、気になってコードを見てみました。

付けられる名前は例えば、

- adoring_goldstine  
- angry_almeida

のように、 `形容詞 + 人名` です。

形容詞は全部で57個
人名は全部で73個

ちなみに、 **偉大な科学者とHackerの名前** です。
(コードのコメントに、人物の説明書きがあります！！)

その組み合わせは 57 x 73 = 4,161 個です。

**ところが** 、出てくる組み合わせは 4,160個
**一つだけ、出ない組み合わせがあります**。

その理由は以下のコードにあります。

```
	if name == "boring_wozniak" /* Steve Wozniak is not boring */ {
		goto begin
	}
```
https://github.com/docker/docker/blob/3c5155ac16bbf4d02d88ad5f2c4bfef7844dad4e/pkg/namesgenerator/names-generator.go#L88-L90

それは、 `boarning_wazniak` なぜなら、Steve Wozniakはつまらなくないから。



## 備考

名前が作られてるコードはここです
https://github.com/docker/docker/blob/3c5155ac16bbf4d02d88ad5f2c4bfef7844dad4e/pkg/namesgenerator/names-generator.go

数字が最後につくこともあるみたいです。
https://github.com/docker/docker/blob/610842f906a942e9784bc16c201860dc89ba19ba/daemon/daemon.go#L491

以下のコミット時点での数です。https://github.com/docker/docker/blob/3c5155ac16bbf4d02d88ad5f2c4bfef7844dad4e/pkg/namesgenerator/names-generator.go
gurobiを利用した際のpython同士の競合によるエラー


#問題と当面の解決法

とあるpythonファイルを実行しようとしたら以下の様なエラーを吐き出しました．  

```
$ python [filename].py
Fatal Python error: PyThreadState_Get: no current thread
[1]    1588 abort      python [filename].py
```

ちなみに，条件としては以下の様な状況でした．  

- 他のpythonファイルは実行できる    
- クリーンインストール以前は実行可能であった
- 外部ライブラリ（gurobipy）を使用している

初めて見るタイプのエラーだったので何が原因だろうと調べてみたところ，簡潔に言えば，（元から？）Macにバンドルされているpythonとbrewでインストールしたpythonの間で何にかが悪さをし合ってるようです．
理由も分からないですが，もしかしたらpythonさんの管理もbrewで任せようってしたのがよろしくなかったのでしょうか．

と言うことで，brewのpythonさんをアンインストールしてしまいました．

```
brew uninstall python
```

これで解決．無事実行できるようになりました．
おそらくは２つのpythonさんのバージョンが違ったり(macが2.7.6でbrewが2.7.9)，そのせいでパスが上手く通ってなかったりって原因なのでしょうが，よく理解してません．
しかし，直近のタスクが溜まっているので見て見ぬふりをすることにします．

もし，詳しい方がいらっしゃれば，原因を簡単に教えて頂ければ幸いです．

##解決法（追記）

gurobiの開発者のGreg Glocknerさん曰く，gurobiはOSXにデフォルトでインストールされているpythonしかサポートしていないらしいですね．
つまり，brewのpythonをバージョンダウンするか，uninstall（消去），もしくはunlink（一時停止）するしかないのですね．

ちなみに，私はunlinkすることにしました．
とりあえずは，単純に

```
brew unlink python
```
で停止させておいて，必要なときは

```
brew link python
```
で復活させるって訳です，すっごい簡単！
もしくはpython内でgurobiを走らせる時のみ

```
import os
os.system('brew unlink python')

（実行内容）

os.system('brew link python')
```
のように書いても楽かもしれません．

解決していない気もしますが，何となく原因が分かったのでスッキリしました．
爆速でプリントデバッグするライブラリを作ったよ

## 動機

`println` から `debugPrintln` に書き換えたり、メソッドチェーンの途中で `println` を挟むのってめんどくさくないですか？

僕はめんどくさいです。

### サンプルコード

Alamofire を使った場合だとこんな感じで書くかと思います。

```swift
Alamofire.request(.GET, "http://httpbin.org/get")
         .responseJSON { (_, response, JSON, _) in
                  println(response)
                  println(JSON)
         }
```

メソッドチェーンをやめて変数で受けるとこんな感じですかね。

```swift
var request = Alamofire.request(.GET, "http://httpbin.org/get")
debugPrintln(request)
request.responseJSON { (_, response, JSON, _) in
    println(response)
    println(JSON)
}
```

まぁこの例だと第一引数に request オブジェクトがわたってきているからそれを debugPrintln しろって話なんですけどねｗ

request を `debugPrintln` することで curl を用いたコマンドを出力してくれるので重宝します。

見てもらえれば分かるように原型を崩しまくっちゃってますね。


## Crying を作ったよ
[dealforest/Crying](https://github.com/dealforest/Crying)

名前からして**泣く**を連想するかと思いますが、正解です。

`Charthage` や `CocoaPods` にも対応してるんで簡単に使えるかなと思います。

CocoaPods の場合 swift ブランチを使う必要があります。
詳しくは「[CocoaPods Is Ready for Swift](http://swiftwala.com/cocoapods-is-ready-for-swift/)」をみてください。

さて、爆速と謳うからにはどんなもんやねん、と思うわれるかもしれません。

前述したサンプルコードと同義です。

```swift
import Crying

Alamofire.request(.GET, "http://httpbin.org/get")></
         .responseJSON { (_, response, JSON, _) in
                  response><
                  JSON><
         }
```

どうですか？
原型を残したまま**泣く**顔文字を書くだけでいいんです。

| 顔文字 | 意味 |
|:-----:|:--|
| ><    | println |
| ></   | debugPrintln |

なにやら黒魔術的な雰囲気をただよわせていますね。

実際やってることは演算子を定義しているだけです。

とはいえ、ソースコードをほぼ変更することなく `println` や `debugPrintln` を書くことができます。

どうやって実現するまでにいたったかを[別エントリー](http://blog.dealforest.net/2014/12/fast_print_debug_lib_crying/)にまとめてみたので、気になる方はどうぞ。

## まとめ

みなさま満足していただけたでしょうか。
Crying があれば爆速でプリントデバッグができるようになりますね。

ただ、`><` や `></` を残したままコミットしたり配布したりするのは汚いのでやめた方がいいと思います。
あくまで一時的なデバッグのために使うくらいでのご利用をおすすめします。

何かフィードバック等があれば [@dealforest](https://twitter.com/dealforest) まで連絡ください。

それでは良いデバッグライフを。

## おまけ

iOS のアドベントカレンダーなのに Swift だけで終わらすわけにはいきません。

Objective-C の場合だと [ikesyo/NSObject-Tap](https://github.com/ikesyo/NSObject-Tap) を使えば同じようなことができます。

ただこれを使うためには NSObject を継承してないと使えません。

```objc
NSString *str = [@"hoge".tapp() stringByAppendingString:@"/fuga"].tapp();
# hoge
# hoge/fuga
```
個人的にメソッド呼び出しを `.` でやるのは嫌いですけど、`[]` で囲うのはめんどくさいので、書いたら消すというスタンスのため妥協してます
メモ：R の missing() は伝播する

```r:R
func1 <- function(dummy) {
  missing(dummy)
}
  
func1()
func1("hoge")
```

```:結果
[1] TRUE
[1] FALSE
```

```r:R
func2 <- function(dummy) {
  func1(dummy=dummy)
}

func2()
func2("hoge")
```

```:結果
[1] TRUE
[1] FALSE
```

結論： `missing()` は伝播する。
s3cmdがエラーが出てしまう件のその場しのぎ対応


何かmacのdefaultの文字エンコードがx-mac-japaneseにpython2.6が対応してないぽい。
叩いたらこんなエラー出る

```
$ s3cmd --configure
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    An unexpected error has occurred.
  Please report the following lines to:
   s3tools-bugs@lists.sourceforge.net
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Problem: LookupError: unknown encoding: x-mac-japanese
S3cmd:   1.0.1

Traceback (most recent call last):
  File "/usr/local/bin/s3cmd", line 2007, in <module>
    main()
  File "/usr/local/bin/s3cmd", line 1889, in main
    sys.stdout = codecs.getwriter(cfg.encoding)(sys.stdout, "replace")
  File "/usr/local/opt/pyenv/versions/inblue/lib/python2.6/codecs.py", line 994, in getwriter
    return lookup(encoding).streamwriter
LookupError: unknown encoding: x-mac-japanese

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    An unexpected error has occurred.
    Please report the above lines to:
   s3tools-bugs@lists.sourceforge.net
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
```

***あくまでもその場しのぎの対応ですので後々自分でどうにかしてください***

強制的に直しちゃった

/usr/local/bin/s3cmd line 1889 周辺

```python
1887     ## Set output and filesystem encoding for printing out filenames.
1888 +    cfg.encoding = "UTF-8"
1889     sys.stdout = codecs.getwriter(cfg.encoding)(sys.stdout, "replace")
1890     sys.stderr = codecs.getwriter(cfg.encoding)(sys.stderr, "replace")
```

pythonをコンパイルし直すのとか辛いのでこんな解決策。
コンパイルし直す方法は下のURLとかに載ってます。

もっといい方法をご存知の方がおりましたら是非教えて下さいませmm

### 参考

* [Python - Djangoの LookupError: unknown encoding: x-mac-japanese の解決方法 (Django 1.5版) - Qiita](http://qiita.com/hagino3000/items/54e7bdbbfa5e99216d04)
* [「LookupError: unknown encoding: X-MAC-JAPANESEの罠 」の件 - Djangoへの片思い日記](http://d.hatena.ne.jp/jYoshiori/20070907/1189184174)
朝起きるための工夫 - 生活に合わせる照明について


## 導入
> この記事は[おうちハック Advent Calendar 2014](http://qiita.com/advent-calendar/2014/ouch-hack)の19日目の記事です。
> 昨日の記事ははbraitomさんの[iBeaconで濡れしらず](http://braitom.hatenablog.com/entry/2014/12/18/010817)でした。

今年の4月に大学に進学して一人暮らしを始めたのですが、なんといっても朝起きるのに苦労しています。今まで寮生活で、同室が居たりとオープンな暮らしをしていたため自然に起きることが出来たのですが、1人だと起きるのが辛い。。。！

特に我が家はアパートの1階のため、防犯のために一応ベランダ(といっても仕切りも何もないのですが)の雨戸を閉めて寝ています。そのため、朝になっても陽の光が差し込まず、目覚めに影響しているという仮説を立てました。

そこで、APIを叩けちゃうフルカラーLED電球のhueを使って、僕の生活に合わせて行動をアシストする照明を作ってみます。

（ところでアドベントカレンダー20日目担当の@ajimiteiさんがhue目覚ましについて書く可能性があるということで完全にかぶってしまった感があります、まあ内容は微妙に違ってるはずだ。。。！たぶん。。。！ということで。すみません。）


## 作ったものの概要
概要を図で示します。
![ouchi.png](https://qiita-image-store.s3.amazonaws.com/0/6111/979caa06-cea2-1e36-231f-ff5ce41f1703.png "ouchi.png")

僕は自分の予定をすべてGoogle Calendarに突っ込んでいるため、その情報を読みだして朝起きる時間を決めることにします。中途半端に早い時間に起きると2度寝してしまう危険があるためです。僕の生活に合って動いてくれてる感があってなんとなくかっこいいですね。

Google Calendarで予定を取り出すためにGoogle Apps Scriptを使い、おうちにあるPaspberry Piでhueを操作しています。午前中の予定のある一時間前になると徐々に明るく光るようにしています。単純かつ楽に作れたので満足度が高いです。


## 使ってみた結果
![写真 2014-12-19 16 01 56.jpg](https://qiita-image-store.s3.amazonaws.com/0/6111/004eec86-2c26-8ca1-c699-eea5fd4e62f1.jpeg "写真 2014-12-19 16 01 56.jpg")
(hueが入ったランプをベットサイドにおいてます)

使ってみた結果ですが、効果はちょっとあるような気がします。が、もっとスッと起きれるようになりたいです。今後は直接目に照射する感じに実装したり、さまざまな色を試して寝覚めにどの程度変化があるのかの実験を行いたいところです。

また、目覚まし機能だけでなく、午前以外では次の予定が30分後にあることを照明の色の変化で主張しすぎずに教えてくれたりします。便利。

## 最後に
思いついたら気軽に家に機能を加えられるのはいい時代ですね。

空気のように人間の行動を支援するコンピュータや環境について興味があるので、継続的にいろいろ作り続けていきたい所存です。
IPアドレスかどうかをチェックするPHPスクリプト

## 概要
配列内の文字列がIPアドレスであれば`True`、そうでなければ`False`を`echo`する

## コード

```php:ipcheck.php
<?php

$str = array("1.2.3...4", "1.2.3.4.", "hoge.2.3.4", "1.2.256.4", "1.2.3.4");


// IPをechoしてチェック結果を返す（メイン処理）
foreach ($str as $x) {
    echo "$x ";
    IPAddressCheck($x);
}


// IPアドレスかチェックして True or False を返す関数
// 3つの関数を使って判定
function IPAddressCheck($ipaddress) {
    if (DotCount($ipaddress) == "NG" || Bothendsoftheoctet($ipaddress) == "NG" || NumericalValueoftheOctet($ipaddress) == "NG") {
        SayAnswer("False");
    } else {
        SayAnswer("True");
    }
}


// 解をechoさせる
function SayAnswer ($answer) {
    echo "$answer" . PHP_EOL;
}


// ドットが3つか判定
function DotCount($ipaddress) {
    $dotcount = substr_count($ipaddress, '.');
    if ($dotcount !== 3) {
        return "NG";
    }
}

// 両端が数字かどうか判定
function BothEndsoftheOctet($ipaddress) {
    $octet = explode('.', $ipaddress);
    $octetcheck = $octet[0] . end($octet);
    if (ctype_digit($octetcheck) == FALSE) {
        return "NG";
    }
}

// 各オクテットが 0～255 でありまた数値か判定
function NumericalValueoftheOctet($ipaddress) {
    $octet = explode('.', $ipaddress);
    foreach ($octet as $y) {
        if (($y < 0) || ($y > 255) || (ctype_digit($y) == FALSE)) {
            return "NG";
            break;
        }
    }
}

?>
```



## 使用例
上記のコードをそのまま実行

```shell-session
$ php ipcheck.php
1.2.3...4 False
1.2.3.4. False
hoge.2.3.4 False
1.2.256.4 False
1.2.3.4 True
```


## 所感など
- `IPAddressCheck`でのif文はもっとすっきりならないかなぁ
- そもそもIPをチェックする関数がPHPには存在するらしいので、それも使用して書いてみたい
- `BothEndsoftheOctet`は要らないかもしれない
- 第1オクテットが0の場合は弾きたいなー
- PrivateIPとGlobalIPのチェックもしたい
ZXingをAndroidStudioでセットアップ

AndroidStudio便利ですね。（厳密にはgradleが便利ですね！）

便利なのは、大体gradleに１行書けばライブラリが利用できる部分にあるのですが、これはmavenで管理されているライブラリに限ります。

登録されているかどうかは以下のサイトから確認可能です。
`http://search.maven.org/`

QRコードの認識ライブラリのZXingは1.5までのバージョンはmavenから検索可能ですが、2.0からはリポジトリの追加が必要です。

`https://github.com/embarkmobile/zxing-android-minimal`

```:gradle
repositories {
    mavenCentral()

    maven {
        url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/"
    }
}

dependencies {
    compile 'com.embarkmobile:zxing-android-minimal:2.0.0@aar'
}
```

このようにリポジトリを追加すればOKです！！
chefの配列attributeがdeepmergeされる対策

roleでは値を指定していて、environmentでは値を空にしたいというケースがありました。
（具体的に言うと、webサーバのロールではfluentdでログを飛ばすようにしたいがsandbox的なenvironmentではログは全止めにしたかった）
で、値を設定しているattributeが配列だった＋roleでもenvironmentでもoverride_attributeにattributeを書いていました。
よってenvironmentで空にしたかったが配列attributeでdeepmergeで既存の値はそのままで空の値が追加されてしまった。（そしてログは飛んでしまった）

結果として、role側（上書きしたい側）のattributeをdefault_attributeに移動したら解決しました。

以下サイトの3.3あたりにdeepmergeのことが書かれていました。
http://metasearch.sourceforge.jp/wiki/index.php?ChefTips

以下サイトはattributeの優先順位についてくわしく書かれていました。
http://dev.classmethod.jp/server-side/chef/attribute-overrides-pattern/

以下のようにしておくと、environmentで指定したとおり配列アトリビュートが上書きされました。

environment側

```
  "override_attributes": {
        "fluentd": {
                "client_conf_types": []
        },
```

role側

```
  "default_attributes": {
        "fluentd": {
                "client_conf_types": ["tomcat", "httpd"]
        },
```

<b><font color="red">配列attributeを上書きする(DeepMergeされないようにする)には、
上書きされるほうをdefault_attributesに書き、上書きするほうをoverride_attributesに書くといい</font></b>ようです。
勉強になりました！
OpenCVその３直線描画


Opencv
http://docs.opencv.org/trunk/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html

cmake
http://www.wakayama-u.ac.jp/~chen/cmake/cmakecv.html

そのままですが前提.
gcc,OpenCV,CMakeインストール済み。

ステップ
1.MyLine.cpp
2.CMake file CMakeLists.txt
3.cmake make
4.Run

Using OpenCV with gcc and CMake
Note We assume that you have successfully installed OpenCV in your workstation.
The easiest way of using OpenCV in your code is to use CMake. A few advantages (taken from the Wiki):
No need to change anything when porting between Linux and Windows
Can easily be combined with other tools by CMake( i.e. Qt, ITK and VTK )
If you are not familiar with CMake, checkout the tutorial on its website.
Steps

Create a program using OpenCV
Let’s use a simple program such as DisplayImage.cpp shown below.

参考：http://opencv.jp/cookbook/opencv_drawing.html
少々、追加、変更しています。

```cpp:MyLine.cpp
//MyLine.cpp
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int
main(int argc, char *argv[])
{
  Mat img = Mat::zeros(800, 900, CV_8UC3);

  // Red，太さ3，4近傍連結
  line(img, Point(100, 100), Point(400, 105), Scalar(0,0,200), 3, 4);  
  // Green，太さ5，8近傍連結
  line(img, Point(100, 200), Point(400, 205), Scalar(0,200,0), 5, 8);
  // Blue，太さ10，アンチエイリアス
  line(img, Point(100, 300), Point(400, 305), Scalar(200,0,0), 10, CV_AA);

  //add by ggggnonaka start
  //White Line 1,4
  line(img, Point(100, 400), Point(800, 400), Scalar(255,255,255), 1, 4);
  //Red Line 1,4
  line(img, Point(100, 500), Point(800, 500), Scalar(0,0,255), 1, 4);  
  //Blue，Line 10,AA
  line(img, Point(100, 600), Point(800, 600), Scalar(200,0,0), 10, CV_AA);
  //add by ggggnonaka end

  namedWindow("drawing", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
  imshow("drawing", img);
  waitKey(0);
}
//end MyLine.cpp
```

Create a CMake file
Now you have to create your CMakeLists.txt file. It should look like this:

```CMakeLists.txt
cmake_minimum_required (VERSION 2.6)

project( MyLine )
find_package( OpenCV REQUIRED )
add_executable( MyLine MyLine.cpp ) 
target_link_libraries( MyLine ${OpenCV_LIBS} )

```

Generate the executable
This part is easy, just proceed as with any other project using CMake:

```
cd <DisplayImage_directory>
cmake .
make
```
Run
./MyLine

Result
![kobito.1418979067.861201.png](https://qiita-image-store.s3.amazonaws.com/0/33317/e3e5e9b3-a6ee-fd0f-a7d7-07c1653ac960.png "kobito.1418979067.861201.png")
Qiitaアドベントカレンダーが読み物として単なるブログより面白いと思った3つの特徴

## 背景
最近Twitterを眺めていたら、やたら「アドベントカレンダー」という言葉が流れてくるので気になっていた。今日になって初めて、とあるアドベントカレンダーを読んでみたところ、思いの外面白い企画だと思った。普段のネットサーフィンや、散発的にSNSで紹介された記事を読むより楽しかったのだ。何が面白かったんだろう？という自分の考えを残しておく。

## アドベントカレンダーとは？
### そもそもアドベントカレンダーってなんだっけ？

> アドベントカレンダー（Advent calendar）は、クリスマスまでの期間に日数を数えるために使用されるカレンダーである。 アドベントの期間（イエス・キリストの降誕を待ち望む期間）に窓を毎日ひとつずつ開けていくカレンダーである。 すべての窓を開け終わるとクリスマスを迎えたことになる。 但し毎年変化するアドベントの期間に関わらず、実際には12月1日から開始し24個の「窓」がある場合が多い。
アドベントカレンダー - Wikipedia
http://ja.wikipedia.org/wiki/アドベントカレンダー

要は12月のカレンダーに対応してなにかしらのプレゼントが入った窓が並んでいるもの。それを12月1日からクリスマスの日まで一つずつ開いていくと、毎日なにかがもらえて楽しいと。

### Qiitaでのアドベントカレンダー
そしてQiitaではそれに習い、プログラミングに関する記事を投稿するイベントとしてアドベントカレンダーを位置づけている。まとめページによると2011年からの企画なのだろうか。
記事数や参加者数も公表されていて、毎年参加者が増えている。
(2011年:25人, 2012年:622人, 2013年:1597人, 2014年:3920人)[^1]

> QiitaにおけるAdvent Calendarとは、プログラミングに関する記事を12/1から12/25まで毎日みんなで投稿するイベントです。
http://qiita.com/advent-calendar

2014年は、Qiita内で312件ものアドベントカレンダー存在するとのこと。
その中で本日自分が出会って読んでいたのはこちら。

> Machine Learning Advent Calendar 2014 - Qiita
> パターン認識・機械学習・自然言語処理・データマイニング等、データサイエンスに関するアドベント・カレンダーです。
> http://qiita.com/advent-calendar/2014/machinelearning

## 特徴

個人的に良いなと思ったアドベントカレンダーの特徴を3点以下に述べる。

### 1.適度なバラけ具合のあるトピック
それぞれのカレンダーは、ひとつのテーマが設定されている。これにより、興味のある分野の記事がまとまって読める。かといって、それぞれの記事は別々の人物が書いているので、扱う目線や内容も様々だ。興味のある分野に関して、いろんな方向からの視点や情報が得られるというのがひとつの特徴になる。

### 2.高い一覧性
12月の1日からクリスマスまでという制約により、ひとつのカレンダーに書かれる記事の数は最大でも25個におさまる。さらにカレンダー形式の目次をとることによって、記事の一覧性が非常に高くなっている。
適度にバラけたトピックの中から、特に興味のあるものを選んで読んでいくときにこれは助かる。

### 3.読みきった感
ひとつのカレンダーには記事数の上限があるので、カレンダー内の記事を「全て」読み切るということができる。これはWeb上のメディアではあまりない特徴かもしれない。
たとえばブログやSNSだとコンテンツが日々追加されていくのが普通だ。オンラインニュースでもそう。コンテンツが増え続ければ、「全て」を読みきって終わりがくるということがない。
アドベントカレンダーの場合は、全ての記事を見て回ったあとに、出版されるような書籍の一冊全てを読みきったときに近い感覚が得られた。[^2]

## その他
### 類似メディア
書いてる途中で、これらの特徴を持った媒体をどっかで見たことあるなと思ったら**雑誌**だった。
アドベントカレンダーを読み進めるのは雑誌を読んでいくのに感覚近かった。
### 感想
考えてみると、**上記3点を満たしたメディアってWeb上にあまり存在しないんじゃないか？**とちょっと思った。自分が知らないだけかもしれないし、単純に需要がないから少ないのかもしれないけど。
ただ個人的には多少は需要あるんじゃないかと思ったりする。なのでもし、こんなのがあるよーって方がいたらコメントしていただけると嬉しいです。

## 注釈
[^1]: 2014/12/19現在
[^2]: 実際はまだ25日に達してないので本当に全て読みきったわけではないが...
smtpをtcpdumpでキャプチャしwiresharkで解析してみた

* [open relay checker](http://check.jippg.org/)でメールサーバがopen relay状態かチェック出来ます。

## @icloud.com のキャプチャ

```bash:icloud.comのメールサーバを確認
# dig mx icloud.com +short | sort
10 mx1.mail.icloud.com.
10 mx2.mail.icloud.com.
10 mx3.mail.icloud.com.
10 mx4.mail.icloud.com.
10 mx5.mail.icloud.com.
10 mx6.mail.icloud.com.
```

```bash:tcpdump
sudo /usr/sbin/tcpdump -w dump.cap -A -i eth0 port 25 and host \
 \(mx1.mail.icloud.com \
or mx2.mail.icloud.com \
or mx3.mail.icloud.com \
or mx4.mail.icloud.com \
or mx5.mail.icloud.com \
or mx6.mail.icloud.com \
or icloud.com \)
```

* CentOSだと/usr/sbin/tcpdumpにあります。
* `-w`を使うと標準出力に出力されません。後で`-r`で読み込めばよいです。
* 複数ホスト指定の場合、上記のように書きます。[tcpdumpのフィルターのまとめ | 猫型iPS細胞研究所](http://ips.nekotype.com/2182/)

## helocheck.abuseat.org宛メールをキャプチャ

```bash:
/usr/sbin/tcpdump -w dump.cap -A -i bond0 -s 0 port 25 \
  and host helocheck.abuseat.org

echo "hoge" | mail helocheck@helocheck.abuseat.org
```

* `-s`でサイズを指定。初期設定は96(centos5)か65535(centos6)。0で無制限


## wireshark

```bash:dump.capを読みこんで実行
sudo wireshark -r dump.cap
```

* 起動しない！？と思っていたら実行にsudoが必要でした。
* また、`sudo ln -s /opt/X11 /usr/X11`が必要っぽかったです。

```bash:フィルタ例
smtp.req.command == "HELO" or smtp.req.command == "EHLO"
```

### 参考

* [MacOSX - Mac OS X MavericksでWiresharkを使う＆Wiresharkフィルタサンプル - Qiita](http://qiita.com/isaoshimizu/items/da3e74d5a8e9b1d6b6a4)
LibreOfficeで図形描画ツールバーを表示させる方法

LibreOfficeのcalcを使っていて、図形を挿入したいけどどうすればいいんだ...と困ることきっとあると思います。
そんなときの解決法がこちら！

メニューバーから「View→Toolbars」へ進み、「Drawing」にチェックを入れます。
これでOK！

すると、こんな感じで下に図形描画ツールバーが表示されるようになります。
![スクリーンショット 2014-12-19 17.46.26.png](https://qiita-image-store.s3.amazonaws.com/0/52234/6663ecf2-6d1b-ea1b-d862-45952b232b0f.png)

あぁ...エントリーシート書こ...
Rspecでbinding.pryを行いたい

## 前提
Gemfileにpry-railsを入れている。

```ruby
group :development, :test do
  gem 'pry-rails'
end
```

これで下記のように

```ruby
RSpec.describe Model, :type => :model do
  describe "test" do 
    binding.pry # ここで処理がとまる
    
    以下、テストコード...

end
```

当たり前っちゃあ、当たり前。

参考URL  
http://stackoverflow.com/questions/5446594/running-ruby-debug-in-rspec
MySQLでのサブクエリ、inner joinのパフォーマンス比較

MySQLでサブクエリを作ると非常に遅くなることがあります。これは、外部クエリが評価された後、内部クエリが評価されるためです。
Inner Joinの場合、最適化されて遅くはなりません。

実際比較を行ってみた結果です。

256件のデータで
INNER JOIN: 0.002秒
サブクエリ: 0.348秒
と大きな違いがありました。


実行可能コード: https://paiza.io/projects/WmL_8SwUE-0G3Yx0KcJR4A
[
![スクリーンショット 2014-12-19 午後4.56.51.png](https://qiita-image-store.s3.amazonaws.com/0/9152/a90b3bf4-038c-1eea-932b-f8780b38787d.png)](https://paiza.io/projects/WmL_8SwUE-0G3Yx0KcJR4A)
横からスライドイン

横からページがスライドインしてくる。
iPhoneのメールだとかグノシーだとか、何か詳細を見ようとすると右のほうからスルスルって出てくるやつ。

なんかかっこいいじゃないですか。

ということで書いてみた。

```html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<title>Slide in</title>
	<style type="text/css">
	.template {
		display: none;
	}

	#slidebase {
		position: absolute;
		top: 0px;
		left: 0px;
		width: 100%;
		height: 100%;
		background-color: #c0c0c0;
		text-align: center;
	}
	#slide1 {
		background-color: red;
	}
	#slide2 {
		background-color: green;
	}
	#slide3 {
		background-color: blue;
	}
	</style>
</head>
<body>
	<div id="slidebase"></div>

	<div id="slide1" class="slide template">
		page 1
		<button slide_id="#slide2" class="slidein">&gt;</button>
	</div>
	<div id="slide2" class="slide template">
		<button class="back" slide_id="#slide2">&lt;</button>
		page 2
		<button slide_id="#slide3" class="slidein">&gt;</button>
	</div>
	<div id="slide3" class="slide template">
		<button class="back" slide_id="#slide3">&lt;</button>
		page 3
	</div>

	 
	<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
	<script>
	$(function () {
		$('#slidebase').setslides('#slide1', '#slide2');
		$('#slidebase').setslides('#slide2', '#slide3');

		$('.slidein').click(function () {
			var slideId = $(this).attr('slide_id');
			$(slideId).slidein();
		});

		$('.back').click(function () {
			var slideId = $(this).attr('slide_id');
			$(slideId).slideout();
		});
	});
	</script>

	<script>
	(function ($) {
		var defaults = {
			duration: 1000,
			dur_div: 3
		};

		$.fn.setslides = function (top, slides) {
			var base = this;

			base.css({
				overflow: 'hidden'
			});

			$(top).css({
				position: 'absolute',
				width: base.css('width'),
				height: base.css('height'),
				display: 'block'
			});
			base.append($(top));

			slides.split(/\s*,\s*/).forEach(function (slide) {
				$(slide)[0].slide_topslide = top;
				$(slide)[0].slide_offset = base.width();
				$(slide).css({
					left: $(slide)[0].slide_offset + 'px',
					position: 'absolute',
					width: base.css('width'),
					height: base.css('height'),
					display: 'block'
				});
				base.append($(slide));
			});
		};

	 	$.fn.slidein = function (options, easing, callback) {
	 		var settings = $.extend(defaults, options);

			this.animate({
				left: "-=" + this[0].slide_offset + "px"
			}, settings.duration, easing, callback);

	 		this[0].slide_dur_div = settings.dur_div;
			$(this[0].slide_topslide).animate({
				left: "-=" + this[0].slide_offset /
						this[0].slide_dur_div + "px"
			}, settings.duration, easing);
		};

		$.fn.slideout = function (options, easing, callback) {
	 		var settings = $.extend(defaults, options);

			this.animate({
				left: "+=" + this[0].slide_offset + "px"
			}, settings.duration, easing, callback);

			$(this[0].slide_topslide).animate({
				left: "+=" + this[0].slide_offset /
						this[0].slide_dur_div + "px"
			}, settings.duration, easing);
		};
	})(jQuery);
	</script>
</body>
</html>
```

まだまだ練習中なので、意味もなくjQueryのプラグインぽくしてみました。
画面のresizeされるとおかしなことになりますw

animate()ってので上下のシートを適当な速さで動かしてみただけ。
UITextFieldで文字位置を調整する

UITextFieldの大きさはそのままで、文字の位置だけを調整する方法

UITextFieldを継承したクラスを作成する。

```objective-c:CustomTextField.h
@interface CustomTextField : UITextField

// プレースホルダー・テキストカラー
@property (nonatomic) UIColor *placeHolderTextColor;

@end 
```

```objective-c:CustomTextField.m
@implementation CustomTextField

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];

    if(self) {
        self.font = [UIFont systemFontOfSize:13];
        self.placeHolderTextColor =[UIColor blackColor];
        self.clearButtonMode = UITextFieldViewModeWhileEditing;
        self.returnKeyType = UIReturnKeySearch;
        self.keyboardAppearance = UIKeyboardAppearanceLight;
    }

    return self;
}

- (void)drawPlaceholderInRect:(CGRect)rect
{
    rect.origin.y = (rect.size.height - 10) / 2;
    NSDictionary *attr = @{ NSFontAttributeName: [UIFont systemFontOfSize:13],
                            NSForegroundColorAttributeName: self.placeHolderTextColor };

    [self.placeholder drawWithFrame:rect attributes:attr];
}

- (CGRect)textRectForBounds:(CGRect)bounds
{
    return CGRectOffset(bounds, 5, 0);
}

- (CGRect)editingRectForBounds:(CGRect)bounds
{
    return CGRectOffset(bounds, 5, 0);
}

// placeholderの位置調整
- (CGRect)placeholderRectForBounds:(CGRect)bounds
{
    return CGRectOffset(bounds, 5, -2);
}

@end
```
PHP 7 で Unicode エスケープシーケンスを使う

PHP 7 から Unicode エスケープシーケンスが使えるようになります (<a href="https://wiki.php.net/rfc/unicode_escape">RFC: Unicode Codepoint Escape Syntax</a>)。構文は PCRE、Ruby や EcmaScript 6、Swift などと同じ可変長です (`\u{xxxxxx}`、PCRE の場合 `\x{xxxxxx}`)。

```php
// あ
echo "\u{3042}\n";
```

Unicode エスケープシーケンスを使うメリットは制御文字や異体字セレクターのように目に見えない文字や、フォントがインストールされていない場合に文字化けを回避できることです。また、従来の文字化けの回避方法であるバイト列表現よりも初学者にわかりやすいことです。

```php
echo "葛\u{E0101}飾区\n";

echo "葛\xF3\xA0\x84\x81飾区\n";

```


サロゲートの範囲である U+D800 から U+DFFF の文字も生成できるようになっています。UTF-8 の定義では、サロゲートの範囲はサポートしないことになっていますが、古いバージョンの Java などの対応のためとみられます。Ruby や JavaScript でもサロゲートの範囲を利用することができます。

```php
// eda080
echo bin2hex("\u{D800}")."\n";
```

PHP 7 以前でも、json_decode や transliterator_transliterate で Unicode エスケープシーケンスを使うことができますが、固定長 (`\uXXXX`) なので、U+10000 から U+10FFFF の範囲はサロゲートペアで表現する必要があります (`\uXXXX\uXXXX`)。コードポイントからサロゲートペアのコードポイントを求める方法は[こちらの記事](http://qiita.com/masakielastic/items/68f81e1b7d153ee5cc81)をご参照ください。コードポイントからバイト列を生成するコードの例も記載されています。
CentOS 6.6 で色々と新しいものをインストール

CentOSのバージョンは色々古い
=====

CentOSでインストール出来るソフトは「安定している」という意味で重要なんだろうけど如何せん古いのが多い．
phpは5.3.x，mysqlは5.1.x，gitは1.7.x，etc.

phpは5.3.xのサポートは終了したし
mysqlの5.1.xのサポートも終了している．
gitもpushの挙動がより堅牢になってるのでせめて1.8.xにはしたい

って事でインストールできるようにしていく


まずはレポジトリ追加
-----

とりあえずデフォルトのレポジトリだけだと新しいものはまず入らないので
yum のレポジトリを追加

自分がよく見るのは以下の4つのレポジトリ

* epel [EPEL - FedoraProject](https://fedoraproject.org/wiki/EPEL)
* remi [Les RPM de Remi - Repository](http://rpms.famillecollet.com)
* rpmforge [RepoForge Project](http://repoforge.org)
* ius [About - IUS Community Project](https://iuscommunity.org/pages/About.html)

remi, rpmforge, ius はそれぞれEPELがある事前提となっているのでepelは必ずインストールする事になる．
( php-mcryptの依存ライブラリであるlibmcryptはepelにしかなかったりする )

その他は個人の好みになるけども，個人的にはiusが良いのかな？ と思ってたり．
少なくともapache & php & mysqlの環境で進める場合は全てiusで最新版に揃える事ができるので一貫性を保ちやすいのが理由．
あとGitの2.x系がダウンロードできるのも大きい．

ココらへんのレポジトリの信頼性...っていうのかな？どれが良いってのはどんなとこを見て判断すればいいのかいつも迷う...

PHP
-----

IUSでPHPのパッケージには
`php55u`や`php56u`といったprefixが割り当てられている．

以下が詳細情報の一部

```bash
$ yum --enablerepo=ius info php56u
...略...
名前　　　　　　　　: php56u
バージョン　　　　　: 5.6.3
リリース　　　　　　: 5.ius.centos6
提供元リポジトリー　: ius
...略...
```

関係するライブラリは
`php56u-mcrypt` `php56u-mbstring` などの名前で取得できる．

MySQL
-----

MySQLについても同様に
`mysql56u`のprefixで登録されているので覚えやすい．

2014/12/19時点でバージョンは5.6.21だった．

Apache
-----

Apacheも2.4とかあるかと思ったけどそれはどのレポジトリでも提供してなかった...
調べてみるとそもそもソースからビルドする必要があるそうな...

Git
-----

自分がIUSをオススメする理由の一つにGitの存在がある．
他のレポジトリには無いのだけども，Gitの2.x系のバージョンが存在する．

`git2u`の名前で提供されており，2014/12/19時点で2.2.0だった．
~~ただし，2014/12/18にgitの脆弱性についてのアナウンスがあり2.2.1がリリースされている状況なので対応は若干遅目なのかな？~~

2014/12/24 で確認した所，2.2.1にアップデートされていた．
アップデート日を確認してみた所

```
Committer   : Carl George <carl.george@rackspace.com>
Committime  : Thu Dec 18 12:00:00 2014
Buildtime   : Thu Dec 18 22:19:23 2014
```

となっていたので実は脆弱性が発表された日に対応済みだった？
とりあえず対応が遅いみたいな事はなさそう．失礼しました．

ただ，自前コンパイルする事無くyumでgitの最新に近いバージョンを使えるのは中々嬉しい(多分自分が使ってる機能的には1.7.xでも十分間に合うのは内緒←)

1.7系ではあかん事案が発生したので追記
GitHub からソースを clone する時、毎回 ssh の設定をするのは大変なので、下のコードみたいに access token を使った clone を行っていたのだけど 1.7系ではサポートされていなかったのか、clone ができなかった。

```bash
$ git clone https://${token}@github.com/${repo}
```

なので、access token を使う方法を取るなと言われればそれまでだけど、基本的に 2.x 系に上げることをお勧めします。


そんな感じ．
SublimeTextで作業短縮しようリスト

##参考URL##
sublimeText Cheat-sheet
http://docs.emmet.io/cheat-sheet/

##よく使うショートカット##
 option + ↑↓ 数値が整数値1ずつの増減
 option + ctrl + ↑↓ 数値が小数点第一位ずつの増減
 cmd + ctrl + ↑↓ 行移動 


## HTML ##

###idやclass名をナンバリングして一気に作成###

####ul>li.classname$*3####
これで ctrl + E すると

```lang:filename
<select name="" id="">
  <option value="" id="value1"></option>
  <option value="" id="value2"></option>
  <option value="" id="value3"></option>
</select>
```

こうなります。


###サイドバーでプロジェクト管理###

`command+ctrl+p`でSwitchProject


http://kentana20.hatenablog.com/entry/20140126/1390717711
http://www.buildinsider.net/small/sublimetext/02


######

●参考URL
え！？わずか1秒でCSS / JavaScriptファイルを圧縮！Sublime Text3にYUI Compressorを入れてみた。
http://thesaibase.com/html/st3-yui


「HTML/CSS/JS Prettify」を使って圧縮（min化）されたファイルを整形（prettify）する
http://thesaibase.com/html/prettify


###日本語について###

●日本語検索について
http://www.task-notes.com/entry/20150314/1426302000

日本語検索設定したら、enterで次候補にいけないが、
`command+g`で次候補に移動可能
Mac OSX で Git を最新版にする


Homebrew でパッケージ管理をしている場合の手順です。

## brew のアップデート

```
$ brew update
$ brew doctor
```

`$ brew doctor` でエラーでなかったら次の作業へ。
エラーが出た場合は、エラー内容に従って修正。

## Git のアップデート

```
$ brew upgrade git
```

## Path をとおす

```
$ vim ~/.bash_profile
$ export PATH=/usr/local/git/bin:$PATH
$ source ~/.bash_profile
```

`$ vim ~/.bash_profile` した際に以下が記載されていた場合は、上記作業は不要。

```
$ export PATH=/usr/local/bin:$PATH
$ export PATH=/usr/local/sbin:$PATH
```

## バージョンの確認

```
$ git --version
git version 2.2.1
```

※本記事執筆時点での最新バージョンです。

## SourceTreeの設定
下記ページを参考に外部の Git 実行ファイルを使用するように設定する。

[Upgrading Git/Mercurial in SourceTree for Mac](https://confluence.atlassian.com/pages/viewpage.action?pageId=695108069)
Unityで簡易立体視（平行法）

![ss.PNG](https://qiita-image-store.s3.amazonaws.com/0/61553/d48a324c-e65a-29b6-7983-043f857c4d68.png)

## これなに
平行法による立体視を実現するテスト。

Oculusとかが流行ってる中、古典的な方法を試してみましたよ。

平行法については↓
http://ammo.jp/cursor/9712/03.html
慣れさえすれば特にデバイスが要らないのはよいところ。

## 実装
細かいことは考えずにシンプルな方法をやってみました。

1. カメラを少し離して横に並べます
2. カメラを回して少しだけ寄り目にします
2. それらのViewPortRectを右半分/左半分に割り当てます
3. 適当なシーンを作ります（今回はニコニ立体ちゃんに立ってもらいました）

左目用
![ins01.PNG](https://qiita-image-store.s3.amazonaws.com/0/61553/1386c7b7-4501-68d3-cbe4-f6e4423b8e89.png)
右目用
![ins02.PNG](https://qiita-image-store.s3.amazonaws.com/0/61553/db0dfcd4-b9a6-1cbe-e4e7-9f31d06d1e5d.png)

## 結果
http://youtu.be/-ia6O-60uLY
スマフォ程度の小さい画面が適しています。
左右の目の視界が混同しないように仕切りを置けば見やすくはなります。

一応立体視にはなる・・・というところですかね。
array_walk的なことを色んな方法でやる

foreachでぶん回ししている箇所をもっと効率いい方法で回せないのかな？
と気になったのでメモ。

[PHPマニュアル](http://php.net/manual/ja/function.array-walk.php)のコメントに、ソース等そのまま乗っておりますのでそちらも併せてご覧下さい。

# 補足

このコードではwhileは一回しかループしておらず、実際はforeachの方が早いとのこと、
[以降の記事](http://qiita.com/piotzkhider/items/1a1330735a198c97f6ff#comment-e3606c22aeb1d741ee6c)でngyukiさんが解説してくれております！
ありがとうございますー！

# 前提
* データを整形する関数(下記)を配列の各要素に実行する
* `array_walk`, `while`, `foreach`でそれぞれ時間を計測する
* 子要素を千個持った一次元配列一万個でテスト

### arrayの作成、初期値設定、時間計測等の関数

```php
function test($function, $count = 10000, $arrayElements = 1000) {
    echo $function, ' ... ';
    $array = array_fill(0, $arrayElements, "some text value");
    
    $timer = microtime(true);
    for( $i = 0; ++$i < $count; )
        $function($array, 'some_function', 'some user data');
    printf("%.3f sec\n", microtime(true) - $timer);
    
    return $array;
}
```

### 配列の各要素に実行する関数

`$value`は`"some text data"`という文言が入っているので、
`$key => $userData`という文言へと整形します。
(`$userData`は`"some user data"`固定) 

```php
function some_function(&$value, $key, $userData) {
    $value = "$key => $userData";
}
```

ex)

```php
array( 0 => "some user data", 1 => "some user data");
```

# array_walk

標準関数なので省略

# while(list($key, $value) = each($array))

listで`$key`と`$value`を取得しながら`each`でポインタを進める。
listは遅いと聞いたことがあったのでこれが一番遅いかな？と予想していました。

```php
function array_walk_list_each(&$array, $function, $userData = null) {
    while ( list($key, $value) = each($array) )
        $function($array[$key], $key, $userData);
}
```

# foreach($valueを使用)
シンプルだしわかりやすい。保守的な意味でも。

```php
function array_walk_foreach1(&$array, $function, $userData = null) {
    foreach ($array as $key => &$value )
        $function($value, $key, $userData);
}
```

# foreach($valueの代わりに$array[$key]を使用)

`$value`を使わないと早くなるとかあるんだろうか。
聞いたことがないし逆に遅くなりそうな気がします。

```php
function array_walk_foreach2(&$array, $function, $userData = null) {
    foreach ($array as $key => $value )
        $function($array[$key], $key, $userData);
}
```

# 結果

array_walk ... 7.902472 sec
array_walk_list_each ... 0.010065 sec
array_walk_foreach1 ... 7.324589 sec
array_walk_foreach2 ... 8.251175 sec

`while`早すぎない！？！？？？！！！
そしてやっぱり`foreach`なら`$value`は素直に取得したほうが早いよう。

意外なのは`array_walk`の遅さ。普通に`foreach`で回したほうが早いという…。

小規模データでもやっぱりwhileが早いけど、差はかなり縮まりました。
もっと上手いやり方や、他のやり方のメリットデメリットなど、何でもご教示下さい。
Immutable.jsでJSでも不変データ構造を扱う

ClojureやHaskellのような不変データ構造体のJS実装です。facebook製。

不変データ構造の特徴として、元のデータ構造は不変です。

```coffeescript
Immutable = require 'immutable'
map1 = Immutable.Map a: 1, b: 2 # => Map {a: 1, b: 2}
map2 = map1.set a: 3 #=> Map {a: 3, b: 2}
map3 = map1.update (val) -> {foo: val.a} #=> Map {foo: 1}
```

Mapの他に、List, OrderedMap, Set, OrederedSet, Seq, Range, Record, Stack等があります。内部的にはトライ木になっています。


面白いのはSeqやRangeで、filter関数やmap関数を与えても、getで呼ばれるまで遅延評価されています

```coffeescript
Immutable.Seq.of(1,2,3,4,5,6,7,8).filter((i)->i % 2).map((a)->a*a).get 3 #=> 49
```

(ターミナルで評価したときには実体が見えるかもしれませんが、valueOfが実装されてるからですね)

`Immutable.Range(1, Infinity)`という無限リスト表現も可能です。そのまま評価すると死にます。


TypeScriptの型定義もあります。

https://github.com/facebook/immutable-js/blob/master/dist/immutable.d.ts


詳しくはドキュメントにて http://facebook.github.io/immutable-js/


## 他の実装

moriはclojurescriptの中で使われてるclojureのimmutableデータ構造をJSで実装したものです。普通にJSから使っても便利…らしいです。

[swannodette/mori · GitHub](https://github.com/swannodette/mori "swannodette/mori · GitHub")

なぜこれを紹介したからというと、ロゴが最高に良い。

![](https://camo.githubusercontent.com/fe75733b967ffcd4742f6eca9cc2c0c2dc69ef3c/687474703a2f2f636c6f75642e6769746875622e636f6d2f646f776e6c6f6164732f7377616e6e6f64657474652f6d6f72692f6d6f72692e706e67)

どんどんImmutableにしましょう。facebookは関数型脳のJSエンジニア多いっぽくて、僕と相性がいいです。
公開されているReact Componentを利用してみる


今回はちょっと趣向を変えて公開されているComponentの利用について書きたいと思います。

Componentは基本的にはPropがI/Fとなっているのでドキュメントを見てよくわからなかった場合は、Propを見るとどのようなI/Fがあるかわかると思います。

自分が公開する場合は、PropTypesやgetDefaultPropsを使ってI/Fを明確にしておくといいと思います。

## Bootstrap

何はともあれまずは定番のBootstrapですがやはりちゃんとあります。
前回のRouterのサンプルでも使っていました。

http://react-bootstrap.github.io/

使う場合は、react-bootstrapの他に別途bootstrapのCSSを読み込む必要があります。

```html
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
```

使い方としては、bootstrapの各ComponentがReactComponentになっているのでそれを他のComponentと同様に使っていくだけです。

```js
var {Jumbotron, Col} = require('react-bootstrap');

module.exports = React.createClass({
  render() {
    <Col xs={6} md={4} key={video.id}>
      <Jumbotron>
        <Video from={type} id={video.id} />
       <p>{video.title}</p>
      </Jumbotron>
    </Col>
  }
});
```

http://react-bootstrap.github.io/components.html

↑のページで実装を見ることが出来るので、Propの仕様などを確認することが出来ます。


## Componentを探す


### React Components

http://react-components.com/

ReactComponentが集まっているサイトでここで欲しい物を探すことが出来ます。
ここにあるComponentはnpmのkeywordに`react-component`が入っているものが対象になっています。


### React Rocks

http://react.rocks/

Componentが集まっているというより色々なReactComponentを使ったサンプルが紹介されているサイトです。実際に動くものを見ることが出来るので参考になります。

こんなのとか http://freiksenet.github.io/react-calendar/#

### GitHubのwiki

https://github.com/facebook/react/wiki/Complementary-Tools#ui-components

あと、ReactのGitHub Repositoryにはwikiがあって、そこにもUI Componentが色々と紹介されているのでオススメです。


## 実際にComponentを探して使ってみる(react-video編)

それでは例として`react-video`という、youtubeとvimeoのplayerを表示してくれるComponentを実際に使ってみたいと思います。

* https://github.com/pedronauck/react-video

使ったサンプル

* http://react-ssr-sample.herokuapp.com/youtube


### 使い方

基本的な使い方はtypeとidを指定するだけなのでとても簡単です。

```js
var Video = require('react-video');

type = 'youtube' // or 'vimeo'
<Video from={type} id={video.id} />
```

### CSS

あと、注意点としては、このCSSを読み込んでおく必要があります。

https://github.com/pedronauck/react-video/blob/master/dist/react-video.css

requireして読み込むだけでCSSもなんとかしてくれるようになるといいですが...。


### I/Fを確認する

react-videoの場合はREADME見るとわかるのですが、I/Fをどうなっているのかも確認してみます。

`propTypes`と`getDefaultProps`を見ると、

* `from`には`youtube`か`vimeo`が指定出来て必須
* `id`は文字列で必須
* `className`も指定出来てデフォルトは`video`というクラス

ということがわかります。
propTypesちゃんと書いておくといいですね。

```js
  propTypes: {
    from: React.PropTypes.oneOf(['youtube', 'vimeo']).isRequired,
    id: React.PropTypes.string.isRequired
  },
  getDefaultProps() {
    return {
      className: 'video'
    };
  },
```

https://github.com/pedronauck/react-video/blob/master/lib/react-video.jsx#L9-L17


---------------

というわけで今回は誰かが作ったComponentの利用について書きました。

明日はテストについて書きたいと思います。
RMySQL インストール時に source package を使えと言われたら

RでRMySQLパッケージをインストールしようと下記コマンドを実行した。

```
> install.packages("RMySQL")
```

すると、以下の様なエラーが。

```
package ‘RMySQL’ is available as a source package but not as a binary

Warning in install.packages :
  package ‘RMySQL’ is not available (for R version 3.1.2)
```

こういう場合は、引数で `type = 'source'` を指定して、
バイナリパッケージではなく、ソースを使う。

```
> install.packages("RMySQL", type='source')
```

これで無事インストールできた。
1つの要素を表示して、それ以外非表示

取り急ぎ。


```lang:HTML

  <!-- 選択 -->
  <select id="select">
    <option value="">ー</option>
    <option value="1" id="value1">選択1</option>
    <option value="2" id="value2">選択2</option>
  </select>
  <!-- 開閉セットbox -->
  <div id="display">
    <div id="box1" style="display: none;"><p>選択1でここが表示</p></div>
    <div id="box2" style="display: none;"><p>選択2でここが表示</p></div>
  </div>


```


* display:none;はcssのclassやjsに書くと、display:none;が読み込まれるまでのタイムラグでちらっと表示されるのが嫌だったので、htmlに直書き。



```lang:JQuery
$(function(){
    /* selectボックスの選択が変更したら中の処理を実行 */
    $('#select').change(function(){
        /* 選択したselectボックスのvalue値を取得して、変数valに入れる */
        var val = $(this).val();
        /* 変数valの値ごとに、処理をswichでふりわけ */
        switch (val) {
            case '1':
                /* #box1を表示 */
                $('#box1').show();
                /* divのidに「box」を含むid名がついているもので、box1じゃないものは非表示 */
                $('div[id^="box"]:not("#box1")').hide();
            break;
            case '2':
                /* #box2を表示 */
                $('#box2').show();
                /* divのidに「box」を含むid名がついているもので、box2じゃないものは非表示 */
                $('div[id^="box"]:not("#box2")').hide();
            break;
            /* caseで設定した以外の処理 */
            default:
                /* divのidに「box」を含むid名がついているものは非表示 */
                $('div[id^="box"]').hide();
        }
    });
});
```

* value値について
value値に入る値は「文字列」として入ってくる。
今回はvalue値を文字列の1,2で割り振っているので、文字列を示す為に、case '1' のようにシングルクオーテーションで囲いました。