OmniAICreator/Qiita-1.07M huggingface dataset:
色んな言語における曜日の数値表現


とりあえず使用頻度の高い言語だけピックアップ。
意外とバラバラですね。
ISO 8601由来とtime.h由来のパターンは理解できますが、それ以外はどうしてこうなったのか…。

|言語/ツール     |[1-7]=[月-日]        |[0-6]=[日-土] |[0-6]=[月-日]      |[1-7]=[日-土]|
|--------------|---------------------|-------------|------------------|-------------|
|ISO 8601      |D                    |             |                  |             |
|SWI-Prolog    |day_of_the_week/2    |             |                  ||
|Python        |date.isoweekday()    |             |                  ||
|Python        |datetime.isoweekday()|             |                  ||
|Ruby          |Date#cwday           |             |                  ||
|Ruby          |                     |Date#wday    |                  ||
|JavaScript    |                     |Date.getDay  |                  ||
|C/C++ (time.h)|                     |tm_wday      |                  ||
|CRONTAB (5)   |                     |day of week  |                  ||
|SRFI          |                     |date-week-day|                  ||
|Python        |                     |             |date.weekday()    ||
|Python        |                     |             |datetime.weekday()||
|Java          |                     |             |                  |java.util.Calendar|


## ISO 8601

### D

> D は曜日を表し、月曜日が 1、日曜日は 7 である。「8」「9」は表記数値とされない（エラー扱い）。
> http://ja.wikipedia.org/wiki/ISO_8601#.E5.B9.B4.E3.81.A8.E9.80.B1.E3.81.A8.E6.9B.9C.E6.97.A5

## SWI-Prolog

### day_of_the_week/2

> Days of the week are numbered from one to seven: monday = 1, tuesday = 2, ..., sunday = 7.
> http://www.swi-prolog.org/pldoc/doc_for?object=date:day_of_the_week/2

## Python

### date.isoweekday()

> 月曜日を 1,日曜日を 7 として、曜日を整数で返します。
> http://docs.python.jp/3/library/datetime.html#date-objects

### datetime.isoweekday()

> 月曜日を 1、日曜日を 7 として、曜日を整数で返します。 
> http://docs.python.jp/3/library/datetime.html#datetime-objects

## Ruby

### Date#cwday

> cwday -> Integer
> 暦週の日 (曜日) を返します (1-7、月曜は1)。
> http://docs.ruby-lang.org/ja/2.1.0/method/Date/i/cwday.html

### Date#wday

> wday -> Integer
> 曜日を返します (0-6、日曜日は零)。
> http://docs.ruby-lang.org/ja/2.1.0/class/Date.html#I_WDAY

## JavaScript

### Date.getDay

> 日曜日が 0、月曜日が 1、火曜日が 2、という対応です。
> https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay

## C/C++ (time.h)

### tm_wday

> days since Sunday – [0, 6] 
> http://en.cppreference.com/w/c/chrono/tm

## CRONTAB(5)

### day of week

> day of week    0-7 (0 or 7 is Sun, or use names)
> http://www.unix.com/man-page/linux/5/crontab/

## SRFI (Scheme Requests for Implementation) 19

### date-week-day date -> integer

> The day of the week of this date, where Sunday=0, Monday=1, etc.
> http://srfi.schemers.org/srfi-19/srfi-19.html

## Python

### date.weekday()

> 月曜日を 0、日曜日を 6 として、曜日を整数で返します。
> http://docs.python.jp/3/library/datetime.html#date-objects

### datetime.weekday()

> 月曜日を 0、日曜日を 6 として、曜日を整数で返します。
> http://docs.python.jp/3/library/datetime.html#datetime-objects

## Java

### java.util.Calendar

> public static final int	SUNDAY	1
> http://docs.oracle.com/javase/jp/7/api/constant-values.html#java.util.Calendar.SUNDAY
Rails AssetsのパッケージをCLIから検索する

Rails Assets(https://rails-assets.org/) はBowerパッケージをBundlerで管理出来る便利なサービスである。
ウェブサイトにアクセスして、Rails Assetsに登録されているパッケージを検索するのは面倒なのでCLIから検索したい。そのためには`gem search --source {url}`オプションを利用したら良い。

```
$ gem search {package-name} --source https://rails-assets.org | grep "^rails-assets-"
```

`gem search`はsourceを指定しているにも関わらずrubygems.orgのパッケージも引っかかってしまうのでRails Assetsのプリフィックスで抽出している。

### シェルスクリプト

```zsh:rails-assets.sh
#!/bin/sh
# Usage: rails-assets [package-name] [-a]
 
gem search $1 $2 --source https://rails-assets.org | grep "^rails-assets-"
```

もっと簡単に、シェル関数を定義することも出来る。

```zsh:~/.zshrc
rails-assets(){
  gem search $1 $2 --source https://rails-assets.org | grep "^rails-assets-"
}
```
componentを使った開発で便利なサードパーティ制サブコマンド


componentを使った開発で個人的にcoolだと感じたサブコマンド一覧。


# component-graph

component なモジュールの依存関係をグラフとして表示します。どう依存しているのかグラフで分かりやすい。

```
$ component graph
```

上記コマンドを実行すると、`out.png`が出力される。`out.png` はこんな感じ。

![out.png](https://qiita-image-store.s3.amazonaws.com/0/7988/06c23e2f-fb9b-49ea-dbcc-cbdd39e36131.png "out.png")


https://github.com/component/component-graph


# component-assets
javascript、CSS、imageファイルといったassetsなファイルたちを以下のようなコマンドを実行するだけで、`component.json` に追加してくれます。

```
$ component assets scripts:*.js styles:*.css
```

いちいち Editor で開かなくても追加してくれるので便利。

https://github.com/anthonyshort/component-assets


# component-update
依存モジュールをアップデートすることができます。

```
$ component update

    updated : component/jquery       1.8.8  ->  1.9.1
    updated : component/tip          0.2.0  ->  1.0.0
    updated : ianstormtaylor/reset   0.1.0  ->  0.2.0
```

`--pin` を指定して実行することでバージョンを固定できます。

```
$ component update --pin

    updated : component/each             *  ->  0.2.3
    updated : component/model            *  ->  0.1.2
    updated : component/jquery       1.8.8  ->  1.9.1
    updated : component/tip          0.2.0  ->  1.0.0
    updated : ianstormtaylor/reset   0.1.0  ->  0.2.0
```

https://github.com/ianstormtaylor/component-update


# component-uninstall
なぜか、本家の方にはアンインストールするコマンドがない。下記の用にコマンドを実行するとインストールされた`components`からアンインストールされる。

```
$ component uninstall component/each
  uninstalled : component/each
```

https://github.com/kewah/component-uninstall


# component-remove
`component.json` から指定したファイルを削除することができます。指定したファイルも削除されます。

```
$ component remove index.js
    removed : index.js
    deleted : index.js
```

ファイルをキープしたい場合は、`--keep-file` のオプションを指定します。

```
$ component remove index.js --keep-file
    removed : index.js
```

https://github.com/kewah/component-remove


# component-test
browser、phantomjs、saucelabs、Travisでテストを走らせることができる。

https://github.com/MatthewMueller/component-test


# component-render
自分が作成した、テンプレートファイルからHTMLファイルを生成するコマンド。

下記のように利用する。

```
    # redner html file from template file
    $ component render simple.jade

    # render html file from template file with local json file
    $ component render -l user.json user.jade

    # render html file to output path
    $ component render -o ./static/html/simple.html simple.jade
```

`component-redner`はデフォルト`Jade`なテンプレートに対応しているが、下記のようにプラグインを指定することで他のテンプレートにも対応できる。

```
    # render html file with plugin
    $ component render -u component-render-hogan -l user.json user.mustache
```


# 参考
Commands
https://github.com/component/component/wiki/Commands
ぼくのかんがえた最強のDraperの使い方


## Draperは便利、けどめんどくさい
Draperが便利なのは言うに及ばず。
けど、いちいち↓みたいに`decorate`って書いたりするのが激しくめんどくさいです。

```
Article.first.decorate
ProductDecorator.new(Widget.first)
ProductDecorator.decorate(Widget.first)
ArticleDecorator.decorate_collection(Article.all)
Article.popular.decorate
```

`decorates_assigned`なんてのもあったりしますが、
CanCanの`load_and_authorize_resource`じゃ使えないし。


## そこで、
思いついた最強のDecorating方法がこれ。

```ruby:application_controller.rb
class ApplicationController < ActionController::Base
  ...
  def view_assigns
    Hash[
      super.map do |key, value|
        value = value.decorate if value.respond_to?(:decorate) && value.decorator_class?
        [key, value]
      end
    ]
  end
```

`ActionController::Base#view_assigns`というのはControllerがViewに渡す値をHashで返してるところ。
これをOverrideして`decorate`できるものを全部`decotate`してしまうというのはどうだろう。


ControllerではDraperのことなんか気にしなくていい。

## 使用例
それぞれのControllerでいつもどおりやるだけで、ViewではDecoratorを扱える

```ruby:article_controller.rb
class ArticleController < ApplicationController
  def index
    @articles = Article.all
  end
end
```

## 注意事項
ぱっと思いついただけで、簡単な動作検証しかしていません。
これで本当に、いろんなものが問題ないかはわからない。

コメントもらえると助かります。
wsfファイルでscriptタグのsrc属性に指定したファイルが自身のパスを取得する

できなさそうです。

`WScript.ScriptFullName` くらいしか関係する方法を見つけられませんでしたが、これでは wsf ファイルのパスになります。

```xml:example.wsf
<job>
  <script language="JScript" src="lib\common.js"></script>
  <script language="JScript" src="main.js"></script>
</job>
```

```js:lib\common.js
WScript.Echo(WScript.ScriptFullName);
```

```
D:\somewhere>cscript //Nologo example.wsf
D:\somewhere\example.wsf

D:\somewhere>cscript //Nologo lib\common.js
D:\somewhere\lib\common.js
```

wsf ファイルのパスを取得して、wsf ファイルを読み込んで src 属性の値を取得することまではできそうですが、そのうちのどれが該当するか判断できません。
OpenGL ES1.0でビューポート領域と画面サイズを合わせる方法

#はじめに
__OpenGL ES__ の __GLSurfaceView__ を使ってアンドロイドアプリを作成するとき、ビューポート領域と画面サイズを合わせるための方法を紹介します。

#GLSurfaceView.Rendererの設定
__GLSurfaceView.Renderer__インターフェースを実装するクラス内で設定をします。
ビューポートの設定と座標系の設定は、 __onSurfaceChanged__メソッド内で行います。
__onSurfaceChanged__メソッドは、画面の縦向きと横向きが変更されるときに呼ばれるため、縦向きと横向きの両方に対応するアプリを作成することも可能です。
ここで、__SCREEN_WIDTH__と __SCREEN_HEIGHT__は作成するアプリの解像度とします。

```java:GLRenderer.java
public class GLRenderer implements GLSurfaceView.Renderer {

	//
	// その他のフィールド・メソッドなど
	//

	@Override
	public void onSurfaceChanged(GL10 gl10, int w, int h) {
		// ビューポートの設定
		double scaleX = (double)w / SCREEN_WIDTH;
		double scaleY = (double)h / SCREEN_HEIGHT;
		double scale = scaleX > scaleY ? scaleY : scaleX;
		int dpW = (int)(scale * SCREEN_WIDTH);
		int dpH = (int)(scale * SCREEN_HEIGHT);
		int offsetX = (w - dpW) / 2;
		int offsetY = (h - dpH) / 2;
		gl10.glViewport(offsetX, offsetY, dpW, dpH);

		// 投影変換行列の設定
		gl10.glMatrixMode(GL10.GL_PROJECTION);
		gl10.glLoadIdentity();
		// 幅、高さを設定
		// ビューポート領域内の座標系を左上(0, 0)、右下(SCREEN_WIDTH, SCREEN_HEIGH)に設定
		// 3Dを描画するときはZ方向の描画距離を変更する
		gl10.glOrthof(0.0f, SCREEN_WIDTH, SCREEN_HEIGHT, 0.0f, -1.0f, 1.0f);

		// タッチスクリーンの領域設定
		// 今回は使用しない
		// TouchManager.setScreenArea(offsetX, h - dpH - offsetY, dpW, dpH);
	}
}
```

#イメージ図
__glOrthof__メソッドで指定した領域 _(SCREEN_WIDTH, SCREEN_HEIGHT)_ がビューポート内に描画されます。
ビューポートのY方向のオフセットは描画可能な領域の下部からの距離となります。
![viewport.png](https://qiita-image-store.s3.amazonaws.com/0/39450/4201dbd6-1958-6eaa-9254-966a0e78c510.png)

#おわりに
描画と同様に、画面タッチの座標も変換しなければいけません。
次回は、タッチ座標の変換について記述したクラスを紹介します。

#参考
http://tatoapps.wordpress.com/2013/08/17/SurfaceViewとCanvasで画面サイズに合わせて描画する方法-android/
SVGのフィルタ


# SVGのフィルタ処理

SVGではフィルタといって、描画したものにぼかし等のエフェクトをかける処理を行うことができます。

# filter要素
filterは<filter>要素で定義できます。
filter要素の中で各種要素でfilterを定義します。
下記ではfeGaussianBlurを使用します。
Gaussian Blurはガウス分布の式を使ったぼかしです。詳細は下記のリンク先で確認してください。
http://en.wikipedia.org/wiki/Gaussian_blur


```xml:filter.svg
<svg xmlns="http://www.w3.org/2000/svg">
  <defs>
    <filter id="gaussian" x="0" y="0" width="100" heihgt="100" filterUnits="objectBoundingBox">
      <feGaussianBlur in="SourceGraphic" stdDeviation="5,10" />
    </filter>
  </defs>
  <circle cx="50" cy="50" r="50" fill="red" stroke="blue" stroke-wdith="5" filter="url(#gaussian)" />
</svg>
```

sddDeviationはガウス分布の式のx,yの値を表しています。
in属性はフィルタの入力の種類を表し、SourceGraphicはフィルタが適用されるグラフィックスを用いられます。
結果は下記のようになります。

![svg_filter1.png](https://qiita-image-store.s3.amazonaws.com/0/4044/6713347c-afbf-cd88-d729-3aeae7ff65dc.png "svg_filter1.png")

# feMerge
フィルタを複数レイヤ用意して重ね合わせたいときはfeMerge要素を使います。
feMerge要素は子要素にfeMergeNodeを持ち、それを重ね合わせます。
下記はfeGaussianBlurとfeOffset(dxとdyだけずらすフィルタ)を用意して、重ね合わせてみます。

```xml:filter2.svg
<svg xmlns="http://www.w3.org/2000/svg">
  <defs>
    <filter id="gaussian" x="0" y="0" width="100" heihgt="100" filterUnits="objectBoundingBox">
      <feGaussianBlur in="SourceAlpha" stdDeviation="5,10" result="blur" />
      <feOffset in="SourceGraphic" dx="5" fy="5" result="offset" />
      <feMerge>
        <feMergeNode in="blur" />
        <feMergeNode in="offset" />
      </feMerge>
    </filter>
  </defs>
  <circle cx="50" cy="50" r="50" fill="red" filter="url(#gaussian)" />
</svg>
```

フィルタを書けた結果はresultで名前をつけられるので、そのresultの値をfeMergeNodeのinにして重ね合わせています。
結果は下記のようになります。

![svg_filter2.png](https://qiita-image-store.s3.amazonaws.com/0/4044/16b2d276-71b2-d1ce-806c-d4e84a343ac9.png "svg_filter2.png")


# 様々なフィルタ
フィルタには他にもたくさんの要素があります。
また、 feDiffuseLightingや feSpecularLightingには光源を設定でき、光源を設定する要素にfeDistantLight, fePointLight, feSpotLight があります。

こちらはまた別の機会に説明しようと思ってます。
jQuery mobile 1.4.1 を CDN で読み込んだらローディングのぐるぐる画像が出なかった

_http://ajax.googleapis.com/ajax/libs/jquerymobile/1.4.1/images/ajax-loader.gif_
がただの透明な gif だった。
_http://code.jquery.com/mobile/1.4.1/images/ajax-loader.gif_
はぐるぐるしてたので code.jquery.com から読み込むことにした。
Jenkinsのセッションタイムアウトの設定

Windows のサービスとしてインストールした Jenkins のセッションタイムアウトの設定を変更する方法です。
調べ方が悪く、なかなか方法が分からなかったため、メモしておきます。

jenkins.xml の `<arguments>...</arguments>` の中の末尾に `--sessionTimeout=1440` (1440 分) と追記して Jenkins サービスを再起動したら変更が反映されました。

```xml
<arguments>... --sessionTimeout=1440</arguments>
```
chefで複雑なlibrariesを書きたい時のhack


3/20追記
files/default以下に置いた場合もダメでした。
なので、libraries直下にフラットにファイルを置くのが一番良いと思います。

chefのlibraries ( http://docs.opscode.com/essentials_cookbook_libraries.html )
chefの機能を拡張したり、ちょっとしたhelperメソッドを作りたいときに重宝しますが、ちょっとした罠にハマったので紹介します。

ネット上のサンプルを見ると、どれもlibraries直下にのみファイルを置いて使う例が示されています。

````
.
├── libraries
│   ├── helper.rb
├── recipes
    └── default.rb
````

これは正しく動きますが、実装が進むに連れてhelper.rbが大きくなってきたので、複数のファイルに分割して以下のようにディレクトリを切ったとします。

````
.
├── libraries
│   ├── helper.rb
│   └── lib
│       ├── aaa.rb
│       └── bbb.rb
├── recipes
    └── default.rb
````


````ruby:helper.rb
require_relative './lib/aaa.rb'
require_relative './lib/bbb.rb'

def hogehoge
  # do something
end
````

そしてcookbookをchef serverにアップロードし、他のcookbookから使おうとすると、以下のようなload errorで動かなくなります。

````
in `require_relative': cannot load such file -- (略)/libraries/lib/aaa.rb (LoadError)
````

どうやらlibraries以下に掘ったディレクトリはアップロードされないようです。
https://tickets.opscode.com/browse/CHEF-672
chef serverにアップロードしなければ普通に動くので、chef-soloのみを使っている場合は問題ありません。（そのお陰で、アップロードするまで気づかなかったんですが。。。）


解決案は以下の4つ

1. libraries直下にフラットにファイルを置く
 * メリット： そんなにトリッキーじゃない
 * デメリット： chef実行時にlibraries以下のすべてのファイルがrequireされてしまう。require順を制御できない。
 * デメリット： libraries以下の整理ができない
* libraries/lib以下をgem化し、chef実行時（compile時）にchef_gemを使ってchefのruby環境にそのgemをインストール、libraries/helper.rbからそれをrequireする
 * メリット： libraries/lib以下の実装を隠蔽できる
 * デメリット： gemサーバがchef実行時のSPOFになる
 * デメリット： gemとcookbookの2つをメンテしなくてはならなくなる
* chef serverにきちんとアップロードされるディレクトリにlibraries/lib以下を移動し、helper.rbからrequire_relativeで無理やりrequireする
 * メリット： libraries以下が整理できる
 * メリット： SPOFが増えない
 * デメリット： chef的に気持ち悪い
* chef serverをやめる
 * デメリット： やることが多すぎる

案3.が一番無難かなと思います。
files/default以下はディレクトリを作ってもきちんとアップロードされるようなので、libraries/lib以下をfiles/default/libに移動し、helper.rbのrequire_relativeを修正します。

````
.
├── libraries
│   └── helper.rb
├── recipes
│   └── default.rb
├── files
│   └── default
│       └── lib
│           ├── aaa.rb
│           └── bbb.rb
````

````ruby:helper.rb
require_relative '../files/default/lib/aaa.rb'
require_relative '../files/default/lib/bbb.rb'

def hogehoge
  # do something
end
````

3/20追記
案3が無難と書きましたが、この方法を実際にやってみるとchef serverとchef-clientを使うケースにおいて動かない事があります。
理由はchef-clientを使っている場合、files以下のファイルはrecipeコンパイル後、実際にそのファイルが必要となった時に初めてchef serverからダウンロードされる挙動になるため。(lazy load)
recipeコンパイル時にlibrariesのメソッドを呼び出した場合は、files以下のファイルがダウンロードされる前に呼び出されることになるため、cannot load such fileエラーになってしまいます。
client.rbにChef::Config[:no_lazy_load] = trueと設定すればこのlazy loadをoffにできますが、lazy load off前提のlibrariesになってしまうため、このやり方は断念しました。
PHPの配列結合

PHPの配列結合には、array_merge()、array_merge_recursive()、+演算子があるのですが、少しずつ結果が異なります。
具体的には、keyが数字の場合、array_merge()とarray_merge_recursive()は、keyを振りなおして結合。
+演算子は、keyそのままで、前の配列の値を残します。

```php
$arrayFirst = [0 => 'a', 10 => 'b'];
$arraySecond = [0 => 'A', 100 => 'B'];
var_dump(array_merge($arrayFirst, $arraySecond));
var_dump(array_merge_recursive($arrayFirst, $arraySecond));
var_dump($arrayFirst + $arraySecond);

/* 結果
array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "A"
  [3]=>
  string(1) "B"
}
array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "A"
  [3]=>
  string(1) "B"
}
array(3) {
  [0]=>
  string(1) "a"
  [10]=>
  string(1) "b"
  [100]=>
  string(1) "B"
}
*/
```

ところが、keyが文字列だった場合、array_merge()は後ろの配列の値を残し、array_merge_recursive()の場合は、新たに配列を作り、両方残すように処理が変わります（+演算子は変化なし）。

```php
$arrayThird = ['zero' => 'a', 'ten' => 'b'];
$arrayFourth = ['zero' => 'A', 'hundred' => 'B'];
var_dump(array_merge($arrayThird, $arrayFourth));
var_dump(array_merge_recursive($arrayThird, $arrayFourth));
var_dump($arrayThird + $arrayFourth);

/* 結果
array(3) {
  ["zero"]=>
  string(1) "A"
  ["ten"]=>
  string(1) "b"
  ["hundred"]=>
  string(1) "B"
}
array(3) {
  ["zero"]=>
  array(2) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "A"
  }
  ["ten"]=>
  string(1) "b"
  ["hundred"]=>
  string(1) "B"
}
array(3) {
  ["zero"]=>
  string(1) "a"
  ["ten"]=>
  string(1) "b"
  ["hundred"]=>
  string(1) "B"
}
*/
```

これは正しく使わないと、バグの元になりそうですね・・・。
FacebookSDK for iOS その１

FacebookSDK for iOSを使ってみたメモ１です。

２があるかどうかはわかりません。

当たり前ですが、まずはSDK本体をダウンロードします。

https://developers.facebook.com/docs/ios

JavaScriptとかPHPとかの方が親和性は高そうですが、iOSアプリにインプリするなら、やはりiOSアプリでしょう。

＃でも実は使っていると、HTTP接続でGraphAPIを叩く方が確実なのでは！？と思う事も・・・


ダウンロードしたら、適当な場所におき、プロジェクトにパッケージを入れましょう。

プロジェクトの設定から追加するだけです。

（パスを持ってしまうので本当はプロジェクト内に置くなりして、相対パスや一般的なパスにしたほうがよい）

あとは、ヘッダをインクルードすれば使えます。簡単簡単。

```objc
# import <FacebookSDK/FacebookSDK.h>
```

余裕があれば、落としたSDKの中にサンプルがいくつかあるので、見てみるとよいでしょう。

これだけだとあれなので、簡単に最初の一歩を。

StoryBoardでボタンを適当に作ります。
StoryBoard上でボタンのクラスをFBLoginViewに設定します。
ViewControllerの起動時に、[FBLoginView class]を呼びます。
チュートリアルより抜粋ですが

```objc
(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  // Override point for customization after application launch.
  [FBLoginView class];
  ...
  return YES;
}
```

ってやるだけですね。

これで、ログインボタンが出て、ログインしたりログアウトしたりして遊ぶことができます。

ログインが実装できたら、次はパーミッションの設定と、実際に情報を取得するところでしょうか。

その話は、また次回（あれば）

https://developers.facebook.com/docs/ios/login-tutorial/
Rubyでいろんなツール作ってみたかった（JSON）

RubyとRailsを勉強して3ヶ月、Rubyだけで何か作ってみたくて仕事で使うテストデータを
増やすプログラムを書きました。

こんなJSONP形式データがあります。

```
callback({"status":"0","list":[{"code":"0001","name":"hoge夫","gander":"2"}]})
```

こんな風にlistの部分を増やします。

```
callback({
  "status": "0",
  "list": [
    {
      "code": "0001",
      "name": "hoge夫",
      "gander": "2"
    },
    {
      "code": "0002",
      "name": "hoge夫",
      "gander": "2"
    },
    ...
  ]
})
```

ソースです。(動作確認2.0系でしか試してません）

```rb:increment_json.rb
require 'json'

filename = ARGV[0]

unless filename && File.exist?(filename)
  puts "ファイル名がありません。第一引数にファイル名を指定して下さい"
end

jsonp = "";
file = File.open(filename, "r")
file.each do |line|
  jsonp = line
  break;
end

tmp = jsonp.match(%r{\{.+\}})[0]
json = JSON.parse(tmp)

json.each do |key, value|
  if key == "list"
    #p value.size
    #p value[0]

    10.times do 
      data = value[value.size - 1].dup
      code = data["code"].to_i
      code += 1
      data["code"] = "%04d" %code
      value.push(data)
    end

  end
end

# 1行で出力したい時↲
puts "callback(" + JSON.generate(json) + ")"

# フォーマットされた状態で出力したい時
#puts "callback(" + JSON.pretty_generate(json) + ")"
```

使い方：
```
$ruby increment_json.rb sample_json.txt > aaa.txt
```

これだけです。

もっと汎用的にしたかったけど、listの部分が増えればよかっただけなので深追いはしてません。

こんな風に組むともっと簡単にできる、とかあればアドバイスお願いします。

Rubyって素晴らしい。
UnityからC#でJSONのWebAPIをコールして解析する方法

HTTP通信はWWWクラスでやる。
非同期呼び出しなのでStartCoroutineで呼び出す。

UnityでJSONを解析する方法はいくつかあるが
1. LitJson
2. JSONObject
を試してみた。

LitJsonはユーザー定義のデータオブジェクトにマッピングする方式。
JSONObjectは連想配列のような汎用オブジェクトにマッピングする方式。
簡単な形式のJSONならJSONObjectで、複雑な形式のJSONならLitJsonがいいんじゃないかと思う。

以下コード抜粋

```csharp:JSONWebAPICallSample.cs
using LitJson;
//JSONObjectはnamespaceなしなのでusing不要

public class JSONWebAPICallSample : MonoBehaviour {
   void Start() {
        StartCoroutine(Download());
    }
    IEnumerator Download() {
        WWW www = new WWW("http://localhost/abc.txt");
    
        yield return www;

        //LitJSONで解析
        SampleData[] datas = JsonMapper.ToObject<SampleData[]>(www.text);
        foreach (var d in datas) {
            Debug.Log("d.id " + d.id);
            Debug.Log("d.first " + d.first);
            Debug.Log("d.second " + d.second);
            Debug.Log("d.third " + d.third);
    
        }

        //JSONObjectで解析
        JSONObject json = new JSONObject(www.text);
        for (int i = 0; i < json.Count; i++) {
            JSONObject json1 = json[i];
            JSONObject id = json1.GetField("id");

            JSONObject first = json1.GetField("first");
            Debug.Log("json id.str=" + id.str);
            Debug.Log("json id=" + id);
            string a = "PPPP";
            Debug.Log("json a=" + a);
            Debug.Log("json id=" + id);
            Debug.Log("json first=" + first);
        }
	        
        Debug.Log(www.text);
    }
}
[System.Serializable]
public class SampleData {
    public string id;
    public int first;
    public int second;
    public int third;
}
```

```json
[abc.txt]
[
	{
	    "id": "id1",
	    "first": 1, 
	    "second": 2, 
	    "third": 3
	},
	{
	    "id": "id2",
	    "first": 11, 
	    "second": 22, 
	    "third": 33
	}
]
```

<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="top"><div style="border:1px solid;margin:0px;padding:6px 0px;width:320px;text-align:center;float:left"><a href="http://hb.afl.rakuten.co.jp/hgc/1275562a.005308b5.1275562b.7dd1c368/?pc=http%3a%2f%2fitem.rakuten.co.jp%2frakutenkobo-ebooks%2feb40a83e78cf3914ba3027c58d3a3a44%2f%3fscid%3daf_link_tbl&amp;m=http%3a%2f%2fm.rakuten.co.jp%2frakutenkobo-ebooks%2fi%2f13113026%2f" target="_blank"><img src="http://hbb.afl.rakuten.co.jp/hgb/?pc=http%3a%2f%2fthumbnail.image.rakuten.co.jp%2f%400_gold%2frakutenkobo-ebooks%2fimghb%2f54%2f9c%2feb40a83e78cf3914ba3027c58d3a3a44.jpg%3f_ex%3d300x300&amp;m=http%3a%2f%2fthumbnail.image.rakuten.co.jp%2f%400_gold%2frakutenkobo-ebooks%2fimghb%2f54%2f9c%2feb40a83e78cf3914ba3027c58d3a3a44.jpg%3f_ex%3d80x80" alt="NGUI for Unity-【電子書籍】" border="0" style="margin:0px;padding:0px"></a><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px"><a href="http://hb.afl.rakuten.co.jp/hgc/1275562a.005308b5.1275562b.7dd1c368/?pc=http%3a%2f%2fitem.rakuten.co.jp%2frakutenkobo-ebooks%2feb40a83e78cf3914ba3027c58d3a3a44%2f%3fscid%3daf_link_tbl&amp;m=http%3a%2f%2fm.rakuten.co.jp%2frakutenkobo-ebooks%2fi%2f13113026%2f" target="_blank">NGUI for Unity-【電子書籍】</a><br><span style="">価格：1,569円（税5%込、送料込）</span><br></p></div></td></tr></table>
RailsAdmin で has_many の表示を改善するお手軽な方法

RailsAdmin ではデフォルトで has_many な関連の値が次のように表示されます。

```markdown
関連1 と 関連2 と 関連3
```

これ読みづらいですよね。

上記の `と` の部分は I18n を利用して表示されているので `ja.yml` 等を次のようにすると、ちょっとましになります。

```diff
 ja:
   support:
     array:
-      last_word_connector: と
-      two_words_connector: と
-      words_connector: と
+      last_word_connector: <br/>
+      two_words_connector: <br/>
+      words_connector: <br/>
```
Python: PKCS#5 v2.0 PBKDF2 (python-pbkdf2)


[PKCS #5: PASSWORD-BASED CRYPTOGRAPHY STANDARD](http://bit.ly/1lZV0bi)
     
[インストール](https://github.com/dlitz/python-pbkdf2):

    $ pip install pbkdf2

[HMAC-SHA256で128ビットの派生キーを作って](https://en.wikipedia.org/wiki/PBKDF2)、コンテンツキーをAESでラップして相手に渡す。:

```py

    def test_pbes2(self):
        # PBES2-HS256+A128KW

        from pbkdf2 import PBKDF2
        from Crypto import Random

        klen = 16                           # key length

        # Sender ----
        cek = Random.get_random_bytes(klen) # CEK
        key = Random.get_random_bytes(klen) # shared key
        p2s = Random.get_random_bytes(32)   # salt
        p2c = 4096                          # iter count

        from Crypto.Hash import HMAC, SHA256, SHA384, SHA512
        # Derive shared key to KEK by Alice
        kek_alice  = PBKDF2(key, p2s, p2c,
                            digestmodule=SHA256,
                            macmodule=HMAC).read(klen)
        self.assertEqual(len(kek_alice), klen)

        # Wrap CEK to CEKCI with AES
        from jose.jwa.aes import aes_key_wrap
        cekci = aes_key_wrap(kek_alice, cek)

        # Recepient ----
        # 'key' has been shared before a session.
        # 'p2s', 'p2c', and 'cekci' are delivered on a session

        # Derive shared key to KEY by Bob
        kek_bob = PBKDF2(key, p2s, p2c,
                         digestmodule=SHA256,
                         macmodule=HMAC).read(klen)
        self.assertEqual(kek_alice, kek_bob)

        # UnWrap CEKCI to CEK with AES
        from jose.jwa.aes import aes_key_unwrap
        cek_agreed = aes_key_unwrap(kek_bob, cekci)

        self.assertEqual(cek, cek_agreed)
```
WordpressでHTTPヘッダー(header())を飛ばす

Wordpressのテンプレごにょって某ホスティングの自動挿入抑制(崩れるのを防ぐ苦肉の策)してるけどテンプレ(っていうか今回はプラグイン)更新したらまた消えちゃったのでメモ。

よく考えたらプラグイン作ってやって全テンプレで効くようにしておいたほうがよかったけど今回はめんどくさかったのでパス。

で、方法は簡単。`function.php`とかに`add_action`を書いてやるだけ。

```function.php
add_action( 'send_headers', 'add_header_xua' );
function add_header_xua() {
	header( 'X-UA-Compatible: IE=edge,chrome=1' );
}
```

参考

https://codex.wordpress.org/Plugin_API/Action_Reference/send_headers
http://wiki.grepgrape.net/index.php?WordPress/HTTP%E3%83%98%E3%83%83%E3%83%80%E3%83%BC%E3%81%AE%E9%80%81%E4%BF%A1
SceneKit日和（１）

SceneKit.frameworkというものがMac OSX用のフレームワークとして10.8から存在します。
リアルタイム3D・2Dレンダリングのためのフレームワークです。

これがまた凄いフレームワークで、
3Dが簡単に扱えるだけでなく、
CIFilterやCoreAnimationLayer等の高度な既存技術から、
OpenGL等の低レイヤーなAPIが高いレベルで統合できるすばらしいフレームワークになっています。
これは使わない手は無いです。

ぶっちゃけた話、WWDC2012とWWDC2013のSceneKitのセッションをしっかり見れば、
大抵のことは出来る様になるので非常におすすめです。

結構語りたいことは数多くあるのですが、
まずはとっかかりとして、導入から、OpenGLのコードの統合方法を紹介します。

続きはブログでどうぞ
http://wowdev.jp/?p=1072
iOSアプリをつくるときにやっておいたほうがいいこと

# Localize

そのままにしておくと、キーボードとか"Done"になってしまいます。
日本語で出したい人は、日本語ローカライズを！

https://conyac.cc/ja/business/columns/localization_guide_ios

# MVCでファイルをわけよう

わたくし、情報畑出身ではないので、全く知りませんでしたMVC.
大掛かりなアプリをつくろうとすると、MVCでわけないと、ファイルがわけわからんくなったり、
同じメソッドを何回もこぴぺしたり…
MVCを知ることは大事ですね。。

http://ja.wikipedia.org/wiki/Model_View_Controller

# Core Dataを導入しておく

データの保存が必要なら、はじめのうちにCore Dataをつかえる基礎をつくるべき。
MVCにならって、データやりとり(?)ようのクラスをつくるのがおすすめです。

https://developer.apple.com/jp/devcenter/ios/library/documentation/iPhoneCoreData01.pdf

![スクリーンショット 2014-03-13 21.58.31.png](https://qiita-image-store.s3.amazonaws.com/0/32033/28f1789a-c371-9e03-0256-c49480b778ba.png)
…どっちやねん！

ということで、気づいたらじゅんじついかー
非AJAXなWEBサービスのAJAX化を強いられたときに知っておくと良さそうなライブラリ

ちょっとだらっとした文章になりそうです。よろしくお付き合いください。さて・・・

例えば、ショッピングサイトかなんかでTOPページがあって、その中にNew Itemsのパーシャルがあって、商品の追加頻度が高くて顧客から即時性が求められているんだけど、TOPページはNew Items 込み込みでサーバサイドでHTML一枚でがっつり書き出される設計になっていたとします。そうしますと、New ItemsのリロードのためにTOPページ全体のリロードが必要になるわけで、じゃあJSでページ全体のオートリロード仕込むか、いやいやそんなの色んな事情でありえないわけですから、そこはAjax化して部分リロードでいこうぜとなるわけです。

ここで検討されるAjax化の設計手法は、普通は2つでしょう。

###ひとつめ。
###New Itemsをtext/htmlとしてサーバからもらう。
つまりサーバサイドでHTMLを生成する、ということです。
具体的には、サーバサイドで、New Items用にパーシャルテンプレートを切り出して、routeとcontroller::method()を新規に追加するって感じですね。

###ふたつめ。
###New ItemsのDOMに必要なデータだけをapplication/jsonとしてサーバからもらう。
つまりクライアントサイドでHTMLを生成する、ということです。
具体的には、クライアントサイドで、jQuery-templateでもAngularJSでもなんでも使ってNew Items部分のテンプレを埋め込んでおき、Ajaxで受け取ったJSONをアサインしてレンダリングするといいでしょう。あ、こちらもrouteとcontroller::method()を追加することになるでしょう。

(みっつめのハイブリッドな方法として、初回用のJSONをtext/htmlの一部として書き出しておくというやり方もありますね。私はやったことないですが)

さて、両者を比較すると、
**手軽さ** という点では前者、
**APIの汎用性** という点では後者、
がそれぞれ優位になりそうです。

>私としては後者を推します。設計としてキレイですし、場合によっては、APIのオープン化を提案する（＝新しいお仕事を生み出す）ための布石にもなったりしますから。ま、それはいいとして・・・

さて、前者ではなく後者を選択した場合、jQuery, AngularJS ゴニョゴニョに加えて、もうひとつ面倒ごとが増えます。サーバ側のアプリケーションフレームワークにバンドルされたテンプレートエンジンは通常フィルター関数を持っていてそれを使っている箇所があるでしょうから、それをJSによる実装で置き換えなければなりません。

例えば、コントローラで
$datetime = '2014-03-13T12:34:56.888Z';
としてアサインされた値をテンプレートエンジンで、

```php
<?php echo date('Y年n月d日 h:m', strtotime($datetime)); ?>
```

なんて感じで書き出していた場合、ちょっと大変くさいですね。date(･･･)の部分をサーバサイドで計算してJSONで渡してもいいですがそうするとAPIとしての汎用性がガクッと落ちてしまいます。

###そこで、phpjsの登場です。（本題）
https://github.com/kvz/phpjs
PHPの強力な関数群をそのまんまのインターフェイスでJSで利用できるんですから手っ取り早い。これを使ってJSで書き直せば楽チンですね。うれしい。

ちなみに、Python Djangoにも似たようなのがありますね。
https://github.com/dryan/django-filters-js
(Rubyは見つけられませんでした...)

言っても、やっつけ的なアプローチではありますが、選択肢としておさえておくといいでしょうね。
今夜は早く帰れるかもしれません。

以上であります！

* * *
#告知
というか宣伝ですが、このエントリーも関係してますが、
###2chまとめ巡査長β
http://j.inthemaking.net/
というのを作ってみました。PCでも見れますがスマホ用です。
よろしければ暇つぶしに使って感想いただければ嬉しいです。
Bundle install nokogiriでハマったとき


```Gemfile
ENV['NOKOGIRI_USE_SYSTEM_LIBRARIES'] = '1'
gem 'nokogiri' #nokogiriに依存関係があるもの
```
http://tacatakatca.hatenablog.com/entry/20131020/1382270726
http://qiita.com/suu_g/items/fcf549e16c797a9d7dc0

http://nokogiri.org/tutorials/installing_nokogiri.html

```terminal:CentOS系
$ sudo yum install -y gcc ruby-devel libxml2 libxml2-devel libxslt libxslt-devel
```


###おまけ
capistranoで、デプロイ環境毎にGemfileを変更したい時の設定
http://qiita.com/yousing/items/20e08b10cd8c96701b89
○○が含まれない行にマッチする正規表現

```bash:"文字列"が含まれない行にマッチする正規表現
^(?!.*文字列).+$
```

## 確認エディタ

否定先読み`?!`の正規表現に対応していないエディタでは動かないので注意です。
私は下記で動作を確認しています。

* Sublime Text2 v2.0.2
* Notepad++ v6.3

ちなみに、Sublime Text は正規表現をインクリメンタルサーチしてくれるので、
長い正規表現を書くときや、文法が曖昧なときに、どこで間違ったかがわかりやすくて素晴らしいです。

### ちなみに vim の場合…

```vim:"文字列"が含まれない行にマッチする正規表現(vim)
/^\((?\@!.*文字列\).\+$
```

意味合いは全く同じですが、各種シンボルにエスケープが必要な点と、
否定先読みの記述方法が特殊なためかなり煩雑な表記となります。

どのシンボルにエスケープが必要なのかを覚えておかないとサラッとは書けないですね。。
ggplot2のインストールに失敗する


どうやら、依存パッケージの`colorspace`のインストールに失敗しているためのようだ。

ログを見ると下記のようなエラーが出ていた。

```
ld: library not found for -lintl
```

で、これはどう解決するかというと、いつも頼りになるStackOverflowさん。

http://stackoverflow.com/questions/11151197/ld-library-not-found-for-lintl-on-mac-os-x-lion

`libintl`を提供している`gettext`がsymlinkされていないのが原因のようで。

```
$ brew link gettext
```

これで使えるようになったことを確認。
【解決】 Theme.Holo.Lightが適用されなくてハマった件

# Theme.Holo.Lightが適用されなくてハマった件

Holo.Lightのテーマを適用させたいのに，全然適用されなかったおはなし．

## ActionBar 黒

```xml:style.xml
<resources>
    <style name="AppBaseTheme" parent="android:Theme.Holo.Light" />
    <style name="AppTheme" parent="AppBaseTheme" />
</resources>
```

```xml:AndroidManifest.xml
    <application
        android:theme="@style/AppTheme" >
```
## ActionBar 黒

```xml:style.xml
<resources>
    <style name="AppBaseTheme" parent="android:Theme.Holo.Light" />
    <style name="AppTheme" parent="AppBaseTheme" />
</resources>
```

```xml:AndroidManifest.xml
    <application
        android:theme="@style/AppBaseTheme" >
```

## ActionBar 白

```xml:style.xml
<resources>
    <style name="AppBaseTheme" parent="android:Theme.Holo.Light" />
    <style name="AppTheme" parent="android:Theme.Holo.Light" />
</resources>
```

```xml:AndroidManifest.xml
    <application
        android:theme="@style/AppTheme" >
```

## ActionBar 黒

```xml:style.xml
<resources>
    <style name="AppBaseTheme" parent="android:Theme.Holo.Light" />
    <style name="AppTheme" parent="android:Theme.Holo.Light" />
</resources>
```

```xml:AndroidManifest.xml
    <application
        android:theme="@style/AppBaseTheme" >
```

## ActionBar 黒

```xml:style.xml
<resources>
    <style name="AppBaseTheme" parent="android:Theme.Holo" />
    <style name="AppTheme" parent="android:Theme.Holo" />
</resources>
```

```xml:AndroidManifest.xml
    <application
        android:theme="@style/AppBaseTheme" >
```

## ActionBar 黒で，ActionBar下に青線

```xml:style.xml
<resources>
    <style name="AppBaseTheme" parent="android:Theme.Holo" />
    <style name="AppTheme" parent="android:Theme.Holo" />
</resources>
```

```xml:AndroidManifest.xml
    <application
        android:theme="@style/AppTheme" >
```

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/20506/de5c9e18-10bd-f63a-e166-6b35d429465e.png)

でも新規プロジェクト作るとこうならないから，やっぱどこかおかしいんだろうなぁ…
全然分からん…プロジェクト作り直すしかないのか…．

# 解決

原因は参照しているライブラリに，同名のstyleが適用されていたためでした．
（ひどいオチ…）

みなさん，ライブラリプロジェクトをEclipseで生成したら，忘れずに不要なリソースを削除しましょう orz
【最小2行】超最低限の設定から始めるVimの関数ジャンプ

# 超最低限の導入手順

```bash:command
# ソースツリーのトップで実行
$ ctags -R
```

```vim:vim
"適当なソースをvimで開いて、トップに生成されたtagsファイルへパスを通す
:set tags=<tags_path>
```

`ctrl + ]` ジャンプ！
`ctrl + t` 戻る！

以上、Good Luck !!＼(^o^)／

# なんでこんなエントリ書いてしまったん…？

「Vim 関数ジャンプ」とかでググると素晴らしい情報がたくさん出てくるんですが、

Vim とちゃんとお付き合いしたい人向けの情報が多く、正妻はIDEな人には敷居が高く感じたので、
「Vim！お前とはSSHだけの関係だといっただろう！」と、
割り切った付き合いをしている人にも参考になればと思って書いてみました。

何はともあれ、まずは使いはじめるのが大事だからね！

# えっ、流石にこれだけだとちょっと…

FAQっぽくちょっとずつ情報を載せてきます。

## っていうかそもそも何の言語に対応してんの？

下記コマンドで対応言語の一覧が出力されます。たっぷりでます。
ctags を最新バージョンにアップデートしておくとより良いです。

```bash:command
$ ctags --list-languages
```

## 毎回 `:set tags=<tags_path>` とかやっとれんわ

私もそう思います。`vimrc`に移しましょう。
これで Vim 起動時に自動で読み込まれます。

```vim:vimrc
set tags=<tags_path>
```

## 関数ジャンプ精度悪くない？

ctags は意味解析まで行っていないため、ツリーに同名・同引数の関数が存在しているとしばしば間違えます。
そういったときは下記コマンドで、ジャンプ先の候補をリストアップしてから、数字を入力してジャンプしてください。

`g, ctrl + ]` ジャンプ先候補表示！

## コードに変更があるたびに `$ ctags -R` 必要なん？

必要です…が、関数がガシガシ追加・削除されるわけでなければ、
気が向いた時に手動で実行すれば十分かと思います。

自動で実行したいという人はググると vim plugin を使った方法や、git の hook で自動生成する方法などもでてきますので、トライしてみると良いと思います。

## ウィンドウを分割しつつ関数ジャンプできる？

以下のコマンドで関数ジャンプしてください。
ウィンドウが分割された後の操作は頑張ってください。

`ctrl + w + ]` 別ウィンドウ表示でジャンプ！

## 呼び出し元ジャンプしたいんだけど？

ctags ではできません＼(^o^)／

# おわりに

正直なところ、`ctags`の提供する機能はIDEと比較すると貧弱ではありますが、
何もサポートがない状況と比べると大きな助けになると思います。

特に`ctags`は敷居が低く導入しやすいので、
作業が発生した場合にはぜひトライしてみてください！

# 確認環境

* Ubuntu 12.04LTS
* Mac OS X 10.9.2
* CYGWIN_NT-5.1-WOW64
typeof attachEvent

「attachEventってtypeofしたらfunctionだよね？」という、そりゃそうなんじゃないの、と思うような事を聞かれたのですが、`typeof attachEvent`で検索してみると"object"と比較していたり、"function"と比較していたりするようなサンプルコードがいくつも出てくるので、そんなアホなと思いつつ調べてみたのです。

以下は[modern.IE](http://modern.ie/)からダウンロードして来たVirtualBoxのVMでの検証結果です。
IEを起動した際に表示される、`http://www.modern.ie/en-us/tools`のページでアドレスバーに以下を入力して実行しました。

```js:アドレスバーに入力したJavaScript
javascript:alert(typeof attachEvent)
```

|OS   |IE            |typeof attachEvent|
|:----|:-------------|:-----------------|
|Vista|IE7           |object            |
|7    |IE8           |object            |
|7    |IE9           |function          |
|8    |IE10 (Desktop)|function          |
|8.1  |IE11 (Desktop)|undefined         |

これでまた少しIE力が向上したのでした。（あんまりうれしくない）
Xcodeを複数使用している場合に、Xcode Plug-inを両方で使う方法


Xcodeを共存させる方法は、下記の記事に乗っているのですが、

http://dev.classmethod.jp/references/xcode4and5/

ダウンロードしてきた方のXcodeを起動してみると、plug-inが有効になっていません。

`~/Library/Application\ Support/Developer/Shared`に、ダウンロードしてきた方のXcodeと同一の名前でディレクトリを作り、そこにPlug-insディレクトリを丸ごとコピーすると使えるようになります。

今回の場合は、AppStoreで、Xcode 5.1にアップデートし、Xcode 5.0.2をダウンロードした(名前はそのままXcode 5.0.2にしました)ので、下記のようにしました。

```
cd ~/Library/Application Support/Developer/Shared
mkdir Xcode\ 5.0.2  # <= ダウンロードしたXcodeにつけた名前でディレクトリを作成
cp -r Xcode/Plug-ins Xcode\ 5.0.2/
```

これで起動すれば使えるはずです。
Test::Mojoで、JSONを返すAPIをテストする。


Test::Mojoには、jsonをテストするメソッドがあります。
主にjson_isメソッドを使用します。

以下のように、JSON構造をポインタで指定して、値をテストすることができます。

```pl:t/base.t
# {"status":"ok"}
$t->get_ok('/case1')
  ->status_is(200)
  ->json_is('/status' => 'ok');


# {
#     "status":"ok",
#     "list":[
#         {
#             "id":1,
#             "name":"太郎"
#         },
#         {
#             "id":2,
#             "name":"花子"
#         },
#         {
#             "id":3,
#             "name":"冴子"
#         }
#     ]
# }
$t->get_ok('/case2')
  ->status_is(200)
  ->json_has('/status')
  ->json_is('/status' => 'ok')
  ->json_is('/list/0/id' => 1)
  ->json_is('/list/0/name' => '太郎')
  ->json_is('/list/1/id' => 2)
  ->json_is('/list/1/name' => '花子')
  ->json_is('/list/2/id' => 3)
  ->json_is('/list/2/name' => '冴子');
```


JSON全体をテストする場合は、以下のようにPerlのデータ構造でテストすることができます。

```pl:t/base.t
# {"status":"ok"}
$t->get_ok('/case1')
  ->status_is(200)
  ->json_is({status => 'ok'});

# {
#     "status":"ok",
#     "list":[
#         {
#             "id":1,
#             "name":"太郎"
#         },
#         {
#             "id":2,
#             "name":"花子"
#         },
#         {
#             "id":3,
#             "name":"冴子"
#         }
#     ]
# }
$t->get_ok('/case2')
  ->json_is({
      status => 'ok',
      list => [
          {
              id   => 1,
              name => '太郎',
          },
          {
              id   => 2,
              name => '花子',
          },
          {
              id   => 3,
              name => '冴子',
          }
      ]
  });

```



以下、テストコード全体です。


```pl:myapp.pl
use Mojolicious::Lite;
use utf8;

my %case = (
    case1 => {
        status => 'ok',
    },
    case2 => {
        status => 'ok',
        list => [
            {
                id   => 1,
                name => '太郎',
            },
            {
                id   => 2,
                name => '花子',
            },
            {
                id   => 3,
                name => '冴子',
            }
        ],
    },
);

get '/:case' => sub {
  my $self = shift;
  $self->render(
      json => $case{$self->param('case')}
  );
};

app->start;
```


```pl:t/base.t
use strict;
use warnings;
use utf8;
use Test::More;
use Test::Mojo;

use File::Basename;

$ENV{MOJO_HOME} = dirname(__FILE__) . '/../';
require "$ENV{MOJO_HOME}/myapp.pl";

my $t = Test::Mojo->new;

$t->get_ok('/case1')
  ->status_is(200)
  ->json_is({status => 'ok'});

$t->get_ok('/case2')
  ->json_is({
      status => 'ok',
      list => [
          {
              id   => 1,
              name => '太郎',
          },
          {
              id   => 2,
              name => '花子',
          },
          {
              id   => 3,
              name => '冴子',
          }
      ]
  });


$t->get_ok('/case1')
  ->status_is(200)
  ->json_is('/status' => 'ok');

$t->get_ok('/case2')
  ->status_is(200)
  ->json_has('/status')
  ->json_is('/status' => 'ok')
  ->json_is('/list/0/id' => 1)
  ->json_is('/list/0/name' => '太郎')
  ->json_is('/list/1/id' => 2)
  ->json_is('/list/1/name' => '花子')
  ->json_is('/list/2/id' => 3)
  ->json_is('/list/2/name' => '冴子');


done_testing;
```
日本語URLのデコードに失敗してActionController::BadRequestが発生する場合の対処方法


## 問題

Railsで日本語URLをリンクで使っている場合、たまにデコードできないパラメータを渡されて、`ActionController::BadRequest`が発生することがある。(userAgent = msnbotのときに多い？)

Controllerの`before_action`等で対処しようとしても、フレームワークの内部でエラーが起きるので、そこまで処理がやってこない。

## 対処方法

`ActionDispatch::Routing::RouteSet::Dispatcher`用のモンキーパッチを当てる。

以下のモンキーパッチの例ではデコードに失敗した文字列に空文字をセットしている。(sjisやeucでデコードしても正常な文字列として回復できなかったため)

````ruby
# config/initializers/active_dispatch_fix.rb
module ActionDispatch::Routing::RouteSet::DispatcherFix
  def call env
    params = env[ActionDispatch::Routing::RouteSet::PARAMETERS_KEY]
    params.each do |key, value|
      unless value.valid_encoding?
        Rails.logger.info "[INFO] Clear invalid value for #{key}"
        params[key] = ''
      end
    end

    super
  end
end

ActionDispatch::Routing::RouteSet::Dispatcher.send :prepend, ActionDispatch::Routing::RouteSet::DispatcherFix
````

以下はRSpecでテストする場合のサンプルコード。

````ruby
# spec/requests/examples_spec.rb
require 'spec_helper'

describe 'Examples' do
  context 'with invalid parameter' do
    let(:invalid_path) { '/examples/%E3%E2%80%9A%BD%E3%C6%92' }

    before do
      allow(Rails.logger).to receive(:info)
    end

    it 'handles as RecordNotFound and writes log' do
      expect(Rails.logger).to receive(:info).with('[INFO] Clear invalid value for some_key').once
      expect{ get invalid_path }.to raise_error(ActiveRecord::RecordNotFound)
    end
  end
end
````

### 参考文献
- ベースにしたロジックはこちら。
 - https://gist.github.com/morr/9399606
- RSpecを読み書きするのが苦手な方はこちらの電子書籍を！
 - [Everyday Rails - RSpecによるRailsテスト入門](https://leanpub.com/everydayrailsrspec-jp)

### Special thanks to
- [@tkawa](http://qiita.com/tkawa) -- 上記gistのURLを教えてくれました。ありがとうございました。
Vim始めて一週間の人がなんとかVimにくらいつくためのプラグイン


##背景
Textmateを一年、Sublime Text2を半年くらいで、このたび Vimに乗り換えました。
Sublimeに戻りたくなる気持ちをぐっとこらえられたのは、下に紹介するプラグイン・ライブラリ達のおかげです。

プラグインの管理は、NeoBundle使ってます。
https://github.com/Shougo/neobundle.vim

###仮説「ナビゲーション・検索ができれば、なんとか使い続けられる」
* NERD-tree　(ディレクトリ構造内でのナビゲーション)
* CtrlP　(ファイル名での検索)
* ag (ファイルの中身での検索)
* Rails.vim（Railsの場合。 MVC間での移動）
* おまけに ctags（メソッド名での移動）

--

###NERD-tree
* vimを起動させると、ディレクトリのツリー構造で開いてくれる。
* NERD-tree上で mを押すと、ファイル・ディレクトリの追加・削除・移動ができます。

　https://github.com/scrooloose/nerdtree


###CtrlP
* Vimにいるとき、Ctrl+pで起動。
* ディレクトリ内のファイル名で、再帰的に検索できます。

　https://github.com/kien/ctrlp.vim
　http://qiita.com/oahiroaki/items/d71337fb9d28303a54a8


###ag
* ファイル内の単語で検索
* grepだけど、早いし、シンタックスも直感的。
```
$ ag --ruby controller 
```
みたいな感じ。
 https://github.com/ggreer/the_silver_searcher
 http://blog.glidenote.com/blog/2013/02/28/the-silver-searcher-better-than-ack/

###ctags
* メソッド名の参照関係を追えるtagsファイルを生成する
* tagsファイルがディレクトリにある状態で、vim内で Ctrl+] を押すと、そのメソッドの定義場所に飛べる

 http://www.findxfine.com/mac/995556619.html

###Rails.vim
* Railsフレームワーク内での移動・コマンド実行を快適にするプラグイン
* viewファイルにいるときに ```:Rcontroller ``` とやると、対応するコントローラーアクションにジャンプ
* ```:Rview``` ```:Rmodel``` もそんな感じ。
* 他にも便利コマンドがいっぱい！！

 https://github.com/tpope/vim-rails
 http://qiita.com/y_uuki/items/57e726312ffe47592867

##嬉しい副作用

* GUI、マウス操作でも何とかなるエディタだと、とりあえず手を動かしてみる、という思考になりやすい気がする。
* 上記ナビゲーションは、NERD-tree以外は __「移動する前に、自分が何をしたいのか考えてないと手を動かせない」__ です（メソッド名、ファイル名、MVC層、での移動）。
* Vimじゃなくても良いけど、Vimは __良い設計とは何か考えながらコーディングができる矯正器具__ のようなものだと考えてます。


--
※ 最初は Thoughtbot社さんが公開している dotfiles に手を出してみました。
https://github.com/thoughtbot/dotfiles
zshの補完機能まじやべー と思ったけど、あまりにも劇的に変わりすぎて、正直ついていけんかった。
pythonでjsonを扱う時、日本語をエスケープさせない方法

# エンコード
```python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import json

dict = {"hello": "日本語"}
text = json.dumps(dict, sort_keys=True, ensure_ascii=False, indent=2)
with open("utf8.json", "w") as fh:
    fh.write(text.encode("utf-8"))
```

# デコード
```python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from __future__ import print_function
import json

with open("utf8.json") as fh:
    js = json.loads(fh.read(), "utf-8")
    print(js["hello"])
```
rubyでメソッドがどこで定義されているか調べる方法

## メソッドの定義元クラス
```rb
helper.method(:link_to)
#=> <Method: ActionView::Base(ActionView::Helpers::UrlHelper)#link_to>
```

## どのファイル？
```rb
helper.method(:link_to).source_location
#=> ["/Users/hoge/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.2/lib/action_view/helpers/url_helper.rb", 174]
```

行数も出る。

define_methodとかメタプログラミングしていても追いかけてくれるので便利です。
Scala: 反復パラメータ(Repeated Parameters)にListで渡す方法


# この記事で学ぶこと

* Scalaの反復パラメータ(Repeated Parameters)にListどどうやって渡すか

# 反復パラメータとは?

引数の数が決まってない引数のことを反復パラメータと言うと思う。または、連続パラメータと言ったり可変長引数と言うみたい。英語ではRepeated Parameters、varargs, Variable Argumentsと言うらしい。

例えば、反復パラメータを持つ関数:

```scala
def doSomething(args: String*) = args
```

この関数は引数の数が決まっていないので、引数の数を変えて呼び出すことができる

```scala
doSomething("a")
//> res0: Seq[String] = WrappedArray(a)
doSomething("a", "b")
//> res1: Seq[String] = WrappedArray(a, b)
doSomething("a", "b", "c")
//> res0: Seq[String] = WrappedArray(a, b, c)
```

# Listを渡したい

こんなふうに、Listで渡したい時がある

```scala
val args = List("a", "b", "c")
doSomething(args)
```

しかし、これは型が一致しないのでエラーになる。

```
type mismatch;  found   : List[String]  required: String
```

# Listを渡す方法: `_*` シンボルをつける

`_*` シンボルをつけることで渡すことができる

```scala
val args = List("a", "b", "c")
//> args  : List[String] = List(a, b, c)
doSomething(args:_*)
//> res3: Seq[String] = List(a, b, c)
```

あれ、でも引数として文字列を渡した時は

```
//> res0: Seq[String] = WrappedArray(a, b, c)
```

となるのに、List:_* で渡した時は

```
//> res3: Seq[String] = List(a, b, c)
```

になるぞ・・・・

# どうやら Array にすると同じ振る舞いになるらしい

Listに対して `toArray` したものを `_*` シンボルで渡すと、文字列を直接渡した時と同じ振る舞いになるらしい。

```scala
doSomething(List("a", "b", "c").toArray:_*)
//> res4: Seq[String] = WrappedArray(a, b, c)
```

ということは最初からArrayにしておけばいいのかな

```scala
doSomething(Array("a", "b", "c"):_*)
//> res5: Seq[String] = WrappedArray(a, b, c)
```
vmwareにUbuntuをインストールしたらやること

# Ubuntu settings  
************************************************************

## Ubuntu 13.10 をDL  
[ubuntu-ja-13.10-desktop-amd64.iso（ISOイメージ）](http://www.ubuntulinux.jp/download/ja-remix)  


## ログイン後の画面が変な場合    
http://itneko.blogspot.jp/2012/10/ubuntu-1210-remix-on-vmware-player-5x.html  
［ディスプレイ］を選択し、［3Dグラフィックスのアクセラレーション］  
をオフにしてやってみる。  


## Ubuntu 設定    
/etc/environment にproxy設定をしないとapt-getで外へ出られない！  

    http_proxy="http://{HOST}:{PORT}"  
    https_proxy="https://{HOST}:{PORT}"  
    ftp_proxy="http://{HOST}:{PORT}"  

## CUI起動    
http://d.hatena.ne.jp/ambasa/20100915/p1  
`$ sudo vi /etc/default/grub`  
GRUB_CMDLINE_LINUX_DEFALUT="quiet splash text"  
`$ sudo update-grub`  


## Ubuntu設定    
[グローバルメニューを無効にする](http://www.k5.dion.ne.jp/~r-f/sicklylife/memo/ubuntu1310/index.html)


## gitlabにUbuntuの公開鍵登録    
1. ssh-keynen -t rsa で鍵作成＠Ubuntu
2. ～.pubをコピーしてgitlabに貼り付け
3. Ubuntuで`git clone`


## スクリーンセーバ設定をオフに    
「システム設定」 → 「画面の明るさとロック」から自動でロックをかけないように変更  


## ホームディレクトリを英語に    
`$ env LANGUAGE=C LC_MESSAGES=C xdg-user-dirs-gtk-update`  


## ターミナル起動ショートカット    
Crt ＋ Alt ＋ T  


## UbuntuソフトウェアセンターからCompizConfigSettingsManagerをインストール    


## Unityの設定を変更する　CompizConfig 設定マネージャー編    
`$ sudo apt-get install compizconfig-settings-manager`  
効果を2つほど切る  


## チェックコンフィグ    
インストール  
`$ apt-cache search sysv-rc-conf`  

使い方  
`$ sudo sysv-rc-conf --list`  
とか  


## VMWare フォルダの共有    
前提：vmware toolsがインストール済みであること。  
管理→仮想マシン設定→オプション→共有フォルダを有効にし、  
フォルダを追加しておく。  

Ubuntu上では  
/mnt/hgfs/shared配下が共有される


## Eclipse で 入力補完 コンテンツアシストをCtrl + Spaceで有効にする方法    
http://slumbers99.blogspot.jp/2011/09/ubuntu-eclipse.html  

リドゥをCtrl + Y に  


## curlインストール    
`$ sudo apt-get install curl`  
インストールしたら、ローカルのアドレスにはproxyを使わない設定をしておく  
`$ alias curl='curl --noproxy localhost,127.0.0.1'`  


## Ubuntu 自動ログインを有効にしておく    


## Ubuntu uim 設定してから↓    
http://www.rapidexp.com/wordpress/2010/09/inputmethod/  


## 変換／無変換で IME ON／OFF設定    


## ホスト名短く変更    


## gvimインストール    
`$ sudo apt-get install vim-gnome`  
vimrc, gvimrc  
をユーザディレクトリ配下に配置し、再起動  
  
  
## ランレベル変更
1. /etc/default/grub を編集する  
`$ sudo vi /etc/default/grub`  

```/etc/default/grub
GRUB_CMDLINE_LINUX_DEFALUT="quiet splash text"
```
textって文字を付加する
	
1. 反映  
`$ sudo update-grub`


## 参考
[Windows 7でVMPlayer With Ubuntu](http://www.aise.ics.saitama-u.ac.jp/~gotoh/VMPlayerIntoWindows7.html)
Scala: 親クラスの同じ名前のメソッドを子クラスで呼び出す方法


# この記事で学ぶこと

* 親クラスと小クラスで同じメソッドを作る
* 小クラスから親クラスの同名のメソッドを呼ぶ

# 親クラスの同じ名前のメソッドを子クラスで呼び出す方法

`super`で親クラスを参照できる。

```scala
class Foo {
	def doSomething() {
		println("foo")
	}
}

class Bar extends Foo {
	override def doSomething() {
		super.doSomething()
		println("bar")
	}
}

new Bar().doSomething()
```
GroovyのHttpBuilderでファイルアップロード

HttpClient経由だと日本語ファイル名が化けてしまうのはまだ未解決。

```groovy
@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7')
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.ContentType
import static groovyx.net.http.ContentType.TEXT
import static groovyx.net.http.Method.POST

@Grab('org.apache.httpcomponents:httpmime:4.3.2')
import org.apache.http.entity.mime.MultipartEntityBuilder
import org.apache.http.util.EntityUtils
import static org.apache.http.entity.ContentType.TEXT_PLAIN

def URL_ROOT = 'http://...'
def http = new HTTPBuilder(URL_ROOT)

http.request( POST, TEXT ) { req ->
    uri.path = '/path/to/upload'
    req.entity = MultipartEntityBuilder
        .create()
        .setCharset(Charset.forName('UTF-8')) // Java7 以降なら StandardCharsets.UTF_8
        .addTextBody('hoge', 'ほげほげ', TEXT_PLAIN.withCharset('UTF-8'))
        .addBinaryBody('importFile', file) // java.io.File
        .build()

    response.success = { res, reader ->
    	def responseBytes = EntityUtils.toByteArray(res.getEntity())
    	def bis = new ByteArrayInputStream(responseBytes)
        // ... 用途に合わせてレスポンス処理
    }

    response.failure = { res, reader ->
        // 失敗時
    }
}

```