OmniAICreator/Qiita-1.07M huggingface dataset:
ObjC to Swift : Sorting objects in an array by date


Objective-C

```Objective-C
//  object being sorted
@interface ObjCObject : NSObject
@property (copy) NSString * name;
@property (strong) NSDate * date;

//  mutable array of the object
NSMutableArray * objects = ...

//  sort by object.date
[objects sortUsingComparator: ^NSComparisonResult( ObjCObject * object0,
                                                   ObjCObject * object1 )
{
	return [object0.date compare: object1.date];
}];
```

Swift

```Swift
//  object being sorted
class SwiftObject
{
	var name = String()
	var date = NSDate()
}

//  mutable array of the object
var objects = ...

//  sort by object.date
objects.sort
{
	$0.date.timeIntervalSince1970 > $1.date.timeIntervalSince1970
}
```
ObjC to Swift : Lazy property initialization


Objective-C

```Objective-C
@property (nonatomic, strong) NSMutableDictionary * createWhenNeeded;

- (NSMutableDictionary *) createWhenNeeded
{
	if ( _createWhenNeeded == nil )
	{
		_createWhenNeeded = [[NSMutableDictionary alloc] init];
		
		//  do some initialization
	}
	
	return _createWhenNeeded;
}
```

Swift

```Swift
lazy var createWhenNeeded: [String : NSObject] =
{
	//  do some initialization
}()
```
iScrollの使い方

###概要
スマホWebサイトを作成する際に、ヘッダ、フッタを固定して、コンテンツ部分はスクロールさせたいと思いました。
　ヘッダの固定は特に問題なく出来るのですが、フッタの固定はWindowサイズが端末によって変わるので、どうしたものかと思っていました。

###iScroll
　JSで何かよいパッケージがあるかと探したところ、iScrollというものがありましたので、それを導入した過程を書きます

###URL
http://iscrolljs.com

###install（bower利用時）
```csh
$ bower install --save iscroll
```
※bowerを使っていない場合は、上記サイトからDLして下さい

###how to
まずは、include

```html
<script src="bower_components/iscroll/build/iscroll.js"></script>
```
※PATHはbowerを利用時のものです。適当に読み替えて下さい

body部を、3つのセクション（ヘッダ、コンテンツ、フッタ）に分けます

```html
<div id="header"></div>
<div id="wrapper"></div>
<div id="footer"></div>
```

iScrollの設定をします。

```js
    myScroll = new IScroll('#wrapper', {
        mouseWheel: true,
        scrollbars: false
    });
```
ここで、重要なのが第一引数としているセレクタの意味しているところです。iScrollは、ここで指定したセレクタ直下にあるblock要素をscrollさせるます。
故に、

```html
<div id="wrapper">
  <ul>
    <li>...</li>
    ...
  </ul>
</div>
```

とすると、ul部分がスクロール対象と処理されるようになります。
詳しくは、iScrollのインスタンスを見てもらうと理解できると思います。

```js
console.log(myScroll);
```

スクロール箇所を明確にするため、scrollerセクションを作ります

```html
<div id="wrapper">
  <div id="scroller">
    <div id="content_1">...</div>
    <div id="content_2">...</div>
    <div id="content_3">...</div>
  </div>
</div>
```

上記までで、やりたいことは実現できるかと思います。

###補足
使い方がまずいのか、下までscrollすると、最後のコンテンツが切れてしまう現象がありまして、対策として、最後のコンテンツはpadding-bottom:20pxしました。
AlethZero (cpp-ethereum) の Mac OS Xへのインストール方法

以下に移行しました<br><a href="http://block-chain.jp/tech/install-alethzero-cpp-ethereum-on-mac/" title="AlethZero (cpp-ethereum) の Mac OS Xへのインストール方法">AlethZero (cpp-ethereum) の Mac OS Xへのインストール方法</a>
ImageMagick で画像のフチの背景色を切り取って透明に

# 例

コマンドラインで背景色を取り除きたい。

![input200.png](https://qiita-image-store.s3.amazonaws.com/0/25886/c407bcd8-b79e-d86e-f3bf-78ca5f7fe8e2.png)

を

![output200_tile.png](https://qiita-image-store.s3.amazonaws.com/0/25886/cdb440e5-2619-978c-771e-eea8a4078eb1.png)

な感じにしたい。※

例えば、大量に白背景の画像を透明背景に変換しなくてはならない場合に便利。

# コマンド

ImageMagick を使う。

```
convert input.png \
  -alpha set \
  -background none \
  -channel RGBA \
  -fill '#00000000' \
  -fuzz 5% \
  -draw 'matte 1,1 floodfill' \
  output.png
```

-draw の行を読む通り、 1,1 の座標からペイントツールのバケツのように #00000000 (透明) で塗りつぶす。
-fuzz で塗りの曖昧さを調整できる。

## 注意

ImageMagick version 7 以降では `matte` ではなく `alpha` を指定する。
また、今後は `convert` よりも `magick` をプライマリのコマンドとして使用するほうが好ましいようである。
よって、次のようにする

```
magick input.png \
  -alpha set \
  -background none \
  -channel RGBA \
  -fill '#00000000' \
  -fuzz 5% \
  -draw 'alpha 1,1 floodfill' \
  output.png
```

https://www.imagemagick.org/script/porting.php
https://github.com/ImageMagick/ImageMagick/issues/1687

# ImageMagick のインストール方法

特に解説は不要だと思うけど念のため。
imagemagick というパッケージに含まれている事が多い。
パッケージマネージャからインストールすればいい。

## OS X ユーザで Homebrew を利用している場合

```shell-session:OSX
$ brew install imagemagick
```

## Debian 系

```shell-session:APT
$ sudo apt-get install -y imagemagick
```

## RHEL 系

```shell-session:Yum
$ sudo yum install ImageMagick
```

以下略。

# 失敗例

次のような単純な置換だとうまくいかない。
『全ての白色を透明に』するので、黒線の内側まで透明になってしまう。
これでは意図したものではない。

```
$ convert input200.png -fuzz 5% -transparent white output200_failed.png
```

![output200_failed_tile.png](https://qiita-image-store.s3.amazonaws.com/0/25886/4ed93aa9-9d0a-2ca8-0457-33ea4e7f4ead.png)


# 脚注

※ 2 つめの画像は『透明』をわかりやすく表現するために PhotoShop 風のチェックタイルを背景にしているので、
実際にはウソがある。（本当に透明にすると白色と見分けがつかないので。）

ところで、このようなタイル背景は以下のように composite コマンドの pattern:checkerboard で合成できる。

```shell-session:add-tile
$ composite -compose Dst_Over -tile pattern:checkerboard input.png output_tiled.png
```

# 参考

機能は多いので、しっかり読むと時間がすぐに融ける。

http://www.imagemagick.org/Usage/draw/
http://www.imagemagick.org/Usage/compose/
#メモ簡易　Unity 2D スプライト アニメーション

#2Dアニメーションの再生制御。

##素材：スプライトシート||テクスチャアトラス

###SpriteEditorを使って画像をスライスしました。

![05-10.png](https://qiita-image-store.s3.amazonaws.com/0/47947/5aa4ae95-af68-d3e0-82cf-ab8536af3cf3.png)

***

### 連番アニメ部分を選択して、シーンにD&Dしました。＝＞オブジェクトが作成されました。
＜その後Prefab化しました＞

![15-05.png](https://qiita-image-store.s3.amazonaws.com/0/47947/b24bc88b-3e21-2cf1-1236-f01a22759a07.png)

***

###制御：Mechanimを使う

![2015-05-.png](https://qiita-image-store.s3.amazonaws.com/0/47947/1ec8699d-9981-a233-15f0-25573dec6f88.png)

パラメータを設定すれば切替などの制御が可能になりました。

***
###Blend-treeを使いましょう。（2D用の物がありました。）

右クリックから -> -> Create New Blend Tree してダブルクリックです。

![スクリーンショット 2015-05-10 14.11.30.png](https://qiita-image-store.s3.amazonaws.com/0/47947/8462b2d1-1cc3-8f41-9d86-7e62dffdddd0.png)

***
##嵌っちゃいました <アニメーションが切り替えられない。何故か、>
####2Dシンプル方向をセットしたとき、モーション２個ではダメだったが４個つけたら正常に制御できた。
####2Dフリーフォーム方向ををセットしたとき　モーションが２個でも動かせた。

![スクリーンショット 2015-05-10 17.30.55.png](https://qiita-image-store.s3.amazonaws.com/0/47947/5ec15fe4-d4e7-1daa-ee04-df4d3ea8d85d.png)
gulp をごっくんごくごく #TypeScript 編

## 環境
* OS X Yosemite 10.10.3

## 前提
* Node.js v0.11.16
* npm 2.3.0
* Gulp 3.8.11

## gulp-typescript をインストール
```
$ npm install gulp-typescript
```

## gulpfile.js を作成

```
$ vim gulpfile.js
```

## 中身をこんな感じに

各種パスはご自身の環境に合わせてください

```
var gulp = require('gulp');
var typescript = require('gulp-typescript');

gulp.task('ts',function(){
	return gulp.src(['./*.ts'])
		.pipe(typescript())
		.js
		.pipe(gulp.dest('./'));
});

gulp.task('watch',function(){
	gulp.watch('./*.ts',function(){
		gulp.run('ts');	
	});
});

gulp.task('default',function(){
	gulp.run('watch');
});
```

## 実行

```
$ gulp
```
[Unity2D]スマートフォン向けタッチされたオブジェクト一覧取得

#はじめに
Unity のタッチ処理第２弾です。
今回は指定オブジェクト名一覧を取得する処理です。
「特定オブジェクトに一括で何かをしたいとき」
とかに使えるかと思います。

#実装
```csharp:TouchManager.cs
/// <summary>
/// タッチされた該当オブジェクトの一覧を取得.
/// </summary>
/// <param name="aName">オブジェクト名</param>
/// <param name="aCompMatch">true = 完全一致</param>
/// <param name="aCompMatch">false = 部分一致</param>
/// <returns>オブジェクト一覧</returns>
public static GameObject[] GetTouchObjectAll(string aName, bool aCompMatch=true)
{
	List<GameObject> list = new List<GameObject>();
	for (int i = 0; i < Input.touchCount; ++i)
	{
		Touch touch = Input.touches[i];
		if (touch.phase == TouchPhase.Began)
		{
			Vector3 pos = Camera.main.ScreenToWorldPoint(touch.position);
			Collider2D[] colliders = Physics2D.OverlapPointAll(pos);
			foreach (Collider2D collider in colliders)
			{
				if ((aCompMatch && collider.gameObject.name.Equals(aName)) || 
					(!aCompMatch && 0 <= collider.gameObject.name.IndexOf(aName)))
				{
					Debug.Log("touch object name : " + collider.gameObject.name);
					list.Add(collider.gameObject);
				}
			}
		}
	}
	return list.ToArray();
}
```

#使い方
```csharp:Main.cs
/// <summary>
/// 更新.
/// </summary>
void Update()
{
	GameObject[] array = TouchManager.GetTouchObjectAll("Enemy");
	foreach(GameObject obj in array)
	{
		// 完全一致時のタッチされた時の処理.
	}

	array = TouchManager.GetTouchObjectAll("Enemy", false);
	foreach(GameObject obj in array)
	{
		// 部分一致時のタッチされた時の処理.
	}
}
```

#最後に
これでタッチされたオブジェクト一覧を取得できます。
Hierarchy上の名前で判断するので命名規則とかにはお気をつけを。
Raspberry Piを家の外に持ち出してMacとLANケーブル直結で使う設定

Raspberry Piの使い方として、普段は家庭の有線LANネットワークに参加させている人が多いと思います。しかし、家の外にRaspberry Piを持ち出すような場合や家の中で一時的に移動して使う場合など、有線LANでネットワーク参加できない状況が稀にあるかと思います。

そうした状況では、たとえば作業機のMacBookとRaspberry PiをLANケーブルで直結するような運用が考えられますが、そこでいちいちネットワーク設定を書き換えるのは面倒すぎますよね。本稿では、家で使っているのと同じノリで家の外でも使えるような設定を紹介します。ざっくり言うと、家の外ではLANケーブル直結でIPv4LLネットワークを構成してBonjourで名前解決するという案です。

# ネットワーク設定

今回の内容は、Raspberry Piのネットワーク設定がDHCPになっている前提です。

`/etc/network/interfaces`を確認して次のような設定になっているかを確認してください。

```
iface eth0 inet dhcp
```
固定IPで運用している場合は検証していませんが、後述するIPv4LLの設定が期待通りに動かないと思います。

# avahi-daemonのインストール

次に、Raspberry PiがBonjour（Zeroconf）で名前解決できるようにします。Bonjourは同一ネットワーク内でのみ使える名前解決のプロトコルで、Linuxではavahiというデーモンが提供しています。

```
$ sudo apt-get install avahi-daemon
$ sudo insserv avahi-daemon
```

これで、Macから`<ホスト名>.local`というホスト名でアクセスできるようになったはずです。デフォルトでは`raspberrypi.local`になっています。

```
$ ssh pi@raspberrypi.local
```

注意点ですが、Bonjourは自分で名前を名乗るようなシステムなので、同一ネットワーク内で名前が衝突してはいけません。Raspberry Piが複数台あるような環境では`/etc/hostname`ファイルを書き換えてホスト名を変更してください。

# avahi-autoipdのインストール

ようやく今回の本題です。上のようにavahiを設定すればどんなネットワークでも名前解決ができますので、あとはLANケーブル直結でネットワークを組む設定にするだけです。


そこで一番お手軽なのがIPv4LLでアドホックなネットワークを作ってしまうことでしょう。WindowsやMacなどでネットワーク設定に失敗した際、なぜか勝手に設定されている`169.254.*.*`というIPアドレスを見たことがあると思います。あれがIPv4LLです。

ところで、WindowsやMacと違ってLinux系OSではIPv4LLは勝手には設定されません。IPv4LLを使うにはavahi-autoipdをインストールするのがお手軽です。

```
$ sudo apt-get install avahi-autoipd
```

これでMacとRaspberry PiをLANケーブルで直結してしばらく待てば、Bonjourのホスト名を使ってRaspberry Piにsshできるはずです。

# まとめ

これでスタバでドヤリングしながらLチカできるぜ！
HTML/CSS/JSのちょっとした動作確認に便利「JS Bin」

## HTML/CSS/JSのちょっとした動作確認に便利「JS Bin」の紹介

環境を整えるほどでもないけど、
軽く動作確認したいなーというときに使えるブラウザ上のエディター


http://jsbin.com/



![JSBin.PNG](https://qiita-image-store.s3.amazonaws.com/0/74613/942bd090-d7a8-1f4f-5875-05a2856ec745.png)

#### **機能**
* HTML/CSSの変更をリアルタイムでOutputに反映
* 「Add library」でJQuery等のメジャーなライブラリを簡単に使用できる
* 書いたコードをURLのみで共有可能⇒http://jsbin.com/pijutoyixu/1/edit
    * 共有先で書き換え＆実行可能
* コードをファイルとしてダウンロードできる
* テンプレートを保存できる

HTML/CSS/Javascriptを少しだけ触りたい時などにいかがでしょうか。
NetBeansことはじメモ

## フォントの設定変更
デフォルトだとフォントが辛いのでまずはnetbeans.confのオプションを変更する。
netbeans.confのnetbeans_default_optionsの最後に"--fontsize 12 -J-Dawt.useSystemAAFontSettings=on"を追加する。これで出力ビューのフォントがでかくなる。
[参考URL](tobysoft.net/wiki/index.php?NetBeans%2F%A5%D5%A5%A9%A5%F3%A5%C8%A4%F2%E5%BA%CE%EF%A4%CB%A4%B9%A4%EB)
次にシステムフォントをMeiryoとConsolasに変更する。
変更するためにはNetBeansを起動するJavaの設定ファイル(fontconfig.properties)を作成する。
デフォルトではfontconfig.properties.srcというファイルが存在するが無視でOK
作成するファイルは以下の参考URLから拝借する。(fontconfig.properties.srcを変更するやり方でやる場合も参考URLを参考にすると良い）
[参考URL](http://www.torutk.com/projects/swe/wiki/NetBeans_%E3%83%AB%E3%83%83%E3%82%AF%E3%82%A2%E3%83%B3%E3%83%89%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%81%A8%E3%82%AB%E3%83%A9%E3%83%BC%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%A0%E3%81%A8%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%EF%BC%88Windows%EF%BC%89)

## キーバインドの変更
NetBeansとEclipseだと結構キーバインドが違ってて（当たり前）辛いのでEclipseキーバインドに変更する。![スクリーンショット (3) - コピー.png](https://qiita-image-store.s3.amazonaws.com/0/20778/2101f478-b69f-3e67-9b35-c2e49ea66e85.png)


## プラグイン
#### Dark Look And Feel Themes
全体的に黒くする。
メニュー→ツール→プラグインからプラグインインストール画面を開いてDark Look And Feel Themesをインストールする。
![スクリーンショット (10).png](https://qiita-image-store.s3.amazonaws.com/0/20778/b72db745-5c9c-4e9d-8d90-6d536d2717d8.png)


#### jVi
Vimキーバインドにするためのプラグインを入れる
まずはjVi update centerを入れる。
![スクリーンショット (13).png](https://qiita-image-store.s3.amazonaws.com/0/20778/b2e39c55-3ab7-c2c3-7068-82cd5f6dcf7f.png)

その後にjViの本体を入れる。
![スクリーンショット (14).png](https://qiita-image-store.s3.amazonaws.com/0/20778/10ebe0de-2aeb-c809-e3b8-ad705ba06518.png)



* jViの設定変更
    * タブ幅の設定変更：ツール→オプション→jVi Config→Buffer Modificationsのshiftwidthとtabstopを4に変更する。
![スクリーンショット (16).png](https://qiita-image-store.s3.amazonaws.com/0/20778/f3870716-d343-8e03-e628-3fbfb048b40f.png)

とりあえずこんなところで。
[Unity2D]スマートフォン向けオブジェクトタッチ判定

#はじめに
Unity でスマートフォン向けのオブジェクトタッチ判定の実装方法を
書いてあるサイトをよく見ますが、
自分なりに使い勝手良くした版を備忘録がてら記載します。

#実装
```csharp:TouchManager.cs
/// <summary>
/// 該当オブジェクトがタッチされたか判定.
/// </summary>
/// <param name="aObject">該当オブジェクト情報</param>
/// <returns>タッチされたか</returns>
public static bool IsTouchObject(GameObject aObject)
{
	int srcId = aObject.gameObject.GetInstanceID();
	for (int i = 0; i < Input.touchCount; ++i)
	{
		Touch touch = Input.touches[i];
		if (touch.phase == TouchPhase.Began)
		{
			Vector3 pos = Camera.main.ScreenToWorldPoint(touch.position);
			Collider2D[] colliders = Physics2D.OverlapPointAll(pos);
			foreach (Collider2D collider in colliders)
			{
				int dstId = collider.gameObject.GetInstanceID();
				if (srcId == dstId)
				{
					Debug.Log("touch object name : " + aObject.gameObject.name);
					return true;
				}
			}
		}
	}
	return false;
}
```

#使い方
```csharp:Main.cs
/// <summary>
/// 更新.
/// </summary>
void Update()
{
	GameObject obj = GameObject.Find("touchObject");
	if (TouchManager.IsTouchObject(obj))
	{
		// タッチされた時の処理.
	}
}
```

#最後に
これでオブジェクトのタッチ判定ができます。
HerokuのMySQLのバージョン確認

なんか、ドキュメントからバージョンの情報を見つけられなかったので、コマンドラインから接続して確認した。

```bash:コマンドラインからMySQLに接続
$ mysql -h <ホスト> -u <ユーザー名> -p -D <データベース名>
Enter password: <パスワード>

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2491927
Server version: 5.5.42-log MySQL Community Server (GPL)
```

`5.5.42` でした。


ホスト名とかユーザー名とかは、 `heroku config` で確認できる。

```bash:
$ heroku config | grep "mysql"
CLEARDB_DATABASE_URL: mysql://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
```
gitで多くの人が使うコマンド集

## git add
* 全て取り消す：```git reset HEAD```
* ファイル単位取り消す：```git reset [file_path]```

## git commit
* 直前のコミット取り消し（ワークディレクトリは同じ）

```git reset --soft HEAD^```

* 直前のコミット取り消し（ワークディレクトリも戻す）

```git reset --hard HEAD^```

* 特定のコミットの取り消し

```git revert コミットのハッシュ値```

* 直前のコミットの上書き

```git commit --amend```

* コミット取り消しを取り消し

```git reset --hard "HEAD@{x}"```

* コミットをまとめる

1. ``` git rebase -i HEAD~数字```
2. まとめたいものの```pick```を```squash```に変える

```
pick 0000001 Add a neat feature X into the library
squash a000003 Fix a typo in X
pick a000004 Fix a bug in X
pick a000002 Update to use X
```
この場合a000003と0000001がまとめられる

* commitを振り返る

```git log -p filename```

* 直前のcommitメッセージを変える

```git commit --amend -m "new message"```

## git stash
* 現在の作業（変更点）を隠す

``` git stash ```

* 隠している作業の一覧を見る

``` git stash list```


* 隠している作業（変更点）をワークディレクトリに復活させる（隠した作業履歴は残る）

``` git stash apply stash@{'want_back_num'}```

* 隠している作業（変更点）をワークディレクトリに復活させる（隠した作業履歴は消える）

``` git stash pop stash@{'want_back_num'}```

* 隠している作業（変更点）を消す

``` git stash drop stash@{'want_back_num'}```

#### タグ
* タグをつける：```git tag -a "tag名" -m "メッセージ"```
* タグをリポジトリにプッシュ：```git push origin "tag名"```
Parse.comでcronのような定期タスクを実行する


# そもそもparse.comでcron / periodic taskは設定できるのか？

可能。

Cloud Codeの[Background Jobs](https://parse.com/docs/js/guide#cloud-code-advanced-background-jobs)を見るべし。

* バックグラウンドジョブは15分で強制終了される
* 秒間20タスクまで
* 秒間20タスクの制限を超える状態でタスクが起動すると、直ちに終了される
* cronのような定期タスクはダッシュボード設定可能


## タスクの定義

`Parse.Cloud.job()`でジョブを定義できる。`periodicHello`というタスクを定義して、`hello`関数を呼び出す。なお、 **タスク終了時は必ず`status.success()`または`status.error()`を呼び出す必要がある。**

```javascript:cloud/main.js
// hello()の定義
Parse.Cloud.define("hello", function(request, response) {
  response.success("Hello world!");
});

// ジョブの定義
Parse.Cloud.job("periodicHello", function(request, status) {
  Parse.Cloud.run('hello', {}, {
    success: function(result) {
      // タスクランナーにsuccess()を返す
      status.success('success!');
    },
    error: function(error) {
      // タスクランナーにerror()を返す
      status.error('error :-(');
    }
  });
});
```

## 定期タスクの設定

`Core`タブのサイドメニューから`Jobs`を選択して`Schedule a job`を開く。

![Kobito.9Itlj0.png](https://qiita-image-store.s3.amazonaws.com/0/29860/74bfc88a-b9cb-b77f-d77c-ca666eeb2c13.png "Kobito.9Itlj0.png")

`description`に適当な名前を入力し、`Job Name`のプルダウンに定義済みのジョブが登録されているので選択する。`Repeat`で定期的に実行する時間を設定する。

![Kobito.VRRIyL.png](https://qiita-image-store.s3.amazonaws.com/0/29860/b8e942c4-367d-2abd-6ab1-10234fb52aa1.png "Kobito.VRRIyL.png")

設定するとジョブリストに追加される。`Run Now`をクリックすると即座に実行される。

![Kobito.jd4lzS.png](https://qiita-image-store.s3.amazonaws.com/0/29860/e12ef72e-a120-79ee-fd44-ae593ef09e62.png "Kobito.jd4lzS.png")


実行結果は`Job Status`か`Logs`で見ることが出来る。

![Kobito.IDElee.png](https://qiita-image-store.s3.amazonaws.com/0/29860/a10db9ad-334f-68ed-1503-a29dbb23922e.png "Kobito.IDElee.png")


# トラブルシュート

## タスク内からCloud Functionが呼び出せない

タスク内からCloud Functionを呼び出すことは出来ないみたい？

Cloud Function自体が非同期で動作するため、Cloud Functionの実行開始後にタスクが終了してしまいロジックが実行されないようだ。不便だけどタスクの中にすべての処理を追加する必要がありそう。


## タスク内で実行したオブジェクト検索が実行されない

次のようにタスクの最後でreturnしてしまうとクエリは実行されない。

```javascript
Parse.Cloud.job('job', function(request, status) {
  var Bike = Parse.Object.extend('Bike');
  var query = new Parse.Query(Bike);
  query.equalTo('broken', false);
  
  query.find({
    success: function(results) {
      // ここが実行されない
    }
  });
  
  return status.success('success');
});
```

クエリ実行後にreturnする。

```javascript
Parse.Cloud.job('job', function(request, status) {
  var Bike = Parse.Object.extend('Bike');
  var query = new Parse.Query(Bike);
  query.equalTo('broken', false);
  
  query.find({
    success: function(results) {
      return status.success('success');
    }
  });
});
```


----

# 所感

JavaScriptで記述することになるが実行形態としては比較的容易な部類に入ると感じる。実行時の制限も少ない。1タスクで15分以上かかるような処理はそう多くないだろうし、並列処理できるのが20個までなのでこの点だけ注意。
rails db migrateのブラックボックス感、解消しとこう


# rake db:migrateの仕組み
## db上のscheme_migrationsが読み込み済みのmigration fileかどうかを判断している。
- rake db:migrateがされた際に、railsはmigrationファイルを見に行きます。
- migrationファイル内でそのタイムスタンプがまだ、scheme_migrationsに乗ってないやつを、未読み込みのmigration fileであると認定。
- 未読み込みのmigration fileを読み込みdbにテーブルなりコラムなり作成/編集。
- 同時に読み込んだファイルのタイムスタンプをmigration fileに記録(これでもう同じファイルを次から読み込まない。)
なので、dbを綺麗に保ちたければ消したテーブルのscheme_migrations内のrowも消しておきましょう。そうすれば、やらかしたミスは完全に姿形消します。

以上理解して、冷静に弄りましょう。じゃないとグループ開発で怒られます。

rails g migrateでやらかした時は、以下のフローで対応するといいですよ。


# あ、やべ、migration fileの名前きもすぎる

## へんな名前のmigration file作って、やり直したいという場合

### →まだrake db:migrateしてなければ
セーフです。
migration fileを普通に削除しましょう。rm filepathとかでいつも通り。

### →rake db:migrateしちゃってる人
アウト。めんどいです。
落ちついて、drop tableのmigrationファイルを作ってtableを消しましょう。

#### でもグループ開発しててファイル数増やしたくないし...
migrationファイルの存在自体を抹消したければ、それも可能です。すでにdb上には書き込まれているのでdb上のテーブルを消してやる必要が有ります。(dbに残ってると、scheme.rbに残り汚し続けるので。)db上のを消したければ、①直接mysqlで消す、or ②drop tableのmigration file書く。でも②だと、グループ開発の場合他の人が困る。そもそもcreateするmigration fileがないのにdropのみ存在することになるので。なので、①の直接mysqlからそのテーブル消しましょう。drop table tablenameで消したりましょう。これで存在抹消できます。

#### ちなみに

db/scheme.rbはdb上のテーブルから描かれる。
Git Bash で日本語が文字化けするときの修正方法

問題：
* Git Bash のコンソールで日本語を入力すると，入力した日本語が豆腐化(□)する．
* Git Bash で日本語ファイル名を表示しようとすると，ファイル名が??????になる．

環境：
* OS: Windows 7
* Git のバージョン: 1.9.5

一つ目の問題に対しては，ウインドウの左上を左クリック->プロパティ->「フォント」タブ->フォントの変更を行うことで解決できる．ただし，Git Bash を起動するたびにこの変更を行わなければならない．
二つ目の問題に対しては，.bashrc ファイルを作成して"alias ls=ls --show-control-chars"と書き込むことで解決できる．
Fluid の操作を JXA で自動化した

# Fluid とは

[Fluid](http://fluidapp.com/) という特定の Web サイト毎にアプリケーションを切り分けるアプリケーションがある。

URL と アプリケーション名を入力すれば、 .app 形式で保存して専用のアプリケーションにしてくれる。便利。
設定で Cookie を Safari と分離することができるので、 Cookie でのトラッキングを回避できる。
ログインのセッションが別になるので、何かのサービスで複数アカウントを使い分けている場合にも都度ログイン・ログアウトしなくて済む。

# コマンドラインから操作したい

もっと便利になるように、
上記の「 URL とアプリケーション名を入力して .app 作成」という手順をコマンドラインからできるようにした。
AppleScript と同じ内容を JavaScript で操作できるという、 JXA (JavaScript for Automation) で書いた。

```js:newFluid
#!/usr/bin/env osascript -l JavaScript

function makeFluid(name, url) {
  var fluid = Application('Fluid')
    , se = Application('System Events')
    ;

  fluid = se.processes.byName('Fluid');

  var wg = fluid.windows[0].groups[0]
    , urlTextField = wg.textFields[0] 
    , nameTextField = wg.textFields[1]
    , submitButton = wg.buttons[0]
    ;

  urlTextField.focused = true;
  urlTextField.value = url;

  nameTextField.focused = true;
  nameTextField.value = name;
  submitButton.click();
  delay(2);
  fluid.windows[0].buttons[0].click();
  fluid.quit();
}

function run(argv){
  if (argv.length < 2) {
    console.log('Too few arguments');
    return;
  }
  var name = argv[0]
    , url = argv[1]
    ;
  makeFluid(name, url);
}
```

## 実行権限の付与

```
$ chmod +x newFluid
```

## 実行

第 1 引数がアプリケーション名、第 2 引数が URL 。

```
$ ./newFluid SampleApp http://example.com/
```

## イケてないところ

これでも充分機能するけど、少し足りていない部分の説明を補足。
そのうちやりたいと思う。

- delay(2) が Magic Number になっている。良くない。 PC の性能や負荷によって成功したり待機しすぎたりするはず。
- 引数のチェック・例外処理がない。
  - 具体的には「既に同名のアプリケーションが存在する」の時の例外処理がない。まずい。
- 「 Safari とセッションを分離する」にチェックを入れる操作も自動化したい。
Vagrant上のCentOS7にSambaをインストールする方法

Vagrantのファイル同期は便利ではあるが、ファイルの同期が遅かったり微妙な点もある。
そこで、いっそのことVagrantでもSambaでファイル共有を行った方が良いだろう…ということでCentOS7にSambaをインストールしてみた。



## Vagrantfile
Vagrantfileの設定を編集

```
-  # config.vm.network "private_network", ip: "192.168.33.10"
+  config.vm.network "private_network", ip: "192.168.33.10"
```

## CentOS7
#### 1.とりあえずrootになる。

```bash
sudo su -
```

#### 2.インストールする

```bash
yum install -y samba
```

#### 3.ユーザの追加

```bash
pdbedit -a vagrant
```
- パスワードの設定も適宜行う

#### 4.設定
- 念のため現状の設定ファイルのバックアップを取る

```bash
cp -p /etc/samba/smb.conf /etc/samba/smb.conf_org
```
- 設定ファイルの編集を行う

```bash
vi /etc/samba/smb.conf
- workgroup = MYGROUP
+ workgroup = WORKGROUP

- ;       hosts allow = 127. 192.168.12. 192.168.13.
+         hosts allow = 127. 192.168.

+ [html]
+ comment = html
+ path = /var/www/html
+ public = yes
+ writable = yes
+ printable = no
+ write list = +vagrant
```
#### 5.起動させる

```bash
systemctl start smb
systemctl start nmb
```

#### 6.自動起動の設定を行う

```bash
systemctl enable smb.service
systemctl enable nmb.service
```

#### 備考
ディレクトリがうまく参照できない場合は、

- SELinux
- firewalld

の無効化を試みること。

以上.
Javascriptの関数の即時実行について

### Javascriptの関数は、関数を生成した直後に呼び出すことが可能。

#### 関数式の即時実行

```js
var sayHello = function(str){
    console.log("即時実行:" + str + "!");
}("引数");
```
上記の記述の場合、コンソールには「即時実行:引数!」と表示される。

#### 無名関数の即時実行

```js
(function(str){
    console.log("無名即時関数実行:" + str );
})("引数");
```
上記の記述の場合、コンソールには「無名即時関数実行:引数」と表示される。
可変引数Rangeの重複しない整数の個数を求める。

可変引数Rangeの重複しない整数の個数を求める。アルゴリズムは＜０(n＊n)がいいなと思ったけど…

```scala

def cover(rs: Range*):Int = ???


assert(cover(0 to 4, 1 to 5) == 6)
assert(cover(0 to 4, 1 to 3) == 5)
assert(cover(0 to 4, 6 to 7) == 7)
assert(cover(0 to 4, 6 to 7, 2 to 6) == 8)

```

下記以外のがあれば、教えていただきたいです。

```scala 

def cover(rs: Range*) = rs.map(_.toList).flatMap(x => x).distinct.size

```

```scala
def cover(rs: Range*): Int = {
  @annotation.tailrec
  def helper(xs: List[Range], accu: Int):Int = xs match {
    case Nil => accu
    case r :: Nil => accu + r.size
    case r1 :: r2 :: tail => 
      val nextAccu = accu + r1.size
      if (r2.head > r1.last) helper(r2 :: tail, nextAccu)
      else if (r2.last > r1.last) helper(((r1.last + 1) to r2.last) :: tail, nextAccu)
      else helper(r1 :: tail, accu)
  }
  helper(rs.sortBy(_.start).toList, 0)
}
```
iOS から ssh で AWS の EC2 インスタンスに公開鍵認証でログインする


タイトルに AWS と書きましたが別になんでもいいです。

# 想定

- 外出中に ec2 のインスタンスを触りたい
- インスタンスには公開鍵でログインしている
- お金はかけたくない

# 1. iOS ssh クライアントの選定

iOS 用の ssh クライアントは多数公開されていますが、有料だったり、公開鍵認証を使うにはアプリ内課金が必要だったり、無料だけど動作があやしいものなどありました。

無料のものをいくつか試した結果、[vSSH Lite](https://itunes.apple.com/jp/app/vssh-lite/id535055496?mt=8) が期待した通り動作したのでこちらを使います。

# 2. ssh のセットアップ

## 2.1 秘密鍵の登録

接続に使う秘密鍵をアプリに登録します。秘密鍵を iOS 上でテキストファイルとして開いてクリップボードにコピーします。

秘密鍵
```key_rsa_example
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
.......................
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END RSA PRIVATE KEY-----
```

vSSH Lite でクリップボードから秘密鍵を登録します。

![2015-05-10 09.07.18.png](https://qiita-image-store.s3.amazonaws.com/0/27210/c6456c91-a45c-02e4-7a5b-7c05b4fcd0e0.png "2015-05-10 09.07.18.png")

## 2.2 サーバ情報の登録

サーバ情報を登録します。登録するのは IP, port, username と登録した秘密鍵など基本的なものです。

![2015-05-10 08.59.30.png](https://qiita-image-store.s3.amazonaws.com/0/27210/b1cadcd1-c7b8-254f-40b2-b26f2a23e600.png "2015-05-10 08.59.30.png")
＃ここに出てる ip は適当な値

# 3. ログイン

あとは"接続"を実行するだけ。

![2015-05-10 09.08.25.png](https://qiita-image-store.s3.amazonaws.com/0/27210/df19a552-8959-7dbb-03a7-b68d848e7646.png "2015-05-10 09.08.25.png")

これで外出先で何かやりたくなっても対応できます。

私は自分で作っているアプリのにプッシュ通知を突発的に(手動で)行いたい時に使っています。
PackerでUbuntuのVirtualBox向けEFI対応Vagrant Boxの作り方

[ここにある](https://github.com/shiguredo/packer-templates)テンプレートを元に、PackerでUbuntuのVagrant Boxを自動生成しようと思ったところ、VirtualBoxの設定を非EFI（デフォルト）にしないと、Ubuntuのインストールが始まらなかった。

原因は、ブートローダー周りのコマンドの違いのようだった。

非EFIだと ``` /install/vmlinuz ``` などを指定すればいいのだが、EFI環境では、/linuxを指定する必要があるようだ。
そして、当然のことながら、 [これ](http://kledgeb.blogspot.jp/2014/04/ubuntu-virtualbox-22-uefiubuntuuefi.html)をやらないと、再起動後に起動できなくなる（厳密には出来るが…）
socket > closesocketは暗黙的にshutdown sequenceを生じさせる

https://msdn.microsoft.com/en-us/library/windows/desktop/ms738547(v=vs.85).aspx
> Some amount of confusion arises, however, from the fact that the closesocket function implicitly causes a shutdown sequence to occur if it has not already happened. 

とりあえずclosesocketすればshutdownも自動でされる、という使い方をしているのがよくあるとのこと。

> In fact, it has become a rather common programming practice to rely on this feature and to use closesocket to both initiate the shutdown sequence and deallocate the socket handle.
socket > shutting down a socket connection / closing a socket

https://msdn.microsoft.com/en-us/library/windows/desktop/ms738547(v=vs.85).aspx

> Shutting down a socket connection involves an exchange of protocol messages between the two endpoints, hereafter referred to as a shutdown sequence. Two general classes of shutdown sequences are defined: graceful and abortive (also called hard). In a graceful shutdown sequence, any data that has been queued, but not yet transmitted can be sent prior to the connection being closed. In an abortive shutdown, any unsent data is lost. The occurrence of a shutdown sequence (graceful or abortive) can also be used to provide an FD_CLOSE indication to the associated applications signifying that a shutdown is in progress.
Closing a socket, on the other hand, causes the socket handle to become deallocated so that the application can no longer reference or use the socket in any manner.

上記をかいつまむと、両者の違いは以下のようなものか。
- Shutting downの場合は2つのendpoint間でプロトコルメッセージのやりとりがある
- Shutting down > graceful shutdownの場合は、キューにあるメッセージは送信されてからconnectionがcloseされる
- Shutting down > FD_CLOSE indicationを関連アプリへ発信する
- Closingの場合はsocket handleをdeallocateしてしまう

送信中のメッセージなどをきちんと処理して終了したかったり、関連アプリとの連携をきちんとしたい場合はshutdownをしたほうがよさそう。


関連キーワード
- graceful shutdown
- abortive (also called hard) shutdown
c++ builder XE4 > Application->ProcessMessage()はworkerスレッドでは呼ばない

[SO](http://stackoverflow.com/questions/30117303/indy10-how-to-wait-after-writeln-call/30134979#30134979)
> Also, Application->ProcessMessages(); should never be called in a worker thread (which OnExecute is called in).

Thread内でApplication->ProcessMessage()を使っていた。サンプルコードを元に別の質問を聞いた時、上記のアドバイスをいただいた。

このあたりまだまだ理解不足である。
Effective C++ > 27項 > キャストは新しい一時オブジェクトを生成する

引用: Effective C++ 第3版

```NG.cpp
class Window {
public:
   virtual void onResize() {...}
};

class SpecialWindow:public Window {
public:
   virtual void onResize() {
      static_cast<Window>(*this).onResize();
      ...
   }
};    
```

>キャストは「*thisの基底クラス部分」のコピーとして、新しい一時オブジェクトを生成してしまう。したがって、上記のコードは、現在のオブジェクトに対してWindow::onResizeを呼び出すことにはならない。
...
この問題を避けるには以下のようにする

```OK.cpp
class SpecialWindow:public Window {
public:
   virtual void onResize() {
      Window::onResize();
   }
};
```
HerokuでDockerでTrusterdを動かすまで　準備編その2

# 前回

- [HerokuでDockerでTrusterdを動かすまで　準備編その1 - Qiita](http://qiita.com/kjunichi/items/63ee6085595b9192e46e)

# Herokuの中で複数のポートを待ち受ける

これが出来ないと、nghttpxでHTTP/1.1で受けて、HTTP/2にして
trusterdに接続して、その結果を返すという一連の企みが出来ないことになる。

# まずはSimpleHttpServerで複数Webサーバーを立ち上げ実験

```rb:server.rb 
queue = %w[生 麦 生 米 生 卵]

server = SimpleHttpServer.new(
  server_ip:     "0.0.0.0",
  port:          ARGV[0] || 3000,
  document_root: "./",
)

server.location "/" do |r|
  content = ""
  content << `curl http://127.0.0.1:8000/`
  server.response_body = "#{content}\n"
  server.create_response
end

s2 = SimpleHttpServer.new(
  server_ip:     "127.0.0.1",
  port:          8000,
  document_root: "./",
)

s2.location "/" do |r|
  content = ""
  while rand > 0.1 do
    char = queue.shift
    content << char
    queue.push(char)
  end
  s2.response_body = "#{content}\n"
  s2.create_response
end

#server.run
pid1 = Process.fork() { server.run }
pid2 = Process.fork() { s2.run }
Process.waitpid pid1
Process.waitpid.pid2
```

うち向けのWebサーバーのs2に外向けのserverからcurlでアクセして結果を返せた。

# 参考記事

- [Trusterd HTTP/2 Webサーバで複数のサーバを簡単に立ち上げる方法 - 人間とウェブの未来](http://hb.matsumoto-r.jp/entry/2015/02/05/232454)

# 続き

- [HerokuでDockerでTrusterdを動かすまで　準備編その3 - Qiita](http://qiita.com/kjunichi/items/11921600d39c9917bbf8)
技術英語 > 一度コツをつかんだら > Once you get the hang of it, ...

A「This is difficult to handle.」
B「Let me see.」
B「Yes, this seems difficult. But <font color=red>once you get the hang of it</font>, you can use this without any difficulty.」
A「I doubt it.」

Formalな場面で使う場合は以下のほうがいいかもしれない。
One you get used to it,
ただ、used toがget the hang ofとまったく同じニュアンスかというと疑問がある。

the hangには「扱い方、こつ」という意味がある。
http://ejje.weblio.jp/content/hang
git > 一時的にstashした変更内容の変更点を表示 > git stash show stash@{0} -p

参考: 開発効率をUPするGit逆引き入門, 松下雅和ら, C&R研究所

```
$ git stash
$ git stash list
stash@{0}: ...
$ git stash show stash@{0} -p
diff --git a/abc b/abc
index 34436e0..f6a3f3a 100728
--- a/abc
+++ b/abc
@@ -1,2 +1,3 @@
 This is test
+This is test
```

stash@{0}というstash名が入力しずらい。
git > .gitignore > コメント > #で始める

参考: 開発効率をUPするGit逆引き入門, 松下雅和ら, C&R研究所

> .gitignoreファイルのパターンフォーマット
- 空白行は無視される
- 先頭が#で始まる行はコメント
- #で始まるファイル除外は¥#...とする

bashのコメントと同じと考えればいいか。
git > 設定ファイル > /etc/gitconfig | ~/.gitconfig | プロジェクトの.git/config


設定ファイルの配置場所は3つ

|ファイル|説明|
|:---:|:---:|
|/etc/gitconfig | 作業PCの共通設定 | 
|~/.gitconfig | アカウントごとの共通設定 |
| .git/config | プロジェクト固有の設定 |

下の方が優先的に使用される。

参考: 開発効率をUPするGit逆引き入門, 松下雅和ら, C&R研究所
React BootstrapのGetting startedを動かすまで

# React Bootstrap
reactjsでWebページを作るときに、reactjs用のBootstrapが存在することがわかったので、ためしてみた。
[React Bootstrap](http://react-bootstrap.github.io/index.html)の`Getting started`の説明が雑なのか、自分のjsの知識が乏しいがためか、アラートメッセージ一つ出すのに時間がかかったので、やり方をメモする。

# Getting startedを読む
Getting startedには、`CommonJS`と`AMD`と`Browser globals`の３つの方法が紹介されていて、この時点で`CommonJS`と`AMD`というキーワードに初学者は悩む。（最初は`AMD`がANDのtypoだと思っていた）
それぞれ、以下を読んでなんとなく把握する。(サーバーサイド側のjsの依存関係を解決するための仕様と実装のようだ。サーバーサイド側の話だと思っている、AMDは違うかもしれない)

[JavaScriptのモジュール管理(CommonJSとかAMDとかBrowserifyとかwebpack)](http://tsuchikazu.net/javascript-module/)
[CommonJSの話](http://www.slideshare.net/terurou/common-js)

![image](https://qiita-image-store.s3.amazonaws.com/0/38174/4aed254f-a75f-4bf7-bb16-79604d35017a.png)

# Browser globalsを試す
赤字で`react-bootstrap.min.js`が必要だと書いてあります。

![image](https://qiita-image-store.s3.amazonaws.com/0/38174/31a0b44e-e8c3-a149-812a-c0ea9b30acd5.png)

このまま、htmlにコードをはって実行しても、動きません。
以下のパスにjsを用意する必要があります。

```
"path/to/react-bootstrap-bower/react-bootstrap.min.js"
```

# react-bootstrap.min.jsを入手する
`CommonJS`のコード例にあった、以下を実行。`npm`を事前にインストールする必要があるので、そこまでも結構時間がかかった。
(`npm`は、`nodebrew`をインストールして追加しました)

```
  $ npm install react
  $ npm install react-bootstrap
```

`react-bootstrap`をイントールすると、`~/node_modules/react-bootstrap/dist`ディレクトリに`react-bootstrap.min.js`がダウンロードされる。

この`react-bootstrap.min.js`をhtmlから読める場所にコピーする。

# Alertコンポーネントを動かす

その後、いろいろ試行錯誤の結果、なんとか動かいた。ポイントは以下。

- `bootstrap.min.css`が必要
- `react.js`と`JSXTransformer.js`は、facebookのcdnを利用
- `react-bootstrap.min.js`は前の手順で`npm`で入手したものをパスで指定。(htmlから読める場所)
- React Bootstrapのサンプルのとおり`var Alert = ReactBootstrap.Alert;`だけでは画面に描画されない。
    - `ReactBootstrap.Alert`で生成した、`Alert`変数を使って、`alertInstance`を生成。
    - `React.render`メソッドをコールして、DOMの指定をする。
        - このあたりはReact.jsを知っていればすぐわかる話なのかもしれない。以下を参考にしました。
            - [react with react-bootstrap. How they use it?](http://stackoverflow.com/questions/29883097/react-with-react-bootstrap-how-they-use-it)  

```html:test01.html
<!DOCTYPE html>
<html>
<head>
  <title>test01</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
  <script src="https://fb.me/react-0.13.3.min.js"></script>
  <script src="https://fb.me/JSXTransformer-0.13.3.js"></script>
  <script src="js/react-bootstrap.min.js"></script>
  <script type="text/jsx;harmony=true">
    var Alert = ReactBootstrap.Alert;
    const alertInstance = (
      <Alert bsStyle='warning'>
        アラートメッセージ
      </Alert>
    );
    React.render(
            alertInstance,
            document.getElementById('test-container')
    );
  </script>
</head>
<body>
<div id="test-container"></div>
</body>
</html>
```

でた。

![image](https://qiita-image-store.s3.amazonaws.com/0/38174/bbf91da5-05c3-cb9a-1069-997794ee2347.png)
ARProxy でクエリの実行箇所を SQL コメントとして仕込むやつ

https://github.com/cookpad/arproxy

こんなかんじでイケるというメモ

```ruby:config/initializers/arproxy.rb
RAILS_ROOT = Rails.root.to_s
class QueryTracer < Arproxy::Base
  def execute(sql, name=nil)
    line = caller.find {|line| line.start_with?(RAILS_ROOT) and not line.start_with?(__FILE__) }
    sql << " /* #{line} */"
    super(sql, name)
  end
end

Arproxy.configure do |config|
  config.adapter = "mysql2" # A DB Apdapter name which is used in your database.yml
  config.use QueryTracer
end
Arproxy.enable!
```

ログにこんな感じで出る

```
[DEBUG] SELECT `filter_sets`.id FROM `filter_sets` WHERE `filter_sets`.`project_id` = 525 /* /home/sonots/myapp/app/models/report.rb:79:in `remove_unavailable_filter_set'
```

遅そうなので development でしか有効化してない。

EDIT: slow なクエリにだけ仕込むようにすれば特に問題にならなそう
[エンジニアのための素材加工]Atlas SpriteをSliceする

既にパッキングされた画像をGIMPとUnityの機能を使いSliceしてみます。
今回は下記のような画像でやってみます。
![名称未設定.png](https://qiita-image-store.s3.amazonaws.com/0/17192/31d1c5f3-361c-08a6-2c31-de927db2dc10.png)

#GIMPでの作業
この画像は背景が白色なので透明色にします。
「レイヤー」 → 「透明部分」 → 「アルファチャンネルの追加」の後、
「ファジー選択」→「Deleteキー」を押下。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/17192/56eebbc0-1412-2636-6ce1-89b8bdc048e5.png)
こんな感じで背景を透過します。

#Unityでの作業
下図のような設定にして「Sprite Editor」を起動します。
![キャプチ1ャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/17192/be5c1843-e06f-f83f-b310-5e5087fbdcbc.png)

デフォルト設定でそのまま「Slice」ボタンを押下。
Sprite Editorが透明部分を判断してSliceしてくれます。
![SpriteSlicePanelAuto.png](https://qiita-image-store.s3.amazonaws.com/0/17192/4db160f4-f841-e6ce-d3d9-f7120366f473.png)

こんな感じで想定通りに３つにわかれていれば成功です。
![slice.PNG](https://qiita-image-store.s3.amazonaws.com/0/17192/1cd75424-376f-09e3-7ef6-b9594cd64421.png)

---
これとは別に３つわかれている画像ファイルをAtlas化してSliceする方法は
NGUIのAtlas MakerとかTexturePacerGUIとかで調べればすぐわかると思います。
Arch LinuxにSoftEtherを入れる (Cubox-i4 Pro)

# 環境
* Cubox-i4 Pro
* ArchLinuxARM-imx6-cubox

# SoftEtherインストール
## ダウンロード
```console
$ wget http://jp.softether-download.com/files/softether/v4.15-9546-beta-2015.04.05-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.15-9546-beta-2015.04.05-linux-arm_eabi-32bit.tar.gz

$ tar zxvf softether-vpnserver-v4.15-9546-beta-2015.04.05-linux-arm_eabi-32bit.tar.gz

$ rm softether-vpnserver-v4.15-9546-beta-2015.04.05-linux-arm_eabi-32bit.tar.gz
```
\# URL及びファイル名は下記より最新ビルドの物に置き換える
\# [SoftEther ダウンロード センター](http://www.softether-download.com/ja.aspx)
\# *SoftEther VPN (Freeware) > SoftEther VPN Server > Linux > ARM EABI (32bit)*

## make
make等入れていなければインストール

```console
$ sudo pacman -S make
$ sudo pacman -S gcc
```

```console
$ cd vpnserver
$ make
```
make実行中の質問は全て`1`

## 配置
以降rootにて実施

```console
$ su
# cd ..
# mv vpnserver /usr/local
# cd /usr/local/vpnserver/
# chmod 600 *
# chmod 700 vpncmd
# chmod 700 vpnserver
```

## 動作チェック
### チェックコマンド実行
```console
# ./vpncmd
```
途中、下記では`3`を入力
>By using vpncmd program, the following can be achieved.

### チェック開始
```text
VPN Tools>check
```
下記が表示されればOK
>All checks passed. It is highly likely that SoftEther VPN Server / Bridge can ope
rate normally on this system.

### チェックコマンド終了
```text
VPN Tools>exit
```

# systemd設定
## 設定ファイル作成
```console
# vi /etc/systemd/system/vpnserver.service
```
設定内容は下記

```text
[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop

[Install]
WantedBy=multi-user.target
```

## 実行と自動実行登録
```console
# systemctl start vpnserver
# systemctl enable vpnserver
```

以上で導入完了

SoftEtherの設定はGUIツールにて実施
参考: [Raspberry PiでSoftEther VPN](http://www.pc-links.com/blog/softether/rc2-setup/)

***
**参考**
[7.3 Linux へのインストールと初期設定](https://ja.softether.org/4-docs/1-manual/7/7.3)
[Systemd用SoftEther設定ファイル]
(http://blog.204504byse.info/wiki.cgi?page=Systemd%CD%D1SoftEther%C0%DF%C4%EA%A5%D5%A5%A1%A5%A4%A5%EB)
CASL IIで遊ぶ 環境構築メモ

ちょっとした時間にCASLIIで遊ぼうと思ってとりあえず環境構築メモ。
Windows用。なぐり書きなのであとで書き直す予定。

IPAのサイトからCASLIIシミュレータをダウンロードする
  - https://www.jitec.ipa.go.jp/1_20casl2/casl2dl_001.html

C:\Users\username\casl2に解凍

アクセスしやすい用にデスクトップにC:\Users\username\casl2のショートカットを作成

C:\Users\username\casl2\TestProgramのCASL2.bat、RUN.bat、Javas.batをC:\Users\username\casl2\に移動。

CASL2.bat、RUN.bat、Javas.batを次のように書き直す

CASL2.bat
> @java -jar C:\Users\username\casl2\casl2.jar %1 %2 %3 %4

RUN.bat
> @java -jar C:\Users\username\casl2\run.jar %1 %2 %3 %4

Javas.bat
> rem  Start Java CASE/RUN(JAVA SE1.4).
> echo off
> set JDKHOME=c:\jdk1.8.0_45
> PATH %JDKHOME%\bin;C:\Users\username\casl2;%path%

コマンドプロンプトのショートカットをC:\Users\username\casl2に作成

作成したショートカットのプロパティを開き、リンク先を
> %windir%\system32\cmd.exe /k Javas

作業フォルダーを
> %HOMEDRIVE%%HOMEPATH%\casl2

に変える。

コマンドプロンプトを開いて、
> $ cd TestProgram
> $ casl2 smain.cas

などと打ってみて動作確認。
あとはC:\Users\username\casl2\workとフォルダーを作ってそこにプログラムを書いて遊ぶ感じで。
Safari のリーダー表示の体裁を自分好みに修正

こんにちは。
Safari の「リーダー」表示の体裁を自分好みに修正してみました（MacOSX 10.9）。

```console
$ sudo ./mypatch.rb Reader.html.patch
```

```mypatch.rb
#!/usr/bin/ruby
# coding: utf-8
cmd = "patch -b -p0 < "
ARGV.each {|file|
    `#{cmd + file + " 2>&1"}`  # for sh/bash
}
```

```Reader.html.patch
--- /System/Library/StagedFrameworks/Safari/Safari.framework/Versions/A/Resources/Reader.html
+++ Reader.html.orig
@@ -99,7 +99,7 @@
         }
 
         #article {
-            background: rgb(251, 251, 251);
+            background: rgb(232, 232, 208);
             background-size: 640px 254px;
             max-width: 800px;
             margin: 22px auto 0 auto;
@@ -138,14 +138,14 @@
             margin-left: auto;
             margin-right: auto;
             color: rgb(65, 65, 65);
-            padding: 45px 53px;
+            padding: 4px 12px;
             position: relative;
             overflow: hidden;
             transition: height .5s ease-out;
 
             border-bottom: 1px solid rgb(206, 206, 206);
-            margin-right: 17px;
-            margin-left: 17px;
+            margin-right: 4px;
+            margin-left: 4px;
         }
 
         .page:last-of-type {
```
---
* 上記の```mypatch.rb```は、「python pip [search](http://qiita.com/kkdd/items/18cccfe505fe0ebe9a5d) への修正」の時と同じです。
その他

例によって例のごとくpoh5+を続けているが、最短ステップクリアが出来ていない。
CASE3と4がタイムアウトしてしまう。いろんな手法を試したが全然間に合わない。
なおC#の限界時間は4秒である。
ここで原因を考察する。

# 反復深化深さ優先探索
再起によりメモリ使用を抑えられるのが利点。
評価関数の調整で近いところまで行けるがCASE3が69、CASE5が60となり最短ステップにならない。
評価値による計算打ち切りは時間制限をクリアするために必須である。

# A*(未実装)
メモリ使用量を推測するとオーバーするので却下。速度面も期待できない。

# ハッシュと重複排除
64bitの完全ハッシュ化で排除しようとしたがメモリ不足で断念。メモリが足りる間はかなり高速化できる。

# 逆方向探索
終了局面から20手程度全パターンを手順とともに記録してその盤面が現れた時点で終了するようにする。
しかし、反復深化で評価値による打ち切りを入れると最短にならない可能性があるので失敗した。

# 幅優先探索(未実装)
メモリ不足。どう考えても足りない。

# (反復深化)山登り法
CASE3は評価関数が悪くなる方に移動しないと最短になる手順を発見できないので逆効果ですらある。
そうでないCASE5なら最短を見つけられる。
Unity iPhone実機で確認した際に、動きがもっさりしている時の解決法。(FPS調整)


Unityで開発をしていて、実機で走らせてみると、やたらと動きがもっさりして見える事があります。
処理の見直しももちろんですが、FPS(フレームレート)を調整してあげることで、滑らかになったりします。


まず、Edit -> Project Settings -> Quality でインスペクタを開きます

次に、VSync CountをDon't Syncで設定します。

![20150510013102.png](https://qiita-image-store.s3.amazonaws.com/0/64588/6989bcca-fa18-0008-ed0d-546342571886.png "20150510013102.png")


※ちなみに、DefaultのEvery VBlank(垂直同期)は、モニタのリフレッシュレートに同期されます。(今回は、この垂直同期を解除する設定を埋め込みました)

次に、コード上で目標フレームレートの設定を行います。

```
void Awake() { 
	Application.targetFrameRate = 60;
}
```

これで60Fpsを設定することが出来ました。
この状態で実機で確認すると、滑らかに動作するようになります。
【やっつけPHP】ブラウザでTiff画像を表示させろと言われた時（ImageMagickでファイルを生成せずにオンメモリで使う）

#Tiff画像をブラウザで表示させろと言われた時
まずは「**無理**」と断ってみる。
それでもダメな時は…

```php:tiff_viewer.php
<?php
header("Content-Type: application/pdf");
echo `convert Tiffファイル名.tif pdf:- 2>/dev/null`;
exit();
?>
```
これでごまかす。

ImageMagickのconvertコマンドの「pdf:-」は標準出力に変換結果を渡す書き方。
JPEGに変換したい場合は「jpg:-」
いちいちファイルに出力してるとゴミ掃除が面倒くさいので、オンメモリで完結させる。
時々convertコマンドが文句をたれるので、エラーは/dev/nullに捨てる。

WEBサーバには、
・ImageMagick
・ghostscript
・libtiff-tools
が入ってる前提（多分）
StyleDoccoのヘッダのドロップダウンが作成されない場合の対処

スタイルガイドを作成するツールの**StyleDocco**を使用した際に、以下の問題が発生したので対応した際のメモです。

# 発生事象
1. ヘッダのドロップダウンがフォルダごとにグルーピングされない

# 発生環境
* OS：Windows8.1 **日本語版**、Windows7 SP1 **日本語版**
* 実行環境：Node.js v0.12.0
* StyleDocco：0.6.6

# 対応方法
####発生事象１.ヘッダのドロップダウンがフォルダごとにグルーピングされない
以下のようにソースを修正します。

```js:cli.js：修正前108行目
 var parts = path.dirname(file).split('/');
```

```js:cli.js：修正後108行目
 var parts = path.dirname(file).split('\\');
```

同じようにお困りの方の参考になれば幸いです。
PHPUnit Skeleton Generatorのコマンド変わってた・・・

PHPUnit Skeleton Generatorをインストールして
phpunit-skelgen --test Calculatorとドキュメント通りに実行したらエラー。
Command "Calculator" is not defined.

versionが変わって、phpunit-skelgenのコマンドが変わってた
下記で動く
phpunit-skelgen generate-test Calculator

ドキュメント↓
PHPUnit マニュアル – 第16章 雛形ジェネレータ
https://phpunit.de/manual/3.7/ja/skeleton-generator.html

後、PHPUnitとPHPUnit Skeleton Generatorはcomposerでインストールする
PHPUnit Skeleton Generatorはもうpearからインストールできないんだって
ATOMをコマンドラインから動かす

最近[ATOM](https://atom.io)がよいと聞いて[sublime](http://www.sublimetext.com)から乗り換えようかなと検討中です。

# ATOMとは

最近ちょいちょい名前を聞くようになったEditorです。

[こちら](https://atom.io)を御覧ください。


# Sublime Textからの乗り換え


Sublime Textでよく使っていたコマンドラインからファイルを新規作成がatomでできるかなと思ってやってみたらいい感じだったので紹介します。

## コマンドラインから使うための準備

### Macでの導入方法

上のメニューからAtom->Install Sell Commandsを選ぶとインストールされます。

標準のインストール場所は以下です。

/usr/local/bin/atom

Sublime TextがApplicationsの中だったのでpath通したりするのが、ちょっと面倒だったのですが、中々いい感じの場所においてくれます。

もしこのパスが通っていなければ、.bashrcとかお好きな場所に、

PATH="$PATH":/usr/local/bin/

とか書いてもらえばOKです。
　

### 利用方法

#### ファイルを新規作成

```shell-session
atom hoge.txt
```

空のhoge.txtをatomが開いてくれます。
内容を書いて保存すればファイルが作成されます。


#### ファイルを編集

新規作成したhoge.txtをatomの後に指定すると編集モードで開きます。

```shell-session
atom hoge.txt
```

#### ディレクトリ単位で開く

開きたいディレクトリに移動します。

```shell-session
atom ./
```

と打つだけでプロジェクトとしてひらいてくれます。

![スクリーンショット 2015-05-10 0.58.23.png](https://qiita-image-store.s3.amazonaws.com/0/5565/703a6eee-edbb-55ec-c0ac-18affdd6207d.png)

こんな感じです。

Sublime Text2ではできなかった気がするので、
感動しました。

#### 新規ウィンドウを作成

オプションをつけて起動すると新規ファイルを開いた状態で起動します。

```shell-session
atom -n 
```


#### その他

```shell-session
atom -h
```

と打つとヘルプが表示されるので、
一読してみてもよいかもしれません。


ATOMかなりよくできてます。
ファイルが多くても軽いのが素晴らしいです。
D言語でcore.thread.Threadを用いて、引数を持つ関数をマルチスレッドで動作させる

備忘録として書いておきます。

D言語で関数を別スレッドで実行したい時があった時に、簡単に実現する方法の一つに`core.thread.Thread`を用いる方法があります。
しかし、ひとつ問題があって、`core.thread.Thread`はコンストラクタの引数に、戻り値がvoidで引数を取らないデリゲート, ラムダ式, 関数のアドレスのいずれかを取ります。

```d
new Thread(&func);//void func();
new Thread(() => lambdaExpr):
new Thread(() => delegateExpr);
```

としなければいけません。
ですから、そのままでは、別スレッドで関数を実行する場合、エラー処理が行えなかったり、引数を渡せなかったりします。

解決法は2つあって、別スレッドで関数を呼び出すための関数を作ってそこでエラー処理などを行うことにして、その関数を別スレッドで実行する方法と、今回紹介するデリゲートを用いた方法です。

デリゲートを用いる方法
とても簡単です。

エラー処理が行いたい場合は

```d
new Thread((){
  auto rVal = func(args);
  if(rValErrorCehck(rVal))
    ifStatement;
}).start;
```

単に別スレッドで実行したい場合は

```d
new Thread(() => func(arg1, arg2, args...)).start;
```

と記述すれば良いのです。
関数を別に定義してもいいのですが、正直、その関数が呼ばれる頻度は高くはないと思われますし、関数化した場合、値のやりとりにグローバル変数か、それに近いもの(クラスのメンバ変数など)を用いることとなり、名前空間を汚すことにもなりかねません。
デリゲートを用いると、簡単に、関数とほぼ等価な表現を直接記述できるため、コードの見通しも良くなります。

書いてから思いましたが、なんか色々と適当な記事になってしまいましたね・・・
まぁ、備忘録なのでいいかー笑
Monkを使ってMongoDBから検索

Monkに関する日本語の情報がない。
最初に触れたサンプルがMonkだったせいで、当面はMonkでさわるのだ。
StackOverflowにMongooseは初心者にはオススメしないよ、なんてのがあったし。。。

ローカル環境でデータ格納済みのmongodbを起動した状態で、nodeのREPLからアクセスする例です。
monkは未インストールなら「npm install monk」で入れておきます。

```
var monk = require('monk');
var db = monk('localhost:27017/testdb'); //DB名を指定
var articles = db.get("article"); //コレクション名を指定

//全件検索
articles.find({},{},function(err, docs) {
  console.log(docs);  //全フィールド出力
  console.log(docs.length); //ヒットした件数
});
//フィールドで検索して１件だけ取り出す
articles.find({"title":"hogehoge"},{limit:1},function(err, docs) {
  console.log(docs); //ヒットしたレコードを表示
});
```

ほぼMongDBのコンソールまんまですな。
失敗したときは「err」にエラーメッセージが入ってきます。
HHVM 3.7のDocker Imageつくりました

HHVM3.7がリリースされたので Docker Imageを作りました。

CentOS7がベースです。

# 使い方

```
$ docker pull dqneo/hhvm
$ docker run dqneo/hhvm
HipHop VM 3.7.0 (rel)
Compiler: tags/HHVM-3.7.0-0-gc8baf9cd3cb603e030969bfe24634d5e85549915
Repo schema: 1988ce75e6a571ce9c79c60fd7dc3ca8a5a5d403
```

# 作り方

Docker Hubの AUTOMATED BUILD REPOSITORY を利用しています。

https://registry.hub.docker.com/u/dqneo/hhvm/dockerfile/

Dockerfile
https://github.com/DQNEO/docker-hhvm
Excel：誕生日リストを年月で集計する

# 次の表を年月毎に人数を割り出す方法
![表１](https://qiita-image-store.s3.amazonaws.com/0/53164/b8519e81-bc2d-24a6-f7ec-a51c16d25d02.jpeg)

## ステップ１
C列を年月表示にする列(E)を準備する
```
=TEXT(C2,"yyyy-mm")
```
![表２](https://qiita-image-store.s3.amazonaws.com/0/53164/cf7d568b-c9be-c303-0836-c2a002d1694a.jpeg)

## ステップ２
集計用の列(F)を準備する
2005-01と入力してセルの右下にカーソルを当てて下にドラッグする
![表３](https://qiita-image-store.s3.amazonaws.com/0/53164/ac755a14-5870-52e8-a090-2fecb9352a62.jpeg)

## ステップ３
F列をTEXT関数でフォーマットして表示する
```
=TEXT(F2,"yyyy年mm月")
```
![表３](https://qiita-image-store.s3.amazonaws.com/0/53164/b9350eb4-13dc-0322-b0b0-3560160387cb.jpeg)

## ステップ４
E列からF列に該当する同一文字をカウントする
（「2005-01」という文字が E列にいくつあるか）
```
=COUNT(INDEX(FIND(F2,$E$2:$E$11),))
```
![表４](https://qiita-image-store.s3.amazonaws.com/0/53164/eff740cf-a65b-b2e1-a3ce-7ad35bcf3dbb.jpeg)


## 結果
![表５](https://qiita-image-store.s3.amazonaws.com/0/53164/30591bc0-71cc-9fff-a4d7-05e7ac03c1e4.jpeg)
dmdのmasterをビルドしたい

この記事は[D言語 Advent Calendar 2014](http://qiita.com/advent-calendar/2014/dlang) 160日目の投稿です。

#はじめに
dmdのセルフホスト化が始まり，現在dmdのHEADをビルドするためにdmd自体が必要になっています([#3970](https://github.com/D-Programming-Language/dmd/pull/3970))．そのため，HEADのビルドの前にdmdのバイナリを手に入れなければなりません．[公式](http://dlang.org/download.html)から手に入れてもいいのですが，折角なのでこれもビルドすることにしました．

#手順
##dmd 2.067をビルドする
最新のリリースであるdmd 2.067はC++コンパイラがあればビルドできるので，[D Wiki](http://wiki.dlang.org/Building_DMD)を参考にビルドします．後のためにdmd 2.067用のディレクトリを作ってビルドしましょう．コマンドは次の通りです．

```shell-session:dmd2.067のビルド
mkdir dmd2.067
cd dmd2.067/
git clone -b 2.067 https://github.com/D-Programming-Language/dmd.git
git clone -b 2.067 https://github.com/D-Programming-Language/druntime.git
git clone -b 2.067 https://github.com/D-Programming-Language/phobos.git
cd dmd/src
make -f posix.mak MODEL=64
cd ../../druntime/
make -f posix.mak MODEL=64 DMD=../dmd/src/dmd
cd ../phobos/
make -f posix.mak MODEL=64 DMD=../dmd/src/dmd
```

最後に次のような`dmd.conf`を`dmd2.067/dmd/src`に置きましょう．ライブラリのディレクトリは絶対パスでなければなりません．

```shell-session:dmd.conf
[Environment]
DFLAGS=-I/path/to/dmd2.067/phobos -I/path/to/dmd2.067/druntime/import -L-L/path/to/dmd2.067/phobos/generated/linux/release/64 -L--no-warn-search-mismatch -L--export-dynamic
```

これでdmd 2.067がビルドできました．
##dmd masterのビルド
ほとんどの手順はdmd 2.067のビルドと同じです．ただ，dmdをビルドする際に，

```shell-session:dmd-masterのビルド
make -f posix.mak MODEL=64 HOST_DC=/path/to/dmd2.067/dmd/src/dmd
```

とさっきビルドしたdmd 2.067への参照を追加する必要があります．
dmd,druntime,phobosをビルドした後に`dmd.conf`をコピーすれば，dmd masterのできあがりです！あとはPATHに追加するなりD Wikiを参考にしてinstallするなりしてください．

#number XXXX is not representable
phobosをビルドする際に`std/math.d(2702): Error: number 0x1p-1024 is not representable`といったエラーが出ることがあります（出ました）．原因はよく分かりませんが，環境によっては発生するようです．
その場合は，`std/math.d`のエラーが出ている行の`0x1p-1024`を`0x1p-1024L`に，`0x1p-128f`を`0x1p-128`に変更してやるととりあえずコンパイルが通ります．この問題について，現在情報を収集しています．
Dockerのイメージレイヤを分析して可視化してくれるサービス ImageLayersの紹介

Dockerのイメージレイヤを分析して可視化してくれるサービスを発見しました。

https://imagelayers.io/

URLのパラメータでイメージ名を指定するだけで分析結果を表示してくれます。

# 例　Perlのイメージ

https://imagelayers.io/?images=dqneo/perl

![perl-image.png](https://qiita-image-store.s3.amazonaws.com/0/18740/bc8efe4c-15df-4d07-49d4-c6cfef7b43da.png)

おてがる！！

見方は、上が起点で、下に行くに従って層が積み重なっていきます。
Dockerfileの記述と同じ順番だと思えばよいですね。


# docker historyコマンドでも調査はできる

まあ`docker history`コマンドで同じようなことはできるのですが、

```
docker history dqneo/perl
```

イメージをpullしてこなくても調査できるのが imagelayers.io のよい点ですね。