OmniAICreator/Qiita-1.07M huggingface dataset:
POH7 水着編(駄目だったやつ)

[プログラムで彼女を作るPOH7](https://paiza.jp/poh/ando?read=true)をやってるんですが、何度やっても水着が駄目

問題は件のサイトを見てもらうとして書いたコードがこれ

```cpp:mizugi.cpp
#include <iostream>
using namespace std;
int main(void){
    int n;
    cin>>n;
    auto r = 1ll;
    for(int i = 1; i <= n; i++){
        for(r *= i; r % 10 == 0; r /= 10);
        r%=1000000000; // ココ
    }
    cout << r << endl;
    return 0;
}
```
やけになってC#で書いたけどやっぱり駄目。

```csharp:mizugi.cs
public class Hello{
    public static void Main(){
        var line = System.Console.ReadLine();
        int n = int.Parse(line);
        long r = 1;
        for (int i = 1; i <= n; i++){
            for(r *= i; r % 10 == 0; r /= 10);
            r %= 1000000000; // ココ
        }
        System.Console.WriteLine(r);
    }
}
```

結論から言うと、計算中に9桁で切り落としているんですが、9桁じゃ足りないんです。
コメントでココって書いてある場所ですね。

わかりやすく、3桁ぐらいで考えます。
直前の値が1128だとして、下3桁だけ取り出すので、128です。
これに、125を掛けます

128*125=16000 ですので、16が残ります。
ところが、1128*125=141000 ですから、本当の下3桁は141なんですね。
ですから、もっと上の桁まで残す必要があります。

何桁まで必要なのかを考えるために計算してみましょう。
11128*125=1391000
111128*125=13891000
1111128*125=138891000
11111128*125=1388891000

6桁以上になると、下3桁は891となり、それ以上変わらなくなります。
下に0が出来た分だけ上の桁も保存しておかないと駄目なんですね。

では、本当の問題だと何桁まで保存しておく必要があるんでしょう。

ちなみに、私はこういうの考えるのが面倒になったので、
下の桁の0を取り除かなくていい方法に切り替えました。
Excelで Kintone アプリからレポートをつくる

KReport でKintone アプリからレポートを作成する手順です。

# レポート作成方法
![kreport12.png](https://qiita-image-store.s3.amazonaws.com/0/100572/77705042-b5a5-a8b7-9d15-55cf8258eace.png)

4.アプリの指定
![kreport13.png](https://qiita-image-store.s3.amazonaws.com/0/100572/f8988715-0b43-73ba-7984-46ebb6466b19.png)

5.項目の指定
![kreport14.png](https://qiita-image-store.s3.amazonaws.com/0/100572/2ce58f77-6710-f264-0795-b805045d71c2.png)

6.抽出条件の指定
![kreport15.png](https://qiita-image-store.s3.amazonaws.com/0/100572/7a36f775-25ed-7bbb-6dd5-b1e57ae173ea.png)

7.抽出条件のチェック
![kreport16.png](https://qiita-image-store.s3.amazonaws.com/0/100572/4b07148c-20ec-e1fe-c30a-ec8d90a6c741.png)

8.レポート作成完了
![kreport17.png](https://qiita-image-store.s3.amazonaws.com/0/100572/85b32b97-302e-e2c3-4100-dbb43a5c9e15.png)

9.レポート一覧
![kreport18.png](https://qiita-image-store.s3.amazonaws.com/0/100572/80fe1cef-c266-9ae0-937d-e133ff8b6f25.png)

10.レポートの実行
![kreport11.png](https://qiita-image-store.s3.amazonaws.com/0/100572/014f4b2c-f31e-2bf6-c45f-867518790672.png)
2015年にプライベートで作ったbotたち

こんにちは、trebyです。

本エントリは[ChatOps Advent Calendar 2015](http://qiita.com/advent-calendar/2015/chatops)の12日目の記事です。昨日は[kyrieleison](http://qiita.com/kyrieleison)さんによる[「会社に蔵書管理 ChatOps を導入してみて感じていること」](http://qiita.com/kyrieleison/items/e88f78328aa67ec4d16e)でした。

[先週はお仕事系なbot](http://qiita.com/treby/items/3e6cb3f4ac835dcc6017)を紹介したので、今週は私がプライベートで作ったbotを紹介したいと思います。よろしくお願いします。

# 2015年に趣味で作ったbotたち

## プロ生ちゃんbot
https://twitter.com/pronama_bot

プロ生ちゃんbotです。もともとは[プログラミング生放送勉強会 第33回＠株式会社 DMM.com ラボ](http://pronama.azurewebsites.net/2015/05/18/pronama-33-at-dmm-com-report/)のLTでhubotの魅力をお伝えする為のサンプルとして作ったものですが、割とその流れで今も稼働しているbotです。

そんな経緯なので結構実験的な取り組みをしています。HubotのAdapterとしてTwitter用のものを採用しているのもそのうちの一つで、[リポジトリにIssueやPull Requestがくるとお知らせしてくれる](https://github.com/pronama/pronama-bot/blob/29329f18b17b87861f24b84d26b78da5324934bc/scripts/github-webhook.coffee)他、[「フォローされたらフォローし返す」](https://github.com/pronama/pronama-bot/blob/d3c9d75a8aecaee76950066f0aa91468605cfed7/scripts/social-reaction.coffee)など、Twitterならではの機能も入っています。

ちなみに個人的には、Adapterには[generator](https://github.com/github/generator-hubot)で`twitter`を指定すると入る[hubot-twitter](https://github.com/MathildeLemee/hubot-twitter)よりも[hubot-twitter-userstream](https://github.com/hoo89/hubot-twitter-userstream)の方が使いやすいと感じています(Adapterで`twitter-userstream`を指定すれば入ります)。hubotでTwitter botを作ろうとされている方はお試しください。

プロ生ちゃんbotについてはリポジトリをしれっと[Pronama Organization](https://github.com/pronama)以下に入れてもらったことですし、オペレーションフリーでdeployまで全部できるようにしたいところですね。

## このみんbot
https://github.com/imas/hubot-konomin-bot

これは完全にネタなのですが、私自身の精神衛生を健全に保つのに一役買ってくれています。特定のキーワードを含むメンションを投げると何らかの返信をくれるという典型的なbotの動作をします。馬場このみさんは「アイドルマスター ミリオンライブ！」というコンテンツに登場するキャラクターで私のお気に入りの一人です(界隈では「担当アイドル」と呼んだりもします)

ちなみに[誕生日になると祝われてもくれます](https://github.com/imas/hubot-konomin-bot/blob/d08c3ea0276082f295d830c2a53686336f09beac/src/konomin-bot.coffee#L221-L228)。

<img width="576" alt="スクリーンショット 2015-12-05 13.42.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/35353/166ba766-7109-3c49-b460-0c04c278cde4.png">

将来的には定型文で返すのではなく、なんかそれっぽいものを返せたら素敵だなと考えています。[ロコbot](https://twitter.com/markov_roco)とか[可奈ちゃんbot](https://twitter.com/markov_kana)とかで採用されているマルコフ連鎖を使った実装が今のところ鉄板な気がしますが、他に自然な会話を実現するうまい手段をお持ちの方がいらっしゃいましたら是非助言いただきたいです。

# まとめ
以上、2015年に趣味で作ったbotを紹介しました。私としては今年やったことを振り返っているだけなのですが、頭の中の棚卸しというべきか、新たな気づきがあって自分自身にとって良いなと感じます(Advent Calendarでやるべきなのかは分かりませんがw)。

実際に、[先週触れたTwitter監視bot](http://qiita.com/treby/items/3e6cb3f4ac835dcc6017#twitter-watch-bot)については記事を書いた後に[Heroku Button](https://github.com/spacemarket/twitter-watch-hubot/tree/02cac72bb886f94a4d5bd59067b1c41eca1b3e04#heroku-button)をつけてみるなど、振り返ることで気づいたことを実際にやってみるということができています。いい感じです。

気がつけば2週間後には仕事納めを控えているというところまでやってきました。今年一年のラストワンマイルと言えるところに差しかかりつつあります。最後までやり抜いて、豊かな年末を迎えたいものですね！

そして明日は[Ladicle](http://qiita.com/Ladicle)さんです。よろしくお願いします！
RubyからSwiftの関数をつかう → はやい

# はじめに

去る2015年12月3日、Swift がオープンソース化され、Linux 版も公開されました。すばらしい。
[Swift.org - Welcome to Swift.org](https://swift.org/)

ちょっと無理矢理にですが、Ruby から呼んでみました。

元ネタ: [RubyからGoの関数をつかう → はやい](http://qiita.com/grj_achm/items/679b3f3af2cf377f0f02)

**注意**: 2015年12月現在、Swift のコードを Objective-C 以外の言語から呼ぶ方法は公式にはアナウンスされていません。
本記事は、独自に試した結果を書いています。

# 環境

- Ubuntu 14.04 LTS(Trusty Tahr) 64bit

```bash
$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]

$ swiftc -v
Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c)
Target: x86_64-unknown-linux-gnu
```

# Swift、はやい

最初にRubyとSwiftの計算速度を比べるため、フィボナッチ数を単純に計算するやつをそれぞれ書きました。

```ruby:fib.rb
def fib(n)
  return n if n <= 1
  fib(n - 1) + fib(n - 2)
end

puts fib(40)
```

```swift:fib.swift
func fib(n: Int) -> Int {
    if n <= 1 {
        return n
    }
    return fib(n - 1) + fib(n - 2)
}

print(fib(40))
```

実行結果は以下です。

```bash:Ruby
$ time ruby fib.rb 
102334155

real	0m22.581s
user	0m22.558s
sys	0m0.041s
```

```bash:Swift
$ time swift fib.swift 
102334155

real	0m1.077s
user	0m1.040s
sys	0m0.029s
```

```bash:ビルド済みSwift
$ swiftc -O fib.swift
$ time ./fib
102334155

real	0m0.374s
user	0m0.374s
sys	0m0.000s
```

Swift はいい感じにはやいです。

# Swift を共有ライブラリにする

`print` 文を取り除き、`fib` 関数を `public` 宣言します。

```swift:fib.swift
public func fib(n: UInt) -> UInt {
    if n <= 1 {
        return n
    }
    return fib(n - 1) + fib(n - 2)
}
```

Linux 上では現状、次のようにして Swift の共有ライブラリを作れるようです。 (注: 今後変わる可能性はあります)

```bash
$ swiftc -emit-library -emit-object -module-name fib -O fib.swift
$ clang -shared -o libfib.so fib.o
```

生成された共有ライブラリの中身を見てみます。

```bash
$ nm -D libfib.so
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
                 w _Jv_RegisterClasses
0000000000000680 T _TF3fib3fibFSuSu
0000000000201038 B __bss_start
                 w __cxa_finalize
                 w __gmon_start__
0000000000201038 D _edata
0000000000201040 B _end
00000000000006bc T _fini
0000000000000528 T _init
```

`fib` 関数の名前はマングリングされ `_TF3fib3fibFSuSu` というシンボルになっています。
なんとなく呼べそうです。

# Ruby から Swift の関数を呼ぶ

さきほどの共有ライブラリを `ffi` を用いて呼ぶわけですが、今の所、マングリングされたシンボル名を使って呼んでやる必要があります。

```ruby:swift-fib.rb
require "ffi"

module Fib
  extend FFI::Library
  ffi_lib "libfib.so"
  attach_function :_TF3fib3fibFSuSu, [:uint], :uint
end

puts Fib._TF3fib3fibFSuSu(40)
```

# Ruby meets Swift

```bash:Ruby+Swift
$ time LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ruby swift-fib.rb
102334155

real	0m1.044s
user	0m1.009s
sys	0m0.037s
```
無事に呼べました。そして、はやいですね。

どの言語も仲良く平和にやっていきましょう。

# 補足

冒頭にも書きましたが、この記事で示した Swift の共有ライブラリを外部から呼ぶ方法は、公式のものではありません。
したがって、何らの保証もできません。良い子はマネしないでね！

ただ、Swift は元々 Apple の Objective-C[^1] との相互運用を考慮して設計されていることや、[Swift 3.0 で ABI の安定化が図られる](https://github.com/apple/swift-evolution)という話があり、Objective-C 以外との相互運用をするための下地は整ってきていると思います。
いずれちゃんとした形で Objective-C 以外との相互運用が実現されるだろう、と予想しています。

今後の Swift の発展が楽しみです。

# 参考

- [More Swift on Linux | iAchieved.it](http://dev.iachieved.it/iachievedit/more-swift-on-linux/)

[^1]: Objective-C 自体 C との相互運用性が考慮されている
Wolframコンファレンスで得たTips

有休を利用して[Wolfram コンファレンス 2015 RIKEN](http://www.wolfram.com/events/wolfram-conference-riken-2015/)に行ってきました。

コンファレンスの内容は以下の4講演でした。

- Wolfram言語を使ったデータサイエンスの実践
- 宇宙物理学におけるMathematicaの活用事例 ～分子雲コアにおける化学反応と電離度計算～
- 経済理論におけるシミュレーション分析
- Mathematicaでルービックキューブ®の4次元版を作る

特に最初のウルフラムリサーチの方のご紹介からですが、有用な技術をいろいろ仕入れました。


## Data Drop

新しくできた[Data Drop](http://reference.wolfram.com/language/guide/UsingTheWolframDataDrop.html)という仕組みで、開発者や一般ユーザーからデータを集めて、オンラインの専用データベース（Wolframサーバー）にデータをためて、ビッグデータ解析とかに活用できます。

コンファレンスでは参加者から「来春の開花予測日」と「為替レートの予想」をMathematicaでデプロイしたフォームで集め、相関性を求める、というストーリーをデモしてくれました。


## FindFormula

Mathematica 10.3の新関数[FindFormula](http://reference.wolfram.com/language/ref/FindFormula.html?q=FindFormula)で様々なタイプな関数に近似ができます。

返ってくる関数がとんちんかんなこともあるみたいですが、「Sinを含む関数で近似」みたいな指定ができるのがすごいです。


## 機械学習

### 値を予測する

[Predict](http://reference.wolfram.com/language/ref/Predict.html)で未知のデータに対する出力を予測できます。

```mathematica
trainingset = {1 -> 1.3, 2 -> 2.4, 3 -> 6.4, 4 -> 10.1};
p = Predict[trainingset]
p[1.5]
```

### Image Identification Project

画像を解析するプロジェクト。

[The Wolfram Language Image Identification Project](https://www.imageidentify.com/)


### NotablePerson

```mathematica
Classify["NotablePerson", (顔画像)]
```

で似てる有名人を返してくれるそうです。（未体験）


## @wolframtap

[@woflramtap](https://twitter.com/wolframtap)というTwitterアカウントに投げると描画して返してくれるという面白いサービス。

<blockquote class="twitter-tweet" lang="ja"><p lang="en" dir="ltr"><a href="https://twitter.com/butchi_y">@butchi_y</a> (More info: <a href="https://t.co/HBUuaZOB3w">https://t.co/HBUuaZOB3w</a>) <a href="https://twitter.com/hashtag/wolframlang?src=hash">#wolframlang</a> <a href="https://t.co/7jQqPYX8Hs">pic.twitter.com/7jQqPYX8Hs</a></p>&mdash; Tweet-a-Program (@wolframtap) <a href="https://twitter.com/wolframtap/status/675495405849862144">2015, 12月 12</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

昨日の星形もこの通り。（140文字制限のためショートバージョン）
line monitor > UI部分(v0.5, v0.6) > v0.5:1行表示機能の追加 / v0.6:Windows 1024x768対応

line monitor
http://qiita.com/7of9/items/028556c5a819a6a8de96

```txt:環境
実装 Unity 5.1.3-f1 on MacOS X 10.8.5
動作 304SH
```

## プログラム v0.5

[v0.5 @ github](https://github.com/yasokada/unity-151117-linemonitor-UI/releases/tag/v0.5)

1行におさまらない文字列を受信した時の表示について、１行分だけの長さにトリミングする機能を追加した。

通信の前半部分を特に見たい時に使うと思う。

### 機能OFF

<img width=400 src=https://qiita-image-store.s3.amazonaws.com/0/32870/b471d816-2870-3ad7-d927-8e9dbd43a0ec.png>

<!--
![Screenshot_2015-12-12-10-48-05.png](https://qiita-image-store.s3.amazonaws.com/0/32870/b471d816-2870-3ad7-d927-8e9dbd43a0ec.png)
-->

### 機能ON

<img width=400 src=https://qiita-image-store.s3.amazonaws.com/0/32870/ff415c84-8fe9-db85-cbf5-4357042d82a0.png>

<!--
![Screenshot_2015-12-12-10-48-26.png](https://qiita-image-store.s3.amazonaws.com/0/32870/ff415c84-8fe9-db85-cbf5-4357042d82a0.png)
-->


## プログラム v0.6

[v0.6 @ github](https://github.com/yasokada/unity-151117-linemonitor-UI/releases/tag/v0.6)

android, Windows, Macで動くようにコンポーネントの位置を調整した。

1024 x 768で動作を確認した。

Macの場合、こちらの環境ではx86_64でないと実行時エラーが出る。Unityのバグ。
目的志向型コミュニケーションについて


#はじめに

この記事では、目的志向型コミュニケーションについて話します。目的志向型コミュニケーションは、私がいま勝手に作った言葉です。目的志向型コミュニケーションは、仕事をする上で目的のないコミュニケーションは存在しないという信念に根ざしており、会議・会話・メールなどを通じた対話において、話し手と聞き手は対話の目的を常に追求し続けるべきであるという考えです。

目的志向型コミュニケーションについて深く考えるようになったのは、大学院を出てからそれなりに大きな会社で働くことになり、忙しい人や、様々な事情（法律とか）で直接話ができない人とコミュニケーションを取ることが劇的に増えたからです。
こういった人たちに、伝えたいことを素早く正確に伝えるにはどうすれば良いかを、真剣に考えなければならなくなりました。

この記事での「コミュニケーション」という言葉は、雑談や飲み会のような目的を必要としないものではなくて、仕事上、ある目標を達成するために必要な対話を指すことにします。

#そのコミュニケーションの目的はなにか？

仕事における他人とのコミュニケーションには、例えば、立ち話、メール、会議など様々な形態があり、加えて何らかの目的があるはずです。
これらのすべてに共通して重要なのは、「いま、私（たち）は何を目的にコミュニケーションしているのか？」です。目的としてありうるのは、情報を周知したい、質問の回答が欲しい、決め事がある、などでしょう。
なぜ目的が重要かと言うと、目的を達成できなければ、コミュニケーションをしていた時間がまるまる無駄だったことになるからです。特に、忙しい人（偉い人）を相手にしようと思うと、数日に一度に15分とか立ち話で数分しか時間が取れないなかで、目的を達成することが求められるようになります。

#目的が明らかでないコミュニケーションの例

Aさんはサーバー管理者の1人で、利用者からの窓口担当になっているとします。

> 利用者「APIサーバーに障害が発生しているようなんですが？」
> Aさん『では、サーバーのアドレスとリクエストIDを教えて下さい』
> 〜〜5分後〜〜
> 利用者「情報をメールしました。」
> 〜〜5分後〜〜
> Aさん「XXが止まっていて、障害が発生しているようですね。」
> 利用者「それよりも早く復旧して欲しいのですが・・・？」

現実世界でも、利用者さんの最初の一言のような曖昧なクエリが飛んでくることはよくあります。これを読んでいるあなたは、Aさんのような行動を常に取ってしまうことはほとんどないと思います。でも、入社したばかりの時や、すごく疲れている時に上記のような回りくどいコミュニケーションを取ってしまった記憶はあるんじゃないでしょうか？

この例で良くないのは、利用者の目的が明らかでないまま、Aさんが反射的な返答をしている点にあります。
> 利用者「APIサーバーに障害が発生しているようなんですが？」

これは閉じた質問です。聞き手は「はい」または「いいえ」で答えれば良いと思い、Aさんは障害が起きているかどうか調べようとします。
しかし、最後に利用者の目的が違うところにあることがわかります。
> 利用者「それよりも早く復旧して欲しいのですが・・・？」

利用者のコミュニケーションの目的は、「障害が起きているか答えて欲しい」ではなくて、「障害を復旧して欲しかった」です。

#目的志向型コミュニケーションの実践

例のような、悪いコミュニケーションのパターンに陥らないようにするためには、2つの方法があると考えています。

1. 利用者（話し手）がコミュニケーションの目的を正しく伝える
2. Aさん（聞き手）がコミュニケーションの目的を具体化する

どちらを実践すべきかは、あなたがどちらの立場であるかで決まります。
あなたが話し手の立場であれば、1.を実践しましょう。例の話出しを次のように変えるだけで、目的が明確になります。

> 利用者「api3 サーバーに障害が発生しているようなので、調べて復旧して欲しいのですが？」

これで、聞き手への期待（コミュニケーションの目的）が明確になりました。ここまで言われたら聞き手は、復旧の可否を答えざるを得なくなります。

逆に、あなたが聞き手の立場であれば、2.を実践しましょう。

> 利用者「APIサーバーに障害が発生しているようなんですが？」
> Aさん 「私は何をするべきですか？」

2.のような、聞き手の方から目的を明確化していくパターンは、1.と比べると非常に難しいです。
なぜならば、話し手の想定・期待から外れないようにしながら、質問に対して質問で返す必要があるからです。話し手の想定・期待を外してしまうと、話し手からすると、話の腰を折られた・無視されたと感じてしまいます。

話し手が腰が折られたように感じる聞き返しとしては、次のような返し方があるでしょう。
> 利用者「APIサーバーに障害が発生しているようなんですが？」
> Aさん 「そんなことはないと思うので、クライアントのログを見てくれませんか？」

#おわりに

この記事では、自分なりに考えている目的志向型コミュニケーションという考え方について初めて文章にしてみました。

例を挙げて長々と書いてみましたが、結局のところ重要なのは、「聞き手への期待はなにであるか？」を常に考えつづけてコミュニケーションに臨むという一点です。


この文章を書くにあたっては、以下の本を参考にしています。と、言っても最後に読んだのは大学院生の時なのですが。

「理科系の作文技術」 http://www.amazon.co.jp/dp/4121006240
超音波通信の概要と，iOS での実現方法


最近，超音波通信技術が注目を浴びています．先日，あの LINE の友だち追加機能にも，超音波通信を用いる方法が追加されました．今後，超音波通信はますます実用化されていくことと思われます．

今回は，そんな話題の超音波通信に関して，その概要と，iOS での実現方法をざっくりと書いてみようと思います．

## 超音波通信の概要

超音波通信は，人には聴こえない，高周波音で情報通信をおこなう手段です．人の可聴域は 18kHz あたりまでなので，基本的にそれ以上の周波数を用います．

超音波は当然のことながら __｢音｣__ なので，デバイス非依存であり，かつデバイス間のペアリングが不要というメリットがあります．また，音 = 近距離へのブロードキャスト通信 なので，自分の周囲にいる人全員に情報を送りたい，というような場合に超音波通信は適しているといえます．

### なぜ QR コードやふるふるよりも超音波通信が優れているのか？

LINE には，QR コード，ふるふる，Bluetooth などと多くの友だち追加機能がありますが，それらの中でも，超音波通信は 1 番優れているように思います．

QR コードは，ほぼ間違いなく正確に情報を送ることができるというメリットがありますが，QR コードをカメラでいちいち読み込むのは面倒です．また，1 つずつしか読み込めないので時間がかかります．

逆にふるふるは，手軽に複数人同時に交換をおこなうことができますが，今度は正確さが犠牲になります．渋谷のハチ公前でふるふるしてみると，誰だか分からない人がいっぱい表示されます．これは GPS を利用しているからで，現在の GPS の精度ではどうしようもありません．

これら 2 つの手段から分かるように，正確さと手軽さというのは基本的にトレードオフになります．しかし超音波通信では，その問題を見事に克服しています．超音波通信をおこなうには，通信ボタンを押すだけとかでいいはずなので，ふるふるよりも手軽ですし，自分の周囲にしか届かないため，知らない人に追加される心配もありません．そのため，アカウントなどの交換手段としては，超音波通信は，現時点で最も優れた方法である，と個人的に思っています．

その他にも，以前話題になった，うんこが「10分後に出ます」とか通知してくれるデバイス [D Free](http://dfree.biz/) なんかも，超音波技術で実現されています．超音波には，まだまだ多くの可能性があるように感じますね．

## iOS で超音波通信を実現する

ここからは，iOS で超音波通信をおこなう方法についてざっくり書いていきます．基本的には，特定の音の送受信にすぎず，それがたまたま高周波である，というだけです．

### 超音波の送信

送信には，Core Audio の Audio Toolbox を利用します．以下の記事に詳しくまとめられています．

[Objective-C - iOSで特定の周波数の音を鳴らす方法 - Qiita](http://qiita.com/yuky_az/items/62ad3c5caf0f566891fb)

```ViewController.m``` の ```_frequency``` を 20000 (20kHz) とかにすると，不可聴音になります．サンプリングレートやビットレートはそのままのクオリティで問題ありません．

### 超音波の受信

受信に関しては，[aurioTouch](https://developer.apple.com/library/ios/samplecode/aurioTouch/Introduction/Intro.html) という，Apple が Audio Unit の利用方法を示すために公開しているサンプルアプリが非常に参考になります．アプリを起動すると，以下のような波形グラフが表示されるので，下部の FFT ボタンを ON にします．

![aurioTouch_screenshot.PNG](https://qiita-image-store.s3.amazonaws.com/0/7113/d6c90eb0-988b-1a8b-9957-eae9ccab88a7.png "IMG_0253.PNG")


すると，横軸が周波数，縦軸が振幅のグラフになります．横軸の右にいくほど高周波で，どの周波数の音が出ているのかがリアルタイムに把握できます．これはまさに今回必要な機能であり，受信に関しては基本的にそのまま流用できます．例えば前節のコードで 20kHz の音を出してみると，グラフの右の方に 1 つの山が現れるのが分かると思います．

また，aurioTouch を Swift2.0 で書きなおしたものも公開されています (非公式)．

[ooper-shlab/aurioTouch2.0-Swift](https://github.com/ooper-shlab/aurioTouch2.0-Swift)

### 超音波によるデータ送受信

最後に，上記の超音波送受信を利用して，情報を送受信する方法を検討してみます．

音は波なので，特定の周波数の音のみをうまく取得できるのか疑問に思うかもしれませんが，aurioTouch を利用しても分かるように，特定の周波数とその周囲では振幅に大きく差が出るため，しっかり区別することができます．なので，例えば 18k ~ 20kHz を 10分割して，それらに 0 ~ 9 を (200kHz ごとに) それぞれ割り当てるなどといったことが考えられます．

次に，上記の割り当てを用いて，```123456``` という情報を送信してみようと思います．初めの 0.5 秒間 ```1``` に割り当てられている周波数，次の 0.5 秒間 ```2``` に割り当てられている周波数… といった感じでしょうか．聞き逃したりした場合の誤り訂正ですが，超音波通信に関しては再送依頼は非常に難しいです (理由は考えてみるとすぐ分かります)．なので，FEC などの自己訂正機能を利用する必要があります．

また，iPhone は左右のスピーカーで別の音を出すことができるので，例えば 1~4 を桁数情報，5~9 を内容情報として，それらを同時に送信するといったことも可能です．```5678``` という情報を送信したい場合，まず ```1``` と ```5``` を同時に送信 (1 桁目が 5)， 次に ```2``` と ```6``` を同時に送信 (2 桁目が 6) … といった感じになります．このようにすると，```6``` を聞き逃してしまって ```578``` となってしまったような場合でも，2 桁目を聞き逃しているということが容易に分かりますね．1~4 を桁数情報として用いる分，内容情報として利用できる数字の数が減ってしまいますが，特に問題はありません．というのも，超音波通信ではペアリングさえおこなえればよく，ペアリングしてしまえばあとは websocket なり何なりでコネクションをはればいいからです．なので，多くの場合，超音波で大量の情報を送信するといったことは必要ないですし，そもそも超音波は大量の情報を送信するのに適していません．

以上，超音波通信に関してざっくりと書いてみました．興味を持たれた方は，ぜひ 1 度試してみて下さい．また，具体的なコードは載せていないので，質問がある方はコメント欄にてお願いいたします．
IntelliJ で PlayFramework プロジェクトをデバックモードで起動する。


### 前提条件
* OS : MacOS X
* brewインストール済み
* Scala : version 2.11.x
* IntelliJ IDEA 15
* PlayFrameworkのプロジェクト作成済み [→参照](http://qiita.com/gungnir_odin/items/ab28eac673cebba67c0a)
* PlayFrameworkのプロジェクトインポート済み [→参照](http://qiita.com/gungnir_odin/items/199f54307fca2166c6c4)

### 1. 設定
メニューバーから Run > Edit Configurations
「+」をクリックして、「Remote」を選択する。

![Run_Debug_Configurations_と_Application_scala_-_play-hello-world_-____IdeaProjects_play-hello-world_.png](https://qiita-image-store.s3.amazonaws.com/0/11476/061b6c29-85a0-ec8e-95fd-58048813465c.png "Run_Debug_Configurations_と_Application_scala_-_play-hello-world_-____IdeaProjects_play-hello-world_.png")


以下の様に設定する。

|項目|値|
|----|----|
|Name|適当な名前を入力|
|Transport|Socket|
|Debugger mode|Attach|
|Host|localhost|
|Port|9999|
|Search Sources using module's classpath|whole project|


![Run_Debug_Configurations.png](https://qiita-image-store.s3.amazonaws.com/0/11476/6c0a5550-553f-0896-ea26-1027e4ac089b.png "Run_Debug_Configurations.png")


### 2. 起動
メニューバーから View > Tool Windows > Terminal 
Terminalウィンドウに以下のコマンドを入力する。

```
### 9999番ポートでデバックする
$ activator -jvm-debug 9999 run
```

こんな感じ。

![Application_scala_-_play-hello-world_-____IdeaProjects_play-hello-world_.png](https://qiita-image-store.s3.amazonaws.com/0/11476/ae6039e5-d72e-2b94-a480-77e384a0c854.png "Application_scala_-_play-hello-world_-____IdeaProjects_play-hello-world_.png")


### 3. デバック開始

3-1. メニューバーから Run > Run 
3-2. ポップアップから 「設定で入力したName」 > Debug

![Application_scala_-_play-hello-world_-____IdeaProjects_play-hello-world_.png](https://qiita-image-store.s3.amazonaws.com/0/11476/e5bcdcf8-9ac3-77de-043a-5c4d5479fdbb.png "Application_scala_-_play-hello-world_-____IdeaProjects_play-hello-world_.png")


コンソールにメッセージが出力されれば、準備完了です。

![Application_scala_-_play-hello-world_-____IdeaProjects_play-hello-world__と_IntelliJ_で_PlayFramework_プロジェクトをデバックモードで起動する。.png](https://qiita-image-store.s3.amazonaws.com/0/11476/f7e73208-7132-c29f-c975-e720186cfbfd.png "Application_scala_-_play-hello-world_-____IdeaProjects_play-hello-world__と_IntelliJ_で_PlayFramework_プロジェクトをデバックモードで起動する。.png")

あとは、好きなとこにブレークポイントをおいて、http://localhost:9000 にアクセスすれば、デバックできます。

![Application_scala_-_play-hello-world_-____IdeaProjects_play-hello-world_.png](https://qiita-image-store.s3.amazonaws.com/0/11476/ddc1d8a9-4e8f-8e78-27fa-d0f0012b1077.png "Application_scala_-_play-hello-world_-____IdeaProjects_play-hello-world_.png")


以上です！

---
Prev: [IntelliJ IDEA 15 にPlayFrameworkのプロジェクトをインポートする。](http://qiita.com/gungnir_odin/items/199f54307fca2166c6c4)
Magento2に対するPHPベンチマークテスト

本記事は[Magento Advent Calendar 2015](http://www.adventar.org/calendars/931)の13日目の記事になります。
<h1>概要</h1>
PHP7.0の正式版がついに公開されました。
PHP7.0はPHP5.6に比べて大きくパフォーマンスが向上し、メモリ使用量も大幅に削減されています。現在はPHP5系が主流ですが、PHP7.0は、PHP5系の約２倍のパフォーマンスを誇るHHVMに匹敵する性能があると言われています。今回は、現在注目を集めているこのPHP7.0を比較対象として含め、Magento2をインストールしたサーバーにアクセスした時にどれだけのレスポンスタイムが出せるのか計測していきます。
計測対象は以下の４つです。

➊PHP5.5
➋PHP5.6
❸HHVM
❹PHP7.0
<h1>測定方法</h1>
Magento2のデフォルトページに対して、10000回のリクエストを10クライアントから送った時の平均応答秒数を計測します。サーバーへのリクエストは以下のコマンドを用いて行います。
<font color="green">$ ab -n 10000 -c 10 http://---</font>

![Magento2.png](https://qiita-image-store.s3.amazonaws.com/0/97920/dfd80237-1cef-f7e8-4feb-089f532fd2d7.png)
<h1>前提条件</h1>
◇サーバー
OS    : Ubuntu 14.04.3 LTS
メモリ : 2GB
MySQL :  mysql5.6
Nginx : nginx/1.8.0
Magento2正式版

◇クライアント
OS : OS X EI Capitan
プロセッサ : 2.8GHz Intel Core i7
メモリ : 8GB 
<h1>結果</h1>
気になる結果は以下のようになりました。

![image](https://qiita-image-store.s3.amazonaws.com/0/97920/a7a78ecc-b638-eb00-826c-fc368a864ecc.png)

やはりHHVMはPHP5系に比べて圧倒的な応答速度を出しています。
しかし、PHP7.0もHHVMに匹敵するほどの速度を出し、PHP5.6に比べて1.3倍ほど応答速度が向上していることが分かります。

![PHP3.png](https://qiita-image-store.s3.amazonaws.com/0/97920/2657e700-15e8-f047-2803-612b7ec92913.png)

今回のテストでは、HHVM・PHP7.0の二つがPHP5系と大きく差をつける結果となりました。デフォルトページでここまで差が開いたので、商品一覧ページ等の重たいページではより大きな差がでると予想されます。
Magento2では、いまだHHVMの方が速いようですが、条件次第ではPHP7.0がHHVMを超えることも可能なようです。PHP5.6から大きく性能を向上させたPHP7.0は、以前PHP5系と高い互換性を維持しています。
ぜひこの機会にPHP7.0への乗り換えを検討してみてはいかがでしょうか？
FreeBSD の tar がすごい

一発ネタです。「今更気づいたか」という方も多いかも、と思いますが、何気に知られてないような気がしないでもないと勝手に思い書いてみます。

#FreeBSD 独自進化の tar
基本過ぎて改めて調べてなかったため最近今更ながら驚いたのですが、FreeBSD の tar は独自進化して、なんだか色々なファイルを開けるようになってます。
man を読むと

[man tar] (https://www.freebsd.org/cgi/man.cgi?query=tar&apropos=0&sektion=0&manpath=FreeBSD+10.2-RELEASE&arch=default&format=html)
>`This implementation
     can extract from tar, pax, cpio, zip, jar, ar, xar, rpm, 7-zip, and ISO
     9660 cdrom images and can create tar, pax, cpio, ar, zip, 7-zip, and shar
     archives.`

gzip / bzip2 / xz は当然のこととして(gzip すら当然じゃないtarもありますが)、 Winzip / 7zip / CD イメージの ISO9660 イメージなんてものまで展開できます。

tar xvf hogehoge.iso 

上記でtar が何のアーカイブか自動判別して展開します。

Winzip / 7zip は圧縮にも対応しています。sharの作成も tar できます。

tar aczvf test.shar *

a (--auto-compress)オプションを指定すると、サフィックス(.shar)で自動的になんのファイルを作るか判断してくれます。

ディスクイメージは、メディアに焼くか、mdconfig でメモリディスクを作って mount するのが中身を見る基本ですが、iso9660 に限れば FreeBSD なら tar 一発で中身が見られて楽ちんというわけです。

FreeBSD の tar は Version 5.3 からアーカイブファイル操作用ライブラリ libarchiveを使うようになって、libarchive がサポートしているアーカイブファイルがそのまま使えるようになっています。
gnu tar や NetBSD / OpenBSD はこのような~~節操のない~~豊富な対応はありません。ちなみに枝分かれが割と最近（と言っても10年以上立ってしまいましたが)の[DragonFly BSDのtar](https://www.dragonflybsd.org/cgi/web-man?command=tar&section=ANY)は同等版のようです。
CycloneⅤのLightweight HPS-to-FPGA BridgeにPythonでアクセス

この記事は[**高知工科大 Advent Calendar 2015**](http://www.adventar.org/calendars/965)の12日目の記事です。

本当はROSについて書きたかったけど~~やる気が起きないので~~、今やってることを書く。

CycloneⅤのLightweight HPS-to-FPGA BridgeにPythonでアクセスして読み書きする。
結論としてはテスト環境としては使えるかなという感じ。

#実行環境
使用しているボードはTerasicの [**DE1-SoC**](http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&No=836)です。
BSPは公式の*Linux Ubuntu Desktop*を使っています。
Pythonのversionは*2.7.3*です

AlteraのSoCFPGAには便利な*Lightweight HPS-to-FPGA Bridge*というバスがあるのでそれを使います。
*Lightweight HPS-to-FPGA Bridge*の詳しい資料は[Cyclone V Hard Processor System Technical Reference Manual](https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/cyclone-v/cv_5v4.pdf)とかを見てください。

マップされてる内容は[Cyclone V HPS Memory Map](http://wl.altera.com/literature/hb/cyclone-v/hps.html#topic/sfo1418687413697.html)に書いており、GPIOやUARTなどのペリフェラルのレジスタにもアクセスできるようです。
自作のipなんかは**0xFF200000**から**0xFF3FFFFF**までの間にマップされます。(Qsys側からは0x0~0x1FFFFF)

今回は0xFF200000から0xFF200010までにipが繋がっている想定で説明します。

#/dev/mem をopen
とりあえず必要なモジュールをimportして /dev/mem を開きます。

```py
import os
import mmap

fd = os.open("/dev/mem",os.O_RDWR | os.O_SYNC)
```
#mmapする
```py
# 使用する領域(Byte)
reg_span = 0x200000
# Lightweight HPS-to-FPGA Bridge のオフセット
reg_base = 0xff200000

lw_h2f = mmap.mmap(fd ,reg_span ,mmap.MAP_SHARED,mmap.PROT_READ | mmap.PROT_WRITE,offset = reg_base) 
```

これで *Lightweight HPS-to-FPGA Bridge* をmmapできます。
あとは、読み書きしたいアドレスまで移動して読み書きします。

#読み込み
```py
lw_h2f.seek(0x0,os.SEEK_SET)
read_data1 = ord(lw_h2f.read_byte())
read_data2 = ord(lw_h2f.read_byte())
```
read_byte()は勝手にインクリメントされます。
インクリメントされる間隔はこの環境だと1byteでした。
mmap.read_byteは長さ1の文字列として読むので、数値として扱いたい場合は **ord()**で変換する必要があります。

#書き込み
```py
lw_h2f.seek(0x0,os.SEEK_SET)
write_byte(chr(write_data1))
write_byte(chr(write_data2))
```
こちらも勝手にインクリメントされます。間隔は1byteでした。
読み込みと同じく、書き込みときは長さ1の文字列として書かねばならないので**chr()**で変換する必要があります。

#所感
Pythonはあまり書いたことがなかったが、難しくなかった。
FPGAのテスト環境としてはアリかなとは思った。
ただ、実効速度が致命的に遅いのでSDRAMをシェアして大量のデータ（画像とか）をやり取りするのには向いていない。
ペリフェラルのレジスタ的扱いするのが正解っぽい。
Seleniumのcss locatorの話

[Selenium/Appium Advent Calendar 2015](http://qiita.com/advent-calendar/2015/selenium) 12日目です。

薄い話が面白くてしょうがないです。

[2013年のAdvent Calendar](http://www.adventar.org/calendars/128)で[Selenium の locator とうまくつきあうための話](http://qiita.com/okitan/items/cdf8809405821e057609)を書きました。この話自体は2年経ったいまでも全然有効な話なのですが、追加でcss selectorについて掘り下げていきたいと思います。

## Seleniumのlocatorの話

Seleniumのlocatorとしてはこれを使うべきという指針は、おおざっぱにいうとこんな感じでした。

* formではname属性を使う
* それ以外は基本css selectorを使う

css selectorに関してはこういうselctorがあるよという程度の紹介で、何を使うべきというのは語られていませんでした。

## css selectorの中の優先度

具体的にどのようなselectorを使うかという話の前にもう少し抽象的な話をします。個人的な考え方として、以下の優先度で要素を特定できるようにするのがよいと思います

* ドキュメントのuniqueな識別子を利用するようなcss selector
* ドキュメントのセマンティクスを元に特定できるようなcss selector
* その他

はい何を言っているかって感じがしますね。

なお、本文書の主題としては、ドキュメントのuniqueな識別子をどう設計するかという話なので、セマンティクスに関してはふれません。どうせmicrodataとかをきちんと考えてセマンティクスに設計されたサイトなんて本当限られているわけですし。

### uniqueな識別子とは

要はそのドキュメント(html)の中で一意に要素を特定するためのものです。典型的には、htmlのid属性というのはそのような用途に使うためのものです。

id属性はもともとそのような性質があるので、理解は速いですが、class属性だってそのように利用できます。要は、class属性に入れる値が、ドキュメントの中でuniqueになるようにすればいいのです。

```html
<a href="/" class="link_to_top">top</a>
```

例えば上記のような感じです。上のclass属性はid属性であっても違和感がないとは思います。（じゃあclass属性じゃなくてidでいいじゃんって思うかもしれないですが、なんらかの事情でidには本当にuniqueでかつシステム的な値が入ることがありますし）

要はclass属性でもなんでもよいのですが、何らかのわかりやすいuniqueな識別子が事前にわかっていれば、テストからその要素をuniqueに扱えるということです。

#### uniqueな識別子を取り決める

事前にわかっているためには、テストを書く人と開発する人で事前にインターフェースとして取り決める必要があります。実はSeleniumのテストを書く上で重要なのはこういったコミュニケーションやプロセスをきちんと設計できるかどうかであったりします。

これまではこのようなuniqueな識別子利用するにはid属性やclass属性を使うことが一般的でした。しかし、id属性やclass属性はフロントエンドの実装においても重要な要素だったりするので、しばしば開発とテストでの競合が起きることもありました。（つまり、テストを書く人が安易に属性を追加しにくい状況が生まれてしまうのです）

#### カスタムdata属性を使う

そこで、最近お薦めているのがカスタムdata属性です。カスタムdata属性とはdata-*で始まるドキュメントに固有の独自データを格納することを想定した属性です。例えば、data-test-idみたいなカスタム属性に識別子をいれておけば、

```html
<a data-test-id="link_to_top">top</a>
```

`a[data-test-id='link_to_top']`や`[data-test-id='link_to_top']`というようなcss selectorで取得できるようになります。

事前にどういう名前の属性を使うかを決めておきさえすれば、その属性を自由にテストを書く人が追加でき、それがアプリケーションに影響を与える可能性は極めて低くなります。

## Capybaraで独自セレクタを登録する

uniqueな識別子として、カスタムdata属性をインターフェースとして取り決めたのですが、毎回上記のようなcss selectorを書くのはだるいです。`link_to_top`のような指定だけで済むようにしたいです。

例えば、RubyでCapybaraを使ってSeleniumのテストを書いているのであれば、Capybaraで以下のように独自セレクタを実装し、`find`で利用できるようになります。

```ruby
Capybara.add_selector(:data_selector) do
  css { |type| "[data-test-id='#{type}']" }
end

find(:data_selector, "link_to_top").click
```

なお、`Capybara.default_selector`を設定しておけば、以下のようにもかけます。

```ruby
Capybara.default_selector = :data_selector
find("link_to_top").click
```

## まとめ

文中でも書きましたが、Seleniumのテストを書く際に重要なのは、テストを書く人と開発する人で協力できるような、体制プロセスを構築し、テストとテスト対象の間でのインターフェースをきちんと設計することです。

そのために、開発に影響がでにくいようなカスタムdata属性を使っていくのが、協力体制を維持継続していくためにも便利なのではと思っています。

それでは楽しいSeleniumライフを。

明日は@naoqoo2さんです。
line monitor > コア部分 (v0.8) > ネット未接続時に動作するよう対応 / ログ機能のLFのみ終端の対応


line monitor
http://qiita.com/7of9/items/028556c5a819a6a8de96

## v0.8
[v0.8 @ github](https://github.com/yasokada/python-151113-lineMonitor/releases/tag/v0.8)

以下を追加した。

1. ネット未接続時にでも動作するようにした。ログ保存が使用可能
2. LFのみ終端の行を対応した

1の変更により、スタンドアロンでログ保存だけし続けて、回収後にネット接続してログファイルを取り出すことができるようになった。

2の対応はCR+LF終端が来た時、ログに２回改行がつく点が要改善 (低優先としている)。
CakePHP3で共通関数を作る方法

# CakePHP3で共通関数を作る方法
 
## はじめに

どこでも使える共通関数を作ってCakePHP3で使いたい！
どうしたらいいの？ってな時の使い方を紹介します。

`Model`でも`Controller`でも`View`でも使いたい、しかも楽に使いたいときの方法です。


## 手順

### CakePHP3のroot配下にsrc/Utilsディレクトリを作成

```
/root
    /bin
    /config
    /logs
    /plugins
    /src/Utils <-ココ
    /tests
    /tmp
    /vendor
    /webroot
    .editorconfig
    .gitignore
    .htaccess
    .travis.yml
    composer.json
    index.php
    phpunit.xml.dist
    README.md
```


### src/Utils/にAppUtility.phpを作成


```
<?php
namespace App\Utils;

/**
 * AppUtility.
 */
class AppUtility
{
    /*
     * function 
     */
    public static function add($val1, $val2){
        return ($val1 + $val2);
    }
}
```

`namespace`の指定で作るのがポイント


### Composerをupdateする

```
$ php composer.phar dump-autoload
```

これで、AppUtility.phpファイルが自動で読み込まれるようになります。


## 使い方

### Modelで使う
```
<?php
namespace App\Model\Table;

use App\Utils\AppUtility;

/**
 * User Model
 */
class UsersTable extends Table
{
    /*
     * function
     */
    public function hoge()
    {
        $ans = AppUtility::add(5, 10);
    }
}
```

### Controllerで使う
```
<?php
namespace App\Controller;

use App\Utils\AppUtility;

/**
 * Users Controller
 */
class UsersController extends AppController
{
    /*
     * function
     */
    public function fuga()
    {
        $and = AppUtility::add(5, 10);
    }
}
```

### Viewで使う
```
<html>
<body>
<?= \App\src\Utils\AppUtility::add(5, 10)); ?>
</body>
<html>
```

このような方法で使うことができます。  

Modelに属さない処理や、データの整形など好きに作ることができるので、共通関数等をサックリ作りたい時には便利かと思います。

ただ、便利は反面`CakePHPから若干外れる`ので嫌と言う人もいるかもしれません、やりすぎるとコードが`カオス`になるので気を付けましょう（汗）
参加したFileMakerワークショップの当日のメモと記憶を手繰って復習してみる


[FileMaker Advent Calendar 2015](http://www.adventar.org/calendars/865)の12日目

# 参加したFileMakerワークショップの当日のメモと記憶を手繰って復習してみる
FileMakerワークショップに参加したので、当日のメモと記憶を手繰って復習することで、使えるノウハウに転換できればいいなあと
今回はその準備編

## 参加したFileMakerワークショップ
2015/12/10に開催された
「ソリューションから学ぼう。カンファレンス"直後"ワークショップ」
> ファイルメーカー社のWebサイトでダウンロードのできる、「FileMaker カンファレンス 2015」のセッションスケジュールを閲覧できるツールで、カンファレンスの回を重ねるごとに機能が上がってきています。
インターフェイスの改善から、データの更新や検索ロジックに至るまで、初級〜上級の広い範囲で参考にするテクニックがちりばめられています。

## 準備：FMC2Goスケジューラーを入手する
[FMC2Goスケジューラー](http://www.filemaker.com/jp/conference/2015/getfmc2go.html)をサイトからダウンロードする  
![151212-01.png](https://qiita-image-store.s3.amazonaws.com/0/89027/af270792-4d4c-7328-1f86-e86b93749b59.png)

## 準備：FMC2Goスケジューラーを完全アクセス権で開く
動作を確認するためには完全アクセス権で開く必要があります

0. FMC2Goスケジューラーを開く  
![151212-02.png](https://qiita-image-store.s3.amazonaws.com/0/89027/bea2e19d-a227-765b-f2ae-9d7d00864514.png)
0. 右下に表示されている「i」マークをクリックする
0. 情報画面に切り替わる  
![151212-03.png](https://qiita-image-store.s3.amazonaws.com/0/89027/59cb6cf9-7e6f-b08d-a90b-452ecf66e8c7.png)
0. [アンロック]ボタンを押す
0. 完全アクセス権でログインするための情報と再ログインボタンが表示される  
![151212-04.png](https://qiita-image-store.s3.amazonaws.com/0/89027/c8c71ab4-dee9-59d2-10e5-89e994282ec6.png)

※実はここで表示される完全アクセス権でログインするための情報は間違っているようです
正しいパスワードは「devcon」です

## 準備：FileMakerの標準メニューに切り替える
カスタムメニューが設定されているのでFileMakerの標準メニューに切り替える  
![151212-05.png](https://qiita-image-store.s3.amazonaws.com/0/89027/d23ae4e9-ddcd-fdc0-1ff5-d0127fbb5d90.png)

## 明日から数日に分けて
いっぺんに書けないので(ネタも不足気味なので)数日に分けて書いていきます
とりあえず明日は

- レスポンシブ・デザイン（デバイスごとのレイアウト）

のところを書きます
Javaで~(チルダ)は使えない！


頭を抱えました．
検索クエリが`~`だとあまりヒットしないかもと思ったので(チルダ)とつけておきました．
決してふりがなのつもりではないので悪しからず．

## 実行環境
Mac 10.11.1
Java 7

## だめなやつ

dirっていうディレクトリつくるとして．．

```java:createDir
	File file = new File("~/dir");
	if(file.exists()){
		System.out.println("dirあるで")
	}
	else{
		file.mkdir();
	}
```

これじゃできません．
Javaだと`~`は使えないらしいですね．
つまりはそもそも`~`なんてものがないから`file`(~/dir)があるかないかの前に，`~`がないんですね．

## いいやつ

dirっていうディレクトリつくるとして．．

```java:createDir
	String homeDir = System.getenv("HOME");
	File file = new File(homeDir + "/dir");
	if(file.exists()){
		System.out.println("dirあるで")
	}
	else{
		file.mkdir();
	}
```

こうすると無事に`/home/shu920921/dir`ができます！

System.getenv("HOME") = `/home/shu920921`でした
line monitor > sublime text / メモ帳 > 改行の扱いが異なる > メモ帳:LFだけの行が改行されない

```txt:動作確認
Sublime Text on Mac OS X 10.8.5
Sublime Text on Windows 7 pro
メモ帳 on Windows 7 pro
Google Chrome on Windows 7 pro
```

シリアルラインモニタのログ機能のテストをしている。

(CR | LF | CR+LF)送信、(CR | LF | CR+LF)応答の通信をモニタしてログ・ファイルとして生成する機能で、そのファイルを確認している中で気づいた点を記載する。

- CR終端の行の表示がメモ帳と他のソフト(sublime text, chrome)で異なる

## 送信ファイル例と応答

以下のようなファイルの内容を送信して、自作のエコーサーバーソフトでエコーバック応答する。

```1txCRrxCRLF.txt
-----
1txCR  rxCRLF
1txCR  rxCRLF

1txCR  rxCRLF
1txCR  rxCRLF
1txCR  rxCRLF
```

- txCRは送信側がCR終端を意味する
- rxCRLFは応答（エコーサーバー）がCRLF終端を意味する

送信はTeraTermを使って、設定でCR終端、CRLF終端などを切替えている。

エコーサーバーではCRとLFの付加をチェックでON/OFFできる。
http://qiita.com/7of9/items/2493dfea3ee263124745
![log_echoserver.png](https://qiita-image-store.s3.amazonaws.com/0/32870/ba3b079e-e5b1-0258-f893-8b1854032aee.png)


## 結果

### sublime textでの表示

個々の行が分離されている。

![log_sublime.png](https://qiita-image-store.s3.amazonaws.com/0/32870/f59ada00-62df-8580-82c0-651af00f1b44.png)


### notepadでの表示

改行がされずに次の行と連結されているものがある。

LFだけの応答の行が改行されていないようだ。

![log_notepad.png](https://qiita-image-store.s3.amazonaws.com/0/32870/b9c3d9a7-545a-0fbb-db40-851ddddf2268.png)

### chromeでの表示

chromeでも開いてみた。
個々の行が分離されている。

![log_chrome.png](https://qiita-image-store.s3.amazonaws.com/0/32870/9c636dfb-4151-5aa2-9d03-b8fc01aa4dce.png)

## 対応は低優先

上記の結果より、今の問題はメモ帳以外の閲覧で回避できることが分かった。
このあたりはきちんとした対応が必要かもしれないが、line monitor作成の他の作業との兼ね合いの中で、優先度は下げることとする。

LF終端の行の表示に関してはメモ帳と他のソフト、どちらが本来の表示方法なのだろうか？
uGUIのToggle

#概要
Unityのバージョンは5.2.3f1

uGUIのToggle（チェックボックス）とラジオボックスの作り方についてのメモです。
Toggleのコンポーネントの内容は以下の通りです。

- Toggle
- Background(Image)
- Checkmark(Image)
- Label(Text)

内容はマニュアルを見ると詳しく載っています。
http://docs.unity3d.com/ja/current/Manual/script-Toggle.html
http://docs.unity3d.com/ja/current/Manual/script-ToggleGroup.html

Toggleの表現はButtonとほぼ同じなので、Buttonの記事を参照。
http://qiita.com/seka/items/344bfb325f300649cd5b
Textについての説明は[こちら](http://qiita.com/seka/items/a3e478a9525cd36ea0ec)
Imageについての説明は[こちら](http://qiita.com/seka/items/3cdc47b0d47d85953c39)

#ラジオボックスを作る
- Create Emptyで空のオブジェクトを作る（名前はToggleGroup）
- この空のオブジェクトにAdd Component>UI>Toggle Groupを追加する
- 子オブジェクトにToggleを追加する（とりあえず３つくらい）
- 各ToggleのIs Onのチェックを解除してチェックを非表示にしておく
- 各ToggleのGroupに親オブジェクトのToggleGroupを選択する
これでラジオボックスができる。（必ずどれか一つにチェックが入るようにするには、Toggle GroupのAllow Switch Offを解除する）

#Toggleのイベント
チェックボックスのクリックイベントはOn Value Changed(Boolean)で制御します。
チェックボックスは押してから離したときにイベントが発生します。
イベントの追加方法は
1.右下の＋をクリック
2.None(Object)に制御するオブジェクトを選択
3.No Functionで制御するメソッドもしくは変数を指定する

#Toggle Groupで作ったラジオボックスのイベント
チェックが付いてない所をクリックするとイベントは２回発生するので注意。
最初にチェックが外れるToggleでイベントが発生して、その後チェックが付くToggleのイベントが発生します。

#ToggleのSprict制御
```lang:ToggleTest
  using UnityEngine.UI;
  using System.Linq;

  private Toggle toggle1;
  private ToggleGroup toggleGroup1;

  void Start()
  {
      toggle1 = GetComponent<Toggle>();
      toggleGroup1 = GetComponent<ToggleGroup>();
  }
　
  void Update()
  {
      Debug.Log(toggleGroup1.AnyTogglesOn());  // いずれかのトグルがオンになっているか
      if (toggleGroup1.AnyTogglesOn())
      {
          toggle1 = toggleGroup1.ActiveToggles().FirstOrDefault();  // チェックが付いているトグルを取得
          Debug.Log(toggle1.name); 
      }
  }

  // このメソッドをOn Click()に指定するとボタンを押したときにメソッドを呼び出す
  public void OnClick()
  {
      Debug.Log(toggle1.isOn);  // トグルの状態
  }
```

#その他のメモ
- WebのUIではよく使われる（アンケートの選択など）
- ラジオボックスはスマホのUIでよくあるタブナビゲーションやセグメンテットコントロールをつくるのに応用できる。（iPhoneのAppStoreのUIが参考になる）
- ToggleのアニメーションはCheckmarkのImage TypeをFilled、Fill MethodをHorizontal、Fill OriginをLeftにして、クリックしたらFill AmountをScriptで徐々に変化させるといい感じになる。（チェックマークが丸の場合はFill MethodをRadial 360にするといい）

#参考になりそうなサイトやAsset
スマホの場合、ボタンをつくる上で注意することはボタンのサイズ(小さすぎると押しづらい)
http://www.dotproof.jp/2013/08/06/minimum-tap-size/

チェックボックスとラジオボックスの表現の参考サイト
http://weboook.blog22.fc2.com/blog-entry-379.html
http://commte.net/blog/archives/3948

チェックのアニメーションの参考サイト
http://tympanus.net/Development/AnimatedCheckboxes/

#今後の課題
タブ型ナビゲーションなどの作り方は別の記事で書く予定。
Google Chrome の Developer Tool でイベントがデバッグしやすくなった

## はじめに

結論からいうと、
[jQueryで設定されたクリックイベントなどを定義している場所を調べる方法](http://qiita.com/zaru/items/b7732ebad9b732518359)
に記載されているようなことが Google Chrome の Developer Tool で簡単にできるようになった :blush: 

おそらく、Google Chrome 47.0.2526.80 で増えた機能。
とりあえず、最新バージョンを導入すれば機能追加されてるはず。

## 実際にデバッグしてみる

### 検証サイト

https://jqueryui.com/dialog/#modal-form

### 要素の検証

これクリックしたら、どんなことが起きるんだろうか…？
という場合はまず、右クリックとかショートカット使って要素を検証しましょう :stuck_out_tongue_closed_eyes: 

今回は例として `Create new user` というボタンをクリックした時の処理をみてみます。

<img width="421" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/9760/4a86ae5b-6c3c-b866-9d30-da38e1c3de35.png">

要素を検証したら、右の方に `Event Listeners` というタブがあるので選択します。
`Ancestors` とか `Framework listeners` というオプションがあるかと思います。

そう、 `Framework listeners` にチェックが入っていると `jQuery` などでイベントリスナーを定義した場合でも、もとのソースまで追えるようになっています。

<img width="638" alt="2.png" src="https://qiita-image-store.s3.amazonaws.com/0/9760/e2d498fb-d228-0840-d5ef-64461bb364f6.png">

チェックしたら、`modal-form.html:109` がありますね。

これをクリックしてみると、、、

<img width="639" alt="3.png" src="https://qiita-image-store.s3.amazonaws.com/0/9760/51959936-b405-e855-42fd-4b8a8a38c2d1.png">


ｷﾀ━━━━(ﾟ∀ﾟ)━━━━!!

```js
		$( "#create-user" ).button().on( "click", function() {
			dialog.dialog( "open" );
		});
```
アルゴリズム1000本ノック #4. String matching (brute force)

#### 問題

```
文字列 T が 文字列 S 中に含まれていればその最初のindexを,  
含まれていれば -1 を返却せよ.
Example: If S = "ABCDE" and T = "CD", a return value is 2.
```

#### 解法
文字列のパターンマッチングにはもっと効率的な方法もあるのですが, 一度やっておかないと意外とハマるので総当りも見ておきましょう. 

単純にSを前から順に見ていき, 1文字ごとに, 以降を含めた文字列がTと合致しているかを調べます.
ここで `S[i] == T[0], S[i+1] == T[1], ...` とTの長さ分ループを回せばよいので, `S[i+j] == T[j]`という等式が
成り立つかを調べなければいけないところが鍵となります.

このinner loopが最後まで回ればTが見つかったことになるのでiをそのまま返却, 見つからなければ-1を返却します.

```python:algorithms_string_matching_brute_force.py

def index_of(string, target):
    leng_s = len(string)
    leng_t = len(target)
    if leng_s == 0 or leng_t == 0:
        return -1
    
    for i in range(leng_s):
        j = 0
        if i + leng_t > leng_s:
            return -1
        while j < leng_t:
            if string[i+j] == target[j]:
                j += 1
            else:
                break
        if j == leng_t:
            return i
```

計算量は `O(MN)` (M, Nはそれぞれの文字列長), 空間量は `O(1)` です.

Java版はこちら:

```java:algorithms_string_matching_brute_force.java
class Solution
{
	public static int indexOf(String s, String t) {
	    int s_length = s.length();
	    int t_length = t.length();
	    if (s_length == 0 || t_length == 0) return -1;
	    
	    for (int i = 0; i < s_length; i++) {
	        if (i + t_length > s_length) return -1;
	        
	        int j = 0;
	        while (j < t_length) {
	            if (s.charAt(i+j) == t.charAt(j)) {
	                j++;
	                continue;
	            }
	            break;
	        }
	        if (j == t_length) return i;
	    }
	    return -1;
	}
}
```
技術英語 > the research is very strong that ... / There is strong evidence that .....

@ LOE > August 3, 2012
http://loe.org/shows/shows.html?programID=12-P13-00031

> <font color=red>the research is very strong that</font> when you do establish a protected area in the ocean that the numbers of fish increases, the diversity increase

<hr>
関連して思い出したのは

http://ejje.weblio.jp/content/There+is+strong+evidence+that+.....
> There is strong evidence that .....
… という強い証拠がある

ここで、evidenceは不可算名詞なので冠詞(a / the)がないのだろう。
http://ejje.weblio.jp/content/evidence
[golang]GOPATHとコードの公開



せっかくなので前回、Goで作成したサンプルコードをGitHubに公開してみようと思います。
利用用途は全くありませんが、自己学習と備忘録のためです。

- 前回の記事  
[[golang]遅れながらgoqueryを使ってみた](http://qiita.com/ponchi/items/042e91a2e724c336d02d)


その前にGOPATHについて軽く触れておきます。
GOPATHとはGoが利用する環境変数で、事前に設定する必要があります。
goコマンドでパッケージなどをインストールすると、このGOPATHの下へ自動でインストールします。
簡潔に言うとGoのワーキングディレクトリ、といった感じでしょうか。

今回は/usr/local/srcの下にgoprojというディレクトリを作成して、そこをGOPATHに設定します。

補足
GOPATHは/usr/local/srcである必要はありません、任意です。

## 事前設定
早速、以下のコマンドでGOPATHを設定します。

```bash:ターミナル
$ cd /usr/local/src/
$ mkdir goproj
$ cd goproj
$ export GOPATH=`pwd`
$ echo $GOPATH
```
GOPATHに/usr/local/src/goprojが設定されていればokです。

## コードの公開
GitHubのリポジトリに合わせてディレクトリを作成します。
GOPATHの下にsrc/github.com/mainディレクトリを作成し、[前回記事](http://qiita.com/ponchi/items/042e91a2e724c336d02d)のファイル(hello.go)を保存します。

```ディレクトリ構成
/usr/local/src/goproj
 |
 |-- src
      |
      |-- github.com
              |
              |-- main
                    |
                    |-- hello.go
```
hello.goの動作をローカルで確認して、問題なければGitHubに公開します。
事前に自分のGitHubにリポジトリを用意しときます。

今回、私が用意したリポジトリは以下です。
https://github.com/Dewazakura/gosample.git

あとはmainディレクトリをGit管理してGitHubにpushします。

```bash:ターミナル
$ cd $GOPATH/src/github.com/main
$ git init
$ git add .
$ git commit -m "first commit"
$ git remote add origin https://github.com/Dewazakura/gosample.git
$ git push origin master
```

pushが成功したらコードの公開が完了です。
GitHubのリポジトリを見ると、きちんとhello.goが公開されている事が確認できます。

## 公開したコードを利用する

試しに今度は公開したコードを取得して使ってみます。
ローカルの作業ディレクトリを削除します。

```bash:ターミナル
$ cd $GOPATH
$ rm -rf ./*（バッサリ削除）
```

削除したらGitHubからコードを取得します。

```bash:ターミナル
$ go get github.com/Dewazakura/gosample
```

getコマンドを実行するとGOPATHの下にコードが保存されます。
そのさいsrc、bin、pkgディレクトリも作成されます。

srcディレクトリには、ソースコードが保存されます。
binディレクトリには、ビルドされたバイナリファイルが保存されます。
binに保存されたビルドファイルはソースコードと同じように実行できます。

以下はどちらも同じ実行結果になります。

```bash:ターミナル
$ cd $GOPATH
// 🔻どちらも同じ
$ bin/gosample（ビルドファイルを実行する）
$ go run src/github.com/Dewazakura/gosample/hello.go（ソースコードを実行する）
```
余談ですが、goコマンドは標準でクロスコンパイルできるので、windowsのexeファイルも簡単に作成できます。

## 最後に

以下、WEB+DB Press Vol.82より引用
> Goのコマンドは、GOPATHとその下にある先の3つのディレクトリ（src、bin、pkg）の命名規則を用いて、Makefileなどの構成ファイルなしで依存関係を解決してビルドできるようになっています。

という事で、GOPATH便利ですね。

以上です。
プログラミングかじってみたけど、歯が折れました。プログラミングの海図(きほんのき)

#◯◯は△△できるではなく、"△△したいから◯◯を使う"#


こんにちは。

今回の海図シリーズは**"Webプログラミングとは"**の根底の部分を軽くおさらいしていきます。

GoogleMapのような詳細が載っているものではないけど、海の上で目印にはなるくらいの、けれどもなければ遭難してしまうようなものです。

僕も昔は見出しの前半部分と同じように考えていたので、毎日知恵熱ものでしたが、昔の自分みたいな方への一助にでもなれればと思います。


##Webプログラムを動かしてみよう##


まず、Webプログラミングをするには、Webサーバや各種プログラミング言語の実行環境が必要です。これらをレンタルサーバなどで用意することもできますが、少し大変ですね。

もっと手軽にWebプログラミングを試せる方法があります。
それは、**自身のPCにWebサーバソフトをインストールする**方法です。

まずは、言語を選びます。
自分が作りたいものや、学びやすさ、流行なども加味して選び、それによって必要な開発環境が異なります。

やはり手軽なのは、

・ApacheのWebサーバ

・各言語の実行環境

・データベースサーバ(MySQL)

などがまとまっている、**オールインワンパッケージ**かと思います。

例)
・PHPなら・・・XAMPP

・Rubyなら・・・BitNami :: Redmine


各言語によって設定内容も変わりますので、詳しくは別記事で書きたいと思います。

***
ちなみに、実際の開発の現場では、複数のプログラマやデザイナなどがチームを組んで、作り上げていくことがほとんどです。
チーム開発では、誰かが作業中のファイルを間違って上書きしてしまわないように注意しなくてはいけません。

この問題を解決するのか「バージョン管理ツール」と呼ばれるソフトで、**Git**などが挙げられます。

今はわからなくてもいいので、単語や概念などを覚えておくといいと思います。

***
そして実際に言語を使ってコーディングしていくのですが、学習方法だったり、言語の説明は少し多いので、省きます。
それぞれ他で説明していこうと思います。

しかし、どのようなプログラミング言語であっても、文法の差こそあれ、プログラムを作る時の考え方など、根本に大きな違いはありません。

なので、

**”プログラミング言語には目的の処理を実現するために、どのような仕組みが用意されていて、それをどのように使えばいいか”**

という基本的な考え方をまとめておさらい程度に説明します。


##入力フォーム、変数と型、条件判定、繰り返し  etc##


・入力フォームのデータの読み取り・・・
入力要素には名称をつけておき、データを、「GET」や、「POST」を使って取得します

・**変数**・・・
計算などをするために値を一時的に保存したい時は「変数」という概念を使います

・**関数**・・・
何かまとまった処理をする機能のことを表します。

・**条件判定**・・・
ある条件が成り立つか、そうでないかで分岐したいときに使います。

・**繰り返し処理**・・・
条件が成り立つまで処理を繰り返し実行できます。

・**配列とハッシュ**・・・
データを一つではなく、複数をひとまとめにして扱いたいときに使います


###関数###
***

プログラミングにおける関数とは、数学的な意味合いはなく、何か処理をして、その結果を返す**処理の塊のこと**と理解したほうがいいかと思います。

"関数を実行する際に、処理したい"値"(引数)を渡します。
処理されて、値が返ってきます。(戻り値)"

まずはこの"考え方"だけで十分です。


###変数と型###
***

変数というのは、値を一時的に保存する『箱』のようなものです。
変数に値を設定することを"代入"といいます。代入するときは、

変数　= 値

と記すのですが、**ここでいう「=」は数学的な[等しい]ではありません。**


プログラミング言語では、データを扱うときに、その形式を重視します。
形式というのは、**「文字列」、「整数」、「小数」などのデータの種類**のことで、これを**型**といいます。

文字列などの型は四則演算ができないので、関数を使い、整数などに**変換**します。


###条件判定###
***
現在の状況や値を調べ、その結果に応じて処理を変えることです。
プログラミングの世界では、「条件が成り立つ」ことを**"真(true)"**、
「成り立たない」ことを**"偽(false)"**と言います。
条件判定には主に**"if~else文"**を使います。

if(もし) (条件式) { 処理A } else(でなければ) { 処理B }

####論理演算子####
条件の組み合わせや、否定のときに使うもので、

!  　 Not　　例) !X (Xではないとき)

&&　　And　　例) X && Y (XかつYのとき)

||　　Or　　 例) X || Y (XまたはYのとき)

などを主に使います。

####比較演算子####
値の大小や一致を調べるときに使います。

==  等しい　A == B (AとBは等しい)

!=  等しくない　A != B (AとBは等しくない)

<   小さい　　A < B (AはBより小さい)

<=  以下　　　A <= B (AはB以下)

>=  以上　　　A >= B (AはB以上)

なども多く使います。


###繰り返し処理###
***
何度も同じ処理を繰り返すことができ、「ループ処理」とも呼ばれる

while (条件式)　{ 条件が真てあるとき繰り返す　}

do { 条件が真であるとき繰り返す　} while (条件式)

二つの違いは、条件式が先にあるか後であるかで、do~while文は条件が真でなくても、一回は処理が行われます。

for (最初に実行する文 ; 条件式 ;各繰り返しの後に実行する文 )
    { 繰り返し実行する部分　}

####二項演算子####
四則演算(+ , - , *(×) , /(÷) ,%(余り)は省略できます。

例)  X = X + nの場合は、
　　 X += nと省略できます

　　　nが1の場合、X ++ と省略できます


ループを抜けたい時は、　break文、
ループ中処理を飛ばしたい時は、　continue文

も使えます。


###データをまとめる配列とハッシュ###
***
**配列**というのは、"複数の値を格納できる変数"のことです。
格納されたデータを"要素"といい、先頭から順に"0",1,2,3・・と番号がつけられます。この数字を"インデックス"といいます。

**ハッシュ**は配列とほぼ同じですが、違いはインデックスで特定するか、**"キー"**と呼ばれるもので特定するかです。
***


といったところが大まかな仕組みになります。

細かい文法を暗記するのではなく、**大きな公式から理解して、目的に当てはめながら考えていく**と身についてくると思います。

それでは今回はこの辺りで。

また次回の航海で。
scala で hdfs 上のファイルを読み込む

メモ

scala で hdfs 上のファイルを読み込む

```scala

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.fs.FileStatus
import org.apache.hadoop.fs.Path

val conf = new Configuration()
val hdfs = FileSystem.get(conf)

val is : InputStream = hdfs.open(new Path("test.txt"))
val br = new BufferedReader(new InputStreamReader(is))
    
val it = Iterator.continually(br.readLine()).takeWhile(_ != null).toList
  for(line <- it) {
    println(line)
  }
}
br.close
```
gulp-autoprefixerでPromise is not definedのエラーが出る

##はじめに
cssのベンダープレフィクスを手動で追加するのは大変なので、
gulpを使ってsassをビルド時にベンダープレフィクスも自動で付与されるようにする。

##準備
<a href="https://www.npmjs.com/package/gulp-autoprefixer" target="_blnak">gulp-autoprefixer</a>をインストール

```
$ npm install --save-dev gulp-autoprefixer
```

##使い方

```lang:gulpfile.js
var gulp = require('gulp');
var sass = require('gulp-sass');
var autoprefixer = require('gulp-autoprefixer');
  
gulp.task('sass', function () {
    gulp.src('./**/*.scss')
        .pipe(sass())
        .pipe(autoprefixer())
        .pipe(gulp.dest('./css'));
});
```

##問題
いざ上記taskを実行したところ下記のエラーが発生。

```

this.processing = new Promise(function (resolve, reject) {
                              ^
ReferenceError: Promise is not defined
    at LazyResult.async (/Users/xxx/app/node_modules/postcss/lib/lazy-result.js:152:31)
    at LazyResult.then (/Users/xxx/app/node_modules/postcss/lib/lazy-result.js:75:21)
    at DestroyableTransform._transform (/Users/xxx/app/node_modules/gulp-autoprefixer/index.js:24:6)
    at DestroyableTransform.Transform._read (/Users/xxx/app/node_modules/gulp-autoprefixer/node_modules/readable-stream/lib/_stream_transform.js:172:10)
    at DestroyableTransform.Transform._write (/Users/xxx/app/node_modules/gulp-autoprefixer/node_modules/readable-stream/lib/_stream_transform.js:160:12)
    at doWrite (/Users/xxx/app/node_modules/gulp-autoprefixer/node_modules/readable-stream/lib/_stream_writable.js:333:12)
    at writeOrBuffer (/Users/xxx/app/node_modules/gulp-autoprefixer/node_modules/readable-stream/lib/_stream_writable.js:319:5)
    at DestroyableTransform.Writable.write (/Users/xxx/app/node_modules/gulp-autoprefixer/node_modules/readable-stream/lib/_stream_writable.js:246:11)
    at DestroyableTransform.ondata (/Users/xxx/app/node_modules/gulp-sass/node_modules/readable-stream/lib/_stream_readable.js:581:20)
    at DestroyableTransform.EventEmitter.emit (events.js:95:17)
```

nodeがv0.10が<a href="https://html5experts.jp/t32k/17235/">PostCSS</a>をサポートしていない為、nodeをv0.12にあげるか、Promise polyfillを追加してあげる必要があるようです。
（この表現が合っているか自信なし）

##回避策
下記のプラグインを読み込むことでPromise polyfillが追加され、ビルドできるようになりました。

<a href="https://github.com/jakearchibald/es6-promise">es6-promise</a>

```
npm install es6-promise --save-dev
```
```lang:gulpfile.js
var gulp = require('gulp');
var sass = require('gulp-sass');
var autoprefixer = require('gulp-autoprefixer');
require('es6-promise').polyfill();
  
gulp.task('sass', function () {
    gulp.src('./**/*.scss')
        .pipe(sass())
        .pipe(autoprefixer())
        .pipe(gulp.dest('./css'));
});

```