OmniAICreator/Qiita-1.07M huggingface dataset:
iOS8 beta 1Password拡張の導入方法をざっくり

# iOS8 beta 1Password拡張の導入方法をざっくり

![onepassword](https://qiita-image-store.s3.amazonaws.com/0/8920/266406e0-4325-1c1b-599e-60fdc89e5b16.jpeg)


  iOS8の1Password Extensionが話題ですが、iOS8 betaの状態でサンプルを試したり導入するには以下の面倒な作業が必要です。

## まずは1Password betaを実機にインストールします。

   + メール(support+appex@agilebits.com)に英文で1Passwordを使いたい旨を書いて申請します(本文は手短に3行書きました)。送信するとすぐに自動返信メールが来て、その後1時間半ほどで招待状が届きました。
   + 招待状メール下部にある"Show Invitation"ボタンを押します。
   + HockeyAppのページが開くのでFacebookまたはGoogleのアカウントを使ってサインインするか、新たにHockeyApp用のアカウントを作成します。
   + ログイン後に表示されるページに rink.io/... のようなリンクが出ますので、実機のSafariのURL欄に rink.io/... を入力してアクセスします。
   + 次に実機のSafariに表示されるページの"Install"ボタンを押します。
   + 設定画面に自動で遷移するので、そこでHockyAppプロファイルをインストールします。
   + インストール完了後、ホームに戻るとHockyAppのアイコンが出来ているので開きます。
   + "Sign in"を押してログインします。
   + "1Password Public Beta"が表示されますので、"Beta"を押してインストールします。ホームに戻ると新しく1Passwordのアイコンが増えているはずです。

これで1Passwordのサンプルアプリを試したり、開発中のアプリに実装することができます。

## 準備

1Password Extensionをダウンロードします。
:arrow_double_down: https://github.com/AgileBits/onepassword-app-extension/archive/master.zip
もしくは
:octocat: git clone https://github.com/AgileBits/onepassword-app-extension

試すだけなら`Demos/1Password Extension Demos.xcworkspace`を開いて実行します。

開発中のアプリに組み込む場合は`OnePasswordExtension.h`, `OnePasswordExtension.m`, `1Password.xcassets`の3つをプロジェクトにコピーします。

## 実装

複数ある機能のうち、UIWebView/WKWebViewで使う場合の最も簡単なものです。`OnePasswordExtension.h`を読み込み以下のように書いて任意のボタンにイベントを括りつけます。

```objc
- (IBAction)fillUsing1Password:(id)sender {
  [[OnePasswordExtension sharedExtension] fillLoginIntoWebView:self.webView forViewController:self sender:sender completion:^(BOOL success, NSError *error) {
    if (!success) {
      NSLog(@"Failed to fill login in webview: <%@>", error);
    }
  }];
}
```

ボタンを押すと1段だけのUIActivityViewが下から出てきて、そこに1Passwordのアイコンがあるので、それをタップします。

先ほどインストールした1PasswordにTwitter等のユーザー名/パスワード/ログインページURLを登録した後、対象アプリでログインページを開いている状態で1Password拡張を呼び出してIDとパスワードが埋められれば成功です。

もし1Password beta をインストールしているのにもかかわらず、アイコンが出ていない場合は、出てきたUIActivityViewに表示されているmoreアイコンから1Passwordを有効にします。

:bee: PR: 現在iOS8に向けたiPhoneブラウザを開発中です！iOS8公開後できるだけ早くリリースしようと思っています！

## 参照
:link: [AgileBits/onepassword-app-extension](https://github.com/AgileBits/onepassword-app-extension)
Swiftでrepeat構文っぽいものを作ってみた


## repeat

subscriptを使えば

```swift:
repeat[リピート回数]{ 繰り返したい処理 }
```

みたいな書き方が出来そうだと思ったので作ってみた。

以下がそのコード。

```swift:RepeatSyntax.swift
class RepeatSyntax {
    // クラス変数を定義
    class var repeat: RepeatSyntax {
        struct Singleton {
            static let instance = RepeatSyntax()
        }
        return Singleton.instance
    }
    
    subscript(count: Int) -> ((Void -> Void) -> Void) {
        get {
            return { (f: Void -> Void) in
                for var i=0; i < count; i++ {
                    f()
                }
            }
        }
    }
}

```

使い方は以下。

```swift:
RepeatSyntax.repeat[3]{ println("Hello") }

let repeat = RepeatSyntax.repeat
var i = 1;
repeat[5]{ let x = 3; println(x * i); i++ }
```

## forever

ついでに無限ループするだけのforeverも作ってみた。

```swift:ForeverSyntax.swift
class ForeverSyntax {
    class var forever: ForeverSyntax {
        struct Singleton {
            static let instance = ForeverSyntax()
        }
        return Singleton.instance
    }
    
    subscript() -> ((Void -> Void) -> Void) {
        get {
            return { (f: Void -> Void) in
                for ; ; {
                    f()
                }
            }
        }
    }
}
```

これの使い方が以下。
（無限ループしますので実行するときは注意してください。）

```swift:
let forever = ForeverSyntax.forever

forever[]{ println("Forever") }  // 無限ループ注意！
```

## ひとつのクラスにまとめてみた

構文（？）を増やすたびにクラスが増えるのは好ましくないので、ひとつのクラスにまとめたみた。

```swift:MySyntax.swift
class MySyntax {
    class RepeatSyntax {
        subscript(count: Int) -> ((Void -> Void) -> Void) {
            get {
                return { (f: Void -> Void) in
                    for var i=0; i < count; i++ {
                        f()
                    }
                }
            }
        }
    }

    class var repeat: RepeatSyntax {
        struct Singleton {
            static let instance = RepeatSyntax()
        }
        return Singleton.instance
    }

    class ForeverSyntax {
        subscript() -> ((Void -> Void) -> Void) {
            get {
                return { (f: Void -> Void) in
                    for ; ; {
                        f()
                    }
                }
            }
        }
    }
    
    class var forever: ForeverSyntax {
        struct Singleton {
            static let instance = ForeverSyntax()
        }
        return Singleton.instance
    }
    
}
```

使い方は以下。

```
MySyntax.repeat[5]{ println("MySyntax.Repeat") }
MySyntax.forever[]{ println("MySyntax.Forever") }  // 無限ループ注意！
```


こうしておけば、あとで別の構文（？）を追加したくなったときにも、MySyntaxクラスに追加していけば、あまりコードが散らからなくていい感じ。
VULTRのVPSでGITHUBに登録した鍵でSSHログインできるようにする

My Startup Scriptsに以下のスクリプトを登録します
デプロイ後すぐに普段GITHUBにコミットしているマシンでアクセスできます

```
#!/bin/sh
mkdir -p /root/.ssh
chmod 700 /root/.ssh
curl https://github.com/GITHUBのアカウント名.keys --output /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
```
Project Eulerをhaskellで練習していく日記: Problem 9

#問題
ピタゴラス数とは、a<b<cなる自然数の３つ組で、a^2+b^2=c^2を満たすものである。
例えば、3^2+4^2=25=5^2などである。
ピタゴラス数で、a+b+c=1000となるものが唯一存在する。
それを見つけ、積abcを計算せよ。

#回答
```hs
-- 以下のように安直にcも列挙すると無駄な計算が増えるので、
-- kouho n = [(a,b,c)| a<-[1..n], b<-[a+1..n], c<-[b+1..n], a+b+c==n]
-- 次の行のようにcはn,a,bから求める。
kouho n = [(a,b,n-a-b)| a<-[1..n], b<-[a+1..n], n-a-b>b]

pitas n = [[a,b,c]|(a,b,c)<-kouho n, a^2+b^2==c^2]

main = do
     print $ product $ head $ pitas 1000
```
#感想
いきなり自乗和の条件で候補を探すと処理が重いので、まず和が1000になるという条件の候補を探し、その中から自乗和の式を満たすものを選ぶようにしました。
rails.vim でファイル間のマッピング（projections）を追加する

rails.vim の `:A`（関連ファイルを開く）とか `:AV`（関連ファイルを画面分割して開く）とか、便利ですよね。しかし、これらはデフォルトでは model や controller など最初からあるものでしか使えません。

[7 Patterns to Refactor Fat ActiveRecord Models](http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/) にあるような `app/services` などを導入した時は、service でも同じように `:AV` とかを使いたいです。

rails.vim では、このファイル間の関連を projections と呼んでいるようです。projections に自分で追加するには、いくつか方法があります。

## .vimrc

`.vimrc` などで `g:rails_projections` を設定します。

```.vimrc
let g:rails_projection = {
  \ "app/services/*.rb": {
  \   "command": "service",
  \   "test": "spec/services/%s_spec.rb"
  \ }
  \ }
```

これで `:Rservice` で service のファイルを開いたり、`:Rservice!` で作成したり、`:A` などで spec ファイルを開いたりできるようになります。もうちょっといろいろ設定できるので、詳細は `:help rails-projections` を参照してください。

## config/projections.json

しかし、これだとチームで設定を共有できませんよね。また、プロジェクトによってディレクトリ構造が違う場合もあるかもしれません。そういう場合は、プロジェクト毎に `config/projections.rb` に設定を記入します。

```config/projections.rb
{
  "app/services/*.rb": {
    "command": "service",
    "test": "spec/services/%s_spec.rb"
  }
}
```

## Rails 以外では

なお、Rails 以外でも同じようなことをするための [projections.vim](https://github.com/malkomalko/projections.vim) というプラグインもあるようです。使ったことはありませんが、他の言語のプロジェクトで試してみてはいかがでしょう。

## 参考

- [Extending Rails.vim with Custom Commands](http://robots.thoughtbot.com/extending-rails-vim-with-custom-commands)
- `:help rails-projections`
symbolic演算と数値化（対数尤度のHessian計算を題材にして）


パラメトリックな対数尤度関数を定義し、これの微分やヘシアンが欲しいが、手計算でやる気がしないとき、symbolic math toolbox を使って、 symbolic な微分（数値微分ではない解析的な微分）をすることができる。

##準備
loglikelihood function が、パラメタ `q,r,s,t,u,v,a` の関数で書けているものとする。 

```matlab:loglikelihood.m
function L = loglikelihood( theta, Data )
q = theta(1);
r = theta(2);
s = theta(3);
t = theta(4);
u = theta(5);
v = theta(6);
a = theta(7);

L=0;
for i=4:5
  for j=1:10
     L = L + Data(i,j) * log( q * (r-1) + .......
```

以下のようにして上記を一つの symbolic な数式にまとめあげることができる。

```matlab:script_hoge.m
syms q,r,s,t,u,v,a;
theta = [q,r,s,t,u,v,a];
Data = sym('Data', [4,5]);
L = loglikelihood( theta, Data );

```
## gradient や Hessian を得る
7次元パラメタベクトル `theta=[q,r,s,t,u,v,a]` に関する gradient や Hessian 行列は以下の様に得られる。

```matlab:script_hoge.mの続き
grad = gradient( loglikelihood, theta );
H = hessian( loglikelihood, theta );
```

## gradient や Hessian の数値を得る
データ `Data` やパラメタ `theta`　の数値が、それぞれ `DataVaue` や `thetaValue` の数値ベクトルの形で与えられているとき、これを代入するには以下のようにする。

```matlab:script_hoge.mの続き
grad_val = subs( grad, Data, DataValue );
grad_val = subs( grad_val, theta, thetaValue );
H_val = subs( H, Data, DataValue );
H_val = subs( H_val, theta, thetaValue );
```

二度に分けて代入する必要があることに注意。しかし `theta` の中身である `q,r,...` に対していちいち explicit に代入する必要はない。

なお、`Data`や`theta`の次元が大きくなってくると計算時間がかかりすぎることもあるかもしれません。筆者は Data として 4元分割表をあらわす4×4行列を入れて `theta` には7次元のパラメタを入れたところ計算はほぼ一瞬でしたが、 `H` symbolic な表示には数秒かかりました。

半日かけて計算ノートを数ページをつぶしながらあとでバグを恐れる事態を避けることができる幸せを皆様にも！
Win7 (64bit) のWSHで Win32 の COM オブジェクトを使う場合の備忘

要点としては
 
* 32bit の COM オブジェクトを使うのであれば、COM オブジェクトを登録する場合の regsvr32.exe も、スクリプトを動かす cscript.exe / wscript.exe も %windir%\SysWOW64 のバイナリを使う必要がある。
* Win7 64bit で通常呼び出されるのは %windir%\System32　下にあるバイナリである。 %windir%\System32\cscript.exe からすれば、%windir%\SysWOW64\regsvr3232 で登録したCOMオブジェクトは、あずかり知らぬものであるため、『未登録』と同じ扱いになる。
* 32bit 環境でオブジェクトを登録してあっても、（それだけでは）64bit のスクリプティングエンジンでは、"Microsoft VBScript 実行時エラー: ActiveX コンポーネントはオブジェクトを作成できません。:" のメッセージで異常終了する。

追記

* コマンドプロンプトを開き、その中で32bit のコマンドシェル %windir%\System32\cmd.exe を起動する。このようにして32bit の箱を作ってしまえば手間がかからず旧資産を活用できるようだ。 この場合、SysWOW64 のスクリプティングエンジンを明示指定せずとも（スクリプトファイルが hoge.vbs なら hoge を指定するだけで）所期の動作となる。

確認対象

* Windows7 64bit SP1 Professional 
* Windows Scripting Host version 5.8
* [KBA(KaBaya's Archive).DLL 各種アーカイバDLL用ActiveX DLL; KBA(KaBaya's Archive).DLL for windows32](http://www.madobe.net/archiver/lib/activex/kba.html)
Bitbucketのprivate MavenリポジトリにGradleの生成物をアップロードする

Gradleのmavenプラグインを使えば生成物をMavenリポジトリにアップロードできます。
http://www.gradle.org/docs/current/userguide/maven_plugin.html#uploading_to_maven_repositories
しかし公式ドキュメントに記載されている方法ではgitリポジトリへのアップロードは出来ません。

# wagon-git を使ってみる
公式ドキュメントを読むと、各プロトコルに対してライブラリが提供されていると書かれています。これらはMaven Wagonという仕組みを使っているようです。これのgit版となるwagon-gitというライブラリを提供している人がいます。
https://github.com/synergian/wagon-git

これを使えばBitbucketにもアップロードできるのではないかと思い、試してみました。ライブラリ作者のドキュメントにはMavenからの使い方しか載っていないので、色々ググりながら（情報は少なかったですが）以下のような内容をbuildファイルに追加しました。

```groovy:build.gradle
apply plugin: 'maven'

configurations {
    deployerJars
}

dependencies {
    deployerJars 'ar.com.synergian:wagon-git:0.2.3'
}

uploadArchives {
    repositories.mavenDeployer {
        configuration = configurations.deployerJars
        repository(url: 'git:master://git@bitbucket.org:[ユーザ名]/[リポジトリ名].git') {
            authentication(userName: bitbucketUsername, password: bitbucketPassword)
        }
    }
}
```

これでuploadArchivesタスクを実行すると、Uploadingというメッセージが表示され、続いてBUILD SUCCESSFULになって上手く行ったように思えたのですが、Bitbucketの方を見ると特にファイルはアップロードされてませんでした・・・。調べましたが結局原因は分からず断念しました・・・。

# ローカルリポジトリにdeployしてgit pushする

もう一つ見つけた方法は、BitbucketリポジトリをcloneしたローカルリポジトリにGradleのmavenプラグインでファイルを書き込むという方法です。この場合Gradleのタスク実行後にgitコマンドを手動実行しないといけないのですが、設定は非常に単純になります。

```groovy:build.gradle
apply plugin: 'maven'

uploadArchives {
    repositories.mavenDeployer {
        repository(url: 'file://localhost/ローカルリポジトリへの絶対パス')
    }
}
```

実行するコマンドは

```bash
cd プロジェクトのルートディレクトリ
gradlew uploadArchives
cd Bitbucket上のMavenリポジトリをcloneしたディレクトリ
git commit -am '適当なコミットメッセージ'
git push origin master
```

という感じになると思います。

この方法はGradleだけで完結しないというのが気持ち悪く面倒くさい点ではありますが、それほど頻繁にMavenリポジトリにアップロードしないのであれば許容できる範囲の煩わしさかなあと思いました。

# まとめ
wagon-gitが動けばスカッとしたのですが、ダメだったので２番目の方法を採用しました。wagon-gitのGradleでの動かし方や、もっといい方法を知っておられる方がいましたら、お教えいただきたいです・・・

# 追記：maven-publishプラグインを使う
ローカルリポジトリにdeployするのにmavenプラグインのuploadArchivesを使いましたが、どうやらmaven-publishプラグインというのを使うのがより新しい方法のようなので、その設定も追記します。
http://www.gradle.org/docs/current/userguide/publishing_maven.html

```groovy:build.gradle
apply plugin: 'maven-publish'

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
    repositories {
        maven {
            url 'ローカルリポジトリへの絶対パス'
        }
    }
}
```

このmaven-publishプラグインを使ってwagon-gitを使えないか試したのですが、依存関係を解決する方法が分からず結局成功しませんでした・・・。
Objective-cのデバッグログ出力

NSLogのリリース時消し忘れ対策にマクロ関数を作ろう。

Xcodeのテンプレートでは、
デバッグ時に`DEDUG`というマクロ定数が定義されているので、
デバッグ時にのみNSLogを実行する様なマクロを作成する。
「Product」メニュー-「Archive」からリリース版を作成する際には`DEBUG`は定義されていないので、ログは出力されません。

定数定義ファイル等に以下を記述

```
#if DEBUG
#define MyLog(fmt,...) NSLog((fmt),(__VA_ARGS__))
#else
#define MyLog(fmt,...)
#endif
```

ログ出力したいところで、以下のように利用する。

```
int hoge = 1;
MyLog(@"hoge = %d", hoge);
```


このような仕組みを利用して、デバッグ時とリリース時の切り替えをすると良さそうです。
Project Eulerをhaskellで練習していく日記: Problem 8

#問題
以下の１０００桁の数の中で、隣接する４桁の数で積が最大のものは9 × 9 × 8 × 9 = 5832である。
```
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
```
同様に、この１０００桁の数の中から、13桁の連続で、各桁の積が最大になるその積の値を求めよ。
#回答
```hs
a="7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"

-- n桁の連続の列に切り分ける処理
adj :: Int -> String -> [String]
adj n str = if length str > n
            then (take n str) : (adj n (tail str))
            else [str]

-- 数字の列の積を求める処理
chprod :: String -> (Int, String)
chprod str = (product $ map (read . (:"")) str, str)

-- n桁の連続の積の最大を求める処理
adjprod n str = maximum $ map chprod $ adj n str

main = do
     print $ adjprod 13 a
```
#感想
二個目の関数のmapで適用する関数(read . (:""))はややこしかった。
（実際にはぐぐって[stackoverflowのページの投稿](http://stackoverflow.com/questions/8879391/how-do-i-convert-string-into-list-of-integers-in-haskell)を参考にしました。）
Eclipse環境下でのエラー対処法


基本的にはエラー文ググるべし。
だが、よくわからないけどエラー出る、みたいなときの対処法などを下記に載せます。

### [エラー除去のおまじない]
- Refresh（F5）
- Clean
- Build（Command + b）

　↓これでも直らなければ↓

- pom.xmlの反映：mavenプロジェクトを右クリック　→　Maven　→　Update Maven Project...　をクリック
- .classpath削除：`find ./ -name '.classpath' -exec rm {} \;`
- Mavenキャッシュ削除：.m2以下にmavenキャッシュがあり、それを削除。
  - 実行例：`rm -rf ~/.m2/repository/com/growthbeat/library/growthbeat-java/`
  - 上記実行例にて、`~/.m2/`以下のパスは各自読み替えてください。
- Eclipse上からプロジェクト消去　→　Import Maven Projectやり直し
- mvn clean
- Eclipse再起動

以下、詳細。

## クリーン、リフレッシュ
### 管理画面から
・ファイルを選択してリフレッシュ　：　`F5`
・Project　→　Clean...

gitなど外部からファイルの中身変更した場合、ファイルのクリーンは必須。

### コマンドラインから
・Eclipse本体のクリーン

```
/Applications/Luna/java/eclipse/Eclipse.app/Contents/MacOS/eclipse -clean
```

(注)
`/Applications/Luna/java/eclipse/Eclipse.app`は各自自分が使ってるEclipseのパスで読み替えてください。

・mavenのクリーン

```
mvn clean install
```

## ビルド
### 自動ビルドの設定は必須
・Project　→　Build Automaticallyにチェック入れる

この設定をしておけば、コンパイルエラーは赤く表記されるのでわかりやすい。

### 自動ビルドに時間がかかる場合の対処法
#### [JavaScript Validatorのチェックを外す]
プロジェクト選択　→　`Command` + `i`　→　Builders
（or プロジェクト選択　→　Project　→　Properties　→　Builders）
（or プロジェクト選択　→　右クリック　→　Properties　→　Builders）
→　JavaScript Validatorのチェック外し、OKクリック

#### [指定したパスをビルドから外す]
プロジェクト選択　→　`Command` + `i`　→　JavaScript　→　Include Path
→　Sourceタブをクリック　→　Excludedクリック　→　Editクリック
→　Exclusion patternsの横のAddボタンをクリック
→　Browseボタンをクリックし、除外したいパスを選択し、OKクリック

念のためクリーンすればOK！

【参考URL】
▼Eclipse のJavaScriptバリデータエラーを無視する
http://blog.zaq.ne.jp/oboe2uran/article/681/
▼EclipseでのjQuery jsファイル 構文エラー 回避方法
http://norinoritakanori.blog90.fc2.com/blog-entry-408.html

### 手動でビルド
・`Command` + `b`
（Project　→　Build All）

## その他
### HTMLやJSを管理下から外す
JSファイルなのに赤い警告がでていると「Javaコンパイルエラー」と見分けづらくなるので、HTMLやJSファイルなどは管理下から外した方がいい場合もある。

・Problemsタブの右の方の`▽`ボタン
→　Configure Contents…
→　チェックボックスからJavaScript Problemsなどのチェック外す

・この方法ですぐにProblemsから消えない場合
→　消したい警告を選択し、右クリック
→　Delete

【参考URL】
http://www.hitachi.co.jp/Prod/comp/soft1/cosminexus/useful/tips/090707_eclipse-problem-view2.html

### 1行書くたびにポップアップ出る
一旦ファイルを閉じて再度開くと直る場合がある。

### Eclipse自体の再起動
これで直ることもある。

### おまけ
・lombok便利。冗長コードを省ける。
・保存するたび「import解決」「フォーマット揃える」を実行させる
　→環境設定で「Save Actions」選択
　→「Format source code」と「Organize imports」にチェック入れる
・便利なショートカットコマンドはこちらを参照↓↓
http://qiita.com/shuntaro_tamura/items/530e5068d48ae6d92fb8
TextInputコンポーネントで複数行テキスト

## この記事について
ActionScriptのUIフレームワーク**Feathers**を使った際のTipsです。
テキスト入力のコンポーネントである**TextInput**クラスを使うと、テキストの入力フィールドを簡単に作成することができます。
**TextInput**クラスで**複数行テキスト**を実現したい場合は以下のコードを書くと実現できます。

*※Stage3Dライブラリを使用しない場合は、従来のflash.text.TextFieldクラスで問題ないですが、UIにStage3Dを用いた場合の話です。*
*※Feathers1.1.0以上*

## コード
```as3
var input:TextInput = new TextInput();
input.textEditorFactory = function():ITextEditor {
	var stageTextTextEditor:StageTextTextEditor = new StageTextTextEditor();
	stageTextTextEditor.multiline = true;
	return stageTextTextEditor
}
addChild(input);
```

## 参考
TextInput: allow multiline support #100
+ https://github.com/joshtynjala/feathers/issues/100
StageTextTextEditor: exposed multiline property (references #100)
+ https://github.com/joshtynjala/feathers/commit/6a6347095ece5e96d442740433eea3514659bc6a
Feathers 1.3.1 API Reference - StageTextTextEditor
+ http://feathersui.com/documentation/feathers/controls/text/StageTextTextEditor.html
Project Eulerをhaskellで練習していく日記: Problem 7

#問題
最初の６個の素数を列挙すると、2,3,5,7,11,13であり、６番目の素数は13であることがわかる。
同様に、10001番目の素数を求めよ。

#回答
以下のコードは一応答えは出ますが、処理が大変遅いです。
より良い処理は、[lex_naturalis](http://qiita.com/lex_naturalis)さんの[Project Euler No. 7](http://qiita.com/lex_naturalis/items/94edb2e5502fe6c9dea8)に載っています。（←実際に試しましたが、すばらしい処理速度です！）
以下、自分の安直なコード。

```hs
-- エラストテネスのふるい
-- 計算を多少速めるため、2,3,5,7,11はベタ書きで判定し、それ以上の素数については地道に判定
-- 引数 x: 判定する候補   ys: それまでに見つかっている素数
sieve _ [] = [11,7,5,3,2]
sieve x ys = if  x `mod` 3 /=0 && 
                 x `mod` 5 /=0 && 
                 x `mod` 7 /=0 &&
                 x `mod` 11 /=0 &&
                 all (\w->x `mod` w /= 0) [z|z<-reverse ys, z <= b]
             then  x : ys
             else ys
           where b = (truncate $ sqrt (fromIntegral x))::Integer

-- 素数列を作る関数
-- 引数 n: n個の素数を作ります。  c:どこまで判定済かのカウンタ。  ps:見つかった素数のスタック
listprims n c ps = if length ps < n 
                then listprims n (c+2) (sieve c ps)  -- 偶数は判定を省略するので、2ずつカウンタを進めます。
                else ps

-- 素数列を作る関数を簡単に呼び出すためのインターフェース
prims n = listprims n 11 []

main = do
     print $ head $ prims 10001
```

#感想
エラストテネスのふるいをリストで作ると非常に遅い。
上のコードでは、小さな素数によるmodの処理をベタで書いて多少は速めましたが、本当に安直に書くと我慢ならないほどの遅さでした。
Mac のターミナルで Coffeescript をコンパイル

プロジェクト作るほどでもなく Grunt や gulp はやりすぎ、ちょろっと Coffeescript をコンパイルしたいときのために `coffee` コマンドでコンパイルできる CLI ツールがあると知り導入してみました。

## 前提

* Node.js があること
* NPM が入っていること

上記前提がそろっていない人は先にいれましょう。 ndenv か nvm でも使えばいいんじゃないですかね。以下 ndenv を使った例で説明します。

## coffee-script のインストール

ぼくは CLI ツールとして使いたかったのでグローバルにインストールしました。とはいっても ndenv で管理してるのでホームディレクトリ配下に入るんですが。

```bash
$ npm -g install coffee-script
$ ndenv rehash
```

これだけ！　インストール確認

```bash
$ coffee -v
CoffeeScript version 1.7.1
```

## コンパイル

```bash
$ coffee -c test.coffee
```

test.js が生成された！　かんたん！
DB暗号化について参考サイト

【参考用】
MySQL暗号化/復号化について

・暗号化/復号化の方法(AES_ENCRYPT/AES_DECRYPT/HEX/UNHEX)
　→[link]
(http://blog.livedoor.jp/trisys/archives/747600.html)


・「like検索時」の参考用(サンプル)
　→[link]
(http://d.hatena.ne.jp/yamaback/20110819/1313735667)
CentOS6でsshサーバのみ動作させるdockfile


以下のようにすればsshサーバ構築できた。
rootのパスワードは念のためすぐに変更。
authorized_keysは各自生成しておくこと。


```
FROM centos:centos6
 
MAINTAINER shotsky
 
# Install Packages
RUN yum update -y
RUN yum install -y passwd openssh openssh-server openssh-clients sudo
 
# Setup SSH 
RUN mkdir /root/.ssh
RUN chmod 700 /root/.ssh
ADD authorized_keys /root/.ssh/authorized_keys
RUN chmod 600 /root/.ssh/authorized_keys

RUN echo "root:root" | chpasswd

# Mod sshd_config
RUN sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config
RUN sed -i 's/^UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config
RUN sed -i 's/^#RSAAuthentication yes/RSAAuthentication yes/g' /etc/ssh/sshd_config
RUN sed -i 's/^#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config

# Create host rsa&dsa keys
RUN service sshd start
RUN service sshd stop

CMD /usr/sbin/sshd -D
```
mod_phpのセッションをmemcachedで共有しようとしてハマった件

CentOS6.5にremiのPHP5.5をインストールして、memcachedでセッションを共有しようとしてハマったメモです。

## 現象
memcachedにセッションが保存されない。ヽ(｀Д´#)ﾉ ﾑｷｰ!!

## 入れたもの

php-pecl-memcached(remi-php55)
php(remi-php55)
httpd(base)
memcached(remi)

## 設定(失敗)

`/etc/php.ini`の`Session`セクションの`session.save_handler`に`memcached`を、`session.save_path`に`memcached.example.com:11211`を設定

おかしーな...

## 設定2(失敗)

`/etc/php.d/z-memcached.ini`なんてファイルがある！ということで、こちらも同じく設定

あれー...?

## 設定3(成功)

`/etc/php.d/z-memcached.ini`を読んでいたら「mod_phpをつかっているなら`/etc/httpd/conf.d/php.conf`に`save_handler`と`save_path`を定義しなさいよねっ！」って書いてあった。Oh...

というわけで、`/etc/httpd/conf.d/php.conf`に設定をしたら成功でした。

あと、`php_value session.save_path`の値を`tcp://`で始めたら「セッションが開始できなかったよ」ってエラーになったので、`hostaddress:port`の書式にした。

### 追記

多分、PHP(mod_php)をRPMでいれたからハマったんだと思う。ググると、nginx+php-fpmの構成が多いので、Apacheと組み合わせないならば`php.ini`の編集でOKぽい。

やってないけど、`/etc/httpd/conf.d/php.conf`のセッションハンドラとかの設定を消してやれば、`php.ini`の設定が有効になると思う。
Raspberry Pi買って最初にやった事まとめ

[アールエスコンポーネンツ](http://jp.rs-online.com/web/)で購入。
夕方に注文して翌朝10時ぐらいには届いた。
![10494609_706643402738459_7409365478322174406_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/30557/9cd063d1-aae4-ffc0-2c1d-c68ef9feb610.jpeg)

![10411055_706643412738458_6913353389135506286_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/30557/36288895-b920-cfec-5964-64dc7d223f88.jpeg)

OSはRaspbianを使った。
![10622844_706643429405123_1546696900834188579_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/30557/67ccacca-cf4f-3733-b77e-580391a1033d.jpeg)

[公式サイト](http://www.raspberrypi.org/downloads/)はダウンロードが遅すぎるので、[JAISTのFTP](http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/)からダウンロード。
SHA-1合ってたらか大丈夫だろう・・・。

OSのインストールについてはググれば情報たくさん出てくるので省略。

初期設定は[こちらのサイト](http://d.hatena.ne.jp/zqwell-ss/20130623/1372009506)を参考にさせて頂いた。

次は無線LAN使えるようにする予定。
チーム内で突然の死！が出来るhubotスクリプト

# hubot-totsuzen
```
Hubot> ＿人人人人人人人＿
Hubot> ＞　突然の死！　＜
Hubot> ￣ＹＹＹＹＹＹＹ￣
```

## インストール方法

1. `npm install hubot-totsuzen --save`
2. "hubot-totsuzen" を external-scripts.json に追加
3. Hubotをリスタートさせる

## コマンド

```
hubot totsuzen  - 突然の死！

Hubot> ＿人人人人人人人＿
Hubot> ＞　突然の死！　＜
Hubot> ￣ＹＹＹＹＹＹＹ￣
```

```
hubot totsuzen [query]  - [query]！

Hubot> ＿人人人人人人＿
Hubot> ＞　[query]！　＜
Hubot> ￣ＹＹＹＹＹＹ￣
```

## 謝辞
このスクリプトは[突然の死ジェネレーター](http://starwing.net/suddenly_death.html)様のスクリプトを参考に作成しました。

## 参考URL
- [aozora0000/hubot-totsuzen](https://github.com/aozora0000/hubot-totsuzen)
[AWS 2]AWS CLI環境を整備せよ！

AWS CLI環境整備の情報

[運用設計ラボ](http://www.operation-lab.co.jp/)の[波田野さん](http://qiita.com/tcsh)が主宰されている[JAWS-UG CLI専門支部](https://www.facebook.com/groups/jaswug.cli/)の資料へのリンクで済ませています。

#OS X Mavericks
http://bit.ly/1n7HMFP

#Amazon Linux
http://bit.ly/1tjN5qO

ーー
20140820 initial
Yahoo!ショッピングAPIでソート順が一部不正

お世話になります。

Yahoo!ショッピングAPIにおいて、リクエストパラメータに価格の昇順を指定しています。（具体的には、キーワード「トンネル」ヒット数「20」件、価格from「5000」円、ソート「%2Bprice」カテゴリ「2504」を指定）

レスポンスデータを確認すると、確かに5784円、6156円、8208円・・・と続いていますが、7件目あたりから5116円の商品が出力されています。

カテゴリ指定をしない場合、このような現象は確認できませんでした。
パラメータ指定方法について考えられる問題はありますでしょうか。

以下、リクエストUrlです(appidを置き換えてください)
https://shopping.yahooapis.jp/ShoppingWebService/V1/itemSearch?appid={appid}&query=%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AB&hits=20&price_from=5000&sort=%2Bprice&category_id=2504
ERROR:  Error installing capybara-webkit:

#bundle installでエラー
とあるプロジェクトをcloneしてきて`bundle install`を実行したらエラーして以下のログを出力していました。

```
$ bundle install
Fetching source index from https://rubygems.org/
~略~
Installing xpath 2.0.0
Installing capybara 2.3.0

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/myuser/.rbenv/versions/2.1.2/bin/ruby extconf.rb 
Command 'qmake -spec macx-g++ ' not available

Makefile not found

~略~
Process finished with exit code 5

```

`qmake`が無いのでbuildできなかった模様です。

ググったらstackoverflowに同じ質問が載ってましたので、メモっておきます。
参考:http://stackoverflow.com/questions/11354656/error-error-error-installing-capybara-webkit

#解決策
参考リンクにそのまま書いてありますが、`qmake`をインストールすればOKです。

```
brew install qt
```
bootstrap & simple_formでフォームを作る


## simple_formとは
* formを作るときに便利なgem
* bootstrapと組み合わせると簡単にフォームが作れる
* https://github.com/seyhunak/twitter-bootstrap-rails

## simple_formとbootstrapを学ぶなら
* http://www.ohmyenter.com/?p=197
* ↑ bootstrapとの組み合わせが抜群。

## generator
```
rails g scaffold Book title:string author:string review:integer description:text
rake db:migrate
rails g bootstrap:themed Books
```
* bootstrapのthemedでview/books/*にファイルが作られる
* admin以下にファイルを生成したいとき ``rails g bootstrap:themed admin/books book``になる

```
Usage:
  rails generate bootstrap:themed CONTROLLER_PATH [MODEL_NAME] [Specify application layout] [options]

Options:
  [--excluded-columns=one two three]  # Indicates when to generate excluded columns

Runtime options:
  -f, [--force]                    # Overwrite files that already exist
  -p, [--pretend], [--no-pretend]  # Run but do not make any changes
  -q, [--quiet], [--no-quiet]      # Suppress status output
  -s, [--skip], [--no-skip]        # Skip files that already exist

Description:
    Create bootstrap files for themed generator.
```

## collectionの活用
### selection
* collectionに配列を指定する

```
= f.input :source, as: :select, required: true, collection: [["Search", :search], ["Manual", :manual]]
```
* associationから選択

```
= f.association :company
```
### simple_enum

```
= f.input :deliver_cd, collection: f.object.class.delivers.hash
```
Android Wear開発の注意点Tips

#wearアプリをパッケージ化するときの注意点
[Packaging Wearable Apps](https://developer.android.com/training/wearables/apps/packaging.html "Packaging Wearable Apps | Android Developers")にmobileアプリとWearアプリをバンドルしてビルドする方法について解説されてますが、これ以外にも2つ注意点があります。
* mobileとwearアプリのpermissionが同じ
* mobileとwearアプリのapplicationIdが同じ

上記が守られないとインストール時にwearアプリがインストールされませんが、ビルド時やインストール時には特にエラーメッセージは表示されないので注意が必要です。

参考リンク: [Android Wear App not installed - Stack Overflow](http://stackoverflow.com/questions/24685845/android-wear-app-not-installed "Android Wear App not installed - Stack Overflow")
unityのオブジェクトを上下に移動させる。

上下にピストン運動させるのにシンプルな関数としてPingPong関数が使える。
Mathf.PingPong(時間,上下値)

Timeクラスを使うとゲーム起動からの経過時間を取得する事ができます。

```c#:objAnimation.cs
using UnityEngine;
using System.Collections;
public class ObjAnimation : MonoBehaviour {	
	void Update () {
		transform.position = new Vector3(transform.position.x, Mathf.PingPong(Time.time,10), transform.position.z);
	}
}
```
これでオブジェクトは上下に移動します。
![sample.jpg](https://qiita-image-store.s3.amazonaws.com/0/38279/1f287c72-dac7-b31d-73d2-374b8748a91f.jpeg)
【未解決】【メモ】socket.join していいタイミングが何かある？

socket.join()ができるイベントを作っておいて、connectが返ってきた瞬間にそれをコールしてしまうとコネクションが途絶えてしまう気がする。今は1秒待つような処理を入れたが、多分これではよろしくない。
建築物の filter-out （未完）

leaflet-tilelayer 地理院タイル（標準地図）から建築物を filter-out したい。

- http://shimz.me/example/leaflet/filter/canvasFilter/02/index.html
- https://github.com/humangeo/leaflet-tilefilter/wiki

あたりを参考にして、CanvasFilter を使ってコードを組んでみている。CanvasFilter を使うと、ピクセル値にアクセスが可能であるから、ほぼ任意のフィルタ処理が可能になる。

要点は次の通り。

```javascript
var std = L.tileLayer(
  'http://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
    attribution: "地理院タイル（標準地図）",
    maxNativeZoom: 17, maxZoom: 22,
    filter: function() {
      new L.CanvasFilter(this, {
        channelFilter: function(img) {
        for(var y = 0; y < 256; y++) {
          for(var x = 0; x < 256; x++) {
            var r = img.data[(x + y * 256) * 4 + 0];
            var g = img.data[(x + y * 256) * 4 + 1];
            var b = img.data[(x + y * 256) * 4 + 2];
            if(r > b && g > b) {
              //img.data[(x + y * 256) * 4 + 0] = 255;
              //img.data[(x + y * 256) * 4 + 1] = 255;
              img.data[(x + y * 256) * 4 + 2] = 255;
            }
          }
		 }
        return img;
      }
    }).render();
  }
});
```

残念ながら地理院タイル（標準地図）の場合、ピクセル値がかなりばらついているので、ある色のrgbを決め打ちして filter-out とはいかない。
rgbで類似色をクラスタリングするのはかなり面倒そうなので、色相（hue）を手がかりにfilter-outを進めていきたい。
現在のところのサンプルサイトは、次の場所にある。
http://handygeospatial.github.io/mapsites/2014/08/17/#17/35.66477/139.74905
うまく建物色だけをfilter-outできれば、愛宕山の山形が見やすくなるはず。しかし、建物色と等高線色が類似していることもあり、やや難しい課題になっている。
RubyMine で "Your Ruby version is x.x.x, but your Gemfile specified z.z.z (Bundler::RubyVersionMismatch)" がでるとき

RubyMine 6.3 で Rake 実行時に

```
Error:[rake --tasks] /Users/n/.gem/ruby/2.0.0/gems/bundler-1.3.5/lib/bundler/definition.rb:361:in `validate_ruby!': Your Ruby version is 2.0.0, but your Gemfile specified 2.1.2 (Bundler::RubyVersionMismatch)
	from /Users/n/.gem/ruby/2.0.0/gems/bundler-1.3.5/lib/bundler.rb:116:in `setup'
	from /Users/n/.gem/ruby/2.0.0/gems/bundler-1.3.5/lib/bundler/setup.rb:17:in `<top (required)>'
  :
```

みたいなエラーがでてしまうときの対処方法。

# 原因

Gemfile に指定してあるインタプリタのバージョンと、実際に rake を実行しているバージョンが異なるのが原因。

そこで Gemfile でのインタプリタのバージョン指定、たとえば

```rb
ruby "2.1.2"
```

と書いてある箇所を消せばとりあえず直る。

直るが…… 意図しないインタプリタ上で Rake タスクが走ってしまう、そもそも Heroku にデプロイできなくなる、などなどハマりどころ満載なので、そんな安直な解決は禁物。実際に動作しているバージョンへ Gemfile を直してしまうのもダメ。それでは何も解決していないではないか。喝!

# 修正

1. そなたが当に使いたいインタプリタのバージョンを Gemfile に書くのじゃ
2. rbenv なり rvm (オレ使ってないけど) なりを使ってそのインタプリタをインストールするのじゃ
3. "Preferences" → "Ruby SDK and Gems" を開き、2. でインストールしたインタプリタを指定するのじゃ
4. "File" → "Invalidate Caches" → "Invalidate and Restart" して、RubyMine に魂を入れ直すのじゃ
MacOSXからSQL Serverに接続

MaxOSXからSQL Serverに接続します。

#流れ
・php5-sybase、freetds-commonインストール
・上記インストールのためにfinkインストール
・finkインストールのためにXcode,Command Line Toolインストール

#0.Xcode,Command Line Toolインストール
割愛

#1.finkインストール
**1-1.ダウンロード**
http://www.finkproject.org/download/srcdist.php?phpLang=en

**1-2.コマンド実行**
解凍 (xxはバージョンにより異なる)
`$ tar -xvf fink-xx.tar.gz`
移動
`$ cd fink-xx`
インストール
オプションの選択が多数あるが、全てデフォルトのままでOK
（エンターキーを押せばデフォルトが選ばれます）
`$ ./bootstrap`
Path設定
`$ /sw/bin/pathsetup.sh`
アップデート
`$ fink selfupdate
$ fink index -f
$ fink selfupdate-rsync`

#2.php5-sybase、freetds-commonインストール
**2-1.コマンド実行**
`$ sudo apt-get install php5-sybase freetds-common freetds`

#2-2.接続
あとの操作は
http://qiita.com/arachan@github/items/026091e69e1aba7b0918
の「設定方法」から下を参照

#元ネタ
http://d.hatena.ne.jp/haronoid/20130503/1367581401
http://qiita.com/arachan@github/items/026091e69e1aba7b0918
[Xcode] ビルドパスの変更

# 前提

XcodeのPreferencesは変更しない。
あくまでProject単位での設定で済ませる。

# 方法

* Build Settings > Build Locations > Per-configuration Build Products Path を変更する

![cultivation_6.png](https://qiita-image-store.s3.amazonaws.com/0/31118/b464bc0a-5ce4-adfc-cd10-1ba2255d23f7.png)
[Xcode][C++] 既存プロジェクトにおいて、Run実行時に Static Library (libXXXX.a) を作成する

# 前提

既存の Console Application などのLibrary作成目的でないプロジェクトに対し、
Run実行時にStatic Libraryを生成されるようにしたい。

（具体的には、cocos2d-xでのゲームプログラミングにおいて、
　ロジックだけ別プロジェクトとして作成し、
　ゲーム本体のプロジェクトに組み込める形にしたい。）

※Objective-Cでなく、C/C++です。

# Goal

XcodeでRunを行い、Static Library (libXXXX.a)が作成されること

# 方法 -- Static Library を作成する

cf. http://www.kuma-de.com/blog/2011-08-08/2746

* Static Library 作成用のTargetを追加する

![cultivation_1.png](https://qiita-image-store.s3.amazonaws.com/0/31118/8763ea56-7a17-e782-d6a5-2031dee2c1d1.png)

* OS X > Framework & Library > C/C++ Library を選択

![cultivation_2.png](https://qiita-image-store.s3.amazonaws.com/0/31118/55a75a8f-8d51-04cc-c028-9e9b2807e8f0.png)

![cultivation_3.png](https://qiita-image-store.s3.amazonaws.com/0/31118/8a45657d-1387-814a-19a2-cc3a30e7ad89.png)

* Build Phases > Compile Sources に既存のソースを追加する

![cultivation_4.png](https://qiita-image-store.s3.amazonaws.com/0/31118/c3a80bf2-7ed0-f21d-ccb0-373fb9ab1b25.png)

※ただし、実行ファイル（例えばmain.cpp）などは含まないこと

* この時点で、作成したTargetでBuildすれば、Static Library (libXXXX.a)が作成されることが確認できる

# 方法 -- 既存のTargetでのRun実行時に同時に Static Library が作成されるようにする

* まずTargetを既存のTargetに変更する

* Product > Scheme > Edit Scheme で、Build時にStatic Library 作成用のTargetを追加する

![cultivation_5.png](https://qiita-image-store.s3.amazonaws.com/0/31118/ae2935c5-7967-9499-d903-7c467f5b4341.png)

* 既存のTargetでRunし、Static Library (libXXXX.a)が作成されることが確認できる

# おまけ

[[Xcode] ビルドパスの変更](http://qiita.com/tttreal/items/feccf87164135ddcfc21)
DevToolsのカラーピッカーが超進化！

~~※ Canary(39.0.2128.0)で確認 (Stableはまだ実装されていない。~~

※ Stableが39になって使えるようになってました。(2014/12/16)

ChromeのDevToolsのカラーピッカーが超便利になってた。

* Elementsパネルからカラーピッカーを出す
* カーソルをページの方に持ってくと…

![color_picker.gif](https://qiita-image-store.s3.amazonaws.com/0/17969/4926d66f-d9fb-8484-b0a6-4e8dc39e0bf2.gif)

虫眼鏡みたいなのが出てきて画面上の色が拾える＼( 'ω')／ウオオオアアア！

これできたらいいなーとずっと思ってた機能なので興奮してる。
【質問】Windows7(64bit)でphp5.5からmemcachedにアクセスしたい

環境は掲題の通り、XAMPP環境です。
php:5.5
apache:2.4

phpからmemcachedにアクセスしたいものの
公式とかその他とか探し回ってもmemcached.dllらしきものが見当たらず
Eclipseでのローカルユニットテストができず困ってます。

http://blog.kimuradb.com/?eid=725596
上記のサイトとか試しましたが、生成はできたものうまくいかず・・・・

new Memcached();

これがしたいのにできない！！（泣き

あまり情報ないようなのですが、どなたか心当たりあるかたいらっしゃいますか？
ぜひご教授ください
[Swift][CocoaPods]beta6だけじゃない？xcode6 beta4で発生したエラー内容&対処方法



### エラー内容

![qi1.png](https://qiita-image-store.s3.amazonaws.com/0/15812/c97bd869-d9bb-23d6-8daa-914f115b9e79.png)

```shell-session
Couldn’t load CocoaPods.xcodeproj because it is already opened from another project or workspace

```

### 原因

プロジェクトを閉じるショートカットキー「cmd + Q」でプロジェクトを閉じていた


### 対象方法

以下の手順で再作成を行った。

<b>１・xcode6 Beta4(以下、xcode)で新規プロジェクトを作成する。</b>
<b>２・“File > Close Project”の手順でxcodeを閉じる。決して「cmd + Q」で閉じないこと。</b>
<b>３・xcodeが閉じていることを確認する。</b>
<b>４・作成したprojectのdirectoryにターミナルで移動する。</b>
<b>５・Podfileをvimで作成する。</b>
<b>６・ターミナルで「pod install」とコマンドを実行する。 </b>
<b>７・作成された拡張子「.workspace」を起動する。決して「.xcodeproj」を起動しないこと。</b>
<br>

以下の画面のように各project配下にファイルがある状態になっていれば成功。
(プロジェクト名が変わっており混乱させて申し訳ないのですが、
プロジェクトは自分のプロジェクトに読み替えて頂く必要があります
ご了承ください。)


![q2.png](https://qiita-image-store.s3.amazonaws.com/0/15812/eb219ed8-0be8-8371-a846-32e8b4493b1c.png)


# 関連記事
<b>[[Swift]CocoaPodsを導入しようとして発生したエラー内容&対処方法(xcode6 beta4)](http://qiita.com/g08m11/items/1a8cfc8d67ef8de7a406)</b>
Pythonの練習1 - 幅優先探索

指定ディレクトリ配下のすべてのファイルを、幅優先探索（BFS）でダンプしてみる。

* os.listdir()で返却されるのはパス名ではなくファイル名・フォルダ名のリストなので、絶対パスのリストを取得するglob.glob()を使う。
* while(式)の<式>は、C言語と異なり代入式は指定できない。

```python:bfs.py
#!/usr/bin/env python
#-*- encoding:utf-8 *-*

import sys
import os
import glob

if len(sys.argv) != 2:
    print os.path.basename(sys.argv[0]) + ' <directory>'
    exit(None)

target_root = sys.argv[1]

que = []
que.append(target_root)

while len(que) > 0:
    target_dir = que.pop(0)
    for node in glob.glob(os.path.join(target_dir, '*')):
        if os.path.isdir(node):
            que.append(node)
        else:
            print(node)

exit(None)
```
UIViewController忘備録

### Rotation系

以下の3メソッドについて

```
a) – willRotateToInterfaceOrientation:duration:
b) – willAnimateRotationToInterfaceOrientation:duration:
c) – didRotateFromInterfaceOrientation:
```

・起動時にはどれも呼ばれない
・デバイスを回転させると a -> b -> 回転アニメーション -> c の順で呼ばれる
　・aでself.view.frameをとると回転前のframeが、bとcでは回転後のframeがとれる
【はじめてのSwift】基本的な関数の書き方


# 関数の作り方
## 一番基礎となる形

```A.swift
func favoritePlace(placeName: String) -> String {
	return "I like " + placeName + "."
}

println(favoritePlace("Okinawa"))
// "I like Okinawa." と出力
```

上記関数は以下のような形。

```A.swift
func 関数名 (パラメータ: 型) -> 返り値の型 {
	return 返り値
}
```


## 複数のパラメータを持つ関数
```B.swift
func relationship(s1: String, s2: String, relation: String) -> String {
	return s1 + relation + s2
}
```

```B.swift
func 関数名（パラメータ1: パラメータ1の型, パラメータ2: パラメータ2の型, パラメータ3: パラメータ3の型) -> 返り値の型 {
	return 返り値
}
```

このrelationshipという関数は以下のように呼び出す

```
relationship("Taro", "Hanako", "likes")
// "Taro likes Hanako"と出力
```

また、可読性を高めるために以下のように関数を書き換えることも可能。

```B.swift
func relationship(man s1: String, woman s2: String, relation joiner: String) -> String {
	return s1 + joiner + s2
}

relationship(man: "Taro", woman: "Hanako", relation: "loves")
// "Taro loves Hanako"と返ってくる
```

さらに、パラメータ名を省略して書くことも可能。

```B.swift
func relationship(#man: String, #woman: String, #relation: String) -> String {
	return man + relation + woman
}
```

このように書くことで可読性を維持したまま、コード量も省略できる。

```
relationship(man: "Taro", woman: "Hanako", relation: "hates")
// "Taro hates Hanako"と返る
```
ターミナルでfacebookクライアントfacyの使い方

Facebookをターミナルで使うのには、facyというgemが存在する。
https://github.com/huydx/facy

facyの画面はこういう感じ

![687474703a2f2f692e6779617a6f2e636f6d2f30316465396338646136313931623739626365633230313034383336316635382e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/18905/efe7bc24-b905-3da3-6e83-086d8029a4a0.png)

設定しかたについて説明します：

#設定
##gemインストール
まずはgemのインストールです：

```bash
gem install facy
```

facyはimagemagickに依存しますので、一応imagemagickの周り問題起きやすそうので、imagemagickがすでに入っている環境なら、正常にインストールできるはずです。

##facebook開発者アカウント登録
次に、facebookの開発者アカウントを登録する必要があります。
登録し方はここに存在しますので：
http://fb.dev-plus.jp/what-devplus/dev_register/
ご参考まで。

登録できた後は、アプリを作成できます。facyは使う人が自分でアプリのトークンを使うため、使う人は自分でアプリを作る必要があります、すごく簡単です、左側のボターンをクリックするだけで作成できます：
![687474703a2f2f692e6779617a6f2e636f6d2f33666561333566623565656338643165636139623661626661633830656530622e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/18905/dbdabaab-1446-b897-c306-b0cb1a50fcc1.png)

アプリを作成した後は、facyを起動する：

```
$facy
```
facyを起動したら、順番に、アプリのapp_id, app_secretとユーザTokenを入力することにすすめる。

全部の設定ができた後、自動的に、facebookのフィードをプールします。（ストリームみたいな感じで、新しいフィードをどんどん追加していく感じです）

#使い方
facyはCLI機能がそろっています。
よって、コッマンドをたたくにより色々なfacebook機能を使える：
- :commands すべてのコマンドを表示
- :help ヘルプコマンド
- :post [content] 自分のウォールにポスト
- :comment [code] [content] codeを持つポストにコメント
などのコマンドが存在します。

デモ動画もありますので、見ていただけるとすぐ使い方理解できると思います。
https://www.youtube.com/watch?v=zj9dGlhUXw0

以上でfacebookをターミナルでを楽しんでください。
npmコマンドから任意のコマンドを実行してみる

例えば、以下の様なpackage.jsonがあったとして、

```json:package.json
{
 ...
 "scripts": {
    ...

    "pretest":  "before_test_command",
    "test":     "test_command",
    "posttest": "after_test_command",

    ...
  },
  ...
}
```

`npm test`を実行することで pretest > test > posttestの順で指定したコマンドが実行されるのは有名な話ですが、
深遠な理由によりnpmから任意のコマンドを叩きたくなったりして、以下のようなpackage.jsonを書いて

```json:package.json
{
 ...
 "scripts": {
    ...

    "prehoge":  "before_hoge_command",
    "hoge":     "hoge_command",
    "posthoge": "after_hoge_command",

    ...
  },
  ...
}
```

`npm hoge`とか叩いてももちろん実行されません。
そういう時は`npm run hoge`と実行するとprehoge > hoge > posthogeの順で実行してくれます。
Summon - コードテンプレートジェネレーターで開発環境を効率化する

プロジェクトごとにRailsのScaffoldみたいなコードジェネレータがほしいけど、作るのが手間。

なのでできるだけ手間がかからないコードジェネレータジェネレータ書いてみた。

[mizchi/summon](https://github.com/mizchi/summon "mizchi/summon")

まだnpmに登録してないので `npm install -g mizchi/summon` で入れる。

```shell-session
# 初期化
$ summon init
 > init .generators

# foo ジェネレータを生成
$ summon generator foo
 > generate generator
generate  /Users/mizchi/proj/summon/.generators/foo/generator.coffee
generate  /Users/mizchi/proj/summon/.generators/foo/foo.json.hbs

# foo ジェネレーターを使う
$ summon foo
 > generate foo
generate  /Users/mizchi/proj/summon/app/foo.json
```

`.generators` を生成したら最初からgeneratorというジェネレータが入っていて、それを使って他のコマンドを生成する。(使わなくてもいい)


基本的には foo/generator.coffee を呼ぶだけ。API見て察してください。

```coffeescript
module.exports = (g, {$1}) ->
  g.gen 'default-generator.coffee.hbs', ".generators/#{$1}/generator.coffee"
  g.gen 'dummy.json.hbs', ".generators/#{$1}/#{$1}.json.hbs"
```

g.genで使うファイル名と出力先のパスを指定する。ただのスクリプトなのはイテレーションしたり色々したり出来るようにする余地を残すため。

`summon foo arg1 arg2 --x 3 --y 4` ってコマンド打ったら引数オブジェクトには `{$0: 'foo', $1: 'arg1', $2: 'arg2', x: '3', y: '4'}` が入ってるので、それを使ってコードを展開する。


Handlebars以外とか、ヘルパを仕込む仕組みとかまだ考えてない。
JSで数値の3桁区切りを実装する簡単な方法


23002342 を 23,002,342 と言った具合に、数値に対して
3桁毎にカンマを打って表示させたい場合、
僕は今まで愚直に正規表現を使って変換していました。

しかし、JavaScriptのNumberオブジェクトに標準で用意されている、

toLocaleString() 


というメソッドを使えば簡単に3桁区切りのカンマを打った状態で数値を出力することができるようです。

Sample:

```
var num = 23002342;
console.log(num.toLocaleString()); // output: 23,002,342
```
nkfコマンドで文字コードをどかっと変換

##環境
+ Mac OSX

##困ったこと
1. UTF-8でエンコーディングされたcsvファイルを、Excelで開きたい。
1. このままでは文字化けしちゃうので、なんとかShift_JISに変換したい。
1. テキストエディタに開いてから文字コード変換とかやるけど、めんどい＆データが膨大なときは処理が重くてツラい
1. 困った…(´・ω・｀)

##nkfコマンドでどかっと変換処理
nkfとは文字コード変換のためのLinuxコマンドとのこと。
これを使うためにはmacにインストールする必要あり。なのでHomebrewで落としてくる。

	% brew update
	% brew install nkf

インスールできたら、さっそく試してみる。
Shift_JISへの変換は -s のオプションを付ければOKのよう。またファイルを上書き保存するには --overwrite のオプションで。

	% nkf -s --overwrite fuga.csv
これで無事、文字化けせずにcsvファイルをexcelで見れるようになりました。めでたしめでたし(ФωФ)
nkfコマンドの使い方は以下のリンクが詳しかったので、ご参照くださいm(_ _)m
[文字コード変換コマンドnkfの使い方まとめ Linux](http://blog.layer8.sh/ja/2011/12/23/%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89%E5%A4%89%E6%8F%9B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89nkf%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%BE%E3%81%A8%E3%82%81-linux/)
[Linux - macにnkfコマンドがないだと！？じゃあ入れよう！ - Qiita ](http://qiita.com/kou_bacchus/items/6448608ee03b0a71dcd4)
会社のgitのタグ付けルールが 日付 + 連番 の形式で、都度最新の連番を調べてタグ付けるのが面倒だったのでシェル書いた。

タイトルの通り。

```
git tag $(TODAY=`date +%Y%m%d`; git tag | grep -e ${TODAY} | cat - <(echo "${TODAY}_00") | sort | tail -1 | awk -F "_" "{cnt=\$2+1}{printf \"%s_%02d\", \$1, cnt}")
```
コテコテだけど、こんなかんじで。

###ちょっと解説

やっていることはすげー簡単で...

* 当日の最新のタグを取得
* 連番部分に +1 して新しいタグを生成

こんだけ。もうちょっとｋｗｓｋ。

ゴニョゴニョしているのがこの部分。

```
$(TODAY=`date +%Y%m%d`; git tag | grep -e ${TODAY} | cat - <(echo "${TODAY}_00") | sort | tail -1 | awk -F "_" "{cnt=\$2+1}{printf \"%s_%02d\", \$1, cnt}")
```
ひとつずつ見ていく。

```
TODAY=`date +%Y%m%d`;
```
ここは見ての通り、当日の日付を TODAY に代入している。

大事なのは次。


```
git tag | grep -e ${TODAY} | cat - <(echo "${TODAY}_00")
```
1つ目のパイプのところまででタグ一覧から当日のタグを抽出している。

ただ当日初回のタグ付けの場合は grep で絞った結果何も渡ってこないので2つ目のパイプが効いてくる。

```
... | cat - <(echo "${TODAY}_00")
```
パイプで受け取る標準入力に "${TODAY}_00" を加える。

前述のとおり、当日初回は grep の結果何も渡ってこないのでその場合は...

```
20140819_00
```
のようになる。（日付は 2014/08/19）


```
... | sort | tail -1 | awk -F "_" "{cnt=\$2+1}{printf \"%s_%02d\", \$1, cnt}"
```
その文字列を昇順で並び替えて最下行を取得して awk で連番を振る。

```
20140819_01
```

僕は `gtag` みたいなシェルのエイリアスとして登録して使ってます。

ちょっとした改善だけど、こういうシェル考えるの楽しいね！
Cinderでイベント/イベントリスナーを定義する


[Cinder](http://libcinder.org/) を久しぶりにチェックしたら、バージョンが地味に上がってた。
僕は普段[openFrameworks](http://www.openframeworks.cc/)を使っているのですが、ちょっとCinderも勉強してみることにしました。
で、まぁ基本的な機能はサンプルとか見ればわかるかなぁと思ったのですが、イベントだけちょっとわからなかったので、調べました。

### oFでイベント

oFだと、

	ofEvent<T> 
	ofNotifyEvent
	ofAddListener

あたりを使えばよくて簡単（？）です。
[ちなみにoFの場合はこれが参考になります](http://www.slideshare.net/roxlu/openframeworks-007-events)

### Cinderでは

* CallbackMgrを使う
* std::functionに入れた関数をコールバックにセットする

のがオススメなのかなー？
いまいちドキュメントもサンプルも見つからなかったのですが、OSCPackのCinder Blockがそれっぽいことをしていたので、参考にしました。Cinder内のblocks/OSC/src/OscListener.cpp参照。

一応ぼくが書いたコードも解説します。

	class EventExampleApp : public AppNative {
  	public:
		void setup();
		void update();
		void draw();
    	void keyDown( KeyEvent event );
    
    	CallbackMgr<void (MyEventArgs*)> cb;
    	void eventHandler(MyEventArgs *e);
    	CallbackId callbackId;
	};

cbがコールバック関数を保存しとくオブジェクトのインスタンスで、eventHander(MyEventArgs *e)がfireされるようにコードを書いていきます。


	void EventExampleApp::setup()
	{
    	auto func = std::bind(&EventExampleApp::eventHandler, std::ref(*this), std::placeholders::_1);
    	callbackId = cb.registerCb(func);
    
    	// if you want to unregister, call
    	// cb.unregisterCb(callbackId);
	}

一言で言えば、std::Function<void (MyEventArgs*)> func に、メンバ関数を代入ということをしたいのですが、
難しいですね！
std::functionとかstd::bindとか、std:placeholdersとか、oFを書いてる分には使わなかった、新しいC++の機能を使いまくっています。
このへんは解説できるレベルにないので、まぁこうやったら動きました、という程度で。
oFはコミュニティが活発で、たくさんアドオンがあるのがいいのですが([ofxAddons](http://ofxaddons.com/)とか)、CinderはC++11の新機能とかもガンガン取り入れているので、書いてるうちにC++のレベルもあがりそうですね。

	int cnt = 0;
	void EventExampleApp::keyDown(cinder::app::KeyEvent event)
	{
    	switch (event.getChar()) {
       	 case KeyEvent::KEY_RETURN:
       	 {
       	     MyEventArgs e("Test " + cinder::toString<int>(++cnt));
       	     cb.call(&e);
       	 }
       	     break;
            
       	 default:
       	     break;
    	}	
	}

cb.callでイベントをfireできます。
Enterキーを押すたびに、

	eventHandler:Test 1
	eventHandler:Test 2
	eventHandler:Test 3

みたいなコンソールログがでます！


[ソースはgithubにあります](https://github.com/nistetsurooy/Cinder-EventExample)
monitを使ってtd-agentの監視&再起動


td-agentが落ちていた場合の対処として[monit](http://mmonit.com/monit/)を用いてプロセスを監視します。

##インストール

###RPMforgeリポジトリ導入(CentOS6系) ※必要な場合のみ
①yum-prioritiesプラグイン導入

```
$ sudo yum -y install yum-plugin-priorities
$ sudo yum -y install yum-priorities
```

```/etc/yum.repos.d/CentOS-Base.repo

[base]
・・・
CentOS-5
priority=1 # ここ追加

#released updates
[updates]
・・・
CentOS-5
priority=1　# ここ追加

#additional packages that may be useful
[extras]
・・・
CentOS-5
priority=1　# ここ追加
```

②RPMforgeリポジトリ導入

```
$ wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
$ sudo rpm -ivh rpmforge-release-*.rpm
```

###monitの導入

```
$ sudo yum install monit
```

```/etc/monit.conf
set logfile syslog facility log_daemon # コメントアウトを外す
```

監視するための設定ファイル作成

```/etc/monit.d/td-agent.conf
check process td-agent with pidfile /var/run/td-agent/td-agent.pid
  start program = "/etc/init.d/td-agent start"
  stop program = "/etc/init.d/td-agent stop"
  if 5 restarts within 5 cycles then timeout
```

解説すると、

```
check process td-agent with pidfile /var/run/td-agent/td-agent.pid

```
監視するプロセスの指定。

```
start program = "/etc/init.d/td-agent start"
stop program = "/etc/init.d/td-agent stop"
```

起動/停止のスクリプトを指定。

```
if 5 restarts within 5 cycles then timeout
```

何らかの不具合で起動できない場合に備え、timeoutの設定。
/etc/monit.confに設定しているdeamonの設定を1cycleとし、5cycleの中で5回再起動したら監視外にするという事。

monitの再起動。

```
$ sudo /etc/init.d/monit restart
```

##動作確認

実際にmonitを起動し、td-agentを落としてみる。

```
$ sudo /etc/init.d/monit status
$ monit (pid  3678) を実行中...
```

monitは動いている。

```
$ sudo /etc/init.d/td-agent status
td-agent (pid  3610) を実行中...
$ sudo /etc/init.d/td-agent stop
Shutting down td-agent:                                    [  OK  ]
```

td-agent止めた。
logを確認してみる。

```/var/log/messages
Aug 19 14:34:47 localhost monit[3678]: 'td-agent' process is not running
Aug 19 14:34:47 localhost monit[3678]: 'td-agent' trying to restart
Aug 19 14:34:47 localhost monit[3678]: 'td-agent' start: /etc/init.d/td-agent
```

おお、勝手に再起動かかってるっぽい。

```
$ sudo /etc/init.d/td-agent status
td-agent (pid  3727) を実行中...
```

実際にちゃんと動いていた。
monit簡単なのに凄い色々できそう！