OmniAICreator/Qiita-1.07M huggingface dataset:
nanoc で作った静的サイトを Capistrano でデプロイする

## やりたかったこと

  * nanoc で静的サイトを作成
  * Capistrano で **output ディレクトリの内容のみ** `:deploy_via, :copy` でデプロイ

## やり方

### 前提

  * 既に何らかの nanoc プロジェクトが手元にある
  * Mac OSX 10.8/Ruby 2.0.0-p247 で確認（その他の環境では未確認）

### Capistrano のインストール

`Gemfile` に下記を記述して、 `bundle install` します。

```ruby:Gemfile
gem 'capistrano'
gem 'capistrano_colors'
gem 'railsless-deploy'
```

[railsless-deploy](https://github.com/leehambley/railsless-deploy) は、Capistrano を Rails 以外で使えるようにいろいろしてくれる gem です。Capistrano の標準タスクには、 Rails のデプロイを前提とした実装が含まれているので、非 Rails でそのまま使うとエラーになります。

---
ちなみに、今回 Capistrano 2系を使ったので railsless-deploy が必要ですが、3系では Rails 用タスクが分離されるようなのでコレは不要です。と、 railsless-deploy の GitHub にも書いてあります（以下、 GitHub より引用）。 railsless-deploy 自体も既に Obsolete です。
> Note: Capistrano 3 (http://www.capistranorb.com/) doesn't ship with any Railsisms, and is better in almost every measurable way than Capistrano 2 + raileless-deploy. It's time to switch, as I won't be maintaining this Gem anymore!

---

### Capistrano のセットアップ

`capify` しても良いのですが、自分は手動で `Capifile` を作成して以下のように記述しました。

```ruby:Capifile
require 'railsless-deploy'

Dir.chdir 'output'

set :application, 'hoge.com'
set :repository,  '.'

set :user, 'username'
set :use_sudo, false

set :scm, :none
set :deploy_via, :copy
set :deploy_to, "/var/www/#{application}"

set :ssh_options, auth_methods: ['publickey']
default_run_options[:pty] = true

server 'www.hoge.com', :web, primary: true
```

ここで重要なのは、

```rb
Dir.chdir 'output'
```

です。通常 Capistrano は、Capifile のあるディレクトリ全体をデプロイ対象としますが、今回は nanoc でコンパイルした静的コンテンツが入っている output ディレクトリの中身のみをデプロイする必要があります。
でも、ソースを読んだり調べた限りでは、Capistrano 自体にはデプロイする対象を限定する機能は（たぶん）ないようなので、苦し紛れに上記のように書いてみたら出来ました。そんなレベルのエントリーです:(

これが正しい解かどうかは分かりませんが、イイ感じで動いてます。

### デプロイする

デプロイする場合は Capifile があるディレクトリでおなじみのコマンドを実行すれば OK です。

    $ cap deploy

あとは、 Apache 等の Web サーバを再起動するタスクを追加したり、 deploy する前に ``nanoc prune --yes`` するようにしたり Capifile をいろいろ弄れば良いと思います。
Go言語におけるエイリアス型を使ったパターン


## 型のエイリアス
Go言語では、ある型に別名をつけ、別の型として使うことができる。
もちろん、組込み型へのエイリアス型を作ることもできる。

http://play.golang.org/p/wm5sWaa1J7

```
package main

import "fmt"

type Int int

func main() {
	n := 100
	m := Int(n) // キャスト
	fmt.Printf("%T, %T", n, m)
}
```

## メソッドの実装
別名をつけた新しい型には、別途メソッドを設ける事ができる。
組込み型にメソッドを設けたい場合は便利である。

```
package main

import "fmt"

type Hex int

func (h Hex) String() string {
	return fmt.Sprintf("%#x", int(h))
}

func main() {
	fmt.Println(Hex(100))
}
```

## 用途や単位としての型
単位が違う場合や用途が違う場合、同じ値でも同じように扱うことを避けたい場合がある。その場合は、共通型に別のエイリアスを付けることで、区別することができる。

http://play.golang.org/p/AIai9zuemn

```
package main

import "fmt"

type Meter int
type Kilogram int

type Person struct {
	Name   string
	Height Meter
	Weight Kilogram
}

type Female *Person
type Male *Person

func femaleOnly(f Female) {
	fmt.Println(f.Name, "is a female.")
}

func main() {
	yamada := &Person{"Yamada", Meter(172), Kilogram(60)}
	fmt.Println(yamada)

	femaleOnly(Female(yamada))

}
```
Go言語における埋め込みによるインタフェースの部分実装パターン


## 構造体
Go言語には、クラスがない。そのため、代わりに構造体（struct）を使い、その型にメソッドを設けることで似たような振る舞いをさせる。

http://play.golang.org/p/WosVAwNGad

```go
package main

import "fmt"

type Person struct {
	FirstName string
	LastName  string
}

func (p *Person) Name() string {
	return p.FirstName + " " + p.LastName
}

func main() {
	person := &Person{"Taro", "Yamada"}
	fmt.Println(person.Name())
}

```

## インタフェース

Go言語にはインタフェースがある。明示的に実装しなくてもインタフェースが定義するメソッドをすべて実装していれば、そのインタフェースを実装していることになる（ダックタイピング）。

http://play.golang.org/p/hqHGJZek3a

```go
package main

import "fmt"

type Person struct {
	FirstName string
	LastName  string
}

func (p *Person) Name() string {
	return p.FirstName + " " + p.LastName
}

type Named interface {
	Name() string
}

func printName(named Named) {
	fmt.Println(named.Name())
}

func main() {
	person := &Person{"Tarou", "Yamada"}
	printName(person)
}
```


## 構造体の埋め込み
Go言語の構造体はクラスではないため、継承ができない。しかし、埋め込みを使うことで他の構造体をラップした構造体を作ることができる。
中に埋め込んだ構造体のフィールドやメソッドはあたかも外の構造体のもののように振る舞うことができる。

http://play.golang.org/p/VyKJCRdEFB

```go
package main

import "fmt"

type Hoge struct {
	N int
}

type Piyo struct {
	Hoge
	M int
}

func main() {
	piyo := &Piyo{Hoge{1}, 2}
	fmt.Println(piyo.N, piyo.M)
	fmt.Println(piyo.Hoge.N, piyo.M)
}
```

## 埋め込みを使ったインタフェースの部分実装
埋め込む構造体にあるインタフェース定義するメソッドの一部を実装させ、残りのメソッドは外側の構造体で実装するという手法が使える。下の例だと、Nameメソッドはperson構造体で共通の実装をして、Titleメソッドはfemaleとmaleで別の実装をしている。また、Personインタフェース以外はパッケージ外にエクスポートしないことで、使用者に詳細の実装を見せないようにしている。

http://play.golang.org/p/fbARybwPOd

```go

package main

import "fmt"

type Gender int

const (
	Female = iota
	Male
)

type Person interface {
	Name() string
	Title() string
}

func New(gender Gender, firstName, lastName string) Person {
	p := &person{firstName, lastName}
	if gender == Male {
		return &male{p}
	} else {
		return &female{p}
	}
}

type person struct {
	firstName string
	lastName  string
}

func (p *person) Name() string {
	return p.firstName + " " + p.lastName
}

type female struct {
	*person
}

func (f *female) Title() string {
	return "Ms."
}

type male struct {
	*person
}

func (m *male) Title() string {
	return "Mr."
}

func printFullName(p Person) {
	fmt.Println(p.Title(), p.Name())
}

func main() {
	taro := New(Male, "Taro", "Yamada")
	printFullName(taro)

	hanako := New(Female, "Hanako", "Yamada")
	printFullName(hanako)
}

```
yafcでssh接続できないときの対処方法

ホスト間でファイルを転送するとき、私はもっぱらyafcを使っています。
ところがあるときからsshでの接続に失敗するようになりました。

```shell-session
$ yafc ssh://hogehost
yafc 1.2.4
This program comes with ABSOLUTELY NO WARRANTY; for details type 'warranty'.
This is free software; type 'copyright' for details.

The host key for this server was not found but an othertype of key exists.
An attacker might change the default server key toconfuse your client into thinking the key does not exist
yafc>
```

調べてみるとknown_hostsに登録されている公開鍵がECDSA形式であることが原因でした。
yafc 1.2.4 はECDSA形式の鍵に対応していないようです。
そこでRSA形式の公開鍵をknown_hostsに登録したところ無事に接続できました。

```shell-session
$ ssh-keyscan -t rsa hogehost >> ~/.ssh/known_hosts
# hogehost SSH-2.0-OpenSSH_6.2
$ yafc ssh://hogehost
yafc 1.2.4
This program comes with ABSOLUTELY NO WARRANTY; for details type 'warranty'.
This is free software; type 'copyright' for details.

password:
remote system: SSH (version 2)
(1) yafc @hogehost:~>
```
maven-android-pluginを使ったプロジェクトでApache Commonsを使ったコードをテストした時に落ちる時の対処法

Apache Commonsに限らず別のライブラリ使った時にも起こるかも？
https://code.google.com/p/maven-android-plugin/issues/detail?id=142#c2

今回起きた状況はこんな感じ

1. maven-android-pluginを使ってプロジェクトを作成する
2. メインのコード内でCommonsのメソッドを使用する
3. Commonsを使用してるメソッドをテストプロジェクトで呼び出す
4. 実行時に落ちる

落ちる時にこんな感じのExceptionが投げられていた
`IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation`

上の方で紹介したissuesのURLでも書かれているけど、最初に見つけたのはstackoverflowだった。
http://stackoverflow.com/questions/9684281/illegalaccesserror-class-ref-in-pre-verified-class-resolved-to-unexpected-imple

テストプロジェクトのpom.xmlに` <scope>provided</scope>`を追加したらいけた

```xml:pom.xml
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <scope>provided</scope>
</dependency>
```
jsFiddleでGitHubリポジトリ上のソースを参照する

jsFiddleを作成したいときに、GitHub上のソースを参照したいことがある。
例：jsFiddleがサポートしていないフレームワークを使いたい時、Pull Requestを送るときのサンプルコードetc・・・

そんな時は、まずRAWのボタンを押してファイルを参照する。
![picture1.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/4aee41bf-b705-0106-85c4-912059377fe3.png)

この時のURLはmime-typeがtext/htmlになっており、このまま指定しても読み込んでくれない。
そこで、URL前半の **raw.githubusercontent.com・・・** を **rawgit.com・・・** に変更すると（ドットをとる）、きちんと読み込んでくれるようになる、という裏ワザ。
**※なお、これはGistでも使用可能なワザ**

ちなみに、参照をする時はmasterブランチではなく、tagsがあればそちらの方を参照したほうが良い。
ソースが変わった時に動かなくなったりするからである(そうしたゾンビjsFiddleは世の中にたくさんある)。
SublimeText の画面分割を快適にする方法

SublimeText のデフォルトの画面分割は結構使いにくいので、画面分割を便利にする方法を紹介します。

## プラグインの紹介

### Origami

まずは [Origami](https://sublime.wbond.net/packages/Origami) 。
これを使うと `super+k →` で「右側にウインドウを増やす」といった操作ができるようになるため、画面分割が楽になります。

### Resize Group with Keyboard (ST2のみ)

[Resize Group with Keyboard](https://sublime.wbond.net/packages/Resize%20Group%20with%20Keyboard) は画面分割したときの面積をキーボードで変更することができます。

### Resize Active Group

[Resize Active Group](https://sublime.wbond.net/packages/Resize%20Active%20Group) は画面分割時にフォーカスしているウインドウを常に大きくなるように分割の比率を調節してくれます。

例えば画面を上下に分割して、上側にフォーカスがあって面積の比が「上:下 = 7:3」だとします。このとき、フォーカスを下側に移動すると比が「上:下 = 3:7」になります。

## おすすめの設定

僕は Sublime Text の画面分割はすごく冗長だと思ってます。
画面分割するときはほぼ 100% 分割した先のウインドウでなんらかのファイルを開きたいときなので、
「画面分割する」→「フォーカスを移動する」→「super+p でファイルを開く」といった操作を毎回します。
これが面倒なので、 [Chain of Command](https://sublime.wbond.net/packages/Chain%20of%20Command) を使って画面分割したら
super+p を押した時に出てくるファイル選択パネルを表示するところまで一気にできるようにします。

### Origami と Chain of Command を組み合わせた設定

Sublime Text のキーバインドの設定で次のように設定すると Origami を用いて、「画面分割する」→「フォーカスを移動する」→「super+p でファイルを開く」が一度にできるようになります。

```python
{
  "keys": ["super+k", "super+up"],
  "command": "chain",
  "args": {
    "commands": [
      ["create_pane", {"direction": "up"}],
      ["travel_to_pane", {"direction": "up"}],
      ["show_overlay", {"overlay": "goto", "show_files": true}]
    ]
  }
},
{
  "keys": ["super+k", "super+right"],
  "command": "chain",
  "args": {
    "commands": [
      ["create_pane", {"direction": "right"}],
      ["travel_to_pane", {"direction": "right"}],
      ["show_overlay", {"overlay": "goto", "show_files": true}]
    ]
  }
},
{
  "keys": ["super+k", "super+down"],
  "command": "chain",
  "args": {
    "commands": [
      ["create_pane", {"direction": "down"}],
      ["travel_to_pane", {"direction": "down"}],
      ["show_overlay", {"overlay": "goto", "show_files": true}]
    ]
  }
},
{
  "keys": ["super+k", "super+left"],
  "command": "chain",
  "args": {
    "commands": [
      ["create_pane", {"direction": "left"}],
      ["travel_to_pane", {"direction": "left"}],
      ["show_overlay", {"overlay": "goto", "show_files": true}]
    ]
  }
},
```
HaskellでGo言語のdefer文してみる with Freeモナド

Freeモナドを使って何かしてみたかったので…。

##仕様

Go言語には`defer`という構文があります。
これは、

```go
file, err := os.Open(filename)
if err != nil {
	return err
}
//ここは関数を抜けるときに呼ばれる
defer file.Close()
```

という風に、リソースの開放などを比較的取得と近い位置で行うことが出来る構文です。
（D言語にも同じようなものがあったような気がします ⇒ <http://www.kmonos.net/alang/d/exception-safe.html>）

今回はHaskellでこの構文のようなものを作ってみたいと思います、Freeモナドを使って。

完成イメージはこんな感じ。

```hs
hello :: Defer IO ()
hello = do
  h <- liftIO $ openFile "hello.txt" ReadMode
  defer $ liftIO $ hClose h
  liftIO $ hGetLine h >>= putStrLn
```

`openFile`で開いたハンドルを次の行で`defer`を使って閉じています。
まあ、この程度じゃあまりありがたみとかないんですけど。

##実装

めんどくさいので一気に貼ります。

```hs:defer.hs
{-# LANGUAGE DeriveFunctor, LambdaCase #-}
import Control.Monad
import Control.Monad.Trans
import Control.Monad.Trans.Free

import System.IO

type Defer m = FreeT (DeferF m) m

data DeferF m cont
 = Defer (Defer m ()) cont
 | Scope (Defer m ()) cont deriving (Functor)

defer :: Monad m => Defer m a -> Defer m ()
defer d = liftF $ Defer (d >> return ()) ()

scope :: Monad m => Defer m a -> Defer m ()
scope d = liftF $ Scope (d >> return ()) ()

runDefer :: Monad m => Defer m a -> m a
runDefer = runDefer' []
  where
  runDefer' :: Monad m => [Defer m ()] -> Defer m a -> m a
  runDefer' xs = runFreeT >=> \case
    Free (Defer x next) -> runDefer' (x:xs) next
    Free (Scope x next) -> runDefer' [] x >> runDefer' xs next
    Pure x -> (unless (null xs) $ runDefer' [] $ mapM_ id xs) >> return x

-- ここからは試し

hello :: Defer IO ()
hello = do
  h <- liftIO $ openFile "hello.txt" ReadMode
  defer $ liftIO $ hClose h
  liftIO $ hGetLine h >>= putStrLn

main = runDefer hello
```

補足とすれば、`scope`というものを作って、そこで`defer`実行のタイミングを調整できるようにもしました。

にしても、FreeモナドでDSL作るの楽しいなー。

##最後に

あれ、これだと例外処理とかしてないしアレなんじゃね？
macvimで長いコマンドを打ちたくないときはマッピング

:VimFiler -split -simple -winwidth=35 -no-quit

たとえばこのようなVimfilerの長いコマンドを打ちたくないとき

.vimrcに
:cnoremap vv VimFiler -split -simple -winwidth=35 -no-quit

と書けば
:vv
と書いた瞬間に書き換わります

cnoremapの単語的意味は
c : コマンドで
no : しない
remap : 再帰的マッピング

なので、
「コマンドで有効なマッピング（再帰てきではない）」
という意味です
pharアーカイブを作成

[pharを使ってみる](http://qiita.com/rana_kualu/items/d868604a1f54c2f93a7c) / [pharアーカイブを作成](http://qiita.com/rana_kualu/items/4b2ef7bfff83939d7ef5) / [pharでWebアプリを作ってみた](http://qiita.com/rana_kualu/items/e437fff6f558c053cc41)


[前回](http://qiita.com/rana_kualu/items/d868604a1f54c2f93a7c)pharアーカイブを読み込みましたが、今回はそのpharアーカイブを作成してみます。

[Pharクラス](http://www.php.net/manual/ja/class.phar.php)にはなんかすごい数のメソッドが詰まっていて一見よくわからないのですが、実際使うメソッドはほとんどありません。
[Phar::getModified](http://php.net/manual/ja/phar.getmodified.php)とかどんなときに使うんだよって話ですよ。

まず必要なのはphp.iniの設定変更。
pharの作成を公開サーバで行う必要は皆無なので、[デフォルトでは禁止](http://php.net/manual/ja/phar.configuration.php#ini.phar.readonly)されています。

```
phar.readonly = 0
phar.require_hash = 0
```

を設定することでpharアーカイブの作成が可能になります。

では作成。

```php
<?php
	$phar = new Phar('TestClasses.phar', 0);
	$phar->addFile('TestClass1.php');
	$phar->addFile('TestClass2.php');
	$phar->addFile('TestClass3.php', 'subdir/filename.php'); //別名で保存
	$phar['TestClass4.php'] = file_get_contents('TestClass4.php'); //配列形式でも保存可能
	$phar->addFile('mushroom.gif'); //PHP以外も保存可能
```

ファイル'TestClasses.phar'に5ファイルを詰め込みました。
これが[前回使ったファイル](http://qiita.com/rana_kualu/items/d868604a1f54c2f93a7c)の中身です。
実に簡単ですね。

いったん作ったpharアーカイブは、普通のファイルと同じようにファイル操作関数で操作が可能です。
画像ファイルをrequire_once()したりすると当然エラーになります。

```php
<?php
	require_once('phar://TestClasses.phar/TestClass1.php');
	require_once('phar://TestClasses.phar/TestClass2.php');
	require_once('phar://TestClasses.phar/subdir/filename.php');
	require_once('phar://TestClasses.phar/TestClass4.php');
	print(file_get_contents('phar://TestClasses.phar/mushroom.gif'));
```

`Phar::addFile()`の第二引数を指定すると、指定した別名で保存できます。
呼び出しすときも別名での指定となります。
また`Phar::addFile()`のかわりに、`$phar['TestClass4.php']`のように配列でも保存可能です。

今回はテスト用のどうでもいいデータでしたが、実際に活用されているものとしてはgo-pearとかcomposerがあります。

画像は[ΞCandiedΞ](http://www.lovecandied.com/)様のフリー素材を使用させていただきました。

2014/12/14追記
デフォルトで作成されるソースはやたら汚いので、自作のものに差し替えるとよいかもしれません。
参考：[Pharに自作スタブをセットする](http://qiita.com/mpyw/items/27ba686335186a36372c)
macvimでneobundle, unite, colorschemeを入れるまでのメモ

Macvimインストール

neobundleインストール
http://vimblog.hatenablog.com/entry/vimrc_plugin_management

uniteインストール
http://mba-hack.blogspot.jp/2013/03/unitevim.html
.vimrcにインストールしたいものを書いて、macvimから:NeoBundleUpdate
(uniteはインストールに数分かかるかも)

colorschemeインストール
http://vimblog.hatenablog.com/entry/vimrc_colorscheme
欲しいのだけ選んでからインストール

.gvimrcでデフォルト設定
https://github.com/altercation/vim-colors-solarized
これを足せば暗いsolarizedになる
set background=dark
colorscheme solarized

おつかれさま！
Excel の列名(A,B,C,...)を数(1,2,3,...)に変換する #rstatsj

Excel でもらったデータの特定の列（例えば AA 列）を抜き出したかったんだけど、AA 列が何番目の列なのかいちいち数えるのが面倒くさかったので関数を作りました。
昔同じようなの作った記憶あるし、ググったらどこかにありそうではあるのだけれど、作った方が速いので適当に。
バグがあったら教えて下さい。
また、他にうまい方法がある場合なども教えていただければ幸いです。

```r:ExcelColToNum
ExcelColToNum <- function(x) {
  if(missing(x)) stop("")
  if(!is.character(x)) stop("")
  split.char.list <- lapply(strsplit(x, ""), function(v) toupper(rev(v)))
  if(!all(sapply(split.char.list, function(v) all(v %in% LETTERS)))) stop("")
  list <- lapply(split.char.list, function(v) {
    sapply(v, function(c) which(c == LETTERS))
  })
  sapply(list, function(vec) {
    mul <- 26^(seq_along(vec)-1)
    sum(mul * vec)
  })
}
```

```r:使用例
ExcelColToNum(c("A", "C", "Z", "AA", "AC"))
```

```:結果
[1]  1  3 26 27 29
```

### 追記
裏RjpWikiの人に添削頂きました。ありがとうございます。
http://blog.goo.ne.jp/r-de-r/e/94ce407c74a75b2f888a32a16dc8108a
rack_reverse_proxy で web アプリが reverser_proxy を通る挙動を開発環境に再現

基本的には https://github.com/jaswope/rack-reverse-proxy に書いてある通りで新しいこともバッドノウハウも無くて恐縮なのですが、半年ごとにメンテしてるサイトが reverser proxy を通ったときの挙動をデバッグすることになってその度に rack-reverse-proxy を再発見してまた忘れるを繰り返しているので、自分が忘れないようにここに書いておきます。

たとえば、本番のアプリのドメインは  `fuga.com` で、個別のドメインを無理やり reverse proxy で

    http://hoge.com/ -> http://fuga.com/hoge/

みたいにしてる場合、開発環境でアプリを `localhost:8080` で起動したら、

    http://localhost:9292/ -> http://localhost:8080/hoge/

のようにすると挙動を確認できると思います。そのときは、

```ruby:config.ru
require "rack/reverse_proxy"
use Rack::ReverseProxy do
  reverse_proxy /^\/(.*)$/, 'http://localhost:8080/hoge/$1'
end
app = proc do |env|
  [ 200, {'Content-Type' => 'text/plain'}, "b" ]
end
run app
```

それから `rackup` で即席リバースプロキシサーバーを起動!

P.S. ほんとはテストでこういうの記述しとけばいいんですよね。

P.S.2. これ書いてる途中で [8ヶ月前に似たような投稿](http://qiita.com/hiroshi3110/items/af7b6c4f7824539d7a53) してるのに気がついた...
onYouTubePlayerReadyが発火しないケース

- `onYouTubePlayerReady`をグローバル関数にしていない。
- `http`や`https`以外の、ローカルなどで実行している。
- Flashオブジェクトに`allowScriptAccess="always"`を渡していない。

3番目でハマった。あまりにもさり気なく、そしてググっても上の2つばかりだったので、ここに記しておく。
Twilio Client JS lib

Twilioで提供しているJS SDKを使えば、パソコンから電話の送受信ができる。

http://twilio.kddi-web.com/client/index.html

```js:twilioClient
<script type="text/javascript" src="//static.twilio.com/libs/twiliojs/1.1/twilio.min.js"></script>
<script type="text/javascript">
 
	Twilio.Device.setup("<?php echo $token; ?>");

	Twilio.Device.ready(function (device) {
		$("#log").text("架電待機");
	});
 
	Twilio.Device.error(function (error) {
		$("#log").text("Error: " + error.message);
	});
 
	Twilio.Device.connect(function (conn) {
		$("#log").text("架電成功");
	});
 
	Twilio.Device.disconnect(function (conn) {
		$("#log").text("架電終了");
	});
 
	Twilio.Device.incoming(function (conn) {

            if (confirm('Accept incoming call from ' + conn.parameters.From + '?')){
                connection=conn;
                conn.accept();
            }
	});
 
	function call() {
		// get the phone number to connect the call to
		params = {"PhoneNumber": $("#client_to_number").val()};
		Twilio.Device.connect(params);
	}
 
	function hangup() {
		Twilio.Device.disconnectAll();
	}
</script>
Flexのパターン定義には制約があります


Flexでは前の方でパターンに名前をつけて定義できるけどできないことがあるよという話。

## 問題

Flexでは後でパターンを使い回すために

```
DIGIT      [0-9]
IDENTIFIER [a-zA-Z][a-zA-Z0-9_-]*
%%

{DIGIT}      ECHO;
{IDENTIFIER} ECHO;
%%
```

とか書ける。で、ここでbarがあとに来るようなfooを探すことにしよう。

```
FOO_WITH_BAR foo/bar

%%

{FOO_WITH_BAR} ECHO;
```

残念、これは動かない。

## 理由

http://flex.sourceforge.net/manual/Definitions-Section.html を読むと`{HOGE}`は`(HOGEの中身)`と展開される事がわかる。ところが、http://flex.sourceforge.net/manual/Patterns.html によると`/$^`に関してはカッコの中に入れてはいけないと書いてある。
gitで管理しているファイルを大文字から小文字へ一括変換

mvで大文字から小文字に変換するとgitが認識してくれない。

そんなときは以下のシェルで一発変換。

```bash
#!/bin/bash

# 実行方法： sh henkan.sh <dirname>

# こんな感じで拡張子の指定などもできるでしょうね
# FILES=`find $1 -type f -name "*.gif"`
FILES=`find $1 -type f`
echo "$FILES"
read -p "こいつら変換する？ [y/N]" -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    echo "やるよー"
    for FILE in $FILES; do
        LOWER=`echo $FILE | tr A-Z a-z`;
        if [ $FILE != $LOWER ]; then
            git mv -f $FILE $LOWER
        fi;
    done;
    echo "だん！"
else
  echo "やんない"
fi
```
[Unity] iTween使い方メモ

# 動画

http://www.youtube.com/watch?v=gBZeeDU962A
http://www.youtube.com/watch?feature=player_embedded&v=qRafXt26a_E

# リファレンス的なサイト

http://www40.atwiki.jp/spellbound/pages/1604.html

# 使い方系

http://www.cho-design-lab.com/2013/08/07/unity-itween-visual-editor-introduction/
http://www.cho-design-lab.com/2013/08/08/unity-itween-path-editor/
iOS7のiPhoneアプリに必要なアイコンサイズ　備忘録

忘れがちなのでメモ。iOS7とiOS6以前で必要サイズが違うので、結果的に用意する画像の総数が増えたっぽい。

iPhoneのみ (6種類)
29px
57px
58px
80px
114px
120px

iPadのみ(10種類)
29px
40px
50px
58px
72px
76px
80px
100px
144px
152px


iPhoneとiPad (13種類)
29px
40px
50px
57px
58px
72px
76px
80px
100px
114px
120px
144px
152px


iTunes用
1024px

1024pxのアイコンをまず作っておいて、それを縮小して別名保存していくと良いかも。


![スクリーンショット 2013-10-08 16.54.30.png](https://qiita-image-store.s3.amazonaws.com/0/6688/737ead46-6ef0-6b15-0923-b001f87525e2.png)
Backbone.ViewのclassNameにクラスを複数指定できる

**追記**

内部的には_.resultメソッド使ってるから、文字列を返すメソッドでもおｋ

> http://backbonejs.org/backbone.js

> ![スクリーンショット 2013-10-13 18.16.43.png](https://qiita-image-store.s3.amazonaws.com/0/5812/d9a69fab-a6e5-0db4-d0da-9e006efa2510.png)


----

```js
var HogeView = Backbone.View.extend({
  className: 'aaa bbb ccc',
  tagName: 'p'
});

$(function() {  
  var hogeView = new HogeView();
  var html = hogeView.render().el;
  $('#multiple-class-demo').append(html);
});
```

```html
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<script src="http://documentcloud.github.io/underscore/underscore-min.js"></script>
<script src="http://documentcloud.github.io/backbone/backbone-min.js"></script>
<meta charset=utf-8 />
<title>demo</title>
</head>
<body>
  <div id="multiple-class-demo"></div>
</body>
</html>
```

```css
.aaa {
  outline: 5px solid #00f;
  width: 100px;
}
.bbb {
  border: 5px solid #0f0;
  height: 100px;
}
.ccc {
  background: #f00; 
}
```

![スクリーンショット 2013-10-08 17.01.26.png](https://qiita-image-store.s3.amazonaws.com/0/5812/47276de5-ea8f-858c-277c-fb9c1fd299cc.png)
rubyからopenXのAPIを叩く


openXのAPIを叩くにはまず先にログインする必要がある。
ここに示す例はopenXで広告主を追加するAPIを実行するrubyのスクリプトである。

##広告主追加
まず『logon』メソッドを呼ぶ。
そこで戻ってきた『sessionId』を『call』メソッド第一引数として指定する。


```addAdvertiser.rb
#!/usr/bin/env ruby
require 'xmlrpc/client'

login_client = XMLRPC::Client.new2('http://ホスト名/www/api/v1/xmlrpc/LogonXmlRpcService.php')
sessionId = login_client.call('logon', 'ユーザー名', 'パスワード')

client = XMLRPC::Client.new2('http://ホスト名/www/api/v1/xmlrpc/AdvertiserXmlRpcService.php')
param = {'agencyId' => 1, 'advertiserName' => '会社名', 'contactName' => '営業担当者', 'emailAddress' => 'メールアドレス', 'username' => 'ユーザー', 'password' => 'パスワード', 'comments' => 'コメント'}

client.call('addAdvertiser', sessionId ,param)


```
Herokuのforkコマンドで簡単に既存の本番環境からステージング環境を作る。


###参考 

- [Managing Multiple Environments for an App | Heroku Dev Center](https://devcenter.heroku.com/articles/multiple-environments)

- [Forking Applications | Heroku Dev Center](https://devcenter.heroku.com/articles/fork-app)


### heroku fork コマンドで作成

```bash:
$ heroku fork -a hoge hoge-staging
```

で アプリケーションhogeがhoge-stagingにコピーされます。

### heroku info で git remoteの情報を取得、追加

heroku fork コマンドでは自動でgit remote は追加されないので自分で行います。

```bash:
$ heroku info -a hoge-staging
```
で表示される GIt URL の部分を追加

```bash:
$ git remote add staging git@heroku.com:hoge-staging.git
```

これで 

```bash:
$ git push staging master
```
でステージング環境にpushすることができる。

###Staging用にRACK_ENVとRAILS_ENVを設定

```bash:
$ heroku config:set RACK_ENV=staging RAILS_ENV=staging --remote staging
```

これでステージングのログ見るときとか、ステージングに反映させたい環境変数とか設定するときは

```:bash
$ heroku logs -t --remote staging
```

既存のやつをみたいときは

```:bash
$ heroku logs -t --remote heroku
```
で出来たりする

###ステージング環境設定を本番と同じにする

シンボリックリンクをはる。

```bash:
$ ln -s config/environments/production.rb config/environments/staging.rb
```

###heroku forkでつくったアプリケーションの削除

```bash:
$ heroku  destroy -a hoge-staging
```
で削除することが可能。
`command` を「呼び出す」を英語で

「StackOverflowに質問したくても英語がわからない。」

特に日常会話なら出来てもパソコン用語はわからないなんてことがよくあります。

今回自分が引っかかったのは`invoke`という単語。
"If you invoke find from a shell~," みたいな感じで「呼び出す」の意味で使われます。

call でも良いんだろうけど印象が違うので今度使ってみよう。
[Solved] 【要望】 Qiitaサイト上でのword-break処理

# 対応のお礼
先程確認したところ、以下の要望について新たな修正されたCSSを参照するように変更されており、&lt;p&gt; 部分の禁則処理がうまく行われていることがわかりました。大変すばやいご対応ありがとうございました。

----
# 問題点
Qiitaの投稿内の文章が正しく禁則処理されません。英単語の途中、数字の途中、日本語開き括弧の後、日本語閉じ括弧や句読点の前で改行されてしまうことがあります。これがあると、文章部分がたいへん読みづらくなります。

# 原因
http://qiita.com/assets/bootstrap-public-application-b6cc1d3051504b7db626675ebb3ca05c.css に（このCSSが巨大なのはさておき）、

```css
.markdown-content p, .preview-area p {
  word-wrap: break-word;
  word-break: break-all;
  ...
}
```

という部分があり、これが原因です。`break-all` は「（単語内の）どこででも改行可」という意味であるためです。

# 提案する解決策
通常の本文である &lt;p&gt; では、そのような指定をする利点はないと思います。この部分の `break-all` を `normal` に変更することでほとんどの問題は解消すると思います。

ただ、他にも、&lt;h1&gt; やアイテムのタイトル的な箇所にも同様の指定がしてあります。よほど表示幅が狭いなどの理由がなければ、これらも `normal` にした方がよいと思われます。

以上、ご検討いただければ幸いです。

# 当面のブラウザ側での対策
とりあえず自分が見る分だけでも読みやすくしたいという場合は、ブラウザ側でユーザースタイルシートを使えばすぐ解決します。FirefoxなどならStylish拡張を使って、

```css
@namespace url(http://www.w3.org/1999/xhtml);

@-moz-document domain("qiita.com") {
.markdown-content p, .preview-area p {
  word-break: normal !important;
}
}
```

という感じのスタイルを入れておけばいいでしょう。
mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1':

capistranoでRailsアプリをデプロイ時にこんなエラーが出た。

> mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1':

既に同じ状況にぶつかった人がいたので助かりました。理由は以下のURLを参照。
[mysqldump: Couldn’t execute ‘SET OPTION SQL_QUOTE_SHOW_CREATE=1’が出た場合の対処法](http://howtow.tumblr.com/post/56765559339/mysqldump-couldnt-execute-set-option)

mysqlが5.6でクライアントが5.5だったので起きた問題。

Railsデプロイ時にスキーマダンプする時に発生するんですね。
解決方法は↑に出揃ってますけど、Railsのデプロイで問題が起きている場合はapplication.rbを一部コメントアウトすることでプロイできるようになります。

```ruby:config/application.rb
    # Use SQL instead of Active Record's schema dumper when creating the database.
    # This is necessary if your schema can't be completely dumped by the schema dumper,
    # like if you have constraints or database-specific column types
    config.active_record.schema_format = :sql # ここをコメントアウト
```
ただ、これをやっちゃうとstructure.sql or schema.rbをダンプしてくれなくなるので、古いmigrationファイルを移動できなくなってしまうんですよね。緊急でインフラに手を入れられないとかそんな状況の時にしか使えない対応だな。
CGridViewのセルに出す値はクロージャで書くほうがいい

Yii で便利な CGridView ですが、テーブルセルに任意のデータを出すコードとして、マニュアルのサンプル上はこんなふうに書いてあります。

http://www.yiiframework.com/doc/api/1.1/CGridView

```php
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        array(
            'name'=>'create_time',
            'value'=>'date("M j, Y", $data->create_time)',
        ),
    ),
));
```

evalできる文字列って、これちょっとカッコ悪いですよね。

これ実は、最近のバージョンだけかもしれないけど、次のように書けるようになっています。

```php
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        array(
            'name'=>'create_time',
            'value'=> function($data) {
                return date("M j, Y", $data->create_time);
            },
        ),
    ),
));
```

普通もう5.3未満なんてありえないので、クロージャでいいんじゃないですかね。PHPの文法として事前に評価されるし、エディタのハイライトも効くし、たぶん use で別の変数も束縛できるし。
metersToEquatorPixels を Google Maps Android API v2 で


Google Map API v1 には、「地図上の距離(ｍ)を画面上の距離(ピクセル)に変換する」ためのメソッド [Projection.metersToEquatorPixels](https://developers.google.com/maps/documentation/android/v1/reference/com/google/android/maps/Projection#metersToEquatorPixels(float)) がありましたが、v2 ではなくなってしまいました。

ので、以下のような代替関数を作ってみました。

```java:metersToEquatorPixels.java
public static int metersToEquatorPixels(GoogleMap map, LatLng base, float meters) {
	final double OFFSET_LON = 0.5d;
	
	Location baseLoc = new Location("");
	baseLoc.setLatitude(base.latitude);
	baseLoc.setLongitude(base.longitude);
	
	Location dest = new Location("");
	dest.setLatitude(base.latitude);
	dest.setLongitude(base.longitude + OFFSET_LON);
	
	double degPerMeter = OFFSET_LON / baseLoc.distanceTo(dest); // 1m は何度？
	double lonDistance = meters * degPerMeter; // m を度に変換

	Projection proj = map.getProjection();
	Point basePt = proj.toScreenLocation(base);
	Point destPt = proj.toScreenLocation(new LatLng(base.latitude, base.longitude + lonDistance));
	
	return Math.abs(destPt.x - basePt.x);
}
```

行っていることは単純で、基準となる緯度経度:``base`` から、適当に(ここでは 0.5度)東へ移動した緯度経度を ``Location.distanceTo`` で求め、その結果から、「1ｍは何度か？」を求めます。あとは、この係数を使って 地図上の距離:``meters`` を度に変換し、最後に、``base`` と移動後の緯度経度それぞれを画面座標に変換して、画面上の距離を返す、というものです。

「1ｍは何度か？」は、赤道上の値を使っても良いのですが、緯度によって値が大きく変わるので、このような手法を取りました。

ただこれでも、求める距離の精度によっては、``OFFSET_LON`` の値の調整が必要な気がします。また、経度:0 をまたぐような地域では正しく動かない気がします。(いずれも未検証)

また、緯度方向にもそれなりに正確な数値を出すには、上記と同じことを緯度に対しても行う必要があります。(これは v1 の API にもなかった)

v2 になって、描画系でピクセル座標を意識することはなくなったんであまり使うことも無いと思いますが、なにかで必要になったら思い出す程度で。

### 追記

あとで気づいたんですが、 v1 の [Projection.metersToEquatorPixels](https://developers.google.com/maps/documentation/android/v1/reference/com/google/android/maps/Projection#metersToEquatorPixels(float)) は、赤道上の距離で算出してたんですね。それと比べるとちょっとオーバースペックでした。

 それと、この記事を書く前に私のツイートを読まれた @honjo2 さんが、 v1 と同じ(赤道の距離を使う)仕様の関数を公開してくださいました。

<blockquote class="twitter-tweet"><p>どうぞ <a href="https://t.co/quYnqvn1tw">https://t.co/quYnqvn1tw</a> RT <a href="https://twitter.com/amay077">@amay077</a>: Google Map Android v2 になって metersToEquatorPixels がなくなっちゃったのが地味に不便だ。</p>&mdash; 本城 博昭 (@honjo2) <a href="https://twitter.com/honjo2/statuses/387368608541589505">October 8, 2013</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
PHP で、spl_autoload_register を使って、require_once 地獄を脱出しよう

## 目的

`require_once` 地獄を脱出したい！
`require_once` は、実行順に依存するため、たとえば PHPUnit で起こらなかったのに、ブラウザで実行したらクラスがないよと怒られたり、ということがありえます。

## `spl_autoload_register()` とは

http://php.net/manual/ja/function.spl-autoload-register.php

通常、

```php
$user = new User();
```

などとして、そのクラスがない場合、

```text
Fatal error: Class 'User' not found in ...
```

などとエラーになります。
その際、 `spl_autoload_register()` を使ってメソッドを登録しておけば、エラーが出る前に、そのクラス定義を探す最後の救済メソッドを実行できます。
それでも見つからなければおなじみのエラーが出ます。

## PHPのバージョンは？

- PHP 5.0.x の方 
 + `spl_autoload_register()` はありません。代わりに `__autoload()` が使えますが、そんな開発やる前に転職しましょう。 `__autoload()` のことなど忘れてしまえ。
- PHP 5.1.2 以上の方
 + `spl_autoload_register()` はサポートされていますが、オレオレフレームワークであっても、 このようなクラスは自作せず、 Composer のautoload などを利用することを考えましょう。
 + また、PHPのサポート期限はバージョン毎に定められています。特にセキュリティ上の観点から、サポート中のバージョンを利用しましょう。 -> http://php.net/supported-versions.php

## モダンPHPer へのさらなる利点

PHP5.3以上ですと、

- 名前空間が利用できる
- オートロード関数内で起きた例外もキャッチできる
- 無名関数を登録することも出来る
- 第2引数 prepare を使うことにより、オートロード関数を読み込む順番を制御できる。

お得ですね。

## 実装例

それでもオレオレ規約でクラスたちを管理したい方用の、実装例が以下になります。

```php:ClassLoader.php
<?php

/**
 * Classが定義されていない場合に、ファイルを探すクラス
 */
class ClassLoader
{
    // class ファイルがあるディレクトリのリスト
    private static $dirs;

    /**
     * クラスが見つからなかった場合呼び出されるメソッド
     * spl_autoload_register でこのメソッドを登録してください
     * @param  string $class 名前空間など含んだクラス名
     * @return bool 成功すればtrue
     */
    public static function loadClass($class)
    {
        foreach (self::directories() as $directory) {
            // 名前空間や疑似名前空間をここでパースして
            // 適切なファイルパスにしてください
            $file_name = "{$directory}/{$class}.php";

            if (is_file($file_name)) {
                require $file_name;

                return true;
            }
        }
    }

    /**
     * ディレクトリリスト
     * @return array フルパスのリスト
     */
    private static function directories()
    {
        if (empty(self::$dirs)) {
            $base = '/path/to/application/dir';
            self::$dirs = array(
                // ここに読み込んでほしいディレクトリを足していきます
                $base . '/controllers',
                $base . '/models'
            );
        }

        return self::$dirs;
    }
}

// これを実行しないとオートローダーとして動かない
spl_autoload_register(array('ClassLoader', 'loadClass'));
```

## 使い方

さあ、今まで書いた `require_once` とサヨナラです。

```php
require_once '/path/to/ClassLoader.php';
```
リファクタリング、ケーススタディ

##fuckマジックナンバー  

####やりたい事：質問項目をkeyに、その回答をvalueに入れた　@answeresというハッシュがあり、そのキーの一部の(必須回答項目)valueがnilでないかチェックする.
【俺のコード】

```ruby:kuso-code.rb
necessary_answers = [@answers["reason"], @answers["select_1"], @answers["select_2"],
                          @answers["select_3"], @answers["select_4"], @answers["select_5"],
                          @answers["select_6"], @answers["select_7"]]

if necessary_answers.compact.reject(&:empty?).size == 8
 *以下処理
```

###「マジックナンバーが含まれてるし、新しく回答必須項目を増やしたり変更する時に大変。くそコード」
###「そもそも長いし、反復表現がある。くそコード」

【良いコード】

```ruby:good-code.rb

class上部で定数定義

NECESSARY_ANS = ["reason", "select_1", "select_2", "select_3", "select_4", "select_5", "select_6", "select_7"]

.
.
.
.


tmp = NECESSARY_ANS.map{|key| @answers[key]}.any?(&:blank?)

# またはtmp = @answers.values_at(*NECESSARY_ANS).any?(&:blank?)
if tmp
 *以下処理
```

###「定数定義でマジックナンバーを消して、項目の追加がしやすい」
vimのテストフレームワーク


vimプラグイン書こうとちょっとずつ調べているのですがやっぱりテスト書きたいよねって事で
vimのテストフレームワークをまとめる

順不同、開発停止してそうなのもあるので雰囲気見てください。記事書いてからの将来的に開発止まっちゃうかもですし。よさそうな実装あったら開発が活発なところに組み込んだりも出来ますシー


# kana/vim-vspec
<https://github.com/kana/vim-vspec>

[Travis CI で Vim プラグインのテストを自動化する](http://rhysd.hatenablog.com/entry/2013/08/08/233743)
[Vim プラグイン開発でも継続的インテグレーションがしたい! (Travis CI 編)](http://labs.timedia.co.jp/2013/02/vim-plugins-vs-travis-ci.html)


テストファイルはvimプラグイン形式で書いて
内部でRubyの[vim-flavor](https://rubygems.org/gems/vim-flavor)gemを使用している

[vim-airline](https://github.com/bling/vim-airline)で使ってる

# AndrewRadev/vimrunner

<https://github.com/AndrewRadev/vimrunner>

完璧Rubyのgem

rspec形式で記述出来るので今までのrspecの恩恵が受けられる

[vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors)で使ってる。


# Shougo/vesting

<https://github.com/Shougo/vesting>

[unite](https://github.com/Shougo/unite.vim)依存

    :Unite vesting:.

で実行。

[neobundle.vim](http://github.com/Shougo/neobundle.vim)で試せる


# osyo-manga/vim-owl

<https://github.com/osyo-manga/vim-owl>

[Vim script のユニットテスト用のコード書いている - C++でゲームプログラミング](http://d.hatena.ne.jp/osyo-manga/20121230/1356873600)


# kannokanno/vimtest

<https://github.com/kannokanno/vimtest>

[Vim scriptのテストを行うvimtestプラグインを書いた](http://kannokanno.hatenablog.com/entry/20120401/1333259169)

[vimtest修正記録-Vim scriptテスト用にモックのサンプルを書いてみた](http://kannokanno.hatenablog.com/entry/20120720/1342733323)
[vimtest修正記録-Vim scriptテスト用にモック機能を書いてみたpart2](http://kannokanno.hatenablog.com/entry/20120722/1342948963)

# tyru/simpletap.vim

<https://github.com/tyru/simpletap.vim>

# vim-scripts/VimTAP

<http://github.com/vim-scripts/VimTAP>

# vimunit

<http://github.com/dsummersl/vimunit>(fork版)

<http://dsummersl.github.io/vimunit/>

# tomtom/spec_vim

<https://github.com/tomtom/spec_vim>

# h1mesuke/vim-unittest

<https://github.com/h1mesuke/vim-unittest>



## まとめ

けっこうある。

ほとんどvimscript形式で記述できるが
`vimrunner`のみrspecで記述するタイプ。

[vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors)のテスト実行とかvimが立ち上がって勝手に動く様は見ていて面白い。
記述方法も簡潔でruby知らなくても何となく解りそうではある。

自分が使ってるプラグインのテストフレームワークと同じだとなんだか安心感がある。travis-ciの結果が正常だったりとか。
`vim-airline`しかり`vim-multiple-cursors`しかり

## 参考リンク

<https://github.com/Shougo/vesting/wiki/Test-framework-for-Vim-scripts>
gitでいろいろ

#gitでいろいろ

##mergeの仕方
developブランチをnowブランチにmergeするとき.
>git checkout now
git fetch origin --prune
git merge origin/develop



##pushの仕方
add、commit、merge後に
>git push origin now

remote branch名とlocal branch名が異なる場合。

>git push origine local-branch:remote-branch



##remoteにpushしたcommitを消す
>git log

で戻りたい所のcommit id を見る。
ex. 7f68164e9e72ee0378aab34f43b3bc13cbb6e3bbまで戻りたい

> git reset --hard 7f68164e9e72ee0378aab34f43b3bc13cbb6e3bb←こいつは消さない
git push -f origin master



##mergeやpullのため一時的にHEADを保存

>git stash save
git stash list
git stash pop


##remoteのbranchをlocalに持ってくる

>git branch new-branch origin/new-branch

checkoutも一緒にやりたい場合

>git checkout -b new-branch origin/new-branch



##git logのemailやnameを変える

###やりたい事: nameがdodotanakaのcommitのnameをnewnewtanakaに変える

>git log --pretty=format:"%h%x09%an%x09%ad%x09%s" | grep 'dodotanaka'

git logから'dodotanaka'が含まれているものだけ抽出




>git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "dodotanaka" ]; then
    GIT_COMMITTER_NAME="newnewtanaka"
fi
git commit-tree "$@"
' HEAD


##git logを真っ新にしたい.

>rm -rf .git
>git init
godoc.orgでドキュメント生成が便利

# Goで書いたプロダクトについてドキュメント作りたい

[godoc.org](http://godoc.org/)というものがあって、
goのライブラリのドキュメントを生成してくれる。
ドキュメントが無い場合、以下の手順で作り終わる

1. godoc.orgを開く

2. godoc.orgの検索窓(Search for Go Packages) に ライブラリのリポジトリURLを入れる

  ![スクリーンショット 2013-10-08 12.29.08.png](https://qiita-image-store.s3.amazonaws.com/0/3985/0a0d36a5-39de-4ec7-40f0-e79c12b0b069.png)

3. Go! ボタンを押す

4. 出来上がり

  ![スクリーンショット 2013-10-08 12.30.23.png](https://qiita-image-store.s3.amazonaws.com/0/3985/a9011988-a4c2-8122-cade-1777bcc2cd96.png)

ドキュメントに載っているfunctionのリンクをクリックすると、
githubの該当ソースコードに飛ぶのでとても便利。

godocコマンドを実行するのがだるいので助かる。
MySQL5.5系で成功したspecが5.6系で失敗する


5.6系になって my.cnf で mysql_mode の設定でより strict な動作に変わったことが一つの原因みたい。

そのような場合、本来はコードのほうを変更するべきなんでしょうが、影響が大きくて直すのが困難で後回しにしたい場合、 my.cnf をいじって、mysql_mode の設定をコメントアウトしたら通るようになる。

ちなみに以下のように設定されてた。

```/usr/my.cnf
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
```

参考：[MySQL5.6で今までのVerでは問題無かったSQL文がエラーになった場合の対処法 - iをgに変えるとorangeになることに気づいたoranieの日記](http://d.hatena.ne.jp/oranie/20130402/1364906656)
ansibleのgit moduleでcloneしようとすると固まる

1. ansible実行しても延々終わらず、見るとgit moduleの実行で止まっている。
1. commandモジュールにしてgit clone直接発行するしてもダメ…そもそもgitコマンドだと二回目エラーになるしめんどい。
1. 直接sshで入って、git cloneすると動く。うーん…
1. もう一回やると動く、ううううーん。
1. 最初からもう一回やると止まる。
1. ansible modulesの定義をいくら見てもわからん…が、その下のNotesで解決、以下の定義を.ssh/configに追加

```shell-session
#.ssh/config
StrictHostKeyChecking no
```

要するにsshの最初の通信時にfingarprintを確認するところで止まってたわけです。
これに限らず、プロンプト出されると止まるので特に自分でshellとか書くときは注意

まあいつも通りドキュメントはちゃんと読めって事ですね。
Rについてきているデータセットを使う


データセット一覧を得るには、おもむろに `data()` を呼び出す。

読み込みたいデータセットを見つけたら `data()` 関数を引数付きで呼び出す。

````
data("iris")
# iris にデータセットが読み込まれる。
# iris <- data("iris") ではないので注意。
````
Rでライブラリを探す


CRAN に登録されているライブラリを探すには `sos` package の `???` を使う。
`???` は http://search.r-project.org/ に問い合わせて結果を表示する。

````
install.packages("sos") # 最初の一度だけ
library("sos")
???キーワード
````

ローカルにインストールされているライブラリを探すには `??` を使う。

````
??キーワード
````

関数のヘルプは `?` を使う。

````
?関数名
````

`?` が並んでて覚えやすいね。

なお、`???` は `findFn()`、`??` は `help.search()`、 `?` は `help()` 関数と同じ。

````
findFn("キーワード")
help.search("キーワード")
help(関数名)
````


参考: [SO: How to read .arff file with R?](http://stackoverflow.com/questions/7548216/how-to-read-arff-file-with-r)
Drupal Cookbook

===============

[Drupal](https://drupal.org/)はコンテンツマネジメントシステム(CMS)です。
ウェブアプリケーションフレームワークとも呼ばれています。
(モジュールを組合せてプログラムを書かずにアプリケーションを作成できます。)

# VirtualBox

## Install

Drupal7はCookbookがあるのでインストールは簡単です。
(Forkしてvagrant-omnibus pluginに対応しました。)

```bash
$ git clone git@github.com:ogom/drupal-cookbook.git ./drupall
$ cd drupal
$ git checkout omnibus
$ vagrant up
```

![drupal7](https://dl.dropboxusercontent.com/u/14690051/images/notes/cms/drupal/drupal7.png)

## Login

OSイメージのインストールを除くと、5分程度でログインができます。

```
Username: admin
Password: drupaladmin
```

# Tips

## Add Content Type

コンテンツタイプを追加してビューのモジュールで出力をカスタマイズします。
([Salesforce](http://www.salesforce.com/)もオブジェクトとビューでアプリケーションを作成できますね。)

![issues](https://dl.dropboxusercontent.com/u/14690051/images/notes/cms/drupal/issues.png)

## Drupal Notes

Drupalの情報を収集しているサイトは閉鎖しています。(Drupal8のリリースで復活!?)
![drupalnotes](https://dl.dropboxusercontent.com/u/14690051/images/notes/cms/drupal/drupalnotes.png)
SUPERGAMER俺をUSBデバッグ接続する

タブレットにゲームコントローラーを物理的に付けてしまったというアツい端末「[SUPERGAMER俺](http://supergamer-ole.com/)」をUSBデバッグモードで接続する話。

だいたいは、
[SUPERGAMER俺をUSB接続したい](http://blog.livedoor.jp/nanashisoft/archives/52620897.html)
[SUPERGAMER俺をUSB接続したい（２](http://blog.livedoor.jp/nanashisoft/archives/52624133.html)
を参考にしたものだけれども、いくつかショートカットできたのでメモしておきます。

あと、SUPERGAMER俺というのは長いので「俺」と略す。

# PCの事前準備
Android SDKおよび標準のUSBドライバはインストールされているものとします。
そちらのインストールについては別途検索などしてください。

# 「俺」の設定
開発者向けオプションより「USBデバッグ」をチェックします。

# USBドライバのインストール

「俺」は接続しただけでは、ドライバが見つからない状態になる。
デバイスマネージャに「SG001」というデバイスが表示されているので、
それをダブルクリックして
ドライバ
→ドライバの更新
→コンピューターを参照してドライバーソフトウェアを検索
→コンピューター上のデバイスドライバーの一覧から選択します
→製造元：Google, Inc. モデル：Android ADB Interface
を選択します。

これだけでは、DDMSやEclipseからの操作ができないようで、
記事にある

> 1.android-sdkフォルダの下の add-onsフォルダの下に gamemaster-oreフォルダを作成
> その中に，manifest.iniファイルを作成して，以下の記述を行います
> name=SG001
> vendor=SPEC
> description=GAMEMASTER-ORE
> api=15
> revision=1
> usb-vendor=0x2207
> 
> name，vendor，descriptionは適当な内容で構いません
> apiはインストールしている APIバージョンのどれかです
> ※余計な事を記述して，それが文法エラーになると読み込まれませんので，このままコピペを推奨
> 
> 2.コマンド プロンプトを起動して，以下のコマンドを実行
> adb kill-server
> adb usb update
> ※コマンドが終了しない場合は，機器は外して下さい
> ※adb.exeが常駐した状態で adb usb updateを実行しても無効です(adb.exeがファイルをロックしている為)。adb.exeは2つ起動する場合もあるので，タスクマネージャーで1つも起動していない事を確認すると良いでしょう（私はこれでハマりました）

を行います。

ここで
> error: device not found
となってしまい、また
> 3.adb_usb.iniを探す
> パソコンのどこかに生成されたはずの adb_usb.iniファイルを探す
> エクスプローラーで，ドライブ全体を検索すると良いです
に従いadb_usb.iniを探すもC:\Users\(ユーザー)\.android\adb_usb.ini しか見つかりませんでした。
このadb_usb.iniは今生成されたというより、それ以前に作られていたもののようです。

なので、このadb_usb.iniに、
> 0x2207

を追記。

そして「俺」のUSBケーブルを一旦外し、

> adb kill-server
> adb start-server

で再起動を行い、「俺」をUSB接続することで、

> adb devices
> * daemon not running. starting it now on port 5037 *
> * daemon started successfully *
> List of devices attached
> ZK0OMYRA4B      device

と認識させることに成功しました。

あとはいつもの開発用Androidデバイスです。
PowerPointで半角バックスラッシュを表示する方法

# PowerPointでのバックスラッシュの扱い
日本語環境の標準状態では、PowerPointは半角バックスラッシュ（U+005C）を円記号（U+00A5）にマッピングして表示してしまいます。このため、一般には半角バックスラッシュを表示させることができません。しかしこれでは、コード素片などをプレゼンテーションに含めたい場合に、不恰好です。
# バックスラッシュの表示方法
PowerPoint 2010/2013/2016では、次の手順により言語環境を変更できます。

1. 「ファイル」→「オプション」から、「言語」タブを選択する。
1. 「編集言語の選択」で「英語（米国）」を選び、「既定に設定」する。
1. PowerPointを再起動する。

これにより、U+005Cはすべてバックスラッシュで表示されるようになります。円記号は全角文字を使うか、「挿入」→「記号と特殊文字」よりU+00A5を入力すれば、表示できるので、特に困ることはないと思います。
# 副作用
この設定を行っても、GUIなどが変わってしまうことはありませんが、文字入力関連の挙動は英語向きになります。例えば番号付きの箇条書きで丸数字や漢数字は選べなくなります（既に存在する箇条書きが変化したりはしません）。また、「記号と特殊文字」の下部に表示されるデフォルトの文字メニューもリセットされ変化します。

あと、当然ですが、同じプレゼンテーションファイルを別のPCのPowerPointで表示させると、設定が違えば表示も違うことになります。フォントによりますが文字の幅が変わる場合はレイアウトが崩れる可能性もあります。
titanium-cliのインストールでつまづいたのでメモ


どこをみてもHomebrewを入れて、

```
$ brew install node
$ sudo npm install -g titanium
$ sudo npm install -g alloy
```

でtitanium-cliは入るよという感じなのだが、どうも昔入れたHomebrewの入れ方が悪かったのかpathの通し方が悪かったのかわからないがtiatniumのインストールでエラーが出るので、HomebrewでなくNodebrewなるもので入れなおしてみたがこれもうまくいかない。

>[node.jsの管理をhomebrewからnodebrewに変えて、npmをインストール](http://qiita.com/somtd@github/items/bd413e89d2db22ab795e)

環境がぐちゃぐちゃになってしまったのでHomebrewの全削除を試みる。

>[Homebrewのアンインストールと再インストール](http://kronus9.sblo.jp/article/71049335.html "黄昏てなんかいられない")

このあとHomebrewを入れなおすも、、

```
$ brew install node

==> Downloading http://nodejs.org/dist/v0.10.20/node-v0.10.20.tar.gz
Already downloaded: /Library/Caches/Homebrew/node-0.10.20.tar.gz
==> Patching
patching file tools/gyp/pylib/gyp/xcode_emulation.py
==> ./configure --prefix=/usr/local/Cellar/node/0.10.20
==> make install
==> Caveats
Probably you should amend your PATH to include npm-installed binaries:
    /usr/local/share/npm/bin
Warning: Could not link node. Unlinking...
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
You can try again using `brew link node'

Possible conflicting files are:
/usr/local/bin/node
/usr/local/share/man/man1/node.1
Error: undefined method `unlink' for nil:NilClass
Please report this bug:
    https://github.com/mxcl/homebrew/wiki/troubleshooting
/usr/local/Library/Homebrew/formula_installer.rb:499:in `record_cxx_stdlib'
/usr/local/Library/Homebrew/formula_installer.rb:351:in `finish'
/usr/local/Library/Homebrew/cmd/install.rb:83:in `install_formula'
/usr/local/Library/Homebrew/cmd/install.rb:24:in `install'
/usr/local/Library/Homebrew/cmd/install.rb:22:in `each'
/usr/local/Library/Homebrew/cmd/install.rb:22:in `install'
/usr/local/Library/brew.rb:95:in `send'
/usr/local/Library/brew.rb:95
```

と、なってしまいNode.jsすらインストールできなくなる、、、
なんやねん、、、検索しても何が原因かわからん、、
Homebrewのアンインストール時に余計なものまで消したのかと思い、Xcodeのコマンドラインツールを入れなおしたり、gccを入れたりしたが駄目、、、
手順を変えてnvmを先に入れてかnode.js入れたらすんなり終わりました。

```
$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh

$ nvm install list
$ nvm install v0.10.13
$ node -v
v0.10.13
$ npm -v
1.3.2

$ sudo npm install -g titanium
$ titanium -v
3.1.2
```
よくよく考えればnvmがnode.jsのバージョン管理ツールなんだからはじめからこの手順でやればよかった、、
どこみてもbrew install node でやってるけどどっちが正道なのだろう。
Railsでlayouts/applicationのレンダリングに30秒以上時間がかかったときの体験談


Rails 3.2.13での出来事。

開発環境(Mac OS X 10.7.5 Lion)でだけ、Railsでlayouts/applicationのレンダリングに異常に時間がかかった。

![storyblog.jpg](https://qiita-image-store.s3.amazonaws.com/0/5960/90b3b6d7-2c8a-20ff-fe8a-369dcd0393e2.jpeg "storyblog.jpg")


[rack-mini-profiler](http://railscasts.com/episodes/368-miniprofiler?language=ja&view=asciicast)で計測したらこうなった。Rendering: layouts/applicationに34秒。起動時だけでなく、ページ遷移ごとに異常に時間がかかる。


結局、原因はCSSとJSのコンパイルだった。app/views/layouts/application.html.erbの、


```application.html.erb
  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
```

の部分を消して再アクセスすると0.193秒で処理が完了した。

開発環境では1リクエストごとに動的にコンパイルしている。これが異常な待ち時間の原因だった。

config/environments/development.rbでの設定で

```config/environments/development.rb
config.assets.compress = false
config.assets.debug = true
```

としている（初期設定）のでこうなった。しかし設定をここから変えると、コンパイル前のassetsを更新してもlocalhostがそれを読み込まなくなったりする。できれば初期設定のままでいたい。ぐぬぬ。

Rails4はprecompileが速いらしいので、これからアプリケーションをRails4にアップデートして時間がどうなるか確かめてみるつもりだ。

## 追記

```config/environments/development.rb
config.assets.compress = true
config.assets.debug = false
```

にして再起動したらまともなレンダリング時間になった。

![storyblog_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/5960/2c753728-c46b-102e-6291-21c07a82ff5f.jpeg "storyblog_2.jpg")

どういうことかというと、

```config/environments/development.rb
config.assets.compress = true
```

でassets(jsとcss)をそれぞれ1つのファイルにして、renderされるhtmlは

```html
<link href="/assets/application.css" media="all" rel="stylesheet" type="text/css">
<script src="/assets/application.js" type="text/javascript"></script>
```
になる。

```config/environments/development.rb
config.assets.debug = false
```

にすることで、最初のリクエスト時にassets(cssとjs)をキャッシュして、それ以後はキャッシュしたjsとcssを使うようにする。assetsがキャッシュされているとき、手元でassetsを編集しても、ブラウザでlocalhostにリクエストを送ったとき、それに反応して更新されない。なのでassetsを編集するときはキャッシュを消す必要がある。と思う。

[Asset Pipelineのドキュメント](http://guides.rubyonrails.org/asset_pipeline.html)を日本語訳してくれた人がいたので、それを参考にして理解した。日本語訳: http://it.sifr.me/ruby-on-rails-asset-pipeline/
地味に便利なEmacsコマンド


実践Vimを読んだらEmacsのキーストロークももう少し減らさないなあとと思い調べました。

出来るだけ単語単位で移動、コピー、削除するようにするとキー入力は地味に減ります。

## M-系 (単語や文単位の移動)

|キーバインド|コマンド|機能|
|:-----------|-------------:|:--------------:|
|M-f|forward-word|次の単語へ移動|
|M-b|backward-word|前の単語に移動|
|M-d|kill-word|単語を削除|
|C-delete|bacward-kill-word|一つ前の単語を削除|
|M-@|mark-word|前の単語をマーク|
|M-a|backward-sentence|前の文に移動|
|M-e|forward-sentence|次の文に移動|
|M-k|kill-sentence|文を削除|
|M-z|zap-to-char|指定した文字まで削除 [参考](http://www.emacswiki.org/emacs/ZapToChar)|
|M-SPC|just-one-space|連続したスペースを一つにまとめる|

## C-M-系 (さらに大きい単位の移動)
大抵のモードでカスタマイズされており単語よりも大きな単位で移動する事が出来る。以下はc-modeの例。

|キーバインド|コマンド|機能|
|:-----------|-------------:|:--------------:|
|C-M-f|forward-sexp|次のS式へ移動|
|C-M-b|backward-sexp|前のS式へ移動|
|C-M-n|forward-list|次の括弧終わりに移動|
|C-M-p|backward-list|前の括弧始まりに移動|
|C-M-a|c-beginning-of-defun|関数定義の先頭に移動|
|C-M-e|c-end-of-defun|関数定義の終わりに移動|
|C-M-h|c-mark-function|関数単位で選択|

C-M-fとb, C-M-nとp, C-M-aとe を対で使うと移動単位が理解しやすい。
C-M-h はどこにいても関数単位のコピペが出来る。

## 参考文献

* [Emacsを使いこなすために](http://qiita.com/syohex@github/items/2bdcd9cd5b701b1112e6) - 'C-M-'のキーに慣れよう
[GroovyとProcessing]画面のステータスを遷移させる

画面のステータスをキーボードからの入力で遷移させていく
エスケープキーを押されるとどのステータスでもアプリケーションが終了してしまうので小細工が必要

動画リスト：[LWJGLのチュートリアル](http://www.youtube.com/playlist?list=PL19F2453814E0E315)
動画は[ココ](http://www.youtube.com/watch?v=pFUqYPUB_m4)

```groovy:DisplayTest.groovy
package episode006

import groovy.swing.SwingBuilder
import processing.core.PApplet

import javax.swing.*

class DisplayTest extends PApplet {

    static enum State {
        INTRO, MAIN_MENU, GAME
    }

    def state = State.INTRO

    def void setup() {
        frameRate(60)
    }

    def void draw() {
        background(0, 0, 0)

        switch(state) {
            case State.INTRO:
                noStroke()
                fill(255, 0, 0) // 赤
                rect(0, 0, 640, 480)
                break
            case State.GAME:
                noStroke()
                fill(0, 255, 0) // 緑
                rect(0, 0, 640, 480)
                break
            case State.MAIN_MENU:
                noStroke()
                fill(0, 0, 255) // 青
                rect(0, 0, 640, 480)
                break
        }
    }

    def void keyPressed() {
        def isEscapeKeyPressed = false
        if (keyCode == ESC || key == ESC) {
            isEscapeKeyPressed = true
            key = 0
            keyCode = 0
        }

        switch(state) {
            case State.INTRO:
                if (key == 's') {
                    state = State.MAIN_MENU
                }
                if (isEscapeKeyPressed) {    // エスケープ
                    System.exit(0)
                }
                break
            case State.GAME:
                if (keyCode == BACKSPACE) {    // バックスペース
                    state = State.MAIN_MENU
                }
                break
            case State.MAIN_MENU:
                if (keyCode == ENTER) {  // エンター
                    state = State.GAME
                }
                if (key == ' ') {  // スペース
                    state = State.INTRO
                }
                break
        }
    }

    def void keyReleased() {
        if (keyCode == ESC || key == ESC) {
            key = 0
            keyCode = 0
        }
    }

    def void keyTyped() {
        if (keyCode == ESC || key == ESC) {
            key = 0
            keyCode = 0
        }
    }

    def static void main(args) {
        def display = new DisplayTest()
        new SwingBuilder().frame(
                title: 'Episode 6',
                defaultCloseOperation: JFrame.EXIT_ON_CLOSE,

               size: [640, 480], show: true) {
            widget(display)
        }
        display.init()
    }
}
```

![grocessingGL006.png](https://qiita-image-store.s3.amazonaws.com/0/17179/fc1128b9-ea72-2579-e33d-676cd1823d56.png)