OmniAICreator/Qiita-1.07M huggingface dataset:
クロス合成で、２つの音を合成する

##FFT(Fast Fourier Transform)
　クロス合成にはFFTを使用する。FFTは簡単に言うと、帯域ごとの音量を調べられて、それらを弄れるようになる処理。スペクトラムアナライザなどに使われている。
![スクリーンショット 2015-09-25 17.05.11.png](https://qiita-image-store.s3.amazonaws.com/0/93396/718f7bd4-c78c-491d-3797-9ef9825b7cbf.png)
↑これ

　例えばドラムと歌声の２つの信号を足せば、聞こえてくる音はドラムと歌声になるが、クロス合成を使うと、ドラムのリズムで歌声が聞こえてくる。


##マイク音声と音を合成
###FFT処理のパッチ
　MaxでFFT処理を行なう際に[pfft~]を使用しますが、この処理を行なう中身は別なパッチを組んで同じ階層のフォルダに保存する。まずは処理内容のパッチを作る。
![スクリーンショット 2015-09-25 17.16.45.png](https://qiita-image-store.s3.amazonaws.com/0/93396/b417f568-5f90-e9fd-337d-44f8ea82c437.png)
　[fftin~]を２つ作り、入力を２系統にする。
　[fftin~]からは音声信号がFFT処理された状態で出てくる：
・アウトレット１：実数
・アウトレット２：虚数
・アウトレット３：インデックス（番号）

　２つの入力ソースの実数、虚数それぞれを乗算するので、それぞれを[*~]に入れる。最後に実数を[fftout~]のインレット１、虚数をインレット２に送り、パッチを保存する。

###メインパッチ
　新しいパッチを作り、まずは先ほどのパッチと同じ階層のフォルダに保存する。
![スクリーンショット 2015-09-25 17.29.15.png](https://qiita-image-store.s3.amazonaws.com/0/93396/d0a00058-91ce-1ae3-3af8-3445c9ed155b.png)
　[pfft~]のアーギュメントに先ほどのパッチのタイトルを付けて、「1024 2」と続ける。
　「1024」はFFTのサイズで、処理の都合上２の自乗になる（例：32, 64, 128, 256, 512, 1024, 2048, 4096）。サイズが小さいほど処理のサイクルが速いのでリズムがよくとれるが、音の再現が悪い。サイズが大きいほど音の再現が良くなるが、細かいリズムが音色として混ざってしまう。
　「２」はオーバーラップ数で、数が多いほど音が混ざる。１だとノイズが乗るので、音をまともに再現したい場合は２以上が良い。
　[pfft~]のインレット１、インレット２に別々の音声信号を送ればクロス合成された信号が出力されて出て来る。
YamlDotNet for Unityを使って詰まったところなどメモ

文字コードが「UTF-8 BOM付き」になっていないと日本語が文字化けを起こすみたいです。
~~改行コードが「CR ＋　LF」になっていないとデシリアライズに失敗するみたいです。~~

#参考
以下YAMLをC#クラス化(デシリアライズ)して返すソースコード

```
using System.IO;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;

public class YamlImporter
{
    /// <summary>
    /// YAMLをデシリアライズしたオブジェクト取得
    /// </summary>
    public static T Deserialize<T>(string yamlName)
    {
        StreamReader sr = new StreamReader(yamlName);
        string text = sr.ReadToEnd();
        var input = new StringReader(text);
        var deserializer = new Deserializer(namingConvention: new CamelCaseNamingConvention());
        T deserializeObject = deserializer.Deserialize<T>(input);
        return deserializeObject;
    }
}
```

#関連
YamlDotNetを使って詰まったところなどメモ
http://qiita.com/r-ngtm/items/a7164c60035335bdfb4e

YamlDotNet for Unityを使ってUnity上でYamlを読み込ませてみる
http://qiita.com/r-ngtm/items/6a1530f12268995eabc8
NSDateFormatterで年月だけ表示したい

# 欲しいもの

|Language|Calendar|output|
|--------|-------|----------|------|
|日本語|和暦|平成27年9月|
||西暦|2015年9月|
|English|Japanese|September 27 Heisei|
||Gregorian|September 2015|

英語表記は、カンマの有無とかよく分からないので、大体こんな感じということで。
当然、英語だけではなく他の言語でもそれなりの表記にならないといけない。

# NSDateIntervalFormatterStyle

まずはスタイル指定による表示を調査。

```objc
NSDateFormatter *df = [NSDateFormatter new];
df.dateStyle = NSDateIntervalFormatterFullStyle;
NSLog(@"dateFormat=%@", df.dateFormat);
NSLog(@"output=%@", [df stringFromDate:[NSDate date]]);
```

こんな感じで、Language/Calendar/Styleを変えつつ調査。

|Language|Calendar|Style|dataFormat|output|
|--------|--------|---|----------|------|
|日本語|和暦|Full|Gy年M月d日EEEE|平成27年9月25日金曜日|
|||Long|Gy年M月d日|平成27年9月25日|
|||Medium|GGGGGyy/MM/dd|H27/09/25|
|||Short|GGGGGyy/MM/dd|H27/09/25|
|日本語|西暦|Full|y年M月d日EEEE|2015年9月25日金曜日|
|||Long|y年M月d日|2015年9月25日|
|||Medium|y/MM/dd|2015/09/25|
|||Short|y/MM/dd|2015/09/25|
|English|Japanese|Full|EEEE, MMMM d, y G|Friday, September 25, 27 Heisei|
|||Long|MMMM d, y G|September 25, 27 Heisei|
|||Medium|MMM d, y G|Sep 25, 27 Heisei|
|||Short|M/d/y GGGGG|9/25/27 H|
|English|Gregorian|Full|EEEE, MMMM d, y|Friday, September 25, 2015|
|||Long|MMMM d, y|September 25, 2015|
|||Medium|MMM d, y|Sep 25, 2015|
|||Short|M/d/yy|9/25/15

当然のことながら「日」まで表示されるので使えない。
Longの「日」が無ければOKな感じ。

# dateFormatFromTemplate:options:locale:

ざっくりとした書式からイイ感じの書式を生成してくれるメソッド（たぶん）。

```objc
NSDateFormatter *df = [NSDateFormatter new];
df.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"yM"
                                                options:0
                                                 locale:[NSLocale currentLocale]];
NSLog(@"dateFormat=%@", df.dateFormat);
NSLog(@"output=%@", [df stringFromDate:[NSDate date]]);
```

こんな感じで、Language/Calendarを変えつつ調査。

|Language|Calendar|dataFormat|output|
|--------|--------|----------|------|
|日本語|和暦|GGGGGy/M|H27/9|
||西暦|y/M|2015/9|
|English|Japanese|M/y GGGGG|9/27 H|
||Gregorian|M/y|9/2015|

なんかいけそうな気がしてきたので書式をいじってみた結果‥

```objc:書式
@"yMMMM"
```

|Language|Calendar|dataFormat|output|
|--------|--------|----------|------|
|日本語|和暦|Gy年M月|平成27年9月|
||西暦|y年M月|2015年9月|
|English|Japanese|MMMM y G|September 27 Heisei|
||Gregorian|MMMM y|September 2015|
|ภาษาไทย|ญี่ปุ่น|MMMM G y|กันยายน เฮเซ 27|
||คริสต์ศักราช|MMMM G y|กันยายน ค.ศ. 2015|


パーフェクト！
めでたいのでタイ語のオマケ付！

しかし、`M`を増やすと年に影響が出る（「平成」とか「年」とか表示される）のが気持ち悪い。

# まとめ

```objc
NSDateFormatter *df = [NSDateFormatter new];
df.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"yMMMM"
                                                options:0
                                                 locale:[NSLocale currentLocale]];
NSLog(@"output=%@", [df stringFromDate:[NSDate date]]);
```
iOS9でMKMapViewのピンのアイコン画像が表示されなくなった時の対処方法

MKPinAnnotationViewでなく、MKAnnotationViewを使います。

Before

```
-(MKAnnotationView*)mapView:(MKMapView*)mapView
          viewForAnnotation:(id)annotation{
    
    CustomAnnotation* ca = (CustomAnnotation*)annotation;
    
    static NSString *PinIdentifier = @"Pin";
    MKPinAnnotationView* av = (MKPinAnnotationView *)[mapView 
                    dequeueReusableAnnotationViewWithIdentifier:PinIdentifier];
    
    if (!av) {
        av = [[MKPinAnnotationView alloc] initWithAnnotation:annotation
                    reuseIdentifier:PinIdentifier];
        av.canShowCallout = YES;
        av.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    }
    
    av.image = [UIImage imageNamed:@"image.png"];
    av.annotation = annotation;
    
    return av;
}
```

After

```
-(MKAnnotationView*)mapView:(MKMapView*)mapView
          viewForAnnotation:(id)annotation{
    

    CustomAnnotation* ca = (CustomAnnotation*)annotation;

    static NSString *PinIdentifier = @"Pin";
    MKAnnotationView * av = (MKAnnotationView  *)[mapView
                    dequeueReusableAnnotationViewWithIdentifier:PinIdentifier];
    
    if (!av) {
        av = [[MKAnnotationView alloc] initWithAnnotation:annotation
                    reuseIdentifier:PinIdentifier];
        av.canShowCallout = YES;
        av.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    }
    
    av.image = [UIImage imageNamed:@"image.png"];
    av.annotation = annotation;
    
    return av;
}
```
ソーシャルゲームのユーザログイン頻度をD3で可視化


先月、あるソーシャルゲームのデータ分析をしていて、気になったことをメモします。
D3.jsでヒートマップを作り、ゲームユーザのログイン頻度を可視化しましたというお話しです。

D3の公式サイトのExamplesのDay/Hour HeatMapを使いました。
http://bl.ocks.org/tjdecke/5558084

#全ユーザのログイン頻度からヒートマップ
![全体のユーザのログイン頻度.png](https://qiita-image-store.s3.amazonaws.com/0/94492/625e03bb-46d1-0c78-da66-ecd0adcad86c.png)

青系の色がログイン頻度が高く、薄緑の色（クリーム色？）がログイン頻度が低かった部分です。

縦軸が曜日、横軸が時間を表しています。ログイン頻度は2014年から2015年の8月までの全ユーザを対象に集計を行っています。上の図は全部で168マス（7曜日× 24時間 = 168）で、中央値のログイン数を基準に2色に分けました。

結果を観察してみると、朝の通勤や通学時間と昼休み、夜から深夜が目立ちますね。では個別のユーザごとに見てみましょう。

#個別のユーザごとのヒートマップ
まずはユーザA
![ユーザAのログイン頻度.png](https://qiita-image-store.s3.amazonaws.com/0/94492/b52f323d-65c1-d47d-ae85-39cd50a5b450.png)

ログイン頻度や他のデータを鑑みて、ミドルユーザの位置の人だと思います。平日の午前6時や7時にログイン頻度が高いことが分かります。おそらく、通勤や通学時間にゲームにログインしているのでしょう。あとは土日や夜の時間帯にログインが目立ちます。

続いてユーザB
![ユーザBのログイン頻度.png](https://qiita-image-store.s3.amazonaws.com/0/94492/9c8ce153-21ea-826b-0899-619fa065f2ba.png)

このユーザはライトユーザという位置付けです。午前5時によくログインしています。重要なのは一番最初の図で全体的に朝のログイン頻度が高いことが分かりますが、その時間帯はユーザごとに傾向が異なるということです。しかも横軸で見ると綺麗な1直線です。このユーザは朝早いから夜中のログインはほぼないです。

そして、ユーザC
![ユーザCのログイン頻度.png](https://qiita-image-store.s3.amazonaws.com/0/94492/a9e59db9-b117-cb8e-a3d2-05d2a2ac1e41.png)
私の中ではヘビーユーザという認識です。全体的にログイン頻度が高めですが、特に平日の朝と夜、土日がログイン頻度が高いです。

最後にユーザD
![ユーザDのログイン頻度.png](https://qiita-image-store.s3.amazonaws.com/0/94492/b097037b-9804-957c-1516-d310b7a17b92.png)
他のユーザと比較すると、ログインの時間帯がバラバラであることが分かります。全員が朝、夜にログイン頻度が高いわけではないことが分かります。全体の傾向と個々ユーザごとに比べてみると、その人の生活が少し見えてくるのが面白いところです。

このような分析から例えば、
・PvP戦をいつ主催すれば良いのか？
・ソーシャルゲームに新しい機能を実装する時にどのタイミングが良いか？
などを考えることができそうです。

次回はKaggleについて触れたいと思います。
モジュールが便利だからって何も考えずに使うのはナンセンスって気づいた


### はじめに

---

　現在、研究でApacheログの解析をしています。apache-log-parserというモジュールを使用していたのですが、ふと、このモジュール使う必要あるのかと疑問に思って調べてみました。
　それは、IPアドレスのパースをしたら正規表現を使用した方法とモジュールを使用した方法どちらが早いか？？ということです。

### 対象

---

　1日分のログ(約45MB、184087行)です。今回は、IPアドレスのみ表示します。

### 正規表現

---

　まずは、正規表現による方法です。

```python:sample_regex.py
# coding:utf-8
# 正規表現とモジュールでIPアドレス検索はどっちが早いか確かめるプログラム

import time
import sys
import re

if __name__ == "__main__":
    start = time.time()
    argvs = sys.argv
    f = open("~/apache_log_analysis/log_data/" + argvs[1])

    re_ip_addr = re.compile("((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))")

    for line in f.readlines():
        try:
            ip_addr = re_ip_addr.search(line)
            if ip_addr.group() is not None:
                print ip_addr.group()
        except:
            print "logfiled turned over"

    f.close()
    elapsed_time = time.time() - start
    print ("elapsed_time:{0}".format(elapsed_time)) + "[sec]"
    print "exit"
```

　結果は、2.10073304176[sec]でした！何回かやったら約0.9[sec]が最速のようで、実行結果のほとんどで0.9[sec]が計測されました。

### モジュール使用

---

　次に、モジュールを使用した方法です。

```python:sample_module.py
# coding:utf-8
# 正規表現とモジュールでIPアドレス検索はどっちが早いか確かめるプログラム

import time
import sys
import apache_log_parser

if __name__ == "__main__":
    start = time.time()
    argvs = sys.argv
    f = open("~/apache_log_analysis/log_data/" + argvs[1])

    parser = apache_log_parser.make_parser('%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"')

    for line in f.readlines():
        try:
            log_data = parser(line)
            print log_data['remote_host']
        except:
            print "logfiled turned over"

    f.close()
    elapsed_time = time.time() - start
    print ("elapsed_time:{0}".format(elapsed_time)) + "[sec]"
    print "exit"
```

　結果は、78.4286789894[sec]でした！あまりの遅さにプログラム間違えたか何回も確認してなんなんだこいつって思うぐらいでした。

### おわりに

---

　考えてみればモジュール使用だと他に色んな情報もパースしちゃうから当然の結果でしたね。それにしても遅すぎてびっくりしました。
　モジュールのソースを見たら、幅広く対応できるように作ってあったので、なるほどって感じでした。

　今後は、モジュールに頼りすぎないで、自前で実装したほうが早いところはモジュールのソースから引っ張って必要なところだけ使わせてもらったりしたほうが良いのかもな〜って思いました。

　便利だけどそれに頼りすぎてもダメだということを学べました。。
[CakeManager] 画像を指定しない場合の更新処理について

stackoverflowなどを見ているとCakePHP3の画像アップロードには[CakeManager](http://cakemanager.org/)が良いらしいですね。

ちょっと使ってみたのですが、[installation](http://cakemanager.org/docs/utils/1.0/installation/)と[Uploadable-Behavior](http://cakemanager.org/docs/utils/1.0/behaviors/uploadable/)を参考にmodelとtemplateに設定すると簡単に画像のアップロードが行えるようになりました。画像の更新(置き換え)や元となるデータを削除した場合も連動して削除してくれるなど機能的に申し分ないです。

しかし、更新画面等で既にアップロード済みの画像を変更することなく(つまり未指定)他のデータを更新した場合、デフォルトでは画像が削除されてしまいます。以下はその時に対処したメモです。

modelの該当カラムでremoveFileOnUpdateをfalseにします。

```
$this->addBehavior('Utils.Uploadable', [
	'main_image' => [
		'field' => 'id',
		'fileName' => '{field}.{extension}',
		'removeFileOnUpdate' => false, // ここをfalseにする
		'removeFileOnDelete' => true,
		'fields' => [
			    'directory' => 'main_image_directory',
			    'url' => 'main_image_url',
			    'type' => 'main_image_type',
			    'size' => 'main_image_size',
			    'fileName' => 'main_image_name',
			    'filePath' => 'main_image'
		],
	],
]);
```

modelに対応するcontrollerのeditアクションで、画像がアップロードされているかをサイズで判断し、更新するフィールドを振り分けます。

```
public function edit($id = null)
{
	...
	if ($this->request->is(['patch', 'post', 'put'])) {
		// 画像の有無により更新するフィールドを分ける
		$size = $this->request->data['main_image']['size']; // imageのサイズを取得

		if($size > 0){
			// imageあり 全フィールド更新
			$mymodel = $this->MyModel->patchEntity($mymodel, $this->request->data);
		}else{
			// imageなし main_imageフィールドを除外
			$mymodel = $this->MyModel->patchEntity($mymodel, $this->request->data, 
						['fieldList' => ['title', 'comment', 'published_date', 'modified']
			]);
		}
		...
	}
	...
}
```

controllerで更新フィールドを除外するだけでうまくいきそうな感じですが、modelでremoveFileOnUpdateをfalseにしないと削除されてしまいます。

また、配列のメソッドなどを駆使すれば、該当の画像カラムを除外したカラム名配列を作ることができると思うのですが、それほど詳しくないのでここまでです。あと、アップロード済みの画像の削除は今後試す予定です。
PlayFrameworkのfunctional test

公式サイトのFunctionalTestのサンプルコードは実践ではちょっと辛いと思ったので、その改良版を編み出したメモ。

基底クラスでTestServerの起動・停止、TestBrowserの生成を、@BeforeClassと@AfterClassでやると、書きやすくなる。もとが[FluentLenium](https://github.com/FluentLenium/FluentLenium)なので、そこのサンプルコードに寄せたということ。

## 基底クラス

```lang:TestBase.java

public class TestBase {

    protected static TestServer testServer;

    public static TestBrowser browser;

    protected static int PORT = 1111;

    public static final String baseUrl = "http://localhost:" + PORT;

    @BeforeClass
    public static void startTestServer() {
        browser = testBrowser();
        testServer = testServer(PORT);
        start(testServer);
    }

    @AfterClass
    public static void stopTestServer() {
        stop(testServer);
    }
}
```

## テストコードのサンプル

```lang:SampleTest.java

public class SampleTest extends TestBase {

    @Test
    public void ログインページが表示される() {
        browser.goTo(baseUrl + "/login");

        assertThat(browser.title()).isEqualTo("ログイン");
    }

    @Test
    public void ログインできる() {
            browser.goTo(baseUrl + "/login")
                .fill("input[name='id']").with("123")
                .fill("input[name='password']").with("password")
                .click("input[name='login']");

              browser.await().atMost(10 * 1000);

              assertThat(browser.title()).isEqualTo("ホーム");
    }

}
```

## まとめ

こうすると、ブラウザ操作をしてその結果をassertionする、というのがはっきりできた。
ブラウザ操作も、直感的に書けるし、継承していくことでテストクラスを簡単に増やしていける。
コールバックとは？


## by wikipedia
> コールバック関数とは、プログラム中で、呼び出し先の関数の実行中に実行されるように、あらかじめ指定しておく関数。

関数が実行中に、実行される関数 = コールバック関数


> 呼び出し先の関数の引数としてコールバック関数への参照情報を渡すことで、呼び出し先から任意のコールバック関数を実行させ、コールバック関数に実行制御を移すことができる。電話を相手に一度かけて電話番号のみを伝え、いったん電話を切って折り返し相手からかけなおしてもらう様子（これを「コールバック」という）に似ているためこの名前がついた。

呼び出し先の関数に引数にどのコールバック関数を使えばいいのか渡しておく。




## by RailsGuide

> コールバックとは、オブジェクトのライフサイクル期間における特定の瞬間に呼び出されるメソッドのことです。コールバックを利用することで、Active Recordオブジェクトが作成/保存/更新/削除/検証/データベースからの読み込み、などのイベント発生時に常に実行されるコードを書くことができます。



## つまり、コールバック関数とは
```ruby
def hoge(method)
  self.send(method.to_sym)
end



def call_method
  p 'コールバックされました。'
end


hoge("call_method")
→　"コールバックされました。"

```




## Railsの身近なコールバック関数
by RailsGuide

オブジェクトの作成
before_validation
after_validation
before_save
around_save
before_create
around_create
after_create
after_save

オブジェクトの更新
before_validation
after_validation
before_save
around_save
before_update
around_update
after_update
after_save

オブジェクトのdestroy
before_destroy
around_destroy
after_destroy
iOS9でWebCore::FrameView::contentsSizeRespectingOverflowでクラッシュ

iOS9にしてから、UIWebViewを使ったアプリで不可解なクラッシュを体験するようになりました。
WEBを表示しようとすると
WebCore::FrameView::contentsSizeRespectingOverflow
でクラッシュ。

試行錯誤して、どうやらviewportを指定していると「落ちるときがある」(常にじゃないのが困りもの)ということがわかりました。
しかし、viewportを指定しないという解決策はありえない……。

そこから、また思考錯誤して、以下のようにすると、クラッシュしなくなることがわかりました。

`webView.suppressesIncrementalRendering = YES;`

**suppressesIncrementalRenderingをYESにすること。**

なんとなく、OSというかWebViewのバグじゃないかなという気もするのですが……。
【CakePHP】コールバック無効化

findやsaveのコールバックの無効化。

##find(beforeFind, afterFind共に無効化)
```
$this->find('first', array(
    'callbacks' => false
));
```

##save(beforeSave, afterSave共に無効化)
```
$this->save($data, array(
    'callbacks' => false
));
```

参考：[[CakePHP]モデルのコールバックを無効化にする](http://blog.code-life.net/blog/2013/09/25/cakephp-model-callback/)
CakePHP3の日付セレクトボックスの日本語化

CakePHP3の日付セレクトボックスの日本語化はCakePHP2の方法ではうまくいかなかったのでメモです。

例は[Boostrap3](http://getbootstrap.com/)を使ってます。

```
// 日本語対応(YYYY年MM月DD日 HH時mm分)
$this->Form->templates([
    'dateWidget' => '<ul class="list-inline"><li class="year">{{year}} 年</li><li class="month"> {{month}} 月 </li><li class="day"> {{day}} 日 </li><li class="hour"> {{hour}} 時 </li><li class="minute"> {{minute}} 分 </li></ul>'
]);

echo $this->Form->input('start_datetime', array(
                                     'type' => 'datetime',
                                     'label' => '開始日時',
                                     'dateFormat' => 'YMD',
                                     'monthNames' => false,
                                     'separator' => '/',
                                     'minYear' => date('Y'),
                                     'maxYear' => date('Y')+1,
                                     'default' => date('Y-m-d')
                                ));
```

[Creating DateTime Inputs](http://book.cakephp.org/3.0/en/views/helpers/form.html#creating-datetime-inputs)
Xcode マナーモード中でも強制的に音を鳴らす方法

はじめまして

こういうところに記事を書くのは初めてなのですが、iPhoneアプリの開発を
長年やっているので、お役に立てればと考えています。

早速ですが、マナーモード（iPhone左側のオレンジ色のスイッチ）に設定している
時でも音を鳴らす方法をご紹介したいと思います。

すいませんが、決して悪用しないようご注意ください。

#事前準備
・鳴らしたい音声ファイルをmp3にして、プログラムと同じ階層に配置してください。
　ここではsound.mp3ファイルを用意してプログラムと同じ階層に配置したとします。
・AVFoundation.frameworkを利用するので、プロジェクトに追加してください。

#プログラム
```viewController.h
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

@interface ViewController : UIViewController<AVAudioPlayerDelegate> {
    AVAudioPlayer *audioPlayer;
}

@end
```

```viewController.m

- (void)viewDidLoad{
    [super viewDidLoad];

    NSString *path;

    //音声ファイルを指定する
    path = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"mp3"];
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil];

    //マナーモード時にも音を鳴らすように設定
    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
}

```

あとは再生したい時に以下の記述をすれば再生されます。これは音を鳴らすときと同じですね。

        [audioPlayer play];

ちなみに音量が0だと当然マナーモードでなくても鳴りませんので鳴らないときは音量を確認してください。
Vimで編集中のコードの実行結果をコメントとして貼り付ける


#はじめに(やりたいこと)

大学の課題で、実行結果をコードの最後にコメントとして貼り付けて提出なさい、と言われて作ったものです。
~~一瞬Emacsに乗り換えそうになりました。~~
Vimscriptで自動化できないかやってみたものです。C言語以外にも使うことができると思います。

引数などには(まだ)対応していません。


#できたもの

以下のようなものが出来上がりました。下の方に説明があります。

```vim
:function! RRFunction()
    :w
    :let compile = system('gcc -o temp.out '.expand('%:p'))
    :call append(line('$'), split("/*", "", 1))
    :if !v:shell_error
        :call cursor(line('$'), 0)
        :r!./temp.out
        :call system('rm -f temp.out')
    :else
        :call append(line('$'), split(compile, "\n", 1))                                              
    :endif
    :call append(line('$'), split("*/", "", 1))    
:endfunction
:command RR :call RRFunction()
```


#動作

以下のようなC言語のソースがあるとします

```c
#include <stdio.h>
#include <stdlib.h> 

int main()
{
	int a, b;
	printf("A: ");
	if (scanf("%d", &a) != 1) {
		printf("incorrect input\n");
		exit(1);
	}
	printf("B: ");
	if (scanf("%d", &b) != 1) {
		printf("incorrect input\n");
		exit(1);
	}
	printf("A * B = %d\n", a * b);
	return 0;
}
```

`:RR`で保存とコンパイルなどをして、実行を開始します。

コンパイル時にエラーが発生した場合はコメントにgccからのエラーをコメントアウトしてコードファイルの最後に挿入します。

ユーザーの入力を受け付ける場合は(何も表示されませんが)入力することができます。

実行が終了すると実行結果をファイルの最後に挿入します。

##エラーなどがない場合

`:RR`の後、`4<Enter>8<Enter>`と入力した場合の結果です。
ユーザーからの入力は挿入されません(仕様です)

```c
	/* 省略 */
	return 0;
}
/*
A: B: A * B = 32
*/
```

##エラーがある場合

main関数の最後の閉じ括弧}を削除して実行してみます。

```c
	/* 省略 */
	return 0;
/*
/Users/###/###.c:18:11: error: expected '}'
        return 0;
                 ^
/Users/###/###.c:5:1: note: to match this '{'
{
^
1 error generated.

*/
```

#説明など

###バックグラウンドでシェルコマンドを実行する

system関数でシェルコマンドをバックグラウンドで実行することができます。
`:!`を使う方法ではいちいちEnterが必要なのでこれを省くことができます。

```vim
:let result = system('pwd')
:echo result
" -> /Users/###
```

##実行の成功可否を調べる(シェルからの戻り値を取得)

Vim scriptではシェルコマンドの実行が成功したか失敗したかの結果が`v:shell_error`に格納されます。

###成功した場合

```vim
:let result = system('gcc file.c')
:echo v:shell_error
" -> 0
```

###失敗した場合

```vim
:let result = system('gcc nosuchfile.c')
:echo v:shell_error
" -> 1
```

##ファイルの最後の行番号を取得する

`line('$')`とすることでファイルの最後の行番号を取得することができます。

```vim
:echo line('$')
" -> 19
```

ちなみに: `line('.')`で現在のカーソルの行番号です。

##system関数で取得した結果をappendで出力

###何も考えずそのまま出力

```vim
:let result = system('cal')
:call append(line('$'), result)
```

このようにするとファイルの最後に

```
      9月 2015^@日 月 火 水 木 金 土^@       1  2  3  4  5^@ 6  7  8  9 10 11 12^@13 14 15 16 17 18 19^@20 21 22 23 24 25 26^@27 28 29 30^@^@
```

と改行がおかしくなりかなりイヤな感じで出力されます。

###解決案

そこでsplitを利用してみました。

```vim
:let result = system('cal')
:call append(line('$'), split(result, "\n", 1))
```

このようにすれば

```
      9月 2015
日 月 火 水 木 金 土
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
```

と改行も綺麗に出力してくれました。
【間抜けか】Postfixでリレー設定のrelay_domainsが効かなかった理由

自分の戒め的メモとして。そして他の方が同じような轍を踏まない為に‥。

Postfixで指定したドメインの宛先のみ中継を許可する場合は、 `relay_domains` を指定する必要がありますが、なんでかどうしてか全ての宛先が中継されてしまいました。

> relay_domains = [ドメイン]

#原因（間抜けか）
はい間抜けでした。

原因は、`mynetworks` に送信元のIPのネットワーク帯を指定していたから。

つまり mynetworks に指定されたネットワーク帯からのメールは relay_domains の指定に関係なく全てリレーされてしまいます。

というわけで `mynetworks` から該当のネットワーク帯を削除。

```vim
mynetworks = 10.0.0.0/24, 127.0.0.0/8
 ↓ 修正
mynetworks = 127.0.0.0/8
```

今後はキチンとマニュアル読みます‥。
Fastlyコントロールパネルへユーザーを追加する［招待を送る］

ファストリーのCDNは自分一人で利用＆管理することも可能ですが、会社やプロジェクトでFastlyを利用するなら、ぜひチーム全員で使ってみてください。そこで、Fastlyコントロールパネル https://manage.fastly.com に他のユーザーを追加する方法を説明します。

#1. Fastly コンパネへログイン

**図1**のFastlyコンパネ https://manage.fastly.com より、メールアドレスとパスワードを入力してログインしてください。

**図1. コンパネ ログイン画面**
![Screenshot 2019-03-20 12.53.11.png](https://qiita-image-store.s3.amazonaws.com/0/89952/a1c26d5a-7adb-1664-af22-e9e6871d19f4.png)

#2. メニューより Account をクリック

ログインしたら、画面右上のドロップダウンメニュー（**図2**）よりAccountを選択してください。

**図2. 画面右上 ドロップダウンメニュー**
<img width="235" alt="Screenshot 2019-03-25 14.34.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/89952/2a2d903f-f21f-bf19-25fd-f2905108afc6.png">

#3. User management 画面へ進み Invite ボタンをクリック

**図3. 画面左 ナビゲーションメニュー**
<img width="302" alt="Screenshot 2019-03-25 13.26.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/89952/fabfa089-30f0-2b95-674f-ef1ed4a10e31.png">

Account 画面の左側のナビゲーションメニュー（**図3**）より User management リンクをクリックし、その後表示される User management 画面（**図4**) にて画面右上のボタン **+ INVITE** をクリックしてください。

なお User management の下にある Users には、現在のユーザーの一覧が表示されています。

**図4. User management**
<img width="629" alt="Screenshot 2019-03-25 13.27.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/89952/604b5013-6b42-f108-48ec-823d8cef1e6e.png">



#4. 招待の送付先とロール（役割）を指定

**図5**の Invite a new user 画面が表示されますので、追加するユーザーについて情報を入力してください。

1. **Email** メールアドレス
1. **Choose their role** ロール (役割) を選ぶ

ロール Role は4つの選択肢の中から、1つを選んでください。

* User
* Billing
* Superuser
* Engineer

両方の情報を指定したら、INVITE ボタンをクリックしてください。

**図5. Invite a new user**
<img width="648" alt="Screenshot 2019-03-25 13.29.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/89952/8238cc44-a39d-60a1-ce2b-69d03c1b5286.png">


##4-1. ロール

ロールを指定することにより、そのユーザーがポータル上に持つ権限を管理できます。各ロールの持つ権限は以下の通りです。

<dl>
<dt>User</dt>
<dd>最小限の権限。Dashboard（リアルタイム解析）、Stats（統計）と、名前やパスワードの変更などAccount（ユーザー情報）の一部が利用できます。</dd>
<dt>Billing</dt>
<dd>部分的な権限。Userの権限に加えて、Billing（請求情報）が利用できます。</dd>
<dt>Superuser</dt>
<dd>全ての権限。</dd>
<dt>Engineer</dt>
<dd>部分的な権限。Userの権限に加えて、Configure（設定）が利用できます。</dd>
</dl>

コンテンツのパージを行うためには、EngineerまたはSuperuserであることが必要です。

#5. 招待メールの送付

図4 Invite Userにて指定したメールアドレスあてに、招待メールが送付されます。同時に、画面上のUser Invitations部に送付済みの招待が表示されます（図6）。

**図6. User Invitations（送付済み招待あり）**
<img width="648" alt="Screenshot 2019-03-25 13.30.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/89952/f676cf37-65ee-d572-ce2e-46234f60af55.png">

この招待は、右側のごみ箱アイコンをクリックすることで、取り消しが可能です。

このユーザーが招待に従ってユーザー登録を完了すると、User Invitationsからはメールアドレスが消去され、その下のUsers部に新しいユーザーが追加で表示されます。

#関連ドキュメント

[User roles and how to change them](https://docs.fastly.com/guides/user-access-and-control/user-roles-and-how-to-change-them) 『ユーザーのロールとその変更方法』
Swift / PHP でクラスインスタンスのプロパティを取得したい

PHP 経験者が Swift 初経験で困ったことシリーズ。


## Swift

ver 2.0 で確認。

```swift
class ProgrammingLanguage {

    public var name:String = ""
    public var version:String = ""
    
    init(name: String, version: String) {
        self.name = name
        self.version = version
    }
}

let lang: ProgrammingLanguage = ProgrammingLanguage(name: "Swift", version: "2.0")

for prop in Mirror(reflecting: lang).children {
    print(prop.label!, prop.value)
}

// -> name Swift
// -> version 2.0
```

インスタンスからアクセスできないプロパティも取得できます。

リファレンスに注意書き書いてあるので、使うつもりの人は用途を踏まえて確認してください。
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Reference/Swift_Mirror_Structure/index.html

## PHP

```php
class ProgrammingLanguage {

    public $name = "";
    public $version = "";
    
    function __construct($name, $version) {
        $this->name = $name;
        $this->version = $version;
    }
}

$lang = new ProgrammingLanguage("PHP", "5.5.27");

$ref = new ReflectionClass($lang);
$props = $ref->getProperties(ReflectionProperty::IS_PUBLIC);

foreach ($props as $prop) {
    echo $prop->getName(), " ", $prop->getValue($lang), PHP_EOL;
}

// -> name PHP
// -> version 5.5.27
```

取得したいアクセス修飾子は `ReflectionClass::getProperties` でフィルタリングできます。
また、アクセス修飾子が呼び出し元に依存しても問題ないなら下記で簡単に取得できます。

```php
print_r(get_object_vars($lang));

// -> Array
//    (
//        [name] => PHP
//        [version] => 5.5.27
//    )

```
Swift で関数から View 遷移と、AppDelegateで画面間の値渡し


遷移元のコントローラで、何か処理してから遷移する。

＃他のサイト拝見しながら、どうにもうまくいかない部分もあったので。
＃バージョン変わったりいろいろアップデートがねー。
＃Xcode version : 6.4 -> 7.0 アップデートの修正を反映

例えば Main.storyboad 内のViewで、遷移先のViewのIdentity>StoryboadIDを「mySecondView」と定義している場合、
遷移元のコントローラの遷移するコードはこんな感じになる。

```
func hogehoge(){
        // なにか処理。例えばラベルの値を変える
        label.text = "sample" //labelはあらかじめ@IBOutletで定義しておく

        //遷移するViewを定義する
        //下記は6.4のときのコード
        //let mySecondView = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("mySecondView") as! UIViewController
        //こっちが7.0
        let mySecondView = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("mySecondView")
        
        //アニメーションを設定する
        mySecondView.modalTransitionStyle = UIModalTransitionStyle.PartialCurl
        
        //Viewの移動をする
        self.presentViewController(mySecondView, animated: true, completion: nil)
}
```

値の受け渡し
AppDelegate.swiftで

```
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
   var viewVal: String?
   //以下略
}
```

遷移元で値セット

```
override func viewWillDisappear(animated: Bool) {
        super.viewDidDisappear(animated)
        var appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        appDelegate.viewVal = label.text!
    }
```

遷移先で受け取り

```
    override func viewWillAppear(animated: Bool) {
        super.viewDidDisappear(animated)
        var appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        label.text = appDelegate.viewVal
    }

```
hostで名前解決できるのにpingが通らない場合

たぶんUbuntuの場合だけ。

```conf:/etc/nsswtich.conf
hosts: files dns
```

`dns`が入っているかを確認する。`ubuntu-desktop`とかをインストールすると、何か別の文字列が`file`と`dns`の間に入っていて、これを消すと直る。

バックアップ取らずに編集して、「何か別の文字列」などと言う始末。
Xcode7にアップデートしたらpod updateに失敗した


## 対処法
下記のようなエラーが表示されました。

```bash
$ pod update

Generating Pods project
2015-09-25 12:02:50.727 ruby[16153:83442] [MT] DVTAssertions: ASSERTION FAILURE in /Library/Caches/com.apple.xbs/Sources/IDEFrameworks/IDEFrameworks-8227/IDEFoundation/Initialization/IDEInitialization.m:590
Details:  Assertion failed: _initializationCompletedSuccessfully
Function: BOOL IDEIsInitializedForUserInteraction()
Thread:   <NSThread: 0x7fe18cbd2510>{number = 1, name = main}
Hints: None
Backtrace:
  0  0x000000010910fa5c -[DVTAssertionHandler handleFailureInFunction:fileName:lineNumber:assertionSignature:messageFormat:arguments:] (in DVTFoundation)
  1  0x000000010910f1e9 _DVTAssertionHandler (in DVTFoundation)
  2  0x000000010910f455 _DVTAssertionFailureHandler (in DVTFoundation)
  3  0x000000010910f3b7 _DVTAssertionFailureHandler (in DVTFoundation)
  4  0x000000010a548f5c IDEIsInitializedForUserInteraction (in IDEFoundation)
  5  0x000000010d15feb9 +[PBXProject projectWithFile:errorHandler:readOnly:] (in DevToolsCore)
  6  0x000000010d161a3e +[PBXProject projectWithFile:errorHandler:] (in DevToolsCore)
  7  0x00007fff861eff44 ffi_call_unix64 (in libffi.dylib)
[1]    16153 abort      pod update
```

ググってみるとstack overflowにいくつか対処法がありましたが、とりあえずgem updateしてみることに。

```bash
$ gem update cocoapods
Updating cocoapods
Fetching: cocoapods-core-0.38.2.gem (100%)
Successfully installed cocoapods-core-0.38.2
Fetching: xcodeproj-0.26.3.gem (100%)
Successfully installed xcodeproj-0.26.3
Fetching: cocoapods-downloader-0.9.3.gem (100%)
Successfully installed cocoapods-downloader-0.9.3
Fetching: cocoapods-stats-0.5.3.gem (100%)
Successfully installed cocoapods-stats-0.5.3
```
アップデート終了後にpod updateすると無事成功しました。

## 参考リンク
http://stackoverflow.com/questions/31085306/error-generating-pods-project-pod-install
[Laravel5]composerでrequire-devのものをproviders/aliasesに登録したい時の一工夫


# 現象
```
composer update --no-dev
```
をするとcomposer.jsonのrequire-devはロードされない。
しかし、Laravelのconifg/app.phpでaliases/providersに登録しているとcomposer updateが失敗してしまう。
特にLaravelではLaravelDebugBarがよく使われており、このパッケージはproduction環境では必要ないため、requre-devに設定されることが多い。すると上記コマンドでは

```
(Class 'Barryvdh\Debugbar\ServiceProvider' not found)
```

とエラーメッセージが出てしまう。
気にせずcomposer updateをすれば、成功はするのだが、不必要なパッケージまでデプロイするべきではない。
以下では2つの方法で上記の現象を解消したので紹介する。

# 対処法
## 1. config/app.php内で切り分ける

config/app.phpは以下のように記述されている

```
<?php

return [
		~~~~~~
	'providers' => [
		 'Illuminate\Auth\AuthServiceProvider',
		 ....
	],
	'aliases' => [
    	'App'       => 'Illuminate\Support\Facades\App',
		....
	]
];

```

なので、一旦return されているものを tmp とし、env('APP_ENV')がlocalの場合追加してあげれば良い。
以下のようなコードになる

```php
<?php

$tmp = [
		~~~~~~
	'providers' => [
		 'Illuminate\Auth\AuthServiceProvider',
		 ....
	],
	'aliases' => [
    	'App'       => 'Illuminate\Support\Facades\App',
		....
	]
];
if (env('APP_ENV') == 'local') {
  $tmp['providers'][] = 'Barryvdh\Debugbar\ServiceProvider';
  $tmp['aliases']['Debugbar']  = 'Barryvdh\Debugbar\Facade';
}
return $tmp;
```
<script src="https://gist.github.com/ytacky/c3001f2486642c14ac32.js"></script>

これで動くは動くがなんかLaravelらしくない。

## 2.serviceproviderを作る
1の方法で実装していたが、serviceproviderで実装する方法があったので実装した。
http://blog.piotrows.pl/en/laravel-5-load-serviceprovider-depend-on-env-file/
リンク先のFinal ServiceProvider codeと同じため（コメントの一部を日本語化したぐらい）のためここにはコードはアップしない。
gistには参考までにupしてある。
https://gist.github.com/ytacky/b5aca6598ca1770a92f6

気をつけることは、config/app.phpのproviderに

```
'App\Providers\LocalEnviromentServiceProvider',
```
を追加すること

# まとめ
LaravelDebugBarを紹介している記事ではほぼconifg/app.phpでaliases/providersの設定をしている。個人用のプログラムで本番環境に不要なパッケージがデプロイされても特に問題ないならば、その実装方法でも問題ない。基本的には composer update --no-devしてdev環境以外でいらないパッケージはデプロイしないようにしたほうがいい。

<!--
また、インターネット上にある記事は全て鵜呑みにするのではなく一旦自分で試してみて記載するのが大事である。
-->
Kinoma Create: ブレッドボードを付けてみた

![IMG_2609_1.png](https://qiita-image-store.s3.amazonaws.com/0/92294/684fc704-d0d7-f9dc-8c8f-9a6ec45f2964.png)


LEDの抵抗やセンサーのプルアップ抵抗を付けよう思っても、フロントピンだけだとすっきり配線するのが難しい場合がよくあります。ブレッドボードを別に用意して配線すればよいのですが、本体とブレッドボードの２つに分かれるので取り回しが面倒になります。

![IMG_2611.JPG](https://qiita-image-store.s3.amazonaws.com/0/92294/85589481-b80f-0528-4ff2-09b04724e248.jpeg)

[ブレッドボードBB-801](http://akizukidenshi.com/catalog/g/gP-05294/)を中央の溝の部分で切断し、裏の両面テープの保護シートを一部分だけはがしてKinoma Createに貼りました。保護シートを全部はがすと接着力が強すぎて取り外しができなくなるので少しだけにします。

![IMG_2612.JPG](https://qiita-image-store.s3.amazonaws.com/0/92294/a33977a0-3e0b-d75b-a68f-3f47fb4d1bdd.jpeg)

電源ライン部分も取り付け可能です。サイズがぎりぎりですがなんとか収まります。
![IMG_2613.JPG](https://qiita-image-store.s3.amazonaws.com/0/92294/7758f7e9-c601-4f70-a3f4-d09f8e8bb9e3.jpeg)

[参考]
[Raspberry Piでの電子工作にあたって購入した道具](https://blog.e-photographer.net/tools-besides-raspberry-pi?lang=ja)
ブレッドボードのメーカーによる違いについての記載があります。
ロカールのWordPressをBrowsersyncを使って、iPhoneで確認する

さくっとやりたい時用です。がっつりやりたい場合は、gulpを使いましょう。

IPの接続と何ら変わりがありませんが、[Browsersync](http://www.browsersync.io/)をかますと、CSSやPHPのファイルを更新するだけで、ブラウザが勝手にリロードさせれるので便利。
[node.js](https://nodejs.org/en/)がインストールされていることが前提です。

ローカルのWordPressにpackage.jsonを作成します。
--proxyの後ろのURLは、適時変えてください。
--filesのパスは、package.jsonから見た時の相対パスです。

    {
      "name": "demo",
      "version": "1.0.0",
      "description": "",
      "main": "wordpress",
      "scripts": {
        "start": "browser-sync start --proxy localhost:8888 --files=\"wp-content/themes/[テーマ名]/*.css, wp-content/themes/[テーマ名]/**/*.php\""
      },
      "devDependencies": {
        "browser-sync": "^2.9.3"
      }
    }

ターミナルでpackage.jsonを設置したディレクトリまで移動し、Browsersyncをインストールします。もし、Browsersyncがグローバルにインストールされていれば、このコマンドは叩く必要がありません。
(先頭の\$は「ここはコマンドだよ」って意味です。$は無視してコピペしてください)

    $ npm install

Browsersyncのインストールが終わったら、下記のコマンドを叩きましょう。

    $ npm start

ターミナルに下記のような内容が記述されます。

    Access URLs:
     -------------------------------------
           Local: http://localhost:3000
        External: http://192.168.1.48:3000
     -------------------------------------
              UI: http://localhost:3001
     UI External: http://192.168.1.48:3001

パソコンが接続しているWi-Fiに、スマートフォンも接続させ、Access URLsのExternalのURLへアクセスしてみましょう。

ローカルのWordPressを実機で確認できるようになります。
またCSSなどを変更してみましょう。パソコンやスマートフォンで表示しているWordPressが勝手にリロードします。

もし同期したくない場合は、Access URLsのUIへアクセスし、同期設定をOFFにしましょう。
SFC: WordPressでText表示ができないときの対応方法

<h1>論理思考とプログラミング授業で記事編集の際にTextモードにできない人向けです。<h1>


![スクリーンショット 2015-09-25 11.36.51.png](https://qiita-image-store.s3.amazonaws.com/0/91959/89f1717b-49b7-778e-4b94-30e7707c986b.png)


<br>
<hr>
<br>
<h2>①自分のサイトを表示する</h2>
![スクリーンショット 2015-09-25 11.40.20.png](https://qiita-image-store.s3.amazonaws.com/0/91959/1b0a6af2-74b9-2743-b748-2586712e171d.png)
<br>

<h2>②自分のサイトから、編集画面に移動する</h2>
![スクリーンショット 2015-09-25 11.59.09.png](https://qiita-image-store.s3.amazonaws.com/0/91959/8131d3da-99e1-180d-316a-99ad96f87bc0.png)
<br>

<h2>③IDとパスワードを聞かれるので、答える</h2>
<br>


これでまた編集画面に行くのですが、Textモードで入力できるようになっているはずです。
試してみてください。
フロントエンドエンジニアに手っ取り早く ruby のブロック構文を教えるコード

今から、とても雑にブロック構文を説明します。
ざっくり言うと、コールバックとか、無名関数とか、その辺のアレを書きやすくした構文ってだけです。

ブロック構文
---

まず、Ruby のこんなコードがあるとしましょう。

```rb
arr = [1, 2, 3]

arr.each do |i|
  puts i * 2
end
```

これ、JavaScript でいうとだいたいこんな感じです。

```js
var arr = [1, 2, 3]

arr.forEach(function(i) {
  console.log(i * 2);
});
```

yield
----

次に Ruby のこんなコードがあるとしましょう。

```rb
def length(arr)
  yield arr.size
end

length([1, 2, 3]) do |size|
  puts "size is " + size.to_s
end
```

これは JavaScript でいうとこんな感じです。

```js
function length(arr, func) {
  func(arr.length);
}

length([1, 2, 3], function(size) {
  console.log("size is " + size);
});
```

まとめると？
---
リファレンスにもある通り、

> ブロック付きメソッドとは制御構造の抽象化のために用いられる メソッドです。

なので、制御構造… JavaScript なら関数オブジェクト、Ruby なら `to_proc` できるオブジェクトの呼び出しや実装を書きやすくしただけの構文と受け取れば、ひとまずはオッケーです。

```rb
arr = [1, 2, 3]

var_proc = Proc.new { |i| puts i * 2 }
arr.each(&var_proc) # Array#each は Proc オブジェクトを引数にとる。

class Foo
  def to_proc
    Proc.new { |i| puts i * 2 }
  end
end
arr.each(&Foo.new) # Proc オブジェクトそのものじゃなくても、 `#to_proc`を実装してれば引数に取れる

# でも、こう書いた方がわかりやすいよね！
arr.each do |i|
  puts i * 2
end
```
Android MではApache HTTP Clientがなくなるらしい

もうタイトルそのままなんですが、個人的にはやっと一本化するのか、という印象なので。
#ソース
https://developer.android.com/intl/ja/preview/behavior-changes.html#behavior-apache-http-client

とにかく、今まで、HTTP通信にどれを使うべきなのか、少なくともAndroidとしてどれを推すのかというのも含めて大変わかりづらい状態だった（とは言え、DefaultHttpClientが削除される兆候はあったと思うのですが）ので、個人的には（実際何かが変わるわけでもないですが）安心したというのが正直なところです。

というかAndroidのAPI Guideに通信に関する部分が見当たらない気がするんですが、あまりにも混乱しているから？それとも私の見落としでしょうか？うーん。
Windowsからwget的なことをしたい（自分メモ）

Windowsでwget的なことをするのに、bitsadminというコマンドが使えるらしい。
標準コマンドなのでそのまま使える。

bitsadmin.exe /helpによると、基本的な使い方は以下のとおり。PowerShellにて。
>\>bitsadmin.exe /TRANSFER <job name> [type] [/PRIORITY priority] [/ACLFLAGS flags]
          remote_url local_name

いや、[産経オンライン](https://learning.sankei.co.jp/)さんの無料教材を一括ダウンロードしたかっただけ…
\> bitsadmin.exe /TRANSFER testjob http://info.learning.sankei.co.jp/lesson/curriculum/business/a2/businessA2_001.pdf local_name
iPad Multitaskingに対応したメモ


久々のiPhoneアプリ申請でまたつまづいたよメモ。

アプリの申請をしようよしたら下記のエラーがでました。
iPad Multitasking、そういえばそんなもの出ましたね。

![Screen_Shot_2015-09-23_at_20_20_43.png](https://qiita-image-store.s3.amazonaws.com/0/8868/12c198fb-fd82-581b-c757-7c903c886de9.png "Screen_Shot_2015-09-23_at_20_20_43.png")


```
ERROR ITMS-90474: "Invalid Bundle. iPad Multitasking support requires these orientations: 'UIInterfaceOrientationPortrait,UIInterfaceOrientationPortraitUpsideDown,UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight'. Found 'UIInterfaceOrientationPortrait' in bundle 'xxx.xxx.xxx'."
```
```
ERROR ITMS-90475: "Invalid Bundle. iPad Multitasking support requires launch story board in bundle 'xxx.xxx.xxx'."
```

はい、おっしゃる通り古くから運用してる割にはサボってるアプリなので`Device Orientation`は`Portrait`しか対応してないし、`Launch Screen File`は作ってすらいません。

対応方法は２つ。サボるか頑張るか。

### サボる方法

問答無用で`Requires full screen`にチェックします。

![Screen_Shot_2015-09-25_at_02_21_14.png](https://qiita-image-store.s3.amazonaws.com/0/8868/6f2e08e8-6a9c-5c63-18d0-dc5f79cc97e2.png "Screen_Shot_2015-09-25_at_02_21_14.png")

ただし、これをするとせっかくiOS9のiPadでできるマルチタスキング機能（Slide OverとかSplit View）が使えなくなってしまうようです。

![IMG_0004.png](https://qiita-image-store.s3.amazonaws.com/0/8868/7801654f-16c4-72a3-7e25-8d293a077615.png "IMG_0004.png")


### 頑張る方法

素直にエラーの通りに対応すればいける模様。
まず`ITMS-90474`エラーは`Device Orientation`は４つ全ての方向にチェックすればOK。
もちろん今までLandscapeとかに対応してなければレイアウトとかの対応もちゃんとする必要があります。

次の`ITMS-90475`エラーは`Launch Screen File`を新規作成すればOK。
「FIle」->「New」->「File...」->「iOS」->「User Interface」->「Launch Screen」から作成できるので、これを「Project」->「General」->「Launch Screen File」で設定します。

![Screen_Shot_2015-09-25_at_02_38_52.png](https://qiita-image-store.s3.amazonaws.com/0/8868/52722db7-326c-dc78-564e-8aad331e43d9.png "Screen_Shot_2015-09-25_at_02_38_52.png")

### 結果

気になって調べてたら対応できてしまったので頑張る方法でそのまま審査に出しました！
iPad Multitaskingで使う人はまだ少ないと思いますが、動くとけっこう嬉しいものですね:-)
iOS9 ソフトウェアキーボードで入力できない場合の対処（ショートカットが影響？）

# iOS9でソフトウェアキーボードが入力できない！
iOS9にアップしたら、自製アプリにてソフトウェアキーボードから入力できなくなりました。
ログやWEBにて検索しても関係しそうな情報がわからない状況です。
いろいろ必死こいて、いろいろ試したら、問題の原因と暫定対応が分かったので公開します。

## 原因
結論からいうと、iOS9の**キーボードのショートカット機能**が原因の模様です。


## 暫定対応
**設定** → **一般** →　**キーボード** にて
**英語** **ショートカット**
デフォルトONなのですが、これをOFFにしたら入力できるようになりました。

## 補足
ひとまず暫定対応でアプリが使えるようにはなったが、根本解決ではありません。
WEBにてこのような不具合情報は見当たらないので、アプリの作り方がよくない可能性があります。
いろいろ調べているがまだ分からない状況です。
何かご存知の方がいらっしゃればコメントくださいませ。
URL


**なぜクロージャ**
http://d.hatena.ne.jp/artgear/20120115/1326635158

**こわくないgit**
http://www.slideshare.net/kotas/git-15276118

**オブジェクト指向の基礎:php**
http://www.objective-php.net/basic/about

**小学生でもわかるRuby on Rails入門**
http://openbook4.me/projects/92/sections/485

**セレクタのサンプル**
http://www.detelu.com/blog/2011/11/jquery-selector-traversing/

**macのterminalでコピペ**
https://www.barasu.org/pc/mac/5598.html

**ページ表示高速化のあたりチェック
https://developers.google.com/speed/pagespeed/insights/

**cssで区切り線
http://www.nxworld.net/tips/hr-css-design.html

**かばん**
http://www.amazon.co.jp/gp/product/B00TYCYXNU/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00TYCYXNU&linkCode=as2&tag=asuma0e-22
バックグラウンド実行で時間短縮しよう！！


### はじめに

---

　久しぶりに研究したら、nohupコマンドと&での実行(バックグラウンド実行)方法を少し忘れていたので、やり方を残しておく。
　pythonで実行するけど、どの言語・実行でも可能。

### バックグラウンドで実行する。

---

#### まずは普通に

　普通の実行方法だと、

```zsh
$ python main.py
```

　これで実行すると、長い処理だと処理が終わるまで何もできなくなって困る。タブを開いてもいいけどめんどくさいし、sshで接続してる時とかは通信が途切れても大丈夫なようにしないといけない。
　その時に使うのが、nohupコマンドと&です。

```zsh
$ nohup python main.py &
```

　このように、nohupと&で挟むだけでバックエンドで実行できます。

#### 出力先を変える

　普通に実行すると、nohup.outというファイルに結果が溜まってしまうので、また実行した時とかにもどんどん溜まり、gitで扱う時とかもファイルが大きくなってめんどくさくなる。
　そこで、出力先を変更する。まずは出力先用ディレクトリを作ると便利。

```zsh
$ nohup python main.py > ~/output_log/out.log &
```

　これで、output_logというディレクトリにout.logというファイル名で保存される。2回目以降はファイル名をout2.logとか好きなように変更すれば良い。

### バックグラウンドの状況を確認する。

---

　バックグラウンドの実行状況が確認したい時はこのようにする。

```zsh
$ ps u
```

　これで、実行状況が確認できる。

### バックグラウンド実行している処理を止める

---

　バックグラウンドで実行している処理が長すぎて、これエラー何じゃない？？って時は、killコマンドでプロセスを殺します。

```zsh
$ kill -KILL PID
```

　PIDのところには、ps uで確認したプロセスIDを書けばOK!!

### 終わりに

---

　さくっと書いたけどこんな感じです。これで、処理を実行させて家に帰って、次の日の朝に確認ってできるので、効率的に作業できますね！

　エラーの出力先を指定するっていう方法もあるので、参考も見てみてください。

### 参考

---

- [ログアウトしてもバックグラウンド ジョブを継続する方法](http://www.codereading.com/nb/ignore-the-hangup-signal.html)
一定周期でコマンド実行

`while true; do date; sleep 1; done;`

一秒間隔で時刻表示。

`while true; date; do ls; sleep 1; done;`

一秒間隔で時刻とファイル表示。
ファイルの存在監視とか時間付きでログが取れるかもしれない。

`while true; echo '----------------------------------------------'; date; echo '----------------------------------------------'; do ls; sleep 1; done;`

見た目がちょっとあれなので、線入れてみた。
Ionicメモ


* 公式のチュートリアルをやった
* Ionic公式でTwitter APIが使えることを確認
* Yeomanジェネレーターをつかってアプリを構築


##チュートリアル

* <a href="http://ionicframework.com/getting-started/" target="_blank">Getting Started with Ionic</a>
    * 公式
* <a href="https://ccoenraets.github.io/ionic-tutorial/" target="_blank">Ionic Framework Tutorial</a>
    * 公式
* <a href="https://www.firebase.com/docs/web/libraries/ionic/guide.html" target="_blank">Using Ionic with Firebase - Firebase</a>
    * Firebase
* <a href="https://www.firebase.com/blog/2015-05-04-ionic-screencast.html" target="_blank">[Video] Build a Cross Platform App with Ionic - Firebase</a>
    * Firebaseブログ。いいビデオチュートリアル。
* <a href="https://www.airpair.com/angularjs/posts/build-a-real-time-hybrid-app-with-ionic-firebase" target="_blank">Build a Real Time Hybrid App with Ionic & Firebase</a>
    * チュートリアル。


##ユーザー認証
* <a href="http://www.htmlxprs.com/post/8/adding-social-authentication-to-ionic-app-with-firebase-tutorial" target="_blank">Adding Social Authentication to Ionic App With Firebase-Tutorial</a>
* <a href="https://www.firebase.com/blog/2014-07-25-ionic-simple-login.html" target="_blank">Using Firebase Simple Login with Ionic and PhoneGap - Firebase</a>


##Twitter Feed
* <a href="http://blog.ionic.io/displaying-the-twitter-feed-within-your-ionic-app/" target="_blank">Displaying the Twitter Feed within Your Ionic App</a>
    * Ionic公式Blog。Cordova pluginをつかってAuthも実装。


##ジェネレーター
* <a href="https://github.com/thaiat/generator-angular-famous-ionic" target="_blank">thaiat/generator-angular-famous-ionic</a>
    * 220 stars。`Famo.us`、歴史と現状がよくわからないが記事見た限りでは結構イケてる気がする。その他、テストがかけたりとフルスタック。
* <a href="https://github.com/diegonetto/generator-ionic" target="_blank">diegonetto/generator-ionic</a>
    * 1100 stars

##その他

* <a href="https://www.firebase.com/docs/web/libraries/angular/" target="_blank">AngularFire</a>
    * AngularFireのドキュメント
ActiveModelでコールバックを使いたい時のまとめ

ActiveModelでコールバックを使ったときに少し調べたことを、まとめてみました。

確認したバージョン

* rails 4.2.3

## after_create, before_createしたいとき
rails guidesにも書いてありました。
http://railsguides.jp/active_model_basics.html#callbacks%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB
`define_model_callbacks`でcallbackさせたいアクションを定義して、かつそのアクションのなかで`run_callbacks`を書いてやる必要があるらしい。`save`、`update`、`destroy`もこれでいけるみたい。

```ruby
class UserRegistraionForm
  include ActiveModel::Model
  
  define_model_callbacks :create
  
  before_create :some_action
  
  def create
    run_callbacks :create do
      # saveする動作を書く
    end
  end
  
  def some_action
  # callbackとして実行させたいこと
  end
  
end

```

## after_validation, before_validationしたいとき
こっちは調べてもなかなか出てこなかった…
こちらは上記の方法ではだめで別のモジュールをincludeしてやる必要が有りました。`****_validation`の場合は、`define_model_callbacks`も不要みたいです。

```ruby
class UserLoginForm
  include ActiveModel::Model
  include ActiveModel::Validations::Callbacks
  
  before_validation :some_action
 
  def some_action
  # callbackとして実行させたいこと
  end
  
end

```

小一時間ググりましたが、どっちもちゃんと公式を見たら書いてあった。ちゃんと調べようと思いました。
openFrameworksで3D空間上にライフゲームを描画する

イベント映像を制作する際になにかしらサイバーっぽいアニメーションを使いたかったため、
openFrameworksにて3D上に平面のライフゲームを描画させました。


```lifeGameObject.h

#pragma once
#include "ofMain.h"

class lifeGameObject {
public:
    void setup(ofPoint center, int xChellCount,int yChellCount);
    void update();
    void draw();
private:
    ofPoint center; //中央の座標
    int xChellCount; // 横のセル数
    int yChellCount;  // 縦のセル数
    bool aliveNow[100][100];
    bool aliveNext[100][100];
    ofPlanePrimitive plainPrimitive;
};
```

と宣言し、

```lifeGameObject.cpp
#include "lifeGameObject.h"

void lifeGameObject::setup(ofPoint _center, int _xChellCount,int _yChellCount) {
    center = _center;
    xChellCount = _xChellCount;
    yChellCount = _yChellCount;
    plainPrimitive = ofPlanePrimitive(8, 8, 2, 2);
    
    // ライフゲームの最初のデータはランダムとしました
    for (int i = 0; i < xChellCount; i++) {
        for (int j = 0; j < yChellCount; j++) {
            aliveNow[i][j] = ((int)ofRandom(2))%2;
            aliveNext[i][j] = false;
        }
    }
}

void lifeGameObject::update() {
    // 各セルに対し判定を行う
    for (int i = 0; i < xChellCount; i++) {
        for (int j = 0; j < yChellCount; j++) {
            // 自分の周囲の生存セル数を取得
            int aliveCount = (int)aliveNow[i-1][j-1] + (int)aliveNow[i-1][j] + (int)aliveNow[i-1][j+1] + (int)aliveNow[i][j-1] + (int)aliveNow[i][j+1] + (int)aliveNow[i+1][j-1] + (int)aliveNow[i+1][j] + (int)aliveNow[i+1][j+1];
            if (aliveNow[i][j] == true) { // 現在生存している場合
                if (aliveCount == 2 || aliveCount == 3) {
                    aliveNext[i][j] = true; // 2か3であれば生存
                    continue;
                }
            } else { // 現在死亡している場合
                if (aliveCount == 3) { // 3であれば誕生
                    aliveNext[i][j] = true;
                    continue;
                }
            }
            aliveNext[i][j] = false;
        }
    }
    for (int i = 0; i < xChellCount; i++) {
        for (int j = 0; j < yChellCount; j++) {
            aliveNow[i][j] = aliveNext[i][j];
        }
    }
}

void lifeGameObject::draw() {
    ofSetColor(255);
    for (int i = 0; i < xChellCount; i++) {
        int xPosition = center.x + (i-xChellCount/2) * 10;
        for (int j = 0; j < yChellCount; j++) {
            int yPosition = center.y + (j-yChellCount/2) * 10;
            if (aliveNow[i][j] == true) {
                plainPrimitive.setPosition(xPosition, yPosition, center.z);
                plainPrimitive.draw();
            }
        }
    }
}
```

あとは呼び出し元から ` lifeGameObjects.setup(ofPoint(0,0,0), 100, 100); ` といった形で宣言してやり、updateとdrawを適宜呼び出せば動きます。

![スクリーンショット 2015-09-25 12.01.27.png](https://qiita-image-store.s3.amazonaws.com/0/10283/4aa9f615-9125-9fcd-5fca-f21281aa2cce.png)


C++とoFへの理解がまだ薄いせいか、かなり冗長なコードとなってしまいました。
rails generate による生成物

```
$ rails generate model sample
      invoke  active_record
      create    db/migrate/20150925000957_create_samples.rb
      create    app/models/sample.rb
```
モデルの生成。
マイグレーションがセットで付いてくる。モデルだけ生成するオプションはない。

```
$ rails generate controller sample
      create  app/controllers/sample_controller.rb
      invoke  erb
      create    app/views/sample
      invoke  helper
      create    app/helpers/sample_helper.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/sample.coffee
      invoke    scss
```
コントローラの生成。
ビューがセットで付いてくるが、アクションを指定しないと空ディレクトリになるので注意。

ビューのみの生成はできない。

```
$ rails generate scaffold sample
      invoke  active_record
      create    db/migrate/20150925001300_create_samples.rb
      create    app/models/sample.rb
      invoke  resource_route
       route    resources :samples
      invoke  responders_controller
      create    app/controllers/samples_controller.rb
      invoke    erb
      create      app/views/samples
      create      app/views/samples/index.html.erb
      create      app/views/samples/edit.html.erb
      create      app/views/samples/show.html.erb
      create      app/views/samples/new.html.erb
      create      app/views/samples/_form.html.erb
      invoke    helper
      create      app/helpers/samples_helper.rb
      invoke    jbuilder
      create      app/views/samples/index.json.jbuilder
      create      app/views/samples/show.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/samples.coffee
      invoke    scss
```
全部生成。
JMeterのメモ

この記事のJMeterは ver 2.12。
## テストを一件ずつ実行する
１つのJMeterスクリプトファイルにスレッドグループを複数個並べると、JMeterは２，３個のスレッドグループを並行して実行する。このとき、例えば、ログイン/ログアウトの評価やコンテンツの参照/削除が同時に走ってしまうと情報に不整合が生じ、テストが失敗することがある。
そこで、「テスト計画」の「各スレッドグループを別々に実行」にチェックを入れると、スレッドグループを１個ずつ順番に実行してくれるようになる。
## エラーを期待するテスト
JMeterのステップは標準では4xxや5xxのレスポンスコードをエラー(レッド)として扱う。しかし、正常系評価ではなく異常系の評価をしたい場合、4xxのレスポンスでグリーンになって欲しいにも関わらずレッドとして表示されてしまい評価結果が見づらくなることがある。そこで4xxや5xx系レスポンスをグリーンとして評価するにはHTTPリクエストにつけた「アサーション」の「ignore status」にチェックを入れると、ひとまず全てのレスポンスをグリーンとして扱ってくれる。その上でアサーションでレスポンスの評価を行うとアサーションの成功/失敗に基づき結果をグリーン/レッドに色分けしてくれる。
## エラーだけを表示する
「結果を表で表示」を追加すると、各ステップでの評価を表示してくれる。しかし、インテグレーションを行う上でグリーンが多く並ぶことよりも、レッドが０個か１個以上なのかが重要なので、レッドだけ表示してくれればよい。そこで「ログエラーのみ」にチェックを入れるとレッドのみを結果に表示してくれるようになる。
## ￥マークを含む文字列
\を含んだ文字列をリクエストしたい場合、JMeterでは\をエスケープして使用しなければならないため、"\\"とする。また、サーバー
## アサーションで正規表現を使う
"dateTimeZone":"2016:01:01 12:34:56+09:00"というレスポンスがYYYY:MM:DD hh:mm:ss+mm:ssのフォーマットになっているか確認するには、"(\d{4}):(\d{2}):(\d{2}) (\d{2}):(\d{2}):(\d{2})\+(\d{2}):(\d{2})"とする。タイムゾーンの＋にはエスケープ処理が必要。