OmniAICreator/Qiita-1.07M huggingface dataset:
スペース入りのファイル名をforでmvする

## 作業対象のファイル
```
$ ll
total 152
-rw-r--r--  1 okisanjp  staff    688  2 19 09:44 Context.sublime-menu.jp
-rw-r--r--  1 okisanjp  staff   1597  2 19 09:44 Indentation.sublime-menu.jp
-rw-r--r--  1 okisanjp  staff  55187  2 19 09:44 Main.sublime-menu.jp
-rw-r--r--  1 okisanjp  staff    154  2 19 09:44 Side Bar Mount Point.sublime-menu.jp
-rw-r--r--  1 okisanjp  staff    711  2 19 09:44 Side Bar.sublime-menu.jp
-rw-r--r--  1 okisanjp  staff    479  2 19 09:44 Tab Context.sublime-menu.jp
```

このファイルから拡張子「.jp」を取り除きます

## 普通にやってみる
```
$ for name in *.jp;do mv $name ${name%.jp};done

Context.sublime-menu.jp -> Context.sublime-menu
Indentation.sublime-menu.jp -> Indentation.sublime-menu
Main.sublime-menu.jp -> Main.sublime-menu
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
```

ファイル名にスペースが入っているものが失敗。

### このようにカイゼン
```
$ for name in *.jp;do mv "$name" "${name%.jp}";done

Context.sublime-menu.jp -> Context.sublime-menu
Indentation.sublime-menu.jp -> Indentation.sublime-menu
Main.sublime-menu.jp -> Main.sublime-menu
Side Bar Mount Point.sublime-menu.jp -> Side Bar Mount Point.sublime-menu
Side Bar.sublime-menu.jp -> Side Bar.sublime-menu
Tab Context.sublime-menu.jp -> Tab Context.sublime-menu


$ ll
total 152
-rw-r--r--  1 okisanjp  staff    688  2 19 09:53 Context.sublime-menu
-rw-r--r--  1 okisanjp  staff   1597  2 19 09:53 Indentation.sublime-menu
-rw-r--r--  1 okisanjp  staff  55187  2 19 09:53 Main.sublime-menu
-rw-r--r--  1 okisanjp  staff    154  2 19 09:53 Side Bar Mount Point.sublime-menu
-rw-r--r--  1 okisanjp  staff    711  2 19 09:53 Side Bar.sublime-menu
-rw-r--r--  1 okisanjp  staff    479  2 19 09:53 Tab Context.sublime-menu
```

うまくいきました
Scala Play のサービスを nginx を使ってサブディレクトリに置くときに嵌ったこと

# 起こったこと
Play で作ったサービスを nginx を使って、サブディレクトリに置きたかったんですが、その際に嵌ったので記録しておきます。

例えば、`http://example.com/myapp/` にアクセスした時に、サービス自体にはアクセスできるのですが、css とか js とかの assets の類で404が出てしまいました。

その時の nginx の設定ファイルはこんな感じ。

```nginx:default.conf
upstream play_app {
  server example.com:9000;
}

server {
    listen       80;
    server_name  example.com;

    location /myapp/ {
      proxy_pass http://play_app;
    }
}
```

トップページ自体にはアクセス可能ですが、assets へのパスが、`http://example.com/assets/javascripts/index.js` のようになってしまい、404が出てしまっていました。

# どうしたか
基本的には、以下の記事のとおりにすれば、解決出来ました。
http://nil639.blogspot.jp/2013/06/play.html

記事では、Apache を使っていますが nginx 的に書くと、上記のdefault.confを次のように書き換えます。

```nginx:default.conf
upstream play_app {
  server example.com:9000;
}

server {
    listen       80;
    server_name  example.com;

    location /myapp/ {
      proxy_pass http://play_app/myapp;
    }
}
```

その上で、 play の `conf/application.conf`で、`application.context`を指定します。

```scala:conf/application.conf
application.context = "/myapp" 
```

**※追記 （2015/02/19 12:48）**
確認したらちゃんと動いてなかったので再度検証しました。
最後に`/`を入れないとうまく行きませんでした。

```scala:conf/application.conf
application.context = "/myapp/"
```

**※追記（2015/02/19 19:57）**
もう少し調べてみたら、`activator run`等のコマンドを実行するタイミングで指定することもできるようです。

```shell-session
activator run -Dapplication.context="/myapp/"
```

`application.context`を指定すると、全ての route の先頭に prefix がつくようになるので、記事のように全て指定しなくても大丈夫です。

ここまでやると、例えば`http://example.com/myapp/`にアクセスすると、サービスの `/myapp` に渡されます。assets のパスは`http://example.com/myapp/assets/javascripts/index.js`になりますので、サービスの `/myapp/assets/javascripts/index.js`に渡されるようになり、今度はちゃんとアクセスできます。

これで、無事解決しました。

# おわりに
~~あとは、`activator run`等のコマンドを打った時に、`application.context`を指定することができれば、サービスの設定ファイルをいじらなくても、nginx の設定を変更するだけでここまでの作業が可能になるのですが、そのあたりのやり方がよくわかりません。~~

というより、Scala と Play 自体もあまりよくわかっていないのでそのあたりからちゃーんと勉強が必要そうです。
chrony使ってみた

@yunanoさんの[CentOS - 新しいNTPクライアント＆サーバ、chrony - Qiita](http://qiita.com/yunano/items/7883cf295f91f4ef716b)をやってみた。

## インストール

```bash:
yum install -y chrony
```

## 設定

```diff:/etc/chrony.conf
- server 0.fedora.pool.ntp.org iburst
- server 1.fedora.pool.ntp.org iburst
- server 2.fedora.pool.ntp.org iburst
- server 3.fedora.pool.ntp.org iburst
+ server ntp.nict.jp
+ server ntp1.jst.mfeed.ad.jp
+ server ntp2.jst.mfeed.ad.jp
+ server ntp3.jst.mfeed.ad.jp
```

```bash:リスタート
systemctl restart chronyd
```

## 動作確認

```bash:ntpq&nbsp;-pの変わり
chronyc sources
```

* 時間がずれているとき一気に変更されるのではなく、徐々に合わせていく様子。


* [日本標準時間](http://www.nict.go.jp/JST/JST5.html)確認サイト
Macでtoo many open filesがでてきたとき

# 前提
1. MacOS　10.10 Yosemite　（10.9以前は対象外）
2. elsaticsearchをlaunchctlで起動している

# 事象
elasticsearchがtoo many open filesというエラーを吐いてうんともすんとも言わなくなることがある。

# 原因
システム上のmaxfilesの数がelasticsearchが推奨する32k〜64kまでの値に設定されていない。

# 対応
以下のファイルを作成する。
/Library/LaunchDaemons/limit.maxfiles.plist 

内容は以下のとおり。
```xml:limit.maxfiles.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
    <dict>
      <key>Label</key>
        <string>limit.maxfiles</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxfiles</string>
          <string>65536</string>
          <string>65536</string>
        </array>
      <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>
```
macを再起動する。

elasticsearchのAPIでopen_file_descriptorsを確認できます。
`$ curl -s http://127.0.0.1:9200/_nodes/stats/process?pretty`

あとはelasticsearchのログファイルを見ながらちゃんと処理できるようになってればOKなはずです。
warning: already initialized constant APP_PATH というエラーで rails server コマンドが失敗する問題を解決する

```
$ bundle exec rails s
bin/rails:6: warning: already initialized constant APP_PATH
```

なんじゃこりゃー！

とりあえず rails/spring の Issue を読む。
[warning: already initialized constant APP_PATH · Issue #259 · rails/spring](
https://github.com/rails/spring/issues/259)

`rake rails:update:bin` すれば本来の原因が判明するっぽい。

```
$ bundle exec rake rails:update:bin
rake aborted!
LoadError: cannot load such file -- guard/guard
(stack trace は省略)
LoadError: cannot load such file -- guard-sprockets2
(stack trace は省略)
```

僕の環境に起きていた問題は [guard](https://github.com/guard/guard) のバージョンアップによりそのディレクトリ構造が変化したことで、
[guard-sprockets2](https://github.com/stevehodgkiss/guard-sprockets2) がそれを正しく `require` できていないというもののようだ。
そこで、もはや不要だった guard-sprockets2 を `Gemfile` から削除して `bundle install` しなおし、その後再度 bin ファイルを生成しなおした。

```
$ bundle exec rake rails:update:bin
$ bundle exec spring binstub --all
$ bundle exec rails s
=> Booting Thin
=> Rails 4.2.0 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Thin web server (v1.6.3 codename Protein Powder)
Maximum connections set to 1024
Listening on localhost:3000, CTRL+C to stop
```

動くようになった！ ✌ ('ω' ✌ )三 ✌ ('ω') ✌ 三( ✌ 'ω') ✌
pecoの便利な関数を集約した奴がいたんですよぉ〜

なー！にぃー！

![](https://raw.githubusercontent.com/ryoppy/cool-peco/master/cool-poco.jpg)

https://github.com/ryoppy/cool-peco

というわけでクールペコです。

[peco知らない方はこちら](https://github.com/peco/peco)

## 使い方

```
$ cool-peco-<TAB>
```

関数の一覧が出るので実行するだけ。

## 関数一覧

- cool-peco-filename-search
  - find . -name 的なファイル名検索
- cool-peco-ghq
  - [ghq](https://github.com/motemen/ghq)コマンドを便利に
- cool-peco-git-checkout
  - gitのブランチを選択してcheckoutできる
- cool-peco-git-log
  - gitのログを選択してコミットIDを取得できる
- cool-peco-history
  - ctrl+r的なコマンドの履歴
- cool-peco-ps
  - ps aux的なプロセスの絞り込み
- cool-peco-ssh
  - `~/.ssh/config` から接続先を絞り込む
- cool-peco-tmux-session
  - tmuxのsessionを選択


基本的に選んだものはプロンプトに入る。**選んだもので勝手に何か実行することはない。**

![cool-peco-demo.gif](https://qiita-image-store.s3.amazonaws.com/0/11449/13baad3d-a41a-37c4-e2eb-1b438327c945.gif)


## alias

```zsh
bindkey '^r' cool-peco-history # ctrl+r
bindkey '^h' cool-peco-ssh
bindkey '^p' cool-peco-ps

alias ff=cool-peco-filename-search
alias gbb=cool-peco-git-checkout
alias gll=cool-peco-git-log
alias ta=cool-peco-tmux-session
alias cg=cool-peco-ghq
```

## 独自の定義を追加

[customs](https://github.com/ryoppy/cool-peco/tree/master/customs)フォルダがあるので、example等をコピペして配置するだけです。

[example](https://github.com/ryoppy/cool-peco/blob/master/customs/cool-peco-custom-example)見ると分かりますが、普通にシェル書くだけなのででとても簡単です。


## おわり

自分の環境でしか確認してないのでアレ。

でも、ただのシェル関数の集まりなのでコード読めば解決すると思う。

自分で色々変えたい人は自分のdotfilesに書けばいいし。それが一般的な問題だったらPRしてほしいし。
Accidental recursive require


e.g. You're in `prog` trying to require `Prog.js` in the same directory.

`vim prog`

```js
#!/usr/bin/env node

// ...

var Prog = require("./Prog");
```

Using node v0.10.33, there is no distinction between `prog` and `Prog.js` when requiring (i.e. `require("Prog")` v.s `require("prog"))`.

Might get strange behaviour as you're trying to require Prog.js but end up loading the same script you're running `prog`. (best to avoid the situation and rename e.g. `prog` to `prog-cli`).

Just ran into this...
Mac の爆速運用の基本３つ


あくまで個人的な使用方法ですが、

**Macでは操作中から**

* control + space (->INPUT)
* command + ? (->cursor OR INPUT)
* control + F8 (->cursor)

**で、ほとんどのアクションを実行できる！キーボードだけでやりたいことをすぐにできる！**

この機能が、デフォルトでついてくるってだけで Mac を使う理由は十分。カーソルキー不要はありえない。１つ目は Spotlight, ２つ目は ヘルプメニューであり且つメニューフォーカス、３つ目はメニューエクストラフォーカス。

僕は３つ目をoption + ？に変更して、統一感を出しています。


Spotlight
---------

設定呼び出し、アプリ呼び出し、ファイルアクセス、これなしじゃ始まらない。ターミナルの mdfind コマンドがあるのもいいね。

ヘルプメニュー
--------
設定 -> キーボード -> ショートカット -> アプリケーション -> ヘルプメニューにあるデフォルト

ほとんどのアプリで使用でき、まだショートカットを覚えていない段階であっても、キーボード入力から実行できる。またカーソルキーで自在に操作できるので、実行可能な選択肢を眺めつつ、ショートカットを覚えることにつながる。学習段階でも、習熟段階でも重要なショートカット。

メニューエクストラ
-------
デフォルトは control + F8
下キーを押すとなにが起こったかわかる。

ここでカーソルキーで操作できるので、音量調節、Bluetooth切り替え、wi-fi切り替え、残エネルギー確認などができる。
Ruby on Rails4でomniauth-twitterの認証に失敗した時

私がRuby on Rails4で開発中、omniauth-twitter認証時に401エラーが出た時の解決法です。

#開発環境
* Windows7-64bit
* Ruby on Rails 4.1.1
* Ruby 2.0.0
* omniauth 1.2.2
* omniauth-twitter 1.1.0

#（結論）PCの時刻がずれていた
考えられる間違いとして、twitterのKeyの入力間違えなどがありますが、私の場合は**PCの時刻がずれていた**ことが原因でした。
以下の手順で時刻を補正して、うまくいくか試してみてください。

1. [コントロールパネル]から、[時計、言語、および地域]ー[日付と時刻の設定]で、[日付と時刻]を表示
2. [インターネット時刻]タブから、[設定の変更(C)]ボタンをクリックして、[インターネット時刻設定]を表示
3. [インターネット時刻サーバと同期する(S)]にチェックを入れ、サーバを選択して[今すぐ更新(U)]ボタンを押して同期
4. 正常に同期した旨のメッセージが表示されたら、サーバを再起動（webrick等）

うまく行かない場合は、同期サーバを代えてみるまたは他の原因が考えられます。
コンマ数秒のずれでもエラーになるようです。
React + (Javascript || CoffeeScript) + Bower スタータキット @masuidrive

# React + (Javascript || CoffeeScript) + Bower スタータキット @masuidrive

　最近、React.jsにハマっています。いままでとパラダイムが結構ちがうのですが、とても面白い感じです。React.jsがどんな物についてはかは、下記の記事にまとめて見ました。興味のある方はまずこれに目を通してみてください。

[Ajaxを劇的に簡単にするReact.js – @masuidrive blog](http://blog.masuidrive.jp/2015/03/03/react/)

　Reactを簡単に始めるには、[jsfiddleのReactサンプル](http://jsfiddle.net/reactjs/69z2wepo/)や[公式スタータキット](http://facebook.github.io/react/docs/getting-started.html)を使う方法があります。

　両方ともブラウザだけで実行でき手軽なのですが、ソースファイルを分割しrequireで読み込んだり、ライブラリを使ったり、SaSSを使うようなコンパイルが必要なモノには対応する事ができません。

　実際にReactで何かを作るときには、コンパイル環境を構築する必要があるのですが、その方法は色々あり結構複雑です。

　私もReactで本格的にアプリを作ろうと思ったとき、WebPackやGulpなど新しいツールキットがたくさんあり、どうやって構築していいのか悩みました。

　色々試してみた結果、BrowerifyとGulpを中心にnpmを使って環境構築し、Reactで使うライブラリはBowerで管理するのが良さそうと言うことに落ちつきました。

　そこで、なるべくシンプルな形でReactを始められるよう、環境構築部分をまとめてこのパッケージを作ってみました。

https://github.com/masuidrive/react-starterkit


## 環境構築

　Windowsだったり、Linux/OSXでもローカルにNode入れたくない人向けにVagrant環境も用意しました。

　と言ってもWindowsのVagrantは触ったことないので、おかしいところがあったらPull Requestよろしくお願いします。

　テストに付いては自分でもまだ方針が決まっていないので放置されています。


## Starter kitのダウンロード

gitをお使いの方は、`git clone https://github.com/masuidrive/react-starterkit.git`してください。

gitのない方は、[master.zip](https://github.com/masuidrive/react-starterkit/archive/master.zip)をダウンロードして適当な所に解凍して下さい。


## Nodeのインストール

ローカルに[Nodeをインストール](http://nodejs.org/download/)するか、Vagrantを使う事ができます。

Vagrantを使う場合は、[Vagrant本体](https://www.vagrantup.com/)と[VirtualBox](https://www.virtualbox.org/)をインストール後、下記の様に実行します。
`/vagrant`にカレントディレクトリがマウントされているので移動してください。

```
host$ vagrant up && vagrant ssh
〜〜 待つ 〜〜
/vagrant$ cd /vagrant
```

注) 必要なboxファイルは12MB程度と小さいモノを使っています。


## パッケージを導入

下記のコマンドを実行すると開発に必要なパッケージが導入されます。

```
/vagrant$ rm -Rf node_modules bower_components
/vagrant$ npm install && ./bin/bower install
```

下記の様なメッセージが出たら「y」キーを押して下さい。

```
[?] May bower anonymously report usage statistics to improve the tool over time?
```

開発環境のパッケージはnpm、クライアント側のライブラリはbowerで管理しています。


## 実行

下記のコマンドを実行後、ブラウザで http://localhost:8000 を開いて下さい。

```
/vagrant$ ./bin/gulp dev
[07:29:25] Finished 'dev' after .... ← 出るを待つ
```

下記の様なエラーが出たら、`node_modules`と`bower_components`を削除して、`npm install`からやり直してください。

```
Error: `libsass` bindings not found. Try reinstalling `node-sass`?
```

## ソースコード

`./app`以下にソースコードが入っています。


## CM
トレタでは、業務急拡大中につきRuby/フロントエンド/インフラエンジニアが足りなくてとっても困っています！
コード書くことが好きなエンジニアを募集しています。

興味のある方は、下記URLからご応募お待ちしています！
https://www.wantedly.com/projects/11460
mustache for Erlang/OTP を作った

## mustache for Erlang/OTP を作った
Erlang/OTPでTemplate Engineが欲しいなーと思ったので, mustacheの仕様に沿ったTemplate Engineを作成した.

レポジトリ|[soranoba/mustache](https://github.com/soranoba/mustache)|
---|---|
バージョン|v0.1.0|
ライセンス| MIT License|

ちなみに, 既にmustacheのErlang実装は[存在する](https://github.com/mojombo/mustache.erl).
なお, この[mustache](http://mustache.github.io/)の公式HPからもリンクが張られている既存の物よりも今回実装したものは**30倍程**早い. 
(いくつか実行の方法があるので一概には言えないが...)

### mustacheとは
「ひげの奴」と言えば,「あれか！」となる人が多いであろうテンプレートエンジン.
複数の言語の実装があるので割と便利.

if-else, foreach, escape, unescape... の処理も可能.

詳しくは[マニュアル](https://mustache.github.io/mustache.5.html)を見て欲しい. シンプルなので取っつきやすい物だった.

### 速度改善するにあたって...
30倍速いよ！というからには速度改善のポイントがあるように思えるかもしれないが, 特別なことは何一つしていない.

- binary + mapベース
- compile less (作成したtemplate専用のrender用モジュールを作成するタイプではない) 

の2点を満たす物が良かったというだけに過ぎない.

### 使い方

１. template binary + maps

```erlang
1> mustache:render(<<"My name is {{name}}">>, #{"name" => "soranoba"}).
<<"My name is soranoba">>
```

２.  binaryからtemplateを作成した後レンダリングする

```erlang
1> Template = mustache:parse_binary(<<"My name is {{name}}">>).
2> mustache:compile(Template, #{"name" => "soranoba"}).
<<"My name is soranoba">>
```

３. ファイルからtemplateを作成した後レンダリングする

```erlang
1> Template = mustache:parse_file(<<"./hoge.mustache">>).
2> mustache:compile(Template, #{"name" => "soranoba"}).
<<"My name is soranoba">>
```

mustacheの書き方については[マニュアル](https://mustache.github.io/mustache.5.html)を参照のこと.


ちなみに, `render/2`は`parse_binary/1`をした後に`compile/2`をしているだけなので, 性能は変わらない.
元々, parseした後にcompileするというので最適化するつもりで実装しているので, 専用の関数を作成しても良かったが流石に手間なので勘弁して欲しい.

また, mapのkeyは`string()`で固定だが, valueは`integer()`, `float()`, `string()`, `binary()`, `map()`, `function()`が入る. 詳しくは型定義を見て欲しい.
(keyも本来であれば`binary()`にしたいが書くときに4文字も多く入力しなければならないので`string()`にした)

### 注意点
- ASCII 以外は試していない.
- ラムダ式は無駄が多いので仕様に合わせて実装はしたもののオススメしない
- `{{> file}}`で`file.mustache`を埋め込むことができるがそのファイルは以下を参照する
 - `parse_file`の場合はそのパスと同じディレクトリ
 - `parse_binary`の場合はカレントディレクトリ
- 改行の数が公式マニュアルのものよりも多くなる (改行を削除するといった処理は入れていない為)

### その他
蛇足１：　ちなみに、今回ほぼ末尾呼び出しで実装している. binaryは自然に末尾呼び出しで書けて美しい.
蛇足２：　`{{{`というescapeしない場合に用いるタグがあるが, パターンマッチ的に非常に邪魔な存在だった.何故ここだけ3連続なのか.これがなければサブバイナリ生成箇所が1つ減った
蛇足３：　何故かmustacheの公式デモページではスペース入りのタグも許容されていたので許容したが, タグ末尾のスペースを削除する必要があり, このせいでサブバイナリ生成箇所が(ry
蛇足４：　ラムダ式は何故こんな仕様にしたのだろうか. `fun(Render :: fun((map() -> binary()))`の方が幸せになれたように思う.
とりあえずGoogle Custom Searchで画像を取得してみる

# とりあえずGoogle Custom Searchで画像を取得してみる

最近Ajax使ってJSONを取ってきていろいろしてみる機会があったので、公開されているAPI使って似たようなことが出来ないか試してみた。

##  Custom Search JSON/Atom API

https://developers.google.com/custom-search/json-api/v1/overview

```
GET https://www.googleapis.com/customsearch/v1
```

このアドレスにパラメータをつければ取得できる。
Atomも対応してるみたいだけど、特に指定しなければ標準でJSON形式で取得できるっぽい。

| Parameter | Meaning | Notes |
|---|---|---|
| _alt_ | Data format for the response. | Valid values: _json, atom_ <br> Default value: _json_ |

## API Keyと検索エンジンIDの準備

[google custom search engine(CSE)を使って、検索結果をjsonで取得する](http://ryutamaki.hatenablog.com/entry/2014/01/18/171640)
取得方法はこちらの記事に非常にわかりやすくまとまってます。
ありがとうございます。

画像検索するためには、Custom Search Engineで作成した検索エンジン内で
設定 -> 基本　の**「画像検索」をオンにするのを忘れずに。**

## 取得してみる

```
https://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={SEARCH_ENGINE_ID}&searchType=image&q={SEARCH_WORDS}
```

API Keyは`key=`のあとに。
検索エンジンIDは`cx=`のあとに。
検索したい語句は`q=`のあとにそれぞれ指定。

上記のように`searchType=`にimageを設定してやれば画像検索ができる。

#### Reference
https://developers.google.com/custom-search/json-api/v1/reference/cse/list
他のパラメータはここにいろいろ載ってます。

---

items以下に配列で返ってくるっぽい。
画像検索の場合はlinkが該当画像URLかな？


```
 "items": [
  {
   "kind": "customsearch#result",
   "title": "猫好き集まれ！癒しのねこ画像まとめ - NAVER まとめ",
   "htmlTitle": "\u003cb\u003e猫\u003c/b\u003e好き集まれ！癒しの\u003cb\u003eねこ\u003c/b\u003e画像まとめ - NAVER まとめ",
   "link": "http://bluemark.info/wp-content/uploads/2013/02/3a4465fcdc9a8bb92e40ac1456d52d6f.jpg",
   "displayLink": "matome.naver.jp",
   "snippet": "出典bluemark.info",
   "htmlSnippet": "出典bluemark.info",
   "mime": "image/jpeg",
   "image": {
    "contextLink": "http://matome.naver.jp/odai/2139450632745180701",
    "height": 3739,
    "width": 4013,
    "byteSize": 3884076,
    "thumbnailLink": "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRlvyqhlNV9IrNmRPBoToEYhEzdxYBHHWHeSEIV3_I9d_cnNsGeETqtsxAU",
    "thumbnailHeight": 140,
    "thumbnailWidth": 150
   }
  }
```

あとはええがに。
与えられた小数に近い整数比を生成するジェネレータ

###（はじめに、注）
この記事は 2010 年 4 月 5 日に自分のブログに書いていた記事を拾ってきて転載したものであります。
[元記事](http://d.hatena.ne.jp/unau/20100405/1270470838)
***

##まずは
ある浮動小数点数が与えられたときに、それを簡単な整数比で表せないか、できるだけ簡単な整数比で表したいのだが ... 。という問題を解決するためのジェネレータを作ってみた。小数部分だけ整数比で表せれば整数部は簡単に求まるので、0 以上 1 未満の小数が与えられたときに、1/1 から試してだんだん誤差が小さくなる数列を生成するようにしてみた。効率はおそろしくよくない。

```py3:rasi.py
def rasi(target):
    a, b = 1, 1
    min_error = -1
    while True:
        ratio = float(b) / a
        diff = target - ratio
        error = abs(diff)
        if min_error < 0 or min_error > error:
            min_error = error
            yield (b, a, ratio, error)
            if error == 0:
                return
        if diff > 0:
            b += 1
        else:
            a += 1
```
たとえば 0.315 で実行すると次のようになる。

```pycon
>>> import rasi
>>> for i in rasi.rasi(0.315): print "%d/%d = %g : %g" % i
... 
1/1 = 1 : 0.685
1/2 = 0.5 : 0.185
1/3 = 0.333333 : 0.0183333
3/10 = 0.3 : 0.015
4/13 = 0.307692 : 0.00730769
5/16 = 0.3125 : 0.0025
6/19 = 0.315789 : 0.000789474
11/35 = 0.314286 : 0.000714286
17/54 = 0.314815 : 0.000185185
23/73 = 0.315068 : 6.84932e-05
40/127 = 0.314961 : 3.93701e-05
63/200 = 0.315 : 0
```

1/1 のときは誤差 0.685、次の近似は 1/2 で誤差 0.185、... となって 63/200 で誤差 0 になる。この辺は Python よくできてるなあ。

##追記
min_error は 1 で初期化すれば変な条件式を追加しなくてよかったな ...。

##追記 2010-04-06
πでもやってみましょう。

```pycon
>>> for i in rasi.rasi(math.pi): print "%d/%d = %g : %g" % i
... 
1/1 = 1 : 2.14159
2/1 = 2 : 1.14159
3/1 = 3 : 0.141593
13/4 = 3.25 : 0.108407
16/5 = 3.2 : 0.0584073
19/6 = 3.16667 : 0.025074
22/7 = 3.14286 : 0.00126449
179/57 = 3.14035 : 0.00124178
201/64 = 3.14062 : 0.000967654
223/71 = 3.14085 : 0.000747583
245/78 = 3.14103 : 0.000567013
267/85 = 3.14118 : 0.000416183
289/92 = 3.1413 : 0.000288306
311/99 = 3.14141 : 0.000178512
333/106 = 3.14151 : 8.32196e-05
355/113 = 3.14159 : 2.66764e-07
52163/16604 = 3.14159 : 2.66213e-07
...
```
有名な近似値 355/113 が相当いいものであることがわかる。その次はいきなり 5 桁同士の比だもんね。

って、0 以上 1 未満の数じゃないし。でも動いてるし。
GoでOSXのアプリを書く #golang


## はじめに
タイトルは釣りです。すいません。
YosemiteからAppleScriptの代わりにJavaScriptが使えるようになったらしいです。

* http://qiita.com/zakuroishikuro/items/1b02378bf9e940602d87
* http://qiita.com/ymmtmdk/items/5cf7665eeddf34adf63e

JavaScriptで動かせるようになったということは、GopherJSの出番ですね！

GopherJS + Nashorn + JavaFXをやったときみたいに、簡単なサンプルを動かしてみました。

* http://qiita.com/tenntenn/items/e61822b265bc2b8f6c88

## Windowを出す

ひとまず、Windowを出してみます。
上記のQiitaのJXAの記事を参考にしながら、JavaScriptのコードを無心でGo言語に変えていきます。
本気でやるなら（やる人はいないだろうけど）型を作った方がいいとは思うけど、とりあえず`interface{}`を使っておきます。

`$`変数名に使えないので、`__`を代用しました。
相変わらず、Goのソースの中に`js`や`objC`という他の言語の名前が出てくる気持ち悪い感じになっています。
`registerSubclass`のあたりなんか、ゾクゾクしますね。
`windowWillClose:`を`windowWillClose`って書いててしばらくハマりました。
`win.center`と書くとウィンドウが真ん中によるという謎仕様にもハマりました。
関数を呼び出す訳でも、フィールドに値を入れるわけでもなく、単にフィールドにアクセスするだけなのは不思議です。
`win.center()`とかの方がわかりやすい気がします。

```sample.go
package main

import (
	"github.com/gopherjs/gopherjs/js"
)

func main() {

	objC := js.Global.Get("ObjC")
	__ := js.Global.Get("$")
	objC.Call("import", "Cocoa")

	var app js.Object
	objC.Call("registerSubclass", map[string]interface{}{
		"name":       "WinDelegate",
		"superclass": "NSObject",
		"protocols":  []string{"NSWindowDelegate"},
		"methods": map[string]interface{}{
			"windowWillClose:": map[string]interface{}{
				"types": []interface{}{"void", []interface{}{"id"}},
				"implementation": func(notification js.Object) js.Object {
					return app.Call("terminate", 0)
				},
			},
		},
	})

	styleMask := __.Get("NSTitledWindowMask").Int() |
		__.Get("NSClosableWindowMask").Int() |
		__.Get("NSMiniaturizableWindowMask").Int()

	win := __.Get("NSWindow").Get("alloc").Call("initWithContentRectStyleMaskBackingDefer",
		__.Call("NSMakeRect", 0, 0, 400, 400),
		styleMask,
		__.Get("NSBackingStoreBuffered"),
		false,
	)

	win.Get("center")
	win.Set("title", "Hello Cocoa")
	win.Call("makeKeyAndOrderFront", win)
	win.Set("delegate", __.Get("WinDelegate").Get("alloc").Get("init"))

	app = __.Get("NSApplication").Get("sharedApplication")
	app.Call("setActivationPolicy", __.Get("NSApplicationActivationPolicyRegular"))
	app.Call("activateIgnoringOtherApps", true)
	app.Call("run")

}

```

動かしてみます。

```
$ gopherjs build sample.go && osascript -l JavaScript sample.js
```

Nashornをやった頃より、エラーメッセージがわかりやすくなったので、`go build`をかませる必要はないかなと思います。

![hello cocoa.png](https://qiita-image-store.s3.amazonaws.com/0/14952/ebe4291c-d342-64a3-c62a-1b9bf5360050.png "hello cocoa.png")


## 感想
Nashornの時に、グローバルオブジェクトの対応をしたおかげで、gopehrjsには手を入れずに済みました。
Gopher君の3Dオブジェクトをグリグリやれるところぐらいまでやらないといけなかった気がします。
きっと誰も必要としない記事なんだろうと思います。
ありがとうございました。
[Objective-C] UISearchDisplayControllerをコードから扱う


過去にもUISearchDisplayControllerについて少し書きましたが、どうしても意図した動作にならず、どうやってコードから扱うのか、というのが曖昧なままでした。

が、やっと動く最低限のコードがわかったのでメモです。
（ちなみに[動作サンプルをGithubに上げて](https://github.com/edom18/SearchDisplayController-test)あります）


## セットアップ

セットアップです。
ちなみに`searchDisplayController`は`UIViewController`のreadonlyプロパティとしてすでに設定されているので再定義できません。
また、Appleのドキュメントを見ると、`UISearchDisplayController`の初期化時に自動的に設定される、とあるのですがこの「初期化時」がなにを指しているのかが分かりませんでした。
（propertyではなく、普通にローカル変数で生成した場合は反応なし）

なので以下のようにセットアップしました。


```objc:setup-searchController
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];
self.searchBar.delegate = self;
self.searchBar.showsScopeBar = YES;
self.searchBar.showsSearchResultsButton = YES;
self.searchBar.scopeButtonTitles = @[@"test", @"hoge", @"foga"];

self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar
                                                          contentsController:self];
self.searchController.delegate                = self;
self.searchController.searchResultsDelegate   = self;
self.searchController.searchResultsDataSource = self;
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds
                                              style:UITableViewStylePlain];
self.tableView.tableHeaderView = self.searchBar;
self.tableView.delegate   = self;
self.tableView.dataSource = self;
self.tableView.tableHeaderView = self.searchBar;
```


## DataSource

`searchDisplayController:shouldReloadTableForSearchString:`メソッドで`YES`を返すと、`searchResultsDataSource`に`self`を設定しているため、通常のtableViewと同様に`tableView:cellForRowAtIndexPath:`が呼ばれます。

その中で、以下のように分岐処理を書いて、検索中かそれ以外でソースを出し分けると適切に検索結果を表示してくれるようになります。

```objc
if ([tableView isEqual:self.searchController.searchResultsTableView]) { ... }
```

また、インクリメンタルサーチ的なことをやらず、非同期で検索などをさせたい場合は、`searchResultsTableView`の`reloadData`メソッドを適切なタイミングで読んでやることで結果を表示することができます。


てか、冷静に考えたら単純にUISearchDisplayControllerがメモリから解放されているから動いてなかっただけかも・・。なんか自動で設定されるとか色々な情報で混乱していた気がする( ;´Д`)
同一ファイルの分割表示

異なるファイルを分割表示する機能は標準で用意されているが、ファイル内の関数を見比べる場合には同じファイルを左右に並べたい。。。こんな時は、
基本設定 > PackageControl > PackageControl:Install Package を選択して、
"simpleClone"は如何？
インストールすると、表示メニューにsimpleCloneが追加され、同一ファイルの分割表示が可能になります。
AngularJSでほんの少しだけ複雑な必須入力にしてみる

AngularJSのリファレンス本でサラっと
「ng-requiredは値の評価により動的に必須チェックの付け外しが可能」
とだけ書いてあるけど、それ以上の説明とサンプルが見当たらず、ググっても情報が少なかったので確かめてみました。

##ラジオボタンの選択値によって必須かどうか動的に変更させる

例えば、こんな入力フォーム。

![スクリーンショット-2015-02-19-0.00.12.png](https://qiita-image-store.s3.amazonaws.com/0/52142/e872ec08-c838-7697-1a77-2181729847ad.png)

上のラジオボタン「平日」が選択されている場合はテキストボックスは必須ではないけど、下のラジオボタンが選択された場合には、テキストボックスを必須入力にしたい。みたいな条件付き必須入力というケースはよくあるかと思います。
これはng-requiredを使うことで、HTMLのみで必須入力を動的に変更出来ます。

```html:sample.html
<form name='myForm'>
  <div>
    <input type="radio" name="interval" value="w1" ng-model="hoge.interval">平日
  </div>
  <div>
    <input type="radio" name="interval" value="w2" ng-model="hoge.interval">
    <input type="text" name="days" 
           ng-model="hoge.interval_days"
           ng-required="hoge.interval==='w2'">日ごと
  </div>
</form>
<p ng-show="myForm.days.$error.required">何日ごとか入力してぽよ</p>
```

## required と ng-required の違い
required：
必ず必須入力。

ng-required： 
評価式を挿入できて、その結果（trueかfalseか）によって必須入力を変更する。
ng-required="true" とするとrequiredを記述したのと同じになる。

つまり、このような条件付き必須入力にしたい場合には、ng-requiredは有用なディレクティブです。
[CakePHP 2.3.9]$this->Html->css(array('style'), null, array('inline' => false));を繰り返すと同じCSSが重複する


## 事象

* CakePHP 2.3.9において`$this->Html->css(array('style'), null, array('inline' => false));`で指定のCSSが繰り返した分だけ&lt;head&gt;に出現する。
* `$this->Html->script(array('script'), array('inline' => false));`で指定のJSは重複しないのでCSSも同様の動作を期待していたものの異なる挙動だった。

## コード例

* elementで利用するctp内で定義。例えば下記のように3回出現すると...

```php
<?php $this->Html->css(array('style'), null, array('inline' => false)); ?>
<?php $this->Html->css(array('style'), null, array('inline' => false)); ?>
<?php $this->Html->css(array('style'), null, array('inline' => false)); ?>
```

* (期待)HTMLでは重複のない状態で出力される事を期待していた。

```html
<link rel="stylesheet" type="text/css" href="/css/style.css" />
```

* (実際)HTMLで繰り返し出力された。

```html
<link rel="stylesheet" type="text/css" href="/css/style.css" />
<link rel="stylesheet" type="text/css" href="/css/style.css" />
<link rel="stylesheet" type="text/css" href="/css/style.css" />
```

## ISSUEで報告済みの事象だった。

* https://github.com/cakephp/cakephp/pull/3653  
2015/02/19時点で入手可能な[CakePHP 2.6.1](https://github.com/cakephp/cakephp/archive/2.6.1.zip)では重複させない事も可能になっている様子。
[Wordpress]canonical(rel="next/prev" 含む)基本設定

wp_head()で出力されるcanonicalだと不十分なので、テンプレートタグに頼らず自前でコードを出力するための基本設定です。

出力されるソースは以下の通りです。
rel="canonical" と rel="next/prev" を出力します。

```html
<link rel="canonical" href="http://xxxxsample.com/abc" />
<link rel="next" href="http://xxxxsample.com/abc/page/2" />

```


###テンプレートタグからcanonical出力を無効化
まずはwp_head()からcanonicalを出力させないよう無効化しましょう。

**function.php**

```php
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
remove_action('wp_head', 'rel_canonical');
```

###&lt;head&gt;～&lt;/head&gt;内にコードを追加
header.phpの適当な箇所に以下コードを追加。

**header.php**

```html+php
<?php
global $page, $paged, $wp_query;

// ホーム
if(is_home()||is_front_page()){
	$canonical_url = home_url();

// カテゴリーページ
}else if (is_category()){
	$canonical_url = get_category_link(get_query_var('cat'));

// 固定ページ＆個別記事
} else if (is_page()||is_single()) {
	$canonical_url = get_permalink();

// 検索結果ページ
} else if (is_search()){
	$encode_s_word = urlencode(get_search_query());
	$canonical_url = home_url().'?s='.$encode_s_word;

// タグアーカイブページ
} else if(is_tag()){
	$encode_tag = urlencode(single_tag_title( '', false ));
	$canonical_url = home_url().'/archives/tag/'.$encode_tag;

// その他
} else {
	$canonical_url = null;
}

if ($canonical_url == !null) { ?><link rel="canonical" href="<?php echo $canonical_url; ?>" />
<?php }

// 2ページ目以降がある場合
// rel="next" href="～" を出力
if (!$max_page)
	$max_page = $wp_query->max_num_pages;

if (!$paged)
	$paged = 1;
	$nextpage = intval($paged) + 1;

if (!is_singular() && ($nextpage <= $max_page)) { ?>
<link rel="next" href="<?php echo next_posts( $max_page, false ); ?>" />
<?php } /* end if */

// rel="prev" href="～" を出力
if(!is_singular() && $paged > 1){ ?>
<link rel="prev" href="<?php echo previous_posts( false ); ?>" />
<?php } /* end if */ ?>

```

**※日本語はエンコードされます。**
chrubyで快適Ruby環境

# chrubyで快適Ruby環境

rubyのバージョンを簡単に切り替えられるようにするツールです。
同様のツールとして、rbenvがありますが、
rbenvより起動も速く、シンプルで管理しやすいので、オススメです。

注: proxy環境だとruby-installがうまく動かないことがあるようです。
https://github.com/postmodern/ruby-install/issues/128

Mac OS Xでインストールした例:

```bash
brew install chruby
brew install ruby-install
# インストール可能なruby一覧
ruby-install
# 最新のstableを~/.rubies/にインストール
ruby-install ruby

# chruby用のフックを~/.bashrcに登録
cat<<EOF >> ~/.bashrc
# Ruby by chruby
source /usr/local/share/chruby/chruby.sh
source /usr/local/share/chruby/auto.sh
EOF

# auto.shを使ってプロジェクト毎のRubyのバージョンを指定
# (曖昧でいいみたいです)
echo "2.1" > .ruby-version

# .bashrcを再読み込み
. ~/.bashrc

# Rubyのパスの確認
which ruby

gem update --no-document
gem install bundler
```

## direnvでbundle execを不要に

毎回`bundle exec rake ...`とか打つの、面倒ですよね。

プロジェクトディレクトリにローカルにgemをインストールし、
vendor/binに`bundle exec`が不要なスタブを作成します。

```bash
# Gemfileのあるプロジェクトディレクトリで
bundle install --path vendor/bundle --binstubs=vendor/bin
```

これで、`vendor/bin`にPATHを通せば`bundle exec`とか打つ必要がなくなります。
(Gemがインストールするrakeやpryの場合。rubyだけはbundle execが必要かも)

direnvは、ディレクトリに入った時にだけ適用される環境変数を、
.envrcという設定ファイルで設定できるツールです。

このdirenvを使って、プロジェクトディレクトリに入った際に、
自動的にvendor/binにPATHが通るように設定します。

```bash
brew install direnv
echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
# プロジェクトディレクトリで
echo 'export PATH=$PWD/vendor/bin:$PATH' > .envrc

# ~/.bashrcを再読み込み
source ~/.bashrc
```

.envrcのあるディレクトリに移動した際、初回のみ、
その.envrcを適用していいか確認があるので、問題なければ許可してください。
次回から、自動的に適用されるようになります。

```
direnv: error .envrc is blocked. Run `direnv allow` to approve its content.
```
JSファイルで複数行文字列書くときのヘルパーを作った

https://atom.io/packages/html-to-string

![ss.gif](https://qiita-image-store.s3.amazonaws.com/0/17969/60d475eb-7b1f-78e7-51c5-0bebd2cd0fbb.gif)

複数行選択して`convert`コマンドを実行すると一行ずつシングルクォーテーションで囲んで、末尾に改行があれば`+`を追加する。

逆に、この形式の文字列を選択して`deconvert`コマンドを実行するとシングルクォーテーションと`+`を削除する。

パッケージ初めて作ってみたけど形式がわかるとそんな苦労せず作れたしpublishも簡単でした。


### 参考
* http://yosuke-furukawa.hatenablog.com/entry/2014/03/02/230456
Eee PC 4GにUbuntu入れてからやったこと


ヤフオクでなんとなく入札したら落とせてしまったEee PCが数日前に届いきました。スマホ全盛時代にネットブックはちょっと、なのでUbuntu起動できるようにして自宅用サーバとして使えるようにしてみた。

※それほど特殊なことはしてないのでほぼリンク集みたいになってます。



# CUIで起動できるかチェック

メモリが514MBなのでGUIはちょっと重い。なのでbootするときにGUIを切って起動するようにやってみる。
こちらで紹介されている方法でOK。

[インストール済みシステムの起動オプションを一時的に変更するには
 UbuntuTips/Others/BootOptions - Ubuntu Japanese Wiki](https://wiki.ubuntulinux.jp/UbuntuTips/Others/BootOptions#A.2BMKQw8zC5MMgw.2FDDrbggwfzC3MLkwxjDgMG6Nd1LVMKow1zC3MOcw8zCSTgBmQnaEMGtZCWb0MFkwizBrMG8-)

CUIで使うときは`nosplash text`だけで起動してます。

# 何はともあれCapsLockをCtrlに

GUIとCUIだと方法が違うみたい（深追いしてない）

```bash
# GUI
setxkbmap -option ctrl:swapcaps
```
（最初`-option`を付け忘れてキー入力不可という悲しいことになった）


```bash
# CUI
sudo vi /etc/default/keyboard
# この設定の最後に付け足す
XKBOPTIONS="… ,ctrl:nocaps"

# 設定を付け足した後はこのコマンドでOK
sudo dpkg-reconfigure -phigh console-setup
```
こちらはCapsLockをCtrlにするだけで入れ替えではない。


詳しくはこちらのページが便利。

[CapsLockをCtrlにするまとめ - Λlisue's blog](http://lambdalisue.hatenablog.com/entry/2013/09/27/212118)


# CUIでもUSBメモリを使いたい

GUIだと自動でマウントしてくれますが、CUIだと手動でやる必要がある。こちらがわかりやすかったです。

[CUIでUSBフラッシュメモリを使う - chulip.org](http://chulip.org/entry/20091115/1258296471)


# CUIでもバッテリーの残りを調べたい

[command line - How to check battery status using terminal? - Ask Ubuntu](http://askubuntu.com/questions/69556/how-to-check-battery-status-using-terminal)

```bash
upower -i /org/freedesktop/UPower/devices/battery_BAT0
```
`BAT0`の末尾はゼロなのにオーと間違えて10分ほどハマってた(´・ω・｀)


# sshdを入れた

```bash
sudo apt-get install ssh
```

なぜか一通り設定が終わってからこれを思いついた。なぜおれは小さいキーボードで作業することに拘ってたのだろう。。。




あとはSolrを入れて検索サーバにして遊んでますが（意外とちゃんと動く）、それはまた別の話。
結果的に有効利用できそうになったけど、買い物は計画的にしようと思いました（小並感）
SublimeText3でpython3のbuild環境を作る

SublimeText3でpython3のbuild環境を作ろうとした時，UnicodeEncodeErrorで日本語が表示できなかったのでその解決方法です．

## 環境
- Mac OS X Mavericks v10.9.4
- SublimeText3 Build 3065
- Python 3.4.2


## エラー
デフォルトの状態でpython3の以下のようなスクリプトをbuildするとUnicodeEncodeErrorとなります．

```tmp.py
# -*- coding: utf-8 -*-

import platform

print(platform.python_version())
print('日本語')
```

エラー

```
3.4.2
Traceback (most recent call last):
  File "/Users/XXXXXXX/Desktop/tmp/tmp.py", line 6, in <module>
    print('\u65e5\u672c\u8a9e')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
[Finished in 0.3s with exit code 1]
[shell_cmd: python -u "/Users/XXXXXXX/Desktop/tmp/tmp.py"]
[dir: /Users/XXXXXXX/Desktop/tmp]
[path: /usr/bin:/bin:/usr/sbin:/sbin]
```


## 解決方法
Tools => Build System => New Build System... から以下のように入力してPython3.sublime-buildで保存

自分はpyenvを使ってversionを切り替えているのでpathが/Users/XXXXXXX/.pyenv/shims/python3ですが，導入していない場合terminalからwhich python3でpathを確認して各自書き換えて下さい．

```Python3.sublime-build
{
	"cmd": ["/Users/XXXXXXX/.pyenv/shims/python", "-u", "$file"],
	"selector": "source.python",
	"file_regex": "file \"(...*?)\", line ([0-9]+)",
	"env": {"LANG": "ja_JP.UTF-8"}
}
```
:wqのときはSyntasticのチェックをしないようにする

# 問題
保存と同時にシンタックスチェックをしてくれるSyntasticですが、`:wq`、`ZZ`、`:x`などの、「保存と同時にVimを終了する」場合にも同様にチェックを行うため、(チェック結果は一瞬しか表示されない割りに)終了に時間がかかってしまいます。

# 解決方法
```vim
let g:syntastic_check_on_wq = 0
```

# 参考リンク
[Don't call s:UpdateErrors on :wq · Issue #162 · scrooloose/syntastic](https://github.com/scrooloose/syntastic/issues/162)
Oracleのユーザーのパスワードが正しいかをスクリプトで判定する

SQL*Plusを使おう。

```
sqlplus -L -S hoge_user/$USER_PASSWORD <<< "exit" || { echo "wrong password"; exit 9 }
```

- -L  オプションを付けてパスワードの試行回数を 1 回だけとする。
- 画面出力もいらないので -S オプションも付ける。
- ログインが成功した場合は即行 "exit" で終了。
Pentaho 5.x BI Serverにてプラグイン ”Saiku Analytics” でファイルパスがおかしくなる問題の解決

## Pentaho近況
Pentaho 5.3が公開されましたね。
[リリースノート](http://jira.pentaho.com/secure/ReleaseNote.jspa?projectId=10090&version=13016)を見た限りバグフィックス中心のようです。
日立データシステムズ社がPentahoを買収するなど、大きな動きがありきになるところです。

# Saiku Analyticsでファイルパスがおかしくなる問題
SaikuはPentahoCE版において非常に重要なプラグインです。
ですが、私の環境ではPenthaoから開いたファイルパスがおかしくなり、保存する際にあやまって予期せぬフォルダに保存してしまうといった問題が起こります。

これは、Pentahoがファイルパスを渡す際にURLエンコードしており、
それのデコードにSaikuが対応していないため発生していました。

# 解決方法
saiku\ui\forward.htmlを修正する。

```
<!DOCTYPE html>
<html>
    <body>
        
        <script type="text/javascript">

            var location = document.location.pathname;
            var pathArray = (location + "").split("/");
            //var path = pathArray[pathArray.length - 2].replace(/:/g, "/");
            var path = pathArray[pathArray.length - 2].replace(/%3A/g, "%2F");
            var mode = pathArray[pathArray.length - 1];
            var modeUrl ="";
            if (mode == "run") {
                modeUrl = "&MODE=VIEW";
            }
            document.location = "../../../content/saiku-ui/index.html?biplugin5=true" + modeUrl + "&dimension_prefetch=false#query/open/" +  path;




        </script>
    </body>
</html>
```

このファイル内でデコードすることも可能だと思ますが、デコードすると何か不具合が起きそうな気がするので、
エンコードされたものを置換します。

これでPentahoのファイル検索からsaikuファイルを開いた場合でも正常に保存ができるようになりました。

### 補足
この解決方法に気づく前に誤ってファイルを保存してしまい、ROOTディレクトリ(homeとpublicがあるディレクトリ)にファイルを保存してしまい、途方に暮れていたのですが、
Pentaho Repository Synchronizer のRedmineに同件の報告がありました。
http://redmine.webdetails.org/issues/3328

添付されているKettle用ファイルで削除できるらしいです(私の環境では動作しませんでした。)
Unity から iTunes のステータスを知るほうほう

# iTunes 内部の情報

Cocoa で iTunes のステータス（現在再生中の曲名とか時間とか）を得るには Scripting Bridge をつかう。

> Using Scripting Bridge
> https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ScriptingBridgeConcepts/UsingScriptingBridge/UsingScriptingBridge.html

ターミナルで

```shell-session
sdef /Applications/iTunes.app | sdp -fh --basename iTunes
```

ってやると `iTunes.h` っていうヘッダーファイルができあがる。`import` してごにょごにょ。

```objc:再生時間を得るには
#import "iTunes.h"
iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
double position = iTunes.playerPosition;

```

ちょーかんたん。

`iTunes.currentTrack.artist` ってやればアーティストとれる。ほかにもいっぱいとれる情報ある。`iTunes.h` みるよろし。


# iTunes の動作イベント

再生開始したとか停止したとかのイベントを外から知るには、てきとうにとんでる Notification をつかまえればよい。

> 見えない通知を捕まえて通知駆動アプリケーションを作る - ザリガニが見ていた...。
> http://d.hatena.ne.jp/zariganitosh/20120918/notification_driven_applescript

```objc
- (void)setup
{
  [[NSDistributedNotificationCenter defaultCenter] addObserver:self
                                                      selector:@selector(updateTrackInfoFromITunes:)
                                                          name:@"com.apple.iTunes.playerInfo"
                                                        object:nil];
}

- (void)updateTrackInfoFromITunes:(NSNotification *)notification
{
  NSLog(@"%@", notification.userInfo);
}
```

再生開始・停止のタイミングで通知とんでくる。`userInfo` にいろいろ情報はいってる。


# Plugin にする

[Example の Simplest Plugin](http://docs.unity3d.com/Manual/PluginsForDesktop.html) を参考に↑のいろいろをまとめる。ARC が使えないのでメモリ管理ちゃんとやらないとすぐに Unity 落ちる。。。

# ソースコード

こちら。
https://github.com/Saqoosha/UnityiTunes
既存メソッドのオーバーライド

Rubyで既存メソッドを拡張したい。拡張性も持たせたい。そんな時のやり方メモ。
例として `Array#to_s`の拡張をする。

# 継承クラスでのメソッドオーバーライド

Arrayの継承クラスと`super`を使う。Arrayが使われている他の部分を壊さないので安全。
`Array#to_s`のように、本来なら引数を取らないメソッドを引数ありでオーバーライドする場合は、`super()`と明示的に引数なしで呼ぶ必要がある。

```ruby
class OreArray < Array 
  def to_s(args)
    if args == :hello
      "extend!!!"
    else
      super()
    end
  end
end

a = OreArray.new([1,2,3])
p a.to_s         #=> "[1, 2, 3]"
p a.to_s(:hello) #=> "extend!!!"
```

# クラスそのものへのモンキーパッチ

`Array#to_s`そのものの動きを変更したい場合。
`alias` や `alias_method` を利用する。

```rb
class Array
  alias_method :__to_s__, :to_s

  # 拡張子したto_s
  def to_s
    'extend!!!!'
  end

  # 確認用
  def to_s_origin
    __to_s__
  end

  # 外部からアクセスできないようにする
  private :__to_s__
end

a = [1,2,3]
p a.to_s        #=> "extend!!!!"
p a.to_s_origin #=> "[1, 2, 3]"
p a.__to_s__    #=> `<main>': private method `__to_s__' called for [1, 2, 3]:Array (NoMethodError)
```

# 拡張性のある拡張をする

`send` を使うと、モンキーパッチが当てやすくなる。
メソッドの命名規則を強要するのがメリットでもありデメリットでもある。

```rb
# Arrayの拡張
class Array
  alias_method :__to_s__, :to_s
  private :__to_s__

  # 拡張子したto_s
  def to_s(arg=nil)
    if arg #arg.is_a?(Symbol) とするほうが明示的でいいかも？
      send("to_s_#{arg}")
    else
      __to_s__
    end
  end

  private

  def to_s_join
    join('-')
  end
end


# Arrayの拡張の拡張
class Array
  private

  def to_s_reverse
    reverse.to_s
  end
end

a = [1, 2, 3]
p a.to_s            #=> "[1, 2, 3]"
p a.to_s(:join)     #=> "1-2-3"
p a.to_s(:reverse)  #=> "[3, 2, 1]"
p a.to_s(:hogegege) #=> undefined method `to_s_hogegege' for [1, 2, 3]:Array (NoMethodError)
```

# 拡張性はないけどまとまりのある拡張

一度定義したら別にもう拡張しないし、と言う場合。
一箇所に処理がまとまって、読みやすい。[Rails の Date#to_s](https://github.com/rails/rails/blob/02a48fb83c6aff2c9fc82e962286212ba26a91c5/activesupport/lib/active_support/time_with_zone.rb#L197-L210)はこのような拡張をしている。

```rb
class Array
  alias_method :__to_s__, :to_s
  private :__to_s__

  TO_STRING_EXTEND = {
    join: ->(arr){ arr.join('-') },
    reverse: ->(arr){ arr.reverse.to_s },
  }

  # 拡張子したto_s
  def to_s(arg=nil)
    if method = ::Array::TO_STRING_EXTEND[arg]
      method.call(self)
    else
      __to_s__
    end
  end
end


a = [1, 2, 3]
p a.to_s            #=> "[1, 2, 3]"
p a.to_s(:join)     #=> "1-2-3"
p a.to_s(:reverse)  #=> "[3, 2, 1]"
p a.to_s(:hogegege) #=> "[1, 2, 3]" / to_sと同じ
```
peerjs-serverでSignalingをSSL化する．


自前のSingalingシグナリングサーバをSSL対応にする場合，
SSL証明書の設定が必要になる．

オレオレ証明書でサーバを建てた時の手順を示す．

## 環境

- CentOS 6.6
- node.jsインストール済み

### SSL証明書の生成

```bash:
#openssl genrsa 2048 > server.key
#openssl req -new -key server.key > server.csr
#openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt
#mkdir /home/your/ssl/
#mv server.key server.csr /home/your/ssl/
```

### peerjs-server

- ダウンロード
GitHubから最新版をダウンロードする．

[peerjs-server](https://github.com/peers/peerjs-server)
=> Download ZIP

- deploy

解凍したファイルを格納する．

/home/your/path/peerjs-server-master

npmパッケージをインストールする．

```bash:
$cd /home/your/path/peerjs-server-master
$npm install
```

- SSLの設定

SSLオプションを指定した場合，SSL証明書を読み込むようにする．

```/home/your/path/peerjs-server-master/bin/peerjs
/home/your/path/peerjs-server-master/bin/peerjs
<       key: fs.readFileSync('/home/your/ssl/server.key'),
<       cert: fs.readFileSync('/home/your/ssl/server.crt')
---
>       key: fs.readFileSync(path.resolve(opts.sslkey)),
>       cert: fs.readFileSync(path.resolve(opts.sslcert))
```

- 起動

```bash:
$ cd /home/your/path/peerjs-server-master/
$ $node bin/peerjs -k peerjs -p 9000 --sslkey --sslcert -d 
```

Signalingサーバへのアクセスが wss:// になっていれば成功．
Gebを使ってWebテスト環境を作る

自分はJava使いではないので、Eclipseもほとんど使ったことがない状態から調査のために環境を作った時の備忘録です。

色々と検索しましたが日本語のサイトが意外に少ないため、2015.2時点で動く手順を残しておきます。

# まえがき
WebテストでSeleniumIDEを以前から使用していました。
が、Selenium2 になってテストスクリプトをどの言語で書くか？となったとき悩みました。
「テストスクリプトはJavaで」とよく聞くのですが、開発でJavaを使用している人は環境も既にあり言語知識も持っているため問題ないですが、テストのために最初から環境を作る場合において、コンパイル言語を採用するというのは色々とコストが高いと思います（あくまで個人の意見です）

で、一部で話題の　groovy+Gebです。


## 事前準備
groovyの実行には　java JDKが必要です

こちらを参考にさせていただきました（2015/2/3付の記事です）
>インストールと実行（プログラミング入門 with Groovy）
http://qiita.com/saba1024/items/66c7154608ed52363e8f

コーディングでは　IDEを利用すると補完機能などが使えるためEclipseをインストールしています。



Eclipse　Luna4.4に下記のプラグインをマーケットプレイスからインストールしました。

Groovy/Grails ToolSuite (GGTS)for Eclipse Luna(4.4) 3.6.3.RELEASE
Gradle IDE Pack3.6.x, 0.17

バージョンに一致したものを使ったほうが良いのか？また、Suiteと単品どちらが良いのか判断がつかないのですが、このあたりどのように判断すれば良いのでしょう？？


また、Eclipse自体が重たいためこれを使わずに実行できる環境の調査については別途行いたいと思っています。


## プロジェクトの作成

まず　Gradleプロジェクトを新規作成

次に　gradleの設定ファイルになる build.gradeを作成します。

```lang:groovy
apply plugin: 'groovy'
apply plugin: 'eclipse'


repositories { mavenCentral() }

dependencies {
	compile 'org.seleniumhq.selenium:selenium-firefox-driver:2.44.0'
	compile 'org.seleniumhq.selenium:selenium-support:2.43.1'
	compile 'org.gebish:geb-core:0.10.0'
}
```
これを実行すると環境（依存ファイルなどを揃えてくれる）が出来上がります。

gradleプロジェクトで作成したので src/main/java src/main/testといったディレクトリ構成かつ　サンプル　パッケージが作成されるため、適宜削除なり、追加なりをします。

これで準備完了です。

###はまったところ
build.gradeを実行しようとしても　タスクを選ぶことができず散々悩んだのですが、build.gradelを選んで　コンテキストメニューの中の　Gradelから　全てをリフレッシュ　とすると、実行するタスクが表示されるようになります。




## Gebについて
groovyという言語でテストスクリプトを書くのですが、とりあえずブラウザを起動し、サイトを開いて操作するといった程度であればなんとなくできそうです。
Javaでテストスクリプトを記述するよりも簡易に書けるのはこのGebというライブラリーのおかけでしょう。

```lang:groovy
import geb.Browser

Browser.drive {
    go 'http://www.yahoo.co.jp'
    $('input[name=p]').value('groovy')
    assert $('input[name=p]').value() == 'groovy'
}
```

つい先だって1月３１日に開催された勉強会の資料があまりに充実している＋公式のドキュメントも英語とはいえわかりやすいので大変助かります。

第1回 Geb勉強会の資料　
http://www.slideshare.net/youtaroutakahashi/what-makes-geb-groovy

公式のドキュメント
http://www.gebish.org/manual/current/
unityの世界に３０秒で飛び込む

##用意するもの
* androidかiOS
* Unity環境

##３０秒で準備する
新規プロジェクトを作ったら
１．Assets>Import Package>SkyBoxes
をインポート。
空のテクスチャがインポートされる。

２．MainCameraのインスペクタから
Add compornent>Skybox

３．インスペクタに追加されたSkyboxに
Standerd Assets>Skyboxes>Sunny Skybox
を追加

４．新しくC#スクリプトを作成し

```csharp:MainCamera.cs
using UnityEngine;
using System.Collections;

public class MainCamera : MonoBehaviour {
	void Start () {
		Input.gyro.enabled = true;
	}
	void Update () {
		Quaternion q = Input.gyro.attitude;
		Quaternion qq = Quaternion.AngleAxis(-90.0f, Vector3.left);
		q.x *= -1.0f;
		q.y *= -1.0f;
		transform.localRotation = qq * q;
	}
}
```

をコピペ

４．MainCameraに上記のスクリプトを追加する

５．ビルド！！


![Screenshot_2015-02-18-21-20-51.png](https://qiita-image-store.s3.amazonaws.com/0/24979/ab77e440-98bd-4900-9ab1-115c470913cc.png)

![Screenshot_2015-02-18-21-20-41.png](https://qiita-image-store.s3.amazonaws.com/0/24979/a616169f-14ba-4dbe-386c-c560a3484fef.png)

#unityの世界に入り込めた！！！

３０秒で出来る！！！




###今日一日で躓いていた所

ジャイロじゃなくて、加速度センサーで頑張っていた。
加速度センサーで頑張るとめっちゃガクガクになるばかりか、それっぽく動くので頑張れば頑張るほど沼る。
jQuery 使えるselector

1. 特定クラスのdisplay:nonのみ取得する

```js
    $('.pRowTr:hidden').length
```

2.特定クラスのdisplay:non以外のみ取得する

```js
    $('.pRowTr:visible').length
```

3.特定クラスのcheckboxが付いているクラスのみループする

```js
    var chkArray = $('.delchk:checked');
    $.each(chkArray, function(i, value) {
        var objStrArray = $(this).attr('id').split('_');
        $('#addPointTr' + objStrArray[1]).hide();
    });
```

4.idの前方一致

```js
    $('#parentId').find("[id^='childrensId']")
```

5.AND条件

```js
    //disableのtextboxのみ取得し、cssを変更する
    $(‘input[type=text][disabled]’)

    $('.a #2')
```

6.OR条件

```js
$('#id1,#id2')
```

7.AND + OR条件

```js
$('.c1 #id1, .c2 #id2')
```
isinstanceもごまかすfakeclassを作る

## まえがき

継承より委譲という言葉も当たり前の言葉になっているような昨今、委譲のためにあるオブジェクトをwrapしたクラスを作るということはよくありますね。

そのような場合にisinstanceで分岐している部分が厄介になったりするのですが。(これに関してはそもそもducktypingを行わない分岐を使うコードが良く
ないという話もあります)

isinstanceの分岐をごまかすことは出来るでしょうか？

## __class__というpropertyを定義する。

isinstanceの分岐をごまかすにはどうすれば良いかということですが。意外と簡単で `__class__` というproperty
を定義してあげればisinstanceで評価する際にそちらを見に行きます。

## 確認のためのコード

以下で挙動を試してみることにします。UserオブジェクトをLoggedWrapperというWrapperオブジェクトでwrapした場合について。
isinstanceの分岐をごまかせているか確認しています。

```py
# -*- coding:utf-8 -*-
import logging
logger = logging.getLogger(__name__)


class LoggedWrapper(object):
    def __init__(self, ob):
        self.ob = ob

    def __getattr__(self, k):
        logger.debug("action:%s", k)
        return getattr(self.ob, k)

    @property
    def __class__(self):
        return self.ob.__class__


from collections import namedtuple
User = namedtuple("User", "name age")

user = User("foo", 20)
wrapped = LoggedWrapper(user)

logging.basicConfig(level=logging.NOTSET)
print(wrapped.name)
print(wrapped.age)

# DEBUG:__main__:action:name
# foo
# DEBUG:__main__:action:age
# 20

print(isinstance(wrapped, User))
# True
```
ちなみに `__class__` はWrapperオブジェクトに存在しているためlogは出力されません。
$.post使用時のPHP側での受け取り方(ao形式)

```js:sample.js
var postData = [];
$('.sample').each(function() {
	var record = {};
	record.column1 = 'aaa';
	record.column2 = 'bbb';
	record.column3 = [1,2];
	postData.push(record);
});

$.post(
	'/post/sample',
	{postData: postData},
	function(data) {
		// 何か処理
	}
);
```

```php:PHP側での持ち方
array(2) {
	[0]=>
	array(3) {
		["column1"]=>
		string(1) "aaa"
		["column2"]=>
		string(1) "bbb"
		["column3"]=>
		array(2) {
			[0]=>
			string(1) "1"
			[1]=>
			string(2) "2"
		}
	}
	[1]=>
	array(3) {
		["column1"]=>
		string(1) "aaa"
		["column2"]=>
		string(1) "bbb"
		["column3"]=>
		array(2) {
			[0]=>
			string(1) "1"
			[1]=>
			string(2) "2"
		}
	}
}
```
フレームワーク機能調査一覧

今流行のフレームワークってなんだろう?と思いつらつらと探してみましたが、そもそも自分がフレームワークに望むことってなんだろう?と思い一覧化してみました。

(たまに見直すかも)

# 機能一覧

- Web機能
	- 動的ページ生成
	- テンプレートエンジン
	- バリデーション
	- 静的ページ公開
	- フィルタリング
	- ファイルアップロード
	- REST
	- Ajaxデータバインディング
	- セッション管理
	- 認証
	- HTTPS
	- キャッシング
- DB機能
	- DB接続
	- トランザクション
	- O/Rマッピング
	- DBマイグレーション
	- 初期データ投入
- アプリケーションコンテナ
	- 起動方法
	- リダイレクト
	- URLリライト
	- ホットリロード
	- デプロイ
- その他
	- ロギング
	- 例外処理
	- DI
	- テスティング
	- メッセージング
	- ジョブ

# おわりに

これらを全て満足するフレームワークを探すのでは(もちろん)なく、フレームワークが何を提供するのかを調べ、自分が作ろうとしているプロダクトの機能を満たすにはどうすれば良いのかを考えれば良いと思います。

自分の中の黄金パターンのようなセットを考えるのも良いかも。
MacPortsのtmuxにAmbiguous Width Patchをあててインストール

iTerm2→tmux→Emacsという使い方をしていて，iTerm2とEmacsでAmbiguous Width対策をしているつもりなのに，表示が乱れて困ること数年．

間にtmuxが挟まっていることに気付いて，検索して，[こちら](http://qiita.com/macoshita/items/2ee3c15f362103d1e373)を発見．

ただ，自分はMacPortsで管理しているので，MacPortsのtmuxにPatchをあててインストールするようにしてみた．

```shell-session
sudo port uninstall tmux-pasteboard
sudo port uninstall tmux
sudo port clean tmux
sudo port -s patch tmux
cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_sysutils_tmux/tmux/work/tmux-1.9a
curl -kL "https://gist.githubusercontent.com/waltarix/1399751/raw/e60e879335bf3b91fef4592b194cc524bcb95388/tmux-ambiguous-width-cjk.patch" | sudo patch -p1
curl -kL "https://gist.githubusercontent.com/waltarix/1399751/raw/5914827c8f7fecfdb73c641e02c471acd55eb2af/tmux-pane-border-ascii.patch" | sudo patch -p1
cd -
sudo port -s install tmux
sudo port install tmux-pasteboard
```

無事，Ambiguous Width Patchがあたったtmuxがインストールされました．
【jQuery】json形式の文字列をオブジェクトへ変換


###jQueryでどうやる？

```js
var obj = $.parseJSON('{"name":"John"}');
```

不適切なjson文字列が指定された場合、このメソッドは例外をスローします。 

{test: 1}
ダブルクォートで囲まれていない。
※というかjsonってキーも囲むんだね。。

{'test': 1}
ダブルクォートではなくシングルクォートを使用している。
※というかjsonってシングルクォートダメなんだね。。

参考：[$.parseJSON() ](http://js.studio-kingdom.com/jquery/utilities/parse_json)

###javascriptでどうやる？

```
var data = '{a:123,b:"hogehoge"}';
var obj = (new Function("return " + data))();
```

なんかすごい。

参考：[JSONらしき文字列をオブジェクトに変換するJavaScript](http://hamalog.tumblr.com/post/4047826621/json-javascript)
C#で日時表示スクリーンセーバーの作成

[前回](http://qiita.com/lofttecs/items/5f7b1448513a636334ee)はC#で壁紙カレンダーを作成いたしましたが、今回はスクリーンセーバーを作成いたしました。

http://web.loft-net.co.jp/lofttecs/clock_screensaver/

テキストで日時が表示されて、画面上を動くだけのシンプルなスクリーンセーバーです。

C:\Windows\System32 に clock_screensaver.scr をコピー、
または、clock_screensaver.scr を右クリックして「インストール」を選択し、
「スクリーンセーバーの設定」で「clock_screensaver」を選択してください。

ダウンロード：http://web.loft-net.co.jp/lofttecs/clock_screensaver/

GitHub：https://github.com/lofttecs/Clock_Screensaver

2016.01.27　ver. 1.1　フォント設定機能追加
True typeフォントのみ使用できます。
2016.02.02　ver. 1.2　設定値をレジストリに保存するように変更
GPUImageでフィードバック処理したい

GPUImageでフィードバック処理したいんだけどよく分からず`GPUImageTextureInput`とか`GPUImageTextureOutput`とか使ってみたり自分で`GPUImageFrameBuffer`を作ろうとしてみたり色々した結果,

```
@interface CustomFilter : GPUImageTwoInputFilter
@end

@implementation CustomFilter
処理ゴニョゴニョ
@end
```

で

```
- (void)viewDidLoadとか {
  CustomFilter *filter = CustomFilter.new;
  [camera addTarget:filter];
  [filter addTarget:filter];
}
```

みたいな. なんとまあ, 盲点. 無限ループしそうな気がしてやってなかった. 俺の数日間って一体.