OmniAICreator/Qiita-1.07M huggingface dataset:
org-mode導入

# org-mode導入

2013/06/26時点の最新版(8.0.3)を入れます。
今回は自分でダウンロードして自分で展開するやり方で行きます。
（Emacsのパッケージシステムを理解していないので）

Emacsは24.2.1を使用。


## ダウンロード

トップページにリンクがあるので、そこからダウンロードします。
<http://orgmode.org/>


## 配置

~/.emacs.d/tools 以下に展開します。

```bash:
    tar xvzf org-8.0.3.tar.gz -C ~/.emacs.d/tools
```


## 設定

説明をよく読みます。
<http://orgmode.org/org.html#Installation>

以下の設定を init.el 、もしくはそれに準ずるファイルに追加していきます。

```el:
;;; org-mode

;; --- load-path ---
(add-to-list 'load-path (expand-file-name "~/.emacs.d/tools/org-8.0.3/lisp"))
(add-to-list 'load-path (expand-file-name "~/.emacs.d/tools/org-8.0.3/contrib/lisp") t)

;; --- activation ---
;;   emacs23以降は不要
; (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))

;; --- key bind ---
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-cc" 'org-capture)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
```

これで完了です。


## 動作確認

-   ファイル<code>[1/1]</code>
    -   [X] C-x C-f test.org を入力し、 org-mode となること

-   キーバインド<code>[6/6]</code>
    -   [X] C-c l で現在位置をストアすること。（Stored xxx とメッセージが出る）
    -   [X] C-c C-l でリンクを貼り付けること。
    -   [X] C-c C-o でリンク先へ移動できること。
    -   [X] C-c c でキャプチャを実行すること。（ただし未設定なのでアイテムの追加は行わない）
    -   [X] C-c a でアジェンダコマンドを表示すること。
    -   [X] C-c b で org バッファの変更ができること。

## 最後に

今回の内容を org-mode で記入し、 M-x org-md-export-as-markdown で Markdown 形式に出力します。
ソースコード部分は手直しする必要があります。
gem update時にCHANGELOGを表示する

Rubyistの皆さんは朝起きたら`$ gem update`を打つのが日課になっていると思いますが、意外なgemがアップデートされて、え、どんな変更があったの？　って思うことはないでしょうか。
そんな時に役立つのが[gem-changelog][] gemです。
インストールして

    $ gem changelog <GEMNAME>

とすると、そのgemのCHANGELOGファイル（っぽいファイルが、存在すれば）を探して表示してくれます。

更に、.gemrcにこういう風に書くと、`$ gem install`や`$ gem update`の時に、自動でCHANGELOGファイルの内容を表示させることもできます。

```yaml:.gemrc
---
gem: --changelog
```

試しにやってみましょう。

    $ gem install gem-changelog
    ## 1.0.3 (2013-05-31)
    
    - Bugfix: `files` method requires spec dir. [kyanny]
    - New option: --lines [LINES] to display first specified LINES of changelog. [KitaitiMakoto]
    - Enhancement: `install`/`update` subcommands now have --changelog [LINES] option. [KitaitiMakoto]
    
    ## 1.0.2 (2013-03-05)
    
    - Add "History" to the changelog patterns.
    - Update CHANGELOG.md
    
    ## 1.0.1 (2013-03-05)

表示行数は`--changelog=12`とやったりして調整できます。

[gem-changelog]: http://rubygems.org/gems/gem-changelog
Viewに登録したイベントが複数回呼ばれてしまう場合の対処

以下のように、同じDOM要素に対して複数のBackboneのViewを適用すると、それぞれのイベントが残り続けてしまい、セレクタがかぶると二重にイベントが発生してしまいます。Viewがひとつの場合でも、Routerを使って同じViewを複数回表示した場合も同様です。

```js:
var AView = Backbone.View.extend({
    el: $("#main"),
    events: {
        "click button#btn1": "onBtn1Click"
    }
    ...
});
var BView = Backbone.View.extend({
    el: $("#main"),
    events: {
        "click button#btn1": "onBtn1Click"
    }
    ...
});
```

Backbone.Viewが持つremove()が使えるかと思ったのですが、DOM要素は消えてもイベント自体は残り続けていました。

この現象を解決するためには、Backbone.Viewが持つ**undelegateEvents()**を呼び出す必要があります。別のViewに移動したタイミングで、

```js:
this.off();
this.undelegateEvents();
this.remove();
```
といった形でViewを破棄すると良いかと思います。

Backboneの実装を見たら

```js:
// Clears all callbacks previously bound to the view with `delegateEvents`.
// You usually don't need to use this, but may wish to if you have multiple
// Backbone views attached to the same DOM element.
undelegateEvents: function() {
    this.$el.off('.delegateEvents' + this.cid);
    return this;
},
```

と最初から書いてあった。困ったら実装見なきゃダメですね（＾＾；
Prototypeパターン

## GoFの説明にあった（らしい）クラス図
![Prototype.png](https://qiita-image-store.s3.amazonaws.com/0/15791/c99d7c3a-d6fc-6d47-ce22-b4fc0164d7ea.png "Prototype.png")

## Prototypeパターン クラス図

![Prototype_mopdern](http://upload.wikimedia.org/wikipedia/commons/e/e5/Prototype_UML_%28padr%C3%A3o%29.png)
[上記画像の取得元：Wikimedia Commons](http://commons.wikimedia.org/wiki/File:Prototype_UML_%28padr%C3%A3o%29.png)

オブジェクト生成に関するデザインパターンの一種。
一般にはオブジェクトのクローニングでインスタンスを複製することに説明の重点があるように見えて、あまり頻繁には使われないパターンではないかと思っていた。

Factory Methodパターンと同様に__具象的クラスをクラス使用者から隠蔽できる__というのが特徴の一つで、Factory Methodとはどう差別化されるのかを考えると

* Factory Methodは一つのオブジェクトを定義するのに生成用(Factory)と操作用(Product)の二つの抽象クラス（インターフェイス）が必要
* Prototypeは一つのオブジェクトを定義するのにそのオブジェクトのための抽象クラス（インターフェイス）一つでよい。
* Factory Methodではオブジェクト生成メソッドが具象的だったり、複数あっても問題ない。<br>むしろそのオブジェクトごとに特化したものの方が使いやすい。
* Prototypeではオブジェクト生成メソッドはclone()のような共通した単純なものの方が使いやすい。<br>
あってもいいが、「オブジェクトの複製を作り、少ないコストで別インスタンスとして仕立てる」ような使い勝手の良さを損ないそう。

手習いのためにC#でコード作成。この程度ならJavaとそうかわらないはずなのに、慣れていないせいか書き心地悪かったなぁ。

追記：kobitoだとcs, c#でハイライトつくようだけど、Webだとcsharpかc#らしい。orz

```csharp:Prototype.cs
using System;

namespace Prototype
{
  abstract class MyObject
  {
    static MyObject()
    {
      MyObject.Default = new MyObjectLogged();
    }
    protected MyObject(string name)
    {
      this.Name = name;
    }

    public MyObject clone()
    {
      MyObject instance;
      
      instance = (MyObject) MyObject.Default.MemberwiseClone();
      return instance;
    }

    public static MyObject Default { get; protected set; }
    public string Name { get; set; }
    abstract public void DisplayName();
  }

  class MyObjectLogged : MyObject
  {
    protected internal MyObjectLogged()
      : base("default-object")
    {
      Console.WriteLine("-- MyObjectLogged created.");
    }

    public override void DisplayName()
    {
      Console.WriteLine("-- start DisplayName()");
      Console.WriteLine("this object name = {0:s}", this.Name);
      Console.WriteLine("-- end   DisplayName()");
    }
  }


  class Program
  {
    public static void Main(string[] args)
    {
      var o1 = MyObject.Default.clone();
      o1.DisplayName();

      var o2 = o1.clone();
      o2.Name = "o1";
      o2.DisplayName();

      var o3 = o1.clone();
      o3.Name = "o2";
      o3.DisplayName();

      o1.DisplayName();
    }
  }
}
```
Amazon Glacierを使ってみた

[amazon-glacier-cmd-interface](https://github.com/uskudnik/amazon-glacier-cmd-interface) を使ってバックアップする

### botoのインストール

```
$ pip install boto
```

### botoで使用する設定ファイルを作成

``` ~/.boto
[Credentials]
aws_access_key_id = YOURACCESSKEY
aws_secret_access_key = YOURSECRETKEY
```

### amazon-glacier-cmd-interfaceのインストール

```
$ git clone https://github.com/uskudnik/amazon-glacier-cmd-interface
$ cd amazon-glacier-cmd-interface
$ python setup.py install
```

### Amazon SimpleDBのドメインを作成

GlacierはファイルをIDで管理するため、どのIDがどのファイルかがわからなくなる。

そのためSimpleDBを使って、ファイル名とIDの関連付けをする。

SimpleDBはAPIからの操作のみなのでスクリプトからドメインを作成する

```create_sdb_domain.py
#!/usr/bin/env python
# coding: utf-8

import boto.sdb

def main():
    conn = boto.sdb.connect_to_region('ap-northeast-1')
    if conn is None:
        # Noneの場合はリージョン名の設定ミス
        print 'Invalid Region.'
        return

    # "jp.mursts.sdb.glacier_backup"という名のドメインを作成
    conn.create_domain('jp.mursts.sdb.glacier_backup')
    print conn.get_all_domains()

if __name__ == '__main__':
    main()
```

```
$ create_sdb_domain.py
```

### amazon-glacier-cmd-interfaceで使用する設定ファイルを作成

``` ~/.glacier-cmd
[aws]
access_key=YOURACCESSKEY
secret_key=YOURSECRETKEY
 
[glacier]
region=ap-northeast-1 #東京リージョン
bookkeeping=True
bookkeeping-domain-name=jp.mursts.sdb.glacier_backup #SimpleDBのdomain名
logfile=~/.glacier-cmd.log
loglevel=INFO
output=print
```

### Vaultを作成

"Test"という名前でVaultを作成する

```
$ glacier-cmd mkvault Test
```

### ファイルをアップロード
```
$ glacier-cmd upload Test /path/to/archive
```

### アップロードしたアーカイブの一覧を見る

ここではSimpleDBに保存した情報を取得している

```
$ glacier-cmd search Test
```
Scalaバッドノウハウメモ：PlayのJson.formatの罠

ググっても英語記事が多くて面倒なので、解決したらメモを書いていくことにします。
あとQiitaのソースコードの書き方よくわかんないので適当に書く。

## Json.format[A]に、フィールドが1つでそれがコレクションのcase classを渡すと怒られる。

```scala:toJson.scala
  case class Hoge(fuga:Option[Int], piyo:String)
  implicit val format = Json.format[Hoge]
```

とかだと問題なく動くのだけど、

```scala:toJson.scala
  case class Hoge(fuga:Option[Int])
  implicit val format = Json.format[Hoge]
```

とか書いちゃうと、Json.format[A]にcase classを指定する時に、No apply function found matching unapply parameters　と怒られてしまう。

http://play.lighthouseapp.com/projects/82401/tickets/918-play-21-json-issues

に書いてある通り、

```scala:toJson.scala
 case class A(value: List[Int])

  val areads = (__ \ 'value).read[List[Int]].map{ l => A(l) } // covariant map

  val awrites = (__ \ 'value).write[List[Int]].contramap{ a: A => a.value } // contravariant map

  val aformat = (__ \ 'value).format[List[Int]].inmap(  (l: List[Int]) => A(l), (a: A) => a.value ) // invariant = both    covariant and contravariant
```

とか書けば動くみたいなんだけど、記号が拒否反応を起こしてしまう人は、下の方に書いてあるやり方で、

```scala:toJson.scala
  object MyTypes {
   type DataPoints = Option[Int]
  }
  case class Hoge(fuga: MyTypes.DataPoints)
  implicit val format = Json.format[Hoge]
```

とか書くと怒られなくなる。
あなたは8つの同じサイズのボールを持っています(JavaScript)

http://d.hatena.ne.jp/torazuka/20130626/balls
にあった問題。

私も JavaScript で書いてみた。

とりあえず、実装例を遠ざけるために無駄に改行。

埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
狸
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草
埋
草

で。
実装例。

```javascript
function sign( x )
{
  return (0<x) - (x<0);
}
function solve( balls )
{
  function sum( indices )
  {
    return indices.reduce( 
      function( x, y ){  return x+balls[y]; }, 0 
    );
  }
  function balance( a, b ){
    return "L-R"[1+sign( sum( a ) - sum( b ) )];
  }
  return {
    "--":"unexpected",
    "-L":7, "-R":6,
    "RL":1, "R-":2, "RR":0,
    "LL":4, "L-":5, "LR":3,
  }[ balance( [0,1,2], [3,4,5] ) + balance( [0,3,6], [1,4,7] ) ];
}
function test()
{
  for( var b=0 ; b<8 ; ++b ){
    for( var e=0 ; e<8 ; ++e ){
      var balls=[b,b,b,b,b,b,b,b,b,b];
      balls[e]+=1
      var t = solve( balls );
      var ok = ( t===e ) ? "ok" : "***NG***";
      console.log( ok, t, e );
    }
  }
}

test();
```

今朝未明にここに書いたのがちょっと気に入らなかったので修正。

sign の実装は haker's delight からの引用。こういうところは C言語風味。
solve に埋まっている JSON のキーが汚い感じだったので、ちょっと綺麗にした。
JSON を書かずに算術的にやってもいいんだけど、わかりにくくなるのでこの実装を選んだ。
C言語なら算術的に行くところだと思う。

今朝未明の実装が気に入らなかったのは、秤 を2回しか使っていないことが伝わりにくかったところ。今回は balance という関数にしたのでわかりやすいでしょ。

テストもちょっと増強した。

それにしても function の綴りが長い。
このソースコードの非空白文字に占める function の割合は 9.5%。
LinearLayoutのorientation記入漏れを防ぐ方法

レイアウトXMLの **LinearLayoutでorientation属性を書き忘れて** 
意図しない方向に配置され訳分からんことになったこと、
Android開発者のかなりの割合が経験しているのではないでしょうか？

今回はそれを防ぐ簡単な方法の紹介です。

やり方
----------------------------
(0)android.widgetパッケージを作る（必須じゃないです、別パッケージでもOK)
(1)該当パッケージにHorizontalLayoutクラスを作る

```java:HorizontalLayout.java
public class HorizontalLayout extends LinearLayout {
    public HorizontalLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        super.setOrientation(LinearLayout.HORIZONTAL);
    }
    //他のコンストラクタも同じように実装する
}
```

(2)同じようにしてVerticalLayoutを作る


これだけです。
あとはXMLファイルに HorizontalLayout、VerticalLayoutを使って作成します。
こうするればorientation属性を書く必要がないので記入漏れを確実に防げます。

> android.widgetパッケージに作成すると、```<HorizontalLayout .... >``` というように、
> パッケージ名不要、クラス名だけでXMLに記述可能というメリットがあります。
> （いうまでもなくAndroid内部の実装が変わるとアウトです、自己責任で）
> デメリットとしてはEclipse等でのグラフィカルレイアウトが正常動作しなくなりますが
> 自分はあまり使わない＆自作Viewをよく使う都合で表示されないことが多く気にしてません


もう一つのメリット
-------------------------------
また、縦と横でタグが別になるので込み入ったレイアウトファイルの可読性がちょっとあがります

```xml:使わない場合
<LinearLayout
    orientation="vertical"
>
  <!-- 他のView-->
  <LinearLayout
    orientation="horizontal"
  >
    <!-- 他のView-->
  </LinearLayout>
</LinearLayout> <!--閉じタグが一緒。縦横どっち？-->
```

orientation属性を見ないと縦横判別できないのでXMLが長くなると面倒です。
今回作ったクラスに置き換えてみましょう。

```xml:使う場合
<VerticalLayout
>
  <!-- 他のView-->
  <HorizontalLayout
   >
    <!-- 他のView-->
  </HorizontalLayout>
</VerticalLayout> <!--閉じタグが別。かつ縦方向の終端とわかる-->
```
 
orientation不要、かつ縦横どっちの閉じタグかわかり読みやすいです。

まぁそこまで込み入ったレイアウトファイルなら ```include``` を使うほうがいいかもですが...

ただ **記入ミスが防げる、タグ名だけで縦横の判別が可能** というのは意外と大きい効果があります。
単純にorientationを記入する手間も減りますし。
実装自体も非常にお手軽なのでぜひやってみてください。


より厳密にしたい場合、Horizontal(Vertical)LayoutのsetOrientationを呼び出すと例外を投げるようにしておくといいでしょう。
Mac OS Xで、自作プログラムにmrubyを組み込み、C言語からrubyスクリプトを実行させ、rubyからC言語の関数を呼び出す

組み込みrubyです。自作プログラムにmrubyを組み込みます。mrubyからCの関数を呼び出せるようにしておけば、自作プログラムをrubyで拡張できるようになります♪

「[Mac OS Xでmrubyをビルドしてみる](http://qiita.com/ShinichiOkayama/items/5d7af9176bb9ec870365)」でインストールしたmrubyを使います。ビルド時のパスに気を付けてください。

# 1. rubyから呼び出されるメソッドを用意する

まずは、rubyから呼び出されるメソッドを用意しましょう。今回はサンプルなので、パラメータ無し、戻り値無し、文字を表示するだけのメソッドです。

```C++
// この関数を、Okaモジュールに追加し、ruby側から呼び出される関数
static mrb_value oka_func(mrb_state *mrb, mrb_value self) {
    puts("This is oka_func!") ;
}
```

見ての通り、`mrb_value`型を返す、`oka_func`という名前の関数です。パラメータは２つあり、１つは`mrb_state*`型、もう一つは`mrb_value`型です。

# 2. C言語でmrubyを動かす

## 2.1. mrb_open()
最初に`mrb_open()`します。

```C++
mrb_state *mrb ;

mrb = mrb_open() ;
```

mrubyの実行環境は、この`mrb_state`の中に入っているようです。これは、単なる構造体なので、複数の変数を用意すれば、それぞれ互いに独立したmruby実行環境となるようです。

## 2.2. モジュールの定義
mrbに対して、Okaモジュールを追加します。

```C++
struct RClass *mdlOka ;

mdlOka = mrb_define_module(mrb, "Oka") ;
```
これで、Okaモジュールが追加されました。でもまだメソッドが何もありません。追加しましょう。

## 2.3. メソッドの追加
Okaモジュールが追加されているmrbに、1.で定義した`oka_func()`を追加します。

```C++
mrb_define_class_method(mrb, mdlOka, "oka_func", oka_func, ARGS_NONE()) ;
```

## 2.4. rubyスクリプトを用意する
では、Okaモジュールのoka_func()メソッドを呼び出すrubyスクリプトを、C言語の文字列として用意しておきましょう。
今回はサンプルなので文字列をC言語プログラムに埋め込みますが、この部分をファイルから読み込みようにすれば、自プログラムをrubyスクリプトでカスタマイズできるようになるわけです♪

```C++
cosnt char* code = "Oka.oka_func()" ;
```

## 2.5. 実行する
あとは、動かすだけです。

```C++
mrbc_context *c = mrbc_context_new(mrb) ;
struct mrb_parser_state* st = mrb_parse_string(mrb, code, c) ;
int n = mrb_generate_code(mrb, st) ;
mrb_pool_close(st->pool);
mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_nil_value()) ;
```

# 3.ソース
全体のソースは、こうなっています。

```mruby_oka.c
#include <mruby.h>
#include <mruby/proc.h>
#include <mruby/compile.h>

// この関数が、Okaモジュールに追加される
static mrb_value oka_func(mrb_state *mrb, mrb_value self) {
    puts("This is oka_func!") ;
}

int main() {
    // ruby script
    const char* code = "Oka.oka_func()";

    // mrubyの準備
    mrb_state* mrb = mrb_open() ;

    // `Oka`モジュールの定義
    struct RClass *mdlOka = mrb_define_module(mrb, "Oka") ;
    // 'oka_func()'メソッドを'Oka'モジュールに追加
    mrb_define_class_method(mrb, mdlOka, "oka_func", oka_func, ARGS_NONE()) ;

    // 実行！
    mrbc_context *c = mrbc_context_new(mrb) ;
    struct mrb_parser_state* st = mrb_parse_string(mrb, code, c) ;
    int n = mrb_generate_code(mrb, st) ;
    mrb_pool_close(st->pool);
    mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_nil_value()) ;
    mrb_close(mrb);
}
```

# 4.ビルド
```
$ gcc -I../Downloads/mruby-master/include mruby_oka.c ../Downloads/mruby-master/build/host/lib/*.a -lm -o mruby_oka.exe
```
「[Mac OS Xでmrubyをビルドしてみる](http://qiita.com/ShinichiOkayama/items/5d7af9176bb9ec870365)」でインストールしたmrubyを使っているので、上記のようなパスを指定しています。ご自身の環境に会わせてパスを書き換えてください。

※ 自分で作成した実行ファイルは、拡張子にexeを付けるようにしています、Mac OS上やLinux上では。

# 5. 実行
できあがったmruby_oka.exeを実行します。

```
$ ./mruby_oka.exe 
This is oka_func!
$ 
```
これで、oka_func()が実行されているのがわかります。oka_func()は、文字列埋め込みしたrubyスクリプトから呼び出されています。rubyスクリプトはmain()の中で実行しています。
つまり、C言語→rubyスクリプト→C言語という順番で呼び出されています♪
Riak docs の 2i Examples を意訳してみた


# Secondary Index Examples

大雑把な意訳、理解が苦しい箇所は英文と一緒に転載します
http://docs.basho.com/riak/1.3.2/tutorials/Secondary-Indexes---Examples/

2013/07/04 追記: もっと素晴らしい全訳が Github にありました。
https://github.com/basho/basho_docs/blob/1.3.0/source/languages/jp/riak/tutorials/Secondary-Indexes---Examples.md

## Overview

例を試すには、Riak を localhost:8098 で HTTP Protocol を使用できるように動かしてください。またインデックスに対応したバックエンドストレージを使う設定を行なってください。

## Index Objects

次の例は、4 つの異なる Object にインデックスを付けます。

```sh
curl -v -XPUT \
-d 'data1' \
-H "x-riak-index-field1_bin: val1" \
-H "x-riak-index-field2_int: 1001" \
http://127.0.0.1:8098/riak/mybucket/mykey1

curl -v -XPUT \
-d 'data2' \
-H "x-riak-index-Field1_bin: val2" \
-H "x-riak-index-Field2_int: 1002" \
http://127.0.0.1:8098/riak/mybucket/mykey2

curl -v -XPUT \
-d 'data3' \
-H "X-RIAK-INDEX-FIELD1_BIN: val3" \
-H "X-RIAK-INDEX-FIELD2_INT: 1003" \
http://127.0.0.1:8098/riak/mybucket/mykey3

curl -v -XPUT \
-d 'data4' \
-H "x-riak-index-field1_bin: val4, val4, val4a, val4b" \
-H "x-riak-index-field2_int: 1004, 1004, 1005, 1006" \
-H "x-riak-index-field2_int: 1004" \
-H "x-riak-index-field2_int: 1004" \
-H "x-riak-index-field2_int: 1004" \
-H "x-riak-index-field2_int: 1007" \
http://127.0.0.1:8098/riak/mybucket/mykey4
```

次の例は、インデックスの項目に無効な名前あるいはタイプを指定した場合に何が起きるかを実際にやってみます。システムは 400 Bad Request とエラー内容を示すレスポンスを返します。

```sh
curl -XPUT \
-d 'data1' \
-H "x-riak-index-field2_foo: 1001" \
http://127.0.0.1:8098/riak/mybucket/mykey

# Response
Unknown field type for field: 'field2_foo'.

curl -XPUT \
-d 'data1' \
-H "x-riak-index-field2_int: bar" \
http://127.0.0.1:8098/riak/mybucket/mykey

# Response
Could not parse field 'field2_int', value 'bar'.
```

## Exact Match Query

次の例は、HTTP インタフェースを使用して、インデックスにマッチする結果を取得します。

```sh
# Query a binary index...
curl http://localhost:8098/buckets/mybucket/index/field1_bin/val1

# Query an integer index...
curl http://localhost:8098/buckets/mybucket/index/field2_int/1001
```

## Range Query

HTTP インタフェースを使用して、Range Querey を実行する例です。

```sh
# Query a binary index...
curl http://localhost:8098/buckets/mybucket/index/field1_bin/val2/val4

# Query an integer index...
curl http://localhost:8098/buckets/mybucket/index/field2_int/1002/1004
```
## Retrieve all object keys in a bucket based on the $bucket index

bucket "mybucket" に格納されている全ての Object の keys を検索する例です。

```sh
curl http://localhost:8098/buckets/mybucket/index/\$bucket/_
```

## End

実際に試してみなきゃ、わかんねーな
HTTP通信実装


Httpで情報を取得するロジック

>URL url = new URL("http://XXX.jp");

>URLConnection uc = url.openConnection();
>InputStream content = (InputStream)uc.getInputStream();
BufferedReader in   =
         new BufferedReader (new InputStreamReader (content));

>String line;

>while ((line = in.readLine()) != null) {
    result.append(line);
  }

>in.close();


このままだとエラーが出た
Server returned HTTP response code: 401 for URL:
basic認証を使うようにソースを書き換えた


Basic認証の対応

>URL url = new URL("http://ipros.jp");

>String passwdstring = "id:password";
String encoding = new
       sun.misc.BASE64Encoder().encode(passwdstring.getBytes());

>URLConnection uc = url.openConnection();
uc.setRequestProperty("Authorization", "Basic " + encoding);

>InputStream content = (InputStream)uc.getInputStream();
BufferedReader in   =
         new BufferedReader (new InputStreamReader (content));

>String line;

>while ((line = in.readLine()) != null) {
    result.append(line);
  }

>in.close();
第10回オフラインリアルタイムどう書くの参考問題 Erlang による実装

http://nabetani.sakura.ne.jp/hena/ord10pokarest/
「ポーカーの残り＋」をErlangでやってみました。2時間以上かかりました。

最初に5枚のカードと、そこから4枚取った組み合わせ(drop1)を合わせたリストを作っています。

ストレートとフラッシュの判定は4枚、5枚の両方に対応しています。

Erlangはアトム(royalとかstraightとかflushなど)を値として使えるので、判定部分(hand2)は若干わかりやすく書けました。

各関数は手抜きをして末尾再帰していません。

```erlang:poker.erl
-module(poker).
-compile(export_all).

hand(Data) ->
  X1 = to_array(Data),
  X2 = [X1 | drop1(X1)],
  X3 = lists:map(fun to_flug/1, X2),
  element(2, lists:min(lists:map(fun hand2/1, X3))).

hand2(X) ->
  case X of
    {5, royal, straight, flush} -> {1, "RF"};
    {5, _, straight, flush}     -> {2, "SF"};
    {5, _, _, flush}            -> {3, "FL"};
    {5, _, straight, _}         -> {4, "ST"};
    {4, _, straight, flush}     -> {5, "4SF"};
    {4, _, _, flush}            -> {6, "4F"};
    {4, _, straight, x}         -> {7, "4S"};
    {_, _, _, _}                -> {9, "-"}
  end.

to_flug(X) ->
  {Straight, Royal} = is_straight(X),
  {length(X), Royal, Straight, is_flush(X)}.

drop1(Data) ->
  lists:foldl(fun(X, L) -> [lists:delete(X, Data) | L] end, [], Data).

to_array([]) -> [];
to_array([H|T]) ->
  S = hd(T), R = tl(T),
  case H of
    $K -> [{S, 13} | to_array(R)];
    $Q -> [{S, 12} | to_array(R)];
    $J -> [{S, 11} | to_array(R)];
    $1 -> [{hd(tl(T)), 10} | to_array(tl(R))];
    $A -> [{S, 1}  | to_array(R)];
    X  -> [{S, X - $0} | to_array(R)]
  end.

suite(L) -> [element(1, X) || X <- L].
rank(L)  -> [element(2, X) || X <- L].

is_straight(L) ->
  L2 = lists:sort(rank(L)),
  First = hd(L2),
  case [X - First + 1 || X <- L2] of
    [1,10,11,12,13] -> {straight, royal};
    [1,11,12,13]    -> {straight, royal};
    [1,2,3,4,5]     -> {straight, x};
    [1,2,3,4]       -> {straight, x};
    _               -> {x,        x}
  end.

is_flush(L) -> is_flush2(suite(L)).
is_flush2([S,S,S,S,S]) -> flush;
is_flush2([S,S,S,S])   -> flush;
is_flush2(_)           -> x.

tests() ->
  test("Qs9s3dJd10h", "4S"), % #0
  test("KdAdJd10dQd", "RF"), % #1
  test("Js10sAsQsKs", "RF"), % #51
  test("10dKdQdAdJd", "RF"). % #52

test(Data, Expected) ->
  Result = hand(Data),
  io:fwrite("~p: ~s -> ~s~n", [Result =:= Expected, Data, Result]).
```
LWPでOauthクリア。とりあえずTwitterのタイムライン取得。

Net::Twitter なんかのモジュールがあれば、簡単にOAuth認証ができてるんだけど、レンタルサーバレベルでは基本入ってないので、LWPで認証をクリアしちゃいましょう。サンプルで、jsonで取得した内容を表示しています。
（アプリ登録は事前に済ましてね）

```pl:hoge

use LWP::UserAgent;
use HTTP::Request::Common qw(GET);

my $Auth = qq|OAuth oauth_consumer_key="******", oauth_nonce="******", oauth_signature="******", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1372223529", oauth_token="******", oauth_version="1.0"|;

my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new( GET => 'https://api.twitter.com/1.1/statuses/user_timeline.json?count=2&user_id=******');
$req->header('Authorization' => $Auth);

my $res = $ua->request($req);

print "Content-Type: text/html\n\n";
print $res->as_string;
exit;
```
要はヘッダーに認証系の情報いれるだけなので、ソケット通信でもいけそうです。（未検証）
認証に必要は情報は、公式ドキュメントに書いてます。OAuth toolを使って「Authorization header」の部分を使用します。
https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline
UnicornのWorkerプロセスをリサイクルする

Web サーバやアプリケーションサーバは、リクエスト数やメモリ使用量がある閾値を超えたらプロセスの再起動を行う仕組みが用意されています。
Apache にも IIS にもそのための設定項目が用意されていて、この仕組みを一般にリサイクルと呼ぶようです。
UA からのリクエストをさばくワーカープロセスが疲弊せず、パフォーマンスを維持するための仕組みですね。

Ruby で人気のアプリケーションサーバである Unicorn ですが、残念ながらこのリサイクルの機能を持っていません。
どうにかできないかなーと思って調べていたら、この短所を補完する Gem がリリースされていました。

[Unicorn Worker Killer | github](https://github.com/kzk/unicorn-worker-killer)

そのまんまですね。

---------------------------------------

この Gem でできるのは、以下のようなリサイクルです。

・一定のリクエスト数を超えたらランダムで再起動する（上限に達したら必ず再起動）。
・一定のメモリ使用量を超えたらランダムで再起動する（上限に達したら必ず再起動）。

公式そのまま引用すると、以下のような設定を行うことになります。

```rb:config.ru
 # Unicorn self-process killer
require 'unicorn/worker_killer'

 # Max requests per worker
use Unicorn::WorkerKiller::MaxRequests, 3072, 4096

 # Max memory size (RSS) per worker
use Unicorn::WorkerKiller::Oom, (192*(1024**2)), (256*(1024**2))
```

リクエスト数もメモリ使用量も、値が二つあります。最初はなんで？と思いますよね。
公式の解説を読む限り、上限値ひとつにしなかったのは、複数のワーカープロセスの再起動タイミングの足並みが揃わないようにするため、ということらしいです。

実際に使用してみると、以下のようなログを吐くようになります。

```
Jun 19 13:57:52 jobhub app/web.3:  W, [2013-06-19T13:57:52.262901 #10]  WARN -- : Unicorn::WorkerKiller send SIGQUIT (pid: 10) alive: 68769 sec (trial 1) 
Jun 19 14:10:36 jobhub app/web.3:  W, [2013-06-19T14:10:36.849141 #14]  WARN -- : #<Unicorn::HttpServer:0x00000002963690>: worker (pid: 14) exceeds memory limit (211341312 bytes > 211015086 bytes) 
```

---------------------------------------

一度決めてしまえばそんなに頻繁に変えない設定項目だと思いますが、ApacheBench や JMeter などで負荷テストをしながらおいしい値を探る場合、デプロイを繰り返すのは少々面倒です。
弊社では heroku で運用していることもあり、以下のように環境変数を使用するように変更しました。


```rb:config.ru
# Unicorn self-process killer
require 'unicorn/worker_killer'

max_request_min =  ENV['UNICORN_MAX_REQUEST_MIN']&.to_i || 3072
max_request_max =  ENV['UNICORN_MAX_REQUEST_MAX']&.to_i || 4096

# Max requests per worker
use Unicorn::WorkerKiller::MaxRequests, max_request_min, max_request_max

oom_min = ((ENV['UNICORN_OOM_MIN']&.to_i || 250) * (1024**2))
oom_max = ((ENV['UNICORN_OOM_MAX']&.to_i || 300) * (1024**2))

# Max memory size (RSS) per worker
use Unicorn::WorkerKiller::Oom, oom_min, oom_max
```

まあ[こちら](http://mycatwantstolearnrails.blogspot.jp/2013/04/heroku-unicorn-request-backlog.html)をマネしたんですけどねw


ちなみに、Gem の作者は 日本発のBigData取り扱いサービスである、 [TreasureData](http://www.treasure-data.com) の中の人のようですね。
作者が日本人って、なんとなく嬉しくなります。
StoreKit.frameworkでKPaymentTransactionStatePurchasedが繰り返される現象

StoreKitで課金処理をする時
一つのクラスの中ですべての処理を済ませたい為

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

と宣言しています。
これをdealloc内で

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];

とオブザーバを消してあげないと二重で処理が起きてしまいます。

ここで詰まったのでメモ
Debian Jessie でThinkpad のトラックポイントのスクロールを有効にする

Wheezy と同じように以下のファイルを用意するだけでok だった．
x61s & x220 で確認．

```/etc/X11/xorg.conf.d/20-thinkpad.conf
Section "InputClass"
     Identifier "Trackpoint Wheel Emulation"
     MatchProduct       "TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|USB Trackpoint pointing device"
     MatchDevicePath    "/dev/input/event*"
     Option             "EmulateWheel"          "true"
     Option             "EmulateWheelButton"    "2"
     Option             "Emulate3Buttons"       "false"
     Option             "XAxisMapping"          "6 7"
     Option             "YAxisMapping"          "4 5"
 EndSection
```

参考URL
  * [InstallingDebianOn/Thinkpad/Trackpoint - Debian Wiki](http://wiki.debian.org/InstallingDebianOn/Thinkpad/Trackpoint)
git archiveで日本語を含むファイルの差分抽出できない場合の別案

windowsのpowershell上でgit archiveによる差分ファイルの抽出をしたけど
日本語を含むファイルがzipに含まれてなかったので別案を考えてみた。

実行したのは以下のコマンド
```ps1:
git archive --format=zip head $(git diff head head~1 --name-only) -o update_files.zip
```

7zを使用すると目的が達成できる

```ps1:
#一つ前のコミットから差分ファイルの一覧を抽出する場合
$diff = "HEAD~1"
#日本語ファイル名の文字化けを防ぐため一時的にコンソールをutf-8に変更
$enc = [console]::OutputEncoding; 
[console]::OutputEncoding = [text.encoding]::utf8
$targets = invoke-expression "git diff --name-only $diff  | % -begin {`$script:a = `"`";} -proc {`$script:a += `"'`" + `$_ + `"' `" } -end {`$script:a}";
[console]::OutputEncoding = $enc;
#ファイルの圧縮を実行
invoke-expression "``7z a update_files.zip $targets"
```

注意点としては、現在のワークツリーが圧縮されるので任意のコミット間の差分抽出にはならない。
面倒だけどgit checkoutするなりしなければならないが目的は達成できる。
sassをブラウザでコンパイルして確認できるサイトを作成しました。


##[Sass Preview](http://sass.prinum.net/)


![Sass Preview.png](https://qiita-image-store.s3.amazonaws.com/0/6561/b8c827cd-aa73-c6a0-55f6-41f711b9afab.png "Sass Preview.png")


##使い方
左側のSassのtextareaにsassのコードを入力して、Compileボタンを押すか、
またはie以外のブラウザでは、`cmd+s` or `ctrl+s`を押すとコンパイル結果が右側に表示されます。

sassの文法を軽く確認したいときに使うといいと思います。

###指定できるoption

- syntax
	- scss
	- sass

- style
	- nested
	- expanded
	- compact
	- compressed
- line_numbers

##技術解説

sassはrubyのコードで`Sass::Engine.new`を用いてsassをコンパイルができるので、
サーバーはajaxでscss文字列を受け取り、コンパイル結果をブラウザに返しています。

[using_sass](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#using_sass)この辺りに書いてあります。

```ruby
engine = Sass::Engine.new(content,  #contentはscss文字列。
  :syntax => :nested, 
  :style => :scss, 
  :line_numbers => false
)
engine.render #返り値はcss文字列。
```
TwitterAPI v1.1(GET限定)に簡単アクセス

要oauth.js, sha1.js

Consumer key
Consumer secret
をさらさないとダメなので、他の人に勝手に使われるよなあ
でもしょうがないよなあ

@ktty1220 さんによる[別バージョン](http://qiita.com/ktty1220/items/d8d5a5755cd6933a0c6f)もあります

```html:index.html

<head>
<script src="http://oauth.googlecode.com/svn/code/javascript/oauth.js"></script>
<script src="http://oauth.googlecode.com/svn/code/javascript/sha1.js"></script>
<script src="getTwitterAPI.js"></script>
</head>

```


```js:getTwitterAPI.js

// あらかじめアプリ登録して取得
var CONSUMER = {
	"key" : XXXXXXXXXXXXXXX,
	"secret" : XXXXXXXXXXXXXXXX	
};

// ユーザの自前アカウントで取ってきてもらってもいいし、アプリ固有のを埋め込んでもいい
var ACCESS = {
	"screen_name" : false,
	"key" : false,
	"secret" : false
};

// url : APIのURL。GETクエリを含むもの
// callBackFunc : コールバック関数　第一引数にAPIアクセスの結果が連想配列のObjectで渡る
// onerror : Functionをセットすると、scriptタグ埋め込みに失敗した時の挙動を定義可
function getTwitterAPI(url, callBackFunc, onerror){
	var parameters = {
		oauth_signature_method: "HMAC-SHA1",
		oauth_consumer_key: CONSUMER['key'],
		oauth_token: ACCESS['key'],
		callback: callBackFunc
	};
	var api_url = url;
	var message = {
		method: "GET",
		action: api_url,
		parameters: parameters
	};
	var secretKeys = {
		"consumerSecret" : CONSUMER['secret'],
		"tokenSecret" : ACCESS['secret']
	};

	OAuth.setTimestampAndNonce(message);
	OAuth.SignatureMethod.sign(message, secretKeys);
	var signed_url = OAuth.addToURL(api_url, parameters);

	var ele = document.createElement("script");

	if(is('Function', onerror)){
		ele.onerror = onerror;
	}

	var head = document.getElementsByTagName('head').item(0);
	ele.type = "text/javascript";
	ele.src = signed_url;
	head.appendChild(ele);
}

function is(type, obj) {
	var clas = Object.prototype.toString.call(obj).slice(8, -1);
	return obj !== undefined && obj !== null && clas === type;
}
```


```js:使用例

getTwitterAPI('https://api.twitter.com/1.1/application/rate_limit_status.json?resources=users', 'callback_limit');
function callback_limit(json){
	var limitHash = json;
	console.log(limitHash);
}


```
別ブランチの一部の変更のみをmasterに取り込みたい時


- `<begin>`を別ブランチ内の取り込みたい部分の根本となるhash
- `<end>`を別ブランチ内の取り込みたい部分の終端となるhash

として、以下のように打てば良い。

```
git rebase --onto master <begin> <end>
```

もちろん、安全のためにも、

```
git checkout -b <topic-name>
git rebase --onto master <begin> <end>
```

と新しいブランチを作ってからやると、やりたいことが定まったブランチ名でpull requestが送れるしとても良い。


ちなみに、このやり方は`git help rebase`の以下の部分を見て学んだ。よく出来たマニュアルで助かる。

```bash:git-rebase
First let's assume your topic is based on branch next. For example, a feature developed in topic depends on some functionality which is found in
       next.

               o---o---o---o---o  master
                    \
                     o---o---o---o---o  next
                                      \
                                       o---o---o  topic


       We want to make topic forked from branch master; for example, because the functionality on which topic depends was merged into the more stable
       master branch. We want our tree to look like this:

               o---o---o---o---o  master
                   |            \
                   |             o'--o'--o'  topic
                    \
                     o---o---o---o---o  next


       We can get this using the following command:

           git rebase --onto master next topic
```
gitで編集しようとしたら　error: There was a problem with the editor 'vi'. って出てくる問題

[[Mac][git]error: There was a problem with the editor 'vi'. - Hack Your Design!](http://blog.toshimaru.net/macgiterror-there-was-a-problem-with-the-edit/)

より

```bash:
$ git config --global core.editor /usr/bin/vim
```

と明示的に示してあげること

###2013/06/27追記

[alpaca_taichou](http://qiita.com/alpaca_taichou)さんのコメントより

```bash:
export GIT_EDITOR=...
```

でもできるらしいです。情報ありがとうございます!!!
Photon Cloud × Unity GameJam 資料


## 10:00~ 説明
Unity部資料 :  [http://www.slideshare.net/keigoando/photoncloudunity](http://www.slideshare.net/keigoando/photoncloudunity)




* [Photon Cloud × Unity GameJam 資料](http://qiita.com/kyusyukeigo/items/2447e2a2cc66b8b3bbcd)

## Photon Cloud
* [Photon Cloud × Unity GameJam 事前勉強会資料](http://qiita.com/kamayuki_fs/items/a67bf9971ebb24703bf1)

* [Photon Cloud × Unity GameJam 事前勉強 - Rigidbodyの同期](http://qiita.com/kyusyukeigo/items/0a982c0d41937954aa32)

* [Photon Cloud × Unity GameJam 事前勉強 - RPC](http://qiita.com/kyusyukeigo/items/0ccb153b39de153d02a8)

* [[Unity]Photon Cloud関連まとめ](http://terasur.blog.fc2.com/blog-entry-506.html)

* PublicAPI が載っている場所
PhotonNetwork-Documentation.pdfの33ページ
　![Screen Shot 2013-06-29 at 14.54.30.png](https://qiita-image-store.s3.amazonaws.com/0/5549/6a358fde-e181-6f86-ffd5-e9ae1d2809a1.png "Screen Shot 2013-06-29 at 14.54.30.png")



## ADX2LE

* [オススメ！ 自力でゲームのSEを生成する方法　by 「ADX2 LE」](http://www.slideshare.net/takaakiichijo/adx2-le-21311331)
* [ADX2LE クイック導入ガイド](http://www.slideshare.net/takaakiichijo/adx2-leunity-23607481)

##OPTPiX SpriteStudio
* [SpriteStudio Player for Unity ～Unityとの連携～](http://www.webtech.co.jp/spritestudio/unity3d.html)
Photon Cloud × Unity GameJam 資料


#GMOクラウドPublic
 ssh root@153.122.xx.xxx

#Webdav


Windows : クライアント使うと便利 http://freesoft-100.com/pasokon/ftp.html
Mac : [Mac OSXでWebDAVに接続する方法](http://obakenote.com/mac/67/)

#CacheServer

参考 

 [[Unity]さくらVPSにCacheServer(キャッシュサーバー)を入れる](http://anchan828.tumblr.com/post/33638038336/unity-vps-cacheserver)

#AssetServer

参考
[[公式Manual]アセットサーバー](http://docs-jp.unity3d.com/Documentation/Manual/AssetServer.html)

[Asset server（管理者編）](http://www.slideshare.net/keigoando/asset-server-11215484) / [Asset server(ユーザー編)](http://www.slideshare.net/keigoando/asset-server)

* パスワードリセット 

```
 /opt/unity_asset_server/bin/reset_admin_password
```

* 再起動

```
/etc/init.d/unity_asset_server restart
```

* 何か他やりたいことあるなら

```
cd /opt/unity_asset_server/bin/
```
Google Maps Android API v2 を使ったマップ表示


> Android Studio ベースの内容に改訂。
> * Android Studio 1.0.2
> * Android SDK 5.0.1 (API21)
> * Play Services 6.5.87

## 参考サイト

https://developers.google.com/maps/documentation/android/start

## 手順

### Play Services をプロジェクトに追加

* メニュー `File` > `Project Structure...` を開く。
* `Dependencies` タブ下の `+` をクリックし、`Library dependency...` を選択。
* `play-services` を選択して `OK`

### レイアウトの編集

* `activity_main.xml` を開く。
* Palette にある `<fragment>` をクリック後、`MapFragment` を選択。
* Properties の `Id` を `map` に変更。
* `layout:width` と `layout:height` を `match_parent` に変更。

### コードの編集

MainActivity.onCreate() を次のようにする。

```java:MainActivity.java
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

        LatLng latlng = new LatLng(35.710065, 139.8107);
		
        MapFragment fragment = (MapFragment)getFragmentManager().findFragmentById(R.id.map);
        GoogleMap map = fragment.getMap();
        if (map != null) {
            map.addMarker(new MarkerOptions().position(latlng).title("Skytree"));
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 15));
        }
    }
```

### API キーの取得

* Google アカウントを取得し、Google APIs のコンソールに入る。
* API プロジェクトを作成。
* Services で "Google Maps Android API v2" を ON にする。
* API Access で "Create new Android key..." を実行。
    * 表示されている API key を覚えておく。
    * デバッグ用途だけなら fingerprint の登録不要(Any apps allowed で OK)。

### AndroidManifest.xml の編集

manifest タグの下に以下を追記。

```xml:
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>
>
```

また application タグの下に以下を追記。
"YOUR-API-KEY" のところは取得した API key に置き換える。

```xml:
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="YOUR-API-KEY"/>
```

## 動作確認

Nexus 5 実機および Emulator で動作することを確認した。
バージョンを指定して gem を実行する



```
$ [コマンド] _[バージョン]_
```

とすれば良い。

(例)

```
$ gem list rails

*** LOCAL GEMS ***

rails (4.0.0, 4.0.0.rc2, 3.2.13)

$ rails --version
Rails 4.0.0

$ rails _3.2.13_ --version
Rails 3.2.13

$ rails _3.2.13_ new old_rails
$ head -3 old_rails/Gemfile
source 'https://rubygems.org'

gem 'rails', '3.2.13'
```

## きっかけ

rvm を使っている時に rails アプリをつくろうと思ったら、

1. 新しい gemset を create && use
* gem i rails --version XXX

と、必ずまっ更な gem 環境に rails をインストールしてたので、`rails new` するときは必ず gem install したバージョンで実行できていた。

rbenv に乗り換えてから、複数バージョンの gem が同居するようになったため、例えば `rails 4.0.0` と `rails 3.2.13` がインストールしてある状態で、`rails 3.2.13` で rails new する方法が分からない事に気付いたのがきっかけ。
Photon Cloud × Unity GameJam 事前勉強 - RPC


### RPCとは
http://e-words.jp/w/RPC.html

簡単に言うと全てのPCで同じメソッドを実行する仕組みですね
この機能自体はUnityのRPCを使用しているので調べる時は「Unity RPC」で調べてみるといいかもしれません

サンプルとしてある「DemoBoxes」の *OnAwakePhysicsSettings.cs* にコードを追加して試してみました

![Screen Shot 2013-06-26 at 12.42.46.png](https://qiita-image-store.s3.amazonaws.com/0/5549/dbd371b2-f1ff-dd50-18b8-7b9f837c5011.png "Screen Shot 2013-06-26 at 12.42.46.png")



```OnAwakePhysicsSettings.cs
using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(PhotonView))]
public class OnAwakePhysicsSettings : Photon.MonoBehaviour
{

	// this tiny script "disables" the rigidbody for remotely controlled GameObjects (owned by someone else)
	void Awake ()
	{
		if (!this.photonView.isMine) {
			Rigidbody attachedRigidbody = this.GetComponent<Rigidbody> ();
			if (attachedRigidbody != null) {
				attachedRigidbody.isKinematic = true;
			}
		}
	}

	///追加
	void OnMouseDown ()
	{
		// Boxをクリックしたら色が変わる
		photonView.RPC ("ChangeColor", PhotonTargets.All);
	}
	///追加
	[RPC]
	void ChangeColor ()
	{
		renderer.material.color = Color.red;
	}
}
```

## チャットの仕組み

RPCを理解していれば簡単に作成出来ます

```ChatSample.cs
using UnityEngine;
using System.Collections.Generic;

[RequireComponent(typeof(PhotonView))]
public class ChatSample : Photon.MonoBehaviour
{

	List<string> list = new List<string> ();
	string message = "";

	void OnGUI ()
	{
		//メッセージ入力
		message = GUILayout.TextField (message);
		
		//メッセージ送信
		if (GUILayout.Button ("Send")) {
			photonView.RPC ("AddMessage", PhotonTargets.All, message);
			message = "";
		}
		
		//メッセージ表示
		foreach (var text in list) {
			GUILayout.Label (text);
		}
	}

	[RPC]
	void AddMessage (string text)
	{
		list.Add (text);
	}
}
```
Virtualboxの仮想マシンをコマンドラインから操作

既出ですが

## 一覧表示
```bash:
$ VBoxManage list vms
"ubuntu_130464" {2cbe2351-acc8-4a11-9636-d2a4827e3eaa}
"windowsxp" {431511a2-42ae-419d-9395-4d90b20f1b24}
```

## 起動
```bash:
$ VBoxManage startvm "windowsxp" --type headless
```

## 起動中一覧
```bash:
$ VBoxManage list runningvms
```

## シャットダウン開始
```bash:
$ VBoxManage controlvm ubuntu_130464 acpipowerbutton
$ VBoxManage controlvm windowsxp acpipowerbutton
```

## 電源OFF
```bash:
$ VBoxManage controlvm ubuntu_130464 poweroff 
$ VBoxManage controlvm windowsxp poweroff
```


## サスペンド
```bash:
$ VBoxManage controlvm ubuntu_130464 savestate
$ VBoxManage controlvm windowsxp savestate
```
「ファイルがあります」というエラー

windowsで唐突に出るエラーです。原因は一時ファイルが65535超えるとファイルネームが重複して、一時ファイルのcreateで失敗→唐突にio exception。

解決方法は下記の一時ファイル置き場の掃除です

* C:Windows\Temp
* C:\users\ユーザネーム\AppData\Local\Temp

ちなみに英語の場合は「The File Exists」になります。日本語で調べると何も出てきません。

ソース：http://blog.dileno.com/archive/201103/fixing-the-file-exists-ioexception-error/

Windowsは古い伝統を守る子。
複数ファイルの改行コードを一括置換しちゃう


gitを使っていてたまに発生する現象。
それは**改行コードがCRLFに変換される**こと。。。
違うOSを使って共同作業をしていてこれが発生しました。
（WindowsとMac）
`.sh`の改行コードがCRLFになっていると`.sh`が実行できなくなるので、
手っ取り早く改行コードを置換してしまいましょう。

```bash:置換
# .shだけLFに置換
find . -name \*.sh -type f | xargs -n 10 nkf -Lu --overwrite

# ファイルは全てLFに置換
find . -type f | xargs -n 10 nkf -Lu --overwrite
```

##コマンド解説

```bash:改行コード確認
od -c replace-schema.sh
# 以下の表示になってる部分が改行コード
# \r \n => CRLF
# \n    => LF
```

```bash:ファイル検索
find . -type f -name \*.sh  
# -type f => ファイルのみ検索
# -name \*.sh => .shのみ検索

# -nameの複数指定
find . \( -name \*.c -o -name \*.cc -o -name \*.h -o -name \*.hh \) -print
```

参考：http://d.hatena.ne.jp/stakizawa/20080522/t1 

```bash:豆知識
# 引数を10個ずつ渡す
xargs -n 10 

# ファイルの改行コードをLFにして上書きする
nkf -Lu --overwrite
# -Lu => LF   => UNIX
# -Lw => CRLF => Windows
# -Lm => CR   => Mac

# nkfはMacに入ってなかったので、brewで入れた
# brew install nkf
```

##原因の特定する際には
`.sh`を実行する際には`-xv`オプションをつける。
これで処理の詳細が見えたりする。
ブラウザをメモ帳として機能させる記述

へぇ～って思ったのでメモ。

```html:
data:text/html, <html contenteditable>
```

この記述をブラウザのURL欄に入力すると、ブラウザがメモ帳として使える。
使いどころが悩ましい。
誰か「こういう時に便利！」という方法があれば教えてほしいです。
freemarkerでMapのデータを回す2+1の方法

Javaのテンプレートエンジン freemarker でMapのデータをぐるぐる回して表示させたいとき。

```
<#assign h = {"name":"mouse", "price":50}>
```

上記のようなMapの場合２通りの方法で実現できる。

### ?keysを使う方法
```
<#list h?keys as key>
    ${key} = ${h.get(key)}
</#list>
```
?keysを使うとkeyを一覧で取得できgetを使ってvalueを取得できる。
JavaのkeySetと同じ。

### entrySet()を使う方法
```
<#list h.entrySet() as entry>  
  ${entry.key} = ${entry.value}
</#list>
```
entrySet()を使う方法。
基本的にはこっちのほうがパフォーマンスは良いはず。こっちを使おう。

### キーでソートしたいとき（+1）
```
<#list h?keys?sort as key>
    ${key} = ${h.get(key)}
</#list>
```
?keysは遅いんだけどkeyでソートしたいときは?sortででっきちゃうんで便利。
initスクリプトでserviceを使うことを強制しくれたら楽なのに

[デーモンの起動・終了にはserviceコマンドを利用しよう - インフラエンジニアway - Powered by HEARTBEATS](http://heartbeats.jp/hbblog/2013/06/service-start-stop.html) ていうエントリを見て、なるほどこれは`service`使うべきだなって思った。

でもbash_completionとか入れてないとサービス名の補完されないしやっぱ /etc/init.d/xxx って打ちたくなっちゃうときはあるよね？んで、実行する側がそんなの気にするの面倒じゃん？人は何でも忘れるし。

だから全ての/etc/init.d/xxxスクリプトの先頭にこんなのが書いてあったら楽なのになー。などと妄想したんだけどどうだろう？

```bash
# service を使うことを強制
[[ -n $USER ]] && type service >/dev/null && exec service "${0##*/}" "$@"
```

あ、でもこれだとちゃんと/etc/init.d/xxxに配備されてないスクリプトがテスト出来ない上に本番サービスに誤爆する危険とかあるから駄目か。

```bash
# service を使うことを強制
[[ -n $USER && $0 ~= ^/etc/init¥¥.d/ ]] && type service >/dev/null && exec service "${0##*/}" "$@"
```

とかにしとけばいいか？なんかまだトラブルケースがありそうな予感もする…。やっぱやめたほうが良いかもなｗ
Plack::Builder に登録した Middleware の実行順番

# Intro

Plack::Builder に登録した Middleware がどういう順番で実行されるか。
よくわからなくなってきたので整理。

## Plack::Middleware::* の interface

* prepare_app ... アプリの起動時に1度だけ呼ばれる
* call ... リクエストが飛んできた時に呼ばれる

## sample 実装

### ファイル構成

<pre>
+-- app.psgi
+-- lib
    +-- My
        +-- Middleware
            +-- Sandbox1.pm
            +-- Sandbox2.pm
+-- local
</pre>

### コード

```pl:app.psgi
use strict;
use warnings;
use Plack::Builder;

my $app = sub {
  warn sprintf "main called";
  [ 200, [ 'Content-Type' => 'text/plain' ], [ "Hello PSGI sandbox" ] ];
};

builder {
  enable '+My::M::Sandbox1';
  enable '+My::M::Sandbox2';
  $app;
};
```

```pl:My::M::Sandbox1.pm
package My::M::Sandbox1;

use strict;
use warnings;
use utf8;

use parent 'Plack::Middleware';

sub prepare_app {
  my $self = shift;
  warn sprintf("%s->prepare_app() called.", __PACKAGE__);
}

sub call {
  my ($self, $env) = @_;
  warn sprintf("%s->call() called.", __PACKAGE__);
  return $self->app->($env);
}

1;
```

```pl:My::M::Sandbox2.pm
package My::M::Sandbox2;

use strict;
use warnings;
use utf8;

use parent 'Plack::Middleware';

sub prepare_app {
  my $self = shift;
  warn sprintf("%s->prepare_app() called.", __PACKAGE__);
}

sub call {
  my ($self, $env) = @_;
  warn sprintf("%s->call() called.", __PACKAGE__);
  return $self->app->($env);
}

1;
```

## 実行 & 実行結果

```
$ carton exec -I./lib -- plackup
My::M::Sandbox2->prepare_app() called. at lib/My/M/Sandbox2.pm line 11.
My::M::Sandbox1->prepare_app() called. at lib/My/M/Sandbox1.pm line 11.
HTTP::Server::PSGI: Accepting connections at http://0:5000/
[ここで localhost:5000 にアクセス]
My::M::Sandbox1->call() called. at lib/My/M/Sandbox1.pm line 16.
My::M::Sandbox2->call() called. at lib/My/M/Sandbox2.pm line 16.
main called at app.psgi line 4.
```

## Conclusion

* Plack::Middleware::call() は builder で enable した順番に呼ばれる。
* Plack::Middleware::prepare_app() は builder で enable した順番と反対に呼ばれる。
* Plack::Middleware::* が全部呼ばれてから PSGI App が実行される
任意の法Nにおけるxorの実装

## 概要

タイトルがわかりづらいですが、
xorが持つ以下の特性を任意の法Nで実現するやり方です。

A xor B = C のとき以下すべてが成り立つ
B xor A = C
B xor C = A
A xor C = B

要するに
・右項、左項、答え　の内２つが分かれば
・同じ演算で残り１項目が計算できる
という計算になります。

## xorの制限について

ご存知の通りxorはboolやbitに対する演算になりますので、
計算対象の値の種類が 2^N 種類 であることが条件になります。

しかし値の種類がちょうど2^Nに収まってくれない場合も多いと思います。
たとえばトランプの枚数は53種類でアルファベットは26文字と、
そのままではxorがつかえません。

「トランプの種類を64枚として計算する」や
「アルファベットの種類を32として計算する」
といった解決方法でxorが利用できるようになりますが
難しい場合もあるでしょう。

## 式の紹介

このような場合に使える式が以下の物になります。

```
(N-A+N-B)mod N = C
もしくは
(-A-B)mod N = C
```

「N   値の種類(トランプの種類、アルファベットの種類など)
　A,B 計算対象
　C   答え」の意味です。

検算してみましょう。

「N = アルファベットの種類(26)
　A = a (0)
　B = w (22)」

```
C = (26-0+26-22)mod 26
  = (26+4) mod 26
  = 4
```
C = e (4) と出ました。

次に w e から a が導けるかテストしてみます。

「N = アルファベットの種類(26)
　A = e (4)
　B = w (22)」

```
C = (26-4+26-22)mod 26
  = (22+4) mod 26
  = 0
```
C = a (0) と出ました。
大丈夫そうですね。

## 利用する場面
「平文 xor 鍵 = 暗号文」といったxorを利用した暗号化がありますが、

紹介した式で平文、鍵、暗号文のすべて等長のアルファベットで記述できるようになります。
同様にトランプ遊びにも応用できますし、
ダイイングメッセージの記述にも使えるかもしれません。
バックアップの退避ファイル除去バッチ

WinMergeやVimで編集した跡にできる元ファイルのバックアップ

戻す可能性があって残してたけどもういらない
でも・・・
いちいち探して消すのもめんどくさいって時にこいつですよ

マージしたときとかに有用かと

```bat:BakFIleDeleter
@echo off
rem title
title bak file Deleter
set /p pushKey="バックアップ用一時ファイルを削除しますか？(y/n)"
if "%pushKey%" == "y" goto KILL

if "%pushKey%" == "Y" goto KILL

if "%pushKey%" == "yes" goto KILL

if "%pushKey%" == "YES" goto KILL
goto EXT

:KILL
rem bak用
for /r %%A in ( *.bak ) do ( if exist "%%A" ( del /s /q "%%A"))
rem Vimとか用
rem for /r %%B in ( *.*~ ) do ( if exist "%%B" ( del /s /q "%%B"))
rem OLDファイル用
rem for /r %%C in ( *.OLD ) do ( if exist "%%C" ( del /s /q "%%C"))
goto EXT

:EXT
```
「4.4.12.1 Article or section?」を訳してみました

かなり自信が無いので、誤訳や良い表現などがあればコメントしていただけるととても助かります。

--引用元(http://www.whatwg.org/specs/web-apps/current-work/multipage/sections.html#usage-summary-0)--

「sectionタグ」は記事の一部を形成するタグで、「articleタグ」は記事そのものを形成するタグです。
では、この両者をどう見分ければ良いのでしょうか？
その答えは「著者の意図による」というものです。

例えば、ある本の中で「Granny Smith」というリンゴを紹介した章があったとします。
その中に「These juicy, green apples make a great filling for apple pies.」と書かれていた場合は、「section」が該当します。
なぜなら他の章では（おそらく）「Granny Smith」以外のリンゴについて取り上げられているからです。


一方でツイートやredditへのコメント、Tumblrのポストまたは単に新聞記事や広告にて、「Granny Smith. These juicy, green apples make a great filling for apple pies.」という文章があったときは、「article」が該当します。
これはこの文章が独立して存在しているためです。

なお、記事へのコメントについては、それ自体が記事の一部ではないため「article」が該当します。


--原文--
4.4.12.1 Article or section?

This section is non-normative.

A section forms part of something else. An article is its own thing. But how does one know which is which? Mostly the real answer is "it depends on author intent".

For example, one could imagine a book with a "Granny Smith" chapter that just said "These juicy, green apples make a great filling for apple pies."; that would be a section because there'd be lots of other chapters on (maybe) other kinds of apples.

On the other hand, one could imagine a tweet or reddit comment or tumblr post or newspaper classified ad that just said "Granny Smith. These juicy, green apples make a great filling for apple pies."; it would then be articles because that was the whole thing.

A comment on an article is not part of the article on which it is commenting, therefore it is its own article.
oh-my-zshでgit stash数をプロンプトに出す方法

vi ~/.oh-my-zsh/custom/git-stash.zsh

```zsh:
function show_git_stash() {
  if [[ -e $PWD/.git/refs/stash ]]; then
    ZSH_THEME_GIT_PROMPT_SUFFIX="{@${$(git --no-pager stash list 2>/dev/null | wc -l | sed "s/ //g")}}"
  else
    ZSH_THEME_GIT_PROMPT_SUFFIX=""
  fi
}
add-zsh-hook precmd show_git_stash
```
非同期のURLリクエストをBlocksで書くならSocial.framework使っちゃえ

URLRequestの非同期処理といえばNSURLConnectionを使ってdelegateで拾ってあげるのが一般的ですが、実はsocial.frameworkを使えばBlocksで簡単に書くことができます。

```objc:
 NSString *url = @"http://google.com";
 SLRequest* req=[SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodGET URL:[NSURL URLWithString:url] parameters:nil];
 [req performRequestWithHandler:^(NSData* responseData,
                                          NSHTTPURLResponse* urlResponse,NSError* error) {
        NSString *html= [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
        NSLog(@"%@",html);
 }];
```

requestForServiceType:の部分はTwitterでもFacebookでもいいと思います。でも入れないと勿論落ちます。
SLRequestのaccountは不要です

Twitterのサービスを使ってないのにTwitterって書くのなんか気持ち悪いからもしかしてコレ用のメソッドちゃんとあったりするのかな…？
turbo-sprockets-rails3 で Heroku x Rails3のデプロイ時間を30倍速くする

## Rails3のassets:precompileは遅い！
HerokuもRailsも便利ですが、本番環境にデプロイするときに実行されるassets:precompileの速度はお世辞にも速いとは言えません。


Twitter BootstrapやらjQueryプラグインやら、なんやらかんやらでViewにお化粧を厚塗りしていくと、assets:precompileの時間だけで3分以上かかることも珍しくありません。


僕の場合、毎回確実にassets:precompileに10分以上かかってしまい、時々Herokuの15分という上限を超えてしまうRails appもありました。
なので、「ちょっとした修正をデプロイしたいだけなのに、こんなに待たされるのはもう勘弁！！」という悩みを抱えていました。


## turbo-sprockets-rails3で簡単に爆速化！！

そんなときに見つけたのが[turbo-sprockets-rails3](https://github.com/ndbroadbent/turbo-sprockets-rails3)というGemです。
これを使うと変更があったassetsだけを再コンパイルするので、assets:precompileの時間をぐっと短縮することができます。

### 使い方
使い方は簡単です。
Herokuで使うときはこんな感じで、GemとHerokuの環境変数を追加するだけです。

````
# Gemfileにturbo-sprockets-rails3を追加
group :assets do
  gem 'turbo-sprockets-rails3'
end
````

````
# Herokuに以下の環境変数を追加
$ heroku config:set BUILDPACK_URL=https://github.com/ndbroadbent/heroku-buildpack-turbo-sprockets.git
````

あとはHerokuにデプロイするだけでおしまいです。

最初のデプロイは全assetsがprecompileされるので、導入前と同じぐらいの時間がかかりますが、それ以降はassets:precompileの時間がぐんと短縮されます。(assetsに大きな変更がない限り)

## Before/After比較
導入の前後でassets:precompileにかかる時間を比較すると、これぐらいの違いが出てきます。

````
# 導入前
-----> Preparing app for Rails asset pipeline
       Running: rake assets:precompile
       Asset precompilation completed (751.95s)
````

````
# 導入後
-----> Preparing app for Rails asset pipeline
       Running: rake assets:precompile
       Asset precompilation completed (24.34s)
````

このようにassets:precompileがすぐ終わるようになったので、躊躇せずにデプロイが行えるようになりました。

## 備考: Rails4にすればturbo-sprockets-rails3は不要
Rails4ではデフォルトでこの仕組みが導入されているので、元からassets:precompileが速いらしいです。
なので、この記事はRails3限定(厳密に言うと3.2以上)ということになります。

- 参考: http://yetimedia.tumblr.com/post/33320732456/moving-forward-with-the-rails-asset-pipeline

## まとめ
もっと前から使っていれば良かった、[turbo-sprockets-rails3](https://github.com/ndbroadbent/turbo-sprockets-rails3)！！
DBへの接続を何回も書くのは嫌なので

DBへの接続を何回も書くのは嫌なので、メモ代わりに

```php:index.php
<?php

$svn = $svn;
$dbname = $dbname;
$pass = $pass;
$user = $user;
        
$link = mysqli_connect($svn, $user, $pass,$dbname) or die("エラー");

?>