OmniAICreator/Qiita-1.07M huggingface dataset:
CSV形式のデータをSQLを使って解析する


[q](https://github.com/harelba/q) を利用すると、CSVやTSV形式のファイルに対して直接SQLを発行できます。

## インストール手順

- http://harelba.github.io/q/

## qを使ったデータ解析の例

以下の様な受注データのCSV (ファイル名はorders.csv) が手元にあった時。

```
OrderId,OrderDate,ProductID,UserID,Quantity,TotalPrice
10000005,2015/2/13,100,10000,1,10000
10000006,2015/2/13,101,10001,2,2000
10000007,2015/2/13,102,10002,3,6000
10000008,2015/2/13,100,10003,1,10000
10000009,2015/2/13,101,10004,2,2000
10000010,2015/2/14,100,10005,3,30000
10000011,2015/2/14,101,10006,1,2000
10000012,2015/2/14,102,10007,2,4000
10000013,2015/2/14,100,10008,3,30000
10000014,2015/2/14,101,10009,1,1000
```

### 売上(TotalPrice)が10000円以上のデータを抽出したい

```
$ q -H -d',' "SELECT * FROM ./orders.csv WHERE TotalPrice >= 10000"

10000005,2015/2/13,100,10000,1,10000
10000008,2015/2/13,100,10003,1,10000
10000010,2015/2/14,100,10005,3,30000
10000013,2015/2/14,100,10008,3,30000
```

-H はヘッダ行をスキップするという意味。
-d でデリミタ指定 (CSVなので「,」を指定)

### 日毎の売上を集計したい

```
$ q -H -d',' "SELECT OrderDate, SUM(TotalPrice) FROM ./orders.csv GROUP BY OrderDate"

2015/2/13,30000
2015/2/14,67000
```

### 商品売上ランキングを出したい


```
q -H -d',' "SELECT ProductId, SUM(Quantity), SUM(TotalPrice) AS total FROM ./orders.csv GROUP BY ProductId Order BY total DESC"

100,8,80000
102,5,10000
101,6,7000

```


データ解析がはかどりますね。
寿司を偽装する

いい話がある。
http://qiita.com/uri/items/bcb702faef242bdd9820

ということで[sushiパッケージ](https://github.com/dichika/sushi)を作った。

```r
devtools::install_github("dichika/sushi") # でGitHubリポジトリからインストール
```

sushi関数で単純なメッセージを出すのみのパッケージである。

>
require("sushi")
sushi()

>
 Loading required package: remoji
 :sushi: is sushi


せっかくなので、require(:sushi:)と読み込みたい。

しかしASCII以外はパッケージ名に使えないという制約があるため、そもそも:sushi:という名前のパッケージを作れない。
あと、githubのレポジトリ名にも使えなかった気がする。

したがって、パッケージ名をemoji→ASCIIに変換して対応するパッケージを読み込むようにすればよい。

変換テーブルはremojiパッケージから持ってくる。

今回は一連の処理をラップした`requiree()`関数をyoshioパッケージ内に用意した。

これでemojiでパッケージを読み込める。

>
devtools::install_github("dichika/yoshio")
devtools::install_github("richfitz/remoji")

>
require("yoshio")
requiree(":sushi:")
sushi()
>
 :sushi: is sushi

emojiが本文内でしか使えないので奇矯なコード表示になってしまったがご容赦いただきたい。
Texで図○とか表○を自動で入れるコマンドの定義


#newcommandで定義する
`\begin{document}`の前に以下を定義

```tex:newcommand.tex
\newcommand\figref[1]{\textbf{図~\ref{fig:#1}}}
\newcommand\tabref[1]{\textbf{表~\ref{tab:#1}}}
```

* 太字にしたくなかったら`\textbf`を消す

図のラベルは`\label{fig:hoge}`，表のラベルは`\label{tab:hoge}`のように書いておく

##使い方

```tex:sample.tex
\begin{figure}[ht]
	\begin{center}
	\includegraphics{./images/hoge.eps}
	\end{center}
	\caption{hoge}
	\label{fig:hoge}
\end{figure}

\figref{hoge}に○○を示す．
```
##出力
```tex:
%図が入る%
図1に○○を示す．
```
ItamaeとVagrantでruby環境を構築する


#### 概要
Vagrantで作成した仮想環境にItamaeでrbenvをインストールする
開発環境を自動構築したいけど、Chefが手に余る感じ（勉強不足）なのでItamaeでやってみる

#### Vagrant

```rb:Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu-14.04"
  config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-14.04_chef-provisionerless.box"
  config.vm.network "private_network", ip: "192.168.33.109"
  config.ssh.forward_agent = true
end
```

```
$ vagrant up
```


#### Gemfile

```rb:Gemfile
source 'https://rubygems.org'

gem 'rake'
gem 'serverspec'
gem 'itamae'
gem 'itamae-plugin-recipe-rtn_rbenv'
```

```
$ bundle install --path vendor/bundle
```


#### Itamaeでruby-2.2.0インストール

```

# recipes/ruby.rb
include_recipe 'rtn_rbenv::system'


# nodes/node.json
{
    "rtn_rbenv": {
        "user": "vagrant",
        "versions": {
            "2.2.0": []
        },
        "global": "2.2.0"
    }
}

```

```
$ bundle exec itamae ssh -h 192.168.33.109 -u vagrant -j nodes/node.json recipes/ruby.rb -i .vagrant/machines/default/virtualbox/private_key
```


#### serverspec

```
$ bundle exec serverspec-init
```

```spec/default/sample_spec.rb

require 'spec_helper'

describe command('source /etc/profile.d/rbenv.sh; which rbenv') do
  let(:disable_sudo) { true }
  its(:stdout) { should match %r{/usr/local/rbenv/bin/rbenv} }
end

```

```
$ bundle exec rake spec

rake aborted!
Circular dependency detected: TOP => spec => spec:all => spec:default => spec:all

Tasks: TOP => spec => spec:all => spec:default
(See full trace by running task with --trace)

# とりあえずRakefileの該当行をコメントアウト
#  task :default => :all


$ bundle exec rake spec

#
# テストがこけます！

```

よく考えてみたらubuntuなのでsourceコマンドが効かない。
（何も考えず適当にrbenvのserverspecコピペしてたのが原因）
以下のように修正

```spec/default/sample_spec.rb

require 'spec_helper'

describe command('. /etc/profile.d/rbenv.sh; which rbenv') do
  let(:disable_sudo) { true }
  its(:stdout) { should match %r{/usr/local/rbenv/bin/rbenv} }
end

```

これで通るはず
MySQLでカラム値からタブのみを削除するSQL

タブはSQLでは`Char(9)`と記述します。

なので、

```sql

UPDATE [テーブル名称]
SET    [カラム名] = Replace([カラム名], Char(9), '') 
WHERE  [カラム名] LIKE Concat('%', Char(9), '%'); 

```

となります。

なお、下記は、確認用のSQL。

```sql

SELECT * 
FROM   [テーブル名称]
WHERE  [カラム名] LIKE Concat('%', Char(9), '%'); 

```
Rubyに環境変数を渡す方法

データベースのパスワードやAPIキーなど、リポジトリに置かずに、環境変数をに設定しましょうねという話はよくある。

そのために、.envファイルを用意して、それをformanから読み取ってというのも悪くはないが、.envファイルをどこに置くのかとか、それだけのためにformanを用意するというのも面倒。

ということで、原点に帰ると、普通にシェルで環境変数を設定すればいい。

sh系のシェルでこう書いておくと

```bash
export TWITTER_KEY=kokonikey
```

ruby上ではこう呼びだせる

```rb
p ENV['TWITTER_KEY'] # => "kokonikey"
```

特別なgemもいらないので、これはこれでシンプル。
awk > 2列2行目のデータで規格化する

動作環境

    CentOS 6.5


```data.txt
   #comment
   0.0  3.14
   1.0  2.71
   2.0  6.022
```

などのデータファイルがある時、全行のデータの2列目の値を3.14(2行2列目のデータ）で規格化したいとする。

awkを使う場合

    awk 'BEGIN{denom=1}(NR==2){denom=$2;}{print $1,$2/denom}' data.txt
でよいようだ。
[baserCMS]テーマヘルパ使って、サーバとアクセス元IPアドレスによる表示出し分けを行う


## 利用想定シーン
- Aサーバでは表示したいけど、テスト用のBサーバでは表示したくない
- Aサーバでは表示したいけど、かつ、アクセス元IPアドレスにより表示分けを行いたい

コードは同一に保っておきたいけど、まだテスト環境だけで有効な表示にしておきたいなぁ、それにまだ作成中だし、誰でもには見せたくないなぁ。。。そんな場面で使えます。


## 環境

- baserCMS 3.0.6.1
- PHP 5.4.19


## テーマヘルパ使って表示判定させとけばラク
baserCMSにはテーマヘルパといって、ヘルパを簡単に追加して利用できる仕組みがあります。
このヘルパに入れておけば、簡単に使い回しができますね。

テーマヘルパについては以下の記事がとても参考になります。

- http://basercms.net/functions/theme_helper
- http://pops-web.com/main/pops/archives/106
- http://www.lancard.com/blog/2012/06/27/basercms-2%E7%B3%BB%E3%81%A7%E8%BF%BD%E5%8A%A0%E3%81%95%E3%82%8C%E3%81%9F%E3%83%86%E3%83%BC%E3%83%9E%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC%E3%81%8C%E4%BE%BF%E5%88%A9%EF%BC%88%E3%81%A0%E3%81%91%E3%81%A9/


## テーマヘルパ作って以下の内容を入れておく
判定用のメソッドサンプルは以下。

```php
<?php
/**
 * サーバ環境とクライアントのIPアドレスを判別する
 * 
 * @return boolean
 */
	public function eachIpShow () {
		$clientIpAddr = $this->request->clientIp();
		
		// 表示許可IPアドレス
		$allowIpAddress = array(
			'127.0.0.1',
		);
		// 動作を適用するサーバネーム
		$remoteServerName = array(
			'example.com',
		);
		
		// 動作を適用させたいサーバの場合、IPアドレスによる表示出し分けを実施する
		if (in_array($_SERVER['SERVER_NAME'], $remoteServerName)) {
			// 許可IPからのアクセスの場合は表示
			if (in_array($clientIpAddr, $allowIpAddress)) {
				return true;
			}
		}
		return false;
	}
```

### 使い方
ビュー側で以下のサンプルのように判定させると良いです。

```php
<?php if ($this->ThemeHelperName->eachIpShow()): ?>
適合する場合に表示したい内容を書く
<?php endif ?>
```
php_browscap.iniでの文法エラーの解決法

php 5.3からphp5.4にバージョンアップすると、下記のようなエラーが表示されるようになった。


```
$ php -v
PHP:  syntax error, unexpected $end, expecting ']' in /etc/php.d/lite_php_browscap.ini on line 59
```

色々調べて分かったことは、どうも文中のセミコロン以降がコメントとして扱われてしまい、エラーが出現しているようであった。

そのため、下記のように正規表現でファイルを置換して対応。

```
検索文字列： ([^\n\r|\n\r][^;]);
置換文字列： $1\\;
```
ViewPagerをネストさせたとき、子ViewPagerのスワイプイベントを無効にしたい


```
　　　　　　　　　　　　　　　　　　　　　　　　　　　　やつを追う前に言っておくッ！
　　　　　　　　　　　　　　　　　　　　おれは今ViewPagerをほんのちょっぴりだが体験した
　　　　　　　　　　　　　　　　　　い…いや…体験したというよりはまったく理解を超えていたのだが……
　　　　　　　　 ,. -‐'''''""¨¨¨ヽ
　　　　 　 　 (.＿＿_,,,... -ｧァﾌ|　　　　　　　　　　あ…ありのまま 今　起こった事を話すぜ！
　 　 　 　 　 |i i|　 　 }!　}} /／|
　　　　 　 　 |l､{　 　j}　/,,ｨ//｜　　　　　　　『おれはViewPagerを入れていたと
　　　　　　　 i|:!ヾ､_ﾉ／ u {:}//ﾍ　　　　　　　　思ったらいつのまにかViewPagerしていた』
　　　　　　　 |ﾘ u' }　 ,ﾉ　_,!V,ﾊ |
　　 　 　 ／´fト､_{ﾙ{,ィ'ｅﾗ　, ﾀ人　　　　　　　　な…　何を言ってるのか　わからねーと思うが
　　　　 /' 　 ヾ|宀| {´,)⌒`/ |<ヽﾄiゝ　　　　　　　　おれも何をされたのかわからなかった…
　　　　,ﾞ　 ／ )ヽ iLﾚ 　u' |　| ヾｌﾄﾊ〉
　　 　 |／_／　 ﾊ !ニ⊇　'／:} 　V:::::ヽ　　　　　　　　頭がどうにかなりそうだった…
　　　 /／ 二二二7'T'' ／u'　__ /:::::::/｀ヽ
　　　/'´r　-―一ｧ‐ﾞＴ´　'"´ ／::::／-‐ 　＼　　　　催眠術だとか超スピードだとか
　　 / // 　 广¨´ 　/'　　 ／:::::／´￣｀ヽ ⌒ヽ　　　　そんなチャチなもんじゃあ　断じてねえ
　　ﾉ ' /　 ノ:::::`ー-､___／:::::／/ 　 　 　 ヽ　　}
_／｀丶　/::::::::::::::::::::::::::￣`ー-{:::...　　　 　　　ｲ　 もっと恐ろしいものの片鱗を味わったぜ…
```

## やりたいこと

タイトルと同じこと言ってますが、親ViewPagerだけスワイプ操作を受け付けるようにしたかったのです。

## 素直にViewPagerをネストさせたときの挙動

どうなるでしょうか。

親ViewPagerの中に子ViewPagerを入れた状態でスワイプすると、子ViewPager上でイベントが消化されます。
なので子ViewPagerの中身が切り替わります。

上の挙動は至極当然です。
が、期待してる挙動とは違うので何かしらの処理が必要です。

## やりたいことを解決する

ViewPagerのドキュメントを読んでいたら`canScrollHorizontally`というメソッドがありました。

子ViewPagerを拡張して、`canScrollHorizontally`が常に`false`を返すように書き換えれば子ViewPagerのスワイプ処理は無視され、親ViewPagerにイベントが移譲されます。
これで解決したはず。

```java:IgnoreSwipeViewPager.java
public class IgnoreSwipeViewPager extends ViewPager {

  public RecommendItemViewPager(Context context) {
    super(context);
  }

  public RecommendItemViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  @Override
  public boolean canScrollHorizontally(int direction) {
    return false;
  }
}
```

Touch系のイベントのハンドラ各種をイジらないとダメか。。と畏怖してたけど、簡単に解決できてよかった。
Assemble - Handlebars.js でヘルパーからオブジェクトを参照する

最近 handlebars をいじってて、まったく不勉強なためオブジェクトの参照の仕方にはまってたので書きます。

## handlebars ってなんですか？

Ember.js が採用していたテンプレートエンジンです。ただ、Ember.js は1.10でHTMLBarsをテンプレートエンジンとして利用するようになったそうなので、今ここでhandlebarsを選択するのが吉なのかはわかりません。Backboneとの相性も良いみたいな記事はよく見てました。

* [Emaber.js](http://emberjs.com/)
* [Hadlebars](http://handlebarsjs.com/)

## Assemble ってなんですか？

いわゆる静的サイトジェネレーターです。htmlをビルドしてくれるだけなので、middleman server みたいな開発サーバーは起動しません。grunt との親和性が高いので、connect watch assemble をタスクに組込んでlivereloadするのが良さそうではあります。独自のプラグインもそれなりにあります。

* [Assemble](http://assemble.io/)

ちょっとした100P未満の小規模なサイトの制作向きかなと思います。

自分はmiddlemanに慣れ親しんだけど、assemble & handlebarsもYaml Front Matterでデータをページ単体に持ったりするところや、レイアウト・パーシャルの感覚など、middlemanを通過してればとっつきやすいと感じました。

で、本題。

## オブジェクトの参照 - ページの`{{each}}`内から

assemble 使っていると（assembleにかかわらずhandlebarsならそうでしょうけど）、ページやパーシャルで`{{#each}}`（出た！ひげ！）使ってオブジェクトを参照しますよね。

```html
{{#each pages}}
  <li>{{dest}}</li>
{{/each}}
```

この時の`{{dest}}`はpagesの中のkeyです。`this.dest` でも取れる。
例えばあるページのフロントマターで

```yaml
date: "2015-02-14"
title: "valentine's day"
```

のようなデータを持ってた場合、ページからは`{{title}}`のようにデータを参照出来るんですが（もっと言うと構造的には`{{page.data.title}}`）、この上の例で言うeachの中ではどう参照すればいいのか。

```html
{{#each pages}}
  <li>{{dest}} - {{../title}}</li>
{{/each}}
```
相対でオブジェクトを参照できるという何かわかりやすいような、ないような感じです。

※ assebmle でページ単位で呼ばれた、`page`, `pages` オブジェクトが持っているものは`{{log page}}` などで確認してみてください。

## オブジェクトの参照 - ヘルパーからオブジェクトを参照

```js:custom-helper.js
module.exports.register = function (Handlebars, options, params) {
  'use strict';
  Handlebars.registerHelper('foo', function(str) {
    return str;
  });
};
```

ヘルパーの解説にありがちなコードです。ページでは`{{foo "bar"}}`のように使います。

ただヘルパー作ってると、`pages`,`page`,また独自で定義したjsonファイルからオブジェクトを作って`sitemap`みたいなオブジェクトを参照したいということがあると思います。

ヘルパーからそのオブジェクトを参照する術を知らなかったので、最初は

```js:custom-helper2.js
  Handlebars.registerHelper('buz', function(obj, str1, str2) {
    var value = "";
    for(i=0;obj.length>i;i++){...}
    return val;
  });
```

みたいに、いちいち引数にオブジェクト指定するようなヘルパー書いてた。呼び出す時は、`{{buz pages}}`みたいになる。でも、このオブジェクト、絶対にどこでも使うし、毎度引数に入れてるのダサいと思ってたら、ヘルパーの中からもちゃんとオブジェクトを参照出来た。

```js:custom-helper2.js
  Handlebars.registerHelper('buz', function(str1, str2) {
    var value = "";
    for(i=0;this.pages.length>i;i++){...}
    return val;
  });
```

でぃ、this で取れるのか…。

### ヘルパーで引っかかりそうなところ

オブジェクトの参照とは全く関係ないけど、ヘルパーでhtmlそのまま返す値に突っ込むとエスケープされるので、

```js
return new Handlebars.SafeString(str);
```

みたいなことする。

----

本日は以上です。
初めてのAWK 使い方と使用例 56選

 
旧題: 「awkを使うにあったって、有用なテンプレート的なものを見つけた:メモ　」　は下記ブログに移行しました。

[<img width="496" alt="スクリーンショット 2016-08-25 00.07.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/47047/8d772dd2-9039-dd4a-5ed3-d7b961e6c6c9.png">](https://hackerslog.net/post/my-tech/command/awk/command-list-template/)




## 参考文献

[<img width="494" alt="スクリーンショット 2016-08-25 00.22.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/47047/1d079bff-4a3c-0f40-77a4-eb41332b4808.png">](https://code.google.com/p/awk-users-jp/source/browse/trunk/oneliner/oneliner.txt)
はじめてのArduinoでLチカ

抵抗とLEDをブレッドボードに挿してチカチカ光らせるメモ

```
void setup() {
  // put your setup code here, to run once:
  pinMode(11,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(11,HIGH);
  delay(500);
  digitalWrite(11,LOW);
  delay(500);
}
```
Rで絵文字（sushi <- c(🍣)への道）

## はじめに

私事ですが、著名なシリアルパッケージクリエイターである@dichikaさんがピザを食べながら言っていた言葉が頭に残っています。

> sushiに:sushi:を代入したい

その熱意と言葉に**夢を感じました**。

それからちょくちょく、どうすればRで:sushi:を食えるか、否、絵文字を使えるかということを考えていて、Twitter上でぶつぶつとつぶやいたり、Qiitaに記事を書いたり、絵文字使いたい勢とやり取りをしていたのですが、海の向こうにもR上で~~寿司を食べたい~~絵文字を使いたい人がいるみたいで、素晴らしいパッケージを作成してくれました。ありがとう:cat: 感謝です。

そんなわけでRで絵文字を扱える`remoji`:package:パッケージを日本のRで絵文字使いたい勢に届けます。ほとんどREADMEの内容ですがあしからず。

## remojiパッケージ

まだCRANには登録されていないみたいなので、`devtools`パッケージを使ってGitHubからインストールします。

```r
devtools::install_github("richfitz/remoji")
library("remoji")
```

### 絵文字を使う

```r
message(emoji("cat"))
```

猫の絵文字:cat:が表示されました。では本題の寿司を召喚したいと思います。どういう理由かわかりませんが、`message`関数をかませる必要があるみたいですね。

```r
message(emoji("sushi"))
```

ｷﾀ━━━━(ﾟ∀ﾟ)━━━━!!嬉しいので回転寿司（多重寿司分身の術）にしてみます。お茶も欲しいですよね。ということで。

```r
message(emoji(c("sushi", "tea"), pad = TRUE)[c(1, 1, 1, 1, 1, 1, 2)])
```

:sushi: :sushi: :sushi: :sushi: :sushi: :sushi: :tea:

#### 寿司食べたい :sushi:

文字列と絵文字を組み合わせる場合には、先程同様、`message`関数と**`sub_emoji`関数**を使用します。

```r
message(sub_emoji("寿司食べたい :sushi:"))
```

### 使用可能な絵文字

絵文字を表示させるには、絵文字を表わす文字列を知っている必要がある（sushi -> :sushi:はできるが:sushi: -> 寿司はできない）ので、`list_emoji`関数という一覧を取得する関数で使用可能な絵文字を把握できます。

では逆に、本物の絵文字一覧を表示するには？というと、READMEにあるように

```r
message(emoji(list_emoji(), TRUE))
```

をすればコンソールがカラフルな絵文字で埋め尽くされます。

#### 絵文字を探す

この絵文字ってこういう文字列だったかなー、というときに便利な関数も用意されています。

```r
find_emoji("sun") %>% emoji_table()
```

関連する絵文字とその文字列が表示されました。やったぜ。

ちなみに、存在しない絵文字を与えると怒られます笑

```r
find_emoji("yakiniku") %>% emoji_table()
```

## おわりに

寿司が一歩近づきました。素晴らしいです。とはいえ、先述したように「:sushi: -> 寿司」ができないというような課題もあります。`plot(~, pch = `:beer:`)`みたいなことも無理なわけで...。

絵文字スキーな皆さん、どうぞお力添えを。

## 参考

* [richfitz/remoji](https://github.com/richfitz/remoji)
* [:sushi: - Technically, technophobic.](http://notchained.hatenablog.com/entry/2015/02/02/233112)
* [R - ソースコードの中でも絵文字を使う :rocket: #進捗を支える技術 - Qiita](http://qiita.com/uri/items/e27adda87bb0c32f18ff)
JAVA HashMapのKeyを二つにした

#HashMapを拡張してみた

キーが二つ欲しかったので、MAPを拡張しました。
座標にデータを紐づけるときとかに便利と思います。




…もしかして標準ですでにこの機能ってあったりする…？

##コード

```java


import java.util.HashMap;

@SuppressWarnings({ "serial", "rawtypes" })
public class HashMapExt<K,V> extends HashMap{
    
    @SuppressWarnings("unchecked")
    public void put(K key1,K key2,V value){
        super.put(key1+","+key2,value);
    }
    
    public String get(K key1,K key2){
        return (String) super.get(key1+","+key2);
    }
}


```
ReactNativeをなんとなく理解するためのReactCanvas


個人的にはそこまでReactNativeに興味ないのだけど、今日なんとなくReactCanvasを試していたらなんとなくReactNativeを察した。

Flipboard/react-canvas https://github.com/Flipboard/react-canvas

作者はCanvasのネイティブ向け変換を作っていたEjectaの人。なるほど感ある。


参考: React Nativeがスマホアプリのフロント開発を変えるのか - ワザノバ | wazanova http://wazanova.jp/items/1676


## 試してみる

SurfaceがReactCanvasのトップノードでそれ以下はcanvasでレンダリングされる
各ノードはleft, top, width, height が必須の絶対座標配置。CSSが分かる人は `position: absolute`な状態だと思えば良い。

```coffeescript
React = require('react')
ReactCanvas = require('react-canvas')

MyComponent = React.createClass
  render: ->
    {Surface, Image, Text, Group, ListView} = ReactCanvas;
    $ = React.createElement
    $ Surface,
      width: window.innerWidth
      height: window.innerHeight
      left:0
      top:0
    , [
        $ Text, style: {left: 10, top: 10, width:100, height: 20},  'A'
        $ Text, style: {left: 10, top: 30, width:100, height: 20},  'B'
      ]

window.addEventListener 'load', =>
  React.render React.createElement(MyComponent, {}), document.body
```

![](http://i.gyazo.com/e93638c88fa674a5daf791ce12a170c1.png)


`enableCSSLayout: true`すると `left, top`は必須ではなくなり、CSS的なリキッドレイアウトによって配置される

```coffeescript
React = require('react')
ReactCanvas = require('react-canvas')

MyComponent = React.createClass
  render: ->
    {Surface, Image, Text, Group, ListView} = ReactCanvas;
    $ = React.createElement
    $ Surface,
      width: window.innerWidth
      height: window.innerHeight
      enableCSSLayout: true
    , [
      $ Group, style: {backgroundColor: 'red'}, [
        $ Text, style: {width:500, height: 20},  'A'
        $ Text, style: {width:500, height: 20},  'B'
        $ Text, style: {width:500, height: 20},  'C'
      ]
    ]

window.addEventListener 'load', =>
  React.render React.createElement(MyComponent, {}), document.body
```

backgroundColorとか一部のプロパティが有効っぽい。

![](http://i.gyazo.com/07004c9b8011d60c90a76b0832003405.png)

ノードの要素は他に`Image` や `ListView`がある。ListViewを最小要素まで分解して動かしてみようとしたが引数がクッソ多くて面倒臭かったのであとでやる。


## ReactCanvasの立ち位置

- ReactNativeの発想でCanvas向け書き出しを作ってみたというもの?
- 各OSプラットフォーム向けバインディングが書かれたのがReactNativeなのだろう


今ReactNativeを試したい人はこれでやると手触りがわかりそうな感じ。
おそらくReactNativeは埋め込んだV8でプラットフォーム向けAPIブリッジを書いて提供される or 自分で書けるっぽい気がする。APIブリッジの点でTitaniumの辛いAPIを思い出されるが…そこはまあ頑張ってくださいという感じか。ReactNativeはReactの思想だけ継承して環境ごとに別途書くっぽいし。

たとえばTextノードの実装はここ

react-canvas/Text.js at master · Flipboard/react-canvas https://github.com/Flipboard/react-canvas/blob/master/lib/Text.js
Raspberry Piで温度計を作る、あとブラウザで見れるようにする　第3回


#環境構築
##ハードウェア
普通にセンサーを半田付けする程度かと思ったら抵抗とかコンデンサ使うし、GPIOとかも多少理解する必要がある。
参考URL（電子回路）
http://avr.gawakaru.jp/archives/tag/raspberry-pi-2/page/2
参考URL(GPIO)
http://deviceplus.jp/hobby/raspberrypi_entry_009/
参考URL（電子部品）
http://www.kita-colle.com/culturati/646

参考にした結果、パーツ足んないのに気づく。


電子部品のお店が本当に良い店、選ばれた硬派なOTOKOの店。
ビビりながら以下を追加購入
 + ジャンパケーブル（オスメスとオスオスが必要）
 + ブレッドボード
 + 0.1uFセラミックコンデンサ
 + 抵抗(4.7KΩと5.1KΩだけど10KΩを並列が正解)
 + 基盤(本番用)

合計約１５００円也。もう、意地になってきました。
ここでオスメスを買い忘れてるのに気づく楽天で購入（1000円程度）
断念。

##開発環境の構築
とりあえずラズパイ兄はpythonして欲しいらしい。
しかしpythonだと処理がおぼつかないそうなので、
C言語でpython拡張だそうな。
やっと、本題が臭ってきたんですが、まだ組むのは先です。

###1.パイにGitのインストール
下準備にgettextをいただく(言語問題を解決してくれるらしい)

```console
$ wget http://ftp.gnu.org/gnu/gettext/
$ gettext-0.19.3.tar.gz
$ tar xvf gettext-0.19.3.tar.gz
$ cd gettext-0.19.3
$ ./configure && make && sudo make install
```
この間にビールを飲んでる
うあ、なんかインストール場所指定するべきやったのか？
まぁ、気にしない。だって不都合はないんだもの。
Gitのインストール

```console
$w get http://git-core.googlecode.com/files
$ git-1.8.2.1.tar.gz
$ tar xvfz git-1.8.2.1.tar.gz
$cd git-1.8.2.1/
$ ./configure && make && sudo make install
```
###2.ライブラリのコンパイル
とりあえず、ライブラリパクっていただき！

```console
$ mkdir liblary
$ cd library
$ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.38.tar.gz
$ tar zxvf bcm2835-1.38.tar.gz
$ cd bcm2835-1.38
$ ./configure
$ make
$ sudo make check
$ sudo make install

```

###3.拡張モジュールの作成
とりあえず、ディレクトリ作っていただき！

```console
$ mkdir thermo_module
$ cd thermo_module
$ git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
$ cd Adafruit-Raspberry-Pi-Python-Code
$ cd Adafruit_DHT_Driver_Python
$ python setup.py build
```
python.hがないそうなので、標準開発環境インストール

```console
$ sudo apt-get install python-dev build-essential
```
再度

```console
$ python setup.py build
```

階層が深かったですが、dhtreader.soを発見。
ソフト側の準備も完了


###4.pythonコードからの読み出し
ジャンパケーブルの不備により次回

##今回使ったコマンド
 + ./configure→環境に適したmakefileを自動で作る。
 + wget→ねっとからダウンロードしてくる

##今回の反省
やってる最中、髪の毛を全て刈り上げて坊主にしました。
昔、とあるバーのマスターが
「奥さんが精神的な病気なんだが、深夜に笑いながら髪の毛を切り出して大変だった」
と言っていたのを思い出しました。
そのバーはどっかに移動して疎遠になったんですが、久々にmixiのページ見たら娘の名前が僕の友人の子供と一緒だったんですよね

おわり
Android SQLiteのDAOを作ってみた

#SQLiteのDAOをつくってみた
初投稿なので数年前に書いたコードをザックリと公開します。

Androidのデータベースアクセスオブジェクトです。
検索だけ実装しました

##コード

###使い方
```java
//出力カラムの情報
HashMap<String,String> outputInfo = new HashMap<String,String>();
outputInfo.put("COLUMNS","ID,NAME,AGE");
outputInfo.put("FROM","USER_INFO");


//検索条件の情報
HashMap<String,String> searchInfo = new HashMap<String,String>();
searchInfo.put("WHERE","ID>30 AND ID<50");

//検索
HashMap<String,String> resultMap = selectList(activty,outputInfo,searchInfo);

```

###DAO定義
```java

public static List<HashMap<String,String>> selectList(Context con , HashMap<String,String> outMap,HashMap<String,String> inMap) {
        
        String SELECT_BASIC = " select "+ outMap.get("COLUMNS") + " from " + inMap.get("FROM");
        if(inMap.get("WHERE") != null) {
            SELECT_BASIC = SELECT_BASIC + " WHERE " + inMap.get("WHERE");
        }
        if(inMap.get("ORDERASC") != null) {
            SELECT_BASIC = SELECT_BASIC + " ORDER BY " + inMap.get("ORDERASC") + " ASC";
        }
        if(inMap.get("ORDERDESC") != null) {
            SELECT_BASIC = SELECT_BASIC +" ORDER BY " +  inMap.get("ORDERDESC") + " DESC";
        }
        Log.d(Systems.GAME_TITLE,""+SELECT_BASIC);
        
        
        DBAdapter dba = new DBAdapter(con);
        SQLiteDatabase db = dba.getWritableDatabase();
        
        String sql = SELECT_BASIC;
        Cursor cursor = null;
        cursor = db.rawQuery(sql,null);
        
        int count = cursor.getCount();
        Log.d(Systems.GAME_TITLE,"SQL_RECORD_COUNT:"+count);
        //取得できなかった場合、nullを返す。
        if(count == 0) {
            return null;
        }
        //結果を格納
        List<HashMap<String,String>> result = new ArrayList<HashMap<String,String>>();
        while(cursor.moveToNext()){
            //Log.d(Systems.GAME_TITLE,"SQL_COLUMNS_COUNT:"+cursor.getColumnCount());
            count = cursor.getColumnCount();
            HashMap<String,String> tmp = new HashMap<String,String>();
            int i = 0;
            while(true){
                if((count) > i){
                    tmp.put(cursor.getColumnName(i),cursor.getString(i));
                    i++;
                }else{
                    break;
                }
            }
            result.add(tmp);
        }
        //db.commit();
        db.close();
        
        return result;
    }

```
小さなお友だちの為の　MacOsXでBASIC #15　回転行列その１

#記述する動機
私、とある専門学校でPGを教えています。はや８年。いまだにSEもやってます。
学生さんたちに読んでもらうために書いているのですが、悩めるプログラマ、悩めるSE、悩める教育関係者にも何かのヒントにはなると思い、あえて公開していきたいと思います。全て実例です。個人名は秘密！！

#BASIC
名前は「beginner's all-purpose symbolic instruction code」（「初心者向け汎用記号命令コード」を意味する）の頭字語である。

18歳以上はLinux,Macでc,Javaやりましょう。GCCを使えるようになりましょう。
14歳から18歳はOS問わず、IDEを使って、言語は何でもいい。
10歳から14歳は lua or BASIC おまけでscratch
10歳未満はコンピュータなんかやらんで良し。言語能力、身体能力を鍛えましょう。

#前提
http://qiita.com/ggggnonaka/items/8cf3b069594e684f9c0e
を御覧ください。

#二次元の回転行列
(x,y)をθ回転したときの座標を(x',y')とすると
x' = xcos(θ）- sin(θ）
y' = asin(θ) + cos(θ)
となります。

##15.BAS
```bas:15.BAS
10 SET WINDOW -2,2,-2,2
20 DRAW GRID
30 SET POINT COLOR 4
40 SET POINT STYLE 4
50 PLOT POINTS: 1 , 1
60 PLOT POINTS: 1*COS(PI/4) - 1*SIN(PI/4) , 1*SIN(PI/4) + 1*COS(PI/4)
70 END
```

##実行結果
おお！きれいに描画できてます。
![スクリーンショット 2015-02-14 12.42.24.png](https://qiita-image-store.s3.amazonaws.com/0/33317/93f47c96-f61d-4a87-5032-d81f3b24bb7d.png "スクリーンショット 2015-02-14 12.42.24.png")
Heroku Scheduler で月一回だけ実行したい

# 概要
Heroku Scheduler でバッチを月一回だけ(あるいは週一回だけ)実行したい
`bash` の`if`で日付指定する。

```sh
[ $(date +%d) = 01 ] && ruby ./batch.rb #毎初日に実行
```

## 準備
dyno のタイムゾーンを東京にしておく

```
heroku config:add TZ=Asia/Tokyo
```

Heroku Scheduler `Add Job...`　で追加
`task`  欄にシェルスクリプトで条件と実行するバッチを設定
`Frequency`は`Daily`
`Next Run`ここでの表示時間は UTC なので `00:00` に実行したい場合は -9hr して `15:00` で設定

## そのほか
```sh
[ $(date +%u) = 1 ] && ruby ./batch.rb #毎月曜日に実行
```
```sh
[ $(date +%m) = 02 ] && [ $(date +%d) = 14 ] && ruby ./batch.rb #2/14に実行
```
awk力を0からせめて１に上げる


## ゴール

熟練のawk職人になりたいわけではないが、ワンライナーで簡単な処理ならかける程度を目指す

## awkの基本を学ぶ

ドットインストールでawkの基本を復習
[awk基礎学習](http://dotinstall.com/lessons/basic_awk)

## ゆるふわな用語説明

|用語|説明|
|:-:|:-:|
|NF 組込み変数|Number of Fieldの略.フィールド数|
|NR 組込み変数|Number of Recordの略? レコードの数.最初のレコードは1|
|FS 組込み変数|Field Separatorの略? FSとして正規表現による指定も可能|
|BEGIN ブロック|通常のブロックは行毎に実行されるが、BEGINは最初のみ実行される.初期化に使用|
|END ブロック|最後に実行される。出力や最終結果の計算等に使用する|
|正規表現 ブロック|正規表現にマッチする行に対する処理を書きたい時に使用する|

## ゆるふわな組込み関数説明

|関数名|説明|
|:-:|:-:|
|index(in, find)|引数inの文字列からfindで指定した文字が現れる場所を返す(1文字目ば1なことに注意). ない場合は0を返す.|
|length(string)|文字列の長さを返す|
|printf(fmt, item1, item2...)|Cのprintf的に使える.どこまで同じかは不明.|
|substr(string, start, [,length])|指定した範囲の部分文字列を返す|
|tolower(string)|小文字に変換する|
|toupper(string)|大文字に変換する|


## こういう時はどう書くか

### セパレータを指定して処理したい

-Fでセパレータを指定

```awk
$awk -F ":" '{ print $1 " " $3 }' /etc/passwd
```

### 各フィールドをループしたい

```awk
$awk '{for (i = 1; i <= NF; i++) print $i;}' data.txt
```

### 複数の記号をセパレータとして使用したい

- 正規表現を使用するとできる
- 以下はスペースと:と/を区切り文字として使用した場合の例

```awk
$ echo "2014/03/08 12:12:12" | \\
  awk -F'[ :/]' '{print $2}'
```

### 特定の正規表現のパターンにマッチする行だけ処理する

```awk
$awk -F':' '$0 ~ /root/{ print}' /etc/passwd
```

### 文字列を数値に変換する

- 特に何もする必要がない。数値を表した文字列は数値に自動的に変換される。

```awk
$echo | awk '{ x="1.01"; x=x+1; print x}'
2.01
```

### 部分文字列を作成する

```awk
$echo 'abcde' | awk '{print substr($0, 2)}'
```

### 特定の制御文字でフィールドを区切る

- 下の例では^Aの部分が制御文字
- ^Aの場合はCtrl+v Ctrl+Aでターミナル上から入力できる

```awk
$more control_code.txt
a^Ab

$awk -F'^A' '{print $1 ":" $2}' control_code.txt
a:b
```

- バイナリの値を以下のように指定する事もできるっぽい
- 値は参考URLの制御コード表が参考になる

```
$awk -F'\01' '{print $1 ":" $2}' control_code.txt 
a:b
```

##引用元/参考URL

USP MAGAZINEコラボレーション連載／「シェル芸」に効く AWK処方箋
http://codezine.jp/article/corner/516

共通テーマ: 実例でわかる awk: 第 1 回
http://www.ibm.com/developerworks/jp/linux/library/l-awk1/

制御コード表
http://ash.jp/code/ctrltbl.htm

9.1 Built-in Functions - The GNU Awk User’s Guide
http://www.gnu.org/software/gawk/manual/gawk.html#Functions
Vagrant+CentOS7にrbenv+ruby-buildでruby2.2.0をインストールしようとしたらエラーでた対策



```bash:terminal
$ vagrant ssh
```

## Git

```bash:terminal
$ sudo yum -y install git
```

## rbenv

```bash:terminal
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
```

## ruby-build

```bash:terminal
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

## ruby

```bash:terminal
rbenv install 2.2.0
```

死んだ。。。

```bash:terminal
BUILD FAILED (CentOS Linux 7 using ruby-build 20150130-2-g8106d8f)

Inspect or clean up the working tree at /tmp/ruby-build.20150213200209.3634
Results logged to /tmp/ruby-build.20150213200209.3634.log

Last 10 log lines:
make[3]: ディレクトリ `/tmp/ruby-build.20150213200209.3634/ruby-2.2.0/ext/fiddle/libffi-3.2.1' から出ます
linking shared-object fiddle.so
/usr/bin/ld: ./libffi-3.2.1/.libs/libffi.a(raw_api.o): 再配置 R_X86_64_32S (`.rodata' に対する) は共有オブジェクト作成時には使用できません。-fPIC を付けて再コンパイルしてください。
./libffi-3.2.1/.libs/libffi.a: シンボルを読み込めませんでした: 不正な値です
collect2: エラー: ld はステータス 1 で終了しました
make[2]: *** [../../.ext/x86_64-linux/fiddle.so] エラー 1
make[2]: ディレクトリ `/tmp/ruby-build.20150213200209.3634/ruby-2.2.0/ext/fiddle' から出ます
make[1]: *** [ext/fiddle/all] エラー 2
make[1]: ディレクトリ `/tmp/ruby-build.20150213200209.3634/ruby-2.2.0' から出ます
make: *** [build-ext] エラー 2
```

[こちら](http://qiita.com/MorimotoYasunori@github/items/fb81946fc088b18d6a3a)を参考にして

```bash:terminal
$ sudo yum install libffi-devel
```

```bash:terminal
$ rbenv install 2.2.0
```

```bash:terminal
Downloading ruby-2.2.0.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/7671e394abfb5d262fbcd3b27a71bf78737c7e9347fa21c39e58b0bb9c4840fc
Installing ruby-2.2.0...
Installed ruby-2.2.0 to /home/vagrant/.rbenv/versions/2.2.0
```

入ったぽい。

```bash:terminal
$ rbenv versions
```
```bash:terminal
2.2.0
```

```bash:terminal
$ rbenv global 2.2.0
$ ruby -v
```
```bash:terminal
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]
```

よし。

## 参考

[rbenv を利用した ruby のインストール中にエラーとなる場合の対応 - Qiita]
(http://qiita.com/kakipo/items/482b32b0c2ec0f9d113c)
[Ruby 2.2.0をrbenvとruby-buildでインストール - Qiita]
(http://qiita.com/MorimotoYasunori@github/items/fb81946fc088b18d6a3a)
DockerのPhantomJSでスクリーンショットを撮る


PhantomJSとかインストールするの面倒ですよね。

そういうのにはDockerがいいんじゃないかと思って、探したら[作ってくれてる人がいた](https://registry.hub.docker.com/u/cmfatih/phantomjs/)んですが、案の定日本語フォントは入っていないので、日本語フォントも入れたバージョンを作りました。

https://registry.hub.docker.com/u/edvakf/phantomjs-japanese/

## 使い方

```
docker run -v `pwd`:/data edvakf/phantomjs-japanese /srv/var/phantomjs/examples/rasterize.js http://ja.wikipedia.org/wiki/Docker /data/wikipedia.png
```

これでdockerコンテナ内の`/data/`ディレクトリに出力されますが、`/data/`はホストのカレントディレクトリをマウントしているので、カレントディレクトリにファイルが保存されます。

## 幅指定できるようにする

幅を指定したい場合は[こちらの記事](http://aj.ayuta.co.jp/post/30577164224/phantomjs-web)にあるスクリプトをmyRasterize.jsという名前で置いて、

```
docker run -v `pwd`:/data edvakf/phantomjs-japanese /data/myRasterize.js http://ja.wikipedia.org/wiki/Docker /data/wikipedia2.png 1200 600
```

とやれば良いです。

## スクショ

### PhantomJS付属のrasterize.js

![wikipedia.png](https://qiita-image-store.s3.amazonaws.com/0/5978/e7f95aca-cc90-5853-59c1-24f44c98f23f.png "wikipedia.png")

### myRasterize.js

![wikipedia2.png](https://qiita-image-store.s3.amazonaws.com/0/5978/935d75da-fca9-1ebc-c315-300b1d46bea4.png "wikipedia2.png")
【g++】「error: 'stof' was not declared in this scope」と言われた時の対処方法

#はじめに
C++のbundleとしてXcodeで作成したときは問題がなかったプログラムがg++(gcc version:4.9.0)でコンパイルした際に`error: 'stof' was not declared in this scope`というエラーに。
これはstringに入っているstd::stofを使おうとしてて、ちゃんとincludeしていたのですが...なぜに。っと思ってGoogle先生に聞いたところ、gccのバグだとかの話が出たりしたんですけど、結局はコンパイル時にある魔法の言葉をつけるだけで解決しました。

#魔法の言葉
魔法の言葉、それは

`-std=c++11`

です。例としては次の通りです。

`g++ -std=c++11  main.cpp`

#魔法の言葉の意味

これはC++11の機能を使うために、明示的にオプションで指定しているもので、C++11の拡張やライブラリを使用しますよーって言ってるものです(｡・∀・)ﾉ

* 参考：[C++11 - C++入門](http://kaworu.jpn.org/cpp/C++11)

#もし魔法の言葉が効かない場合
g++(gcc)のバージョンが古い可能性があるのでアップデートするとできるらしいです( º言º` )

* 参考：[g++ -std=c++11　でc++11のコンパイルができないとき](http://qiita.com/bn_naoyuki/items/48ae8761491ad1b5de6a)


#参考URL
* [stof function is not declared in this scope c++](http://stackoverflow.com/questions/19879506/stof-function-is-not-declared-in-this-scope-c)
* [g++ -std=c++11　でc++11のコンパイルができないとき](http://qiita.com/bn_naoyuki/items/48ae8761491ad1b5de6a)
* [C++11 - C++入門](http://kaworu.jpn.org/cpp/C++11)
xargsで複数コマンドを実行する


-Iオプションで実行コマンドの特定の文字を標準入力の値に置換できるので、それとshを組み合わせる

```bash
$ ls
a.txt  b.txt
$ ls | xargs -I{} sh -c 'echo {}; echo {}'
a.txt
a.txt
b.txt
b.txt
```

-Iオプションは環境によっては--replaceであったりするのでmanで確認する。
Scalaで処理の制限付きリトライを実装する


（失敗するかもしれない）値の取得を、上限回数を決めてリトライする処理を考えてみます。

# breakableを使う

```scala

import scala.util.control.Breaks.{ break, breakable }

// return Int value
def getValue:Int = ???

def getValueWithRetry:Option[Int] = {
	var count = 0
	var result:Option[Int] = None
	breakable {
		while (count < 3) {
			try {
				result = Option(getValue)
				break()
			} finally {
				count = count + 1
			}
		}
	}
	result
}
```
ScalaにはJavaのようなループ処理を中段するbreakはありませんが、
***breakable {...}***　で囲った中で***break***を呼ぶと、***breakable {...}***から抜け出すことができます。
***while(count < 3)***の部分でリトライ回数を変更することができます。
でも、長いしvar使ってるしでイケてないですね。


# orElseを使う

```scala
// return Try[Int] value
def getValue:Int = ???

def getValueWithRetry:Option[Int] = {

	def getValue:Try[Int] = Try { getValue }
	
	(getValue orElse getValue orElse getValue).toOption
}
```
***[Try#orElse](http://www.scala-lang.org/files/archive/nightly/docs/library/index.html#scala.util.Try)***は、SuccessならSuccessを返し、Failureなら引数のデフォルト値を返します。
必要なリトライ回数分orElseで***getValue:Try[Int]***を合成し、toOptionします。
breakableと比べてかなりスッキリしたけれど、リトライ回数が動的に変更できないところがイマイチ。

# Streamを使う

```scala
// return Int value
def getValue:Int = ???

def getValueWithRetry:Option[Int] = {

	def valueStream:Stream[Try[Int]] = Try(getValue) #:: valueStream
	
	valueStream.take(3).find(_.isSuccess).flatMap(_.toOption)
}
```

普通にgetValueのコレクションを作るとその時点で、各要素が評価されてしまうので無駄です。そこで***Stream***を使います。
Streamの要素は遅延評価されるので、無駄なgetValueが評価されることを省略でき、それに***Stream#take***の引数でリトライ回数を変更することができます。


もっといい方法がありそうですが、考えつく所としてはこんなものでしょうか。
Capistorino3でのエラー対処

```bundle stderr: /usr/bin/env: bundle:```

これはCapistorinoではsudoでコマンド実行されるが一般ユーザーにしかパスが通っていないことが原因

```sudo visudo```
して

```Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin```

のように適宜sudoで必要なpathを追加

capistranoからnokogiriがインストールできない（またnokogiriか）

deploy.rbに
```set :bundle_env_variables, { 'NOKOGIRI_USE_SYSTEM_LIBRARIES' => 1 }```
を記述したら解決

こんなエラーで手詰まり中
```LoadError: cannot load such file -- rails/all```
[C#]Excel列名変換問題を解く

[Excel列名変換問題で第２回社内プログラミングコンテストを開催してみた(前編) - give IT a try](http://blog.jnito.com/entry/20111102/1320253815)

少し必要になったのとLINQの勉強のため
必要になったのは列名から数字のほうだけだったのでそれのみ。
LINQはなかなか使いやすいと思った。

```csharp
public static int ToInt(string str)
{
    return str
        .ToCharArray()
        .Reverse()
        .Select((c, i) => new KeyValuePair<int, int>(i, (int)c - (int)'A' + 1))
        .Aggregate(0, (sum, pair) => sum + pair.Value * (int)Math.Pow(26, pair.Key));
}
```
kickstartファイルにupdatesリポジトリを追加するとCentOS 6.6のインストールに失敗する

# 現象

Cobblerを使用してPXEブートでCentOS 6.6(64-bit)をインストールしようとしたが、インストール途中で次のようなメッセージが出力され、インストールに失敗した。

```
A fatal error occurred when installing the <rpm.hdr object at 0x(16進数のアドレス)> package. This could indicate errors when reading the installation media. Installation cannot continue.
```

本件はバグ報告も行われている。
http://bugs.centos.org/view.php?id=8171

今のところわかっていることは以下の通り。

* この現象を引き起こす原因はCentOS 6.6のupdatesリポジトリにあるglibcパッケージである。
* この現象は公式ミラーのupdatesリポジトリを使っても、ローカルにupdatesリポジトリのミラーを作って使っても発生する。ローカルに作ったミラーからglibcパッケージを削除してcreaterepoし直すと発生しなくなる。
* Web上ではCobblerを使ってる人だけが報告しているように見えるのでCobblerが原因の一端を握っている気はする。ただし、私が管理しているCobblerは4台あるが、そのうちこの現象が起こっているのは1台だけである。
 * 問題が発生している1台と、発生しない残りとの違いは不明である。
* 問題が発生している1台では、上記の通りローカルに作ったミラーからglibcパッケージを削除したり、あるいはupdatesリポジトリをCobblerプロファイルから外したりしない限り、CentOS 6.6インストール時に必ずこの問題が発生する。

# ワークアラウンド

どうやら同じ名前のrepo行がkickstartファイル内にあると上にある方が有効になるようなので、今のところ以下のようなワークアラウンドで対応している。

Cobblerの/var/lib/cobbler/kickstarts/sample.ksなどのkickstartテンプレートファイルに、リポジトリ追加を行ってくれる「$yum_repo_stanza」という部分がある。
この部分は`curl http://(Cobbler機のホスト名)/cblr/svc/op/ks/profile/(Cobblerプロファイル名)`、あるいはCobbler機上でなら`cobbler profile getks --name (Cobblerプロファイル名)`を実行すれば数行の次のようなrepo行として展開されていることがわかる。
（この例はリポジトリでMirror locallyが有効になっている場合だが、無効であったとしてもこの後やることは変わらない）

```
repo --name=(リポジトリ名) --baseurl=http://(Cobbler機のホスト名)/cobbler/repo_mirror/(リポジトリ名)
```

このうちupdatesリポジトリの行をコピーし、オプションとして「--excludepkgs=glibc」を付加したものを、kickstartテンプレートファイルの「$yum_repo_stanza」の前に追加してやる。
よってkickstartテンプレートファイルには次のような箇所ができる。

```
repo --name=(リポジトリ名) --baseurl=http://(Cobbler機のホスト名)/cobbler/repo_mirror/(リポジトリ名) --excludepkgs=glibc
$yum_repo_stanza
```

これでglibcはupdatesリポジトリからではなくbaseリポジトリからインストールされる。

しかしGHOST脆弱性もあるのでglibcは最新にしておきたい。
なのでkickstartテンプレートファイルの%postの「$yum_config_stanza」（これは/etc/yum.repos.d内にcobblerに設定されたリポジトリが書かれたファイルを配置する）以降に以下を追加する。

```
yum update glibc -y
```

これでとりあえずは問題ない。

# この対応で得た知識

* 同じ名前のrepo行がkickstartファイル内にあると、上にある方が有効になる。
* [RHELのドキュメント](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-kickstart2-options.html)には書かれていないが、kickstartのrepo行にはexcludepkgsオプションが使用できる。[こちらのドキュメント](http://fedoraproject.org/wiki/Anaconda/Kickstart)で見つけた。
* OSに近い部分での怪しい挙動についてはCentOSのバグ報告を先に参照しておくべきだった。参照しなかったばっかりにupdatesリポジトリ内を手動二分探索でどのパッケージが原因かを探す羽目になった。
Python における Hexagonal Architecture の実践例


最近、社内で Hexagonal Architecture ベースのバックエンドを書いていて、わりとうまくいっている（つもり）なので、基本となるエッセンスを超簡単に書いてみます。

## TagService の実装例

### ドメイン層


``` python

from zope.interface import Interface
from .base import Entity, ValueObject

class Post(Entity):
    u""" Post Model """
    ...
    
class Tag(ValueObject):
    u""" Tag Model """    
    ...

class ITagService(Interface):    # specification
    u""" Tag management domain service """
    def add_tag(post, tag):
        u""" add tag to a post """

    def remove_tag(post, tag):
        u""" remove tag from a post """

```

ValueObject や zope.interface については下記の記事を参照してください。

* [ValueObject implementation in Python](http://qiita.com/ledmonster/items/2f16d52cdf58d1a73685)
* [Hexagonal Architecture の実践には zope.interface が便利](http://qiita.com/ledmonster/items/9de40b30040326a7dba8)

### インフラストラクチャー層
``` python
from zope.interface import implementer
from .domain.model import ITagService

@implementer(ITagService)    # implement TagService as described in ITagService
class TagService(object):
    u""" TagService using xxx """
    def add_tag(self, post, tag):
        u""" add tag to a post """
        # do some actual staff

    def remove_tag(self, post, tag):
        u""" remove tag from a post """
        # do some actual staff


@implementer(ITagService)
class DummyTagService(object):      # i.e. memory based implementation
    u""" TagService for tests """
    def add_tag(self, post, tag):
        u""" add tag to a post """
        # do some actual staff

    def remove_tag(self, post, tag):
        u""" remove tag from a post """
        # do some actual staff

```

### アプリケーション層
``` python
from .infrastructure import TagService

def add_tag(post, tag):
    srv = TagService()
    srv.add_tag(post, tag)    # use TagService as described in ITagService

```


### テスト

- DummyTagService と TagService がドメイン層で期待されている通りに振る舞うことを保証する。
- TagService を利用するオブジェクトのテストにおいては DummyTagService を利用する。


## ドメイン層の役割について

社内で「ITagService って必要なの？」という質問があったのですが、ドメイン層の役割は、アプリ層、インフラ層それぞれに対して「仕様」を提示ですることではないか、と思っています。ドメイン層があることで、インフラ層はそのインタフェースを提供するように実装をすればよいし、アプリ層はそのインタフェースに従ってモデルを利用すれば良いことになります。

ECMAScript 仕様で例えると、

- ECMAScript の仕様がドメイン層で、
- Google Chrome の開発者は ECMAScript の仕様に従ってブラウザを実装し、
- アプリ開発者は ECMAScript の仕様に従って JavaScript のアプリ開発を行う

ドメイン層が間に入ることで、機能の提供者も、利用者も、それぞれが恩恵を受けられるわけです。
Laravel Elixirでブラウザ同期

Laravelだけに限らないけれど、ViewファイルやCSSを変更するたびにブラウザを手作業で更新するのはとても面倒。メインのブラウザだけならまだいいけれど、複数ブラウザでチェックしたいとかなってくるともう大変。こんな時は[Laravel Elixir](http://laravel.com/docs/5.0/elixir)と[BrowserSync](http://www.browsersync.io/)で自動化しよう。

自動化するとどんな感じになるかは[BrowserSync](http://www.browsersync.io/)のWebページにある[動画](http://quick.as/az3sxrb)がわかりやすい。

## 準備

### Homesteadの準備

Laravelのサイトにある[Document](http://laravel.com/docs/5.1/homestead)を見ながらHomesteadをインストールする。

#### Vagrant Box

```sh
$ vagrant box add laravel/homestead
```

#### Homestead

```sh
$ cd /path/to/project
$ composer require laravel/homestead --dev
$ php vendor/bin/homestead make
```

### Laravel Elixirの準備

Laravelのサイトにある[Document](http://laravel.com/docs/5.1/elixir)を見ながらLaravel Elixirを使う準備をする。

#### Node.js

```sh
$ brew install node
```

#### Gulp

```sh
$ npm install --global gulp
```

#### Laravel Elixir

```sh
$ npm install
```

## 設定

`gulpfile.js` を下記のような感じに修正する。

Homesteadのhostを変えている場合は`proxy`の部分を修正することで対応する。

```javascript
var elixir = require('laravel-elixir');

elixir(function(mix) {
  mix.browserSync({
    proxy: 'homestead.app'
  });
});
```

## 使い方

HomesteadでVMを立ち上げて`gulp watch`するとブラウザの同期がはじまる。

```sh
$ homestead up
$ gulp watch
```
avastのバージョンアップでVBScriptが実行できなくなった場合の対処

他にもパターンが有るようなので、同じ状態のやつを探してみること。

regedit.exeでキーを検索して確認したところ、削除された場所をそのまま見ていた。

32bit
HKEY_CLASSES_ROOT\CLSID\{B54F3741-5B07-11cf-A4B0-00AA004A55E8}\InprocServer32
64bit
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{B54F3741-5B07-11cf-A4B0-00AA004A55E8}\InprocServer32


レジストリは "C:\Program Files\Alwil Software\Avast5"のままなのに、
インストール先が "C:\Program Files\AVAST Software\Avast" に変わっていたので、
シンボリックリンクで対処した。

mklink /d リンク ターゲット lnコマンドと逆なのに注意する
mklink /d "C:\Program Files\Alwil Software\Avast5" "C:\Program Files\AVAST Software\Avast" 

## 参考文献
http://yaplog.jp/shizuka2/archive/196

http://www.atmarkit.co.jp/ait/articles/1306/07/news111.html
Dockerコンテナと同期しつつ自動リロードさせている時の注意点

メモです。

[こちら](http://qiita.com/toritori0318/items/190fd2dad2bf3ce38b88#fig%E3%81%AE%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B) の記事でローカルPCとDockerコンテナのボリュームを同期しつつ、
スクリプトが更新されたらFlaskを自動リロードさせる仕組みを紹介しました。


## pythonプロセスの負荷が上昇
現在は実際にこのスタイルで開発しているのですが
同期されるファイルが増えてくると
Dockerコンテナ内のpythonプロセスの負荷が高くなってきていることに気付きました。

なんでかなーと思って調査したところ、 **自動リロードの部分を削ると負荷が激減しました。**
つまり自動リロードが悪さしている様子。


## インターバルを増やす
監視インターバルの間隔を延ばすと多少負荷がマシになりました。
先のスクリプトの例では、オプションにインターバルを指定します。

```
...
if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True, reloader_interval=5)
```

<br>  

ちなみにですが、ローカルでflaskデーモンを起動しても問題ないため
Docker上のボリュームと同期している時のみ発生するようです。

今回はFlaskの問題でしたが（というかFlask固有の問題かもしれませんが）
他の自動リロードの仕組みでも発生する可能性があるので一応覚えておくと良いかもしれません。
awkコマンドメモ

awkコマンドメモ、徐々に複雑なパターンを追加していく予定。。

### 全ての行の１フィールド目を出力
```
awk '{ print $1 }'
```
### 区切り文字を","として1フィールド目を表示
```
 awk -F , '{print $1}'
```
### 1行目が"a"の時に1フィールド目を出力
```
awk '$1=="a" {print $1}'
```
### 3行目の1フィールド目を出力
```
awk 'NR==3 {print $1}'
```
### 3フィールド以上ある行の1フィールド目を出力
```
awk 'NF > 3 {print $1}' 
```
### すべての行の最後のフィールドを出力
```
awk '{print $NF}'
```
### すべての行の1フィールド目を除いて出力
```
 awk '{ $1=""; print }'
```
### すべての行の1フィールド目の出現回数をカウントして降順に並び替えて出力
```
awk '{print $1}' | sort | uniq -c | sort -r
```
AWS-Cliを利用し、任意のNameタグのインスタンスのPrivateIPを取得するワンライナー


## 前書き

AutoScalingなどでサーバーを動的に増減させているときは、インスタンスにsshでログインしたいたびにIPを調べる必要があり、その都度、Webコンソールに入るってIPを調べるのは煩わしく感じていたので書きました。

## ワンライナー

そんなときにaws-cliを利用し、以下のようなワンライナーを作成しました。
※ `検索対象のタグの値` という部分をPrivateIPを調べたいインスタンスのNameタグの内容に置き換えてください。

```bash
aws ec2 describe-instances --filter "Name=tag-key,Values=Name" "Name=tag-value,Values=検索対象のNameタグの値" --query 'Reservations[].Instances[?State.Name==`running`].PrivateIpAddress[]'
```

これでIPを取得できます！

```
[
  "172.30.13.xx",
  "172.30.14.xx",
  "172.30.16.xx"
]
```

## ちょっと発展したシェル

一応外部からprofileやNameタグの値を指定できるようにシェルも書きました。

```get-ec2-ipaddresses.sh
#!/bin/bash
NAME=$1
PROFILE=$2
OTHER=$3
aws ec2 describe-instances --filter "Name=tag-key,Values=Name" "Name=tag-value,Values=$NAME" --query 'Reservations[].Instances[?State.Name==`running`].PrivateIpAddress[]' --profile $2 $3
```

実行方法
Profileが `develop` で Nameタグの内容が `test` から始まるインスタンスを取得したいとき。

```sh
./get-ec2-ipaddresses.sh test* develop
```

## まとめ

aws コマンドの `--query` 部分で指定している

     .Instances[?State.Name==`running`]


は、とても便利で、インスタンスの状態が起動中のもの取得するというような記述です。
私も今日おしえてもらったので、これからどんどん使っていきたいです。

よいCLIライフを。
JavaScriptのオブジェクトのキーに変数の値を使うTips

## はじめに

JavaScriptから外部サービスのAPIへリクエストを投げる時、公式SDKを使うことはよくありますよね。

直接SDKを使ってリクエストを投げてもいいのですが、同じようなリクエストを複数の箇所で書いていると、コードが重複して無駄です。

そこで共通で利用できるように、ラッパー用の関数を自前で実装することは多いと思います。

そんな時に、リクエストで渡すパラメータのキーに対して変数の値を使う方法がわからなかったので、まとめました。

## ドット演算子とブラケット演算子

JavaScriptのオブジェクトのプロパティにアクセスする方法には、ドット演算子とブラケット演算子の2つがあります。

```
var user = { 'name':'Jonh', 'age':24, 'gender':'male'};

var userName = user.name;

console.log(userName);
```

これがドット演算子で出力結果はJonhになります。

対して、ブラケット演算子の場合は以下の記述になります。

```
var user = { 'name':'Jonh', 'age':24, 'gender':'male'};

var userName = user['name']

console.log(userName);
```

出力結果は変わらず、Jonhです。

## ドット演算子のメリット、デメリット

### メリット
* 記述が簡潔なので、コードを書きやすい。

### デメリット
* 汎用性が低い(ブラケット演算子で出来ることがドット演算子には出来なかったりする)

## ブラケット演算子のメリット、デメリット

### メリット
* 汎用性が高い(ドット演算子で出来ることは全てブラケット演算子で置き換えが可能)

### デメリット
* ドット演算子よりも、コードが書きにくい(いちいち['']で囲む手間が発生する)

## キーに変数の値を使うなら、ブラケット演算子

今回の目的である、キーに変数の値を使うにはブラケット演算子を使えば可能です。逆にドット演算子では出来ません。

```
var keyName = 'name';

var user = { 'name':'Jonh', 'age':24, 'gender':'male'};

var userName = user[keyName];

console.log(userName);
```

例えば先程のコードは上記のように書き換えることが出来ます。

ドット演算子を使って以下のようには書けません。
結果はundefinedになります。

```
var keyName = 'name';

var user = { 'name':'Jonh', 'age':24, 'gender':'male'};

var userName = user.keyName

console.log(userName);
```

## APIリクエストのパラメータのキーに変数の値を利用する

```
var conditionDetail = {};
var keyName = 'user';

conditionDetail[keyName] = 'Jonh';

var params = {
  KeyConditions:conditionDetail
};

fb.getProfile(url, params);
```

今まで学んだ内容を活用すると、上記のようにキーに自分の指定したい変数の値を使ってパラメータを設定するといったことが出来ます。

このパラメータは以下のように展開されます。

```
{ KeyConditions: { user: 'Jonh' } }
```

何度も使うようであれば、この処理を関数化してしまうと良いと思います。

他の言語を使い慣れている方は、地味に詰まる箇所だと思うので参考にしていただければと思います。
Emacs上でcsvの特定列の数値を合計する

大きなcsvを手に入れたけど欲しいのは特定の列の合計値だけなんだよって事良くありますよね。

```
名前,血液型,スコア,性別
alice,A,232,1
bob,B,659,0
charlie,O,120,0
dave,AB,923,0
...(以下1000行ぐらい)
```

この中で**スコア**の部分だけ合計したいというケースに直面したとします。
それもできる限り少ないタイプ数で。
まず一番上の行を消します。`C-k`

```
alice,A,232,1
bob,B,659,0
charlie,O,120,0
dave,AB,923,0
...(以下1000行ぐらい)
```

スコア列までの左２列が邪魔ですね。消しましょう。
次にaliceの`a`にカーソルを合わせ`F3`→`C-@`→`C-s`→`,`→`C-s`→`C-f`→`C-b`→`C-w`→`C-n`→`F4`と押します。
個々のコマンドを説明すると。

- `F3`: これからマクロ作るから覚えて
- `C-@`: ここから範囲選択開始
- `C-s`: 検索してカーソルジャンプ
- `,`: `,`のある所までカーソルを動かして（ここでalice`,`の所まで飛ぶ）
- `C-s`: 次のコンマ、つまりA,の所までジャンプ(これでA`,`まで飛ぶ)
- `C-f`: カーソルを1個右に動かして検索ジャンプを抜け出す
- `C-b`: カーソルを1個左に動かしてコンマの上まで戻る
- `C-w`: 範囲選択の開始位置から今のカーソル位置までを切り取り（これで１行目の`alice,A,`の部分が全部消える）
- `C-n`: カーソルを１個下へ
- `F4`: 最初のF3からここまでの操作をマクロとして記録

ここまで操作するとEmacs上の画面はこんな感じになるはずです。

```
232,1
bob,B,659,0
charlie,O,120,0
dave,AB,923,0
...(以下1000行ぐらい)
```

カーソル位置は2行目のbobの最初の所にあるはず。
ここで`C-u`→`999999`→`F4`と押します。
個々の操作を説明すると

`C-u`: これから打つ数字の回数分、その後のコマンドを繰り返せ
`999999`: 99万9999回操作を繰り返せ（大きい数字なら何でも良い）
`F4`: マクロを上記の回数実行（行末まで行ったら勝手に止まる）

すると画面はこんなかんじになります。

```
232,1
659,0
120,0
...(間に1000行ぐらい)
456,1
123,0
```

さっきの操作がファイルの終わりまで繰り返されたので、全部の行で2個目のコンマまでが全部消えました。
1行分のコンマを消した最後に`C-n`で次の行に移っているので単純な繰り返しで全部の行に操作が実行されます。気になる人はF4コマンドを何度か押して試してみると良いです。

さて、次はコンマから右の1列が邪魔ですね。消しましょう。
カーソルがバッファの一番下に来ているので、ここから作業します。
一番下の行の左端(`123`の`1`)にカーソルが居るとしてコマンドを打ちます。
`F3`→`C-s`→`,`→`C-b`→`C-k`→`C-a`→`C-p`→`F4`

個々のコマンドを説明すると
`F3`: ここからマクロ記録開始
`C-s`: 検索してカーソルジャンプ
`,`: `,`のある位置まで移動(これで`123,1`の行の123,`0`にカーソルが飛ぶ)
`C-b`: カーソルを１個左にずらす(ついでに検索モードも終わる)
`C-k`: 今いる位置から右を切り取る
`C-a`: 行頭へ移動(これで123の`1`の部分へカーソルが飛ぶ)
`C-p`: 1行上へ移動
`F4`: 最初のF3からの操作をマクロとして記録

するとこんな感じになります。

```
232,1
659,0
120,0
...(間に1000行ぐらい)
456,1
123
```

カーソル位置は下から2行目の`456`の`4`の位置に居ると思います。
ここでさっきと同じようにF4を繰り返させましょう。
`C-u`→`999999`→`F4`
意味はさっきのコマンドと全く同一です。

すると結果としてこんな感じになります。

```
232
659
120
...(間に1000行ぐらい)
456
123
```

後は足すだけです。最初の行の前に`(+`と書いた行を挿入し、最後の行の後に`)`と書いた行を挿入します。

```
(+
232
659
120
...(間に1000行ぐらい)
456
123
)
```

これだけで、数字の羅列がEmacsに理解できるEmacs LispになるのでS式として計算ができるようになります。

最後の行の`)`のすぐ右にカーソルを合わせて`C-x`→`C-e`と押します。
するとステータスバーに足し算の答えが出ます。お疲れ様でした。

マクロの力でS式をゴリゴリ作る方法は応用の幅が広いのでオススメです。
こう打ったらもっと短く済むよ、というのが有ったら教えて頂けると嬉しいです。
Node-RED on Docker - Part4: はじめてのnodeを作成する


Node-REDの[Creating your first node](http://nodered.org/docs/creating-nodes/first-node.html)を読むと自分でnodeを定義できるので慣れてくるとNode-REDの可能性がいろいろ見えてきます。[Mashery](http://www.mashery.com/api-management)や[W2O2](http://wso2.com/landing/internet-of-things/)のESBのような使い方ができます。以前開発で使っていた[DataSpider Servista](http://dataspider.appresso.com/)を利用して[センサーデータハッカソン](http://kokucheese.com/event/index/242997/)も開催されたようです。Node-REDはNode.jsで書けるのでアイデア次第でいろいろ使えそうです。

## nodeの作り方

[前回](http://qiita.com/masato/items/3f268b1c7c68969c9af4)Dockerホストにカスタムのnodeを追加するディレクトリを`/opt/nodes`に作成し、settings.jsのnodesDirに指定しました。このディレクトリにjsとhtmlファイルを作成します。

* js:   nodeのロジックを記述
* html: nodeの設定を記述

## lower-caseのサンプル

[Creating your first node](http://nodered.org/docs/creating-nodes/first-node.html)にあるlower-caseのサンプルを実装してみます。

jsファイルにロジックを記述します。

``` js:/opt/nodes/99-lower-case.js
module.exports = function(RED) {
  function LowerCaseNode(config) {
    RED.nodes.createNode(this,config);
    var node = this;
    this.on('input', function(msg) {
      msg.payload = msg.payload.toLowerCase();
      node.send(msg);
    });
  }
  RED.nodes.registerType("lower-case",LowerCaseNode);
}
```

htmlファイルにnodeの設定やアイコンの指定を記述します。

``` html:/opt/nodes/99-lower-case.html
<script type="text/javascript">
  RED.nodes.registerType('lower-case',{
    category: 'function',
    color: '#a6bbcf',
    defaults: {
      name: {value:""}
    },
    inputs:1,
    outputs:1,
    icon: "file.png",
    label: function() {
      return this.name||"lower-case";
    }
  });
</script>

<script type="text/x-red" data-template-name="lower-case">
  <div class="form-row">
    <label for="node-input-name"><i class="icon-tag"></i> Name</label>
    <input type="text" id="node-input-name" placeholder="Name">
  </div>
</script>

<script type="text/x-red" data-help-name="lower-case">
  <p>A simple node that converts the message payloads into all lower-case characters</p>
</script>
```

## Node-REDの画面

jsとhtmlを作成してからDockerコンテナを起動します。

``` bash
$ docker run --rm \
  --name node-red \
  -p 1880:1880 \
  -v /opt/nodes:/data/nodes \
  node-red 
```

Node-REDの画面を開くとfunctionのカテゴリにlower-caseのnodeが追加されました。injectとdebugのnodeを前後につなげます。injectのpayloadには大文字でHELLOと入力しました。deploy後にinject nodeの左のボタンを押すとフローが実行されます。debugにはpayloadの大文字のHELLOが小文字のhelloになって出力されました。

![lower-case-node.png](https://qiita-image-store.s3.amazonaws.com/0/43745/31bf8d1a-7c79-64f3-1940-c1fdff31480b.png)
XCodeのArchiveで"Command /usr/sbin/chown failed with exit code 1"



【前提】
TestFrightが使えなくなるということで
Twitterが提供しているfabricのCrashlyticsの導入を進めていました。
https://get.fabric.io/

こちらの記事を参考に導入を進め、ここの
「1.[Xcode]->[Product]->[Archive]で.ipaファイルを作成すると…」
ここで足止めを喰らいました。
http://qiita.com/tomoki-n/items/ec34373a3e792fe6b6b9#%E3%83%86%E3%82%B9%E3%82%BF%E3%83%BC%E9%85%8D%E4%BF%A1

【現象】
ArchiveでBuilde Failを起こしました。
エラーは、
```
chown: hoge: illegal group name
Command /usr/sbin/chown failed with exit code 1
```
と出ています。（＊ここではXcodeから自動で設定されていた値を公開することができないのでhogeにしています)


【原因】
原因は単純なことで、存在しないgroupでchownをしようとしていることが原因です。

【解決策】
では、これをどうXcodeの設定で変更するのかを記載します。
Project->Build Settingsから検索で「Install Group」と探すと、
”Alternate Install Group”と”Install Group”が出てくると思います。
値は元々自動で${INSTALL_GROUP}などで変数を読み込んでいますが、
この変数でしているグループ自体が存在しない場合があります。
今回私の例でいうと、上記のhogeが${INSTALL_GORUP}にあたっていました。
が、hogeなどというグループはchownにはありません。
なので、「illegal group name」などとエラーにでていました。

なのでここで、Install Groupに設定されている値を、空の状態にします。
そうすると、Alternate Install Groupの値も空になると思います。
![スクリーンショット 2015-02-14 0.49.32.png](https://qiita-image-store.s3.amazonaws.com/0/7186/e101986e-7269-d694-3037-3c9156db5025.png)

この状態でArchiveをすると、私は無事にArchiveすることができました。



【終わりに】
あまり日本語の記事もなく、同様に困っていた人が記事にしてまとめていたのが１件程度だったので、この記事が同様の事象で困っている方の助けになれば幸いです。