OmniAICreator/Qiita-1.07M huggingface dataset:
[今から / 今さら] 始める Android Studio Setup (Hello world 付き)

# Mac に Android Studio をインストール

* Eclipse から卒業するために
    * Eclipse で Android 開発していた環境が前提であるため、Android SDK や Java 等は入っているものとする

* Android Studio のインストールから日本語化、Vim プラグインを入れるまでを記載

# インストール
* ダウンロードは [こちら](https://developer.android.com/sdk/installing/studio.html)
    * 同意してダウンロード (投稿時点のバージョンは v0.5.2)
* ダウンロードした android-studio-bundle-135.1078000-mac.dmg を実行
* Android Studio.app を Applications にコピー

 ![スクリーンショット 0026-06-25 19.15.24.png](https://qiita-image-store.s3.amazonaws.com/0/28573/8b1f9f53-b4ec-838b-eea9-1bb7c003ae1c.png)

# 起動確認
* 下記が表示されれば OK

 ![スクリーンショット 0026-06-25 19.28.30.png](https://qiita-image-store.s3.amazonaws.com/0/28573/cca9df70-f5dc-5bad-daa3-a564c806910d.png)


# 日本語化
## 事前準備
* Welcome 画面の Configure を選択し、次の画面の Preference を選択

　![スクリーンショット 0026-06-25 19.33.25.png](https://qiita-image-store.s3.amazonaws.com/0/28573/9543e63e-b8ac-4a08-1df6-c5e6e674fb59.png)

* Appearance を選択し、Override default fonts by (not recommended) にチェックを入れて OK

 ![スクリーンショット 0026-06-25 19.34.18.png](https://qiita-image-store.s3.amazonaws.com/0/28573/e1e5afd2-0852-2d58-dac9-8220e9a24801.png)

* Android studio を終了する

## 日本語化ファイルのダウンロードと配置
* https://github.com/yuuna/IDEA_resources_jp
    * 上記リポジトリを適当な場所へ clone
* ダウンロードしたファイルの resources_jp.jar を /Applications/Android Studio.app/lib にコピー
* ところどころ日本語化されていれば OK (すべてが日本語化するわけではないようです)

 ![スクリーンショット 0026-06-25 19.40.24.png](https://qiita-image-store.s3.amazonaws.com/0/28573/a7d96a61-dedd-0e04-3089-8eb1d23cc1b1.png)

# エミュレータの作成
* 一瞬戸惑ったので、エミュレータ作成手順も記載
* "ツール" -> "Android" -> "AVD Manager" を選択すると別ウィンドウが立ち上がる
    * 実際の作成手順は Eclipse と同様
    * AVD Manager のアイコンクリックでも可

# Vim のプラグイン (IdeaVim) 導入
* Android Studio 起動 -> "Configure" -> "プラグイン" を選択
* "Browse repositories" を選択し、検索ウィンドウに "IdeaVim" と入力
* 下記画面になるので "Install plugin" をクリック 

 ![スクリーンショット 0026-06-25 20.04.49.png](https://qiita-image-store.s3.amazonaws.com/0/28573/89510979-58b3-8d4e-4801-5f2405e362c0.png)

* Android studio 再起動

# Hello world を作成してみる
* New Project... を選択する

 ![スクリーンショット 0026-06-25 19.42.12.png](https://qiita-image-store.s3.amazonaws.com/0/28573/4f03f67d-1b44-279e-68cf-8a43bb8d0268.png)

* あとはデフォルトのまま、OK を押していく

 ![スクリーンショット 0026-06-25 20.08.28.png](https://qiita-image-store.s3.amazonaws.com/0/28573/6060c10e-02ae-f62c-82cc-8867dff64781.png)

* 先ほど作ったであろうエミュレータで実行

 ![スクリーンショット 0026-06-25 20.24.18.png](https://qiita-image-store.s3.amazonaws.com/0/28573/5d0a8c65-94ea-d0b1-4b49-aabbf5c6ac02.png)

* あとは Eclipse を煮るなり焼くなりしましょう
* ちなみに [このへん](http://blog.nkzn.info/entry/2014/03/21/015914) を見て移行のモチベーションを上げました


# 参考
* https://developer.android.com/sdk/installing/studio.html
* https://github.com/yuuna/IDEA_resources_jp
* http://blog.nkzn.info/entry/2014/03/21/015914
* http://ougiitirou.web.fc2.com/AndroidMain/android_staduo.html
[Ruby]mapで複数のメソッドチェーンを渡したい

# 背景
昨日新しいバージョンで今まで面倒だったことがとても簡単になった、というような気付きがあったので、
昔気づいた「こんなことが出来るようになったのか」な内容と、そこから考えてみたことを記事にしてみようと思います。

mapで変換しながらリストを組み立てるとき、単純に複数のメソッドを呼ぶだけってとき多くないでしょうか？
例えば、複数のオブジェクトのとある文字列プロパティーを取得したくて、

```rb
Vo = Struct.new(:prop1)
ary = [Vo.new("ab"), Vo.new("abc"), Vo.new("abcd")]
```

のようなaryから

```rb
["ab", "abc", "abcd"]
```

が欲しいんだけども、さらにそのそれぞれを大文字にした、

```rb
["AB", "ABC", "ABCD"]
```

が欲しい場合です。

# 問題
泥臭くすれば、

```rb
p ary.map {|e|
  e.prop1
}.map {|e|
  e.upcase
} #=> ["AB", "ABC", "ABCD"]
```

とmapを2回つなげれば実現できます。でも、これだと冗長ですよね。
で、1.9からシンボルに「&」を前置すると、Symbol#to_procが呼ばれてto_procした結果をブロックとして
渡せるようになりました。(1.8.7へはバックポートされた)

なので、上記の例は下記のように書けるようになりました。

```rb
p ary.map(&:prop1).map(&:upcase)
```

でも、これだと、さらに、反転(reverse)したリストが欲しい場合

```rb
p ary.map(&:prop1).map(&:upcase).map(&:reverse)
```

と、どんどんmapが重なって冗長になってきます。
「prop1で取得したプロパティーにupcaseした上で、reverseしたもののリストが欲しい」
というようなことが素直に出来ると嬉しいなぁとおもって考えたことがありました。

# 試してみたこと
symbolからto_procで作られる仕組みは、
to_procで、引数で渡されたreceiverに対して、sendで自分自身(Symbol)を渡す、という感じです。

```rb
class Symbol
  def to_proc
    lambda{|obj, *args|
      obj.send(self, *args)
    }
  end
end
```

みたいな感じですね。
なので、symbolやらprocやらを渡された時に、さらにこれらを包むようにlambda(またはproc)を作ってやれば、
メソッドの連鎖が実現できそうです。

ということで、

```rb
module ComposeUtil
  def >>(m)
    lambda do |obj, *args|
      m.to_proc.call(self.to_proc.call(obj, *args))
    end
  end
end

class Proc
  include ComposeUtil
end

class Symbol
  include ComposeUtil
end
```

というような`>>`メソッドを定義すれば、procが渡されても、symbolが渡されても、どんどん連鎖できます。
(普通、合成関数の表記法の f○g　の動きは、
   f(g(x)
 ですが、左から右に向かって進むようにみえるように` f >> g`を
   g(f(x))
 というような動きになるようにしています)

これで、`p ary.map(&:prop1).map(&:upcase).map(&:reverse)`と同様のことが、

```rb
p ary.map(&:prop1 >> :upcase >> :reverse)
```

で実現できます。

例えば、ここから、
prop1で取得したプロパティを大文字(upcase)にして反転(reverse)したものの最初の一文字(chars, first)の次の文字(succ)を2つ連結させたような値(これは無いのでlambdaを渡す)が欲しい場合

```rb
Vo = Struct.new(:prop1)
ary = [Vo.new("ab"), Vo.new("abc"), Vo.new("abcd")]

#普通に書いた場合
p ary.map(&:prop1).map(&:upcase).map(&:reverse).map(&:chars).map(&:first).map(&:succ).map {|x| x * 2}
#=>["CC", "DD", "EE"]

#>>で連鎖させた場合
p ary.map(&:prop1 >> :upcase >> :reverse >> :chars >> :first >> :succ >> ->(x){x * 2})
#=>["CC", "DD", "EE"]
```

と書けたりします。
MACでロケートコマンドを使用する。

MACでロケートコマンドを使えれば、
なにかと便利なので、導入するまでの手順を記載してみました。


まず簡単に　macのキーワードを探してみる。
`locate mac`

```lang:コンソール
WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
 
Please be aware that the database can take some time to generate; once
the database has been created, this message will no longer appear.
```

ocate.database がありませんメッセージが表示される。
メッセージの通り、下記を実行する
`$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist`

例えば、readme.txtの名前を探したいときは？
`locate readme.txt`

検索DBの更新は以下のコマンドで、
`/usr/libexec/locate.updatedb`
Capistranoでroleが空の場合でも処理を続行させる方法

# 問題

Capistrano は role が空の場合、以下の様なエラーが表示され処理が停止してしまう。

```shell-session
`deploy:your_task' is only run for servers matching {:roles=>[:role]}, but no servers matched
```

しかし、本番環境にはあるが開発環境には存在しないサーバも存在するので role を空にしたい場合がある。

# 解決方法

``:on_no_matching_servers`` パラメータに空の場合の処理を追加することができる。

```rb
namespace :deploy
  task :change_pathes, :roles => :special_roles, :on_no_matching_servers => :continue do
    # 処理
  end
end
after "deploy:update", "deploy:change_paths"
```

以下の様にスキップされる

```shell-session
** skipping `deploy:change_pathes' because no servers matched
```

# 参考

https://github.com/capistrano/capistrano/pull/51
【Chrome】オートコンプリートのとき、背景を黄色にしない

# 追記

- 2019/3/1 オートコンプリートの色が水色（#e8f0fe/rgb(232, 240, 254)）になったみたいです。

#CSSでの解決策

```css
input:-webkit-autofill {
	-webkit-box-shadow: 0 0 0px 1000px [背景にしたい色] inset;
}
```

#HTMLでの解決策

```html
<form autocomplete="off">
</form>
```

```html
<input autocomplete="off">
```

#jQueryでの解決策

```js
if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
    $('input').attr('autocomplete', 'off');
}
```

デモ：http://jsdo.it/Ituki/cenx
『情報科学入門―Rubyを使って学ぶ』第5章で、bench.rb のグラフ表示が表示されないときの対処法


![cover.jpg](https://qiita-image-store.s3.amazonaws.com/0/26536/e1da6040-028e-fddc-3435-f6024ba1172b.jpeg)

『[情報科学入門―Rubyを使って学ぶ](http://www.amazon.co.jp/dp/4130624520/)』（増原英彦、東京大学情報教育連絡会 著）


の「第5章 アルゴリズムと計算量」
で使う、bench.rb を[サポートページ](http://lecture.ecc.u-tokyo.ac.jp/johzu/joho-kagaku/text/)の[配布プログラム](http://lecture.ecc.u-tokyo.ac.jp/johzu/joho-kagaku/text/code/)からダウンロードして使っても、グラフ表示されませんでした。


調べてみると、グラフ表示をさせるには、gnuplotがインストールされている必要があるようです。

　
Mac（OS X）にHomebrewを使ってインストールする手順については、こちらを参考にしてください。
→・[gnuplotをHomebrewからインストールするときの手順 - Qiita](http://qiita.com/noanoa07/items/a20dccff0902947d3e0c)

　
####参考）
→・[『情報科学入門―Rubyを使って学ぶ』を読むのに必要なソフト一覧 - noanoa 日々の日記](http://blog.livedoor.jp/noanoa07/archives/1992376.html)
swiftでゲーム作成してる動画まとめ

swiftが発表されてから結構経ったので、色々なところでswiftの活動が行われてる感じみたい。

僕も発表されてから何から始めればいいのかわからなかったのでとりあえずTwitterでswiftについてエゴサーチしながら色々調べてみた。

その中でいくつかswiftとspritekitを使ってゲームを作っている動画があったのでここにまとめようと思う。

***
Youtube

○×ゲーム
[Swift Programming Tutorial Part 5: Making a Game (Tic Tac Toe with AI)]
https://www.youtube.com/watch?v=LkYpoRj-7hA
ソースコード
Source code: https://github.com/skipallmighty/SwiftTacToe


![iOS Simulator Screen Shot 2014.06.25 18.39.17.png](https://qiita-image-store.s3.amazonaws.com/0/37030/73936113-803d-0700-8b1d-80595486c880.png)

一般的な○×ゲームで人同士の対戦方式じゃなくて敵のAIが相手になってくれるみたい。ソース見た感じPlaygroundも少し使ってた。

***

Youtube

シューティングゲーム
part1
[Apple Swift Tutorial: Simple iOS Swift GAME Part 1]
https://www.youtube.com/watch?v=CpIoHPUyu8s

part2
[Apple Swift Tutorial: Simple iOS Swift GAME Part 2]
https://www.youtube.com/watch?v=ylIIy5EbsWQ&feature=youtu.be
サンプルコード
sample code:http://goo.gl/ZCUsII

タップしたらその位置に弾が飛んでいって落ちてくる敵を倒すゲーム。敵が一番下まで落ちたらゲームオーバー。イメージとしては Ray Wenderlichの[初心者の為のSprite Kit チュートリアル](http://www.raywenderlich.com/ja/51583/%E5%88%9D%E5%BF%83%E8%80%85%E3%81%AE%E7%82%BA%E3%81%AEsprite-kit-%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB)を縦画面にしたようなアプリ。

***
Youtube

スクロールジャンプゲーム
[Swift Game Tutorial: Create a Jumping Ball by using SpriteKit]
https://www.youtube.com/watch?v=tVQ5nlgLQBM
ソースコードのリンクはあったけど404状態で見れなかった。

FlappyBirdが流行る前はスクロールするゲームと言えばこういうのが多かったイメージ。画面をタップしてボールをジャンプさせて障害物を飛び越えていくゲーム。動画を見た感じでは障害物の出現がランダム過ぎてそこを上手く調整すればちゃんとしたゲームになると思う。

追記:こちらの動画で同じ内容でソースがダウンロードできるようになってた
[Swift Programming Tutorial: Games & Apps Part 1 (Sprite Kit)]
https://www.youtube.com/watch?v=eQ15rvwSFt8
sourceCode:https://github.com/skipallmighty/Skiptaculous
![Screen1.png](https://qiita-image-store.s3.amazonaws.com/0/37030/43f00dd5-4b95-e323-a7bc-24e310de848b.png)


***
これらの動画は全部英語でしゃべってるから英語わかる人かコードさえ読めればいいって人に向いてると思う。それかコードだけダウンロードして中身見た方が理解出来るって人はそっちの方が早いと思う。とりあえず僕も動画はちょいちょい見たくらいなので週末にでも動画見ながら作ってみようと思う。
画像に対応するコメントの表示

[JavaScriptで作る「5秒でキメろ！」 (全4回)](http://dotinstall.com/lessons/just_five_js)を勉強しました。前回の[JavaScriptで作るストップウォッチ (全7回)](http://dotinstall.com/lessons/stop_watch_js_v2)を勉強していたおかげで「これはひょっとしたら、まずStartとStopの差を計算。そのうえで5秒との差を計算して表示するのかもしれない」と、ある程度推測できました。やっほー！嬉しい！

#勉強開始
##光るテクニック
目から鱗だったのは``document.getElementById('result');``を毎回書くのは面倒だからと変数に格納させることで、以降をたった1文字で済ませられるところ。変数って便利だなと痛感しました。

##if文の可能性

```
if (diff == 0) {
	e.innerHTML = "ぴったし！すごい！";
} else if (diff > 0) {
	e.innerHTML = (diff / 1000) + "秒、速い！";
} else {
	e.innerHTML = (diff / 1000) + "秒、遅い！";
}
```

「条件と結果を変えるだけで、いろいろ遊べるよう気がする」なんて考えていたとき、ふと頭をよぎったのは、前々回の[おみくじプログラムの改造](http://qiita.com/cervomansan/items/473b0da0353cf4a6ae2e)でやろうとした「ランダムで生成される要素をおみくじとは別に、おみくじに対応するコメントも追加する」という機能はif文を使えば実現できるかもしれないということ。もしランダムで選ばれた画像がAだった場合、対応するAというコメントを表示させるという内容が書けるなら可能ではないだろうか。思い立ったら動かないと気が済まないので早速、別に書いてみました。

```
			var e = document.getElementById('resultText');

			if (resultImage == omikuji[0]) {
				e.innerHTML = "画像はAです";
			} else if (resultImage == omikuji[1]) {
				e.innerHTML = "画像はBです";
			} else {
				e.innerHTML = "画像はCです";
			}
		
```		

あーでもない、こーでもないと格闘すること1時間。ついに、ついに成功しました！試行錯誤した[おみくじプログラムの改造の続き](http://qiita.com/cervomansan/items/7d816192da899b00ec27)で、なんとなく覚えていた配列のインデックスの指定の方法と前回覚えたif文を組み合わせたところ画像に対応したコメントの表示に成功したんです。生まれて初めて自分で考えて動いたプログラムに、しばらくの間、信じられず何回もリロードして送信ボタンを連打しました。今は興奮して心臓が凄い速さでバクバク動いています。技術的に当分は無理だと思っていた機能がこんなにも早く実現できて本当に嬉しいです。

#総評
か細いながらも知識と経験が合致して実現できました。もしかしたら``setTimeout``を使うと卵から出てくるタイミングに合わせてコメントも表示できるかもしれませんね。時間的に今日の勉強はここまで。とりあえず動くところを確かめたかったのでコメントはキャラ名だけですがリンクを張っておきます。

#リンク
[未完成の占いプログラム Ver.2](http://jsbin.com/zudagume/7)
sudoしたときに元のUser名を取得する

sudoを使ってシェルスクリプトを走らせた時、
```echo $USER```とすると```root```が返ってしまいます。

rootではなくシェルを走らせた元々のUserを取得したい場合、
```echo $SUDO_USER```のように$SUDO_USERを利用すればいいそうです。

参考:
  http://stackoverflow.com/questions/4598001/how-do-you-find-the-original-user-through-multiple-sudo-and-su-commands
gnuplotをHomebrewからインストールするときの手順


Macにgnuplotをインストールしようとして、意外とハマったのでその時のメモ。

（2014.12.24 最新の情報にアップデートしました）

（実行環境）

* OS X 10.10.1 Yosemite
* Homebrew 0.9.5
* gnuplot 4.6.6

# 0. 状況
`$ brew install gnuplot` だけでもインストールはされる。

しかし、`$ gnuplot`で起動しても、
 `Terminal type set to 'unknown'` となって、
`gnuplot> plot sin(x)` とかしても表示ウィンドウが出ない。

出力（表示）先（Terminal type）が指定されていないのがいけないらしい。

# 1. インストールのオプションを確認
`$ brew info gnuplot`

```
==> Options
--cairo
Build the Cairo based terminals
--latex
Build with LaTeX support
--nogd
Build without gd support
--nolua
Build without the lua/TikZ terminal
--pdf
Build the PDF terminal using pdflib-lite
--qt
Build the Qt4 terminal
--tests
Verify the build with make check (1 min)
--with-aquaterm
Build with AquaTerm support
--with-x11
Build with x11 support
--without-emacs
Do not build Emacs lisp files
--wx
Build the wxWidgets terminal using pango
--HEAD
Install HEAD version
```

インストール時にオプションで出力（表示）先を指定しなくてはいけない様子。

gnuplotでよく使われる出力先としては、AquaTerm（従来はデフォルト）やX11ウィンドウがあるが、Homebrewでは自動でAquaTermやX11は入れてくれない。そこで、自分でインストールする必要がある。

ちなみに、AquaTermは表示がきれい、X11はウィンドウをマウスでドラッグしてグラフの表示を変えられる、という違いがある。

# 2. AquaTerm、X11のインストール

- AquaTermのインストール

[AquaTerm](http://aquaterm.sourceforge.net)の[ダウンロードページ](http://sourceforge.net/projects/aquaterm/files/)より、ダウンロードしてインストール。（AquaTerm-1.1.1.dmg）
Macintosh HD＞アプリケーション フォルダに AquaTerm.appが出来ていればOK。

- X11のインストール

[Mac用の X11ライブラリ XQuartz](http://support.apple.com/kb/HT5293?viewlocale=ja_JP) の[ダウンロードページ](http://xquartz.macosforge.org/)より、ダウンロードしてインストール。（XQuartz-2.7.7.dmg）
Macintosh HD＞アプリケーション＞ユーティリティ フォルダに X11.appが出来ていればOK。


# 3. gnuplotのインストール

```
$ brew uninstall gnuplot  #一旦 gnuplotをアンインストールする
$ brew install gnuplot --with-aquaterm --with-x11
```

ここでは、AquaTermとX11の両方を指定してみた。

# 4. gnuplotを起動して確認
`$ gnuplot`で起動。
`Terminal type set to 'aqua'` とメッセージが表示されれば、AquaTermが出力先に設定されている。

`gnuplot> plot sin(x)` でAquaTermのウィンドウが開いて、サインカーブのグラフが表示されればOK。

#5. 出力先の設定

- 指定可能な出力先のリストを表示させる

```
gnuplot> set terminal  #指定可能な出力先のリストを表示

Available terminal types:
             aqua  Interface to graphics terminal server for Mac OS X
           canvas  HTML Canvas object

            ###（中略）###

              x11  X11 Window System
             xlib  X11 Window System (gnulib_x11 dump)
            xterm  Xterm Tektronix 4014 Mode
```
　

- AquaTermからX11に切り替えてみる

```
gnuplot> set terminal x11
Terminal type set to 'x11'
Options are ' nopersist'
gnuplot> plot sin(x)
#X11ウィンドウが開いて、サインカーブのグラフが表示されればOK
```

　
　ちなみに；

> Options are 'nopersist' はgnuplotを終了またはresetした後は描画も消してしまうオプション。これがデフォルト。persistにすれば終了またはリセット後も描画は表示され続ける。
> （→・[windows8上の仮想環境でubuntu13.10を使っているのですが、gnuplotを使... - Yahoo!知恵袋](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10120126835) ）

　

- X11からAquaTermに切り替えてみる

```
gnuplot> set terminal aqua
Terminal type set to 'aqua'
Options are '0 title "Figure 0" size 846,594 font "Times-Roman,14" noenhanced solid'
gnuplot> plot sin(x)
#AquaTermウィンドウが開いて、サインカーブのグラフが表示されればOK
```


　
#### 参考）
→・[Homebrewでgnuplotを入れる -xeno1991 -Qiita](http://qiita.com/xeno1991/items/870372c337ba0fecb3bc)
環境変数EDITOR設定時のbindkeyに注意



zsh起動時に環境変数EDITORがvimに指定されていると、その後のキーバインドがvimモード(`bindkey -v`)になってしまいます。
その場合は`.zshrc`に`bindkey -e`を明示してあげれば解消されます。

```.zshrc
EDITOR=vim
bindkey -e
```

エディターにvim使う人はzshのbindkeyもvimモードにするのが当たり前なのでしょうか。（自分はガラパゴス状態なので）
elasticsearchとkibanaのインストールをChefのレシピにしてみた。#elasticsearch #kibana #chef 

Chefのレシピにしておくと便利かなと。

# 環境
CentOS 6.5

#elasticsearch

```rb:recipes/elasticsearch.rb
## java install
package "java-1.7.0-openjdk" do
  action :install
end

## install
bash "elasticsearch" do
  not_if "ls /usr/local/share/elasticsearch-1.2.1"
  user "root"
  cwd "/usr/local/src"
  code <<-EOH
    wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.2.1.tar.gz
    tar xvzf elasticsearch-1.2.1.tar.gz -C /usr/local/share/
  EOH
end

## add service
bash "elasticsearch_as_service" do
  not_if "ls usr/local/share/elasticsearch-1.2.1/bin/service"
  user "root"
  cwd "/usr/local/src"
  code <<-EOH
    wget https://github.com/elasticsearch/elasticsearch-servicewrapper/archive/master.zip
    unzip /usr/local/src/master
    mv /usr/local/src/elasticsearch-servicewrapper-master/service/ /usr/local/share/elasticsearch-1.2.1/bin/
    /usr/local/share/elasticsearch-1.2.1/bin/service/elasticsearch install
  EOH
end

## elasticsearch log dir
directory '/usr/local/share/elasticsearch-1.2.1/logs/' do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

## elasticsearch.yml
template "/usr/local/share/elasticsearch-1.2.1/config/elasticsearch.yml" do
  source "elasticsearch.yml.erb"
  owner "root"
  group "root"
  mode 755
end


## service start
service "elasticsearch" do
    action [ :enable, :start ]
    subscribes :restart, resources(:template => "/usr/local/share/elasticsearch-1.2.1/config/elasticsearch.yml")
end

## chkconfig
execute "add_elasticsearch_service" do
  user "root"
  command  "chkconfig elasticsearch on"
  action :run
end
```

* template/default

  このディレクトリに以下のファイルをおいておくこと。

> elasticsearch.yml.erb


## あれ？って思ったこと

* logディレクトリがなくて、起動に失敗したので、ディレクトリ作成を追加した
* javaがなかったのでインストールしました。。

#kibana
```rb:recipes/kibana.rb
## directory
directory '/var/www/html/kibana' do
  owner 'root'
  group 'root'
  mode '0755'
  action :create
end

## kibana install
bash "kibana" do
  not_if "ls /var/www/html/kibana"
  user "root"
  cwd "/usr/local/src"
  code <<-EOH
    wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.tar.gz
    tar xvzf kibana-3.1.0.tar.gz -C /var/www/html
    mv /var/www/html/kibana-3.1.0 /var/www/html/kibana
  EOH
end

## kibana config setting
template "/var/www/html/kibana/config.js" do
  source "config.js.erb"
  owner "root"
  group "root"
  mode 755
end
```

apacheのインストールは別レシピにして使い回し

```rb:recipes/apache.rb
package "httpd" do
    version "2.2.15-30.el6.centos"
    action :install
end

service "httpd" do
  supports :status =>true, :restart=>true, :reload=>true
  action [:enable, :start]
end

execute "add_httpd_service" do
  user "root"
  command  "chkconfig httpd on"
  action :run
end
```

* template/default

  このディレクトリに以下のファイルをおいておくこと。

> config.js.erb
Goでコマンドラインツールを簡単に作成する方法


本エントリでは、[cli.go](https://github.com/codegangsta/cli)というパッケージを使用して、コマンドラインツールを作成する方法を紹介する。

# cli.goとは

cli.goとは、Go言語でコマンドラインツールを簡単に作成するためのパッケージである。


# 実行環境

* Go 1.3
* Mac OS X 10.9.3


# cli.goをインストールする前の準備


## 環境変数`$GOPATH`の設定

`$GOPATH`を設定していない場合は、この設定が必須である。

`$GOPATH`は、`go get`コマンドでパッケージをインストールする際のインストール先を示す。

* 例（bashの場合）

```.bashrc
export GOPATH=$HOME/go # 指定するディレクトリは自由に決めてよい
```

## 環境変数`$PATH`の設定

この設定は必須ではないが、設定しておくのが望ましい。

`go install`コマンドを実行した際に作成されるバイナリは、`$GOPATH/bin`以下に置かれる。そのため、ここにパスを通しておくと、後々コマンドの実行が楽である。

* 例（bashの場合）

```.bashrc
export PATH=$PATH:$GOPATH/bin
```


# cli.goのインストール

```
$ go get github.com/codegangsta/cli
```

# コード

`$GOPATH/src/mycmd/`ディレクトリに、以下のファイルを作成する。

```go:mycmd.go
package main

import (
	"os"
	"github.com/codegangsta/cli" // cli.goをインポート
)

func main() {
	app := cli.NewApp()
	app.Name = "mycmd"            // ヘルプを表示する際に使用される
	app.Usage = "print arguments" // ヘルプを表示する際に使用される
	app.Version = "1.2.3"         // ヘルプを表示する際に使用される
	app.Action = func(c *cli.Context) { // コマンド実行時の処理
		println("Number of arguments is", len(c.Args()))
		println("Fisrt argument is", c.Args()[0])
		println("Second argument is", c.Args()[1])
	}
	app.Run(os.Args)
}

```


# コンパイル

`$GOPATH/src/mycmd/`ディレクトリで、以下のコマンドを実行する。

```
$ go install
```

これで、`$GOPATH/bin`に`mycmd`コマンドが作成される。

# 作成したコマンドの実行

```
$ mycmd aaa bbb
```

実行結果は、以下のとおり。

```
Number of arguments is 2
Fisrt argument is aaa
Second argument is bbb
```

# 作成したコマンドのヘルプを表示する

```
$ mycmd help
```

実行結果は、以下のとおり。

```
NAME:
   mycmd - print arguments

USAGE:
   mycmd [global options] command [command options] [arguments...]

VERSION:
   1.2.3

COMMANDS:
   help, h	Shows a list of commands or help for one command
   
GLOBAL OPTIONS:
   --version, -v	print the version
   --help, -h		show help
```

コード中の

> app.Name = "mycmd"
> app.Usage = "print arguments"
> app.Version = "1.2.3"

の値がヘルプに反映されている。


# 参考リンク

[cli.go](https://github.com/codegangsta/cli)
ブラウザでファイルダウンロードが終わったタイミングでJSでなにかする方法

## この投稿の参考元
こちらの記事を参考にさせてもらいました
http://d.hatena.ne.jp/nabehiro/20140208/1391850498　

# 概要
何かしらのファイルダウンロードが終わった時（html以外のレスポンスを受け取るようなとき）に、受け取り終わった後何かやりたいというケースについて。（意外と業務システム屋だと多い気がする）
この動きを必要とした時に、参考元のブログの方法がだいぶ理想的な動きだったので、自分用に修正を加えたものをメモ。


## サーバーサイド
今回はPHPで。

```php
// 名前・値・有効期限・パス
setcookie('downloaded','complete',0,'/');
```

## クライアントサイド

```js

$(function(){
        // フォームがサブミットされた時
	$('#your_form').submit(function() {
		var onComplete = function(){
			if (getCookieValue('downloaded') == 'complete') {
				// 任意の処理
			}
			else{
				// 再起してCookieが作成されたか監視
				setTimeout(onComplete, 1000);
			}
		}
		onComplete();
	});
        // クッキー値取得
	function getCookieValue(name){
		var result = '',
			key = name+'=',
			_cookie = document.cookie,
			_s = _cookie.indexOf(key),
			_e = _cookie.indexOf(';',_s);

		_e = _e === -1 ? _cookie.length : _e;
		result = decodeURIComponent(_cookie.substring(_s,_e)).replace(key,'');
		return result;
	}
        // クッキー消す
	function deleteCookie(name){
		document.cookie = name+'=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/';
	}
});
```

### メモ
Cookie消すときはpath指定してないと消えないので注意
ActiveRecord Associationのdecorate


今更ながらに[Draper gem](https://github.com/drapergem/draper)でActiveRecord Associationをdecorateします。

ほんと少しでも迷ったらまず、ドキュメントちゃんと読むべきだった恥ずかしい。。。

## TL;DR

Draper::CollectionDecorator使いましょう


## 今までやっていたような事

article modelにkaminari gemでpagenationを加え、titleをCapitalizeするdecorateしてみる例

```ruby
# article_decorator.rb
class ArticleDecorator < Draper::Decorator
  delegate_all

  def title
    object.title.capitalize
  end
end
```

そんでもって


```ruby
# controller
@articles = Article.all.page page[:page]

# hamlとかでview
@articles.each do |article|
   - article.decorate
   = article.title
```

みたいなことやってた。collection回す中でわざわざdecorateしてた。

はずかしい。

## associationにはDraper::CollectionDecoratorを使おう

association用のdecoratorを作る

```ruby
# articles_decorator.rb
class ArticlesDecorator < Draper::CollectionDecorator
  delegate :current_page, :total_pages, :limit_value
end
```

これで各々のactiveReocrd modelもそれぞれdecorateされます。

あぁ恥ずかしい。。。


## 参考

- <https://github.com/drapergem/draper/issues/401>
- <https://github.com/drapergem/draper#using-pagination>
MySQLでlocalhostと127.0.0.1の違い

## 全然違います

windows環境でCygWin入れてると怒られますよね？
※ Linuxでもとても難解な問題が出てくるので環境依存関係無いです（バグです）
mysql -uroot -p して怒られます。

```bash
ekaneko@hoge ~
$ mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysql.sock' (2)

```

こんな感じで怒られます。
省略した場合は localhost が暗黙で使用されるためです。
※ MySQL5.6.19 ソースより
127.0.0.1でやってみます。

```bash

ekaneko@hoge ~
$ mysql -h 127.0.0.1 -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 5.6.19-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ************       |
| ************       |
| mysql              |
| mytest             |
| performance_schema |
| ************       |
| test               |
| world              |
| ************       |
| ************       |
+--------------------+
11 rows in set (0.00 sec)

mysql>
```

問題なくOKです。

## 違いは接続方法

ホスト名が localhost だった場合、パフォーマンスのためなのかソケットが暗黙で使用されます。
ですが。Windowsにはそんなの用意されてません。
その場合 127.0.0.1 を使うとTCP/IP接続が同PCであっても使用され問題なくTCP経由で接続できます。

## 覚える意味があるのか？

MySQLデーモンを二重化してポートをそれぞれに割り振った場合、面倒な事になります。
localhostを接続先ホストに指定すると、ポート指定のオプションを無視しsocket経由で接続しようとします。
Windowsの場合はつながらないだけですが、Linuxの場合はデフォルトソケット（ini記載かも？）に繋がってしまい、訳わからない状況になります。

mysql -h localhost -uroot -p --port=3307 こうやった場合でもポート指定が無視されちゃいます。
mysql -h 127.0.0.1 -uroot -p --port=3307 この場合はすんなり接続されるはずです（もう忘れました）

ソケット接続する場合は、事前にソケットを作成して、
それぞれのデーモンにソケットをそれぞれ割り当てちゃんと指定すれば動きます。たぶん。
mysql -uroot -p --socket=/var/run/mysql01.sock
mysql -uroot -p --socket=/var/run/mysql02.sock

## あとがき

ソースを読めるって大切だよなぁって思います。
読みたくて読んでるわけじゃないけど、食べたくないけど食べないと体調悪くなるって感じと似てるよね。
だってそんなことしてるって思わないじゃない。

以上、メモでした
jsメモ帳(ビット操作）

**find element in array**
```js
if (~[].indexOf("")) {}
```
>
***javascript权威指南*** 中~运算符的解释
根据javascript中带符号的整数的表示方法,对一个值使用~运算符相当于改变它的符号并且减1.
所以~4=-5

***

##位运算豆知識##
*  二进制的最高位是符号位，0表示正数，1表示负数。
*  正数的原码，反码，补码都是本身
*  负数的反码是符号位不变，其他位置由0变1，由1变0
*  负数的补码=它的反码+1
*  0的反码，补码均为0
*  `在计算机运算中，都是已补码的形式来运算的。`

参考場所 [【二进制】 原码 反码 补码 位移运算总结](http://blog.csdn.net/u010585099/article/details/9009461)
[Java] 自分自身のプロセスIDを取得する方法

# 自分自身のプロセスIDを取得する方法

Java ではプロセスIDを簡単に取得する事ができない様ですね。
Windows や Linux 等で動作する方法を、結構探しました。

```java
/**
 * process id (pid).
 */
public class ProcessIdSample {
  /**
   * process id (pid).
   */
  static final String PID =
    java.lang.management.ManagementFactory.getRuntimeMXBean().getName().split("@")[0];

  /**
   * print process id (pid).
   *
   * @param args
   *            String...
   */
  public static void main(String... args) {
    System.out.println("PID: " + PID);
  }
}
```

プロセスIDは、static final な変数に保持する方が良いですよね。
何度も計算することじゃないし。

もっと、いいプロセスIDの取得方法があれば教えてください。
CoffeeScript メモ （空白ややこし編）

```coffeescript
a = (n) -> 2 + n
b = 2

console.log a - 2 # NaN
console.log a -2  # 0
console.log a- 2  # NaN
console.log a-2   # NaN

console.log b - 2 # 0
console.log b -2  # TypeError
console.log b- 2  # 0
console.log b-2   # 0

console.log 2 - 2 # 0
console.log 2 -2  # 0
console.log 2- 2  # 0
console.log 2-2   # 0
```

うん、まぁ。
SQLite3メモ

## SQLite3メモ

MySQLのお守りに疲れてきたので最近はSQLiteに浮気しています。
ずいぶん独特な考え方のDBMSだったので、忘れないようにメモ。

## データ型

SQLiteのデータ型は5種類しかない。

NULL, INTEGER(整数), REAL(浮動小数点), TEXT(文字列), BLOB(バイナリ)

## カラムの型

テーブルを作成するときのカラムには型を指定しなくても良い。

```text:例
CREATE TABLE test(id, name, comment, created_at);
```

指定しないとどんな型でも自由に入る。他のDBMSとの互換性を考えて型は指定したほうが良いが、あくまで気休め程度で、「VARCHAR(255)」型でも255文字以上入るし、「INTEGER」型に文字列を挿入することもできる。

```text:互換性を考えた例
CREATE TABLE test(
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name VARCHAR(255) NOT NULL,
  comment TEXT,
  created_at TIMESTAMP DEFAULT (DATETIME('now','localtime'))
);
```

「AUTOINCREMENT」を付加すると連番になる。

「DEFAULT (DATETIME('now','localtime'))」を付加するとデフォルト値として現在時刻が挿入される。「DEFAULT CURRENT_TIMESTAMP」でも良いがUTC時刻になるので使いにくい。
pythonのソースをダウンロードしてみた

直ぐには見ないかもしれないけど、pythonのソースをダウンロードした。
(3.4のソースをダウンロードした方が良いのかも知れないが、今のところは、使っている2.7(Python-2.7.7)のソースをダウンロードしている)
今後、仕様とかの確認(の補助として)で、ソースの中身まで見ることがあるかも知れない。

# まずはmainを探してみる
取り敢えず、python.exeの入り口までを探しておく。

まず、main()で検索。
Demoとかを含め、幾つかmainが見つかった。
ファイル名とかで、大体の当たりは付くけど、Makefileも見て、検索結果を確定させる。

検索の結果、PC/os2emx/Makefileに下記の行があった。

```mf
PYTHON.EXE=	python.exe
```

こいつをビルドしてるところは

```mf
$(PYTHON.EXE): $(SRC.EXE) $(PYTHON.EXEIMP) $(OUT)python.def
	$(CC) -Zmt $(LDMODE.EXE) -Zcrtdll -Wall $(INCLUDE) -L. -lgcc -o $@ $(SRC.EXE) $(PYTHON.EXEIMP) $(LIBS) $(OUT)python.def
	$(EXEOPT) -aq $(PYTHON.EXE) -h$(NFILES)
```
で、SRC.EXEの定義は、

```mf
SRC.EXE=	$(TOP)Modules/python.c
```

このソース(Modules/python.c)の中身は、次の通り。

```c
/* Minimal main program -- everything is loaded from the library */

#include "Python.h"

#ifdef __FreeBSD__
#include <floatingpoint.h>
#endif

int
main(int argc, char **argv)
{
	/* 754 requires that FP exceptions run in "no stop" mode by default,
	 * and until C vendors implement C99's ways to control FP exceptions,
	 * Python requires non-stop mode.  Alas, some platforms enable FP
	 * exceptions by default.  Here we disable them.
	 */
#ifdef __FreeBSD__
	fp_except_t m;

	m = fpgetmask();
	fpsetmask(m & ~FP_X_OFL);
#endif
	return Py_Main(argc, argv);
}
```

# API
上記を調べている内に、pythonのAPIはpython.defにエントリが定義されているように思った。
python.defの中身はこんな感じ。(抜粋)

```text
LIBRARY        PYTHON24 INITINSTANCE TERMINSTANCE
DESCRIPTION    'Python 2.4 Core DLL'
PROTMODE
DATA           MULTIPLE NONSHARED

EXPORTS
               ; Data
               PyCFunction_Type
・・・
               ; Code
               PyArg_Parse
・・・
               Py_Initialize
               Py_IsInitialized
               Py_Main
               Py_MakePendingCalls
               Py_Malloc
               Py_NewInterpreter
               Py_Realloc
・・・
```

当然かも知れないけど、APIのリファレンスサイトもある。

- [Python/C API リファレンスマニュアル](http://docs.python.jp/2/c-api/index.html)

ソースを調べるんだったら、APIのエントリを切り口にしても良いかもしれない。

ダンロードしたソースの中のDemoフォルダに、APIを使ったサンプルコードぽいものがあった。
APIまで使うかは分からないけど、使う場合には参考になるかも知れない。

pythonのソースを読もうと思った時に、解析した情報が載っているサイトを検索したけど、今のところ見つけられていない。
アウトラインが分かると助かるんだけど。
もう少し調べて面白いネタがあったら、記事を投稿させてもらうかも。
1日1回ゆどうふに HipChat でブログを書けと言うための hubot script

```js
// Description:
//   Yudoufu blog notifier


module.exports = function (robot) {
  var msgs = [
    'ブログ書いた？',
    'ブログ...書いてょ(ヽ´ω`)',
    'ブログは？(*´ω｀*)',
    '元気？',
    'ブログ更新したかな〜',
    'いつになったら...ブログ書いてくれるの？',
    '更新は今日かな? 明日かな? ((o(´∀｀)o)) ',
  ];
  var room = "xxxxyour-room-idxxxx@conf.hipchat.com"

  var sendMsg = function () {
    var currentMessage = "@yudoufu " + msgs[Math.floor(Math.random() * msgs.length)];
    robot.messageRoom(room, currentMessage);
  };

  setTimeout(sendMsg, 1000*10);
  setInterval(sendMsg, 1000*86400);
}
```

こんなかんじになります:

![スクリーンショット](https://qiita-image-store.s3.amazonaws.com/0/59/8cedf1ce-b3c1-c172-c44b-d01cbf622a2e.png)

たまに、気遣ってくれたりしてウケます:

![気遣い](https://qiita-image-store.s3.amazonaws.com/0/59/3c6a42a0-7009-c17c-6f99-20ca83c18224.png)



cron.js とか使うと、何かしらの notification にも使えるので、定例業務がある場合 (日報とか、週報とか？) にも応用効くし、なにげに便利。
あと messageRoom() メソッドの情報があまり転がってないので（ソース嫁ばわかるのだけど) ご参考にどうぞ。
virsh経由でVMのCDROMを外す

* http://docs.fedoraproject.org/en-US/Fedora/18/html/Virtualization_Administration_Guide/sect-Attaching_and_updating_a_device_with_virsh.html

以下のように `<source>` 要素のないXMLを作る

```xml
<disk type='block' device='cdrom'>
    <driver name='qemu' type='raw'/>
    <target dev='hdc' bus='ide'/>
    <readonly/>
    <address type='drive' controller='0' bus='1' unit='0'/>
</disk>
```

起動した状態で、適用する。

```bash
$ virsh update-device foobar.local work/empty-cdrom.xml
Device updated successfully
```
PygmentsでcatをSyntax Highlightする。

当方mac.
Pygmentsはhomebrewにはなかったのでeasy_installで入れる。

```shell-session
sudo easy_install Pygments

```

してから

```shell-session
alias cat='pygmentize -O style=monokai -f console256 -g'
```

とした。


参考:http://havelog.ayumusato.com/develop/others/e523-pretty_cat_and_less_pygments.html
WebViewから文字列を抽出する方法

# WebViewから文字列を抽出する方法

ある文字列しか返さないHTMLを取得してその後の処理を分けるという要件があったのでメモ。

htmlの中身はこんだけ↓  
特にタグとかは無し。

```html:index.html
test・・・・・
```

取得方法↓

```java
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_my, container, false);
            final WebView webView = (WebView) rootView.findViewById(R.id.webview);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.addJavascriptInterface(new JavaScriptInterface(), "showHtml");

            webView.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView view, String url) {
                    webView.loadUrl("javascript:window.showHtml.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
            }
            });

            webView.loadUrl("http://xxxx.xxx/test.html");

            return rootView;
        }
    }
    class JavaScriptInterface {
        @SuppressWarnings("unused")
        public void showHTML(String html) {
            Log.d("html", html);
            Spanned spanned = Html.fromHtml(html);

            // これでHTMLの中身が文字列で取得可能
            String target = spanned.toString();
            if (TextUtils.equals(target, "xxxxxx")) {
                // TODO ここで処理を分ける
            } else {
            
            }
            
        }
    }
```

要はJavascriptを強制的に埋め込んで、JSでJavaのメソッドにHTMLの中身つけて呼んであげるという強引な方法です。

引用
> http://lexandera.com/2009/01/extracting-html-from-a-webview/
ストップウォッチを作ってみた



ここ数日[JavaScriptで作る「簡単おみくじ」 (全3回)](http://dotinstall.com/lessons/omikuji_js)と[JavaScriptで作る「あなたの誕生日診断」 (全5回)](http://dotinstall.com/lessons/date_js)を繰り返し、書いては消して書いては消してを繰り返していたら、いつの間にか2つのプログラムの作り方を暗記していた。完成に必要な部品がわかるようになったのは凄く嬉しい。何も見ないで作っていく作業に、少しだけプログラマー気分を味わうことができました。さて、今日は[JavaScriptで作るストップウォッチ (全7回)](http://dotinstall.com/lessons/stop_watch_js_v2)を勉強していきます。


#ストップウォッチの基本

```
setTimeout(function () {
	実行したい関数名();
}, 秒数);
```

ストップウォッチで``innerHTML``を繰り返し書き換えるために使うらしい。カウントアップしているような演出はこの``setTimeout``がその都度動いてくれるためということを知って感動。そして``clearTimeout``をstopに書くことでタイマーを止める演出が可能になる。これまた感動。そして``reset()``の中身は``var startTimer``の中身を``undefined``書いて空にしたうえで``innerHTML``で0.00に戻す。これだけでストップウォッチが作れるようになったのが嬉しくて、何度も書いては消して書いては消してを繰り返した。現在の日付ミリ秒を取得するのに``(new Date()).getTime();``と短縮して書けることも覚えることができた。

#機能の追加
if文の登場。「もし～なら」という条件を与えたいときに便利な機能らしい。ここでは「もしストップボタンを押したなら、再スタートはストップボタンを押した時間から」というような条件文を書くために使用。中身は``startTime + (new Date()).getTime() - stopTime;``と``Start!``ボタンを押した時刻と現在の最新時刻を足して、そこから``Stop!``ボタンを押した時刻を引いてやることで実現。数字に弱いせいか、ここの計算で少し混乱しました。

#ストップウォッチらしからぬ挙動を修正
ここからif文がガンガン出てくる。少し混乱したのが``if (!running) return false;``の部分。``false``を消しても動くのでどう影響しているのかがわかりませんでした。``!``のビックリマークは「～じゃない」という否定の意味なのかな。``running = false``を使ってタイマーが回っているかどうかの判定をさせることで、らしからぬ動きは修正された。うーん、難しい。

#総評
``.toFixed();``や``return``のようなものが登場してきて段々と覚えることが増えてきたこともあって、すんなりとは理解はできなかった。とにかく毎日JavaScriptを触って慣れていこうと思います。
Yahoo注文検索API:Internal Server Error(500)となります。

WEBAPIの注文検索APIを確認しています。

1.保存されたリフレッシュトークンより、アクセストークンを取得する。
2.注文検索APIを呼ぶ。

\<req>
\<SellerId>XXXXXXXXXXXX\</SellerId>
\</req>

のみの簡単なデータですが、

500
Internal Server Error

となってしまいます。

このスレッドと直接関係ないものもありますが、まとめて質問させていただきます。

1. 上記の500の場合の原因究明方法を教えて下さい。
2. リフレッシュトークンのExpireを取得する方法は無いのでしょうか。
3. リフレッシュトークンからアクセストークンを取得した際、リフレッシュトークンのExpireは更新（有効期限が延長）されるのでしょうか。
Javascript、文字列、判定、複数

Javascript、文字列、判定、複数
==========


■about
----------

Javascript、文字列、判定、複数
正規表現を使用し複数判定する。




■code
----------

```JavaScript:JavaScript
	str = navigator.userAgent;
	//正規表現を使用し複数判定する
    if(str.match(/MSIE 7|MSIE 8/)) {
		xxx();
    }
    else {
		zzz();
    }
```




■reference
----------

正規表現による検索－JavaScript入門
http://www.pori2.net/js/number/12.html
Javascript、文字列、判定

Javascript、文字列、判定
==========


■about
----------

Javascript、文字列、判定
正規表現を使用し複数判定する。




■code
----------

```JavaScript:JavaScript
	/* indexOf()文字列を判定 */
    if(navigator.userAgent.indexOf("MSIE") != -1) {
		xxx();
    else {
		zzz();
    }
});
```




■reference
----------

String.prototype.indexOf() - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf

indexOfメソッド - Stringクラス - JavaScript入門
http://www.ajaxtower.jp/js/string_class/index14.html
コードを一切書かずにinstagramを作ろう！コーディング不要でカメラフィルターを量産するツール

by @mixiappwchr

![Screenshot 2014.06.25 14.10.06_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/976c5823-3236-fc19-112f-31edab63d78d.png)

#GPUImageCafe

[GPUImageCafe](https://github.com/nyankichi820/GPUImageCafe)

#これは何?


以前の[DeNA中の人が事例で語る、アニメーションやデザインのアプリを効率よく開発するためのTips #iOS](https://codeiq.jp/magazine/2014/05/10760/)というエントリーで、実際の現場で、カメラフィルターを作るために、調整用のアプリを作ったと書いたのですが、こちらのアプリをちょっとブラッシュアップしました。

コードなどを書かずに、カメラフィルターを量産することができます。





#機能
* iPhone + iPad両対応
* 基本的なフィルターのパラメータをいじることで独自のフィルターを作成
* サンプル画像+カメラキャプチャでプレビューしながらフィルターを調整
* 調整したパラメータはJSON形式で吐き出して、それを元にGPUImageのフィルターを生 成可能。

#画面
サンプル画像やカメラキャプチャに対してリアルタイムでフィルターを調整できます。
![Screenshot 2014.06.25 14.06.23_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/930d3a66-1f0e-44d9-bead-01263eb90670.png)

調整しやすいようiPad対応しています。
![Screenshot 2014.06.25 14.10.06_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/976c5823-3236-fc19-112f-31edab63d78d.png)

作ったフィルターはローカルに保存しておけます。
![Screenshot 2014.06.25 14.09.20_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/ab6b592c-0af8-b15e-dd73-747468419510.png)




#Require
Cocoapodsが必要ですのでインストールしてください。


#フィルターを作ったら
JSONでパラメータを保存でき、同梱のライブラリでパラメータを渡してあげれば、GPUImageのFilterを生成できます。

```objc
GPUimageFilterGroup *filter = [[[MYGPUImageFilterFactory alloc] init] createFilterGroupWithArray:params];
```

#終わりに
実装はフィルターのグループを作って複数のフィルターをつなぎ合わせています。シェーダーで作った方が高速かもしれませんが、パラメータ指定で調整できるためこの方式にしています。

作ったパラメータでいいものがあったら,ぜひpull reqでもなんでもいいので僕に送ってください！
プリセットのフィルターに追加させてもらいます。

以上、工夫次第で、コードを書かずに、機能実装を進めることができるため、サポートアプリを作るという選択肢はありかなとおもいます。
動画の画像ダイジェストをFFmpegで作成する

##概要
* 自社でやっているブログに、下記の内容で記事を書きました。
* [これからの動画メディアに必須! 動画ダイジェストを自動で作る方法](http://www.coromos.com/programing/how_to_make_digest_video/)
* 技術的な内容だけ抜粋して、転載します。

##必要なもの: FFmpeg
[ffmpeg](http://www.ffmpeg.org/)
動画解析ライブラリ。 __Facebookが使用している__とかで、一時期話題になっていたりしました。
このライブラリを使って、 __動画のダイジェストを10コマの画像に変換__してみたいと思います。

__基本的な使い方は、インプットとアウトプットのファイルを指定し、その間にさまざまなオプションを挟むことで、多様な動画処理をする、という感じです。__

インストール方法は、macならhomebrewで一発でした。

##今回のダイジェスト画像生成で使ったコマンド

```terminal
$ ffmpeg -i movie.mp4 -vf select='gt(scene\,0.4)',tile=1x10 -frames:v 1 ~/output/video_digest.jpg
```

###部分解説: -vf select='xxx'
* select filter
* <a href="http://www.ffmpeg.org/ffmpeg-all.html#select_002c-aselect" target="_blank">http://www.ffmpeg.org/ffmpeg-all.html#select_002c-aselect</a>
* selectフィルターは、インプットからアウトプットにデータを受け渡すときに、selectフィルターで指定したオプションに応じて、アウトプットに渡すデータを制限することができます。

###部分解説: sceneオプション</h4>
* 上記 selectフィルターのリンクの下部に、sceneオプションというものがあります。
* sceneオプションは、あるフレームと次のフレームの「差分」を計算して、その差が一定以上でなければ、そのフレームを切り捨てる、という処理をしてくれます。

####他にもオプション多数
<a href="https://www.ffmpeg.org/ffmpeg-all.html" target="_blank">https://www.ffmpeg.org/ffmpeg-all.html</a>

##実際に動画からダイジェスト画像をつくってみました

ワールドカップ真っ只中ですね。例えば下記の動画を、

<img style="padding:20px 0;" src="http://www.coromos.com/wp-content/uploads/2014/06/スクリーンショット-2014-06-17-22.56.081.png" alt="germany_portugal_search_result"/>

FFmpegでダイジェスト画像を作成してみました。

| 1番 <strong>ポルトガル4-0の目標に対するドイツとハイライト〜ワールドカップ ...</strong>| 2番 <strong>【W杯】ドイツvsポルトガル 4－0 全ゴール ハイライト FIFA ...</strong>|
|:--|:--|
|<img src="http://www.coromos.com/wp-content/uploads/2014/06/coromos_digest1_2-182x1024.jpg"/>|<img src="http://www.coromos.com/wp-content/uploads/2014/06/coromos_digest2_2-182x1024.jpg"/>|

##感想
* 静止画から動画スライドショーへ、みたいなのはサービスとしてあるけど、逆はあまり聞いたことない。
* 動画って重いので、環境・状況によっては使い道あるかも。
CircleCI on Heroku - 簡易自動デプロイ circle.ymlサンプル


## デプロイ + マイグレーション + Slack通知

* stagingブランチに対するpush、mergeがトリガーになる

```yaml:circle.yml
deployment:
  staging:
    branch: staging
    commands:
      - curl https://slack.com/api/chat.postMessage -X POST -d 'channel=#heroku' -d 'text=【START】ステージング環境へのデプロイを開始しました。' -d 'username=circle_ci' -d 'token=xoxp-xxxxxxxxxx'
      - git push git@heroku.com:MY-APP-NAME.git $CIRCLE_SHA1:refs/heads/master
      - heroku run rake db:migrate --app MY-APP-NAME
      - curl https://slack.com/api/chat.postMessage -X POST -d 'channel=#heroku' -d 'text=【END】ステージング環境へのデプロイが完了しました。' -d 'username=circle_ci' -d 'token=xoxp-xxxxxxxxxx'
```

※Slack-Channel名の`#`はエスケープしないでOK(エスケープすると「channel_not_found」エラーになる)
historyに実行時刻を表示する

トラブった時に後から、historyコマンドを睨みながら、色々推測していたのですが、時刻が無いと捗らない上に推測以上の事が出来なかったので。

# やり方
* 以下の記事の通り
 * [historyにコマンドの実行時刻が表示されるようにする](http://qiita.com/kawaz/items/92457e3d1664383b18bc)

> ```bash:~/.bashrc
> HISTTIMEFORMAT='%Y-%m-%dT%T%z '

# スクリプト
せっかくなので、ついでにスクリプト化してみました。
どこかで・・・使う・・・のかな？（＝ｗ＝；

```bash
#!/usr/bin/env bash
if grep -sq HISTTIMEFORMAT ~/.bashrc; then
  echo "already use history time."
else
  echo "HISTTIMEFORMAT='%Y-%m-%dT%T%z '" >> ~/.bashrc
  source ~/.bashrc
fi
```
* shebangは環境依存にならないようにいつものパターン
* `grep -sq`は`>/dev/null 2>&1`みたいなもので、出力させない

あとは、chmodで755とかにでもしておいて実行。

サーバーとかに設定しておくと良いかもしれませんね〜。
iOSアプリ審査のステータス

一部、抜粋
以下の様な流れ？

| ステータス名 | 概要 | 説明 |
|:-----------|:------------|:------------|
| Prepare for Upload | アップロードの準備 |「Ready to Upload Binary」をクリックする |
| Waiting For Upload | アップロード待ち | Xcodeか Application Loader でアップロードしてください |
| Upload Received | アップロード受信 | 受信したファイルをシステム処理中 |
| Waiting For Review | レビュー待ち | レビューの順番待ち |
| In Review | レビュー中 | アプリをレビューしている |
| Processing for AppStore | App Storeで処理中 | 24時間以内に販売のための準備が整う想定 |
| Ready for Sale | 販売中 | 承認が通りストアに掲載 |


[iTunes Connect Developer Guide: Viewing and Changing Your App’s Status and Availability](https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/ChangingAppStatus.html)
Windows版Firefoxで同一srcの画像が荒れる


何を言ってるかわからねえと思うがありのままに起こったことをはなすぜ。

同じ画像を同一ページ内でリサイズして使いまわしていた時の話。

```html
<img src="http://dummyimage.com/400x150/000/fff/?text=NEW%E6%96%B0%E3%81%97%E3%81%84"/>

<img src="http://dummyimage.com/400x150/000/fff/?text=NEW%E6%96%B0%E3%81%97%E3%81%84" width="200"/>

<img src="http://dummyimage.com/400x150/000/fff/?text=NEW%E6%96%B0%E3%81%97%E3%81%84" width="100"/>

<img src="http://dummyimage.com/400x150/000/fff/?text=NEW%E6%96%B0%E3%81%97%E3%81%84" width="50"/>
```

[fiddle](http://jsfiddle.net/25Ds5/)

このようなとき、縮小率が50%を切り始めると、小さい方の画像のアンチエイリアスが切れたような感じになる。（ニアレストネイバー法で縮小されている気がする）

![スクリーンショット 2014-06-23 18.07.53.png](https://qiita-image-store.s3.amazonaws.com/778/29064/ce2cf990-1b0c-ebf8-c615-dfb827f44489.png "スクリーンショット 2014-06-23 18.07.53.png")

なにこれ珍百景。

## 対処法

[@yomotsu](https://twitter.com/yomotsu)さんにより対処法が発覚する。

```html
<img src="http://dummyimage.com/400x150/000/fff/?text=NEW%E6%96%B0%E3%81%97%E3%81%84"/>

<img src="http://dummyimage.com/400x150/000/fff/?text=NEW%E6%96%B0%E3%81%97%E3%81%84&bugfix1" width="200"/>

<img src="http://dummyimage.com/400x150/000/fff/?text=NEW%E6%96%B0%E3%81%97%E3%81%84&bugfix2" width="100"/>

<img src="http://dummyimage.com/400x150/000/fff/?text=NEW%E6%96%B0%E3%81%97%E3%81%84&bugfix3" width="50"/>
```

[fiddle](http://jsfiddle.net/25Ds5/2/)

各画像に対して、キャッシュバスターを付与すれば、荒れない。

![スクリーンショット 2014-06-23 18.11.13.png](https://qiita-image-store.s3.amazonaws.com/778/29064/065b1892-a528-254b-3200-dc4ac9846b82.png "スクリーンショット 2014-06-23 18.11.13.png")

でもなぜこうなるのかは不明です。

## 参考

- [Bug 795072 - Support multiple downscale requests](https://bugzilla.mozilla.org/show_bug.cgi?id=795072)
- [Bug 423756 - Request: Switch for authors to turn on/off bilinear filtering when enlarging images](https://bugzilla.mozilla.org/show_bug.cgi?id=423756)
- [How can I fix the image scaling quality?](https://support.mozilla.org/ja/questions/965904)
- [貧乏人のためのＣＧ講座　ＣＧ知識編](http://tt.sakura.ne.jp/~hiropon/lecture/trans.html)
fluentdでformatを作る時


機会的にformat作る事がそこまでないので、特に問題もないかもしれませんが
良い方法を模索中です・・・ネットを漁るとこうゆう記事があがってきます

■参考
[fluentdのformat(正規表現)の作り方について試行錯誤中](http://blog.glidenote.com/blog/2012/07/15/fluentd-regex-debug/)
[Fluentdでparser用の正規表現を書く・試す](http://d.hatena.ne.jp/tagomoris/20120715/1342368392)

また正規表現を書く事になるので以下のページも参照

http://docs.ruby-lang.org/ja/1.9.3/doc/spec=2fregexp.html

[Fluentdでparser用の正規表現を書く・試す](http://d.hatena.ne.jp/tagomoris/20120715/1342368392)の方法だと
irbからうまくfluentdのモジュールが読めなかった・・・

今回は[Fluentdでparser用の正規表現を書く・試す](http://d.hatena.ne.jp/tagomoris/20120715/1342368392)を参考に
色々いじってみました。




##rubyコードを用意

formatを評価してくれる簡単なrbを用意します

```fluentd_debug.rb

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'time'
require 'fluent/log'
require 'fluent/config'
require 'fluent/engine'
require 'fluent/parser'

$log ||= Fluent::Log.new

# debug
log = 'fluent.test.jp 192.168.33.1 - - [18/Jun/2014:12:24:15 +0000] "GET /page.html HTTP/1.1" 304 - 0 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"'

format = /^(?<date>[^ ]+) (?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*) [^ ]* "(?<agent>[^\"]*)"$/

time_format = ''

parser = Fluent::TextParser::RegexpParser.new(format, 'time_format' => time_format)

```

##用意したコードを実行

上記rubyを実行すると`log`に突っ込んだ文字列を
`format`変数で評価する処理を実行します。
成功すると下記のようなoutpugが返却されてきます

```
[root@localhost ruby]# ./bin/ruby fluentd_debug.rb
1403605137
{"date"=>"fluent.test.jp", "host"=>"192.168.33.1", "user"=>"-", "method"=>"GET", "path"=>"/page.html", "code"=>"304", "size"=>"-", "agent"=>"Mozilla/5.0 (Macintosh; Intel M\nac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"}
```

formatが問題なく評価されていれば、Perserでしっかり評価されたjsonが返却されてきます。
文字列に対して対応していないformatを指定してしまうとjsonは返却されてきません

```
[root@localhost ruby]# ./bin/ruby fluentd_debug.rb
<空白改行>
<空白改行>
[root@localhost ruby]#

```

##今回formatしたlog

若干手を加えたapacheログ。
アクセスしに来たドメインを追加してリファラを取り除いてる

```
fluent.test.jp 192.168.33.1 - - [18/Jun/2014:12:24:15 +0000] "GET /page.html HTTP/1.1" 304 - 0 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
```

用意したカスタムフォーマット

```
/^(?<date>[^ ]+)(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*) [^ ]* "(?<agent>[^\"]*)"$/
```

ちなみにapacheのカスタムログはこんな感じでした

```
LogFormat "%v %h %l %u %t \"%r\" %>s %b %T \"%{User-Agent}i\"" vh
```

正規表現難しい・・・
ちなみに正規表現を評価してくれるサイトはこんなのもあります。勉強中です


http://www.rubular.com/
あれ？go言語で実行ファイルのフルパス取れないの？

# Go 1.8 向け追記

[os.Executable](https://golang.org/pkg/os/#Executable)という標準関数で取得できるようになっているようです。

# 元記事


```args0.go
package main

import "fmt"
import "os"

func main(){
        fmt.Printf("os.Args[0]=\"%s\"\n",os.Args[0])
}
```

```text
[C:gosrc]
$ go run args0.go
os.Args[0]="C:\Users\Hayama\AppData\Local\Temp\go-build331085211\command-line-arguments\_obj\exe\args0.exe"
```

うん、`go run`だと問題ない。では、コンパイルしてみよう。

```text
[C:gosrc]
$ go build args0.go
[C:gosrc]
$ args0.exe
os.Args[0]="args0.exe"
[C:gosrc]
$ cd ..
[C:\Opt]
$ gosrc\args0.exe
os.Args[0]="gosrc\args0.exe"
```

あれぇぇぇ？

# (追記) 仕方ないので、モジュール書いた

2回もループ回したり、べたべたやけど

```exename.go
package exename

//#include <windows.h>
import "C"

import "bytes"
import "unicode/utf16"

func Query() string {
	var pathW [C.MAX_PATH]C.WCHAR
	C.GetModuleFileNameW(nil, &pathW[0], C.MAX_PATH)

	var path16 [C.MAX_PATH]uint16
	for i := 0; pathW[i] != 0; i++ {
		path16[i] = (uint16)(pathW[i])
	}

	pathRune := utf16.Decode(path16[:])
	var buffer bytes.Buffer
	for _, ch := range pathRune {
		if ch == 0 {
			break
		}
		buffer.WriteRune(ch)
	}
	return buffer.String()
}
```
SQLの結合条件の右辺と左辺の記述順を統一するワンライナー


```sql
select * 
  from foo f
  join bar b on f.id = b.foo_id 
```
になっているものを

```sql
select * 
  from foo f
  join bar b on b.foo_id = f.id
```

のように、直近のテーブルエイリアス`b`をイコールの左辺側に持ってくるワンライナー

```
perl -pi -e 's/([^\.\s=]+) on ([^\.\s=]+)(\.[^\.\s=]+) = ([^\.\s=]+)(\.[^\.\s=]+)/$1 on $4$5 = $2$3/ if /([^\.\s=]+) on ([^\.\s=]+)(\.[^\.\s=]+) = ([^\.\s=]+)(\.[^\.\s=]+)/ and $1 ne $2' **/*.sql
```

テーブル結合条件のイコールの右辺と左辺の記述順は、
順序的にどちらがいいのかは正直微妙ですが、
これを統一してdiff等で余計な差分を出させないのが目的です。
jQuery、IE8以下で透過PNGが黒くなる場合の対処法

jQuery、IE8以下で透過PNGが黒くなる場合の対処法
==========


■about
----------

jQuery、IE8以下で透過PNGが黒くなる場合の対処法。
CSSにて透過PNGを使っている要素にprogid:DXImageTransformのfilterを指定する。




■code
----------

```JavaScript:JavaScript
/* #mainNav img透過処理 */
$(function() {
    if(navigator.userAgent.indexOf("MSIE") != -1) {
        $('#mainNav img').each(function() {
            if($(this).attr('src').indexOf('.png') != -1) {
                $(this).css({
                    'filter': 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + $(this).attr('src') + '", sizingMethod="scale");'
                });
            }
        });
    }
});
```




■reference
----------

IE8以下で透過PNGが黒くなる場合の対処法 | 技術屋のメモ | HTML,CSS,JavascriptなどWEB技術メモ
http://www.ateliee.com/archives/1093
【メモ】ndk-buildの使い方とandroid.mkの書き方

## 背景
* http://qiita.com/alingogo/items/203477c9da373ab7eacb に、Android上に、NDK実装を試してみた
* android.mkは、自作じゃないので、仕組みなどが分からない
* https://github.com/openxc/android-webcam などのライブラリは、コマンドラインでndk-buildを使って、ビルドしたことがある

## 目的
* コマンドラインで、ndk-buildの使い方を理解できる
* .mkファイルの書き方を理解できる

## ndk-buildの使い方
#### 事前準備
* Windows 7
* [Android NDKのダウンロード](http://developer.android.com/tools/sdk/ndk/index.html)
* 環境変数の PATH にも NDK のフォルダを追加する

#### コマンドの例
|コマンド|意味|
|:-----|:-----|
|ndk-build|普通のビルド|
|ndk-build clean|生成した.soファイルを削除|
|ndk-build NDK_DEBUG=1|デバッグ可能なバイナリの生成(デフォルト: 0)|
|ndk-build V=1|ビルドコマンドを表示|
|ndk-build NDK_LOG=1|NDKのログを表示(デバッグのために)|

#### 補足
* この記述は、Android NDK r4以降の限定


## android.mkの書き方
#### 必須

```
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := webcam
LOCAL_SRC_FILES := webcam.c yuv.c video_device.c util.c capture.c

include $(BUILD_SHARED_LIBRARY)
```

#### 説明
* LOCAL_PATH := $(call my-dir)
 * LOCAL_PATH: 現在のファイルがあるパス、$(CLEAR_VARS)ではクリアされない
 * my-dir: 最後にincludeしたmakefileが含まれるディレクトリを返す
* include $(CLEAR_VARS)
 * CLEAR_VARS: LOCAL_XXX変数を消す
* LOCAL_MODULE 
 * モジュールの名前   
* LOCAL_SRC_FILES
 * ソースファイルのリスト(LOCAL_PATHからの相対パス)
* include $(BUILD_SHARED_LIBRARY)
 * lib$(LOCAL_MODULE).so

#### その他
* http://www.kandroid.org/ndk/docs/ANDROID-MK.html に参照してください（英語）


## 参照
* http://developer.android.com/tools/sdk/ndk/index.html
* http://www.kandroid.org/ndk/docs/OVERVIEW.html
* https://sites.google.com/site/hippunosource/home/android/pureinsutorupuroguramunoandroid-mkno-shuki-fang
* http://blog.makotokw.com/memo/android/android-ndk/
* http://ameblo.jp/ekispresso/entry-10918205130.htmlAp
* https://github.com/openxc/android-webcam
旧ローカルサーチAPIについて

ご担当者様

弊社サイトにて旧ローカルサーチAPIを使用しております。
廃止予定との事ですが、6月時点で旧ローカルサーチAPIへのアクセスは
出来なくなっているでしょうか？

http://developer.yahoo.co.jp/webapi/map/localsearch/v1/localsearch.html

弊社サイトにて6月23日より座標情報が取得できない現象が発生しています。

お手数ですが、ご返信の程、宜しくお願い致します。