OmniAICreator/Qiita-1.07M huggingface dataset:
werckerからslackに通知するslack-notifyが0.0.11で不具合が出るようになったので0.0.8を使う

補足: 0.0.11でchannelの指定方法が変わったようです。以下のように指定すれば大丈夫みたいですね。

```
channel: "#channel-name"
```
-

急に[slack-notify](https://github.com/sherzberg/wercker-step-slack-notify)の通知が来なくなったなーと思ったらバージョンが0.0.11に上がって通知に不具合が出るようになったみたいです。
下記のように旧バージョンを指定すればちゃんと動作します。

```
after-steps:
    - sherzberg/slack-notify@0.0.8:
        subdomain: ...
        token: ...
        channel: ...
```
RubyMotionでナビゲーションバーをフラットデザインにする方法

ナビゲーションバーのフォントやスタイルを一括で適用するための方法が分からなかったのでまとめます。

なお、本記事は次の記事の続編です。

RubyMotionでナビゲーションバーや本文に日本語フォントを指定する方法 - Qiita
http://qiita.com/y-ken/items/68199d09a60ec701764c

## ナビゲーションバーをフラットデザインにする方法

次のGistを参考に、移植しました。
なお、デザイン適用と同時にフォントを20ポイントから16ポイントに縮小しています。
https://gist.github.com/bensheldon/5751863

##### app_delegate.rb

```rb
# -*- coding: utf-8 -*-
class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds).tap do |window|
      window.rootViewController = UINavigationController.alloc.initWithRootViewController(QiitaViewController.new)
      window.makeKeyAndVisible
    end
    navigation_appearance
    true
  end

  def navigation_appearance
    # Background Color
    UINavigationBar.appearance.setBackgroundImage UIImage.alloc.init, # use an empty image
      forBarMetrics: UIBarMetricsDefault
    UINavigationBar.appearance.setBackgroundColor "#3076B4".to_color
    # Remove Shadow
    UINavigationBar.appearance.setShadowImage UIImage.alloc.init # use an empty image
 
    UINavigationBar.appearance.setTitleTextAttributes({
      UITextAttributeTextColor => UIColor.whiteColor,
      UITextAttributeTextShadowColor => UIColor.clearColor,
      UITextAttributeTextShadowOffset =>  NSValue.valueWithUIOffset(UIOffsetMake(0,0)),
      UITextAttributeFont => UIFont.fontWithName("HiraKakuProN-W6", size: 16)
    })
    true
  end
end
```

これで次の画像のように、フラットデザイン化が行えるようになります。

#### デフォルトのスタイル
![ios-navigationbar-hiragino.png](https://qiita-image-store.s3.amazonaws.com/0/19199/a2ecf2b0-b260-25aa-e1f9-c2f46ded9464.png)

#### フラットデザイン
![ios-navigationbar-hiragino-flat.png](https://qiita-image-store.s3.amazonaws.com/0/19199/20d0f72c-233a-7f63-f129-791a638ab54a.png)
rbenvでRuby2.1.3,Rails4.1.6インストール on CentOS6.5 (Vagrant)

前回、VirtualBox + vagrantで仮想環境を作成したcentos6.5にrubyの開発環境を作っていきます。

※前回はこちら
http://qiita.com/icche/items/571ad97680a13836c404

# 0. 事前準備

vagrantを起動してアクセス。

```
vagrant up
vagrant ssh
```

以下、gitが必要になりますが、前回作成したcentos6.5にはgitはインストール済みなので、gitインストールは省略します。

下記コマンドで必要なパッケージを入手

```
yum install -y gcc gcc-c++ make git openssl-devel
```

※JRubyを使うときはJavaをインストールして下さい。
※javaのインストールはこちら。
http://qiita.com/icche/items/d1dd976d8cb9221f11d7

# 1. rbenvのインストール

rbenv を ~/.rbenv (ホームディレクトリ直下の .rbenv フォルダ) にgit cloneします。

```
$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
```

続いて、ruby-buildプラグインのインストール

```
$　mkdir -p ~/.rbenv/plugins
$　git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$　cd ~/.rbenv/plugins/ruby-build
$　sudo ./install.sh
```

rbenv のコマンドが使えるよう、環境変数の設定

```
$　echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$　echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$　source ~/.bash_profile
```

以下のコマンドのでrbenvの確認。

```
$ rbenv
rbenv 0.4.0-98-g13a474c
```

# 2. Rubyのインストール 

rbenvでインストールできるパッケージを確認する。

```
$ rbenv install -l
```

現時点で最新の安定版2.1.3をインストールする。

```
$ rbenv install 2.1.3
```

※OpenSSLが入っていない怒られた場合は、インストールしてから再度rubyをインストール

```
$ sudo yum -y install openssl openssl-devel
$ rbenv install 2.1.3
```

rehashしてruby 2.1.3を標準に

```
$ rbenv rehash
$ rbenv global 2.1.3
```

rubyのバージョン確認

```
$ ruby -v
ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-linux]
```

# 3. Bundlerのインストール

Bundlerを単品でインストール

```
$ rbenv exec gem install bundler
```

インストールしたので rehash する

```
$ rbenv rehash
```

バージョンを確認する

```
$ bundler -v
Bundler version 1.11.2
```

あとは、Railsのプロジェクトrootで
```
$ bundle install --path=vendor/bundle
```

必要に応じて
```
$ bundle exec rake db:create
$ bundle exec rake db:migrate
$ bundle exec rake db:seed
```


お疲れ様でした♪
JavaScriptをほとんど触ったことのない人がmilkcocoaでサービスを開発する上で知っておくと役に立つ6つのリンク

　こんにちは、[@_sgtn](http://twitter.com/_sgtn)です。未経験者編に続いて、次は初心者編です。
　[milkcocoa](https://mlkcca.com)を使っているユーザーをじーっと観察すると気付くのが、**milkcocoa本体ではなくCSS/JSでつまづくユーザーが多い**ということです。
　この記事がきっかけで、milkcocoa開発時のハマりが回避できれればと思います。


# HTMLとCSSで何か作ったことのある方向け

　HTML/CSSチョットデキルなアナタには、サイトに動きをつけることを覚えてもらいましょう。
　これから少しプログラミングチックになってきますが、**「何が分かっていて、何が分からないか」**をひとつづつ確実に分けていけば、大体の問題は必ず解けるようになっています。頑張りましょう！

##[ドットインストール:JavaScript入門](http://dotinstall.com/lessons/basic_javascript_v2)
　JavaScriptの基本的な内容を網羅した動画です。動画が嫌いな方がいるかもしれませんね。そんな方は[LIG様](http://liginc.co.jp/programmer/archives/4958)がオススメです。
　全部を完璧にやる必要はありません。分からなくなったときに辞書に当たるように調べ直すほうが良いです。
　それよりも大切なことは、何故作りたいのか、どのように作りたいのか、何を作りたいのかをちゃんと知っておくことです。**何かを楽しんで作ることが最大の学び**です。

##[ノンプログラマーのためのjQuery入門](http://www.slideshare.net/hayatomizuno/jquery-7665168)
　jQueryという便利グッズがあります。より少ないコードでより多くのことをやってしまおうという粋なツールです。少し難しい専門用語も出てきますけど、**ひとつひとつGoogleで調べて押さえていく積み重ね**が大切です。知識と知識を蜘蛛の巣のようにつなげて理解しましょう。
　jQueryで、簡単に「クリックしたときにHTMLタグに文字を挿入」「ページを開いたあとにアイテムが滑らかに並ぶ」などの表現力の高いことが可能になります。
　「ブラウザの要素を選んで操作する」という行為をコードで書くとどうなるか、その対応関係をしっかり理解しましょう。

## [ズルいデザインテクニック2013](https://speakerdeck.com/ken_c_lo/zuruidezaintekunituku2013-plus-semihuratuto-version)
　pplogのken_c_lo様の徳の高いスライドです。**ちょっとした手間でサイトの見た目を良くする**ありがたいテクニックがまとめられております。
　ちょっとした陰の使い方、ちょっとした背景素材の選び方。webっぽいデザインとは何かを考え直すのによい教材となっております。

# JavaScriptで少し動きのあるサイトを作ったことのある方

　素晴らしい！**そのまま[milkcocoa](https://mlkcca.com)を触り初めてしまえば良い**のですが、プロダクトをもっと良いものとするために知っておくと良いかもしれない情報を載せておきます。

## [モダンCSS設計の解説サイトまとめ](http://qiita.com/takuhito-h/items/ef8e9cd5fc4b4230125e)
　少し大きなサービスが作りたくなったときの話をしましょう。あなたは他のエンジニアと組んでサービスの完成度を高めなければなりません。相手は自分よりも経験があって緊張するかもしれませんね。
　このとき重要なのが、**「保守性・可読性」**という考え方です。あなたしか解読できないコードを相方が修正するとき、無駄に時間がかかってしまいますね。事前にある程度書き方を統一しておくことが、どれほど多人数開発をスムーズに進めるでしょうか。
　エンジニアの生産性はこういった点からも測ることができるので、しっかり覚えましょう。

## [JavaScriptのエスケープあれこれ](http://www.techscore.com/blog/2013/10/15/javascript%E3%81%AE%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97%E3%81%82%E3%82%8C%E3%81%93%E3%82%8C/)
　HTMLのinput要素やtextarea要素は、悪意あるハッカーからの格好の標的です。scriptタグの中でJavaScriptが利用できることを狙って、プログラムを仕込んできます。新しいサービスを出したらとりあえずと言わんばかりに仕込んできます。なので、<と>の記号を無効化しないといけません。そのためにエスケープが必要です。
　また、一言にセキュリティというとイメージがぼやけますが、「セキュアである」ということは、ある意味では「自分のサービスが予期せぬ挙動をしないこと」と言い換えることもできます。ユーザーがせっかく作ったデータを削除されたりしないように、適切に処理を行いましょう。
　そのためにmilkcocoaでは**[セキュリティルール](mlkcca.com/document/security.html)**と**許可Origin**でデータを守れるようにしています。

## [Vue.jsから手軽に始めるJavaScriptフレームワーク](http://qiita.com/icoxfog417/items/49f7301be502bc2ad897)
　最後に、Vue.jsというGUIを作るのに便利なフレームワークを紹介します。大きなサービスを作って行くと、ファイルの置き場所や、コードを書く場所など、ある程度ルールを決めておかないと大変なことになります。せっかく苦労して作ったサービスが、これ以上機能を追加しようにも、一箇所触ると他の場所でバグが出て触りようがない状態になると悲しいですからね。
　Vue.jsはデータバインディングという変化するデータを便利に表示する機能だけをサポートしているので覚えることが少なめなので、手軽に始められます。まずはHello worldから初めて、[milkcocoa](https://mlkcca.com)と組み合わせたtodoアプリやchatなどを作ってみましょう。
　流行のプロダクトを二つ組み合わせて開発するなんて素敵ですね！どんどんコードを書いてライバルに差をつけましょう！

# まとめ

　[milkcocoa](http://mlkcca.com)は開発コストを下げるためだけのプロダクトじゃなく、簡単であるが故に今まで思ってもやらなかったことを実現可能にしたり、ほぼリアルタイムの高速通信が当たり前なのでブラウザ間でイベントが共有できているかのように見えたり、多彩な表現が可能なプロダクトでもあります。
　JSとCSSをマスターして、milkcocoaのポテンシャルを引き出してくれるユーザーが増えることを願っています！！
キーワード引数でメソッドを簡潔に実装する


## 1. 概要

Rubyでは、キーワード引数を取ることができる。
さらに、Ruby 2.1より、キーワード引数のデフォルト値を省略することができるようになった。
これにより、メソッドをより簡潔に実装することができる。

## 2. 例

UserがItemに対してLikeするシステムについて考える。
ここで、`current_user`の`@item`に対する`like`を取得する`find_like_by_item`メソッドは以下のように書ける。

※ 簡潔な実装を分かりやすく示すためであり、こじつけな例である

```ruby
# View
link_to 'Like', like_path(current_user.find_like_by_item(@item)), method: :post, remote: true

# Model
class User < ActiveRecord::Base
    :

  def find_like_by_item(item)
    likes.find_by(item_id: item.id)
  end
end
```

これは、キーワード引数を用いると以下のように書ける。

```ruby
# View
link_to 'Like', like_path(current_user.like(item: @item)), method: :post, remote: true

# Model
class User < ActiveRecord::Base
    :

  def like(item:)
    likes.find_by(item_id: item.id)
  end
end
```

キーワード引数が必須であるため、`:item`を渡す必要があることが自明であり、すなわちItemに対するLikeを取得するということが分かりやすくなる。

## 3. 備考

実装においては、メソッドを見てその振る舞いが分かりやすくなければならない。
なので、簡潔に記述するためのひとつの方法と捉えておくべき。

## 参考

- http://techracho.bpsinc.jp/baba/2013_12_26/15026
- http://nomnel.net/blog/ruby-keyword-args/
- http://qiita.com/yuya_takeyama/items/ca1e67766aafc99e741f
【Ruby】文字数を指定して文字列を分割

Rubyで文字数を指定して文字列を分割したいって思ったのでちょっと調べたらいろいろ勉強になったので、そのメモです。  
  
余談ですが、どうしてそんなことしようとしたのかというと、TwitterBotに投稿させるとき、内容が140字オーバーしてたら分割して投稿するようにしたかったので。  

調べたら答えは出てきたのですが、（参考→[Ruby 文字列を任意の文字数に分割する](http://qiita.com/paty-fakename/items/990fe9d57864054409e1)）
  
```rb
s = "1234567890"
n = 3
s.scan(/.{1,#{n}}/)
# => ["123", "456", "789", "0"]
```

パっと見理解できなかったので、ひとつひとつ見ていきます。  
## scanメソッド

まず、scanメソッドというのは、  

「引数で指定した正規表現のパターンとマッチする部分を文字列からすべて取り出し、配列にして返すメソッド」  

だそうです。→[str.scan(pattern)](http://ref.xaio.jp/ruby/classes/string/scan)より。  
つまり、条件に合うやつがひとつひとつ配列の要素になる的な。  
  
  
## 任意の文字にマッチさせる

ではその条件というのはどう指定すればいいのでしょうか。
自分は「指定した文字数で分割していって一番最後の要素はそれ以下でもよい」って感じにしたいです。  
  
Rubyがサポートしてる正規表現のメタ文字において、"."は「**改行を除く**任意の１文字」にマッチします。しかし、Twitterの投稿において改行(\n)も１文字として数えられるので改行にもマッチしてほしい…。  
  
そのためには正規表現に対してオプションを指定すればよさそうです。  

```rb
p "\n".match(/./)  # => nil 
p "\n".match(/./m) # => <MatchData "\n">
```

"/"の直後の文字によってオプションを指定でき、"m"は**複数行モード**でその能力は
「正規表現 "." が改行にもマッチするようになるッ!!」です。  

## 繰り返しで分割文字数指定

あとは"."がどれくらい繰り返されるかを指定すれば分割できそうですね。  
範囲指定繰り返し制御は"{}"を使います。  

```rb
p "aaaa".match(/.{1}/)   # => <MatchData "a">    1回
p "aaaa".match(/.{1,}/)  # => <MatchData "aaaa"> 1回以上
p "aaaa".match(/.{1,3}/) # => <MatchData "aaa">  1回以上最大3回
```

140字以内で1文字以上としたいので"{1,140}"とすればよさそうです。  

## 終わりに

```rb
post_text.scan(/.{1,140}/m)
```

とすれば「改行を含む140字以上の文字列を、140字ずつ分割して配列の要素にし、最後の要素は140字以下のものでもよい」って感じになるわけですね。  
  
正規表現って難しい…。  
  
## 追記（2014/09/19）
コメントしていただいた方法を各段階ごとで出力してみました。
文字列を取り出す→指定した数の要素を取り出してまとめる→まとめたものをjoinして配列に、という流れだそうです。

```rb:test.rb
post_text = "abc\ndefg\nhigkl"
post_text.each_char{|s| p s}
post_text.each_char.each_slice(3){|s| p s}
p post_text.each_char.each_slice(3).map(&:join)
```

これを実行してみると…

```
$ ruby test.rb
"a"
"b"
"c"
"\n"
"d"
"e"
"f"
"g"
"\n"
"h"
"i"
"g"
"k"
"l"
["a", "b", "c"]
["\n", "d", "e"]
["f", "g", "\n"]
["h", "i", "g"]
["k", "l"]
["abc", "\nde", "fg\n", "hig", "kl"]
```

なるほどなあという感じでした。
改行が含まれてても大丈夫だし、こっちの方法もよさそうですね。
WordPress でタグクラウドを自作する方法


最近あんまりみかけないですけど、タグクラウドを実装する方法です。

デフォルトのウィジェット「タグクラウド」では、タイトルと分類を設定できますね。

それ以外の部分だったりもうちょっと自由に設定したいというときには、自作した方が早いときがありますね。

## タグクラウドの用の関数

__wp_tag_cloud()__

こちらが、タグクラウド用の関数です。

引数には配列で各オプションを指定できます。

リファレンスを見ますと以下を設定できる感じですね。

<dl>
<dt>smallest</dt><dd> - 最小のタグの文字の大きさ（初期値 : 8）※単位はunitで</dd>

<dt>largest</dt><dd> - 最大のタグの文字の大きさ（初期値 : 22）※単位はunitで</dd>

<dt>unit</dt><dd> - 文字サイズの単位（初期値 : 'pt'）※他に、px,em,%等</dd>

<dt>number</dt><dd> - 表示するタグの最大数です。（初期値は : 45）※0にした場合は全て</dd>

<dt>format</dt><dd> - タグクラウドのフォーマットを指定（初期値は : flat）
	flat : タグをseparatorパラメータで結合した文字列で
	list : wp-tag-cloudクラスを付与したuiタグで
	array : PHPの配列で</dd>

<dt>separator</dt><dd> - タグとタグの区切り文字（初期値は半角スペース）</dd>

<dt>orderby</dt><dd> - タグの並び基準（初期値はname）</dd>
	name : タグ名
	count : タグの数</dd>

<dt>order</dt><dd> - タグの並び順
	ASC : 昇順
	DESC : 降順
	RAND : ランダム</dd>

<dt>exclude</dt><dd> - 除外するタグのID（term_id）をカンマ区切りで</dd>

<dt>include</dt><dd> - 対象にするタグのID（term_id）をカンマ区切りで</dd>

<dt>topic_count_text_callback</dt><dd> - リンクのタイトルを変更するためのコールバック</dd>

<dt>link</dt><dd> - ?</dd>

<dt>taxonomy</dt><dd> - 対象のタクソノミー</dd>

<dt>echo</dt><dd> - 1 : 出力をするか　0 : 出力しない（初期値 : 1）</dd>
</dl>


## 使用例

ウィジェット外で利用する場合です。

任意の場所で以下のコードを実行します。

```sidebar.php

<?php
/**
 * 「タグ名（タグ数）」のような形式の文字列を返します。
 * この関数は、functions.php に記述した方がいいですね。
 * 
 * @param string $count タグの数
 * @param object $tag タームのオブジェクト
 * @param array $args wp_tag_cloud()に渡した設定情報
 * @return string
 */
function simple_topic_count($count, $tag, $args) {
	return sprintf( '%s（%s）', $tag->name, $count );
}
$tags = wp_tag_cloud(array(
	'taxonomy' => 'original', // タクソノミー名
	'format' => 'array', // 自前で処理したいので、配列でうけとる
	'topic_count_text_callback' => 'simple_topic_count' // リンクのタイトルのシンプルにする関数を設定
));
?>
<ul>
<?php foreach( $tags as $tag ): ?>
<li><?php echo $tag; ?></li>
<?php endforeach; ?>
</ul>
```

こんな感じで、関数が準備するデータを最小限にし、テンプレート側でHTMLを調整できるようにしています。
一定時間でシェルコマンドを終了させるたった1つの方法

Linuxで[coreutils](http://www.gnu.org/software/coreutils/) が利用可能なら、[timeout](http://linuxjm.sourceforge.jp/html/GNU_coreutils/man1/timeout.1.html) コマンドを使いましょう。なお、Mac であれば `brew install coreutils` して `gtimeout` が使えます。

```
timeout

Usage: timeout [OPTION] NUMBER[SUFFIX] COMMAND [ARG]...
  or:  timeout [OPTION]
```

man には以下のように書かれています。デフォルトの挙動が使いやすそうです。

> コマンドがタイムアウトし、--preserve-status が指定されていない場合、 終了ステータスは 124 になります。それ以外の場合、COMMAND の終了ステータスが 終了ステータスになります。シグナルが指定されていない場合、タイムアウト時には TERM シグナルが送られます。この TERM シグナルにより、TERM シグナルをブロック もしくは捕捉していないプロセスは、すべて終了されます。 KILL (9) シグナルを 使う必要がある場合もあります (KILL シグナルは捕捉することができません)。 KILL (9) シングルが送信された場合は、終了ステータスは 124 ではなく 128+9 になります。

watch とか nice とかと並んで使い勝手が良さそう。

## たとえばスローテストを弾くとか

時間のかかるテストを実行して、タイムアウトしたら問答無用で kill してメール送りたいなどの用途にも活躍します。

```
timeout -sKILL 3600 rake spec
STATUS=$?
if [ "$STATUS" -eq 124 ];
then
        echo "ちょっとテスト長すぎるんじゃない？"
        exit 124
fi
```

（これはかなり乱暴なコードなので、安定して運用するなら別途[子プロセスの始末も](http://stackoverflow.com/questions/392022/best-way-to-kill-all-child-processes)なども考慮してください）

## たとえば一定時間内のログの行数を数えたい時とか

以下のようにして、10秒毎にアクセスログの数をカウントしたり。

```
$ while true; do : | timeout 10 tail -n 0 -f /var/log/nginx/access.log | wc -l; done
1321
1532
801
39
4
0
0
0
```

## たとえば非同期処理の実行を監視するとか

一定時間ログを眺めて、特定の文字列が出てくるかどうか監視したりもできます。

```
timeout 10 tail -n 0 -f /var/log/httpd/error_log | grep -q "shutdown"

PST=("${PIPESTATUS[@]}")
GREP_STATUS=${PST[1]}
TIMEOUT_STATUS=${PST[0]}

if [ "$GREP_STATUS" = "0" ] ;
then
        echo "やったね、シャットダウンされたみたいだよ"
        exit 0
fi

if [ "$TIMEOUT_STATUS" = "124" ] ;
then
        echo "時間内にシャットダウンされなかったよ。おかしいよ"
        exit 124
fi

echo "あれれ、なにかおかしいよ・・・？"
```


## 自作の関数をタイムアウトさせるとか



便利ですね！


## ということで

シェルスクリプトを眺めていて、ときおり一定時間経過後に `kill` するための複雑な並行処理を見かけたりしますが、`timeout` が利用できる環境では積極的に利用していきたいところです。

また、バッチ処理などで気軽に叩いてる `ls -1` とかもNFS周りで簡単に刺さったりするので、`timeout` が有益なケースって割といろいろありそう。

もちろん、こいつはシグナル送るだけなので複雑な条件判定がしたい時には個別に作るべきだと思います。
Titaniumメモ：Facebookとの連携。SDK3.xのFacebookモジュールの使い方。


##フェイスブックログインしたい。

そこでFacebookモジュールがTitaniumに標準（？）で装備されてたのでそれを使おうと思った時に見つけた
[Titanium：Facebookとの連携](http://qiita.com/Kani/items/301a5f4bd34eeeb19bda)
この記事がとても参考になった。

僕自身iPhoneシミュレータでしか試してないけど、Androidでも動くかな...？
色々な記事みるとOAuthの部分でiPhoneと仕様が違うようだが、あとで検証してみます。

##ログイン後のお話

```js
fb.requestWithGraphPath(
    'me',
    {},
     "GET",
    function(e) {
         if (e.success) {
             var obj = JSON.parse(e.result);
             alert("Success: " + obj.name);
        }
    }
);
```

この部分で認証後に色々情報を引っ張ってこれるようになるみたいですね。

[Facebook OAuth認証（認証ありで誕生日とEmailを取得） ](http://www.omnioo.com/record/sns/fb_oauth02/)

この方の記事がvar obj = JSON.parse(e.result);した時にに何が入っているか記述してくれているので参考になります。

フェイスブックログイン時に動く
fb.addEventListener('login', function(e) 
の部分に含めてしまえばログイン時に情報取得が可能になりますね。

これを利用してSQLiteに情報保存するなど使い道は色々ありそうです。

フェイスブックログインをフックにログイン状態へ移行したり出来そうですね。
Gitの差分ファイル抽出時にスペースを含んだファイル名でエラー

[gitで差分ファイルを抽出する](http://qiita.com/kaminaly/items/28f9cb4e680deb700833)

こちらの記事を参考にして差分ファイル抽出していたところ、エラー発生。
archive.zipは空ファイルになってしまって抽出できておらず。

```bash
$ git archive --format=zip --prefix=root/ HEAD `git diff --name-only d0b642e 17945a1` -o archive.zip
fatal: path not found: tokyo.html
```

tokyo.htmlなんてないんだが...
と思ったのですが、よく見るとファイル名にスペースが含まれているではないですか！

```bash
$ git diff --name-only d0b642e 17945a1 | grep tokyo
aaa/bbb/ccc_ tokyo.html
```

仕方ないので、ファイル名にスペースを含むファイルを除外して抽出しました。

```bash
$ git archive --format=zip --prefix=root/ HEAD `git diff --name-only d0b642e 17945a1 | sed '/ /d'` -o archive.zip
```

ちなみにダブルクォーテーションで囲む方法も試したのですが、ダメでした。

```bash
$ git archive --format=zip --prefix=root/ HEAD `git diff --name-only d0b642e 17945a1 | sed 's/\(^.*$\)/"\1"/g'` -o archive.zip
fatal: path not found: "404/index.html"
```
DockerをProxy配下で使う　CentOS7

CentOS7でDockerをProxy配下で利用する場合の設定
`docker search`、`docker pull`が失敗するときに・・・

※コンテナ内部から外部へ出る場合のProxyとは違う

***
docker.serviceをコピー

```
# cp /usr/lib/systemd/system/docker.service /etc/systemd/system/
```

コピーしたdocker.serviceの`ExecStart`コマンドの直前にProxyの設定を追加

```docker.service
Environment="HTTP_PROXY=http://user:pwd@proxy.example.com:8080"
```

設定を再読込 & Docker再起動

```
# systemctl daemon-reload
# systemctl restart docker
```
[JavaScript]コンソールで色を簡単につける『colo』使ってみた

中規模な開発になってくるとたくさんconsoleに出力しますよね。色分けしてると見やすくなるんじゃないかなと思います。面白そうなのでメモ。

# coloってなに

ブラウザのコンソールありますよね。Chromeだと`command + option + j`で表示できるアレです。そのコンソールの文字に色づけできるモジュールです。@yosuke_furukawa san が作成しました。gitとブログは以下。

+ git
    + [colo](https://github.com/yosuke-furukawa/colo)
+ ブログ
    + [consoleを簡単に色付けするモジュールのcoloを作った](http://yosuke-furukawa.hatenablog.com/entry/2014/09/04/114025)

もともとはnodeのために作られていたのをブラウザでも使えるようにしてくださったようです。

# サンプル

[開いたらコンソール表示してみてね](http://phi-jp.github.io/runstant/release/alpha/index.html#UEsDBAoAAAAAAHmAMkVd3hxlYAUAAGAFAAAEAAAAZGF0YXsidmVyc2lvbiI6IjAuMC4xIiwiY3VycmVudCI6InNjcmlwdCIsInNldHRpbmciOnsidGl0bGUiOiJ0ZW1wbGF0ZSAtIEVDTUFTY3JpcHQgNiIsImRldGFpbCI6IkVDTUFTY3JpcHQgNiDjga7jg4bjg7Pjg5fjg6zjg7zjg4jkvZzjgaPjgabjgb/jgb7jgZfjgZ/imaoifSwiY29kZSI6eyJodG1sIjp7InR5cGUiOiJodG1sIiwidmFsdWUiOiI8IURPQ1RZUEUgaHRtbD5cbiBcbjxodG1sPlxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIiAvPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCB1c2VyLXNjYWxhYmxlPW5vXCIgLz5cbiAgICAgICAgPG1ldGEgbmFtZT1cImFwcGxlLW1vYmlsZS13ZWItYXBwLWNhcGFibGVcIiBjb250ZW50PVwieWVzXCIgLz5cbiBcbiAgICAgICAgPHRpdGxlPiR7dGl0bGV9PC90aXRsZT5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIiR7ZGVzY3JpcHRpb259XCIgLz5cblxuICAgICAgICA8c3R5bGU+JHtzdHlsZX08L3N0eWxlPlxuXG4gICAgPC9oZWFkPlxuICAgIDxib2R5PlxuICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vZ29vZ2xlLmdpdGh1Yi5pby90cmFjZXVyLWNvbXBpbGVyL2Jpbi90cmFjZXVyLmpzXCI+PC9zY3JpcHQ+XG4gICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9nb29nbGUuZ2l0aHViLmlvL3RyYWNldXItY29tcGlsZXIvc3JjL2Jvb3RzdHJhcC5qc1wiPjwvc2NyaXB0PlxuICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vcmF3Z2l0aHViLmNvbS95b3N1a2UtZnVydWthd2EvY29sby9tYXN0ZXIvY29sby5qc1wiPjwvc2NyaXB0PlxuICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgIHRyYWNldXIub3B0aW9ucy5leHBlcmltZW50YWwgPSB0cnVlO1xuICAgICAgICA8L3NjcmlwdD5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+JHtzY3JpcHR9PC9zY3JpcHQ+XG4gICAgPC9ib2R5PlxuPC9odG1sPiJ9LCJzdHlsZSI6eyJ0eXBlIjoiY3NzIiwidmFsdWUiOiJib2R5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIiNlZWVcIjtcbn0ifSwic2NyaXB0Ijp7InR5cGUiOiJqYXZhc2NyaXB0IiwidmFsdWUiOiIvKlxuICogY29sbyDjgrXjg7Pjg5fjg6tcbiAqL1xuXG4vLyBjb25zb2xlLmxvZ+ebtOaOpeWPqeOBjeOBn+OBhOS6uuWQkeOBkVxuY29uc29sZS5sb2coXCIlY1wiK1wi44OG44K544OIXCIsIGNvbG8uYm9sZC51bmRlcmxpbmUucmVkKCkuc3R5bGVzKTtcblxuLy8gY29uc29sZS5sb2fjgpLjg6njg4Pjg5fjgZfjgZ/plqLmlbDkvb/jgYZcbmNvbG9nKGNvbG8uYmx1ZShcIuODhuOCueODiFwiKSk7XG4ifX19UEsBAhQACgAAAAAAeYAyRV3eHGVgBQAAYAUAAAQAAAAAAAAAAAAAAAAAAAAAAGRhdGFQSwUGAAAAAAEAAQAyAAAAggUAAAAA)

# 仕組み

`console.log("%c"+"テスト", "color: red;")`
という感じで、第二引数でCSSを指定するとできます。
この機能を応用して作成したのが[colo](https://github.com/yosuke-furukawa/colo)です。
mac iTerm2 マウスでスクロールバッファ（ステータス付）

iTerm2（mac）でマウスのスクロールで履歴をスクロールしようとすると、画面ごとスクロールしてしまってうまくいかない。
最初は設定が悪いと考え.screenrcを見直す

```c
hardstatus alwayslastline "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %Y %m/%d %C%a "
```

これが、ステータスバーを常に最後の行に出すという設定
まずはこの１行を消してみたところ、スクロールされるようになった！
しかし、これではステータスバーが消えてしまい使いづらくなってします。

その後も色々試したが、うまくスクロールされる事は無かった。

それで、iTermのPreferenceの下記を確認したところ
![スクリーンショット 2014-09-18 14.40.31.png](https://qiita-image-store.s3.amazonaws.com/0/25625/0926412a-23a6-9c1e-2dcc-0dcdfc61798f.png)

```
□ Save lines to scrollback when an app status bar is present
```

おぉ、まさに!
これにチェックを入れたら、スクロールされるようになりました
Backbone.js事始め その2


###ソースコード

[前回](http://qiita.com/tajihiro/items/f40008af9a439c52e79c)の記事に、さらに`View`を追加してみた。
ソースコードは長く感じるが、簡単なことしかやってない。

```index.html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

	<title>こんにちは。動物さん</title>

	<!-- テンプレート作成 -->
	<script type="text/template" id="animal-template">
		<div>
			こんにちは。<b><%- name %>ちゃん。</b>(<%- species %>)
		</div>
	</script>

	<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
	<script type="text/javascript" src="http://underscorejs.org/underscore-min.js"></script>
	<script type="text/javascript" src="http://backbonejs.org/backbone-min.js"></script>
</head>
<body>
	<h3>こんにちは。動物さん。</h3>
	<div id="myList"></div>

	<script type="text/javascript">
	(function() {
		//----------
		// Model作成
		//----------
		var Animal = Backbone.Model.extend({
			//Attribute(属性)
			defaults: {
				species: "Animal",
				name: "None"
			},
			//コンストラクタ
			initialize: function(){
				console.log("初期化処理 : " + this.get("species"));
			},
			//メソッド
			call: function(){
				console.log("動物 : " + this.get("species"));
				console.log("私の名前は" + this.get("name") + "です。");
			}
		});
		//Animalのインスタンス化	
		var none = new Animal();

		//Animal(犬)のインスタンス化	
		var dog = new Animal({
			species: "犬",
			name: "ポチ"
		});
		//Animal(猫)のインスタンス化	
		var cat = new Animal({
			species: "猫",
			name: "タマ"
		});

		//----------
		// View作成
		//----------
		var BaseView = Backbone.View.extend({
			tagName: "div",
			//id: "myDivId",
			className: "myDivClass",
			//テンプレート作成
			template: _.template($('#animal-template').html()),
			render: function(){
				this.$el.html(this.template(this.model.toJSON()));
				return this;
			},
			//イベント定義
			events: {
				"click": "call"
			},
			//イベント実装
			call: function(){
				this.model.call();
				//alert(this.model.get("name"));
			}
		});
		var dogDiv = new BaseView({model: dog});
		var catDiv = new BaseView({model: cat});
		$('#myList').append(dogDiv.render().el);
		$('#myList').append(catDiv.render().el);

	})();
	</script>
</body>
</html>
```

###実行結果

ブラウザ上の文字をクリックすると、`Model`に実装したメソッドが実行され、コンソールに結果が表示される。

![スクリーンショット 2014-09-18 15.27.51.png](https://qiita-image-store.s3.amazonaws.com/0/3184/75185169-aaad-aa23-3b00-9a1852c8dbf0.png "スクリーンショット 2014-09-18 15.27.51.png")
PackerでCentOS7のBOXを作成 (Parallels用)


そろそろCentOS7試したいなー、ということで。
ネットワーク設定のエラーは未解決。

Parallels10にアップグレードしたところ、Virtualboxが同時起動できるようになったので、もうparallels用BOX作らなくてもいいんじゃない、という気もしつつ。

## 環境
- OSX 10.9.4 (Mavericks)
- Parallels Desktop 10
- Vagrant 1.6.5
- Packer v0.7.0

## BOX生成手順

### 0.Parallelsの追加ソフト
Parallels Virtualization SDK 10 for Mac をインストール
[Download Parallels Desktop 10 for Mac](https://www.parallels.com/jp/products/desktop/download/)

### 1.Packerのインストール
```bash
brew update
brew install homebrew/binary/packer
```

### 2.ParallelsのBOX生成に必要なツール導入
```bash
vagrant plugin install vagrant-parallels
brew tap rickard-von-essen/formulae
brew install --HEAD prl-utils
```

### 3.BOX生成
```bash
git clone git@github.com:hayori/packer-vanilla-box.git
cd packer-vanilla-box/centos/7
packer build -only=parallels-iso centos7.json
vagrant box add centos7-parallels artifacts/centos7-parallels.box
```

### 4.VagrantにBOX追加
```bash
vagrant box add centos7-parallels artifacts/centos7-parallels.box
```

## とりあえず、使うだけなら
BOX公開したので、以下で使えると思います。おそらく。

```bash
vagrant init hayori/centos-7.0
vagrant up --provider=parallels
```

## 補足
### メモリ、CPU

```ruby:Vagrantfile
config.vm.provider "parallels" do |v|
  v.memory = 2048
  v.cpus = 4
end
```


### 【未解決】ネットワーク設定を変更する

```ruby:Vagrantfile
config.vm.network "private_network", ip: "192.168.33.100"
```

**エラー。** Virtualbox版だと上手く動くので、vagrant-parallels に問題あるのかな？？？
/vagrant ディレクトリでのファイル共有、インターネットアクセスは問題なさそう。

```bash:ERROR
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

/sbin/ifup eth1

Stdout from the command:

ERROR    : [/etc/sysconfig/network-scripts/ifup-eth] Device eth1 does not seem to be present, delaying initialization.

Stderr from the command:
```

## 参考

- [Packer で Vagrant の Base Box を作ってみる | CUBE SUGAR STORAGE](http://momijiame.tumblr.com/post/80171332872/packer-vagrant-base-box)
- [Parallels Builder (from an ISO) - Packer](http://www.packer.io/docs/builders/parallels-iso.html)
C# の IndexOf における長音符と「ゝ」について

# ここで問題です

以下のコードを実行すると何が表示されるでしょうか？

```csharp
static void Main(string[] args)
{
    string s1 = "あゝ人生に涙あり";
    string s2 = "あー夏休み";
    Console.WriteLine(s1.IndexOf("ゝ"));
    Console.WriteLine(s1.IndexOf("ー"));
    Console.WriteLine(s1.IndexOf("ｰ"));
    Console.WriteLine(s2.IndexOf("ゝ"));
    Console.WriteLine(s2.IndexOf("ー"));
    Console.WriteLine(s2.IndexOf("ｰ"));
}
```

正解はこちら

![long1.png](https://qiita-image-store.s3.amazonaws.com/0/48120/c80ab1e4-a722-504f-8020-66223fa9b3af.png)


(　ﾟдﾟ)

# どういうことなの

原因は IndexOf のデフォルトが `CurrentCulture` だから
これだと [厳密さを要求しない比較](http://dobon.net/vb/dotnet/string/stringequals.html#equals) になる
同様のケースでは [こんな事案](http://qa.atmarkit.co.jp/q/425/) も
しかしまさかこんなものまで……

# どうすればいいの

以下のように比較方法を `Ordinal` （＝単純なバイト比較）にしてやればいい

```csharp
static void Main(string[] args)
{
    string s1 = "あゝ人生に涙あり";
    string s2 = "あー夏休み";
    Console.WriteLine(s1.IndexOf("ゝ", StringComparison.Ordinal));
    Console.WriteLine(s1.IndexOf("ー", StringComparison.Ordinal));
    Console.WriteLine(s1.IndexOf("ｰ", StringComparison.Ordinal));
    Console.WriteLine(s2.IndexOf("ゝ", StringComparison.Ordinal));
    Console.WriteLine(s2.IndexOf("ー", StringComparison.Ordinal));
    Console.WriteLine(s2.IndexOf("ｰ", StringComparison.Ordinal));
}
```

この実行結果がこちら
もう `Ordinal` がデフォルトでいいんじゃないかな……？

![long2.png](https://qiita-image-store.s3.amazonaws.com/0/48120/b4cb2fc5-22dd-99a8-3e70-dab855455e2f.png)

# 結論

[StringComparison ちゃんと指定しましょうね](http://msdn.microsoft.com/ja-jp/library/dd465121(v=vs.110).aspx#choosing_a_stringcomparison_member_for_your_method_call)

# （追記）ブルータスお前もか

他にも長音符とみなされるものがありそうな雰囲気だったので調べてみました

```csharp
static void Main(string[] args)
{
    string s1 = "あー夏休み";
    Console.WriteLine("ゝ:" + s1.IndexOf("ゝ"));
    Console.WriteLine("ー:" + s1.IndexOf("ー"));
    Console.WriteLine("ｰ :" + s1.IndexOf("ｰ"));
    Console.WriteLine("～:" + s1.IndexOf("～"));
    Console.WriteLine("~ :" + s1.IndexOf("~"));
    Console.WriteLine("々:" + s1.IndexOf("々"));
    Console.WriteLine("ゞ:" + s1.IndexOf("ゞ"));
    Console.WriteLine("ヽ:" + s1.IndexOf("ヽ"));
    Console.WriteLine("ヾ:" + s1.IndexOf("ヾ"));
    Console.WriteLine("- :" + s1.IndexOf("-"));
    Console.WriteLine("－:" + s1.IndexOf("－"));
    Console.WriteLine("―:" + s1.IndexOf("―"));
    Console.WriteLine("‐:" + s1.IndexOf("‐"));
    Console.WriteLine("= :" + s1.IndexOf("="));
    Console.WriteLine("＝:" + s1.IndexOf("＝"));
    Console.WriteLine("＿:" + s1.IndexOf("＿"));
    Console.WriteLine("_ :" + s1.IndexOf("_"));
}
```

この結果がこちら

![long3.png](https://qiita-image-store.s3.amazonaws.com/0/48120/7b0fdbaa-d337-9ddf-5f7f-7978949ef835.png)

(　ﾟдﾟ)

( ﾟдﾟ )

どうやら `々`、`ゞ`、`ヽ`、`ヾ`、`―` が長音符とみなされるようです
探せばもっとあるかも……
Face Tracking Effectorがあんまりカッコいいモンだからheadtrackrを触ってみた

## 流行ってんの?

最近、某イベントで顔追跡を使った凄いアプリを目撃しました。

- [Face Tracking Effector (Web Music ハッカソン #3優勝作品)](http://himakan.github.io/facetracking-effector/)

なんか、メチャメチャかっこいい！

- [LiveBeats (g200kgさん作のVJアプリ)](http://g200kg.github.io/LiveBeats/livebeats.html)

これも、顔認識ですね。なんか流行ってるんですか？

## headtrackrを使ってみる

というわけで、Face Tracking Effectorで使ってる[headtrackr](https://github.com/auduno/headtrackr/)を私も使ってみることに。

[headtrackrのreadme.md](https://github.com/auduno/headtrackr/)を見ると、そんなに難しくなさそうです。

書いてある通りにやってみることに。

まず、

```html
<script src="headtrackr.min.js"></script>
```

これは、コピペ。

```html
<canvas id="inputCanvas" width="100%" height="100%" style="display:none"></canvas>
<video id="inputVideo" autoplay loop></video>
<script type="text/javascript">
  var videoInput = document.getElementById('inputVideo');
  var canvasInput = document.getElementById('inputCanvas');

  var htracker = new headtrackr.Tracker();
  htracker.init(videoInput, canvasInput);
  htracker.start();
</script>
```
ここもコピペw （Canvasのサイズは適宜変更）

あとは、イベントリスナーを追加しときます。

```js
var head = {};
document.addEventListener('headtrackingEvent',function(event){
  head.x = event.x;
  head.y = event.y;
  head.z = event.z;
});
```

まー、こんな感じ。
びっくり！簡単！

## よっしゃ！！！？

というわけで、私も顔追跡アプリを作ってみました。

<a href="http://img.dfm.lrv.jp/head/kao/"><img src="http://img.dfm.lrv.jp/head/kao.png"></a>
[画像クリックでアプリ起動]

しかし。。。。かっこわる！（悲）

## 教訓

**『同じライブラリを使ったからと言ってカッコいいモノが作れるわけじゃない！』**

ふん！！！
RubyMotion for Androidを用いてサンプルアプリを起動する方法

RubyMotionのアップデートをすると、Android対応に向けたプレリリース版が入手できる旨の告知がありました。
早速インストールし、

```bash
$ sudo motion update
Password:
Connecting to the server...
Downloading software update...
######################################################################## 100.0%
Installing software update...
Software update installed.

= RubyMotion 2.33 =

  * Added support for installing pre-releases of RubyMotion. The
    `sudo motion update --pre' command will install a pre-release build in
    `/Library/RubyMotionPre'. Currently, the pre-release channel contains
    the first beta of RubyMotion for Android. Enjoy! ^_^

(Run `motion changelog` to view all changes.)
```

## プレリリース版のRubyMotion for Androidをインストールする

```bash
$ sudo motion update --pre
Password:
Connecting to the server...
Downloading software update...
######################################################################## 100.0%
Installing software update...
RubyMotion pre-release update installed in /Library/RubyMotionPre

= RubyMotion 3.0 =

  * First public beta with Android support. Make sure to read the "Getting
    Started" guide on the Developer Center in order to properly set up the
    environment. You also recommend that you read the "Runtime" and "Project
    Management" guides.
(Run `motion changelog` to view all changes.)
```

無事にインストールできました。
ブランクアプリケーションはこのように作るようです。

```bash
$ motion create --template=android Hello
    Create Hello
    Create Hello/.gitignore
    Create Hello/app/main_activity.rb
    Create Hello/Rakefile
$ cd Hello/
$ rake device
    ERROR! app.sdk_path should point to a valid Android SDK directory.
```

今回、Androidのadb環境ではなかったので起動していませんが、
その環境の用意があれば、すんなり起ち上がりそうです。

## サンプルアプリケーションを起動する

公式にサンプルアプリケーションが配布されています。

RubyMotionSamples/android at master · HipByte/RubyMotionSamples
https://github.com/HipByte/RubyMotionSamples/tree/master/android

* Conference
* Hello
* Paint
* States
* Timer
* WebViewDemo

これを用いれば、次のようにRubyでの実装例と共に確かめられますね。

```bash
$ git clone https://github.com/HipByte/RubyMotionSamples.git
Cloning into 'RubyMotionSamples'...
remote: Counting objects: 1494, done.
remote: Compressing objects: 100% (929/929), done.
remote: Total 1494 (delta 499), reused 1223 (delta 430)
Receiving objects: 100% (1494/1494), 11.37 MiB | 1.61 MiB/s, done.
Resolving deltas: 100% (499/499), done.
Checking connectivity... done.
$ cd RubyMotionSamples/android/
Conference/  Hello/       Paint/       README       States/      Timer/       WebViewDemo/
$ cd RubyMotionSamples/android/WebViewDemo/
$ rake device
```

## 併せて読みたい関連ページ

#### InfoQ による翻訳記事

RubyMotionがAndroidのサポートを発表
http://www.infoq.com/jp/news/2014/08/rubymotion-android

#### 発表ブログ

Announcing the public Beta of RubyMotion for Android - RubyMotion Blog
http://blog.rubymotion.com/post/97668474211/announcing-the-public-beta-of-rubymotion-for-android

#### 公式ガイド

RubyMotion Runtime Guide - Android
http://www.rubymotion.com/developer-center/guides/runtime/#_android

#### サンプルアプリ

These samples require RubyMotion for Android beta (3.0).
https://github.com/HipByte/RubyMotionSamples/tree/master/android
Qiita:Teamの投稿などをメール通知する

# 概要
Qiita:Teamで投稿などを通知してくれる機能がないので、メール通知機能を作りました。

# 動作方法
1. 適当なPHPが動くサーバに下記phpをホスティング
2. Qiita:TeamのWebHookに以下のようなURLを設定

例）[host]/qiita.php?mailto=[mailaddress]

# コード
```php:qiita.php
if ($to = $_GET['mailto']) {
	$payload = json_decode(file_get_contents('php://input'));
	$action = "{$payload->model}_{$payload->action}";
	if (is_callable($action)) {
		list($subject, $body) = $action($payload);
		mb_send_mail($to, $subject, $body);
	}
}

function item_created($payload) {
	$item = $payload->item;
	$user = $payload->user;
	$body = <<<BODY
{$user->url_name}さんが「{$item->title}」を投稿しました
{$item->url}
BODY;
    return array("Qiita:Teamに記事が投稿されました", $body);
}

function comment_created($payload) {
	$item = $payload->item;
	$comment = $payload->comment;
	$user = $comment->user;
	$body = <<<BODY
{$user->url_name}さんが「{$item->title}」にコメントしました
{$item->url}
{$comment->raw_body}
BODY;
    return array("Qiita:Teamにコメントが投稿されました", $body);
}
```

# 対応機能
新規記事の投稿とコメントの投稿のみ対応しています。
その他機能は、上記コードと[Qiita Webhook document](https://qiita.com/docs/webhook)を参考に、追加すれば動くかと思います。
iOS8 Safari でデスクトップ用サイトを表示

# デスクトップ用サイトを表示
iOS8 Safari に**「デスクトップ用サイトを表示」**機能が追加された。
スマートフォンに最適化されたサイトじゃなくてPC版で見たいんだよーと思っていた方には朗報だろう。（まぁ、他のブラウザで補えていたかもしれないが、、、）

## 切り替え方
というわけで、早速試してみようと思ったが、どうやって切り替えるのか戸惑ったので、切り替え方を記載しておきます。

* iOS8 Safari で切り替えたいページを開く
* ロケーションバーをタップする
* お気に入りに入っているサイトやソフトウェアキーボードが表示されると思うが、ここでお気に入りなどが表示されているエリアを下方向にスワイプする

これで以下のように「デスクトップ用サイトを表示」が現れる。
![ios8-safari-desktop-view.png](https://qiita-image-store.s3.amazonaws.com/0/39392/0cf2b633-fdc8-3a79-58e9-3e9def0f3cd4.png)

## UserAgent
切り替えの際の気になる点として、UserAgentってどうなってるのっていうのがあると思うので、調べてみました。

<dl>
<dt>通常</dt>
<dd>Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A365 Safari/600.1.4</dd>
<dt>デスクトップ用サイトを表示</dt>
<dd>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/538.44 (KHTML, like Gecko) Version/8.0 Safari/538.44</dd>
</dl>

「デスクトップ用サイトを表示」の際は OSX と偽装しているみたいですね。
Podfileに指定した:pathからローカルの *.podspec.json を読み込む

0.33.1時点ではPodfileに指定した:pathからローカルの *.podspec.json が読み込めない。

https://github.com/CocoaPods/CocoaPods/issues/2320

で対応したので、`0.34.0.rc2`以降を使えばよい。
Androidアプリでキーボードの上までスクロールできるようにする

Androidアプリで`ScrollView`を表示中にキーボードを表示すると、一番上までスクロールしても画面の下の部分がキーボードに隠れてしまいます。
これを、キーボードを表示したままでも画面最下部までスクロールできるようにするには、以下のようにします。

### 1. ManifestにwindowSoftInputModeを設定する
AndroidManifest.xmlの`activity`タグに`android:windowSoftInputMode="adjustResize"`を追加します。
これによって、キーボードが表示されたらアクティビティのサイズがキーボード分小さくなるようになります。

```xml:AndroidManifest.xml
<manifest
    ... >
    <application
        ... >

        <activity
            android:name="hoge.MyActivity"
            ...
            android:windowSoftInputMode="adjustResize" >
        </activity>

    </application>
</manifest>
```

### 2. ScrollViewのweightを1にする
`ScrollView`の`weight`を`1`にします。
これにより、アクティビティがリサイズされても`ScrollView`が画面いっぱいに広がるようになります。

```xml:myactivity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" >

        ...

    </ScrollView>

</RelativeLayout>
```


　
※ [こちら](http://hrio.edoblog.net/%E9%96%8B%E7%99%BA%E3%83%A1%E3%83%A2/%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%81%AE%E4%B8%8A%E3%81%A7%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B)を参考にしました。
git リポジトリの向き先 url を変更する


`.git/config` 直接いじってもいいと思いますけどね。

```bash
git remote set-url origin git@github.com:8mamo10/new.git
```

古いレポジトリに触りたいこともありそうな場合、origin とは別名で登録しておくとよさそう。

```bash
git remote set-url old-repos git@github.com:8mamo10/old.git
```
Androidアプリで画面の一部をスクロールさせる

Androidアプリで画面の一部をスクロールさせる場合は、`ScrollView`の`layout_above``layout_below`を使用します。
ヘッダやフッタがある画面でメインの部分だけスクロールさせたい場合などに便利です。

```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:orientation="vertical" >

        ...

    </LinearLayout>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/footer"
        android:layout_below="@id/header" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            ...

        </LinearLayout>
    </ScrollView>

    <LinearLayout
        android:id="@+id/footer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="vertical" >

        ...

    </LinearLayout>
</RelativeLayout>
```

* * *

`ScrollView`とその周りの要素は並列の階層であるのがよさそうです。
少し試してみたところでは、以下のようにフッタと並列なレイアウトの中に`ScrollView`を書くとうまく動きませんでした。

```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            ...

        </LinearLayout>

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@id/footer" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                ...

            </LinearLayout>
        </ScrollView>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/footer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="vertical" >

        ...

    </LinearLayout>
</RelativeLayout>
```

※ [こちら](http://androlab.blogspot.jp/2010/12/scrollview.html)の記事を参考にしました。
emacs flymakeでSwiftの構文チェック

swiftソースがあるディレクトリに下記Makefileを置く。

```mf:Makefile
SWIFT=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift
SDKPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk
SDK=-sdk $(SDKPATH)
OPTIONS=-parse -DDEBUG=1 -target i386-apple-ios8.0

check-syntax:
	$(SWIFT) $(SDK) $(OPTIONS)  ${CHK_SOURCES}
```
imageのサイズを取得する際の注意



Javascriptでimageの幅と高さを取得したい場合、
cssが当たっているとオリジナル画像のサイズを取得することができない。

FirefoxやSafariでは naturalWidth や naturalHeight といったプロパティが用意されているが、
クロスブラウザで使うことができない。

従って、オリジナル画像のサイズを取得するには、
一時的にimageに対するcssを解除 (widthとheightをautoに ) してから取得するか、

新たに Imageオブジェクトを生成して取得する必要がある。

例

```
var image = new Image();
var width;
var height;

image.onload = function(){
  width = image.width;
  height = image.height;
};
image.src = 'hogehoge.jpg';

```
Windows環境でJavaのVersionを複数共存させる

# 概要
私の開発環境は、現在、Java7を使用している。
しかし、今回Java6を使った開発も必要になったので
Windows環境でJavaを複数共存させる方法を紹介します。

## Javaをインストール
まず、Java7を以下のURLからDLしてインストール。
※「Java SE Development Kit 7u60」のWindows版をDL(Accept License Agreementにチェックを入れないとDLできないので注意)

<a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html" title="Java">http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html</a>

インストール後、コマンドプロンプトから「java -version」を実行すると、
当然Java7が返ってくる。
※現在はJava6とJava7が共存している状態
<pre>
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)
</pre>

## JavaのVersionを変更
次に使用したいVersionに変更する。(Java7を使用したい場合はこのままでOK)
※今回はデフォルトをJava6にしたい

C:\Windows\System32 直下に以下の3ファイルが存在するのでリネームする。

・java.exe → java7_exe
・javaw.exe → javaw_exe
・javaws.exe → javaws_exe

このままでは、Javaコマンドを実行できないのでJava6のインストールディレクトリから、
上記の3ファイルをC:\Windows\System32 直下にコピーする。(java.exe, javaw.exe, javaws.exe)

続いてJavaのVersion情報はレジストリに保持しているため、
レジストリを書き換える必要がある。

<pre>
1.スタート(Windows)ボタンを押す
2.検索フィールドに「REGEDIT」と入力
3.レジストリエディタを起動
4.HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersionの値を「1.7」から「1.6」に変更
</pre>

作業的には終了だが、最後に確認
コマンドプロンプトで「java -version」を実行して下記が返ってくればOK
<pre>
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
</pre>
[MySQL] InnoDB rebuilding table to add column FTS_DOC_ID

InnoDB に FULLTEXT インデックスを貼ったら、見たこと無い warning がでた。


```sql:
mysql> show warnings;
+---------+------+--------------------------------------------------+
| Level   | Code | Message                                          |
+---------+------+--------------------------------------------------+
| Warning |  124 | InnoDB rebuilding table to add column FTS_DOC_ID |
+---------+------+--------------------------------------------------+
1 row in set (0.00 sec)
```

「``FTS_DOC_ID``というカラムを加えてリビルドしろ」ってことなのかしら。

```sql:
mysql> alter table hoge_table add FTS_DOC_ID bigint unsigned not null auto_increment primary key;
```

で解決しましたが、理解はしてません。


### 追記
上記の設定だと、今度は、``Invalid InnoDB FTS Doc ID``というエラーに遭遇…


### 参照
[innodb-fulltext-index](http://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html)
MacにPHPをMySQL Native Driver無しでインストールする

概要
---
Homebrewでインストールしても[Liip](http://php-osx.liip.ch/)でInstallしても通常は[MySQL Native Driver](http://dev.mysql.com/downloads/connector/php-mysqlnd/)(以下**mysqlnd**)が一緒にインストールされる

通常は問題ないが、若干libmysqlとmysqlndは[挙動が違う](https://bugs.php.net/bug.php?id=54190)ため本番サーバでlibmysqlを使っている場合にはmysqlndを無効化したくなる

手順
---
brewコマンドにoptionを付けてphpをinstallすればいい。


詳細なロジックは以下のファイルを確認してください。

```shell
/usr/local/Library/Taps/homebrew/homebrew-php/Formula/php54.rb
/usr/local/Library/Taps/homebrew/homebrew-php/Abstract/abstract-php.rb
```

```shell
# コメントアウトされたコマンドは必要に応じて実行する
# brew upgrade
# brew update
# brew uninstall php54
brew install --with-libmysql php54
```
WordPressでオリジナルのフィードを配信する方法（入り口）


## WordPressが標準で出力するフィード
WordPressがデフォルトで出力する（管理画面から操作可能な）フィードは４つですかね。

http://example.com/?feed=rss
http://example.com/?feed=rss2
http://example.com/?feed=rdf
http://example.com/?feed=atom

カスタムパーマリンク設定していたら、
http://example.com/feed/
http://example.com/feed/rss/
http://example.com/feed/rss2/
http://example.com/feed/rdf/
http://example.com/feed/atom/

feed/はデフォルトに設定してあるフィードを呼びます。特に指定した覚えがなければrss2になるみたいですね。

メディアサイトを作成したときに、キュレーションサイトと連携したいという要望が最近非常に多いです。
ただ、連携方法は簡単で、そのキュレーションサイト用のフィードを作成するだけなんですね。

というわけで、オリジナルのフィードの作成方法です。

## URLの作成

### カスタムパーマリンクを利用しない場合
http://example.com/?feed=rss
http://example.com/?feed=rss2
http://example.com/?feed=rdf
http://example.com/?feed=atom

標準のこれらに加えて、
http://example.com/?feed=original
を作成します。

### カスタムパーマリンクを利用する場合
http://example.com/feed/
http://example.com/feed/rss/
http://example.com/feed/rss2/
http://example.com/feed/rdf/
http://example.com/feed/atom/

これらに加えて、
http://example.com/feed/original/
を作成します。

試しにアクセスしてみると、こんなエラーが出るかと思います。

![WordPress_›_エラー.png](https://qiita-image-store.s3.amazonaws.com/0/41589/b76f058a-ce77-baf9-e561-bc0756eef0cd.png "WordPress_›_エラー.png")

WordPress が何らかして、テンプレートを探したけれど、失敗しちゃったって感じですね。

では、WordPress が何をやろうとしたのか、見てみましょう。

## WordPress が何をやろうとしたのか？
だいたいのイメージですが、URLにfeedキーワードが与えられたら、WordPress はフィードを出力する処理を始めようとします。

そこで呼び出されるのが、do_feed 関数です。
下記は、do_feed 関数の一部抜粋です。

```wp-includes/functions.php

$feed = get_query_var( 'feed' );
	
// Remove the pad, if present.
$feed = preg_replace( '/^_+/', '', $feed );

if ( $feed == '' || $feed == 'feed' )
    $feed = get_default_feed();
	
$hook = 'do_feed_' . $feed;
if ( ! has_action( $hook ) )
    wp_die( __( 'ERROR: This is not a valid feed template.' ), '', array( 'response' => 404 ) );

```

$wp_query の、feed の値に応じて処理を振り分けようとします。
今回の想定では、feed には、original が格納されていることになりますね。

do_feed_original

そして、というフックを実行しようと試みます。

先ほど試した場合ですと、このフックが設定されていなかったがために、テンプレートが見つからない旨のエラーが表示された訳ですね。

つまり、このフックを作成すれば、いくらでもオリジナルフィードが作れそうです。

## オリジナルフィードのテンプレートを設定する

functions.php などで、do_feed_original フックを設定します。

具体的にはこんな感じです。

```functions.php
add_action( 'do_feed_original', 'do_feed_original' );
function do_feed_original() {
    $feed_template = get_template_directory() . '/feeds/original.php';
    load_template( $feed_template );
}
```

テーマファイル内の、feeds ディレクトリ以下同名のファイルをテンプレートとして読み込みませます。
このテンプレートは、デフォルトのテンプレートが、wp-includes/feed-*.php に、それぞれありますので、最も近いものをコピーし、作成すると簡単です。

あとは、目的にあわせて、テンプレートを調整すればいいだけですね。

これで、簡単にオリジナルフィードを作成することができそうです。
[VBS：備忘録]よくあるメールテンプレをVBSで作成する方法の一例

**概要：**
　メールテンプレートを自動生成するVBS。

**目的：**
　業務で扱うメールについて、いちいち作成したり編集したりするのがめんどくさかったので、VBS化しました。
　メールの内容を一部編集しなければいけない時があるので、自動送信までは組み込んでいません。
　送信する内容がほぼ不変であり、チェックする必要がなければタスクスケジューラやJP1・Systemwalker等と組み合わせれば自動送信も可能です。
　# そこまでするならもうPGを別で用意した方がいいかもしれませんが

**プログラム：**

```vbnet
 Option Explicit
'*************************************************************
'* メールテンプレート
'*************************************************************
'*************************************
'* 変数宣言
'* 変数名は使いやすい用にリファクタリングしてください.
'*************************************
Dim outlook, item, mailBody, mailSubject, name, mailAddress, timeZone, byLine, mailTo, mailCc, kaigyo

'*************************************
'* 個人で入力させる項目郡
'*************************************
' 名前
name = "太郎"
' 自分のメールアドレス
mailAddress = "taro.test@test.com"
' 送信先：TO
mailTo = "jisan.hanasaka@test.com;"
' 送信先：CC
mailCc = ""

'*************************************
'* 初期処理
'*************************************
Set outlook = CreateObject("Outlook.Application")
Set item = outlook.CreateItem(0)

' 改行コード
kaigyo = vbCrLf

'*************************************
'* 時刻を取得する
'*************************************
timeZone = Right("0" & Hour(Now) - 1, 2)  & ":01-" & Right("0" & Hour(Now), 2) & ":00"

'*************************************
'* メール件名
'* 以下の例では日時等も加工している.
'*************************************
mailSubject = "件名サンプル " 
mailSubject = mailSubject & Year(Date) & "/" & Right("0" & Month(Date), 2) & "/" & Right("0" & Day(Date), 2)

'*************************************
'* メール本文
'*************************************
mailBody = "本文サンプル" & kaigyo
mailBody = mailBody & "こんにちは、" & name & "です。" & kaigyo & kaigyo
mailBody = mailBody & "頑張って改行してます。" & kaigyo
mailBody = mailBody & "面倒くさいです。" & kaigyo & kaigyo

'*************************************
'* 署名を作る
'*************************************
byLine = "----------------------------------------------" & kaigyo
byLine = byLine & "業務で使うなら使ってください。" & kaigyo
byLine = byLine & "部署名変更時は注意！！！" & kaigyo
byLine = byLine & "----------------------------------------------" & kaigyo

mailBody = mailBody & byLine

'*************************************
'* メール内の設定
'*************************************
item.To = mailTo
item.Cc = mailCc
item.Subject = mailSubject
item.Body = mailBody
item.Display
' 以下のコメントアウトを解除して、更に上のitem.Displayをコメントアウトすれば、
' メールの画面が表示されずにそのまま送信される。
' item.Send

'*************************************
'* 終了処理
'*************************************
Set item = Nothing
Set outlook = Nothing

WScript.Quit 0
```

**実行環境：**
　Win7Pro。
　Windows環境なら特に問題はないと思いますが...

**備考：**
　他にもテンプレソースを挙げてくれている人は多数いるので、それらを参考にしつつ、自分の使いやすい物を使用するといいかと思います。
NOREN〜コンテンツマネージャの構築〜

# はじめに

- アクションフィールドの読込み
- リストメニューの読込み

#アクションフィールドの読込み
コンテンツマネージャ側で作ったコンテンツ（アーティクル）を、
サイトマネージャ側に受け渡しをする設定を行います。

## コンテンツマネージャの設定

コンテンツカテゴリ内のアクションフィールド情報にて`設定`を押す

![img_01.jpg](https://qiita-image-store.s3.amazonaws.com/0/48560/6618cf59-fef1-7e43-a6a3-ade36b265b22.jpeg "img_01.jpg")
　
　


アクションフィールドの追加方法は以下の通り
1. 検索エリアに追加したい項目のアクションフィールドIDを入れ`検索 `を押す
2. 表示された項目にチェックを入れる
3. 下矢印ボタンを押し「使用するアクションフィールド一覧」に追加する
4. 最後に`検索 `を押す

![img_.jpg](https://qiita-image-store.s3.amazonaws.com/0/48560/7b063149-e7f9-81e0-4b86-897bf12ead61.jpeg "img_.jpg")
　
　
アクションフィールドが追加されました

![img_03.jpg](https://qiita-image-store.s3.amazonaws.com/0/48560/e781d9a6-3c61-924d-e06e-3265680e7d64.jpeg "img_03.jpg")
　
　
コンテンツマネージャのカテゴリIDを控えます

![img_04.jpg](https://qiita-image-store.s3.amazonaws.com/0/48560/0024bd5e-018d-37cc-0137-4f6a69cc1b8e.jpeg "img_04.jpg")
　
　
## サイトマネージャの設定

サイトカテゴリ内のアクションフィールド情報にて`設定`を押す

![img_05.jpg](https://qiita-image-store.s3.amazonaws.com/0/48560/7e800869-84e5-d2dc-e509-a173e7f73e18.jpeg "img_05.jpg")
　
カテゴリIDを検索欄に入力後検索をクリックすると、
該当のカテゴリで使用しているアクションフィールドが表示されるので`適用 `を押す

![img_06.jpg](https://qiita-image-store.s3.amazonaws.com/0/48560/8cf87f8d-c3dd-e3b8-1e1d-12b138b73038.jpeg "img_06.jpg")
　
　
項目が追加されました
![img_07.jpg](https://qiita-image-store.s3.amazonaws.com/0/48560/2dfcdabf-58ed-99d5-44a4-54eeb120e116.jpeg "img_07.jpg")
　
　
コンテンツを自動で読み込むための設定を行う
まずは`コンテンツの自動読込み設定 `を押す
![img_08.jpg](https://qiita-image-store.s3.amazonaws.com/0/48560/45d3d23c-b419-49d0-872f-55966fb42964.jpeg "img_08.jpg")
　
　
追加したいコンテンツを追加し`確認 `を押すと完了
![img_09.jpg](https://qiita-image-store.s3.amazonaws.com/0/48560/51a90f1c-502c-5c44-524f-83390e1ba647.jpeg "img_09.jpg")


# 併せて読む
[1. NOREN〜基礎〜](http://qiita.com/xxxamxxx/items/7e8e2bb3824b8f594e3d)
[2. NOREN〜アクションフィールドの作成〜](http://qiita.com/xxxamxxx/items/711c46e85ae1f55ee632)
[3. NOREN〜コンテンツマネージャの構築〜](http://qiita.com/xxxamxxx/items/19aa596e805075515f28)