OmniAICreator/Qiita-1.07M huggingface dataset:
SwiftのPlaygroundでマンデルブロ集合

![Screen Shot 2015-09-29 at 4.45.52 AM.png](https://qiita-image-store.s3.amazonaws.com/0/19541/06dca75f-cd17-421e-7cb8-b8b39fa80bb9.png)
以前 https://developer.apple.com/swift/blog/?id=26 で紹介されていた
マンデルブロ集合がXCode7で動かなくなったのでSwiftの勉強がてらに作ってみます。

### 作り方
1.XCode7を立ち上げてPlaygroundをiOSの設定で作成する。
2.Sourcesフォルダにswiftファイルを適当に作成して以下を貼り付ける。

```swift:mandelbrot.swift
import UIKit

let resolution = 400
let iteration = 300

struct vec2{
  var x: Double
  var y: Double
 
  func length() -> Double{
   return sqrt(pow(x,2)+pow(y,2))
  }
}

func + (left:vec2,right:vec2) -> vec2{
  return vec2(x:(left.x + right.x),y:(left.y + right.y))
}

struct Result{
  var div: Bool//発散したかどうか
  var elapsed: Int?//発散した場合の計算回数
}

/// 結果格納クラス
public class ResultArray{
  var array: [Result]
  init(){
    self.array = Array(
      count:resolution * resolution,
      repeatedValue:Result(div: false,elapsed: nil)
    )
  }
 
  func indexIsValid(x:Int,y:Int)->Bool{
    return x>=0 && x<resolution && y>=0 && y<resolution
  }
  
  subscript(x:Int,y:Int) -> Result{
    get{
      assert(indexIsValid(x, y:y))
      return array[x * resolution + y]
    }
    set{
      assert(indexIsValid(x, y:y))
      array[x * resolution + y] = newValue
    }
  }
}

/// 複素数座標上の発散を計算
/// - parameter c :複素数座標
/// - returns: 発散の計算結果
func calcDiv(c:vec2) -> Result{
  var result:Result = Result(div:false,elapsed:nil)
  var z = vec2(x:0.0,y:0.0)
  for i in 0..<iteration{
    let nz = vec2(
      x: pow(z.x,2.0) - pow(z.y,2.0),
      y: 2.0 * z.x * z.y
    )
    z = nz + c
    if z.length() > 2.0{
      result = Result(div: true, elapsed: i)
      break
    }
  }
  return result
}

/// マンデルブロ集合の計算
/// - returns: 計算結果
public func calc() -> ResultArray{
  let result=ResultArray()
  for i in 0..<resolution{
    for j in 0..<resolution{
      let c = vec2(
        x: Double(i)/Double(resolution)*4.0-2.0,
        y: (Double(j)/Double(resolution)*4.0-2.0) * (-1)
      )
      result[i,j] = calcDiv(c)
    }
  }
  return result
}

/// マンデルブロ集合の描画
/// - parameters result: 計算結果
/// - returns : 描画データ
public func draw(result:ResultArray) -> UIView{
  let size = CGSize(width: resolution, height: resolution)
  let view = UIView(frame: CGRect(origin:CGPointZero, size: size))
  view.backgroundColor=UIColor(white:0.9,alpha:1.0)
  UIGraphicsBeginImageContextWithOptions(size, false,0)
  for i in 0..<resolution{
    for j in 0..<resolution{
      let rect = CGRectMake(CGFloat(i * 1), CGFloat(j * 1), 1, 1)
      let component: [CGFloat] = {
        if(result[i,j].div){
          let e: CGFloat = CGFloat(Float(result[i,j].elapsed!)*2.0/Float(iteration))
          return [1.0,1.0-e,1.0-e,1.0]
        }else{
          return [0.0,0.0,0.0,1.0]
        }
      }()
      let color = CGColorCreate(CGColorSpaceCreateDeviceRGB(), component)!
      UIColor(CGColor: color).setFill()
      UIRectFill(rect)
    }
  }
  let image = UIGraphicsGetImageFromCurrentImageContext().CGImage
  view.layer.contents = image
  return view
}
```
3.Playgroundのソースに以下を貼り付ける

```swift:Content.swift
//: ## Mandelbrot Set
let result = calc()
draw(result)
```

4.エディタの右の二重丸を押してから少し待つと絵が出てきます。
拡張子が.cssなファイルでもgulpを使ってSprocketsに無理やりasset pathを解決させる

## 背景
gulpでフロントエンドのビルドプロセスを組んでいるならSprocketsを通さなければ良い。
と言いたくても、なかなかそうすぐには完全移行はできず、ビルドしたものは`app/assets/`配下に出力して最終的にはSprocketsさんにどうにかしてもらっている日々を過ごしています。

そんな中でscssのビルドをgulpに移行したのですが、Sprocketsでは.cssファイルでは`image-url`や`asset-url`などのhelperメソッドが使えず、imageのasset_pathが解決できません。

とはいえ、せっかくフロント側でlibsass使ってビルドしたものを`.scss`拡張子に戻して、再びSprocketsのScss Processorにかけるなんてリソースの無駄すぎて嫌だ。(libsassに比べると、ruby-sass遅過ぎる。)

じゃあ無理やり`.css.erb`に変換するか。erbなら余計な処理もなくて軽いでしょ、というのがこの記事でやることです。

## 参考

Rails4のpath解決については以下の記事を見ていただけると分かると思います。

http://qiita.com/wadako111/items/03bc00d914e62243a511

この記事で紹介されてる解決法1を実施するために、scssではなくerbに無理やりgulpで変換します。

## コード

```gulpfile.coffee
gulp        = require 'gulp'
sass        = require 'gulp-sass'
replace     = require 'gulp-replace'
rename      = require 'gulp-rename'

gulp.path =
   app: 'front'
   dist: 'app/assets'

gulp.task 'build:sass', ->
  styleAssetPattern = /(?:image-url|asset-url)\(['"](.+)['"]\)/g
  replaceStyleAssetPath = (_full, key) -> "url(<%= asset_path '#{key}' %>)"

  gulp.src "#{@path.app}/stylesheets/**/*.scss"
    .pipe sass({includePaths: [ '.tmp/stylesheets' ]})
    .pipe replace(styleAssetPattern, replaceStyleAssetPath)
    .pipe rename({ extname: '.css.erb' })
    .pipe gulp.dest("#{@path.dist}/stylesheets")
```

## 解説

[gulp-replace](https://github.com/lazd/gulp-replace)で、正規表現を使って本来のscssファイルで使っていた`(image-url|asset-url)`の引数を抜き出して、erbで使える`asset_path`に変換しています。
その上で[gulp-rename](https://github.com/hparra/gulp-rename)で拡張子を`.css.erb`に変換します。

## 結果

### before

```front/stylesheets/test.scss
.test-image-url {
  background-image: image-url('image.png');
}


.test-asset-url {
  background-image: asset-url('asset.png');
}
```

### after

```app/assets/stylesheets/test.css.erb
.test-image-url {
  background-image: url(<%= asset_path 'image.png' %>); }

.test-asset-url {
  background-image: url(<%= asset_path 'asset.png' %>); }
```

## 実際早いの

.erbに一度するのは確かに無駄ですが、ある程度大きいコードベースならば、それを余裕でペイするぐらいにはlibsassは爆速です。(詳細なデータは取ってません、すみません。)
Sprocketsからの脱却を目指している身としては、また目標に一歩近づいて精神衛生的にも良いです。
NSTimer の fireって使えないとばっかり思ってたが、使用方法が違ってた。

# 発端

**[ NSTimer fire ];**

NSTimer で　fire は、再開と思ってたのですが、実際停止後に実行しても再開しないから　使えないじゃんと思ってたし、実際再開しなかった。（大きな勘違いなんですが・・・）
Google様に聞いてもそのように見える記事もあって、そうだと今まで思ってた。
ふと、再開なのになんで 名前がfire(発火する) なのかなと疑問になって、使用方法がちがう可能性があると思い実験してみました。

# 確認
環境
 Xcode7
 IOSシミュレーター

プログラム
```
>NSTimer *timerObj=nil;
-(void)startTimer
{
    if( !timerObj )
    {
        NSLog(@"timerStart");
        timerObj = [ NSTimer scheduledTimerWithTimeInterval:5.0f    //インターバル
                                                     target:self   　//ターゲット
                                                   selector:@selector(sysTimer:)
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　//メソッド
                                                   userInfo:nil     //パラメータ
                                                    repeats:YES     //繰り返し
                    ];
    }
}
-(void)stopTimer
{
    [timerObj invalidate];  //停止
    timerObj=nil;           //停止したらオブジェクト削除
}
-(void)sysTimer:(NSTimer*)timer
{
    NSLog(@"timerProc");
    //
    //  インターバルタイマー処理
    //
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"fire");
    [timerObj fire];
}
```
方法
　[self startTimer];実行後にTapする

実験１　repeatsパラメータをNOにして確認した（繰り返しなしの場合)　結果
・インターバルタイマー実行後 fire 実行しても何も起こらなかった。( ← Google様の言うとうり)
・インターバルタイマー実行前(5s内)fire 実行で　timerProcログがすぐ出てきた。( キター )

実験２　repeatsパラメータをYESにして確認した（繰り返しの場合)　結果

・インターバルタイマー実行後 fire 実行で　timerProcログがすぐ出てきた。( キター )
・インターバルタイマー実行タイミングでも　timerProcログがすぐ出てきた。( そーなんだ　)

# 結論
  fire は、インターバルタイマメソッドを即実行する（発火）メソッドである。
  再開でなく　タイマーインスタンスが有効期間内で使用するものである。

# まとめ
  **repeatsパラメータがNOの場合**
　通常は、
>    ![b.png](https://qiita-image-store.s3.amazonaws.com/0/75082/8323d509-b757-8aa8-dc9a-5b7b0c6ed39a.png)　
`指定インターバル時間後にメソッドが実行されます。`

　指定インターバル時間以内でfireした場合
>![b.png](https://qiita-image-store.s3.amazonaws.com/0/75082/b2cabbdc-a5e7-3ea6-e42c-aa30aa24d884.png) 
`即メソッド実行します。`
`注意：（指定インターバル時間ではメソッドの実行はしない）`

  **repeatsパラメータがYESの場合**
　通常は、
>![a.png](https://qiita-image-store.s3.amazonaws.com/0/75082/b5ba6793-d92b-4605-3284-cf5c49e54ae4.png) 
`指定インターバル時間毎にメソッドが実行されます。`

　指定インターバル時間以内でfireした場合
>![a.png](https://qiita-image-store.s3.amazonaws.com/0/75082/f918af46-7ba4-29c6-364c-fcea09c43470.png)
`即メソッド実行しますが、指定インターバル時間毎にもメソッド実行します。
`実行前倒しになるのかなと思ったが、そうではないらしい


これだから　fire　なのね。納得！！！
invalidateは、無効だから停止というよりも解放に近い意味合いなんだ。だから再設定しないと動かないんだな
なるなる
Groovyでクロージャにメソッドを付与する

##やりたいこと

Groovyで、
**（擬似）連想配列やクロージャに対して、プロパティやメソッドを設定したい**、
**事実上そのように見える書き方をしたい**
と思うことがあります。今回は後者（クロージャの拡張）の話です。

※ちなみに前者については、GroovyのMapは、```mapObj['key']```という連想配列形式でアクセスできるので、Map継承クラスを作れば好きにいじれます。

今回実現したいのはこういう書式です。  

```groovy
sigma(0.3) // シグモイド関数の結果が返る
sigma.d(0.3) // シグモイド関数の一次導関数の結果が返る
```

もちろんこういう書式にせずに、単純に[sigma関数](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%B0%E3%83%A2%E3%82%A4%E3%83%89%E9%96%A2%E6%95%B0)とsigmad関数を別々に実装すれば済む話ですが、
設計上sigmaという一つの入れ物に関数本体をまとめたいし、かといって本関数と導関数を並列において、
```sigma.original(0.3)```
```sigma.derivative(0.3)```
みたいな仕様はどうも面倒です。sigma関数はよく使うので、シンプルにsigma()で呼びたいです。

##実装例

関数定義：
 
```groovy
class Sigma extends Closure{

    Sigma(Object owner) {
        super(null)
    }

    public double d(double val){
        // 導関数が元関数の式になるのがシグモイド関数の特徴
        doCall(val) * (1 - doCall(val))
    }

    @Override
    Object doCall(Object val) {
        1 / (1 + Math.exp(- val))
    }
}
```

ユーティリティクラスがstaticに提供：

```groovy
class Util{
    static sigma = new Sigma()
}
```
利用する側：

```groovy
import static Util.*
sigma(0.3)
sigma.d(0.3)
```

Closureクラスにはcall()もあり、正しい継承の方法がよくわかりませんが、とりあえず実現はできました。
一人前のClosure継承クラスとするのも大げさな気がしたので、できれば無名クラスとして、

```groovy
class Util{
    static sigma = new Closure(){

        public double d(double val){
            doCall(val) * (1 - doCall(val))
        }

        @Override
        Object doCall(Object val) {
            1 / (1 + Math.exp(- val))
        }
    }
}
```

としたかったのですが、無名クラスだとコンストラクタを定義できない関係でエラーになったのであきらめました。**→これは単に自分がアホだっただけで、普通に無名クラスに対してコンストラクタ引数をセットすれば良い話でした（コメント欄でコード付きで指摘して頂きました）**
上記はSigmaクロージャの例で、書き方の好みと、関連ソースを囲い込む（導関数が元関数を使うため）メリットしかありませんが、もっとクロージャを生かしたクラスも作れると思います。

（例）データの正規化を担当する[Normalizerクロージャ](https://github.com/hitokun-s/gratin/blob/master/src/main/groovy/gratin/util/Normalizer.groovy)

```groovy
def n = new Normalizer([
   [1,2,3],[4,5,6],[7,8,9],... // コンストラクタ内でカラムごとにデータを正規化して、データと正規化情報（平均と偏差）を内部で保持
])
classifier.classify(n([1,3,5]) // テストしたいサンプルデータは、正規化してから分類器にかける。n()を呪文化する。
```
※Normalizerを普通のクラスにした場合のイメージ

```groovy
def n = new Normalizer([
   [1,2,3],[4,5,6],[7,8,9],... 
])
classifier.classify(n.process([1,3,5])) // ちゃんと専用メソッドを用意する
```

まあ要は、シグモイド関数とか導関数とか正規化関数とか、「決まり切った手順にデータを通す」のに、「専用クラスにしてメソッドを呼ぶ」のは何か大げさな気がするので、ミニクラス的にクロージャを使いたかった、ということです。
BPM PROCESSMAKER

1,BPMによるシステム作成 :sunny: 

1,docker ファイル作成

4,/etc/rc.d/init.d/mysqld restart が動かない対処
echo "NETWORKING=yes" >/etc/sysconfig/network

1,業務フローの作成
2,GOOGLESPREDによるWBS
  フローとＷＢＳを統一する。
3.BPM内に必要なシステムをそろえる
　⇒全てＷＥＢ上で操作できるように
4.登録自体はマルチ登録
　⇒ＷＥＢＳＯＫＥＴでの通信登録

■PROCESSMAKERGRID定義
１、backbone.js で書き出されるGRIDのクリックファンクションで値を設定したい。

JQUERYで初期実装
jQuery("#form\\[employeeRes\\]\\[1\\]\\[NAME\\]").click(function(){
            alert(this.value);
        });

■サンプルプロセスの説明
1,プロセスメーカー　トライアル申し込み
http://www.processmaker.com/
LeaveTaken by Empoyee

■ワークスペースの作成の仕方
【iOS9】プロビジョニングファイルなしで実機動作させるメモ

iOS9でプロビジョニングファイルを使用せず実機動作させた時のメモ
# 1.条件
- Xcode Version 7.0 (7A220)
- iOS 9.0.1

# 2.手順
2-1.適当なプロジェクトを作って、実機を指定して動作させると、以下のエラーメッセージが表示されます。

**Could Not launch "プロジェクト名"
process launch failed: Security**

![スクリーンショット-2015-09-24-16.59.png](https://qiita-image-store.s3.amazonaws.com/0/82043/d09a1609-91dc-f034-9265-59639b273cb2.png)

2-2.Xcodeではエラーがでるものの、実機のホーム画面にアプリがインストールされています。
![IMG_1695.PNG](https://qiita-image-store.s3.amazonaws.com/0/82043/e8baa177-b5c0-87be-e75b-79b4b356aea8.png)

2-3.インストールされたアプリをタップすると以下のメッセージがでます。
![IMG_1692.PNG](https://qiita-image-store.s3.amazonaws.com/0/82043/e432937a-76f4-b6fd-8345-bbcdea37fd39.png)

2-4.[設定] -> [一般] -> [プロファイル] -> [ディベロッパAPP]のAppleIDを選択します。
![IMG_1701.PNG](https://qiita-image-store.s3.amazonaws.com/0/82043/ff71bfd1-b6c2-5707-1a38-70dcf91a170d.png)

2-5.プロファイルの画面で"AppleID"を信頼の部分を選択します。
![IMG_1693.PNG](https://qiita-image-store.s3.amazonaws.com/0/82043/c628886d-f8f1-2c12-291d-228059c5ae98.png)

2-6.ダイヤログが出るので[信頼]を選択します。
![IMG_1694.PNG](https://qiita-image-store.s3.amazonaws.com/0/82043/27e015e2-1a48-f863-e4c8-de6663ae57e8.png)

2-7.プロファイル画面に戻ります。
![IMG_1702.PNG](https://qiita-image-store.s3.amazonaws.com/0/82043/95e94e56-135c-175d-1946-859edaf51c4a.png)

2-8.ホーム画面に戻り、アプリのアイコンを再度選択すると動作することが確認できます。
![IMG_1703.PNG](https://qiita-image-store.s3.amazonaws.com/0/82043/89a3f00d-312e-f65e-73bf-278af5eb2c44.png)

以上
UnityのXcodeApiでBitCodeをNOにする

Xcode7が勝手にインストールされ、
UnityでiOSのビルドをするときにBitCode絡みでエラーが出るなら、
やはりスクリプトで自動的にBitCodeEnableをNOにしたいよね、という時の話。

```C#:PostprocessBuildPlayer
public class PostprocessBuildPlayer : MonoBehaviour
{
	[PostProcessBuild]
	public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
	{
		if (buildTarget == BuildTarget.iOS) {
			string projPath = PBXProject.GetPBXProjectPath (path);
			PBXProject proj = new PBXProject ();
			proj.ReadFromString (File.ReadAllText (projPath));
			string target = proj.TargetGuidByName ("Unity-iPhone");

			// これでBitCodeEnableをNOに
			proj.SetBuildProperty(target, "ENABLE_BITCODE", "NO");

			File.WriteAllText(projPath, proj.WriteToString());
		}
	}
}
```

というだけの備忘録
複数の画像をループ処理でシーンに追加する

簡単なことなのに，探してもでてこず悩んでしまった事案なのでメモ

ローカルにある画像ファイルをfor文でループさせてたくさん表示させる時のコードの書き方です


```js
for(var i in array){  // arrayには画像URLなどが入っている
    var imageUrl = array[i].imageURL;
    var texture = THREE.ImageUtils.loadTexture(imageUrl);
    var materialImg = new THREE.SpriteMaterial({map: texture, color: 0xFFFFFF});
    var w = 416, h = 227.5;
    spriteImage[i] = new THREE.Sprite(materialImg);
    scene.add(spriteImage[i]);
}
```

よく落ちているコードは，textureのcallback関数部分にマテリアルの定義とかシーンへの追加が書いてあるんですが，それだと，for文が終了した後に実行されてしまうので，この書き方でないと，1枚しか画像が表示されません．

callbackじゃないとこに書けばいいだけなのに，中々思いつかなかったのがなんとも悔しいのでメモです．

これだとうまく動かないこととかあるのだろうか...もしそこら辺知っていらっしゃる方がいたらコメントにてご教示いただければと思います．
octokitで新規ブランチを切る


octokitを使用してgithub上で新規リポジトリを切る方法のメモ。

```branch.rb
rep_name = 'repository name'
ref_name = 'heads/master'
branch = 'heads/branch name'

client = Octokit::Client.new(login: 'user name', password: 'password')
repo = client.repositories.find{|r| r.name == rep_name}
ret = client.ref(repo.full_name, ref_name)
client.create_ref(repo.full_name, branch, ret.object.sha)
```

octokitでローカルのリポジトリでcheckoutする方法があれば知りたいところ。
（多分なさそうだなぁ）
backlogでsubversionを使った際の記録

backlogでsubversionを使った際の記録

Basic認証がかかったチェックアウト

```
svn co http://<url>/<repo> <local_dir> --username user --password password
```
参考 [認証がかかったチェックアウト方法 (stackoverflow)](http://stackoverflow.com/questions/5104282/how-do-i-checkout-svn-with-http-authentication-on-mac)

ファイルを変更して、コミットするとそのままサーバーに反映される。
```
git commit -m メッセージ
```
rvmを使っているとsoftlayer_apiが動かない？


[rvm 環境下の ruby では softlayer_api が動作しない件](http://qiita.com/MahoTakara/items/ebb191eb2bd8f3899d11)

・・・んー。それは無いと思います。
ということで、ちょっと気になったので試してみます。

## 稼働環境
元記事にはLinuxとしか書かれていないため、どのディストリビューションなのかわかりません。

今回の検証ではUbuntu 14.04 LTSにしました。
VM作成後にapt-get updateとupgradeで更新しておきます。

## rvmのインストール
rvmのインストール手順はGo Railsの手順をベースにしました。
https://gorails.com/setup/ubuntu/14.04

以下のコマンドを順番に実行していきます。

```bash
sudo apt-get install libgdbm-dev libncurses5-dev automake libtool bison libffi-dev
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
curl -L https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
rvm install 2.2.3
rvm use 2.2.3 --default
ruby -v
echo "gem: --no-ri --no-rdoc" > ~/.gemrc
```

## softlayer_apiを入れる

```
pakue@ubunturvm:~$ gem install softlayer_api
Fetching: configparser-0.1.4.gem (100%)
Successfully installed configparser-0.1.4
Fetching: softlayer_api-3.1.1.gem (100%)
Successfully installed softlayer_api-3.1.1
2 gems installed
```

はい、入りました。

## 同じソースを動かしてみる

動かないとなっていたソースはこちら。

```ruby
#!/usr/bin/env ruby 
# encoding: utf-8
#
require 'rubygems'
require 'softlayer_api'
 
USERNAME = '*********'
API_KEY = '************************************************'

client = SoftLayer::Client.new(username: USERNAME, api_key: API_KEY)
resp = client['Account'].getObject
p resp['firstName']
```

１〜４行目は不要なので５行目からでファイルを作成し、SoftLayerのポータルからAPI_KEYを取得して実行します。

```
pakue@ubunturvm:~$ ruby rvmcheck.rb 
"Yuya"
```

ばっちり動きます。
なお、１〜４行目を追加して確認しましたが、こちらも問題無しです。

ということで、rvmでもrbenvでも動きます。
Android Studioのエミュレータ起動時に「emulator: Failed to sync vcpu reg emulator: Failed to sync HAX vcpu context」が出る

# 環境
* OS X Yosemite : 10.10.5
* Android Studio : 1.3.2

# 原因
いろいろあるようだが、自分の場合はVirtual boxの仮想マシンが原因だった模様。

Tools > Android > AVD Manager から 「Nexus 5 API 23 x86」の再生ボタンを押すと以下のメッセージがコンソールに表示され。エミュレータは起動しない。

```
HAXM is working and emulator runs in fast virt mode
emulator: Failed to sync vcpu reg
emulator: Failed to sync HAX vcpu context
```

# 対処
あげていたのは、boot2dockerなので、以下のとおり停止したら無事エミュレータが起動した。

```
$ boot2docker down
```

# 参考
以下にいろいろ書かれている。

http://stackoverflow.com/questions/17024538/how-do-i-fix-failed-to-sync-vcpu-reg-error
ref付引数を持つメソッドをInvokeで呼出し結果をもらうには

# やりたいこと。
こんなクラスがあったとして。。。

```csharp
static class Klass1
{
    static public void Method1(string in_str, ref string out_str)
    {
        out_str = "<" + in_str + ">";
    }
}
```

こういうことを MethodInfo.Invokeを使ってやりたい。

```csharp
class MyClass
{
    static public void Run()
    {
        string out_str = null;
        Klass1.Method1("test", ref out_str);
        Console.WriteLine(out_str);　// 出力 : <test>
    }
}
```

# 初めの案(失敗)
こんな感じ

```csharp
static void Test1()
{
    string out_str = null;
    Type t = typeof(Klass1);
    var m = t.GetMethod("Method1");
    m.Invoke(t, new object { ref out_str } ); // ref は無効です。のエラーが発生。

    Console.WriteLine(out_str);
}
```

# 二個目(失敗)

```csharp
static void Test1()
{
    string out_str = null;
    Type t = typeof(Klass1);
    var m = t.GetMethod("Method1");
    m.Invoke(t, new object { out_str } ); // ref を取る

    Console.WriteLine(out_str); // null
```

# 三個目(成功)

ここ(http://stackoverflow.com/questions/8779731/how-to-pass-a-parameter-as-a-reference-with-methodinfo-invoke) を参考にしたらいけた。

```csharp
static void Test1()
{
    var obj = new object[] { "test", null }; // オブジェクト配列を先に作成。ref変数部分 は nullにする。
    Type t = typeof(Klass1);
    var m = t.GetMethod("Method1");
    m.Invoke(t, obj); // 作成したオブジェクト配列を渡す。

    Console.WriteLine(obj[1]); // ref変数部分の配列インデックスを指定すると値が取れる。
    Console.ReadLine();
}
```

# まとめ
単純なref変数の値をInvokeを使って取り出すことができました。複雑なケースがどうなるのはは不明なので、そのあたりは今後の課題というところでしょうか。
【R】dummiesパッケージでダミー変数を生成する

[過去に発表した内容](http://www.slideshare.net/weda654/dummies-38555423)の補足として`dummy.data.frame`のオプションについてのメモ。

```r
require(dummies)

data("CO2")
str(CO2)  # データの確認
```

```
CO2データは以下のように順序付き因子、因子、数値で構成されている
 $ Plant    : Ord.factor w/ 12 levels "Qn1"<"Qn2"<"Qn3"<..: 1 1 1 1 1 1 1 2 2 2 ...
 $ Type     : Factor w/ 2 levels "Quebec","Mississippi": 1 1 1 1 1 1 1 1 1 1 ...
 $ Treatment: Factor w/ 2 levels "nonchilled","chilled": 1 1 1 1 1 1 1 1 1 1 ...
 $ conc     : num  95 175 250 350 500 675 1000 95 175 250 ...
 $ uptake   : num  16 30.4 34.8 37.2 35.3 39.2 39.7 13.6 27.3 37.1 ...
```

CO2データでダミー変数を生成する

```r
# そのままでは順序付き因子型は自動変換されない
str(dummy.data.frame(CO2, sep = "_"))

# ord.factorとfactorを対象に変換
str(dummy.data.frame(CO2, sep = "_", dummy.classes = c("factor","ordered")))  

# カラムを指定してダミー変数化
str(dummy.data.frame(CO2, sep = "_", names = c("Plant", "Type")))
```
ffmpegとimageMagickを使ってmp4からいい感じにgifに変換する


Androidのスクリーンの動画をmp4からgifに変換する方法について。[@kgmyshin](https://twitter.com/kgmyshin)さんに以下のコマンドを教えていただいたのですが、ちょっと調整した点があったので、メモ。

![Screen Shot 2015-09-29 at 00.15.13.png](https://qiita-image-store.s3.amazonaws.com/0/39433/bde5da22-6781-2bc6-3882-50254565f36b.png "Screen Shot 2015-09-29 at 00.15.13.png")


https://gist.github.com/kgmyshin/6a7742fe1e04e25c4d21


```shellscript
mkdir ________work
ffmpeg -i $0 -an -r 15 ________work/%04d.png
convert  work/*.png __mov.gif
rm -r ________work

```

#事前準備
[imagemagick](http://www.imagemagick.org/script/index.php)と[ffmpeg](https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images)を導入します。いずれもhome brewからインストールできます。


```shellscript
brew install ffmpeg
brew install ImageMagick
```

簡単ですね。

#ffmpeg(mp4 -> png)
まず、ffmpegの以下のコマンドですが

```
ffmpeg -i $0 -an -r 15 ________work/%04d.png
```

mp4を画面ごとのpngにしてくれます。

* -i のところでファイル名(シェルスクリプトで実行しない場合はファイル名, スクリプトで実行する場合は引数指定)
* -an でオーディオは録音しない
* -r でフレームレートを指定します。上なら　15frames/secですね。 
* %04d.pngの部分は 0000.pngという風にナンバリングします。  

27秒の動画を変換したので420枚程のpngとなりました。

```shellscript
ffmpeg -i sample.mp4 -an -r 15 %04d.png
```


#imagemagick(png -> mp4)

```shellscript
convert  work/*.png __mov.gif
```

上記を実行すると、pngが繋げられてgifに変換されますが、ここで一つ問題が発生します。ファイルサイズがデカイ。
6MBのmp4を変換した所、43MBとなってしまいました。
![Screen Shot 2015-09-29 at 00.05.03.png](https://qiita-image-store.s3.amazonaws.com/0/39433/f81ae851-73f4-3a62-d812-c79af15e9a2a.png "Screen Shot 2015-09-29 at 00.05.03.png")


これはいけてないので、pngのサイズを小さくしてみます。

###圧縮率の指定
まずは圧縮率を指定してみました。`-resize`はpngを圧縮する時に指定するコマンドです。2桁ですが、10の位の部分が圧縮率を指定しているようです。とりあえず20を指定してみました。  

```shellscript
convert *.png -resize 20 output_%04d.png
convert output_*.png kekka.gif
```

すると、以下の様に完全にぼやけたgifになってしまいました。
![debot_3.gif](https://qiita-image-store.s3.amazonaws.com/0/39433/c8d2ed4f-644e-7abf-178c-d2cd81ce3fcd.gif "debot_3.gif")

###サイズの指定
次にサイズを変更してみました。先ほどの `-resize` を利用しますが、今度は%をつけます。これでサイズが変更されます。

```shellscript
convert *.png -resize 20% output_%04d.png
convert output_*.png kekka.gif
```

この結果、元動画くらいくっきりgifでありながら、サイズは1/10までサイズダウンできました。

![Screen Shot 2015-09-29 at 00.10.56.png](https://qiita-image-store.s3.amazonaws.com/0/39433/e9d27a88-c80d-2bce-60a5-9bac6c9b570c.png "Screen Shot 2015-09-29 at 00.10.56.png")

#最終的なコマンド
```shellscript
ffmpeg -i sample.mp4 -an -r 15 %04d.png
convert *.png -resize 20% output_%04d.png
convert output_*.png kekka.gif 
```
Mithril + Kefir で FRP する


# 紹介する package

[Mithril](https://github.com/lhorie/mithril.js)
[kefir](https://github.com/rpominov/kefir)

# なにをしたかったのか

[元ネタ](https://github.com/oren/mithril-frp)

mithril と kefir で 巷で話題の FRP を体感してみました.

### Mithril

"A Javascript Framework for Building Brilliant Applications" だそうです.

JS から virtual な dom を生成するらしいです. 他の選択肢として React とかあります.

API がシンプルな割に [routing](http://mithril.js.org/mithril.route.html#reading-current-route), [http request](http://mithril.js.org/mithril.request.html), [promise](http://mithril.js.org/mithril.deferred.html) 等の気配りも備えるニクいやつです.
ファイルサイズが小さいのも選びたくなる一因です.

シンプルなゆえにコンポーネントの生死とか描画のタイミングとかpropsの差分判定とか適当な感じがします.
あと React べったりなライブラリも多いので, そこらへんの恩恵はうけれない気がします.

### Kefir

"Kefir — is an Reactive Programming library for JavaScript inspired by Bacon.js and RxJS with focus on high performance and low memory usage." だそうです.

リアクティブにすごいことをしてくれるライブラリです. 他の選択肢として RxJS とかあります.
こちらも API がそこそこシンプルで軽量なのがウリらしいですが, 他のライブラリを触ったことないのでよくわかりません.
ファイルサイズが他と比べて小さいのが最高です.

こちらの記事で詳しい比較をされてます.
[ECMAScript7を見据えた、JavaScript(TypeScript)で使えるFRPライブラリの比較調査](http://qiita.com/kondei/items/17e5d4867a0652911e52)

# やってみた

```js
import {interval, fromEvents, combine, merge} from 'kefir';
import m from 'mithril';
import {EventEmitter} from 'events';
```

必要なものを読み込みます

```js
const button = new EventEmitter();
const buttonHandler = (e) => button.emit('data', e);
const buttonStream = fromEvents(button, 'data');
```

ボタンのハンドラと押されたことを表すストリームを用意します.

このやり方は[アンチパターン](https://github.com/rpominov/kefir/issues/88)っぽいので良くないかもですが, jsx と混ぜにくいので採用してます.


```js
const counterStream = merge([
  interval(1000, 1),
  buttonStream.map(() => -1).toProperty(() => 0),
]).scan((curr, next) => curr + next, 0);
```

一秒ごとに +1 増やすストリーム と ボタンが押されたら -1 するストリームを合成します.

```js
  function createView (counter) {
    return (<button onclick={buttonHandler}> {counter} </button>);
  }
  const viewStream = counterStream.map(createView);
```

上記のストリームの結果をうけて, ビューを返すストリームを用意します.

```js
const Root = {
  controller () {
    this.currView = m.prop([]);
    viewStream.onValue((nextView) => {
      this.currView(nextView);
      m.redraw();
    });
  },
  view (controller) {
    return controller.currView();
  }
}

m.mount(document.body, (<Root />));
```

ストリームの結果を受けるたびに, redraw するコンポーネントを作って読み込ませます.

```sh
npm install browserify babelify babel-plugin-mjsx mithril kefir
browserify -t [ babelify --stage 0 --plugins mjsx ] qiita.js -o bundle.js
```

必要なパッケージを読み込んでビルドすれば完成です.
wkhtmltoimageでテキストとhtmlを画像に変換する

### インストール

* http://wkhtmltopdf.org/downloads.html
* CentOS6にver 0.12.2.1をインストール。wkhtmltoimageとwkhtmltopdf両方インストールされる

```
sudo wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm
# インストールしないと「error: Failed dependencies」
sudo yum install xorg-x11-fonts-75dpi.noarch
sudo rpm -ivh wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm
```

### ローカルのhtmlファイルをjpgに変換
```
wkhtmltoimage input.html output.jpg
```
 * 他にもtif, png, bmpも可能（gifはエラーになった）

### ローカルのtextファイルをjpgに変換
```
wkhtmltoimage input.txt output.jpg
```

### URLを指定して変換
```
wkhtmltoimage http://google.com google.jpg
```

### URLを指定して変換(proxy指定)
```
wkhtmltoimage --proxy http://user:password@proxyhost.com https://www.google.com google.jpg
```

### 文字コードを指定(--encoding)
```
wkhtmltoimage --encoding shift_jis input.txt output.jpg
```

### サイズを指定(--height, --width)
```
wkhtmltoimage --height 100 --width 50 input.txt output.jpg
```
 * 拡大・縮小はしないので、小さいサイズだと切れる場合がある

### フォントサイズを指定(--minimum-font-size)
```
wkhtmltoimage --minimum-font-size 30 input.txt output.jpg
```
 * minimumはあるけどmaxは無い模様

### javascriptを無効(--disable-javascript)
```
wkhtmltoimage --disable-javascript http://google.com google.jpg
```

## wkhtmltopdfにはあるが、wkhtmltoimageに無いパラメータ
*  --print-media-type
*  --page-size
*  --orientation
【Xcode7】プロジェクトをコンバートしたらAppDelegateがおかしくなった。

# Xcode7にバージョンアップして、無心でプロジェクトをコンバートしたらAppDelegateがおかしくなって困ったのでメモ。

## dict as [NSObject : AnyObject] が変換できないエラーになってしまった。
```swift:AppDelegate.swfit
            // Report any error we got.
            let dict = NSMutableDictionary()
            dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
            dict[NSLocalizedFailureReasonErrorKey] = failureReason
            dict[NSUnderlyingErrorKey] = error
            
            error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict as [NSObject : AnyObject])
```

## letをvarに変えて型を変更してみたらエラーが消えました。
```swift:AppDelegate.swfit
            // Report any error we got.
//            let dict = NSMutableDictionary()
            var dict = [String: AnyObject]()
            dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
            dict[NSLocalizedFailureReasonErrorKey] = failureReason
            dict[NSUnderlyingErrorKey] = error
            
//            error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict as [NSObject : AnyObject])
            error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
```
Long Short-Term Memory Neural Networks for Chinese Word Segmentation備忘録

http://www.emnlp2015.org/proceedings/EMNLP/pdf/EMNLP141.pdf

中国語の分かち書き問題を、系列ラベリリング問題として定式化。
各ラベルの出力スコアをLSTM RNNで計算する。

LSTMを使うことで、ラベル出力における長距離素性を取り込める。

系列ラベリング問題としてのラベルは

- B: begin
- E: end
- S: Single
- M: Medium

の４種

A: ラベル連接コスト。これも学習により決定される。

各characterに各ラベルに対応するコストを出力して、最後に、
ラベル連接コストを見ながら、ビタビで、ベストパスを決定する。

ベストパスから、単語境界を決定して、わかち書きする。


LTSM 

```math
\begin{eqnarray}
i^t &=& \sigma(W_{ix} x^t + W_{ih} h^{t-1)} + W_{ic}c^{t-1}) \\
f^t &=& \sigma(W_{fx} x^t + W_{fh} h^{t-1)} + W_{fc}c^{t-1}) \\
o^t &=& \sigma(W_{ox} x^t + W_{oh} h^{t-1)} + W_{oc}c^{t-1}) \\

c^t &=& f^t \odot c^{t-1} + i^{t} \odot \phi(W_{cx} x^t + W_{ch} h^{t-1})\\ 
h^t &=& o^t \odot \phi(c^t)
\end{eqnarray}

```
[Nginx]logrotateしないでaccess.log-YYYYMMDDを得る

# 追記
* 調べれば調べるほどlogrotateを使うほかない感じだった。
* ngx_http_log_merge_loc_conf とかそのあたりをいじればいいのだろうけどそこまでする？

# 前提1 環境
|環境|/etc/redhat-release|nginx|補足|
|:--|:--|:--|:--|
|Vagrant|CentOS Linux release 7.1.1503 (Core)|nginx-1.8.0-1.el7.ngx.x86_64|https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box|


# 前提2 なんでしたのか
以下事由により、logrotateなしにaccess.log-YYYYMMDDを得たかった。

* Apache運用時に利用していたrotatelogsと同じ挙動を得たかった
* logrotateが個人的に嫌いだった
  * Cronに頼りたくない

端的に言うとデフォルトのlogrotate設定ファイルが */etc/logrotate.d/nginx* という形で */etc/nginx/から遠いところ(別文脈)で管理される* のが気に食わない

# 参考URL
* [nginx でのログ操作($time_iso8601 ・ Fluentd) | TECH](http://tech.akat.info/?p=777 "nginx でのログ操作($time_iso8601 ・ Fluentd) | TECH")

# serverディレクティブに以下if文を追加

```c:nginx.conf
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})") {
  set $year $1;
  set $month $2;
  set $day $3;
  set $hour $4;
  set $min  $5;
}
```

# access_log を以下のように記述
末尾のフォーマット指定は本旨でないのでこの場合無視してよい
なお数分のうちにテストしやすいように *YYYY-mm-dd-HHMM* としている

```c:nginx.log
access_log  /var/log/nginx/access.log-$year-$month-$day-$hour$min ltsv;
```

# yum版nginxの場合、以下が必要だった
以下コマンドを発行しないとerror.logにエラーがでる[^1]
指定のオーナ:グループの根拠は `$ id nginx` の出力による

```c:command
sudo chown nginx:nginx /var/log/nginx
```

# nginx restart
```c:command
sudo systemctl restart nginx.service
```

# 以下のように生成される
アクセスし続けることで1分ごとに新規ログファイルが作成されることがわかる

```c:command
[root@localhost nginx]# ls -lha /var/log/nginx/
total 24K
drwxr-xr-x  2 nginx nginx  105 Oct 18 14:24 .
drwxr-xr-x. 8 root  root  4.0K Oct 18 11:16 ..
-rw-r--r--  1 root  root     0 Oct 18 14:22 access.log
-rw-r--r--  1 nginx nginx 5.5K Oct 18 14:23 access.log-2015-10-18-1423
-rw-r--r--  1 nginx nginx 5.2K Oct 18 14:24 access.log-2015-10-18-1424
-rw-r--r--  1 root  root  2.2K Oct 18 14:23 error.log
```

# 注意点
* もしもこのまま運用しようという場合には、/etc/logrotate.d/nginx を処理してlogrotate対象外とすること

# 懸念点
* error_log に同様の指定をしても error.log-$year-$month-$day-$hour$min というまんまイカしたログファイル名になる
  * error_log もYYYYMMDDしたかったらlogrotateするしかないのかこれ?
* 必ず access.log は生成される
* access.logとerror.logというファイル名は固定値なのかしら

[^1]: 2015/10/18 14:37:29 [crit] 19178#0: *1 open() "/var/log/nginx/access.log-2015-10-18-1437" failed (13: Permission denied) while logging request, client: 192.168.1.11, server: example.com, request: "GET / HTTP/1.1", host: "192.168.1.123"
gulpシリーズ1　〜導入の導入〜

gulp導入にあたってLIGさんの技術ブログ、
[Gulp.js入門 - コーディングを10倍速くする環境を作る方法まとめ](http://liginc.co.jp/web/tutorial/117900)
が分かり易いので参考に進めていきます。

nodeのバージョンはv0.12.7を使用。

##準備

今回のテスト用ディレクトリ構成
gulp_dev
- develop/（開発環境）
-- sass/
--- index.scss
- httpdocs/（本番環境）
-- css/
--- index.css
package.json
gulpfile.js

該当ディレクトリに移動

```
cd gulp_test
```

package.jsonの作成

```
npm init
```

##Gulpのインストール
グローバルにgulpをインストールしていない場合は、下記コマンドにてインストール。

```
npm install gulp -g
```

ローカル（プロジェクト内）にgulpをインストール。

```
npm install gulp --save-dev
```

package.jsonに記載されたパッケージは`npm install`とコマンドを打てば、一気にインストールされるらしい。これは便利。後ほど試してみよう。

##gulpfile.jsの作成
gulpfile.jsファイルを作成し、タスクを書き込んでいく。

作成場所
gulp_test/gulpfile.js

gulpの呼び出し

```js
var gulp = require('gulp');
```

##タスクを使ってみよう
sassをコンパイルしてみる。

まずはscssファイルを作成。

```scss
css
h1{
  color: red;
  &:hover{
    color: blue;
  }
}
```

gulp-sassをインストール。

```
npm install gulp-sass --save-dev
```

gulpfile.jsにsassのタスクを追記

```js
var gulp = require('gulp');
var sass = require('gulp-sass');

gulp.task('sass', function(){
	gulp.src('develop/sass/**/*.scss')
		.pipe(sass())
		.pipe(gulp.dest('httpdocs/css/'));
});
```

タスクを実行してみる。下記コマンドを実行。

```
gulp sass
```

destに指定した、sassの排出先のcssを確認してみる。
下記ファイルが作成されていることが確認できる。
gulp_dev/httpdocs/css/index.css

```css

h1 {
  color: red; }
  h1:hover {
    color: blue; }
```

cssの記述は、大括弧が変な位置にいるが、後ほどcssbeautifyプラグインで綺麗にするとして、まずはsassタスクの実行には成功。

他のプラグインのインストールは次回以降に順次していく。


##package.jsonからプラグインをインストール
今回インストールしたプラグイン、gulp、gulp-sassがpackage.jsonに記述された状態で、別のディレクトリを作成してインストールしてみる。案件が変わった時に毎回package.jsonを作成するのは面倒なため、デフォルトのgulp環境を作っておくのが目的。

テストディレクトリ
gulp_copy/

今回作成したpackage.jsonをgulp_copy/にコピーし、`npm install`を実行。すると、node_modules/ディレクトリが作成される。この状態で`gulp sass`コマンドを実行するが、gulpfileがありませんと怒られた。

作成していたgulpfile.jsをgulp_copy/にコピーし、`gulp sass`コマンド実行。すると、gulp_copy/develop/sass/index.scssがコンパイルされ、gulp_copy/httpdocs/css/index.cssが作成されていることが確認できた。

要するに、別環境で今までのgulp環境を直ぐに作るために必要なファイルは2つのみ。
* gulfile.js
* package.json

そして、`npm install`コマンドを実行すれば、環境の出来上がり。

今回はここまで。
イミディエイトウィンドウでdictionaryのデバッグプリントを行う

ウォッチ式からdictionaryの中身が見辛かったため作りました。
タブ区切りで出力されるのである程度見やすくしています。

printoptionを適当に指定するとdictionaryのkeyとitemの文字数を表示してくれます。
(printoptionがvariantなのはIsMissingを使うため)

```
Public Sub printDic(ByVal dic As Dictionary, Optional ByVal printoption As Variant)
    Dim i As Long
    
    If IsMissing(printoption) = True Then
        Debug.Print "Index"; Tab; "Keys"; Tab; "Items"
    Else
        Debug.Print "Index"; Tab; "Keys"; Tab; "Keys_Size"; Tab; "Items"; Tab; "Items_Size"
    End If
    For i = 0 To dic.Count - 1
        If IsMissing(printoption) = True Then
            Debug.Print i + 1; Tab; dic.Keys(i); Tab; dic.Items(i)
        Else
            Debug.Print i + 1; Tab; dic.Keys(i); Tab; Len(dic.Keys(i)); Tab; dic.Items(i); Tab; Len(dic.Items(i))
        End If
    Next i
End Sub
```
指定したシートの範囲を印刷範囲として設定する

自分がよく使うであろう、全列を1シートに収める形式を対象のシートに反映する。
範囲はrangeObjで指定する。

```
Public Sub setPrintArea(ByVal sheetobj As Worksheet, ByVal rangeObj As Range)
    With sheetobj.PageSetup
        .PrintArea = rangeObj.Address
        .Zoom = False           '---拡大・縮小率を指定しない
        .FitToPagesWide = 1     '---横方向1ページで印刷
        .FitToPagesTall = False '---縦方向は指定しない
    End With
End Sub
```
配列をdictionaryのkeyに格納

```
Public Function setArraytoDic(ByRef strArray As Variant) As Dictionary
    Dim i As Long
    Set setArraytoDic = CreateObject("Scripting.Dictionary")
    For i = 0 To UBound(strArray)
        setArraytoDic.Add strArray(i), i + 1
    Next i
    
End Function
```
IRKit のファームウェアをカスタマイズする


IRKit といえば、スマフォから赤外線リモコンの学習リモコンとして使う一般的な用途はもちろんのこと、WiFi の httpd 経由で RESTful な API を通して赤外線を送受信できることから、開発者にとってハックしがいがあるデバイスである。

![20151018-DSC04542.jpg](https://qiita-image-store.s3.amazonaws.com/0/5330/7efaf07e-e34a-f989-6f59-f633d883f62c.jpeg "20151018-DSC04542.jpg")


しかしながら、もう一つ IRKit は「オープンハードウェア」という視点からも非常にハックしがいがあるデバイスで、以下のデータが公開されている。

- https://github.com/irkit/device/blob/master/case/
  - IRKit のケース。
  - ライセンスは CC BY-NC-SA 4.0
- https://github.com/irkit/device/tree/master/hardware
  - ハードウェア設計図。EAGLE などで開ける。*.partlist.csv にパーツリストも。
  - ライセンスは CC BY-SA 3.0
- https://github.com/irkit/device/tree/master/firmware
  - Arduino Leonardo で動くファームウェア。普通に Arduino 環境で開発できる
  - IRKit ファームウェア本体のライセンスは GPL v2
 
## IRKit のファームウェアをカスタマイズする
 
前述の通り、IRKit は Arduino Leonardo との互換アーキテクチャを採用しており、その環境で開発することができる。
 
僕が大好き platformio を用いてファームウェアを書き込むには、firmware/src/platformio.ini を
 
```ini
[platformio]
src_dir = IRKit

[env:leonardo]
platform = atmelavr
framework = arduino
board = leonardo
# targets = upload
```

で用意し、あとは普通に

```bash
$ platformio run -t upload
```

で難なく書き込んで動かすことができる。かんたん！！！

また log.h を見るに、コンパイル時のビルドフラグでログ関係の物をいくつか定義すれば、シリアルコンソール経由でログが見れるのでセットしてみる。

```ini
[platformio]
src_dir = IRKit

[env:leonardo]
platform = atmelavr
framework = arduino
board = leonardo
# targets = upload
build_flags = -DMAINLOG -DGSLOG -DHTTPLOG -DHTTPLOG -DIRLOG -DKEYLOG
```

あとは再度書き込んで、シリアルコンソール経由で表示する

```bash
$ platformio run -t upload && platformio serialports monitor
```

これでログがいろいろと表示されるように。

```log
CONNECT f
c< CONNECT f

OK
c< OK
c> AT+SSLOPEN=f,cacert

OK
c< OK
```

続いて正常接続時の LED の色を変えてみる。

```diff
diff --git a/firmware/src/IRKit/IRKit.ino b/firmware/src/IRKit/IRKit.ino
index 0a4c6a5..647131e 100644
--- a/firmware/src/IRKit/IRKit.ino
+++ b/firmware/src/IRKit/IRKit.ino
@@ -211,7 +211,7 @@ void process_commands() {
 }
 
 void on_irkit_ready() {
-    color.setLedColor( 0, 0, 1, false ); // blue: ready
+    color.setLedColor( 1, 1, 1, false ); // white: ready
 }
 
 void on_ir_receive() {
```

これで白に。本当は PWM で出力弱めたかったんだけど、LED 接続してるピンが1ピンしか対応してない && そのピンでも何故かうまくいかない(timer割り込み周り?)ので白にしてみた。

## そのほかの見所

Arduino Leonardo にのってるチップ、ATmega32U4 はプログラム用メモリが 32KB (正確にはアップロードできる最大サイズは 28672 Byte) のため、できる限りプログラムサイズを小さくすべく、ライブラリをそのまんま使わず必要な箇所だけ実装したりしてる(それでも標準で約 26000 Byte使ってる)。

### WiFi のアクセスポイント実装

IRKit は最初の設定時、ホストのアクセスポイントになり、そのAPを叩くことで家庭のアクセスポイントのSSID, password などを記録し、その後ふつうの挙動になる。という実装も GSwifi.* 等を見ると WiFI チップの GS1011MxxS とどう AT コマンド経由でやりとりしてるのか解る。

### test いろいろ

テストが書けるような作りを意識していて、firmware/t 以下にテストが沢山ある!!!

- https://github.com/irkit/device/tree/master/firmware/t

普通に gcc でコンパイルして動かせるようなユニットテストから、実機にアップロードして結合テストまで、いろいろなテストがあって素晴らしいなぁ…。

また C/C++ で使える "yet another TAP library for C/C++" の [nanotap](https://github.com/tokuhirom/nanotap) を使ってる箇所が多い。tokuhirom 作なのかー、知らなかった。

### データの保持

最初、学習データ自体を IRKit 本体に保存してるのかと思ったけど、学習データは保存してない(= スマフォなどアプリ側に保存してる)。ATmega32U4 の EEPROM だけだと 1KB しか保存できないので、そうですよね。

# 終わりに

まだまだいろいろなことができる余地があり、例えば冒頭の写真のようにケースを開けるとピンヘッダの空きポートがあり、自分でさらにセンサー等を追加することもできる。

そんなこんなで、IRKit は WiFi 赤外線リモコンという通常の使い方以外でも大変面白いので、みなさん触ってみると良いと思いました！
StoryBoardReference試してみた。

俺の開発現在xib→storyboard分割ってやったからそもそもセグエ文化になると処理方法変わって面倒くさいからあんまやりたくないんだけど、コードで遷移各文化じゃなくなるだろうから簡単にだけど調べてみた。

![スクリーンショット 2015-10-18 22.40.03.png](https://qiita-image-store.s3.amazonaws.com/0/9256/f6b22833-c702-ade4-4a90-9129ca9daa1c.png)


上の図の感じで設置してセグエのつなぎ方はView Controllerの頃と同じで右クリックで引っ張ってくる。
接続するStoryboardの情報は右のいつもの色々設定する所で設定
![スクリーンショット 2015-10-18 22.28.50.png](https://qiita-image-store.s3.amazonaws.com/0/9256/a30ce0d1-3481-644f-d650-2d553b01718f.png)

設定項目としては
Storyboard:~.storyboardの~の部分つまりStoryboard名（※補完効きます
Referenced ID:遷移先Storyboardの「Storyboard ID」（※補完効きません
               →省略した場合は「IS Initial View Controller」のViewController
Bundle:とりあえず気にしなくていいでしょ。
ッて感じなのかな。
楽だな。。。
新規でやる場合はSegueも理解しなきゃだからこっちでやろう。

参考サイト
[StoryBoard Referenceについての所感](http://www.vagrantup.jp/entry/2015/06/12/054039)

サンプル
[kameware/StoryboardSample](https://github.com/kameware/StoryboardSample)
永続的なWi-Fi接続が必要ならばその旨を宣言する。

サーバーと通信するiOSアプリを書くときには、「iOSアプリケーション プログラミングガイド」の中の次の記載を参考にして、Info.plistの設定を行うと良さそう。

> ネットワークを介してサーバとやり取りするアプリケーションは、プロジェクトの「Info」タブに「Application uses Wi-Fi」エントリを追加するとよいでしょう。これはUIRequiresPersistentWiFi キー（ Info.plist ファイル）に対応します。YESと設定すれば、Wi-Fi接続が長時間にわたって非アクティブな状態であっても、iOSにより自動的に切断されてしまうことはなくなります。ネットワーク経由でサーバと通信するアプリケーションには、ぜひこのキーを追加してください。
勝手にADX2情報まとめ


ADX2の有益な情報はFB、wiki、youtube、個人ブログ、Qiitaなど各地に散らばっており、ポータルサイトが有れば良いのに…と思っていたのでまとめる事にしました。

**各リンクの先頭につけた ★ の数が多いほど、リンク先の内容が専門的になります。**

> ★☆☆☆☆ - 初心者編
★★☆☆☆ - 入門編
★★★☆☆ - 実践編
★★★★☆ - 応用編
★★★★★ - マニアック編



随時、更新予定。
## <i class="fa fa-check-square-o" style="font-size:1em;"></i> ADX2って何？
株式会社CRI・ミドルウェアが提供する、主にゲーム系で使われる**オーディオミドルウェア**です。
最近は**スマホアプリ（特に音ゲー）を作る際、非常に役立つ**と思います。

> ★☆☆☆☆ - [<i class="fa fa-lightbulb-o" style="font-size:1em;"></i> オーディオミドルウェア ADX2導入のメリット](http://qiita.com/ksilogic/items/f93dd52473aed4c0f977)
 ★★★☆☆ - [<i class="fa fa-lightbulb-o" style="font-size:1em;"></i> [Unity] ADX2のインゲームプレビューを使おう](http://qiita.com/ksilogic/items/3e2f4d8927ad56cb72bd) 11/26 up<i class="fa fa-level-up" style="font-size:1em;"></i>


ADX2LE(無料版)もあり、**ほぼフル機能**が使えます。
これほんとに無料で良いんですか…？

## <i class="fa fa-compass" style="font-size:1em;"></i> 導入ガイド
> ★★☆☆☆ - [<i class="fa fa-hand-o-up" style="font-size:1em;"></i> Unity 5のサウンド機能をADX2 LEで強化する (Qiita)](http://qiita.com/Takaaki_Ichijo/items/aa58faa062c67afb1a84)
★★☆☆☆ - [<i class="fa fa-file-sound-o" style="font-size:1em;"></i> CRI Atom Craftで音声データを作成する (Qiita)](http://qiita.com/Takaaki_Ichijo/items/705f8d3447f7c869df9d)
★★☆☆☆ - [<i class="fa fa-file-sound-o" style="font-size:1em;"></i> [Unity] ADX2の音をスクリプトから鳴らす方法 (Qiita)]
(http://qiita.com/ksilogic/items/4a9046ecd38911e5bfbc) 10/29 up<i class="fa fa-level-up" style="font-size:1em;"></i>

## <i class="fa fa-thumbs-o-up" style="font-size:1em;"></i> 使い方 Tips
> ★★★☆☆ - [<i class="fa fa-youtube-play" style="font-size:1em;"></i> ADX2LE トレーニング（動画チュートリアル）](http://www.adx2le.com/training/index.html)
★★★★☆ - [<i class="fa fa-wordpress" style="font-size:1em;"></i> ADX Tips (公式Tipsブログ)](http://blog.cri-mw.co.jp/)
★☆☆☆☆ - [<i class="fa fa-facebook-square" style="font-size:1em;"></i> ADX2ユーザー助け合い所 (FaceBook)](https://www.facebook.com/groups/adx2userj/)
★★★☆☆ - [<i class="fa fa-archive" style="font-size:1em;"></i> ADX2LE情報wiki (上記の助け合い所で出た議論まとめ)](http://www53.atwiki.jp/soundtasukeai/pages/22.html)


### <i class="fa fa-external-link" style="font-size:1em;"></i> ADX2 その他リンク(セミナーアーカイブ、各種blogなど)まとめ
> ### 公式の最新情報
- [★★★☆☆ -  <i class="fa fa-external-link" style="font-size:1em;"></i> 公式テクニカルサポートサイト (要正規ライセンス/申請すれば取得は無料)](http://www.criware.jp/support/index.htm)
- [★★☆☆☆ -  <i class="fa fa-external-link" style="font-size:1em;"></i> ADX2LE トップページ](http://www.adx2le.com)

> ### セミナーアーカイブ
> 	- [Unite2015 TOKYO] Unityで音を制す(櫻井敦史 ＜株式会社CRI・ミドルウェア＞)
	- [★★☆☆☆ -  <i class="fa fa-slideshare" style="font-size:1em;"></i> 講演ファイルの閲覧（SlideShare）](http://www.slideshare.net/crimw/unity-47051279)
	- [★☆☆☆☆ -  <i class="fa fa-youtube-play" style="font-size:1em;"></i> 講演動画アーカイブ (vimeo)](https://vimeo.com/125240394)

> ### 関連blog
- [★☆☆☆☆ -  <i class="fa fa-rss" style="font-size:1em;"></i> えるいー便り (ADX2LE公式ブログ / 採用事例紹介など)](http://blog.cri-mw.co.jp/adx2le/)
- [★☆☆☆☆ -  <i class="fa fa-rss" style="font-size:1em;"></i> CRIかいはつ便り (CRI・ミドルウェア 開発者ブログ / イベント、セミナー情報、開発裏話など)](http://blog.cri-mw.co.jp/tech/)

----
何かご意見など御座いましたら、コメントか[twitter](https://twitter.com/ksilogic)へよろしくお願いいたします。
オーディオミドルウェア ADX2導入のメリット

ミドルウェアを使うと色んな事ができますが、はじめに**最大のメリット**を声を大にして言いたい。

# <i class="fa fa-volume-up" style="font-size:1em;"></i> サウンド担当者が音の調整をできる!!
**お前は一体なにを言っているんだ**、とお思いの方もいらっしゃるかと思いますが
割と多くの開発現場では最終的な音の調整を**エンジニア**がやっているのではないかと思います。

> 音を鳴らすタイミングや音量、フェードイン、アウトや発音数の制限、ボイスを鳴らす時だけBGMの音量を下げる、などといった細かい調整を、あなたの現場では誰が担当していますか？

サウンド制作は外注だったりして、納品した後の使い方まで面倒を見る事が無い（できない）
その結果、**制作者の意図していない演出**ができあがったりします。



自分はサウンド制作の現場に居る事が多かったため、何度となくもどかしい思いをしてきましたが
ADX2などの**ミドルウェアを使う事で、サウンド担当者が音の調整をできるようになる**んです！


## <i class="fa fa-lightbulb-o" style="font-size:1em;"></i> エンジニアはゲーム作りに集中できる!!
想像してみてください。

- ミドルウェアを使わない場合
> 開発も終盤に差し掛かり、クリティカルなバグが見つかってしまいました。今すぐにでも修正しないとリリースに間に合わない！　そんな時、サウンド担当者がやってきて一言
『ここの演出、BGMは３秒掛けてフェードアウト掛けてくださいって言ったじゃないですか！』
「あぁ、それね。やれば５分でできるよ、５分で。**でも忙しいから待ってて**」
『そう言って２週間経ちますよ！ いつになったらやってもらえるんですか！』
「仕方ないなぁ…今やりますよ。はいできた」
『やればできるじゃないですか！　どれどれ…あ、すんませんやっぱり２秒にしてください』
「また２週間後ね」
その後、**修正される事はなく正式リリース**へ。


- ミドルウェアを使う場合
> 開発も終盤に差し掛かり、クリティカルなバグが見つかってしまいましたが
サウンド担当者は黙々と自分の作業を続け、エンジニアも自分の作業に集中できた結果、バグを撲滅。
また、サウンド演出の分業ができた事で**お互いの余計な待ち時間が発生せず**、当社比３倍の時間を調整に割く事ができ、豊かなサウンド演出のゲームが出来上がりましたとさ。めでたしめでたし。

イメージできたでしょうか？
実際の現場はこんなに単純ではなく、様々な問題が出てきたりしますが
担当エンジニアは基本的に**音の再生リクエストだけをコーディング**すればOKです。
（他の音を止める再生リクエスト、とかもデータ側で作れるので再生だけ考えればOK）

音量調整とか圧縮後の音質確認とか、フェードインアウト管理とか、ボイスの管理とか、全部サウンド担当（とミドルウェア）に任せましょう。お互いハッピーになれます。


## <i class="fa fa-hand-o-right" style="font-size:1em;"></i> ADX2でできる事

> - **Unity、cocos-2dx、ネイティブ環境など**で使える
- **エンジニアとサウンド担当の仕事が明確に切り分けられる** (ワークフロー改善)
- **低負荷**（iPhone4sで同時に16音くらい鳴らしてもCPU負荷10%程度）
- **高音質、高圧縮率**（例:44.1kHz 16bit 2chのデータの場合、約1/15に）
- [ <i class="fa fa-slideshare" style="font-size:1em;"></i> **Android端末の遅延推測**](http://www.slideshare.net/team-promo/ss-51375449/10)（端末固有の発音遅延を吸収する。音ゲー向け）
- [ <i class="fa fa-slideshare" style="font-size:1em;"></i> **Android端末 低遅延再生**](http://www.slideshare.net/team-promo/ss-51375449/22)（音ゲーのタップ音など、素早い発音が必要な音向け）
- **専用オーサリングツール**（１つの組み込みツールで全プラットフォームに対応）
- インゲームプレビュー（実際の端末で鳴らしつつ、リアルタイムに音量調整ができる）
- 各種インタラクティブサウンド
	- ランダム再生（足音や攻撃音に効果的）
	- 同時発音数制限（大量にコールされやすい攻撃音、アイテム取得音などに効果的）
	- [ <i class="fa fa-youtube-play" style="font-size:1em;"></i> ブロック再生](https://www.youtube.com/watch?v=bPQeYh8waf8)（状況に合わせた音や楽曲の遷移が可能）
	- ダッキング（ボイスなど聞かせたい音を鳴らす際にBGMの音量を下げたりする機能）
	- AISAC（各種パラメーターと連動し変化するシステム）
	- コンボシーケンシャル（連続ジャンプ音や攻撃音などを変化させるシステム）
	- ゼロレイテンシーストリーミング再生（ストレージからのストリーミング再生）
	- などなど

---
各種機能の詳細は後日、まとめていきます。
JavaScript再入門~浮動小数点~

CodeIQで「はしれ！モード学園」という漫画が公開され、話題になってたので問題をやってみましたが、つまずいたのが浮動少数点の問題。
なので自分のためにも問題の解説をまとめておきます。
漫画：https://codeiq.jp/magazine/2015/10/30057/
問題：https://codeiq.jp/q/2378

#問題
次のコードを実行した時に出力されるのは？

```js:
var i = 0;
var cnt = 0;
while (i < 1) {
    cnt ++;
    i += 0.1;
}
console.debug(cnt);
```

#解答
私は深く考えず、すぐに「10」だと思ってしまいましたが、
答えは「11」でした。

#考察
問題のコードでwhile文の中でiを出力するコードを追加して検証しました。
すると以下のようになります。
![出力結果](https://qiita-image-store.s3.amazonaws.com/0/93882/59e09fe9-18ce-b6ad-7af2-3460b33411ff.png)
0.3のところもおかしいですが、、、
0.7のあとから誤差で少しずつずれが生じています。

##丸め誤差
原因は丸め誤差というものです。
10進数0.1を2進数に変換すると、10進数では有限けたであるのに、2進数では無限小数(循環少数)となってしまいます。いま、小数点以下5桁までしか表現できないとすると、下記の式の編みかけ部分は表現できず、これにより、丸め誤差が発生します。
0.1 = 0.00011`0011……`（2進数）
編みかけ部分が表現できず丸められた値$=2^{-4}+2^{-5}=0.009375$
絶対誤差=|0.09375-0.1|=0.00625
これだけの誤差が生じます。
※これは例えなので、JavaScriptでこの誤差が生じているわけではありません
dovecot notes

# Centos6 (2.x)
## /etc/dovecot/dovecot.conf
```bash:dovecot.conf
#use minimal protocols
#protocols = imap pop3 lmtp
protocols = imap pop3

#only ipv4 :: mean all ipv6 ip's
#listen = *, ::
listen = *

```

## /etc/dovecot/conf.d .. 10-auth.conf
```bash:10-auth.conf
# dovecot 1.x default is "no"
disable_plaintext_auth = no

# use username h-imaoka@example.jp  = <h-imaoka>
auth_username_format = %n

#keep it
auth_mechanisms = plain
```

## auth-system.conf.ext
```bash:auth-system.conf.ext
passdb {
  driver = pam
  # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
  # [cache_key=<key>] [<service name>]
  #args = dovecot
  args = login
}

```
`args = login` means `/etc/pam.d/login`

## 10-mail.conf
```bash:10-mail.conf
# There are a few special variables you can use, eg.:
#
#   %u - username
#   %n - user part in user@domain, same as %u if there's no domain
#   %d - domain part in user@domain, empty if there's no domain
#   %h - home directory
#
# See doc/wiki/Variables.txt for full list. Some examples:
#
#   mail_location = maildir:~/Maildir
#   mail_location = mbox:~/mail:INBOX=/var/mail/%u
#   mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n

mail_location = mbox:~/mail:INBOX=/var/mail/%u

mail_access_groups = mail

```

## 10-ssl.conf (optional)
```bash:10-ssl.conf
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = no
```

# trouble shooting

## can not start daemon (protocol error)
set listen port = * (ipv4 only)

## pam auth failure (locked account)
use `login` pam auth.  

clear failure count
`pam_tally2 --user=<user name> --reset`
corrent failure count
`pam_tally2 --user=<user name>`


## login succeeded but disconnected from server
confirm `mail_location` setting
optional型についてまとめ

Swiftを某社で勉強し始めて、1週間が経ちました。
Qiitaにあるswift関連の記事は初学者には優しくないなと思い、初学者でもわかるような記事を更新していきたいと思います。


#Optional型とは？
+ Appleの「安全のための設計」の一つ
+ 変数の中身やメソッドの返り値が **nil** になる可能性をプログラムで明示することを可能になり、プログラマがその扱いを間違えた時にコンパイラが警告やエラーを出すことができる


#nilの使われ方まとめ

+ メソッドの返り値として、処理に成功すれば期待される値、失敗すればnilを返す。
+ メソッドの引数として指定したい場合は指定したい値、省略したい場合はnilを渡す
+ オブジェクトのプロパティの初期化前の値としてnilを持つ。


Swiftでは、 **String型、Int型などの型を持つ変数にnilを格納することができない**設計になっている
--> 変数やメソッドの返り値がString型である限り、その内容がnilである事はないことを保証している(逆にnilだとコンパイルエラーが生じる)
--> Optional型はString型やInt型と同じく一つの型ですが、 **「nilまたは何らかの値を格納する」** という点で特殊な型だと言える。

##Optional型の宣言と初期化

```optional型の宣言.
var optionalString: Optional<String>
```

```optional型の宣言と値の格納.
var optionalString: Optional<String>
optionalstring = "Hello, Swift"
// {Some "Hello, Swift"}
optionalstring = nil
```

```optional型の宣言と初期化.
var optionalInt: Optional<Int> = 4
```

##Optional型のアンラップ
Optional型に格納した値は **アンラップ** することで元の型のメソッドを使用できるようになる。
これは、元の型をOptional型で **ラップ**していたものを **アンラップ**して元の型に戻す、という意味合いが含まれている。
Optional型のアンラップには以下の4つの方法がある

1. Forced Unwrapping
+ Optional Binding
+ Optional Chaining
+ Implicitly Unwrapped Optional

<br>

###Forced Unwrapping
***
Optional型の値や変数は後ろに「！」記号をつけることでアンラップして元の型に戻すことができる。

**注意点:**
変数や値がnilである場合、返される値の使い方によっては実行時にランタイムエラーとなりアプリは強制終了してしまう

**いつ使う？** 
中身がnilでないことがわかっている場合もしくはnilでないことを確認した上で使用する 


```Forced_Unwrappingの例.
var optionalString: Optional<String> = "Hello, Swift"

//アンラップして変数に代入
var unwrappedString: String = optionalString!
unwrappedString.lowercaseString //"hello,swift"

//アンラップしてそのまま使用
optionalString!.lowercaseString //"hello, swift"
```

```nilかどうかの確認.
if optionalString != nil {
	optionalString!.lowercaseString
}
```
<br>
###Optional Binding
***
中身がnilでないかの確認とアンラップを同時に行う構文。

**いつ使う？** 
中身がnilであるか否かによらず使える


```Optional_Bindingの例.
var optionalString: Optional<String> = "Hello, Swift"
if let unwrappedString = optionalString {
	unwrappedString.lowercaseString
	//"hello, swift"
}
```

<br>

###Optional Chaining
***
Optional型の変数を元の型に戻さず、元の型のメソッドを使用することを目的。

**いつ使う？** 
中身がnilでないことがわかっている場合もしくはnilでないことを確認した上で使用する 


```Optional_Chainingの例.  
var optionalString: Optional<String> = "Hello, Swift"
optionalString?.lowercaseString
//{Some "hello, swift"}
```

「?」記号をつけることで、変数をアンラップしてlowercaseStringプロパティを参照しているのだが、値や変数がnilの場合はOptional Chainingの結果はnilになってしまう。

Optional Chainingでは、 **値がnilでなければ処理をし、nilならなにもしない**という処理がサクッとかける。


<br>
###Implicitly Unwrapped Optional
***
swiftにはnilと任意の型の値を格納するもう一つの型としてImplicitlyUnwrappedOptional型もある。

**特徴**
使用時には自動的にアンラップされる

**注意点**
ImplicitlyUnwrappedOptional型もその値がnilの時にアンラップしようとするとランタイムエラーとなる可能性あり

**いつ使う？**
ImplicitlyUnwrappedOptional型もnilでないことが宣言時に確定する場合にのみ使用することを推奨


```ImplicitlyUnwrappedOptional型の宣言と初期化.
var optionalString: ImplicitlyUnwrappedOptional<String> = "Hello,Swift"
optionalString.lowercaseString
//"hello,swift"
```

###Optional型の省略形
```２つのOptional型の省略形.
var optionalString: String? = "Hello, Swift"
var optionalInt: Int! = nil
```
前半は、Optional型の宣言時の省略形
後半は、ImplicitlyUnwrappedOptional型の省略形

**注意点**
省略形の「!」や「?」記号はOptional Chainingで使用する「?」記号やForced Unwrappingで使用する「!」記号とは意味合いが異なる。
RaspiにNASを作ってAndroidで動画を見る話とその他メモ

NAS
-----
初期状態：
↓
Sambaのインストール+USBメモリをNASとして扱う
(参考：http://mobilenikki.cocolog-nifty.com/wzero3/2013/07/raspberry-pisam.html )
↓
Androidに
・ES ファイルエクスプローラー
・MX 動画プレーヤー
をインストール
↓
NAS上に上がっている動画をストリーミング再生で視聴することができる。
(録画鯖とか欲しくなる。)

WebDAVサーバーを作る時のメモ
-----
DDNS設定
↓
ルータによるポートマッピング
↓
構築
(参考：http://sandragon.hatenablog.com/entry/2013/09/16/223618 )

利用
(参考：http://blogs.gine.jp/taka/archives/1376 )

BASIC認証だとURLにパスワードを埋め込めるところが少し便利。
WebDAVサーバーにscriptでアクセスする時とか。