OmniAICreator/Qiita-1.07M huggingface dataset:
hasClass で regex（正規表現）を使おうとしました

jQuery の `hasClass` で正規表現を使おうと思ったのですが、使えなかったので、それを実現します。


# 問題

先頭が `hoge` のクラスを持つかどうかを判断したいです。

```html
<div id="sample1" class="non-hoge piyo">
  I do not seek, I find.
</div>

<div id="sample2" class="foo hoge99">
  Live the life you love.
</div>
```
例えば、上のようなとき。

```js
$('#sample1') => false
$('#sample2') => true
```

となるような判別をしたいです。

# 方法

### hasClass だと足りない

```js
$('#sample1').hasClass('hoge');
// => false
$('#sample2').hasClass('hoge');
// => false
```

### is('[class=hoge]') でも足りない

```js
// 行頭一致
$('#sample1').is('[class^=hoge]');
$('#sample2').is('[class^=hoge]');
// => 両方:false

// 区切って一致
$('#sample1').is('[class~=hoge]');
$('#sample2').is('[class~=hoge]');
// => 両方:false

// 部分一致
$('#sample1').is('[class*=hoge]');
$('#sample2').is('[class*=hoge]');
// => 両方:treu
```

### なので test で愚直にやってみます..

```js
/(^|\s)hoge\S*/g.test($('#sample1').prop('class'));
// => false

/(^|\s)hoge\S*/g.test($('#sample2').prop('class'));
// => true
```

できました。

### おわりに

![スクリーンショット 2016-10-20 15.50.58.png](https://qiita-image-store.s3.amazonaws.com/0/45822/768af7de-3f94-e57b-35d9-c6c9fc6ffdb6.png)

- jsfiddle はとても便利です。:open_mouth:
  - https://jsfiddle.net/
Apacheバージョンアップしたらpreforkモジュールに施したチューニングが効かなくなった

# 何が起きたか？
- とあるアプリのバージョンアップに伴い、Apacheのバージョンも`2.2.27`から`2.4.16`に上がった
- preforkモジュールに対し、同様のパラメーターチューニングを施すもなんか効いてない・・・
- ＼(^o^)／

# 解決方法
**Apache2.4からデフォルトのMPMがpreforkからworkerに変わっておりました。**

```shell-session:Apache2.2
[root@centos ~]# /usr/local/bin/apachectl -V | grep MPM
Server MPM:     Prefork
```

```shell-session:Apache2.4
[root@centos ~]# /usr/local/bin/apachectl -V | grep MPM
Server MPM:     worker
```

**こうしました**

```apache:httpd.conf
# 下記を追加
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# 下記を削除 or コメントアウト
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
```

**プロセス再起動するとこうなります**

```shell-session:Apache2.4
[root@centos ~]# /usr/local/bin/apachectl -V | grep MPM
Server MPM:     Prefork
```


# 参考
- [Apache2.4からはデフォルトでEvent MPMになってるのに気付かなかった話 - Web notes.log](http://blog.wnotes.net/blog/article/apache-event-mpm)
- [Apache マルチプロセッシングモジュール（MPM）：Prefork と Worker の違い](https://kb.plesk.com/jp/113007)
[CMake] CMakeLists.txtが存在するパスを取得

CMakeメモ。処理中のCMakeLists.txtが存在するパスを取得する。

```cmake
${CMAKE_CURRENT_SOURCE_DIR}
```

他のパスを取得する変数は階層を持つ複雑なビルドにしか使わないと思いますが、必要な場合は以下などを参照して下さい。

[CMake : out-of-sourceビルドで幸せになる - Qiita #ソースツリーとビルドツリーに関連する変数一覧](http://qiita.com/osamu0329/items/7de2b190df3cfb4ad0ca#%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%84%E3%83%AA%E3%83%BC%E3%81%A8%E3%83%93%E3%83%AB%E3%83%89%E3%83%84%E3%83%AA%E3%83%BC%E3%81%AB%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8B%E5%A4%89%E6%95%B0%E4%B8%80%E8%A6%A7)
[cmake-variables(7) — CMake 3.5.2 Documentation](https://cmake.org/cmake/help/v3.5/manual/cmake-variables.7.html)

# 参考
[How do I specify relative paths in CMAKE? - Stack Overflow](http://stackoverflow.com/questions/26787628/how-do-i-specify-relative-paths-in-cmake)
【Rails】ruby、gem、rbenv、rails、bundler関係等適当まとめ。特にbundler

Macを触り始めて数ヶ月、Railsを使ってWebサービスを開発しようと思ったが一番最初にぶち当たった壁がRubyの関係や構成、運用方法だったりを適当にまとめます。
完璧私用メモとなってます。。。
Railsは最下層なので説明は省きます

参考記事
<a href="http://qiita.com/YusukeHigaki/items/0314e2ec1d13cc5d4c99">bundle install と updateの違い</a>
<a href="http://qiita.com/emadurandal/items/e43c4896be1df60caef0">Rails開発環境の構築（複数バージョン共存可能）（Homebrew編）</a>

<h2>位置関係</h2>
位置関係を図で適当に表したらこうなります

<h5>bundlerでプロジェクトGemファイルを管理しない場合</h5>
rbenv
rbenv-->ruby
rbenv-->ruby-->gem
rbenv-->ruby-->gem-->rails

<h5>bundlerでプロジェクトGemファイルを管理する場合</h5>
rbenv
rbenv-->ruby
rbenv-->ruby-->bundler
rbenv-->ruby-->bundler-->gem
rbenv-->ruby-->bundler-->gem-->rails

<h2>各種説明</h2>

<h3>Ruby</h3>
・全ての元となる言語そのも
・これは説明は必要無いですね

```使用例
$ ruby -v
>>ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]
```

<h3>gem</h3>
・Rubyの内部に組み込まれているRubyでのパッケージ管理システムのようなもの(apt-get等)
・Rubyの一部なのでRubyをインストールすると自動的にこのコマンドも使用することができる。
・Rubyの一部なので複数のRubyをインストールした場合、Gemはそれぞれ独立して存在している。
つまり、Ruby 2.2.2のGemにRailsをインストールしてもRuby 2.3.1にはインストールされない。

```使用例
$ gem -v
>>2.5.1
$ gem install rails
>>↑でRailsがインストールされます。
```

<h3>rbenv</h3>
・Rubyのバージョンを管理する→Rubyの内部には無くRubyとは独立した存在である
・当然これでrubyのバージョンを切り替えると使用するgemも変わる
・ruby　をインストール場合rbenvで管理できるためにrbenv install 2.3.1等でインストールする。

```
$ ruby -v
>>ruby 2.3.1p112

$ rbenv global 2.2.2
$ ruby -v
>>ruby 2.2.2p95

$ rbenv local 2.4.0-dev
$ ruby -v
>>ruby 2.4.0-dev
```

<h2>bundler</h2>
・gemを管理するやつ
・特徴として異なる開発環境上(複数人開発)で開発する場合Railsのバージョンなどに違いがあれば正常に動かないことが多いので、プロジェクトフォルダの中にRailsなどのパッケージファイルをインストールして、それを使用して開発を行うことが容易になるヤツ

下記に初期の手順を
"bundler init"でGemfileというパッケージリストを生成する(この中に記述されるパッケが使用される)
"bundler install"でGemfileのリストのパッケージをダウンロードインストール
これで仮にrailsをインストールした場合は、
"bundler exec rails s　"でrailsサーバー起動が起動します。
※別途ファイルパスを設定する必要があったりします。

```
$ bundler init
$ bundler install
$ bundler exec rails s
 
```

・"bundler exec"経由で起動することでプロジェクトフォルダ内部にあるパッケージを利用します。これをせずにやると、PCにインストールされているものが利用されます。
下記の例だと、現在Ruby 2.3.1を使用していますが2.3.1のgemにはrailsはインストールされていなくRuby 2.2.2にはインストールされていますという警告が出てます。
ですが、bundler exec経由でコマンドを実行するとそのプロジェクトフォルダ内部のrailsを参照しているため使用することができるのです

```
$ ruby -v
>>ruby 2.3.1p112

$ rails -v
>>rbenv: rails: command not found

The `rails' command exists in these Ruby versions:
  2.2.2

$ bundler exec rails -v
>>Rails 5.0.0.1
```



バカヤロウ全然ちげーじゃねぇかって思ったすごい方のコメント等指摘お願いします。。。
[node-psvr]Node.jsでPSVRの加速度をとってみた #psvr

# Develop environment
Mac book pro OSX El captain (v10.11.5)

Node ver6.1.0

# About node-psvr
[https://github.com/hrl7/node-psvr](https://github.com/hrl7/node-psvr)  

# What you need
1. PSVR
2. Mac book

# Setup  
1. Loop HDMI cable from HDMI-PS4 output to front HDMI Input(x □).
![14800966_1132723350130035_1286839215_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/145134/253e8f14-0ce7-ec45-cb3b-18535ee46220.jpeg)  

2. Connect USB cable to your PC.
![14804917_1132723346796702_752283711_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/145134/78bc6e53-2917-7e78-d188-bb5c90aa5118.jpeg)  

3. Connect AC adapter.  
![14797432_1132723443463359_752603144_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/145134/89f5b1f0-b226-e8fa-899a-17c8a030da31.jpeg)

4. Connect PSVR HDMI to your PC and other one to unit.
![14801172_1132723416796695_1180637633_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/145134/c8ce5b91-a0ae-eae6-e040-949d1e145c7e.jpeg)

# Install node-psvr
```
$ mkdir psvr-tutorial
$ cd psvr-tutorial
$ npm init
$ npm install psvr --save
```

``` javascript:index.js
var PSVR = require("psvr");
var device = new PSVR();
device.on("data", function(data) {
   console.log(data);
});
```

```
$ node index.js
{ yawAccel: 0,
  pitchAccel: 0,
  rollAccel: 0,
  yaw: 0,
  pitch: 65,
  roll: 0,
  xAccel: 0,
  yAccel: 0,
  isWorn: 0 }
{ yawAccel: 0,
  pitchAccel: 0,
  rollAccel: 0,
  yaw: 0,
  pitch: 65,
  roll: -1,
  xAccel: 0,
  yAccel: -1,
  isWorn: 0 }
{ yawAccel: -1,
  pitchAccel: -1,
  rollAccel: -1,
  yaw: 0,
  pitch: 65,
  roll: -1,
  xAccel: -1,
  yAccel: -1,
  isWorn: 0 }
```

※If it does not work, check your connection to PSVR or try a few times.

# Next step
use three.js and watch 360 movie or
make some simple game using three.js
[[node-psvr]psvrの加速度をsocket.ioでhtmlに表示してみた #PSVR](http://qiita.com/cdra0624/items/131c98fb50baacee643c)
JQuery備忘録:あまりないcontenteditableなtableのフォーカス制御的なやつ


table関係のJQueryライブラリだとかプラグインとかあるけれども、
どうも見つけられなくてアレになので、ちょっと書いてみた。

```HTML:index.html
<html>
<body>
	<table>
		<thead id="hoge-head">
			<tr>
				<th><input type="checkbox"></th>
				<th>No</th>
				<th>商品</th>
				<th>単価</th>
				<th>在庫</th>
			</tr>
		</thead>
		<tbody id="hoge-body">
			<tr>
				<td><input type="checkbox"></td>
				<td>1</td>
				<td>りんご</td>
				<td contenteditable=true>80</td>
				<td contenteditable=true>120</td>
			</tr>
			<tr>
				<td><input type="checkbox"></td>
				<td>2</td>
				<td>みかん</td>
				<td contenteditable=true>45</td>
				<td contenteditable=true>88</td>
			</tr>
			<tr>
				<td><input type="checkbox"></td>
				<td>3</td>
				<td>いちじく</td>
				<td contenteditable=true>105</td>
				<td contenteditable=true>311</td>
			</tr>
			<tr>
				<td><input type="checkbox"></td>
				<td>4</td>
				<td>ぶどう</td>
				<td contenteditable=true>72</td>
				<td contenteditable=true>112</td>
			</tr>
		</tbody>
	</table>
</body>
</html>
```

単価と在庫を編集できる的な感じにしておく

書いたことに自信が無いので間違っている可能性大なメモ

## Enterキーでフォーカス移動したい

```javascript:script.js
(function($) {
	$.fn.focusHelper = function() {
		$(document).on('keydown', this.selector + ' td[contenteditable=true]', function(event) {
			if (window.event) {
				keyCode = window.event.keyCode;
				shiftKey = window.event.shiftKey;
			} else {
				keyCode = ev.which;
				shiftKey = ev.shiftKey;
			}
			if (keyCode == 13 || keyCode == 9) {
				event.preventDefault();
				if (!shiftKey) {
					if (!$(this).next().is('td[contenteditable=true]')) {
						$(this).parent().next().children('td[contenteditable=true]:first').focus();
					} else {
						$(this).next().focus();
					}
				} else {
					if (!$(this).prev().is('td[contenteditable=true]')) {
						$(this).parent().prev().children('td[contenteditable=true]:last').focus();
					} else {
						$(this).prev().focus();
					}
				}
			}
		});
	};
})( jQuery );
```
とりあえず、TABキーも同様な動きにしてみる。

なぜならば、TABキーでフォーカス移動するとチェックボックスにフォーカス移動しちゃうからｗ

$('#hoge-body').focusHelper();

でいけると思う。
R:統計的な差を表す線を描く(その２)

[前回](http://qiita.com/mm_sys/items/43cb19c445a518c811a4)作成したものをグラフの座標でなく棒の番号で指定するタイプにした。

```R
line.p.bar <- function(arg_data,arg_x1,arg_x2,arg_text="",arg_height_space = 0){
  tmp_x_start <- 0.1  #左端の空白
  tmp_x_gap <- 0.1    #棒同士の隙間
  tmp_x1 <- tmp_x_gap * (arg_x1-1) + (arg_x1-1) + 0.5 + 0.1 * arg_x1 + tmp_x_start
  tmp_x2 <- tmp_x_gap * (arg_x2-1) + (arg_x2-1) + 0.5 + 0.1 * arg_x2 + tmp_x_start
  max_y <- max(arg_data[arg_x1:arg_x2]) + arg_height_space  #線の高さ
  y_space <- max_y * 0.05                        #データと線の隙間
  y_length <- max_y * 0.08                       #線の高さ
  segments(x0=tmp_x1,y0=arg_data[arg_x1]+y_space,x1=tmp_x1,y1=max_y+y_space+y_length)
  segments(x0=tmp_x1,y0=max_y+y_space+y_length,x1=tmp_x2,y1=max_y+y_space+y_length)
  segments(x0=tmp_x2,y0=max_y+y_space+y_length,x1=tmp_x2,y1=arg_data[arg_x2] + y_space)
  #線の上に文字列を書き込む
  text(tmp_x1 + (tmp_x2 - tmp_x1)/2,max_y + y_length + 1,arg_text)
}

#
#Example
#
a <- c(4,5,6,2)
jpeg(file="test.jpeg", quality=75,width = 300, height = 300) 
barplot(a
        ,las=1
        ,main="Example"
        ,beside = TRUE
        ,ylim = c(0,10)
)
# line.p.bar(バーの高さの１次元データ,バーの番号,バーの番号,上に記載する文字列,追加の高さ)
line.p.bar(a,2,3,"1") #2番目から3番目のバーに描く
line.p.bar(a,4,1,"2",1.7) #4番目から1番目のバーに描く。最後の引数で重ならないように調整
dev.off()
```

![test.jpeg](https://qiita-image-store.s3.amazonaws.com/0/76058/678ded47-00dc-9b70-f3d1-71941e9366b6.jpeg)
Dockerコンテナ内の複数のログを/var/log/messagesに転送する方法

# Dockerのログ転送

## はじめに

Dockerでは logging Driverを使用することで、コンテナ内のプロセス（PID1）のログを転送することが出来ます。今回は特に`syslog`による転送がテーマです

* [Configuring Logging Drivers \- Docker](https://docs.docker.com/engine/admin/logging/overview/#/configure-logging-drivers)


１コンテナ１プロセスがDocker公式の推奨ですが、アプリやDBだけではなく、監視やメールなど、コンテナに役割をもたせ複数のプロセスを起動するケースも往々にして存在します。

そんな時、複数のプロセスがバラバラのログを吐くことになりますが、これをまとめてホストOSの`/var/log/messages`に転送したいというときに使えるテクニックです。

割りと力技ですので、よりよいアイデアがあれば教えていただけると助かります。


## どう実現するのか

Dockerのlogging driver はコンテナ内プロセスPID(1)の標準出力を転送しています。（`/proc/1/fd/1`）

ですので、コンテナ内で`tail -F [ログ名]...[ログ名] > /proc/1/fd/1 &`プロセスを立ち上げてやることで、複数のログをPID(1)のプロセスの標準出力に飛ばしてやります。

### 実際のソース

イメージですがこんな感じなります。


```bash:Dockerfile
FROM apache
ENTRYPOINT ["sh","-c","/start_apache.sh"]
```

```bash:start_apache.sh
tail -F aaa.log bbb.log ccc.log 2 > /dev/null 1 > /proc/1/fd/1 &

exec /usr/sbin/apachectl -DFOREGROUND -k start
```

```bash:docker_run_コマンド
docker run -d --log-driver=syslog --log-opt image_name
```

### ログローテートへの対応もできる！

コンテナ内のログが肥大化してしまうためログ自体を外出するのが普通です。しかし訳あって出来ない場合は（[Dockerコンテナのログをローテートする \- Qiita](http://qiita.com/Gin/items/646b60cae9b6a2c9812a)）で紹介したテクニックでローテートすることが出来ます。

この時ログがローテートされると、tail が途切れてしまうと思われますが、賢いtail に -F をつけると、同じログ名であればローテート後も監視を続けてくれる動きをします。

|オプション|説明|
|:--|:--|
|-F|--follow=name --retry と等価である。|
|-f, --follow|ファイルの内容が増え続ける時、追加されたデータを出力する; -f,--follow と --follow=descriptor は等価である。|
|--retry|ファイルがアクセスできない、あるいはアクセスできなくなろうとしていたとしても、ファイルのオープンを繰り返す; --follow=name で名前で追跡している場合に有用である。|
[wordpress] サムネイル画像の上にカテゴリー名を表示させる方法

画像を重なるには
・画像と文字をdivで囲み、position:relativeで指定する。
・重ねたい文字をposition:absoluteで指定する。
カテゴリ名を取得するには
・get_the_category()を使用する。

###参考記事
http://inomacreate.com/wordpress-eyecatch2/
UE4開発 CodeWorks for Androidのインストールでエラーが発生する

UE4のAndroid向け開発環境をMacで作り直そうとCodeWorksforAndroidのインストーラーを実行するとエラーが発生しインストールに失敗する。。
（`CodeWorksforAndroid-1R4-osx.dmg`も`CodeWorksforAndroid-1R5-osx.dmg`もダメ。それ以外は試してない）

本記事はUnrealEngine 4.13.1をインストールした際の事象となります。

```
Installing Android SDK Base 24.4.1_u1 failed.

Return Code: 2
failed MSpanList_Insert 0x2e12 0xb977c37635c0x0
fatal error: MSpanList_Insert
...
```

![スクリーンショット 2016-10-20 13.23.47.png](https://qiita-image-store.s3.amazonaws.com/0/31466/89800094-2985-647b-e4e5-a10e03253c5c.png "スクリーンショット 2016-10-20 13.23.47.png")


# 結論
CodeWorksの不具合みたいです。
Mac OS Sierra（10.12）ではまだ動作しないです。別のMac(El Capitan（10.11）で試した所、正常に動作しインストールできました。

## MacOS SierraでUE4のAndroid開発環境を作る
ということで、手動で環境を作りました。

### 1. 必要なものを入手する

1. [Android SDKをダウンロード](https://developer.android.com/studio/index.html#mac-tools)
2. [Android NDKをダウンロード](https://developer.android.com/ndk/downloads/index.html)
3. [Antをダウンロード](https://ant.apache.org/bindownload.cgi)
4. [Gradleをダウンロード](https://gradle.org/gradle-download/)

私は取り急ぎ最新バージョンをダウンロードして、ホームディレクトリに`NVPACK`を作成しそこに解凍しました。

```sh
mkdir -m 755 ~/NVPACK
```

既に入っている場合やHomebrewで入れるなど場合は、そのパスを把握できていれば問題ありません。次のステップで使用します。


### 2. パスを通す
CodeWarksforAndroidが設定してくれるはずであった環境変数の設定を行います。
`~/.bash_profile`に以下のパスを記述します。

```sh
# ホーム直下のNVPACKを指定
export NVPACK_ROOT="~/NVPACK"

# 既にANDROID_HOMEが指定されている場合は以下それを使い回す
export ANDROID_HOME=$NVPACK_ROOT/android-sdk-macosx

PATH=$PATH:$ANDROID_HOME/tools
PATH=$PATH:$ANDROID_HOME/platform-tools
PATH=$PATH:$ANDROID_HOME/build-tools
PATH=$PATH:$ANDROID_HOME/support

# 既にNDK_HOMEが指定されている場合は以下それを使い回す
export NDK_ROOT=NVPACK_ROOT/android-ndk-r13
export NDKROOT=$NDK_ROOT
PATH=$PATH:$NDK_ROOT

# ※1
export NVPACK_NDK_VERSION="android-ndk-r13"
# ※2
export NVPACK_NDK_TOOL_VERSION="4.9"

# 既に指定済みである場合は、それを使い回す
export ANT_HOME=$NVPACK_ROOT/apache-ant-1.8.2
PATH=$PATH:$ANT_HOME/bin

# 既に指定済みである場合は、それを使い回す
export GRADLE_HOME=$NVPACK_ROOT/gradle-2.9
PATH=$PATH:$GRADLE_HOME/bin

export PATH=$PATH

```

> ※1 `NVPACK_NDK_VERSION`は導入したNDKのバージョンを設定する`android-ndk-<VERSION>`の形式
> ※2 `NVPACK_NDK_TOOL_VERSION`はパスを通したNDKの`sources/cxx-stl/gnu-libstdc++`に格納されている数字のディレクトリを指定する

### 3. UnrealEditorでもAndroidSDKの設定する

`[ファイル] > [プロジェクトをパッケージ化] > [パッケージング設定...]`を開き、プラットフォーム欄の`Android SDK`で前述のパスを通したように各SDKのパスを指定する。

![スクリーンショット 2016-10-20 14.21.58.png](https://qiita-image-store.s3.amazonaws.com/0/31466/6c99b133-6ec2-4d00-8447-75a09da2e427.png "スクリーンショット 2016-10-20 14.21.58.png")


**以上で完了。**

サンプルアプリでもビルドして起動するとAndroid端末にデプロイされる。
nodeのプログラムを実行すると「Error: Cannot find module '../build/Debug/iconv.node'」エラー node


以下のようにしてnode_module/iconvを自分でビルドし直すと直る。

cd ./node_module/iconv
node-gyp configure
node-gyp build

set python version
npm config set python C:\Python27\python.exe

詳しくは下記のURLに
https://github.com/nodejs/node-gyp
[C++] The time complexity of vector push_back

# About the Storage of vector
The c++ reference has the explanation about storage of vector. The actual size of vector may greater than the size of elements it includes.
> Instead, vector containers may allocate some extra storage to accommodate for possible growth, and thus the container may have an actual capacity greater than the storage strictly needed to contain its elements (i.e., its size). 

# Time complexity of push_back
Usually the time complexity of push_back is constant. But the push_back method may not always with time complexity of O(1) when reallocation happens.
> Constant (amortized time, reallocation may happen).
> If a reallocation happens, the reallocation is itself up to linear in the entire size.

# Example Code 

```cpp
vector<int> array(10000000, 1);
cout << array.capacity() << endl;
array.push_back(2); // Reallocation happens
cout << array.capacity() << endl;
```

```
10000000
20000000
```


**Reference**
http://www.cplusplus.com/reference/vector/vector/
Linuxでインストール済みのパッケージを確認する

パッケージ一覧を返すコマンド（`yum list installed`, `rpm -qa`）を
文字列検索する`grep`コマンドにパイプで渡すことで探したいパッケージ名の一覧を得ることができる。

## yumパッケージの検索

```bash
yum list installed | grep [パッケージ名]
```

## rpmパッケージの検索

```bash
rpm -qa | grep [パッケージ名]
```

## 出力例

```shell-session
$rpm -qa | grep php
php56u-cli-5.6.25-1.ius.el7.centos.x86_64
php56u-pear-1.10.1-4.ius.el7.centos.noarch
php56u-mbstring-5.6.25-1.ius.el7.centos.x86_64
php56u-devel-5.6.25-1.ius.el7.centos.x86_64
php56u-pecl-jsonc-1.3.10-2.ius.el7.centos.x86_64
php56u-pdo-5.6.25-1.ius.el7.centos.x86_64
php56u-xml-5.6.25-1.ius.el7.centos.x86_64
php56u-pecl-jsonc-devel-1.3.10-2.ius.el7.centos.x86_64
php56u-mysqlnd-5.6.25-1.ius.el7.centos.x86_64
php56u-common-5.6.25-1.ius.el7.centos.x86_64
php56u-process-5.6.25-1.ius.el7.centos.x86_64
php56u-5.6.25-1.ius.el7.centos.x86_64
php56u-gd-5.6.25-1.ius.el7.centos.x86_64
```
UnityからArduinoのデータをシリアル経由で取得したい！確かにArduinoからは出力しているはずなのに何もやって来ない。そんな時の対策

## はじめに結論
Unity側で```SeralPort```に対して```ReadLine()```するとき、Arduino側は```Serial```に対して```Serial.println("Hello")```だけしか呼んでいな場合、Unity側で取得できるはずのHelloというデータがやって来ないという問題に遭遇しました。
そこで対策として、次のようにArduinoスケッチ側でデータ本体と改行コードの送出を2つに分けてみたところ、意図した通りに```ReadLine()```の戻り値でデータが取得できる事がわかりました。

```スケッチ該当部分.ino
Serial.print("Hello");
Serial.println("");
```

## Unityからシリアルポートを使うための準備
UnityでSerialPortクラスを使ってArduinoとの連携する方法については[凹みさんの記事](http://tips.hecomi.com/entry/2014/07/28/023525) が大変参考になりました。いつもありがとうございます！
僭越ながら1つ処理を加えさせて頂くと、

```
serialPort_ = new SerialPort(portName, baudRate, Parity.None, 8, StopBits.One);
```

の直後に下記の1行を入れておくとより安心かと思います。

```
serialPort_.ReadTimeout = 1000; // 1000は適当な値です
```

こうすることでデータが来ないときでも```serialPort_.ReadLine();```の呼び出しから抜けられるようになるので、終了処理で固まる事を防げるはずです。

## 本題の不具合発生状況と対策について

Unity側は諸々の設定が済んでいて、Arduino側もスケッチを書き込んであって、```ReadLine()```したらデータがやってくるはず！と思って実験してみると、予想に反して何も出ない！Arduinoのシリアルコンソールにはちゃんと出力されていたのに！という事態が起こりました。
Arduioにはこんなスケッチが書かれているとします。
※参考にした凹みさんの記事にあるスケッチはうまく動くと思います(念のため)

```hello.ino
void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("Hello");
  delay(1000);
}
```
当然、シリアルコンソールには1秒おきに Hello が出力され、何も問題が無いように見えます。
しかしUnity側では何も取得出来ません。
そしてなぜか、```ReadLine()```を改行コードとは無関係に逐次読み出し出来るはずの```ReadBuffer()```に変更しても何も取得出来ません。
試行錯誤の結果、Arduinoのスケッチを見直して、以下のように```print```と```println```を分けて見た所うまく行った、というわけです。

```hello.ino
void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.print("Hello");
  // Serial.println("");
  Serial.println(); // Unity 2019.2.0f1 で確認したら、引数無しでないと動かなかった
  delay(1000);
}
```

MSDNの[SerialPort.ReadLine メソッド ()](https://msdn.microsoft.com/ja-jp/library/system.io.ports.serialport.readline(v=vs.110).aspx)やmonoの[System.IO.Ports.SerialPort.ReadLine Method](http://docs.go-mono.com/?link=M%3aSystem.IO.Ports.SerialPort.ReadLine())のドキュメントを読んで、```SerialPort```クラスの```ReadLine()```メソッドは改行コードがやってきたらその時点までに取得した値を返してくれるはずだと思っていましたが、どうやらUnityの実装に対してはこの理解は一部誤りだったようです。
ここからは推測ですが、UnityのSerialPortクラスの実装では、改行を表すバイト列(つまり```System.Environment.NewLine```)が単独で送られて来るまで、バッファの内容を返さない実装になっているのではないでしょうか。

## 検証環境
今回、不具合が発生してかつ対策が有効だった環境は以下の通りです。
* Windows 10 および Mac OS X El Capitan
* Unity 5.4.1
* Arduino IDE 1.6.10
Python / Pandasを利用して基本統計量を表示

データ分析ライブラリモジュールであるpandasを利用して集計するための備忘録です。性能検証などの結果をいちいちExcelで読んで関数使って…よりは手っ取り早くて良いなと。

以下の記事を参考にしました。
[Python pandas の算術演算 / 集約関数 / 統計関数まとめ](http://sinhrks.hatenablog.com/entry/2014/11/27/232150)

モジュールをインストール。

```
$ pip install pandas
```

サンプルファイルとしてタブ区切りで以下を準備。

```sample.log
a	b	c	d	e
1	2	3	4	5
2	3	4	5	6
3	4	5	6	7
4	5	6	7	8
```

集計用スクリプトを作成。

```py3:qsum.py
#!/usr/bin/env python

import sys
import pandas as pd

dataFrame = pd.read_table(sys.argv[1])

print(dataFrame.describe())
```

実行結果。

```
$ ./qsum.py sample.log 
              a         b         c         d         e
count  4.000000  4.000000  4.000000  4.000000  4.000000
mean   2.500000  3.500000  4.500000  5.500000  6.500000
std    1.290994  1.290994  1.290994  1.290994  1.290994
min    1.000000  2.000000  3.000000  4.000000  5.000000
25%    1.750000  2.750000  3.750000  4.750000  5.750000
50%    2.500000  3.500000  4.500000  5.500000  6.500000
75%    3.250000  4.250000  5.250000  6.250000  7.250000
max    4.000000  5.000000  6.000000  7.000000  8.000000
```

動作確認環境：
 Python 2.7.10
 pandas-0.19.0
[Swift]viewWillAppearなどで一度だけ実行したい処理を書く (Swift3対応)

SwiftでiOS開発をしているとviewWillAppearなどで一度だけ実行したい処理を書きたい場面がある。
Swift３になりdispatch_onceでかけなくなったりと困っている人がいると思います。

シンプルに簡単に実現するための処理を書きました。

まず以下のClassを生成する

```swift:OnceExec.swift
class OnceExec {
    var isExec = false
    func call(onceExec: ()->()){
        if !isExec {
            onceExec()
            isExec = true
        }
    }
}
```

そして使用したいViewControllerで
以下を書く。

```swift
//実行したいClass内部に記載
var onceExec = OnceExec()

//viewWillAppearとかに書く
override func viewWillAppear(_ animated: Bool) {
    onceExec.call {
        //一度だけ実行したい処理メソッド
    }
}
```
[wordpress] 独自タグ一覧

###サムネイル
```
<?php the_post_thumbnail(); ?>
```
###タイトル
```
<?php the_title(); ?>
```
###パーマリンク
```
<a href="<?php the_permalink() ?>"></a>
```
###投稿年月日
```
<?php the_time('Y年m月d日'); ?>
```
###カテゴリー　リンクあり
```
<?php the_category(' '); ?>
```
###カテゴリー　リンクなし
```
<?php $cat = get_the_category(); $cat = $cat[0]; { echo $cat->cat_name; } ?>
```
rebar3のProxy設定

Proxy内にて`mix deps.get` は成功するのに`mix deps.compile`に失敗する場合は、`rebar3`のProxy設定がされていない可能性がある。

以下のコマンドで確認できる

```bash
$ ~/.mix/rebar3 update
===> Updating package registry...
===> Failed to download package index.
```

rebar.configにProxyを設定してやれば良い

```erlang:$HOME/.config/rebar3/rebar.config
{http_proxy, "<proxy url>"}.
{https_proxy, "<proxy url>"}.
```

改善された

```bash
$ ~/.mix/rebar3 update
===> Updating package registry...
===> Writing registry to /home/maueki/.cache/rebar3/hex/default/registry
===> Generating package index...
(以下略)
```
[wordpress] テーマのリンク先を指定する書き方

```
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/assets/css/style.css" />

<img src="<?php echo get_template_directory_uri(); ?>/images/logo.png" alt="">
```

```
<?php echo get_template_directory_uri(); ?>
テーマのリンク
```
c++ builder XE4, 10.2 Tokyo > TImage > 読込む画像サイズに合わせてTImageサイズを変更する

```txt:動作環境
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/28)
```

関連 http://qiita.com/7of9/items/9edf309c5f58cec126ff
関連 http://qiita.com/7of9/items/bce8dab6226cec14dc3a

pngやjpg画像を読込むとき、Stretchを使うと画像が粗くなる。これを回避する方法として、元画像のサイズのまま読込む方法を調べた。

参考 http://stackoverflow.com/questions/15209076/how-to-get-dimensions-of-image-file-in-delphi

一旦TPicture型で読込んで、そのWidth, Heightプロパティを使うという方法。

```Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <pngimage.hpp>
//#include <Jpeg.hpp>
#include <memory>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	// Image1->Stretch = true;

	String filename = L"site-logo.png";

	std::unique_ptr<TPicture> pict(new TPicture);
	pict->LoadFromFile(filename);

	Image1->Width = pict->Width;
	Image1->Height = pict->Height;

	Image1->Picture->LoadFromFile(filename);
}
//---------------------------------------------------------------------------
```

画像のサイズそのままが使われるようになった。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/894f786f-392c-a6c9-242d-6216f567c9d6.png)
dockerイメージにしたArch Linuxでlocale-genに失敗する

archlinuxのbootstrapを展開して、pacmanの初期設定とシステムアップデートしただけのdockerイメージを作った。
https://hub.docker.com/r/minanon/archlinux/
日本語表示したくて、locale-genを実行したが、失敗した。
結論から言うと、これで解決する。

```bash
pacman -Sy --noconfirm sed gzip
```

以下、調査ログ

## locale-genを実行、そして失敗

`locale.gen`を設定して普通に`locale-gen`したら、失敗した。
`locale-gen`実行には、`sed`が必要と出るので、先にインストールしておいた。ついでに使っちゃう。

```bash
pacman --noconfirm -Sy sed
sed -i -e '/^#\(ja_JP\|en_US\).UTF-8/s/^#//' /etc/locale.gen
locale-gen
Generating locales...
  en_US.UTF-8...character map file `UTF-8' not found: No such file or directory
default character map file `ANSI_X3.4-1968' not found: No such file or directory
```

## 原因調査

`locale-gen`は、ただのシェルスクリプトのようなので、中身を調べてみた。

```bash
cat /usr/bin/locale-gen
...
...
localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias $locale
```

設定ファイルを読み取って、`localedef`を実行しているだけ。`localedef`で失敗しているようだ。コマンドの情報を調べてみたが、いまいち何をしているのか不明だった。

### character map file `UTF-8' not foundとは？

`localedef`実行時の変数を埋めるとこんな感じ。

```bash
localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
```

UTF-8に関するエラーメッセージなので、関連しそうな`-f`オプションを調べてみると…charmapとか$I18NPATH/charmaps/とか書いてある。

### それっぽいファイルはあるよ

```bash
ls -l /usr/share/i18n/charmaps/UTF-8.gz 
-rw-r--r-- 1 1000 1000 393144 Aug  6 11:16 /usr/share/i18n/charmaps/UTF-8.gz
```

### 環境変数設定しても、変わらないエラー

```bash
I18NPATH=/usr/share/i18n localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
character map file `UTF-8' not found: No such file or directory
```

## 解決

`UTF-8.gz`のファイル拡張子を見てて、ふと閃いた。
gzipが無いのではないかということに。

```bash
pacman -Sy --noconfirm gzip
locale-gen 
Generating locales...
  en_US.UTF-8... done
  ja_JP.UTF-8... done
Generation complete.
```

通った！
[wordpress] カテゴリー毎に最新記事を◯件表示させる方法

```
<ul>
<?php $posts = get_posts('numberposts=5&cat=2'); global $post;?>
<?php foreach($posts as $post): ?>
<li><?php the_time('m/d'); ?>・・・<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>
```
ポイントは2つで、何件表示させるかと、どのカテゴリを表示させるかです。
何件表示させるかの部分は「numberposts=5」の部分になります。
記述例では5件表示させるという意味になっています。

次に気をつける部分が、どのカテゴリを表示させるかです。
「&cat=2」が該当部分で、記述例ではカテゴリ2が該当します。
このカスタムしている時点でないと思いますが、全件表示の場合はこの部分の記述を全削除していただければ大丈夫です。
複数指定の場合は「,」で区切れば大丈夫です。「2,3」のような感じです。

###カテゴリーIDの参照方法
http://wordpress-jp.info/admin/category-id/
これ参考
Gitの基本[初心者向け] - リポジトリの作成からコミットまで

今までGitの操作はSourceTreeを使っていたのでコマンドでもGitを操作できるようにしようと思い，いろいろ調べたので記事にしたいと思います．

#  Gitリポジトリを作成する
Gitで管理したいディレクトリ下でgit initコマンドを使用します．

```text
$cd Gitで管理したいディレクトリへのパス  // ディレクトリに移動
$git init  　　　　　　　　　　　　　　 // 移動したらgit initコマンドでリポジトリを作成
```
これで，このディレクトリはGitで管理されるようになりました．

# Gitリポジトリの状態を確認する
Gitリポジトリができたので，ファイルを作成・編集してみましょう．
ディレクトリ内にtest.txtというファイルを作成します．

```text
$echo 'Hello, Git!' > test.txt
$cat test.txt
Hello, Git!
```
ディレクトリ内では次々と状態が変更しているのでgit statusコマンドで状態を確認できます．

```text
$git status
```

# コミットする
ローカル環境下でのファイルの管理には次の3つの場所があります．(図１)

1. 作業ディレクトリ
今編集しているファイルやディレクトリを格納しておく場所

2. ステージング・エリア
ファイルをコミットする前に変更内容を一時的に登録しておく場所
ここに追加されたファイルは次回コミット時にリポジトリに登録される

3. ローカルレポジトリ
リモートリポジトリに送るためのコミットを登録する場所

![コミットの流れ.png](https://qiita-image-store.s3.amazonaws.com/0/139470/90c4e4c6-f6bc-d372-4ed7-1a531743df04.png)
図１　ローカル環境下でのファイルの管理

この図を見ると，作業ディレクトリでの変更内容をリポジトリに登録するには以下の手順が必要であることがわかります．
【コミットまでの手順】
1. addコマンドでステージングエリアに変更内容を一旦登録する(ステージング)
2. commitコマンドでリポジトリにコミットする

```text
$git add test.txt  // ファイルを指定してステージング
$git commit
```

# ステージングする必要ってあるの？
実際には，上記の手順でコミットするわけですが一気にコミットすればいいのでは？と考えてしまいます．
でも，やっぱり意味があるんですね．
<例>
例えば，「ユーザーログインの機能を修正中に，ログイン画面のデザインまで修正してしまった」とします．

この場合，ステージングを行わなければ全ての変更が1つのコミットとしてリポジトリに保存されます．(図２左)
この例のように機能とデザインを一度に修正したコミットは，後から変更点の差分を見直す時に機能の修正とデザインの修正といった複数の意味が含まれた変更点が混在して表示されてしまったり，コミットメッセージには「ログイン機能の変更」のように片方の変更についてしか言及されなかったりとのちの混乱を引き起こす原因となる可能性があります．

ステージングを用いることにより関連性が強い変更点をまとめ，変更内容ごとにコミットすることができる．(図２右)
図２右のように，1回のコミットは関連性が強いものだけにまとめつつ小さくすることで，他の箇所への影響をできるだけ抑えながら，バグの原因箇所の特定や変更の取り消しが容易に行えるようになる．

![ステージングの意義.png](https://qiita-image-store.s3.amazonaws.com/0/139470/4fbb3130-7ba7-35e4-1a2e-e019116fdd45.png)
図２　ステージングをする場合としない場合の違い

改めて勉強してみると，ちゃんとした理由があってこういった仕様になっているんだと思いました．

# 参考文献
書籍：「**エンジニアのためのGitの教科書　実践で使える！バージョン管理とチーム開発手法**」


今回の記事は以上になります．Gitに関しては引き続き勉強して記事をあげようと思います．
間違っている点や理解が不十分な点等，ご指摘いただければ幸いです．
SafariでtoDataURL()を使うと画像が上下逆さまになることがある！？

# 概要
SafariにおいてWebGLから[toDataURL()](https://developer.mozilla.org/ja/docs/Web/API/HTMLCanvasElement/toDataURL)を使用すると画像が上下逆さまになる！?

# 環境
[Safari 10.0](http://www.apple.com/jp/safari/)
[PixiJS v4](http://www.pixijs.com/)

# サンプル
```html:index.html
<body>

<h1>toDataURL() テスト</h1>

<div id="canvas-area01"></div>

<p><input type="button" name="button" value="toDataURL()実行" id="dataurl-button"></p>

<div id="image-area01"><img src="" width="250" height="250" alt="通常dataurl"></div>

<p><input type="button" name="button" value="逆さま回避" id="re-dataurl-button"></p>

<div id="canvas-area02"><canvas id="re-canvas" width="250" height="250"></canvas></div>

<div id="image-area02"><img src="" width="250" height="250" alt="複製画像のdataurl"></div>

</body>
```
"canvas-area01" → pixi.jsで描画するエリア
"image-area01" → 上記で描画したものをtoDataURL()するエリア
"canvas-area02" → "canvas-area01"を複製してdrawImageするエリア
"image-area02" → "canvas-area02"をtoDataURL()するエリア

```javascript:script.js
function render(){
  // create stage 
  var stage = new PIXI.Container(0xFFFFFF);

  // canvas size
  var width = 250;
  var height = 250;

  // create renderer
  var renderer = new PIXI.WebGLRenderer(width, height, {backgroundColor: 0xFFFFFF, preserveDrawingBuffer: true});

  // renderer's view add DOM
  document.getElementById('canvas-area01').appendChild(renderer.view);

  // render
  PIXI.loader
        .add('face', '../images/face.png')
        .load(function (loader, resources) {

        var face_img = new PIXI.Sprite(resources.face.texture);
        stage.addChild(face_img);

        renderer.render(stage);
  });
}

function dataurl(){
  $('#dataurl-button').on('click', function(){
    var canvas_area01 = $('canvas')[0];
    var imgData = canvas_area01.toDataURL();
    $('#image-area01 img').attr('src', imgData);
  });
}

function re_dataurl(){
  $('#re-dataurl-button').on('click', function(){
    var canvas_area01 = $('canvas')[0];
    var canvas_area02 = document.getElementById('re-canvas');
    if(canvas_area02.getContext){
      var context = canvas_area02.getContext('2d');
      context.drawImage(canvas_area01, 0, 0);
    }
    var sendImage = $('#re-canvas')[0];
    var imgData = sendImage.toDataURL();
    $('#image-area02 img').attr('src', imgData);
  });
}

$(function(){
  render();
  dataurl();
  re_dataurl();
});
```
render() → pixi.jsで描画する関数
dataurl() → 上記で描画したものをtoDataURL()する関数
re_dataurl() → render()で描画した画像を別キャンバスにdrawImageしてからtoDataURL()する関数

# ページ上での表示
自分のサムネイル画像でやってみます。
![test.gif](https://qiita-image-store.s3.amazonaws.com/0/122327/f7944a00-4d5d-f187-5e49-1400b095d438.gif)

普通にDataURL()を使って描画すると逆さまになってしまいました。
回避策としてもう1つcanvasを用意してそこにdrawImageしてからDataURL()を使うと正常に表示されました。
今回はpixi.jsで起きましたが、Three.jsとかでも起きるのかはまだ試していません。

Safariだけこの事象が起きるみたいです。
ChromeやFirefox、IEとかは大丈夫そうです。
c++ builder XE4, 10.2 Tokyo > TImage > 画像をTImageサイズに合わせて表示する > Stretch プロパティ

```txt:動作確認
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/28)
```

http://qiita.com/7of9/items/9edf309c5f58cec126ff
においてTImageにpngやjpg画像を表示できた。

次は画像のサイズをTImageのサイズに合わせる方法を調べた。

TImageのプロパティにStretch がありそれをtrueにするとTImageのサイズに合わせて画像が表示されるようになった。

下記の例ではコード中でStretch を変更しているが、固定値であればフォームデザイン上で変更してしまってもいい。

```Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <pngimage.hpp>
#include <Jpeg.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	Image1->Stretch = true;

	Image1->Picture->LoadFromFile(L"XXX-logo.jpg");
}
//---------------------------------------------------------------------------
```
1ワード多言語化するのに2時間😩

英語記事含めて5つくらい参照したのですが、多言語化できませんでした。結局自分で見つけました。Xcodeの仕様が変わったんでしょうか？バージョンは7.3.1です。

# 1

日本語を追加します

![Feel_Distance_xcodeproj.png](https://qiita-image-store.s3.amazonaws.com/0/12939/715619d0-a2f4-4ba7-73fd-22fc1888a8de.png)

# 2

昔は御法度でしたが今はこれでOKです

![Feel_Distance_xcodeproj2.png](https://qiita-image-store.s3.amazonaws.com/0/12939/ee562dfd-0f54-fbc0-e74f-28533f97e298.png)

# 3

storyboardに多言語化ファイルが付きます

![Feel_Distance_xcodeproj3.png](https://qiita-image-store.s3.amazonaws.com/0/12939/c0ed4a87-0639-c8ba-aff8-201728f03427.png)

# 4

storyboard上の文字列はすべて、ここで多言語化できます

![Feel_Distance_xcodeproj4.png](https://qiita-image-store.s3.amazonaws.com/0/12939/24b1ebe0-60dd-d062-74d6-17e7f012439f.png)

# 5

ファイルをつくります

![Feel_Distance_xcodeproj5.png](https://qiita-image-store.s3.amazonaws.com/0/12939/a124b1cf-87d0-94a7-410b-535d599706c6.png)

# 6

名前を付けます

![スクリーンショット_2016_10_20_12_596.png](https://qiita-image-store.s3.amazonaws.com/0/12939/143907da-afae-cfc2-5e86-589cedcb584d.png)

# 7

これ！これがどこにも載っていませんでした…なぜ？

<img width="1249" alt="File_strings.png" src="https://qiita-image-store.s3.amazonaws.com/0/12939/e76da772-8b9f-2c2d-2dd2-a54047fd956a.png">

---
どなたかの参考になれば幸いです。
c++ builder XE4, 10.2 Tokyo > TImage > 画像のファイル拡張子(.png)が不明です

```txt:動作環境
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/28)
```

### 現象

TImageにpngファイルを読込もうとしていた。

```Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	Image1->Picture->LoadFromFile(L"site-logo.png");
}
//---------------------------------------------------------------------------
```

実行すると

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/1c87451a-6ad8-1ff3-6b33-d3f91196244f.png)

### 対策

cppファイルに以下のincludeを入れる。
`#include <pngimage.hpp>`

参考 http://www.gesource.jp/programming/bcb/33.html

```Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <pngimage.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	Image1->Picture->LoadFromFile(L"site-logo.png");
}
//---------------------------------------------------------------------------
```

以下のようにTImage上にpngファイルを読めるようになった。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/965e7d8a-5266-48ef-2389-a567f6fb5266.png)

### Jpegの場合

以下を追加する。

```
#include <Jpeg.hpp>
```

参考 http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/jpeg_TJPEGImage_Assign.html
Eclipseでコード内でよくわからない単語（「漆黒の翼」など）が出てきたら、⌘Commandキーを押しながらクリック

Eclipseでよくわからない単語（色なし）が出てきたら、⌘Commandキーを押しながらクリックです。

何を言っているかわからねえと思うが、もう一度言うぜ

Eclipseでよくわからない単語（色なし）が出てきたら、⌘Commandキーを押しながらクリックです。（Macで）
（色付き）の単語は、機能を持っている単語なので、ググればわかります。


<h2>どんな時に使うの？</h2>
私のような、プログラミング超初心者が、とりあえずJavaをいじっている時に、使います。

Javaっていうものを勉強するぜ
変数とか、メソッドとか、その辺の基礎的なことはわかった

お手本のコードを読んでみるぜ

このコード複雑すぎる…
しかもメソッドとかフィールドの名前が
「漆黒の翼」（shikkokuNoTsubasa）
「ダークエンジェル」（darkAngel）
とかで、何を指しているのかよくわからない

しかも、その説明や定義は他のファイルに書かれている

他のファイルは50個くらいある

「漆黒の翼」が何を指しているのか、よくわからない…

そんな状況の時に使います


<h2>どうすればいいの？</h2>
Eclipseでよくわからない単語（色なし）が出てきたら、⌘Commandキーを押しながらクリックです。
（参考URL
http://hacknote.jp/archives/8655/
）


他にも下記ABCの方法があるようですが、おすすめしません（軽くしか調べてません）

<h3>A.右下ウインドウの「アウトライン」を参考にする</h3>
細かいところまで表示されません
「アウトライン」と言うウインドウに、今開いているクラス（設計図）の中に使用されているメソッド（機能）の名前や、フィールド（数値）の名前が一覧になっています

しかし、これは細かいところまで表示されませんね
第１階層までは表示されているんですが、メソッドの中の、if構文の中の、if構文の中の、if構文の中の単語は載ってないんです

これどうやったら出るんですか
（まあいいや）

<h3>B.右クリックでメニューだして参照ボタン押す</h3>
<h3>C.F3キーで参照する</h3>

使えない
この「参照」機能が使えないんですど…
僕だけですか？何も起こりません
そもそも、F3キーとか、MacでF3キーを使えるようにするの地味にめんどくないですか？
５分くらいかかる、そんなめんどいことやってられないよ
ドザ（）じゃないんだから



<h2>単語の意味はわかるようになるのか？</h2>
⌘Commandキーを押しながらクリックすると、
その単語が定義されている、クラス（設計図）までジャンプできます。

クラス同士は、「継承」されているため、単語の定義とかは、上層部のクラスにしか書かれていないんですね

無事に「漆黒の翼」というのは、int 666、つまり、整数の666だと言うことがわかりました。





こういう大事なこと一番初めに言ってよ…
ファイルの内容・標準出力をクリップボードへコピーする

xselとxclipがこの目的に使えます.
動作確認したバージョンはxsel 1.2.0, xclip 0.12です.

どちらのコマンドもデフォルトではプライマリセレクション（中クリックで貼り付けできる）が対象である点は共通です.

## xclip
ファイル引数と標準入力をともに扱えます. 

```zsh
% xclip test.txt # プライマリへコピー
% echo DELTA | xclip -selection clipboard # クリップボードへコピー
```
`-o`オプションで内容を確認できます.

```zsh
% xclip -o
text.txtの内容
% xclip -o -selection clipboard 
DELTA
```

## xsel
標準入力のみ扱えます. 記事のタイトルの使い方だけなら覚えることが少ないです.

```zsh
% cat test.txt | xsel # プライマリへ
% cat test.txt | xsel -b # クリップボードへ
```
`-i`オプションを指定している文献もあるが必要ない模様.
デフォルトでは内容を表示してくれます.

```zsh
% xsel
text.txtの内容
% xsel -b
text.txtの内容
```
git-lfsでポインタから実体に戻せなかった

git-lfsで、サイズの大きいファイルを管理できるというので試した。実体が通常のリポジトリと違うところに保存されて、通常のリポジトリでは、実体へのアクセス情報が書かれたポインタファイルのみ管理されるようだ。
で、管理されているポインタファイルを実体に戻そうとしたら、戻らなくなった。

## やったこと

1. lfsを使ってみる

    ```bash
    git init
    echo 'hoge' > lfs_test
    echo 'moge' > moge
    git lfs track lfs_test
    git add .
    git commit -m 'test'
    ```
1. lfs_testファイルは、実体ではなくポインタであることを確認

     ```bash
     git log -p -1
     ```

1. lfsの使用を辞めようとしたが、ポインタのままになってて、変更判定されない

    ```bash
    git lfs untrack lfs_test
    git add -u
    git commit -m 'test2'
    ```

## 戻し方？

仕方ないので、一旦削除して、実体をコミットしなおして、まとめた

```bash
git rm --cached lfs_test
git commit -m 'test3'
git add .
git commit -m 'test3a'
git rebase -i HEAD\^\^ # fixup でまとめた
```

調査、検証、マニュアル精査もしてないので、普通の方法があるのかも。
でも、ヘルプにもそれっぽいこと書いてなかったし、戻さないのだろうか。```git lfs -h```


## 経緯

なんでこんなことしようと思ったかというと、lfs使ったリポジトリをDockerhubでautobuildしたら、ビルドに失敗した。
lfsに入っているファイルをADDして、そこに入ってるはずのファイルをRUNしようとしてこけてた。ADDは成功してる。
となると、Dockerhubがlfs未対応で、ADDしたのは実体ではなくポインタファイルだと考えられる。検証してもいいけど、面倒なので…

http://stackoverflow.com/questions/33327780/dockerhub-automatic-build-with-github-lfs
https://github.com/docker/hub-feedback/issues/500

実体に戻したら、ビルドに成功した
https://hub.docker.com/r/minanon/archlinux/builds/

## 残ってる課題

* lfsの正常な戻し方
* dockerhubのautobuildでlfsを使用したい
[めも]AndroidのIn-app billingで、マルチアカウントの場合に、他のアカウントで処理したい時

ここを参照。
[Change Gmail account to make in-app purchase?]
http://android.stackexchange.com/questions/70215/change-gmail-account-to-make-in-app-purchase

答えの翻訳(概要)：
> 1.アプリをアンインストールする
> 2.使いたいアカウントで、アプリをインストールする
TravisのAccess tokenを取得したかった


ビルドの定時実行をしたかったので

[ニフティクラウドタイマーを使ってTravis CIで定期的にビルドを実行する \- higeblog](https://www.higebu.com/blog/2015/12/01/travis-ci-with-niftycloud-timer/#.WAgilJOLSL4)

↑にある通り

```
curl -s -X POST -H 'Content-Type: application/json' -H 'Accept: application/vnd.travis-ci.2+json' https://api.travis-ci.org/auth/github -d '{"github_token":"GITHUB_TOKEN"}'
```

としても

```
you are currently not allowed to perform this request. please contact support@travis-ci.com.
```

トークンくれなかったので
こう

````
gem install travis
travis login --github-token GITHUB_TOKEN
travis token
````

もらえた。

## 疎通テスト

````
body='{
"request": {
  "branch":"master"
}}'

curl -s -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Travis-API-Version: 3" \
  -H "Authorization: token {TRAVIS_TOKEN}" \
  -d "$body" \
  https://api.travis-ci.org/repo/{ACCOUNT}%2F{REPOSITORY}/requests
````

## （備考）rubyが古い場合

Macなのでrubyが古く(2.0.0)、travisコマンドが入らなかったのでアップグレードした。

````
brew install rbenv
rbenv install 2.3.0
rbenv global 2.3.0
echo 'export PATH="$HOME/.rbenv/shims:$PATH"' >> ~/.bash_profile
ruby -v
````

[MacでRuby開発環境設定：デフォの1\.8\.7→1\.9\.3にする＆rbenvも \- Qiita](http://qiita.com/Humangas/items/2ea1d55e41f934a40d8f)

## （備考２）
Travisのアカウントページ上に表示されるトークンは関係ない（別のもの）。
digdag serverをシークレットモードで動かす。

digdag v 0.8.9以降からシークレットモードが追加されていてapikeyやパスワードなどセキュアな情報を扱う場合にはsecretsコマンドを使わないとInternalServerErrorやproperty not foundと怒られてワークフローが動かなくなりました。
下記にドキュメントがありますが、パッとみて分かりづらかったのでひとまず動かすまでのメモを残しておきます。
http://www.digdag.io/command_reference.html#server-mode-commands


### サーバを動かすまで
1. デーモン化する
2. セッションの永続化先の設定（H2DB(オンメモリorファイル）、Postgresql
3. シークレットモードの設定


## 1.デーモン化
幾つか選択肢はあるようですが、自分は下記記事を参考にsupervisordでデーモン化しました。
https://blog.manabusakai.com/2016/08/digdag-supervisor/

設定ファイル等を食わせるときに環境変数を指定できるので起動用シェルを作るのがポイントです。

```sh:exec-digdag.sh
#!/bin/sh
export PATH=$PATH:/usr/local/digdag/
exec ~/bin/digdag server --config /usr/local/digdag/conf/digdag.properties
```

また、supervisordで設定した場合起動ユーザに注意してください。
userを指定しないとrootで起動してしまい、いろんなもののパスが通っていなかったり
パーミッションで苦労する事になります。


## 2.永続化先の設定
選択肢としては3つあります。

1. H2DB(オンメモリ)
2. H2DB（ファイル)
3. porsgresql

### 1. H2DB(オンメモリ)
プロセスが消えるとデータも消えます。
サーバモードで使う意味が殆ど無いかと。テスト用？

### 2. H2DB(ファイル)
1台構成でサクッとやる文にはこちらで十分だと思います。

v0.8.7ぐらいの頃は一晩起動してるとコネクションが残り続けてエラーになるというバグが有りました。今はおきてません。H2DBが古かったせいらしいです。

### 3. Postgresql（DB)
digdagサーバを複数台に分けて冗長化したり負荷分散する場合には必要になると思います。
2で動かなかったときに構築しましたがpostgresに不慣れだったのもありセットアップが手間だったので1台構成でやる場合はおすすめしません。


## 3.シークレットモードの設定

digdag serverは各種設定を記述したpropertiesファイルを
-c (--config)オプションで指定して起動します。

必要なファイルは下記2種類です。名前はなんでもいいはず。
1. 各種設定・・・digdag.properties
2. シークレット設定ファイルを用意する・・・secret-access-policy.yaml


Secret Access Policy File

```
database.type = h2 # DBの種類を指定
database.path = /var/tmp/test.db #永続化ファイルのパス（新規作成されます。書き込み権限忘れないように。）
digdag.secret-access-policy-file = /usr/local/digdag/conf/secret-access-policy.yaml # シークレット設定ファイルのパス（起動スクリプトでパス通してると相対でよい？）
digdag.secret-encryption-key = MDEyMzQ1Njc4OTAxMjM0NQ== # secretsを永続化する際の暗号化キー
```

digdag.secret-encryption-key は暗号化鍵の設定です。
128-bitのAES方式でbase64でエンコードした文字列を記載します。
公式のサンプルにある`MDEyMzQ1Njc4OTAxMjM0NQ==`は、デコードすると`0123456789012345`になります。
http://www.convertstring.com/ja/EncodeDecode/Base64Decode
セッションを永続化する際にこの鍵を使ってDBに書き込むためのもので、都度何かするたびにキーが聞かれるわけではない、という認識です。間違ってたらごめんなさい。


```yaml:secret-access-policy.yaml
operators:
  mail:
    secrets:
      - mail.*
  pg:
    secrets:
      - pg.*
  s3_wait:
    secrets:
      - aws.*
  td:
    secrets:
      - td.*
#（...中略..） 公式を参照のこと
  td_wait:
    secrets:
      - td.*
  td_wait_table:
    secrets:
      - td.*
```
こちらはオペレータ毎にsecretsが必要かどうかを設定するようです。個々にapikeyを書くわけではないです。
これを指定するとシークレットモードで起動します。


### secretコマンドの使い方
登録(digdag push)したワークフローについて下記コマンドを打つとsecretsが必要な値を設定することが出来ます。（例はTDのapikey）

```
digdag secrets --project <project-name> --set td.apikey
```
こうすると対話型で入力できます。


これで一通りdigdagサーバを動かすことが出来ると思います。間違いがあったら教えてください。
digdagサーバについてはまだ本番環境で稼働している話をあまり聞かないので、みんな試行錯誤しつつ試している段階なんですかね。もっと色々情報共有したいです。
Google Analyticsのイベントトラッキングにデータを送ってみる

自作jQueryプラグイン第三弾
https://github.com/uchikoba/jquery.GAEventTrackListener

jQuery本体は別途読み込んでください。

```:Sample
<a class="selector" href="hogehoge1" ga_eventCategory="category" ga_eventAction="action" ga_eventLabel="label" ga_eventValue="1">hogehoge1</a>
<a class="selector" href="hogehoge2" ga_eventCategory="category" ga_eventAction="action" ga_eventLabel="label" ga_eventValue="1">hogehoge2</a>
<a class="selector" href="hogehoge2" ga_eventCategory="category" ga_eventAction="action" ga_eventLabel="label" ga_eventValue="1">hogehoge3</a>

$(document).ready(function () {
  $('.selector').GAEventTrackListener();
});
```

eventCategoryとeventActionは必須。eventLabelとeventValueはあってもなくても良い。
後はGoogle Analyticsにログインしてイベントトラッキングのレポートを見ると、指定セレクタをクリックされたときにカウントが行われてるハズ。
macにEclipse4.6 + lombokを設定

# macにEclipse4.6 + lombokを設定する方法

Eclipse4.4まではlombok.jarで自動インストールが出来たのですが、4.6ではEclipseを見つけることができなかったので手動でのインストール方法のメモです。

# 環境
Eclipse4.6：Eclipse IDE for Java Developers
lombok:1.16.10

# 設定
### 1. ダウンロードしたlombok.jarを下記のフォルダにコピー

Eclipse.appを選択後、「パッケージの内容を表示」
![スクリーンショット 2016-10-20 11.40.37.png](https://qiita-image-store.s3.amazonaws.com/0/21343/f70cdb02-917c-37ec-8d7a-70f2c379b968.png)

MacOS配下にlombok.jarをコピー
![スクリーンショット 2016-10-20 11.43.38.png](https://qiita-image-store.s3.amazonaws.com/0/21343/432e8f89-20a5-3593-8658-ef2a45d9b1af.png)

### 2. eclipse.iniの編集

![スクリーンショット 2016-10-20 11.43.16.png](https://qiita-image-store.s3.amazonaws.com/0/21343/e1bf8a37-09fa-fba5-191d-d2363fe37c26.png)

下記を追加

```
-javaagent:lombok.jar
-Xbootclasspath/a:lombok.jar
```

最終的にはこんな感じ

```
-startup
../Eclipse/plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
--launcher.library
../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.400.v20160518-1444
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.8
-XX:+UseG1GC
-XX:+UseStringDeduplication
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx2g
-Xdock:icon=../Resources/Eclipse.icns
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
-javaagent:lombok.jar
-Xbootclasspath/a:lombok.jar
```
競プロにありがちな文字列をスペースで分割して整数値リストに変換するワンライナー

競プロにありがちな

```
0 1 2 3 4
```
のような文字列を`[0, 1, 2, 3, 4]`なリストに変換するワンライナー。読み込みは標準入力からを想定している。

# Ruby
```rb
N = gets.split.map(&:to_i)
```
気持ちいい。

# Perl
```pl
my @N = map { $_ + 0 } split ' ', <>;
```
数値に変換するために`+0`した。

# Perl6
```pl
my @N = get().split(' ').map({.Int});
```
5に比べて若干Rubyっぽくなった。

# Python
```py
N = map(lambda s:int(s), raw_input().split(' '))
```
特に感想はない。

# PHP
```php
<?php $N = array_map('intval', explode(' ', trim(fgets(STDIN))));
```
爆発しそう。

# Node.js
```js
var N = require('fs').readFileSync('/dev/stdin', 'utf8').split(' ').map(Number);
```
Nodeに組み込みのモジュールだけだとこんな感じにしか書けないと思う。

# Lua
```lua
local N = (function(n) for s in string.gmatch(io.read(), "[^%s]+") do table.insert(n, s) end return n end)({})
```
標準ライブラリが貧弱なのでワンライナーというにはちょっと無理がある感じになった。

# Elixir
```ex
"" |> IO.gets |> String.trim_trailing |> String.split(" ") |> Enum.map(&String.to_integer(&1))
```
もっと賢いやり方があると思う。
HaskellでElixirのようなパイプラインで記述したいとき

関数合成の本来の目的は置いておいて、関数合成の記述よりElixirのパイプラインの記述の方が分かりやすい気がしたので。

【関数合成の記述】

```haskell
someFunc :: IO ()
someFunc = do
  let a = sum . take 5 . reverse . map (*3) $ [1..10]
  print a
```

【パイプラインの記述】

```haskell
someFunc :: IO ()
someFunc = do
  let a = [1..10]
          |> map (*3)
          |> reverse
          |> take 5
          |> sum
  print a

infixl 0 |>
(|>) :: a -> (a -> b) -> b
(|>) = flip ($)
--a |> f = f a
```

勉強会では関数合成の記述は英語の順序で、パイプラインの記述は日本語の順序だから、日本人にはパイプラインの方が馴染みやすいのではという意見も。。。
Android Studio buildエラー時にログ(stack trace)を吐く

以下のビルドエラーが出る

```
* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
```

スタックトレースを表示したい

上部メニュー画面から

AndroidStudio → searchboxからcompilerで検索
Command-line-optionsにオプション名を記入(--info)など

![スクリーンショット 2016-10-20 11.26.52.png](https://qiita-image-store.s3.amazonaws.com/0/132177/2c11baac-7440-475c-c0e7-9e98f4d05644.png)


するとconsoleにerror traceが表示されます。

自分の場合は

```
注意:Version 2.0.2 of Realm is now available: http://static.realm.io/downloads/java/latest
注意:Processing class UserObject
エラー: No getter found for field name
エラー: No getter found for field id
注意:Creating DefaultRealmModule
警告: 最後に作成されたタイプ'io.realm.DefaultRealmModule'のファイルは注釈処理に渡されません。
警告: 最後に作成されたタイプ'io.realm.DefaultRealmModuleMediator'のファイルは注釈処理に渡されません。
エラー2個
警告2個
```

UserObjectクラスにGetterを追加して終了