OmniAICreator/Qiita-1.07M huggingface dataset:
StarlingのMovieClipでgotoAndPlayを作ったよ

harayokiです。
カレンダーが空いていたので小ネタを投稿します。暇なのではないです。(笑)

![title-logo.png](https://qiita-image-store.s3.amazonaws.com/0/8302/e5ec0dbf-fb12-2fde-46d2-3c36f3b9e234.png)

# StarlingのMovieClipはgotoAndPlayがない
StarlingのMovieClipはスプライトシートアニメーションを再生します。`new Movieclip(textures, fps);`のようにテクスチャの配列(Vector)とfpsを渡して初期化して使います。しかし、ラベルの概念がなく、Flasherが慣れ親しんでいるgotoAndPlayとgotoAndStopメソッドが実装されていません。APIリファレンスを参照してもラベル関係のメソッドはありません。
http://doc.starling-framework.org/current/starling/display/MovieClip.html

なので、MovieClipのアニメーションを切り替える際は、MovieClipごと切り替える必要がありました。位置及び拡大縮小回転などの状態を引き継ぐのは面倒なので、Spriteに一回包んで使うことになるのではないかと思います。しかしその場合無駄な階層が１つ増えてしまいますね。なにより面倒です。

この問題をなんとかしたいなと思い作ったクラスがありますので（作ったのは２年前ですが）ここで公開したいと思います。

# gotoAndPlayが使えるMovieClipを作ったよ

ここにソースがあります。サンプルとかはないですが、実際にとある案件に適用してみましたので、大きな動作は問題ないかと思われます。
https://github.com/harayoki/StarlingMovieClipWithLabel/blob/master/src/harayoki/starling/MovieClipWithLabel.as

＜使い方＞
`var mc: MovieClipWithLabel = new MovieClipWithLabel(textures, fps, labelName);`
のようにデフォルトのラベル名とともに初期化します。（ラベル名がなくても平気ですが、指定しましょう）
`mc.addLabel(labelName,textures);`
のようにラベルと新たなアニメーションを追加できます。この処理は好きなだけ行うことができます。
このように準備を終えた後であれば、
`mc.gotoAndPlay(labelName);`
と
`mc.gotoAndStop(labelName);`
が使えます。

Enjoy!

＜注意点＞
SpriteSheetは全て同じ大きさじゃないといけなかったかも。TexturePacker+Starlingの組み合わせなら、余白のトリミングに対応しているので、十分な余白をもって全て同じ大きさで書き出してやれば大丈夫なはず。。

＜仕組み＞
MovieClipに対するテクスチャの登録を動的に切り替えています。あまりフレーム数が長いものを頻繁に切り替えると処理がかさみそうなので、その場合は最初に述べたようにMovieClipごと切り替えた方が良いかなと思います。

# 終わりに

以上です。SpriteSheetよりもDragonBonesやSpineに可能性を感じているので、存在を忘れていましたが、SpriteSheetを多用するコンテンツの方がずっと多いかと思いますので、最初から公開しておけばよかったなとか今更思っています。みんな忙しさがいけないんや。。。

ではでは。メリークリスマス！
UITableのソート条件を自分で決める


# UITable

このコンポーネントがアタッチされたオブジェクトの下にあるUIWidget群をうまいこと被らないように並び替えてくれるいいヤツです。

UITable自体に色々設定がありますが、今回はそれらの説明は省略します。

# 並び替え

今回の本題はこっち。
**Sorting**の設定を変更することで並び方を変えることができます。
…が、

* 文章
* 画像
* 文章

みたいな並びにしようとHierarchy上にそうやってUIWidgetを並べても、以下のソート条件の都合で順序が意図通りにならなかったりします。

| 設定 | ソート条件 |
| ----- | ----------- |
| Alphabetic | 名前順( string.Compare( a.name, b.name ) ) |
| Horizontal | x座標順( a.localPosition.x.CompareTo(b.localPosition.x ) ) |
| Vertical | y座標順 ( b.localPosition.y.CompareTo(a.localPosition.y ) ) |
| Custom | **自分で定義する** |

Verticalにした上で最初から適当に座標ずらせばいいでしょと思われるかもしれませんが、
今回はそれすらめんどくさがって「なんとか動的にオブジェクト追加した順の並び(Hierarchy上の並び)と同じにしたい」と思って調べた内容をお送りします。

※追記(2016/01/19)
以下の内容ですが、Sorting設定を**None**にすることで同じことが実現できそうです…；

# 自分でソート条件を定義する

設定が**Custom**になっている状態の時、スクリプト側からソート条件を指定出来ます。
やり方ですが、`UITable`の`onCustomSort`にメソッドを渡します。

「Hierarchy上の並びと同じにしたい」場合は以下のように書くと実現できます。

```csharp
        private void Start() {
            _table.onCustomSort = ( a, b ) => {
                return a.GetSiblingIndex().CompareTo( b.GetSiblingIndex() );
            };
        }
        
        [SerializeField]
        private UITable _table;
```

大事なのは

```csharp
a.GetSiblingIndex().CompareTo( b.GetSiblingIndex() );
```

コレ。
`transform.GetSiblingIndex()`で自身の階層内の順番を取得できるのでそれを使って判定することでHierarchy上の並びと同様の形に出来ます。

やってみると案外楽でした。
onCustom～みたいなやつはNGUI内には結構あるので調べてみると色々捗るかも。
2016年のmilkcocoa界隈に僕が勝手に期待してること/やっていきたいこと

はいどーもshogochiaiです。

- [PageCloud](http://pagecloud.com/)上でmilkcocoaを動かしてみる
- [プロトタイピングスタック](https://speakerdeck.com/shogochiai/pu-gakao-etazui-qiang-falsesabisupurototaipinguwithmilkcocoa)を更新する
- Serverlessアーキテクチャでmilkcocoa-nodeを無料DBっぽく使ってみる
- NoSQL(milkcocoa)でデータ整合性をなるべく高く保つために心がけてること

こーゆーことを書こうかと思ってたんですけど、やめました。年の瀬忙しすぎワロタｗｗｗ

今日のテーマは「来年のmilkcocoa界隈に僕が勝手に期待してること/やっていきたいこと」です。やっていく気持ちを新たにして来年もよいプログラミングライフを送ってまいりましょう。

# 1. フロントエンドの複雑さを抑える補助輪みたいなやつを作っていく気持ち
milkcocoaでサービスを作ると、DBがCassandraベースということもありNoSQLなんですよね。
サクッと「こんなのただのでっかい連想配列じゃろ」みたいな気持ちで使いはじめるには最高正義なんですが、ちょっとサービスが大きくなりだすとデータの更新削除絡みで苦しくなりだして
- データ構造の変更を追えない
- フロントエンドに持たせた状態をデータストアと同期するコードが膨大になる
あたりがすごく欲しくなってきます。

まあよくよく考えたらこれはmilkcocoaがやる責務じゃなくて扱う側の僕達がTypeScriptなりReduxなりを使用して複雑さを抑えこむ感じになるんでしょうけど、まあフレームワークといいますかよくやる動作をまとめたライブラリを作ってしまったほうがみんな幸せになれるよなあという気持ちであります。

あ、Serverless(旧JAWS)やFluctあたりを触りたかった理由にも繋がるんですが、基本的にCRUD処理をREST APIで抽象化してしまって、データ整合性を保つ責務をそっち側に持たせてしまえたら楽なんじゃないかという動機があったんですよね。sendやauth周りをフロントエンドのmilkcocoaで使って、CRUD周りをLambda上のmilkcocoa-nodeで扱う。こんな感じのいいんじゃないですかね。試してから言えって感じですね、やってみます。

# 2. UIデザインをさっくりやっていく気持ち
僕は情報設計は好きですが美しいUIデザインが苦手です。
なのでPageCloudを契約してみたりSketchを使ってみたりするのですが、どうにもWebサービスを作ってもデザイン律速になってしまいます。なので、この辺をどんどん楽にしていこうぜという風をコミュニティに吹き込んでいけたらなと思うのです。
どうやらまだまだ不安定なのですが、PageCloudでサクッとLPをimportしましてちょっとtweakしてあげましたら素人でもマシなLPが作れますでしょうし、PhotoShopの.psdデータをPageCloudに読み込ませて作るサイトも良い感じでしょう。classやidもPageCloud側から設定できますし、`j+s`のキーボードショートカットでJavaScriptエディタが開くのであります。これを用いればクリックポチポチで作ったサイトをjQueryやmilkcocoaでグリグリできてしまうのであります。もちろん高度に画面遷移したりデータ整合性が強く求められるサービスには向いてない面もあるのですが、2016年は更にサービスプロトタイピングが担う範囲が増えていく年になることでしょう。

# 3. PRML技術を有意に扱えるようになる気持ち
milkcocoaの[pythonクライアント](https://github.com/milk-cocoa/python_sdk)が出ましたね。僕の友だちの[ビクトルくん](https://twitter.com/b_k_t_r_)が積極的にコントリビュートしていて、python3系でも使えるようにしてくれたそうです。最近はパターン認識・機械学習・自然言語処理まわりでよく使う処理をまとめたという[TensorFlow](https://www.tensorflow.org/)というライブラリも出ていることですし、来年は黄色本の分厚さに膝を折ったニワカPRML勢（私）がpythonやBigQueryを駆使してウワーっとすごいことをやってしまう年にしたいですね。ハードウェアから取得したデータを一旦milkcocoaにpushして、milkcocoa-nodeでcronタスクを回してちょいと加工してfluentdでBigQueryに保存して、必要なときにエクセルにサクッと吐き出したり、さらに加工したりして、PageCloudで結果を見やすくグラフ化するような楽〜〜〜な感じの開発がもっともっと増えていくといいですね。

# まとめ
最近気づいたのですが、ブラウザだろうとアプリだろうとサーバーだろうとハードウェアだろうと、APIを好きな言語で繋げて動くようにするという、コンピューターを如何に使いこなすということが大事なんだということに気付かされます。一方で人類の文化の変わらなさや、人と人との触れあいの温かみで世の中が回っていることも強く感じます。ただ、一介のエンジニアという役割および自己認識にとらわれていては狭い世界しか認識できないことに人としての限界を感じたりもします。私がmilkcocoaやその他の抽象化された道具たちを使ってサービスプロトタイピングをするのを好む理由も、やはり作業が減ってより多くのものをメタに把握する余裕が産まれるからというのがあるのだと思います。今後共よく責務分担が為された優れた道具たちにはバシバシお金を払って、この素晴らしい文化を皆で育んでいけるといいなと思います。

では来年もよろしくお願いします。良いお年を。
excelのマクロの定数を取得する

JscriptでExcelを操作する際に、Excelのマクロ定数の値が必要になるので、その値を取得するためのスクリプト

スクリプトを作成する際に、Excelのマクロ（キーボードの操作記録で自動的に作成されるものなど）を参考する場合がある。そのスクリプトには、関数の引数に定数が記述されている場合がある。その値を、知るために作成した。
なお、VBScriptとJScriptを使用したwsfファイルなので、拡張子は「wsf」とします。
（JScriptを使用する必要はありませんが...）

```xml:Excel.wsf
<job id="ExcelJob">
<!-- エクセルのライブラリを宣言(マクロの定数を取得するため) -->
<reference guid="00020813-0000-0000-C000-000000000046"></reference>
<script language="JScript">
//  Jscriptを利用する必要はありませんが^^;
    WScript.Echo("エクセルマクロの定数を得る。\nVer 1.0");
    function msg(str) {
        var myXLData = 0;
        eval("myXLData = " + str + ";");
        WScript.Echo("var " + str + " = " + myXLData + ";");
    }
</script>
<script language="VBScript">
    Dim Input 
    Input = InputBox("マクロの定数を入力してください。", "Excel定数 1.0")
    msg Input
</script>
</job>
```
最初のセンサ > フォトトランジスタの使用 > ブレッドボードで電圧測定 > 抵抗100Ωで最大330mV程度 > TOUTでAD取込してみた

最初のセンサとして何がてっとり早いか。

http://qiita.com/azusa9/items/26e74e4e0d5773ce9c41
にてAD取込みの方法が紹介されている。

http://qiita.com/7of9/items/f74335021eff43857821
にて購入したフォトトランジスタがある。

ということでESP-8266のTOUTでフォトトランジスタの電流値をI-V変換して取込みをすることにした。

ただし、1Vを超えてはいけないので、下調べを再度する。

RPiの時は5VをNJL7502-Lに接続したが、今回は3.3Vを接続する。

## 抵抗1.1kΩでの測定

ブレッドボードで以下のように試してみた。

1. CR-123Aの3V側をNJL7502-Lのコレクタに接続
2. NJL7502-Lのエミッタ側に抵抗1.1kΩを接続
3. 抵抗1.1kΩの電圧をデジボルで測定

以下となった

- 室内の蛍光灯 (21時現在) : 8.2mV
- フラッシュライト[正面から] : 最大 2300mV

1Vを超えてしまう。

## 抵抗470Ωでの測定

I-V変換の電圧が高いので抵抗の値を落とした。470Ωに変更。

- 室内の蛍光灯 (21時現在) : 0.7mV
- フラッシュライト[正面から] : 最大 330mV

今度は1V以内に収まる。これでAD取込をしてみる。

しかし抵抗の値を2.3倍程度落としたのに、電圧がそのx3ほど(6.9倍)落ちているのはなぜかよくわからない。

<font color=blue>100Ωだった</font>

## TOUTでの取込み

上記の抵抗値は470Ωでなく100Ωだった。計算が合う。

ユニバーサル基板の実装に、NJL7502-Lと100Ωの抵抗をハンダ付けした。


http://qiita.com/azusa9/items/26e74e4e0d5773ce9c41
を参考にプログラムを以下とした。

```151223photoTransistor.c
extern "C" {
#include "user_interface.h"
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  uint ADC_Value = 0;

  ADC_Value = system_adc_read();

  Serial.println("AD:" + String(ADC_Value));
  delay(900);
}
```

以下のようになった

```txt:結果
AD:1
AD:2
AD:2
AD:2
AD:1
AD:1
AD:2
AD:1
AD:1
AD:2
AD:26
AD:34
AD:29
AD:32
AD:34
AD:1
AD:1
AD:1
AD:1
AD:1
AD:1
AD:1
AD:1
AD:1
AD:1
```

ADの値が2桁になっている時は、フラッシュライトで照らしている時。

AD取込ができた。

0.7mVと330mVでだいたい470倍だが、そうなっていないのは0.7mVの方が1より小さくなりすぎているのだろう。

次の段階としては、この取込値をWR2側に送る仕組みの作成。


## 写真

フォトトランジスタは基板の右上に接続した。緑色のもの。
I-V変換の抵抗はESP-WROOM-02の右下（プッシュスイッチの左下）に接続。
配置があやしくなってきた。

![DSC_0039.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/c121d255-faf9-550f-7e3d-71d4106b6628.jpeg)
golang zmqによるメッセージング

この記事は[株式会社アイスタイルアドベントカレンダー](http://qiita.com/advent-calendar/2015/istyle)の23日目の記事です。

今回は去年PHPアドベントカレンダーでも取り上げた
 [PHPでメッセージ送受信(zeromq)](http://qiita.com/ytake/items/884f38b1dcbc9b936f68) 
を使って簡単にgolangで利用します。 

# zmq利用準備
golangでzmqを利用する場合は、[zeromq/goczmq](https://github.com/zeromq/goczmq) が利用できます。

Macを利用の場合は、Homebrewなどを利用するといいでしょう。

```bash
$ brew install zeromq
$ brew install czmq
```

ここではメッセージ送信元をPHPとしますので、
PHPの場合は、libzmq、php-zmqエクステンションが必要となります。

## libzmq

```bash
$ git clone git://github.com/zeromq/libzmq.git
$ cd libzmq/
$ ./autogen.sh
$ ./configure && make
$ make install
```

## php-zmq

```bash
$ git clone git://github.com/mkoppanen/php-zmq.git
$ cd php-zmq/
$ phpize
$ ./configure && make
$ make install
```

remiリポジトリなどを利用しても構いません。
DEALER/ROUTERを使って動かしていきます。
[Using DEALER and ROUTER Sockets](http://zeromq.org/tutorials:dealer-and-router)

# PHP メッセージ送信
php-zmqエクステンションを利用してメッセージを送信します。
ここでは5555に接続して、ソケットのタイプを`\ZMQ::SOCKET_DEALER`とします。

```php
<?php

$socket = new \ZMQSocket(new \ZMQContext(), \ZMQ::SOCKET_DEALER);
$socket->connect("tcp://localhost:5555");
$receive = $socket->send("this is PHP")->recv();

echo "from golang: $receive\n";

```

クライアントのPHPはメッセージ送信後、golangからメッセージが返却されるまで待ち続けます。

# golang メッセージ受信
パッケージで紹介されているサンプルコードを利用して、
クライアントからのメッセージを受信後に返却するようにします。

```go
package main

import (
    "log"
    "github.com/zeromq/goczmq"
)

func main() {

    router, err := goczmq.NewRouter("tcp://*:5555")
    if err != nil {
        log.Fatal(err)
    }
    defer router.Destroy()

    request, err := router.RecvMessage()
    if err != nil {
        log.Fatal(err)
    }

    log.Printf("router received '%s' from '%v'", request[1], request[0])

    err = router.SendFrame(request[0], goczmq.FlagMore)
    if err != nil {
        log.Fatal(err)
    }

    err = router.SendFrame([]byte("this is golang"), goczmq.FlagNone)
    if err != nil {
        log.Fatal(err)
    }
}

```

これを実際に動かす場合は次のようになります。

```bash
# クライアントからメッセージを送信
$ php client.php
# 受信待機
$ ./main
```

これを用いて、例えばBleveのような簡単な検索パッケージを利用して、
インデックス作成を指示することもできます。

# Bleve例
[Bleve](http://www.blevesearch.com/)
クライアント側は受信を行わずに、メッセージングでインデックス追加のみを指示します。

```go
import (
    "log"
    "github.com/zeromq/goczmq"
    "github.com/blevesearch/bleve"
)


type Document struct {
    Content  string
}

func main() {

    router, err := goczmq.NewRouter("tcp://*:5555")
    if err != nil {
        log.Fatal(err)
    }
    defer router.Destroy()

    request, err := router.RecvMessage()
    if err != nil {
        log.Fatal(err)
    }

    log.Printf("router received '%s' from '%v'", request[1], request[0])

    mapping := bleve.NewIndexMapping()
    index, err := bleve.New("search.bleve", mapping)
    if err != nil {
        panic(err)
        return
    }
    // index登録
    index.Index("1", Document{string(request[1])})
}

```

zmqなどを利用することとでメッセージングによる簡単なアプリケーション開発が可能になりますので、導入してみましょう！
Setの使いどころを書いてみる

今日はSwiftのSet型について書いていこうと思います。

## Set型とは
Set型とは配列に似た型です。
配列との違いですが、下の2点があります。

* 重複を許可しない
* 順番を保証しない

実際に試した所、重複削除がされて順番もセットしたものとは違っていました。

```swift
let set: Set = [1, 2, 3, 1, 2, 3]
for value in set {
    print(value) // → 2, 3, 1
}
```

## Set型の使いどころ
私がSetを使うのは下の2つのタイミングです。
それぞれについて説明していきます。

1. 配列の重複削除をしたい時
2. 配列間の差分を取りたい時

### 1. 配列の重複削除をしたい時
配列の重複削除は、下のように配列をSet型にしてからmapで配列を生成すればできます。
しかし順番が保証されない点は注意が必要です。

```swift
let arr = [1, 2, 3, 1, 2, 3]
print(Set(arr).map { $0 }) // → [2, 3, 1]
```

NSOrderedSetを使うと順番も保証する事ができます。

```swift
let arr = [1, 2, 3, 1, 2, 3]
print(NSOrderedSet(array: arr).map { $0 }) // → [1, 2, 3]
```

重複削除をSet以外で行う場合、reduceも使えます。
しかしOrderがnの2乗になるので可能ならSetを使った方が良さそうです。

```swift
let arr = [1, 2, 3, 3, 2, 1]
let result = arr.reduce([Int]()) { (var arr, element) -> [Int] in
    if arr.contains(element) { return arr }
    
    arr.append(element)
    return arr
}
print(result)
```

### 2. 配列間の差分を取りたい時
Setでは以下の4種類のメソッドで2つのSetから要素を抽出します。
この中のsubtractを使えばSet1にはあるけどSet2にはない要素を抽出できます。
このメソッドを利用すれば配列間の差分を取得できます。

* intersect
* union
* subtract
* exclusiveOr

```swift
set1.intersect(set2) // → [2, 3]
set2.intersect(set1) // → [2, 3]
set1.union(set2) // → [2, 3, 1, 4]
set2.union(set1) // → [2, 3, 1, 4]
set1.subtract(set2) // → [1]
set2.subtract(set1) // → [4]
set1.exclusiveOr(set2) // → [4, 1]
set2.exclusiveOr(set1) // → [4, 1]
```

これはどういう時に使うかというと、ブログアプリでエントリーのタグ更新する時などがあります。
APIの仕様によってはタグが追加された場合は追加されたタグのIDを送り、タグが削除されたらそのタグのIDを送るというケースが出てきます。
そういう時にはSetを使えばスマートに送るべきパラメータを作る事ができます。
ghq, peco, hubで快適Gitライフを手に入れよう！


## はじめに

peco, hubは前から使っててghqは存在は知りながらも「別にリポジトリ管理は必要ないかなー」と思ってたのですが、管理するリポジトリ数が増えてきて面倒になってきたので試しに入れてみたらかなり良かったので紹介したいと思います :smile: 

## ghq, peco, hubとは？

### [ghq](https://github.com/motemen/ghq)

ghqは上でも軽く書いたようにリポジトリ管理ツールになります。
例えば`git clone`の代わりに`ghq get <repository URL>`とコマンドを打つとghqルートディレクトリ（デフォルトでは`~/.ghq`）以下にリポジトリがcloneされ、
`ghq list`でghqルートディレクトリ以下のGitリポジトリ一覧を表示、
`ghq look <project>`で指定したリポジトリに移動する、といったように使います。

### [peco](https://github.com/peco/peco)

pecoは文章で説明するのは難しいのですが、CLI上で例えば`ps aux`などのようにリスト表示されるものをインクリメンタルサーチできるようにするものです。

詳しくはGithub参照ということで
https://github.com/peco/peco

### [hub](https://github.com/github/hub)

hubはGithubをCLI上で操作するためのツールです。
本記事では`hub browse`（Githubで指定したリポジトリを開く）をするためだけに利用します。

## インストール

全てGo製のライブラリなので`go get`していただくか、もしくは全てhomebrewでもインストールできるのでそちらでやっていただければOKです

### ghq

```
$ brew install ghq
# or
$ go get github.com/motemen/ghq
```

### peco

```
$ brew install peco
# or
$ go get github.com/peco/peco/cmd/peco
```

### hub

```
$ brew install hub
# or
$ go get github.com/github/hub
```

## やったこと

各ツールの基本的な使い方は各公式サイトをご覧ください。

今回、僕はghqで管理しているリポジトリをpecoを使って選択し、ローカル・リモート両方に移動できるようにしました。

結論から言いまして、以下2つのエイリアスでこれを実現しました。

```
alias g='cd $(ghq root)/$(ghq list | peco)'
alias gh='hub browse $(ghq list | peco | cut -d "/" -f 2,3)'
```

### ローカルリポジトリへの移動： `$ cd $(ghq root)/$(ghq list | peco)`

![g.gif](https://qiita-image-store.s3.amazonaws.com/0/15402/2b8a80c9-0f3b-92ea-fa32-0642b089b5dc.gif "g.gif")

ローカルリポジトリへの移動なのですが、これは上記にもある通り`ghq look`でもできます。
`ghq look`はプロジェクト名のサジェストもできるのでこれでもいいと言えばいいのですが、インクリメンタルサーチが欲しかったのと`ghq look`の動作が微妙に遅いという理由があり、このようなコマンドに至りました。

#### `$(ghq root)`

ghqのルートディレクトリを返してくれます

#### `$(ghq list | peco)`

`ghq list`をpecoでインクリメンタルサーチできるようにしています

`ghq list`は'-p'オプションでフルパスで一覧表示を、`--unique`オプションでプロジェクト名のみの一覧表示をしてくれます。
`-p`は個人的には冗長で嫌、`--unique`ではインクリメンタルサーチする時にユーザー名で絞り込めず不便、ということでオプションは無しにしています。
フルパス表示で特に問題ないなら`ghq root`は無しで`cd $(ghq list -p | peco)`で大丈夫ですし、プロジェクト名だけでよくてかつ`ghq look`の速度が気にならないなら`ghq look $(ghq list --unique | peco)`でも良さそうです。

### リモートリポジトリへの移動： `$ hub browse $(ghq list | peco | cut -d "/" -f 2,3)`

![gh.gif](https://qiita-image-store.s3.amazonaws.com/0/15402/c039f5c0-613b-2af3-f8ae-e60def08b88c.gif "gh.gif")

#### `hub browse <user>/<repository>`

Githubの指定したリポジトリを開きます

#### `cut -d "/" -f 2,3`

`ghq list`での表示は例えばRubyのリポジトリだと"github.com/ruby/ruby"のようになります。
`hub browse`では頭の'github.com/'はいらないため、cutで2~3個目の要素（`ruby/ruby`）を切り出しています。

## まとめ

以上のようにghq, peco, hubを使うことでGitリポジトリの管理と移動を便利にすることができました！
もしリポジトリの管理が面倒だったり「あのリポジトリどこに作ったっけ・・・」みたいなことが起きているならば使ってみてはいかがでしょうか？

## [宣伝](https://www.wantedly.com/projects/37497)

[クラウドワークスでは働き方に革命を起こしたいエンジニアを募集しております！](https://www.wantedly.com/projects/37497)
[興味のある方はとりあえずお話だけでもいかがでしょうか？](https://www.wantedly.com/projects/37497)

[お待ちしております！](https://www.wantedly.com/projects/37497)
独自のimport関数を定義する話

この記事は、[Perl Advent Calendar 2015](http://qiita.com/advent-calendar/2015/perl5)の22日目の記事です。

なお、21日目は[akihiro_0228](http://qiita.com/akihiro_0228)による[プロジェクトのユニットテスト用雛形をサクッと作る](http://akihiro0228.hatenablog.com/entry/2015/12/21/212646)でした。

最近、`use MyModule`の後ろに関数名じゃないものを指定できるモジュールをいくつか使ったり、自分でも作ったりしたので、その時に調べたことをまとめました。

ただし、あんまり使いすぎると黒魔術になっちゃうので、ほどほどが良いようです。

# モジュールについて

Perlではモジュールという仕組みが用意されていて、他人が作った機能を自由に自分のプログラムに取り込むことができるようになっています。例えば、`Encode`モジュールが提供する`encode`関数を使いたいときは以下のようにします。

```pl
use utf8;
require Encode;
my $text = 'ぱーるあどべんとかれんだー';
print Encode::encode('UTF-8', $text);
```

いちいちモジュール名を指定するのは面倒ですね。`require`ではなく、`use`を使うと関数名だけで実行できるようになります。

```pl
use utf8;
use Encode;
my $text = 'ぱーるあどべんとかれんだー';
print encode('UTF-8', $text);
```

ちょっと短くなりました。

あたかも自分で定義した関数と同じように、`Encode`というパッケージ名を指定しなくても別のモジュールの関数が使えるようになりました。これは`Exporter`というモジュールで実現されています。

## Exporterモジュール

上記の`use`すると関数名だけで呼び出せる仕組みは、`Encode`モジュールでは、以下のように`Exporter`モジュールを使って実現されています。

```pl
package Encode;
...
use Exporter 5.57 'import';
...
our @EXPORT = qw(
  decode  decode_utf8  encode  encode_utf8 str2bytes bytes2str
  encodings  find_encoding clone_encoding
);
```

[Exporter](https://metacpan.org/pod/Exporter)モジュールを使うと、`@EXPORT`というパッケージ変数に関数名を与えておくことで、その関数名が`use`されるタイミングで利用者側のパッケージ名に取り込まれ、関数名だけで呼び出せるようにしてくれます。

いくつか使い方が有りますが、通常は以下のように継承して使うことが多いようです。

```pl
package MyModule;
use parent qw/Exporter/;
our @EXPORT = qw/func1 func2/;
sub func1 {
}

sub func2 {
}

1;
```

### Exporterモジュールの実装

`Exporter`モジュールのコードは以下のようになっています。

```pl
sub import {
  my $pkg = shift;
  my $callpkg = caller($ExportLevel);
...
  # shortcut for the common case of no type character
  *{"$callpkg\::$_"} = \&{"$pkg\::$_"} foreach @_;
} 
```

パッケージの解説をゼロから始めると長くなるので割愛しますが、perlは`use MyModule qw/func1/;`を実行するタイミングで暗黙的に`import`という名前の関数を、`qw/.../`で指定された内容をパラメータにセットして呼び出すようになっています。

`Exporter`モジュールを継承していると`import`メソッドが定義されているので、この`import`メソッドが呼び出され、関数がエクスポートされるわけです。

## 独自のimport関数

このように`Exporter`モジュールを使っても良いですが、自前で`import`関数を定義する方法も有ります。

`use`のタイミングでモジュールの挙動をパラメータによって変えたい時などに使います。

例えば[`Test::Requires`](http://search.cpan.org/dist/Test-Requires/lib/Test/Requires.pm)では、以下のように`use`で指定するのはエクスポートしたい関数ではなく、テストに必要な***モジュール名***を指定するようになっています。

```pl
use Test::Requires qw/Test::Module/;
```

これは`Test::Requires`の`import`関数を以下のように定義することで実現されています。

```pl
sub import {
    my $class = shift;
    my $caller = caller(0);

    # export methods
    {
        no strict 'refs';
        *{"$caller\::test_requires"} = \&test_requires;
    }

    # test arguments
...
        for my $mod (@_) {
            test_requires($mod, undef, $caller);
        }
...
}
```

最初に`test_requires`という関数をエクスポートして、その後にパラメータで与えられているモジュールを引数に`test_reuqires`関数を呼び出しているのが分かるかと思います。

## おわりに

通常は`use MyModule`の後ろはエクスポートしたい関数名を指定しますが、上記のように独自の`import`関数を定義してしまえば、何でもできてしまいます。本当にPerlは油断ならない言語ですね！

なお、次は[_pawa_](http://qiita.com/_pawa_)さんによる「青空文庫を支えるPerl言語」です！！
Theory of Horology-test

test test

日本語書けます

$ \int_0^t x^2 dx $

$ \frac{dy}{dx} $

$ \sum_{n=0}^{k } $

![250px-Cornu_Spiral_svg.png](https://qiita-image-store.s3.amazonaws.com/0/106772/6299864c-1dc5-2892-d11b-6819ece1016a.png)


どうかな : :blush:
SphinxにYouTube動画を貼る方法


[Sphinxでの動画の貼り方](http://hironow.bitbucket.org/blog/html/2013/06/21/video_extension.html) を参考にした．

1. [sphinx-contribリポジトリ](https://bitbucket.org/birkenfeld/sphinx-contrib/src/95ef7a2909562d8f0898c090595c150e2bf40895/youtube/) をダウンロード（youtubeだけが必要だが，それだけをダウンロードする方法が分からなかったからすべてダウンロードした．それでも1MB程度）．
2. 以下のようにしてインストール．

   ```
   $ cd youtube
   $ python setup.py install
   ```

3. sphinxドキュメントの中に，

   ```
   .. youtube:: 2p4ifeMhwPg
   ```

   のようにしてyoutubeへのリンクを埋め込む．
ESP8266 > リレータッチボードの使用

Delphi Advent Calenderにて15日目に @qa65000 さんが紹介されていたリレータッチボードを入手した。

https://www.switch-science.com/catalog/2455/

これをESP8266で使おうと考えていたが、電圧が微妙かもしれない。

リレータッチボードは電源電圧が5VでENに0Vか5V入力する。
一方で、ESP8266の方は[データシート](http://akizukidenshi.com/download/ds/espressifsystems/0C-ESP8266__WROOM_WiFi_Module_Datasheet__EN_v0.4.pdf)のp13のTable 10を読むと 0.8VDD (=0.8*3.3=2.64V)程度しか電圧が出ない。

載っているチップの仕様は以下のようだ。
http://www.fa.omron.co.jp/product/item/g6l_1002c/

RPiの方も3.3Vの電圧。

実際に使用されていたmbedの方は5V駆動でGPIOも5V出力できているのだろう。
https://developer.mbed.org/platforms/mbed-LPC1768/
Braintreeについて

PayPalのデベロッパーサイトのDOCUMENTATIONのTOPにいくと「Braintree v.zero」のリンクがはじめにあらわれます。
https://developer.paypal.com/docs/bt-vzero-overview/

この「Braintree」と「v.zero」ってなんぞという声をたまにききますが、Brantreeは、いわゆるPayment Gatewayであり、2013年にPayPal傘下におさまった決済サービスおよびその会社名です。v.zeroはそのAPIプラットフォーム全体を指し、クレジットカード決済からPayPal、ApplePay、AndroidPay、BitCoinなど多くの支払い方法を受け付けるプラットフォームになっています。
https://www.braintreepayments.com/

PayPalがいわゆるウォレット決済とよばれるアカウント保持者を前提にした決済であるのに対し、Braintreeはクレジットカードなどその他の任意の決済に対応するためのサービスということで使い分けがされています。

エンジニアの方にとって身近な導入例だとGitHubがあるでしょう。
GitHubの有料プランはクレジットカードかPayPal決済かが選べますが、どちらもBraintree経由での決済となっています。

その他Uber、pinterestなど旬なサービスに導入されています。

残念ながら、まだ日本ユーザーとして本番運用することはできませんが、sandboxモードとしては使えるので日本ローンチ前に様々な機能をつかってみるのもよいかもしれません。
https://sandbox.braintreegateway.com/merchants/sqhrsttx42vpt63j/home

BrantreeのDashboard
<img width="1264" alt="Screen Shot 2015-12-23 at 8.35.15 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/61900/12a599fc-be50-3a29-ec6e-3282b2645ae1.png">

API、JavaScript SDK、iOS/Android SDKなどインターフェースも豊富で、ユニークなのはまだベータですが「Hosted Field」 という機能。
https://www.braintreepayments.com/features/hosted-fields

カードの入力フォームをinputを全く使わず作れる機能（divによって実現できる）で、これによってカード情報を直接受け取る実装を回避し、PCIDSSの対象レベルを下げようとするアプローチです。

日本で使えるようになるのがまちどおしいですね。
[React Native] 1.1 MacでReact Nativeを使ってAndroidアプリを動かそうとして、failed to find Build Tools revision 23.0.1 というエラーが出た時の対応

Mac(Mavericks)上で、react nativeでandroidを動かそうとしたとき、以下のエラーが出ました。

```js
$ react-native run-android

JS server already running.
Building and installing the app on the device (cd android && ./gradlew installDebug)...

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> failed to find Build Tools revision 23.0.1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 5.203 secs
Could not install the app on the device, read the error above for details.
Make sure you have an Android emulator running or a device connected and have
set up your Android development environment:
https://facebook.github.io/react-native/docs/android-setup.html
```

問題はこいつです。

```js
failed to find Build Tools revision 23.0.1
```

AndroidSDKのパスなどは通っています。

```java:~/.zshrc
export ANDROID_HOME="/Users/watashi/Library/Android/sdk"
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
```

Android Studio経由で対象のtoolは導入したつもりでした。

しかしダメだったので以下の対応をしました。

# 対応

SDKのリストを表示します。

```js
$ android list sdk -a

.
.
.
Packages available for installation or update: 160
   1- Android SDK Tools, revision 24.4.1
   2- Android SDK Tools, revision 25.0.1 rc2
   3- Android SDK Platform-tools, revision 23.1
   4- Android SDK Build-tools, revision 23.0.2
   5- Android SDK Build-tools, revision 23.0.1
... and a great many more
```

5に今回求められているSDKがありました。

```js
$ android update sdk -a -u -t 5

.
.
.
Installing Archives:
  Preparing to install archives
  Downloading Android SDK Build-tools, revision 23.0.1
  Installing Android SDK Build-tools, revision 23.0.1
    Installed Android SDK Build-tools, revision 23.0.199%)
  Done. 1 package installed.
```

ここまでやると、通りました。





http://stackoverflow.com/questions/27272605/failed-to-find-build-tools-revision-21-1-1-sdk-up-to-date
ノハナ年賀状をグイグイ直したらボーナスもグイグイ上がりそうなお話

[mixiグループアドベントカレンダー](http://qiita.com/advent-calendar/2015/mixi)24日目です！

[ノハナ](http://nohana.co.jp/)のAndroidエンジニアの[hiroyuki-seto](https://github.com/hiroyuki-seto)です！
本日も張り切って参りましょう！

# まえがき
私は今年の5月に[ノハナ社](http://nohana.co.jp/)に入社し、[ノハナ年賀2016](http://nenga.nohana.jp/)の[Android版](https://play.google.com/store/apps/details?id=jp.co.nohana.nenga)のクライアント側の開発を担当しました。
お陰様で今年は売り上げが好調なので、どういう点を意識して改修したかを書き綴ります。
先にお断りしますが、具体的な実装についての記述はありません。

## ノハナ年賀状とは
スマホで撮影した写真で簡単に年賀状が作れる[素敵なアプリ](https://play.google.com/store/apps/details?id=jp.co.nohana.nenga)です。
2013年にサービスを開始し、~~秘伝の~~ソースコードを毎年受け継いでいます。

## ノハナ年賀状の第一印象
最初に昨年度のバージョンを触ったときの印象は、とにかく**処理待ちが長すぎる**でした。
初回起動、2回目以降の起動、年賀状を作るとき、保存するとき、全てにおいて想像以上に待たされる。
そしてクラッシュ率も結構高い。
この点をまずどうにかしないと..と思いました。

# 実際に修正した点
主に高速化と動作安定化について書きます。

## 1. 画像の読み込み改善〜OOMとの戦い〜
ノハナ年賀状はユーザーがスマホで撮影した写真を年賀状に組み込めるようになっているのですが、
処理時間が長く`OutOfMemoryError`での強制終了が多発するという残念な感じでした。
原因としては画像を元サイズのままメモリに読み込んでいたことでした。
(PCで編集した2~5000万画素の写真をスマホで扱うユーザーさん、結構多いですよ..)

対策として、

- `BitmapFactory.Options.inJustDecodeBounds`を`true`にして画像のサイズだけ取得
- `BitmapFactory.Options.inSampleSize`を設定して適切なサイズに縮小してから画像読み込み

ということをやりました。
具体的な実装については
http://qiita.com/exilias/items/38075e08ca45d223cf92
こちらの記事の前半部分と同じ流れです。

上記の処理を入れた結果、体感できるレベルで動作の高速化をすることができました。
画像のサイズに依存しますが、50%~80%くらい高速化します。
また、読み込む画像のサイズが小さくなったことでOOMもかなり減らすことができました。

## 2. ContentProviderの処理
ノハナ年賀状では様々なデータをDBに保存しています。
年賀状のテンプレートのデータなど数百個のデータを連続してDBに登録する処理が複数箇所あるのですが、
`ContentProvider`経由でDBにアクセスしているので処理時間が長く、処理待ち時間も長くなっていました。
そこで`ContentResolver#insert`ではなく`ContentResolver#bulkInsert`を利用することにしました。
`bulkInsert`はまさにこのような処理のために作られたAPIで、
複数個のデータをまとめてProviderに送るのでContentProviderのオーバーヘッドを短縮することができ、
適切に実装してあげることでDBのtransactionの待ち時間も短縮することができます。
`ContentProvider`側の実装については下記の記事が参考になると思います。
http://qiita.com/Yuki_312/items/a38cf2bc33691f4d85b6

ノハナ年賀状2016で実際にどれくらい高速化したかと言うと、

- 年賀状のテンプレートデータ保存では登録時間が20%OFF
(テンプレートデータは3回に分けて保存しているのですが、どれも20%程度OFFになっています)![chart1.png](https://qiita-image-store.s3.amazonaws.com/0/103039/885aff4b-f022-6d3f-f91c-a19f0b8ae4ef.png)


- 年賀状のテンプレートのカテゴリー分けのデータ保存では登録時間が80%OFF![chart2.png](https://qiita-image-store.s3.amazonaws.com/0/103039/b8030e38-5809-e63c-4fa8-58005e4d75ff.png)



と素晴らしい結果になりました。(※手元の端末調べ)

## 3. クラッシュフリー率の改善
これは地道にやっていくしかないのですが、
Crashlyticsでクラッシュ情報を見て、直せるものならば直して、原因がよくわからなければログを仕込んで..
という作業を繰り返しました。
ログを吐き出したりユーザー動作をトラッキングするあたりはライブラリとして切り出しているので、近々[ノハナ社のOSS](https://github.com/nohana)として公開する予定です!!

結果としてクラッシュ率は昨年度の1/5以下まで下げることができました。
ユーザーがよく使う部分から改修していけば評価は上がりやすいですね！

# 頑張った結果
以下のものがグイグイ上昇しました

- DL数
- CVR率
- 売り上げ
- ストアレビュー (去年☆3.4 → 今年☆4.3)
- 来年の僕のボーナス(予定)

ご褒美でおいしいご飯も食べれるらしいので期待しています！

# 最後に
こうしてやったことを振り返ると、とても地味で基本的な実装をやっただけですね。
まだまだ処理待ち時間を減らしたり安定化を図れると思うので、来年度のノハナ年賀状は更にご期待ください！
というか[一緒に改修しましょう！](https://www.wantedly.com/projects/25788)

明日はいよいよ最終日です。
[yusuke_tashiro](http://qiita.com/yusuke_tashiro)さんが何かを書いて締めてくれます！
[RoR]railsのscaffoldでデフォルトプライマリーキーを使わない設定

#概要
scaffoldを使ってテーブル作成をする場合、何も指定しないと、

Id

が、プライマリーキー(&オートインクリメント)として設定されます。

これだと、IDを自分で指定したい場合やオートインクリメントさせたくないマスタデータ作成には不便なので、カスタマイズする。

#環境
Ruby   2.2.2
Rails    4.2.3

#サンプル
例えば、都道府県マスタを作る場合

ID(プライマリーキー、オートインクリメントさせない)、日本語名、ローマ字名

のカラムを持つテーブルを作りたいとき

##1.generate scaffold を実行

通常通り、scaffoldコマンドの実行

```lang:cmd
rails generate scaffold prefecture name_jp:string name_en:string
```
##2.マイグレーションファイルの修正

プロジェクトDir/db/migrate/のマイグレーションファイルを以下のようにする

```lang:XXX_create_prefecture.rb
class CreatePrefectures < ActiveRecord::Migration
  def change
    create_table :prefectures, id:false do |t|
      t.column :id, 'INTEGER PRIMARY KEY NOT NULL'
      t.string :name_jp
      t.string :name_en
      t.timestamps null: false
    end
  end
end
```
**＊id:falseとすることで、自動的に作られるプライマリキー作成をfalseにする**

##3.コントローラのprefecture_paramsメソッドを修正
プロジェクトDir/app/controllers/prefectures_controller.rbの下部のprefecture_paramsメソッドにidを追加


```lang:prefectures_controller.rb
def prefecture_params
  params.require(:prefecture).permit(:id, :name_jp, :name_en)
end
```

##4.その他の修正
IDを入力、編集、表示できるように各種viewファイルを修正
ビルトインウェブサーバーで簡単環境構築

**[1行のコマンドでローカル環境にEC-CUBEを最速でインストールする](https://qiita.com/nanasess/items/debc18697a89a7ccaddb)** というエントリも書きましたのでご参考まで

----

EC-CUBE をはじめとする、 PHP アプリケーションをカスタマイズする場合、開発環境はどうしていますか？と質問すると、
**「サーバーにインストールされているものを FTP で更新して...」**
という声をよく聞きます。

プログラムを編集するたびに、サーバーへ転送していたりすると、大変作業効率が悪いので、僕らエンジニアは手元の PC に環境構築してしまう場合が多いです。
メジャーなところでは、 XAMPP を使用したり、 VirtualBox で仮想の Linux 環境を作成したり、 Mac では MAMP や HomeBrew などで Webサーバーを構築したり。
(XAMPP は、トラブルの元なので個人的には絶対使いたくないのですが...)
Windows でしたら、 WebMatrix があるので比較的簡単に構築できます。

これらは、一旦設定してしまえば、あとは何とかなるのですが、プログラミングの不慣れなデザイナーさんや、店舗オーナーさんには、ちょっと敷居が高いです。

実は、 PHP5.4 から、「[ビルトインウェブサーバー](http://php.net/manual/ja/features.commandline.webserver.php)」というものがあり、 PHP とデータベースさえインストールしてあれば、 EC-CUBE を動かすことができるのです。

EC-CUBE3 はもちろん、 2.13系でも動きます。
WordPress など、EC-CUBE 以外の PHP アプリケーションでも使えます。
ただし、このビルトインウェブサーバーは簡易的なものですので、実運用には使用できませんのでご注意ください。

**DBの作り方がわからない** とか、 **Mac OS X 10.9 より古いんだけど...** という方は、コメント欄にでもリクエストいただければ加筆いたします。

## 準備

1. PHP をインストールしましょう。 
    - Windows の場合は、 [Web Platform Installer](https://www.microsoft.com/web/downloads/platform.aspx) で PHP 5.4 以降をインストールしましょう。
    - Mac OS X 10.9 以降でしたら、最初からインストールされている PHP で問題ありません。
2. ~~データベースをインストールしましょう。~~ **[EC-CUBE 3.0.9 からは sqlite が利用できます](https://github.com/EC-CUBE/ec-cube/pull/1393)ので、データベースのインストール不要です。**  PostgreSQL または MySQL を使用したい方は以下を参考にしてください。
    - [こちらを参考に、PostgreSQL をインストールしておきましょう](http://lets.postgresql.jp/map/install) 
    - MySQL にしたい場合は、[こちらから(英語)](http://dev.mysql.com/downloads/mysql/)
3. EC-CUBE をダウンロードし、ZIPを展開しておきましょう

## 利用方法

Windows の場合は、コマンドプロンプト、 Mac の場合は、ターミナル(Terminal.app)を開きます。

以下のように、 EC-CUBE の ZIP を展開したフォルダへ移動します。

```sh
cd path/to/ec-cube
```

`cd` と入力したあとスペースを入力し、 展開したフォルダをコマンドプロンプトやターミナルにドラッグ&ドロップすると、フォルダを自動的に入力可能です
*フォルダ名に日本語が混ざっていると動かない場合もありますので注意しましょう。*


php コマンドに -S をつけることでビルトインウェブサーバーが起動します。
以下の例は、 8080 番ポートで起動しています。 `-t` で、 ドキュメントルートにしたいディレクトリを指定します。

```sh
php -S localhost:8080 -t html
```

ブラウザで http://localhost:8080 へアクセスすると EC-CUBE のインストーラ画面が表示されるはずです。
サーバー上で動いている EC-CUBE と違い、 .htaccess が使えなかったり、多少の制約はありますが、ちょっと動作確認や、カスタマイズをするくらいでしたら、十分使えると思います。
[PostgreSQL 9.0+] string_aggで順序を指定する

あれどうやって書くんだっけとなったのでメモ

# この記事が前提とする環境
PostgreSQL 9.0以上

# やりたいこと
従業員を表すテーブル`employees`があるとする。

|employee_id|department_id|employee_name|
|-----------|-------------|-------------|
|1          |1            |佐藤         |
|2          |1            |鈴木         |
|3          |1            |高橋         |
|4          |2            |田中         |
|5          |2            |伊藤         |

このとき、部門ごとに、その部門に所属している従業員の一覧を/区切りで出力したい。
出力の一貫性を保つために従業員の順番はemployee_id順とする。

|department_id|employee_names|
|-------------|--------------|
|1            |佐藤/鈴木/高橋|
|2            |田中/伊藤|

# コード
```sql
SELECT
  department_id,
  string_agg(employee_name, '/' ORDER BY employee_id) AS employee_names
FROM
  employees
GROUP BY
  department_id
ORDER BY
  department_id;
```

# 参考リンク
[postgresql - How to get result from string_agg() with a proper order by - Stack Overflow](http://stackoverflow.com/questions/24906826/how-to-get-result-from-string-agg-with-a-proper-order-by)
初心者のためのGitとSourceTree　〜サルでもわかるGit入門を試してみた〜 その4

## チュートリアル３　変更履歴の統合
### 競合状態でプッシュする
サルGitに従って「tutorial」と「tutorial2」を使って競合状態を作ります。

**tutorialでの作業**
tutorialにあるsample.txtを開いて次のように追加し、コミットします。

![sourcetree_40.jpg](https://qiita-image-store.s3.amazonaws.com/0/106687/67f09607-2b60-7078-e81a-f1d78fb898a7.jpeg)

<img width="806" alt="sourcetree_42.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/35c83eab-ce4c-a003-31a9-4a85110e7913.jpeg">

次にリポジトリを切り替えます。

**tutorial2での作業**
先ほどと同様にtutorial2にあるsample.txtを開いて次のように追加し、コミットします。
> サルでもわかるgitコマンド　ver.2
add 変更をIndexに登録します
Pull リモートリポジトリの内容を取得します


コミットしたら、そのままtutorial2からプッシュします。

<img width="904" alt="sourcetree_44.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/7dced6e8-c5e5-4e40-ec1c-c8316a92a4db.jpeg">

**tutorialでの作業**
次にリポジトリをtutorialに切り替えて、先ほどコミットした内容をリモートリポジトリにプッシュします。
すると・・・
<img width="599" alt="sourcetree_45.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/2c0c804a-dd8b-ba43-3af9-8aef9c66b26e.jpeg">

競合が発生した！と怒られて（エラーによりプッシュを拒否)されてしまいました・・・

### 競合を解決する
**tutorialでの作業**

まずは競合の原因となっているソースをリモートリポジトリからプルします。
<img width="1050" alt="sourcetree_47.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/a95a3b15-0282-daeb-19c6-44d680bdb364.jpeg">

すると・・・
<img width="420" alt="sourcetree_46.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/a61f8c4d-c0e7-7860-80e7-dd008cc37814.jpeg">

競合が発生したことを示すダイアログが表示されます。
そこで、sample.txtの中身を確認してみると・・・

![sourcetree_48.jpg](https://qiita-image-store.s3.amazonaws.com/0/106687/44d6219f-e96d-7647-1b42-f13da52462fe.jpeg)


なにやら見慣れないものが追加されています。
どうやらGitが競合の発生した箇所に勝手に修正を入れているようです。
そこで余計なマーカー行を削除し、取り込みたい変更点だけを残します。
![sourcetree_49.jpg](https://qiita-image-store.s3.amazonaws.com/0/106687/3e4798ae-d36b-1d3f-0ce4-bccec1a13ee8.jpeg)

ファイルの内容を変更したのでコミットする必要があります。
ファイルをインデックスに追加してから、コミットします。
<img width="1050" alt="sourcetree_50.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/85a2ebc6-0c3e-82b7-90d4-0ae2416f20cc.jpeg">

<img width="1050" alt="sourcetree_51.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/28c26f82-24ae-cafa-905c-9721fb6d2b13.jpeg">


これでリモートリポジトリから最新の変更内容の取り込みが完了しました。
これでようやくリモートリポジトリへプッシュできるようになりました！
早速プッシュしてみると・・・
<img width="1050" alt="sourcetree_52.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/0685f640-dc12-ccef-b604-b9117a938cb9.jpeg">

無事にリモートリポジトリに競合を解決した状態で反映されました。

めでたし、めでたし。
xibを使って簡易ローディングを作成する

##今回の成果物
こちらに置いてあります
[negibouze/SimpleLoadingSample](https://github.com/negibouze/SimpleLoadingSample)

##1. LoadingView.xibを作成する

####1. 背景を設定する  
alphaで透過させるとsubviewも一緒に透過されてしまうので、opacityで透過させる。
![1-1.png](https://qiita-image-store.s3.amazonaws.com/0/37319/c99a1593-73f3-13c5-1ff3-7ef2e4061f88.png)

####2. Activity Indicatorを配置する  
中心に来るようにする。
![1-2.png](https://qiita-image-store.s3.amazonaws.com/0/37319/4082470e-d5a3-93b3-aeb4-39d5195650a0.png)

##2. LoadingView.swiftを作成する
```swift:LoadingView
class LoadingView: UIView {
    
    @IBOutlet var contentView: UIView!
    @IBOutlet weak var indicator: UIActivityIndicatorView!
```

##3. .xibと.swiftを紐づける
####1. File's OwnerにLoadingView.swiftを設定する  
![3-1.png](https://qiita-image-store.s3.amazonaws.com/0/37319/bab98d08-4996-99c4-1a0d-6a9038d939de.png)

####2. 各要素を紐づける
![3-2.png](https://qiita-image-store.s3.amazonaws.com/0/37319/1f0a6eaf-41b7-7894-a8d4-6d976be420d8.png)

##4. LoadingViewを実装する
```swift:LoadingView（抜粋）
class LoadingView: UIView {

    private static let sharedInstance = LoadingView()
    private var isShow = false
    
    private override init(frame: CGRect) {
        super.init(frame: (UIApplication.sharedApplication().delegate?.window??.bounds)!)
        self.setup()
    }

    class func show(duration: Double = 0.5) {
        if sharedInstance.isShow {
            return
        }
        guard let win = UIApplication.sharedApplication().delegate?.window, let window = win else {
            return
        }
        sharedInstance.isShow = true
        sharedInstance.indicator.startAnimating()
        window.addSubview(sharedInstance)
        UIView.animateWithDuration(duration,
            animations: {
                sharedInstance.alpha = 1.0
            },
            completion: nil
        )
    }

    class func hide(duration: Double = 0.5) {
        if !sharedInstance.isShow {
            return
        }
        UIView.animateWithDuration(duration,
            animations: {
                sharedInstance.alpha = 0
            },
            completion: { b in
                sharedInstance.removeFromSuperview()
                sharedInstance.indicator.stopAnimating()
                sharedInstance.isShow = false
            }
        )
    }
```
Rの高速化のまとめ

Rの高速化のまとめ

- 【R言語】ループ処理回避 (and/or) 並列化処理 組み合わせで、計算高速化 手法まとめ - Qiita http://qiita.com/HirofumiYashima/items/18d5aa87578115215230

# RMPI, apply, snow, ff など
- Rの高速化 http://www.slideshare.net/antiplastics/acceralation-of-r

# doMC, doSNOW,ほか

# pforeach
- R で超簡単に並列処理を書けるパッケージ pforeach を作った - ほくそ笑む http://d.hatena.ne.jp/hoxo_m/20141222/p1

# openBLAS
- OpenBLAS で R を高速化 - Qiita http://qiita.com/hoxo_m/items/aa04b9d3d7a32cb6a1a3

# Revolution R Open
- レボリューションR日本語サイト | 無料で使える、より高速なR「Revolution R Open」が公開 http://www.r-analytics.jp/#!無料で使える、より高速なR「Revolution-R-Open」が公開/cjjx/B85A8CBE-0EB0-49F2-97D3-D1E7006E6F9E
- Download Revolution R Open, the enhanced R distribution · MRAN https://mran.revolutionanalytics.com/download/
arduinoで簡易クリスマスツリーを作る

#コンセプトと概要
妻がクリスマスツリーが欲しいと言ったので、自作しました。
ツリーの醍醐味である電飾の点滅は１００均のLEDケーブルをarduinoで制御することで実現。
#用意するもの
- 木　６００円
- arduino（今回はarduino unoを使用）
- LEDケーブル　１００円
- 抵抗や導線、ブレッドボード（あればよし）
- ツリー用装飾品　１００円

arduinoは家にあったものを使用したので、
木と装飾代の８００円で今年の我が家のツリーが完成しました。

#手順
1. arduinoとLEDケーブルをつなげる。
arduinoの13pinとGNDをLEDケーブルの電池をはめ込む「＋」と「ー」に接続。
※過電流対策にブレッドボードなどを使って間に抵抗を挟むことをお勧めします
2. arduinoに以下のコードを書き込む

```
void setup() {
  // put your setup code here, to run once:
  pinMode(13,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(13,HIGH);
  delay(1000);
  digitalWrite(13,LOW);
  delay(1000);
}
```
3.木に装飾品とLEDケーブルを巻きつけて完了。

#接続図
![DSC_0153.JPG](https://qiita-image-store.s3.amazonaws.com/0/76254/483d9af6-a53d-664a-6ce0-577cfd6dc492.jpeg)

#完成図
![GIF_20151223_230253.gif](https://qiita-image-store.s3.amazonaws.com/0/76254/538f1ef8-a9c6-12d9-2648-f0e9f4263bdf.gif)
windowsを使っててgitの差分を取りたいとき（普段ソースツリー使用者向け）メモ

全部上書きしてしまえばいいものを差分だけほしいと言われるときがあるのでメモ。
bat処理だとなぜかうまくいかないことがある。（差分が数十ファイルにでも及ばないとbatで差分を取らず、あまりそういったときが無いためエラー吐き出す状況があまり分からず原因不明）
そんな時はTortoiseGitを使うべし。
TortoiseGitなら今のところエラー無し

#TortoiseGitインストール
[サルでもわかるシリーズ](http://www.backlog.jp/git-guide/intro/intro2_1.html)をどうぞ。

#差分抽出
・TortoiseGitが使えるようになったらTortoiseGitのメニューから｢ログを表示｣を選択。
・ログメッセージの画面になるので差分を取りたいコミットを選択
![test.jpg](https://qiita-image-store.s3.amazonaws.com/0/102263/62a5817a-5043-11d3-eca5-6560ee100da4.jpeg)
<br>
・右クリックメニューから「リビジョンの比較」で下図の用な画面が出るので、差分ファイルを全選択して、さらに右クリックメニューからの選択をエクスポートで差分作成できる。![名称未設定-2_03.jpg](https://qiita-image-store.s3.amazonaws.com/0/102263/e21217b7-2eb4-dde8-3ac7-77bd87b8bc13.jpeg)

技術でもなんでもないけどとりあえず忘れないようにメモ。



追記：2016/04/18
MACで差分取るなら下記のページのコマンドがいいらしい。
他のだとエラーでることもあるとか。なんでだめなのかちゃんと検証してないけど
[webtech-walker](http://webtech-walker.com/archive/2012/09/git_export_diff.html)
あなたは何個分かる? Swiftのsubscriptの使い方7選

## 1. 普通のsubscriptの使い方

```swift
class MyClass {
    var values: [String] = []
    subscript(index: Int) -> String {
        get {
            return values[index]
        }
        set {
            values[index] = newValue
        }
    }
}
print(MyClass()[0])
MyClass()[0] = ""
```

struct/enumでも同様に使えます。

```swift
struct MyStruct {
    subscript(index: Int) -> String {
        get { return "" }
        set {}
    }
}

enum MyEnum {
    subscript(index: Int) -> String {
        get { return "" }
        set {}
    }
}
```

## 2. Readonlyなsubscript構文
setを書かなければreadonlyになります。

```swift
class MyClass {
    var values: [String] = []
    subscript(index: Int) -> String {
        get {
            return values[index]
        }
    }
}
print(MyClass()[0])
// MyClass()[0] = "" はエラー
```

プロパティーと同じようにgetだけならgetを省略できます。

```swift
class MyClass {
    var values: [String] = []
    subscript(index: Int) -> String {
        return values[index]
    }
}
```

setのみの構文は許可されていません。

```swift
// Subscript declarations must have a getterエラーになる
class MyClass {
    var values: [String] = []
    subscript(index: Int) -> String {
        set {
            values[index] = newValue
        }
    }
}
```

## 3. 複数のIndexを使ったsubscript構文
index1ですが複数持つことができます。

```swift
class MyClass {
    subscript(index1: Int, index2: Int) -> String {
        get {
            return ""
        }
        set {
        }
    }
}
print(MyClass()[0, 0])
MyClass()[0, 0] = ""
```

indexの型はInt以外も使えます。

```swift
class MyClass {
    subscript(index1: String, index2: String) -> String {
        get {
            return ""
        }
        set {
        }
    }
}
print(MyClass()["0", "0"])
MyClass()["0", "0"] = ""
```

## 4. 可変長なIndexを持つsubscript構文
subscriptですがIndexを可変長にする事もできます。

```swift
class MyClass {
    subscript(index: Int...) -> String {
        print(index.first)
        return ""
    }
}
print(MyClass()[0, 1, 2])
```

## 5. Indexにラベルを付ける
メソッドのようにラベルを付ける事もできます。

```swift
class MyClass {
    subscript(row row: Int, section section: Int) -> String {
        return ""
    }
}
print(MyClass()[row: 0, section: 0])
```

## 6. Void型を扱うsubscript構文
使いどころは思いつかないのですがVoidを扱う事もできます。
普通のメソッドと違ってVoidを返却してあげる必要があります。

```swift
class MyClass {
    subscript(index: Int) -> Void {
        return Void()
    }
    func method() -> Void {
    }
}
print(MyClass()[0])
```

## 7. autoclosureを使ったsubscript構文
これも実用性は低いのですがautoclosureと組み合わせる事もできるようです。

```swift
class MyClass {
    subscript(@autoclosure index: () -> Int) -> String {
        return ""
    }
}
print(MyClass()[0])
```

[autoclosureというマニアックで少し面白い機能](http://qiita.com/shimesaba/items/b1baced2ec3d9244b2c9)

## できないこと
subscriptはメソッドと同じような事ができますが、一部使えない機能があります。

### デフォルト引数

```swift
class MyClass {
    // Default argument is only permitted for a non-curried function parameter になる
    subscript(index: Int = 0) -> String {
        return ""
    }
}
```

### inout構文

```swift
class MyClass {
    subscript(inout index: Int) -> String {
        return ""
    }
}

var int = 0
print(MyClass()[&int]) // '&' can only appear immediately in a call argument listエラーになる
```
guardでrspecが動かなくなった時のメモ（原因はbundlerのバージョン？）

railsのテストでguard-rspecを使用中

こんなエラーでguardからrspecが動かず（rakeからは動く)

```
.rbenv/versions/2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- bundler/setup (LoadError)
 ```

どうやら他のプロジェクトでbundlerをupdateしたのが原因らしく、バージョンを戻したら動いた。
・アップデート後のbundlerバージョンは ``` 1.11.2 ```

```
rbenv exec gem uninstall bundler
rbenv exec gem install bundler -v 1.10.6
```

使用しているGemfile.lockの指定に合わせて1.10.6にしたが、1.11.1でも動かないんだろうか。。
初心者のためのGitとSourceTree　〜サルでもわかるGit入門を試してみた〜 その3

### リモートリポジトリをクローンする
それでは、別のユーザーになったつもりで、先ほど作ったリモートリポジトリを、別のディレクトリ「tutorial2」にクローンしてみます。

それで・・・いきなり、サルGitに書いてあるやり方が見当たりませんw
いろいろ探してみて、多分これだ！
<img width="476" alt="sourceTree_27.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/c539545b-0cde-7fac-82d9-8585322f1870.jpeg">

すると、それっぽい画面が出てきたので、またサルGitを参考に作業を進めます。
<img width="522" alt="sourcetree_28.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/bafed079-6a75-d394-7f64-5869b57e253d.jpeg">

すると、無事にクローンしたリポジトリがブックマークの一覧に追加されました。
<img width="479" alt="sourcetree_29.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/f3fd112d-1647-edaa-b6dc-6f3790503c52.jpeg">

一応、tutorial2の中身を見てみると、ちゃんとクローンされていることがわかります。

<img width="1050" alt="sourcetree_30.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/47041a4a-6de1-5fcb-978c-7e52ce05bcf9.jpeg">

### クローンしたリポジトリからプッシュする
**tutorial2 での作業**
複製したリポジトリ（tutorial2）にあるsample.txtの中身を書き換えます。
![sourcetree_31b.jpg](https://qiita-image-store.s3.amazonaws.com/0/106687/cf78bab7-3f28-8d10-db45-07ed8dd4fb9e.jpeg)

ここではテキストエディタで２行目を追記してみました。

<img width="919" alt="sourcetree_31.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/8741fdd2-cd5e-b7dc-8d01-ff4281d61077.jpeg">

すると、ちゃんとSourceTreeにも反映しています。
そこで、コミットします。
<img width="919" alt="sourcetree_32.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/3d24b789-6edd-f68b-06c7-afb0b11f1458.jpeg">

するとローカルリポジトリのコミットが一つ先に進みました。
この辺りはサルGitの解説と同じですね。
ということで、続けてプッシュもしてみます。
<img width="919" alt="sourcetree_33.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/93bcb2b3-36cb-c8b4-7365-0782ed6f58e1.jpeg">

「master」と「origin/master」と「origin/HEAD」が同じ位置まで進んだことがわかります。

<img width="532" alt="sourcetree_34.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/551b8a37-db69-182b-efd8-b6f4f0f97968.jpeg">

Backlog側にもちゃんとプッシュした履歴が反映されています。

### リモートからのプル
次にtutorial2にプッシュした内容をtutorialに取り込んでみましょう。

**tutorialでの作業**

<img width="1000" alt="sourcetree_35.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/f8e23c83-69f7-59c5-1308-80a671f9aab7.jpeg">

プルをするには「プル」ボタンを押します。て・・・当たり前でした。
<img width="758" alt="sourcetree_36.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/68736e03-4894-451c-5516-7e6935b79499.jpeg">

ここは何も変更せずに「ＯＫ」を押して

<img width="614" alt="sourcetree_37.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/15994d1d-4937-2f59-c7a5-ff68a9d2f518.jpeg">

無事にプルできました。
<img width="765" alt="sourcetree_38.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/80ff2cc0-c5f4-b9b4-aaef-1441d1ca9a66.jpeg">

「master」と「origin/master」が同じ位置に進んだのがわかります。
念のため、sampleの中身を確認すると・・・
<img width="750" alt="sourcetree_39.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/106687/a1084c7c-84c5-079b-259d-67adbc393e4f.jpeg">

ちゃんと変更点を取り込めていました。

めでたし、めでたし。
スタートアップでのフロントエンドエンジニアの役割


# スタートアップでのフロントエンドエンジニアの役割

こんにちは、マネーフォワードでフロントエンドエンジニアをしている頼本です。
本記事ではスタートアップでのフロントエンドエンジニアの役割、実態、仕事内容、求められる物・・・などなどご紹介します。

```
マネーフォワードのバックエンドはRailsを使っているので、それ前提で記事を書かせて頂きます。
```

## スタートアップのフロントエンドの実態
私がマネーフォワードに入社したのは2013年4月。当時は[家計簿ソフト マネーフォワード](https://moneyforward.com/)をリリースして間もない頃で、バックエンドエンジニア数人、デザイナー0人、フロントエンドエンジニア0人という状況でした。（外部の協力者は除く）

その後、[会計ソフト「MFクラウド会計」](https://biz.moneyforward.com)や[請求書作成ソフト「MFクラウド請求書」](https://invoice.moneyforward.com/)などをリリースしましたが、その間バックエンドエンジニア、デザイナーは徐々に増えていきましたが、<strong>フロントエンドエンジニア増えない＼(^o^)／</strong>という状態が続きました。

今でこそ人数は増えましたが、なんやかんやで約2年近くフロントエンドエンジニアは1人でした。

## そもそもフロントエンドエンジニアの仕事って何するの？
「フロント？HTMLとCSS書いてるんでしょ？」と思われる方も少なからずいると思うので、そもそもフロントエンドエンジニアの仕事って何するの？という部分を紹介します。

### 一般的なフロントエンドエンジニアの仕事

会社によってはもっと細分化されていたり、幅が広かったりはしますが、
一般的には以下のような仕事がフロントエンドエンジニアの仕事です。

* CSS設計・実装
* HTML設計・実装
* JavaScript設計・実装

### マークアップエンジニアとの違いは？
フロントエンドエンジニア、マークアップエンジニア…未だに言葉の定義は曖昧ですが、おおよそ以下に分類出来ます。
<dl>
<dt>マークアップエンジニア</dt>
<dd>デザイナーが作ったデザインを形にする人<br>
HTML、CSS、JavaScriptが<font color='#e2750f'><strong>書ける</strong></font>人。</dd>
<dt>フロントエンドエンジニア</dt>
<dd>CSS、HTML、JavaScriptの<font color='#e2750f'><strong>設計・実装</strong></font>を行う人。<br>Web標準やアクセシビリティに準拠したコーディングを行い、かつ<font color='#e2750f'><strong>保守性・可読性に優れた設計</strong></font>が求められる。<br>JavaScriptではプラグインのカスタマイズや<font color='#e2750f'><strong>1から自分で設計・実装する能力</strong></font>が必要となる。
</dd>
</dl>

HTML、CSS、JavaScriptは他の言語と比べて敷居が低く、割りと誰でも書けてしまう言語です。
誰でも書けてしまう言語だからこそ、設計面や保守性・可読性は軽視されがちで、簡単に壊れてしまう言語と言えます。
それらを解決するのもフロントエンドエンジニアの役割の一部です。

## スタートアップでのフロントエンドエンジニアの仕事
では、スタートアップでのフロントエンドエンジニアと一般的なフロントエンドエンジニアでは何が違うのか？
スタートアップではフロントエンドエンジニアだけではない、バックエンドエンジニア、デザイナーも足りていない事が多いです。
そのため、バックエンドエンジニアとデザイナーの中間層であるフロントエンドエンジニアは、バックエンドエンジニア、デザイナーの<font color='#e2750f'><strong>両スキル</strong></font>が求められます。

■スタートアップで求められるフロントエンドエンジニアのスキルセットイメージ
![02.png](https://qiita-image-store.s3.amazonaws.com/0/54151/b58ffb13-e14b-cb71-0e40-f0827cd50e6d.png)

文頭に書かせて頂いた人が増えないという状況は、求められるスキルセットが高いという事も原因の1つかもしれません。

### 一番大事だと思っている能力

私がスタートアップのフロントエンドエンジニアで一番大事だと思ってる能力は<font color='#e2750f'><strong>良しなにやる力</storong></font>だと思っています。

#### スタートアップの現場でよくある話し
```
依頼）新しい機能作ったけど、使いづらいから使いやすくしたい。
訳）　該当ページのUI、もしくはデザインがユーザーにとって使いづらいので、改善してください。

依頼）このページをスマホでも使えるようしたい。
訳）　デザインはないけど、レスポンシブ対応をしてください。

依頼）キャンペーン始めるから、キャンペーンの条件でこの機能・バナー表示したい。
訳）　キャンペーンに該当するユーザー、表示条件に応じて、コンテンツを出し分けてください。
```
これらの仕事は分業しているような会社では、まずはデザイナーやバックエンドエンジニアが入り、その後フロントエンドエンジニアが実装・・・となりますが、スタートアップではフロントエンドエンジニア1人で良しなに解決する場合が多いです。
そして良しなにするためには、フロントエンド以外のスキルも必然的に必要となってきます。

スタートアップのフロントエンドエンジニアはこれらの<font color='#ccc'><del>（無茶）</del></font>振りにも耐えられるスキル・精神が求められます。

## まとめ
よくフロントエンドエンジニアはバックエンドエンジニアとデザイナーの架け橋である。という言葉を目にしますが、スタートアップでは、架け橋になるだけではなく、それぞれの領域に足を踏み込まなければならない場面が多くなります。

それだけに、「スタートアップでのフロントエンドエンジニアの役割」は多岐に渡り、やれる事も、やらなければならない事も多いです。

このような環境なので大変な事も多いですが、やりがいも大きく、エンジニアとしてもビジネスパーソンとしても大きく成長できる環境と言えます。

以上、スタートアップのフロントエンドエンジニアに興味がある方々の一助になれば幸いです。
[#matlab] 稀に真面目なmatlabのdata型

# Problem

Matlabで`tmp_bool = zeros(1, 1153);`などとしていたのにtmp_boolがdouble扱いになって、
行列のindex指定に使おうとしたら
「添字インデックスは、実数の正の整数か、論理値のいずれかでなければなりません。」
っていうエラーを吐きました。

```matlabsession:症例
>> M(:, zeros(1, 1153))% matrix
添字インデックスは、実数の正の整数か、論理値のいずれかでなければなりません。

>> M(:, ones(1, 1153))% matrix
添字インデックスは、実数の正の整数か、論理値のいずれかでなければなりません。
```

zeros, onesで作った変数だとdata型が意外に
doubleのままで、matlabはそこを自動では
型変換してくれないのでこうなるようです。

# Solution

解決策は、castですね。`logical`関数で型変換して、終了。

```matlabsession
L = logical(A)
```

via [数値を論理値に変換 - MATLAB logical - MathWorks 日本.](http://jp.mathworks.com/help/matlab/ref/logical.html)

一瞬ビビった。
protected/privateメンバをReflectionを使わずに抜き取る(var_export編)

# 元記事

[protectedメンバをReflectionを使わずに抜き取る](http://qiita.com/Hiraku/items/fab776d21d556401ac5d)

上記記事では継承を使ってprotectedメンバの値を取得していますが、var_exportでも同じことができます。

# var_export専用のマジックメソッド__set_stateを逆利用する

```php:ソースコード
/** 取り出したい対象のクラス(こっちは書き換えない) */
class Hoge
{
    protected $a = 'maa';
    private $b = 2;
}

/** 取り出すためのコード */
class TestHoge extends Hoge
{
    public static function __set_state($data)
    {
        // 本来オブジェクトを構築するための配列データをそのまま返す
        return $data;
    }
}
eval('$c='.var_export(new TestHoge, true).';');

// protectedメンバ$aを取得
echo $c['a'] . PHP_EOL;

// privateメンバ$bを取得
echo $c['b'] . PHP_EOL;
```

```cmd:結果
maa
2
```

var_exportをオブジェクトに対して使うと__set_stateが呼び出され、その際protected/privateメンバの値が配列として取得できるので、これを利用しています。
裏技っぽい。

# 参考記事

[get_object_varsでprivate/protectedなプロパティを取りたい](
http://qiita.com/stk2k/items/5ec2b3c50ab98a88fb61)