OmniAICreator/Qiita-1.07M huggingface dataset:
Set Locale for Cron job


sometime you would get a issue that you create a cronjob, and when the job executed,
you app would raise some errors to show character issues.
but before you deploy that cron job, actually you tested, no problems.
why?
first thing that we make sure is every character issue that caused by Locale settings. and how to avoid this one?
1. you can set it in your `etc/environment` file, restart cron job
2. you can set it in your cronjob file `crontab -e`.
3. you can export your locale setting in your shell file explicitly.
brew update をするとエディタが開いてgit mergeを要求されるときの対処

## 問題
* `brew update` をするとエディタが開いてしまう

### 環境
* Mac
 * OSX Yosemite

### 原因
* refs: [brew update result in git merge message in editor](https://github.com/Homebrew/homebrew/issues/13987)
* 調べたが不明
 * なぜかたまに起きる人がいるらしい

### 対策
*  > `"git reset --hard origin/master" in /usr/local.`
 * refsの[issueのコメント](https://github.com/Homebrew/homebrew/issues/13987#issuecomment-55518929)のやりとりのとおり

#### 実施
```
% cd /usr/local
% git status
On branch master
nothing to commit, working directory clean
% git reset --hard origin/master
HEAD is now at 4689390 dfmt: update 0.4.2 bottle.
```

上記作業例のように一度スッキリさせてあげると、問題なく動作する。
C#で多次元配列を初期化してみた

#はじめに
入院していて、暇なときにQiitaを見ていたら、[C#での多次元配列・ジャグ配列の初期化](http://qiita.com/yosizo@github/items/1adcff1fc974cde5256a)を見つけたので、多次元配列の場合を想定して自分ならどうするか暇つぶしに考えてみたので、おつきあい頂ければ幸い。

#実行環境

C#は、6.0を利用しています。

#素直にForで書く
素直にforで書くなら概ね以下の通りかと

```csharp

private static int[,] UseFor()
{
	var matrix = new int[10, 10];
	for (var x = 0; x < 10; x++)
	{
		for (var y = 0; y < 10; y++)
		{
			matrix[x, y] = -1;
		}
	}
	return matrix;
}


```

先に多次元配列作って、その中にforで回しながらFillするなんてことの無いコードです。

#foreachを使う。
上記サンプルだと、二重ループになっているのでその部分をLINQで書き換えて、foreachで回したのが、以下のサンプル。

```csharp

private static int[,] UseForEach()
{
	var matrix = new int[10, 10];
	var sequence = from x in Enumerable.Range(0, 10)
		from y in Enumerable.Range(0, 10)
		select new {x, y};

	foreach (var index in sequence)
	{
		matrix[index.x, index.y] = -1;
	}

	return matrix;
}

```

matrixを先に使うのは、あまり変わらず。また、ループがネストしていないので利点はあるかと。
ループをクエリ構文で作成しているのが特徴。[^1]

#答え一発
尚、どこぞの電卓では無い[^2]
ここから先は、やればできるよ程度に見て頂ければ。
##Aggregateを使う

```csharp

private static int[,] UseAggregate()
{
	return (from x in Enumerable.Range(0, 10)
		from y in Enumerable.Range(0, 10)
		select new {x, y}).Aggregate(new int[10, 10], (matrix, index) =>
		{
			matrix[index.x, index.y] = -1;
			return matrix;
		});
}

```
Aggregateの使い方からすれば、ちと疑問が残るかもだけど、キニシナイ。

確かに、一発で出せているのだけど、Aggregateメソッド内のアキュムレータ関数がどーにも気にくわない。


##毒を食らわばパラノイア♪

なので、1個拡張メソッドをこさえる。

```csharp

public static class Extends
{
	public static T Repeat<T>(this T source, Action<T> action)
	{
		action(source);
		return source;
	}
}

```
まぁ、異論は色々あるでしょうが、今回はコレで行きます。[^3]

で、斯様に書く

```csharp

private static int[,] ParanoiacLinq() =>
    (from x in Enumerable.Range(0, 10)
        from y in Enumerable.Range(0, 10)
        select new {x, y})
        .Aggregate(new int[10, 10], (m, i) => m.Repeat(x => x[i.x, i.y] = -1));

``` 

まぁ、趣味の世界と言うことで一つ。

#まとめ
個人的には、foreach当たりがバランス取れてると思います。
それ以下の方法は、やってやれないことは無い的な実験的な代物ですので。

#付録:禁断のUnsafe

unsafe使える環境なら、以下でもOKかと。
個人的には,あんまりお勧めしない。

```csharp

private static unsafe int[,] UseUnsafe()
{
	var matrix = new int[10, 10];

	fixed (int* ptr = &matrix[0,0])
	{
		for (int i = 0; i < 100; i++)
		{
			*(ptr + i) = -1;
		}
	}
	return matrix;
}


```

[^1]: 拡張メソッドだと、Selectの中でEnumerable.Rangeするのでちょっとあれなので、クエリ構文を使った。
[^2]: 歳がばれるｗ（ちなみにリアルタイムじゃ見ていない。コレもずいぶん古いけどNHKの電子立国日本の自叙伝の後知恵）
[^3]: 名前がかぶるとか、副作用を積極活用してるとか異論があるかと思いますが、まぁいっかなって。
今日は何の日？カレンダーのデータ部分を取得するワンライナー

`Linux`のコマンドの勉強がてら何かやりたいなと思ってやった。
後悔はしていないが、公開はする。


# 実行コマンド

```bash
curl -so- http://today.hakodate.or.jp/apps/Today/Content?conf=today.pro | grep -G "<br>" | sed "s/<br>/\n/g" > hoge.txt
```

やっていることは、

- `curl -so-`コマンドでページの`HTML`を取ってくる
- `grep -G`コマンドで欲しいデータ部分を正規表現で抽出
- `sed`コマンドで`<br>`タグを改行コードに変換
- 適当なテキストファイルに出力

まぁ、普通にブラウザで[今日は何の日？カレンダー](http://today.hakodate.or.jp/default.htm)にアクセスすればいいので、実用性はないことは確かw
しかし勉強になった。
Cocoaの機能を使って正規表現で文字列を抽出するAppleScriptハンドラ


* `do shell script`を使わないとできなかった正規表現の文字列抽出
* AppleScript上でCocoaの機能を使えるようになった
* regexMatchesハンドラの返り値
	* マッチ箇所のリストで構成
	* マッチ自体もリストになっている
		* 1番目はマッチ全体の文字列
		* 2番目以降はキャプチャによる部分文字列


```applescript:regexMatches.scpt
use scripting additions
use framework "Foundation"

my regexMatches("<p>あいうえお</p>", "<(.+?)>")
--> {{"<p>", "p"}, {"</p>", "/p"}}

on regexMatches(aText as text, pattern as text)
	--require framework: Foundation
	set regularExpression to current application's NSRegularExpression's regularExpressionWithPattern:pattern options:0 |error|:(missing value)
	set aString to current application's NSString's stringWithString:aText
	set matches to regularExpression's matchesInString:aString options:0 range:{location:0, |length|:aString's |length|()}
	
	set matchResultList to {}
	repeat with match in matches
		set matchResult to {}
		repeat with i from 0 to (match's numberOfRanges as integer) - 1
			set end of matchResult to (aString's substringWithRange:(match's rangeAtIndex:i)) as text
		end repeat
		set end of matchResultList to matchResult
	end repeat
	return matchResultList
end regexMatches
```


## 更新履歴

* 2016-01-13: Cocoaの機能を使って作成
* 2016-01-15: 返り値にキャプチャの結果を含めるように変更
* 2016-01-20: NSMutableArrayの作成メソッドを`new:`から`arrayWithCapacity:`に変更
* 2016-02-16: matchResultListの作成をNSMutableArrayからAppleScriptのリストに変更
PostgreSQLで全角文字を検索するには

ポスグレでは`~`の後に文字列を入力すると正規表現パターンで検索できる。
OracleやSQLServerのような`LIKE`で正規表現を使うやり方はできないので注意

```
SELECT * FROM table WHERE column ~ '[^\r\n\t\x20-\x7f]+'
```
アップロード方法 [Wheezy to Jessie]


ref: http://akkagi.info/20150522_web/

# 準備
一通りアップデートを済ます。

``` shell
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
```

# アップロード
aptの読込先をjessieの情報に更新する。

``` shell
$ sudo vi /etc/apt/sources.list

# 変更箇所 / 筆者環境にては1行のみ。(2行目以降、コメントアウト)
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
```

# 余談
WheezyではPythonが2.7.3に対し、Jessieでは2.7.9になる(Python3では3.4.2)。
JavaSE7からMetalUIのTableHeaderのHeightが変更されている

#それはある日突然に気づく

ふと自作のSwingアプリをJavaSE8で実行すると、JTableのヘッダの高さが違うことに気づく。具体的には上下2pxずつ増えている。どうやらMetalUIの初期値が変更されているようだ。理由はわからないが勝手にこんなところを変えるなよとその時は思った。

#タイミングはJavaSE7から
原因を究明するため過去のバージョンをインストールし、フルパスでJVMを実行しつつ検証する。どうやら7から変更されているらしいことを突き止める。

#src.zipを比較
MetalUIのTableHeader.cellBorderを設定している部分が変更されており、BorderのInsetsを取るところが変更されている。どうやらJavaSE6までのが間違えていたらしい変更のされ方である。7まで誰も気づかなかったのか…

#とりあえず元に戻す方法
不具合の修正とはいえユーザーとしては勝手に変更されてしまうと困るので、この修正をなかったことにする。MetalUIだけ治ればよかったので、元のInsetsを返すように変更する。

```java
UIManager.put("TableHeader.cellBorder", new MetalBorders.TableHeaderBorder() {
  @Override
  public Insets getBorderInsets(Component c, Insets insets) {
    insets.left = insets.top = insets.right = insets.bottom = 0;
    return insets;
  }
});
SwingUtilities.updateComponentTreeUI(this);
```
nginxでリバースプロキシ

* [Apache2.4でリバースプロキシ - Qiita](http://qiita.com/tukiyo3/items/d49cec3b63f231202602)


## 準備

* ubuntu 16.04、nginx 1.9.9 で確認

```bash:インストール
apt-get install -y nginx
```

```bash:初期設定を編集したくないので削除。
rm /etc/nginx/sites-enabled/default
```

```nginx:/etc/nginx/sites-available/proxy
server {
    listen 80;
    server_name _; # バーチャルホスト

    root /var/www/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location /node/ {
        proxy_pass http://localhost:4000/;
    }
}
```

```bash:反映
ln -s /etc/nginx/sites-{available,enabled}/proxy
service nginx restart
```

* http://localhost/node/ にアクセスし http://localhost:4000/ の画面が表示されることを確認。

## アクセス制限

```diff:/etc/nginx/sites-available/proxy
 server {
     listen 80;
     server_name _;
 
     root /var/www/html;
     index index.html;

     location / {
         try_files $uri $uri/ =404;
     }
 
     location /node/ {
         proxy_pass http://localhost:4000/;
+        allow 127.0.0.1/32;
+        deny all;
     }
 }
```

アクセス拒否したログは以下となる。(/var/log/nginx/error.log)

> 2016/01/15 09:46:58 [error] 28028#28028: *1 access forbidden by rule, client: 192.168.0.30, server: _, request: "GET /node/ HTTP/1.1", host: "192.168.0.2"
Rails で OmniAuth を利用して Yammer にログインする

Yammer は、元々は企業内用 Twitter 的な感じだったためか、シンタックスハイライトもなく、投稿のフォーマットが（Announce 機能を除き）できないというのもあり、エンジニアが利用するケースはあまりないかもしれません。（なによりスペースのインデント消すのは勘弁して欲しい。。）

が、私の所属する会社では結構ハードに使われていたりします。（と言っても、やはりエンジニアは Slack に居て、他の職種の人と話す用ですが :sweat_smile: ）

## OmniAuth を利用した例を説明するにあたり

### OmniAuth 使わなくてもいい

今回は OmniAuth を利用しますが公式に提供されている `yam` を使っても簡単に Yammer ログインは実装できます。

- https://github.com/yammer/yam
- [OAuth 2: Server & Client-Side Flow - Yammer Developer Center](https://developer.yammer.com/docs/oauth-2)

### 説明の前資料

- https://github.com/intridea/omniauth
- https://github.com/le0pard/omniauth-yammer

ご存知の方は不要ですが、以降で出てくる Callback URI 等の命名や、突然 `/auth/yammer` とか書き始めるのは、OmniAuth gem の方の README を見ていただくと「これか :bulb: 」と思っていただけると思います。

## Application の登録

Yammer にログインした状態で https://www.yammer.com/client_applications/ にアクセスすると、アプリケーションを登録できます。

<img width="1089" alt="_220__Yammer___Developer.png" src="https://qiita-image-store.s3.amazonaws.com/0/904/550c8a7b-e3cf-441a-87a1-b649752b6739.png">

__Register New App__ ボタンを押すと以下のダイアログが出てくるので、内容を埋めて登録してください。

<img width="509" alt="_220__Yammer___Developer 2.png" src="https://qiita-image-store.s3.amazonaws.com/0/904/03b35516-c77b-a2d1-7519-36cf1f589cfc.png">

__Redirect URI__ ですが、ここでは http://localhost:3000/auth/yammer/callback を入れておいてください。

> localhost は 127.0.0.1 としてもいいのですが、以下のサンプルでは `localhost` で行うので合わせてもらった方がいいです。ここの設定と異る callback になると validate にひっかかるようです。
参考: https://developer.yammer.com/blog/action-required-please-make-this-simple-update-prior-to-august-25-2015

## Rails アプリの設定

今回は Ruby 2.2.2, Rails 5.0.0.beta1 を使いました。

### Gem の追加

```rb:Gemfile
gem 'omniauth'
gem 'omniauth-yammer'
gem 'dotenv-rails', groups: [:development, :test]
```

> dotenv は必須ではないですが、以降 `ENV` を利用するのでとりあえず。

### .env ファイルの作成

先ほどの Application 登録で入手した Client Id と Client Secret を利用します。

```properties:.env
YAMMER_KEY=Yammer の Client Id
YAMMER_SECRET=Yammer の Client Secret
```

### initializer の作成

https://github.com/le0pard/omniauth-yammer#usage

`app/config/initializers/` に `omniauth.rb` ファイルを作成します。

```rb:omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :yammer, ENV['YAMMER_KEY'], ENV['YAMMER_SECRET']
end
```

> 通常の www.yammer.com 以外で運用している企業は `ENV['YAMMER_DOMAIN']` を指定する必要があるようですね。

### Callback 受け取り口を作る

以下の通りですね。
https://github.com/intridea/omniauth#integrating-omniauth-into-your-application

#### ルートの追加

```rb:routes.rb
get '/auth/:provider/callback', to: 'sessions#create'
```

#### SessionsController の追加

```rb:sessions_controller.rb
class SessionsController < ApplicationController
  def create
    request.env['omniauth.auth']
    # ここで認証後の情報が入っているので、user_id 等を取り出してアプリの方でユーザー情報を登録/検索等することになると思います。
  end
end
```

## 試してみる

Rails サーバーを立ち上げ、`http://localhost:3000/auth/yammer` とロケーションバーに入れると、ば`SessionsController#create` に Callback が渡されてることが分かります。

> ログイン済でないブラウザなら一度ログイン画面を経由することになると思います。

### これ以降は

`request.env['omniauth.auth'].credentials.token` でトークンが手に入るので、`yam`を使うなり、直接 API を使うなりして認証ユーザーの情報を使ったアプリが作れますね。
iOSとAndroidのデフォルトのline-height値が異なる件

# iOS(Safari)でline-heightを特に指定しないとこうなる
![IMG_0063.PNG](https://qiita-image-store.s3.amazonaws.com/0/40931/e284321d-8ca4-7ca5-edf0-8214183d1c0e.png)
**line-height: 1.6;**がデフォルト値。

# Android(Androidブラウザ)でline-heightを特に指定しないとこうなる
![Screenshot_2016-01-14-19-54-46.png](https://qiita-image-store.s3.amazonaws.com/0/40931/79b1b29d-6551-309f-54d6-566f86a2adde.png)
**line-height: 1.2;**がデフォルト値。

# 並べるとこんなに違う
![image](https://qiita-image-store.s3.amazonaws.com/0/40931/b696ebd2-86d4-2cfe-83b1-5210475132c0.png)
左がiOS、右がAndroid

# まとめ
* line-heightは共通で決めておかないと結構見た目と可読性が変わってしまう。
* Androidはデフォのままだと詰まって読みにくい。
* 確認端末がiOSしかない場合は注意が必要。
APNs:Push通知の証明書運用 〜 Appleはこっそり変えてくる


#はじめに
APNs（Apple Push Notification service）との通信に使用するSSL証明書の有効期限が変わっていました。

#何が変わったか
## 今まで
 12ヶ月
## 今後
13ヶ月 =  12ヶ月+1ヶ月

#運用はどう変わる？
## 今まで
:smiley: サーバに証明書の設定完了。
:apple: < 1年後に更新ねー
> キーチェーンアクセスなどで証明書の有効期限を確認

-- 有効期限一ヶ月前 --
:apple: < そろそろ証明書がきれるよー
> 期限切れ予告メールが届く

:cold_sweat: 一年きっちりで有効期限がきれるから、どんどん更新する月が繰り上がっていく
:disappointed_relieved: 半年に一度に更新ならずれないけど、有効期限がだいぶ残っててクライアントがイマイチ納得しない


## 今後
:smiley: サーバに証明書の設定完了。
:apple: < 1年後(+1ヶ月)に更新ねー
> キーチェーンアクセスなどで証明書の有効期限を確認

-- 有効期限一ヶ月前 --
:apple: < そろそろ証明書がきれるよー
> 期限切れ予告メールが届く

:relaxed: 一ヶ月の猶予ができたから、前回更新の月をスケジューリングしやすくなった
:satisfied: fastlaneとかで取得して、運用も自動化できちゃう？

#さいごに
Enterprise版の証明書の時もそうでしたが、この手のことはあまりアナウンスされないです。
されてるのかもしれませんが、地味に自サイトだけで展開していたり
私個人は作業して、初めてしりました。
自動化も書いてはいますが、手動で作業しないなら取得した証明書の有効期限チェックも忘れずに
アルゴリズム問題　～時計の角度～

# 問題
今回は会社の先輩から頭の体操として教えてもらった、あるアルゴリズムの問題を解く。問題の内容は、

__時計の長針と短針の間の角度（小さい方）を計算しなさい。__

というもの。使用した言語はいつも通り`PHP`ですわ。

# 実装
考えるべきことは以下。  

- 長針・短針共に0を基とする
- 短針の0時からの角度
- 長針の0分からの角度
- 短針の速度
- 長針と短針の差分により、引くほうを決定

こんなところか。以上のことが分かれば解ける。
実際に組んだプログラムはこちら。

```php:PHP

// 長針・短針の設定
$short = 23;
$long  = 59;

// 24時間表示　→　12時間表示
$hour   = $short <= 12 ? $short : $short - 12;
$minute = $long;

// 短針の角度取得
$rShort = ($hour * (360 / 12)) + $minute * 1/2;

// 長針の角度取得
$rLong = $minute * (360 / 60);

// 角度取得
$ang = abs($rLong - $rShort);
// 角度が小さいほうを表示
echo min($ang, (360 - $ang));

```

こうした方が良いよ！というご意見ございましたら、是非コメントいただけると助かります。
よろしくお願い致しますm(＿ ＿)m
スロットル　バイ　ワイヤー　その２

#概要
arduino megaでappセンサーを読んで、電子スロットルモジュールを動かした。
アクセルもスロットルもホンダ　フィットです。
#動画
https://www.youtube.com/watch?v=LVz4zto2mdE
#写真
![MVC-009S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/f5f78550-7812-cc28-2e96-c6c214340c45.jpeg)

#回路図
![app.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/4d6abfa4-3761-2390-fc6b-c36d67298981.jpeg)

#サンプルコード
```

int a0;
int a1;
void setup()
{
	pinMode(3, OUTPUT);
	digitalWrite(3, HIGH);
}
void loop()
{
	a0 = analogRead(0);
	a1 = analogRead(1);
	a0 = map(a0, 348, 860, 0, 1023);
	a1 = map(a1, 93, 481, 0, 1023);
	if (a0 > a1)
	{
		digitalWrite(3, HIGH);
	}
	else
	{
		digitalWrite(3, LOW);
	}
}
```
Gitbook

* mdwikiも良いが、シーケンス図がより綺麗

## 参考

* [mermaid.jsが素晴らしいけどなかなか使ってる人見かけないので実例晒す(追記あり) - Qiita](http://qiita.com/uzuki_aoba/items/a01f8b0b52ced69c8092)
* [「mermaid.js」が簡単に試せるMarkdownエディタ「Haroopad」 | You Look Too Cool](http://stabucky.com/wp/archives/7277)
* [mermaid live editor](http://knsv.github.io/mermaid/live_editor/)
* [mermaid docs](http://knsv.github.io/mermaid/#mermaid)
    * [syntax](http://knsv.github.io/mermaid/#syntax)


## Gitbook を dockerで動かす

* https://github.com/HeRoMo/gitbook-template

```
mkdir gitbook html
```

```sh:init
wget https://codeload.github.com/HeRoMo/gitbook-template/zip/master
unzip master
cd gitbook-template-master
```

```sh:init
docker-compose run --rm gitbook init
```

```sh
docker-compose up -d
```

```sh
sudo chown -R $USER gitbook
```

1分ほど待つ

* http://localhost:4000


### 目次の作成

* [gitbook](https://www.npmjs.com/package/gitbook)

```md:
# Summary
 
This is the summary of my book.
 
* [section 1](section1/README.md)
    * [example 1](section1/example1.md)
    * [example 2](section1/example2.md)
* [section 2](section2/README.md)
    * [example 1](section2/example1.md)
```

```bash:
gitbook init
```

* 不足しているファイルを自動作成してくれる
    * section1/README.md
    * section1/example1.md
    * section1/example2.md
    * section2/README.md
    * section2/example1.md

### CSSを変更

```css:styles/website.css
h1 {
    text-align:center;
}

h2 {
    margin: 1.3em 0 .7em 0;
    background-color: #EEE;
    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6);
    line-height: 30px;
}

h3 {
    margin: 1.3em 0 .7em;
    border-bottom: solid 1px #d9d9d9;
    line-height: 1.4;
}

a {
    color: #117ec6;
    text-decoration: none;
    border-bottom: none;
}
```

* webサーバを再立ち上げで反映される

## Haroopad

* windows, linux, mac用エディタ。主にmermaid書式の編集に用いる。
* mermaid記法対応(図が書ける)
* viキーバインド対応

あと一歩のところは、以下でmermaid書式と認識しない。

```bash:
{% mermaid %}
...
{% endmermaid %}
```
[覚書]Escキーでパネルを閉じる方法[Atomパッケージ作成]



```coffee:
  escapeListener: null

  activate: (state) ->
	# 略
    @escapeListener = @onEscapeKey.bind(this)

  
  showPanel: ->
    @somePanel.show()
    window.addEventListener('keydown', @escapeListener, true) # 1

  onEscapeKey: (e) ->
    keystroke = atom.keymaps.keystrokeForKeyboardEvent(e) # 2
    if keystroke == 'escape'
      @somePanel.hide()
      window.removeEventListener('keydown', @escapeListener, true)
```

1. ```window.addEventListener('keydown', @escapeListener, true)``` で、キーダウンイベントを監視する。３番目の引数をtrueにしないと、すべてのキー入力を補足できない（他のパネルなどでのキー入力も補足する）。

1. ```atom.keymaps.keystrokeForKeyboardEvent(e)``` でキーストロークを文字列に変換して、どのキーが押されたのか判定している。
MacだとかWindowsだとかDvorak配列だとか気にしなくとも、```atom.keymaps```が勝手に考えてくれる（はず）。
crystalをubuntuにインストール

ビルドできるのと、rubyの書き方ができるのが魅力。
しかしgoのようにどのサーバに持って行っても動くというものではない。
windows向けはない。

## インストール

* [Debian や Ubuntu | プログラミング言語 Crystal](http://ja.crystal-lang.org/docs/installation/on_debian_and_ubuntu.html)

```bash:
sudo -s

apt-key adv --keyserver keys.gnupg.net --recv-keys 09617FD37CC06B54
echo "deb http://dist.crystal-lang.org/apt crystal main" > \
  /etc/apt/sources.list.d/crystal.list
apt-get update
apt-get install crystal
```

## 使ってみる

```bash:a.cr
a = 1 + 2
puts a
```

```bash:実行
crystal a.cr
```

```bash:ビルドして実行
crystal build a.cr
./a
```

## webサーバの例

* [HTTP サーバー | プログラミング言語 Crystal](http://ja.crystal-lang.org/docs/overview/http_server.html)

```ruby:websrv.cr
require "http/server"

server = HTTP::Server.new(8080) do |request|
  HTTP::Response.ok "text/plain", "日本語でおｋ, #{Time.now}"
end

puts "Listening on http://0.0.0.0:8080"
server.listen
```
リアルタイム処理エンジンGearpumpって？

こんにちは、最近[Gearpump](http://www.gearpump.io/)という面白そうなプロダクトを教えてもらったので、それについて調べてみようと思います。

参照：
http://www.gearpump.io/
http://conferences.oreilly.com/strata/big-data-conference-sg-2015/public/schedule/detail/45109


# Gearpumpとは？

Intel発のOSSでリアルタイムなビッグデータストリーム処理エンジンです。
構造としてはDAG構成を持ったグラフをベースとし、それを実行するためのエンジンとなります。

# 類似の類似のプロダクトにはどのようなものがあるか？

具体的にGearpumpがビッグデータのプロダクト群の何に対応づけられるかというと、下記の図のとおりとなります。
![Gearpump01.png](https://qiita-image-store.s3.amazonaws.com/0/9616/40ab317d-0005-da2c-de8c-8da7c48503bb.png)

レイヤとしては実際に処理を実行するためのエンジン部、その中でもストリーム処理を行うプロダクトになります。

ストリーム処理系のプロダクトとしては下記のようにプロダクトが公開されてきています。
実際にはActiveMQやKafkaはデータを流す基盤プロダクトなので微妙に立ち位置は違いますが、過去Yahoo S4、Storm、Spark Streaming等が公開されてきたものの流れを汲むプロダクトという位置づけとなりそうです。

![Gearpump02.png](https://qiita-image-store.s3.amazonaws.com/0/9616/d250548d-50c4-2766-51b0-044fa98726a4.png)

# どのような特徴を持っているか？
サイトを見るに、下記のような特徴を持っているようです。

- 高性能
- 低レイテンシ
- メッセージの処理信頼性設定可能（At least once / exactly once）
- 高拡張性
- 動的DAG
- Storm互換
- Samoa互換
- 広範なIoT接続容易性
- 高レベル、低レベルの両方のAPIを提供

大部分はこういったストリーム処理基盤でよく謳われる項目なのですが、中でも目を引くのが**exactly onceをストリーム処理基盤で可能**という所です。
これまでStorm等ではexactly onceは実現できず、相応に実現したSpark Streamingは中身の実態はバッチ処理、という事情もあります。
ですので、モデルとして１メッセージずつ処理するリアルタイム／ストリーム処理基盤系でexactly onceを達成したプロダクトを私は知らなかったので、実際どういうものかは興味がわきました。

# 具体的にどのくらい性能が出るのか？
ページのトップを見る限り、4nodeのクラスタで100バイトのサイズを持ったメッセージを毎秒1100万件17msのレイテンシで処理したとあります。
![Gearpump03.png](https://qiita-image-store.s3.amazonaws.com/0/9616/ca1b9b21-2440-4f3e-71c4-115006344e5e.png)

尚、実際にどのような処理を行ったかというと、100バイトのランダムのメッセージを生成し、それを下流に流すというのみの、主にネットワーク帯域をどこまで活用可能かを確認するためのテストのようです。
処理量は少ないですが、メッセージの送信についてはStormのデフォルトであるShuffle Groupingがベースとなっているため、ネットワーク的な効率は悪い構成。
これが妥当かどうかはちょっと悩みどころですが、単にスループット、ネットワーク的な性能を試すという意味ではそれなりに有効なようには見えます。

デフォルト設定なのであれば、下記の構成となるようです。
- 階層は2階層（メッセージを生成するモジュール＞メッセージを下流に流すモジュール）
- メッセージを下流のどのモジュールに流すかはラウンドロビン（StormでのShuffleGrouping）

参照：
https://github.com/intel-hadoop/storm-benchmark/blob/master/src/main/java/storm/benchmark/benchmarks/SOL.java

# どのくらい使いやすそうなの？管理しやすそうなの？

この手の処理エンジンを使う時に必須となるのが管理をするための画面ですね。
GearpumpはStormのような初期のプロダクトのUIとは違い、直観的に中身がそれなりに見えるダッシュボードを有しているようです。

![dashboard.gif](https://qiita-image-store.s3.amazonaws.com/0/9616/a1e782c4-74f9-abb3-6563-45766bf06503.gif)

# どのような技術要素で構成されて、どのような運用が出来そう？

基本的にAkkaのActorをベースとしたアーキテクチャとなっているようです。

![actor_hierarchy.png](https://qiita-image-store.s3.amazonaws.com/0/9616/098f19f1-8e03-54cd-2113-2ebee32fad26.png)

Akka Streamsのように下記のような記述でモジュールの連鎖を組むことも可能な模様。

![image](https://qiita-image-store.s3.amazonaws.com/0/9616/2c87dff5-888f-9bf0-1079-2216ec34f1f1.png)

そのため、実装言語もJavaとScalaを用いた構成となっており、JVM系エンジニアとしては非常に都合がいい言語構成となっています。

また、YARN上で実行する構成、自前でクラスタ管理する構成の両方を提供し、実行基盤も確保しやすくなっています。

![図2.png](https://qiita-image-store.s3.amazonaws.com/0/9616/28ac3013-e956-87d1-c818-cee51a387db3.png)

あとはMasterの多重化によってプロセスが落ちた、ノードが落ちた、というケースの障害に対しては単一障害点は除去している模様。
*まぁ、この手の分散処理基盤の単一障害点ないよ、はあまり信頼が置けないと言えば置けないのですが。*
![図1.png](https://qiita-image-store.s3.amazonaws.com/0/9616/3622dec5-0c09-781c-6152-7b8f2102dd73.png)

# まとめ

上記のとおり、Gearpumpのサイトや発表資料をざっと見て概要的な部分を漁ってみました。
次回ぐらいにもう少し詳細な情報を資料から読み解いてみて、その次位から実際に動かしてみましょうか・・・
solver > 調査 > Levenberg-Marquardt


http://stackoverflow.com/questions/5690966/looking-for-optimization-
algorithm-in-c-to-replace-excel-solver

> There are modifications of the <font color=red>Levenberg-Marquardt</font> method that...

このキーワードで思い出したのは1997年ころの国際会議で３名のインド人が Levenberg-Marquardt を使ってデータ解析をしていた。その発表を見て自分でも「やってみよう」と思って1年くらいやった。そのインド人とは3年くらい交流したが、当時のメールはおそらく残っていない。

Levenberg-Marquardtで調べると https://en.wikipedia.org/wiki/Levenberg%E2%80%93Marquardt_algorithm
に Numerical Recipeへのリンクがある。自分が持っているFortranの本では９章あたりが関係しそう。

<hr>
組込み環境でsolverを動かしているので一般的なlibraryは使えない。

自分が実装を見直しているのは

1. 関数の最大値を持つxの求め方
2. 関数の最小値(0.0)を持つxの求め方

数値計算の基本的な本に立ち戻るのもよさそう。

<hr>
https://en.wikipedia.org/wiki/List_of_numerical_analysis_topics#Finding_roots_of_nonlinear_equations
技術英語 > When is the last time we [aligned the torque sensors]? / They don't sound right.

@ Star trek movie > 叛乱

ピカード艦長がクルーに聞いた

> When is the last time we <font color=red>align the torque sensors</font>?

「最後にトルクセンサーの調整をしたのはいつだ?」

続けてピカード艦長が

> They don't sound right.

字幕「変だな」

音でおかしいことに気づいた。
トルクセンサーの位置が12ミクロンずれていたとのこと。

<hr>
alignで調整というのは初めて知ったので調べてみた。

http://homeguides.sfgate.com/check-garage-door-sensors-working-35321.html

> When you <font color=red>align the sensors correctly</font>, the LED stops blinking.

やはりalignのようだ。リスニング間違いではなさそう。

<hr>
(訂正 2016/01/15)
おそらく過去形が正しくて

> When is the last time we <font color=red>aligned the torque sensors</font>?
PID名前空間

### 概要
cgroupのことについて調べたら、PID名前空間ってどこにあるんだろうって思って調べた自分メモメモ。なーんとなくしかわかっていないと思われるが、あたらずとも遠からずかなぁm(_ _)m。

#### pidとupid
プロセスIDは1234みたいにプロセスを一意に識別するただの番号に思えるが意外と単純でなく、カーネルでは多様なメンバで構成された構造体(pidとupid)の関連で表現されている。
↓
[pidとupid](http://lxr.free-electrons.com/source/include/linux/pid.h#L50)

~~~include/linux/pid.h
 50 struct upid {
 51         /* Try to keep pid_chain in the same cacheline as nr for find_vpid */
 52         int nr;
 53         struct pid_namespace *ns;
 54         struct hlist_node pid_chain;
 55 };
 56 
 57 struct pid
 58 {
 59         atomic_t count;
 60         unsigned int level;
 61         /* lists of tasks that use this pid */
 62         struct hlist_head tasks[PIDTYPE_MAX];
 63         struct rcu_head rcu;
 64         struct upid numbers[1];
 65 };
~~~

task_strcut->pidから辿れる。upid->nrがプロセス番号。pid->numbers[1]は可変配列みたいになっていて拡張可能でここが`プロセスの階層を表わしている`ようだ(たぶｎ)。これのMAXはどこかでdefineされていて32個まで名前空間の階層は作成できるみたい。なのでプロセスの名前空間は32個しかもてない？プロセスはどこかの階層に属していてこの階層が親子の上下関係を表わしているでいいのかな？？
[ネストされた名前空間](https://linuxjm.osdn.jp/html/LDP_man-pages/man7/pid_namespaces.7.html)
>プロセスは、所属する PID 名前空間の他のプロセスから見える。また、 root PID 名>前空間に向かう直径の先祖の各 PID 名前空間のプロセスからも見える。 この場合、「見える」とは、 あるプロセスが、 他のプロセスがプロセス ID を指定するシステムコール>を使う際に操作の対象にできることを意味する。 逆に、子供 PID 名前空間のプロセスか>ら親や先祖の名前空間のプロセスは見えない。 

[pidとupidの初期化](http://lxr.free-electrons.com/source/kernel/pid.c?v=4.1#L312)はこのalloc_pid()でしていて、後述するtask_struct->nsproxy->pid_namespace(自分が所属している名前空間)からlevel(階層)を取得してそこから上に向かって各階層で自分のプロセス番号を設定している。すべての階層で自分のプロセス番号を取得して設定するが、結果として返すプロセス番号(nr)は自分が所属しているプロセス空間のプロセス番号(nr)になる。このプロセス番号はこの階層でしか一意でなく、よって他の階層だとプロセス番号はかぶることがある。

#### pid_namespace

~~~Linux/include/linux/pid_namespace.h
 24 struct pid_namespace {
 25         struct kref kref;
 26         struct pidmap pidmap[PIDMAP_ENTRIES];
 27         struct rcu_head rcu;
 28         int last_pid;
 29         unsigned int nr_hashed;
 30         struct task_struct *child_reaper;
 31         struct kmem_cache *pid_cachep;
 32         unsigned int level;
 33         struct pid_namespace *parent;
 34 #ifdef CONFIG_PROC_FS
 35         struct vfsmount *proc_mnt;
 36         struct dentry *proc_self;
 37         struct dentry *proc_thread_self;
 38 #endif
 39 #ifdef CONFIG_BSD_PROCESS_ACCT
 40         struct fs_pin *bacct;
 41 #endif
 42         struct user_namespace *user_ns;
 43         struct work_struct proc_work;
 44         kgid_t pid_gid;
 45         int hide_pid;
 46         int reboot;     /* group exit code if this pidns was rebooted */
 47         struct ns_common ns;
 48 };
~~~
[task_strcut->nsproxy](http://lxr.free-electrons.com/source/include/linux/sched.h#L1562)から上記のpid_namespaceが辿れてプロセスを生成するときに初期化されるようだ。初期化するときにcloneで`CLONE_NEWPID`が指定されていると、このnsproxyが新規のものにとって変わられる[ここで](http://lxr.free-electrons.com/source/kernel/nsproxy.c?v=4.1#L124)。
task_struct->nsproxy->pid_namespaceはこのプロセスが所属している名前空間を表わしている。`pid_namespace->level`は階層。前述したpid->numbers[level]と対応している(たぶん)。

#### 順番
まず、プロセスを生成するときにtask_struct->nsproxyを初期化して、自分の所属する名前空間を割り出して(level)、そこを起点として上にたどっていきtask_struct->pid->upidを初期化する。

#### 参考
詳しくは[こちら](http://kernhack.hatenablog.com/entry/2016/01/11/163152)をご参照ください
numbaインストール on mac

* 普通にpipで入れると怒られる

```bash
$ sudo pip3 install numba
```

これが出る

```
RuntimeError: llvm-config failed executing, please point LLVM_CONFIG to the path for llvm-config
```

* なのでまずはllvmを入れる

```bash
$ brew install llvm
```

* LLVM_CONFIGをllvmのllvm-configにリンク

```bash
$ sudo -s  //rootになる
$ export LLVM_CONFIG=/path/to/llvm-config
$ exit
```

* とりあえずllvmliteを入れてみる

```bash
$ sudo pip3 install llvmlite
```

* 成功！

```
Successfully installed llvmlite-0.8.0
```

* 次numbaをインストーリ

```bash
$ sudo pip3 install numba
...
Successfully installed numba-0.22.1
```

おしまい。
【Wordpress】親テーマでCSSを直書きしている時に子テーマのCSSで変更する方法

親テーマのheader.php内でstyle.cssが下記のような形で指定されている時の対処法。
ちょっと無理矢理感があるのでもっとスマートなやり方あれば教えてください。

Design Plusさんで販売されている有料テーマのtcd018で下記のように記載されておりカスタマイズするときに少しつまずいたので私的備忘録。
（あ、Design Plusさんいつも使わせていただいています）


```lang:header.php
<?php wp_head(); ?>
<link rel="stylesheet"　href="<?php bloginfo('template_url'); ?>/style.css">
～
```

子テーマ内のFunctions.phpでCSSを指定する際、公式サイトに書いてある下記コードを記載しても上書きできないという問題が。

```lang:functions.php

add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style',
        get_stylesheet_directory_uri() . '/style.css',
        array('parent-style')
    );
}

```

そもそも直書きwp_head();のあとに直書きでcssを読み込んでいるので、子テーマのCSSよりあとに呼びだされてしまう。
このテーマは、テーマオプションでカスタムCSSを登録できるんですが、CSSファイルでどうしても管理したいと思ったので以下のように実装してみました。

#対処方法
bodyに子テーマ用のclassをつけ、CSSを書き直す。
子テーマのfunctions.phpを以下のように変更。

```lang:functions.php
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style',
        get_stylesheet_directory_uri() . '/style.css',
        array('parent-style')
    );
}

add_filter('body_class', 'body_classn_names');
function body_classn_names($classes) {
	$classes[] = 'child-sample';
	return $classes;
}
```

子テーマのstyle.cssは下記のように変更

```lang:style.css
.child-sample ●●●指定したい要素●●● {
～～～～～～
}
```

add_filter('body_class', 'body_classn_names');
～～～
の部分でbodyタグにchild-sampleというclassをつけ、CSSでそれを指定して上書きするだけ。

ちょっと無理矢理感があるかもしれないですが、一応子テーマのfunction.phpで読み込めるしコレでいいかなと。
もっとスマートなやり方あったら誰か教えて下さい。
AngularJS - シンプルなモーダル

## 概要

たまたまAngularJSでモーダルを自作してみようという記事を見かけたので、勉強のためにそれらを参考にv1.5でコンポーネントにしてみた。

## 参考記事

- http://adamalbrecht.com/2013/12/12/creating-a-simple-modal-dialog-directive-in-angular-js/
- http://www.bennadel.com/blog/2806-creating-a-simple-modal-system-in-angularjs.htm
- http://jsfiddle.net/kumarmuthaliar/GG9Sa/1/


## Component

```js
/**
 * modalDialog
 */
(function() {

  angular
    .module( "app" )
    .component( 'modalDialog', {

      bindings: {
        show: '=',
        height: '@',
        width: '@'
      },
      transclude: {
        'dialogTitle':   "dialogTitle",
        'dialogContent': "dialogContent",
      },
      templateUrl: 'components/modalDialog.html',
      controller: ModalDialogController,
      controllerAs: "vm"
    });

    ModalDialogController.$inject = [ ];
    function ModalDialogController() {

      var vm = this;

      vm.dimension = {};
      vm.hideModal = function() { vm.show = false; };

      // Set the dialog window's dimension if width and height are specified.
      setDimension();

      function setDimension() {
        if ( vm.width  ) { vm.dimension.width  = vm.width;  }
        if ( vm.height ) { vm.dimension.height = vm.height; }
      }

    } // end ModalDialogController

})(); // end module
```


## Template

```html
<div
  class='modal_dialog'
  ng-show='vm.show'>

  <div
    class='modal_dialog__overlay'
    ng-click='vm.hideModal()'>
  </div>

  <section
    class='modal_dialog__window'
    ng-style='vm.dimension'>

    <button type="button"
      class='modal_dialog__close'
      ng-click='vm.hideModal()'>
      X
    </button>

    <div class="container">

      <h2
        class='modal_dialog__title'
        ng-transclude="dialogTitle">
      </h2>

      <p
        class='modal_dialog__content'
        ng-transclude="dialogContent">
      </p>

    </div>

  </section>
</div>
```

## Demo

http://mnishiguchi.github.io/JavaScript-Demos/demos/modal_dialog/index.html
[Android Studio Plugin 開発] プロジェクトの作成について

# この記事について
Android Studio Plugin (IntelliJ Plugin)開発でプロジェクト作成するときの二つの方法についてまとめます。

- IntelliJ Platform Pluginとして作る
- Gradle Projectとして作る

# 私の環境
- Mac OS X El Capitan 10.11.2
- IntelliJ IDEA CE 15.0.2

# 事前準備
以下のことを確認します。

- IntelliJ IDEA がインストールされていること
- Android Studio Pluginを開発する場合、JDK1.6がインストールされていること（私の環境にはなかったので、[Appleのサポート](https://support.apple.com/kb/DL1572)からインストールしてきました）

## Project SDKの設定
Android Studio Pluginとしての公開も目指す場合、JDK1.6をProject SDKとするのが一般的なようです。あらかじめProject SDKとしてJDK1.6を選択できるようにしておきます。ここでは、JDK1.6を後からインストールした前提で書きます。

1. IntelliJのProject Structure設定を開きます。Macなら`Command + ;`で開くことができます。
2. 左側のペインのPlatform Settings -> SDKs を選択します。
3. 「+」ボタンを押し、JDKを選択します。
4. JDK1.6の Home pathを選択します。私の環境では`/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home`でした。
5. 「+」ボタンを押し、IntelliJ Platform Plugin SDKを選択します。
6. Home pathを選択します。私の環境では`/Applications/IntelliJ IDEA 15 CE.app/Contents`でした。
7. Select Internal Java Platform ダイアログで、1.6を選択します。

# プロジェクトの作成
## IntelliJ Platform Pluginとして作る
1. Create New Project -> IntelliJ Platform Plugin を選択します。
2. Project SDKとして事前準備で追加したJDK1.6のIntelliJ Platform Plugin SDKを選択して、Nextを押します。
3. Project Nameに任意の名前を入力してFinishを押します。

## Gradle Projectとして作る
以下の記事が参考になります。
[GradleでIntelliJ Plugin開発：簡易tool window pluginの作成](http://qiita.com/itohiro73/items/d46dd3b05a3ca30226f4)

この記事の[Gradleプロジェクトの作成。](http://qiita.com/itohiro73/items/d46dd3b05a3ca30226f4#gradle%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)から[簡易tool window pluginの作成](http://qiita.com/itohiro73/items/d46dd3b05a3ca30226f4#%E7%B0%A1%E6%98%93tool-window-plugin%E3%81%AE%E4%BD%9C%E6%88%90)までをやります。Project SDKはJDK1.6のIntelliJ Platform Plugin SDKにしました。

### IntelliJ Platform Pluginとして認識させる。
[この記事](http://qiita.com/droibit/items/a211134d39f57a891479#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E5%90%8Diml)でも触れられていますが、IntelliJ Platform Pluginのプロジェクトとして認識させたほうが開発しやすいです。

1. <プロジェクト名>.imlのmoduleタグのtypeをPLUGIN_MODULEに書き換える。
2. moduleタグ内に`<component name="DevKit.ModuleBuildProperties" url="file://$MODULE_DIR$/src/main/resources/META-INF/plugin.xml" />`を追加する。
3. IDEA左側にあるGradleのtoolWindowで更新ボタン（「+」ボタンの左にあります）を押すと、IntelliJ Platform Pluginとして認識される。

# 参考記事
- [KotlinとGradleで始めるAndroid Studioプラグイン開発](http://qiita.com/droibit/items/a211134d39f57a891479)
- [GradleでIntelliJ Plugin開発：簡易tool window pluginの作成](http://qiita.com/itohiro73/items/d46dd3b05a3ca30226f4)
UE4 でレンダリングへの長い道のりーマテリアルのベースカラーとテクスチャー

# 環境
UE 4.10.0
Visual Studio 2015

# 概要
Unreal Engine 4 を触ってみて動作を確認する
レンダリングの基礎の基礎
マテリアルのパラメータ「ベースカラー」についてのまとめ
[参考]
UE4 でアクターにスタティックメッシュとマテリアルを適用する
http://qiita.com/maprog/items/4fa40ae23e987428d823

# 本文
## マテリアルのパラメータの役割
UE4 のマテリアルは、とどのつまりシェーダです。
マテリアルのパラメータは、言ってしまえばシェーダの変数です。
シェーダ変数に値を適用していくと、レンダリング結果に影響します。
どのパラメータが、どのように影響していくか確認していきましょう。

## ベースカラーとは？
UE4 のマテリアルのベースカラーは、RGB の 3 要素からなる色でマテリアルの
全体色となるカラーの事です。いわゆる「ディフューズカラー」と呼ばれていた
ものと同じと考えて良いです。
このベースカラーの事を、ざっくりと「アルベド」と同じという説明をしている
場合もありますが、厳密には「アルベド」とは区別されます。アルベドは、光を
どれだけ反射するかの係数なので、ベースカラーが 1, 0, 0 で、アルベドが 0.5 の
場合、そのマテリアルは 0.5, 0, 0 のカラーに見えます( 他の要素を計算しない場合
です )。中には UE4 のベースカラーに相当するものをアルベドと言う場合もあるの
で注意が必要です。

## シーンにメッシュを配置してみて結果を確認してみる
まずは UE4 で適当なプロジェクトを作成しましょう。
プロジェクトを作成したら、シーンに配置されている「全てのオブジェクト」を
削除します。その後、マテリアルとスタティックメッシュを持ったアクターを 1
つ配置しましょう。この時点では、まだ何も表示されないと思います。
※ 面倒な方は、ここのアクターをどうぞ
UE4 でアクターにスタティックメッシュとマテリアルを適用する
http://qiita.com/maprog/items/4fa40ae23e987428d823

## ベースカラーを設定してみる
![BaseColor1.jpg](https://qiita-image-store.s3.amazonaws.com/0/106724/a24126e0-6811-4149-38a6-ebf366a6cf20.jpeg)
マテリアルエディタでベースカラーに 1, 0, 0 のカラーを設定してみました。
これでマテリアルを保存すると、このマテリアルが適用されているメッシュが
赤色になるはずです。

![BaseColor2.jpg](https://qiita-image-store.s3.amazonaws.com/0/106724/e24f1942-ebe0-9f9e-3507-90141b11507b.jpeg)
シーンに配置したアクターのメッシュが赤く描画されました。
これがベースカラーです。

## ベースカラーとテクスチャ
「マテリアルのベースカラーは RGB の 3 要素からなる色」だと説明しました。
ですので、それに相当するものならベースカラーとなります。
![BaseColor3.jpg](https://qiita-image-store.s3.amazonaws.com/0/106724/959a6548-e103-382f-3ed3-b27c198e8c18.jpeg)
ベースカラーに適当なテクスチャを適用してみました。
※ 画像が適当なので見た目も適当になってます
このマテリアルを保存して、シーンを再生するとテクスチャが張られた状態の
メッシュが表示されると思います。
画面遷移のためのRouterの定義- Ember.js(2)

Ember.jsについて学んだので、忘れないよう備忘録を残したいと思います。

Ember.js(1)の[準備](http://qiita.com/seaka829/items/89e96416e021ae722df5#%E6%BA%96%E5%82%99)を参考にして、環境を整える。

#Templateを定義
今回は2つの画面間を移動するアプリケーションを作りたいので、2つのTemplateを定義します。
test.htmlのbodyタグ内に次を追加します。

```html:test.html
<script type="text/x-handlebars" data-template-name="test1">
    <p>この画面は1ページ目です</p>
    <p>{{link-to '2ページ目へ' "test2"}}</p>
    <p>{{input value=inputValue}}</p>
    <p>入力 : {{inputValue}}</p>
</script>

<script type="text/x-handlebars" data-template-name="test2">
    <p>この画面は2ページ目です</p>
    <p>{{link-to '1ページ目へ' "test1"}}</p>
</script>
```
これで2つのTemplateを定義しました。
この2つを区別するためdata-template-nameで名前を決めてあげます。
今回は1ページ目の画面の名前をtest1、2つ目の画面の名前をtest2とした。

このコード内で登場するlink-toはaタグを出力してくれるヘルパーである。
このヘルパーでtest1又はtest2の画面に飛ぶハイパーリンクが生成される。

#Routerとは?
Routerとは、TemplateとURLの対応付けを行う役割がある。
次の内容をtest.jsに追加します。

```js:test.js
App.Router.map(function() {
    this.route('test1', {path: '/'});
    this.route('test2', {path: '/test2'})
});
```
この例では2行目のthis.route('test1', {path: '/'});で、Test1Routeを/というURLに対応付けています。
また3行目のthis.route('test2', {path: '/test2'})で、Test2Routeを/test2というURLに対応付けています。

アプリケーションの画面遷移を行った場合にブラウザ上のリンクも追従していく。
それによって、リンクをを通知した時に相手は期待した画面を直接開くことができる。
また画面遷移を行っても状態を保持したままにできるので元の画面に戻っても状態は変わらない。

今回のアプリケーションの場合、2ページ目のURL(~/test.html#/test2)を開くと直接2ページ目を開くことができる。
また1ページ目のテキスト入力欄で入力した文字は2ページに移動し、1ページ目に戻っても状態を保持していることも確認できる。

#コード
```html:test.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8"/>
    <script src="libs/jquery-2.1.1.min.js"></script>
    <script src="libs/handlebars-v1.3.0.js"></script>
    <script src="libs/ember.js"></script>
    <script src="test.js"></script>
</head>
<body>
    <script type="text/x-handlebars" data-template-name="test1">
        <p>この画面は1ページ目です</p>
        <p>{{link-to '2ページ目へ' "test2"}}</p>
        <p>{{input value=inputValue}}</p>
        <p>入力 : {{inputValue}}</p>
    </script>

    <script type="text/x-handlebars" data-template-name="test2">
        <p>この画面は2ページ目です</p>
        <p>{{link-to '1ページ目へ' "test1"}}</p>
    </script>
</body>
</html>
```

```js:test.js
App = Ember.Application.create();

App.Router.map(function() {
    this.route('test1', {path: '/'});
    this.route('test2', {path: '/test2'})
});
```
Spring Security 4を使ったらハマった

Spring Security 4では、デフォルトでCSRFが有効になった。
認証しようとすると画面上に、

```
Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'
```

って出てハッ？ってなったけど、Stack OverflowやらSpring Security 3から4へのマイグレーションガイド見ていたら書いてあった。なので、自分は以下のような感じで回避(無効化)した(ちなみにSpring Bootです)。

```SecurityConfig.java(抜粋)
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.authorizeRequests().antMatchers("/login").permitAll().anyRequest().authenticated();
		// ★http.csrf().disable()でCSRFを無効	
		http.csrf().disable().formLogin().loginProcessingUrl("/auth").loginPage("/login").failureUrl("/login?error")
				.defaultSuccessUrl("/top", true).usernameParameter("userId").passwordParameter("password");
	}
}
```

トークンを送信する場合は、以下のページにあるような形でトークンを設定してあげれば大丈夫そう。
https://terasolunaorg.github.io/guideline/public_review/Security/CSRF.html

あとは、Spring Security 4では@EnableWebMvcSecurityは非推奨になっているので、代わりに@EnableWebSecurityを利用した。
https://docs.spring.io/spring-security/site/docs/current/reference/html/mvc.html

Spring Security 4のマイグレーションガイド
http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html

ちなみに背景として、書籍「はじめてのSpring Boot」のSpring Securityをやっていて、本では基本的にSpring Boot 1.1.8.RELEASEを利用していて、この時のSpring Securityのバージョンは3.2.5.RELEASEなんだけど、何を血迷ったか最新のSpring Boot使いたいなぁと思い1.3.1.RELEASEを指定したらSpring Security 4になっていてこうなった。
SwiftLintの.swiftlint.ymlで起きたエラーへの対処

# エラー内容

```
Loading configuration from '.swiftlint.yml'
Linting Swift files in current working directory
No lintable files found at path ''
Command /bin/sh failed with exit code 1
```

# 状況

1. homebrewでSwiftLintをインストール
2. .swiftlint.ymlを記述して、ルートディレクトリに配置
3. ビルド

↑ここで先ほどのエラー

.swiftlint.ymlを置くパスが間違っているわけではないはずなのに何だろうか？と思って色々といじってみました。

# 原因

includedの指定が間違っていたことが原因でした。

```.swiftlint.yml
included: 
  - hogehoge
```

ここには本来Lintの対象とするファイルのあるパスを記述すべきでした。

# 解決法

includedにはプロジェクト名を指定すれば大丈夫なようです。

```.swiftlint.yml
included: 
  - <プロジェクト名>
```

# おまけ

includedのパス指定ですが、絶対パスを指定してもエラーは解消されました。
ただし、全く同じ設定が適用されているわけではありません。
警告が出たファイルを見てみると、絶対パスを指定した時だけ、XCTest, UITestクラスにもLintチェックが入っていました。
pythonによる画像処理(Pillow)

# 動機
・raspberry piとセンサを組み合わせて遊ぶために、pythonで画像処理の勉強を行った

# 使用する環境
Anacondaをインストール（python3.5）
https://www.continuum.io/downloads

## 

![sample.png](https://qiita-image-store.s3.amazonaws.com/0/104731/c30742b1-950c-f19c-cb36-0eaabbe383b1.png)

・ピクセルに格納される情報はすべて一次元
・一般に次式でRGBからグレースケールに変換

```math
Y = 0.299 * R + 0.587 * G + 0.114 * B
```
・Yは輝度（光の強さを表す）

##### グレースケールの変換コード

```test.py
#画像を表現するクラスをロード
from PIL import Image
#画像をsampleを開く
img = Image.open('sample.png')

# グレースケールに変換
gray_img = img.convert('L')
gray_img.save('sample-gray.png')
```

以下のコマンドで実行

```
$ python test.py
```

![sample-gray.png](https://qiita-image-store.s3.amazonaws.com/0/104731/1538cb00-054c-86f2-bfc4-1924f0072e54.png)

# RGBの入れ替え

```test2.py
from PIL import Image
img = Image.open('sample.png')

r, g, b = img.split()

img = Image.merge("RGB", (b,r,g))
img.save('sample-convert.png')
```

![sample-convert.png](https://qiita-image-store.s3.amazonaws.com/0/104731/e7affbe7-80b4-038b-1a6a-32bddb27d0e8.png)

# 最後に
画像に対して加工することができたため、次回は画像認識（スケール変化にも対応）をしてみたい
Network.Mail.Mime でのメール送信方法


Network.Mail.Mime を使えば UTF-8 ですごく簡単にメール送信ができる。sendmail コマンドが呼び出せることが前提。

```simple.hs
{-# LANGUAGE OverloadedStrings #-}

import Network.Mail.Mime

main :: IO ()
main =
  renderSendMail $ simpleMail'
    (Address Nothing "to@example.com")
    (Address Nothing "from@example.com")
    "件名"
    "本文"
```

この方法だと `to` に複数メールアドレスを設定することができない。複数アドレスに同時にメールを送信したい場合、少しだけ複雑になる。

```complex.hs
{-# LANGUAGE OverloadedStrings #-}

import Network.Mail.Mime

main :: IO ()
main = renderSendMail mail'
 where
  from = Address Nothing "from@example.com"
  mail = addPart [plainPart "本文"] $ emptyMail from
  mail' = mail { mailHeaders = [ ("to", "to1@example.com, to2@example.com")
                               , ("subject", "件名")
                               ]   
               }   

```

ポイントは `emptyMail` で from アドレスだけ持つ `Mail` インスタンスを作成し、`mailHeaders` で自由にヘッダを設定するところ。今回のサンプルでは `addPart` で text/plain の本文をひとつだけ追加しているが、HTML パートも添付ファイルも簡単にできる。

[Network.Mail.Client.Gmail でのメール送信方法](http://qiita.com/satosystems/items/c6c57d6d3b813d3dcb23)もご参考ください。
underscoreコードリーディング（sortedIndex）



underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##sortedIndexとは


###[underscorejs.orgのsortedIndex](http://underscorejs.org/#sortedIndex)

こんな説明。
>####_.sortedIndex(list, value, [iteratee], [context]) 
>Uses a binary search to determine the index at which the value should be inserted into the list in order to maintain the list's sorted order. 
>If an iteratee function is provided, it will be used to compute the sort ranking of each value, including the value you pass. 
>The iteratee may also be the string name of the property to sort by (eg. length).


```javascript

_.sortedIndex([10, 20, 30, 40, 50], 35);
=> 3

var stooges = [{name: 'moe', age: 40}, {name: 'curly', age: 60}];
_.sortedIndex(stooges, {name: 'larry', age: 50}, 'age');
=> 1

```

------------- 
ソート済みのリストに対してvalueを挿入する際に、listに対してvalueが挿入されるべきindexの位置を決定するためにバイナリサーチを使います。
もし、iteratee関数が渡されていたら、各valueの値のソートする際のランク付けに利用されます。（渡したvalueに対しても）
iterateeはlengthのようなソートに使えるプロパティ名でも大丈夫です。


###[underscore.sortedIndex](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L632)
コード的にはこのあたり。

```javascript
// Use a comparator function to figure out the smallest index at which
  // an object should be inserted so as to maintain order. Uses binary search.
  _.sortedIndex = function(array, obj, iteratee, context) {
    iteratee = cb(iteratee, context, 1);
    var value = iteratee(obj);
    var low = 0, high = getLength(array);
    while (low < high) {
      var mid = Math.floor((low + high) / 2);
      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
    }
    return low;
  };

```

iterateeをcbを利用してiterateeに上書きする。
第三引数が1なので、func.call(context, value);に入るため、iteratee(context,value)の形になる

while文で回すためにlowとhighを宣言する。highはarrayのlength。
low<highの間、
バイナリサーチをする。変数midにlowとhighの中間お値を入れ、iterateeにarray[mid](中間の値)よりもvalueのほうが大きいかどうかを比較する。valueのほうが大きかった場合はlowにmid+1を、そうでない場合はhighをmidで上書きする。
これをつづけ、low<highで亡くなったら、low（array[low]<value<array[high]となるindex）を返す。
Groovy なら単純な計算結果がおかしくない。COBOL も（コメント参照）。



http://qiita.com/hkanda/items/e7c6001e356cfda3d783
を見て書いた。

以下、対話環境での断片と完全なプログラムがごっちゃになっているけど、1.1×2.2 をいろいろな言語でシンプルに書いてみた結果：

```ruby:ruby2.3
1.1*2.2
#=> 2.4200000000000004
```

```fortran:fortran
program TEST
  write(6,*) 1.1*2.2
  ! => 2.42000008    
end
```

```python:python3.5
1.1*2.2
#=>2.4200000000000004
```

```bash:perl5.18
perl -e 'printf( "%.16f", 1.1*2.2 );'
#=>2.4200000000000004
```

```node:node5.0.0
1.1*2.2
//=>2.4200000000000004
```

```C:C
#include <stdio.h>

int main(){ printf( "%.16f\n", 1.1*2.2 ); return 0; }
/* =>2.4200000000000004 */
```

```Java:Java
class Hoge{
    public static void main( String[] args ){
        System.out.printf( "%.16f", 1.1*2.2 );
    }
}
//=>2.4200000000000004
```

```PHP:PHP
<?
printf( "%.16f", 1.1*2.2 );
#=>2.4200000000000004
```

と、たいていの言語/処理系 では `1.1` のような表現は浮動小数点になるので誤差が出る。

そこで groovy。

```groovy:groovy
printf( "%.20f", 1.1*2.2 );
// =>2.42000000000000000000
```

誤差なし。すばらしい。

~~※ COBOL でどうなるかを示してくださるコメント募集中~~ → 下記のコメントの通り、COBOL も内部は10進数のようです。
iOSで加速度センサを扱うときの注意点


いままで何も考えずに加速度センサを使ってたので反省メモ。

[【iOS】【swift】加速度センサー CMMotionManager](http://qiita.com/kitanoow/items/a66098b46ba283f5f1a3)

iOSによらず、なんにせよ加速度センサで値をセンシングするときは絶対にやったほうが良い事。
センシングした生の値を使うのではなく、必ず**ローパスフィルタ(ハイパスフィルタ)**をかけるようにする。

アルゴリズムは以下

`output_value = rate * input_value + (1.0 - rate) * previous_output_value;`

リアルタイムでセンシングした値(input_value)と1つ前の値(previous_output_value)で加算平均する。
rateは割合です。

Swiftで書いたコードは以下

```swift
final let LOWPASS_FILTER = 0.1
...
var accelX: UIAccelerationValue = 0.0
accelX = (accelX * (1.0 - self.LOWPASS_FILTER)) + (inputX * self.LOWPASS_FILTER)
```

参考にした記事

[加速度センサ と ローパスフィルタ (波形)](http://android.ohwada.jp/archives/334)
[How to implement a LowPass Filter?](http://stackoverflow.com/questions/4272033/how-to-implement-a-lowpass-filter)
[加速度センサーの使い方 - 測定値の平滑化](http://diylabo.sakura.ne.jp/tips/2014/06/accelero2.html)

おわり
ikalogでstat.inkに戦績を記録しながら配信する

# 概要

- ikalogとstat.inkというすばらしいコンボ
- スプラトゥーンの生放送したいけど、ikalogも使ってstat.inkに記録したい！
- でもキャプチャボードの映像は1系統しか使えへんやん！
- アマレコTVのライブ機能使おうか！

# 用意するもの

- Windowsなパソコン(Windows10 x64)
- HDMIキャプチャボード(AVerMedia GC550)
- [アマレコTV](http://www.amarectv.com/)
- [OBS Multiplatform](https://obsproject.com/)
- [ikalog GUI](https://github.com/hasegaw/IkaLog/blob/master/doc/IkaUI.md)

# 前提

HDMIキャプチャボードのドライバのインストールが済んでいて、
RECentral等付属ソフトで映像がプレビューできる（ここでは割愛）


# アマレコTVの設定
[アマレコTV公式ページ](http://www.amarectv.com/)

設定画面を開く

### グラフ1(デバイス)
ビデオキャプチャデバイスにAverMedia GC550 Video Captureを、
オーディオキャプチャデバイスも同様のものを選択。
フォーマットは、候補から一番下のものを選択。

※ 人気の高い、[AVT-C875](http://www.avermedia.co.jp/product_swap/avt-c875.html)では、stream engineを導入する必要があり、キャプチャデバイスもstream engineを指定する必要がある


### グラフ3(ライブ)
ライブ機能を使うにチェックを入れる
フレームレート：30fps or 60fps
リサイズ：1280 x 720 (←左記以外ではikalogが動かない)


上記設定後、OKを押下するとキャプチャしている映像と音声が流れる。


# ikalogの設定

[ikalog](https://github.com/hasegaw/IkaLog/blob/master/doc/IkaUI.md)

上記公式サイトに基本的な設定方法が書いてあるのでほぼ割愛。

- optionsタブから設定開始
- inputで Capture through AmarecTV を選択する
- optionsタブから設定変更後は、下部のApplyの押下を忘れずに。
- 設定をしたのに映らない場合は、ikalogを一旦閉じて再度起動すると映る

# ikalogからstat.inkに戦績を送信する設定

"options"タブ → "stat.ink"タブ

下記にチェックを入れる

- Post game results to stat.ink　（戦績をstat.inkに投稿する）
- Include position data of tracked objectives (投稿内容にヤグラ・ホコの位置情報を含める)
- Include Splat Zone counters (投稿内容にガチエリアのカウント情報を含める)

APIキーを取得する

[stat.ink](https://stat.ink/)

- stat.inkのアカウント作成してログイン
- "自分の名前" → "設定" → "APIキー"の箇所の目玉アイコンをクリックで表示されたAPIキーをコピー
- ikalogのAPIキーの欄に貼り付け

# OBSの設定

「ソース」の「＋」を押下→「映像キャプチャデバイス」
- デバイス：AmaRec Video Capture
- 音声出力モード：音声のみをキャプチャ
- ”カスタム音声デバイスを使用する”にチェックを入れる
- 音声デバイス：AmaRec Audio Capture

# 設定が完了した2回目以降

アマレコTV、OBS、ikalogを立ち上げるだけ！


# イカ、よろしく～～～～！

[みつごごさんのイカログ](https://stat.ink/u/mitsugogo)
[Youtubeチャンネル](https://www.youtube.com/user/mitsugogo)
オブジェクトの総メモリ使用量をざっくり見積もる


環境: Python 3.5.0, 64bit

オブジェクトのメモリ使用量はsys.getsizeofで調べられますが、参照先のオブジェクトの分まではカウントされません。

```
>>> import sys
>>> sys.getsizeof([1, 2 ,3])
88
>>> sys.getsizeof([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
88
```

コンテナの中の要素も含めておおよその総メモリ使用量が知りたい場合は、参照先のオブジェクトを全て辿ってgetsizeofの値を積算する必要があるようです。

参考:
http://code.activestate.com/recipes/577504/

```py3:total_size.py

import sys

from itertools import chain
from collections import deque


def total_size(obj, verbose=False):
    seen = set()

    def sizeof(o):
        if id(o) in seen:
            return 0
        seen.add(id(o))
        s = sys.getsizeof(o, default=0)
        if verbose:
            print(s, type(o), repr(o))
        if isinstance(o, (tuple, list, set, frozenset, deque)):
            s += sum(map(sizeof, iter(o)))
        elif isinstance(o, dict):
            s += sum(map(sizeof, chain.from_iterable(o.items())))
        elif "__dict__" in dir(o):  # もっと良い方法はあるはず
            s += sum(map(sizeof, chain.from_iterable(o.__dict__.items())))
        return s

    return sizeof(obj)
```


他にもpickleを利用する方法などがあるようです。
rubyで画像からQRコードを読み取り

# やりたかったことと、結論

* Rubyスクリプトで画像からQRコードを読み取りたい
* QAコードの生成については沢山情報があるが、読み取りはそれほどでもない
* ZBarが色々なバーコードに対応していて便利らしい
* 折角ZBarのgemが用意されていたが、いきなりgemのバグを踏んだのでコマンドライン呼び出しで組むのが早かった

# MacにZBarをインストール

## install

* [ZBar](http://zbar.sourceforge.net/)
  * QRコードなど複数形式のバーコードリーダー
* brewで入れるとお手軽
```bash
$ brew install zbar
```
* ImageMagickが必要らしいので、ない場合はDL＆Install。Macの場合はこちら。
  * [ImageMagick installer for Mac OS X](http://cactuslab.com/imagemagick/)

## Usage

```bash
$ zbarimg -q qr.jpg
QR-Code:xxxxxxx
```
こんな感じで出力されます。

# Rubyスクリプトの中から使用する

## Ruby bindingを使う

* なんとgem様がいらっしゃる
  * [zbar gem](https://rubygems.org/gems/zbar)
* Gemfileに書いてbundle installするだけでOK！
* [GitHub repository](https://github.com/willglynn/ruby-zbar)
  * 上記でUsageを参照...と思ったらなかった。のでtestを見ながら使う。

```ruby:read-qr.rb
require 'zbar'
ZBar::Image.from_jpeg(File.read('qr.jpg')).process
```

実行してみる

```bash
$ ruby read-qr.rb
Corrupt JPEG data: premature end of data segment
```
あら、そう？
[github issue をのぞいてみると、gemのバグっぽいです。](https://github.com/willglynn/ruby-zbar/issues/5)
2016/01/14現在未修整のようです。
ここを追うのは面倒なのでコマンドラインでやってみる方針に変更。

## Ruby上からコマンドライン呼び出し
```ruby:read-qr.rb
value = `zbarimg -q qr.jpg`
puts value
```

実行してみる

```bash
$ ruby read-qr.rb
QR-Code:xxxxxxx
```

# 動作検証環境

* Mac OS X 10.9.5
* ruby 2.3.0

# 参考URL

* [
QRコードを読み取ることを自動化するならZBarが強そう](http://blog.livedoor.jp/maraigue/archives/1776417.html)
* [ZBar でバーコード読み取り](http://99blues.dyndns.org/blog/2010/12/zbar/)