OmniAICreator/Qiita-1.07M huggingface dataset:
文字コード変換

# 文字コード変換
たまにLinux上のファイル変換で必要になるコマンド。

## インストール
```debian``` でのインストールですね。

```text
# apt-get -y install nkf
```


## 使い方
### 変換の確認

```-w``` で```utf-8``` に変換
```-s``` で```Shift_JIS``` に変換です。


```text
$ nkf -w <ファイル名>
```

### 上書き

```text
$ nkf -w --overwrite <ファイル名>
```

自分はこれだけあればLinux上では事足りるかなぁ。
SwiftでDDD(ドメイン駆動設計)


# Swiftあるある(行き当たりばったりで開発した時)
- ViewControllerが色んな機能を持っていて肥大化して、読みにくい
- helperの場所が人によってまちまち。どこで使ってるのか解りにくい。
- 一つ機能を追加しようとすると、影響範囲が広すぎる。

※ swiftでもobjective-cでも同じですが、swiftから触り始めたのと
今あえてobjective-cに触れる必要がなさそうなので、swiftの表記にしています。

# ドメイン駆動開発（DDD）とは
業務的関心事のドメインモデルを中心に
UIやコードをドメインモデルに一体化させる考え方。


# キーワード
- ドメイン駆動開発（DDD)
- ユースケース駆動開発（UCDD)
- クリーンアーキテクチャ 
- MVP


# 資料

- 1.[The Clean Architecture]
(http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html)
- 2.[MVCモデルの問題点を解決するPMモデルとMVPモデル]
(http://geekna.hatenablog.jp/entry/20110823/p1)


# ドメイン駆動開発の層分け
### クリーンアーキテクチャ
資料1より
![CleanArchitecture-81565aba46f035911a5018e77a0f2d4e.jpg](https://qiita-image-store.s3.amazonaws.com/0/47874/8b186a93-ac69-0bd5-96f6-75c82ee958de.jpeg)

- 世界観としてはEntitiesを中心に、DBやUIが外界とする。
- 外界からは中の様子は知れるが、中から外は無関心である。

##  Swiftでやってみた

![クラス図0.png](https://qiita-image-store.s3.amazonaws.com/0/47874/95ddc7a0-67ae-a779-2dbc-458db5601946.png "クラス図0.png")

### MVP
MVPの考えも入れています。
資料2より
![20110823210118.png](https://qiita-image-store.s3.amazonaws.com/0/47874/8c54aab0-fd77-73d9-f76b-2fd76f6648c3.png)

swiftでは

- Viewはプロトコルで実装
- ViewControllerがViewのプロトコルを継承し、Presenterに通知する。
- PresenterはViewControllerから通知を受け取り、Viewに表示命令、usecaseに実行命令を渡す。

今回はinitとviewDidLoadの役割は以下のように分けました。

#### ViewController
- viewDidLoad()
   - Presenterのアタッチ、呼び出し
   - TableViewのCustomCell設定
   - refleshControllの設定
   - dateFormatterの設定

#### Presenter
- init()
   - viewのアタッチ
   - インスタンス設定
- viewDidLoad()
   - viewの表示設定

# 手順
- 1. ユースケースを出す。
- 2. ユースケース層からドメイン層を設計する。
- 3. データ層を設計する。
- 4. UI層を設計する。

レビューもこの順番が見やすい様です。

## UI層

- View:
Protocolで実装
- ViewContoroller:
ViewのProtocolを継承
-  Presenter:
ViewControllerから事実を受け取ってUsecaseに通知する。

## Domain層
- Usecase:
通信する時はここで非同期に
ここでアプリが何をしているか判断できる。
- Repository:
Protocolで実装
- Entity:
取引するデータの型

## データ層
- Reposotory:
Protocolで実装
データ層のCRUDをもつ(Railsで言うActiveRecord)
moc作りやすい
- Api:
RepositoryのProtocolを継承
- CoreData:
CoreData操作
- Entity:
データ層個別で取引するデータ型
（なくても良い）

# 今回の利点
- Presenter,Usecaseでアプリの概要がわかる
- 各クラスの責務を分けたので、それぞれで完結していて変更しやすい。
   - データ取得元を追加したい時、ちょっと追加するだけなので拡張しやすい
   - 機能追加も他と独立して追加できる。

- テストしやすい
  - Data層のrepository層でmocを作ってテストデータで開発ができる


# 苦労した点

- デタッチアタッチの概念
swiftが勝手にやってくれていると考えていたweak接続とデタッチタイミングをちゃんと調べなおしました。(汗
FuelPHPのConfigをうまく使いたい。


　みなさんConfigをどんな風に使ってますか？
　今回書いている使い方が正しいのかどうなのかという議論はあるかと思いますが、こんな風に使ってみてますというお話。
　（やってみたはいいものの、これ実はだめなんじゃとも思ってます。）

#なんで書こうと思ったか。
　configのチュートリアルのようなものはよく見かけますが、こういう風に使ってるよってのをあまり見かけなかったので、衝動的に書いてみました。うまく使えば便利な気がするので、知見は共有していきたいところ。この辺のベストプラクティス的な話が知りたい。
　コードは適当に書きなぐったので間違ってるところあるかもしれません。雰囲気を感じ取ってください。

#実装
##作るもの
あるDBの3つのモデルから、40、50、60つずつデータをcsvに書き出すバッチ処理を作る。

##書き方
こんな風にしてみる。

```php:config/batch.php
return array(
	'datas' => array(
		'data1' => array(
			'model' => 'Model_Data1'
			'nums' => 40,
		),
		'data2' => array(
			'model' => 'Model_Data2'
			'nums' => 50,
		),
		'data3' => array(
			'model' => 'Model_Data3'
			'nums' => 60,
		),
	),
);
```

使うときは次のような感じ。

```php

// データ取得の時は以下のようにする。
Config::load('batch');
$data = array();
$data_config = Config::get('datas');
foreach($data_config as $conf) {
	$model_name = Arr::get($conf, 'model');
	$model = $model_name::forge();
	$number_of_record = Arr::get($conf, 'nums');
	// 指定した数だけデータを取得
	// get_with_numsは全てのmodelクラスに存在する前提
	array_merge($data, $model->get_with_nums($number_of_record)); 
}
// csvへ書き出し。pathは適当に。
to_csv($data, $path)
```

　以上のようにすることで、書き出す対象テーブルがいくつ増えても大丈夫。
　さらに、抽出条件も必要なら、configに書いておいてdata取得メソッドに渡してあげるといったこともできる。また前処理のmethodなんかを登録しておいて呼び出してあげるといった使い方も可能（この辺りはconfig/rest.phpが似たような使われ方をしている）。フラグみたいなものをもたせてしまっても良いと思う。以下は一例。

```php:config/batch.php
return array(
	'datas' => array(
		'data1' => array(
			'model' => 'Model_Data1'
			'nums' => 40,
			'where' => array(
				array('id', '>', '50')
			),
			'flag1' => true,
			'before' => 'before_method',
		),
	),
);
```

#多分良いところ
　実装を工夫すれば、何か仕様変更があった際にConfigだけをいじれば大丈夫という場合がある。コードに手を出さずに済んで嬉しい。何度か助かりました。
　あと見た目のコードがかなりすっきりするのも好きです。

#良くないと思ったところ
　コードから処理が見えにくいような気がする。
　また処理ごとにconfigを作っていたらconfigファイルが大量に出来上がる気がする。うまく切り分けていっても把握するのが大変そうだけれど、それってどうなのだろう。

#まとめ
　Configを使ってごにょごにょすると実は結構便利なんじゃない？　といった話でした。
　色々ご意見がもらえたら嬉しいです。
IDCF Cloud 1時間1円、1ヵ月500円から



3ステップで、簡単サーバー作成
最短1分かんたん
アカウント登録

最速20秒で
仮想マシン作成

ネットワーク設定で完了！
ご利用スタート


「IDCFクラウド」をご利用頂いたきっかけ、選択頂いた理由：

月額手ごろな価格、のみ500円.

「IDCFクラウド」のご利用用途（可能な範囲で結構です）:

個人ブログ等等.

「IDCFクラウド」をご利用頂いて、よかった点/便利になった点:

スピード、高可用性、オンデマンド購入、安全など.
最近のマイ開発環境

はじまりとしてなにかふさわしい物を…と無駄に悩みつつ、これから開発をはじめる誰かに向けてに手元の環境について紹介することにしてみた。

ちなみに普段の業務はデザイン+フロントエンド開発がメイン。

## ハード

- MacBook Pro Retina 13'
- Magic Mouse + Airpad Pro
- セカンドモニタ 21'
- クロッキー帳 + マーカー

ショートカットキーを覚えるよりも、マウスでやってしまう派なので、快適なマウス操作環境が必須。ジェスチャーも重要なのでMagic Mouseだし、MBPのTrackpadも使う。

視線が横に移動すると疲れるので、2枚めのディスプレイはMBPの上に来るようにして上下二段。

アイディア練るときは、UIデザインにしても、ロジックにしても紙の上であれこれ考える。大きい紙がいいのでクロッキー帳が安いし多いし大きいしで最適。が、そのうち Apple Pencil に浮気しそうな気配。

### 必ずやる設定
- トラックパッドの[軌跡の速さ]をちょっと速め
- キーボード入力のリピートまでの速さをMAX
	-  [システム環境設定]->[キーボード]->[キーのリピート]+[リピート入力までの時間]

## ソフト

- Adobe CC
- IntelliJ IDEA
- Terminal
- homebrew
- Spotlight
- docker
- *env
- Source Han Code JP
- Google日本語入力
- SourceTree
- Slack
- Todoist
- Skitch
- LICEcap

### Adobe CC
http://www.adobe.com/jp/creativecloud.html
とりあえず Photoshop と Illustorator 。

### IntelliJ IDEA
https://www.jetbrains.com/idea/
ちょっと前まで [WebStorm](https://www.jetbrains.com/webstorm/) だったが触りたい言語が増えてきたので、 IntelliJ Idea に各言語プラグインてんこ盛りで利用中。

### Terminal
シンプルに標準のターミナル使ってる。テーマはPro。（「黒い画面」が使いたくて。）

### homebrew
http://brew.sh/index_ja.html
各種コマンドのインストール。

### Spotlight
Ctrl + Space からのアプリ名入力->エンターで起動が便利。あと式入力で計算。

### docker
http://docs.docker.com/mac/started/
最近はプロジェクトをテストしたり、ビルドしたりするときによく使う。手元でちょっと新しいソフトをゴニョゴニョしたりするときにも便利。簡単にすばやく独立した環境が作れるのはとても良い。

### *env
https://github.com/riywo/anyenv
一番使うのは、 node 用に [ndenv](https://github.com/riywo/ndenv) 。ただ、 [pyenv](https://github.com/yyuu/pyenv) とか [rbenv](https://github.com/rbenv/rbenv) も必要になるので、 anyenv で *env は全面管理。 anyenv すごく便利。

### Source Han Code JP
https://github.com/adobe-fonts/source-han-code-jp
開発中のメインフォント。長らく Ricty を利用していたが、試してみたら文字が綺麗で気に入ってそのまま乗り換えて今に至る。半角:全角 が 3文字:2文字 なのは気がついたら慣れた。

### Google日本語入力
https://www.google.co.jp/ime/
普段の会話が遜色なく普通に打てていい。あと、「今日」とか「明日」で 2015-12-01 表記の日付を出せるのも良い。

### SourceTree
https://ja.atlassian.com/software/sourcetree/overview/
サブコマンドはショートカット同様覚えていられないので、やっぱりGUIが好み。

### Slack
https://slack.com/
コミュニケーションはやっぱりSlackがいい。

### Todoist
https://ja.todoist.com/
個人のTodo管理はここしばらくは Todoist。Todoistの前は [Remeber The Milk](https://www.rememberthemilk.com/) を使っていたものの、Todoistの階層構造が気に入って乗り換えてからはずっと利用中。

### Skitch
https://evernote.com/intl/jp/skitch/
キャプチャとって枠つけて矢印つけた説明を最もすばやく作れるので大変重宝してる。

### LICEcap
http://www.cockos.com/licecap/
説明用Gifアニ作成に。

## おわり
以上、マイ開発環境のご紹介。
std::vectorをswapで解放したあとにresize()すると消した要素が復活する

初投稿でこんな頭の悪い記事を書くのも恥ずかしいのですが…
何も考えずに脊髄だけでプログラム書いてたら出くわした現象です。

```cpp:hoge.cpp
std::vector<int> test = {1, 2};
std::vector<int>().swap(test); //時折解説サイトで見かける初期化法

test.resize(2); //こんなことする人もいないとは思う
test.push_back(3);
test.push_back(4);
test.push_back(5);

for(int i = 0; i < test.size(); i++) {
 std::cout << "test[" << i << " = " << test[i] << std::endl;
 /* 出力結果：
  test[0] = 1
  test[1] = 2
  test[2] = 3
  test[3] = 4
  test[4] = 5
 */
}
```

そもそもやろうとしてたことが頭悪かったので、特に解決策なんかは探してません。
shrink_to_fit()とか使えば出来そうな気はします。

環境依存かもしれないのでコンパイラの情報も載せます。
>icpc version 15.0.3 (gcc version 4.4.6 compatibility)
JIRA のワークフローを作業承認できるようにカスタマイズする方法

リクルートライフスタイルでAtlassian関連の管理を行っている、梶原成親です。　Atlassian User GroupのOrganizerもさせて頂いております。　AtlassianのAdvent Calendarに初寄稿させて頂きます！

# はじめに
* JIRAで作業管理していて、承認証跡は別なツールを使ってる人に最もフィットするかも知れません。
* JIRAのワークフローのカスタマイズの要素を知りたい人にオススメです。


# 実施したいこと
* 下記の「**承認待ち**」ステータスの時に承認者の承認を取得した後、作業を開始する業務を想定。
* 承認者の承認した日時と、誰が承認したかをJIRA課題上に自動的に保存する方法を記載しています。
 

# 用意するもの
* [JIRA Suite Utilities | Atlassian Marketplace](https://marketplace.atlassian.com/plugins/com.googlecode.jira-suite-utilities/cloud/overview)
* カスタムフィールドとして、「承認者」(User Picker (single user))「承認日時」(Date Time Picker もしくはDate Picker）を追加しておく。


_ワークフローのスクリーンショット_
![2015-11-30_16h44_03.png](https://qiita-image-store.s3.amazonaws.com/0/45733/c5139d9a-82a2-6e3e-67a2-a278b9b5e368.png)


## Post-function機能を活用する。
* ワークフローには[Post-function](https://confluence.atlassian.com/adminjiracloud/advanced-workflow-configuration-776636620.html)機能があります。　要は、Transition（ステータスからステータスに変わる動作の事）した後に機能をPostingする事ができます。
* 具体的には、あるフィールドを更新する。　担当者を自動的に変更する。　等の機能があります。
* 私の例では「Aステータス」→「Bステータス」へ移動する時に、私の例では「承認」と「否認」の２種類のTransitionがあります。これらは、PostFunctionの内容によって、課題のカスタムフィールドへ更新する内容を変えています。

## **承認待ち**ステータスから、**進行中**へ移動する時の「承認」のTransitionの設定
私の環境では以下の設定を実施しております。

* ステータス変更を実施させたユーザを承認者の欄に自動入力。
* ステータス変更を実施させた時間を承認日時に自動入力。
* 担当者を”オペレータ”というカスタムフィールドから、アサインを変更する。（進行中→承認待ちに遷移する際に、遷移させたユーザを”オペレータ”に代入することで、直前の担当者へアサインを自動的に変更するために実装しています。）

こうすることで、その「承認」を実施した行為をJIRA課題のカスタムフィールドに登録することができます。

![2015-11-30_18h18_02.png](https://qiita-image-store.s3.amazonaws.com/0/45733/08e98ebf-5052-de19-1c30-ebed32d5cf6c.png)

## 承認証跡としての工夫
* JIRAのカスタムフィールドを管理する画面の設定ですが、”表示時”、”編集時”、”作成時”で画面を使い分けする機能があります。（Screen Schemeの設定）
* 「承認者」、「承認日時」のカスタムフィールドを”表示時”の画面のみにアサインすることで、ユーザがJIRA課題を編集できないようにさせる事ができます。
* また、承認者できる人をValidatorで制御する事で承認実施できる人を特定させる事も可能です。


皆さんの参考になれば幸いです！

ーーーーー
また、このような情報交換をAtlassian User Groupを定期的に実施しております。　ノウハウ交換やネットワーキングに是非活用ください。
**[Atlassian User Group Tokyo](http://augj.connpass.com)**


梶原成親 @kajinari
Time Machineのファイルを直接削除

# 背景
データ復旧時、初めからTime Machineを有効にしていたら仮想マシーンのディスクイメージが半端な状態で大量にバックアップされてしまい、せっかくのTime Machine用ストレージが無駄に浪費。初日からディスク容量が足りなくてバックアップ失敗の悲劇。

# Backups.backupdb以下はrootでも消せない
というわけで、一度Time Machineのデータを初期化しようとrootになってrm -rfしようとしたらOperation not permittet。OS Xにはrootでも消せないファイルがあるんですね。

# 脱法コマンド
いざという時のために、Time Machineの権限を持った状態で他のコマンドを起動するコマンドが用意されているようです。実行したいコマンドを引数にrootから実行してやればOK。

```shell-session
$ sudo /System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass \
> rm -rf /Volumes/<Time Machine>/Backups.backupdb
```

bypassコマンドの置き場所はOS Xのバージョンごとに若干変更があるようなので、TMSafetyNet.kextの下でfindすると良いかもしれません。ちなみにEl Capitanでは上記のパスで問題ないはず。

Time Machineが混乱するといけないので、一度設定を完全にOFFにした状態でBackups.backupdbを丸々削除しました。

# 注意
部分的な削除や特定の日にちのデータを丸ごと削除した場合にTime Machineが整合性を保てる保証はないので、丸々消したいけどフォーマットはしたくない、という場合に限定して利用するのが良いかと思います。私の場合、救済した1TBのディスクイメージが同じボリュームに転がっていました。
.ebextensionsでAmazon LinuxにDeepSecurity Agentをインストールしてみた

「サポート情報」→「インストールスクリプト」で表示されるコマンドを順番に実行するだけもとりあえずはインストール出来るもよう
これでいいのかな・・・？

もっといけてる方法がないかこれから模索します。

```yaml:01-ds-agent-install.config（例）
commands:
    01-command:
      command: wget https://app.deepsecurity.trendmicro.com:443/software/agent/amzn1/x86_64/ -O /tmp/agent.rpm --quiet
    02-command:
      command: rpm -ihv /tmp/agent.rpm
    03-command:
      command: sleep 10
    04-command:
      command: /opt/ds_agent/dsa_control -r
    05-command:
      command: /opt/ds_agent/dsa_control -a dsm://agents.deepsecurity.trendmicro.com:443/ "tenantID:TENANT_ID" "tenantPassword:TENANT_PASSWORD"
```
ユニフィケーションアルゴリズム

１階述語論理の推論。ユニフィケーションアルゴリズム。2つの式を比較し、変数に割り当てを行う。ユニフィケーションの和訳は単一化。

"Artificial Intelligence: A Modern Approach" 英語版第三版 9.2 節 (p.328) より。

# 擬似コード
```java
function unify(x, y, dic)
    if dic == 失敗
        return 失敗
    else if x == y
        return dic
    else if x が変数
        return unifyVar(x, y, dic)
    else if y が変数
        return unifyVar(y, x, dic)
    else if x が 関数 かつ y が関数
        return unify(xの引数, yの引数, unify(xの関数名, yの関数名, dic))
    else if x がリスト かつ y がリスト
        return unify(xの2番目以降, yの2番目以降, unify(xの先頭, yの先頭, dic))
    else
        return 失敗


function unifyVar(var, x, dic)
    if var in dic
        return unify(dic[var], x, dic)
    else if x in dic
        return unify(var, dic[x], dic)
    else if var が x の中に含まれている
        return 失敗
    else
        return dic に var = x を追加して dic を返す
```
Linux チートシート基礎編

#本当によく使うLinuxコマンドのチートシート(基礎編)


###今いるディレクトリってどこなの?
現在のディレクトリの名前を表示する

```
$ pwd
```


###ディレクトリの中身を表示
```
$ ls
```

###ディレクトリ移動したい
ホームディレクトリへ移動

```
$ cd
```

指定したディレクトリへ移動

```
$ cd [移動先ディレクトリを指定]
```

###ファイルを移動させたい
```
$ mv [移動させたいファイルを指定] [移動後のファイル名を指定]
```

###ファイルをコピーしたい
``` 
$ cp [コピーしたいファイルのディレクトリとファイル名を指定] [コピー後のディレクトリとファイル名を指定]
```

###ファイルを作成したい
```
$ touch [作成したいファイルのディレクトリとファイル名を指定]
```

###ファイルの中身を表示
``` 
$ cat [表示したいファイルのディレクトリを指定]
```

###ファイルの末端10行を表示
```
$ tail [表示したいファイルのディレクトリを指定]
```

###ファイルを削除したい
```
$ rm [削除したいファイルのディレクトリとファイル名を指定]
```

###ファイルをディレクトリごと削除したい
```
$ rm -rf[削除したいファイルのディレクトリを指定]
```
＊確認メッセージは出ないので注意してコマンドを打つこと。

###ファイルやディレクトリの権限の変更
```
chmod 777[ファイルやディレクトリを指定]
```
＊上記777は全てのユーザーにrwxを渡している

数字3桁の左から、所有者、グループ、その他
r = 4、w = 2、x = 1で覚えると覚えやすい。

読み込み権限・・r
書き込み権限・・w
実行権限・・x
rwx	7
rw-	6
r-x	5
r--	4
-wx	3
-w-	2
--x	1
---	0

###ファイルをダウンロード
```
$ wget [ファイル名を指定]
```


###日付の表示
```
$ date
```

###現在のコマンドの終了
```
$ control + c
```

###現在のセッションの終了
```
$ exit
```
Swiftで複数の非同期処理を並列実行させて、すべてが終わったらコールバックを受け取る関数

記事の内容はこちらを参照してください。
https://mishimay.github.io/e3f393c26661c1f7850c/
<!--


***

改良したものをライブラリとして公開しました。
[Swiftで複数の非同期処理を扱うライブラリAsyncKitを書きました](http://qiita.com/mishimay/items/7df447969a1c38d856d8)

***



非同期処理を並列に実行させてすべてが終わったら別の処理を行う、ということをしたいとき、GCDのgroupを使う方法があります。
ただ、毎回GCDのコードを書くのは美しくないですし、やり方を忘れてしまいがちです。

そこで新しく `parallel ` という関数を作りました。
JavaScriptの非同期処理を扱うライブラリ "async" にあるparallel関数を参考にしています。

# Quick Example

```swift
parallel(
    [
        { done in done("1") },
        { done in done("2") }
    ]) { results in
        print(results) // -> [Optional(1), Optional(2)]
}
```

# 詳しい使い方

非同期処理を行う `AsyncProcess` 型のクロージャを用意。

```swift
let process1: AsyncProcess = { done in

    request() { // なんらかの非同期処理
        // ...
        
        // 非同期処理が終わったら `done()` を呼ぶ
        // `done()` には非同期処理の結果を渡す
        done("1")
    }
}

// 並列処理を行いたい分だけクロージャを用意。
let process2: AsyncProcess = { done in
    request() {
        done("2")
    }
}
```

parallel関数にクロージャの配列を渡す。

```swift
parallel([process1, process2]) { results in
    // すべての非同期処理が終わったらこのクロージャが実行される
    
    // `results` 配列には非同期処理の結果が、parallel関数に渡した非同期処理の順番と同じ順番で入っている
    print(results) // -> [Optional(1), Optional(2)]
}
```


# コード

```swift
typealias AsyncProcess = (done: AnyObject? -> ()) -> ()

func parallel(acyncProcesses: [AsyncProcess], completion: [AnyObject?] -> ()) {
    var results = [AnyObject?](count: acyncProcesses.count, repeatedValue: nil)

    let group = dispatch_group_create()
    for (i, acyncProcess) in acyncProcesses.enumerate() {
        dispatch_group_enter(group)
        acyncProcess { result in
            results[i] = result
            dispatch_group_leave(group)
        }
    }

    dispatch_group_notify(group, dispatch_get_main_queue()) {
        completion(results)
    }
}
```


# できないこと
- 結果の型を指定できない
  - typealiasでの定義をGenericにできなかったので
  - 工夫すればできなくはなさそうですが ([Generic typealias in Swift](http://stackoverflow.com/questions/27084586/generic-typealias-in-swift)) 、コードのシンプルさを優先しました
- 丁寧なエラーハンドリングができない
  - 非同期処理中でエラーが発生した場合 `done(nil)` として、 `results` に `nil` が入っているかチェックすればとりあえずエラーハンドリングできます
  - または、NSError型を渡しても同様にできます
  - 理想的には、非同期処理がすべて成功した場合、1つでも失敗した場合で分岐を別けるのが丁寧かと思います 


# 環境
```
Apple Swift version 2.1 (swiftlang-700.1.101.6 clang-700.1.76)
Target: x86_64-apple-darwin14.5.0
```

# 参考
GCDのgroupについて
http://commandshift.co.uk/blog/2014/03/19/using-dispatch-groups-to-wait-for-multiple-web-services/

JSのasyncライブラリ
https://github.com/caolan/async










-->
Ajaxの範囲は最小限にすべし

検索フォームを入力して検索し、その結果を編集したとき、
ページ全体を再描画するのは効率が悪い。
検索フォームに入力された値が保持されないためだ。
新規作成や削除はともかく、更新であるならば今表示されているレコードの要素を
renderするだけで事足りる。
データ量も削減出来て一石二鳥。

```js+erb:update.js.erb
$("<%= escape_javascript("#result__sample#{@sample.id}") %>").html("<%= escape_javascript(render 'sample') %>");
```
PostgreSQL 関数(ストアド)の作成 

# 前提
PostgreSQL 9.x

# ソース
``` CREATE_FUNCTION.sql
DROP FUNCTION FUNCTION_NAME ();
CREATE FUNCTION FUNCTION_NAME () RETURNS BIGINT AS
'
BEGIN
  -- 処理
  return 1;
END;
'
LANGUAGE 'plpgsql';

-- 呼び出し時
-- select FUNCTION_NAME();

```

# 参考サイト
1. [[SQL] 13. ストアドプロシージャ (SQL 非標準) 1 | TECHSCORE(テックスコア)](http://www.techscore.com/tech/sql/SQL13/13_01.html)
2. [PostgreSQL 編19 - ストアドファンクション、function、PL/pgSQL、トリガー - SAK Streets](http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/psql_k19.htm)
describe の次行に subject を、 context の次行に let を書く

というオレオレルールなんですが、わりといい気がするのでご紹介します。

よくわからないと思うので実例で。

# 実例
**狼が村人を噛むと村人は死ぬ。狼がハムスターを噛んでもハムスターは死なない** という条件の rspec を、以下のように書きます。

```wolf_spec.rb
require 'rails_helper'

RSpec.describe Wolf do
  subject(:wolf){ FactoryGirl.build(:wolf) }
  it { is_expected.to be_valid }
  describe 'bite' do
    subject { wolf.bite(creature) }
    context 'bite villager' do
      let(:creature){ FactoryGirl.build(:villager) }
      it { expect{subject}.to change{creature.reload.living?}.to(false) }
    end
    context 'bite hamster' do
      let(:creature){ FactoryGirl.build(:hamster) }
      it { expect{subject}.not_to change{creature.reload.living?} }
    end
  end  
end

```

順に上から見て行きましょう。

```ruby
describe Wolf do
  subject(:wolf){ FactoryGirl.build(:wolf) }
```
まず、この2行がペアです。 Wolf モデルに関するテストであるという宣言と、実際に wolf のインスタンスを用意する ruby 文とのペアです。 subject に引数を渡しているので、 ``wolf`` でも ``subject`` でも同じものを参照できます。

次の行。

```ruby
it { is_expected.to be_valid }
```
```is_expected``` は ```expect(subject)``` と等価です。実行文そのものがテスト内容を完全に表現しているので、 ``it`` にコメントは不要でしょう。

その次の2行を見てみましょう。

```ruby
  describe 'bite' do
    subject { wolf.bite(creature) }
```
biteメソッドをテストするよ！という宣言と、実際に wolf の bite メソッドを呼び出す ruby 文とのペアです。
先の subject で引数を渡しているので、  ```wolf``` で参照できます。 ``creature`` はこの時点では未定義です。

次の2行を御覧ください。

```ruby
    context 'bite villager' do
      let(:creature){ FactoryGirl.build(:villager) }
```
villager を bite した時のテストだよ！という宣言と、biteに引数として渡してある ``creature`` に villager のインスタンスを実際に渡す ruby 文とのペアです。

次の行はテストの本体になります。

```ruby
it { expect{subject}.to change{creature.reload.living?}.to(false) }
```
今回は change マッチャの都合で ```is_expected``` が使えませんが、英文として読んだ通りのテストなので、やはり ``it`` にコメントは不要でしょう。

# まとめ  
describe と context の実装は alias なのでどっちを使っても実質同じなのですが、英単語の意味で使い分け、「何をテストするか」を describe, 「どんな状況のテストをするか」を context でまとめると分かりやすい、と言われています。
一方、subject と let も (ほぼ) alias でして、英単語の意味的に使い分けているだけなのですが、 subject は「何をテストするか」の宣言なので、これを describe と対応させ、 context は let で書くようにすると書き方に統一感が生まれ、読みやすい spec になるんでは、という提案でした。

完全にこのルールで全てを書けるわけではなく、describe と let がペアになるケースも実際に私の手元で発生はしていますが、 **describeとかcontextのコメントを書いたら、次の行にそのコメントに対応するruby文を書く** というルールは確実に可読性を上げるのでオススメです。
expressをインストールしてみる（その過程でnpmも）

node.jsで動作するフレームワークexpressをインストールしました。[こちらの記事](http://expressjs.com/ja/starter/installing.html)を参照しました（というより、そのとおりに実行しています）。npmの準備が必要です。

#Express

node.jsで稼動するフレームワーク。[こちらの記事](http://expressjs.com/ja/starter/installing.html)を参照しましたが、準備段階で*npm*というものが必要になります。なおExpressに関しては[http://expressjs.com/ja/](http://expressjs.com/ja/)を参照。


##npmのインストール

npmに関しては[www.npmjs.com](www.npmjs.com)を参照。apt-getからインストール可能。

```
$sudo apt-get install  npm
```



##expressをインストール

いよいよexpressのインストール。

```
npm install express -g
```

これでインストール完了（2016/1/12 オプション -gに修正）。



## nvm, node.jsの有効化

僕の環境では、node.jsをnvmからインストールした関係で、nodeコマンドを使う為にはnvmおよびnode.jsを有効にする必要がある。ターミナルを立ち上げて、都度

```
source ~/.nvm/nvm.sh
nvm use 5.1 #node.jsのV5.1を使用する
```
を打つか、.bashrcに上記を記述しておく。

##Express application generator
[こちらのドキュメント](http://expressjs.com/ja/starter/generator.html)をほぼそのままなぞっています。

コマンド*express*でスケルトンを生成できる。インストールはnpmから行うが-gオプションをつけるときは***sudo***で行う必要がある。

```
$ sudo npm install express-generator -g
```

スケルトンの生成。以下の例ではmyappフォルダを作成し、その中にスケルトンを生成する。
```
$ express myapp

   create : myapp
   create : myapp/package.json
...

   install dependencies:
     $ cd myapp && npm install

   run the app:
     $ DEBUG=myapp:* npm start

   create : myapp/public/javascripts
$ 
```

おまじないのように、次の2行を実行すると実行できる。

```
$ cd myapp && npm install
$ DEBUG=myapp:* npm start
...
 myapp:server Listening on port 3000 +0ms
```

ブラウザから[localhost:3000](localhost:3000)にアクセスすると以下の画面が表示される。

![express.png](https://qiita-image-store.s3.amazonaws.com/0/56044/028f14cd-b143-4c1b-360a-484283a74379.png)

ソースを見たけれど今のところどうなっているのかよく分からない。
Module#include は ruby 2.0 までは private

2.0 までは private

```irb
irb(main):001:0> RUBY_VERSION
=> "2.0.0"
irb(main):002:0> Module.public_instance_methods.grep(/^include$/)
=> []
irb(main):003:0> Module.private_instance_methods.grep(/^include$/)
=> [:include]
```

2.1 から public になってた

```irb
irb(main):001:0> RUBY_VERSION
=> "2.1.5"
irb(main):002:0> Module.public_instance_methods.grep(/^include$/)
=> [:include]
irb(main):003:0> Module.private_instance_methods.grep(/^include$/)
=> []
```

```irb
irb(main):001:0> RUBY_VERSION
=> "2.2.3"
irb(main):002:0> Module.public_instance_methods.grep(/^include$/)
=> [:include]
irb(main):003:0> Module.private_instance_methods.grep(/^include$/)
=> []
```

`MyClass.include MyMod` みたいに使える。（というかそう使ってたら 2.0 環境でエラーになって気づいた）

地味すぎて気付かなかった... 2.1 リリース当時も特にこれに触れた記事を見なかった気がするけど、リリースノートちゃんと読んだら書いてあった。
https://github.com/ruby/ruby/blob/v2_1_0/NEWS#L96
herokuで1dynoで非同期処理を行う


EventMachineを使います。

```app.rb
get '/async' do
  operation = proc {
    p 'operation started!'
    10.times do |i|
      puts "#{i} times Hello, Async!"
      sleep 1
    end
  }
  callback = proc {|result|
    p 'operation finished!'
  }
  EventMachine.defer(operation, callback)
  redirect '/'
end
```

https://github.com/miminashi/sinatra-async
Pokeduino Storage


* PC-G850VSからSIOで読み書きできる外付けストレージをつくる
* パソコンとシリアル通信でファイルをやりとりするかわりに、Arduino（同一基板上に実装した互換機）を介してmicroSDに書き込む
* 1GBのSDでもポケコンからしたら無限の容量なのでファイルの上書きはせずひたすら新しいファイルをつくって追記する

# 構成

microSD <--(SPI)--> ATMega328 <--(RS232C)--> PC-G850



# 電源回路

* ポケコンの電池の減り具合によってIOポートから供給される電源電圧が4V~6Vの間で変動する
* SDカードの電源は2.7V~3.6Vが要求される

そのため、レギュレータで3.3Vを生成する必要がある。

このへんが使えそう。
* [Pololu 3.3V Step-Up/Step-Down Voltage Regulator S7V8F3](http://www.pololu.com/product/2122)
* [低損失三端子レギュレーター 3.3V 800mA NJM2845DL1-33](http://akizukidenshi.com/catalog/g/gI-02247/)

ATmega328とmicroSDの間にレベルコンバータを置くのも面倒なので、回路全体を3.3Vで駆動することにする。


# ATmega328

Arduino Pro 8MHzのブートローダー書き込み済みのものを使う。

# 動作

## PC-G850VSからの書き込み

* NormalモードでSELECTが押されたら書き込みモードに移行
* RTSをアサートして待機

## PC-G850VSへの読み込み

* ボタン操作特になし
* CTSがアサートされたらシリアルに出力する

# LCD表示

## ノーマルモード

```
000-0000
10 PRINT
```

## 書き込みモード

* 2行目↓が点滅

```
000-0000
↓WRITING
```

## 読み出しモード

* 2行目↑が点滅

```
000-0000
↑READING
```

# ディレクトリ構造

```
/SD ROOT
├ /000
│ ├ rev
│ ├ 0001.txt
│ ├ 0002.txt
│ ...
│ └ xx.txt
│
├ /001
├ /002
└ /xxx
```
curlチートシート


# ヘッダを見る

## リクエストヘッダ、レスポンスヘッダ両方表示する

```sh
curl --verbose http://www.knet.ne.jp/~ats/z/ka/kita.htm >/dev/null
```

# リクエストもレスポンスも通信内容をすべてダンプして表示する

```shell-session
curl --trace-ascii - http://google.com/
```

- 引数にログを書き出すファイルを指定する
- 引数に`-`を指定すると標準出力に書き出し
- 引数に`/dev/stdout`を指定している例も見かけるが、やってはいけない。Linuxで結果を更にファイルにリダイレクトしたときにおかしな動作になった（毎回先頭から上書きされていた。Macだと再現しなかった）
- リクエストヘッダだけでなくリクエストボディの内容も確認したいときはこれを使うしかないっぽい？


from: https://superuser.com/questions/291424/how-do-you-display-post-data-with-curl

# BASIC認証を行う

```bash
curl -v -u admin:password http://localhost:3000/photos/447.json
```

# Cookieベースの認証を行う

```bash
# 認証
curl -c cookie.txt -d email_address=homeless@example.jp -d password=qwertyui http://localhost:3000/sessions/login.json

# 取得したcookieを使ってアクセス
curl -b cookie.txt http://localhost:3000/activities.json
```

# リクエストヘッダを付与する

```bash
curl -v -X POST -H "Content-type: application/json" -d data=hoge http://localhost:3000/send.json
```

# POSTでリソースを作成する

<!--
```bash
curl -v -X POST -d name=homeless -d email_address=homeless@example.jp -d password=qwertyui http://localhost:3000/sessions/register.json
```

```bash
curl -v -X POST -d email_address=homeless@example.jp -d password=qwertyui http://localhost:3000/sessions/login.json
```

* おそらくサーバ内ではsessionsオブジェクトが追加される
-->

例としてRailsのScaffoldingで生成されるREST APIに以下のリクエストを投げると、itemリソースがひとつ作成される

<!--
```bash
curl -v -X POST -d name=hoge http://localhost:3000/items.json
```
-->


```bash
curl -v -X POST --data "country=US&currency=USD&locale=en-US&locationSchema=iata&grouppricing=true&originplace=SFO-iata&destinationplace=BOS-iata&outbounddate=2016-05-23&inbounddate=2016-05-24&adults=1&children=0&infants=0&cabinclass=Economy" "http://api.skyscanner.net/apiservices/pricing/v1.0?apiKey=YOURAPIKEY"
```


# PUTでリソースを更新する

例としてRailsのScaffoldingで生成されるREST APIに以下のリクエストを投げると、idが一致するphotoリソースが更新される

```bash
curl -v -H "Content-Type: application/json" -X PUT --data '{"id": 447, "photo":{"hidden": true}}' -u admin:password http://localhost:3000/photos/447.json
```

リクエストボディ

```json
{
  "id": 447,
  "photo": {
    "hidden": true
  }
}
```


# ハッシュ（辞書？）形式のパラメータを渡す

http://stackoverflow.com/questions/3860654/nested-params-with-curl


# Request body の内容をパイプから読み込む

`-d @-`で標準入力からデータを読み込める

```sh
echo "{\"fuge\": 5678}" | curl -v  -H "Content-type: application/json" -d @- http://localhost:9292/items
```


# Request body の内容をヒアドキュメントから読み込む

`-d @-`で標準入力からデータを読み込める

```sh
curl -v  -H "Content-type: application/json" -d @- http://localhost:9292/items <<EOF
{
  "hoge": 1234
}
EOF
```


# 通信ログを標準出力に出して、レスポンスボディはファイルに保存する

`-v`と`-o`を組み合わせる

```sh
curl -v -o response.json http://localhost:9292/items
```


# レスポンスボディの最後に改行をつける

`-w`オプションを使う。

```sh
curl -w '\n' http://localhost:9292/hello
```

参考: https://codeday.me/jp/qa/20181224/30462.html



# UserAgentを指定する

`-A`でユーザエージェントを指定できる

```sh:例
curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:72.0) Gecko/20100101 Firefox/72.0" -v "http://akizukidenshi.com/catalog/g/gP-10958/" | iconv -f sjis -t utf8
```
Vimチートシート


# カーソル移動

## カーソルのある行を画面中央にもってくる

```
zz
```

## カーソルのある行を画面の上端にもってくる

```
zt
```

## カーソルを単語の末尾に移動する

```
e
```

from: http://php-web.net/vim/move.html


## カーソルを任意の文字まで移動

右移動

```
f 文字
```

左移動

```
F 文字
```

from: http://www.webhtm.net/vim/move_char.htm


## ジャンプする直前の行に戻る

```:ジャンプする直前の行に戻る
ctrl + o
```

```:進む
ctrl + i
```

参考: https://qiita.com/takeharu/items/9d1c3577f8868f7b07b5#%E3%82%B8%E3%83%A3%E3%83%B3%E3%83%97%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E8%BE%BF%E3%82%8B


## 対応する括弧までジャンプ

括弧の上で `%`


# コピー

## カーソル上の単語をヤンク（コピー）する

```
yiw
```

## シングルクォートで囲まれた文字列をヤンク（コピー）する

```
yi'
```

## シングルクォートで囲まれた文字列をシングルクォートも含めてヤンク（コピー）する

```
ya'
```

## コピーしてクリップボードに貼り付ける

visualモードで範囲選択して、`"*y`


# 削除

## シングルクォートで囲まれた文字列を削除する

```
di'
```



# ウィンドウ操作

## ウィンドウを左右に2分割する

```
:vsplit
```

## 現在のウィンドウで別のファイルを開く

```
:e ファイルのパス
```

## 現在のウィンドウを隣のウィンドウと入れ替える

```
:wincmd x
```

# タブ操作

https://vim-jp.org/vimdoc-ja/tabpage.html

## タブを右に移動する

```
:+tabm
```

## タブを左に移動する

```
:-tabm
```


# 置換

## マッチした文字列を後方参照する
https://qiita.com/shuhei/items/71446b2b29bc6a63f857


# その他

## ハイフンでつながっている語も単語として選択するようにする

```vim
:setlocal iskeyword+=-
```

http://synboo.hatenablog.com/entry/2011/12/04/142525

## UPCASE/donwcase を切り替える

チルダ

```
~
```

http://vim.wikia.com/wiki/Switching_case_of_characters

## 操作の記録

`qa`で記録開始, `q`で記録終了, `@a`で記録内容の再現.

https://qiita.com/taketin/items/aa6cc363f84f6090f1c0 より


## マウスを無効にする

```
:set mouse=
```

https://qiita.com/manabuishiirb/items/6fb8ff796d8e016f40c6

## VIMRUNTIMEの確認

```vim
:echo $VIMRUNTIME
```

## systemd.service 形式のファイルのシンタックスハイライトを有効にする

`$VIMRUNTIME/syntax/systemd.vim`が存在してる前提。
`~/.vim/ftdetect/`以下に設定ファイルを追加すると、特定の拡張子に対してどのファイルタイプとして扱うかを設定できる。

```shell-session:シェルから設定ファイルを追加する方法
$ cat > ~/.vim/ftdetect/systemd.vim <<'EOF'
au BufRead,BufNewFile *.service set filetype=systemd
EOF
```



## プラグインを手動でインストールしたい

パッケージマネージャとか触りたくない場合は、vim本体にあるパッケージ機能を使ってプラグインを入れたらよいらしい。
https://tyru.hatenablog.com/entry/2017/12/20/035142

```sh
mkdir -p ~/.vim/pack/vendor/start
cd ~/.vim/pack/vendor/start
git clone <任意のプラグインのレポジトリ>
```


## Markdownのプレビューしたい

shibaを使っていたが、開発が止まっているし自力でメンテするのも難しそうだったので、[previm](https://github.com/previm/previm)を使うことにした。

次のコマンドを実行する。

```sh
mkdir -p ~/.vim/pack/vendor/start
cd ~/.vim/pack/vendor/start
git clone git@github.com:previm/previm.git
```

`~/.vimrc`に以下の行を追加する。

```vimrc
let g:previm_open_cmd = 'open -a Firefox'
```

## 現在編集中のファイルのファイルタイプを確認する

```
:set filetype?
```

## netrwで新規ファイル

```
%
```

## 現在の行を消して行頭から入力する

```
S
```

## NERDTreeで新規ファイル

```
m
```
のあとに`(a)dd a childnode`でEnter


# 参考

* http://vimblog.hatenablog.com/
* https://qiita.com/keye/items/f87fcf9fc5d861834a43
Swiftのバリデーションライブラリの比較

Swift製のバリデーションライブラリの[SwiftCop](https://github.com/andresinaka/SwiftCop)と[SwiftValidator](https://github.com/jpotts18/SwiftValidator)を両方使ったので、比較してみました。

結論から言うと、SwiftCopの方がおすすめです。
エラーメッセージをダイアログで出したい場合とかがあるので、その場合、順番がバラバラなSwiftValidatorは使いにくいです。

# 比較表

比較日時:2015/11/30

||[SwiftCop](https://github.com/andresinaka/SwiftCop)|[SwiftValidator](https://github.com/jpotts18/SwiftValidator)|
|-----|------|-----|
|比較したバージョン| 0.0.1 | 3.0.0|
|ライセンス | MIT | MIT |
|githubのスター |277|389|
|カスタムバリデーションの作成| 可 | 可 |
|バリデーションエラーメッセージの配列の順序 | swiftCop.addSuspectで登録した順番 | バラバラ |
[メモ] cakephp3 の bin/cake server で vagrant で接続できない問題解決

発生した現象
=========== 

CakePHP3 の [クイックスタートガイド](http://book.cakephp.org/3.0/ja/quickstart.html) に従って **vagrant** を使って新規に環境を作り、
`bin/cake server` でサーバ起動して
`http://192.168.33.10:8765/` にアクセスしてみたところ、
`Google Chrome が 192.168.33.10 に接続しようとしましたが、拒否されました。`
というエラーが発生。

原因究明
========

http://qiita.com/IKEA_dless/items/f536b3c009af295bb4a5
にそのまま答えを発見。

```bash
$ ss -lnput | grep 8765
tcp    LISTEN     0      128                  ::1:8765                 :::*      users:(("php",5661,10))
```

`::1:8765` になってるので、`192.168.33.10` ではアクセスできなかった。

`bin/cake server` の代わりに、`bin/cake server -H 0.0.0.0` とすることで、vagrant 経由（`192.168.33.10`）でもアクセスできるようになる。

なお、`bin/cake server -H 0.0.0.0` 後、 `ss -lnput` は下記のようになる。

```bash
$ ss -lnput | grep 8765
tcp    LISTEN     0      128                    *:8765                  *:*      users:(("php",5689,10))
```
JavaからShellScriptを実行

## 実行環境
```
OS: Mac OS X 
$ java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
```
## コード
```Main.java
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main (String args[]) {
        try {
            Process process = new ProcessBuilder("ls", "-l").start();
            InputStreamReader isr = new InputStreamReader(process.getInputStream(), "UTF-8");
            BufferedReader reader = new BufferedReader(isr);
            StringBuilder builder = new StringBuilder();
            int c;
            while ((c = reader.read()) != -1) {
                builder.append((char)c);
            }
            System.out.println("result:\n" + builder.toString());
            System.out.println("Command return code: " + process.waitFor());
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}
```
### githubリポジトリ
https://github.com/atsushi-ito-110/execute-shell-script
（結論としてはこれがすべて）

## 参考サイト
- [いろんな言語で、外部プロセス起動 - CLOVER](http://d.hatena.ne.jp/Kazuhira/20121111/1352637159)
- [Java の外部プロセスが返って来ない場合の対処方法 - Qiita](http://qiita.com/shintaness/items/6dd91260726e555c49e5)

## 追記
作成日(2015/11)から2.5年くらい経っていて、今(2018/06)だったらどうすっかなと思い記事をリファクタリングしました。
なにかあればissue作成してもらえたら喜びます。
WindowsからMacにファイルを持っていくと勝手に実行フラグがつくので消す

# 背景

Windowsで作業しているファイルを（例えばUSBメモリなどを介して）Macに持って行くと、何故か実行フラグが付いている。
`ls -al`した時に赤く表示されるのはそれ。

パスを通さないかぎり問題は無いかもしれないけど、気持ち悪いので消したい。

# 方法

ディレクトリは実行フラグを残しておかないと開けないので、
ファイルはパーミッションを`644`、ディレクトリは`755`にする。

```bash
cd (対象のディレクトリ)
find . -type f -exec chmod 644 {} ";"
find . -type d -exec chmod 755 {} ";"
```

でまとめて修正。

---

他に考慮すべき点などあれば、コメント下さい。
StaticLibraryを配布したらXcode7で大量にワーニングが出た


## 現象
StaticLibraryを配布したところ、利用者から下記の様なワーニングが多発したと連絡を受けた

```
warning: /var/folders/ht/bwnbnkj15712kftlggh_mrd039gknf/C/org.llvm.clang.hoge/ModuleCache/3OXN4L3TBS3XZ/Darwin-MI6WZSG1PNOM.pcm: No object file for requested architecture
while processing /Users/fuga/work/foo/h/wwwwww.framework/WwwWwww(WwwwWwww.o):
```

## 誤った解決方法
StaticLibraryの利用者側で、
__「Debug Information Format」の指定を「DWARF with dSYM」から「DWARF」に変更する__<br/>

僕は下記のような対応は解決ではないと思う
http://iphone-app-developer.seesaa.net/article/426858945.html

この設定を行った場合、ワーニングは表示されなくなるが、その代わりにdSYMファイルが作成されなくなる。

### dSYMファイル
このdSYMファイルはデバックシンボル群を保持している。用途としてはクラッシュログが本来メモリダンプのみのためアドレスしか記載がないところ、dSYMファイルが存在していればアドレスからシンボルが確認でき、人間が意味の分かる内容になる。<br/>
よく見受けられるのはゲーム系開発などビルドに時間がかかりすぎる場合は、Debug時のみ「DWARF」を指定するなど。<br/>
とにもかくにも、「DWARF」にすればワーニングが表示されなくなるだけで、解決は何もしていない。

* cf. Xcode7.1.1（Xcode7.1時に意識していない）時のデフォルト値<br/>
「Debug Information Format」がDebug時は「DWARF」、Release時は「DWARF with dSYM」ぽい

## 正しい解決方法

StaticLibraryの作成者側のXcodeの設定で、下記を実施する。

`Enable Modules (C and Objective-C) (CLANG_ENABLE_MODULES) = NO`

### Enable Modules (C and Objective-C)がYESだと？

StaticLibrary作成時に下記フォルダへcacheを生成していた。

`/var/folders/ht/bwnbnkj15712kftlggh_mrd039gknf/C/org.llvm.clang.hoge/ModuleCache/`

おそらく、StaticLibraryを配布した利用者側ではcacheを参照するようになっていたため、
作成者側ではワーニングが出ずに、利用者側ではワーニングが出現していたのだと思う。

## 最後に

StaticLibraryの利用者側のXcodeの設定で、下記を実施すると、

`Enable Modules (C and Objective-C) (CLANG_ENABLE_MODULES) = NO`

もれなくエラーが出現すると思われる。

たぶん・・・。

そもそも、この辺てXcode6以前の時て、どうだったんだろか。意識してなかった。
Chrome | ブックマークを追加するショートカットは Ctrl+D

表題のとおり。

その後、

- Enter で確定
- Esc でキャンセル

できる。

---

`Ctrl+B` ではないので注意。

(よく忘れる)




<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
[JavaScript] 3. 即時関数 と jQuery.readyイベント関数

---

1. [クラスの定義](http://qiita.com/Koizumi-Greenwich/items/7a579c43084286dd38be)
2. [クラスの継承](http://qiita.com/Koizumi-Greenwich/items/96215899b8b61cc85e65)
3. [即時関数 と jQuery.readyイベント関数](http://qiita.com/Koizumi-Greenwich/items/d192ad98ca8b2449e4fd)
4. [即時関数でクラス定義](http://qiita.com/Koizumi-Greenwich/items/6f74230f35f2c5b9a46b)
5. [private プロパティ](http://qiita.com/Koizumi-Greenwich/items/f9e8a6dad4f049c89944)
6. [Object.defineProperty/ies でプロパティ/メソッド定義](http://qiita.com/Koizumi-Greenwich/items/1b827b4304538f2f8e37)

---

JavaScriptの記述でとてもよく似ていて間違いや誤解をされやすいのが、 **即時関数** と jQueryの **readyイベント関数** です。
両者は記法がとてもよく似ていますが、動作が全く異なります。
間違いや誤解によって致命的な結果を招きますので、両者の違いをしっかりと理解して注意しましょう。

#即時関数
文字通り「即時に実行、処理される関数」です。
これは ***JavaScript の実装*** で jQuery とは無関係です。

```js:即時関数
(function(仮引数, ...) {
    //
    // 即時に実行、処理したいコード
    //
})(引数)
```

*関数* は通常、定義された後、別の箇所から呼び出された際に処理されます。
一方、 **即時関数** は定義と同時に自動的に呼び出されて処理されます。つまり、 **関数定義がロードされた瞬間** に実行されます。

#readyイベント関数
**jQuery** に実装されているイベント処理関数です。
HTMLドキュメントが全てロードされ、DOMにアクセスができる準備が完了した後に処理されます。すなわち、 **全てのロードが完了した後** に実行されます。

```js:readyイベント処理
$(function() {
    //
    // ロード完了後に実行、処理したいコード
    //
})
```

このように即時関数ととてもよく似ています。
似ていますが、実行されるタイミングがまったく異なります。

###注意ポイント

- 先頭の「$」の有無
	- 「$」があれば readyイベント、無ければ即時関数。
- 最後尾の「(引数, ...)」の有無
	- readyイベントには「(引数, ...)」は無い。即時関数には「(引数, ...)」を付ける

###readyイベントの本来の記法
なお、前述のreadyイベントの記法は簡略化されたものです。
本来は以下のように記述しますが、簡略記法を使用するのが一般的です。

```js:readyイベントの本来の記法
$(document).ready(function() {
    //
    // ロード完了後に実行、処理したいコード
    //
})
```

###JavaScriptの本来の実装
さらに、jQueryのreadyイベントは、JavaScript本来の load イベントの処理を簡略化したものです。

```js:JavaScriptのloadイベント処理
document.addEventListener( 'DOMContentLoaded', function() {
    //
    // ロード完了後に実行、処理したいコード
    //
});
```
.ebextensionsでAmazon LinuxにMackerelをインストールしてみた



# 設定ファイル

## 設定ファイルを記述
（やり方はいろいろだと思いますが、とりあえずこれでうまくいきました）

RPMのURLなど最新のインストール手順を確認の上で適宜修正を行なってください。
[RPMパッケージでmackerel-agentをインストールする](http://help-ja.mackerel.io/entry/howto/install-agent/rpm)

API KEYおよびService・Roleの設定は適宜書き換えてください。

また、設定ファイルはデプロイ前にバリデーションするようにしましょう。
[YAML Lint](http://www.yamllint.com/)

個人的には、サービスの再起動はServiceのセクションで行った方がいいのではないかと思いますが、どうなんでしょうか？
教えてエロい人！
[hakobera/mackerel.config.yml](https://gist.github.com/hakobera/897fd96ba2d3c7b112a6)

```yaml:01-mackerel-agent-install.config
packages:
  rpm:
    mackerel: "https://mackerel.io/file/agent/rpm/mackerel-agent-latest.noarch.rpm"
files:
  /etc/mackerel-agent/mackerel-agent.conf:
    mode: "00644"
    owner: root
    group: root
    encoding: plain
    content: |
      apikey = "API KEY"
      roles = [ "Service:Role" ]
services:
  sysvinit:
    mackerel-agent:
      enable: true
      ensureRunning: true
      packages:
        rpm:
          mackerel
      files: "/etc/mackerel-agent/mackerel-agent.conf"
```

## .ebextensionsフォルダの配下にコピー

tomcatであれば、warファイルと一緒にzipで固めてデプロイします。

固め方はこちら
[設定ファイル（.ebextensions）による高度な環境のカスタマイズ](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/ebextensions.html)

# 参考情報

[Linux サーバーでのソフトウェアのカスタマイズ](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/customize-containers-ec2.html#linux-services)
bitbucket > 関連するファイルを見るため、指定のコミット(5782663)を開く > https://bitbucket.org/[ユーザ名]/[リポジトリ]/commits/5782663?at=master / blameを使用


bitbucketにてある.cppファイルの履歴を見たとする。その中で、気になるコミットがあった時、そのコミットで一緒にaddしたファイルを見るのはどうするか。

## try1 > URL指定

1. 左メニューからソースを選択
2. 気になるファイルを選択 (xxx.cpp)
3. 右上の[履歴]を選択
    上記の項目3までしているとする。

4. 履歴のコミット番号を確認 (例: 5782663) > 7桁でいい

masterリポジトリの場合、以下のリンクでそのコミット時の変更ファイルが見れる。

```
https://bitbucket.org/[ユーザ名]/[リポジトリ]/commits/5782663?at=master
```

そもそも、上記手順3の履歴閲覧にてそのコミットに関連するファイルが何か知りたかったが、通常の方法は見つからなかった。

別途、左メニューの「コミット」にて一覧のうちのコミットを選択した時に表示されるURL(コミット番号が長い)と、「コミットの番号は7桁程度でハッシュが重なりにくい」ということから上記の方法を考えた。

7桁程度の事項はTravis Swicegoodによる「入門 git」に以下の記載がある。
> コミット名の最初の7文字を使っている。Gitはどんな具合にハッシュ値を与えても、それにマッチするコミット名を探してくれる。


## try2 > blame使用

以下の方法もでたどり着けることがわかった。こちらはマウスクリックだけで行ける。

1. 左メニューからソースを選択
2. 気になるファイルを選択 (xxx.cpp)
3. 右上の[履歴]を選択
    上記の項目3までしているとする。

4. 気になる履歴のコミット番号選択
5. blameを選択
6. 表示される中で手順4で選択したコミット番号を見つけて、その番号を選択
overrideを理解する

修飾子のoverrideについて理解をする。

そのために次のような状況を想定します。
電車のクラスとそれを継承した新幹線のクラスを作るとします。
電車はプロパティとして最大速度を持っています。

```
class train {
    var maxspeed :Int
    
    init(){   
    maxspeed = 80
    
    }
}

let enoden = train()
print(enoden.maxspeed)  //80

```
インスタンスとして江ノ電をつくってみました。
たまたま新幹線で投稿してるので電車になってますが詳しくないので速度は適当です。
trainクラスでイニシャライズされているためmaxspeedが80となっています


新幹線クラスを作ってみます。これはtrainクラスを継承させます。
ただ新幹線は最大速度を320とします。

```
class shinkansen :train{
    override init(){  //オーバーライド
        super.init()
        self.maxspeed = 320
    }

}

let nozomi = shinkansen()
print(nozomi.maxspeed) //320

```
継承されたmaxspeedに320という値がイニシャライズされています。
c++ builder XE4, 10.2 Tokyo > TeeChart > 1つのグラフ:データ数20万件で固まる / 複数のグラフ: トータルデータ数20万件で固まる

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
```

TeeChartにおいてFastLineのプロットをするときにどのくらいのオーダーの数のプロットが可能なのか気になった。

調べたが、数の制限についての情報はうまく見つけられていない。

## try1 > 1つのグラフで
試しに以下を実行してみた

```Unit1.cpp
void __fastcall TFormMain::Button1Click(TObject *Sender)
{
	TDateTime dt;

	dt = Now();
	double val;

	for(DWORD idx=0; idx < 200000; idx++) {
		val = Random(500) - 250;
		FastLineSeries1->AddXY(dt, val, "", clRed);
		dt = IncSecond(dt, 1);
	}

	String msg = L"fin";
	OutputDebugString(msg.c_str());
}
```

1回目のボタンクリック時はfinが帰ってきた。
2回目のボタンクリックでは処理が終了しない。

データ個数を20000にした場合は、多少時間はかかるが個々の処理が終了していく。
(10.2 Tokyo + Win 10 Proでも同じパフォーマンス)

データが大量にある場合は間引きをして表示するなりの対処をすればいいのだろう。
実際のところ、20万件のデータをそのままプロットする必要はないと思われる。


## try2 > 複数のグラフで
(追記 2015/12/20)

1つのグラフのプロット上限がだいたい20万件だった。では、複数のグラフだと各グラフが20万件いけるのか？

実際試したところ、複数のグラフの場合は「全体のデータ数が20万件を超えた時」から動作があやしくなる。

例として、FastLineSeriesを6個を１つのグラフに用意し、そのグラフを8つ並べる場合、各
FastLineSeriesのデータ数を4000だと動くが、6000にすると処理が止まるようだ。

4000 * 6ライン * 8グラフ = 192000
6000 * 6ライン * 8グラフ = 288000

全体のデータ数を20万件以内に抑えるのが無難。

```txt:動作確認
Windows 7 pro
1.5GB RAM
```


### 検索用キーワード

- TChart
コードレビューでコーディング規約違反ですと言われないためにgit hookでコミットするときに自動で直す


[スマフォアプリゲーム開発における問題と対策 その１](http://qiita.com/wapa5pow/items/352a199efc8674c20f29#%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%8C%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A6%8F%E7%B4%84%E9%81%95%E5%8F%8D%E3%81%AE%E6%8C%87%E6%91%98%E3%81%A7%E3%81%86%E3%82%81%E3%81%A4%E3%81%8F%E3%81%95%E3%82%8C%E3%82%8B)で書いた件の詳細です。

チームでコードレビューを実施する際に、**コーディング規約違反です**というのを何十個もつけた事があって、これを不毛な作業だし、時間がもったいないという事で解決するのに以下の方法を実施しました。

* gitのコミットフックを利用して、コミットする際にコーディング違反を自動修正する

コミットフックは、pre-commit(コミットする前に実行)とpost-commit(コミット後に実行)があるのですが、以下の理由でpost-commitを選びました。

* 自分の書いたコードに対して、自動で変えられたものをコミットしたくない
* どこが規約違反なのか認識したい

それでは設定の仕方を記します。

# 前提
* pythonで開発
* コーディング規約はPEP8
* autopep8でコーディング規約を修正

# 手順

autopep8をインストールします。

    $ pip install autopep8

まずリポジトリを作ります。

    $ mkdir your_proj
    $ cd your_proj
    $ git init
    
次に、gitのpost-commitフックに使用するスクリプトを作成します。実行権限も付与する必要があります。

    $ vi .git/hooks/post-commit
    $ chmod 755 .git/hooks/post-commit

以下の内容を書き込みます

    #!/usr/bin/env bash
    
    PROJ_ROOT="$( git rev-parse --show-toplevel )"
    
    ${PROJ_ROOT}/hooks/scripts/post-commit
    hook_status=$?
    if test ${hook_status} -ne 0
    then
        echo " git post-commit hook error"
        exit 1
    fi

hookスクリプトを作成します。post-commit内に書くてもありますが、.git/hooks/post-commitの内容を変えたくなったときにいちいちメンバー全員に変更してもらうのはナンセンスなので、ソースコード自体にコミットしておきます。

    $ mkdir -p hooks/scripts
    $ vi hooks/scripts/post-commit
    $ chmod 755 hooks/scripts/post-commit 

以下の内容にします。
--ignoreの部分はチームのコーディング規約の状況に応じてかえてください。

    #!/usr/bin/env bash
    
    FILES=$(git diff HEAD^ HEAD --name-only --diff-filter=ACM | grep -e '\.py$')
    
    for f in ${FILES}
    do
        # auto pep8 correction
        autopep8 --ignore=E309,E501,W291,E303 -i ${f}
    done

hookスクリプトをコミットしておきます.

    $ git add .
    $ git commit -m'first commit'
    
準備ができたので何かコーディング規約に違反しているpythonスクリプトを作ります。
改行がありすぎたり、=(イコール)との間にスペースがなかったりします。

    $ cat test.py 
    print 'Hello World!'
    
    def my_method():
        a=1+2
    
    
        return a
    
    
    
    $
    
ただし正しく実行はできます。

    $ python test.py 
    Hello World!

それではコミットしてみます。
    
    $ git add .
    $ git commit -m'add test'

するとコミットした直後にもかかわらず変更点がでています。

![coding_—_bash_—_bash.png](https://qiita-image-store.s3.amazonaws.com/0/30079/ff99fbc8-31c0-a3cf-a137-1a5e1842b895.png "coding_—_bash_—_bash.png")

git diffでみてみると以下のようになります。

![coding_—_lv_—_bash.png](https://qiita-image-store.s3.amazonaws.com/0/30079/3aa19c2c-7705-7e85-6e24-cbc027c35157.png "coding_—_lv_—_bash.png")

commit後に自動で修正されているのがわかります。
これでさらにコミットしてpushすれば、もうコードレビューで規約違反ですと言われる事がなく、本質のレビューに集中できます。

今回はpost-commitにしますが、チームの状況に応じて、pre-commitにすれば、後からコミットしなくてもすみます。
何がPEP8違反なのかわかっているチームならpre-commitでもいいと思います。
Popcorn Android版を支えるライブラリ

本記事では、クービック株式会社が提供している**[サロンの前日・当日予約サービスPopcorn](https://play.google.com/store/apps/details?id=com.coubic.popcorn&hl=ja)**のAndroidアプリで使っているライブラリを紹介します。

ここで紹介しているライブラリはほんの一部です。アプリ内のライセンス表記から全リストを見れるので、気になる方はぜひ一度[ダウンロード](https://play.google.com/store/apps/details?id=com.coubic.popcorn&hl=ja)してみてください。

# ライブラリ一覧

## [ActiveAndroid](http://www.activeandroid.com/)

生のSQLiteのクエリを書くのは辛いので、ActiveAndroidというORMを使っています。
ORMは途中で移行するのが厳しいので、かなりコンサバにライブラリを選定しました。
1年ほど運用してみて感じたのは、

- APIがとてもわかりやすい
- （英語も日本語も）情報が多いので、何か問題が発生しても大抵なんとかなる
- パフォーマンスは微妙
    - そこまで困ってはないですが
- バージョンを飛び級するマイグレーションが微妙（バグってる？）
    - 参考：http://androhi.github.io/slides/#14 

ということです。
ActiveAndroidのネガティブな評判というとパフォーマンスが挙げられることが多いですが、個人的には最後のマイグレーションの問題がネックでなんだかなあという感じです

## [Conceal](https://facebook.github.io/conceal/)

Facebookが開発している暗号化ライブラリ。
デリケートな情報を端末に保存する際に、暗号化／復号するのに使っています。

こちらのライブラリは非常にめんどくさい＆気をつけないと脆弱性を仕込む可能性のある暗号化処理を代わりにやってくれるので大変有用なのですが、**64bit CPUに対応できてない**という致命的な問題が。。（Xperia Z4やGalaxy S6で動かないというレポートで気付きました）なお、本家のリポジトリに[Pull Request](https://github.com/pristineio/conceal)は出てるのですが、もはやメンテする気がないのかマージされる気配が全く無いです。

しょうがないので、[64bit対応されたfork](https://github.com/pristineio/conceal)をcloneしてきて、手元でビルドして使っています。ビルドにはbuckというFacebookのビルドツールが必要なので注意。

## [Dagger 2](http://google.github.io/dagger/)

アプリの規模が大きくなり、依存関係が複雑になってきたタイミングで導入しました。
導入当初はDagger 2が出たばかりの頃で情報が少なく手間取りましたが、導入後はコンポーネント間の依存関係がすっきりと整理されました。

## [ButterKnife](http://jakewharton.github.io/butterknife/)

ビューの依存性注入に使用。
もはやAndroid開発においてデファクトスタンダード感ありますね。`findViewById`や`setOnClickListener`など書かなくてよくなるので、ActivityやFragmentのコード量を減らして見やすくできます。

## [Parceler](https://github.com/johncarl81/parceler)

画面間でデータの受け渡しをする場合に、Parcelとモデルの間の変換コードを自動生成してくれます。

## [Retrofit](http://square.github.io/retrofit/)

APIクライアントをアノテーションから自動生成するライブラリ。
はじめGoogleの[Volley](https://github.com/mcxiaoke/android-volley)（※リンク先はクローン）というライブラリを使っていたのですが、エンドポイントが増えるたびにそこそこコードを書かなくてはならないのが辛くて途中で移行しました。移行前後で比較すると、API周りのコード量をとにかく減らせるのがメリットです。

一方、Volleyにある機能で自動リトライなどはRetrofitにはないので、自前で作る必要があります。

## [Picasso](http://square.github.io/picasso/)

サーバーにある画像を読み込んでImageViewに表示するのに利用しています。
こちらも元々はVolleyのNetworkImageViewを使っていたのですが、円形のImageViewを作るときにNetworkImageViewを継承しないといけない縛りが辛かったのでPicassoに移行しました。

このライブラリは現行の2.5.2で、特定のEXIFヘッダがついているときに画像が読み込めないというバグがあります。しょうがないのでサーバー側でEXIFを消すことで対応しています。

## [Stetho](http://facebook.github.io/stetho/)

Facebookが提供しているデバッグ用ライブラリです。
通信のリクエスト／レスポンスの分析やSQLiteの中身を除くのに便利です。

通信系が現在使っているRetrofit+OkHttpだと導入はお手軽なのですが、以前Volleyを使ってた時は導入に一苦労しました。結論を言うと、

- Volleyが内部で使っている通信クラスをHttpUrlConnectionからOkHttpに変更する
    - この辺？ https://gist.github.com/bryanstern/4e8f1cb5a8e14c202750
- StethoのOkHttp用アダプターを入れる

という手順で導入しました。

# ライブラリとの付き合い方

ライブラリを導入するときは、

- 十分に実績があるか
- ちゃんとサポートされているか

を確認してから導入するようにしていますが、それでもライブラリのバグを踏むことはよくあります。ActiveAndroid, Picasso, Concealあたりは実際にバグを踏んでおり、しかも本家で対応されていません。そんなときは

- ライブラリを自分で直して使う
- バグを踏まないように回避する

しかないので、事前にじっくり調査した上で用法用量を適切に守ってライブラリを使いましょう。
adobe premiereCCのウィンドウがツールバーの下に表示されてスタートできない問題　解決法

windows10で起こった問題です。
adobe premiereはスタート時にプロジェクト選択の画面が立ち上げられそちらをクリックしない限りスタートできません。

次回立ち上げ時は前回終了時のウィンドウ位置からでプログラミングなどで端によせていてそのまま終わらせてしまった場合、次回もその位置からスタートになります。これは再インストールしても変わりません。（私の場合はディスクのクリーンアップまでやっても変わりませんでした）どこに情報が保存されるのか？

adobeのサポートではwindowsユーザーの変更をすすめられるので問題外。

ということで自力解決しましたので
解決法を載せておきます。（無理やりです）
コントロールパネル->ディスプレイ->画面の解像度

こちらで向き：縦を選択
（大胆な）
これで一時的に画面が横倒しになり
見えなかったウィンドウが表示されます。
画面は自動的に検出されもとにもどります。
[Linux][shell] PIDを取得する方法まとめ

# shellの `$!` を使用して直前のPIDを取得する

shellの `$!` で ~~直前の実行プロセス~~ 最後に実行したバックグラウンドプロセスのPIDを取得できる。
~~(少なくともbashでは使える)~~ => POSIXで定義されているので基本使用できるとのこと

```bash
#!/bin/bash
hoge_detach_process &
pid=$!
```

#`ps` コマンドから絞り込む

目で確認するだけか、同名のプロセスがない場合のみ可能。(直前であればPIDの番号の大きい方を使えば良いとは思われる)

```bash:
# ps の C オプションで指定する
$ ps --no-heading -C <prog_name> -o pid

# grep で絞り込む
$ hoge_detach_process &
$ ps -e -o pid,cmd | grep hoge_detach_process | grep -v grep | awk '{ print $1 }'

# 正規表現を使用する
$ ps -e -o pid,cmd | grep -E "^.*hoge_detach_process$" | awk '{print $1}'
$ ps -e -o pid,cmd | awk '/^.*hoge_detach_process$/ {print $1}'
```

# `pidof` コマンドを使用する

`pidof program_name` でPIDを取得できる。
組み込みLinux環境ではおそらく入ってないため使えない。

```bash
$ hoge_detach_process &
$ pidof hoge_detach_process
```

参考: [Linuxコマンド集 - 【 pidof 】 プロセスのpidを調べる：ITpro](http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230856/?rt=nocnt)
iOS AutoLayoutについて(Storyboard・Code)

AutolayoutとはviewにConstraint（制約）を付けることでレイアウトする方法。

下記の図に簡単にまとめってみました。

![autolayout2.png](https://qiita-image-store.s3.amazonaws.com/0/75387/8a4d28d0-0034-7ed3-d5a6-92f78752adf4.png)




Sample Code:
Fix size to 100X100 and distance 30X30;


        [self addSubview:self.testview];
        NSArray *c_v = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[testview(==100)]"
                                                               options:0
                                                               metrics:nil
                                                                 views:@{@"testview":self.testview}];
        
        NSArray *c_h = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[testview(==100)]"
                                                               options:0
                                                               metrics:nil
                                                                 views:@{@"testview":self.testview}];
        
        [self addConstraints:c_h];
        [self addConstraints:c_v];
        
        NSArray *l_v = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-hdistance-[testview]"
                                                               options:0
                                                               metrics:@{@"hdistance":@(30)}
                                                                 views:@{@"testview":self.testview}];
        
        NSArray *l_h = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[testview]-vdistance-|"
                                                               options:0
                                                               metrics:@{@"vdistance":@(30)}
                                                                 views:@{@"testview":self.testview}];
        
        [self addConstraints:l_v];
        [self addConstraints:l_h];

参考資料：
http://dev.classmethod.jp/references/ios-7-xcode-5-auto-layout-2/