OmniAICreator/Qiita-1.07M huggingface dataset:
2台目のMacにiPhoneDeveloperの証明書を引き継ぐ方法


今まで1台のMacBookで事済んでいたけど、持ち歩く用のAirにも必要性を感じたため今更開発環境を作り直した。
基本的なことは一通り出来て、さて実機で・・・と思ったらこんなエラーが・・・。

```consoleのエラー内容
$ rake device
Build ./build/iPhoneOS-7.0-Development
Link ./build/iPhoneOS-7.0-Development
（略）
iPhone Developer: **** **** (******): no identity found
```
※ちなみに開発はRubyMotionで行っているため、エラー内容はRMのものです。が、この証明書の移行自体はRMだろうと何だろうと関係無いと思いますので参考にしてください。

はて？と思いつつちょっと考えたら確かに証明書移行してないことに気が付く。

1.1台目のMacでアプリケーションのキーチェーンアクセスを開く
2.証明書欄の`iPhone Developer: **** ****(****)`を選択して、`iPhone Developer: **** ****(****)を書き出す`を実行
3.フォーマットは個人情報交換を選択
4.パスワードを入力してOKを選択。（このパスワードは2台目へ移行した時にも必要となる）
5.出来た証明書ファイルを2台目Macへ転送
6.2台目Macで証明書をダブルクリック。この時4で設定したパスワードを入力
7.1と同じように今度は2台目のMacでアプリケーションのキーチェーンアクセスを開いて、対象の証明書が入ってればOK

```console
$ rake device
（略）
*** Application is running on the device, use ^C to quit.

```
動いたー。

ちなみにこの作業後ネットで調べたら情報が山ほど出て来ました。
しかも画像付きで。なんで最初にネットで調べなかったんだろ・・・・。別にいいんだけどさ・・・。
Selenium IDE で正規表現を使って値を検証する

Selenium IDE の `verifyText` などで一定のルールで変動する値の検証をしたいと思い、正規表現が使えないか調べたらありました。さすがです。

下記は `suzuki86` のプロフィールの Contribution の値が数値1桁以上で表示されていることを確認するコマンドです。`hoge` とか文字列が出てしまっていたり、何も表示されていなかったりするとテストが失敗しますので表示されている値の妥当性の検証に使えそうです。

|コマンド|対象|値|
|---|---|---|
|open|http://qiita.com/suzuki86||
|verifyText|//html/body/div/section/div/div/div/div/div/div[2]/span|regex:[0-9]+|

下記を参考にしました。ありがとうございます。
http://oss.infoscience.co.jp/seleniumhq/docs/04_selenese_commands.html#id10
Phalcon Developper Tools のインストール（Linux）


## 1. git から cloneする。

```
$ git clone git://github.com/phalcon/phalcon-devtools.git
```

## 2. /usr/local/src にファイルを移動する　

別に/usr/local/srcじゃなくても良いです。システムにあわせて適当に。

```
$ sudo mv phalcon-devtools /usr/local/src
```

## 3. インストール

実際には、bashにPATH通してるだけです。

```
$ cd /usr/local/src/phalcon-devtools
$ . ./phalcon.sh  
```

※２行めの ./phalcon.sh の前に、ドットがあるのでわすれずに。


## 4.完了

~/.bash_profile に下記のような行が追加されます。
bash以外のシェルを使っている人はこれだとだめかもね。

```
export PTOOLSPATH=/usr/local/src/phalcon-devtools/
export PATH=$PATH:/usr/local/src/phalcon-devtools
```


## 5. 試してみる


コンソールで phalcon と打ってみる。

```
$ phalcon

Phalcon DevTools (1.2.6)

Available commands:
  commands (alias of: list, enumerate)
  controller (alias of: create-controller)
  model (alias of: create-model)
  all-models (alias of: create-all-models)
  project (alias of: create-project)
  scaffold
  migration
  webtools

```

これが出ればOK

参考
http://phalcon-docs-ja.readthedocs.org/ja/latest/reference/linuxtools.html
Google App Engine/GoのアプリをIntelliJ IDEAを使って開発する環境を構築する方法


## 環境構築手順
1. IntelliJ IDEA 13 Community Editionをインストールする
1. App Engine SDK for Goをインストールする
1. IntelliJにgolangプラグインをインストールする

### IntelliJ IDEA 13 Community Editionをインストールする
http://www.jetbrains.com/idea/download/
IntelliJ IDEAは有償エディションもあるがGAE/Goで使うには無償のCommunity Editionでおｋ 

### App Engine SDK for Goをインストールする
Google公式で[Google Cloud SDK](https://developers.google.com/cloud/sdk/)という管理ツールを出している。App Engine SDK for Goはこのツールでインストールできるので先にインストールしよう。Google Cloud SDKのセットアップが終われば、`gcloud components update gae-go`を実行することでApp Engine SDK for Goがインストールできる。

## IntelliJにgolangプラグインをインストールする
今回はGithubで開発中の最新のgolangプラグインを使うので、自分でビルドするか[ここ](https://github.com/go-lang-plugin-org/go-lang-idea-plugin/releases)からダウンロードしてくる。どちらの場合でもjarファイルを入手したらIntelliJを開き、Preference -> Plugins上でInstall plugin from disk…を選択し入手したjarを指定する。これでインストールできる。

インストールに成功するとIntelliJの右上に「GOROOTとGOPATHを設定しろ」と表示される。[ここ](https://github.com/go-lang-plugin-org/go-lang-idea-plugin/blob/master/Missing%20ENV.md)に解決策が載っているが、Linuxなら`/etc/environment`、OSXなら`/etc/launchd.conf`でGOROOTとGOPATHを定義し、OSを再起動すればおｋ。
このとき指定するGOROOTは僕の場合、`/Users/grapswiz/google-cloud-sdk/platform/google_appengine/goroot`だった。
もし既にシェルの設定ファイル（.bashrcや.zshrc）で設定した場合でも見つからないと表示されることがある。これはOSXやLinuxではIntelliJがシェル上の環境変数を受け継げないことが要因だ。

## 新しいGoogle App Engine/Goプロジェクトを作ってみる
File -> New ProjectでGo App Engineを選択する。Project SDKには{google cloud sdkをインストールしたディレクトリ}/google_appengineを指定する。僕の場合は`/Users/grapswiz/google-cloud-sdk/platform/google_appengine`だった。下記画像のようにGo App Engine x.x.x(xは変わる可能性あり)と表示されていれば設定成功だ。Finishをクリックすればソースコードを書き始められる。
![スクリーンショット 2014-03-12 1.26.59.png](https://qiita-image-store.s3.amazonaws.com/0/15757/cb385e0e-da06-85f6-9b69-56c5a12fdcd7.png "スクリーンショット 2014-03-12 1.26.59.png")
logger オブジェクト生成時にクラスを指定しない方法

logger オブジェクトを生成する際、以下のように書くとします。

```java:commons-loggingの場合
public class Hoge {
    private static Log LOGGER = LogFactory.getLog(Hoge.class); 
...
```

この引数の`Hoge.class`を間違えて他のクラスを指定しまうことがないとは言えません。
（めったにないとは思いますけど、、）  

間違いを防ぐためにクラスを指定しないで logger オブジェクトを生成する方法を 2 つ紹介します。
（インスタンスフィールドにするというのは今回はなしで）

##  ユーティリティーメソッドを作る
以下のようなメソッドを作成し、これを使用して logger オブジェクトを生成します。

```java:ユーティリティ
public final class LogUtils {

    public static Log getLog() {
        StackTraceElement[] stackTraces = new Throwable().getStackTrace();
        String sourceClassName = stackTraces[1].getClassName();
        try {
            return LogFactory.getLog(Class.forName(sourceClassName));
        } catch (LogConfigurationException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}
```

```java
public class Hoge {
    private static Log LOGGER = LogUtils.getLog();
...
```

## lombok を使う
[lombok](http://projectlombok.org) の`@Log`系アノテーションを使用します。 
commons-logging 以外にも様々な log ライブラリに対応しています。[こちら](http://projectlombok.org/features/Log.html) を参照。
以下のように書くと自動的に Log オブジェクトが生成されて static フィールド `log` が初期化されます。

```java:commons-loggingの場合
import lombok.extern.apachecommons.CommonsLog;

@CommonsLog
public class Hoge {
...

    log.error("error.");
...
```
CarPlay を iOSシミュレータで試してみる

[@stroughtonsmith](https://twitter.com/stroughtonsmith) さんが手順を公開してらっしゃったので試してみました。

----

# 外部ディスプレイに CarPlay を表示させる
OS X のルートディレクトリに空の `Appleinternal` という空フォルダを作成してください。

```shell-session
$ sudo mkdir /Appleinternal
```

Finder で Macintosh HD に同名のフォルダを作成してもかまいません。
そして iOS シミュレータを再起動するとメニューのハードウェア > 外部ディスプレイに CarPlay ... という項目が表示されます。

![carplay.png](https://qiita-image-store.s3.amazonaws.com/0/5068/b0ebaa1b-ecf4-b368-1be5-65058176c82b.png)

これを選択すると以下の様なウィンドウが表示されます。

![7da6414dbfe36321a46546542b168145.png](https://qiita-image-store.s3.amazonaws.com/0/5068/1aef9396-e30a-29ec-ae41-122d647cf3d4.png)

Run を押すと CarPlay のディスプレイが表示されます。

![edfc48d642400963f9c6ab64585c59da.png](https://qiita-image-store.s3.amazonaws.com/0/5068/89eb7f59-8c2f-6ed7-434c-c898acecffca.png)

ちなみに Back Button 等を有効にすると非常に脱力系のコントロールが表示されます...是非お試しください。

# Maps アプリを CarPlay に表示させる
`/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/usr/lib/libMobileGestalt.dylib`をバイナリエディタで編集します。
作業前にバックアップをとっておくことをおすすめします。

今回は [0xED](http://www.suavetech.com/0xed/0xed.html) を利用しました。ちなみに OS X で定番のバイナリエディタはなんなのでしょう。

libMobileGestalt.dylib を 0xED.app で開き、Go to Offset で 399DA にジャンプし 45 となっているところを 43 にし Save します。ちなみにこのアドレスの変更によって有効になるのは 64bit の iOS シミュレータのみです。

![fb3b13a60649eb46afdc1d567f0ab599.png](https://qiita-image-store.s3.amazonaws.com/0/5068/1ec794e9-ce2c-a543-8e4c-79193b124bb0.png)

そして iOS シミュレータを再起動して Maps を起動してみましょう。

![c7af4e1c42b9da7b95611e37c841a6f3.png](https://qiita-image-store.s3.amazonaws.com/0/5068/9e417f67-8278-5b5b-2e47-bd9a2294880e.png)

表示されました。楽しいですね。
Scala: Stringを安全にIntに変換する


[Pierre Andrews : Safely parsing Strings to numbers in Scala](https://coderwall.com/p/lcxjzw)に詳しく書いてある。

変換時の注意点

* 異常時の `java.lang.NumberFormatException` をキャッチしないといけない

変換できたときは `Some(10)` のようなものが返り、そうでなければ `None` が反るような実装にするといい:

```scala
def safeStringToInt(str: String): Option[Int] = {
    import scala.util.control.Exception._
    catching(classOf[NumberFormatException]) opt str.toInt
}
```


さらにimplicit classにすると汎用的に使いやすくなる:

```scala
object StringUtils {
     implicit class StringImprovements(val s: String) {
         import scala.util.control.Exception._
         def toIntOpt = catching(classOf[NumberFormatException]) opt s.toInt
     }
}
```

もっといい方法がないかStackOverflowなども調べてみたが、どうやら上記のやりかたが一種の定型文化しているみたいだった。Scalaがデフォルトで `"1".toIntOption` とか提供してくれても良さそうなものだが。

ちなみに、scalaz なら `"1".parseInt.toOption` らしい。
yasnippetで任意個の引数を展開する

[yasnippet](https://github.com/capitaomorte/yasnippet)で任意個のfieldを作る方法を紹介する。
ソースコードは[github](https://github.com/marubu/yasnippet-numpy-style)に置いてある。
(そもそものyasnippetの使い方は上のリンク先を参考にしてください)

### 任意個の引数の展開
yasnippetはheaderに`#type : command`を書くことでsnippetに直接emacs lispを記述でき、これによりsnippetの自動生成が可能になる。
この方法で[numpyで採用されているコーディング規約](https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt)(PEP8,PEP257に準拠)に基づいたdocstringの引数の部分に関するsnippetを作った。

まずはデモ動画をどうぞ。!
![snippet_parse.gif](https://qiita-image-store.s3.amazonaws.com/0/37775/1db0063b-afd4-45d5-4151-764f644e243e.gif)

* `def`のdocstringであればその引数、`class`のdocstringであれば`def __init__`の引数をparseする。
* parseには関数定義部分をpythonインタプリタに渡している。
* 関数定義部分は最大５行としている。(5という数字に積極的な理由はない)

さらにemacs lispを頑張ることでより複雑で便利なsnippetsを作ることができるはず。
皆様の熱いsnippetをお待ちしております。
- - -
またもうひとつ、上記のsnippetとdocstring付きの関数を作るsnippetを組み合わせた連続展開を紹介しておく。

### tab連打でのsnippetの連続展開
またこれを実現するためには`.emacs`に

```el:.emacs
(setq yas-triggers-in-field t)
```

を書いておく必要がある。

先ほどと同様まずはデモ動画をどうぞ。
![snippet_successive.gif](https://qiita-image-store.s3.amazonaws.com/0/37775/5418bb78-65d6-8f5a-6827-9dc4c76191ef.gif)

* yasnippetではfield内を編集中かどうかで様々な挙動が変わる。tabキーの動作もその一つ。
* 通常、tab連打では編集中の動作に入れない。
* ここではsnippet内に埋め込めるemacslispを用いて元の文字列を変換させることで強制的に編集中にさせている。
* さらにその変換後の文字列を展開したいsnippetのkeyと同じにすることでそのまま展開が可能になる。
* tab連打で展開できるため、あたかも通常通りにsnippetを展開しているかのように連続展開ができる。

以上。
vagrantでVirtualboxを使っている場合にnicを追加するときの話



前置き：vagrantのネットワーク話
===

vagrantが相手をするproviderに依存せずnicの追加をする場合、たぶんこんな風に書いていると思います

```ruby
Vagrant.configure("2") do |config|
  config.vm.network "private_network", ip: "192.168.50.4"
end

```

[PRIVATE NETWORKS](http://docs.vagrantup.com/v2/networking/private_network.html)

上記の場合、virtualboxは、「ホストオンリーネットワーク」の中で「192.168.50.1」が設定されているvboxnetを探して接続します。
該当するネットワークアドレスを持つvboxnetが無い場合には、新規にホストオンリーネットワークを作成します。

油断すると、ホストオンリーネットワークが大量に作成されていると思います。

しかし、こいつ、名前の通り外に出れません。
また、デフォルトでは、VM間の通信も出来ません（拒否設定）

本題：NICの追加
====

vagrantで作成したVMにNICを追加する一般的なやり方は上記です。
しかし、これだと追加したネットワークは外部とやりとりできません。
通常は特に問題ないと思いますが、例えばNested VMなどをする場合に外部通信できるネットワークを追加したくなる場合が稀にあります。

vagrantの基本の書き方では、上記のprivate_networkするか、もうひとつのpublic_networkという書き方があります。
しかし、public_networkはホストのマシンのNICにbridgeするだけなので、あまり嬉しくない場合もあります。

そこで、virtualboxのネットワーク機構を直にいじる方法です。
事前にNATネットワークを作っておくと良いです。

NICを追加して、virtualboxのNatnetworkに接続し、VM間通信も許可する設定
---

ということで、こんな感じ

```ruby
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.provider :virtualbox do |vb|
     vb.customize ["modifyvm", :id, "--nic2","natnetwork"]
     vb.customize ["modifyvm", :id, "--nictype2","82540EM"]
     vb.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]                  
  end
end
```

nicXという書き方で、アダプタを外部から操作します
上記を実行するとこんな感じ
![nic.png](https://qiita-image-store.s3.amazonaws.com/0/28157/232e4873-f4f4-4326-a3e5-d75d4edaebc4.png "nic.png")

__nic1は、もともと付いているnicでこいつをいじってしまうと、vagrantコマンドと通勤できなくなります。__

他にもいろいろできると思います。この[あたり](http://www.virtualbox.org/manual/ch08.html)の設定とにらめっこすれば・・・

virtualboxのネットワークの話は、以下の記事が参考になりました。


VirtualBox ネットワーク設定
http://iwsttty.hatenablog.com/entry/2013/12/08/194430
カスタムセル内のパーツに対してGesture Recognizerを使うときのメモ

##StoryBoardからgesture recognizerをTable View Controllerに接続できない
カスタムセルはストーリーボードとは別のxibファイルで定義するため、アシスタントエディタを使ったドラッグ・アンド・ドロップではジェスチャリコグナイザをビューコントローラに接続できない（ビューコントローラと何かのパーツを接続したいなら、ストーリーボードを開いてアシスタントエディタを使う必要あり）。
またビューコントローラ内でジェスチャリコグナイザを生成できないと、`[self dismissViewControllerAnimated:YES completion:nil];`などが使えない。
そうなると、ジェスチャ経由で画面遷移する手段がなく、例えばカメラ起動などができなくなってしまう。

問題解決の手法としてはカスタムセル側にプロトコルを用意すればコントローラ側でうまくやれるのかもしれないが、ここではプログラムによるジェスチャリコグナイザの追加を行ってみた。

ジェスチャリコグナイザは、`viewDidLoad`内で、かつ`self.tableview`に対してaddするのがミソ。

```objectivec
- (void)viewDidLoad
{
	/...

    UILongPressGestureRecognizer *tapRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(didLongPress:)];
    [self.tableView addGestureRecognizer:tapRecognizer];
}
```

@selectorに設定した応答メソッドはこのような形に（サンプル）。

```objectivec
- (void)didLongPress:(UIGestureRecognizer *)gestureRecognizer
{
    if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
        CGPoint longPressLocation = [gestureRecognizer locationInView:self.tableView];
        NSIndexPath *longPressedIndexPath = [self.tableView indexPathForRowAtPoint:longPressLocation];
        RecordCell *longPressedCell = [self.tableView cellForRowAtIndexPath:longPressedIndexPath];
        
        //longPressedCellを使った操作を実装

        NSLog(@"Long Pressed! %@", gestureRecognizer);

    }
}
```

`UIGestureRecognizerState...`を絞らないと、応答メソッド内の処理が何度も呼ばれることになるので注意。

[参考](http://stackoverflow.com/questions/4604296/uigesturerecognizer-and-uitableviewcell-issue)
AngularJS でAPIをコールし結果を取得するサンプル①


WEBサービス作るにはサーバのAPIと連携しないと意味ないよねってことで、勉強がてら作成してみたメモです。

**[2014/3/15追記]** この例はHTMLページとAPIが同一サーバの場合です。APIが別サーバの場合は、JSONPを利用する必要があります。
**[2014/4/13追記]** 非同期での通信や、応答に時間がかかるAPIなどを考えると、ngResource を利用した方が良いみたいです。続編を書いたのでこちらを参照 ⇒ [AngularJS でAPIをコールし結果を取得するサンプル②](http://qiita.com/hkusu/items/52df7eb9f77beef16168)
**[2014/5/11追記]** さらに続編を書いたのでこちらを参照 ⇒ [AngularJSでAPIをコールし非同期で画面を更新する](http://qiita.com/hkusu/items/93d12bd0b62dc8e60f4a)

## 作成したデモページ

[API発行]ボタンを押すと、APIコールでJSONファイルを取得して結果をTABLEに表示します。
http://hkusu.github.io/AngularJS_apicall_demo
（GitHub Pages で動かしています。）

## コード

前の[こちら](http://qiita.com/hkusu/items/7d748b55ba73cc8a3675)の投稿の構成を元に、下記のようにコードを記載。

```html:main.js
'use strict';

angular.module('testApp')
    .controller('MainCtrl', ['$scope', '$http', function ($scope, $http) {

        var $uri ='data/sample.json';

        $scope.doSearch = function() {

            $http({
                method : 'GET',
                url : $uri
            }).success(function(data, status, headers, config) {
                $scope.results = data.data;
                console.log(status);
                console.log(data);
            }).error(function(data, status, headers, config) {
                console.log(status);
            });
        };

    }]);
```

*main.jsの説明：*

- `$http` モジュールをコントローラへ追加
- `$uri` にAPIのURLパスを記載。もしドメインが異なる外部サーバの場合は JSONP を利用する必要があります。
- APIのコール結果は `$scope.results` へバインド
	- 後述のHTML側でこの値を利用する

```html:main.html
<div class="container" ng-controller="MainCtrl">
    <button class="btn btn-primary" ng-click="doSearch()">API発行</button>
    <br>
    <br>
    <table class="table">
        <tr ng-repeat="result in results">
            <td>{{result.id}}</td>
            <td>{{result.name}}</td>
        </tr>
    </table>
</div>
```

*main.htmlの説明：*

- ボタンが押されたら、先ほどの`doSearch()`を呼び出し
- バインドされた `$scope.results` を `ng-repeat` の繰り返し処理で TABLEタグ内に書き出し

APIは作成するのが面倒だったので、同一サーバ内に次のような固定のJSONを配置しました。

http://hkusu.github.io/AngularJS_apicall_demo/data/sample.json

```json:sample.json
{
    "data": [
        {
            "id": "1",
            "name": "山田"
        },
        {
            "id": "2",
            "name": "鈴木"
        },
        {
            "id": "3",
            "name": "高橋"
        }
    ]
}
```

## おわりに

挙動は[デモページ](http://hkusu.github.io/AngularJS_apicall_demo)で確認ください。

APIと連携することができました^^　いろいろ出来そうな気がしてきますね。
まあ、実際にはAPIと連携しないアプリケーションの方があまりないかもしれませんが。

今回のソースコード一式はこちら
https://github.com/hkusu/AngularJS_apicall_demo
第19回オフラインリアルタイムどう書く ruby で


オフラインでリアルタイムに「どう書く」
　http://atnd.org/events/47670
の問題「不良セクタの隣」
　http://nabetani.sakura.ne.jp/hena/ord19nebasec/
の、実装例。

他の方の解答は
http://qiita.com/Nabetani/items/9810b301648099028bf0
から辿れると思います。

で。
やっぱり ruby( ruby 2.1.1p76 ) で。

```ruby
def neib_track( r, t, delta )
  toR = r+delta
  ti = t*toR.to_r / r
  if ti==ti.round
    (0<delta ? (-1..1) : [0]).map{ |x| [toR, ti+x] }
  else
    [[toR, ti.floor], [toR, ti.ceil ]]
  end
end

def neibs(b)
  r,t=  b.to_i.divmod(100)
  [
    [r,t+1], [r,t-1],
    *(r<4 ? neib_track(r,t, 1) : nil ),
    *(1<r ? neib_track(r,t, -1) : nil ),
  ].map{ |c| "%03d" % ( c[0]*100+c[1].modulo( c[0]*8 ) ) }
end

def solve( s )
  bads=s.split(",")
  cb = bads.map{ |b| neibs(b) }.combination(2).map{ |a,b|
    a & b
  }.flatten.uniq - bads
  cb.sort.uniq.join(",").tap{ |c| return "none" if c.empty? }
end

$stdout.sync=true
DATA.map do |line|
  num, src, exp = line.split(/\s+/)
  actual = solve( src )
  ok = actual==exp
  p [ num, src, exp, actual ] unless ok
  ok
end.all?{ |x| x }.tap{ |x| p x }

__END__
0 400,401,302 300,301,402
1 105,108,306,414 none
```

いつも通りテストデータの大半は省略。

見なおしてみると、 `modulo` よりも 素直に `%` を使ったほうがいいとか、`"%03d" % 略` じゃなくて `.to_s` の方がいいとか思ったりるけどそのままで。

作戦としては。

+ 隣のトラックにそのまま行くと何番になるのかを計算する。
+ 計算結果が整数になる場合と中途半端になる場合で場合分け。
+ 内側か外側かでも場合分け。

というもの。

最近ようやく `*` を使った配列の展開に慣れてきた。
すごく面白い機能だと思う。

```ruby
[8,*[1,2],9] # => [8, 1, 2, 9]
[8,*10.divmod(3),9] # => [8, 3, 1, 9]
[8,*[],9] # => [8, 9]
[8,*nil,9] # => [8, 9]

```

こんな感じ。`nil` に `*` をつけていいことは、これを書いている時に気がついた。
年度に手軽に処理したい


[Fiscali](https://github.com/asanghi/fiscali)を使用することで、Railsアプリなどで年度を手軽に扱うことができる。

## Fiscaliのインストール

Gemfile に以下を記述して bundle install を実行。

```
gem 'fiscali'
```

## セットアップ

どの国の会計年度に従うかを最初に設定しておく必要がある。
Railsアプリであれば `config/initializers/fiscali.rb` などを用意してそこに設定を書く。日本の会計年度を扱いたい場合は以下のようにする。

```ruby
Date.fiscal_zone = :japan
Time.fiscal_zone = :japan
```

## 年度を扱う

`Fiscali`が読み込まれ設定が適切にされていると、`Date`や`Time`から年度を良い感じに扱えるようになっている。

- 属している会計年度を取得する場合には`#financial_year`を使う。

```ruby
> date = Date.today
Tue, 11 Mar 2014
> date.year
2014
> date.financial_year
2013
```

- 属している会計年度の始まりを取得する場合には`#beginning_of_financial_year`を、終わりを取得する場合には`#end_of_financial_year`使う

```ruby
> date = Date.today
Tue, 11 Mar 2014
> date.beginning_of_financial_year
Mon, 01 Apr 2013
> date.end_of_financial_year
Mon, 31 Mar 2014
```

これができると、「今年度の売上を知りたい」みたいなときにも具体的な日付の計算を自分ですることなく以下のような感じで実現できるので簡単便利。

```ruby
Sale.where(saled_on: date.beginning_of_financial_year..date.end_of_financial_year)
#=> SELECT "sales".* FROM "sales" WHERE ("sales"."saled_on" BETWEEN '2013-04-01' AND '2014-03-31') 
```

## 参考

* https://github.com/asanghi/fiscali
* http://ja.wikipedia.org/wiki/年度
ubuntuとapacheを使ったdjangoサーバの運用


# はじめに

Djangoは、Pythonで実装されたWebアプリケーションフレームワークで、複雑なデータベース主体のWebアプリケーションを設計・開発するのに役に立つ。導入時点では、

```bash
$ ./manager.py runserver
```

でテストしているが本格的に運用する段階になると、apacheと連携させたくなる。他にも紹介されているページは多くあるが、自分の作業の備忘録として、その運用の仕方をリマインダとして残しておく。

# 作業環境

作業環境は以下の通り

* ubuntu12.04
* django 1.3.1
* python 2.7.3

その他、apacheの設定は以下の通り

* DocumentRoot: /data/www

```
/etc/apache2/sites-available/default:	DocumentRoot /data/www
```

* djangoプロジェクトのルートディレクトリ
	* ~/webservices
* apache2上のディレクトリ
	* /data/www/webservices -> ~/webservices

```
$ sudo ln -s ${HOME}/webservices /data/www/webservices
```



# 必要なパッケージのインストールとセットアップ

```
$ sudo apt-get install -y apache2 libapache2-mod-wsgi
$ sudo apt-get install -y python-django
$ django-admin startproject webservices
```

# django.wsgiをつくる

djangoのルートディレクトリにdjango.wsgiをつくる

```django.wsgi
#!/usr/bin/env python
# coding: utf-8

import os
import sys

sys.path.append('/data/www')
sys.path.append('/data/www/webservices')

os.environ['DJANGO_SETTINGS_MODULE'] = 'webservices.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
```

# apache2の設定

/etc/apache2/sites-available/djangoをつくる。

```/etc/apache2/sites-available/django
WSGIScriptAlias /services /data/www/webservices/django.wsgi

<Directory /data/www/webservices/>
Order deny,allow
Allow from all
</Directory>
```

上記の設定を有効にする

```bash
$ sudo a2ensite django
$ sudo apache2ctl restart
```

その他、データベースにsqlite3を用いる場合は、データベースへのアクセス権を設定する必要がある。仮にsqlite3のデータベースファイル名がdata.dbだった場合、djangoのルートディレクトリで以下の作業を行う

```bash
$ ./manager.py syncdb
…
$ chown ${USER}.www-data data.db
$ chmod g+w data.db
```

# デバッグのあれこれ

pythonの標準出力や、エラーメッセージは以下の場所に出力されている。

```
$ less /var/log/apache2/error.log
```
mac の iTerm2 で [command + ←] や [command + →] で行頭行末に移動したい時の設定方法

http://superuser.com/questions/585518/how-to-make-commandarrow-go-to-begining-and-end-of-line-in-iterm2

より、まるまる引用させてもらいました。

iTerm2 で command + ← や command + → で行頭行末に移動したい時の設定方法

```
Preferences > Keys tab > + > 「command + ←」に"Send Hex code: 0x01", 「command + →」に"Send Hex code: 0x05"
```

とする。
インスタンスメソッドとクラスメソッドのメソッド呼び出し時間を比較する

cliのphpでメソッドの呼び出しにどのくらい時間がかかるのか計測してみた。

> インスタンスメソッドは、クラスのインスタンスを生成しないと呼び出せないメソッド。
> クラスメソッドはインスタンスを生成しなくても呼べるメソッド。


* 条件

1,000,000回メソッドを呼び出す。
100回計測してその平均を出力

* 結果

|test                        |process time[sec]|
|:---------------------------|:----------------|
|instance method             |0.18120812892914 |
|class method                |0.16903691053391 |
|class method(インスタンス参照)|0.17322729587555 |

インスタンスメソッドの方が遅い。
クラスメソッドもインスタンス名で参照する方が遅い。
ちなみにインスタンスを生成するのにかかる時間はこの程度の小さいクラスだと計測できない。


今回は実験的に行ったので、局所的な結果。
本来であれば、システム全体でのパフォーマンスを調査すべきである。
環境によって違うこともあるかも。



```php:test.php
<?php
// Testクラス
class Test{
  // instance method
  public function ins(){
    ;
  }
  // class method
  static public function cls(){
    ;
  }
}

// 試行回数
const CALL_MAX = 1000000;
const SUM_MAX = 100;


// instance method
$summary = array();

$test = new Test();

for ($j=0; $j<SUM_MAX; $j++){
  $begin = microtime(true);
  for ($i=0; $i<CALL_MAX; $i++){
    $test->ins();
  }
  $finish = microtime(true);
  echo $j.":".($finish - $begin)."[sec]\n";
  $summary[] = ($finish - $begin);
}

echo "instance method ".(array_sum($summary)/SUM_MAX)."[sec]\n";


//class method
$summary = array();

for ($j=0; $j<SUM_MAX; $j++){
  $begin = microtime(true);
  for ($i=0; $i<CALL_MAX; $i++){
    Test::cls();
  }
  $finish = microtime(true);
  echo $j.":".($finish - $begin)."[sec]\n";
  $summary[] = ($finish - $begin);
}

echo "class method ".(array_sum($summary)/SUM_MAX)."[sec]\n";


//class method
$summary = array();

$test = new Test();

for ($j=0; $j<SUM_MAX; $j++){
  $begin = microtime(true);
  for ($i=0; $i<CALL_MAX; $i++){
    $test->cls();
  }
  $finish = microtime(true);
  echo $j.":".($finish - $begin)."[sec]\n";
  $summary[] = ($finish - $begin);
}

echo "class method ".(array_sum($summary)/SUM_MAX)."[sec]\n";



// instance
$begin = microtime(true);
$test = new Test();
$finish = microtime(true);
echo "instance new ".($begin - $begin)."[sec]\n";
```
Phalcon Model->save() が成功したのにDBが更新されない件


# 現象
以下のようにしてDB へのデータ格納を Model->save() で行ったところ、

```
if (!$model->save()) {
  // 失敗
}
// 成功

```

戻り値的には成功となったにもかかわらず、DB を覗いてみるとデータが入っていない、という現象に出くわしたので、その原因と対応方法。

# 原因
Phalcon のデフォルト動作では Model のフィールドが null でないかを自動的にバリデーションする機構が有効になっているようです。
このため、 Model の全てのフィールドに null 以外の何らかの値が入っていないと、このバリデーションに引っかかってしまいます。
このとき、戻り値は false になってほしいところですが、 true が返ってくるようです。
Phalcon 的には [Validation Failed Events](http://docs.phalconphp.com/en/latest/reference/models.html#validation-failed-events) で対応するのが流儀なのでしょうか。。
これでは、更新する値が null でかまわなかったりする場合に困ります。

# 対応方法
以下のような設定をしておくことで、Model のフィールドが null でないかを自動的にバリデーションする機構を無効にできます。
simple 型のプロジェクトなら`services.php` あたりに書くのがよいのではないかと思います。

```
\Phalcon\Mvc\Model::setup([
    'notNullValidations' => false
]);
```

# 参考
[Working with Models - Disabling/Enabling Features](http://docs.phalconphp.com/en/latest/reference/models.html#disabling-enabling-features)
EmmetでHTML高速記述

問題:
https://codeiq.jp/ace/tbpgr/q725 (Lv1)
https://codeiq.jp/ace/tbpgr/q746 (Lv2)

Lv1 75文字

`!>.class_div$#id_div${inner_div$}*5+hr+table>.row$*2>.col${inner_column$}*5`
の1通りだけです

Lv2 144文字

括弧後置
`!>.header>ol(.headers>h${title$}*5)^.body>ul>lorem5.bodies^inp[name=input_name]#input_id+input:p[name=pass_name]#pass_id+p{before$}*5>br{after$}`

`!>.header(ol>.headers>h${title$}*5)+.body>ul>lorem5.bodies^inp[name=input_name]#input_id+input:p[name=pass_name]#pass_id+p{before$}*5>br{after$}`

`!(.header>ol>.headers>h${title$}*5)>.body>ul>lorem5.bodies^inp[name=input_name]#input_id+input:p[name=pass_name]#pass_id+p{before$}*5>br{after$}`
3通り

括弧前置
`!>.header>(.headers>h${title$}*5)ol^.body>ul>lorem5.bodies^inp[name=input_name]#input_id+input:p[name=pass_name]#pass_id+p{before$}*5>br{after$}`

`!>(ol>.headers>h${title$}*5).header+.body>ul>lorem5.bodies^inp[name=input_name]#input_id+input:p[name=pass_name]#pass_id+p{before$}*5>br{after$}`

`(.header>ol>.headers>h${title$}*5)!>.body>ul>lorem5.bodies^inp[name=input_name]#input_id+input:p[name=pass_name]#pass_id+p{before$}*5>br{after$}`
3通り
合計6通りです

なお、この144文字の答案は新しいEmmetコアだと

```html
<p>before1<br />after1</p>
```

ではなく

```html
<p>before1<br>after1</br></p>
```

と展開されるため正解になりません

末尾の
`p{before$}*5>br{after$}`
を
`p{before$}*5>br+{after$}`
または
`p{before$<br />after$}*5`
に変更した答案であれば通ります(145文字、合計12通り)

是非CodeIQ MAGAZINE ( https://codeiq.jp/magazine/2014/03/7195/ )の解答例と比べてみてください

なお、修正版採点ツールを
https://dl.dropboxusercontent.com/u/46196585/emmet/emmet.html
に置いておきますので、よろしければお使いください。
PHP Source Install virtual memory exhausted Error (Vagrant/Virtualbox)


# Error

```
vagrant provisionでchef-soloを動かし、phpソースインストール中に以下のエラーが発生
```

```
STDERR: cc: Internal error: Killed (program cc1)
Please submit a full bug report.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1
virtual memory exhausted: Cannot allocate memory
make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1
cp: cannot create regular file `/usr/local/php-5.5.4/lib/php.ini': No such file or directory
```

# Cause

```
コンパイル実行機のメモリ不足
```

# Fix

```
Vagrantfileの設定に以下を記述して1024mbでvmを起動する
```

```Vagrantfile
config.vm.provider :virtualbox do |vb|
  vb.customize ["modifyvm", :id, "--memory", "1024"]
end
```

```bash
## 
## VM再起動
## 
vagrant halt
vagrant up
```

# Check the Fix

```bash
## 
## VMログインしてメモリを確認
## 

vagrant ssh
hostname
  # (vagrant host)
head /proc/meminfo
  # MemTotal:        1020348 kB

```
NSArrayでfor(; ;)とかfor-inを使うのをやめて、enumerateObjectsUsingBlock:を使う


配列から特定のデータを取り出す時や、いじるときに以下のようにループを回す場面は多々あります。

```objectivec:example1
for (int i = 0; i < array.count; i++) {
	;
}
```

```objectivec:example2
for (id object in array) {
	;
}
```

example1ではループの際に毎回array.countが呼び出されて無駄だし、条件式などあるのでバグも生みやすい。
example2ではexample1のiに相当する配列のインデックスを求めるためには、変数を別途作ってインクリメントする必要があり面倒です。

そんな話をしていたところ、友人にNSArrayにはenumerateObjectsUsingBlock:なる便利なメソッドが存在することを教えてもらったのでご紹介します。

## enumerateObjectsUsingBlock:を使う
enumerateObjectsUsingBlock:はNSArrayに用意されているインスタンスメソッドで、iOS 4.0以上で使用することができます。

[NSArray Class Reference - enumerateObjectsUsingBlock:](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html#//apple_ref/occ/instm/NSArray/enumerateObjectsUsingBlock:)

```objectivec:定義
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block
```

* block
	- enumerateObjectsUsingBlock:はBlockの中に配列にしたい操作を記述します。Blockの中がfor(;;){ hoge }のhogeに相当します。
* obj
	- 配列から取り出された要素です。
* idx
	- 配列の要素のインデックスです。example1のiに相当します。
* stop
	- 停止フラグです。stopにYES(BOOL)を入れるとその時点で停止します。forのbreakに相当します。

　

```objectivec:使い方
/*
	NSStringの配列から@"c"が入っている要素番号を取得する
*/

NSArray *array = @[@"a", @"b", @"c", @"d"];

__block NSInteger result = -1;	// オブジェクト型でない変数をBlock内で操作する場合は__block修飾子が必要

[array enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL *stop) {
	NSLog(@"%d: %@", idx, obj);

	if ([obj isEqualToString:@"c"]) {
		result = idx;
		*stop = YES;
	}	
}];

NSLog(@"result: %d", result);



// 出力結果
0: a
1: b
2: c
result: 2
```

使いやすいです。

## enumerateObjectsWithOptions:usingBlock:を使うと要素を後ろから見れます
配列を後ろから見ていきたいときに便利です。

[NSArray Class Reference - enumerateObjectsWithOptions:usingBlock:](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html#//apple_ref/occ/instm/NSArray/enumerateObjectsWithOptions:usingBlock:)

```objectivec:定義
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block

enum {
   NSEnumerationConcurrent = (1UL << 0),
   NSEnumerationReverse = (1UL << 1),
};
typedef NSUInteger NSEnumerationOptions;
```
* opts
	- NSEnumerationReverse　後ろから見ていきます

```objectivec:使い方
NSArray *array = @[@"a", @"b", @"c", @"d"];
	
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(NSString *obj, NSUInteger idx, BOOL *stop) {
	NSLog(@"%d: %@", idx, obj);
}];


// 出力結果
3: d
2: c
1: b
0: a
```

## 処理の並列化もできます
上記の **(NSEnumerationOptions)opts** に **NSEnumerationConcurrent** を指定することで、並列処理を行うことができます。

```objectivec:使い方
NSArray *array = @[@"a", @"b", @"c", @"d"];
	
[array enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSString *obj, NSUInteger idx, BOOL *stop) {
	NSLog(@"%d: %@", idx, obj);
}];


// 出力結果
3: d
1: b
2: c
0: a
```

## 速度はforと同等かそれ以上
気になる実行速度ですが、for(;;)やfor-inと同等か、それ以上みたいなので安心して使えます。

[objective c - When to use enumerateObjectsUsingBlock vs. for - Stack Overflow](http://stackoverflow.com/questions/4486622/when-to-use-enumerateobjectsusingblock-vs-for)

## まとめ
使わない理由が見つかりません！
Scala: システムの環境変数を取得する


システムの環境変数を取得するときは、`sys.env`を使うと取得できる

`$HOME` を取得する例:

```scala
sys.env("HOME")
```

環境変数が存在するか不明な場合は、 `getOrElse` を使うと、デフォルト値を設定できる

```scala
sys.env.getOrElse("FOO_BAR", "default-value")
```
Android Studioのbuild.gradleでgitのrevision hashを得る

* Android Studioから起動するgradleプロセスの $PWD は project root ではない
  * http://qiita.com/gfx/items/fb2c3127843aad481800
* Gradleの `String#execute()` は複数のコマンドに対応していない
* Gradleの command parser を介さないように `Array#execute` で「cdしてgitを呼ぶ」を実現する

```groovy
def revisionHash = ["sh",  "-c",  "cd ${project.rootDir} ; git rev-parse --short HEAD"].execute().in.text.trim()
```
Selenium + Google Chromeの起動方法


# 配置

```
selenium/
├── chromedriver-2.9-mac32
└── selenium-server-standalone-2.40.0.jar
```

# ローカルで起動する方法

```
java -jar selenium/selenium-server-standalone-2.40.0.jar \
     -browser browserName=chrome,version=33,platform=MAC,maxInstances=2 \
     -Dwebdriver.chrome.driver=selenium/chromedriver-2.9-mac32
```

# Selenium Gridで起動する方法

## Node

```
HUB_HOST="10.0.1.8"

java -jar selenium/selenium-server-standalone-2.40.0.jar \
     -browser browserName=chrome,version=24,platform=MAC,maxInstances=2 \
     -Dwebdriver.chrome.driver=selenium/chromedriver-2.9-mac32 \
     -role node \
     -hub http://$HUB_HOST:4444/grid/register
```

## Hub

```
java -jar selenium/selenium-server-standalone-2.40.0.jar \
     -role hub
```
Apache2.4 Source Install

# Goal

```
* apache2.4系をソースからインストールする
* ssl機能ありでインストールする
* インストールディレクトリを指定する
```

# Preparation

```
$> uname -a
Linux *** 3.4.73-64.112.amzn1.x86_64 #1 SMP Tue Dec 10 01:50:05 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

$> cat /etc/issue
Amazon Linux AMI release 2013.09
Kernel \r on an \m

$> openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
```

# Manual

## Dependent Installs, Apache Download

```
以下Apacheの配布ページから、httpd,apr, apr-utilのtarballリンクアドレスをコピー
（Apache2.4系からapr, apr-utilは別ソースから取得してビルド・インストールする必要がある）
```

http://httpd.apache.org/download.cgi
https://apr.apache.org/download.cgi


```bash

## 
## 依存パッケージをインストール
## 
yum install pcre-devel openssl-devel

## 
## Apache本体のソースをdownload
## 
wget "http://mirrors.ibiblio.org/apache//httpd/httpd-2.4.7.tar.gz"
tar zxvf httpd-2.4.7
cd srclib/

## 
## Apache2.4のSource Installでは、apr, apr-utilをそれぞれ別途ソースをダウンロード・インストールする必要があるが、
## それぞれダウンロードしてapr, apr-utilという名前で展開したものをsrclib下に移動して、
## --with-included-aprオプションをつけてビルドすればよい
## 

wget "http://mirror.metrocast.net/apache//apr/apr-1.5.0.tar.gz"
tar zxvf apr-1.5.0.tar.gz
mv -i apr-1.5.0 apr

wget "http://mirror.metrocast.net/apache//apr/apr-util-1.5.3.tar.gz"
tar zxvf apr-util-1.5.3.tar.gz
mv -i apr-util-1.5.3 apr-util
```

## Build / Install

```bash
cd /usr/local/src/httpd-2.4.7
./configure --prefix=/usr/local/apache-2.4.7 \
            --enable-mpms-shared=all \
            --enable-mods-shared=all \
            --enable-ssl \
            --enable-proxy \
            --enable-cache \
            --enable-mem-cache \
            --enable-rewrite \
            --with-included-apr

make
make install
```

# Other Settings

```
Apache2.2 => 2.4の変更点で把握している点
http://httpd.apache.org/docs/2.4/upgrading.html

* デフォルトmpmがprefork=>eventに変更になっている
  * phpの場合は注意したほうがいいかも
* MaxClients => MaxRequestWorkersに名称変更
* MaxRequestsPerChild => MaxConnectionsPerChild
* ACL記法が変更（Order/Allow/Deny => Require）
```
Vagrant CloudにBoxを公開する


[Vagrant Cloud](https://vagrantcloud.com/)がリリースされたので、自分のBoxの公開を試してみた。

## 試した環境

- Max OSX 10.9.1
- Vagrant 1.5.0

Vagrant 1.5.0以上が必要。

## リポジトリへのBoxの配置

Vagrant Cloudは、それ自体がBoxのリポジトリとなるわけではなく、Boxのリポジトリを仲介するようなイメージとなる。

そのため、まずはBoxを公開されている任意場所に配置する必要がある。

### Boxの作成

こちらを参考に、任意状態の仮想マシンをPackageする
[Vagrantのboxに少しだけ手を加えたものをboxとして取っておきたい](http://qiita.com/t_cyrill/items/ef9cb2b615bfb326f79c)

### Boxをリポジトリへ配置

Packageして作成したBoxを、インターネット上へ公開されている任意リポジトリへ配置する。
DropBoxを利用して公開するとエラーとなる（後述）ので、Amazon S3上へ配置した。

## Vagrant CloudへのBox作成

### アカウントの登録

アカウント登録すると、Git Hubのような感じで自分の領域が割り当てられる。

### Boxの作成

任意名前でBoxを登録する。

![スクリーンショット 2014-03-11 17.50.51.png](https://qiita-image-store.s3.amazonaws.com/0/30521/7d3082cb-68a0-023d-f107-3149d581bccb.png "スクリーンショット 2014-03-11 17.50.51.png")

### Versionの作成

一つのBoxの中に複数のバージョンを管理できるので、バージョンを指定する。

![kobito.1394528012.477156.png](https://qiita-image-store.s3.amazonaws.com/0/30521/4577801b-2846-6e95-7cef-607e0f70d72d.png "kobito.1394528012.477156.png")

バージョンの付け方は、[Semantic Versioning](http://semver.org/)が推奨されている。

### Providerの作成

PackageしたBoxのproviderを選択し、Boxを配置したリポジトリのURLを指定する。

![kobito.1394528243.467190.png](https://qiita-image-store.s3.amazonaws.com/0/30521/5512c33b-eda1-dc62-aa77-943c36d90832.png "kobito.1394528243.467190.png")

Provider作成後は、Releaseして完了となる。

![kobito.1394528353.826023.png](https://qiita-image-store.s3.amazonaws.com/0/30521/2dcc8be0-3899-ca82-0c53-a5104da6065c.png "kobito.1394528353.826023.png")


## Vagrant Cloudへ公開されたBoxを使用する

Boxの利用は、今までのVagrantの利用方法と同じ。

initコマンドで、Vagrantfileを作成する。
Boxには、Vagrant Cloudで登録した名称を指定する。

```
$ vagrant init ymori/sample
```

vagrant up すると、リポジトリからのダウンロードが始まり、Boxが追加され、VMが起動する。

```
$ vagrant up
```


ちなみに、Dropboxをリポジトリとして使用するとエラーが出る。

```
$ vagrant up
・・
==> default: Error downloading: An error occurred while downloading the remote file. The error
==> default: message, if any, is reproduced below. Please fix this error and try
==> default: again.
==> default: 
==> default: HTTP server doesn't seem to support byte ranges. Cannot resume.
```

どうやら、httpサーバがbyte-rangeリクエストをサポートしている必要がある見たい。

## 感想

Vagrantbox.esとくらべて、バージョン管理ができるし、長いURLを打つ必要もないので、今後はこちらが利用されることになりそう。
Railsで任意の要素数のデータをテーブルレイアウトで良い感じに表示したい


## やりたいこと

レコードの一覧を（やむなく）テーブルレイアウトで表示したい

![Kobito.png](https://qiita-image-store.s3.amazonaws.com/0/16886/5ab6dd14-39bc-9fff-da58-91e0b48882ea.png)

## 悩むところ

レコードの数は可変なので、レコード数で素直にテーブルレイアウトを実現しようとすると列数が半端な場合がでてきてしまう。

![Kobito 2.png](https://qiita-image-store.s3.amazonaws.com/0/16886/7e424c46-4c49-94ba-3475-dcf30f5d98b9.png)

## 解決方法

ActiveSupportで追加される`Array#in_groups_of`を使う。

http://api.rubyonrails.org/classes/Array.html#method-i-in_groups_of

`in_groups_of`を使うと、配列を指定の列数で区切った2次元の表にしてくれ、且つ最終行で列数に満たない部分には`nil`を入れてくれます。

```
%w(1 2 3 4 5 6 7 8 9 10).in_groups_of(3) {|group| p group}
["1", "2", "3"]
["4", "5", "6"]
["7", "8", "9"]
["10", nil, nil]
```

入れるものを指定することも。

```
%w(1 2 3 4 5).in_groups_of(2, '&nbsp;') {|group| p group}
["1", "2"]
["3", "4"]
["5", "&nbsp;"]
```

これをレコードのコレクションに対して適用してあげれば、

```
<table>
  <% Post.all.in_groups_of(3) do |row| %>
    <tr>
      <% row.each do |post| %>
        <td>
          <% if post %>
            <%=link_to post.title, post %>
          <% end %>
        </td>
      <% end %>
    </tr>
  <% end %>
</table>

```

以下のような感じで奇麗なテーブルレイアウトを実現できるのであった。

![Kobito 3.png](https://qiita-image-store.s3.amazonaws.com/0/16886/391d4c34-660a-6a5b-8d84-437667a0c003.png)

参考:

http://api.rubyonrails.org/classes/Array.html#method-i-in_groups_of
忘れっぽい人のためのjQueryでよく使う関数逆引き

# はじめに

自分の忘備録としてまとめました。
サンプルは全てこのページ上で試せます（2014/03現在）。

※セレクタについては言及していません。

# 初心者向け情報

- javaScriptのちょっとした動作確認はブラウザの開発者ツールを使う

- 結果を表示したいときはalert();じゃなくてconsole.log();が便利！

# 画面上の値を取得する
**画面上の値を取得します。**
次の例ではこのページのタイトルを取得しています。

```js
$('.item-title span').text();
```

**結果**
> "忘れっぽい人のためのjQueryでよく使う関数逆引き"

# 画面上の値を取得する（入力項目の場合）
**入力項目の場合はval()を使います。**
次の例ではQiitaの検索窓に入力した値を取得します。

```js
$('#q').val();
```

**結果** （検索窓に「jQuery」を入力後に実施）
> "jQuery"

# 画面上に値を設定する

**text()に引数を渡すと値が設定できます。**

```js
$('.item-title span').text('タイトルを書き換えました！');
```

**結果**
> ![text().JPG](https://qiita-image-store.s3.amazonaws.com/0/38582/4e67ac0f-8f07-3e47-2d10-744c0578ce09.jpeg)

# 画面上に値を設定する（入力項目の場合）

**val();に引数を渡すと値が設定できます。**

```js
$('#q').val('jQuery大好き');
```

**結果**
> ![val().JPG](https://qiita-image-store.s3.amazonaws.com/0/38582/e5ee7422-25aa-f7d4-2254-e1c4cdd07c84.jpeg)


# 属性を取得する attr(属性名);

**id,name,classなどHTML要素内の属性を取得します。**
次の例では、このページのタイトルのclassを取得しています。

```js
$('.item-title').attr('class');
```
**結果**

> "item-title"

# 配列を操作する　each文

**セレクタで配列が返ってきた場合に1個ずつ処理する時によく使います。**
次の例では、このページ内のaタグを取得し、hrefの中身をコンソールログに表示しています。

```js
var array = $('a');
$.each(array, function (i, element) {
  console.log($(element).attr('href'));
});
```

**結果**
> ![each.JPG](https://qiita-image-store.s3.amazonaws.com/0/38582/9b11d746-2784-f651-b8c1-b41fb2a49f95.jpeg)



# classの削除、追加

**入力エラー項目に色を付けたり、クリックするたびに状態の変わるトグル的なボタンを作るのに使えます。**
次の例では、ストック数のclassを削除しています。

```js
$('#stock-user-count').removeClass('count stock');
```

**結果** （ストック数のフォントが小さくなっています）
> ![removeClass().JPG](https://qiita-image-store.s3.amazonaws.com/0/38582/7d85c1aa-c4a0-b5f3-154f-86f631bfb33f.jpeg)

**classを追加しています。**

```js
$('#stock-user-count').addClass('count stock');
```

**結果** （元通りになりました）
> ![addClass().JPG](https://qiita-image-store.s3.amazonaws.com/0/38582/13d38fd8-0b38-4750-2d99-ca798aa5cb7b.jpeg)



# 参考リンク
[jQuery 日本語リファレンス](http://semooh.jp/jquery/)
[Objective-C] カテゴリーで UIView に NSObject を設定する

UIButton などのタッチイベントの受け取り側で情報を受け取りたい場合が多々あると思いますが、Cocoa フレームワークで用意されている識別方法が数値型の tag となるので、モデルクラスに uniqueNumber などのプロパティをもたせる必要があり、不便だと思います。ということで tag の代わりに UIView にオブジェクト自体を渡せるようにするコードです。これなら番号を管理する必要などもなく便利だと思います。未検証ですが NSBlockOperation も渡せるかと思います。また UIView を継承したクラスであれば使えますので UIAlertView なんかにも使えます。(ARC 環境)

```objc:UIView+NSObjectProperty.h
#import <Foundation/Foundation.h>

@interface UIView (NSObjectProperty)

@property (nonatomic) id object;

@end
```

```objc:UIView+NSObjectProperty.m
#import "UIView+NSObjectProperty.h"
#import <objc/runtime.h>

@implementation UIView (NSObjectProperty)

- (id) object
{
    return objc_getAssociatedObject(self, @selector(setObject:));
}

- (void) setObject:(id)value
{
    objc_setAssociatedObject(self, _cmd, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

@end
```
XCode5.1 iOS7.1したら出た警告(Unused functionやUnused variable)を出なくする方法

# 背景

* XCode5.1 にアップデートしたら以下の警告がたくさん出ました。

```cobol:警告
Unused function 'funcXXX'
Unused variable 'XXXvalue'
```

# 警告の内容

* 使ってないメソッドや値があると出る警告。
* 現在は使っていないけど消したくないメソッド(ライブラリのとか)や、default値で定義しておいた構造体でも警告が出てしまう。問題ないことが確認できるものについては警告を出さないようにしたい。
* →アップデート時に警告レベルが強制的に上がる？？

# 解決法

* 1．プロジェクト > TARGETS > Build Settings を選択
* 2．入力ボックスに「unused」と入れて絞り込み
* 3．「unused function」と「unused valiables」が YES から NO へ変更

![スクリーンショット_2014-03-11_13_58_30.png](https://qiita-image-store.s3.amazonaws.com/0/25820/492cfe7f-e3d9-602c-1b1e-4da41c95d473.png)

これで警告が出なくなりました。
気になる点がありましたら、気軽にコメントおねがいします。

# 参考リンク
objective c - What does the Xcode 5 build setting "Unused Functions" actually do? - Stack Overflow
http://stackoverflow.com/questions/19128247/what-does-the-xcode-5-build-setting-unused-functions-actually-do
まとめてGlacierからS3に戻すためのワンライナー

用途
----

ライフサイクルの設定でS3からGlacierに移すことは簡単に出来ますが、
逆にGlacierからS3に戻すのは1ファイルずつ行う必要があります。

Glacierファイルがたくさんあると、AWSの管理画面から1つずつ行うのが面倒なので、
まとめて復旧させたい時に使います。

準備
----

前提として、aws-cli のセットアップと、jqのインストールが完了している必要があります。

* http://aws.amazon.com/jp/cli/
* http://stedolan.github.io/jq/

コマンド
-------

{バケット名}, {パス} のところを書き換えて実行してください。

```bash
$ for key in `aws s3api list-objects --bucket {バケット名} --prefix {パス} --output json | jq -r '.Contents[].Key'`; do echo $key; aws s3api restore-object --bucket {バケット名} --key $key --restore-request '{"Days": 1}'; done
```

既に設定済みだと以下のようなメッセージが出ます

    A client error (RestoreAlreadyInProgress) occurred: Object restore is already in progress

そもそもGlacierじゃない場合、以下のようなメッセージが出ます

    A client error (InvalidObjectState) occurred: Restore is not allowed, as object's storage class is not GLACIER

3～5時間待った後
--------------

下記コマンド復旧しているかどうか確認します。

```bash
$ for key in `aws s3api list-objects --bucket {バケット名} --prefix {パス} --output json | jq -r '.Contents[].Key'`; do echo "\n$key"; aws s3api head-object --bucket {バケット名} --key $key --output json | jq -r .Restore; done
```

下記のような出力となっていればOKです。
後は普通にS3の操作で取得出来ます。

    ongoing-request="false", expiry-date="Thu, 13 Mar 2014 00:00:00 GMT"
Rubyの標準出力に僕も色をつけてみた

『端末に出力する時に色を付けたいなぁ・・・。』と眺めていたら。。。
[Ruby - 標準出力に色をつける - Qiita](http://qiita.com/annyamonnya/items/caae2c6f5322c31f087d)
『ほぉ？（☆▽☆）』と思ったので、やってみた

# コード
```ruby:term_color.rb
module TermColor
  COLORS = {black: 30, red: 31, green: 32, yellow: 33,  blue: 34, magenta: 35, syan: 36, white: 37, clear: nil}
  module ModuleMethods
    def method_missing(method, *args)
      if COLORS.has_key?(method)
        self.instance_eval <<-EOS
          def #{method}
            self.out_color_sequence(#{COLORS[method]})
          end
        EOS
        self.__send__(method)
      else
        super
      end
    end

    def out_color_sequence(num = nil)
      print "\e[#{num.to_s}m"
    end
  end

  extend ModuleMethods
end

if $0 == __FILE__
  TermColor.red
  puts "tomato"
  TermColor.black
  puts "coffee"
  TermColor.blue
  puts "blue hawaii"
  TermColor.blue
  puts "soda"
  TermColor.white
  puts "milk"
  TermColor.clear
end
```
* 写経してもよかったのですが、ゴーストメソッドの学習がてらmethod_missingで遊んでみました。
* 実行時に無ければメソッドを作って行くはずです。

# 実行結果
![実行結果](https://qiita-image-store.s3.amazonaws.com/0/23194/f8d64832-4b27-1ad6-f18d-7658ac71c79c.png)

* 色が付きました！！！

# ・・・!!( ; ﾛ)ﾟ ﾟ

ところで、投稿前になって気づいたのですが・・・

* [RubyでANSIカラーシーケンスを学ぼう！](http://d.hatena.ne.jp/keyesberry/20101107/p1)
 * HighLine, TermColor, Rainbow...etc便利そうですね！

# まとめ
結局、gem辺りでインストールして、requireが良いようです！ｗ
以上、ゴーストメソッドの作り方でした！（
ScalaのSpecs2でDataTablesじゃなくてTables traitを使えばStringの時も!で扱える


[Scalaのspecs2でDataTablesにStringを使うときは!!を使う](http://qiita.com/mokemokechicken/items/22dca692e3bc5d6e4446) の続編です。

作者の方から
`note that you can avoid the !! by using the Tables trait`
とmentionを頂いていたのを @xuwei_k さんに教えて頂き、検証してみました。

確かに `DataTables` -> `Tables` とすれば、`!!` じゃなくて `!` でも実行できました！

例）

```scala:myspec.scala
class LangString2ClassSpec extends Specification with Tables {
  "LangString2Class.map(lang) => class" should  {
    "str"         | "class" |
    "java"        ! Java() |
    "JAVA"        ! Java() |
    "objc"        ! ObjectiveC() |
    "objectivec"  ! ObjectiveC() |
    "python"      ! Python() |
    "RUby"        ! Ruby() |
    "JS"          ! JavaScript() |
    "JAVASCRIPT"  ! JavaScript() |
    "Graph"       ! Graph() |
    "SCALA"       ! Scala() |
    "table"       ! models.modules.smc.Table() |>
    { (s, klass) =>
      LangString2Class.map(s) must beSome(klass)
    }
  }
}
```

Sampleの型によって書き方を変えなくて良いので断然こちらの方が良いですね。
DataTablesは互換性のために残してあるのでしょうか。
今後は基本Tablesを使うようにしようかと思います。


教えて頂き本当にありがとうございました！
MySQL MEMORYストレージエンジンでデータ解析

データ解析用にMySQLのMEMORYストレージエンジンを使っています。基本的にはinnodbを使っているのですが、インデックス付けに莫大な時間（日単位）がかかることがあり、取り回しが面倒なので、常時メモリに入れておき、定期的にinnodbにセーブするという運用にしています。

さて、このMEMORYストレージエンジンですが、いくつか落とし穴？があります。これについてメモしておきます。

# キーの種類の違いの注意する

MySQLでは、キーを作成する際、USING HASH / USING BTREEという二つのオプションが選べます。MEMORYストレージエンジン以外では、BTREEしか使えませんが、MEMORYストレージエンジンではUSING HASHがデフォルトです。これが結構くせものです。

AUTO_INCREMENTでつけられたような任意の番号は、大小関係が問題にならないことが多いと思います。こういった場合、HASHの方が高速です。しかし、日付を使った集計では、不等号やMAXが頻出します。この場合、HASHでは全検索になりきわめて遅くなります！！・・・と内部のアルゴリズムを考えれば当たり前なのですが、知らないとはまります。

とは言え、常にというわけではないですが、PRIMARY KEYの場合はあまり問題にならない場合もあります。なぜなら、PRIMARY KEYはデータの物理的な並び順にも反映されていて、MySQLはこれをうまく使ってくれるようだからです。しかし、セカンダリインデックスのDATETIMEカラムにHASHを使ってしまった日には大変なことになります。

なので、MEMORYストレージエンジンでキーを使うときには、デフォルト / USING BTREEを意識するようにします。

ちなみに自分はUSING HASHは省略してデフォルトを使うするようにしています。なぜなら、CREATE TABLE文を他のストレージエンジンに転用するときにいちいち書き換えるのが面倒だからです。USING BTREEならこの心配はありません。

# インデックスの後付けはしない。必要なら別テーブルを作ってデータを移す。

メモリに十分余裕があれば、大容量のデータでもsort_buffer_sizeを上げてインデックスをつけたりとったりしても良いのかもしれません。MEMORYストレージエンジンで大きなのデータを扱うとどうしてもメモリに余裕がない状態で使うことになり、sort_buffer_sizeが足りないために、インデックスを後からつけると、filesortが発生してしまいます。これはデータ自体が大きい場合には致命的です。特に、MEMORYストレージエンジンで分単位の作業をしている最中に、突然時間単位、日単位の作業が入ると面倒です。

ただ、回避策はあります。既存テーブルにインデックスを貼る代わりに、別テーブルを作ってそこにデータを移せばよいのです。MEMORYストレージエンジンのインデックス処理は高速なので、これでかなりの高速化を図れます。

# メモリを適切に設定する

max_heap_table_sizeをきちんと設定しないとMEMORYストレージエンジンは使い物になりません。innnodbと併用するなら、innodb_buffer_pool_sizeと分配。innnodbのキャッシュは要らない（インデックスを貼ったりしない）のなら、ほとんどを割り当ててしまって大丈夫かと思います。ただし、用途によっては上述のsort_buffer_sizeも考慮する必要があります。

現在試行錯誤の真っ最中ですので、「いや、それはこうした方が良い」等、気づいたことがあればコメントいただけると幸いです。
YAMLにおけるネスト

#YAMLにおけるネスト
配列だけ,ハッシュだけだとどうしても扱いきれない,または扱いにくいデータがあったりする.
というわけで,配列,ハッシュを互いにネストすることは度々あるが,今回はYAMLでのネストを調べてみた.

##配列の中にハッシュをネストする

```
- name:Matt
  part:vocal&guitar
- name:Padget
  part:guitar
- name:Jay
  part:bass&vocal
- name:Moose
  part:drums
```
実行結果
```
=>[{"name"=>"Matt", "part"=>"vocal&guitar"},
   {"name"=>"Padge", "part"=>"guitar"},
   {"name"=>"Jay", "part"=>"bass&vocal"},
   {"name"=>"Moose", "part"=>"drums"}]
```

##ハッシュの中に配列をネストする
```
name:
  - Matt
  - Padge
  - Jay
  - Moose
part:
  - vocal&guitar
  - guitar
  - bass&vocal
  - drums
```
実行結果
```
=>{"name"=>["Matt", "Padge", "Jay", "Moose"],
   "part"=>["vocal&guitar", "guitar", "bass&vocal", "drums]}
```
Intentに対応したパッケージ情報色々取得！

Androidの暗黙的インテントはとても便利です

でも、選択ダイアログをカスタマイズする必要が出たのでその時のメモ


#パッケージリスト取得
今回は ACTION_SENDに対応するパッケージリストを取得します


```java:List
  PackageManager pm = mActivity.getPackageManager();  
  Intent intent = new Intent( Intent.ACTION_SEND );  
  intent.setType("text/plain");  
  List<ResolveInfo> resolve = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);  		
```

これで resolveリストが取得できました
あとはこの中から必要なデータを抽出


##パッケージ名

```java:package
  for( ResolveInfo info: resolve){
    ActivityInfo activityinfo = info.activityInfo;  
    Log.d( "package name", activityinfo.packageName);
  }
```

##アクティビティー名 （この場合は ACTION_SENDを受け取るアクティビティー名）

```java:package
  for( ResolveInfo info: resolve){
    ActivityInfo activityinfo = info.activityInfo;  
    Log.d( "activity name", activityinfo.name);
  }
```

##アイコン

```java:icon
  Bitmap bmp = ((BitmapDrawable)pm.getApplicationIcon( pkgname )).getBitmap();
  ByteArrayOutputStream ost;
  bmp.compress (Bitmap.CompressFormat.PNG, 100, ost );
  byte[] b = ost.toByteArray();
```

			ret = ost.toByteArray();
HaxeでSingletonパターンを実装する

HaxeでSingletonパターンを実装するメモです。
GOFのパターンに近いです。
自分はどの言語でもこの形式で実装しています。

```js
class Singleton {
	private static var instance=null;
	private static var internallyCalled:Bool = false;
	
	public function new() {
		if(internallyCalled){
			internallyCalled=false;
		}else{
			throw "Singleton.getInstance()で生成してね。";
		}
	}
	
	public static function getInstance():Singleton{
		if(Singleton.instance==null){
			internallyCalled = true;
			instance = new Singleton();
		}
		return instance;
	}
}
```

インスタンス生成はstaticにgetInstanceで。

```js

var singleton=Singleton.getInstance();

```
TypeScript版をこちらで投稿しています。
http://qiita.com/STYLELAB/items/42426712f1c844e02ef8
cs-cartのアドオン

[https://github.com/dani32iz/public_addons_for_cscart](https://github.com/dani32iz/public_addons_for_cscart)
[The Bug Genie for CS-Cart](https://github.com/thesoftwarepeople/tsp-the-bug-genie-for-cscart)
[vagrant-cscart](https://github.com/jameshilliard/vagrant-cscart)
[cscartapi](https://github.com/drahosistvan/cscartapi)