OmniAICreator/Qiita-1.07M huggingface dataset:
RubyとGarageBandでルビーの指環を演奏してみた


#はじめに
ふと、Node.jsからMIDIを簡単そうに操作してるデモ（[これ](https://www.youtube.com/watch?v=qWKkEaKL6DQ)）をみてRubyでも出来ないかと検索したところ、[UniMIDI](https://github.com/arirusso/unimidi)というライブラリが有ることを知る。

ところが先のNodeの奴はGarageBand立ち上げるだけで鳴ってたのにUniMIDIでは鳴らないから、まずMIDI環境のセットアップをすることから始める。

#MIDIスタジオの設定
ユーティリティの中のAudio MIDI 設定.appを開く。これだけじゃMIDIスタジオが出ない場合は、ウインドウ > MIDI スタジオを表示を選択。

![スクリーンショット 2014-11-07 18.21.12.png](https://qiita-image-store.s3.amazonaws.com/0/54292/9536dd80-009b-9ba5-84b9-8ab65e94adb3.png "スクリーンショット 2014-11-07 18.21.12.png")

この中のIAC ドライバのプロパティでポートの＋を押して追加。右上の装置はオンラインをチェック。

![スクリーンショット 2014-11-07 18.20.05.png](https://qiita-image-store.s3.amazonaws.com/0/54292/78642d99-52e2-4552-ad27-af5bb2da451d.png "スクリーンショット 2014-11-07 18.20.05.png")

#GarageBandを立ち上げる

本日の主演。色黒だなあ。
![スクリーンショット 2014-11-07 18.47.26.png](https://qiita-image-store.s3.amazonaws.com/0/54292/05f91bf3-64bf-7c54-93d4-3edce661c0fa.png "スクリーンショット 2014-11-07 18.47.26.png")

そのまま左上の鍵盤楽器コレクションを選ぶ。鍵これ。
![スクリーンショット 2014-11-07 18.50.24.png](https://qiita-image-store.s3.amazonaws.com/0/54292/10cc2ef8-7d8e-5825-9264-7991666bec6d.png "スクリーンショット 2014-11-07 18.50.24.png")

Steinway Grand Pianoが選ばれてる状態だと思うのでそのまま待機。のちにこれを鳴らすんだけど結構いい音がする。

#UniMIDIを入れる
実際のところの主役UniMIDIを入れる。これのお陰で簡単にRubyからMIDI信号を操れる。

`gem install unimidi`

以下のサンプルを実行してみる。内容は0x90鍵盤押下、48が音程（ド。C3)、強さ100、っていうMIDI信号を出して、1秒後に0x80で鍵盤を離す、っていう簡単なサンプル。ポーンって鳴ったら成功。

```ruby:porn.rb
require 'unimidi'

output = UniMIDI::Output.use(:first)

output.puts(0x90, 48, 100) # note on
sleep 1 # wait
output.puts(0x80, 48, 100) # note off
```

何かMIDIのデバイスつないでる人は:firstのあたり修正しないとダメかも。

#本題
というのが経緯でこれからが主題。

RubyでMIDIが操れて面白いなあ、ポーンじゃなくてもう少し何か鳴らしたいなあ、じゃあルビーの指環かなあ、だけど48のドを何秒、50のレを何秒って手で書くのは馬鹿らしすぎるなあ、となって、
じゃあ（PCの）キーボードでリアルタイムに入力してその48を何秒のデータ生成すればいいじゃない、って思った。

`ruby hoge.rb`ってやってPCのキーボードをかちゃかちゃやるとそのまま、音がなるアプリ。

もちろんその手の、PCのキーボードを楽器に見立てるソフトはすでにあるのも知ってる（GarageBandにもある）けど、せっかくMIDIの出力が容易になったので入力部分も作れば、立派に楽器になるという点が興味を引いた。

#stdinからキャラクターを取り出す
さてRubyでキーの入力を取り出すにはどうしたもんかなあ、と考えて、ノンブロックなgetcならcursesで出来たような気がすることを思い出す。
いつの間にか、cursesはRuby標準じゃなくなってたのでGemで入れる。

`gem install curses`

`Curses.getch`で入力したキーが取り出せる。

#対応した音を鳴らす

次は入力に応じて、適当にマッピングした音程のMIDI信号を送ってあげればいい。
ここでは取り敢えず、PCキーボードのaをド、sをレ、dをミをする。

```ruby:keynote.rb
require 'unimidi'
require 'curses'

output = UniMIDI::Output.use(:first)

Curses.timeout = 10
loop do
  char = Curses.getch
  notes = {'a'=>48, 's'=>50, 'd'=>52}
  if notes[char]
    output.puts(0x90, notes[char], 100)
  end
end
```

実行してかちゃかちゃasdを叩けば音がなる。これだけでも楽器になってて感動する。

#機能追加
ここまでできればあとは作りこみ次第。

aから]までマッピングを増やしてqの列を黒鍵盤に当てたりする。
入力した時間とキーを覚えておくモードをつければ録音機能になって、演奏の再現ができるようになる。
Cメジャー以外も簡単に弾けるようにトランスポーズをつける。
あと表示もちょっと整えて、わかりやすくする。

そうして出来たもの:https://github.com/ymmtmdk/keyboard_keyboard

#演奏してみた
準備が整ったので心のおもむくままルビーの指環を弾いて完成。
RailsでCOUNT DISTINCTする方法

よく忘れるのでメモ。

通常はリレーションで解決するのであまり使いませんが、Rails(ActiveRecord)で ```SELECT COUNT(DISTINCT some_id) FROM users``` のようなSQLを実装する方法です。
少し古い情報には

```ruby
User.count(:some_id, distinct: true)
```

と書いてあることが多いですが、rails4ではこの方法ではできません。
以下のようにすれば実装できます。

```ruby
User.distinct.count(:some_id)
```

以下のSQLに展開されます。

```sql
SELECT DISTINCT COUNT(DISTINCT `users`.`some_id`) FROM `users`
```

**追記**

上記のSQLだと全件サーチになるのですごく遅いです。

```sql
SELECT COUNT(DISTINCT `users`.`some_id`) FROM `users`
```

ならUsing index for group-byになってかなり速くなります。が、このSQLをARで生成する方法が分からない。


仕方なく

```ruby
User.count('DISTINCT some_id')
```

にしたところ後者のSQLに展開されました。
Ubuntu/RaspbianでWi-Fi設定を3秒でイナフできなかった理由

なんか地味にハマったのですがMacでは見れているのに、Raspberry Piから見えないWi-Fiがあって、それがわからずにいろいろnetwork周りの設定をいじっていてハマりました。

一つずつちゃんと確認したらすぐに解決したのでメモ

## lsusb

まずUSB差した無線LANが認識されているか確認。

```
$ lsusb
...
Bus 001 Device 005: ID 2345:2345 Logitec Corp. LAN-W150N/U2 Wireless LAN Adapter
...
```

うん、ちゃんと認識されていることを確認。

## iwlist

```
sudo iwlist wlan0 scan | SSID
```

これで確認したら、Macで認識できているSSIDが表示されませんでした＼(^o^)／
原因はわかりませんが、認識されているSSIDの設定をしたら解決しました。

## 設定

```
# /etc/network/interfaces
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-driver wext
wpa-essid "<SSID>"
wpa-psk "<PASSWORD>"
```

あとはrestart

```
sudo service network restart
```

ちゃんと確認しないとだめですね。
Sinatra, mongoidなアプリでwill_paginateを導入(ついでにBootstrap)




検討
=====

[mislav/will_paginate](https://github.com/mislav/will_paginate)
---
https://github.com/mislav/will_paginate
本家。
でも`gem install`すると入るver.3.0.7だとmongoid.rbがなかったりする。
なのでGemfileの記述は下記のように。

```Gemfile
gem 'will_paginate', :git => 'git://github.com/mislav/will_paginate.git',
                     :branch => 'master'
```

[lucasas/will_paginate_mongoid](https://github.com/lucasas/will_paginate_mongoid)
-----
https://github.com/lucasas/will_paginate_mongoid
結局こっち使った。導入は次項にて。

will_paginateとwill_paginate_mongoidどっちにしようか、と。
結局はwill_paginate_mongoidにした。
kaminariも検討したけど、Bootstrap対応とか面倒そう？だったり、
will_paginateを試してるうちにできちゃったから試してない。



will_paginate_mongoidの導入
=====

```Gemfile
gem 'will_paginate_mongoid'
```

```app.rb
...
require 'will_paginate_mongoid'
require 'will_paginate/view_helpers/sinatra'
...

helpers WillPaginate::Sinatra
```

```sample.slim
== will_paginate Model.paginate
```

ポイント的なこと
-----

`will_paginate/view_helpers/sinatra`
なんかSinatraの場合必要っぽいよ。
更に`helpers WillPaginate::Sinatra`でincludeしておかないと`will_paginate`がundef。



Bootstrap
=====

デザインをBootstrapに合わせたい場合、追加で下記も。

```Gemfile
gem 'will_paginate_mongoid'
gem 'will_paginate-bootstrap'  # add
```

```app.rb
...
require 'will_paginate_mongoid'
require 'will_paginate/view_helpers/sinatra'
require 'will_paginate-bootstrap'
...

helpers WillPaginate::Sinatra
```

```sample.slim
/ == will_paginate Model.paginate
== will_paginate(body_weights_paginate, renderer: BootstrapPagination::Sinatra)
```

普通にgemの導入して`will_paginate`にオプションで`renderer: BootstrapPagination::Sinatra`を追加するだけ。
とりあえずそれっぽくなる。
Kobito 上で編集したが Qiita へ同期されていないアイテムを一覧する


Kobito って、編集したのに Qiita へ同期されていないアイテムがどれとどれなのかが分かりませんよね？

しかたがないので、DB に訊きます（下記 DB ファイルの位置は Kobito-2.0 の場合です。1.9 では `~/Library/Kobito/Kobito.db` にありました。スキーマはそんなに変わっていない様子）。

~~~~bash:-
$ sqlite3 ~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito/Kobito.db
~~~~

以下で、タイトルが一覧されます（テーブル定義についてのメモは「[SQLite3 - Kobito の markdown データをコマンドラインからダンプする - Qiita](http://qiita.com/knaka/items/4c9a714de94205238671)」に書きました）。

~~~~sql:-
SELECT '「' || ztitle || '」'
FROM zitem
WHERE
  zin_trash IS NULL AND -- 捨てたアイテムを除く
  (
    zuuid IS NULL OR -- 未投稿
    zupdated_at > zupdated_at_on_qiita + 30 -- 編集したが未同期
  )
ORDER BY zupdated_at DESC
;
~~~~

上記の「+ 30」ですが、同期を行うと、Qiita に同期された後に、アイテムには「同期が行われた」という更新がかかってしまう（zupdated_at が上がってしまう）ので、しきい値（ここでは適当に 30 秒とした）を設けて判定せざるを得ないようです。ネットワーク状態が悪い時に同期すると、平気で 10 秒以上、場合によっては 40 秒以上のラグが出ている模様。ですので、「Qiita へ同期されてから 30 秒後以降に編集・保存したアイテム」を一覧していることになりますわ。

なお、「Qiita から取得…」で Kobito へ落ちたアイテムでは、zupdated_at と zupdated_at_on_qiita とはキッチリ一致しますので、上記で良いようです。

そんなに厳密でなくて良いので、これでだいたい足りますが、もっと良い手はありますでしょうかね？

では。
Xcode6でarmv7sがArchitecturesから外されているので、手動で追加する


なぜかXcode6からArchitecturesの`$(ARCHS_STANDARD)`からarmv7sが外されている。基本は、外されていようと大丈夫なんだけどframeworkとかライブラリを作る際には含めておいたほうが良い…というわけで、手動で追加する。

単純に、Architecturesに`armv7s`を手動で追加するだけ。

![スクリーンショット 2014-11-07 20.29.13.png](https://qiita-image-store.s3.amazonaws.com/0/2152/a7c4bf6a-f217-1589-4826-c440077f0d3d.png "スクリーンショット 2014-11-07 20.29.13.png")

これでビルドすればOK。

含まれているかどうかを確認するには`file`コマンドで。

```bash:command
$ file hogehoge.a
hogehoge.a: Mach-O universal binary with 5 architectures
hogehoge.a (for architecture armv7): current ar archive random library
hogehoge.a (for architecture armv7s): current ar archive random library
hogehoge.a (for architecture arm64): current ar archive random library
hogehoge.a (for architecture i386): current ar archive random library
hogehoge.a (for architecture x86_64): current ar archive random library
```
deviseを入れたrailsアプリのscaffoldで生成されるコントローラが少し変わった話


## 環境
+ ruby 2.1.3
+ rails 4.1.7
+ devise 3.4.1

※いずれも2014/11/7時点で最新安定バージョン

##本題

```bash
rails g scaffold hoge
```
したときに、今ままで


```ruby
# GET /hoges
# GET /hoges.json
def index
  @hoges = Hoge.all
end
```

みたいに生成されていたコントローラが、

```ruby
def index
  @hoges = Hoge.all
  respond_with(@hoges)
end
```

というように生成されるようになっていた。

このまま動かすと、

```error
In order to use respond_with, first you need to declare the formats your controller responds to in the class level.
```

というように、どのフォーマットで返すか指定しろや〜〜と怒られてしまう。


## 原因
最近、railsがrespond_withを別メソッドに切り出すようになった余波。
deviseがrespond_with使いて〜ぜ〜ってなったときに、railsの中から消えていたので、respondersというgem呼ぶぜ〜〜ってなって、responders使うための一手間が必要になったみたい。

https://github.com/plataformatec/responders/blob/master/lib/action_controller/respond_with.rb#L190
![スクリーンショット 2014-11-07 20.48.40.png](https://qiita-image-store.s3.amazonaws.com/0/3251/627ca936-8555-669d-5902-1ca3c340e9f8.png "スクリーンショット 2014-11-07 20.48.40.png")


## 解決方法
いろいろあるけど、コントローラ内で respond_to :html 宣言すると手っ取り早い。

```ruby
respond_to do |format|
  format.html
end
```
とかでも対応できる。

## 背景
なんでrails4.2からrespond_withさん別gemになったん？
http://stackoverflow.com/questions/25998437/why-is-respond-with-being-removed-from-rails-4-2-into-its-own-gem

DHHさんの考え(https://github.com/rails/rails/pull/12136#issuecomment-50216483)
>I'd like to take this opportunity to split respond_with/class-level respond_to into an external plugin. I'm generally not a fan of the code that comes out of using this pattern. It encourages model#to_json and it hides the difference between HTML and API responses in ways that convolute the code.
So how about we split this into a gem for 4.2, with the current behavior, but also with an option to get the new behavior as suggested here through a configuration point.

「respond_withみたいなパターンのコードは好きじゃないから切り出したいなーって思ってた。respond_withはHTMLとAPIのレスポンスの違いを隠しちょるからな。」みたいなことをおっしゃってる。

## respond_withについて
ここが分かりやすい。
http://blog.livedoor.jp/sasata299/archives/51804693.html
オフラインリアルタイムどう書く #27 の解答例

```ruby
#coding:utf-8

def exist src, ptns
    ptns.each.any? do |ptn|
        ptn.each_char.all?{|c| !src.include? c}
    end
end

def proc src
    h = {
        14 =>%w(abc gc gh),
        15 =>%w(ab ge),
        16 =>%w(abc ghi gc),
        24 =>%w(dc h),
        25 =>%w(de),
        26 =>%w(hi dc),
        34 =>%w(bc fgc fgh),
        35 =>%w(b fge),
        36 =>%w(fghi bc fgc),
    }
    
    res = []
    h.each do |k,v|
        res.push k if exist(src, v)
    end
    res.empty? ? "-" : res.join(",")
end

DATA.each do |d|
    n, src, dst = d.split
    res = proc src
    puts "#{n} : #{src} : #{res} != #{dst}" unless res == dst
end


__END__
0	befi	14,16,24,26
1	abc	14,15,16,24,25,26,34,35,36
2	de	14,15,16,24,26,34,35,36
3	fghi	14,15,16,24,25,26,34,35,36
4	abcdefghi	-
5	ag	24,25,26,34,35,36
6	dh	14,15,16,34,35,36
7	bf	14,15,16,24,25,26
8	ch	15,25,35
9	be	14,16,24,26,34,36
10	ci	14,15,24,25,34,35
```
第27回オフラインリアルタイムどう書くの問題をRubyで解く

問題はこちらから
http://qiita.com/Nabetani/items/23ebddb44f0234e7fb15

```rb
RAILS=[
      ["14",["abc","gc","gh"]],
      ["15",["ab","ge"]],
      ["16",["abc","ghi","gc"]],
      ["24",["dc","h"]],
      ["25",["de"]],
      ["26",["hi","dc"]],
      ["34",["bc","fgc","fgh"]],
      ["35",["b","fge"]],
      ["36",["fghi","bc","fgc"]],
]

def solve(q)
  RAILS.map{|r, points|
    points.select{|ps| (ps.chars-q.chars).join==ps}.empty? ? nil : r
  }.select{|r| r}.join(",")
end

DATA.readlines.each do |line|
  no,q,a = line.strip.split(/\s+/)
  ans = solve(q)
  ans = "-" if ans == ""
  print no + "\t" + ans
  puts ans == a ? ' o' : ' x'
end
__END__
0	befi	14,16,24,26
1	abc	14,15,16,24,25,26,34,35,36
2	de	14,15,16,24,26,34,35,36
3	fghi	14,15,16,24,25,26,34,35,36
4	abcdefghi	-
5	ag	24,25,26,34,35,36
6	dh	14,15,16,34,35,36
7	bf	14,15,16,24,25,26
8	ch	15,25,35
9	be	14,16,24,26,34,36
10	ci	14,15,24,25,34,35
11	cgi	15,24,25,35
12	acgi	24,25,35
13	cdefghi	15,35
14	acdefghi	35
15	cdegi	15,24,35
16	bcdegi	24
17	afh	14,15,16,24,25,26,34,35,36
18	abfh	14,15,16,24,25,26
19	dfh	14,15,16,34,35,36
20	cdfh	15,35
21	deh	14,15,16,34,35,36
22	cdeh	15,35
23	abefgh	24,26
24	abdefgh	-
25	acfghi	25,35
26	acdfghi	35
27	cegi	15,24,35
28	abcfhi	15,25
29	abcefhi	-
30	abdi	14,15,16,24,34,35,36
31	abdfi	14,15,16,24
32	bdi	14,15,16,24,34,35,36
33	bdfi	14,15,16,24
34	adfh	14,15,16,34,35,36
35	adfgh	34,35,36
36	acdfhi	15,35
37	bcdfgi	24
38	bcdfghi	-
39	defi	14,15,16,24,34,35,36
40	defhi	14,15,16,34,35,36
41	cdefg	15,24,26,35
42	cdefgi	15,24,35
43	bdefg	24,26
44	bdefgi	24
```
分岐と行き止まり


なんと適当なプログラムでしょう！

```rb:hena27.rb
#!/usr/bin/env ruby
#http://qiita.com/Nabetani/items/23ebddb44f0234e7fb15
#http://nabetani.sakura.ne.jp/hena/ord27raswi/

T=[
	[
		["abc","gc","gh"],
		["ab","ge"],
		["abc","gc","ghi"],
	],[
		["dc","h"],
		["de"],
		["hi","dc"],
	],[
		["bc","fgc","fgh"],
		["b","fge"],
		["bc","fgc","fghi"],
	],
]
if $0==__FILE__
	STDOUT.sync=true
	while gets
		result=T.flat_map.with_index(1){|e,i|
			e.map.with_index(4).select{|f,j|
				f.any?{|g|
					g.chars.none?(&$_.method(:include?))
				}
			}.map{|f,j|i.to_s+j.to_s}
		}*','
		puts result.empty? ? '-' : result
	end
end
```
expected Exception but was not given a block

##expected Exception but was not given a block

Rspecにて自分が困ったエラーとその対処法のメモになります。

>expect(~).to raise_error

というようなコードに対して、

>Failure/Error: expect(~).to raise_error
expected Exception but was not given a block

ブロックが与えられていない、と怒られました。

この原因は「expect{}」と「expect()」の違いでした。

対象のexpect(~)をexpect{~}に修正したら通るようになりました。

それまでexpect(~).to eq()という形で使うことが続いていたので、
うっかり勘違いしていました。

この違いの詳しい情報に関しては下記URLが大変参考になります。

##参考URL
http://mugenup-tech.hatenadiary.com/entry/2013/11/26/123933
大量のメールを telnet + POP3 で一括削除


POP3を提供しているサーバーに`telnet`する。
ポートは110番。

```bash:
$ telnet example.com 110
Trying XXX.XXX.XXX.XXX...
Connected to mail.example.com.
Escape character is '^]'.
+OK
```

なお、MacOS では High Sierra 以降 `telnet` コマンドが同梱されなくなったが、`curl telnet://example.com:110` で代用できる。


`USER`コマンド

```
USER xxx@example.com
+OK
```

`PASS`コマンド

```
PASS XXXXXXX
+OK Logged in.
```

以上でログイン完了。

`STAT`コマンド

```
STAT
+OK 702611 4556156834
```

`STAT`コマンドでサーバーに溜まっているメールの件数と容量を確認（上の例では70万数千件／4GB以上溜まっている）。


`DELE`コマンド

```
DELE 1
DELE 2
DELE 3
DELE 4
DELE 5
...
+OK Marked to be deleted.
+OK Marked to be deleted.
+OK Marked to be deleted.
+OK Marked to be deleted.
+OK Marked to be deleted.
...
```

削除したいメールの件数分、`DELE`コマンドを打つ（引数はメッセージ番号で、常に1から始まる）。
70万件削除するなら、`DELE 1` 〜 `DELE 700000`まで入力する。
ただ、あまりに件数が多いと終わらないうちにタイムアウトして強制ログアウトされてしまう場合があるので、10万件ずつなどにしておくのがよいのではないか。

`DELE`コマンド10万回分をコピペできるように [gist にした](https://gist.githubusercontent.com/rinopo/92a2b1464ddc0bc8a8a22091fb7bd60b/raw/4592f176ae910744a88ebd2ce659b6f56d4e9e96/gistfile1.txt)（注意：最終行に`QUIT`コマンドも入れている）。


`QUIT`コマンド

```
QUIT
+OK Logging out, messages deleted.
Connection closed by foreign host.
```

実は`DELE`コマンドだけでは実際の削除は完了しておらず、削除したいメッセージにマーキングされるだけ。
`QUIT`したときにはじめて実際の削除がなされる（`QUIT`する前なら`RSET`コマンドを打てば取り消せる）。
なので、70万件を10万件ずつ削除するなら、7回、ログイン／ログアウトを繰り返して`DELE 1` 〜 `DELE 100000`する必要がある。

以上です。

## その他のコマンド

`RETR [メッセージ番号]`
メッセージの内容を表示。

`RSET`
削除取り消し。

[POP3コマンドの一覧](http://www.atmarkit.co.jp/fnetwork/rensai/netpro07/pop3-commands.html)
第27回オフラインリアルタイムどう書くの問題


オフラインでリアルタイムに「どう書く」をやるイベント( http://yhpg.doorkeeper.jp/events/16017 )を行っています。

問題は「分岐と行き止まり」という名前で、詳細は
http://nabetani.sakura.ne.jp/hena/ord27raswi/
です。

出題者の気分としては、問題を読み始めてから解けるまで1時間ぐらいあれば足りるかな、と思ってますが、ひとそれぞれで。

実装ができた方はこちらのコメント欄からリンクを張っていただくと見つけやすくて助かります。

似たような問題をもっと解きたいという方は、
https://nabetani.hatenadiary.com/entry/yhpg_list
に過去問リンク集がありますので、そちらをご覧になると良いと思います。
PHPでコマンドライン実行時のパラメータ（引数）取得　- $argv、$argc

#コマンドライン実行時に引数を渡す
業務で数カ月に一回くらい、PHPファイルを作ったり修正したりするんですが
毎回、忘れたころにぐぐって、あーこんなんでしたってなるなる。
記事を書いて少しでも覚えられますように。

##$argvと$argc
PHPをコマンドラインで実行すると、コマンドラインで指定した引数の情報が$argc、$argvという変数に格納されます。
第一引数は必ず、スクリプトのパスが入っているので注意　※毎回ここでひっかかります…

```
#コマンドライン
$ php test.php "param1" "param2"  
```

```
$argc '' 引数の数 $argc = 1
$argv '' 引数情報の配列 $argv[0] = "test.php", $argv[1] = "param1", $argv[2] = "param2"
```
```

##引数を指定しない場合
こんな場合でも引数は入ってきます。
第一引数にスクリプトのフルパスが入ってきます。

```
#コマンドライン
$ php test.php 
```
```
$argc '' 引数の数 $argc = 1
$argv '' 引数情報の配列 $argv[0] = "test.php"
```
##サンプルコード

```
#コマンドライン
$ php date.php "20141107"  
```

```
<?php
  $yyyy = substr($argv[1], 0, 4);
  $mm = substr($argv[1], 4, 2);
  $dd = substr($argv[1], 6, 2);

 echo '引数に指定した日時は{$yyyy}年{$mm}月{$dd}日です'
```
【Rails】【Rspec2】hashの中の特定のkeyのみ、hash同士でeq比較

```rb
hash1 = { a: 'aaa', b: 'bbb', c: 'ccc', d: 'ddd' }
hash2 = { a: 'aaa', b: 'test!', d: 'ddd' }

expect(hash1.slice(*hash2.keys)).to eq(hash2)
```

```diff
(compared using ==)
 :a => "aaa",
-:b => "test!",
+:b => "bbb",
 :d => "ddd"
```

Rspec3には良いマッチャーがたくさんあるというのに、所属プロジェクトのrspecはバージョンが2・・・
keyをeachでまわしてもいいけど、結果がkeyと共にdiffで見れた方がいいし。

なぜrspec2だと？、

```rb
expect(hash1).to include(hash2)
```

で、hash2が配列展開されてしまうのか。。。

rspec3だとmatchかincludeあたりで簡単に出来たような(´・ω・｀)
MAMPでpdoが動きません>< "could not find driver" とか出てます

時間がないのでポイントだけ。

phpinfoを見てみる。
http://localhost:8888/MAMP/index.php?page=phpinfo

画面内を「pdo」で検索してみる。
PDO Driverの項目にsqliteしか出てない。mysqlが無い。

画面内を「extension_dir」で検索してみる。
何か複雑なパスが書いてあるが、これがちゃんとあるか確認。
無かった。と言うか名前が違った。

画面内を「php.ini」で検索してみる。
php.iniのパスが多分引っかかる。このファイルを開く。

extension_dirの設定をphp.iniで変更。正しいパスにした。
Good！動いた。
Rails4系ですべてのhelperがviewから読めるのを禁止する設定


rails g系のコマンドでコントローラーと一緒に生成されて、さもネームスペース切られてまっせ的な雰囲気を醸し出しているhelperさんですが、どうやら一緒くたんにロードされているらしく、どのviewからも余裕でメソッドコール出来る始末。

１コントローラーに全部インクルードされるんですか！気持ち悪いですね！ということで色々調べた結果、詳細はちゃんとrelase noteに記述してあったというオチ。

## 3_1_release_notes.md

```
* Added `config.action_controller.include_all_helpers`. By default `helper :all` is done in `ActionController::Base`, which includes all the helpers by default. Setting `include_all_helpers` to `false` will result in including only application_helper and the helper corresponding to controller (like foo_helper for foo_controller).
```
なので、

```ruby
config.action_controller.include_all_helpers = false
```

を設定すればおｋ。

ううーむ。includeするしないの処理が重たいとか...？デフォルトでオンになってる理由はわかんなかったです。

## 追記
設定を切り替えた際に、helperがちゃんと存在するかどうかは、RSpecのControllerの設定で拾えそう

```
describe HogeController do
  # この設定をすると実際にviewを描画する
  render_views
  ...
end
```
Python で Project Euler #5「最小の倍数」

[Problem 5 「最小の倍数」](http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%205)

> 2520 は 1 から 10 の数字の全ての整数で割り切れる数字であり, そのような数字の中では最小の値である.
> では, 1 から 20 までの整数全てで割り切れる数字の中で最小の正の数はいくらになるか.

```py:Python
MAX = 20
seq = range(1, MAX+1)

def compute_prime_factors(x):
  prime_factors = {}
  i = 2
  while x > 1:
    if x % i == 0:
      if(not prime_factors.has_key(i)):
        prime_factors[i] = 0
      prime_factors[i] += 1
      x = x / i
    else:
      i += 1
  return prime_factors

prime_factors = [compute_prime_factors(i) for i in seq]
result_dic = {}
for dic in prime_factors:
  for key in dic.keys():
    if(result_dic.has_key(key)):
      result_dic[key] = max(result_dic[key], dic[key])
    else:
      result_dic[key] = dic[key]

factors = [key ** result_dic[key] for key in result_dic.keys()]
result = reduce(lambda x,y: x * y, factors)

print result
print result == 232792560
print prime_factors
print result_dic
print factors
```

```:結果
232792560
True
[{}, {2: 1}, {3: 1}, {2: 2}, {5: 1}, {2: 1, 3: 1}, {7: 1}, {2: 3}, {3: 2}, {2: 1, 5: 1}, {11: 1}, {2: 2, 3: 1}, {13: 1}, {2: 1, 7: 1}, {3: 1, 5: 1}, {2: 4}, {17: 1}, {2: 1, 3: 2}, {19: 1}, {2: 2, 5: 1}]
{2: 4, 3: 2, 5: 1, 7: 1, 11: 1, 13: 1, 17: 1, 19: 1}
[16, 9, 5, 7, 11, 13, 17, 19]
```
削除されたリモートリポジトリのブランチをローカルに反映させる


リモートリポジトリにあるブランチは削除されたのに、ローカルにはリモートリポジトリのブランチがある状態。

ブランチを確認

```
git remote prune --dry-run origin
```


削除しても問題なければ以下を実行すると、リモートのリポジトリのブランチとローカルのリモートリポジトリのブランチが同期する

```
git remote prune origin
```

参考：http://te2u.hatenablog.jp/entry/2014/09/01/223852
docker exec でコマンドが失敗しても 0 で終了する件

```console
$ docker exec $CID false
$ echo $?
0
```

- https://github.com/docker/docker/issues/8703

この Issue の通り。実装は、難しくはないけど "boring" らしいのでいつ対応されるか。。。

とりあえずぼくはこうしたッス：

```bash
$ docker exec $CID /bin/bash -c 'false; echo $? > /tmp/return-code'
# false or some command to fail
$ test $(docker exec $CID /bin/cat /tmp/return-code) -eq "0"
```
Swiftで笑顔認識をやってみた


# Swiftで笑顔認識をやってみました。

コードは[こちら](https://github.com/ken0nek/SmileSwift)
iOS7からApple公式APIで顔認識ができるようになったので、Swiftで書いてみました。

## 追記
~~Swift2にupdateしました。~~
~~Swift3にupdateしました。（2016/09/28）~~
Swift4 Xcode9 でも動きます。（2018/01/14）

# コード

```swift

guard let image = self.sampleImageView.image, let cgImage = image.cgImage else {
    return
}

// storyboardに置いたimageViewからCIImageを生成する
let ciImage = CIImage(cgImage: cgImage)

// 顔認識なのでTypeをCIDetectorTypeFaceに指定する
let detector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: [CIDetectorAccuracy: CIDetectorAccuracyHigh])

// 取得するパラメーターを指定する
let options = [CIDetectorSmile : true, CIDetectorEyeBlink : true]

// 画像から特徴を抽出する
let features = detector.featuresInImage(ciImage, options: options)

var resultString = "DETECTED FACES:\n\n"

for feature in features as! [CIFaceFeature] {
    resultString.append("bounds: \(NSStringFromCGRect(feature.bounds))\n")
    resultString.append("hasSmile: \(feature.hasSmile ? "YES" : "NO")\n")
    
    resultString.append("\n")
}

```

#実行画面

![Screen Shot 2014-11-07 at 17.29.00.png](https://qiita-image-store.s3.amazonaws.com/0/58141/7d41f4e5-e7b5-6e1c-00f3-ff565d16c293.png)

##CIFaceFeatureについて
[CIFaceFeature]( https://developer.apple.com/Library/ios/documentation/CoreImage/Reference/CIFaceFeature/
)で取得できるもの


主なプロパティだと、以下のものなどがあります

| プロパティ | 型 | 説明 |
|:----------:|:------------:|:------------:|
| bounds     | CGRect | 画像内での顔の座標と大きさ |
| hasSmile | Bool | 笑顔かどうか |
| faceAngle | Float | 顔の傾き |
| leftEyePosition | CGPoint | 左目の位置 |
| rightEyePosition | CGPoint | 右目の位置 |
| mouthPosition | CGPoint | 口の位置 |

他にも、leftEyeClosedやrightEyeClosedなどのプロパティがあるので、ウィンクでシャッターを切ることも可能になります。

しかし、CIFaceFeatureでのright, leftは画像内での左右であって、
鏡映している場合は、その人物の左目・右目とは一致しないので、注意が必要です。

```
“Right”/"Left" is relative to the original (non-mirrored) image orientation, not to the owner of the eye.
```

#CIDetectorについて

今回は、[CIDetector](https://developer.apple.com/library/ios/Documentation/CoreImage/Reference/CIDetector_Ref/)を顔認識に使いましたが、他の対象物の認識にも利用できるようです。

| detectorOfType | 説明 |
|:----------:|:------------:|
| CIDetectorTypeFace | 顔認識 ( face recognition ) |
| CIDetectorTypeRectangle | 矩形認識 ( rectangle detection ) |
| CIDetectorTypeQRCode | QRコード認識 ( barcode detection ) |
| CIDetectorTypeText | 文字認識 ( text detection ) |

#参考

@shu223さん
https://github.com/shu223/iOS7-Sampler/blob/master/iOS7Sampler/SampleViewControllers/SmileDetectionViewController.m

Objective-Cで書かれていますが、Appleのサンプルコードも参考になります
https://developer.apple.com/library/IOs/samplecode/SquareCam/Introduction/Intro.html

写真はこちらから
http://www.ashinari.com/2012/02/06-357198.php?category=265
Rails4で中間テーブルがポリモーフィックなテーブルとhas_many throughする

## 問題

中間テーブルを簡単につなぐことができるhas_many throughは便利だけど、中間テーブルがポリモーフィックな場合はどう書けばいいの？

## こう書けば良い

以下の図のように、StudyPaticipantが中間テーブルかつポリモーフィックなモデルだとします。

```
  User - has_many -> StudyParticipant - has_many -> Subsciption
                                      - has_many -> Adoption
```

で、こんな感じにSubscriptionやAdoptionを引っ張りたい。

```rb
user.subscriptions
user.adoptions
```

そんなときはこんな感じに定義すれば良いようです。

```rb
# user.rb
class User < ActiveRecord::Base
  has_many :study_participants
  has_many :subscriptions, through: :study_participants, source: :study, source_type: 'Subscription'
  has_many :adoptions, through: :study_participants, source: :study, source_type: 'Adoption'
end

# study_participant.rb
class StudyParticipant < ActiveRecord::Base
  belongs_to :study, polymorphic: true
end

# subscription.rb
class Subscription < ActiveRecord::Base
  has_many :study_participants, as: :study
end

# adoption.rb
class Adoption < ActiveRecord::Base
  has_many :study_participants, as: :study
end
```

Rails3のときはhas_manyのconditionsキーでベタに書いていた気がするのですが、Rails4からはsource_typeというキーが用意されていました。
[heroku] memory quota exceeded のエラーへの対応

# 前置き

Heroku で Rails 4.1, Ruby 2.1.3 アプリを動かしてます。
Papertrail や FlyData でログを回収していたら、やたらエラーが出ることが分かりました。

```rb
heroku/web.1: Error R14 (Memory quota exceeded)
```

# Heroku Error Code

[Heroku の Error Code 一覧](https://devcenter.heroku.com/articles/error-codes)から参照します。

```rb:R14
R14 - Memory quota exceeded
A dyno requires memory in excess of its quota (512 MB on 1X dynos, 1024 MB on 2X dynos) . If this error occurs, the dyno will page to swap space to continue running, which may cause degraded process performance.
====

2011-05-03T17:40:10+00:00 app[worker.1]: Working
2011-05-03T17:40:10+00:00 heroku[worker.1]: Process running mem=528MB(103.3%)
2011-05-03T17:40:11+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded)
2011-05-03T17:41:52+00:00 app[worker.1]: Working
R15 - Memory quota vastly exceeded
```

# 対応

## 環境変数 WEB_CONCURRENCY の設定

使用中のDynoの数に合わせる。

```rb
$ heroku config:set WEB_CONCURRENCY=1 # Dynoが1の場合
```

## Unicornの設定

webサーバーに Unicorn を使っているので、Unicorn の worker 数を下げることがひとつの解決策の様です。

```rb:config/unicorn.rb
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 2) # 2の部分
```

## 他

他にもrubyのバージョンを 2.0 に下げるといいなどあるようですが。。。

# References

* https://devcenter.heroku.com/articles/rails-unicorn
* http://stackoverflow.com/questions/23858694/rails-4-error-r14-on-heroku-memory-quota-exceeded
*
Railsのプロジェクトを Ruby1.9.3 から Ruby2.1上げる方法

ブログより転載：http://konyu.hatenablog.com/entry/2014/11/07/173059

**ツッコミ大歓迎 むしろいい方法をご教示ください。**

1.9系から2系には今のところ、バージョンをあげて開発環境で動かしてみたところ大体うごいた 
だからといって本番環境で動かすのは怖いので調査する

#### 目的: Ruby2.1で動作すること

そこで1.9からの非互換性のあるものがないか調査

----

## Ruby1.9から2.0へ非互換な機能
> 1.3. 互換性の無い変更点
Ruby2.0 は Ruby1.9 と完全互換ではなく、いくつか互換性の無い変更も存在します。公式のアナウンスでは特筆すべき非互換として以下の項目が挙げられています。

>デフォルトのエンコーディングが UTF-8 に変更。ただしパフォーマンスに大きな影響があるかもしれず、公式リリースまでに変更される可能性があるとのことです。
標準添付ライブラリの iconv の削除（Ruby 1.9 時点で非推奨）。代わりに Ruby2.0 からは String#encode メソッドを使用します。
ABI (Application Binary Interface) の非互換。

参考: http://www.techscore.com/tech/Ruby/ruby-2.0/welcome-to-ruby-2.0/#3

**iconvを使っているところに注目すればよい**

--------

## Ruby2.0から2.1へ非互換な機能

>Ruby 2.1.0 をリリースしました。
>Ruby 2.1 では深刻な非互換もなく、速度の向上を含めた多くの改善が行われています。
どうぞご利用ください。

参考: https://www.ruby-lang.org/ja/news/2013/12/25/ruby-2-1-0-is-released/

**2.0から2.1は特に何もしなくて良い**

---------

つまり以下の箇所からiconvを使っている箇所を洗い出す。

* Gemfileで記載している、使用ライブラリ
* 自分のコード(appやlib)


洗いだしたら次に以下のことを実施する

* String#encode に書き換える。
* またはgemのバージョンアップし、対応を状況を確認する
* gemのバージョンをあげた場合、そのgemの使用箇所を動作確認し、必要があれば修正


自分のコード内には、幸い存在しなかった


使用しているgemをiconvで全文検索すると、　
以下のようにString#encodeがある場合とない場合に対応するように書いてあれば、問題が無い

```rb

def force_to_utf8(string)
  if NewRelic::LanguageSupport.supports_string_encodings?
    string.force_encoding('ISO-8859-1').encode('UTF-8')
  else
    Iconv.iconv('utf-8', 'iso-8859-1', string).join
  end
end


```
MongoDBメモ


+ MongoDBを学ぶとき
http://gihyo.jp/dev/serial/01/mongodb/

+ SQLとの対応
 http://taka512.hatenablog.com/entry/20110220/1298195574

+ Rubyでjsonを入出力するとき
http://qiita.com/knt45/items/0f781a6e381c18572532

+ RubyでMongoDBを使うとき
http://mironal-memo.blogspot.jp/2012/07/mongodb-ruby.html

+ Collectionが大きくなりすぎてソートできない時(hintを使う)
 http://docs.mongodb.org/manual/core/index-sparse/#sparse-index-and-incomplete-results

```js
db.col.ensureIndex({time: 1}, {sparse: true})
db.col.find().sort({time:1}).hint({time: 1})
```



なかなか便利そうなので
詳しくなっていきたい
Rubyのヒアドキュメントの代わりにERBを使う


長めの文字列に変数を埋め込んで生成したい場合に、ヒアドキュメントで以下のようにやっていたんですが

```
class ProductDecorator
  def spec_table_html
    <<-HTML
      <table>
        <tr>
          <th>Height</th>
          <td><%= height %></td>
        </tr>
        <tr>
          <th>Width</th>
          <td><%= width %></td>
        </tr>
      </table>
    HTML
  end
end
```

見づらいし、ruby内の文字列だからhtmlのシンタックスハイライト効かないしイケてないのでERB使って別ファイルにしました

ERBは```require 'erb'```して使うんですが、Railsなら既に読み込んでると思います

使い方はこう（＠hnakamurさんのコメントを受けてERB#resultに修正）

```
class ProductDecorator
  def spec_table_html
    # テンプレートファイルを開く
    erb = Rails.root.join('path/to/template.html.erb').read
    # ERBを走らせる
    ERB.new(erb).result(binding)
  end
end
```


~~最初```ERB#run```の返り値がhtmlになるのかと思ったんですが何も返さなくて、結果を受け取るローカル変数の名前を渡すんですね~~

ERB#resultで結果を返せるんですね！


肝心の埋め込む変数なんですが、```#run```の引数にBindingオブジェクトを渡すとそのコンテキストで実行してくれるのでクラス内のメソッドを使ってくれます

なんかPHPの```ob_start()```を思い出しました
frameで分割されたページに、frameのサイズを無視したdivを追加する

`frameset` + `frame`で分割されているページは、`frameset`が`body`の代わりになるようで、次のような構造になっています。

```html
<html>
  <head></head>
  <frameset>
    <frame>
  </frameset>
</html>
```

`</html>`の直前に`div`などの要素を記述したとしても、画面描画時にブラウザがDOM上からその要素を消し去ってしまうようです。

そのため、通常は`frame`の分割を無視した要素（モーダルウインドウなど）を表示することができません。

画面描画時に、`frame`以外の要素を消してしまうので、jQueryをつかって、画面描画後に`<html>`に要素を追加してみたところ、ChromeとFirefoxでは表示できました（IEは未確認）。

追加する要素は、`head`内に次のように記述しておけば、ブラウザに消されてしまうこともありません。

```html
<script id="foo-template" type="text/template">
// 表示したいHTMLをここに記述する
</script>
```

そして、次のように画面描画後に`append`します。

```js
$(function () {
  $('html').append($('#foo-template').html());
};
```

そもそも今どき`frame`が使われているサイトもなかなかないと思いますが（私もはじめて見た）、もしそんな掘り出し物なサイトに、モーダルウインドウ実装したいんだよね〜というような依頼があったときは、こんな感じでいけるかもしれません。たぶん。
破壊的操作の観点から見たRubyの変数コピーの方法３種類


# あるオブジェクト（obj変数）をコピーしたいとき

大別すると３種類の方法がありそう。
ruby破壊的操作の特徴については以下にもまとめました。
http://qiita.com/metheglin/items/ca452bc0a3866d2de7bf

## 変数の代入の場合

参照の値渡しになるので、コピー先の変数から変更操作をおこなうとコピー元のデータも変わってしまう。
メソッドの引数に変数を渡す場合も代入になる。

```rb
## 代入による変数のコピー
obj = { name: 'Edgar Allan Poe', age: 10 }
obj_assign = obj

## 変更をおこなう
obj_assign[:name] = 'Peter Ilyich Tchaikovsky'

## コピー先のデータだけでなくコピー元のデータも変更されてしまう
obj
  # => {:name=>"Peter Ilyich Tchaikovsky", :age=>10}
obj_assign
  # => {:name=>"Peter Ilyich Tchaikovsky", :age=>10}
```

## 変数のcloneの場合

clone(またはdup)を使うと参照の値渡しではなく、コピーしたいオブジェクトを新規オブジェクトにコピーし、その参照が保持される。そのため、コピー元データとコピー先データを独立にすることができる。

```rb
obj = { name: 'Edgar Allan Poe', age: 10 }
obj_clone = obj.clone

## 変更をおこなう
obj_clone[:name] = 'Peter Ilyich Tchaikovsky'

## コピー先のデータのみが変更され、コピー元のデータは維持される
obj
  # => {:name=>"Edgar Allan Poe", :age=>10}
obj_clone
  # => {:name=>"Peter Ilyich Tchaikovsky", :age=>10}
```

ただし、objが参照している要素に対して破壊的メソッドを使うとcloneしても元のデータが変わってしまう。

```rb
obj = { name: 'Edgar Allan Poe', age: 10 }
obj_clone = obj.clone

## replace（破壊的変更・オブジェクト自体を変更）によって変更をおこなう
obj_clone[:name].replace 'Peter Ilyich Tchaikovsky'

## コピー先のデータだけでなくコピー元のデータも変更されてしまう
obj
  # => {:name=>"Peter Ilyich Tchaikovsky", :age=>10}
obj_clone
  # => {:name=>"Peter Ilyich Tchaikovsky", :age=>10}
```

こういうことが起きるのはたぶんcloneが以下の図のような原理で動くから。
![スクリーンショット 2014-11-07 17.00.45.png](https://qiita-image-store.s3.amazonaws.com/0/36978/90885a2f-693a-32da-4dba-f91b97bb35f4.png "スクリーンショット 2014-11-07 17.00.45.png")


## Marshalモジュールを使う場合

http://docs.ruby-lang.org/ja/2.1.0/class/Marshal.html
Marshalモジュールを使うと、オブジェクトがさらに参照するオブジェクトに対してもコピーしてくることができる。（深いコピー）
MarshalはjavascriptのJSONのようにオブジェクトの定義を文字列として出力したり、文字列からオブジェクトを復元したりするモジュールらしい。

```rb
obj = { name: 'Edgar Allan Poe', age: 10 }
obj_marshal = Marshal.load(Marshal.dump(obj))

## replace（破壊的変更・オブジェクト自体を変更）によって変更をおこなう
obj_marshal[:name].replace 'Peter Ilyich Tchaikovsky'

## コピー先のデータのみが変更され、コピー元のデータは維持される
obj
  # => {:name=>"Edgar Allan Poe", :age=>10}
obj_marshal
  # => {:name=>"Peter Ilyich Tchaikovsky", :age=>10}
```

![スクリーンショット 2014-11-07 17.03.51.png](https://qiita-image-store.s3.amazonaws.com/0/36978/877ee026-3af1-d01b-b5b2-2572e24d63c5.png "スクリーンショット 2014-11-07 17.03.51.png")


# 実行環境

```
% ruby -v                                                                                                                                                      (git)-[develop]
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]
```
サーバ設定

・カーネルバージョン確認

```
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
COMMIT
```

`:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
COMMIT
`
Openlayers3でタイル地図をHTTP/HTTPS選択して取得する方法

###簡単なタイル地図取得方法

```javascript:tile.js
//タイル地図の取得
var raster = new ol.layer.Tile({
  source: new ol.source.Stamen({
    layer: 'toner'
  })
});

//地図にタイルをセット
var map = new ol.Map({
  layers: [raster],
  target: 'map',
  view: new ol.View({
    center: [0, 0],
    zoom: 2
  })
});
```
----------------------------------------
###HTTP/HTTPSを選択してタイル地図を取得する方法

```javascript:tile.js
//タイル地図の取得
//urlでhttpとhttpsを切り替える事で変更可能
var raster = new ol.layer.Tile({
  source: new ol.source.XYZ({
    url: 'http://{a-d}.tile.stamen.com/toner/{z}/{x}/{y}.png'
  })
});
```
『YO』でプッシュ通知をAPI経由で送ってみたYO！


[YO](http://www.justyo.co) で遊んでみました。普段はユーザー間でスマホのプッシュ通知を送りあうだけのアプリ（iOS/Android）ですが、APIが提供されているので、スクリプトからプッシュ通知を送る、といったことが出来ます。

## ① 通知を受け取る端末で、YOアプリをダウンロード

普通に App Store または Goolge Play からダウンロードします。
インストールしたら起動して、ユーザー登録も済ませます。

## ② プッシュ通知元のアカウントを作成

http://yoapi.justyo.co にアクセスして、先程のユーザー情報でログインします。

![screen13.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/e659a90c-a2d2-d8f4-f3bf-b79efdc462a2.jpeg "screen13.jpg")

ユーザー登録したアカウントとは別に（何となく気持ち悪いので）、プッシュ通知元のアカウントを適当に作成します。

![screen7.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/1e2ce956-afd9-372e-e1a4-1a069335d579.jpeg "screen7.jpg")

> `Callback URL` は良く分からないので空欄にしました。

次のようにアカウントが作成されました。ついでに画像アイコンも登録（結局、画像の使われどころが分りませんでしたが^^;）。

![screen9.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/5ee8953a-8ea6-5c30-a645-93e90893bb89.jpeg "screen9.jpg")

> トークンはもう無効にしてるので、晒します。

## ③ アプリ側でプッシュ通知元のアカウントを追加

中央のプラスボタンを押して、

![iphone3.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/b13a4094-8266-a50c-52dc-aa81a2097cd6.jpeg "iphone3.jpg")

先程のプッシュ通知元のアカウントを入力します。

![iphone5.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/522aaff1-93d0-9b6a-bf5f-6ea0907f560e.jpeg "iphone5.jpg")

次のように追加されました。

![iphone2.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/d3c4e0da-ef1b-4bc6-1f7d-663809173cd9.jpeg "iphone2.jpg")

## ④ プッシュ通知を送ってみる

適当な方法で、APIを叩いてみます。

> POSTメソッドで `http://api.justyo.co/yoall` 、`api_token` キーでトークンを渡します。

![screen8.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/dfb2e938-352b-8a51-0cd6-409e04596e4c.jpeg "screen8.jpg")

次のように届きました^^

![iphone6.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/4ce6b126-8956-cebc-aef7-6c7a1cbc2149.jpeg "iphone6.jpg")

使いどころとしては、何かサービス運営していてユーザーに通知を送りたい、または、チームで何かの通知を共有したい（デプロイされたら等）、といったところでしょうか。

メッセージ文面は設定できませんが、アカウントはたぶん幾つも作れる（通知の際にアカウント名が表示される）ので、用途によってアカウント名を分けるとか？

## 番外：ボタンを設置する

メンバーに通知用のアカウントを登録してもらう場合、上記のようにアプリで手動でアカウント名を登録してもらってもいいのですが、WEBページ上に登録ボタンを用意することもできます。何かのサービスで運用する場合は、こちらの方法の方がいいですね。

ボタンタグを生成するには、まずダッシュボードで下記のボタンをクリックし、

![screen12.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/f0cddeae-a880-bc57-4f55-2c7e321e7d4a.jpeg "screen12.jpg")

アカウント名と、その下の `when..` の欄を入力します。

> ドメインを入力するのかな..？よく分らなかったので、適当なドメインを指定しました。

![screen15.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/ccd04596-319b-60a8-d843-51ae0412a5a7.jpeg "screen15.jpg")

するとタグのコードが生成されます。

![screen11.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/6f56a947-db19-e4eb-a6dc-dfcbae5e444f.jpeg "screen11.jpg")

設置するとこんな感じです。
デモ ⇒ http://hkusu.github.io/YO_button_demo/dist/

![iphone1.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/a67b13b5-1c9e-a3ab-eea6-c0ff74bb9044.jpeg "iphone1.jpg")

## おわりに

次は Hobot と連携してみようかな。あと、Slack にプラグインがあったので、機会があったらこちらも試してみようと思います。

![スクリーンショット_2014-11-07_16_35_20.png](https://qiita-image-store.s3.amazonaws.com/0/35733/129a732c-bfc1-ebf7-d9dc-662b6fd7a654.png "スクリーンショット_2014-11-07_16_35_20.png")
[MySQL] インデックスの、調べ方・後から追加・最初から付ける方法

## 現状のインデックス状況を調べる

```sql
show index from tbl_name
```

## すでにあるテーブルにインデックスをつける

hogeというカラムがあって、idx_hogeというkey_namaでインデックスをつけるとすると。

```sql
alter table tbl_name add index idx_hoge(hoge)
```


## テーブルをcreateするときにインデックスをつける

```sql
create table tbl_name (
	hoge int(11) not null,
	index idx_hoge(hoge),
	);
```

ちなみに、`index idx_hoge(hoge(5))`のようにバイト数を指定できるらしいですが、まだ使ったことはないです。
PHP コマンドを実行しても何も出力されない

なんやこれ、と解決に無駄に時間がかかってしまった
ある日サーバーでphp cliを実行したら正常に動いてなかった。

```
root@hoge:~# php -v
root@hoge:~#
```

エラーもなにも出ない。
でもapache側のモジュールとして組み込んでるPHPは正常稼働している。。
いろいろ調べてたんですが、原因はphp.iniでした。

php.iniで `display_errors = Off` となっている状態だとエラーを表示しませんが、
CLIでも何も出力されないみたいです。
おそらくは`display_errors = Off`の設定ののちに誰かが追加した設定がエラーを吐いているのでしょう。
Apacheのモジュール版PHPは再起動するまで設定が反映されなかったと思うのでApache側のPHPが動いているのも納得できます。

ここを`display_errors = On`とするとエラーが出るのでそれを読み解けば一気に解決できると思うのですが、そうすると現状のapache側でnoticeとかのエラーが出力されてお叱りを受けるかもしれません。

実は`display_errors = stderr`とするとCGIやCLIモードの場合のみエラーを出す事ができます。
この設定を反映させて実行。

```
root@hoge:~# php -v
Fatal error: Directive 'allow_call_time_pass_reference' is no longer available in PHP in Unknown on line 0
```

PHP5.4で削除された内容を記述してエラーになってたんですね。
この設定をphp.iniからコメントアウトすると正常になりました。

```
root@hoge:~# php -v
PHP 5.5.5 (cli) (built: Jun 26 2014 14:55:05) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
```

`display_errors = On`でもちゃんと動くようにプログラム作ろうって話ですね。
[Unity] Unityの定義済プリプロセッサマクロ


[ドキュメントはこちら](http://docs-jp.unity3d.com/Documentation/Components/SL-BuiltinMacros.html)


シェーダを書いていて毎回、これはいつどういうときに設定されるのか悶々としてたんですが、ドキュメントがあったのでメモ。
（使いそうなものをピックアップしています）


## ターゲットプラットフォーム

| マクロ | 意味 |
|:------|:-------|
| SHADER_API_OPENGL | デスクトップ向けOpenGL |
| SHADER_API_D3D9 | Direct3D 9 |
| SHADER_API_XBOX360 | Xbox 360 |
| SHADER_API_PS3 | PlayStation 3 |
| SHADER_API_D3D11 | デスクトップ向けDirect3D 11 |
| SHADER_API_GLES | OpenGL ES 2.0 (デスクトップまたはモバイル向け)、 SHADER_API_MOBILE の存在により判定 |
| SHADER_API_FLASH | Flash Stage3D |
| SHADER_API_D3D11_9X | Windows RTターゲット向けのDirect3D 11 |

UnityCG.cgincなどのファイル内で処理の分岐などに使われています。



## プラットフォーム差異のヘルパー

| マクロ | 意味 |
|:------|:-------|
| UNITY_PROJ_COORD(a) | 4成分ベクトルを渡すと、投影されたテクスチャ読み込みに適切なテクスチャ座標を戻します。殆どのプラットフォームでは渡された値そのものを戻します。 |



## シャドウ マッピング マクロ

| マクロ | 意味 |
|:------|:-------|
| UNITY_DECLARE_SHADOWMAP(tex) | "tex" という名前のシャドウ マップ テクスチャ変数を宣言します。 |
| UNITY_SAMPLE_SHADOW(tex,uv)  | "tex" という名前のシャドウ マップ テクスチャを特定の "uv" 座標にサンプリングします（XY コンポーネントはテクスチャの場所、Zコンポーネントは相対的なデプス）。<br />0 - 1 の範囲で シャドウとしてひとつの float 変数を戻します。 |
| UNITY_SAMPLE_SHADOW_PROJ(tex,uv) | 上記と同様であるが、プロジェクティブなシャドウマップ読み込みを行います。 "uv" は float4 であり、他の全てのコンポーネント は ルックアップをするために .w で除算します。 |
Splitのつかいかた

SplitをつかってA/Bテストをするためのメモだよ！

# Split

SplitはA/Bテストを行うためのツールだよ！
Rails3に対応しているよ！

## まずredisをインストール

Splitをつかうにはredisが必要なのでインストールするよ！

#### インストール
```
brew install redis
````

#### 起動
```
redis-server
```

※バックグラウンドで起動する場合は末尾に&を付けてあげればおk！

```
redis-server &
```

#### 停止
```
redis-cli shutdown
```

## Splitをインストール
本題のSplitをインストールするよ！

#### インストール
gemfileに書いて```bundle install```すればおk！

```lang:gemfile
gem 'split'
```

ダッシュボードを使う場合はこれ！
A/B結果の確認ができる機能だよ！

```lang:gemfile
gem 'split', :require => 'split/dashboard'  
```

```lang:routes.rb
mount Split::Dashboard, :at => 'split'
```


## きほん
基本的な書きかたはこれ！
```ab_test```と```finished```２つのメソッドをつかうよ！

```lang:controllers/
ab_test('テスト名', 'テストA', 'テストB')
```

viewに書くときはこれ！

```lang:views/
<% ab_test('テスト名', 'テストA', 'テストB') do |text| %>
  <%= link_to text, new_user_path %> 
<% end %>
```

finishedはコンバージョンを達成する箇所で呼び出すよ！

```lang:controllers/
finished('テスト名')
```

上記を実行すると、ある人には```テストA```、ある人には```テストB```と表示されるよ！

## おうよう

きほんの書き方は文言を変更するだけなので、応用するともっと柔軟に切り替えができるよ！

ページの切り替えならこんな感じ！

```lang:views/
<% @change_page = ab_test('change_page', 'a_page', 'b_page') do |pattern| %>
    <% if pattern == 'a_page' %>
        <%= render 'old_page' %>
    <% elsif pattern == 'b_page' %>
        <%= render 'new_page' %>
    <% end %>
<% end %>
```

## 結果のかくにん

```/split``` にアクセスすると、結果が見れるよ！
セッション数、ゴールの到達数、コンバージョン率などの確認ができるよ！

## まとめ

Splitいいかんじだよ！

## 参考サイト

[Split github wiki]
(https://github.com/andrew/split/wiki)
[redis](http://redis.io/)
[Rails A/B testing by split gem](http://www.slideshare.net/ryumatsukano/rails-ab-testing-by-split-gem)
Google Container Engineでaobenchを動かした話


## クラスタの作成

Google Developers Consoleで，メニューのContainer Engineを選び，Create a clusterを選びます．

![436e73a14364f290a57cc340671cec59.png](https://qiita-image-store.s3.amazonaws.com/0/58772/dd3e47b5-3b67-7a5e-fccf-53e6fc67c0fe.png)

フォームでクラスタを構成するGCEインスタンスの種類やゾーン，マシンの台数を選ぶことができます．
現状クラスタを構成するマシンの台数などは選ぶことができないようです．（？）

![eef0556cb543d9a25d6ecd7ae810ddba.png](https://qiita-image-store.s3.amazonaws.com/0/58772/6130c0c1-4351-a173-e28d-8991d5b282f0.png)

## podの設定ファイルの作成
以下の内容でpodの設定ファイルを作成します．

aobench.json

    {
      "apiVersion": "v1beta1",
      "kind": "Pod",
      "id": "aobench-master-pod",
      "desiredState": {
        "manifest": {
          "version": "v1beta1",
          "id": "aobench-master-pod",
          "containers": [{
            "name": "aobench-master",
            "image": "syoyo/aobench",
            "command": ["sh", "-c", "/bin/ao"]
          }]
        }
      },
      "labels": { "name": "aobench", "role": "master" }
    }


## gcloudコマンドのアップデート

gcloudコマンドをすでに入れているものとします．

    gcloud components update preview

## コンテナの作成

    gcloud preview container pods --cluster-name=aobench create aobench-master-pod --zone=europe-west1-b --config-file=aobench.json

## コンテナ一覧の確認

    gcloud preview container pods --cluster-name=aobench list --zone=europe-west1-b

## 今後の課題

まだAlphaらしいです．Amazon Elastic BeanstalkのDockerサポートみたいに，zipにまとめてeb_deployerで投げつけるだけで簡単にデプロイとか，オートスケールとかそういう事までできるとありがたいです．（もしかしたら頑張れば今でもできるかもしれませんし，多分正式リリースまでにはできるようになっていると思います．）

## 参考にしたサイト
* [Google Container Engine (GKE) を触ってみた](http://dev.classmethod.jp/cloud/gke-ataglance/)
ipmitool


# 参考

* [IPMItoolで接続できない時に状況を確認する方法 - ike-daiの日記](http://d.hatena.ne.jp/ike-dai/20120201/1328088772)
* [NEC Express5800 Lab. ゴッパチ・ラボ - ゴッパチ・ラボ - SourceForge.JP](http://sourceforge.jp/projects/nec-imodel/wiki/ipmitool_manpage)

# インストール

```bash:
yum install -y OpenIPMI-tools
```

# IPMIコマンド投入

```bash:-vvをつけると詳細表示
$ ipmitool -I lan -H 192.168.11.11 -U root -P xxxxxxxx sel -vv
```

> Authentication type NONE not supported

>> サーバ側で許可するAuth Typeの設定がされておらず、
>> どんなAuth Typeでリクエストを投げても許可されていないのではじかれる。

この場合、`-I`を変更すれば良い。


```bash:-vvをつけると詳細表示
ipmitool -I lanplus -H 192.168.11.11 -U root -P xxxxxxxx sel
ipmitool -I lanplus -H 192.168.11.11 -U root -P xxxxxxxx lan print

```
ReactiveCocoaの勉強。lv.1


FRP（Functional Reactive Programming）をObjective-C（Swift）で書くためのフレームワークである[ReactiveCocoa](https://github.com/ReactiveCocoa/ReactiveCocoa)。
ぱっと見た感じ初心者にはとっつきにくさを感じたので勉強録としてまとめていきます。

## lv.1
超初心者的なReactiveCocoaの使い方しか書いていないです。（わかんなくて書けなかったです）
ReactiveCocoaの本質に触れられていないのであしからず。

## FRPとは
「振る舞い」を定義して値の変更を動的に反映させることだと思っています。
振る舞いとはどういうことかというと

```
A = 10;
B = 20;
// Cに振る舞いを定義
C = A + B;
A = 20;
```

と書くと`C = 30`ですが、FRPの概念だと`C = 40`になります。
それはCには「AとBを足した結果」を定義したわけじゃなく「AとBを足す振る舞い」を定義したからです。
なのでCはAとBの変更を動的に受け取って値（状態）を変えます。
Aに変更があればCへ変更が伝搬されて振る舞いに再度当てはめます。（`A + B`という振る舞いへあてはめる）
その結果、`C = 40`となります。

## FRPで何が良くなるの？
フロントエンドがリッチ化していく中、アプリケーションの中に様々な状態が複数存在しています。
MVCで`Model`の変更を様々な`View`へ伝えていく処理が複雑になってしまい見通しが悪くなります。
そこでFRPを使うことで`Model`の変更の伝搬を簡素化できます。
なので、当たり前ですがすべてのiOSアプリ開発にReactiveCocoaが適している訳ではありません。
一つの選択肢として選べる程に理解しておきたいので今回は勉強したいと思っています。

## ReactiveCocoaを触ってみる
本題ですが、ReactiveCocoaをSwiftでみました。

### RACSignal
ReactiveCocoaでは前述で説明した変更を`RACSignal`を生成して伝搬させます。
将来変更が起こりそうなプロパティ（UITextField.textなど）に対して`RACSignal`を作成し、作成したシグナルに「振る舞い」を追加します。すると、変更があった時に振る舞いを伝搬してくれます。
`RACSignal`の作成方法は大きく2つ

#### RACObserve
https://github.com/ReactiveCocoa/ReactiveCocoa/blob/ee85a34731382b01ea028026ef267b0952b7edde/ReactiveCocoa/NSObject%2BRACPropertySubscribing.h#L49

`RACObserve`マクロでオブジェクトのプロパティを監視して`RACSignal`を発生させれる。
ただSwiftだとマクロが使えないので下記のようにしなければいけない。
そして、うまく動かなかったので今回はこっちは使わない。

```swift
func RACObserve(target: NSObject!, keyPath: String) -> RACSignal  {
    return target.rac_valuesForKeyPath(keyPath, observer: target)
}
```

```swift
// 動かなかった
        let signal = RACObserve(self.textField, "text")
        signal.subscribeNext({(any:AnyObject!) -> Void in
            self.countLabel.text = "\(any)"
        })
```

### rac_textSignal

`UITextField`などには`text`の変更を監視できる`rac_textSignal`メソッドが拡張されています。
実行することで`RACSignal`が生成できるので振る舞いを書いていきます。

```
        self.textField.rac_textSignal()
            .subscribeNext({(any:AnyObject!) -> Void in
                self.countLabel.text = "\(any)"
            })
```

##### textFieldの入力を動的に変更する

```
        self.textField.rac_textSignal()
            .map({ (text:AnyObject!) -> AnyObject! in
                return (text as? String)?.uppercaseString;
            })
            .subscribeNext({(text:AnyObject!) -> Void in
                self.countLabel.text = text as? String
            })
```

### RACCommand,rac_command
UI系に対してアクションを起こした時に`RACSignal`を生成するクラス。
`rac_command`は`UIButton`が`UIControlEventTouchUpInside`になっときに`execute`される`RACCommand`をセットできるプロパティ。

```
        self.button.rac_command = RACCommand(signalBlock:{(_:AnyObject!) -> RACSignal in
            self.countLabel.text = ""
            return RACSignal.empty()
        })
```

## 最後に

もうちょっとちゃんとまとめておきます
Swift コードからUIButton生成時の設定一覧

storyboardではなく処理の中でボタン追加した時などに。

##ボタン生成の流れ

```swift


//サイズ、配置場所指定してボタン作成
let startButton:UIButton = UIButton(frame: CGRectMake(0, 40, 100, 20))

//ボタン内テキストの文字数がオーバーした時、語尾に"..."を付ける
startButton.titleLabel?.lineBreakMode = NSLineBreakMode.ByTruncatingTail

//ボタン内テキストを左寄せにする
startButton.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left

//テキストの色設定
startButton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)

//ボタン内のテキスト
startButton.setTitle("スタート", forState: UIControlState.Normal)

//Viewに追加
self.view.addSubview(startButton)

```
Macでtftpサーバを起動


# 参考

* @noguchiさんの[Mac OS XでTFTPサーバーを起動する - 戦場のプログラマー](http://blog.pg1x.com/entry/2014/03/15/222459)

# 設定確認

```bash:設定ファイル確認
cat /System/Library/LaunchDaemons/tftp.plist
```

`/private/tftpboot/`がRootであることがわかる。

## ファイルのパーミッション

`o+r`であること


# 起動

```bash:tftpサーバ起動
sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist
```

```bash:起動確認
$ sudo lsof -i:69
> COMMAND PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
> launchd   1 root   48u  IPv4 0x126682518951aa6f      0t0  UDP *:tftp
> launchd   1 root   49u  IPv6 0x1266825189519a07      0t0  UDP *:tftp
> launchd   1 root   50u  IPv4 0x126682518951aa6f      0t0  UDP *:tftp
> launchd   1 root   51u  IPv6 0x1266825189519a07      0t0  UDP *:tftp
```

```bash:動作確認
tftp localhost
> get ファイル名
```

# 停止

```bash:tftpサーバ停止
sudo launchctl unload -w /System/Library/LaunchDaemons/tftp.plist
```
DiscoverMeteorを翻訳するにあたりmiddleman構築が面倒だったのでDockerを使いました



#はじめに

DiscoverMeteorがmiddlemanを使って作っているらしく
翻訳してプレビューを見たかったらそれを構築する必要がありました。

**Macでのmiddleman構築で挫折しました。(当方yosemiteです。)**

面倒なのでdockerで作ってみたらlinuxでも結構めんどくさかったので
公開します

[githubのリポジトリはこちら](https://github.com/m0a/middleman4DM)

#手順

##構築

本リポジトリは編集対象が私のリモートリポジトリになっています。
(github.com/m0a/DiscoverMeteor_Ja)
ですので、削除して自分用のリポジトリを設定することところから始めてください。

```sh

#本環境をクローンします
git clone git@github.com:m0a/middleman4DM.git
cd middleman4DM

#既存のサブモジュールを削除し自分のリポジトリに変更します
git submodule deinit -f DiscoverMeteor_Ja
git rm -rf DiscoverMeteor_Ja
git submodule add -f <あなたのforkしたDiscoverMeteor_Ja>

#本家から取得するためにremote addする
cd DiscoverMeteor_Ja
git remote add dm git@github.com:DiscoverMeteor/DiscoverMeteor_Ja.git
＃本家から取り込み
git pull dm  master


#ポートフォワード設定（passはデフォルトならtcuser）
ssh -f -N -L 4567:localhost:4567 docker@$(boot2docker ip)

＃起動 初回だけすごく時間がかかります。
./run_middleman.sh

```

[http://localhost:4567](http://localhost:4567) でアクセスできるはずです。

##普段の手順

* 本家から最新版を取得

```sh
#移動と更新
cd middleman4DM/DiscoverMeteor_Ja
#本家から取り込み
git pull dm  master

```

* 編集作業を行う

* 編集内容を自分のリポジトリへプッシュ

```
git add <対象ファイル>
git commit -m "編集内容概略"
git push
```

* 自分のリポジトリのページに飛んでプルリクエストを作成

##参考

```docker:Dockerfile
FROM ruby:2.1.4
MAINTAINER m0a <abe00makoto@gmail.com>
RUN apt-get update && apt-get install -y  nodejs
RUN gem install middleman
RUN apt-get install -y git

# middleman routine
WORKDIR work
RUN mkdir /root/.ssh
RUN chmod 700 /root/.ssh
ADD ssh_config /root/.ssh/config
#RUN touch /root/.ssh/known_hosts
RUN git clone https://github.com/DiscoverMeteor/DiscoverMeteorStatic.git
WORKDIR DiscoverMeteorStatic
#RUN git submodule init
#RUN git submodule update --remote
RUN bundle install
ENV DMLANG ja
ADD config.rb /work/DiscoverMeteorStatic/
```

```sh:run_middleman.sh
#!/bin/sh

if [[ $OSTYPE != "darwin"* ]]; then
  echo "only support osx. now";
  exit;
fi

docker build -t middleman4dm .
docker run -p 4567:4567 -p 35729:35729 -v "$(pwd)"/DiscoverMeteor_Ja:/work/DiscoverMeteorStatic/source/chapters/ja middleman4dm middleman server --force-polling
```
メソッドチェーンでconcat

concatで再帰をかけてみた。返ってくるものは引数と同じ配列。
配列以外のものを引数にしたときの挙動は知らない。

```js
function isort(x) {
  var n = x.length;
  if(n <= 1) return x;
  var x1 = x.shift(x);
  var x2 = x.shift(x);
  return [x1].concat([x2].concat(isort(x)));
}
console.log(isort([4,3,5,2,1]));
```
landsat-8データをQGISで扱うための下調べリンク集

http://landsat8.geogrid.org/l8/index.php/ja/
http://www.cadic.co.jp/gogogo/blog/?p=223
http://landsat.usgs.gov/tools_L8_acquisition_calendar.php
http://l8search.geogrid.org/GECSW/
http://risk.ecom-plat.jp/index.php?module=blog&eid=10422&aid=17021
Nitrous.ioコンソールへの貼り付け

#問題

Nitrous.ioのコンソール、MacはCommand + vでペーストできるのに、Windowsはなんでできんのや！

（律儀にコマンド打っていた）

#解決方法

Shift + Ctrl + v

（泣いた）

#教訓

HELPちゃんとよもう

[Copy/Paste within the Web IDE](http://help.nitrous.io/faq-copy-paste/)