OmniAICreator/Qiita-1.07M huggingface dataset:
swift iOS8カメラ制御（キャプチャセッションのセットアップ）

*カメラを制御するためにはAVCaptureSessionクラスとその関連クラスを使用して準備が必要です。例えば、入力デバイスとして何を使用するのか？内側カメラか？外側カメラか？、出力先は？ライブビューか？ファイルか？*
*以下、入力デバイスを外側カメラ、出力先をライブビューとして準備手順を説明します。*

１、セッション作成
２、カメラからの画像取得をセッションに追加
３、取得画像出力をセッションに追加
４、画像表示レイヤー生成
５、セッション開始
 　

``` swift
//
//  ViewController.swift
//  camera control
//
//  Created by Misato Morino on 2015/08/13.
//  Copyright (c) 2015年 Atsushi Komuro. All rights reserved.
//

import UIKit
import AVFoundation

class ViewController: UIViewController{
    //セッション
    var CapSession : AVCaptureSession!
    //デバイス
    var CapDevice : AVCaptureDevice!
    //画像アウト
    var ImageOut : AVCaptureStillImageOutput!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        CapSession = AVCaptureSession()
        let devices = AVCaptureDevice.devices()
        for device in devices{
            if(device.position == AVCaptureDevicePosition.Back){
                CapDevice = device as! AVCaptureDevice
            }
        }
        
        //VideoInputを取得、セッションに追加
        do{
            let videoInput = try AVCaptureDeviceInput(device: CapDevice)
            CapSession.addInput(videoInput)
        }catch{
            
        }
        
        //出力先を生成
        ImageOut = AVCaptureStillImageOutput()
        
        //セッションに追加
        CapSession.addOutput(ImageOut)
        
        //画像を表示するレイヤーを生成
        let videoLayer : AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: CapSession!) as AVCaptureVideoPreviewLayer
        
        videoLayer.frame = self.view.bounds
        videoLayer.videoGravity = AVLayerVideoGravityResizeAspect
        
        // Viewに追加
        self.view.layer.addSublayer(videoLayer)
        
        //セッション開始
        CapSession.startRunning()
        
        
    }
}
```
[github CameraSetup](https://github.com/Atsushi-Komuro/CameraSetup.git)
[HTML] ファビコンの設置について

#ファビコン画像ジェネレーター

[Favicon Generator for all platforms: iOS, Android, PC/Mac...](http://realfavicongenerator.net/)

#HTMLコード
昔ながらのファビコン指定コード。主にIE。

```lang:html
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
```

高解像度ディスプレイや異なるデバイスに合わせてPNG形式でサイズいろいろ

```lang:html
<link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
<link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
```

iOSのホームスクリーン用

```lang:html
<link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png">
```

AndroidのChrome用

```lang:html
<link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
```

Windows 8のタイル用

```lang:html
<link rel="manifest" href="/manifest.json">
<meta name="msapplication-TileColor" content="#ffcc22">
<meta name="msapplication-TileImage" content="/mstile-144x144.png">
<meta name="theme-color" content="#ffffff">
```

#参考記事
[クリエイティブなファビコンを設置しよう | Webクリエイターボックス](http://www.webcreatorbox.com/tech/favicon/)
[CSS] 番号付きリストの『番号』だけ色を変更する方法


```lang:CSS
<ol>
    <li>一つ目のリストです</li>
    <li>二つ目のリストです</li>
    <li>三つ目のリストです</li>
    <li>四つ目のリストです</li>
    <li>五つ目のリストです</li>
</ol>
```

```lang:CSS
ol {
    counter-reset: li;    /* li のカウンタを 0 にセット */ 
    list-style: none;
}

li:before {
    color: #f00;
    font-weight: bold;
    counter-increment: li;   /* li の数を一つずつ増加 */
    content: counter(li) ". ";          /* 数を表示 */
}
```

参考元：[【CSS】counterを使って番号付きリストの『番号』だけ色を変更する方法 | キノめも](http://kinomemo.info/create/1611/)
[WP] 固定ページにタグを入れる方法

functions.phpに下記を追記

```lang:functions.php
function add_tag_to_page() {
 register_taxonomy_for_object_type('post_tag', 'page');
}
add_action('init', 'add_tag_to_page');
```

参考元：[固定ページでも投稿タグを設定出来るようにしたい。 : おばけノート](http://obakenote.com/wp/595/)
gulp-tslintを使ってみた

TypeScriptを使い始めているのですが今のとこGulpでタスクを組んでコンパイルしています。で、Lintも当然ほしくなるので入れてみました。

## 使ったパッケージ
- [gulp-tslint](http://www.npmjs.com/package/gulp-tslint)
    - Lint本体
- [gulp-plumber](http://www.npmjs.com/package/gulp-plumber)
    - watch時にLintでこけても止まらないように
- [gulp-notify](http://www.npmjs.com/package/gulp-notify)
    - Lintでこけたときに通知する
    - こんな感じで表示される

![tslint.png](https://qiita-image-store.s3.amazonaws.com/0/25841/a3477b54-45a3-c4a6-12bd-3d1d1c6cd868.png)

## タスク

```
gulp.task("tslint", function() {
    gulp.src([
        "./ts/**/*.d.ts"
    ])
    .pipe(plumber({errorHandler: notify.onError('Error: TSLint!!')}))
    .pipe(tslint({
        configuration: "Gulp/tasks/config/tslint.json"
    }))
    .pipe(tslint.report("verbose"));
});

```

- configurationはデフォでも大丈夫です。今回はちょっといじりたかったので設定をまるっと書いたJsonを置いて読むようにしてます。
- 設定の元ネタはこちら (https://github.com/palantir/tslint/blob/master/docs/sample.tslint.json)
UbuntuでWAVファイルを結合するには

##目的
UbuntuでWAVファイルを結合したい

##方法
soxを使いましょう
[http://sox.sourceforge.net/](http://sox.sourceforge.net/)

コマンドは以下のようになります
`sox input1.wav input2.wav input3.wav input4.wav output.wav`
unity > 現在のシーン名を取得 > Application.loadedLevelName;

今いるシーンの取得

http://answers.unity3d.com/questions/14637/get-the-currently-open-scene-name-or-file-name.html

Application.loadedLevelName`
で現在のシーン名を取得できる。

以下のような部分に使える。

```csharp
//		SelectButtonControl.callingScene = "Scene2";
		SelectButtonControl.callingScene = Application.loadedLevelName;
```
bashのfor文でブレース


for文でブレースを使って以下のような事ができます。

```shell-session:test.sh
for i in {8..12};do
  echo $i
done
```

```
$ ./test.sh 
8
9
10
11
12
```

これを応用すると、

```shell-session:test.sh
for i in {0008..0012};do
  echo $i
done
```
```
$ ./test.sh 
0008
0009
0010
0011
0012
```
とか

```shell-session:test.sh
for i in {d..g};do
  echo $i
done
```
```
$ ./test.sh 
d
e
f
g
```
とか。便利です。
unity > 自作 > FileSelector(汎用版) > Scene1からFileSelectorシーンのfilenameを読取るバージョン

##問題点

http://qiita.com/7of9/items/81140c4fa8f17df4a83a
においてFileSelectorを実装したが、問題はFileSelectorシーンのSelectButtonControlにおいてScene1のButton1Control.filenameを書き換えしていることだった。
つまり、SelectButtonControlがButton1と結びついてしまっている。

そのため、FileSelectorは他のシーンのファイル名を変更できない。汎用的でない。


##修正版
「FileSelectorシーンからScene1のfilenameを書換えする」
でなく
「Scene1からFileSelectorシーンのfilenameを読取る」
にすればFileSelectorのButton1ControlをScene1との結びつきをはずことができる。


## code

以下、修正版

```csharp:Button1Control.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Button1Control : MonoBehaviour {
	
	public void Button1Click() {
		SelectButtonControl.callingScene = "Scene1";
		Application.LoadLevel ("FileSelector");
	}
	
	public Text myText; // should be related to TextFileName:Text
	void OnGUI() {
		myText.text = SelectButtonControl.filename;
	}
}
```

```csharp:SelectButtonControl.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class SelectButtonControl : MonoBehaviour {
	public static string callingScene;
	public static string filename;

	void Start() {
		DontDestroyOnLoad (this); // to access public static variables from other scenes
	}

	public void ButtonSelector() {
		GameObject work = GameObject.Find (gameObject.name + "Text"); // e.g. Button1Text
		if (work) {
			filename = work.GetComponent<Text>().text;
		} else { // error
			filename = "";
		}
		Application.LoadLevel (callingScene); // back to calling scene
	}
}
```

ScrollScript.csは[こちら](http://qiita.com/7of9/items/81140c4fa8f17df4a83a#code02-w-mouse-wheel)をそのまま使う。

##Scene2からの使用

上記の汎用化により他のシーンからも使用できるようになった。
例としてScene2にSC2Buttonを作り、以下のスクリプトを関連付けるとScene2でもファイル名を取得できるようになった。

```csharp:SC2ButtonControl.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class SC2ButtonControl : MonoBehaviour {

	public void SC2ButtonClick()
	{
		//SelectButtonControl.callingScene = "Scene2";
		SelectButtonControl.callingScene = Application.loadedLevelName;
		Application.LoadLevel ("FileSelector");
	}

	public Text myText; // should be related to Text in the scene
	void OnGUI() {
		myText.text = SelectButtonControl.filename;
	}
}
```

![Scene2_unity_-_150813-fileSelector_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/e71d82e1-be72-6d22-cf7a-e47dcc41fa68.jpeg)


複数ファイル名に対応したものをTag:Main_v0.1として[github](https://github.com/yasokada/unity-150813-fileSelector)にuploadした。
右腕を骨折した時に便利なTips

#右腕骨折しました！
バイクで路肩の砂利で滑りました・・
でも、仕事休めませんよね？
むしろ、病院いったりで普段以上の工数が必要ですよね？
でも、キーボード打ち辛いですよね？
そんな　ピンチなあなたに便利なTips


#前提
右手を怪我したが、キーボードを打つ事は可能
ただし、腕を動かす事は出来ない＝ホームポジションを移動できない
主にMacbook利用を前提


#不便な事
基本的に　ブラインドタッチが出来ているなら、ホームポジションに乗せさえすれば
キー入力に不便が少ないが　何点か困る事があったので　それを解決します

* マウス
* 矢印キー


##　マウス
左手で操作しましょう。これで解決です！
Macbookの場合は トラックパッドを左手で使えば大丈夫です
慣れればなんて事ないさ！


## 矢印キー
コレはけっこう問題です
どうしても矢印キーは ホームポジションから動かす必要があるので
大変です
スクロールは　トラックパッドを左手で操作すれば問題無しですが
コピーペーストや、カーソル移動が出来ません
もちろん　全部をマウス操作で行えば問題ないですが
１文字の微調整や、ちょっとした操作ミスで文字が消えたりと
面倒でやってられませんので　対策です

### vim(Emacs)を使う
今回はvimで話をすすめます
vimはMacに標準で入っていますし、SublimeEditor等でもvimモードが入ってます
また　大抵のエディタにはvimプラグインがあると思います

vimモードだと　hjkl　でカーソル移動出来ます
もう矢印使わなくても　カーソル移動できますね！

viの基礎コマンド　挿入モード i、追加モード a、セーブ :w  終了 :q
等も覚えて下さい

行のコピー(ヤンク command-c)は　yy。 3行コピーするなら3yy
行のデリート(command-x) は dd
ペースト(command-v)は p

上記のコピーでは行単位なので　文字単位のコピー方法は
vで選択モードになるので　そこで hjklを使い 選択範囲を決めます
y　でコピー、dでデリートし
挿入したい場所にカーソルを持っていき　p　でペースト

これだけ覚えると、矢印キーがなくても大丈夫ですね！！

おまけ、他の便利なコマンド
^ 行の先頭に戻る(インデント理解してくれる)
$ 行の末尾移動

その他　マークなど便利なコマンドあるので　随時覚えましょう



統合環境を使う場合ですが
JetBrains系(IntelliJ、Clion、AndroidStudio、WebStorm等)では
IdeaVim　プラグインを入れます
インストール法は凄く簡単で
Preference -> Plugins -> Install JetBrains Plugin
から IdeaVimを選ぶと　アプリが再起動し有効になっています
vim6をベースに作られているようで　一部の機能が使えないらしいですが
十分使えます

EclipseではVrapper、VisualStudioではvsVim　
XcodeでもVimプラグインあるので　困りませんね！


これで　矢印キーを使う機会が減り、右手を負傷しても問題なさそうですね！



しかし　Webブラウザ等　まだ矢印キーが必要です
実際 Qiitaの記事を書いている今は 矢印キーのたびに　左手で
右手のホームポジションを移動させ　矢印とホームを切り替えてますw
Chromeには vimium というvimプラグインがあるようですが　調査していません・・


##ゲームパッド最高！！
ここで　最適解です
ゲームパッドを繋げましょう
OS毎に ゲームパッドのボタンをキー入力に変換するアプリがあるので
それを使い
ゲームパッドの上下左右を矢印に割当て、足で操作すれば
足だけで　矢印が操作できます！！
慣れてくれば　Aボタンにshiftを割り当てたり、その他のボタンにビルドを割り当てたり
色々と快適になります



# まとめ
右手を負傷した程度ではプログラマは死なない
vimモードは 負傷者に優しい
ゲームパッド最強

プログラマは手だけではなく　足も使うべき！
【ListView Tips Vo.1】ListViewの子要素（アイテム）のClickがおかしくなる 〜主な原因と対処法〜


AndroidのViewの中でも頻出かつクセのある **ListView**関連のTips集Vol.1

## 症状例
* ListViewの子要素（アイテム）のタッチが効かない
* ListView自体のタッチが効かない
<br>


## 原因
#### ■ イベントを取得したいアイテム以外に`onClickListener`などのイベントを取られている

Click系イベントに影響するものは、

* Button関連
	* Button
	* ImageButton
	* CustomなButton
* CheckBox
	* CheckBox
	* CustomなCheckBox
* **`android:inputType=”textMultiLine”`を含むTextView**

などがある。
ListViewのアイテムに上記を入れている場合は注意。


#### ■ 不用意にRootView(※)に`android:clickable=true`をつけている

RootViewに上記を指定すると、内包するアイテムにも定義付けされ、イベントを取得したいもの以外に上記を定義することに繋がる。
ご利用は計画的に。
<br>

## 解決策
#### ■ 一旦ListViewのアイテムのFocus属性を外す
ListViewのFocus属性を白紙に戻し、イベントを受け取りたいアイテムに属性を再定義して上書きする。

```listview_item_sample_01.xml
android:descendantFocusability="blocksDescendants"
```

を入れることで、下位のViewのfocusを制限し、ListViewに制御を持たせることができる。


#### ■ RootViewの指定を間違えない
前述した基本事項だが、RootViewはアイテムまで指定されるので注意が必要。
以下のように、

```listview_sample.xml
android:clickable="true"
```

を間違えてRootViewで指定すると、各アイテム全てに指定したことになる。

#### ■ イベント取得不要なアイテムからfocus属性を外す
イベント取得が不要なアイテムが少ない場合は、各アイテムに

```listview_item_02.xml
android:focusable="false"
android:focusableInTouchMode="false"
```

を直接指定して、フォーカスを当てないようにすることも可能。
<br>

## ListView Tips集

* 【ListView Tips Vo.1】ListViewの子要素（アイテム）のClickがおかしくなる 〜主な原因と対処法〜
* [【ListView Tips Vol.2】忙しい人のためのStickyListHeadersListViewの使い方 〜基本編〜](http://qiita.com/taisho/items/84fe76a79eb8c507764d)
* [【ListView Tips Vol.3】ListViewでアイテムアニメーションしよう！ 〜View.startAnimationに関する考察〜](http://qiita.com/taisho/items/efdc04099ced5692dd1c)
* [【ListView Tips Vol.4-1】ButterKnifeで効率よくIDバインドする 〜findViewByIdもOnClickも、もういらない（仮）〜](http://qiita.com/taisho/items/5f66712d96fd0683a8ca)
unity > 外部ファイルで定数を定義したものを使う > include "xxx.h"の代わり

```txt:動作確認
Unity 5.1.1-f1 on MacOS X 10.8.5
```

色々な設定を外部ファイルにもたせて、それをスクリプト内で使えないか調べていた。
以下のサイトが参考になった。
http://gamenosirusi.blog.fc2.com/blog-entry-12.html

C言語で.hファイルにconst宣言したものを色々な.cファイルでincludeして使うようなことをしたい。

##手順
上記サイトと同じだが、こちらにも再掲する

まず、以下のようなスクリプトを作成する。

```csharp:Common.cs
using UnityEngine;
using System.Collections;

namespace Common
{
	public static class Define
	{
		public const string callingScene = "Scene1";
	}
}
```

using Common;すると Define.callingSceneを使うと"Scene1"になる。

```csharp:使用例
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using Common; // for Define.XXX

public class SelectButtonControl : MonoBehaviour {
	
	public void ButtonSelector() {
//		Application.LoadLevel ("Scene1");
		Application.LoadLevel (Define.callingScene);
	}
}
```
Raspberry PIのuartでMIDIを受信

いくつかのHPを参照し、31.25kbps, 5pin DINのMIDIをRaspberry PI で受信できるようにした。

<参照URL>
http://www.samplerbox.org/article/midiinwithrpi
https://zuzebox.wordpress.com/2014/06/26/raspberry-pi-minipiio-midi-board/
https://zuzebox.wordpress.com/2013/11/26/minipiiio-rs232-set-up/

Raspberry PIではUARTを31.25kbpsを実現するためにはトリッキーなことをしないならない。

1. UARTのクロックの設定
 config.txtを編集する。<br>

> sudo vi /boot/config.txt
>

以下の行を追加する。<br>

> \# Change UART clock to 2441406 for MIDI 31250 baud rate
> init_uart_clock=2441406
> init_uart_baud=38400
>

2. 一旦リブートする。<br><br>
3. UART をストップする。Raspberry PIはshell consoleにUARTを使っている。<br>
3.1 cmdline.txtとinittabをバックアップする。

> sudo cp /boot/cmdline.txt /boot/cmdline.bak
> sudo cp /etc/inittab /etc/inittab.bak
>

3.2 cmdline.txtを編集する。<br>

> sudo vi /boot/cmdline.txt
“console=ttyAMA0,115200” と “kgdboc=ttyAMA0,115200” を削除する。

私にRaspberry pi では“kgdboc=ttyAMA0,115200”は設定されていなかった。

編集前
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 
console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

編集後
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

3.3 inittabを編集する。<br>

> sudo vi /etc/inittab
>

ファイルの最後の方にttyAMA0が含まれた行があるので、先頭 \# を記入しコメント行とする。私の Raspberry PIでは最後の行、

> \#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
>

4. bcm2708 のクロックの設定<br>
 もう一回、config.txtを編集する。<br>

> sudo vi /boot/config.txt
>

以下のパラメータを追加
> bcm2708.uart_clock=3000000

編集後
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait bcm2708.uart_clock=3000000

#計算してみると

init_uart_baud * init_uart_clock / bcm2708.uart_clock
= 38400 * 2441406 / 3000000 = 312499.968

となる。
unity > mouse wheelでscrollbarをスクロールする

```txt:動作確認
Unity 5.1.1f-1 on Mac OS X 10.8.5
```

マウスのwheelを使って、Scrollbarのvalueを動かす。

http://answers.unity3d.com/questions/13485/implementing-the-scrollwheel.html

##準備
1. UI > Scrollbarを追加する。名前をScrollbar1にする (スクリプトと合わせる)
2. Scrollbar1 > Scrollbar (Script) > Directionを "Top to Bottom"にする
3. 以下のScrollHandle.csをScrollbar1に関連付ける


##code

```csharp:ScrollHandle.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI; // for Scrollbar

public class ScrollHandle : MonoBehaviour {

	private void changeScrollBarValue(string scrollBarName, bool isUp) {
		GameObject work = GameObject.Find (scrollBarName);
		if (work) {
			float aRatio = work.GetComponent<Scrollbar>().value;
			if (isUp) {
				aRatio -= 0.05f; // for from top to bottom direction
			} else {
				aRatio += 0.05f; // for from top to bottom direction
			}
			work.GetComponent<Scrollbar>().value = aRatio;
		}
	}

	void OnGUI() {
		float val = Input.GetAxis ("Mouse ScrollWheel");
		if (val > 0.0f) {
			changeScrollBarValue("Scrollbar1", /* isUp=*/true);
			Debug.Log ("up");
		} else if (val < 0.0f) {
			changeScrollBarValue("Scrollbar1", /* isUp=*/false);
			Debug.Log ("down");
		} else {
			// do nothing
		}
	}
}
```


![Untitled_-_150814_scrollwheel_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/05476270-397d-561a-a421-eddcb34da753.jpeg)
unity > mouseのスクロールを取得 > float val = Input.GetAxis ("Mouse ScrollWheel"); > ">0.0f":up / "<0.0f":down / "=0.0":do nothing

```txt:動作確認
Unity 5.1.1-f1 on Mac OS X 10.8.5
```

マウスウィールの使用を感知したい。

http://answers.unity3d.com/questions/13485/implementing-the-scrollwheel.html

```csharp
	void OnGUI() {
		float val = Input.GetAxis ("Mouse ScrollWheel");
		if (val > 0.0f) {
			Debug.Log ("up");
		} else if (val < 0.0f) {
			Debug.Log ("down");
		} else {
			// do nothing
		}
	}
```

val==0.0fの時はScroll Wheelを使用していない時に対応するようだ。
技術英語 > I owe you one.

@ Star Trek Voyager > EX POST FACTO

助けられたパリスがTuvokに言った言葉

> I owe you one. (借りができたな)

<hr>
引用: 強くなる英語のディスカッション by 崎村耕二さん

> Surely you remember <font color=red>how much you owe me</font>?

<hr>

何かのドラマで以下のフレーズが使われていたのをふと思い出した。
> I owe you a fortune.

正確な訳は忘れたが、「すごい大きな借りができた」ような意味だったと思う。

http://ejje.weblio.jp/content/fortune
> b【可算名詞】 巨額の金，大金，身代.

が関係してそう。
python, php, ruby 10進数をn進数に変換する方法

# python
```py:python
data = 255
# 2進数
b = bin(data) # '0b11111111'
b = format(data, 'b') # '11111111'
# 8進数
o = oct(data) # '0377'
o = format(data, 'o') # '377'
# 16進数
x = hex(data) # '0xff'
x = format(data, 'x') # 'ff'
# 255を16進数に変換し、下1桁を10進数に表記
int_x = int(format(data, 'x')[-1], 16) # 15
```
# PHP
```php:PHP
$data = 255;
// 2進数
$b = decbin($data); // '11111111'
// 8進数
$o = decoct($data); // '377'
// 16進数
$x = dechex($data); // 'ff'
// 255を16進数に変換し、下1桁を10進数に表記
$int_x = hexdec(substr(dechex($data), -1)); // 15
```

# Ruby
```ruby:Ruby
data = 255
# 2進数
b = data.to_s(2) # '11111111'
# 8進数
o = data.to_s(8) # '377'
# 16進数
x = data.to_s(16) # 'ff'
# 255を16進数に変換し、下1桁を10進数に表記
int_x = data.to_s(16)[-1].to_i(16) # 15
```
【俺メモ】CentOS6系にnginx,php5.6,php-fpm をインストール＆socketでのnginx連携


# nginx のインストール

* nginx用Repositoryの追加

``` linux
sudo yum localinstall http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
```
* インストール

``` linux
sudo yum install nginx
```
* バージョン確認

``` linux
nginx -v
```

# php,php-fpm のインストールとsocketでのnginx連携

* phpの最新版をインストールするのに必要なRepositoryの追加

``` linux
sudo yum localinstall http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo yum localinstall http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
```
* phpと周辺モジュールのインストール

``` linux
sudo yum -y --enablerepo=remi-php56,remi,epel install php php-mbstring
php-xml php-pdo php-mcrypt php-pecl-memcache php-pgsql
```
* php-fpmのインストール

``` linux
sudo yum install yum --enablerepo=remi-php56,remi,epel install php-fpm
```
* php-fpmの初期設定

``` linux
sudo vi /etc/php-fpm.d/www.conf
「user = nginx」へ変更
「group = nginx」へ変更
「listen = /var/run/php-fpm/php-fpm.sock」へ変更
「listen.owner = nginx」へ変更
「listen.group = nginx」へ変更
```
* nginx のphp-fpm連携設定

``` nginx-default.conf
    location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
        include        fastcgi_params;
    }
```
DocumentRoot部分は適宜読み替えをすること。
mac設定の備忘録


**ねんがんの　新しいMacBookを　てにいれたぞ**

古いMacBook Air(mid-2011)からの引き継ぎではなく、あえてまっさらなMacBookに必要最低限のアプリや設定を入れていくことにする。

#アプリ

## Mac App Storeから

- Evernote
- Slack
- Kobito


## 直接ダウンロード

- Chrome
- Google日本語変換
- iTerm
- Atom
- Dropbox
- Google Drive
- Skype
- heroku toolbelt

## Homebrewで

- postgresql http://b.pyar.bz/blog/2014/10/21/mac-postgresql-installation/

## gemで

- rails

# 設定

## 色々とライセンスに同意
`xcode-select --install`

## ssh鍵作成とgithub用の設定
 https://help.github.com/articles/generating-ssh-keys/

## dotfiles
https://github.com/sawakun/dotfiles
*自分でも久々すぎてやり方忘れてたけど、READMEに書いてたw*

## iTermの設定
- color presetsは'homebrew'
- 上からひょいっと出てくる設定 http://blog.mah-lab.com/2014/04/22/opening-iterm-nothing-to-switch-desktop/
- zshに変更 http://qiita.com/bird_nitryn/items/bd063f0d7eb18287fec1
- rvmのインストール
- Homebrewかmacportsか

## Atomのplugin追加
- file-icons
- minimap

## Dock
自動的に隠れる
位置は左
DockerToolboxに移行した時のメモ

※2015/08/29 追記
現在DockerToolboxでVirtualBoxも同時にインストールすると最新の5.0.2がインストールされますが
このバージョンがDockerMachineと相性が悪く、VMが起動しないという罠があります。
https://github.com/docker/machine/issues/1716

VirtualBoxのバージョンを5.0.0に下げるか、
[こちら](https://www.virtualbox.org/wiki/Testbuilds)から次期テストバージョンの5.0.3をインストールしましょう。





# DockerToolbox

Docker1.8リリースと同時に DockerToolbox というものが公開された。
https://www.docker.com/toolbox

要するに、Dockerまわりの環境を全部入りしたインストーラ。
2015/8/14 時点では以下のツールが同梱されている。

- Docker クライアント
- Docker Machine（Docker入りVM操作ツール）
- Docker Compose（Docker複数コンテナ連携管理）(※Macのみ)
- Docker Kitematic（Dockerコンテナ用GUI）
- VirtualBox

良い機会なので、boot2dockerを完全に止めて
こちらのツールに寄せることにした。
boot2dockerの代替としては、docker-machineを利用する。

## 既存環境のアンインストール

コマンドツール系は干渉すると嫌なので予め削除しておくことにした。

消すのは以下のツール。
VirtualBoxはとりあえずそのまま残しておく。

- docker クライアント
- docker-compose(fig)
- docker-machine

```sh
# 消す
brew uninstall —force docker
brew uninstall —force docker-compose
brew uninstall —force docker-machine

# 以下のコマンドでゴミが残っていないか確認。残ってたら手動で問答無用に削除
which docker-compose
which fig
which docker-machine
which docker
```

## Docker Toolboxでインストール
[サイト](https://www.docker.com/toolbox) にダウンロードリンクがあるので
ダウンロードしたらそのまま実行してインストーラの起動。
あとは普通に進めれば良い。  
途中、既存のboot2dockerのVMをマイグレーションするかどうか聞かれたので「Migrate」にしといた。
特にハマることなく移行することが出来た。
既存のイメージは残したままDockerバージョンも最新にしてくれるのでだいぶ良い。

![スクリーンショット 2015-08-13 11.13.48.png](https://qiita-image-store.s3.amazonaws.com/0/9099/222cd3c2-6a00-3d45-4530-988fa187aca9.png)

Docker MachineのVM名は ``default`` で作られるようである。
（ちなみにDockerMachineでも、isoはboot2docker.isoを利用している）

## Docker MachineでVM起動
おそらく、インストーラで入れた直後はVM起動されているが
Macを再起動した後などはboot2dockerと同様に手動で起動する必要がある。  
以下のコマンドで、VM起動とDocker周りの環境変数を設定すれば
あとは今までと同様に利用することができる。

```sh
# docker machineで起動コマンド + 環境変数設定 (&& でつなげると何故か無応答になる…
$ docker-machine start default
$ eval "$(docker-machine env default)"

# 上記は、boot2docker時代の以下のコマンドと同じことをしている
$ boot2docker up
$ $(boot2docker shellinit)
```

bashrcなどに以下のif文を入れておくと、
コンソールOpen時にVMが起動されていれば自動で環境変数を設定してくれるので楽。

```sh
# docker-machine
if [ "`docker-machine status default`" = "Running" ]; then
   eval "$(docker-machine env default)"
fi
```


## DockerToolboxアップグレード時

Docker本体がバージョンアップした時、DockerToolbox自体もアップグレードされるはず。
その場合、上記インストーラを利用すればツール系はそのままアップグレードされる。  
ただしVMは更新されないので、DockerToolbox更新後に以下のコマンドを実行する必要がある。

```sh
docker-machine upgrade default
```

boot2docker時代は一度VMをdeleteする必要があったが、
DockerToolboxを利用するとupgradeだけで済むので既存のイメージは残したままアップデートできる。嬉しい。


## まとめ

おそらく、今後Dockerのエコシステムを簡単に利用するためにも
DockerToolboxで今のうちに移行しておくのは良いことだと思います。
どんどん乗っかって楽していきましょう〜

ps.
[YAPC](http://yapcasia.org/2015/talk/show/5ea2630a-133d-11e5-8cbb-d9f87d574c3a)でちょろっとこの辺りのことも話すかもしれませんので、興味ある方はぜひお越しください〜

## Ref

- [Docker Toolbox](https://www.docker.com/toolbox)
- [Boot2DockerとDockerMachineのコマンド比較](https://docs.docker.com/machine/migrate-to-machine/)
[Unity] Rigidbodyがどこで衝突するかを事前にチェックする


少し前に「[[Unity] Rigidbodyの軌道を自前で計算する](http://qiita.com/edo_m18/items/5e367eb6dc1417c25474)」という記事を書きました。
Rigidbodyを追加すると自動でやってくれる物理的な挙動を簡易的に計算して、飛んで行く方向などを事前に計算し軌道を表示する、というサンプルです。

方向や軌跡を見せるだけならこれで問題ないのですが、実際にどこにあたるのかを知ろうとしても衝突判定まではやっていないので分かりません。

今回はこの軌道に加えて、実際にどこに当たるのかを事前に計算する方法を紹介します。
Unityの物理シミュレーションの時間を進めるのではなく、擬似的に時間を進めて位置を特定するため、すぐに結果を得ることができます。

Unity自体にこういう機能あってもいいと思っているので、もしかしたらUnityの基本機能でできるかもしれません。
（が、見つからなかったので作ってみた感じです。負荷が高いかもしれないのでご利用は計画的に）

もし「こうやれば簡単だよ」っていう情報があれば教えて下さい；

![Gyazo](https://i.gyazo.com/b3eee03b3811e50899421ab61a5ef781.gif)
*挙動を確認している図*

例によって[サンプルはGithubに上げて](https://github.com/edom18/Unity-CollisonChecker/tree/master)あります。

### 今回利用したメソッド

今回の実装は `Rigidbody` の以下のふたつのメソッドを使いました。


#### SweepTest

```c#
public bool SweepTest(Vector3 direction, out RaycastHit hitInfo, float maxDistance = Mathf.Infinity);
```

SweepTestは引数を見ても分かるように、「そのオブジェクトがその方向に進んだらなにかとぶつかるか」を `bool` で返してくれるメソッドです。
さらに `RaycastHit` オブジェクトを渡すことで、レイキャストのように「どのオブジェクトのどこにあたったか」という情報まで与えてくれます。

参考: [Unity Document](http://docs.unity3d.com/ja/current/ScriptReference/Rigidbody.SweepTest.html)

#### MovePosition

```c#
public void MovePosition(Vector3 position);
```

こちらは剛体（Rigidbody）を移動させるメソッド。
基本的に物理演算対象のオブジェクトの `transform` は直接操作しません。
こちらのメソッドを使うと剛体を任意の位置に移動することができます。
ただし、該当の場所で衝突が起こる場合は適切に位置を補正してくれます。
（なので壁の中にめり込まない位置に移動してくれたりする）

参考: [Unity Document](http://docs.unity3d.com/ja/current/ScriptReference/Rigidbody.MovePosition.html)


## フロー

検出の仕組みは以下のフローになっています。

1. ある地点、ある方向への力を定義
2. オブジェクトに力を与え、自身で設定したタイムインターバルごとに位置をシミュレート
3. `MovePosition` を使ってシミュレート位置に剛体を移動する
4. 各位置ごとに `SweepTest` を実行し、他オブジェクトとの衝突判定を行う
5. (4)を繰り返し、衝突が検出されるか、指定回数の試行回数を超えるまで実行する
6. 検知された最初の位置をイベントで通知する

という流れになっています。

### ある地点、ある方向への力を定義

地点は物理的に移動させたいオブジェクトの場所です。力についてはゲームの内容やどうしたいかによりますが、実際に適用する予定の力を指定します。（例えばゴルフゲームのボールに加える力など）

### 位置のシミュレート

位置の計算については[以前の記事](http://qiita.com/edo_m18/items/5e367eb6dc1417c25474)をご覧ください。


### 剛体の位置を更新する

剛体の位置は `MovePosition` を利用して行います。
なお、この位置の移動は計算上の目的のため視覚的になにかを移動する目的では利用しません。

```c#
// (2)で計算した位置に移動させる
Vector3 pos = CalcPositionFromForce(time, mass, startPosition, force, gravity);
m_rigidbody.MovePosition(pos);
```


### SweepTestで衝突チェック

位置を移動したら、その位置から少し先までの間に衝突が検知されるかをチェックします。

```c#
// 衝突した場合の情報格納用
RaycastHit hit;

// `SweepTest` で衝突をチェック
if (m_rigidbody.SweepTest(direction, out hit, distance)) {
	 // 無視するオブジェクトの場合は処理をスキップ
    foreach (GameObject ignore in IgnoreObjects) {
        if (hit.collider.gameObject == ignore) {
            needIgnore = true;
            break;
        }
    }
        
    // Continue the loop if collider is contained in ignore objects.
    if (needIgnore) {
        time += interval;
        frame++;
        continue;
    }

    if (OnDetect != null) {
        OnDetect(hit.point);
    }

    Destroy(gameObject);
    return;
}
```

こうして徐々に位置を進めていき、衝突が検知されたらそれをイベントとして通知して処理を抜けます。
見てもらうと分かりますが、だいぶ重い処理をループしているので処理を間引いたり、必要なときだけ計算を行うなどの処置が必要かもしれません。

コード全体は[Githubのサンプル](https://github.com/edom18/Unity-CollisonChecker/tree/master)をご覧ください。
MithrilのViewにMSXを使ってみよう！


フロントエンドフレームワークの一つで、コアの大きさがかなり小さいことで有名な（なんと12KB！）Mithril。

しかし、Viewの書き方がイケてないという声がチラホラ。
例えば以下の様なHTML

````HTML
<html>
  <body>
  	<input type="checkbox" />
  </body>
</html>
````

これがMithrilのViewでは以下の様に表記します。

````JavaScript
m("html",[
  m("body", [
  	m("input[type=checkbox]")
  ])
]);
````

確かに分かることは分かりますがちょっと取っ付きにくいですね・・・
で、この書き方に慣れない方にはMSXというツールがオススメです！

## どういうツールなの？

[MSX](https://github.com/insin/msx)はReact.jsで使われているJSXを模したもので、
普段書き慣れているHTMLの書き方からMithril独自の書き方に変換してくれるスグレモノです。

色々と使い方があるツールですが、今回は簡単にコマンドラインから変換する方法を紹介します。

## やり方

まずはMSXのインストールを行います。

````bash
$ npm install -g msx
````

そして、次にViewを以下の様に書いてみましょう。

````view.js
app.view = function() {
    return <html>
        <body>
            <input onchange={m.withAttr("value", app.vm.description)} value={app.vm.description()}/>
            <button onclick={app.vm.add}>追加</button>
        </body>
    </html>
};
````

そして、このViewを変換するのですが変換の入力/出力先の指定がディレクトリのみになっていますので、
事前に````view````と```compile_view```などのディレクトリを切ってから以下の様にコマンドを叩いてみましょう。

````bash
$ msx view/ compile_view/
built Module("app.view")
["app.view"]
````

という感じでcompile_view内に変換されたViewが生成されているはずです。
実際にはmsxのオプションとして用意されている````--watch````を使って、監視しつつ常に変換するというやり方がベターなやり方になりそうです。

試してみたいけどファイルやら用意するのが面倒くさいという方は、
以下のGithubリポジトリにチュートリアルのTODOリストを修正したものを用意しましたので、
````git clone````してからmsxコマンドを試してみてください。

https://github.com/syossan27/todo-mithril
Gistは便利

知らない人がいるかもしれないし、知見としておいておく。
GitHubのGist実は便利。ちょっとしたコードの管理ならGistがおすすめ。
ところで、Gist単体で検索すると癌の話が見つかるので注意です。ちょっとGist知りたいな〜と思ったら「GitHub Gist」とかで検索するといいと思う・・・。

# Gistでできること
- ファイルは１つだけでなく、複数まとめて扱える
- zipとしてダウンロードできる
- privateに管理できる（URL知られちゃったらダメだけど）
- 履歴管理できる
- (履歴管理できるとかぶるけど)Gitのリポジトリとして使える(私は使ったことないけど、記事見つけました「[日々常々 - Gistで遊んでみる](http://irof.hateblo.jp/entry/20120814/p1)」)

# Gistツールのおすすめリンク
使ったことあるの2つしかなかったけど、便利なので共有です。

- Gist管理ツール。検索やタグ付けができる - [GistBox](http://www.gistboxapp.com/)

- Sublime Textプラグイン - [SUBLIME TEXT 2からGITHUB:GISTへ投稿できるプラグインの使い方](http://offsidenow.phpapps.jp/archives/898)
Chrome の Mobile Emulation で AngularJS が激重になるレアケース

これらの条件を満たすと、Chrome の Mobile Emulation が激重になります。Chrome じゃなくても起こるかもしれません。

- Angular JS を使っている
- ng-repeat に1000件とかつっこんでる
- ng-repeat の中の要素で ng-style を使っている
- ng-style の中で $window.innerWidth などを使っている
- ng-repeat の中の要素で CSS の float など、レイアウトコストが高いプロパティを使っている

こんな状況だと、ng-repeat で繰り返す回数だけレイアウトの再計算（リフロー、Chrome の Developer Tools の Timeline でいうところの Layout）が発生して、非常に重くなります。

検証コードは[こちら](http://plnkr.co/S6Cs2w)です。実際に http://run.plnkr.co/plunks/S6Cs2w/ を Mobile Emulation を有効にした Chrome で開くと、数字が出てくるまで数秒かかるはずです。何が起こっているのかは、Developer Tools の Timeline で確認できます。

![Layout が何度も呼び出されて重くなっている様子](https://qiita-image-store.s3.amazonaws.com/0/6870/c23a0b41-77e4-bc52-1afe-c33ac4be6d1f.png)

で、こんなことになったらどうするかって話ですが、答えは簡単。ng-style の中で $window を使うのをやめるだけです。

```
windowWidth = $window.innerWidth;
$scope.$watch(function(){
    return $window.innerWidth;
}, function(value) {
    windowWidth = value;
});
```

こんな風にしておいて、ng-style の中では windowWidth を使うようにすれば、ずいぶんと速くなります。
VisualStudioCodeでreferencesの表記を消すには

2017/06/25 追記

現在のバージョンでは、以下の手順で対応することができるようです。

VisualStudioCodeのメニューから、
[Code]->[基本設定]->[設定]を選択。

Default Setting側で「editor.co」で検索すると、**editor.codeLens**という項目が見つかると思います。
<img width="439" alt="スクリーンショット 2017-06-25 10.27.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/53109/0cb0a89e-08db-299e-48a8-cb300be85a95.png">


これを行ごとユーザー設定側にコピーし、値をtrueからfalseに書き換えます。

以上で完了です。


***
####以降は古いVisualStudioCodeのバージョンでの対応方法です

VisualStudioCodeとUnityを連動させた際に、
変数や関数の上に**0 reference**などと表示されてうっとおしかったので、消す方法を調べました。

![001.png](https://qiita-image-store.s3.amazonaws.com/0/53109/b359c7b4-f3df-0a98-28ed-206cb2175a44.png)
参照数がわかって便利なのですが、行管理がしにくかったりマウスでの選択がしにくい！

***
###setting.jsonを修正する
VisualStudioCodeのメニューから、
[Code]->[Preferences]->[User Settings]を選択。

エディタの左側にDefault Settingが表示され、右側にsettings.jsonが表示されます。

Default Setting側で「ref」で検索すると、**editor.referenceInfos**という項目が見つかると思います。
![スクリーンショット 2015-08-14 0.57.43.png](https://qiita-image-store.s3.amazonaws.com/0/53109/47eb13de-b770-529f-5c6d-0c170779bfc3.png)

これを行ごとsettings.json側にコピーし、値をtrueからfalseに書き換えます。

![003.png](https://qiita-image-store.s3.amazonaws.com/0/53109/24242c33-8512-e051-1e37-c3a75e9e098a.png)
末尾に追加する場合は、行末のカンマは不要なのでご注意ください。

***
これでエディタから**reference**の表記が無くなりました。
![004.png](https://qiita-image-store.s3.amazonaws.com/0/53109/4b6e3f90-ff4f-2832-0f5c-f2830b6e82bd.png)
Gitの歴史修正、first commitすら書き換える

##最初のコミットと最後のコミットのみにする

Gitのコミット履歴を書き換えるには、`git rebase`を使います。

ここで、最初のコミット以外、すべて無かったことにしてみます。

具体的には、以下の様なコマンドで完了します。

```bash
$ pwd [repo] #現在のディレクトリを分かりやすいように表示しています
reponame

# まずクローンを作り、最新の.gitを手に入れる
$ git clone https://git-host-site/user/repo.git repo.back [repo]

# 念のため.gitのバックアップを保存
$ mv .git ../.git.back [repo]

# 最新のリポジトリで歴史修正を行う
$ cd repo.back [repo]
$ git rebase -i --root [repo.back]
pick first commit #これ以外すべて削除
pick secound commit
pick 3
pick 4

# 保存すると、ファイルが最初のコミットの状態に戻る
# そこで、この.gitを手に入れる
$ mv .git ../ [repo.back]

$ cd ../ [repo]
$ git add -A
$ git commit -m "rebase"
$ git push -f
```

これで、リポジトリは、最初のコミットと最後のコミットのみになります。

##最新のコミットのみにする

`git rebase -i`で編集出来る内容は、以下のようになっています。ここでは、コミットをまとめる`squash`を使って最初のコミットを最新のコミットにしてみます。

```
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
```

上の状態にした後、つまり、最初と最後のコミットのみの状態にした後、`squash`を使います。

```bash:
$ git rebase -i --root
pick first commit
pick rebase

#これを以下のようにして保存します。その後も内容が良ければ編集せずに終了します
pick first commit
squash rebase

#後はpushするだけです
$ git push -f
```

他にもシンプルな方法があれば教えて下さい。

参考

[Git のさまざまなツール - 歴史の書き換え](https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB-%E6%AD%B4%E5%8F%B2%E3%81%AE%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88)
PlayFrameworkのFormsを試してみました

## はじめに

昨日、[PlayFrameworkでCookieを試してみました](http://qiita.com/t-mochizuki/items/6498b040e8daefa5692c)という記事を書きました。

今日は、Formsでリクエストパラメータ(クエリ文字列)を読み込むことを試してみたいと思います。

具体的には、PostmanというツールでPOSTメソッドのリクエストを送信して、そのリクエストパラメータを読み込めるかどうかを確認したいと思います。

Formsでリクエストパラメータを読み込めることは知っているので、主に、パラメータの数が少ない場合とパラメータの数が多い場合を確認してみたいと思います。

ひとまず、参考にした記事を紹介します。

- [Play2.0（Scala）でフォームの値を受け取る | mwSoft](http://www.mwsoft.jp/programming/play/scala_play_form.html)
- [ScalaForms](https://www.playframework.com/documentation/2.4.2/ScalaForms)

前回の[PlayFrameworkでCookieを試してみました](http://qiita.com/t-mochizuki/items/6498b040e8daefa5692c)を再利用します。この記事では、変更したファイルを紹介します。

## ファイル

まず、routesを見てみます。POSTメソッドを利用するように変更しました。

```routes
POST / controllers.Tokyo.user
```

次に、Tokyo.scalaを見てみます。リクエストパラメータを読み込むように変更しました。

```scala
package controllers

import play.api._
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._

case class UserData(name: String, age: Int)

object Tokyo extends Controller {
  val userForm = Form(
    mapping(
      "name" -> text,
      "age" -> number
    )(UserData.apply)(UserData.unapply)
  )

  def user = Action { implicit request =>
    val userData = userForm.bindFromRequest.fold(
        error => UserData("error", 0),
        data => data
      )
    Ok(s"name: ${userData.name}, age: ${userData.age}")
  }
}
```

## Postmanでリクエストを送信してみる

### リクエストパラメータが正常な場合

期待通りの動作になります。

![スクリーンショット 2015-08-13 23.43.16.png](https://qiita-image-store.s3.amazonaws.com/0/29884/4f452362-727c-fd53-0250-48490c548616.png)

### リクエストパラメータが多い場合

余分なパラメータweightを無視します。

![スクリーンショット 2015-08-13 23.44.44.png](https://qiita-image-store.s3.amazonaws.com/0/29884/5ab2be82-6446-c861-1e8c-b76e29367e03.png)

### リクエストパラメータが少ない場合

普通にgetで読み込もうとすると、None.getで実行時エラーになります。そのためfoldを使いました。ここではエラーの場合にUserData("error", 0)を返すようにしています。

![form1.png](https://qiita-image-store.s3.amazonaws.com/0/29884/14c0d8ce-2a7a-6502-53fa-318bc01e7196.png)

## 振り返り

リクエストパラメータが多い場合と少ない場合を確認しました。ひとまず、想定していた結果になりました。

Postmanを使えば、HTMLでPOSTメソッドを用意する必要がありません。ちょっとしたことを試すときには便利だと思います。
Swiftでアトミック操作（排他処理）


Swiftの標準ライブラリ中で定義されてるシンボルを(otoolで)眺めていたところ，'atomic'という文字列を含むものがいくつかありました．これは使わない手はない！ということで，使い方をメモしておきます．

### アトミック関連のクラス，関数
- 公開クラス _stdlib_AtomicInt
	- 公開クラスでXcodeのエディタで補完が効くので使い方は簡単に分かると思います．
	- メソッドはload(), store(), addAndFetch(), fetchAndAdd()と，Swift 2.0からcompareExchange()が使える．
- 公開関数 _stdlib_atomicCompareExchangeStrongPtr<T>()
	- アトミックにポインタを交換する．
	- 引数はUnsafeMutablePointer\<UnsafeMutablePointer\<T>>, UnsafeMutablePointer\<UnsafeMutablePointer\<T>>, T

- 非公開関数(通常は使えない)たち
	- swift_stdlib_atomicStoreUInt32
	- swift_stdlib_atomicStoreUInt64
	- swift_stdlib_atomicFetchAddUInt32
	- swift_stdlib_atomicFetchAddUInt64
	- swift_stdlib_atomicCompareExchangeStrongUInt32
	- swift_stdlib_atomicCompareExchangeStrongUInt64

　　
### クラス_stdlib_AtomicIntを使う簡単な例: Lock

```swift
public struct Lock {
    private let value = _stdlib_AtomicInt(0)

    public mutating func trylock() -> Bool {
        var zero = 0
        return value.compareExchange(expected: &zero, desired: 1)
        //let result = value.addAndFetch(1)  // Swift 1.2
        //return result == 1 ? true : false
    }
    public mutating func unlock() {
        value.store(0)
    }
}
```
という感じで使い方は簡単です．
しかし，使う場面によってはパフォーマンス的に少々問題があるかもしれません．
_stdlib_AtomicIntはクラスであり参照型なので常にARCの管理下にあります．そのため，この変数を参照すると必ずretain,releaseに挟まれます．retain,releaseは参照カウントをアトミックに増減するので，全体では3度もアトミック操作をすることになってしまい結構重いかもしれません．

### 非公開関数を使ってしまおう．

非公開でもシンボル名と処理内容さえ分かれば禁断の技？が使えます．
[ここ](https://github.com/rodionovd/SWRoute/wiki/Function-hooking-in-Swift)で知ったのですが，Swiftには`@asmname("NAME")`という隠し属性があって，リンク時の関数シンボル名を自由に設定できます．これを逆手にとって，`@asmname("見つけた非公開シンボル名")`というふうに使って白実のもとに晒してしまいます．
具体的には，

```swift
@asmname("swift_stdlib_atomicCompareExchangeStrongUInt64")
func atomicCAS64(#target: UnsafeMutablePointer<UInt64>, #expected: UnsafeMutablePointer<UInt64>, #desired: UInt64) -> Bool
```
こんなふうに．SwiftではatomicCAS64という関数名だけどリンク時にはアレにしてね，という感じです．
引数に関しては，逆アセンブルした非公開関数のレジスタの使い方をみて決めないといけませんが，そんなに難しくはないです．さて，これを仕込んでおけば：

```swift
var x = Uint64(0)
var y = UInt64(0)
let sucess = atomicCAS64(&x, expected: &y, desired: 1)
```
このように，非公開関数を呼び出すことができるようになります．

### 速いかもしれないLock
クラスを使うとretain,releaseが挟まって遅くなると書きました．なのでストラクトと白実の下にさらした非公開関数を使って高速版Lockを実装してみます．（本気で使う場合はTest and Test and Setにしたほうがよい）

```swift
@asmname("swift_stdlib_atomicCompareExchangeStrongUInt64")
func atomicCAS64(target target: UnsafeMutablePointer<UInt64>,
    expected: UnsafeMutablePointer<UInt64>, desired: UInt64) -> Bool

@asmname("swift_stdlib_atomicStoreUInt64")
func atomicStore64(#target: UnsafeMutablePointer<UInt64>, #value: UInt64) -> ()


public struct FastLock {
    private let ptr: UnsafeMutablePointer<UInt64>

    public init() {
        ptr = UnsafeMutablePointer<UInt64>.alloc(1)
        ptr.initialize(0)
    }
    public func dispose() {
        ptr.dealloc(1)
    }
    public mutating func trylock() -> Bool {
        var zero = UInt64(0)
        return atomicCAS64(target: ptr, expected: &zero, desired: 1)
    }
    public mutating func unlock() {
        atomicStore64(target: ptr, value: 0)
    }
}
```
FastLockは値型ですがロック対象である整数はポインタでアクセスする（ヒープ上に割り付けてある）ので，この値型コピーしてもロック対象は必ず共有されています．
ARCの管理下にないのでFastLockを使い終わったらdispose()するのを忘れないように．
AWS IOTハッカソン発表事例AWS構成説明（３）MQTT  Broker作成


本業の方が忙しく、気づいたら前回の投稿から２ヶ月位経過していました。。。。
まだ本業の方は落ち着いていませんが、お盆休み中に子供達の相手をする合間にまとめてみました。

今回は、MQTT Brokerの構築まで書きたいと思います。

#■MQTTとは？
構築手順を説明する前に簡単にMQTTについて触れたいと思います。

MQTTの説明に関しては以下のサイトが参考になりました。
https://sango.shiguredo.jp/mqtt

MQTTにはMessageを送る際の宛先情報としてTOPICという情報があります。
TOPIC情報は階層構造になっており、受信（Subscribe)側はそれらのTOPICを柔軟に指定できることが特長です。

例えば以下のようなTOPICが存在したとします。
/１年生/国語/１組
/１年生/算数/１組
/１年生/国語/２組
/１年生/算数/２組

送信(Publish)側は、上記のTOPICそれぞれを指定して送信する形になります。
一方、受信（Subscribe)側は以下のような形で指定することが可能です。

/１年生/国語/#
→前方一致指定。「１年生/国語」以下に届くメッセージを受信することができます。

/１年生/＋/１組
→部分一致指定。１年１組に該当するメッセージを受信することができます。

このようにMQTTは受け取り側で情報を柔軟に選択できる仕様になっています。
ですが、送信側から受信側を特定したいという場合には少々使いづらい仕様なので工夫が必要だと感じました。


#■AWS上でのMQTTサーバ構築

以下の通り、環境構築を行いました。

##・VPC生成

　［マネジメントコンソール]→[VPC]→[VPC]→[VPCの作成]
　
　　設定内容は以下の通り。

|設定項目	|設定値	|
|:------|:--------------|
|CIDRブロック　|10.0.0.0/16|
|テナンシー　　　|デフォルト|

##サブネット生成

［マネジメントコンソール]→[VPC]→[サブネット]→[サブネットの作成]
　　　　
設定内容は以下の通り
 
|設定項目	|設定値	|
|:------|:--------------|
|VPC       |先ほど作成したVPCを選択|
|アヴェイラビリティゾーン　　|（今回は）ap-northeast-1aを選択|
|CIDR　　　　　|10.0.1.0/24|

##・インターネットゲートウェイ生成

［マネジメントコンソール]→[VPC]→[インターネットゲートウェイ]→[インターネットゲートウェイの作成]

作成後、上記VPCにアタッチ

##・インスタンス生成
[マネジメントコンソール]→[EC2]→[インスタンス]→[インスタンスの作成］

インスタンスタイプはt2.microを選択しました。
作成時に上記VPC、サブネットを指定。

##セキュリティグループ生成
　　
［マネジメントコンソール]→[VPC]→[セキュリティグループ]→[セキュリティグループの作成]

設定内容は以下の通りとしました。

###インバウンド

|タイプ	|プロトコル	|ポート範囲	|送信元    |
|:------|:--------------|:--------------|:--------|
|SSH	|TCP	|22	|0.0.0.0/0|
|カスタム TCP ルール	|TCP	|1883	|0.0.0.0/0|
|カスタム UDP ルール	|UDP	|1883	|0.0.0.0/0|

###アウトバウンド
|タイプ	|プロトコル	|ポート範囲	|送信先    |
|:------|:--------------|:--------------|:--------|
|すべてのトラフィック	|すべて	|すべて	|0.0.0.0/0|


作成したセキュリティグループをEC2インスタンスに割り当てる

##・Elastic IP生成

　［マネジメントコンソール]→[VPC]→[Elastic IP]→[新しいアドレスの割り当て]

   アドレス作成後、インスタンスと紐付けます。


#■MQTT Brokerの構築
今回は「mosquitto」というMQTT Brokerを利用してみました。

mosquittoのインストールについては以下のページを参考にして行いました。
http://flyerback.blogspot.jp/2014/04/mqtt-broker-mosquitto-amaazon.html?m=1


MQTT Brokerの疎通確認はPythonで作成したプログラムで確認しました。
基本的に以下のページに基づきpahoというライブラリを利用して接続しました。
http://minor.hatenablog.com/entry/2015/02/08/221819

これで端末間でメッセージを送るための土管ができたことになります。
次回はその土管内で送るプロトコルをまとめるか、S３→Lamda→DynamoDBの流れのどちらかを書くと思います。
Varnish 4.0でヘルスチェックに200を返す

Varnish 4.0では、以下のようなVCLを書くとロードバランサ等からのヘルスチェックに200を返す事ができる。

```default.vcl
vcl 4.0;

sub vcl_recv {
  if (req.url == "/healthcheck") {
    return(synth(200));
  }
}
```
CakePHPのFormHelperのInput Type Dateで年月日のemptyを別々にする

まあ要はこうしたいということですね。
![理想.png](https://qiita-image-store.s3.amazonaws.com/0/89365/75143651-766e-a9f8-97b5-8fe85e93e0fe.png)

とは言え普通のセレクトボックスのようにemptyを指定しても、こんな感じにしか指定できません。

```php
echo $this->Form->input('誕生日', array(
    'type' => 'date',
    'dateFormat' => 'YMD',
    'monthNames' => false,
    'empty' => '選択してください',
));
```

![通常.png](https://qiita-image-store.s3.amazonaws.com/0/89365/fed04220-7777-3c86-4f76-6b54509914aa.png)

じゃあどうするかというと

```php
echo $this->Form->input('誕生日', array(
    'type' => 'date',
    'dateFormat' => 'YMD',
    'monthNames' => false,
    'empty' => array('year' => '年', 'month' => '月', 'day' => '日'),
));
```

こんな感じでいけます。
情報が見つからなかったので備忘を含めて初投稿。
GitのHEADを理解する


rebaseを取り消す際にHEADではなくORIG_HEADを指定することを理解せずにやっていましたが、HEADも実はよく分かっていないことに気づいたので、調べることにしました。

公式ドキュメントの少し分かりにくいことろにきちんと載っていました。

#５つのHEAD

以下の英文は[gitrevisions](https://git-scm.com/docs/gitrevisions "gitrevisions")から引用しています。

##HEAD

__ワーキングツリーの最新のコミット__

>HEAD names the commit on which you based the changes in the working tree. 

##FETCH_HEAD

__最後にフェッチを行ったブランチを（記録）__

> FETCH_HEAD records the branch which you fetched from a remote repository with your last git fetch invocation. 

##ORIG_HEAD

__HEADが移動するコマンドを叩いた際に、コマンド実行時のHEADの位置を記録__

>ORIG_HEAD is created by commands that move your HEAD in a drastic way, to record the position of the HEAD before their operation, so that you can easily change the tip of the branch back to the state before you ran them. 

##MERGE_HEAD

__マージの際に、ブランチに統合されたコミット（群）を記録__

>MERGE_HEAD records the commit(s) which you are merging into your branch when you run git merge. 

##CHERRY_PICK_HEAD

__チェリーピックの際に、ブランチに統合されたコミットを記録__

>CHERRY_PICK_HEAD records the commit which you are cherry-picking when you run git cherry-pick.


#HEADは一時的なコミット（群）の記録
gitはよく図形的に説明されるのでHEADを位置と説明されますが、FETCH_HEADやMERGE_HEADの説明からわかるようにHEADは位置を表すわけではないようです。ただ大抵の場合HEADやORIG_HEADしか意識されないので、結局のところ「HEADはコミットの位置」という解釈でよい気がします。


#謝辞
最後まで読んでいただき、誠にありがとうございます。
Windowsバッチで日付計算を扱う際の注意点

Windowsバッチで、日付の計算を行う必要があり、自作でロジックを組んだが、本番障害を起こしてしまった。

原因は、現在日（%DATE%）をそれぞれ年、月、日に分割して足し引きを行うところで、
日が10未満の場合に「08」のようになっており、
そのまま計算していたところで
「無効な数字です。数値定数は 10 進 (17 桁)、16 進 (0x11 桁)、または 8 進 (021 桁) です。」
というエラーで落ちてた。
これが8日と9日にだけ発生していた。

確かに本来は10未満の場合は「08」⇒「8」に変換してから計算すべきだったけど、
それは1日から7日までも同様だったはず。
しかも1日などはテストでもやっていたのに・・・

そのカラクリはこうだった。
DOSコマンドで数値は、先頭が「0」の場合は8進数とみなされる。
計算する際に10進数に暗黙的に変換されて処理されるが、
「01」～「09」の場合

「01」～「07」までは8進数を10進数に変換すると「1」～「7」になるため正しく処理される。
ただし、「08」、「09」の場合はそんな8進数は存在しない。
そのためエラーになったわけだ。

覚えておこう。
そしてちゃんと10未満以下の場合の変換を明示的に行うようにしよう。

回避策としては
月、日を変換する場合は年、月、日に分割した後、
分割後の文字列の左端に「1」を付与し、100を引くことで正しく変換できる。

例：
set dd = '08'
set /a dd = 1%dd% - 100
データベースクラスを作成するぞ - vol.1

#まえがき
スマホから投稿のテストも兼ねて
ちょっとした、空き時間を見つけては
追記していく用のデータベースクラスの作成。

なお、**クラスやらOOPやらがてんでダメな奴**が作成するので
見ても**参考にはならない**と思われる…ww

##やりたいこと
例えば、

```php:
class DB {
    public function __construct() {
        // DB接続うんたらかんたら…
    }
    public function insert() {
        // insertうんたらかんたら…
    }
    public function update() {
        // updateうんたらかんたら…
    }
        ・
        ・
}
```

んな感じでクラスを作成しておき、
DB::insert() とか $this->_db->update() で
呼び出して使う…みたいなことがしたい、と。

で、なるべくの希望として
『クラスを使うときは"簡単"に使いたい!!』

というわけで、ボチボチ作ってみる。

#データベースクラスの作成

```php:DBクラス
class DB ｛
    private static _instance = null;
    Private _pdo;

    public function __construct() {

        // 便宜上の色々
        $dsn = "mysql:dbname=【データベース名】;host=【ホスト名】;charset=utf8";
        $user = "【ユーザー名】";
        $pass = "【パスワード】";

        try {
            $this->_pdo = new PDO($dsn, $user, $pass);
        } catch (PDOException $e) {
            die($e->getMessage());
        }
    }

    // *1
    public static function getInstance() {
        if(!isset(self::$_instance)) {
            self::$_instance = new DB();
        }
        return self::$_instance;
    }

    public function insert() {}

    public function update() {}

    public function delete() {}
｝
```

プロパティ部分では、外部からアクセスできないように
"private"で指定する部分がほとんどだと思われる。（今後も

コンストラクタを"private"にすることで、インスタンス生成を
制限しておく。呼び出しは(\*1)のメソッド **getInstance()** を
通らなければ、インスタンスの生成はできない。

（こういう形が俗に言う"シングルトンパターン"？？）

#あとがき
なんとなーく…というか
ぼんやーり…というか
薄ーっすら…というか。
FuelPHPでのメモリリーク？について

環境
FuelPHP 1.7.2

発端
taskで数万件のレコードを操作する処理をしていたら、メモリ不足エラーが出てしまったので原因を調査。

再現
下記のソースで確認、再現。

```php
for($i=0; $i<1000; $i++) {
    echo memory_get_usage(true), " usage.\n";
    $row = Model::find($i);
    unset($row);
}
```

```php
for($i=0; $i<1000; $i++) {
    echo memory_get_usage(true), " usage.\n";
    $row = new Model();
    $row->save();
    unset($row);
}
```

また、下記のものではメモリ消費量の増加はみられなかった

```php
for($i=0; $i<1000; $i++) {
    echo memory_get_usage(true), " usage.\n";
    $row = Model::find('first');
    unset($row);
}
```

```php
for($i=0; $i<1000; $i++) {
    echo memory_get_usage(true), " usage.\n";
    $row = Model::find('first');
    $row->set('aaa', $i);
    $row->save();
    unset($row);
}
```

結論
どうやらORMでレコードを取得・追加する際に、プライマリキーを使ってスタティック変数に保存してしまうみたい。
（`Model.php`の`static::$_cached_objects`を参照。`__construct()`,`create()`,`find()`などで使われている）
そんでもっていくら格納され続けても開放されないため、そこにどんどんデータが溜まっていってメモリ不足、という流れになっている。



確かに何度もDBに問い合わせが飛ぶのを防ぐという意味ではスタティック変数とかに格納しておくのはいいんだけれど、これはこれで困ってしまう気もするなぁ。
格納する処理自体はConfigでもOFFにできない様子なので、Modelクラス自体をオーバーライドして適度なところでクリアかけるとかするしかないかも。
単体テストの定義


#はじめに
新しいプロジェクトチームに配属され、詳細設計から担当しています。
新たに文化に触れてその文化に習って業務を進めているけど、
ギャップを感じたので書いてみようと思います。

##今の文化
###1. 詳細設計書の作成
コードベースでの詳細設計書
日本語とプログラミング言語が分かればコーディング出来るレベルのもの
その言語特有な記述もする
「なんていう名前のクラスの、なんていう名前のメソッドを呼びます」ってことまで書く

仮に、じゃあ別の言語で作ろっかってなった場合には、確実に通用しない

プログラム設計書と言った方がしっくり来る感じ
フローチャート、クラス図は必須ではない・・・とにかく、プログラムっぽい設計書書かないと。

###2. 単体テスト仕様書の作成
詳細設計書を見ながら、１行単位でテスト項目を作成
メソッドが呼ばれること、引数はこれであること、戻り値は何であること

詳細設計書が間違ってても、それをそのまま項目として挙げているので
詳細設計書の間違いにも気付きにくい

###3. コーディング
詳細設計書をもとにプログラミング言語に落とし込む

詳細設計書・・・微妙だなって思うことも多々ある。
思い切って変えちゃうと、詳細設計書書き直し、単体テスト仕様書も書き直し・・・

結局、コーディング完了して、詳細設計書直して、単体テスト仕様書を直すという手戻り

###4. 単体テスト
プログラムベースでのテスト項目
この関数が呼ばれる、その次はこれが呼ばれる・・・

あれ？この場合ってテストしてないじゃん、あれ？これは？これは・・・？

##個人的考え
###1. 詳細設計書の作成
1. 関数単位の機能フロー
概要設計書をもとに、大まかな機能ごとにフローチャートを作成
大まかな機能を分割、分割、分割・・・
単一機能レベルまでに落とし込み
落とし込んだ単一機能レベルのフローチャートが完成する

2. 関数仕様書
単一機能毎に関数仕様書の作成
関数の処理内容を記述（言葉で）
IN と OUT を明確に
IN は、A、B
OUT は、A = 文字列、B = true のときは、X
A = null、B = true のときは、Y
こんなときには、例外が起きる
みたいな感じで、条件を網羅する
この条件網羅が、単体テストのテスト項目になる
この場合、運用のことはあまり考慮せずに網羅する
運用で起きないパターンについては、「テストしたけど起きないよねw」でいいと思う
万が一起きちゃった場合の保険。

3. DB操作系の仕様書
こんな項目を検索
こんな項目を挿入

4. DB操作系のパターン表
これとこれが、これのときにはこれ
あれとこれが、これのときにはそれ
これも全件網羅

###2. 単体テスト仕様書の作成
関数仕様書とDB操作系のパターン表で終わっている

ここでUnitTestのコーディングできちゃうかも

###3. コーディング
関数仕様書を元に、機能を作り
機能フローを元に、処理をくみ上げていく

ここでUnitTestのコーディング（コーディングする前に作っても可）

###4. 単体テスト
UnitTestを流すだけ
結果のエビデンスとって終わり

#まとめ
とにかく現状がいけてないなーって思ったから
こうするとよくなるんじゃない？
って思いつきで書いています。最後、結構雑になりました。

とりあえず、提案してみよう

何か、思うことありましたら意見を頂ければと思います。

夢見過ぎ・・・とか、そんなんもう10年前で終わってる・・・とか
学生ですか？お花畑すぎでしょwww とか、何でも大歓迎です。
implicit parameter や Reader でコンテキスト引き回し


DB のセッションだったり、処理中の HTTP request だったり、何らかのコンテキストを引き回したいときに implicit parameter 使うことがある。

`Context#x()` が Int をとって Int を返すとすると、 implicit parameter で引き回すプログラムはこんなかんじになる。

```scala
// 適当な関数 f と g の定義
def f(i: Int)(implicit context: Context): Int = context.x(i)
def g(i: Int)(implicit context: Context): Int = f(i) * 2

// 呼び出し
implicit val myContext: Context = ???
val x = g(1)
val y = g(x)
```

呼び出し時に毎回 Context を引数に書かなくても良いのが良い所。

implicit を使わなずに普通の引数にすると呼び出し時に毎回コンテキストを渡すことになる。

```scala
// 適当な関数 f と g の定義
def f(i: Int, context: Context): Int = context.x(i)
def g(i: Int, context: Context): Int = f(i) * 2

// 呼び出し
val x = g(1, myContext)
val y = g(x, myContext)
```

scalaz.Reader の場合。

```scala
// 適当な関数 f と g の定義
def f(i: Int): Reader[Context, Int] =
  Reader { context => context.x(i) }
def g(i: Int): Reader[Context, Int] = f(i).map(_ * 2)

// 呼び出し
(for {
  x <- doSomething(1)
  y <- doSomething(x)
} yield y).run(myContext)
```



type alias を定義すればスッキリ見える。

```scala
type Work[A] = Reader[Context, A]
def f(i: Int): Work[Int] = Reader { context => context.x(i) }
def g(i: Int): Work[Int] = f(i).map(_ * 2)
```

f や g の `=` の前までは一番短い。
呼び出しでは暗黙的にコンテキストを渡すことは出来ない。for式などを使うことで、複数の Reader を組み合わせることができるので、最後 run するときだけ渡せば良い。呼び出し時に context を何度も書く必要はない。

暗黙的にコンテキストを渡す場合には複数ある implicit の探索箇所のいずれかにデフォルトコンテキストを忍ばせるなどができる。run 時に明示的に渡すのはそれはそれで気持ちが良い。

他のモナドと混ぜるときには `ReaderT` をつかうか、for などをネストするかになるのかな。すこしめんどい。

いままで implicit で引き回していたところを Reader を使うようにすれば、implicit は型クラスだけに使うべき派(?)になれるのかもしれない。