OmniAICreator/Qiita-1.07M huggingface dataset:
libGDX + Genymotionでサンプルアプリがすぐに落ちてしまう

libGDXでAndroidプロジェクトを作ってGenymotionでSampleプロジェクトを確認しようとすると, 起動してしばらくするとすぐに以下のエラーで落ちてしまい切ない思いをします。

```
Fatal signal 11 (SIGSEGV)
```

対処法は簡単で, AndroidManifest.xmlに以下の記述を追加しましょう。

```xml:AndroidManifest.xml
 <application
        android:allowBackup="true"
        android:vmSafeMode="true" ←これ
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/GdxTheme" >
        <activity
```

起動後もアプリが落ちないことが分かるかと思います。
短いtrouble shottingですが、最初に躓くと萎えるので誰かが検索した時にたどり着けますように。

![Screen Shot 2014-06-09 at 3.51.04 AM.png](https://qiita-image-store.s3.amazonaws.com/0/20470/61460828-01ee-a333-2772-14f465b186ab.png)

注) vmSafeModeをtrueにするとJITが無効化されてしまいますので実機では不要な設定だと思ってます。
まだ実機で確認できていないので分かりません…。

注2) Libgdx requires OpenGL ES 2.0 というエラーとともに立ち上がらない事象も報告されています。LibGdxの開発は実機で確認した方が良いかもしれません。
リリース手順

WordPressサイトの更新

0.リリース準備
管理画面で変更する項目はなにか
FTPで更新するアプリケーションソースはなにか（git log→git diff --statで確認）
どちらを先にするのが影響なくできるか

1.リリース開始連絡

2.データベースバックアップ作成
ex）さくら
（要パスワード）
サーバーの設定
データベースの設定
管理ツールログイン
phpMyAdmin（要パスワード）
エクスポート
ログアウト

3.アプリケーションバックアップ作成
ex)YummyFTP
（要パスワード）
左：バックアップフォルダ
右：www　選択時にcommand+T

4.設定反映
WordPress管理画面

5.ソース反映
両方：wp-contentの中
左選択時にcommand+T→置換

6.動作確認
ブラウザのキャッシュをリロードする

7.リリース終了連絡
BeanUtils 1.9.2で追加されたSuppressPropertiesBeanIntrospectorの使い方

Struts1の脆弱性問題で、commons-beanutilsに対応が入ったバージョン1.9.2がリリースされました。
https://issues.apache.org/jira/browse/BEANUTILS-463

といっても、デフォルトで問題が修正されるわけではなく、セットアップは必要です。

## 仕組み

[BeanIntrospectorという仕組み](http://commons.apache.org/proper/commons-beanutils/apidocs/org/apache/commons/beanutils/package-summary.html#standard.customize)が1.9.xからは導入されていて、PropertyUtilsにこのBeanIntrospectorを追加すると、オブジェクトのどのメソッドをプロパティとして扱うかの挙動を変えることができるようになっています。

使い方は[テストコード](https://github.com/apache/commons-beanutils/blob/BEANUTILS_1_9_2/src/test/java/org/apache/commons/beanutils/SuppressPropertiesBeanIntrospectorTestCase.java#L50)があるので、そちらを見てみます。

```java
String[] properties = { "test", "other", "oneMore" };
SuppressPropertiesBeanIntrospector introspector = new SuppressPropertiesBeanIntrospector(
                Arrays.asList(properties));
```

単にプロパティとして扱いたくないものの名前をコンストラクタで渡すだけです。

## getClassをプロパティとして扱わないようにする

さて、Struts1の脆弱性の原因であったこの問題に対処してみます。SuppressPropertiesBeanItrospectorに専用のSUPPRESS_CLASSがあるので、これをPropertyUtilsのaddIntrospectorに渡すだけです。

```java
Map<String, String> desc1 = BeanUtils.describe(new TestBean());
assertNotNull(desc1.get("class"));
BeanUtils.getProperty(new TestBean(), "class");
                                                                             
PropertyUtils.addBeanIntrospector(                                   
    SuppressPropertiesBeanIntrospector.SUPPRESS_CLASS);          
PropertyUtils.clearDescriptors();                                    
                                                                             
Map<String, String> desc2 = BeanUtils.describe(new TestBean());      
assertNull(desc2.get("class"));                                      
try {                                                                
    BeanUtils.getProperty(new TestBean(), "class");                  
    fail("Could access class property");                             
} catch(NoSuchMethodException ex) {
     // ok
}                                                                    
    }                                                                        
```

これで、classがプロパティ扱いされなくなります。populateもdescribeもgetProperty/setPropertyもOKです。

Webアプリで使うときは、Resolverでの対処と同じように、ServletListenerに入れ込めばよいです。

```java
package example;
 
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
 
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.beanutils.SuppressPropertiesBeanIntrospector;

public class SuppressPropertiesListener implements ServletContextListener {
 
    @Override
    public void contextInitialized(ServletContextEvent event) {
        PropertyUtils.addBeanIntrospector(
            SuppressPropertiesBeanIntrospector.SUPPRESS_CLASS);
        PropertyUtils.clearDescriptors();
    }
 
    @Override
    public void contextDestroyed(ServletContextEvent event) {
    }
}
```

本家の公式なので、まぁ一番キレイに対応できますね。
cherry-pickでリビジョンの範囲を指定する

```bash:Terminal
$ git cherry-pick 古い方のリビジョン^..新しい方のリビジョン
```

Git ver.1.7.2から。

---

これでテキトーなブランチを作って、テキトーにコミットして、終わったら歴史を整える用のブランチを作って、そこで

```bash:Terminal
$ git cherry-pick -n hoge^..moge
```

とかやったあとに`add`と`commit`で整えられる。

今までは`merge --no-ff`でまとめたコミットを`cherry-pick`してたのだけど、`cherry-pick -m 1`が理解できなくて気持ち悪かった。

そもそも歴史を整えるのも良いのかなあとは思いつつ。

---

- http://stackoverflow.com/questions/1670970/how-to-cherry-pick-multiple-commits
- http://feeding.cloud.geek.nz/posts/cherry-picking-range-of-git-commits/
[Mac]svnコマンドでソースを部分的に取得

メモ書き。

SVNが
`http://111.222.333.444/`
で、
欲しいのが
`http://111.222.333.444/aaa/bbb/ccc`
の`ccc配下`のとき。

# 欲しい部分のディレクトリを作る
```
svn checkout --depth=immediates http://111.222.333.444/aaa/bbb/ccc
```

こうなる↓

```
$ tree
.
└── ccc
    ├── aaa   # ccc配下のディレクトリたち
    ├── iii
    ├── uuu
    └── eee

5 directories, 0 files
```

ちなみに何故かすっごい時間かかった( ..)

# 欲しいソースだけ取得する
ccc/配下はだいたい欲しかったのだけど、実は今はccc/iiiだけ欲しいのでした。

```
$ cd ccc
$ svn checkout http://111.222.333.444/aaa/bbb/ccc/iii
```

※`svn update`でいけるって聞いたけれどいかなかった(´・ω・｀)ﾅｾﾞ？
※URLの末尾に`/`つけてたら全く取れなかった。orz


とーれったとーれた♪
Light Tableでカーソルをいろいろ移動する

Light Tableの中のCodeMirrorのAPIを使うと、カーソル動かせていろいろできそう（Pluginとかで）
SyntaxをClojureScriptに設定して、Light Table UIにConnectして遊ぼう

```clj:sample.cljs
(ns sample.core
  (:require  [lt.objs.editor :as editor]
             [lt.objs.editor.pool :as pool]))

(def cm (editor/->cm-ed (pool/last-active)))

```

※`(editor/->cm-ed (pool/last-active))`でCodeMirrorのオブジェクトが取れるらしい


# .execCommandを使って移動

`.execCommand`でいろいろできる。
`goLineEnd`で行の最後に移動
`goLineStart`で行の先頭、`goLineStartSmart`で行の非空白文字の先頭に移動

```clj
  (.execCommand cm "goLineEnd")
  (.execCommand cm "goLineStart")
  (.execCommand cm "goLineStartSmart")
```

`goLineLeft`と`goLineRight`は上と似てるけど、行の折り返しがあったときには表示上の左右端まで移動になる

```clj
  (.execCommand cm "goLineLeft")
  (.execCommand cm "goLineRight")
```

1文字だけ左右に移動したいときは`goCharLeft` `goCharRight`
上下は`goLineUp` `goLineDown`

```clj
(.execCommand cm "goLineUp")
(.execCommand cm "goLineDown")
(.execCommand cm "goCharLeft")
(.execCommand cm "goCharRight")
```

`goColumnLeft`は1文字左移動だけど、`goCharLeft`とは違って行の先頭ではそれ以上左（つまり上の行の最後）には移動しない。

```clj
(.execCommand cm "goColumnLeft")
(.execCommand cm "goColumnRight")
```

# .setExtendingで選択

`(.setExtending cm true)`とするとカーソル移動のときに移動した部分が選択される。
行の非空白文字の先頭から行末まで選択するには、以下のようにする

```clj
(do
  (.execCommand cm "goLineStartSmart")
  (.setExtending cm true)
  (.execCommand cm "goLineEnd")
  (.setExtending cm false))

```


# Plugin化

ショートカットキーから呼べるようにしたいので、Light TableのPluginにしてみる
上の.execCommandにあるやつはLight Tableのコマンドとして既に用意されてるので、.setExtendingができるようにする

作るのは結構簡単
1. `lein new lt-plugin cursorkit`コマンドでプラグインの雛形を作る
2. Light TableのWorkspaceに作った雛形のディレクトリを追加
3. Light Tableでsrcディレクトリ内のcursorkit.cljsを開いて以下に書き換えて保存（自動でjsにコンパイル）
4. cursorkit.behaviorsファイルの不要な部分（`:cursorkit.hello [:lt.plugins.cursorkit/on-close-destroy]`）を消す

```clj:cursorkit.cljs
(ns lt.plugins.cursorkit
  (:require [lt.objs.command :as cmd]
            [lt.objs.editor :as editor]
            [lt.objs.editor.pool :as pool]))

(defn cm [] (editor/->cm-ed (pool/last-active)))

(cmd/command {:command ::extend-true
              :desc "cursorkit: Set Extending true"
              :exec (fn [] (.setExtending (cm) true))})

(cmd/command {:command ::extend-false
              :desc "cursorkit: Set Extending false"
              :exec (fn [] (.setExtending (cm) false))})
```

そうすれば、User keymapで`"ctrl-b" [:editor.line-start-smart :lt.plugins.cursorkit/extend-true :editor.line-end :lt.plugins.cursorkit/extend-false]`みたいに設定できるよ！
ifもswitchも三項演算子も剰余もforもwhileもtryもその他色々使わずにJavaでFizzBuzz書いてみた

そういや昔、思い付きで書いたけど公開してなかったので。

FizzBuzzナシナシです。

```java:FizzBuzz.java
class FizzBuzz {
  
  public static void main(String... args) {
    Link start;
    Link link = start = new Link(new N());   // 1
    link.setNext(link = new Link(new N()));  // 2
    link.setNext(link = new Link(new F()));  // 3
    link.setNext(link = new Link(new N()));  // 4
    link.setNext(link = new Link(new B()));  // 5
    link.setNext(link = new Link(new F()));  // 6
    link.setNext(link = new Link(new N()));  // 7
    link.setNext(link = new Link(new N()));  // 8
    link.setNext(link = new Link(new F()));  // 9
    link.setNext(link = new Link(new B()));  // 10
    link.setNext(link = new Link(new N()));  // 11
    link.setNext(link = new Link(new F()));  // 12
    link.setNext(link = new Link(new N()));  // 13
    link.setNext(link = new Link(new N()));  // 14
    link.setNext(link = new Link(new FB())); // 15
    link.setNext(start);
    loop(start, 1);
  }
  
  public static void loop(Link link, int i) {
    link.getProc().proc(i);
    new Flow[]{new Loop(), new Loop(), new Loop(), new Stop()}[String.valueOf(i).length()].flow(link.getNext(), i + 1);
  }
  
  static class Link {
    Proc proc;
    Link next;
    
    public Link(Proc proc) {
      this.proc = proc;
    }
    
    public Proc getProc() {
      return this.proc;
    }
    
    public Link getNext() {
      return this.next;
    }
    
    public void setNext(Link next) {
      this.next = next;
    }
  }
  
  static interface Proc {
    void proc(int i);
  }
  
  static class N implements Proc {
    public void proc(int i) {
      System.out.println(i);
    }
  }
  
  static class F implements Proc {
    public void proc(int i) {
      System.out.println("Fizz");
    }
  }
  
  static class B implements Proc {
    public void proc(int i) {
      System.out.println("Buzz");
    }
  }
  
  static class FB implements Proc {
    public void proc(int i) {
      System.out.println("FizzBuzz");
    }
  }
  
  static interface Flow {
    void flow(Link link, int i);
  }
  
  static class Loop implements Flow {
    public void flow(Link link, int i) {
      loop(link, i);
    }
  }
  
  static class Stop implements Flow {
    public void flow(Link link, int i) {
    }
  }
}
```

出力が15周期になることを無限リンクリストで表現したり、`100`で停止するようにするために現在のループ回数を文字列に変換して、3文字になったところで停めるようにしています。

みなさんはこんなヒドいJavaは書かないでくださいね。
ついにTableViewCellの高さが自動で調整してくれるようになった件！！！

技術情報の共有はNDAではないということで書きます。問題ありましたらご連絡ください。

ついにiOS8でテーブルビューのセルの高さを自動調整してくれるようになります！！
```-tableView:heightForRowAtIndexPath:```でcellの高さを外部で計算しなくてよくなりました！！

やり方は簡単です。
tableViewのrowHeightプロパティにUITableViewAutomaticDimensionを入れるだけです。

```objc
self.tableView.rowHeight = UITableViewAutomaticDimension;
```

セルの高さは２種類の方法で決まります。
1. AutoLayout
2. sizeThatFits:メソッドの実装

AutoLayoutを利用していない場合は2の実装が良いです。
sizeThatFitsは```tableView:cellForRowAtIndexPath:```のあとに呼ばれるようなので、
その時のcellのコンテンツの内容に合わせて高さを計算すれば良くなります。

ようやくこれでheightForRowAtIndexPathから開放され、高さの計算ロジックもcell内のコードに落としこむことができるので見通しが良くなると思います。

可変サイズのTableViewが非常にやりやすくなりますね！
リモートリポジトリを他のものに移行する方法


GithubからBitbucketに移行したいような場合や、
GitLabからGithubに移行したいような場合、リモートリポジトリを付け替える必要がある。

心配事としては、Gitのログをちゃんと引き継げるかどうか心配になるけど、リモートリポジトリを付け替えを行えば大丈夫
手順はこんな感じだ

### 移行先のリモートリポジトリを作成する

### ローカルのリポジトリを現在のリポジトリの最新状態を取得する

```
> git fetch
```

### 現在のリモートリポジトリの接続情報を確認する

```
> git remote -v
```

### リモートリポジトリ(origin)を削除する

```
> git remote remove origin
```

### 新しいリポジトリ(同じくoriginで命名する)を追加する

```
> git remote add origin https://user@bitbucket.org/user/reponame.git
```

### ローカルリポジトリを空のリモートリポジトリに追加する

```
> git push origin master
```

Pushにけっこう時間がかかってればだいたい成功してると思ってよい。
最後に移行先サービスでコミットログを確認し移行していることが確認したら終わり
Twitterインテントのtweetコールバックが発火しない件

__この投稿には解決策は書いてないです！__
皆さんがどうしているのかというのと、自分の備忘的に作成する投稿になります。

## 「インテントを使ってツイートしたらほげほげさせる」をやりたかったんだけど・・・
https://dev.twitter.com/docs/tfw/events
ここに記載されている一文

```
Note that Web Intent events are not supported in Internet Explorer before version 8, and may not function fully in browsers that don't support the browser postMessage API (such as Chrome for iOS.)
```

英語超苦手っ子の僕がGoogle翻訳の力を借りて読み解いてみると

```
メモ：このウェブインテントは8以下のバージョンのInternetExplorerではサポートしてないですよ。PostMessageAPIをサポートしてないブラウザだと全部の機能が動作しない場合がありますよ。（例えば、iOSのChromeとか。）
```
ということらしい（ほとんど機械翻訳そのまま）

## twttr.events.bind('tweet' function(event) not working
取り敢えずWindowsのPC環境に限って言えば
IE/FF/Chromeのうち、Chrome バージョン 35.0.1916.114 m でしか動作しなかった。

__もうちょっとがんばってくれよ・・・__

## 解決策は？
見つからなかった。
インテントのウィンドウの生成を https://dev.twitter.com/discussions/671
みたいな形でアプローチして、子ウィンドウの要素を取得しようとか試みてもみたけど、ドメイン違いにつき、まあ当然SecurityErrorです。

多分、インテントっぽい機能を持っている何かを自前で作成したほうが早い気がする


## いまのところのまとめ
「インテントを使ってツイートしたらほげほげさせる」をやろうとしないこと・・・？？

## 皆どうしてるんでしょうか
ご教示いただけると・・・とてもうれしいです・・・orz
AndroidアプリのgradleビルドでbuildTypeごとにいろいろ変えてみた

#パッケージ名
```
android {
    ...

    buildTypes {
        hoge {
            packageNameSuffix "hoge.$param"
        }
    }
}
```
ビルド実行時に -Pparam=fuga を付ければパッケージ名が my.app.hoge.fuga のようになります。
buildTypesではsuffixのみ指定できます。
productFlavorsを使用する場合は、`packageName "my.app.hoge"` とすればパッケージ名全体を指定できます。

ただし、この変更は AndroidManifest.xml でのパッケージ定義が変わるだけで、Javaクラスのパッケージは変わりません。
アプリ内で`context.getPackageName()`などとすると `"my.app.hoge.fuga"` が取れますが、`MyActivity.class.getPackage().getName()` などでは `"my.app"` （変更前のパッケージ名）となるので注意が必要です。

#バージョン名
```
android {
    ...

    buildTypes {
        hoge {
            versionNameSuffix ".hoge.$param"
        }
    }
}
```
ビルド実行時に -Pparam=fuga を付ければversionNameが 1.0.0.hoge.fuga のようになります。
パッケージ名と同様、buildTypesで指定できるのはsuffixのみで、productFlavorではversionName全体が指定できます。
アプリ内からどのビルドかを判別可能にしたい場合などに便利です。
パッケージ名と違い、既存のバージョンの後ろに . が勝手に付くわけではありません。

#アプリ名
```
android {
    ...

    applicationVariants.all { variant ->
        variant.processManifest.doLast {                                      // ①
            if (variant.buildType.name.equals("hoge")) {                      // ②
                def manifestDir = "$buildDir/manifests/${variant.dirName}"
                def newManifestDir = "$manifestDir/new"
                file("$newManifestDir").mkdir()                               // ③
                copy {
                    from("$manifestDir") {
                        include "AndroidManifest.xml"                         // ④
                    }
                    into("$newManifestDir")
                    filter {                                                  // ⑤
                        String line -> line.replaceAll('@string/app_name', "new app name")
                    }
                    variant.processResources.manifestFile = file("$newManifestDir/AndroidManifest.xml")
                                                                              // ⑥
                }
            }
        }
    }
}
```
①Manifestに関する処理のあとで
②特定のbuildTypeのときに、
③ディレクトリを生成して
④AndroidManifest.xmlをコピーし、
⑤その際にアプリ名部分を新しい名前に置換し、
⑥Manifestの定義を新しいファイルに変更します。
パッケージ名やバージョン名のように、気軽に変更できるメソッドがなかったため、Manifestファイルを書き換えました。
他のManifest設定値などをbuildTypeごとに変えたい場合にも応用できそうです。


#おまけ：パラメータ未指定でもエラーにならないようにする
`$param`のようにパラメータを使用する際、パラメータが不要なbuildTypeでもパラメータを指定しないとエラーになってしまいますが、以下のようにしておくとパラメータ未指定でもエラーにならないようにできます。

```
android {
    ...

    def param
    if (project.hasProperty('param')) {
        param = project.param
    }
}
```
（パラメータ未指定の場合は`throw GradleException("message")`でビルドが失敗するようにしてあげたほうがより親切かもしれません）
jqueryのtabs

とあるソースで、tabsを使っている箇所があった。

```lang:
jQuery(".arconix-accordions-1").tabs("div.arconix-accordion-content", {tabs: 'div.arconix-accordion-title', effect: 'slide', initialIndex: null});
code
```

jquery-uiの<a href = "http://jqueryui.com/tabs/">ドキュメント</a>を見たら、全然内容が違う・・
tabs()の第一引数に文字列ってどういうことだ・・と色々迷ったあげく、実はjquery-uiを使っていなかったというオチでした。

このtabsは、jquery.tools.min.jsで持ってきたもので、ドキュメントは<a href = "http://jquerytools.org/documentation/tabs/index.html">こちら</a>

メソッドを調べるときにはちゃんと読み込んでいるjsを確認してからにしましょう・・
MySQL WorkbenchでER図出力

公式サイトからダウンロード。
http://www-jp.mysql.com/products/workbench/

インストール完了して起動すると、以下のような画面がでます。

![スクリーンショット 2014-05-29 17.34.38.png](https://qiita-image-store.s3.amazonaws.com/702/43807/5de0cb31-e357-1303-d5b2-ec2f1cdc4651.png)

このとき、<font size = 5>左下の方にある > みたいなボタン</font>を押します。
(左上のlocal instance〜ではないので注意してください）
その後、Create EER Model From Databaeを選択。
これでER図が出力されます。

初めてやったとき結構迷ったので・・
macで特定のディレクトリを素早く開く方法

# 特定ディレクトリを素早く開くには
finderで「よく使う項目」に設定してダブルクリックでも良いのですが、キーボードだけで操作したい場合の方法です。
alfredをインストール済みという前提です。

例えば、/Users/welox/Repository以下のディレクトリにアクセスできるようにする場合、以下の様に設定します。
![スクリーンショット 2014-05-21 13.23.31.png](https://qiita-image-store.s3.amazonaws.com/702/43807/d2ad2963-8348-df7f-7974-70cbb1e9aa74.png)

・Search Scopeに対象パスを追加する
・ExtrasのFoldersにチェックを入れる

これで、(デフォルト設定のままなら)option+enter、その後移動したいディレクトリ名を入れてenterを押せばfinderでディレクトリを開いてくれます。

なお、alfredの注意書きにもある通り、essentials以外を対象にすると動作が遅くなるそうなので使い過ぎにはご注意を。
VIm tips:wordとWORD

## vimにおいて、wordとWORDは違う

### wordとは

「アルファベット、数字、アンダースコアのいずれかが並んだもの」または「その三種類以外の非空白文字が並んだもの」

### WORDとは

「非空白文字が並んだもの」

具体例

具体例を見た方が分かり易いので、例を挙げます。
wコマンドで word単位の移動、WコマンドでWORD単位の移動ができます(後退ならb及びB)
これを用いて、以下の分がwordとWORDでどのように分けられるのかを見てみます。

例１：
$this->getUser()->isAuthenticated()

wordの場合、 \$, this, ->, getUser, ()->, isAuthenticated, () の７つ。
WORDの場合、 $this->getUser()->isAuthenticated() で１つ。

例２：
foreach (\$tags as $tag)

wordの場合、 foreach, (\$, tags, as, \$, tag, ) の７つ。
WORDの場合、 foreach, (\$tags, as, \$tag) で4つ。

うまく使い分けると更なる高速化が期待できそうな気がします。
Perlでクロージャを使ってデータの組み合わせを取り出す

## 何をしたの？

何と言ったら正しいのかよくわからないのですが、、、
Perlでクロージャを使って、プログラム内で使用するデータを次々に生成してくれるようなものを作りました。

数パターンのデータを自動的に返してくれるような感じと言うか、
雰囲気的には、変則的な桁繰上りをしてくれるような感じです。



## コード

```pl
use strict;
use warnings;

my $get_status = sub {
	use POSIX qw(floor);
	use bignum;
	my $count = 0;
	my $skip = [];	#スキップしたい回数目があれば、ここに整数値を配列で入れる
	my $rule = [	#ルール名・最小値・加算値・最大値をハッシュの配列で持たせる
		{ name => 'a', min => 1, step => 1, max => 2 },
		{ name => 'b', min => 2, step => 1, max => 4 },
		{ name => 'c', min => 0.4, step => 0.2, max => 8 },
		{ name => 'd', min => 0.5, step => 0.1, max => 2 },
	];
	my $status = {};
	my $maximum = 1;
	foreach my $tmp_rule ( @{$rule} ){
		$status->{pattern}->{$tmp_rule->{name}} = $tmp_rule->{min};
		$tmp_rule->{roundup} = ( grep { $_->{length} } @{$rule} )
			? do { my $tmp = 1; map { $tmp *= $_->{length} if( $_->{length} ); } @{$rule}; $tmp; }
			: 1;
		$tmp_rule->{length} = ( $tmp_rule->{max} - $tmp_rule->{min} ) / $tmp_rule->{step} + 1;
		$maximum *= $tmp_rule->{length};
	}
	return sub {
		while(1){
			last if ( !( grep { $_ == $count } @{$skip} ) );
			$count++;
		}
		foreach my $tmp_rule ( @{$rule} ){
			$status->{count} = $count;
			$status->{pattern}->{$tmp_rule->{name}} = floor( ($count / $tmp_rule->{roundup}) % $tmp_rule->{length} ) * $tmp_rule->{step} + $tmp_rule->{min};
		}
		$count++;
		return ( $count >= $maximum+1 ) ? undef : $status;
	};
}->();

my $params;
while( 1 ){
	$params = $get_status->();
	last if( !$params );
	
	print $params->{pattern}->{d}, ', ', $params->{pattern}->{c}, ', ', $params->{pattern}->{b}, ', ', $params->{pattern}->{a}, ': ', $params->{count}, "\n";
}

exit;

```



## 実行結果

```
0.5, 0.4, 2, 1: 0
0.5, 0.4, 2, 2: 1
0.5, 0.4, 3, 1: 2
0.5, 0.4, 3, 2: 3
0.5, 0.4, 4, 1: 4
0.5, 0.4, 4, 2: 5
0.5, 0.6, 2, 1: 6

...(中略)...

2, 7.8, 4, 2: 3737
2, 8, 2, 1: 3738
2, 8, 2, 2: 3739
2, 8, 3, 1: 3740
2, 8, 3, 2: 3741
2, 8, 4, 1: 3742
2, 8, 4, 2: 3743
```



## なんで必要だったの？

ループ（上コードの中では、最後の`while`）の中で計算してもいいのだけど、見た目がごちゃっとして、後々どこが何なのかわかりにくくなるな、と思ったのでした。
でも、サブルーチン切り分けていちいち引数で回数の値を渡すのもなんだかなぁ、かといってカウント値を`bless`して使いまわすのも変だなぁ、と思ったりもしたのでした。



## 使いどころは？

テストの際などに、決められたルールの上で自動的に値を出してくれるので、たまに役に立つかな？　とか。
今回は、ループ内で値を変えながら何回も繰り返して、最終的に値ごとの計算結果を比較する、みたいな処理がしたくて、そこで使いたかったのでした。
使いどころは限られますが、割と汎用性はあるような気がしています。
クロージャ内で保持しているのは単純な整数値（上コードの`$count`）なので、割と取り回しもしやすいかな、と。
あとは、`$skip`に外部データから読み込むようにすれば、中断・再開にも少しだけ対応できてうれしいな、と思っています。



## 追記

なんだか実行結果に変なところがあったので、一度下書きに戻して修正しよう、と思ったら誤って記事ごと削除しちゃいましたので再投稿です。すみません。

変だった部分は、剰余絡みの部分で、オーバーフロー起こしておかしな数値をたたき出すことがあるようでした。
というか、なんか剰余を出す途中で処理が止まって、剰余ではなくて割り算の結果（の、小数点以下切り捨てされた値）が出てくることがありました。


ので、`use bignum;`を入れて解決しました。でも、何倍も遅くなっちゃいましたが、、、

あとは、後から気になった細かい部分をちょっと修正したりもしました。
Xamarin.Forms ListView について

こんにちは。Xamarin.Forms の ListView について調べました。私のような非プログラマでも UI が書けるのは嬉しいですね。

Xamarin.Forms でどんなことが出来るのか？は
[サンプルアプリの Forms Gallery](https://github.com/xamarin/xamarin-forms-samples/tree/master/FormsGallery)
を見ていただくのがよいかと思います。

今回は Xamarin のサイトに上がっている
[Xamarin.Forms.ListView Class API リファレンス](http://iosapi.xamarin.com/?link=T%3aXamarin.Forms.ListView)
のサンプルを見ながら最低限の実装に絞った ListView を折角なのでアップします。

`Page` 作って `layout` 決めて `Children` に流しこむのが多分基本の流れな感じがします。

サンプルにある `ItemTemplate` は 
Define template for displaying each item.
(Argument of DataTemplate constructor is called for  each item; it must return a Cell derivative.)
とあるように各項目を設定する際に使用します。詳しくは調べていません。

```csharp
public class App
{
    public static Page GetMainPage()
    {

        List<string> list = new List<string>() {"Item1","Item2","Item3","Item4" };

        var listItems = new ListView { 
            ItemsSource = list,
        };

        var listPage = new ContentPage
        {
            Title = "ListView",
            Content = new StackLayout
            {
                Children = { 
                    listItems,
                },
            },
        };

        listItems.ItemTapped += listItems_ItemTapped;

        return new NavigationPage(listPage);
    }

    static void listItems_ItemTapped(object sender, ItemTappedEventArgs e)
    {
        GetMainPage().DisplayAlert("Alert Title", e.Item.ToString() + " is selected.", "OK", "Cancel");
    }
}
```

こんな感じです。

![スクリーンショット 2014-06-09 16.42.22.png](https://qiita-image-store.s3.amazonaws.com/0/32453/b5d78c90-5d89-c3ea-f0f2-05c3258e73c8.png)
Emacsチートシート

#全体
C-:Ctrlキーを押しながらハイフンに続いたキーを押す
M-:Metaキーを押しながらハイフンに続いたキーを押す



## ウィンドウ

* カレントバッファを変更する
C-x o	

* バッファを移動
C-x b

* 現在のウィンドウを閉じる
C-x 0

* 他のウィンドウを閉じる
C-x 1	

* ウィンドウを縦に分割
C-x 2

* ウィンドウを横に分割
C-x 3	

## 移動

* 左に移動
C-b

* 右に移動
C-f

* 上に移動
C-p

* 下に移動
C-n

* 左の単語に移動
M-b

* 左の単語に移動
M-f

* 下に1ページ移動
C-v

* 上に1ページ移動
M-v

* 先頭行に移動
M-<

* 最終行に移動
M->

* 指定した行に移動
M-g M-g 行番号

* 対応する閉じ括弧に移動
C-M-n

* 対応する開き括弧に移動
C-M-p

## 編集
* 良い感じにインデントして改行
C-j

* マーク
C-space

* カーソルの位置から行末までをカット
C-k

* カット
C-w

* コピー
M-w

* ペースト
C-y

* ペースト後にその前のキルリングの内容に変更
M-y

* 矩形編集
リージョン選択後 C-x r t 挿入する文字

* 矩形削除
リージョン選択後 C-x r d

* 複数行削除
C-u [行数] C-k

* 矩形の先頭に連番入れる
リージョン選択後 C-u C-x r N

* 整列
リージョン選択後 C-u M-x align
http://www.emacswiki.org/emacs/AlignCommands

* 正規表現で整列
リージョン選択後 M-x align-regexp 正規表現

* Undo
C-_

## ファイル

* ファイルを開く
C-x C-f	

* 保存
C-x C-s

* 名前を付けて保存
C-x C-w

* 終了
C-x C-c

## 検索

* 下方向に検索
C-s


* 上方向に検索
C-r


* 下方向に正規表現を使って検索
C-M-s


* 上方向に検索
C-M-r

* マッチ後に次の候補に移動

 * 検索後にC-sで次のマッチに移動

 * 検索後にC-rで次のマッチに移動

# ediff
M-x ediff
n 次の差分に移動
p 前の差分に移動
a 選択位置の差分をaからbにコピー
b 選択位置の差分をbからaにコピー
q ediffを終了


# 未整理

* よくわからなくなった状態をもとに戻す
C-g


* コマンド実行
M-! コマンド


* grep -r 
M-x rgrep




* 問い合わせ置換
M-%

* 正規表現を利用した問い合わせ置換
M-C-%

改行をマッチさせる場合はC-q C-j

 * マッチ後

 * スペース 1件置換

 * DEL スキップ

 * ! 全置換

* コメントを挿入
リージョン選択後 M-;

* キーボードマクロ
 * 記録開始
 C-x (

 * 記録終了
 C-x ) 
 * 呼び出し
 C-x e	

* キーバインド一覧

M-x help-for-help RET b

* ディレクトリ作成
M-x make-directory RET dir/to/create RET

* MELPAからインストールしたパッケージを更新
M-x list-packages [RETURN] U [RETURN] x [RETURN]
モンキーパッチ：Enumerable#select_index と Enumerable#reject_index

`Enumerable#select`（`Enumerable#find_all`）ならば要素配列が返ってきますが、位置（index）だけ返ってくるメソッドが欲しかったので、モンキーパッチを書きました。

`Enumerable#find`に対する`Enumerable#select`と同じ関係で、`Enumerable#find_index`に対する`Enumerable#select_index`というメソッドです。
ついでに`Enumerable#select`に対する`Enumerable#reject`と同じ関係で、`Enumerable#select_index`に対する`Enumerable#reject_index`も作りました。

Ruby 1.9以上で使えます。多分1.8でも使えるんじゃないかとおもいます。

* `Enumerable#select_index`：各要素に対してブロックを評価した値が真であった位置を全て含む配列を返します。エイリアスとして`Enumerable#find_all_index`を設定しています。
* `Enumerable#reject_index`：各要素に対してブロックを評価した値が真であった位置を全て含む配列を返します。

#モンキーパッチ
```ruby
module Enumerable 
  def select_index
    return to_enum(__method__) unless block_given?
    values = []
    self.each_with_index{ |item, i| values << i if yield(item) }
    values
  end
  alias :find_all_index :select_index

  def reject_index
    return to_enum(__method__) unless block_given?
    values = []
    self.each_with_index{ |item, i| values << i unless yield(item) }
    values
  end
end
```
#使用例
```ruby
a = (0..19).map{ rand(100) }
# => [29, 73, 39, 71, 4, 71, 43, 65, 61, 21, 53, 62, 47, 72, 78, 96, 1, 2, 44, 70]
a.select_index { |item| item > 70 }
# => [1, 3, 5, 13, 14, 15]
a.reject_index { |item| item > 70 }
# => [0, 2, 4, 6, 7, 8, 9, 10, 11, 12, 16, 17, 18, 19]
s_idx = a.select_index
# => #<Enumerator: ...>
s_idx.each { |item| item > 70 }
# => [1, 3, 5, 13, 14, 15]
r_idx = a.reject_index
# => #<Enumerator: ...>
r_idx.each { |item| item > 70 }
# => [0, 2, 4, 6, 7, 8, 9, 10, 11, 12, 16, 17, 18, 19]
```

#参考サイト
* [select_index monkeypatch](https://gist.github.com/karlseguin/939470) 望んでいる`select_index`ではありませんでしたが、構成を参考にしました。
* [Enumerator とブロックの省略 - まめめも](http://d.hatena.ne.jp/ku-ma-me/20071129/p1) ブロックを省略した場合の処理を参考にしました。

>\# おまじない
return to_enum(:leapfrog) unless block_given?

* [Ruby - ブロックを与えない場合にEnumeratorを返すメソッドを作る - Qiita](http://qiita.com/pasela/items/e57e2e0c60ee2461aaad) `Kernel.#__method__`を参考にしました。

>ブロックが指定されなかったときは、自身のメソッド名を引数にしてenum_forでEnumeratorを返してやればよいわけですね。
※Kernel.#__method__は現在のメソッド名を返します。
The Swift Programming Language "Collection Types"〜Array（配列）〜

The Swift Programming LanguageのLanguage Guideの"Collection Types"よりArrayをざっとまとめたものです。

Objective-Cを始め、既に他の言語を習得されてる方向けです。

[前章 String and Character](http://qiita.com/hmu29/items/e7f2ebbb9ea3dd25171b)
[次章 Collection Dictionary](http://qiita.com/hmu29/items/9095be71496eff368bad)

# 配列

NSArray等と異なり、指定したの型のみしか格納できない。(C,C++,Java的)

# 配列リテラル

[value1, value2, value3]

```Swift
var shoppingList: String[] = ["Eggs, "Milk"]
var str: Array<String> = ["abc", "def"] // Array<String>を短くしたものがString[]

// 型推論も可能
var anotherShopplingList = ["Eggs", "Milk"]
```

# アクセスと変更

## 個数

```Swift
var shopplingList = ["Eggs", "Milk"]
shoppingList.count // 2
shoppingList.isEmpty // false. 配列が空のときtrue
```

## 追加

```Swift
var shoppingList = ["Eggs", "Milk"]

shoppingList.append("Flour") // 配列の末尾にFlourを追加.
shoppingList += "Baking Powder" // appendと+=は同じ.
```

## 参照

Swiftでは配列の添字は、0から始まる

```Swift
var shoppingList = ["Eggs", "Milk"]
var item = shoppingList[0] // "Eggs"をitemに代入
```

範囲外の添字を指定した場合、例外送出.

## 変更

### 単一の要素

```Swift
var shoppingList = ["Eggs", "Milk"]
var item = shoppingList[0]
shoppingList[0] = "six eggs"

item // "Eggs"
shoppingList[0] // "six eggs"
```

範囲外の添字を指定した場合、例外送出.

### 範囲

```Swift
var shoppingList = ["Eggs", "Milk", "Flour"]
shoppingList[1...2] = ["milk", "flour"] // ["Eggs", "milk", "flour"]になる
```

範囲外の添字を指定した場合、例外送出
末尾が範囲外になる場合も、例外送出

## 挿入

```Swift
var shoppingList = ["Eggs", "Milk"]
shoppingList.insert("Flour", atIndex:0)
```

範囲外の添字を指定した場合、例外送出

## 削除

```Swift
var shoppingList = ["Eggs", "Milk"]
shoppingList.removeAtIndex(0) // 0番目の要素を削除する.

shoppingList.removeList() // 末尾を削除する.
```

# 探索

## 基本形

```Swift
var shoppingList = ["Eggs", "Milk", "Flour"]

// shoppingListを順に探索する.
for item in shoppingList {
  println(item)
}
```

## 添字も必要な場合

enumerate関数を利用する.

```Swift
var shoppingList = ["Eggs", "Milk", "Flour"]

// shoppingListを順に探索する.
for (index,item) in enumerate(shoppingList) {
  println("i:\(i) \(item)")
}
```

# 生成と初期化

```Swift
// 要素0
var someInts = Int[]()

// 指定した要素を埋めて生成
var threeDoubles = Double[](count: 3, repeatedValue:0.0) // [0.0, 0.0, 0.0]

// 型推論
var threeDoubles2 = Array(count: 3, repeatedValue:1.25) // [1.25, 1.25, 1.25]
```

# 連結

```Swift
var threeDoubles = Double[](count: 3, repeatedValue:0.0)

var threeDoubles2 = Array(count: 3, repeatedValue:1.25)

var mergedDoubles = threeDoubles + threeDoubles2 // [0.0,0.0,0.0,1.25,1.25,1.25]
```

# 配列はJavaでいう参照型っぽい

```Swift
var threeDoubles = [0.0, 0.0, 0.0]
var threeDoubles2 = threeDoubles

threeDoubles[0] = 1.25
threeDoubles2[0] // 1.25  // threeDoublesを変更すると、threeDoubles2の内容も変更される。
```

# let

配列をletの変数に格納すると、要素は変更できるけど、
要素数は変更できない。

```Swift
var vals = [1,2,3]
let vals2 = vals
vals2[0] = 0 // これはOK
vals2 += 4 // コンパイルエラー
```
[次章 Collection Dictionary](http://qiita.com/hmu29/items/9095be71496eff368bad)
Red5サーバー構築と検証

## Red5とは
* Red5は、Javaで書かれたオープンソースのFlash Player向けマルチプラットフォーム・ストリーミングサーバである
RTMP(Real-Time Messaging Protocol)に準拠しているため Flash Media Server互換と位置づけられている

## サイト
* 本家公式サイト： http://www.red5.org/
* 本家開発サイト： https://code.google.com/p/red5/
* ソースコード
 * 【最新バージョン】https://github.com/Red5
 * 【1.0.1以前】http://red5.googlecode.com/
* 日本Red5ユーザー会： http://www.red5.gr.jp/
 

## 構築手順
#### 環境
* ホストOS: Windows7
* virtualbox
* ゲストOS: CentOS6.5 minimal

#### javaのインストールと環境変数設定
```
/* root権限 */
# yum -y install java-1.7.0-openjdk.x86_64
# yum -y install java-1.7.0-openjdk-devel.x86_64

# vi /etc/bashrc
export JAVA_HOME=/usr/lib/jvm/java
export JRE_HOME=/usr/lib/jvm/java/jre
export PATH=$PATH:/usr/bin/java:$JRE_HOME/bin

# java -version
java version "1.7.0_51"
OpenJDK Runtime Environment (rhel-2.4.4.1.el6_5-x86_64 u51-b02)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
```

#### [Ver. 1.0.1](http://www.red5.org/downloads/red5/1_0_1/)をダウンロードする
#### DLファイル展開と配置
```
$ tar xvf red5-1.0.1.tar.gz
$ sudo mv red5-1.0.1 /usr/local/red5
```

#### 起動スクリプト作成（[参照](http://centos.server-manual.com/centos6_red5.html)）
#### hostname追加
```
$ hostname
[hostname]
$ sudo vi /etc/hosts
127.0.0.1 localhost .... red5centos65
補足：hostnameを/etc/hostsに追加しないと、起動し、このようなエラーが出たことがある
```

#### iptable修正
```
# for red5
-A INPUT -p tcp --dport 1935 -j ACCEPT
-A INPUT -p tcp --dport 5080 -j ACCEPT
補足：1935がRTMPのポートで、5080がデモページのポートである
```

#### 起動
```
$ sudo /etc/init.d/red5 start
```

 

## 検証
#### オンデマンド配信できること
* oflaデモのインストール
* http://lcoalhost:5080/demos/ofla_demo.html

#### ライブストリーミングできること
* http://localhost:5080/demos/publisher.html
 * 3秒ぐらい延期がある



 

## 参照サイト
#### 【紹介】

* http://www.ospn.jp/osc2011-do/pdf/osc2011do-Red5.pdf
 * Red５で何ができるか
 * 音声ファイルや動画ファイルのストリーミング配信
 * Webカメラなどからのストリーミング映像を録画
 * 映像や音声などのライブ映像をリアルタイム配信
 * 複数のクライアント間でオブジェクトを共有
* http://thinkit.co.jp/article/152/2
* http://blog.endpoint.com/2012/04/streaming-live-with-red5-media-server.html
* https://code.google.com/p/red5/
* https://github.com/Red5
* http://red5.googlecode.com/svn/snapshots/
* http://red5guide.com/
* http://thinkit.co.jp/article/152/2/page/0/2
* http://www.sakc.jp/blog/archives/7807

#### 【サーバー構築と検証】
* http://d.hatena.ne.jp/ripjyr/20131011/1381436101
* http://coelacanth.heteml.jp/site/flash_red5/
* http://www.sakc.jp/blog/archives/7807
* http://centos.server-manual.com/centos6_red5.html

#### 【CentOS6.5環境構築】
* virtualbox+centos6.5(minimal)
 * https://www.virtualbox.org/wiki/Downloads
 * http://ftp.iij.ad.jp/pub/linux/centos/6.5/isos/x86_64/
* http://blog.livedoor.jp/yoka3/archives/3861638.html
* http://centossrv.com/centos5-init.shtml
* http://d.hatena.ne.jp/a__z/20071011
* http://te2uma.com/blog/2013/07/07/centos_on_windows_with_virtualbox.html
meta-tagsの使い方

railsでページごとにtitleタグの中身を変えたい場合などに、毎回インスタンス変数に設定したりcontent_forをviewに埋め込んだりすることがありますが、それを簡単に書けるのが[meta_tags](https://github.com/kpumuk/meta-tags)です。
しかし、ちょっとインターフェイスが直感的でないところがあるので簡単に使い方をメモします。

## 共通のtitleやmeta tagを埋め込む
```erb:application.html.erb
<head>
  <% set_meta_tags site: 'My WebApp',
    separator: '-',
    title: 'mypage',
    charset: 'utf-8',
  %>
</head>
```

出力されるhtml

```html
<head>
  <titile>My WebApp - mypage</title>
  <meta content="utf-8" name="charset">
</head>
```

上記のように、実際のtitleタグはsiteとtitleをseparatorで繋いだものになります。

readmeにはこの使い方で出ていますが、set_meta_tagsを2回実行しても再定義されないので、これだとページごとに動的な値をセットしようとしてもできません。
ページごとに変えたい場合は以下のようにします。

## その都度定義したtitleやmeta tagを埋め込む
```erb:application.html.erb
<head>
  <% display_meta_tags default_meta_tags %>
</head>
```

```ruby:application_helper.rb
def default_meta_tags
  {
    site: 'My WebApp',
    separator: '-',
    title: 'mypage',
    charset: 'utf-8'
  }
end

```

```erb:index.html.erb
<% set_meta_tags title: 'welcome!' %>
```

こうするとset_meta_tagsが優先されるので、default_meta_tagsにデフォルト値を書いておいて上書きするといったことができます。
あるいは、default_meta_tagsのハッシュにmergeするようなヘルパを書いても良いかも知れません。

## 定義したtitleなどをview内で呼び出す
meta-tagsの定義するヘルパを使ってtitleなどを呼び出すことができます。

```erb:index.html.erb
<% set_meta_tags title: 'mypage' %>

<h1><%= title %></h1>
```
Windowsにcurlが無い？いいえ、Invoke-RestMethodがあります。GrailsアプリへのPOSTリクエストを試す

最近PowerShellな記事ばっかり書いてる気がしますが…WindowsマシンでGrails開発してるだけです！よ！

`Invoke-RestMethod` コマンドを使ってPOSTメソッドでAPIを叩くときには、こんな感じになります。

```ps1
> Invoke-RestMethod -Uri "http://localhost:8080/myapp/mydomain/myaction/" -Method POST -Body "id=2014&filename=0609.csv&format=json"
```

`Uri` オプションのダブルクオートは無くても動きますが、`Body` オプションのダブルクオートは必須です。`Body` を連想配列で書く方法も用意されてますが…

```ps1
> Invoke-RestMethod -Uri "http://localhost:8080/myapp/mydomain/myaction/" -Method POST -Body @{id="2014";filename="0609.csv";format="xml"}
```

Web屋さんなら `&` でつなぐ書き方の方が馴染みがありますし、何より文字数が少なくて済みますね。

このコマンドで叩いているGrails側のコントローラではこんな風に書いています。

```groovy:MydomainController.groovy
package org.myapp
import grails.converters.JSON
import grails.converters.XML

class MydomainController {

    static allowedMethods = [myaction: 'POST']

    def myaction(String filename) {
        println params   // リクエストパラメータをコンソールに出力
        println filename // filenameをコンソールに出力
        withFormat{
            json { render Mydomain.findByFilename(filename) as JSON
            xml { render ([id:params.id] as XML) }
        }
    }
}
```

`allowedMethods` によってPOSTリクエスト以外を受け付けない指定なので、ブラウザで `http://localhost:8080/myapp/mydomain/myaction/2014` とかを開いても HTTP 405 (Method Not Allowed) となります。

このGrailsのコントローラに対して、最初に書いた `Invoke-RestMethod` コマンドを叩くと…

```ps1
> Invoke-RestMethod -Uri "http://localhost:8080/myapp/mydomain/myaction/" -Method POST -Body "id=2014&filename=0609.csv&format=json"

class           : org.myapp.Mydomain
id              : 2014
filename        : 0609.csv
filetypeCode    : 01
descriptionText : あれに使うCSVファイルです。
```

また、Grailsを実行しているコンソールに以下のような出力が出ます。

```
[id:2014, filename:0609.csv, format:null, action:myaction, controller:mydomain]
0609.csv
```

`myaction()` の引数である `filename` も、リクエストパラメータ `params` からバインドされた値であるため、`params.filename` と `filename` の値は同じですね。`params.format` は `null` になっていますが、Grailsが用意している `withFormat` により指定された `format` の出力を振り分けられるようになっています。

xmlの方を叩いてみましょう。

```ps1
> Invoke-RestMethod -Uri "http://localhost:8080/myapp/mydomain/myaction/" -Method POST -Body "id=2014&filename=0609.csv&format=xml"

xml                                                         map
---                                                         ---
version="1.0" encoding="UTF-8"                              map
```

む。ちょっとわかりにくいですね。`OutFile` オプションでファイルに書き出してやりましょう。

```ps1
> Invoke-RestMethod -Uri "http://localhost:8080/myapp/mydomain/myaction/" -Method POST -Body "id=2014&filename=0609.csv&format=xml" -OutFile result.xml
> 
```

こんな感じのファイルが吐かれます。

```xml:result.xml
<?xml version="1.0" encoding="UTF-8"?><map><entry key="id">2014</entry></map>
```

最初は `allowedMethods` を指定せずGETパラメータで試せば動作は確認できますが、「きちんとPOSTのみ受け付けるようになっているか」はこういった形で確認すべきですね。

`Invoke-RestMethod` のその他のオプション等については牟田口大介さんが「[Invoke-WebRequest・Invoke-RestMethodコマンドレットを使い倒そう](http://winscript.jp/powershell/254)」という資料を公開しているので、こちらをどうぞ。
[手記]XcodeのARC設定の有無によってRelease処理の出し分けを行うマクロ

以下のマクロ群を使えばARC設定を読み取って出し分けしてくれる。

```objc
#ifndef AH_RETAIN
#if __has_feature(objc_arc)
#define AH_RETAIN(x) x
#define AH_RELEASE(x)
#define AH_AUTORELEASE(x) x
#define AH_SUPER_DEALLOC
#else
#define __AH_WEAK
#define AH_WEAK assign
#define AH_RETAIN(x) [x retain]
#define AH_RELEASE(x) [x release]
#define AH_AUTORELEASE(x) [x autorelease]
#define AH_SUPER_DEALLOC [super dealloc]
#endif
#endif
```

ex)

```objc
UIView* view = [UIView alloc] init];
...

AH_AUTORELEASE(view);
```

```objc
- (void) dealloc
{
    AH_SUPER_DEALLOC;
}
```

こちらより
https://gist.github.com/nicklockwood/1563325
OpenShift で cron を実行する

以下コマンドで cron が使えるようになる。

```bash
rhc cartridge-add cron-1.4 --app アプリケーション名
```

sshで接続して確認するとこんなディレクトリ構成になっている。daily, hourly, minutely, monthly, weekly ディレクトリに実行プログラム, jobs.allow, jobs.deny を配置することで定期処理が行われる。

```bash
cd $OPENSHIFT_REPO_DIR.openshift/cron/
tree -d .
.
├─ daily
├─ hourly
├─ minutely
├─ monthly
├─ README.cron
└─ weekly
```

例えば1分おきに test.php を実行させたい場合は、minutely ディレクトリ内に jobs.allow, jobs.deny, test.php ファイルを作成する。

```bash
cd $OPENSHIFT_REPO_DIR.openshift/cron/minutely/
touch jobs.allow jobs.deny test.php
```

test.php は $OPENSHIFT_LOG_DIR/test.log に 現在年月日時分秒 を出力するだけの簡単なもの（※ 1行目に `#!/usr/bin/php` を書かないと実行されないので注意）

```php
#!/usr/bin/php
<?php
date_default_timezone_set( "Asia/Tokyo" );
$log_file = $_SERVER["OPENSHIFT_LOG_DIR"] . "test.log";
$now_date = date( "Y年m月d日 H時i分s秒" );
file_put_contents( $log_file, "{$now_date}\n", FILE_APPEND );
```

最後に jobs.allow に実行させたいプログラムを記述して終了。これで1分毎に test.php が実行される。

```bash
cd $OPENSHIFT_REPO_DIR/.openshift/cron/minutely/
echo "test.php" > jobs.allow
```

きちんと実行されているか tail で確認。実行時間にムラがあるけど毎分実行されている。

```bash
tail -f $OPENSHIFT_LOG_DIR/test.log
2014年06月09日 15時07分13秒
2014年06月09日 15時08分11秒
2014年06月09日 15時09分10秒
2014年06月09日 15時10分22秒
```

プログラムの実行をとめる場合は jobs.allow の該当行を削除またはコメントアウトする。

```bash
cd $OPENSHIFT_REPO_DIR.openshift/cron/minutely/
vim jobs.allow
# test.php
```

「5分おきに実行」「毎週金曜の5時5分に実行」といった制御はできない（有料プランだとできる？不明）。

どうしてもやりたいのであれば、プログラム内で時間みて制御する。「5分おきに実行」であればこんな感じか。

```php
#!/usr/bin/php
<?php
if ( date("i") % 5 !== 0 ) {
	exit;
}
// 実行させたい処理
```
Cocos2d-xで最初につまづいたこと

XcodeでCocos2d-xを使い始めたCocominapです。
このフレームワークは使用言語がC++。
なんとなく慣れたObjective-Cや、絶賛拡散中のSwiftではないのですね。

Cocos2d-x や C++に不慣れな私が、サンプルコードを打ち込んでいく中でつまづいたことを書いていきます。

# エラー続出
    Sprite* hiyoko = Sprite::create("hiyoko.png");

書籍を参考に、スプライトを生成するコードを書いたらエラーでした。


> Unknown type name 'Sprite'; did you mean 'cocos2d::Sprite'?

問題の原因はコンパイラが教えてくれていました。
関数名などの衝突を防ぐためにC++で用意されている、名前空間が指定されていなかったのです。

	Sprite* hiyoko = cocos2d::Sprite::create("hiyoko.png");

めでたしめでたし。
でも一つ疑問点が。書籍で引用されていたコードには、cocos2d::などという記述はありません。
これはいったい。

# 名前空間を一括で指定
ググったら、あっけなく解決しました。

	using namespace cocos2d

などと書いてあげるだけで、そのファイルの中では、名前空間を指定する必要がなくなります。



ただし、名前衝突防止の仕組みは無効化されるので、複数人で開発する場合などは、気をつけた方がいいかもしれませんね。




私の場合は、小規模なサンプルを作っている段階ですので、とりあえず今回はこれで解決とします。
ではまたー。


###追記1 (2014/6/10)

他のファイルによってインクルードされるファイルにこの記述を使うと、無効化される範囲が広まってしまうので要注意です。ヘッダファイルではなく、cppファイルの冒頭などに記述するのが良いかと思われます。また、より限定された範囲で使いたい場合、特定のスコープの中に記述すればOKです。
@TeamMosa2 さんにご指摘いただきました。ありがとうございます！


###追記2 (2014/6/10)

	USING_NS_CC;

がCocos2d-xではより適切のようです。定義元を確認すると、

    #define USING_NS_CC using namespace cocos2d

となっており、ご指摘いただきました通り、using namespace〜と同義です。

コメント欄にてご指摘いただいた @giginet さん、ありがとうございます！
Mac OS X 対応 SQLite DB のGUIクライアント


[SQLite Database Browser by sqlitebrowser](http://sqlitebrowser.org/)

上記ページの手順に従ってMake&Install


あらかじめ Homebrew で SQLite と Qt をインストール

```
$ brew install sqlite --with-functions
$ brew install qt
``` 

github からソースコードを落としてくる

```
$ git clone https://github.com/sqlitebrowser/sqlitebrowser.git
```

make 

```
$ cd sqlitebrowser
$ qmake
$ make
$ mv src/sqlitebrowser.app /Applications/
```
Swiftでは配列の型が確定しないとfor inは扱えない(気がする)



Swiftでは配列に型を指定できるようになっていて、for in文によるループも使えるようなのですが、通信結果のデータをJSONObjectにしたものなど、型をコーディング時に指定できない配列は一度配列自体を特定の型の配列かどうかOptional Bindingで判定しなければいけないようです。

（ベータでない正式なSDKがダウンロードできるようになってから試さなければ内容に正確性はないので、正式なSDKが出てから試したい内容です）

コード例:

```swift
//通信結果などのデータでArrayの要素が混在する可能性がある場合
var array : AnyObject[] = ["abc", 1]
        
//Optional Bindingで全ての要素が特定のObjectかどうかを判定
if let downCastArray = array as? String[] {
    //全ての要素がString確定
    for object : String in downCastArray {
        println(object.uppercaseString)
    }
}

```

ちなみにループを回し要素ごとに値をチェックしたいなら、オーソドックスにfor文を使い要素ごとにOptional Bindingを使うという手はあると思います。

```swift
//要素ごとに判定しなければいけないならfor in文は使えなさそう
for (var i = 0; i < array.count; i++) {
    //要素ごとに確定させていく
    if let string = array[i] as? String {
        println(array[i].uppercaseString)
    }
}
```

# 参考：
[Apple公式]Using Swift with Cocoa and Objective-C :Working with Cocoa Data Types
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/WorkingWithCocoaDataTypes.html
編集モードと登録モードの切り替え

##やりたいこと

編集ボタンを押したら、
![sample1.png](https://qiita-image-store.s3.amazonaws.com/0/34560/44550a51-2c10-0f92-28a2-4640fadb8f27.png)

編集モードに変更する。
![sample2.png](https://qiita-image-store.s3.amazonaws.com/0/34560/3a288e1b-1b10-f733-1c35-307e4eca1e12.png)

登録ボタンを押せば、参照モードに戻る。

##実現方法
参照divと、編集divを用意しておいて、ボタン押下でhide()したりshow()したりする。

```html:html
<div class="show_mode">
  <!-- 省略 -->
</div>
<div class="edit_mode">
  <!-- 省略 -->
</div>
```

```js:jQuery
//編集ボタン押下
$('#edit_btn').click(function(){
  //参照divを隠して、編集divを表示する。
  $('.show_mode').hide();
  $('.edit_mode').show();
});
//登録ボタン押下
$('#edit_btn').click(function(){
  //サーバ側とやり取り
  //セレクトの結果で参照div内の文字を修正。もしくはここもhide()show()。
  
  //参照divを表示して、編集divを隠す。
  $('.show_mode').show();
  $('.edit_mode').hide();
});

```


##その他
上記方法が今のところ自分の中でベストだが、スタンダードな方法はどうやるのだろう。そして、もっとスマートなやり方があれば教授して頂けたらありがたい。
Apache on Windows でVirtualHost

## バーチャルホスト？

Windows PCでローカルに開発環境作ります。
ぶっちゃけバーチャルホストに用はないので、いつも後回しにして捨ててました。
都度ドキュメントルートを入れ替えれば良いのですもの。
それでも、ま、やりましょう。
環境を毎度毎度作りなおさなくてもルーティングを使えますし、テスト用と開発用とデベロップ用が同時に動きますし。

## Apacheの設定

### 環境

+ Windows 7 Professional
+ Apache 2.4.7  
  Server version: Apache/2.4.7 (Win64)  
  Apache Lounge VC11 Server built:   Nov 21 2013 14:06:21  
  少し古い？ですが大体いけます…
+ ディレクトリ環境  
  1. c:/bin/Apache24/bin  -- Apache binディレクトリ
  2. c:/var/www -- DocumentRoot
  3. c:/var/www/reveal -- 適当なディレクトリ  
     （フレームワークで構築されたDocumentRootとか）

### httpd.conf

"virtual" で検索をかけて include ポイント探します
コメントを解除しincludeを機能させます

```pl:c:/bin/Apache24/conf/httpd.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
```

影響しそうな箇所があるけど、その時に対応すればいいので放置して保存します。

### httpd-vhosts.conf

% #バックアップ
% cp c:/bin/Apache24/conf/extra/httpd-vhosts.conf c:/bin/Apache24/conf/extra/httpd-vhosts.conf.bkup

サンプルをがっつり書き換えます。
後でチェックするので適当でも良いです。
ログも見なければいりません。

```pl:c:/bin/Apache24/conf/extra/httpd-vhosts.conf
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost 127.0.0.1:80>
    ServerAdmin aaa@localhost.local.test
    DocumentRoot "c:/var/www"
    ServerName tamian
    ServerAlias www.tamian
    ErrorLog "logs/tamian.error.log"
    CustomLog "logs/tamian.access.log" common
</VirtualHost>

<VirtualHost 127.0.0.2:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "c:/var/www/reveal"
    ServerName reveal
    ServerAlias www.reveal
    ErrorLog "logs/reveal.error.log"
    CustomLog "logs/reveal.access.log" common
</VirtualHost>
```

### チェックする

Syntax OK が出ればOK。
間違ってたら間違っている箇所が出る。

```bat:cmd.exe
C:\>cd  \bin\Apache24\bin

C:\bin\Apache24\bin>httpd -t
Syntax OK

C:\bin\Apache24\bin> REM httpd -h  ← ヘルプ
C:\bin\Apache24\bin> REM httpd -v  ← バージョン
```

## Windowsの設定

### hosts

ファイルはここにあるのですが管理者権限で編集しないと拒否されます。
C:\Windows\System32\drivers\etc\hosts

1. [スタートメニュー]→[プログラムとファイルの検索:notepad]
1. ヒットしたnotepad.exe を右クリックして[管理者として実行]  
  ※ 他のエディタだと保存が拒否されるかも
1. 管理者として実行します？[はい]
1. 管理者権限で起動したメモ帳アプリファイルから[ファイルを開く(ctrl+o)]
1. ファイル名:C:\Windows\System32\drivers\etc\hosts [ッターン]

これでようやく編集できます（めんどくさい）
追加して保存して下さい。
127.0.0.2 でもローカル開くって知りませんでした。びっくりしました。

```bat:C:\Windows\System32\drivers\etc\hosts
127.0.0.1        tamian www.tamian
127.0.0.2        reveal www.reveal
```

## Apache再起動

### タスクトレイのApache Monitorでリスタートしました

特になにもありませんでした。


## Apache再起動

### タスクトレイのApache Monitorでリスタートしました

特になにもありませんでした。

## ブラウズ

### Firefox

アドレス確認。
http:// と 最後の / は省略しないで下さい。
（最後の / 不要かもしれない）

アドレス：http://tamian/
アドレス：http://reveal/

指定したディレクトリが見えていればOK。
[Rails] Ajaxでリクエストを送っていて、セッションが切れるとき


##ケース1: csrf_meta_tagsを付け忘れている

```application.html.erb
<head>
  <%= csrf_meta_tags %>
</head>
```

* 他の場所からレイアウトをコピペしたときに、上記タグが削除されたまま、ということがあった。
* ここでcsrf-tokenを引き回しているので、忘れずに足しておいてね。

##ケース2.ajaxでリクエストを送るときに、csrfトークンがマッチしていない
```ajax.js
$.ajaxSetup({
  beforeSend: function(xhr) {
    xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
  }
});
```

* __jquery-fileupload-rails__などを使っていて、ajaxリクエストを送っているとき
* csrf-tokenの引き回しができていなかったようなので、上記コードが必要でした

-

参考
https://stackoverflow.com/questions/5126721/rails-not-reloading-session-on-ajax-post/5127927#5127927
Activity not started, its current task has been brought to the frontについて


Androidのアプリでプリファレンス機能を用いて、アプリ内にデータの保存等を行う際に起動時に、

```
Activity not started, its current task has been brought to the front
```

というエラーがでるようになったのでなにかと思ったら、どうやらプリファレンス機能を用いると起動するごとにコードがどのように変更されたかをチェックしているみたい。
なので、改行するでも、//を使うでもなんでもいいけど、コードを起動前と変える必要があるみたいです。
【CakePHP】FormHelper


## 共通パラメータ 
基本的には第一引数が、\$fieldName。第二引数が、$optionsである。

名前|内容
---|---
$fieldName|idとnameの設定
$options|属性の設定

### fieldNameについて
hogeを設定すると、id="hoge" name="data[hoge]"となる。
Hoge.hugaを設定るすると、id="HogeHuga" name="data[Hoge][huga]"となる。

通常は、「モデル名.カラム名」を設定する。モデル名を省略すると、create()メソッドで指定したモデル名が使用される。


#テキストボックス

```php:フォーマット
$this->Form->text($fieldName, $options = array());
```

```php:例
$this->Form->text('User.name', array('class'=>'class_name'));
//=>戻り値
//<input id="UserName" name="data[User][name]" class="class_name"/>
```

#テキストエリア

```
$this->Form->textarea($fieldName, $options = array());
```

```php:例
$this->textarea('Post.memo', array('class'=>'class_name','value'=>'てすとてすと'));
//=>戻り値
//<textarea id="PostMemo" name="data[Post][memo]" class="class_name">てすとてすと</textarea>
```

#チェックボックス

```php:フォーマット
$this->Form->checkbox($fieldName, $options = array());
```

```php:例
$this->Form->checkbox('User.name', array('class'=>'class_name'));
//=>戻り値
//<input id="UserName" name="data[User][name]" class="class_name"/ type="checkbox">
```

#セレクトボックス
**他と違って、第二引数がセレクトボックスの値。第三引数がタグ属性となる。**

```php
$this->Form->select($fieldName, $options = array(), $attributes = array())
```

###第二引数　$options 
optionタグの値を連想配列で設定する。
array(0=>'hoge',1=>'huga')と設定すると、

```html
<option value="0">hoge
<option value="1">huga
```
が出力される。

###第三引数　$attributes
設定値を連想配列で渡す。

①class
class属性

②empty
optionタグの先頭の項目。
'empty'=>falseで先頭がなくなる。
'empty'=>array('0'=>'-')と書くと

```html
<option value="0">-</option>
```
と出力される。

③value
デフォルト値を設定することができる。
デフォルト値に設定したい、value値（第二引数のkey）を設定する。
'value'=1と設定すると、

```html
<option value=1 selected="selected">
```

と出力される。
特定のURL時にパラメーターをつけてリダイレクトさせる

サイト内のあるページに来た時に、
パラメーターをつけてそのままリダイレクトをかけさせます。

```lang:.js
var curURL = document.URL;
if(curURL.match(/information/)){   //URLにinformationがある時に
  if(curURL.match(/\?/)){//URLにパラメーターが既についているか判断する。
    location.href = curURL + "&test=123"
  }else{
    location.href = curURL + "?test=123"
  }
}
```
railsのmigrationで追加するカラムの順番をコントロールする

railsで既に存在するテーブルにカラムを追加する時に、カラムの並びをコントロールしたいというお話

---

### テーブル例

以下のようなテーブルがあって、更にmobile_phoneカラムを追加する場合。

```rb:schema.rb
  create_table "users", :force => true do |t|
    t.string   "name"
    t.string   "email"
    t.string   "phone"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end
```

以下のようなマイグレーションファイルでmobile_phoneカラム追加することになると思います。 
しかし、これだとmobile_phoneカラムは最後に追加されてしまう。rails consoleやsequel proで見た時にphoneカラムとmobile_phoneカラムが離れちゃって見難い。

```rb:migration_file.rb
class AddMobilePhoneToUsers < ActiveRecord::Migration
  def change
    add_column :users, :mobile_phone, :string
  end
end
```

---

### 解決策

以下のように `add_column`メソッドに`after`オプションを指定してあげると、phoneカラムの隣にmobile_phoneカラムが追加される。

```rb:migration_file.rb
class AddMobilePhoneToUsers < ActiveRecord::Migration
  def change
    add_column :users, :mobile_phone, :string, after: :phone
  end
end
```

---

[参考URL](http://stackoverflow.com/questions/371796/in-a-rails-migration-mysql-can-you-specify-what-position-a-new-column-should)